Skip to content

Commit 4ff5db0

Browse files
authored
Fixed an error when reading the AuthorityCode parameter and added a test for it (#129)
1 parent b0ad08c commit 4ff5db0

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/ProjNet/IO/CoordinateSystems/CoordinateSystemWktReader.cs

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ private static ProjectedCoordinateSystem ReadProjectedCoordinateSystem(WktStream
375375
string authority = string.Empty;
376376
long authorityCode = -1;
377377

378-
tokenizer.NextToken();
378+
var ct = tokenizer.NextToken();
379379
if (tokenizer.GetStringValue() == ",")
380380
{
381381
tokenizer.NextToken();
@@ -385,11 +385,18 @@ private static ProjectedCoordinateSystem ReadProjectedCoordinateSystem(WktStream
385385
tokenizer.NextToken();
386386
if (tokenizer.GetStringValue() == ",") tokenizer.NextToken();
387387
}
388-
if (tokenizer.GetStringValue() == ",") tokenizer.NextToken();
389-
if (tokenizer.GetStringValue() == "AUTHORITY")
388+
389+
while (ct != TokenType.Eol && ct != TokenType.Eof)
390390
{
391-
tokenizer.ReadAuthority(out authority, out authorityCode);
392-
tokenizer.ReadCloser(bracket);
391+
if (tokenizer.GetStringValue() == "AUTHORITY")
392+
{
393+
tokenizer.ReadAuthority(out authority, out authorityCode);
394+
break;
395+
}
396+
else
397+
{
398+
ct = tokenizer.NextToken();
399+
}
393400
}
394401
}
395402
//This is default axis values if not specified.

test/ProjNet.Tests/ProjNetIssues.cs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,5 +297,22 @@ public void TestGitHubIssue98()
297297
Assert.IsTrue(cmpdCs.HeadCoordinateSystem is ProjectedCoordinateSystem);
298298
Assert.IsTrue(cmpdCs.TailCoordinateSystem is VerticalCoordinateSystem);
299299
}
300+
301+
/// <summary>
302+
/// Tests if a coordinate system can be created from a Well-Known Text (WKT) representation
303+
/// and verifies that the authority code is correctly loaded.
304+
/// </summary>
305+
/// <remarks>
306+
/// This test ensures that the WKT parsing functionality of the CoordinateSystemFactory
307+
/// correctly initializes the coordinate system and its associated metadata, such as the authority code.
308+
/// </remarks>
309+
[Test]
310+
public void TestAuthorityNotLoadedIssue()
311+
{
312+
string wkt = "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\"]],PROJECTION[\"Mercator_1SP\"],PARAMETER[\"central_meridian\",0],PARAMETER[\"scale_factor\",1],PARAMETER[\"false_easting\",0],PARAMETER[\"false_northing\",0],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AXIS[\"X\",EAST],AXIS[\"Y\",NORTH],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\"]]";
313+
var coordinateSystem = CoordinateSystemFactory.CreateFromWkt(wkt);
314+
Assert.IsNotNull(coordinateSystem);
315+
Assert.AreEqual(coordinateSystem.AuthorityCode, 3857);
316+
}
300317
}
301318
}

0 commit comments

Comments
 (0)