Repository: sunpy/sunpy

Issue:
observer_coordinate on KCor Maps don't have an observation time
### Describe the bug

When using Map on a KCor jp2 image (for example https://helioviewer.org/jp2/KCor/2022/03/05/735/2022_03_05__00_00_32__MLSO_KCOR_KCOR_white-light-pB.jp2) 

There is no obstime on the `observer_coordinate` field.

### To Reproduce

Download the above image

from sunpy.map import Map

m = Map("2022_03_05__00_00_32__MLSO_KCOR_KCOR_white-light-pB.jp2")
print(m.date) # The date here is correct
print(m.observer_coordinate) # See there is no obstime on the coordinate.


### Screenshots

<img width="950" alt="image" src="https://user-images.githubusercontent.com/94071409/194123644-a77daf94-49bc-4348-91bd-17465b6900c2.png">


### System Details

Sunpy version: 94e34cd72bb35b1ef25579aebdec6b468c24ebbb

==============================
sunpy Installation Information
==============================

General
#######
OS: Oracle Linux Server (8.6, Linux 5.4.17-2136.311.6.el8uek.x86_64)
Arch: 64bit, (x86_64)
sunpy: 4.1.dev461+g94e34cd72
Installation path: /var/www/api.helioviewer.org/py_venv_local_sunpy/lib64/python3.8/site-packages/sunpy-4.1.dev461+g94e34cd72.dist-info

Required Dependencies
#####################
astropy: 5.0.4
numpy: 1.22.3
packaging: 21.3
parfive: 1.5.1

Optional Dependencies
#####################
asdf: Missing asdf>=2.8.0; extra == "asdf"
asdf-astropy: Missing asdf-astropy>=0.1.1; extra == "asdf"
beautifulsoup4: 4.11.1
cdflib: Missing cdflib!=0.4.0,>=0.3.19; extra == "timeseries"
dask: Missing dask[array]>=2.0.0; extra == "dask"
drms: 0.6.2
glymur: 0.9.9
h5netcdf: Missing h5netcdf>=0.8.1; extra == "timeseries"
h5py: Missing h5py>=3.1.0; extra == "timeseries"
lxml: 4.8.0
matplotlib: 3.5.1
mpl-animators: Missing mpl-animators>=1.0.0; extra == "map" or "visualization"
pandas: 1.4.2
python-dateutil: 2.8.2
reproject: 0.8
scikit-image: Missing scikit-image>=0.16.0; extra == "image"
scipy: 1.8.0
sqlalchemy: Missing sqlalchemy>=1.3.4; extra == "database"
tqdm: 4.64.0
zeep: 4.1.0
>>> 


### Installation method

pip, git checkout


Discussion:

Resolving patch:
diff --git a/sunpy/map/mapbase.py b/sunpy/map/mapbase.py
--- a/sunpy/map/mapbase.py
+++ b/sunpy/map/mapbase.py
@@ -1149,8 +1149,8 @@ def _supported_observer_coordinates(self):
     @property
     def _default_observer_coordinate(self):
         """
-        The default obsever coordinate. This can be overriden by map sources
-        to provide a preferred observer coordinate.
+        The default observer coordinate to use when there is insufficient information
+        in the metadata. This should be overridden by map sources as appropriate.
         """
 
     def _remove_existing_observer_location(self):
@@ -1167,11 +1167,7 @@ def observer_coordinate(self):
         """
         The Heliographic Stonyhurst Coordinate of the observer.
         """
-        default = self._default_observer_coordinate
-        if default is not None:
-            return default
-
-        warning_message = ["Missing metadata for observer: assuming Earth-based observer."]
+        warning_message = []
         for keys, kwargs in self._supported_observer_coordinates:
             missing_keys = set(keys) - self.meta.keys()
             if not missing_keys:
@@ -1192,9 +1188,20 @@ def observer_coordinate(self):
                 frame = kwargs['frame'] if isinstance(kwargs['frame'], str) else kwargs['frame'].name
                 warning_message.append(f"For frame '{frame}' the following metadata is missing: "
                                        f"{','.join(missing_keys)}")
-        warning_message.append("")
-        warn_metadata("\n".join(warning_message), stacklevel=3)
-        return get_earth(self.date)
+
+        default = self._default_observer_coordinate
+        if default is not None:
+            # If a map source specifies a default observer, we log a message at the debug level
+            warning_message = (["Missing metadata for observer: assuming custom default observer."]
+                               + warning_message)
+            log.debug("\n".join(warning_message))
+            return default
+        else:
+            # If a map source does not specify a default observer, we assume Earth center and warn
+            warning_message = (["Missing metadata for observer: assuming Earth-based observer."]
+                               + warning_message + [""])
+            warn_metadata("\n".join(warning_message), stacklevel=3)
+            return get_earth(self.date)
 
     @property
     def heliographic_latitude(self):
diff --git a/sunpy/map/sources/mlso.py b/sunpy/map/sources/mlso.py
--- a/sunpy/map/sources/mlso.py
+++ b/sunpy/map/sources/mlso.py
@@ -1,9 +1,8 @@
 import astropy.units as u
-from astropy.coordinates import SkyCoord
+from astropy.coordinates import EarthLocation, SkyCoord
 from astropy.visualization import PowerStretch
 from astropy.visualization.mpl_normalize import ImageNormalize
 
-from sunpy.coordinates import sun
 from sunpy.map import GenericMap
 from sunpy.map.sources.source_type import source_stretch
 
@@ -27,8 +26,19 @@ class KCorMap(GenericMap):
     ----------
     * `COSMO Mission Page <https://www2.hao.ucar.edu/cosmo>`_
     * `KCOR Instrument Page <https://www2.hao.ucar.edu/mlso/instruments/mlso-kcor-coronagraph>`_
+
+    Notes
+    -----
+    Observer location: The standard K-Cor metadata does not include the full 3D
+    location of the observer.  There are 2D Carrington heliographic coordinates, but
+    using them is not recommended because the calculation of Carrington longitude
+    differs from ``sunpy`` (see :ref:`sunpy-coordinates-carrington`).  Instead, we
+    assume the default observer location to be the geographic location of MLSO.
     """
 
+    # MLSO location per Wikipedia (https://en.wikipedia.org/wiki/Mauna_Loa_Solar_Observatory)
+    _earth_location = EarthLocation(-155.576*u.deg, 19.536*u.deg, 3394*u.m)
+
     def __init__(self, data, header, **kwargs):
         super().__init__(data, header, **kwargs)
 
@@ -63,12 +73,7 @@ def waveunit(self):
 
     @property
     def _default_observer_coordinate(self):
-        # Override missing metadata in the observer coordinate
-        dsun_obs = self.meta.get('dsun_obs', sun.earth_distance(self.date).to_value(u.m))
-        return SkyCoord(self.meta.get('hgln_obs', 0.0) * u.deg,
-                        self.meta.get('hglt_obs', 0.0) * u.deg,
-                        self.meta.get('dsun_obs', dsun_obs) * u.m,
-                        frame="heliographic_stonyhurst")
+        return SkyCoord(self._earth_location.get_itrs(self.date)).heliographic_stonyhurst
 
     @classmethod
     def is_datasource_for(cls, data, header, **kwargs):


Test patch:
diff --git a/sunpy/data/test/20181209_180305_kcor_l1.5_rebinned.header b/sunpy/data/test/20181209_180305_kcor_l1.5_rebinned.header
deleted file mode 100644
--- a/sunpy/data/test/20181209_180305_kcor_l1.5_rebinned.header
+++ /dev/null
@@ -1,124 +0,0 @@
-SIMPLE  =                    T / conforms to FITS standard                      
-BITPIX  =                  -64 / array data type                                
-NAXIS   =                    2 / number of array dimensions                     
-NAXIS1  =                  128                                                  
-NAXIS2  =                  128                                                  
-DATE-OBS= '2018-12-09T18:03:05' / UTC observation start                         
-DATE-END= '2018-12-09T18:03:20' / UTC observation end                           
-TIMESYS = 'UTC     '           / date/time system: Coordinated Universal Time   
-DATE_HST= '2018-12-09T08:03:05' / MLSO observation date [HST]                   
-LOCATION= 'MLSO    '           / Mauna Loa Solar Observatory, Hawaii            
-ORIGIN  = 'NCAR/HAO'           / Nat.Ctr.Atmos.Res. High Altitude Observatory   
-TELESCOP= 'COSMO K-Coronagraph' / COSMO: COronal Solar Magnetism Observatory    
-INSTRUME= 'COSMO K-Coronagraph'                                                 
-OBJECT  = 'Solar K-Corona'     / white light polarization brightness            
-DATATYPE= 'science '           / type of data acquired                          
-OBSERVER= 'Rose    '           / name of Mauna Loa observer                     
-DARKSHUT= 'out     '           / dark shutter open(out) or closed(in)           
-COVER   = 'out     '           / cover in or out of the light beam              
-DIFFUSER= 'out     '           / diffuser in or out of the light beam           
-CALPOL  = 'out     '           / calibration polarizer in or out of beam        
-CALPANG =                360.0 / calibration polarizer angle                    
-EXPTIME =               0.0025 / [s] exposure time for each frame               
-NUMSUM  =                  512 / # frames summed per L0 img for each pol state  
-QUALITY = 'ok      '           / Image quality                                  
-LEVEL   = 'L1.5    '           / Level 1.5 pB Intensity is fully-calibrated     
-DATE_DP = '2018-12-09T18:22:11' / L1.5 processing date (UTC)                    
-DPSWID  = '1.5.9 [3e62439]'    / L1.5 data processing software (2018-11-28)     
-RCAMCORR= 'camera_calibration_MV-D1024E-CL-13891_02.5000_lut20160716.ncdf'      
-TCAMCORR= 'camera_calibration_MV-D1024E-CL-13890_02.5000_lut20160716.ncdf'      
-CALFILE = '20181207_194126_kcor_cal_v21_1.5.9_2.5ms.ncdf' / calibration file    
-DISTORT = 'dist_coeff_20170522_205121.sav' / distortion file                    
-SKYTRANS=                1.037 / sky transmission correction normalized to gain 
-BIASCORR=                3E-09 / bias added after sky polarization correction   
-ROLLCORR=                  0.5 / [deg] clockwise offset for spar polar axis alig
-DMODSWID= '2016-05-26'         / date of demodulation software                  
-OBSSWID = '' / version of the observing software                                
-BUNIT   = 'B/Bsun  '           / brightness with respect to solar disk          
-BOPAL   =             1.38E-05 / [B/Bsun] Opal Transmission by Elmore at 775nm  
-DATAMIN =    -1.5948684636E-05 / minimum  value of  data                        
-DATAMAX = 9.14042089884999E-06 / maximum  value of  data                        
-DISPMIN =               -2E-08 / minimum  value for display                     
-DISPMAX =                7E-07 / maximum  value for display                     
-DISPEXP =                  0.7 / exponent value for display (d=b^DISPEXP)       
-DISPGAM =                  0.6 / gamma value for color table correction         
-WCSNAME = 'helioprojective-cartesian' / World Coordinate System (WCS) name      
-CTYPE1  = 'HPLN-TAN'           / [deg] helioprojective west angle: solar X      
-CRPIX1  =                 64.5 / [pixel]  solar X center (index origin=1)       
-CRVAL1  =    2.821499999826771 / [arcsec] solar X sun center                    
-CDELT1  =               45.144 / [arcsec/pix] solar X increment = platescale    
-CUNIT1  = 'arcsec  '                                                            
-CTYPE2  = 'HPLT-TAN'           / [deg] helioprojective north angle: solar Y     
-CRPIX2  =                 64.5 / [pixel]  solar Y center (index origin=1)       
-CRVAL2  =    2.821499999575429 / [arcsec] solar Y sun center                    
-CDELT2  =               45.144 / [arcsec/pix] solar Y increment = platescale    
-CUNIT2  = 'arcsec  '                                                            
-INST_ROT=                  0.0 / [deg] rotation of the image wrt solar north    
-PC1_1   =                  1.0 / coord transform matrix element (1, 1) WCS std. 
-PC1_2   =                  0.0 / coord transform matrix element (1, 2) WCS std. 
-PC2_1   =                  0.0 / coord transform matrix element (2, 1) WCS std. 
-PC2_2   =                  1.0 / coord transform matrix element (2, 2) WCS std. 
-RCAMXCEN=    513.3099999999999 / [pixel] camera 0 raw X-coord occulting center  
-RCAMYCEN=               514.28 / [pixel] camera 0 raw Y-coord occulting center  
-RCAM_RAD=               180.42 / [pixel] camera 0 raw occulter radius           
-RCAM_DCX=               513.79 / [pixel] camera 0 dist cor occulter X center    
-RCAM_DCY=               511.84 / [pixel] camera 0 dist cor occulter Y center    
-RCAM_DCR=               182.71 / [pixel] camera 0 dist corrected occulter radius
-TCAMXCEN=               515.09 / [pixel] camera 1 raw X-coord occulting center  
-TCAMYCEN=               514.58 / [pixel] camera 1 raw Y-coord occulting center  
-TCAM_RAD=               182.53 / [pixel] camera 1 raw occulter radius           
-TCAM_DCX=    514.0599999999999 / [pixel] camera 1 dist cor occulter X center    
-TCAM_DCY=                512.9 / [pixel] camera 1 dist cor occulter Y center    
-TCAM_DCR=               182.21 / [pixel] camera 1 dist corrected occulter radius
-RSUN_OBS=              973.672 / [arcsec] solar radius                          
-RSUN    =              973.672 / [arcsec] solar radius (old standard keyword)   
-R_SUN   =               172.55 / [pixel] solar radius                           
-SOLAR_P0=               12.562 / [deg] solar P angle                            
-CRLT_OBS=                 -0.2 / [deg] solar B angle: Carrington latitude       
-CRLN_OBS=              141.545 / [deg] solar L angle: Carrington longitude      
-CAR_ROT =                 2211 / Carrington rotation number                     
-SOLAR_RA=              256.544 / [h]   solar Right Ascension (hours)            
-SOLARDEC=               -22.86 / [deg] solar Declination (deg)                  
-WAVELNTH=                  735 / [nm] center wavelength   of bandpass filter    
-WAVEFWHM=                   30 / [nm] full width half max of bandpass filter    
-O1FOCS  =              135.291 / [mm] objective lens (01) focus position        
-RCAMFOCS=                  0.0 / [mm] camera 0 focus position                   
-TCAMFOCS=                  0.0 / [mm] camera 1 focus position                   
-MODLTRT =                 35.1 / [deg C] modulator temperature                  
-SGSDIMV =    8.516999999999999 / [V] mean Spar Guider Sys. (SGS) DIM signal     
-SGSDIMS =             0.008683 / [V] SGS DIM signal standard deviation          
-SGSSUMV =    8.518000000000001 / [V] mean SGS sum signal                        
-SGSRAV  =            -0.000321 / [V] mean SGS RA error signal                   
-SGSRAS  =              0.01398 / [V] mean SGS RA error standard deviation       
-SGSRAZR =                 15.0 / [arcsec] SGS RA zeropoint offset               
-SGSDECV =            -0.000121 / [V] mean SGS DEC error signal                  
-SGSDECS =              0.01408 / [V] mean SGS DEC error standard deviation      
-SGSDECZR=                 -5.0 / [arcsec] SGS DEC zeropoint offset              
-SGSSCINT=                1.957 / [arcsec] SGS scintillation seeing estimate     
-SGSLOOP =                    1 / SGS loop closed fraction                       
-SGSSUMS =             0.007424 / [V] SGS sum signal standard deviation          
-CALPOLID= 'AP38-006T-1'        / ID polarizer                                   
-DIFFSRID= 'mk4-opal'           / ID diffuser                                    
-FILTERID= 'ANDV13425-01'       / ID bandpass filter                             
-O1ID    = 'Optimax '           / ID objective (O1) lens                         
-LYOTSTOP= '35mm    '           / Specifies if the 2nd lyot stop is in the beam  
-OCCLTRID= 'OC-1018.9"'         / ID occulter                                    
-MODLTRID= 'A       '           / ID modulator                                   
-RCAMID  = 'MV-D1024E-CL-13891' / ID camera 0 (reflected)                        
-TCAMID  = 'MV-D1024E-CL-13890' / ID camera 1 (transmitted)                      
-RCAMLUT = '13891_20160716'     / ID LUT for camera 0                            
-TCAMLUT = '13890_20160716'     / ID LUT for camera 1                            
-DATACITE= 'https://doi.org/10.5065/D69G5JV8' / URL for DOI                      
-WAVEUNIT= 'nanometer'                                                           
-HIERARCH observatory = 'MLSO    '                                               
-DETECTOR= 'KCor    '                                                            
-DSUN_OBS=    147338601352.7484                                                  
-COMMENT The COSMO K-coronagraph is a 20-cm aperture, internally occulted coronag
-COMMENT raph, which observes the polarization brightness of the corona with a fi
-COMMENT eld-of-view from ~1.05 to 3 solar radii in a wavelength range from 720 t
-COMMENT o 750 nm. Nominal time cadence is 15 seconds.                           
-HISTORY Level 1.5 calibration and processing steps: dark current subtracted; gai
-HISTORY n correction; apply polarization demodulation matrix; applydistortion co
-HISTORY rrection ; align each camera to center, rotate to solarnorth and combine
-HISTORY  cameras ; coordinate transformation from cartesianto tangential polariz
-HISTORY ation; remove sky polarization; correct forsky transmission.            
\ No newline at end of file
diff --git a/sunpy/data/test/20181209_180305_kcor_l2.header b/sunpy/data/test/20181209_180305_kcor_l2.header
new file mode 100644
--- /dev/null
+++ b/sunpy/data/test/20181209_180305_kcor_l2.header
@@ -0,0 +1,142 @@
+SIMPLE  =                    T / Written by IDL:  Tue Jan 25 14:56:20 2022      
+BITPIX  =                  -32 / bits per pixel                                 
+NAXIS   =                    2 / number of dimensions; FITS image               
+NAXIS1  =                 1024 /Number of positions along axis 1                
+NAXIS2  =                 1024 /Number of positions along axis 2                
+EXTEND  =                    F / no FITS extensions                             
+DATE-OBS= '2018-12-09T18:03:05' / UTC observation start                         
+DATE-END= '2018-12-09T18:03:20' / UTC observation end                           
+TIMESYS = 'UTC     '           / date/time system: Coordinated Universal Time   
+DATE_HST= '2018-12-09T08:03:05' / MLSO observation date [HST]                   
+LOCATION= 'MLSO    '           / Mauna Loa Solar Observatory, Hawaii            
+ORIGIN  = 'NCAR/HAO'           / Nat.Ctr.Atmos.Res. High Altitude Observatory   
+TELESCOP= 'COSMO K-Coronagraph' / COSMO: COronal Solar Magnetism Observatory    
+INSTRUME= 'COSMO K-Coronagraph' /                                               
+WAVELNTH=                  735 / [nm] center wavelength of bandpass filter      
+WAVEFWHM=                   30 / [nm] full width half max of bandpass filter    
+OBJECT  = 'Solar K-Corona'     / white light polarization brightness            
+DATATYPE= 'science '           / type of data acquired                          
+OBSERVER= 'Rose    '           / name of Mauna Loa observer                     
+SKYTRANS=                1.073 / sky transmission correction normalized to gain 
+BIASCORR=                    0 / bias added after sky polarization correction   
+SKYPOLRM= 'subtraction'        / sky polarization removal method                
+COMMENT                          HARDWARE MECHANISM KEYWORDS GROUPED BELOW      
+DARKSHUT= 'out     '           / dark shutter open (out) or closed (in)         
+COVER   = 'out     '           / cover in or out of the light beam              
+DIFFUSER= 'out     '           / diffuser in or out of the light beam           
+CALPOL  = 'out     '           / calibration polarizer in or out of beam        
+CALPANG =              360.000 / calibration polarizer angle                    
+EXPTIME =             0.002500 / [s] exposure time for each frame               
+NUMSUM  =                  512 / # frames summed per L0 img for each pol state  
+COMMENT                          SCALING KEYWORDS GROUPED BELOW                 
+BUNIT   = 'B/Bsun  '           / brightness with respect to solar disk          
+BOPAL   =             1.38E-05 / [B/Bsun] opal transmission by Elmore at 775nm  
+BZERO   =                    0 / offset for unsigned integer data               
+BSCALE  =                1.000 / physical = data * BSCALE + BZERO               
+DATAMIN =          -2.9007E-06 / minimum value of data                          
+DATAMAX =           1.2123E-06 / maximum value of data                          
+DISPMIN =               -7E-09 / minimum value for display                      
+DISPMAX =                7E-07 / maximum value for display                      
+DISPEXP =                 0.70 / exponent value for display (d=b^DISPEXP)       
+DISPGAM =                 0.70 / gamma value for color table correction         
+COMMENT                          COORDINATE SYSTEM KEYWORDS GROUPED BELOW       
+WCSNAME = 'helioprojective-cartesian' / World Coordinate System (WCS) name      
+CTYPE1  = 'HPLN-TAN'           / [deg] helioprojective west angle: solar X      
+CRPIX1  =               512.50 / [pixel] solar X center (index origin=1)        
+CRVAL1  =                 0.00 / [arcsec] solar X sun center                    
+CDELT1  =               5.6430 / [arcsec/pixel] solar X increment = platescale  
+CUNIT1  = 'arcsec  '           / unit of CRVAL1                                 
+CTYPE2  = 'HPLT-TAN'           / [deg] helioprojective north angle: solar Y     
+CRPIX2  =               512.50 / [pixel] solar Y center (index origin=1)        
+CRVAL2  =                 0.00 / [arcsec] solar Y sun center                    
+CDELT2  =               5.6430 / [arcsec/pixel] solar Y increment = platescale  
+CUNIT2  = 'arcsec  '           / unit of CRVAL2                                 
+INST_ROT=                0.000 / [deg] rotation of the image wrt solar north    
+PC1_1   =                1.000 / coord transform matrix element (1, 1) WCS std. 
+PC1_2   =                0.000 / coord transform matrix element (1, 2) WCS std. 
+PC2_1   =                0.000 / coord transform matrix element (2, 1) WCS std. 
+PC2_2   =                1.000 / coord transform matrix element (2, 2) WCS std. 
+COMMENT                          PROCESSING SOFTWARE KEYWORDS GROUPED BELOW     
+QUALITY = 'ok      '           / image quality                                  
+LEVEL   = 'L2      '           / level 2 pB intensity is fully-calibrated       
+SOCKETCA= 'socketcam.exe'      / camera interface software filename             
+DATE_DP = '2022-01-25T21:56:20' / L2 processing date (UTC)                      
+DPSWID  = '2.0.80 [e017cfc]'   / L2 data processing software (2022-01-23)       
+RCAMCORR= 'camera_calibration_MV-D1024E-CL-13891_02.5000_lut13891-20160716.ncdf'
+TCAMCORR= 'camera_calibration_MV-D1024E-CL-13890_02.5000_lut13890-20160716.ncdf'
+XCAMSH0 =                    0 / [px] image shift, + to right                   
+XCAMSH1 =                    0 / [px] image shift, + to right                   
+XCAMCSH0=                    2 / [px] cam corr shift to align w/ img, + to left 
+XCAMCSH1=                    2 / [px] cam corr shift to align w/ img, + to left 
+FIXCAMLC=                    1 / interp over bad pixels in camera lin correction
+CALFILE = '20181209_200341_kcor_cal_v21_2.0.65_2.500ms.ncdf' / calibration file 
+DISTORT = 'dist_coeff_20170522_205121.sav' / distortion file                    
+CAMERAS = 'both    '           / cameras used in processing                     
+ROLLCORR=                  0.7 / [deg] clockwise offset: spar polar axis align. 
+DMODSWID= '2016-05-26'         / date of demodulation software                  
+OBSSWID = '        '           / version of the LabVIEW observing software      
+COMMENT                          CAMERA OCCULTING KEYWORDS GROUPED BELOW        
+RCAMXCEN=               511.31 / [pixel] camera 0 raw X-coord occulting center  
+RCAMYCEN=               514.28 / [pixel] camera 0 raw Y-coord occulting center  
+RCAM_RAD=               180.42 / [pixel] camera 0 raw occulter radius           
+RCAM_DCX=               511.76 / [pixel] camera 0 dist cor occulter X center    
+RCAM_DCY=               511.82 / [pixel] camera 0 dist cor occulter Y center    
+RCAM_DCR=               182.71 / [pixel] camera 0 dist corrected occulter radius
+TCAMXCEN=               513.09 / [pixel] camera 1 raw X-coord occulting center  
+TCAMYCEN=               514.53 / [pixel] camera 1 raw Y-coord occulting center  
+TCAM_RAD=               182.55 / [pixel] camera 1 raw occulter radius           
+TCAM_DCX=               512.09 / [pixel] camera 1 dist cor occulter X center    
+TCAM_DCY=               512.94 / [pixel] camera 1 dist cor occulter Y center    
+TCAM_DCR=               182.20 / [pixel] camera 1 dist corrected occulter radius
+RCAMPOLS=                    0 / first state used in polarization demodulation  
+TCAMPOLS=                    0 / first state used in polarization demodulation  
+COMMENT                          EPHEMERAL KEYWORDS GROUPED BELOW               
+RSUN_OBS=               974.35 / [arcsec] solar radius using ref radius 959.63" 
+RSUN    =               974.35 / [arcsec] solar radius (old standard keyword)   
+R_SUN   =               172.67 / [pixel] solar radius                           
+SOLAR_P0=               12.562 / [deg] solar P angle applied (image has N up)   
+CRLT_OBS=               -0.200 / [deg] solar B angle: Carrington latitude       
+CRLN_OBS=              141.545 / [deg] solar L angle: Carrington longitude      
+CAR_ROT =                 2211 / Carrington rotation number                     
+SOLAR_RA=              256.544 / [h] solar right ascension (hours)              
+SOLARDEC=              -22.860 / [deg] solar declination                        
+COMMENT                          ENGINEERING KEYWORDS GROUPED BELOW             
+O1FOCS  =              135.291 / [mm] objective lens (01) focus position        
+RCAMFOCS=                0.000 / [mm] camera 0 focus position                   
+TCAMFOCS=                0.000 / [mm] camera 1 focus position                   
+MODLTRT =               35.100 / [deg C] modulator temperature                  
+CALPOLID= 'AP38-006T-1'        / ID polarizer                                   
+DIFFSRID= 'mk4-opal'           / ID diffuser                                    
+FILTERID= 'ANDV13425-01'       / ID bandpass filter                             
+O1ID    = 'Optimax '           / ID objective (O1) lens                         
+LYOTSTOP= '35mm    '           / specifies if the 2nd Lyot stop is in the beam  
+OCCLTRID= 'OC-1018.9"'         / ID occulter                                    
+MODLTRID= 'A       '           / ID modulator                                   
+RCAMID  = 'MV-D1024E-CL-13891' / ID camera 0 (reflected)                        
+TCAMID  = 'MV-D1024E-CL-13890' / ID camera 1 (transmitted)                      
+RCAMLUT = '13891_20160716'     / bit-error only, RCAMCORR does non-linearity    
+TCAMLUT = '13890_20160716'     / bit-error only, TCAMCORR does non-linearity    
+COMMENT                          SPAR GUIDER SYSTEM KEYWORDS GROUPED BELOW      
+SGSDIMV =               8.5170 / [V] SGS DIM signal mean                        
+SGSDIMS =            8.683E-03 / [V] SGS DIM signal standard deviation          
+SGSSUMV =               8.5180 / [V] mean SGS sum signal                        
+SGSSUMS =            7.424E-03 / [V] SGS sum signal standard deviation          
+SGSRAV  =           -3.210E-04 / [V] mean SGS RA error signal                   
+SGSRAS  =            1.398E-02 / [V] mean SGS RA error standard deviation       
+SGSRAZR =              15.0000 / [arcsec] SGS RA zeropoint offset               
+SGSDECV =           -1.210E-04 / [V] mean SGS DEC error signal                  
+SGSDECS =            1.408E-02 / [V] mean SGS DEC error standard deviation      
+SGSDECZR=              -5.0000 / [arcsec] SGS DEC zeropoint offset              
+SGSSCINT=               1.9570 / [arcsec] SGS scintillation seeing estimate     
+SGSLOOP =                    1 / SGS loop closed fraction                       
+DATACITE= 'https://doi.org/10.5065/D69G5JV8' / URL for DOI                      
+COMMENT The COSMO K-coronagraph is a 20-cm aperture, internally occulted        
+COMMENT coronagraph, which observes the polarization brightness of the corona   
+COMMENT with a field-of-view from ~1.05 to 3 solar radii in a wavelength range  
+COMMENT from 720 to 750 nm. Nominal time cadence is 15 seconds.                 
+COMMENT                                                                         
+HISTORY Level 1 calibration and processing steps: dark current subtracted; gain 
+HISTORY correction; apply polarization demodulation matrix; apply distortion    
+HISTORY correction; align each camera to center, rotate to solar north and      
+HISTORY combine cameras; coordinate transformation from cartesian to tangential 
+HISTORY polarization; remove sky polarization; correct for sky transmission.    
\ No newline at end of file
diff --git a/sunpy/map/sources/tests/test_kcor_source.py b/sunpy/map/sources/tests/test_kcor_source.py
--- a/sunpy/map/sources/tests/test_kcor_source.py
+++ b/sunpy/map/sources/tests/test_kcor_source.py
@@ -4,6 +4,7 @@
 import pytest
 
 import astropy.units as u
+from astropy.tests.helper import assert_quantity_allclose
 
 from sunpy.data.test import get_dummy_map_from_header, get_test_filepath
 from sunpy.map.sources.mlso import KCorMap
@@ -12,7 +13,7 @@
 @pytest.fixture()
 def kcor():
     """Creates an KCorMap from a FITS file."""
-    return get_dummy_map_from_header(get_test_filepath("20181209_180305_kcor_l1.5_rebinned.header"))
+    return get_dummy_map_from_header(get_test_filepath("20181209_180305_kcor_l2.header"))
 
 
 def test_kcormap_creation(kcor):
@@ -45,3 +46,21 @@ def test_norm_clip(kcor):
 def test_wcs(kcor):
     # Smoke test that WCS is valid and can transform from pixels to world coordinates
     kcor.pixel_to_world(0*u.pix, 0*u.pix)
+
+
+def test_observer_coordinate(kcor):
+    assert 'dsun_obs' not in kcor.meta
+
+    # The test header triggers using the default observer coordinate
+    observer = kcor.observer_coordinate.itrs.earth_location
+    assert_quantity_allclose(observer.lon, kcor._earth_location.lon)
+    assert_quantity_allclose(observer.lat, kcor._earth_location.lat)
+    assert_quantity_allclose(observer.height, kcor._earth_location.height)
+
+    # The test header will have a fully specified observer when DSUN_OBS is added
+    kcor.meta['dsun_obs'] = (1*u.AU).to_value(u.m)
+    kcor = KCorMap(kcor.data, kcor.meta)
+
+    # The observer coordinate should now no longer be the default observer coordinate
+    assert_quantity_allclose(kcor.observer_coordinate.radius, 1*u.AU)
+    assert_quantity_allclose(kcor.observer_coordinate.lat, kcor.meta['crlt_obs']*u.deg)