private static void read_map_feature(XmlReader Input_XmlReader, Map_Info mapInfo)
        {
            string id_string = String.Empty;
            string name = String.Empty;
            string type = String.Empty;
            if (Input_XmlReader.MoveToAttribute("id"))
                id_string = Input_XmlReader.Value;
            if (Input_XmlReader.MoveToAttribute("name"))
                name = Input_XmlReader.Value;
            if (Input_XmlReader.MoveToAttribute("type"))
                type = Input_XmlReader.Value;

            // Determine the feature id
            long featid = -1;
            try
            {
                featid = Convert.ToInt64(id_string.Replace("FEAT", "").Replace("U", "").Replace("R", "").Replace("E", ""));
            }
            catch
            {
            }

            // Add this feature
            Map_Info_Tables.FeatureRow thisFeature = mapInfo.Add_Feature(featid, name, type);

            while (Input_XmlReader.Read())
            {
                if ((Input_XmlReader.NodeType == XmlNodeType.EndElement) && (Input_XmlReader.Name == "map:feature"))
                    return;

                if (Input_XmlReader.NodeType == XmlNodeType.Element)
                {
                    switch (Input_XmlReader.Name)
                    {
                        case "map:desc":
                            thisFeature.Description = Input_XmlReader.Value;
                            break;

                        case "map:coordinates":
                            for (int i = 0; i < Input_XmlReader.AttributeCount; i++)
                            {
                                Input_XmlReader.MoveToAttribute(i);
                                switch (Input_XmlReader.Name)
                                {
                                    case "units":
                                        thisFeature.Units = Input_XmlReader.Value;
                                        break;

                                    case "latitude":
                                        thisFeature.Latitude = Input_XmlReader.Value;
                                        break;

                                    case "longitude":
                                        thisFeature.Longitude = Input_XmlReader.Value;
                                        break;
                                }
                            }
                            break;

                        case "map:sheetref":
                            long x = -1;
                            long y = -1;
                            long sheetid = -1;
                            for (int i = 0; i < Input_XmlReader.AttributeCount; i++)
                            {
                                Input_XmlReader.MoveToAttribute(i);
                                switch (Input_XmlReader.Name)
                                {
                                    case "x":
                                        try
                                        {
                                            x = Convert.ToInt64(Input_XmlReader.Value);
                                        }
                                        catch
                                        {
                                        }
                                        break;

                                    case "y":
                                        try
                                        {
                                            y = Convert.ToInt64(Input_XmlReader.Value);
                                        }
                                        catch
                                        {
                                        }
                                        break;

                                    case "sheetid":
                                        try
                                        {
                                            sheetid = Convert.ToInt64(Input_XmlReader.Value.Replace("MS", "").Replace("SHEET", ""));
                                        }
                                        catch
                                        {
                                        }
                                        break;
                                }
                            }

                            if (sheetid > 0)
                            {
                                mapInfo.Add_Feature_Sheet_Link(thisFeature.FeatureID, sheetid, x, y);
                            }
                            break;

                        case "map:corpref":
                            if (Input_XmlReader.MoveToAttribute("corpid"))
                            {
                                try
                                {
                                    long corpid = Convert.ToInt64(Input_XmlReader.Value.Replace("COR", "").Replace("P", ""));
                                    mapInfo.Add_Feature_Corp_Link(thisFeature.FeatureID, corpid);
                                }
                                catch
                                {
                                }
                            }
                            break;

                        case "map:persid":
                            string reftype = String.Empty;
                            if (Input_XmlReader.MoveToAttribute("reftype"))
                                reftype = Input_XmlReader.Value;
                            if (Input_XmlReader.MoveToAttribute("persid"))
                            {
                                try
                                {
                                    long persid = Convert.ToInt64(Input_XmlReader.Value.Replace("PER", "").Replace("S", "").Replace("O", "").Replace("N", ""));
                                    mapInfo.Add_Feature_Person_Link(thisFeature.FeatureID, persid, reftype);
                                }
                                catch
                                {
                                }
                            }
                            break;
                    }
                }
            }
        }