private static void WriteProjectedCoordinateSystem(ProjectedCoordinateSystem projCoordSystem) { string projP4 = ProjDB.ProjectionP4ByName(projCoordSystem.Projection.Name); if (projP4 == String.Empty) { throw new NotImplementedException("Unknown projection " + projCoordSystem.Projection.Name); } _p4parameters.Add(new P4Parameter("+proj", projP4)); WriteGeographicCoordinateSystem(projCoordSystem.GeographicCoordinateSystem); for (int i = 0; i < projCoordSystem.Projection.NumParameters; i++) { ProjectionParameter projParameter = projCoordSystem.Projection.GetParameter(i); switch (projParameter.Name.ToLower()) { case "latitude_of_origin": case "latitude_of_center": _p4parameters.Add(new P4Parameter("+lat_0", projParameter.Value.ToString(_nhi))); break; case "central_meridian": case "longitude_of_origin": case "longitude_of_center": _p4parameters.Add(new P4Parameter("+lon_0", projParameter.Value.ToString(_nhi))); break; case "scale_factor": _p4parameters.Add(new P4Parameter("+k", projParameter.Value.ToString(_nhi))); break; case "false_easting": _p4parameters.Add(new P4Parameter("+x_0", projParameter.Value.ToString(_nhi))); break; case "false_northing": _p4parameters.Add(new P4Parameter("+y_0", projParameter.Value.ToString(_nhi))); break; case "azimuth": _p4parameters.Add(new P4Parameter("+alpha", projParameter.Value.ToString(_nhi))); break; case "standard_parallel_1": _p4parameters.Add(new P4Parameter("+lat_1", projParameter.Value.ToString(_nhi))); break; case "standard_parallel_2": _p4parameters.Add(new P4Parameter("+lat_2", projParameter.Value.ToString(_nhi))); break; } } }
private static Projection ReadProjection(WktStreamTokenizer tokenizer, bool includeAuthority) { //tokenizer.NextToken();// PROJECTION tokenizer.ReadToken("PROJECTION"); tokenizer.ReadToken("[");//[ string projectionName = tokenizer.ReadDoubleQuotedWord(); tokenizer.ReadToken("]"); //] tokenizer.ReadToken(","); //, tokenizer.ReadToken("PARAMETER"); ParameterList paramList = new ParameterList(); while (tokenizer.GetStringValue() == "PARAMETER") { tokenizer.ReadToken("["); string paramName = tokenizer.ReadDoubleQuotedWord(); //added by monoGIS team: parameters names may be capitalized, but the code works only with lower-case! paramName = paramName.ToLower(); tokenizer.ReadToken(","); tokenizer.NextToken(); double paramValue = tokenizer.GetNumericValue(); tokenizer.ReadToken("]"); paramList.Add(paramName, paramValue); if (!tokenizer.TryReadToken(",")) { break; } if (!tokenizer.TryReadToken("PARAMETER")) { break; } } ProjectionParameter[] paramArray = new ProjectionParameter[paramList.Count]; int i = 0; foreach (string key in paramList.Keys) { ProjectionParameter param = new ProjectionParameter(); param.Name = key; param.Value = (double)paramList[key]; paramArray[i] = param; i++; } string authority = String.Empty; string authorityCode = String.Empty; Projection projection = new Projection(projectionName, paramArray, String.Empty, String.Empty, authority, authorityCode); return(projection); }