Modern smartphones offer a wide variety of features. One useful feature is the ability to detect the smartphone's location. More specifically, the smartphone is able to determine whether the device is at a known landmark or at a particular city or address.
Such techniques may be used in a wide variety of applications. For example, some applications allow a mobile device to be used as a digital log or diary. When a user is entering a new entry into his or her log, the smartphone can automatically determine the city that he or she is in and attach it to the log entry. As a result, the user can later review the log entries and quickly recall all the places in which they were recorded.
A known process for obtaining the location of a smartphone may be described as follows. Initially, the smartphone identifies a geocoordinate that is associated with the current location of the device. A well known example of a geocoordinate is a pair of latitude-longitude coordinates. Typically, such coordinates are based on data obtained from Global Postioning System (GPS) satellites. The mobile device then transmits the coordinates to a suitable server. The server analyzes the coordinates and determines a location (e.g., a city name, an address, a state, etc.) that they are associated with. This determination process is commonly referred to as “reverse geocoding.” The server transmits the location data back to the mobile device. The mobile device then makes use of the location data e.g., a mobile application may then inform a user that he or she has entered the city identified by the reverse geocoding server. In various implementations, whenever a current location is required by an application, this process must be repeated. In applications that require frequent updates on the location of the device, such as many life logging and tourism applications, the repeated server requests can consume considerable amounts of battery power and bandwidth.
The present invention relates to various types of electronic devices. More specifically, the present invention involves a cache on a device that is used to store location information. In various embodiments, the device is a mobile device, including but not limited to a smartphone, smart glasses, a smart watch, a tablet or another type of computing device.
In one aspect, a method for obtaining a location from the cache will be described. In various embodiments, the obtained location is based on data that was generated at the device. The data generated at the device may vary widely, depending on the needs of a particular application. In some embodiments, for example, the device generates proximity domains or structures that help determine whether a cache hit has taken place. Any suitable algorithm, scheme, structure or mechanism may be used to manage the cache.
Some embodiments involve a method for obtaining location data from a server and caching the location data at the device. A geocoordinate (e.g., a latitude coordinate and a longitude coordinate) is obtained. A determination is made as to whether there is a cache hit based on the geocoordinate and the data stored in the cache. When there is a cache hit, the location is obtained from the cache on the device. When there is not a cache hit, a request is transmitted to the server for a location that is associated with the geocoordinate. A response is received from the server that indicates the location. The location received from the server is then stored in the cache.
The cache hit determination may be made in a variety of ways. In some implementations, for example, one or more proximity domains are generated. Each proximity domain is associated with one or more locations (e.g., an address, the name of a city, province, state, district, landmark, building, organization, business etc.) In various embodiments, each proximity domain helps indicate which geocoordinates are associated with the corresponding location. A determination is made whether there is a cache hit based on the proximity domains. There is a cache hit when the obtained geocoordinate is within a proximity domain In various embodiments, the proximity domain is based at least in part on an obtained geocoordinate, a cached geocoordinate or both. Some cache hit determinations involve a concave hull, a convex hull, a radius formed circle, implicit square hashing, r-tree partitioning, a spatial index or any other suitable technique.
Various implementations relate to mobile devices, servers and other systems that manage or store location data in a cache. Additional embodiments relate to various cache- or location-related software applications, methods and systems for sharing cache data, prepopagating a cache, correcting cache data and recommending locations.
The invention and the advantages thereof, may best be understood by reference to the following description taken in conjunction with the accompanying drawings in which:
In the drawings, like reference numerals are sometimes used to designate like structural elements. It should also be appreciated that the depictions in the figures are diagrammatic and not to scale.
Some applications, such as life logging and tourism applications, frequently make reverse geocoding requests to servers. By way of example, to determine whether a mobile device has arrived at a particular city or other known administrative region, a conventional mobile device makes a server call to request the conversion of a geocoordinate (e.g., a GPS-derived longitude/latitude coordinate pair) into a recognizable location name (e.g., Los Angeles, San Francisco, 75 W. Plumeria Dr., etc.)
Frequent reverse geocoding requests increase network delay and battery consumption. Various embodiments of the present invention address this issue. More specifically, location data is cached on the mobile device. When the mobile device next requires the reverse geocoding of a geocoordinate, the mobile device checks the cache to see if the location is stored there. If not, the mobile device consults with a server. Once the server provides the desired location, the location is then stored at the mobile device so that it may be accessed again in the future. Given that a typical person tends to spend the majority of their time within a relatively limited area, the likelihood of cache hits is quite high once the cache is partially filled with previously visited locations. By reducing the need for server calls, the use of a cache helps to greatly reduce bandwidth and battery consumption.
Referring initially to
Any suitable network 108 may be used to connect the device 102 and the server 104. In various embodiments, the network involves but is not limited to a cellular network based on CDMA or GSM, the Internet or any other suitable protocol or any other communication network.
In this particular example, the mobile device 102 is running an application that is attempting to determine its current location. There are many types of mobile applications that require identification of one or more locations. For example, the user may be running a program that is supposed to inform the user when the user has entered a new city or has arrived at a particular landmark.
Generally, when a location is desired, the device 102 will check the cache 106. If the cache 106 cannot provide the desired location, the device 102 will make a server call using the network 108. The device 102 will then obtain the desired location data from the server 104 and will store it in the cache 106. Over time, the cache will collect data related to multiple locations. When these locations are visited again, location data can be retrieved from the cache, rather than from the server. This reduction in the number of server calls helps reduce bandwidth and power consumption. A more detailed discussion of a method for using the cache 106 and the communications system 100 is described below.
Referring next to
In the illustrated embodiment, the geocoordinate is a pair of coordinates i.e., the latitude and longitude coordinates that are obtained with the help of a GPS satellite. That is, mobile device 102 includes a GPS receiver that receives data from multiple GPS satellites. In this example, the mobile device uses triangulation to help determine the correct latitude and longitude coordinates that correspond to a particular location on the globe, although any suitable system may be used to obtain the geocoordinate. In this particular example, the mobile device obtains a geocoordinate that corresponds to latitude and longitude coordinates 37.803901 and −122.464135.
Once a geocoordinate is obtained, a determination is made as to whether there is a cache hit (step 204). That is, the mobile device 102 determines whether the location associated with the obtained geocoordinate can be found in the cache 106. The cache 106 is any mechanism or system for storing location data at the mobile device 102. Generally, the cache 106 is arranged to help indicate which geocoordinates correspond to one or more locations. The cache 106 may involve any known cache format or structure.
The cache hit determination of step 204 may be performed in a wide variety of ways, depending on the needs of a particular application. In some embodiments, for example, the cache 106 includes entries that each associate a particular geocoordinate or geocoordinate ranges with one or more locations. In some applications, a cache hit may require an (almost) exact match between the geocoordinate obtained in step 202 and a geocoordinate stored in the cache. In other applications, a relationship between data or a geocoordinate in the cache and the obtained geocoordinate is inferred, which results in a cache hit. That is, an exact geocoordinate match is not required. Various example techniques will be discussed later in the application.
If there is not a cache hit i.e., if the cache is unable to provide a location associated with the obtained geocoordinate, then a request is transmitted to a server for a location associated with the obtained geocoordinate (step 210). The mobile device generally transmits the geocoordinate over the network to the server 104.
The server 104 determines the corresponding location and transmits it to the mobile device 102. In some embodiments, the server 104 performs the reverse geocoding using a known mapping service, such as Google Maps or OpenStreetMap. In this particular example, the server 104 determines that the latitude and longitude coordinates 37.803901 and −122.464135 correspond to the city of San Francisco.
In various embodiments, the server 104 provides multiple locations in response to a reverse geocoding request. In some cases, the multiple locations represent multiple overlapping administrative regions or areas. In the illustrated embodiment, for example, the server 104 determines not only that the geocoordinate 37.803901, −122.464135 represents the city of San Francisco, but also are located in the state of California, are at 1199 East Beach, and are at a location called Crissy Field, which is a popular recreational area at the northern end of San Francisco. All of these locations are then sent to the mobile device 102. Alternatively or additionally, in various implementations the server returns recommended locations that might be of interest and/or are in the vicinity of the device, even if the mobile device 102 has not yet visited those locations. The identification of these recommended locations may be based on a variety of factors, including but not limited a user profile, a history of user actions and movements and any other data stored on the mobile device 102 or the server 104.
In the illustrated embodiment, the server 104 transmits the above location(s) to the mobile device 102. Optionally, the server 104 also transmits a geocoordinate that is associated with each location or set of locations. The exact format of the transmitted location data may vary widely. In some implementations, for example, the transmitted data includes one or more entries, in which each entry involves a single geocoordinate (e.g., a pair of latitude-longitude coordinates that specifies a particular point on the globe) and one or more locations that the geocoordinate corresponds to.
The mobile device 102 receives the one or more locations from the server 104 (step 212) and prepares to store them in the cache 106 (step 214). If the cache 106 is full and/or under selected other conditions, the mobile device 102 optionally removes one or more entries from the cache (step 213) to increase the storage capacity of the cache 106.
The removal of a cache entry may be performed in a variety of ways, depending on the needs of a particular application. In some embodiments, for example, the least recently used entry is removed first (i.e., the entry that has not been involved in a cache hit for the longest period of time.) In other embodiments, the least frequently used entry is removed first. In still other embodiments, the cache entry that corresponds to a location that is farthest from the current position of the mobile device is removed. Some implementations involve removing an associated group of cache entries, rather than just one. For example, if the mobile device 102 determines that the user is leaving a city and/or determines that a particular city has not been visited for a long period of time, then some or all of the entries in the cache that correspond to locations in the city are removed. In various embodiments, the mobile device determines that when a particular cache entry is removed (e.g., based on a least recently used (LRU) or least frequently used (LFU) policy), all cache entries that have a particular type of relationship with the cache entry are also removed. Any suitable type of relationship may trigger removal of the cache entry. For example, if a cache entry related to a location A in San Francisco is to be removed, the mobile device may also remove entries in the cache that correspond to any location within a predetermined distance of location A or that are frequently visited by people who also visit location A. It should be appreciated that any known cache algorithm, structure or mechanism may be used to insert entries into, remove entries from or otherwise operate the cache.
At step 214, the mobile device 102 stores the location data received from the server 104 in the cache 106. The data that is stored in the cache 106 and its format may vary widely. Any known cache structure, spatial index or algorithm may be used to store and organize the location data. The cache may be part of the mobile device 102 or be separate from the device (e.g., an external storage device, online storage, etc.) In some embodiments, an index value is computed and the location data is stored in a spatial indexing structure or any other suitable structure using the index value.
One example embodiment is illustrated in
At step 216, the application running on the mobile device makes use of the location data received from the server. In this example, the mobile device is running a program that regularly notifies the user of changes in the location of the device. The mobile device thus notifies the user (e.g., using audio and/or a notification on its display) that the user has arrived at Crissy Field, which is located at 1199 E Beach, San Francisco, Calif.
Returning to step 204 of
The type of location data received from the cache may be the same or similar to the location data that would have otherwise been received from the server in response to a reverse geocoding request (i.e., the location data received from the server in step 212.) Thus, the location data may include one or more locations, including but not limited to an address, a name of a building, name of a street, name of a city or other administrative region, etc. At step 208, the one or more locations obtained from the cache are used in an application on the device (e.g., as discussed in step 216).
In some implementations, a user can correct erroneous cache entries. For example, assume that the mobile device 102 obtains a geocoordinate (step 202), determines that there is a cache hit (step 204), and obtains a location from the cache (step 206). The location is obtained from a particular cache entry in the cache that is inferred to be applicable to the obtained geocoordinate. The cache entry is associated with a particular location (e.g., Daly City.) In this example, the location is intended to represent the current location, which an application displays to the mobile device user. However, the mobile device user may discover that the cited location is incorrect (e.g., the user may know he or she is in San Francisco, but the location provided by the cache indicates Daly City, which is south of San Francisco.) In some applications, the user can then input the correct location (e.g., San Francisco) into a user interface of the mobile device 102. The mobile device 102 then corrects the erroneous cache entry with the correct location name.
Referring next to
The cache hit determination may be performed in a wide variety of ways, depending on the needs of a particular application. In some embodiments, for example, one or more proximity domains are generated (step 404). Generally, each proximity domain is associated with one or more locations (e.g., names of cities, landmarks, addresses, etc.) The proximity domain is any suitable domain, range, algorithm, structure, scheme or mechanism that helps determine whether a particular geocoordinate refers to the associated one or more locations. In some implementations, for example, a proximity domain helps define a range or set of geocoordinates (e.g., latitude and longitude coordinates). If a particular gecoordinate falls within the proximity domain, then the geocoordinate is assumed to refer to the same location(s) that are associated with the proximity domain. At step 406, the one or more proximity domains are analyzed to determine if the geocoordinate(s) obtained in step 202 of
Referring to
Since cached geocoordinates 1, 2 and 3 are known to correspond to San Francisco, it is assumed that a hull 502 that is drawn to connect the three points will define a proximity domain that also is associated with San Francisco. That is, any geocoordinate that falls within the hull 502 is assumed to also be associated with San Francisco. Assume that the point Q refers to a new geocoordinate obtained in step 220 of
In
The above approach may be implemented in a variety of ways. In the illustrated embodiment, for example, each square with a side length L is represented by a geocoordinate (e.g., a pair of latitude-longitude coordinates.) The length L of the square determines the precision of each coordinate, and thus the number of digits or decimal places in the coordinate. Any geocoordinate that is to be stored in the cache (e.g., similar to the cache of
It should be appreciated that the cache hit determination process is not limited to the techniques described above. Any know spatial index, algorithm and/or scheme may be used to structure the cache 106 and/or to determine whether a cache hit has taken place. In some embodiments, for example, the cache hit determination and/or the proximity domain involves R-tree partitioning, k-D trees, quadtrees or any other suitable tree or structure.
In some situations, there may be more than one cache hit for a particular geocoordinate. For example, a new geocoordinate may fall within more than one convex hull or more than one circle defined by a radius that extends from a cached geocoordinate. In that situation, any suitable algorithm or decision process may be used to select which proximity domain and which location should be associated with the new geocoodinate. In some embodiments, for example, a proximity domain or associated location is selected based on a distance measurement or proximity (i.e., if the new geocoordinate falls within two circles of radius r defined by cached geocoordinates A and B, respectively, then the new geocoodinate is assumed to be associated with the same location as the closer geocoordinate.)
It should be noted that in some embodiments, the proximity domain (e.g., hulls, circles, geocoordinate ranges, other suitable cache hit determination algorithms or structures etc.) is generated and/or defined at the mobile device, not at a reverse geocoding server or another external device. This offers several advantages. For one, the mobile device can redefine the basis for the cache hit determination dynamically, without requiring input from another device. Additionally, an external device, such as a server, does not need to transmit the proximity domain to the mobile device.
Returning to
Referring next to
At step 804, a geocoordinate is obtained. This is performed in generally the same manner as step 202 of
In some tourism applications, the application is arranged to notify the user when his or her device arrives at particular locations, cities or landmarks. When the device 102 arrives at specific locations, the application may give an audio tour of the location or describe features of the location. Thus, such applications may frequently and regularly attempt to obtain geocoordinates (step 804), in order to ensure that the location of the user is well known and so that opportunities to describe or explain notable features of particular locations are not missed. A similar functionality is available on some audio guides for the blind, which track a blind user's movement and give audio instructions depending on what locations (e.g., addresses, cross walks, street corners, buildings, etc.) the user is at.
Geofencing applications also can make use of the aforementioned technologies. Geofencing applications typically require a user to define conditions for a message or notification. For example, a user might configure the application to tell him to buy milk when he arrives at a supermarket in Cupertino, Calif. After the user inputs the conditions and notification into the application, the application frequently and automatically obtains geocoordinates (step 804) to determine whether the user is at the supermarket or another location. Once the application determines that the user is at the designated location (e.g, the supermarket), the application notifies the user of the desired reminder (e.g., to buy milk)
Once the geocoordinate is obtained, steps 204, 206, 208, 210, 212, 214 and 216 of
Referring next to
Various photo applications have access to multiple photos stored at the mobile device 102 or on a remote server 104 that the mobile device 102 has access to. Each photo may be stored in any suitable file format (e.g., TIFF or JPEG). Each photo file typically also contains metadata that includes a geocoordinate (e.g., a latitude-longitude coordinate pair), which represents where the photo was taken. However, further analysis or conversion of the geocoordinate is needed to determine which city, landmark, building or other locations those coordinates refer to. Once these locations are identified, the photos can be arranged by location. For example, a user could easily and automatically place all the photos taken in one city in one folder, and all the photos taken in another city in another folder.
When the user launches the photo application and/or activates a feature for sorting photos by location, the application on the mobile device 102 automatically obtains the geocoordinates for the photos (step 904). Afterward, a location is associated with each photo based on the geocoordinate for that photo. The location is determined using the steps of method 200 of
An example implementation is shown in
Referring next to
Initially, a geocoordinate is obtained at the mobile device (step 1102). This step may be the same or similar to step 202 of
In some applications, it is desirable to automatically obtain one or more additional geocoordinates based on the current location and/or a variety of other factors. That is, the mobile device 102 recommends additional geocoordinates other than the geocoordinate that represents the current location of the mobile device (step 1104). The selection of the recommended geocoordiates may be based on a variety of factors, including but not limited to a user profile stored on the mobile device, user interests, geocoordinates obtained in the past by the mobile device or geocoordinates obtained in the past by other devices, or any data stored in the mobile device 102.
Consider an example in which a user is accessing and running a tourism application on the mobile device 102. The tourism application obtains data from a GPS satellite and obtains a geocoordinate that reflects the current location of the mobile device. The application then analyzes data stored on the mobile device (e.g., user profile, user activity history, data received from other devices or a server, etc.) and determines that in the past, the user visited or might be interested in two additional locations identified by two other geocoordinates. The geocoordinates represent locations that are in the vicinity of or within a predetermined distance of the user. Based on these factors, the tourism application then recommends these additional geocoordinates.
Once the mobile device 102 obtains a geocoordinate representing its current location as well as other recommended geocoordinates, the mobile device 102 determines the locations associated with these geocoordinates. That is, the mobile device performs the steps of method 200 of
As previously discussed in connection with method 200, there may not be a cache hit for one or more of the geocoordinates. In that case, the mobile device 102 sends a request to the server 104 for the location. As previously discussed, the server 104 then responds with the associated location. However, in some cases, the server response will also optionally include additional locations that the server recommends. These recommended locations are selected based on any suitable data stored on the server, including but not limited to a history of the movement of different mobile devices to different locations and a database of known landmarks, notable locations, organizations or buildings in the vicinity of the mobile device 102.
Consider the above example, in which the user is running a tourism application on the mobile device 102. The tourism application receives data from a GPS satellite and obtains a geocoordinate (i.e., a pair of latitude-longitude coordinates) that represent the current location of the mobile device (step 1102). In this example, the coordinates are 37.803901, −122.464135. There is no cache hit for this geocoordinate, so the tourism application transmits the geocoordinate to the server (step 1106). The server 104 determines that the geocoordinate is associated with Crissy Field, 1199 E Beach, San Francisco, Calif. Crissy Field is a popular walking area along the northern end of San Francisco. The server 104 then determines whether there are other locations that the user might be interested in. The server 104 consults its internal database and determines that there are several notable places within a predetermined distance of the geocoordinate. The locations are the Warming Hut Café, which is a popular café near Crissy Field and the Golden Gate Bridge, which is a popular nearby tourist destination.
The server 104 may identify such recommended locations in a variety of ways. In various embodiments, for example, the server 104 receives numerous reverse geocoding requests from different mobile devices. An analysis of the reverse geocoding requests and their associated geocoordinates can reveal, for example, that many mobile devices and their users spend substantial amounts of time at the Warming Hut Café and the Golden Gate Bridge. The server can draw upon this data to make its recommendations.
In the above example, the server 104 thus sends the location associated with the geocoordinate obtained by the mobile device (i.e., Crissy Field, 1199 E Beach, San Francisco, Calif.) The server also transmits the following to the mobile device:
The mobile device 102 then receives the one or more locations recommended by the server (step 1110). The mobile device 102 stores locations received from the server in the cache 106. If the mobile device received additional supplementary information (e.g., descriptions, photos, etc.), this data is stored in memory for later use.
The mobile device then uses the location(s) in an application (step 1112). In the above example, the mobile device 102, which is running a tourism application, then notifies the user that he or she is at Crissy Field. The mobile device 102 further recommends, based on the input received from the server, that there are two additional locations of interest nearby, including the Warming Hut Café and the Golden Gate Bridge. These notifications and recommendations can be conveyed, for example, by displaying an alert or explanatory text on a screen of the mobile device 102. Also, if the user does arrive at the Warming Hut Café, any reverse geocoding request for the current location can now be retrieved from the cache, rather than requiring a server call.
Referring next to
Under some circumstances, it is desirable to prepropagate a location cache on the mobile device 102. That is, the location cache is prefilled with entries, locations and/or geocoordinates that were not specifically requested or obtained by the mobile device 102. In many of the aforementioned examples, geocoordinates obtained by the mobile device 102 reflect current and past locations of the mobile device 102. Thus, the location cache was filled with data that reflected the past movement of the mobile device 102.
In some cases, however, it is useful to fill the cache with data this does not reflect the past activities or positions of the mobile device 102. For example, a newly acquired mobile device that has never been used may have an empty cache. As a result, as the mobile device moves between different locations, obtains geocoordinates and makes reverse geocoding requests, no or few cache hits will occur and many server calls will have to be made. This can be costly in terms of bandwidth and battery usage. In such cases, prepropagating the cash with relevant location data can provide significant benefits in terms of reduced network delay and power consumption.
Initially, at step 1202, the server 104 receives data from the mobile device 102 indicating its status (step 1202). The data may take a variety of forms. In some embodiments, for example, the mobile device 102 sends a signal to the server 104 indicating that the cache is empty or nearly empty and should be filled. Some implementations allow a user to configure the settings of the mobile device 102 so that prepropagation occurs only under selected conditions. By way of example, a user could configure the settings to indicate that prepropagation should only occur when there is a Wi-Fi connection, during a particular time of the day and/or when the battery of the mobile device 102 is charging. Additionally, the user could configure the settings to indicate that only a particular amount of storage will be made available for prepropagation, or that prepropagation should involve regions only within a particular predetermined distance of the device's current position. Additionally or alternatively, the mobile device 102 transmits a geocoordinate to the server indicating its current location. Any other data that helps the server 104 with the pre-propagation process (e.g., sensor data, a history of obtained geocoordinates, etc.) may also be transmitted from the mobile device 102 to the server 104 at this stage.
Based on the received data, the server 104 determines that the mobile device 102 should be prepropagated with location data (step 1204). At step 1206, the server 104 precomputes or selects one or more locations. The locations that are precomputed or selected are generally based on the data received from the mobile device 102. By way of example, if the mobile device has provided its current location, the server can precompute or select multiple locations that are adjacent to or within a predetermined distance of the mobile device 102.
The locations may be selected or precomputed in a variety of ways. In some embodiments, for example, the server 104 precomputes multiple, adjacent square regions that cover an area near the current location of the mobile device 102. By way of example, such regions may have any of the characteristics of the square described in connection with
One example approach to generating regions is described in
As shown in
Another approach for determining prepropagation location data is illustrated in
Based on the above data, the server 104 then determines various locations that would be of particular interest to a user of the mobile device 102 based on the trajectory or expected path of the mobile device 102. In this example, the server 104 determines, based on the direction 1403 that the mobile device 102 is moving, that the mobile device 102 and its user are likely to come upon locations 1406 and 1408, which represent notable landmarks in the nearby area. This is because the server determines that locations 1406 and 1408 are in a path 1411 defined by the movement, trajectory and/or direction 1403 of the mobile device 102. However, the server 104 also determines that locations 1404 and 1410 will likely not be encountered by the mobile device user, because they are outside of the expected path 1411 and trajectory of the mobile device 102. Thus, the server 104 determines that only data indicating locations 1406 and 1408 will later be sent to the mobile device 102.
Another approach for determining prepropagation location data involves analyzing or predicting the preferences or future actions of the mobile device user. By way of example, if the server receives a geocoordinate from the mobile device 102, indicating that the device is at a particular location A, then the server 104 may be able to predict that the mobile device 102 will possibly move to a known location B. This prediction may be based on a wide variety of factors, including a user profile, a history of past user actions or movements, any data stored on the mobile device (e.g., calendar data, appointment data, notes, preferences, etc.), a history of actions or movements by other mobile device users, etc. Additionally, in various implementations, the user determines that the user will likely also arrive at location C, because C is along a known path or trajectory that the mobile device will likely traverse to get from location A to B. In this example, the server then would prepopagate the cache of the user's mobile device with location data for locations B and/or C.
Returning to
In various implementations, the server 104 does not transmit data that defines regions of a predefined size and that each cover a range of geocoordinates. Instead, the server 104 sends specific geocoordinates that each refer to a single point in a larger area (e.g., as is the case with a specific latitude-longitude coordinate pair). It is then expected that the mobile device will generate suitable proximity domains or regions (e.g., hulls, radius formed circles, etc.) as appropriate based at least in part on the specific geocoordinates to determine if there is a cache hit. In other embodiments, the server precomputes regions (e.g., the regions discussed in
If the cache 106 at the mobile device 102 is prepropagated with regions or locations that are close to the current position of the mobile device 102, it is more likely that as the mobile devices moves from place to place, any reverse geocoding requests will be met by the cache and will not require a server call. This helps reduces bandwidth and power consumption, even when the mobile device is relatively new and has not filled up the cache through its own activity.
Referring next to
The network devices include mobile devices 1502, 1504 and 1506. Each device may be any suitable computing device, including but not limited to a laptop, a smartphone, smart glasses, a smart watch, a computer, etc. In various embodiments, each of the devices has any or all of the features of mobile device 102 of
The three devices are able to communicate with one another using any suitable network 1508. In this example, the networks are generally short-range networks that use any suitable communication protocol, including but not limited to Bluetooth, Bluetooth LE, WiFi and/or NFC. The network can be used to exchange or access cache data, as will be described in greater detail below.
Referring next to
The procedure used to obtain permission may vary depending on the devices and the network 1508. In one particular implementation, the mobile device 1502 uses a short range network 1508, such as Bluetooth, Bluetooth LE or NFC, to communicate with the mobile device 1504. A user of the mobile device 1502 provides input to the device, which causes it to send a request for cache access to the mobile device 1504. The request is received by mobile device 1504. In various embodiments, in response to the request a notification is displayed on the screen of the mobile device 1504. A user of the mobile device 1504 is then able to provide input to the mobile device 1504, indicating that the request for access is approved. Alternatively, the user can provide input to the mobile device 1504 indicating that the request for access is not accepted, in which case data transfer between the mobile devices is prevented and/or the network connection between the two devices is severed.
In some implementations, for data to be transferred from one cache to another, the mobile device 1502 optionally must detect a physical proximity of the mobile device 1504 (step 1604). By way of example, in various implementations using NFC or any other suitable short range network protocol, the user of the mobile device 1502 places his or her device very close to or in physical contact with the mobile device 1504 (e.g., placing the back surfaces of two smartphones or mobile devices flush against each other.) Optionally, the user of the mobile device 1502 also provides input to the mobile device 1502, which causes the mobile device 1502 to request access to the cache of the mobile device 1504. The user of the mobile device 1504 then receives an alert (e.g., a notification displayed on a screen), indicating the request, and can confirm the request by providing input to the mobile device 1504. In various designs, cache data cannot be transferred between the two devices until physical contact is established between the two devices.
Once the necessary permissions have been obtained, mobile device 1502 receives location data from the cache of mobile device 1504 (step 1606). In various embodiments, the transferred data has generally the same form and arrangement as the cache contents described in
At step 1608, the mobile device 1502 performs the steps of method 200 of
Referring next to
Initially, at step 1702, the mobile device 1502 receives user input indicating sharing preferences. This input may be entered using the user interface displayed at the mobile device 1502, audio commands or any other form of input. The user input indicates that the user is willing to share the location cache on the mobile device with one or other selected mobile devices in the system.
The sharing preferences may be configured in a variety of ways. In some embodiments, for example, the users of mobile devices 1502, 1504 and 1506 provide input to their mobile device that designate selected devices or accounts with which sharing should be allowed. In some embodiments, the user also provides input indicating whether cache data can be transmitted from the device, to the device, or both. Additionally, the user may indicate types of communications networks (e.g., WiFi, Bluetooth, etc.) through which sharing should be allowed, and the conditions under which any sharing should took place (e.g., while charging, at night, at certain times of the day, when WiFi is enabled, etc.)
The mobile device 1502 then detects whether the above sharing conditions are met. The mobile device 1504 does the same. If all conditions are met and the sharing preferences of mobile device 1502 and 1504 match, then the mobile devices automatically share some or all of the contents of their location caches, based on their sharing preferences (step 1704). For example, mobile device 1502 may have been configured to accept from and send cache data to mobile device 1504, while mobile device 1504 is configured to send cache data to but not accept cache data from mobile device 1502. Both mobile devices were set to share only when charging and when the devices are connected in the same WiFi network. Thus, when these conditions are met, mobile device 1502 will automatically receive cache data from mobile device 1504, but will not send cache data to mobile device 1504, since mobile device 1504 prohibited the acceptance of outside cache data.
In some embodiments, cache data is automatically shared or transferred between mobile devices based on the interests of the mobile device users. By way of example, sharing between the caches of two mobile devices may be allowed if an analysis of the data stored on the mobile devices indicates that the users have common interests or might visit similar places. Consider an example in which the users of mobile devices 1502 and 1504 both have an interest in surfing and beaches. This interest may be reflected in the data stored on their mobile devices (e.g., user profile, user history, history of movement of the device, calendar, preference settings, events, current and past locations of the mobile device, etc.) In various implementations, an application or service running on both devices determines, based on the above factors, that sharing of cache data would be beneficial, since the users would likely visit and be interested in the same locations (e.g., beaches, surfing areas, surfing stores, etc.) and/or because their devices are located within a predetermined distance of one another. Accordingly, the mobile device 1502 receives cache data from the cache of mobile device 1504.
Once mobile device 1502 receives the new cache data from mobile device 1504, the mobile device 1502 then performs the method 200 of
Referring next to
Initially, at step 1802, the device 1502 obtains a geocoordinate. Step 1802 may be similar to or the same as step 202 of
At step 1806, the device 1502 determines whether its own cache or the cache of another device should be checked. That is, to identify a location associated with the obtained geocoordinate, a device will make a cache hit determination (e.g., as described in connection with method 200 of
The determination of whether to use the cache of another device may be based on a wide variety of factors. In some embodiments, for example, the determination is based on the battery power remaining in any of the devices 1502/1504/1506, the memory storage available on any of the devices, the amount of data that is expected to be stored at a cache, the amount of bandwidth available for receiving location data from a server and/or the processing speed or capability to perform the caching on any of the devices. Generally, if the available resources (e.g., battery power, storage, bandwidth, processing power etc.) are low at the mobile device 1502, but are greater at another device, it can sometimes be desirable for mobile device 1502 to perform its cache hit determination and/or reverse geocoding operations (e.g., method 200 of
If the device 1502 determines that the location- and cache-related operations should be performed at the device 1502 and not at another device, then the device 1502 performs method 200 of
If the device 1502 determines that another device should perform those operations, then the device 1502 sends data to the other device through the network 1508 indicating this determination. In some embodiments, mobile device 1502 also sends the obtained geocoordinate to the other device, although the obtaining of the geocoordinate could also be performed instead at the remote device. Consider an example in which device 1502 is a smartphone that has dwindling battery power and device 1506 is a laptop with greater bandwidth, processing power and battery power.
Based on these factors, device 1502 sends data and the obtained geocoordinate to the laptop indicating that the cache hit determination should be performed at the laptop. The laptop then performs a cache hit determination (e.g., steps 204 and 206 of
In various embodiments, before the above operations are performed and external cache data is accessed, the device(s) involved in the operations must grant permission to allow such access. For example, a user of the laptop can provide input to the laptop indicating which devices or accounts (e.g., device 1502) can access and/or control its cache. These permissions are then transmitted to device 1502 over the network 1508. Once device 1502 has confirmed that such permission was given, it may then proceed to access the cache of the laptop. The permissions may be provided in any suitable manner, including using any approach discussed in connection with steps 1602 and 1702 of
Referring next to
The storage unit 1902 is any mechanism or device suitable for storing data. For example, the storage unit 1902 may include volatile memory, non-volatile memory, flash memory, a hard drive and/or any suitable computer readable storage medium. In various embodiments, the storage unit 1902 stores computer software, an operating system and/or computer readable code that can be read and executed by the processor unit 1904.
The processor unit 1904 includes one or more processors. The processor unit 1904 is arranged to execute the computer executable code stored in the storage unit 702. The execution of the code can cause the mobile device 102 to perform any of the operations described in this application for a mobile device 102. For example, when executed, the code in the storage unit may cause the mobile device 102 to perform any of the steps described in method 200 of
The network interface unit 1912 is one or more modules, antennae or other mechanisms that are arranged to connect the mobile device 102 to external networks. In various embodiments, the network interface unit 1912 is arranged to connect to any suitable wireless, wired and/or cellular network (e.g., Bluetooth, Bluetooth LE, Wi-Fi, GSM, NFC, CDMA, etc.) The mobile device 102 is arranged to transmit data, for example, to the server 104 of
The user interface unit 1906 is any software and/or hardware used to help a user interact with the mobile device 102. Any suitable interface technologies may be used. In some embodiments, for example, the user interface unit 1906 includes a computer display screen, a touch sensitive (e.g., capacitive) screen, an e-ink display, a microphone that is arranged to receive audio commands, a keyboard, one or more switches or buttons, a microphone etc. In various embodiments, the user interface unit 1906 is arranged to display the graphical user interface described in connection with
The cache 106 is any software or hardware used to store location data, geocoordinate data and/or any data that helps the mobile device determine a location associated with a particular geocoordinate. In some embodiments, the cache stores data as illustrated in
The location determination module 1908 is any software or hardware arranged to help determine a location that is associated with a particular geocoordinate. In various embodiments, for example, the location determination module 1908 obtains a geocoordinate (e.g., step 202 of
Referring next to
The storage unit 2002 is any mechanism or device suitable for storing data. For example, the storage unit 2002 may include volatile memory, non-volatile memory, flash memory, a hard drive and/or any suitable computer readable storage medium. In various embodiments, the storage unit 2002 stores computer software and/or computer readable code that can be read and executed by the processor unit.
The processor unit 2004 includes one or more processors. The processor unit 2004 is arranged to execute the computer executable code stored in the storage unit 2002. The execution of the code can cause the server 104 to perform any of the server operations described in this application. For example, when executed, the code in the storage unit may cause the server 104 to perform any of the server operations described in connection with method 200 of
The network interface unit 2012 is any hardware or software arranged to help connect the server 104 to a network. In various embodiments, the network interface unit 2012 helps connect the server 104 to any suitable wired or wireless networks (e.g., the Internet.) The server 104 is arranged to receive geocoordinates or reverse geocoding requests from a mobile device 102 through the network interface unit 2012. The server is also arranged to transmit data (e.g., location data for storage in a cache) to a device (e.g., mobile device 102 of
The reverse geocoding module 2006 is any software or hardware arranged to receive a geocoordinate from a mobile device 102 and determine one or more locations that the geocoordinate refers or points to. For example, if the location determination module receives the latitude-longitude coordinates 37.394403, −121.946181, the location determination module is arranged to consult a mapping tool, a database or any other suitable resource to determine that the coordinates point to and are associated with Peete's Coffee (a coffee shop) at 3932 Rivermark Plaza, Santa Clara, Calif. The reverse geocoding module 2006 is arranged to perform the server side operations of method 200 of
The prepropagation module 2008 is any software or hardware arranged to provide location data to the caches of mobile devices, even when the location data has not been specifically requested by the mobile devices. The prepopagation module 2008 is arranged to perform any of the methods and operations described in connection with
It should be noted that any location cache (e.g., cache 106 of
This application sometimes refers to the transmitting of locations or location data from the server 104 to the mobile device 102. For example, this can occur when the server 104 is responding to a reverse geocoding request. It also can take place when the server 104 sends recommended locations to the mobile device 102 (e.g., as discussed in connection with
This application refers to various operations that are performed by the server and a (mobile) device. It should be appreciated that the server and the device may perform a wide variety of different types of operations in different implementations. In some implementations, for example, the server does not generate a proximity domain, a boundary region and/or any other type of cache hit determination mechanism, nor is this mechanism transmitted from the server to the device. Some embodiments involve a device that performs a cache hit determination using a proximity domain, boundary region or other cache hit determination mechanism that was generated locally and not at a remote server.
Although only a few embodiments of the invention have been described in detail, it should be appreciated that the invention may be implemented in many other forms without departing from the spirit or scope of the invention. For example, the figures include block diagrams. Each block diagram refers to a variety of different components. It should be appreciated that the features and functionality of one component may be transferred to another and the number of components and their arrangement may be different from what is shown in the figures. Any component can be divided into multiple components, or two or more components may be combined. Additionally, the figures for the application illustrate methods with various steps. These steps may be modified or reordered. In some embodiments, particular steps are removed or new steps are added as appropriate. Therefore, the present embodiments should be considered illustrative and not restrictive and the invention is not to be limited to the details given herein.
This application claims priority of U.S. Provisional Patent Application No. 61/884,893, entitled “Caching Reverse-Geocoded Locations on Smartphones,” filed Sep. 30, 2013, which is incorporated herein by reference in its entirety for all purposes.
Number | Date | Country | |
---|---|---|---|
61884893 | Sep 2013 | US |