Is there an Android app which will use the location provided by the 'phone network to determine whether I am stationary or moving and to turn GPS off or on accordingly?
Preferably something free.
Check out MacroDroid. It's free and has a ton of options for custom macros. I have looked at the others and this is hands down the most user friendly available. You can use it for free (up to 5 macros) or opt for the paid version for unlimited and more complex macros. I use it daily for all kinds of things like: raising/lowering my screen brightness based on the time of day; enabling my GPS when I'm driving and launch my navigation app; and disabling my mobile data when I connect to a wi-fi network, just to name a few. It has location based triggers as well. It's easily one of the most useful apps on my smartphone.
Here are a few screenshots:
Screenshots (click images to view larger images)
It can toggle on and off GPS, Wi-Fi, Airplane Mode, Mobile Data, and about anything else you could ever imagine. Absolutely worth the extra couple of bucks for the paid app so you can set up dozens of them with multiple triggers & actions in each macro (really awesome). I already have about 20 setup and am planning on creating more very soon.
You can categorize the toggles as well. I group mine by location and activity (e.g. Home, Driving, Hiking, Flying, etc.), with one 'everywhere' category that I always leave on. In my opinion this works better than relying on my GPS to tell the app where I am and what I'm doing because there are many times, like when traveling, when I am doing different things (e.g. driving, flying, or walking) and I want it to act differently based on those activities versus grouping them all in one general 'away from home' group. Basically, the app can't tell what I'm doing only based on my location, just that I'm 'away from home'. You can generalize yours if you want but I think once you have a lot of macros, you'll find that this method works really well.
It's one of the only apps on my phone that I think everyone should have. I hope this helps!
As pointed out in my comments, whether you're "stationary" or "moving" is best determined via
ACTIVITY_RECOGNITION – as it might prove tricky doing so on any location provider (which might keep you "slightly jumping around" even while sitting perfectly still, due to inaccuracies: WiFi signals varying strength, clouds covering satellites, and the like).
Whenever it comes to automation tasks on Android, my first thoughts go towards Tasker1, which can toggle pretty much anything on your device. And yes, you can use activity detection with it, though only by an addon: AutoLocation
AutoLocation: GeoFence and Activity Detection (source: Google Play; click images for larger variants)
As the screenshots show, AutoLocation allows you setting up a GeoFence (not of interest for your issue, but mentioned for completeness) as well as "Activity Detection". For your case, you will want to use the latter, and set up a Tasker profile like the following "pseudo-code":
(note the "Exit Task" is optional here. If not defined, Tasker automatically restores the state as it was before the profile triggered)
With that set up, it should exactly meet your requirements: Turning GPS off while not moving, and switching it back on as soon as movement is detected. But this solution doesn't come for free: both apps involved have a 7-day trial (for Tasker that would mean downloading it from its homepage instead of from Google Play), and then you have to pay them if you want continue using them.
UPDATE: An alternative to the (payed) AutoLocation might be the (free) AutoActivity, if you're only after the "detect whether I'm stationary" part:
AutoActivity Settings (source: Google Play; click images for larger variants)
1: Also see the Tasker tag-wiki at Android.SE