2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "here_utils.h"
20 static const double LATITUDE_RANGE = 85.05113;
21 static const double LONGITUDE_RANGE = 180.0;
26 int ConvertToMapsError(int nErr)
30 case HERE_ERROR_NONE: return MAPS_ERROR_NONE;
31 case HERE_ERROR_PERMISSION_DENIED: return MAPS_ERROR_PERMISSION_DENIED;
32 case HERE_ERROR_OUT_OF_MEMORY: return MAPS_ERROR_OUT_OF_MEMORY;
33 case HERE_ERROR_INVALID_PARAMETER: return MAPS_ERROR_INVALID_PARAMETER;
34 case HERE_ERROR_NOT_SUPPORTED: return MAPS_ERROR_NOT_SUPPORTED;
35 case HERE_ERROR_CONNECTION_TIME_OUT: return MAPS_ERROR_CONNECTION_TIME_OUT;
36 case HERE_ERROR_NETWORK_UNREACHABLE: return MAPS_ERROR_NETWORK_UNREACHABLE;
37 case HERE_ERROR_INVALID_OPERATION: return MAPS_ERROR_INVALID_OPERATION;
38 case HERE_ERROR_KEY_NOT_AVAILABLE: return MAPS_ERROR_KEY_NOT_AVAILABLE;
39 case HERE_ERROR_RESOURCE_BUSY: return MAPS_ERROR_RESOURCE_BUSY;
40 case HERE_ERROR_CANCELED: return MAPS_ERROR_CANCELED;
41 case HERE_ERROR_UNKNOWN: return MAPS_ERROR_UNKNOWN;
42 case HERE_ERROR_SERVICE_NOT_AVAILABLE: return MAPS_ERROR_SERVICE_NOT_AVAILABLE;
43 case HERE_ERROR_NOT_FOUND: return MAPS_ERROR_NOT_FOUND;
45 return MAPS_ERROR_UNKNOWN;
48 int ConvertToHereError(int nErr)
52 case MAPS_ERROR_NONE: return HERE_ERROR_NONE;
53 case MAPS_ERROR_PERMISSION_DENIED: return HERE_ERROR_PERMISSION_DENIED;
54 case MAPS_ERROR_OUT_OF_MEMORY: return HERE_ERROR_OUT_OF_MEMORY;
55 case MAPS_ERROR_INVALID_PARAMETER: return HERE_ERROR_INVALID_PARAMETER;
56 case MAPS_ERROR_NOT_SUPPORTED: return HERE_ERROR_NOT_SUPPORTED;
57 case MAPS_ERROR_CONNECTION_TIME_OUT: return HERE_ERROR_CONNECTION_TIME_OUT;
58 case MAPS_ERROR_NETWORK_UNREACHABLE: return HERE_ERROR_NETWORK_UNREACHABLE;
59 case MAPS_ERROR_INVALID_OPERATION: return HERE_ERROR_INVALID_OPERATION;
60 case MAPS_ERROR_KEY_NOT_AVAILABLE: return HERE_ERROR_KEY_NOT_AVAILABLE;
61 case MAPS_ERROR_RESOURCE_BUSY: return HERE_ERROR_RESOURCE_BUSY;
62 case MAPS_ERROR_CANCELED: return HERE_ERROR_CANCELED;
63 case MAPS_ERROR_UNKNOWN: return HERE_ERROR_UNKNOWN;
64 case MAPS_ERROR_SERVICE_NOT_AVAILABLE: return HERE_ERROR_SERVICE_NOT_AVAILABLE;
65 case MAPS_ERROR_NOT_FOUND: return HERE_ERROR_NOT_FOUND;
67 return HERE_ERROR_UNKNOWN;
72 HERE_PLUGIN_BEGIN_NAMESPACE
74 HereUtils::HereUtils()
78 HereUtils::~HereUtils()
82 GeoRouteQuery::TravelMode HereUtils::Convert(maps_route_transport_mode_e nVal)
86 case MAPS_ROUTE_TRANSPORT_MODE_CAR: return GeoRouteQuery::TM_CarTravel;
87 case MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN: return GeoRouteQuery::TM_PedestrianTravel;
88 case MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT: return GeoRouteQuery::TM_PublicTransitTravel;
91 return GeoRouteQuery::TM_CarTravel;
94 maps_route_transport_mode_e HereUtils::Convert(GeoRouteQuery::TravelMode nVal)
98 case GeoRouteQuery::TM_CarTravel: return MAPS_ROUTE_TRANSPORT_MODE_CAR;
99 case GeoRouteQuery::TM_PedestrianTravel: return MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN;
100 case GeoRouteQuery::TM_PublicTransitTravel: return MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT;
103 return MAPS_ROUTE_TRANSPORT_MODE_CAR;
106 GeoRouteQuery::FeatureType HereUtils::Convert(maps_route_feature_e nVal)
110 case MAPS_ROUTE_FEATURE_NO: return GeoRouteQuery::FT_NoFeature;
111 case MAPS_ROUTE_FEATURE_TOLL: return GeoRouteQuery::FT_TollFeature;
112 case MAPS_ROUTE_FEATURE_MOTORWAY: return GeoRouteQuery::FT_MotorwayFeature;
113 case MAPS_ROUTE_FEATURE_BOATFERRY: return GeoRouteQuery::FT_BoatFerryFeature;
114 case MAPS_ROUTE_FEATURE_RAILFERRY: return GeoRouteQuery::FT_RailFerryFeature;
115 case MAPS_ROUTE_FEATURE_PUBLICTTRANSIT: return GeoRouteQuery::FT_PublicTransitFeature;
116 case MAPS_ROUTE_FEATURE_TUNNEL: return GeoRouteQuery::FT_TunnelFeature;
117 case MAPS_ROUTE_FEATURE_DIRTROAD: return GeoRouteQuery::FT_DirtRoadFeature;
118 case MAPS_ROUTE_FEATURE_PARKS: return GeoRouteQuery::FT_ParksFeature;
119 case MAPS_ROUTE_FEATURE_HOVLANE: return GeoRouteQuery::FT_HOVLane;
120 case MAPS_ROUTE_FEATURE_STAIRS: return GeoRouteQuery::FT_Stairs;
123 return GeoRouteQuery::FT_NoFeature;
126 GeoRouteQuery::FeatureWeight HereUtils::Convert(maps_route_feature_weight_e nVal)
130 case MAPS_ROUTE_FEATURE_WEIGHT_NORMAL: return GeoRouteQuery::FW_NormalFeatureWeight;
131 case MAPS_ROUTE_FEATURE_WEIGHT_PREFER: return GeoRouteQuery::FW_PreferFeatureWeight;
132 case MAPS_ROUTE_FEATURE_WEIGHT_AVOID: return GeoRouteQuery::FW_AvoidFeatureWeight;
133 case MAPS_ROUTE_FEATURE_WEIGHT_SOFTEXCLUDE: return GeoRouteQuery::FW_SoftExcludeFeatureWeight;
134 case MAPS_ROUTE_FEATURE_WEIGHT_STRICTEXCLUDE: return GeoRouteQuery::FW_StrictExcludeFeatureWeight;
137 return GeoRouteQuery::FW_NormalFeatureWeight;
140 maps_route_turn_type_e HereUtils::Convert(Maneuver::InstructionDirection nVal)
144 case Maneuver::ID_NoDirection: return MAPS_ROUTE_TURN_TYPE_NONE;
145 case Maneuver::ID_DirectionForward: return MAPS_ROUTE_TURN_TYPE_STRAIGHT;
146 case Maneuver::ID_DirectionBearRight: return MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT;
147 case Maneuver::ID_DirectionLightRight: return MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT;
148 case Maneuver::ID_DirectionRight: return MAPS_ROUTE_TURN_TYPE_RIGHT;
149 case Maneuver::ID_DirectionHardRight: return MAPS_ROUTE_TURN_TYPE_HARD_RIGHT;
150 case Maneuver::ID_DirectionUTurnRight: return MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT;
151 case Maneuver::ID_DirectionUTurnLeft: return MAPS_ROUTE_TURN_TYPE_UTURN_LEFT;
152 case Maneuver::ID_DirectionHardLeft: return MAPS_ROUTE_TURN_TYPE_HARD_LEFT;
153 case Maneuver::ID_DirectionLeft: return MAPS_ROUTE_TURN_TYPE_LEFT;
154 case Maneuver::ID_DirectionLightLeft: return MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT;
155 case Maneuver::ID_DirectionBearLeft: return MAPS_ROUTE_TURN_TYPE_BEAR_LEFT;
158 return MAPS_ROUTE_TURN_TYPE_NONE;
161 Maneuver::InstructionDirection HereUtils::Convert(maps_route_turn_type_e nVal)
165 case MAPS_ROUTE_TURN_TYPE_NONE: return Maneuver::ID_NoDirection;
166 case MAPS_ROUTE_TURN_TYPE_STRAIGHT: return Maneuver::ID_DirectionForward;
167 case MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT: return Maneuver::ID_DirectionBearRight;
168 case MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT: return Maneuver::ID_DirectionLightRight;
169 case MAPS_ROUTE_TURN_TYPE_RIGHT: return Maneuver::ID_DirectionRight;
170 case MAPS_ROUTE_TURN_TYPE_HARD_RIGHT: return Maneuver::ID_DirectionHardRight;
171 case MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT: return Maneuver::ID_DirectionUTurnRight;
172 case MAPS_ROUTE_TURN_TYPE_UTURN_LEFT: return Maneuver::ID_DirectionUTurnLeft;
173 case MAPS_ROUTE_TURN_TYPE_HARD_LEFT: return Maneuver::ID_DirectionHardLeft;
174 case MAPS_ROUTE_TURN_TYPE_LEFT: return Maneuver::ID_DirectionLeft;
175 case MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT: return Maneuver::ID_DirectionLightLeft;
176 case MAPS_ROUTE_TURN_TYPE_BEAR_LEFT: return Maneuver::ID_DirectionBearLeft;
179 return Maneuver::ID_NoDirection;
182 GeoBoundingBox& HereUtils::Convert(maps_area_h hArea, GeoBoundingBox& Box)
184 maps_area_s* area_s = (maps_area_s*)hArea;
186 if (!area_s || area_s->type != MAPS_AREA_RECTANGLE) return Box;
188 GeoCoordinates hereCoordLT(area_s->rect.top_left.latitude, area_s->rect.top_left.longitude);
189 GeoCoordinates hereCoordRB(area_s->rect.bottom_right.latitude, area_s->rect.bottom_right.longitude);
191 Box.SetTopLeft(hereCoordLT);
192 Box.SetBottomRight(hereCoordRB);
197 maps_area_h& HereUtils::Convert(GeoBoundingBox Box, maps_area_h& hArea)
199 maps_coordinates_h mapsCoordLT, mapsCoordRB;
200 GeoCoordinates hereCoordLT, hereCoordRB;
202 hereCoordLT = Box.GetTopLeft();
203 hereCoordRB = Box.GetBottomRight();
205 maps_coordinates_create(hereCoordLT.GetLatitude(), hereCoordLT.GetLongitude(), &mapsCoordLT);
206 maps_coordinates_create(hereCoordRB.GetLatitude(), hereCoordRB.GetLongitude(), &mapsCoordRB);
208 maps_area_create_rectangle(mapsCoordLT, mapsCoordRB, &hArea);
210 maps_coordinates_destroy(mapsCoordLT);
211 maps_coordinates_destroy(mapsCoordRB);
216 void HereUtils::Convert(String strUtf8, WString& strUtf16)
218 strUtf16.assign(strUtf8.begin(), strUtf8.end());
221 void HereUtils::Convert(WString strUtf16, String& strUtf8)
223 strUtf8.assign(strUtf16.begin(), strUtf16.end());
226 GeoBoundingBox& HereUtils::Convert(const char *src, GeoBoundingBox &box)
230 double coord[4] = { 0.0, };
232 token = strtok_r((char*)src, ",;", &next);
233 while (token && i < 4)
235 coord[i++] = atof(token);
236 token = strtok_r(NULL, ",;", &next);
238 box.SetTopLeft(GeoCoordinates(coord[0], coord[1]));
239 box.SetBottomRight(GeoCoordinates(coord[2], coord[3]));
243 bool HereUtils::IsValid(GeoCoordinates geoCoord)
245 return IsValidCoord(geoCoord.GetLatitude(), geoCoord.GetLongitude());
248 bool HereUtils::IsValid(maps_coordinates_s geoCoord)
250 return IsValidCoord(geoCoord.latitude, geoCoord.longitude);
253 bool HereUtils::IsValidCoord(double dLat, double dLng)
255 return ((dLat <= LATITUDE_RANGE && dLat >= -LATITUDE_RANGE) &&
256 (dLng <= LONGITUDE_RANGE && dLng >= -LONGITUDE_RANGE));
259 bool HereUtils::IsValid(maps_area_s hArea)
261 if (hArea.type == MAPS_AREA_RECTANGLE)
263 return (HereUtils::IsValid(hArea.rect.top_left) &&
264 HereUtils::IsValid(hArea.rect.bottom_right));
266 else if(hArea.type == MAPS_AREA_CIRCLE)
268 return HereUtils::IsValid(hArea.circle.center);
275 HERE_PLUGIN_END_NAMESPACE