Is there any way to determine if a user is indoor or outdoor? I'm not interested in indoor mapping, just if the user is indoor or not without asking the user.
If the user is using Wifi then maybe the user is indoor or if the user is standing on the road for example.
There is no way you can know 100% sure. Generally, the GPS signal would be weaker indoor, but not always. Also, the fact that the user coordinates are on a road tells you nothing, he could be indoor and the signal strength could be week and the coordinates flawed. However, depending on how accurate you want your algorithm to be, you could rely on the signal strength ( and maybe position ) to give you something.
If you want to take it to the next level, although it could prove to be a waste of time, given the fact that the user usually has movement patterns (home to work, work to shop, Sunday in the park, etc) you could try the above, plus several other parameters like a pedometer (moving, walking, running), speed (high speed, no movement from the pedometer, means he's in a car), noise, brightness etc. and run a logistic regression algorithm maybe asking for user feedback as training set. However, as you can see, this would become pretty large, and definitely not worth it if your app is small.
No, there is no API to check for that. Looking at things like Wifi won't help you either, because it's possible that the user uses a mobile hotspot and is currently standing on a field. I'm afraid that you have to ask the user wether they are indoors or outdoors, however, are you sure that you are solving the right problem here?
You wouldn't be able to definitively state whether or not the user is inside or outside (and WIFI vs. Cellular wouldn't help... you can use WIFI when outside and cellular when inside). I think the closest you could get (and even this has too many variances to be trustworthy) is to note changes in GPS signal strength (horizontalAccuracy, verticalAccuracy, etc.).
Bottom line is that there isn't a programmatic way to check this.
It seems that any single sensor based approach does not solve the problem. A research work tackled your problem with combining all the mentioned techniques in this thread.
Pengfei Zhou et al.[1], proposed IODetector('Indoor/Outdoor Detector'), a sensing service that detects indoor/outdoor environment. It uses various sensors including accelerometer, proximity sensor, light sensor, magnetometer. It also observes celltower signals. According to their experiment, detection performance of the system(precision/recall) is about 85%.
1 Pengfei Zhou, Yuanqing Zheng, Zhenjiang Li, Mo Li, and Guobin Shen. 2012. IODetector: a generic service for indoor outdoor detection. In Proceedings of the 10th ACM Conference on Embedded Network Sensor Systems (SenSys '12), 113-126.8
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With