def _extract_geo(d, _root):
    """
    Extract geo data from input
    :param dict d: Geo
    :return dict _root: Root data
    """
    logger_ts.info("enter ts_extract_geo")
    # May not need these if the key names are corrected in the future.
    # COORDINATE ORDER: [LON, LAT, ELEV]
    x = ['geo_meanLon', 'geo_meanLat', 'geo_meanElev']
    # Iterate through geo dictionary
    for k, v in d.items():
        # Case 1: Coordinates special naming
        if k == 'coordinates':
            for idx, p in enumerate(v):
                try:
                    # Check that our value is not in EMPTY.
                    if isinstance(p, str):
                        if p.lower() in EMPTY:
                            # If elevation is a string or 0, don't record it
                            if idx != 2:
                                # If long or lat is empty, set it as 0 instead
                                _root[x[idx]] = 0
                        else:
                            # Set the value as a float into its entry.
                            _root[x[idx]] = float(p)
                    # Value is a normal number, or string representation of a number
                    else:
                        # Set the value as a float into its entry.
                        _root[x[idx]] = float(p)
                except IndexError as e:
                    logger_ts.warn("_extract_geo: IndexError: idx: {}, val: {}, {}".format(idx, p, e))
        # Case 2: Any value that is a string can be added as-is
        elif isinstance(v, str):
            if k == 'meanElev':
                try:
                    # Some data sets have meanElev listed under properties for some reason.
                    _root['geo_' + k] = float(v)
                except ValueError as e:
                    # If the value is a string, then we don't want it
                    logger_ts.warn("_extract_geo: ValueError: meanElev is a string: {}, {}".format(v, e))
            else:
                _root['geo_' + k] = v
        # Case 3: Nested dictionary. Recursion
        elif isinstance(v, dict):
            _root = _extract_geo(v, _root)
    return _root