There are two quite different detector technologies:

On my railway there is a need for both kinds of detector. Occupancy detectors are great for identifying that there is a train ahead, but not exactly knowing where. This is good to detect if a signal is red or not. Position detectors would be good at identifying the exact time a train reaches a location. This would be good for stopping at a specific position - e.g. in a station or at a signal.

In practice, I've selected occupancy detectors for both roles. A "main" block detector covers the majority of the path to the next signal; a short section covers the piece of track immediately in front of the signal to tell a train to stop if it is not safe to proceed. Some research into stopping distances identified that the train would typically stop within 40-100mm of a new occupancy detector region, depending on speed. In practice the speed would be low by then, with a smaller margin of uncertainty.

I've mostly used Digitrax BDL168 block detectors. A single board provides 16 separate detect channels, split into groups of 4 (each group may be in a different power zone, but all 4 within a group are connected to a single power zone feed). Some of the predecessors of this product had issues with some kinds of loco decoder; but the newer ones are pretty reliable and I've seen them in use with no problems on other computer controlled railways. In the fiddle yard, a late design change resulted in a need for a few extra detectors. The Digitrax BD-4 has been used to provide 4 detection channels, and connected to LocoNet by SIGM20 units.