Android Osmdroid get poins of interest from own database - java

This is my first time using stackoverflow because I am really desperate to solve this issue.
I am developing an app that contains information about bus stops in my country (Google maps does not work if I try to go from X to Y on a bus) so I decided to do it myself. I already tracked every stop of many buses.
I show each bus stop as overlays in my osmdroid map view, I get this information from a internal database that as I said I collected the information and is not online.
What I want to do now, is to get the user's location (lat, long) and tell him/her the closets bus stops to him/her location. I already looked at Osmdroid bonuspack and the POI feature, but what I understood is that these places (restaurants, bus stops, hospitals, etc) are already on a server.
How can I implement a POI function on my application with local information. I would appreciate any help, this is something I want to do for my community.
Thank you everyone and sorry for my poor English. I am doing my best.

You already have the coordinates of bus stops in your database, and they are displayed in an overlay. You can also get the current users location. What you want to achieve is a matter of calculating the geographical distance between two points (the user's location and a bus stop).
You don't have to implement a suitable formula yourself, e.g. have a look at the GeoPoint class. There's a distanceTo(final IGeoPoint other) method. You can instantiate a GeoPoint with known coordinates or simply use Overlay methods.
You could also achieve the same thing by querying only the bus stops that are within a certain radius of the user's location (maybe have a look at the BoundingBox)
If you want to use libraries like the BonusPack, look at the provider implementations. You could simply write your own provider for your bus stops. Have a look at e.g. this one.

> How can I implement a POI function on my
> application with local information
I assume that your question is about "how to render busstops on local device" and not "how to query my local database" and not "how to do some server-side support."
If you want to render the busstops on you local android device you can use osmbonuspack
which contain an example app that shows how to render interactive poi-s.
Unfortunately currently there is no precompiled osmbonuspack aar at jcenter/mavencentral so you have to include the sources as a local subdirectory of your project.

Related

So am building an app and it has this feature that i dont know exactly how to go about it

I hope this makes a bit sense, basically, I have this feature in my app for tracking calories which consists of having this page that only appears the first time you use the feature and it asks you to add personal details (so it can make the right calculations), after that you get faced with a simple page that tracks your nutrition with a button for the user to insert the meals he has eaten, this page has to save the inserted data (via firebase) and then restart from 0 each and every day.
my first problem is I don't know how I make the page that only appears one time to save personal data(to be more precise I don't know how to make only appears the first time). and the second problem is how do I make the app automatically sends the given data at the end of each day?
interface in normal state, interface when adding the meals
hopefully, this 2 images will help you get a better grasp of what am trying to explain
don't worry am not looking for someone to straight up solve it all for me, I just need some orientation about what type of things/functions I need to do to solve these 2 problems
While #Narendra_Nath's answer might work, please note that is not a bulletproof solution. Why? Because a SharedPreferences doesn't persist across app uninstalls. This means that your user can install and uninstall the app and see the page as much as they want. So if you indeed want a user to see a screen only once, then you should consider storing that data in a database. Please note that SQLite isn't also a solution because when a user uninstalls the app, everything that is stored locally is wiped out. So what's the solution?
The best way to solve this would be to store the data in the cloud, either in Cloud Firestore or in the Realtime Database. So you can set a boolean variable and always check against it.
If you however intend to implement Firebase Authentication, then another solution would be to display the screen when your users are authenticated for the first time. So even if they will try to sign in on another device, install and uninstall the app, they won't be able to see the screen again.
Regarding the second problem, you should consider using Cloud Function for Firebase. It's the most elegant solution. If you want to somehow schedule an operation, then you should consider using Cloud Scheduler, as explained in my answer in the following post:
Is it not possible to have a code in the background who will be called every 24h?
Make the page that only appears one-time -> store a value in the shared preferences "isInfoShownToUser -> false" then do a check when the app starts to check if this value is false or true. If it is false show the "take the info" page .. then turn the value to false in the shared preferences.
How do I make the app automatically send data -> Use a Workmanager implementation to send data to the server (Firebase) at a particular time ..
Or use a implementation like the first one which uploads the data to the server just once everyday

get and display user location postcode in edittext on location button click like in just eat app

I am trying to do something like the picture below of just eat app using android studio. I am yet to start building my app but I would like to know how to implement getting user postcode and showing it in the edittext field. Any help will do.
![img1] https://drive.google.com/file/d/186D7fjSvJOhEQdep_fU4dnkUGV-Yi8Ya/view?usp=drivesdk
If you are looking to allow users to identify their post code from their address you might find the Post Office Adress File (PAF) useful although this is a paid for service.
https://en.wikipedia.org/wiki/Postcode_Address_File
https://www.royalmail.com/business/services/marketing/data-optimisation/paf
Some developers may be able to get free sample data for developing their application
https://www.poweredbypaf.com/access-to-free-paf-sample-data/
If you want to allow users to graphically find their postcode e.g. by clicking on a map you would need a map which returns a National Grid Reference and then use Codepoint data (https://digimap.edina.ac.uk/webhelp/os/data_information/os_products/supporting/codepoint_guidance.htm) which is also (an expensive) paid for service to find the nearest postcode co-ordinate using some data structure e.g. quadtree. This will not work correctly in all cases as post code boundaries are not always convex.
Hope that helps

Android showing users on Map

On iOS I created an application where a user can share his location and other users could see him on the MapView.
I did this by getting the location with a location manager, whenever it changed by x meters, and then wrote the lat/long with a device id to a database using a PHP script. The other user could then press a button to show the locations on a map by retrieving this data from the database.
Now here is my question. First I think this is the way to make a application like this. If you think there is a more efficient way please let me know.
What is the best method to update this data for showing users on the map?
For my iOS app I used a timer which would get the lat/long from the database every 30s or so, but I dont believe this is the most efficient or best method. The app would have to load the data every second even if another user has not changed his position.
Could you also push me in the right direction on how to animate the pin from the old location to the new location?
Thanks in advance.
Because there are no answers I used old method which is using a timer to update the latt / long in my database. Works ok btw but was wondering if there is a better way.

Google Maps Polyline to Postgis with Java/Hibernate

I have a page where the user enters the starting point and ending point and I show de route in the map. I would like to know how to get this polygon (polyline) and save it in Postgis through the Java / Hibernate.
Someone can help me?
Thanks.
Luciano
Usually you cannot get that polyline as vector data coordinates, because these data are provided either by Teleatlas / Tomtom (via Google service) or Microsoft Bing (Navteq data) or Nokia (Navteq data)
Such vector data are extremly expensive, and therfore you can only request that a line is drawn on the screen, but you will not get the geographical coordinates (latitude, longitude). Even Google would not have the right to give you that vector data (because they dont own that data, they only display it).
However, I remeber a post here showing how to use an unofficial Google server where you can request the route between two geo points, and get back a compressed encoded route.
But you legally cannot use that service, nor I do know if it yet exists.
An alternative would be use open source map data, like OpenStreetMap, for these services you can get the vector data for a route. For example: the ios RouteMe library provides such things via OpenStreetMap.

Since when is the phone charging/discharging

I wanted to learn more about the Android Services / Broadcasts, so I started a simple project, to create a battery monitoring app. It turned out pretty good, I'm using it for a few days now, but I want to add a new function: to show since when is the phone charging/discharging.
First I thought that I would create two static fields in my BoradcastReciever extension class, where I get and publish the data about the battery, one for the actual state (charging/discharging), and one for the time, when the change in state happened. This way, I could just subtract from the current time the last change, and know exactly since when is the phone charging/discharging.
But there is a problem with this solution: It won't show the correct data at first, when a user starts the app. I wouldn't make a big deal of it, but I saw that Android tracks this data somewhere, because inside my phone settings I found this information, so why take the hard way.
So my question is: is there an easy way to get from the Android system the date/time (no matter what format) of the last charging state change?
I looked at the BatteryManager reference but there are no constants named after what I seek, and which I could use, to get the information from the Intent of my receiver.
The Android OS tracks the connect/disconnect of a power source, but does not make this data accessible to apps. You have to record this all yourself, using intent filters.
The two intent filters to use are android.intent.action.ACTION_POWER_CONNECTED and android.intent.action.ACTION_POWER_DISCONNECTED; with these, you can monitor when the power source is connected and disconnected.
You can find information about this process explained incredibly clearly here. Another blog describing the process can be found here.

Categories

Resources