/// <summary> /// Parses the entire projection from an esri string. In some cases, this will have /// default projection information since only geographic information is obtained. /// </summary> /// <param name="esriString">The ESRI string to parse</param> public void ReadEsriString(string esriString) { if (esriString.Contains("PROJCS") == false) { _geographicInfo.ReadEsriString(esriString); _isLatLon = true; _transform = new LongLat(); _transform.Init(this); return; } int iStart = esriString.IndexOf(@""","); _name = esriString.Substring(8, iStart - 9); int iEnd = esriString.IndexOf("PARAMETER"); string gcs = esriString.Substring(iStart + 1, iEnd - (iStart + 2)); _geographicInfo.ReadEsriString(gcs); _falseEasting = GetParameter("False_Easting", esriString); _falseNorthing = GetParameter("False_Northing", esriString); _centralMeridian = GetParameter("Central_Meridian", esriString); _standardParallel1 = GetParameter("Standard_Parallel_1", esriString); _standardParallel2 = GetParameter("Standard_Parallel_2", esriString); _scaleFactor = GetParameter("Scale_Factor", esriString); _longitudeOf1st = GetParameter("Longitude_Of_1st", esriString); _longitudeOf2nd = GetParameter("Longitude_Of_2nd", esriString); _latitudeOfOrigin = GetParameter("Latitude_Of_Origin", esriString); iStart = esriString.LastIndexOf("UNIT"); string unit = esriString.Substring(iStart, esriString.Length - iStart); _unit.ReadEsriString(unit); if (esriString.Contains("PROJECTION")) { iStart = esriString.IndexOf("PROJECTION") + 12; iEnd = esriString.IndexOf("]", iStart) - 1; string projection = esriString.Substring(iStart, iEnd - iStart); _transform = TransformManager.DefaultTransformManager.GetProjection(projection); _transform.Init(this); } UpdateParam(); }
/// <summary> /// Parses the entire projection from an esri string. In some cases, this will have /// default projection information since only geographic information is obtained. /// </summary> /// <param name="esriString">The ESRI string to parse</param> public void ReadEsriString(string esriString) { if(esriString.Contains("PROJCS") == false) { _geographicInfo.ReadEsriString(esriString); _isLatLon = true; _transform = new LongLat(); _transform.Init(this); return; } int iStart = esriString.IndexOf(@""","); _name = esriString.Substring(8, iStart - 8); int iEnd = esriString.IndexOf("PARAMETER"); string gcs = esriString.Substring(iStart+1,iEnd-(iStart+2)); _geographicInfo.ReadEsriString(gcs); _falseEasting = GetParameter("False_Easting", esriString); _falseNorthing = GetParameter("False_Northing", esriString); _centralMeridian = GetParameter("Central_Meridian", esriString); _longitudeOfCenter = GetParameter("Longitude_Of_Center", esriString); _standardParallel1 = GetParameter("Standard_Parallel_1", esriString); _standardParallel2 = GetParameter("Standard_Parallel_2", esriString); _scaleFactor = GetParameter("Scale_Factor", esriString); _azimuth = GetParameter("Azimuth", esriString); _longitudeOf1st = GetParameter("Longitude_Of_1st", esriString); _longitudeOf2nd = GetParameter("Longitude_Of_2nd", esriString); _latitudeOfOrigin = GetParameter("Latitude_Of_Origin", esriString) ?? GetParameter("Latitude_Of_Center", esriString); iStart = esriString.LastIndexOf("UNIT"); string unit = esriString.Substring(iStart, esriString.Length - iStart); _unit.ReadEsriString(unit); if (esriString.Contains("PROJECTION")) { iStart = esriString.IndexOf("PROJECTION") + 12; iEnd = esriString.IndexOf("]", iStart) - 1; string projection = esriString.Substring(iStart, iEnd - iStart); _transform = TransformManager.DefaultTransformManager.GetProjection(projection); _transform.Init(this); } }
/// <summary> /// Attempts to parse known parameters from the set of proj4 parameters /// </summary> /// <param name="proj4string"></param> public void ReadProj4String(string proj4string) { string[] paramList = proj4string.Split('+'); foreach (string s in paramList) { if (s == "") { continue; } if (s == "no_defs") { continue; } string[] temp = s.Split('='); string name = temp[0].Trim(); string value = ""; if (temp.Length > 1) { value = temp[1]; if (value != null) { value = value.Trim(); } } if (_parameters.ContainsKey(name)) { // some "+to" parameters exist... but I'm not sure what to do with them // asside from the fact that they seem to specify a second projection? } else { _parameters.Add(name, value); } } GeographicInfo.ReadProj4Parameters(_parameters); if (_parameters.ContainsKey("x_0")) { _falseEasting = double.Parse(_parameters["x_0"]); } if (_parameters.ContainsKey("y_0")) { _falseNorthing = double.Parse(_parameters["y_0"]); } if (_parameters.ContainsKey("k")) { _scaleFactor = double.Parse(_parameters["k"]); } if (_parameters.ContainsKey("k_0")) { _scaleFactor = double.Parse(_parameters["k_0"]); } if (_parameters.ContainsKey("lat_0")) { _latitudeOfOrigin = double.Parse(_parameters["lat_0"]); } if (_parameters.ContainsKey("lat_1")) { _standardParallel1 = double.Parse(_parameters["lat_1"]); } if (_parameters.ContainsKey("lat_ts")) { _standardParallel1 = double.Parse(_parameters["lat_ts"]); } if (_parameters.ContainsKey("lat_2")) { _standardParallel2 = double.Parse(_parameters["lat_2"]); } if (_parameters.ContainsKey("lon_0")) { _centralMeridian = double.Parse(_parameters["lon_0"]); } if (_parameters.ContainsKey("south")) { _south = true; } if (_parameters.ContainsKey("zone")) { _zone = int.Parse(_parameters["zone"]); } if (_parameters.ContainsKey("geoc")) { _geoc = bool.Parse(_parameters["geoc"]) && (GeographicInfo.Datum.Spheroid.EccentricitySquared() != 0); } if (_parameters.ContainsKey("over")) { _over = bool.Parse(_parameters["over"]); } if (_parameters.ContainsKey("proj")) { _transform = TransformManager.DefaultTransformManager.GetProj4(_parameters["proj"]); _transform.Init(this); //switch (_transform.ProjectionName) //{ // case ProjectionNames.North_Polar_Stereographic: // case ProjectionNames.South_Polar_Stereographic: // if (_standardParallel1 != null) // { // _scaleFactor = Proj.CalScaleFactorFromStandardParallel((double)_standardParallel1); // _standardParallel1 = null; // } // break; //} } UpdateParam(); }
/// <summary> /// Attempts to parse known parameters from the set of proj4 parameters /// </summary> /// <param name="proj4string"></param> public void ReadProj4String(string proj4string) { string[] paramList = proj4string.Split('+'); foreach (string s in paramList) { if (s == "") continue; if (s == "no_defs") continue; string[] temp = s.Split('='); string name = temp[0].Trim(); string value = ""; if (temp.Length > 1) { value = temp[1]; if (value != null) value = value.Trim(); } if(_parameters.ContainsKey(name)) { // some "+to" parameters exist... but I'm not sure what to do with them // asside from the fact that they seem to specify a second projection? } else { _parameters.Add(name, value); } } GeographicInfo.ReadProj4Parameters(_parameters); if(_parameters.ContainsKey("lonc")) { _longitudeOfCenter = double.Parse(_parameters["lonc"]); } if(_parameters.ContainsKey("alhpa")) { _azimuth = double.Parse(_parameters["alpha"]); } if (_parameters.ContainsKey("x_0")) { _falseEasting = double.Parse(_parameters["x_0"]); } if (_parameters.ContainsKey("y_0")) { _falseNorthing = double.Parse(_parameters["y_0"]); } if (_parameters.ContainsKey("k")) { _scaleFactor = double.Parse(_parameters["k"]); } if (_parameters.ContainsKey("lat_0")) { _latitudeOfOrigin = double.Parse(_parameters["lat_0"]); } if(_parameters.ContainsKey("lat_1")) { _standardParallel1 = double.Parse(_parameters["lat_1"]); } if (_parameters.ContainsKey("lat_ts")) { _standardParallel1 = double.Parse(_parameters["lat_ts"]); } if (_parameters.ContainsKey("lat_2")) { _standardParallel2 = double.Parse(_parameters["lat_2"]); } if (_parameters.ContainsKey("lon_0")) { _centralMeridian = double.Parse(_parameters["lon_0"]); } if (_parameters.ContainsKey("south")) { _south = true; } if (_parameters.ContainsKey("zone")) { _zone = int.Parse(_parameters["zone"]); } if (_parameters.ContainsKey("geoc")) { _geoc = bool.Parse(_parameters["geoc"]) && (GeographicInfo.Datum.Spheroid.EccentricitySquared() != 0); } if (_parameters.ContainsKey("over")) { _over = bool.Parse(_parameters["over"]); } if (_parameters.ContainsKey("proj")) { _transform = TransformManager.DefaultTransformManager.GetProj4(_parameters["proj"]); _transform.Init(this); } }