4 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Youngae Kang <youngae.kang@samsung.com>, Yunhan Kim <yhan.kim@samsung.com>,
7 * Genie Kim <daejins.kim@samsung.com>, Minjune Kim <sena06.kim@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
29 #include "location-log.h"
30 #include "location-setting.h"
31 #include "location-map-ielement.h"
32 #include "location-map-pref.h"
33 #include "location-map-service.h"
34 #include "map-service.h"
36 EXPORT_API LocationMapObject *
37 location_map_new (const char * provider)
40 LocationMapObject *self = NULL;
41 self = g_object_new (MAP_TYPE_SERVICE, "provider", provider, NULL);
46 location_map_free (LocationMapObject *obj)
48 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
52 return LOCATION_ERROR_NONE;
56 is_connected_network()
58 gboolean is_connected = TRUE;
61 net_state = location_setting_get_int(VCONFKEY_NETWORK_STATUS);
63 LOCATION_LOGW("net_state[%d]", net_state);
64 if(net_state == VCONFKEY_NETWORK_OFF) {
73 location_map_get_position_from_address (LocationMapObject *obj,
74 const LocationAddress *address,
75 GList **position_list,
76 GList **accuracy_list)
78 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
79 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
80 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
82 int ret = LOCATION_ERROR_NONE;
83 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
85 ret = location_map_ielement_get_geocode (LOCATION_MAP_IELEMENT(obj), address, svc_pref, position_list, accuracy_list);
86 location_map_pref_free(svc_pref);
92 location_map_get_position_from_freeformed_address (LocationMapObject *obj,
94 GList **position_list,
95 GList **accuracy_list)
97 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
98 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
99 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
101 int ret = LOCATION_ERROR_NONE;
102 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
104 ret = location_map_ielement_get_geocode_freeform (LOCATION_MAP_IELEMENT(obj), address, svc_pref, position_list, accuracy_list);
105 location_map_pref_free(svc_pref);
111 location_map_get_address (LocationMapObject *obj,
112 LocationAddress **address,
113 LocationAccuracy **accuracy)
115 return LOCATION_ERROR_NOT_SUPPORTED;
119 location_map_get_address_from_position (LocationMapObject *obj,
120 const LocationPosition *position,
121 LocationAddress **address,
122 LocationAccuracy **accuracy)
124 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
125 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
126 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
128 int ret = LOCATION_ERROR_NONE;
129 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
131 ret = location_map_ielement_get_reversegeocode (LOCATION_MAP_IELEMENT(obj), position, svc_pref, address, accuracy);
132 location_map_pref_free(svc_pref);
138 location_map_get_position_from_address_async (LocationMapObject *obj,
139 const LocationAddress *address,
140 LocationPositionCB callback,
143 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
144 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
145 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
147 int ret = LOCATION_ERROR_NONE;
148 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
150 ret = location_map_ielement_get_geocode_async (LOCATION_MAP_IELEMENT(obj), address, svc_pref, callback, userdata);
151 location_map_pref_free(svc_pref);
158 location_map_get_position_from_freeformed_address_async (LocationMapObject *obj,
159 const gchar *address,
160 LocationPositionCB callback,
163 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
164 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
165 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
167 int ret = LOCATION_ERROR_NONE;
168 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
170 ret = location_map_ielement_get_geocode_freeform_async (LOCATION_MAP_IELEMENT(obj), address, svc_pref, callback, userdata);
171 location_map_pref_free(svc_pref);
177 location_map_get_address_from_position_async (LocationMapObject *obj,
178 const LocationPosition *position,
179 LocationAddressCB callback,
182 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
183 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
184 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
186 int ret = LOCATION_ERROR_NONE;
187 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
189 ret = location_map_ielement_get_reversegeocode_async (LOCATION_MAP_IELEMENT(obj), position, svc_pref, callback, userdata);
190 location_map_pref_free(svc_pref);
196 location_map_search_poi (LocationMapObject *obj,
197 const LocationPOIFilter *filter,
198 const LocationPosition *position,
199 const LocationPOIPreference *pref,
200 LocationPOICB cb, gpointer user_data, guint * req_id)
202 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
203 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
204 g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
205 g_return_val_if_fail (position, LOCATION_ERROR_PARAMETER);
206 g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
207 g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
208 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
209 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
211 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
213 return location_map_ielement_search_poi (LOCATION_MAP_IELEMENT(obj), filter, position, svc_pref, pref, cb, user_data, req_id);
217 location_map_search_poi_by_area (LocationMapObject *obj,
218 const LocationPOIFilter *filter,
219 const LocationBoundary *boundary,
220 const LocationPOIPreference *pref,
221 LocationPOICB cb, gpointer user_data, guint * req_id)
223 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
224 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
225 g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
226 g_return_val_if_fail (boundary, LOCATION_ERROR_PARAMETER);
227 g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
228 g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
229 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
230 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
232 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
234 return location_map_ielement_search_poi_by_area (LOCATION_MAP_IELEMENT(obj), filter, boundary, svc_pref, pref, cb, user_data, req_id);
238 location_map_search_poi_by_address (LocationMapObject *obj, const LocationPOIFilter * filter,
239 const LocationAddress * address, const LocationPOIPreference * pref,
240 LocationPOICB cb, gpointer user_data, guint * req_id)
242 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
243 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
244 g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
245 g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
246 g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
247 g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
248 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
249 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
251 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
253 return location_map_ielement_search_poi_by_address (LOCATION_MAP_IELEMENT(obj), filter, address, svc_pref, pref, cb, user_data, req_id);
257 location_map_search_poi_by_freeformed_address (LocationMapObject *obj,
258 const LocationPOIFilter *filter,
259 const gchar *address,
260 const LocationPOIPreference *pref,
261 LocationPOICB cb, gpointer user_data, guint *req_id)
263 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
264 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
265 g_return_val_if_fail (filter, LOCATION_ERROR_PARAMETER);
266 g_return_val_if_fail (address, LOCATION_ERROR_PARAMETER);
267 g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
268 g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
269 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
270 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
272 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
274 return location_map_ielement_search_poi_by_freeform (LOCATION_MAP_IELEMENT(obj), filter, address, svc_pref, pref, cb, user_data, req_id);
278 location_map_cancel_poi_request (LocationMapObject *obj, guint req_id)
280 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
281 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
282 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
283 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
285 return location_map_ielement_cancel_poi_request (LOCATION_MAP_IELEMENT(obj), req_id);
289 location_map_request_route (LocationMapObject *obj, LocationPosition *origin, LocationPosition *destination,
290 GList *waypoint, const LocationRoutePreference * pref,
291 LocationRouteCB cb, gpointer user_data, guint * req_id)
293 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
294 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
295 g_return_val_if_fail (origin, LOCATION_ERROR_PARAMETER);
296 g_return_val_if_fail (destination, LOCATION_ERROR_PARAMETER);
297 g_return_val_if_fail (pref, LOCATION_ERROR_PARAMETER);
298 g_return_val_if_fail (cb, LOCATION_ERROR_PARAMETER);
299 g_return_val_if_fail (req_id, LOCATION_ERROR_PARAMETER);
300 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
302 LocationMapPref *svc_pref = location_map_get_service_pref (obj);
304 return location_map_ielement_request_route (LOCATION_MAP_IELEMENT(obj), origin, destination,
305 waypoint, svc_pref, pref, cb, user_data, req_id);
309 location_map_cancel_route_request (LocationMapObject *obj, guint req_id)
311 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
312 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
313 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
315 return location_map_ielement_cancel_route_request (LOCATION_MAP_IELEMENT(obj), req_id);
319 location_map_is_supported_provider_capability (LocationMapObject *obj, LocationMapServiceType type)
321 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
322 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
323 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
325 return location_map_ielement_is_supported_provider_capability (LOCATION_MAP_IELEMENT(obj), type);
329 location_map_get_provider_capability_key (LocationMapObject *obj, LocationMapServiceType type, GList **key)
331 g_return_val_if_fail (obj, LOCATION_ERROR_PARAMETER);
332 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
333 g_return_val_if_fail (key, LOCATION_ERROR_PARAMETER);
334 g_return_val_if_fail (is_connected_network(), LOCATION_ERROR_NETWORK_NOT_CONNECTED);
336 return location_map_ielement_get_provider_capability_key (LOCATION_MAP_IELEMENT(obj), type, key);
339 EXPORT_API LocationMapPref *
340 location_map_get_service_pref (LocationMapObject *obj)
342 g_return_val_if_fail (obj, NULL);
343 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, NULL);
345 return map_service_get_pref (obj);
349 location_map_set_service_pref (LocationMapObject *obj, LocationMapPref *pref)
351 g_return_val_if_fail (obj, FALSE);
352 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
353 g_return_val_if_fail (pref, FALSE);
355 return map_service_set_pref (obj, pref);
359 location_map_get_supported_providers (LocationMapObject *obj)
361 g_return_val_if_fail (obj, NULL);
362 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
364 return map_service_get_supported_providers (obj);
368 location_map_get_default_provider (LocationMapObject *obj)
370 g_return_val_if_fail (obj, NULL);
371 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
373 return map_service_get_default_provider(obj);
377 location_map_set_provider (LocationMapObject *obj, gchar *provider)
379 g_return_val_if_fail (obj, NULL);
380 g_return_val_if_fail (G_OBJECT_TYPE(obj) == MAP_TYPE_SERVICE, LOCATION_ERROR_NOT_AVAILABLE);
382 return map_service_set_provider (obj, provider);