private double DistanceInBaseUnits(string distance, out bool error) { error = false; if ((distance == null) || (distance == "")) { return(0); } string distanceUnitless = distance; esriCadastralDistanceUnits du = GeometryUtil.GetUnit(ref distanceUnitless, out error); double metersFactor = 1.0; if (_xmlConfig != null) { metersFactor = _xmlConfig.EntryUnitsPerMeter; // Entry units factor to meters? } if (du != esriCadastralDistanceUnits.eUnknown) { metersFactor = GeometryUtil.UnitFactor(du); // Did the user override the entry } // units with there own factor? double dblValue; double.TryParse(distanceUnitless, out dblValue); return(dblValue * (metersFactor / _xmlConfig.SpatialReferenceUnitsPerMeter)); // Distance in SR }
public static double UnitFactor(esriCadastralDistanceUnits du) { switch (du) { case esriCadastralDistanceUnits.eMeters: return 1.0; case esriCadastralDistanceUnits.eMillimeters: return 0.001; case esriCadastralDistanceUnits.eCentimeters: return 0.01; case esriCadastralDistanceUnits.eKilometers: return 1000.0; case esriCadastralDistanceUnits.eFeet: return 0.3048; case esriCadastralDistanceUnits.eYards: return 0.9144; case esriCadastralDistanceUnits.eInches: return 0.0254; case esriCadastralDistanceUnits.eMiles: return 1609.344; case esriCadastralDistanceUnits.eChains: return 20.1168; case esriCadastralDistanceUnits.eLinks: return 0.201168; case esriCadastralDistanceUnits.eRods: return 5.0292; case esriCadastralDistanceUnits.eSurveyFeet: return (1200.0 / 3937.0); case esriCadastralDistanceUnits.eSurveyYards: return (1200.0 / 3937.0) * 3.0; case esriCadastralDistanceUnits.eSurveyMiles: return (1200.0 / 3937.0 * 5280.0); case esriCadastralDistanceUnits.eSurveyChains: return (1200.0 / 3937.0 * 66.0); case esriCadastralDistanceUnits.eSurveyLinks: return (1200.0 / 3937.0 * 0.66); case esriCadastralDistanceUnits.eSurveyRods: return (1200.0 / 3937.0 * 16.5); case esriCadastralDistanceUnits.eRomanMiles: return 2375.0 / 1.5; case esriCadastralDistanceUnits.eNauticalMiles: return 1852.0; } return 1.0; }
static public esriCadastralDistanceUnits GetUnit(ref string distance, out bool error) { string[] units = { "m", "mm", "cm", "km", "ft", "'", "yd", "in", "\"", "mi", "ch", "k", "rd", "ftus", "ydus", "mius", "chus", "kus", "rdus", "rmi", "nm" }; error = false; string unitPart = ""; string numberPart = ""; bool started = false; foreach (char ch in distance) { if (!started) { started = char.IsLetter(ch); } if (started) { unitPart += char.ToLower(ch); } else { numberPart += ch; } } distance = numberPart; if (unitPart == "") { return(esriCadastralDistanceUnits.eUnknown); } // Compare strings Int32 index = 0; foreach (string unit in units) { if (unitPart == unit) { break; } index++; } esriCadastralDistanceUnits du = esriCadastralDistanceUnits.eUnknown; switch (index) { case 0: du = esriCadastralDistanceUnits.eMeters; break; case 1: du = esriCadastralDistanceUnits.eMillimeters; break; case 2: du = esriCadastralDistanceUnits.eCentimeters; break; case 3: du = esriCadastralDistanceUnits.eKilometers; break; case 4: case 5: du = esriCadastralDistanceUnits.eFeet; break; case 6: du = esriCadastralDistanceUnits.eYards; break; case 7: case 8: du = esriCadastralDistanceUnits.eInches; break; case 9: du = esriCadastralDistanceUnits.eMiles; break; case 10: du = esriCadastralDistanceUnits.eChains; break; case 11: du = esriCadastralDistanceUnits.eLinks; break; case 12: du = esriCadastralDistanceUnits.eRods; break; case 13: du = esriCadastralDistanceUnits.eSurveyFeet; break; case 14: du = esriCadastralDistanceUnits.eSurveyYards; break; case 15: du = esriCadastralDistanceUnits.eSurveyMiles; break; case 16: du = esriCadastralDistanceUnits.eSurveyChains; break; case 17: du = esriCadastralDistanceUnits.eSurveyLinks; break; case 18: du = esriCadastralDistanceUnits.eSurveyRods; break; case 19: du = esriCadastralDistanceUnits.eRomanMiles; break; case 20: du = esriCadastralDistanceUnits.eNauticalMiles; break; default: error = true; break; } return(du); }
static public double UnitFactor(esriCadastralDistanceUnits du) { switch (du) { case esriCadastralDistanceUnits.eMeters: return(1.0); case esriCadastralDistanceUnits.eMillimeters: return(0.001); case esriCadastralDistanceUnits.eCentimeters: return(0.01); case esriCadastralDistanceUnits.eKilometers: return(1000.0); case esriCadastralDistanceUnits.eFeet: return(0.3048); case esriCadastralDistanceUnits.eYards: return(0.9144); case esriCadastralDistanceUnits.eInches: return(0.0254); case esriCadastralDistanceUnits.eMiles: return(1609.344); case esriCadastralDistanceUnits.eChains: return(20.1168); case esriCadastralDistanceUnits.eLinks: return(0.201168); case esriCadastralDistanceUnits.eRods: return(5.0292); case esriCadastralDistanceUnits.eSurveyFeet: return(1200.0 / 3937.0); case esriCadastralDistanceUnits.eSurveyYards: return((1200.0 / 3937.0) * 3.0); case esriCadastralDistanceUnits.eSurveyMiles: return(1200.0 / 3937.0 * 5280.0); case esriCadastralDistanceUnits.eSurveyChains: return(1200.0 / 3937.0 * 66.0); case esriCadastralDistanceUnits.eSurveyLinks: return(1200.0 / 3937.0 * 0.66); case esriCadastralDistanceUnits.eSurveyRods: return(1200.0 / 3937.0 * 16.5); case esriCadastralDistanceUnits.eRomanMiles: return(2375.0 / 1.5); case esriCadastralDistanceUnits.eNauticalMiles: return(1852.0); } return(1.0); }
private bool RunAdjustment(ICadastralPacketManager pCadastralPacketManager, ICadastralAdjustment pCadAdj, ICadastralAdjustment3 pCadAdjEx, int Iteration, out double MaxShift, out string Summary) { esriCadastralDistanceUnits eDistUnits = esriCadastralDistanceUnits.esriCDUUSSurveyFoot; esriDirectionType eDirectType = esriDirectionType.esriDTNorthAzimuth; esriCadastralAreaUnits eAreaUnits = esriCadastralAreaUnits.esriCAUAcre; ICadastralPlan pCadPlan = (ICadastralPlan)pCadAdj; IEnumGSPlans pGSPlans = pCadPlan.GetPlans(enumGSPlansType.enumGSPlansWithParcels); pGSPlans.Reset(); IGSPlan pGSPlan = pGSPlans.Next(); while (pGSPlan != null) { eDistUnits = pGSPlan.DistanceUnits; eDirectType = pGSPlan.DirectionFormat; eAreaUnits = esriCadastralAreaUnits.esriCAUAcre; break; //just use the first one } double dMaxShift = -999; string sSummary = ""; MaxShift = dMaxShift; try { //get the units from the map plan sSummary = pCadAdj.PerformAdjustment(false, m_sBrowseFilePath, null, eDistUnits, eDirectType, eAreaUnits); double dMaxEast = -999; double dMaxNorth = -999; int iPt = -999; pCadAdjEx.GetMaxShiftData(ref iPt, ref dMaxEast, ref dMaxNorth); double dDistEast = -999; double dDistNorth = -999; IMetricUnitConverter pUnitConversion = (IMetricUnitConverter)pCadastralPacketManager; pUnitConversion.ConvertDistance(esriCadastralUnitConversionType.esriCUCFromMetric, dMaxEast, ref dDistEast); pUnitConversion.ConvertDistance(esriCadastralUnitConversionType.esriCUCFromMetric, dMaxNorth, ref dDistNorth); dMaxShift = Math.Sqrt((dDistEast * dDistEast) + (dDistNorth * dDistNorth)); return(true); } catch (Exception ex) { MessageBox.Show(ex.Message); return(false); } finally { MaxShift = dMaxShift; Summary = sSummary; } }