void CLocation::SetMember(size_t i, const string& str)
{
    _ASSERTE(i < NB_MEMBER);

    switch (i)
    {
    case ID:
        m_ID = str;
        break;
    case NAME:
        m_name = str;
        break;
    case LAT:
        m_lat = ToDouble(str);
        break;
    case LON:
        m_lon = ToDouble(str);
        break;
    case ELEV:
        m_elev = ToDouble(str);
        break;
    case SSI:
    {
        StringVector SSIs(str.c_str(), "{}");
        for (StringVector::const_iterator it = SSIs.begin(); it != SSIs.end(); it++)
        {
            string::size_type pos = it->find(':', 0);
            if (pos < string::npos)
                SetSSI(it->substr(0, pos), it->substr(pos + 1));
        }

        break;
    }

    default:
        _ASSERTE(false);
    }
}