[Galaxy S 4 i9505 Original Android Development] josterm:
Rock solid for me. I think the CM gps.conf is horrible, so I run my own that is a combination of Sprint/Samsung defaults plus a few minor tweaks. The best settings depend on your region.

The main problem I found is the izatcloud XTRA servers seem really unreliable. I switched back to the old xtra.gpsonextra.net servers.

Note that you must have a decent data connection, a good clock source (cell signal), and a good NTP source (data connection again) to get a fast lock. The phone has to download the current XTRA file (they update every few days IIRC) and correlate that with true time to start tracking the birds. If the device lacks either, then it must download the almanac from the GPS birds (which takes ~13 minutes @ 50 bits/s!), or the good stuff tries to determine bird location by clock skew, which can take 30 seconds to several minutes.

Here's my gps.conf. The NTP pool should be region/nation specific. SUPL, NEMA, Intermediate and SGLTE are debatable. YMMV. No warranty expressed or implied. Etc etc. Experiment and see what works well for your area and your connections. Note that permitting intermediate locations may just plop you at 0d0'0"/0d0'0" until a lock is finally acquired. That's usually not helpful. Unless you are actually cruising off the coast of Ghana

#Uncommenting these urls would only enable
#the power up auto injection and force injection(test case).
XTRA_SERVER_1=http://xtra1.gpsonextra.net/xtra2.bin
XTRA_SERVER_2=http://xtra2.gpsonextra.net/xtra2.bin
XTRA_SERVER_3=http://xtra3.gpsonextra.net/xtra2.bin

#Version check for XTRA
#DISABLE = 0
#AUTO = 1
#XTRA2 = 2
#XTRA3 = 3
XTRA_VERSION_CHECK=0

# Error Estimate
# _SET = 1
# _CLEAR = 0
ERR_ESTIMATE=0

NTP_SERVER=us.pool.ntp.org

# DEBUG LEVELS: 0 - none, 1 - Error, 2 - Warning, 3 - Info
# 4 - Debug, 5 - Verbose
# If DEBUG_LEVEL is commented, Android's logging levels will be used
DEBUG_LEVEL = 2

# Intermediate position report, 1=enable, 0=disable
INTERMEDIATE_POS=0

# supl version 1.0
SUPL_VER=0x20000

# Emergency SUPL, 1=enable, 0=disable
SUPL_ES=1

# GPS Capabilities bit mask
# SCHEDULING = 0x01
# MSB = 0x02
# MSA = 0x04
# ON_DEMAND_TIME = 0x10
# GEOFENCE = 0x20
# default = ON_DEMAND_TIME | MSA | MSB | SCHEDULING | GEOFENCE
CAPABILITIES=0x37

# Accuracy threshold for intermediate positions
# less accurate positions are ignored, 0 for passing all positions
# ACCURACY_THRES=5000

################################
##### AGPS server settings #####
################################

# FOR SUPL SUPPORT, set the following
# SUPL_HOST=supl.host.com or IP
# SUPL_PORT=1234

SUPL_HOST=supl.google.com
SUPL_PORT=7275

# FOR C2K PDE SUPPORT, set the following
# C2K_HOST=c2k.pde.com or IP
# C2K_PORT=1234

# Bitmask of slots that are available
# for write/install to, where 1s indicate writable,
# and the default value is 0 where no slots
# are writable. For example, AGPS_CERT_WRITABLE_MASK
# of b1000001010 makes 3 slots available
# and the remaining 7 slots unwritable.
#AGPS_CERT_WRITABLE_MASK=0

####################################
# LTE Positioning Profile Settings
####################################
# 0: Enable RRLP on LTE(Default)
# 1: Enable LPP_User_Plane on LTE
# 2: Enable LPP_Control_Plane
# 3: Enable both LPP_User_Plane and LPP_Control_Plane
# Sensor R&D : This will not be injected to MODEM
LPP_PROFILE=3

################################
# EXTRA SETTINGS
################################
# NMEA provider (1=Modem Processor, 0=Application Processor)
NMEA_PROVIDER=0
# Mark if it is a SGLTE target (1=SGLTE, 0=nonSGLTE)
SGLTE_TARGET=1

##################################################
# Select Positioning Protocol on A-GLONASS system
##################################################
# 0x1: RRC CPlane
# 0x2: RRLP UPlane
# 0x4: LLP Uplane
A_GLONASS_POS_PROTOCOL_SELECT = 0 #Sensor R&D : This will not be injected to MODEM

Sprint SPH-L720, CDMA. LTE, but this was released when Sprint was just turning away from WiMAX. Sprint normally does NOT expose APN settings on their ROMs.