Tizen.Maps Setup
authorchanywa <cbible.kim@samsung.com>
Tue, 27 Dec 2016 03:52:23 +0000 (12:52 +0900)
committerchanywa <cbible.kim@samsung.com>
Tue, 27 Dec 2016 06:53:21 +0000 (15:53 +0900)
Change-Id: I4f8b094487f3d7260df3fb0c64bd4d7c9e2e2b6b

89 files changed:
.gitattributes [new file with mode: 0644]
.gitignore [new file with mode: 0644]
LICENSE [new file with mode: 0644]
packaging/csapi-maps.manifest [new file with mode: 0644]
packaging/csapi-maps.spec [new file with mode: 0644]
src/Tizen.Maps/Interop/Interop.Address.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Area.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Coordinates.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.ErrorCode.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Libraries.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Attribute.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Category.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Contact.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Editorial.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Filter.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Image.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Link.Object.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Media.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Rating.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.Review.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Place.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Preference.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Route.Maneuver.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Route.Segment.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Route.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.SafeMapsHandle.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.Service.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.View.Event.Data.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.View.Object.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.View.Snapshot.cs [new file with mode: 0755]
src/Tizen.Maps/Interop/Interop.View.cs [new file with mode: 0755]
src/Tizen.Maps/Properties/AssemblyInfo.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps.Net45.csproj [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps.Net45.project.json [new file with mode: 0644]
src/Tizen.Maps/Tizen.Maps.csproj [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps.nuspec [new file with mode: 0644]
src/Tizen.Maps/Tizen.Maps.project.json [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps.snk [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Area.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Direction.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/DistanceUnit.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/GeocodePreference.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/GeocodeRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Geocoordinates.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/GeocoordinatesList.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/GestureType.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapGestureEventArgs.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapObject.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapObjectEventArgs.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapObjectType.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapService.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapServiceRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapTypes.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MapView.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Marker.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/MultiReverseGeocodeRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Overlay.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Place.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceAddress.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceAddressList.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceAttribute.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceCategory.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceContact.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceEditorial.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceFilter.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceImage.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceLink.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceList.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceMedia.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceRating.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceReview.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceSearchPreference.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/PlaceSearchRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Polygon.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Polyline.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/ReverseGeocodeRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/Route.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteFeature.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteFeatureWeight.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteManeuver.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteOptimization.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteSearchPreference.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteSearchRequest.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/RouteSegment.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/ServiceData.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/ServiceRequestType.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/SnapshotType.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/TransportMode.cs [new file with mode: 0755]
src/Tizen.Maps/Tizen.Maps/TurnInstruction.cs [new file with mode: 0755]

diff --git a/.gitattributes b/.gitattributes
new file mode 100644 (file)
index 0000000..5896c16
--- /dev/null
@@ -0,0 +1,63 @@
+###############################################################################
+# Set default behavior to automatically normalize line endings.
+###############################################################################
+* text=auto
+
+###############################################################################
+# Set default behavior for command prompt diff.
+#
+# This is need for earlier builds of msysgit that does not have it on by
+# default for csharp files.
+# Note: This is only used by command line
+###############################################################################
+#*.cs     diff=csharp
+
+###############################################################################
+# Set the merge driver for project and solution files
+#
+# Merging from the command prompt will add diff markers to the files if there
+# are conflicts (Merging from VS is not affected by the settings below, in VS
+# the diff markers are never inserted). Diff markers may cause the following
+# file extensions to fail to load in VS. An alternative would be to treat
+# these files as binary and thus will always conflict and require user
+# intervention with every merge. To do so, just uncomment the entries below
+###############################################################################
+#*.sln       merge=binary
+#*.csproj    merge=binary
+#*.vbproj    merge=binary
+#*.vcxproj   merge=binary
+#*.vcproj    merge=binary
+#*.dbproj    merge=binary
+#*.fsproj    merge=binary
+#*.lsproj    merge=binary
+#*.wixproj   merge=binary
+#*.modelproj merge=binary
+#*.sqlproj   merge=binary
+#*.wwaproj   merge=binary
+
+###############################################################################
+# behavior for image files
+#
+# image files are treated as binary by default.
+###############################################################################
+#*.jpg   binary
+#*.png   binary
+#*.gif   binary
+
+###############################################################################
+# diff behavior for common document formats
+#
+# Convert binary document formats to text before diffing them. This feature
+# is only available from the command line. Turn it on by uncommenting the
+# entries below.
+###############################################################################
+#*.doc   diff=astextplain
+#*.DOC   diff=astextplain
+#*.docx  diff=astextplain
+#*.DOCX  diff=astextplain
+#*.dot   diff=astextplain
+#*.DOT   diff=astextplain
+#*.pdf   diff=astextplain
+#*.PDF   diff=astextplain
+#*.rtf   diff=astextplain
+#*.RTF   diff=astextplain
diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..46619d5
--- /dev/null
@@ -0,0 +1,7 @@
+bin/
+obj/
+*.exe
+*.dll
+*.csproj.user
+*.lock.json
+.vs/
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..d645695
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,202 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/packaging/csapi-maps.manifest b/packaging/csapi-maps.manifest
new file mode 100644 (file)
index 0000000..75b0fa5
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+    <request>
+        <domain name="_"/>
+    </request>
+</manifest>
diff --git a/packaging/csapi-maps.spec b/packaging/csapi-maps.spec
new file mode 100644 (file)
index 0000000..20877d8
--- /dev/null
@@ -0,0 +1,72 @@
+%{!?dotnet_assembly_path: %define dotnet_assembly_path /opt/usr/share/dotnet.tizen/framework}
+
+%if 0%{?tizen_build_devel_mode}
+%define BUILDCONF Debug
+%else
+%define BUILDCONF Release
+%endif
+
+Name:       csapi-maps
+Summary:    Tizen Map Service API for C#
+Version:    1.0.1
+Release:    1
+Group:      Development/Libraries
+License:    Apache-2.0
+URL:        https://www.tizen.org
+Source0:    %{name}-%{version}.tar.gz
+Source1:    %{name}.manifest
+
+BuildRequires: mono-compiler
+BuildRequires: mono-devel
+
+BuildRequires: dotnet-build-tools
+BuildRequires: csapi-tizen-nuget
+BuildRequires: elm-sharp-nuget
+
+%description
+Tizen Map Service API for C#
+
+%prep
+%setup -q
+cp %{SOURCE1} .
+
+%define Assemblies Tizen.Maps
+
+%build
+for ASM in %{Assemblies}; do
+# NuGet Restore
+find $ASM/*.project.json -exec nuget restore {} \;
+# Build
+find $ASM/*.csproj -exec xbuild {} /p:Configuration=%{BUILDCONF} \;
+# NuGet Pack
+nuget pack $ASM/$ASM.nuspec -Version %{version} -Properties Configuration=%{BUILDCONF}
+done
+
+%install
+# Runtime Binary
+mkdir -p %{buildroot}%{dotnet_assembly_path}
+for ASM in %{Assemblies}; do
+%if 0%{?_with_corefx}
+  install -p -m 644 $ASM/bin/%{BUILDCONF}/$ASM.dll %{buildroot}%{dotnet_assembly_path}
+%else
+  install -p -m 644 $ASM/bin/%{BUILDCONF}/Net45/$ASM.dll %{buildroot}%{dotnet_assembly_path}
+%endif
+done
+# NuGet
+mkdir -p %{buildroot}/nuget
+install -p -m 644 *.nupkg %{buildroot}/nuget
+
+%files
+%manifest %{name}.manifest
+%license LICENSE
+%attr(644,root,root) %{dotnet_assembly_path}/*.dll
+
+%package nuget
+Summary:   NuGet package for %{name}
+Group:     Development/Libraries
+
+%description nuget
+NuGet package for %{name}
+
+%files nuget
+/nuget/*.nupkg
diff --git a/src/Tizen.Maps/Interop/Interop.Address.cs b/src/Tizen.Maps/Interop/Interop.Address.cs
new file mode 100755 (executable)
index 0000000..4882035
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Address
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool AddressCallback(int index, IntPtr /* maps_address_h */ addressHandle, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_create")]
+        internal static extern ErrorCode Create(out IntPtr /* maps_address_h */ address);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_address_h */ address);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_clone")]
+        internal static extern ErrorCode Clone(IntPtr /* maps_address_h */ origin, out IntPtr /* maps_address_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_building_number")]
+        internal static extern ErrorCode GetBuildingNumber(AddressHandle /* maps_address_h */ address, out string buildingNumber);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_street")]
+        internal static extern ErrorCode GetStreet(AddressHandle /* maps_address_h */ address, out string street);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_district")]
+        internal static extern ErrorCode GetDistrict(AddressHandle /* maps_address_h */ address, out string district);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_city")]
+        internal static extern ErrorCode GetCity(AddressHandle /* maps_address_h */ address, out string city);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_state")]
+        internal static extern ErrorCode GetState(AddressHandle /* maps_address_h */ address, out string state);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_country")]
+        internal static extern ErrorCode GetCountry(AddressHandle /* maps_address_h */ address, out string country);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_country_code")]
+        internal static extern ErrorCode GetCountryCode(AddressHandle /* maps_address_h */ address, out string countryCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_county")]
+        internal static extern ErrorCode GetCounty(AddressHandle /* maps_address_h */ address, out string county);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_postal_code")]
+        internal static extern ErrorCode GetPostalCode(AddressHandle /* maps_address_h */ address, out string postalCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_get_freetext")]
+        internal static extern ErrorCode GetFreetext(AddressHandle /* maps_address_h */ address, out string freetext);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_building_number")]
+        internal static extern ErrorCode SetBuildingNumber(AddressHandle /* maps_address_h */ address, string buildingNumber);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_street")]
+        internal static extern ErrorCode SetStreet(AddressHandle /* maps_address_h */ address, string street);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_district")]
+        internal static extern ErrorCode SetDistrict(AddressHandle /* maps_address_h */ address, string district);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_city")]
+        internal static extern ErrorCode SetCity(AddressHandle /* maps_address_h */ address, string city);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_state")]
+        internal static extern ErrorCode SetState(AddressHandle /* maps_address_h */ address, string state);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_country")]
+        internal static extern ErrorCode SetCountry(AddressHandle /* maps_address_h */ address, string country);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_country_code")]
+        internal static extern ErrorCode SetCountryCode(AddressHandle /* maps_address_h */ address, string countryCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_county")]
+        internal static extern ErrorCode SetCounty(AddressHandle /* maps_address_h */ address, string county);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_postal_code")]
+        internal static extern ErrorCode SetPostalCode(AddressHandle /* maps_address_h */ address, string postalCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_set_freetext")]
+        internal static extern ErrorCode SetFreetext(AddressHandle /* maps_address_h */ address, string freetext);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_create")]
+        internal static extern ErrorCode ListCreate(out IntPtr /* maps_address_list_h */ addressList);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_append")]
+        internal static extern ErrorCode ListAppend(AddressListHandle /* maps_address_list_h */ addressList, AddressHandle /* maps_address_h */ address);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_remove")]
+        internal static extern ErrorCode ListRemove(AddressListHandle /* maps_address_list_h */ addressList, AddressHandle /* maps_address_h */ address);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_get_length")]
+        internal static extern ErrorCode ListGetLength(AddressListHandle /* maps_address_list_h */ addressList, out int length);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_foreach")]
+        internal static extern ErrorCode ListForeach(AddressListHandle /* maps_address_list_h */ addressList, AddressCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_address_list_destroy")]
+        internal static extern ErrorCode ListDestroy(IntPtr /* maps_address_list_h */ addressList);
+    }
+
+    internal class AddressHandle : SafeMapsHandle
+    {
+        public AddressHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Address.Destroy; }
+    }
+
+
+    internal class AddressListHandle : SafeMapsHandle
+    {
+        public AddressListHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Address.ListDestroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Area.cs b/src/Tizen.Maps/Interop/Interop.Area.cs
new file mode 100755 (executable)
index 0000000..6ba654e
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum AreaType
+    {
+        None, // MAPS_AREA_NONE
+        Rectangle, // MAPS_AREA_RECTANGLE
+        Circle, // MAPS_AREA_CIRCLE
+    }
+
+    internal static partial class Area
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_area_create_rectangle")]
+        internal static extern ErrorCode CreateRectangle(CoordinatesHandle /* maps_coordinates_h */ topLeft, CoordinatesHandle /* maps_coordinates_h */ bottomRight, out IntPtr /* maps_area_h */ area);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_area_create_circle")]
+        internal static extern ErrorCode CreateCircle(CoordinatesHandle /* maps_coordinates_h */ center, double radius, out IntPtr /* maps_area_h */ area);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_area_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_area_h */ area);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_area_clone")]
+        internal static extern ErrorCode Clone(AreaHandle /* maps_area_h */ origin, out IntPtr /* maps_area_h */ cloned);
+    }
+
+    internal class AreaHandle : SafeMapsHandle
+    {
+        public AreaHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Area.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Coordinates.cs b/src/Tizen.Maps/Interop/Interop.Coordinates.cs
new file mode 100755 (executable)
index 0000000..5f975ba
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Coordinates
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool CoordinatesCallback(int index, IntPtr /* maps_coordinates_h */ coordinates, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_create")]
+        internal static extern ErrorCode Create(double latitude, double longitude, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_clone")]
+        internal static extern ErrorCode Clone(IntPtr /* maps_coordinates_h */ origin, out IntPtr /* maps_coordinates_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_get_latitude")]
+        internal static extern ErrorCode GetLatitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, out double latitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_get_longitude")]
+        internal static extern ErrorCode GetLongitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, out double longitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_get_latitude_longitude")]
+        internal static extern ErrorCode GetLatitudeLongitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, out double latitude, out double longitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_set_latitude")]
+        internal static extern ErrorCode SetLatitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, double latitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_set_longitude")]
+        internal static extern ErrorCode SetLongitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, double longitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_set_latitude_longitude")]
+        internal static extern ErrorCode SetLatitudeLongitude(CoordinatesHandle /* maps_coordinates_h */ coordinates, double latitude, double longitude);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_create")]
+        internal static extern ErrorCode ListCreate(out IntPtr /* maps_coordinates_list_h */ coordinatesList);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_destroy")]
+        internal static extern ErrorCode ListDestroy(IntPtr /* maps_coordinates_list_h */ coordinatesList);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_append")]
+        internal static extern ErrorCode ListAppend(CoordinatesListHandle /* maps_coordinates_list_h */ coordinatesList, IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_remove")]
+        internal static extern ErrorCode ListRemove(CoordinatesListHandle /* maps_coordinates_list_h */ coordinatesList, CoordinatesHandle /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_get_length")]
+        internal static extern ErrorCode ListGetLength(CoordinatesListHandle /* maps_coordinates_list_h */ coordinatesList, out int length);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_coordinates_list_foreach")]
+        internal static extern ErrorCode ListForeach(CoordinatesListHandle /* maps_coordinates_list_h */ coordinatesList, CoordinatesCallback callback, IntPtr /* void */ userData);
+    }
+
+    internal class CoordinatesHandle : SafeMapsHandle
+    {
+        public CoordinatesHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Coordinates.Destroy; }
+    }
+
+    internal class CoordinatesListHandle : SafeMapsHandle
+    {
+        public CoordinatesListHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Coordinates.ListDestroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.ErrorCode.cs b/src/Tizen.Maps/Interop/Interop.ErrorCode.cs
new file mode 100755 (executable)
index 0000000..1b90512
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.CompilerServices;
+using Tizen;
+
+internal static partial class Interop
+{
+    internal enum ErrorCode
+    {
+        None = Tizen.Internals.Errors.ErrorCode.None,
+        PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
+        OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory,
+        InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
+        NotSupported = Tizen.Internals.Errors.ErrorCode.NotSupported,
+        ConnectionTimeOut = Tizen.Internals.Errors.ErrorCode.ConnectionTimeout,
+        NetworkUnreachable = Tizen.Internals.Errors.ErrorCode.NetworkUnreachable,
+        InvalidOperation = Tizen.Internals.Errors.ErrorCode.InvalidOperation,
+        KeyNotAvailable = Tizen.Internals.Errors.ErrorCode.KeyNotAvailable,
+        ResourceBusy = Tizen.Internals.Errors.ErrorCode.ResourceBusy,
+        Canceled = Tizen.Internals.Errors.ErrorCode.Canceled,
+        Unknown = Tizen.Internals.Errors.ErrorCode.Unknown,
+        ServiceNotAvailable = -0x02C20000 | 0x01, // MAPS_ERROR_SERVICE_NOT_AVAILABLE
+        NotFound = -0x02C20000 | 0x02, // MAPS_ERROR_NOT_FOUND
+    }
+}
+
+internal static class ErrorCodeExtensions
+{
+    private const string LogTag = "Tizen.Maps";
+
+    internal static bool IsSuccess(this Interop.ErrorCode err)
+    {
+        return err == Interop.ErrorCode.None;
+    }
+
+    internal static bool IsFailed(this Interop.ErrorCode err)
+    {
+        return !err.IsSuccess();
+    }
+
+    /// <summary>
+    /// Utility method to check for error, returns false if failed and print warning messages
+    /// </summary>
+    /// <returns>true in case of no error, false otherwise</returns>
+    internal static bool WarnIfFailed(this Interop.ErrorCode err, string msg, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0)
+    {
+        if (err.IsFailed())
+        {
+            Log.Debug(LogTag, string.Format("{0}, err: {1}", msg, err.ToString()), file, func, line);
+            return false;
+        }
+        return true;
+    }
+
+    /// <summary>
+    /// Utility method to check for error, returns false if failed and throw exception
+    /// </summary>
+    /// <returns>true in case of no error</returns>
+    internal static bool ThrowIfFailed(this Interop.ErrorCode err, string msg, [CallerFilePath] string file = "", [CallerMemberName] string func = "", [CallerLineNumber] int line = 0)
+    {
+        if (err.IsFailed())
+        {
+            Log.Error(LogTag, string.Format("{0}, err: {1}", msg, err.ToString()), file, func, line);
+            throw err.GetException(msg);
+        }
+        return true;
+    }
+
+    internal static Exception GetException(this Interop.ErrorCode err, string message)
+    {
+        string errMessage = string.Format("{0}, err: {1}", message, err.ToString());
+        switch (err)
+        {
+            //case ErrorCode.None:
+            case Interop.ErrorCode.PermissionDenied: return new UnauthorizedAccessException(errMessage);
+            case Interop.ErrorCode.InvalidParameter: return new ArgumentException(errMessage);
+            case Interop.ErrorCode.OutOfMemory:
+            case Interop.ErrorCode.NotSupported:
+            case Interop.ErrorCode.ConnectionTimeOut:
+            case Interop.ErrorCode.NetworkUnreachable:
+            case Interop.ErrorCode.InvalidOperation:
+            case Interop.ErrorCode.KeyNotAvailable:
+            case Interop.ErrorCode.ResourceBusy:
+            case Interop.ErrorCode.Canceled:
+            case Interop.ErrorCode.Unknown:
+            case Interop.ErrorCode.ServiceNotAvailable:
+            case Interop.ErrorCode.NotFound:
+            default: return new InvalidOperationException(errMessage);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Interop/Interop.Libraries.cs b/src/Tizen.Maps/Interop/Interop.Libraries.cs
new file mode 100755 (executable)
index 0000000..03be6b6
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+internal static partial class Interop
+{
+    internal static class Libraries
+    {
+        internal const string MapService = "capi-maps-service.so.0";
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Attribute.cs b/src/Tizen.Maps/Interop/Interop.Place.Attribute.cs
new file mode 100755 (executable)
index 0000000..a301626
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceAttribute
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_attribute_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_attribute_h */ attribute);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_attribute_clone")]
+        internal static extern ErrorCode Clone(PlaceAttributeHandle /* maps_place_attribute_h */ origin, out IntPtr /* maps_place_attribute_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_attribute_get_id")]
+        internal static extern ErrorCode GetId(PlaceAttributeHandle /* maps_place_attribute_h */ attribute, out string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_attribute_get_label")]
+        internal static extern ErrorCode GetLabel(PlaceAttributeHandle /* maps_place_attribute_h */ attribute, out string label);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_attribute_get_text")]
+        internal static extern ErrorCode GetText(PlaceAttributeHandle /* maps_place_attribute_h */ attribute, out string text);
+    }
+
+    internal class PlaceAttributeHandle : SafeMapsHandle
+    {
+        public PlaceAttributeHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceAttribute.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Category.cs b/src/Tizen.Maps/Interop/Interop.Place.Category.cs
new file mode 100755 (executable)
index 0000000..a8b547c
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceCategory
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_create")]
+        internal static extern ErrorCode Create(out IntPtr /* maps_place_category_h */ category);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_clone")]
+        internal static extern ErrorCode Clone(PlaceCategoryHandle /* maps_place_category_h */ origin, out IntPtr /* maps_place_category_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_category_h */ category);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_get_id")]
+        internal static extern ErrorCode GetId(PlaceCategoryHandle /* maps_place_category_h */ category, out string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_get_name")]
+        internal static extern ErrorCode GetName(PlaceCategoryHandle /* maps_place_category_h */ category, out string name);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_get_url")]
+        internal static extern ErrorCode GetUrl(PlaceCategoryHandle /* maps_place_category_h */ category, out string url);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_set_id")]
+        internal static extern ErrorCode SetId(PlaceCategoryHandle /* maps_place_category_h */ category, string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_set_name")]
+        internal static extern ErrorCode SetName(PlaceCategoryHandle /* maps_place_category_h */ category, string name);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_category_set_url")]
+        internal static extern ErrorCode SetUrl(PlaceCategoryHandle /* maps_place_category_h */ category, string url);
+    }
+
+    internal class PlaceCategoryHandle : SafeMapsHandle
+    {
+        public PlaceCategoryHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceCategory.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Contact.cs b/src/Tizen.Maps/Interop/Interop.Place.Contact.cs
new file mode 100755 (executable)
index 0000000..3d4b430
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceContact
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_contact_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_contact_h */ contact);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_contact_clone")]
+        internal static extern ErrorCode Clone(PlaceContactHandle /* maps_place_contact_h */ origin, out IntPtr /* maps_place_contact_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_contact_get_label")]
+        internal static extern ErrorCode GetLabel(PlaceContactHandle /* maps_place_contact_h */ contact, out string label);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_contact_get_type")]
+        internal static extern ErrorCode GetType(PlaceContactHandle /* maps_place_contact_h */ contact, out string type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_contact_get_value")]
+        internal static extern ErrorCode GetValue(PlaceContactHandle /* maps_place_contact_h */ contact, out string value);
+    }
+
+    internal class PlaceContactHandle : SafeMapsHandle
+    {
+        public PlaceContactHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceContact.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Editorial.cs b/src/Tizen.Maps/Interop/Interop.Place.Editorial.cs
new file mode 100755 (executable)
index 0000000..9b974b2
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceEditorial
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_editorial_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_editorial_h */ editorial);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_editorial_clone")]
+        internal static extern ErrorCode Clone(PlaceEditorialHandle /* maps_place_editorial_h */ origin, out IntPtr /* maps_place_editorial_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_editorial_get_description")]
+        internal static extern ErrorCode GetDescription(PlaceEditorialHandle /* maps_place_editorial_h */ editorial, out string description);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_editorial_get_language")]
+        internal static extern ErrorCode GetLanguage(PlaceEditorialHandle /* maps_place_editorial_h */ editorial, out string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_editorial_get_media")]
+        internal static extern ErrorCode GetMedia(PlaceEditorialHandle /* maps_place_editorial_h */ editorial, out IntPtr /* maps_place_media_h */ media);
+    }
+
+    internal class PlaceEditorialHandle : SafeMapsHandle
+    {
+        public PlaceEditorialHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceEditorial.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Filter.cs b/src/Tizen.Maps/Interop/Interop.Place.Filter.cs
new file mode 100755 (executable)
index 0000000..4ca7185
--- /dev/null
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceFilter
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool PlaceFilterPropertiesCallback(int index, int total, string key, IntPtr /* void */ value, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_create")]
+        internal static extern ErrorCode Create(out IntPtr /* maps_place_filter_h */ filter);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_filter_h */ filter);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_clone")]
+        internal static extern ErrorCode Clone(PlaceFilterHandle /* maps_place_filter_h */ origin, out IntPtr /* maps_place_filter_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_get")]
+        internal static extern ErrorCode Get(PlaceFilterHandle /* maps_place_filter_h */ filter, string key, out string value);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_get_keyword")]
+        internal static extern ErrorCode GetKeyword(PlaceFilterHandle /* maps_place_filter_h */ filter, out string keyword);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_get_place_name")]
+        internal static extern ErrorCode GetPlaceName(PlaceFilterHandle /* maps_place_filter_h */ filter, out string placeName);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_get_category")]
+        internal static extern ErrorCode GetCategory(PlaceFilterHandle /* maps_place_filter_h */ filter, out IntPtr /* maps_place_category_h */ category);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_foreach_property")]
+        internal static extern ErrorCode ForeachProperty(PlaceFilterHandle /* maps_place_filter_h */ filter, PlaceFilterPropertiesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_get_place_address")]
+        internal static extern ErrorCode GetPlaceAddress(PlaceFilterHandle /* maps_place_filter_h */ filter, out string placeAddress);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_set")]
+        internal static extern ErrorCode Set(PlaceFilterHandle /* maps_place_filter_h */ filter, string key, string value);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_set_keyword")]
+        internal static extern ErrorCode SetKeyword(PlaceFilterHandle /* maps_place_filter_h */ filter, string keyword);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_set_place_name")]
+        internal static extern ErrorCode SetPlaceName(PlaceFilterHandle /* maps_place_filter_h */ filter, string placeName);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_set_category")]
+        internal static extern ErrorCode SetCategory(PlaceFilterHandle /* maps_place_filter_h */ filter, PlaceCategoryHandle /* maps_place_category_h */ category);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_filter_set_place_address")]
+        internal static extern ErrorCode SetPlaceAddress(PlaceFilterHandle /* maps_place_filter_h */ filter, string placeAddress);
+    }
+
+    internal class PlaceFilterHandle : SafeMapsHandle
+    {
+        public PlaceFilterHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceFilter.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Image.cs b/src/Tizen.Maps/Interop/Interop.Place.Image.cs
new file mode 100755 (executable)
index 0000000..7ad7b64
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceImage
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_image_h */ image);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_clone")]
+        internal static extern ErrorCode Clone(PlaceImageHandle /* maps_place_image_h */ origin, out IntPtr /* maps_place_image_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_id")]
+        internal static extern ErrorCode GetId(PlaceImageHandle /* maps_place_image_h */ image, out string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_url")]
+        internal static extern ErrorCode GetUrl(PlaceImageHandle /* maps_place_image_h */ image, out string url);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_width")]
+        internal static extern ErrorCode GetWidth(PlaceImageHandle /* maps_place_image_h */ image, out int width);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_height")]
+        internal static extern ErrorCode GetHeight(PlaceImageHandle /* maps_place_image_h */ image, out int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_user_link")]
+        internal static extern ErrorCode GetUserLink(PlaceImageHandle /* maps_place_image_h */ image, out IntPtr /* maps_place_link_object_h */ user);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_image_get_media")]
+        internal static extern ErrorCode GetMedia(PlaceImageHandle /* maps_place_image_h */ image, out IntPtr /* maps_place_media_h */ media);
+    }
+
+    internal class PlaceImageHandle : SafeMapsHandle
+    {
+        public PlaceImageHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceImage.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Link.Object.cs b/src/Tizen.Maps/Interop/Interop.Place.Link.Object.cs
new file mode 100755 (executable)
index 0000000..9bcff08
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceLinkObject
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_link_object_h */ link);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_clone")]
+        internal static extern ErrorCode Clone(PlaceLinkObjectHandle /* maps_place_link_object_h */ origin, out IntPtr /* maps_place_link_object_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_get_id")]
+        internal static extern ErrorCode GetId(PlaceLinkObjectHandle /* maps_place_link_object_h */ link, out string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_get_name")]
+        internal static extern ErrorCode GetName(PlaceLinkObjectHandle /* maps_place_link_object_h */ link, out string name);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_get_string")]
+        internal static extern ErrorCode GetString(PlaceLinkObjectHandle /* maps_place_link_object_h */ link, out string linkString);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_link_object_get_type")]
+        internal static extern ErrorCode GetType(PlaceLinkObjectHandle /* maps_place_link_object_h */ link, out string type);
+    }
+
+    internal class PlaceLinkObjectHandle : SafeMapsHandle
+    {
+        public PlaceLinkObjectHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceLinkObject.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Media.cs b/src/Tizen.Maps/Interop/Interop.Place.Media.cs
new file mode 100755 (executable)
index 0000000..133d4a0
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceMedia
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_media_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_media_h */ media);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_media_clone")]
+        internal static extern ErrorCode Clone(PlaceMediaHandle /* maps_place_media_h */ origin, out IntPtr /* maps_place_media_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_media_get_attribution")]
+        internal static extern ErrorCode GetAttribution(PlaceMediaHandle /* maps_place_media_h */ media, out string attribution);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_media_get_supplier")]
+        internal static extern ErrorCode GetSupplier(PlaceMediaHandle /* maps_place_media_h */ media, out IntPtr /* maps_place_link_object_h */ supplier);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_media_get_via")]
+        internal static extern ErrorCode GetVia(PlaceMediaHandle /* maps_place_media_h */ media, out IntPtr /* maps_place_link_object_h */ via);
+    }
+
+    internal class PlaceMediaHandle : SafeMapsHandle
+    {
+        public PlaceMediaHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceMedia.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Rating.cs b/src/Tizen.Maps/Interop/Interop.Place.Rating.cs
new file mode 100755 (executable)
index 0000000..fe3965a
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceRating
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_rating_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_rating_h */ rating);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_rating_clone")]
+        internal static extern ErrorCode Clone(PlaceRatingHandle /* maps_place_rating_h */ origin, out IntPtr /* maps_place_rating_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_rating_get_count")]
+        internal static extern ErrorCode GetCount(PlaceRatingHandle /* maps_place_rating_h */ rating, out int count);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_rating_get_average")]
+        internal static extern ErrorCode GetAverage(PlaceRatingHandle /* maps_place_rating_h */ rating, out double average);
+    }
+
+    internal class PlaceRatingHandle : SafeMapsHandle
+    {
+        public PlaceRatingHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceRating.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.Review.cs b/src/Tizen.Maps/Interop/Interop.Place.Review.cs
new file mode 100755 (executable)
index 0000000..c3f7fb8
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class PlaceReview
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_review_h */ review);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_clone")]
+        internal static extern ErrorCode Clone(PlaceReviewHandle /* maps_place_review_h */ origin, out IntPtr /* maps_place_review_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_date")]
+        internal static extern ErrorCode GetDate(PlaceReviewHandle /* maps_place_review_h */ review, out string date);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_title")]
+        internal static extern ErrorCode GetTitle(PlaceReviewHandle /* maps_place_review_h */ review, out string title);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_rating")]
+        internal static extern ErrorCode GetRating(PlaceReviewHandle /* maps_place_review_h */ review, out double rating);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_description")]
+        internal static extern ErrorCode GetDescription(PlaceReviewHandle /* maps_place_review_h */ review, out string description);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_language")]
+        internal static extern ErrorCode GetLanguage(PlaceReviewHandle /* maps_place_review_h */ review, out string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_media")]
+        internal static extern ErrorCode GetMedia(PlaceReviewHandle /* maps_place_review_h */ review, out IntPtr /* maps_place_media_h */ media);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_review_get_user_link")]
+        internal static extern ErrorCode GetUserLink(PlaceReviewHandle /* maps_place_review_h */ review, out IntPtr /* maps_place_link_object_h */ user);
+    }
+
+    internal class PlaceReviewHandle : SafeMapsHandle
+    {
+        public PlaceReviewHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = PlaceReview.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Place.cs b/src/Tizen.Maps/Interop/Interop.Place.cs
new file mode 100755 (executable)
index 0000000..a03cca9
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Place
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool PropertiesCallback(int index, int total, string key, string /* void */ value, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool CategoriesCallback(int index, int total, IntPtr /* maps_place_category_h */ category, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool AttributesCallback(int index, int total, IntPtr /* maps_place_attribute_h */ attribute, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool ContactsCallback(int index, int total, IntPtr /* maps_place_contact_h */ contact, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool EditorialsCallback(int index, int total, IntPtr /* maps_place_editorial_h */ editorial, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool ImagesCallback(int index, int total, IntPtr /* maps_place_image_h */ image, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool ReviewsCallback(int index, int total, IntPtr /* maps_place_review_h */ review, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool PlaceCallback(int index, IntPtr /* maps_place_h */ place, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_place_h */ place);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_clone")]
+        internal static extern ErrorCode Clone(PlaceHandle /* maps_place_h */ origin, out IntPtr /* maps_place_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_id")]
+        internal static extern ErrorCode GetId(PlaceHandle /* maps_place_h */ place, out string id);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_name")]
+        internal static extern ErrorCode GetName(PlaceHandle /* maps_place_h */ place, out string name);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_uri")]
+        internal static extern ErrorCode GetUri(PlaceHandle /* maps_place_h */ place, out string uri);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_location")]
+        internal static extern ErrorCode GetLocation(PlaceHandle /* maps_place_h */ place, out IntPtr /* maps_coordinates_h */ location);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_distance")]
+        internal static extern ErrorCode GetDistance(PlaceHandle /* maps_place_h */ place, out int distance);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_address")]
+        internal static extern ErrorCode GetAddress(PlaceHandle /* maps_place_h */ place, out IntPtr /* maps_address_h */ address);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_rating")]
+        internal static extern ErrorCode GetRating(PlaceHandle /* maps_place_h */ place, out IntPtr /* maps_place_rating_h */ rating);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_property")]
+        internal static extern ErrorCode ForeachProperty(PlaceHandle /* maps_place_h */ place, PropertiesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_category")]
+        internal static extern ErrorCode ForeachCategory(PlaceHandle /* maps_place_h */ place, CategoriesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_attribute")]
+        internal static extern ErrorCode ForeachAttribute(PlaceHandle /* maps_place_h */ place, AttributesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_contact")]
+        internal static extern ErrorCode ForeachContact(PlaceHandle /* maps_place_h */ place, ContactsCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_editorial")]
+        internal static extern ErrorCode ForeachEditorial(PlaceHandle /* maps_place_h */ place, EditorialsCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_image")]
+        internal static extern ErrorCode ForeachImage(PlaceHandle /* maps_place_h */ place, ImagesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_foreach_review")]
+        internal static extern ErrorCode ForeachReview(PlaceHandle /* maps_place_h */ place, ReviewsCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_supplier_link")]
+        internal static extern ErrorCode GetSupplierLink(PlaceHandle /* maps_place_h */ place, out IntPtr /* maps_place_link_object_h */ supplier);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_get_related_link")]
+        internal static extern ErrorCode GetRelatedLink(PlaceHandle /* maps_place_h */ place, out IntPtr /* maps_place_link_object_h */ related);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_list_foreach")]
+        internal static extern ErrorCode ListForeach(PlaceListHandle /* maps_place_list_h */ placeList, PlaceCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_place_list_destroy")]
+        internal static extern ErrorCode ListDestroy(IntPtr /* maps_place_list_h */ placeList);
+    }
+
+    internal class PlaceHandle : SafeMapsHandle
+    {
+        public PlaceHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Place.Destroy; }
+    }
+
+    internal class PlaceListHandle : SafeMapsHandle
+    {
+        public PlaceListHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Place.ListDestroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Preference.cs b/src/Tizen.Maps/Interop/Interop.Preference.cs
new file mode 100755 (executable)
index 0000000..edae298
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum DistanceUnit
+    {
+        Meter, // MAPS_DISTANCE_UNIT_M
+        Kilometer, // MAPS_DISTANCE_UNIT_KM
+        Foot, // MAPS_DISTANCE_UNIT_FT
+        Yard, // MAPS_DISTANCE_UNIT_YD
+    }
+
+    internal enum RouteOptimization
+    {
+        Fastest, // MAPS_ROUTE_TYPE_FASTEST
+        Shortest, // MAPS_ROUTE_TYPE_SHORTEST
+        Economic, // MAPS_ROUTE_TYPE_ECONOMIC
+        Scenic, // MAPS_ROUTE_TYPE_SCENIC
+        FastestNow, // MAPS_ROUTE_TYPE_FASTESTNOW
+        DirectDrive, // MAPS_ROUTE_TYPE_DIRECTDRIVE
+    }
+
+    internal enum RouteTransportMode
+    {
+        Car, // MAPS_ROUTE_TRANSPORT_MODE_CAR
+        Pedestrian, // MAPS_ROUTE_TRANSPORT_MODE_PEDESTRIAN
+        Bicycle, // MAPS_ROUTE_TRANSPORT_MODE_BICYCLE
+        PublicTransit, // MAPS_ROUTE_TRANSPORT_MODE_PUBLICTRANSIT
+        Truck, // MAPS_ROUTE_TRANSPORT_MODE_TRUCK
+    }
+
+    internal enum RouteFeatureWeight
+    {
+        Normal, // MAPS_ROUTE_FEATURE_WEIGHT_NORMAL
+        Prefer, // MAPS_ROUTE_FEATURE_WEIGHT_PREFER
+        Avoid, // MAPS_ROUTE_FEATURE_WEIGHT_AVOID
+        SoftExclude, // MAPS_ROUTE_FEATURE_WEIGHT_SOFTEXCLUDE
+        StrictExclude, // MAPS_ROUTE_FEATURE_WEIGHT_STRICTEXCLUDE
+    }
+
+    internal enum RouteRequestFeature
+    {
+        None, // MAPS_ROUTE_FEATURE_NO
+        Toll, // MAPS_ROUTE_FEATURE_TOLL
+        MotorWay, // MAPS_ROUTE_FEATURE_MOTORWAY
+        BoatFerry, // MAPS_ROUTE_FEATURE_BOATFERRY
+        RailFerry, // MAPS_ROUTE_FEATURE_RAILFERRY
+        PublicTransit, // MAPS_ROUTE_FEATURE_PUBLICTTRANSIT
+        Tunnel, // MAPS_ROUTE_FEATURE_TUNNEL
+        DirtRoad, // MAPS_ROUTE_FEATURE_DIRTROAD
+        Parks, // MAPS_ROUTE_FEATURE_PARKS
+        Hovlane, // MAPS_ROUTE_FEATURE_HOVLANE
+        Stairs, // MAPS_ROUTE_FEATURE_STAIRS
+    }
+
+    internal static partial class Preference
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool PreferencePropertiesCallback(int index, int total, string key, string value, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_create")]
+        internal static extern ErrorCode Create(out IntPtr /* maps_preference_h */ preference);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_preference_h */ preference);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_clone")]
+        internal static extern ErrorCode Clone(PreferenceHandle /* maps_preference_h */ origin, out IntPtr /* maps_preference_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_distance_unit")]
+        internal static extern ErrorCode GetDistanceUnit(PreferenceHandle /* maps_preference_h */ preference, out DistanceUnit? /* maps_distance_unit_e */ unit);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_language")]
+        internal static extern ErrorCode GetLanguage(PreferenceHandle /* maps_preference_h */ preference, out string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_max_results")]
+        internal static extern ErrorCode GetMaxResults(PreferenceHandle /* maps_preference_h */ preference, out int maxResults);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_country_code")]
+        internal static extern ErrorCode GetCountryCode(PreferenceHandle /* maps_preference_h */ preference, out string countryCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_route_optimization")]
+        internal static extern ErrorCode GetRouteOptimization(PreferenceHandle /* maps_preference_h */ preference, out RouteOptimization? /* maps_route_optimization_e */ optimization);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_route_transport_mode")]
+        internal static extern ErrorCode GetRouteTransportMode(PreferenceHandle /* maps_preference_h */ preference, out RouteTransportMode? /* maps_route_transport_mode_e */ transportMode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_route_feature_weight")]
+        internal static extern ErrorCode GetRouteFeatureWeight(PreferenceHandle /* maps_preference_h */ preference, out RouteFeatureWeight? /* maps_route_feature_weight_e */ featureWeight);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_route_feature")]
+        internal static extern ErrorCode GetRouteFeature(PreferenceHandle /* maps_preference_h */ preference, out RouteRequestFeature? /* maps_route_feature_e */ feature);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get_route_alternatives_enabled")]
+        internal static extern ErrorCode GetRouteAlternativesEnabled(PreferenceHandle /* maps_preference_h */ preference, out bool? enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_get")]
+        internal static extern ErrorCode Get(PreferenceHandle /* maps_preference_h */ preference, string key, out string value);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_foreach_property")]
+        internal static extern ErrorCode ForeachProperty(PreferenceHandle /* maps_preference_h */ preference, PreferencePropertiesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_distance_unit")]
+        internal static extern ErrorCode SetDistanceUnit(PreferenceHandle /* maps_preference_h */ preference, DistanceUnit /* maps_distance_unit_e */ unit);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_language")]
+        internal static extern ErrorCode SetLanguage(PreferenceHandle /* maps_preference_h */ preference, string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_max_results")]
+        internal static extern ErrorCode SetMaxResults(PreferenceHandle /* maps_preference_h */ preference, int maxResults);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_country_code")]
+        internal static extern ErrorCode SetCountryCode(PreferenceHandle /* maps_preference_h */ preference, string countryCode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_route_optimization")]
+        internal static extern ErrorCode SetRouteOptimization(PreferenceHandle /* maps_preference_h */ preference, RouteOptimization /* maps_route_optimization_e */ optimization);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_route_transport_mode")]
+        internal static extern ErrorCode SetRouteTransportMode(PreferenceHandle /* maps_preference_h */ preference, RouteTransportMode /* maps_route_transport_mode_e */ transportMode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_route_feature_weight")]
+        internal static extern ErrorCode SetRouteFeatureWeight(PreferenceHandle /* maps_preference_h */ preference, RouteFeatureWeight /* maps_route_feature_weight_e */ featureWeight);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_route_feature")]
+        internal static extern ErrorCode SetRouteFeature(PreferenceHandle /* maps_preference_h */ preference, RouteRequestFeature /* maps_route_feature_e */ feature);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_route_alternatives_enabled")]
+        internal static extern ErrorCode SetRouteAlternativesEnabled(PreferenceHandle /* maps_preference_h */ preference, bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_preference_set_property")]
+        internal static extern ErrorCode SetProperty(PreferenceHandle /* maps_preference_h */ preference, string key, string value);
+    }
+
+    internal class PreferenceHandle : SafeMapsHandle
+    {
+        public PreferenceHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Preference.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Route.Maneuver.cs b/src/Tizen.Maps/Interop/Interop.Route.Maneuver.cs
new file mode 100755 (executable)
index 0000000..5458b8c
--- /dev/null
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum RouteDirection
+    {
+        None, // MAPS_ROUTE_DIRECTION_NONE
+        North, // MAPS_ROUTE_DIRECTION_NORTH
+        NorthWest, // MAPS_ROUTE_DIRECTION_NORTHWEST
+        NorthEast, // MAPS_ROUTE_DIRECTION_NORTHEAST
+        South, // MAPS_ROUTE_DIRECTION_SOUTH
+        SouthEast, // MAPS_ROUTE_DIRECTION_SOUTHEAST
+        SouthWest, // MAPS_ROUTE_DIRECTION_SOUTHWEST
+        West, // MAPS_ROUTE_DIRECTION_WEST
+        East, // MAPS_ROUTE_DIRECTION_EAST
+    }
+
+    internal enum RouteTurnType
+    {
+        None, // MAPS_ROUTE_TURN_TYPE_NONE
+        Straight, // MAPS_ROUTE_TURN_TYPE_STRAIGHT
+        BearRight, // MAPS_ROUTE_TURN_TYPE_BEAR_RIGHT
+        LightRight, // MAPS_ROUTE_TURN_TYPE_LIGHT_RIGHT
+        Right, // MAPS_ROUTE_TURN_TYPE_RIGHT
+        HardRight, // MAPS_ROUTE_TURN_TYPE_HARD_RIGHT
+        UturnRight, // MAPS_ROUTE_TURN_TYPE_UTURN_RIGHT
+        UturnLeft, // MAPS_ROUTE_TURN_TYPE_UTURN_LEFT
+        HardLeft, // MAPS_ROUTE_TURN_TYPE_HARD_LEFT
+        Left, // MAPS_ROUTE_TURN_TYPE_LEFT
+        LightLeft, // MAPS_ROUTE_TURN_TYPE_LIGHT_LEFT
+        BearLeft, // MAPS_ROUTE_TURN_TYPE_BEAR_LEFT
+        RightFork, // MAPS_ROUTE_TURN_TYPE_RIGHT_FORK
+        LeftFork, // MAPS_ROUTE_TURN_TYPE_LEFT_FORK
+        StraightFork, // MAPS_ROUTE_TURN_TYPE_STRAIGHT_FORK
+    }
+
+    internal static partial class RouteManeuver
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_route_maneuver_h */ maneuver);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_clone")]
+        internal static extern ErrorCode Clone(RouteManeuverHandle /* maps_route_maneuver_h */ origin, out IntPtr /* maps_route_maneuver_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_direction_id")]
+        internal static extern ErrorCode GetDirectionId(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out RouteDirection /* maps_route_direction_e */ directionId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_turn_type")]
+        internal static extern ErrorCode GetTurnType(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out RouteTurnType /* maps_route_turn_type_e */ turnType);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_position")]
+        internal static extern ErrorCode GetPosition(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out IntPtr /* maps_coordinates_h */ position);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_road_name")]
+        internal static extern ErrorCode GetRoadName(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out string roadName);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_instruction_text")]
+        internal static extern ErrorCode GetInstructionText(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out string instructionText);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_locale")]
+        internal static extern ErrorCode GetLocale(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out string locale);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_time_to_next_instruction")]
+        internal static extern ErrorCode GetTimeToNextInstruction(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out int timeToNextInstruction);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_maneuver_get_distance_to_next_instruction")]
+        internal static extern ErrorCode GetDistanceToNextInstruction(RouteManeuverHandle /* maps_route_maneuver_h */ maneuver, out double distanceToNextInstruction);
+    }
+
+    internal class RouteManeuverHandle : SafeMapsHandle
+    {
+        public RouteManeuverHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = RouteManeuver.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Route.Segment.cs b/src/Tizen.Maps/Interop/Interop.Route.Segment.cs
new file mode 100755 (executable)
index 0000000..c8c9811
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class RouteSegment
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool SegmentPathCallback(int index, int total, IntPtr /* maps_coordinates_h */ coordinates, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool SegmentManeuverCallback(int index, int total, IntPtr /* maps_route_maneuver_h */ maneuver, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_route_segment_h */ segment);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_clone")]
+        internal static extern ErrorCode Clone(RouteSegmentHandle /* maps_route_segment_h */ origin, out IntPtr /* maps_route_segment_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_get_origin")]
+        internal static extern ErrorCode GetOrigin(RouteSegmentHandle /* maps_route_segment_h */ segment, out IntPtr /* maps_coordinates_h */ origin);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_get_destination")]
+        internal static extern ErrorCode GetDestination(RouteSegmentHandle /* maps_route_segment_h */ segment, out IntPtr /* maps_coordinates_h */ destination);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_get_bounding_box")]
+        internal static extern ErrorCode GetBoundingBox(RouteSegmentHandle /* maps_route_segment_h */ segment, out IntPtr /* maps_area_h */ boundingBox);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_get_distance")]
+        internal static extern ErrorCode GetDistance(RouteSegmentHandle /* maps_route_segment_h */ segment, out double distance);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_get_duration")]
+        internal static extern ErrorCode GetDuration(RouteSegmentHandle /* maps_route_segment_h */ segment, out long duration);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_foreach_path")]
+        internal static extern ErrorCode ForeachPath(RouteSegmentHandle /* maps_route_segment_h */ segment, SegmentPathCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_segment_foreach_maneuver")]
+        internal static extern ErrorCode ForeachManeuver(RouteSegmentHandle /* maps_route_segment_h */ segment, SegmentManeuverCallback callback, IntPtr /* void */ userData);
+    }
+
+    internal class RouteSegmentHandle : SafeMapsHandle
+    {
+        public RouteSegmentHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = RouteSegment.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Route.cs b/src/Tizen.Maps/Interop/Interop.Route.cs
new file mode 100755 (executable)
index 0000000..23e0241
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal static partial class Route
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool RoutePropertiesCallback(int index, int total, string key, string /* void */ value, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool RoutePathCallback(int index, int total, IntPtr /* maps_coordinates_h */ coordinates, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool RouteSegmentCallback(int index, int total, IntPtr /* maps_route_segment_h */ segment, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_route_h */ route);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_clone")]
+        internal static extern ErrorCode Clone(RouteHandle /* maps_route_h */ origin, out IntPtr /* maps_route_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_route_id")]
+        internal static extern ErrorCode GetRouteId(RouteHandle /* maps_route_h */ route, out string routeId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_origin")]
+        internal static extern ErrorCode GetOrigin(RouteHandle /* maps_route_h */ route, out IntPtr /* maps_coordinates_h */ origin);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_destination")]
+        internal static extern ErrorCode GetDestination(RouteHandle /* maps_route_h */ route, out IntPtr /* maps_coordinates_h */ destination);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_bounding_box")]
+        internal static extern ErrorCode GetBoundingBox(RouteHandle /* maps_route_h */ route, out IntPtr /* maps_area_h */ boundingBox);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_transport_mode")]
+        internal static extern ErrorCode GetTransportMode(RouteHandle /* maps_route_h */ route, out RouteTransportMode /* maps_route_transport_mode_e */ transportMode);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_total_distance")]
+        internal static extern ErrorCode GetTotalDistance(RouteHandle /* maps_route_h */ route, out double totalDistance);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_total_duration")]
+        internal static extern ErrorCode GetTotalDuration(RouteHandle /* maps_route_h */ route, out long totalDuration);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_get_distance_unit")]
+        internal static extern ErrorCode GetDistanceUnit(RouteHandle /* maps_route_h */ route, out DistanceUnit /* maps_distance_unit_e */ distanceUnit);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_foreach_property")]
+        internal static extern ErrorCode ForeachProperty(RouteHandle /* maps_route_h */ route, RoutePropertiesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_foreach_path")]
+        internal static extern ErrorCode ForeachPath(RouteHandle /* maps_route_h */ route, RoutePathCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_route_foreach_segment")]
+        internal static extern ErrorCode ForeachSegment(RouteHandle /* maps_route_h */ route, RouteSegmentCallback callback, IntPtr /* void */ userData);
+    }
+
+    internal class RouteHandle : SafeMapsHandle
+    {
+        public RouteHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = Route.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.SafeMapsHandle.cs b/src/Tizen.Maps/Interop/Interop.SafeMapsHandle.cs
new file mode 100755 (executable)
index 0000000..32ce999
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+
+internal static partial class Interop
+{
+    internal class SafeMapsHandle : SafeHandle
+    {
+        public delegate ErrorCode HandleDestroy(IntPtr handle);
+
+        private bool _hasOwnership = true;
+        protected HandleDestroy Destroy = null;
+
+        internal SafeMapsHandle(IntPtr handle, bool ownsHandle = true) : base(handle, true)
+        {
+            _hasOwnership = ownsHandle;
+        }
+        public override bool IsInvalid { get { return handle == IntPtr.Zero; } }
+        public bool IsValid { get { return IsInvalid == false; } }
+        public void ReleaseOwnership() { _hasOwnership = false; }
+
+        protected override bool ReleaseHandle()
+        {
+            if (_hasOwnership)
+            {
+                var err = Destroy?.Invoke(handle);
+                err?.WarnIfFailed(string.Format("Failed to delete native {0} handle", GetType()));
+            }
+            SetHandle(IntPtr.Zero);
+            return true;
+        }
+
+        public static implicit operator IntPtr(SafeMapsHandle otherHandle)
+        {
+            return otherHandle.handle;
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.Service.cs b/src/Tizen.Maps/Interop/Interop.Service.cs
new file mode 100755 (executable)
index 0000000..7ccf9cd
--- /dev/null
@@ -0,0 +1,167 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum ServiceType
+    {
+        Geocode, // MAPS_SERVICE_GEOCODE
+        GeocodeInsideArea, // MAPS_SERVICE_GEOCODE_INSIDE_AREA
+        GeocodeByStructuredAddress, // MAPS_SERVICE_GEOCODE_BY_STRUCTURED_ADDRESS
+        ReverseGeocode, // MAPS_SERVICE_REVERSE_GEOCODE
+        SearchPlace, // MAPS_SERVICE_SEARCH_PLACE
+        SearchPlaceByArea, // MAPS_SERVICE_SEARCH_PLACE_BY_AREA
+        SearchPlaceByAddress, // MAPS_SERVICE_SEARCH_PLACE_BY_ADDRESS
+        SearchRoute, // MAPS_SERVICE_SEARCH_ROUTE
+        SearchRouteWaypoints, // MAPS_SERVICE_SEARCH_ROUTE_WAYPOINTS
+        CancelRequest, // MAPS_SERVICE_CANCEL_REQUEST
+        MultiReverseGeocode, // MAPS_SERVICE_MULTI_REVERSE_GEOCODE
+        SearchPlaceList, // MAPS_SERVICE_SEARCH_PLACE_LIST
+        SearchGetPlaceDetails, // MAPS_SERVICE_SEARCH_GET_PLACE_DETAILS
+        View, // MAPS_SERVICE_VIEW
+        ViewSnapshot, // MAPS_SERVICE_VIEW_SNAPSHOT
+    }
+
+    internal enum ServiceData
+    {
+        PlaceAddress, // MAPS_PLACE_ADDRESS
+        PlaceRating, // MAPS_PLACE_RATING
+        PlaceCategories, // MAPS_PLACE_CATEGORIES
+        PlaceAttributes, // MAPS_PLACE_ATTRIBUTES
+        PlaceContacts, // MAPS_PLACE_CONTACTS
+        PlaceEditorials, // MAPS_PLACE_EDITORIALS
+        PlaceReviews, // MAPS_PLACE_REVIEWS
+        PlaceImage, // MAPS_PLACE_IMAGE
+        PlaceSupplier, // MAPS_PLACE_SUPPLIER
+        PlaceRelated, // MAPS_PLACE_RELATED
+        RoutePath, // MAPS_ROUTE_PATH
+        RouteSegmentsPath, // MAPS_ROUTE_SEGMENTS_PATH
+        RouteSegmentsManeuvers, // MAPS_ROUTE_SEGMENTS_MANEUVERS
+        ViewTraffic, // MAPS_VIEW_TRAFFIC
+        ViewPublicTransit, // MAPS_VIEW_PUBLIC_TRANSIT
+        ViewBuilding, // MAPS_VIEW_BUILDING
+        ViewScalebar, // MAPS_VIEW_SCALEBAR
+    }
+
+    internal static partial class Service
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool ProviderInfoCallback(string mapsProvider, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void RequestUserConsentCallback(bool consented, string provider, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool GeocodeCallback(ErrorCode /* maps_error_e */ result, int requestId, int index, int total, IntPtr /* maps_coordinates_h */ coordinates, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void ReverseGeocodeCallback(ErrorCode /* maps_error_e */ result, int requestId, int index, int total, IntPtr /* maps_address_h */ address, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool MultiReverseGeocodeCallback(ErrorCode /* maps_error_e */ result, int requestId, int total, IntPtr /* maps_address_list_h */ addressList, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool SearchPlaceCallback(ErrorCode /* maps_error_e */ error, int requestId, int index, int total, IntPtr /* maps_place_h */ place, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void SearchPlaceListCallback(ErrorCode /* maps_error_e */ error, int requestId, int total, IntPtr /* maps_place_list_h */ placeList, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void GetPlaceDetailsCallback(ErrorCode /* maps_error_e */ error, int requestId, IntPtr /* maps_place_h */ place, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool SearchRouteCallback(ErrorCode /* maps_error_e */ error, int requestId, int index, int total, IntPtr /* maps_route_h */ route, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_foreach_provider")]
+        internal static extern ErrorCode ForeachProvider(ProviderInfoCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_request_user_consent")]
+        internal static extern ErrorCode RequestUserConsent(string provider, RequestUserConsentCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_create")]
+        internal static extern ErrorCode Create(string provider, out IntPtr /* maps_service_h */ maps);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_service_h */ maps);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_set_provider_key")]
+        internal static extern ErrorCode SetProviderKey(ServiceHandle /* maps_service_h */ maps, string providerKey);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_get_provider_key")]
+        internal static extern ErrorCode GetProviderKey(ServiceHandle /* maps_service_h */ maps, out string providerKey);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_set_preference")]
+        internal static extern ErrorCode SetPreference(ServiceHandle /* maps_service_h */ maps, PreferenceHandle /* maps_preference_h */ preference);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_get_preference")]
+        internal static extern ErrorCode GetPreference(ServiceHandle /* maps_service_h */ maps, out IntPtr /* maps_preference_h */ preference);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_provider_is_service_supported")]
+        internal static extern ErrorCode ProviderIsServiceSupported(ServiceHandle /* maps_service_h */ maps, ServiceType /* maps_service_e */ service, out bool supported);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_provider_is_data_supported")]
+        internal static extern ErrorCode ProviderIsDataSupported(ServiceHandle /* maps_service_h */ maps, ServiceData /* maps_service_data_e */ data, out bool supported);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_cancel_request")]
+        internal static extern ErrorCode CancelRequest(ServiceHandle /* maps_service_h */ maps, int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_geocode")]
+        internal static extern ErrorCode Geocode(ServiceHandle /* maps_service_h */ maps, string address, PreferenceHandle /* maps_preference_h */ preference, GeocodeCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_geocode_inside_area")]
+        internal static extern ErrorCode GeocodeInsideArea(ServiceHandle /* maps_service_h */ maps, string address, AreaHandle /* maps_area_h */ bounds, PreferenceHandle /* maps_preference_h */ preference, GeocodeCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_geocode_by_structured_address")]
+        internal static extern ErrorCode GeocodeByStructuredAddress(ServiceHandle /* maps_service_h */ maps, AddressHandle /* maps_address_h */ address, PreferenceHandle /* maps_preference_h */ preference, GeocodeCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_reverse_geocode")]
+        internal static extern ErrorCode ReverseGeocode(ServiceHandle /* maps_service_h */ maps, double latitude, double longitude, PreferenceHandle /* maps_preference_h */ preference, ReverseGeocodeCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_multi_reverse_geocode")]
+        internal static extern ErrorCode MultiReverseGeocode(ServiceHandle /* maps_service_h */ maps, CoordinatesListHandle /* maps_coordinates_list_h */ coordinatesList, PreferenceHandle /* maps_preference_h */ preference, MultiReverseGeocodeCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_place")]
+        internal static extern ErrorCode SearchPlace(ServiceHandle /* maps_service_h */ maps, CoordinatesHandle /* maps_coordinates_h */ position, int distance, PlaceFilterHandle /* maps_place_filter_h */ filter, PreferenceHandle /* maps_preference_h */ preference, SearchPlaceCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_place_by_area")]
+        internal static extern ErrorCode SearchPlaceByArea(ServiceHandle /* maps_service_h */ maps, AreaHandle /* maps_area_h */ boundary, PlaceFilterHandle /* maps_place_filter_h */ filter, PreferenceHandle /* maps_preference_h */ preference, SearchPlaceCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_place_by_address")]
+        internal static extern ErrorCode SearchPlaceByAddress(ServiceHandle /* maps_service_h */ maps, string address, AreaHandle /* maps_area_h */ boundary, PlaceFilterHandle /* maps_place_filter_h */ filter, PreferenceHandle /* maps_preference_h */ preference, SearchPlaceCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_place_list")]
+        internal static extern ErrorCode SearchPlaceList(ServiceHandle /* maps_service_h */ maps, AreaHandle /* maps_area_h */ boundary, PlaceFilterHandle /* maps_place_filter_h */ filter, PreferenceHandle /* maps_preference_h */ preference, SearchPlaceListCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_get_place_details")]
+        internal static extern ErrorCode GetPlaceDetails(ServiceHandle /* maps_service_h */ maps, string uri, GetPlaceDetailsCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_route")]
+        internal static extern ErrorCode SearchRoute(ServiceHandle /* maps_service_h */ maps, CoordinatesHandle /* maps_coordinates_h */ origin, CoordinatesHandle /* maps_coordinates_h */ destination, PreferenceHandle /* maps_preference_h */ preference, SearchRouteCallback callback, IntPtr /* void */ userData, out int requestId);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_service_search_route_waypoints")]
+        internal static extern ErrorCode SearchRouteWaypoints(ServiceHandle /* maps_service_h */ maps, [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 2)] [In] IntPtr[] /* maps_coordinates_h */ waypointList, int waypointNum, PreferenceHandle /* maps_preference_h */ preference, SearchRouteCallback callback, IntPtr /* void */ userData, out int requestId);
+    }
+
+    internal class ServiceHandle : SafeMapsHandle
+    {
+        internal ErrorCode DestroyHandle(IntPtr handle) { return Service.Destroy(handle); }
+
+        public ServiceHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = DestroyHandle; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.View.Event.Data.cs b/src/Tizen.Maps/Interop/Interop.View.Event.Data.cs
new file mode 100755 (executable)
index 0000000..2480582
--- /dev/null
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum ViewAction
+    {
+        None, // MAPS_VIEW_ACTION_NONE
+        Scroll, // MAPS_VIEW_ACTION_SCROLL
+        Zoom, // MAPS_VIEW_ACTION_ZOOM
+        ZoomIn, // MAPS_VIEW_ACTION_ZOOM_IN
+        ZoomOut, // MAPS_VIEW_ACTION_ZOOM_OUT
+        ZoomAndScroll, // MAPS_VIEW_ACTION_ZOOM_AND_SCROLL
+        Rotate, // MAPS_VIEW_ACTION_ROTATE
+    }
+
+    internal enum ViewGesture
+    {
+        None, // MAPS_VIEW_GESTURE_NONE
+        Scroll, // MAPS_VIEW_GESTURE_SCROLL
+        Zoom, // MAPS_VIEW_GESTURE_ZOOM
+        Tap, // MAPS_VIEW_GESTURE_TAP
+        DoubleTap, // MAPS_VIEW_GESTURE_DOUBLE_TAP
+        TwoFingerTap, // MAPS_VIEW_GESTURE_2_FINGER_TAP
+        Rotate, // MAPS_VIEW_GESTURE_ROTATE
+        LongPress, // MAPS_VIEW_GESTURE_LONG_PRESS
+    }
+
+    internal enum ViewEventType
+    {
+        Gesture, // MAPS_VIEW_EVENT_GESTURE
+        Action, // MAPS_VIEW_EVENT_ACTION
+        Object, // MAPS_VIEW_EVENT_OBJECT
+        Ready, // MAPS_VIEW_EVENT_READY
+    }
+
+    internal static partial class ViewEventData
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_view_event_data_h */ viewEvent);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_clone")]
+        internal static extern ErrorCode Clone(IntPtr /* maps_view_event_data_h */ origin, out IntPtr /* maps_view_event_data_h */ cloned);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_type")]
+        internal static extern ErrorCode GetType(IntPtr /* maps_view_event_data_h */ viewEvent, out ViewEventType /* maps_view_event_type_e */ eventType);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_gesture_type")]
+        internal static extern ErrorCode GetGestureType(IntPtr /* maps_view_event_data_h */ viewEvent, out ViewGesture /* maps_view_gesture_e */ gestureType);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_action_type")]
+        internal static extern ErrorCode GetActionType(IntPtr /* maps_view_event_data_h */ viewEvent, out ViewAction /* maps_view_action_e */ actionType);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_center")]
+        internal static extern ErrorCode GetCenter(IntPtr /* maps_view_event_data_h */ viewEvent, out IntPtr /* maps_coordinates_h */ center);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_delta")]
+        internal static extern ErrorCode GetDelta(IntPtr /* maps_view_event_data_h */ viewEvent, out int deltaX, out int deltaY);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_position")]
+        internal static extern ErrorCode GetPosition(IntPtr /* maps_view_event_data_h */ viewEvent, out int x, out int y);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_coordinates")]
+        internal static extern ErrorCode GetCoordinates(IntPtr /* maps_view_event_data_h */ viewEvent, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_fingers")]
+        internal static extern ErrorCode GetFingers(IntPtr /* maps_view_event_data_h */ viewEvent, out int fingers);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_zoom_factor")]
+        internal static extern ErrorCode GetZoomFactor(IntPtr /* maps_view_event_data_h */ viewEvent, out double zoomFactor);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_rotation_angle")]
+        internal static extern ErrorCode GetRotationAngle(IntPtr /* maps_view_event_data_h */ viewEvent, out double rotationAngle);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_event_data_get_object")]
+        internal static extern ErrorCode GetObject(IntPtr /* maps_view_event_data_h */ viewEvent, out IntPtr /* maps_view_object_h */ viewEventDataObject);
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.View.Object.cs b/src/Tizen.Maps/Interop/Interop.View.Object.cs
new file mode 100755 (executable)
index 0000000..79fc394
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum ViewObjectType
+    {
+        Polyline, // MAPS_VIEW_OBJECT_POLYLINE
+        Polygon, // MAPS_VIEW_OBJECT_POLYGON
+        Marker, // MAPS_VIEW_OBJECT_MARKER
+        Overlay, // MAPS_VIEW_OBJECT_OVERLAY
+    }
+
+    internal enum ViewMarkerType
+    {
+        Pin, // MAPS_VIEW_MARKER_PIN
+        Sticker, // MAPS_VIEW_MARKER_STICKER
+    }
+
+    internal enum ViewOverlayType
+    {
+        Normal, // MAPS_VIEW_OVERLAY_NORMAL
+        Bubble, // MAPS_VIEW_OVERLAY_BUBBLE
+        Box, // MAPS_VIEW_OVERLAY_BOX
+    }
+
+    internal static partial class ViewObject
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool CoordinatesCallback(int index, IntPtr /* maps_coordinates_h */ coordinates, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_create_marker")]
+        internal static extern ErrorCode CreateMarker(CoordinatesHandle /* maps_coordinates_h */ coordinates, string imageFilePath, ViewMarkerType /* maps_view_marker_type_e */ type, out IntPtr /* maps_view_object_h */ marker);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_create_polyline")]
+        internal static extern ErrorCode CreatePolyline(CoordinatesListHandle /* maps_coordinates_list_h */ coordinates, byte r, byte g, byte b, byte a, int width, out IntPtr /* maps_view_object_h */ polyline);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_create_polygon")]
+        internal static extern ErrorCode CreatePolygon(CoordinatesListHandle /* maps_coordinates_list_h */ coordinates, byte r, byte g, byte b, byte a, out IntPtr /* maps_view_object_h */ polygon);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_create_overlay")]
+        internal static extern ErrorCode CreateOverlay(CoordinatesHandle /* maps_coordinates_h */ coordinates, IntPtr viewObject, ViewOverlayType /* maps_view_overlay_type_e */ type, out IntPtr /* maps_view_object_h */ overlay);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_view_object_h */ viewObject);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_get_type")]
+        internal static extern ErrorCode GetType(ViewObjectHandle /* maps_view_object_h */ viewObject, out ViewObjectType /* maps_view_object_type_e */ type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_set_visible")]
+        internal static extern ErrorCode SetVisible(ViewObjectHandle /* maps_view_object_h */ viewObject, bool visible);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_get_visible")]
+        internal static extern ErrorCode GetVisible(ViewObjectHandle /* maps_view_object_h */ viewObject, out bool visible);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_set_polyline")]
+        internal static extern ErrorCode PolylineSetPolyline(ViewObjectHandle /* maps_view_object_h */ polyline, CoordinatesListHandle /* maps_coordinates_list_h */ points);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_foreach_point")]
+        internal static extern ErrorCode PolylineForeachPoint(ViewObjectHandle /* maps_view_object_h */ polyline, CoordinatesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_set_color")]
+        internal static extern ErrorCode PolylineSetColor(ViewObjectHandle /* maps_view_object_h */ polyline, byte r, byte g, byte b, byte a);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_get_color")]
+        internal static extern ErrorCode PolylineGetColor(ViewObjectHandle /* maps_view_object_h */ polyline, out byte r, out byte g, out byte b, out byte a);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_set_width")]
+        internal static extern ErrorCode PolylineSetWidth(ViewObjectHandle /* maps_view_object_h */ polyline, int width);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polyline_get_width")]
+        internal static extern ErrorCode PolylineGetWidth(ViewObjectHandle /* maps_view_object_h */ polyline, out int width);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polygon_set_polygon")]
+        internal static extern ErrorCode PolygonSetPolygon(ViewObjectHandle /* maps_view_object_h */ polygon, CoordinatesListHandle /* maps_coordinates_list_h */ points);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polygon_foreach_point")]
+        internal static extern ErrorCode PolygonForeachPoint(ViewObjectHandle /* maps_view_object_h */ polygon, CoordinatesCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polygon_set_fill_color")]
+        internal static extern ErrorCode PolygonSetFillColor(ViewObjectHandle /* maps_view_object_h */ polygon, byte r, byte g, byte b, byte a);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_polygon_get_fill_color")]
+        internal static extern ErrorCode PolygonGetFillColor(ViewObjectHandle /* maps_view_object_h */ polygon, out byte r, out byte g, out byte b, out byte a);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_set_coordinates")]
+        internal static extern ErrorCode MarkerSetCoordinates(ViewObjectHandle /* maps_view_object_h */ marker, CoordinatesHandle /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_resize")]
+        internal static extern ErrorCode MarkerResize(ViewObjectHandle /* maps_view_object_h */ marker, int width, int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_set_image_file")]
+        internal static extern ErrorCode MarkerSetImageFile(ViewObjectHandle /* maps_view_object_h */ marker, string filePath);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_get_image_file")]
+        internal static extern ErrorCode MarkerGetImageFile(ViewObjectHandle /* maps_view_object_h */ marker, out string filePath);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_get_coordinates")]
+        internal static extern ErrorCode MarkerGetCoordinates(ViewObjectHandle /* maps_view_object_h */ marker, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_get_size")]
+        internal static extern ErrorCode MarkerGetSize(ViewObjectHandle /* maps_view_object_h */ marker, out int width, out int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_get_type")]
+        internal static extern ErrorCode MarkerGetType(ViewObjectHandle /* maps_view_object_h */ marker, out ViewMarkerType /* maps_view_marker_type_e */ type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_set_z_order")]
+        internal static extern ErrorCode MarkerSetZOrder(ViewObjectHandle /* maps_view_object_h */ marker, int zOrder);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_marker_get_z_order")]
+        internal static extern ErrorCode MarkerGetZOrder(ViewObjectHandle /* maps_view_object_h */ marker, out int zOrder);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_get_object")]
+        internal static extern ErrorCode OverlayGetObject(ViewObjectHandle /* maps_view_object_h */ overlay, out IntPtr viewObject);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_set_coordinates")]
+        internal static extern ErrorCode OverlaySetCoordinates(ViewObjectHandle /* maps_view_object_h */ overlay, CoordinatesHandle /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_get_coordinates")]
+        internal static extern ErrorCode OverlayGetCoordinates(ViewObjectHandle /* maps_view_object_h */ overlay, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_set_min_zoom_level")]
+        internal static extern ErrorCode OverlaySetMinZoomLevel(ViewObjectHandle /* maps_view_object_h */ overlay, int zoom);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_get_min_zoom_level")]
+        internal static extern ErrorCode OverlayGetMinZoomLevel(ViewObjectHandle /* maps_view_object_h */ overlay, out int zoom);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_set_max_zoom_level")]
+        internal static extern ErrorCode OverlaySetMaxZoomLevel(ViewObjectHandle /* maps_view_object_h */ overlay, int zoom);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_object_overlay_get_max_zoom_level")]
+        internal static extern ErrorCode OverlayGetMaxZoomLevel(ViewObjectHandle /* maps_view_object_h */ overlay, out int zoom);
+    }
+
+    internal class ViewObjectHandle : SafeMapsHandle
+    {
+        public ViewObjectHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = ViewObject.Destroy; }
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.View.Snapshot.cs b/src/Tizen.Maps/Interop/Interop.View.Snapshot.cs
new file mode 100755 (executable)
index 0000000..d6403c6
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum ViewSnapshotFormatType
+    {
+        ViewSnapshotBmp, // MAPS_VIEW_SNAPSHOT_BMP
+        ViewSnapshotJpeg, // MAPS_VIEW_SNAPSHOT_JPEG
+    }
+
+    internal static partial class ViewSnapshot
+    {
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_capture_snapshot")]
+        internal static extern ErrorCode ViewCaptureSnapshot(ViewHandle /* maps_view_h */ view, ViewSnapshotFormatType /* maps_view_snapshot_format_type_e */ type, int quality, string path);
+    }
+}
diff --git a/src/Tizen.Maps/Interop/Interop.View.cs b/src/Tizen.Maps/Interop/Interop.View.cs
new file mode 100755 (executable)
index 0000000..c506647
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Runtime.InteropServices;
+
+internal static partial class Interop
+{
+    internal enum ViewType
+    {
+        Normal, // MAPS_VIEW_TYPE_NORMAL
+        Satellite, // MAPS_VIEW_TYPE_SATELLITE
+        Terrain, // MAPS_VIEW_TYPE_TERRAIN
+        Hybrid, // MAPS_VIEW_TYPE_HYBRID
+    }
+
+    internal static partial class View
+    {
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate void ViewOnEventCallback(ViewEventType /* maps_view_event_type_e */ type, IntPtr /* maps_view_event_data_h */ eventData, IntPtr /* void */ userData);
+
+        [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
+        internal delegate bool ViewObjectCallback(int index, int total, IntPtr /* maps_view_object_h */ viewObject, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_create")]
+        internal static extern ErrorCode Create(ServiceHandle /* maps_service_h */ maps, IntPtr obj, out IntPtr /* maps_view_h */ view);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_destroy")]
+        internal static extern ErrorCode Destroy(IntPtr /* maps_view_h */ view);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_center")]
+        internal static extern ErrorCode SetCenter(ViewHandle /* maps_view_h */ view, CoordinatesHandle /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_center")]
+        internal static extern ErrorCode GetCenter(ViewHandle /* maps_view_h */ view, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_zoom_level")]
+        internal static extern ErrorCode SetZoomLevel(ViewHandle /* maps_view_h */ view, int level);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_zoom_level")]
+        internal static extern ErrorCode GetZoomLevel(ViewHandle /* maps_view_h */ view, out int level);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_min_zoom_level")]
+        internal static extern ErrorCode SetMinZoomLevel(ViewHandle /* maps_view_h */ view, int level);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_min_zoom_level")]
+        internal static extern ErrorCode GetMinZoomLevel(ViewHandle /* maps_view_h */ view, out int minZoomLevel);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_max_zoom_level")]
+        internal static extern ErrorCode SetMaxZoomLevel(ViewHandle /* maps_view_h */ view, int level);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_max_zoom_level")]
+        internal static extern ErrorCode GetMaxZoomLevel(ViewHandle /* maps_view_h */ view, out int maxZoomLevel);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_orientation")]
+        internal static extern ErrorCode SetOrientation(ViewHandle /* maps_view_h */ view, double angle);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_orientation")]
+        internal static extern ErrorCode GetOrientation(ViewHandle /* maps_view_h */ view, out double rotationAngle);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_screen_to_geolocation")]
+        internal static extern ErrorCode ScreenToGeolocation(ViewHandle /* maps_view_h */ view, int x, int y, out IntPtr /* maps_coordinates_h */ coordinates);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_geolocation_to_screen")]
+        internal static extern ErrorCode GeolocationToScreen(ViewHandle /* maps_view_h */ view, CoordinatesHandle /* maps_coordinates_h */ coordinates, out int x, out int y);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_type")]
+        internal static extern ErrorCode SetType(ViewHandle /* maps_view_h */ view, ViewType /* maps_view_type_e */ type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_type")]
+        internal static extern ErrorCode GetType(ViewHandle /* maps_view_h */ view, out ViewType /* maps_view_type_e */ type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_buildings_enabled")]
+        internal static extern ErrorCode SetBuildingsEnabled(ViewHandle /* maps_view_h */ view, bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_buildings_enabled")]
+        internal static extern ErrorCode GetBuildingsEnabled(ViewHandle /* maps_view_h */ view, out bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_traffic_enabled")]
+        internal static extern ErrorCode SetTrafficEnabled(ViewHandle /* maps_view_h */ view, bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_traffic_enabled")]
+        internal static extern ErrorCode GetTrafficEnabled(ViewHandle /* maps_view_h */ view, out bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_public_transit_enabled")]
+        internal static extern ErrorCode SetPublicTransitEnabled(ViewHandle /* maps_view_h */ view, bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_public_transit_enabled")]
+        internal static extern ErrorCode GetPublicTransitEnabled(ViewHandle /* maps_view_h */ view, out bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_language")]
+        internal static extern ErrorCode SetLanguage(ViewHandle /* maps_view_h */ view, string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_language")]
+        internal static extern ErrorCode GetLanguage(ViewHandle /* maps_view_h */ view, out string language);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_scalebar_enabled")]
+        internal static extern ErrorCode SetScalebarEnabled(ViewHandle /* maps_view_h */ view, bool enable);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_scalebar_enabled")]
+        internal static extern ErrorCode GetScalebarEnabled(ViewHandle /* maps_view_h */ view, out bool enabled);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_viewport")]
+        internal static extern ErrorCode GetViewport(ViewHandle /* maps_view_h */ view, out IntPtr viewport);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_screen_location")]
+        internal static extern ErrorCode SetScreenLocation(ViewHandle /* maps_view_h */ view, int x, int y, int width, int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_screen_location")]
+        internal static extern ErrorCode GetScreenLocation(ViewHandle /* maps_view_h */ view, out int x, out int y, out int width, out int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_move")]
+        internal static extern ErrorCode Move(ViewHandle /* maps_view_h */ view, int x, int y);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_resize")]
+        internal static extern ErrorCode Resize(ViewHandle /* maps_view_h */ view, int width, int height);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_visibility")]
+        internal static extern ErrorCode SetVisibility(ViewHandle /* maps_view_h */ view, bool visible);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_visibility")]
+        internal static extern ErrorCode GetVisibility(ViewHandle /* maps_view_h */ view, out bool visible);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_event_cb")]
+        internal static extern ErrorCode SetEventCb(ViewHandle /* maps_view_h */ view, ViewEventType /* maps_view_event_type_e */ type, ViewOnEventCallback callback, IntPtr /* void */ userData);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_unset_event_cb")]
+        internal static extern ErrorCode UnsetEventCb(ViewHandle /* maps_view_h */ view, ViewEventType /* maps_view_event_type_e */ type);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_set_gesture_enabled")]
+        internal static extern ErrorCode SetGestureEnabled(ViewHandle /* maps_view_h */ view, ViewGesture /* maps_view_gesture_e */ gesture, bool enabled);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_get_gesture_enabled")]
+        internal static extern ErrorCode GetGestureEnabled(ViewHandle /* maps_view_h */ view, ViewGesture /* maps_view_gesture_e */ gesture, out bool enabled);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_add_object")]
+        internal static extern ErrorCode AddObject(ViewHandle /* maps_view_h */ view, ViewObjectHandle /* maps_view_object_h */ viewObject);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_remove_object")]
+        internal static extern ErrorCode RemoveObject(ViewHandle /* maps_view_h */ view, ViewObjectHandle /* maps_view_object_h */ viewObject);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_remove_all_objects")]
+        internal static extern ErrorCode RemoveAllObjects(ViewHandle /* maps_view_h */ view);
+
+        [DllImport(Libraries.MapService, EntryPoint = "maps_view_foreach_object")]
+        internal static extern ErrorCode ForeachObject(ViewHandle /* maps_view_h */ view, ViewObjectCallback callback, IntPtr /* void */ userData);
+    }
+
+    internal class ViewHandle : SafeMapsHandle
+    {
+        internal ErrorCode DestroyHandle(IntPtr handle) { return Service.Destroy(handle); }
+
+        public ViewHandle(IntPtr handle, bool ownsHandle = true) : base(handle, ownsHandle) { Destroy = DestroyHandle; }
+    }
+}
diff --git a/src/Tizen.Maps/Properties/AssemblyInfo.cs b/src/Tizen.Maps/Properties/AssemblyInfo.cs
new file mode 100755 (executable)
index 0000000..688b54f
--- /dev/null
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Tizen.Maps")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Tizen.Maps")]
+[assembly: AssemblyCopyright("Copyright \u00A9  2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components.  If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5c091cb5-fd77-454f-a3b8-c67163250003")]
+
+// Version information for an assembly consists of the following four values:
+//
+//      Major Version
+//      Minor Version
+//      Build Number
+//      Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/src/Tizen.Maps/Tizen.Maps.Net45.csproj b/src/Tizen.Maps/Tizen.Maps.Net45.csproj
new file mode 100755 (executable)
index 0000000..2dc0f30
--- /dev/null
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{2C1FEDE6-C57A-4BD8-9660-E7AA90C740E5}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>
+    </RootNamespace>
+    <AssemblyName>Tizen.Maps</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+    <TargetFrameworkProfile />
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\Net45\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\Net45\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>Tizen.Maps.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interop\Interop.SafeMapsHandle.cs" />
+    <Compile Include="Tizen.Maps\MapView.cs" />
+    <Compile Include="Tizen.Maps\GestureType.cs" />
+    <Compile Include="Tizen.Maps\Overlay.cs" />
+    <Compile Include="Tizen.Maps\Polygon.cs" />
+    <Compile Include="Tizen.Maps\Polyline.cs" />
+    <Compile Include="Tizen.Maps\MapGestureEventArgs.cs" />
+    <Compile Include="Tizen.Maps\MapObjectEventArgs.cs" />
+    <Compile Include="Tizen.Maps\MapObject.cs" />
+    <Compile Include="Tizen.Maps\MapObjectType.cs" />
+    <Compile Include="Tizen.Maps\MapTypes.cs" />
+    <Compile Include="Tizen.Maps\Marker.cs" />
+    <Compile Include="Interop\Interop.Address.cs" />
+    <Compile Include="Interop\Interop.Area.cs" />
+    <Compile Include="Interop\Interop.Libraries.cs" />
+    <Compile Include="Interop\Interop.Coordinates.cs" />
+    <Compile Include="Interop\Interop.ErrorCode.cs" />
+    <Compile Include="Interop\Interop.Place.Attribute.cs" />
+    <Compile Include="Interop\Interop.Place.Category.cs" />
+    <Compile Include="Interop\Interop.Place.Contact.cs" />
+    <Compile Include="Interop\Interop.Place.cs" />
+    <Compile Include="Interop\Interop.Place.Editorial.cs" />
+    <Compile Include="Interop\Interop.Place.Filter.cs" />
+    <Compile Include="Interop\Interop.Place.Image.cs" />
+    <Compile Include="Interop\Interop.Place.Link.Object.cs" />
+    <Compile Include="Interop\Interop.Place.Media.cs" />
+    <Compile Include="Interop\Interop.Place.Rating.cs" />
+    <Compile Include="Interop\Interop.Place.Review.cs" />
+    <Compile Include="Interop\Interop.Preference.cs" />
+    <Compile Include="Interop\Interop.Route.cs" />
+    <Compile Include="Interop\Interop.Route.Maneuver.cs" />
+    <Compile Include="Interop\Interop.Route.Segment.cs" />
+    <Compile Include="Interop\Interop.Service.cs" />
+    <Compile Include="Interop\Interop.View.cs" />
+    <Compile Include="Interop\Interop.View.Event.Data.cs" />
+    <Compile Include="Interop\Interop.View.Object.cs" />
+    <Compile Include="Interop\Interop.View.Snapshot.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Tizen.Maps\PlaceAddress.cs" />
+    <Compile Include="Tizen.Maps\PlaceAddressList.cs" />
+    <Compile Include="Tizen.Maps\Area.cs" />
+    <Compile Include="Tizen.Maps\Geocoordinates.cs" />
+    <Compile Include="Tizen.Maps\GeocoordinatesList.cs" />
+    <Compile Include="Tizen.Maps\Direction.cs" />
+    <Compile Include="Tizen.Maps\DistanceUnit.cs" />
+    <Compile Include="Tizen.Maps\GeocodePreference.cs" />
+    <Compile Include="Tizen.Maps\GeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\MapService.cs" />
+    <Compile Include="Tizen.Maps\MapServiceRequest.cs" />
+    <Compile Include="Tizen.Maps\MultiReverseGeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\Place.cs" />
+    <Compile Include="Tizen.Maps\PlaceAttribute.cs" />
+    <Compile Include="Tizen.Maps\PlaceCategory.cs" />
+    <Compile Include="Tizen.Maps\PlaceContact.cs" />
+    <Compile Include="Tizen.Maps\PlaceEditorial.cs" />
+    <Compile Include="Tizen.Maps\PlaceFilter.cs" />
+    <Compile Include="Tizen.Maps\PlaceImage.cs" />
+    <Compile Include="Tizen.Maps\PlaceLink.cs" />
+    <Compile Include="Tizen.Maps\PlaceList.cs" />
+    <Compile Include="Tizen.Maps\PlaceMedia.cs" />
+    <Compile Include="Tizen.Maps\PlaceRating.cs" />
+    <Compile Include="Tizen.Maps\PlaceSearchPreference.cs" />
+    <Compile Include="Tizen.Maps\PlaceSearchRequest.cs" />
+    <Compile Include="Tizen.Maps\PlaceReview.cs" />
+    <Compile Include="Tizen.Maps\ReverseGeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\Route.cs" />
+    <Compile Include="Tizen.Maps\RouteFeature.cs" />
+    <Compile Include="Tizen.Maps\RouteFeatureWeight.cs" />
+    <Compile Include="Tizen.Maps\RouteManeuver.cs" />
+    <Compile Include="Tizen.Maps\RouteOptimization.cs" />
+    <Compile Include="Tizen.Maps\RouteSearchPreference.cs" />
+    <Compile Include="Tizen.Maps\RouteSearchRequest.cs" />
+    <Compile Include="Tizen.Maps\RouteSegment.cs" />
+    <Compile Include="Tizen.Maps\ServiceRequestType.cs" />
+    <Compile Include="Tizen.Maps\ServiceData.cs" />
+    <Compile Include="Tizen.Maps\SnapshotType.cs" />
+    <Compile Include="Tizen.Maps\TransportMode.cs" />
+    <Compile Include="Tizen.Maps\TurnInstruction.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>
diff --git a/src/Tizen.Maps/Tizen.Maps.Net45.project.json b/src/Tizen.Maps/Tizen.Maps.Net45.project.json
new file mode 100644 (file)
index 0000000..50ad9cb
--- /dev/null
@@ -0,0 +1,17 @@
+{
+  "buildOptions": {
+    "debugType": "portable",
+    "platform": "AnyCPU",
+    "preserveCompilationContext": true
+  },
+  "dependencies": {
+    "Tizen": "1.0.2",
+    "ElmSharp": "1.1.0-*"
+  },
+  "runtimes": {
+    "win": {}
+  },
+  "frameworks": {
+    "net45": {}
+  }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps.csproj b/src/Tizen.Maps/Tizen.Maps.csproj
new file mode 100755 (executable)
index 0000000..b0220c1
--- /dev/null
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MinimumVisualStudioVersion>14.0</MinimumVisualStudioVersion>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProductVersion>8.0.30703</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
+    <ProjectGuid>{5C091CB5-FD77-454F-A3B8-C67163250003}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>Tizen.Maps</RootNamespace>
+    <AssemblyName>Tizen.Maps</AssemblyName>
+    <FileAlignment>512</FileAlignment>
+    <DefaultLanguage>en-US</DefaultLanguage>
+  </PropertyGroup>
+  <PropertyGroup>
+    <TargetFrameworkIdentifier>.NETStandard</TargetFrameworkIdentifier>
+    <TargetFrameworkVersion>v1.3</TargetFrameworkVersion>
+    <NuGetTargetMoniker>.NETStandard,Version=v1.3</NuGetTargetMoniker>
+    <TargetFrameworkMoniker>.NETStandard,Version=v1.3</TargetFrameworkMoniker>
+    <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>
+    <NoStdLib>true</NoStdLib>
+    <NoWarn>$(NoWarn);1701</NoWarn>
+    <UseVSHostingProcess>false</UseVSHostingProcess>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <SignAssembly>true</SignAssembly>
+  </PropertyGroup>
+  <PropertyGroup>
+    <AssemblyOriginatorKeyFile>Tizen.Maps.snk</AssemblyOriginatorKeyFile>
+  </PropertyGroup>
+  <ItemGroup>
+    <None Include="Tizen.Maps.project.json" />
+    <None Include="Tizen.Maps.snk" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Interop\Interop.SafeMapsHandle.cs" />
+    <Compile Include="Tizen.Maps\MapView.cs" />
+    <Compile Include="Tizen.Maps\GestureType.cs" />
+    <Compile Include="Tizen.Maps\Overlay.cs" />
+    <Compile Include="Tizen.Maps\Polygon.cs" />
+    <Compile Include="Tizen.Maps\Polyline.cs" />
+    <Compile Include="Tizen.Maps\MapGestureEventArgs.cs" />
+    <Compile Include="Tizen.Maps\MapObjectEventArgs.cs" />
+    <Compile Include="Tizen.Maps\MapObject.cs" />
+    <Compile Include="Tizen.Maps\MapObjectType.cs" />
+    <Compile Include="Tizen.Maps\MapTypes.cs" />
+    <Compile Include="Tizen.Maps\Marker.cs" />
+    <Compile Include="Interop\Interop.Address.cs" />
+    <Compile Include="Interop\Interop.Area.cs" />
+    <Compile Include="Interop\Interop.Libraries.cs" />
+    <Compile Include="Interop\Interop.Coordinates.cs" />
+    <Compile Include="Interop\Interop.ErrorCode.cs" />
+    <Compile Include="Interop\Interop.Place.Attribute.cs" />
+    <Compile Include="Interop\Interop.Place.Category.cs" />
+    <Compile Include="Interop\Interop.Place.Contact.cs" />
+    <Compile Include="Interop\Interop.Place.cs" />
+    <Compile Include="Interop\Interop.Place.Editorial.cs" />
+    <Compile Include="Interop\Interop.Place.Filter.cs" />
+    <Compile Include="Interop\Interop.Place.Image.cs" />
+    <Compile Include="Interop\Interop.Place.Link.Object.cs" />
+    <Compile Include="Interop\Interop.Place.Media.cs" />
+    <Compile Include="Interop\Interop.Place.Rating.cs" />
+    <Compile Include="Interop\Interop.Place.Review.cs" />
+    <Compile Include="Interop\Interop.Preference.cs" />
+    <Compile Include="Interop\Interop.Route.cs" />
+    <Compile Include="Interop\Interop.Route.Maneuver.cs" />
+    <Compile Include="Interop\Interop.Route.Segment.cs" />
+    <Compile Include="Interop\Interop.Service.cs" />
+    <Compile Include="Interop\Interop.View.cs" />
+    <Compile Include="Interop\Interop.View.Event.Data.cs" />
+    <Compile Include="Interop\Interop.View.Object.cs" />
+    <Compile Include="Interop\Interop.View.Snapshot.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Tizen.Maps\PlaceAddress.cs" />
+    <Compile Include="Tizen.Maps\PlaceAddressList.cs" />
+    <Compile Include="Tizen.Maps\Area.cs" />
+    <Compile Include="Tizen.Maps\Geocoordinates.cs" />
+    <Compile Include="Tizen.Maps\GeocoordinatesList.cs" />
+    <Compile Include="Tizen.Maps\Direction.cs" />
+    <Compile Include="Tizen.Maps\DistanceUnit.cs" />
+    <Compile Include="Tizen.Maps\GeocodePreference.cs" />
+    <Compile Include="Tizen.Maps\GeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\MapService.cs" />
+    <Compile Include="Tizen.Maps\MapServiceRequest.cs" />
+    <Compile Include="Tizen.Maps\MultiReverseGeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\Place.cs" />
+    <Compile Include="Tizen.Maps\PlaceAttribute.cs" />
+    <Compile Include="Tizen.Maps\PlaceCategory.cs" />
+    <Compile Include="Tizen.Maps\PlaceContact.cs" />
+    <Compile Include="Tizen.Maps\PlaceEditorial.cs" />
+    <Compile Include="Tizen.Maps\PlaceFilter.cs" />
+    <Compile Include="Tizen.Maps\PlaceImage.cs" />
+    <Compile Include="Tizen.Maps\PlaceLink.cs" />
+    <Compile Include="Tizen.Maps\PlaceList.cs" />
+    <Compile Include="Tizen.Maps\PlaceMedia.cs" />
+    <Compile Include="Tizen.Maps\PlaceRating.cs" />
+    <Compile Include="Tizen.Maps\PlaceSearchPreference.cs" />
+    <Compile Include="Tizen.Maps\PlaceSearchRequest.cs" />
+    <Compile Include="Tizen.Maps\PlaceReview.cs" />
+    <Compile Include="Tizen.Maps\ReverseGeocodeRequest.cs" />
+    <Compile Include="Tizen.Maps\Route.cs" />
+    <Compile Include="Tizen.Maps\RouteFeature.cs" />
+    <Compile Include="Tizen.Maps\RouteFeatureWeight.cs" />
+    <Compile Include="Tizen.Maps\RouteManeuver.cs" />
+    <Compile Include="Tizen.Maps\RouteOptimization.cs" />
+    <Compile Include="Tizen.Maps\RouteSearchPreference.cs" />
+    <Compile Include="Tizen.Maps\RouteSearchRequest.cs" />
+    <Compile Include="Tizen.Maps\RouteSegment.cs" />
+    <Compile Include="Tizen.Maps\ServiceRequestType.cs" />
+    <Compile Include="Tizen.Maps\ServiceData.cs" />
+    <Compile Include="Tizen.Maps\SnapshotType.cs" />
+    <Compile Include="Tizen.Maps\TransportMode.cs" />
+    <Compile Include="Tizen.Maps\TurnInstruction.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
+        Other similar extension points exist, see Microsoft.Common.targets.
+    <Target Name="BeforeBuild">
+    </Target>
+    <Target Name="AfterBuild">
+    </Target>
+    -->
+  <PropertyGroup>
+    <!-- https://github.com/dotnet/corefxlab/tree/master/samples/NetCoreSample and
+             https://docs.microsoft.com/en-us/dotnet/articles/core/tutorials/target-dotnetcore-with-msbuild
+        -->
+    <!-- We don't use any of MSBuild's resolution logic for resolving the framework, so just set these two
+             properties to any folder that exists to skip the GetReferenceAssemblyPaths task (not target) and
+             to prevent it from outputting a warning (MSB3644).
+        -->
+    <_TargetFrameworkDirectories>$(MSBuildThisFileDirectory)</_TargetFrameworkDirectories>
+    <_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>
+    <AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps.nuspec b/src/Tizen.Maps/Tizen.Maps.nuspec
new file mode 100644 (file)
index 0000000..9051a5d
--- /dev/null
@@ -0,0 +1,16 @@
+<?xml version="1.0"?>
+<package>
+  <metadata>
+        <id>Tizen.Maps</id>
+        <version>$version$</version>
+        <authors>Tizen Developers</authors>
+        <description>Map Services API for Tizen.Net</description>
+    <dependencies>
+      <dependency id="Tizen" version="1.0.3" />
+    </dependencies>
+    </metadata>
+    <files>
+        <file src="bin/$Configuration$/Tizen.Maps.dll" target="lib/netstandard1.3"/>
+        <file src="bin/$Configuration$/Net45/Tizen.Maps.dll" target="lib/net45" />
+    </files>
+</package>
diff --git a/src/Tizen.Maps/Tizen.Maps.project.json b/src/Tizen.Maps/Tizen.Maps.project.json
new file mode 100755 (executable)
index 0000000..a5893c4
--- /dev/null
@@ -0,0 +1,15 @@
+{
+  "buildOptions": {
+    "debugType": "portable",
+    "platform": "AnyCPU",
+    "preserveCompilationContext": true
+  },
+  "dependencies": {
+    "ElmSharp": "1.1.0-*",
+    "NETStandard.Library": "1.6.1",
+    "Tizen": "1.0.2"
+  },
+  "frameworks": {
+    "netstandard1.3": {}
+  }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps.snk b/src/Tizen.Maps/Tizen.Maps.snk
new file mode 100755 (executable)
index 0000000..32ee425
Binary files /dev/null and b/src/Tizen.Maps/Tizen.Maps.snk differ
diff --git a/src/Tizen.Maps/Tizen.Maps/Area.cs b/src/Tizen.Maps/Tizen.Maps/Area.cs
new file mode 100755 (executable)
index 0000000..318fa98
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Class representing geographical area
+    /// </summary>
+    public class Area
+    {
+        internal Interop.AreaHandle handle;
+
+        /// <summary>
+        /// Constructs rectangular area
+        /// </summary>
+        /// <param name="topLeft">Top left coordinate of the area</param>
+        /// <param name="bottomRight">Bottom left coordinate of the area</param>
+        /// <exception cref="ArgumentException">Throws if input coordinates are invalid</exception>
+        /// <exception cref="InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public Area(Geocoordinates topLeft, Geocoordinates bottomRight)
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (topLeft == null || bottomRight == null)
+            {
+                err.ThrowIfFailed("Need valid coordinates, given null");
+            }
+
+            IntPtr nativeHandle;
+            err = Interop.Area.CreateRectangle(topLeft.handle, bottomRight.handle, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native rectangular area handle");
+
+            handle = new Interop.AreaHandle(nativeHandle);
+        }
+
+        /// <summary>
+        /// Constructs circular area
+        /// </summary>
+        /// <param name="center">Coordinate for center of the area</param>
+        /// <param name="radius">Radius of the area</param>
+        /// <exception cref="ArgumentException">Throws if input coordinates are invalid</exception>
+        /// <exception cref="InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public Area(Geocoordinates center, double radius)
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (center == null)
+            {
+                err.ThrowIfFailed("Need valid center coordinates, given null");
+            }
+
+            IntPtr nativeHandle;
+            err = Interop.Area.CreateCircle(center.handle, radius, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native circular area handle");
+
+            handle = new Interop.AreaHandle(nativeHandle);
+        }
+
+        internal Area(IntPtr nativeHandle)
+        {
+            handle = new Interop.AreaHandle(nativeHandle);
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Direction.cs b/src/Tizen.Maps/Tizen.Maps/Direction.cs
new file mode 100755 (executable)
index 0000000..ac2e3f3
--- /dev/null
@@ -0,0 +1,61 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Direction types for route maneuver
+    /// </summary>
+    public enum DirectionType
+    {
+        /// <summary>
+        /// Unknown direction
+        /// </summary>
+        None = Interop.RouteDirection.None,
+        /// <summary>
+        /// North direction
+        /// </summary>
+        North = Interop.RouteDirection.North,
+        /// <summary>
+        /// North-West direction
+        /// </summary>
+        NorthWest = Interop.RouteDirection.NorthWest,
+        /// <summary>
+        /// North-East direction
+        /// </summary>
+        NorthEast = Interop.RouteDirection.NorthEast,
+        /// <summary>
+        /// South direction
+        /// </summary>
+        South = Interop.RouteDirection.South,
+        /// <summary>
+        /// South-East direction
+        /// </summary>
+        SouthEast = Interop.RouteDirection.SouthEast,
+        /// <summary>
+        /// South-West direction
+        /// </summary>
+        SouthWest = Interop.RouteDirection.SouthWest,
+        /// <summary>
+        /// West direction
+        /// </summary>
+        West = Interop.RouteDirection.West,
+        /// <summary>
+        /// East direction
+        /// </summary>
+        East = Interop.RouteDirection.East,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/DistanceUnit.cs b/src/Tizen.Maps/Tizen.Maps/DistanceUnit.cs
new file mode 100755 (executable)
index 0000000..a1a4012
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Allowed distance units
+    /// </summary>
+    public enum DistanceUnit
+    {
+        /// <summary>
+        /// Meter
+        /// </summary>
+        Meter = Interop.DistanceUnit.Meter,
+        /// <summary>
+        /// Kilometer
+        /// </summary>
+        Kilometer = Interop.DistanceUnit.Kilometer,
+        /// <summary>
+        /// Foot
+        /// </summary>
+        Foot = Interop.DistanceUnit.Foot,
+        /// <summary>
+        /// Yard
+        /// </summary>
+        Yard = Interop.DistanceUnit.Yard,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/GeocodePreference.cs b/src/Tizen.Maps/Tizen.Maps/GeocodePreference.cs
new file mode 100755 (executable)
index 0000000..da7786d
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Preferences for Geocode service requests
+    /// </summary>
+    public class GeocodePreference
+    {
+        internal Interop.PreferenceHandle handle;
+
+        private string _language = string.Empty;
+
+        /// <summary>
+        /// Constructor for search preference
+        /// </summary>
+        public GeocodePreference()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Preference.Create(out nativeHandle);
+            if(err.ThrowIfFailed("Failed to create native preference handle"))
+            {
+                handle = new Interop.PreferenceHandle(nativeHandle);
+            }
+        }
+
+        /// <summary>
+        /// Preferred language
+        /// </summary>
+        /// <remarks>
+        /// Language should be specified as an ISO 3166 alpha-2 two letter country-code followed by ISO 639-1 for the two-letter language code e.g. "ko-KR"
+        /// </remarks>
+        public string Language
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_language))
+                {
+                    string language;
+                    var err = Interop.Preference.GetLanguage(handle, out language);
+                    if (err.WarnIfFailed("Failed to get language for this preference"))
+                    {
+                        _language = language;
+                    }
+                }
+                return _language;
+            }
+            set
+            {
+                var err = Interop.Preference.SetLanguage(handle, value == null ? "" : value);
+                if (err.WarnIfFailed("Failed to set language for this preference"))
+                {
+                    _language = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Maximum result count for a service request
+        /// </summary>
+        /// <remarks>Setting negative value will not have any effect on MaxResults value</remarks>
+        public int MaxResults
+        {
+            get
+            {
+                int _maxResults = 0;
+                var err = Interop.Preference.GetMaxResults(handle, out _maxResults);
+                err.WarnIfFailed("Failed to get max result count for this preference");
+                return _maxResults;
+            }
+            set
+            {
+                var err = Interop.Preference.SetMaxResults(handle, value);
+                err.WarnIfFailed("Failed to set max result count for this preference");
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/GeocodeRequest.cs b/src/Tizen.Maps/Tizen.Maps/GeocodeRequest.cs
new file mode 100755 (executable)
index 0000000..37c9eef
--- /dev/null
@@ -0,0 +1,99 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Geocode request for map service
+    /// </summary>
+    public class GeocodeRequest : MapServiceRequest<Geocoordinates>
+    {
+        private Interop.Service.GeocodeCallback _responseCallback;
+        private List<Geocoordinates> _coordinateList = new List<Geocoordinates>();
+        private GeocodePreference _preferences = new GeocodePreference();
+
+        internal GeocodeRequest(MapService service, string address) : this(service, ServiceRequestType.Geocode)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get co-ordinates for given address {0}", address);
+                errorCode = Interop.Service.Geocode(_service, address, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        internal GeocodeRequest(MapService service, string address, Area boundry) : this(service, ServiceRequestType.GeocodeInsideArea)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get co-ordinates for given address {0}", address);
+                errorCode = Interop.Service.GeocodeInsideArea(_service, address, boundry.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        internal GeocodeRequest(MapService service, PlaceAddress address) : this(service, ServiceRequestType.GeocodeByStructuredAddress)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get co-ordinates for given address {0}", address);
+                errorCode = Interop.Service.GeocodeByStructuredAddress(_service, address.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        private GeocodeRequest(MapService service, ServiceRequestType type) : base(service, type)
+        {
+            _preferences = service.GeocodePreferences;
+            _responseCallback = (result, id, index, total, coordinatesHandle, userData) =>
+            {
+                errorCode = result;
+                if (result.IsSuccess())
+                {
+                    _coordinateList.Add(new Geocoordinates(coordinatesHandle));
+                    if (_coordinateList.Count == total)
+                    {
+                        _requestTask?.TrySetResult(_coordinateList);
+                    }
+                    return true;
+                }
+                else
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    return false;
+                }
+            };
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Geocoordinates.cs b/src/Tizen.Maps/Tizen.Maps/Geocoordinates.cs
new file mode 100755 (executable)
index 0000000..7beb857
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Class representing geographical co-ordinates
+    /// </summary>
+    public class Geocoordinates
+    {
+        internal Interop.CoordinatesHandle handle;
+
+        /// <summary>
+        /// Constructs map coordinate object
+        /// </summary>
+        /// <param name="latitude">latitude value, must be between (-90.0 ~ 90.0) degrees</param>
+        /// <param name="longitude">longitude value, must be between (-180.0 ~ 180.0) degrees</param>
+        /// <exception cref="System.ArgumentException">Throws if values for latitude and longitude are not valid</exception>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public Geocoordinates(double latitude, double longitude)
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Coordinates.Create(latitude, longitude, out nativeHandle);
+            if (err.ThrowIfFailed("Failed to create native coordinate handle"))
+            {
+                handle = new Interop.CoordinatesHandle(nativeHandle);
+                Latitude = latitude;
+                Longitude = longitude;
+            }
+        }
+
+        internal Geocoordinates(IntPtr nativeHandle)
+        {
+            double latitude;
+            double longitude;
+            handle = new Interop.CoordinatesHandle(nativeHandle);
+            var err = Interop.Coordinates.GetLatitudeLongitude(handle, out latitude, out longitude);
+            if (err.ThrowIfFailed("Failed to get coordinate value using native handle"))
+            {
+                Latitude = latitude;
+                Longitude = longitude;
+            }
+        }
+
+        /// <summary>
+        /// Latitude for this coordinate
+        /// </summary>
+        public double Latitude { get; }
+
+        /// <summary>
+        /// Longitude for this coordinate
+        /// </summary>
+        public double Longitude { get; }
+
+        public override string ToString()
+        {
+            return string.Format("Geocoordinates(Lat: {0}, Lon: {1})", Latitude, Longitude);
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/GeocoordinatesList.cs b/src/Tizen.Maps/Tizen.Maps/GeocoordinatesList.cs
new file mode 100755 (executable)
index 0000000..9757f67
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// List of <see cref="Geocoordinates"/> objects to be used in <see cref="MapService"/> APIs
+    /// </summary>
+    internal class GeocoordinatesList
+    {
+        internal Interop.CoordinatesListHandle handle;
+
+        internal GeocoordinatesList(IEnumerable<Geocoordinates> coordinateList, bool ownsHandle)
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Coordinates.ListCreate(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for coordinate list");
+
+            handle = new Interop.CoordinatesListHandle(nativeHandle, ownsHandle);
+            foreach (var coordinates in coordinateList)
+            {
+                IntPtr clonedNativeHandle;
+                err = Interop.Coordinates.Clone(coordinates.handle, out clonedNativeHandle);
+                err.WarnIfFailed("Failed to clone native handle for coordinates");
+
+                Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(clonedNativeHandle);
+                err = Interop.Coordinates.ListAppend(handle, clonedHandle);
+                if (err.WarnIfFailed("Failed to add coordinate to the list"))
+                {
+                    clonedHandle.ReleaseOwnership();
+                }
+            }
+        }
+
+        /// <summary>
+        /// Iterator for coordinates in this list
+        /// </summary>
+        internal IEnumerable<Geocoordinates> Coordinates
+        {
+            get
+            {
+                List<Geocoordinates> list = new List<Geocoordinates>();
+                Interop.Coordinates.CoordinatesCallback callback = (index, handle, userData) =>
+                {
+                    IntPtr clonedNativeHandle;
+                    var result = Interop.Coordinates.Clone(handle, out clonedNativeHandle);
+                    if (result.WarnIfFailed("Failed to add coordinate to the list"))
+                    {
+                        Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(clonedNativeHandle);
+                        list.Add(new Geocoordinates(clonedHandle));
+                    }
+                    return true;
+                };
+
+                var err = Interop.Coordinates.ListForeach(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get coordinates list from native handle");
+                return list;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/GestureType.cs b/src/Tizen.Maps/Tizen.Maps/GestureType.cs
new file mode 100755 (executable)
index 0000000..4a9ca08
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    [Flags]
+    public enum GestureType
+    {
+        None = Interop.ViewGesture.None,
+        Scroll = Interop.ViewGesture.Scroll,
+        Zoom = Interop.ViewGesture.Zoom,
+        Tap = Interop.ViewGesture.Tap,
+        DoubleTap = Interop.ViewGesture.DoubleTap,
+        TwoFingerTap = Interop.ViewGesture.TwoFingerTap,
+        Rotate = Interop.ViewGesture.Rotate,
+        LongPress = Interop.ViewGesture.LongPress,
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/MapGestureEventArgs.cs b/src/Tizen.Maps/Tizen.Maps/MapGestureEventArgs.cs
new file mode 100755 (executable)
index 0000000..8cccd8f
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+
+namespace Tizen.Maps
+{
+    public class MapGestureEventArgs : EventArgs
+    {
+        internal static MapGestureEventArgs Create(IntPtr nativeHandle)
+        {
+            Interop.ViewGesture type;
+            Point screenCoordinate = new Point();
+            int touchCount;
+            double zoomFactor;
+            double rotationAngle;
+            Geocoordinates coordinates;
+
+            Interop.ViewEventData.GetGestureType(nativeHandle, out type);
+            Interop.ViewEventData.GetPosition(nativeHandle, out screenCoordinate.X, out screenCoordinate.Y);
+            Interop.ViewEventData.GetFingers(nativeHandle, out touchCount);
+            Interop.ViewEventData.GetZoomFactor(nativeHandle, out zoomFactor);
+            Interop.ViewEventData.GetRotationAngle(nativeHandle, out rotationAngle);
+
+            IntPtr coordinate;
+            Interop.ViewEventData.GetCoordinates(nativeHandle, out coordinate);
+            coordinates = new Geocoordinates(coordinate);
+            return new MapGestureEventArgs((GestureType)type, screenCoordinate, coordinates, touchCount, zoomFactor, rotationAngle);
+        }
+
+        internal MapGestureEventArgs(GestureType type, Point screenCoordinate, Geocoordinates geocoordinates, int touchCount, double zoomFactor, double rotationAngle)
+        {
+            GestureType = type;
+            Position = screenCoordinate;
+            Geocoordinates = geocoordinates;
+            TouchCount = touchCount;
+            ZoomFactor = zoomFactor;
+            RotationAngle = rotationAngle;
+        }
+
+        public GestureType GestureType { get; }
+        public Point Position { get; }
+        public int TouchCount { get; }
+        public double ZoomFactor { get; }
+        public double RotationAngle { get; }
+        public Geocoordinates Geocoordinates { get; }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MapObject.cs b/src/Tizen.Maps/Tizen.Maps/MapObject.cs
new file mode 100755 (executable)
index 0000000..8b761b4
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    public class MapObject
+    {
+        internal Interop.ViewObjectHandle handle;
+        private static Dictionary<IntPtr, MapObject> s_HandleToItemTable = new Dictionary<IntPtr, MapObject>();
+
+        internal MapObject(Interop.ViewObjectHandle nativeHandle)
+        {
+            handle = nativeHandle;
+        }
+
+        public event EventHandler Clicked;
+
+        public bool IsVisible
+        {
+            get
+            {
+                bool value;
+                Interop.ViewObject.GetVisible(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.SetVisible(handle, value);
+            }
+        }
+
+        internal void AddToMapObjectTable()
+        {
+            s_HandleToItemTable[handle] = this;
+        }
+
+        internal void RemoveFromMapObjectTable()
+        {
+            s_HandleToItemTable.Remove(handle);
+        }
+
+        internal static MapObject GetItemByHandle(IntPtr handle)
+        {
+            MapObject value;
+            s_HandleToItemTable.TryGetValue(handle, out value);
+            return value;
+        }
+
+        internal void HandleClickedEvent()
+        {
+            Clicked?.Invoke(this, EventArgs.Empty);
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MapObjectEventArgs.cs b/src/Tizen.Maps/Tizen.Maps/MapObjectEventArgs.cs
new file mode 100755 (executable)
index 0000000..98317a8
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+
+namespace Tizen.Maps
+{
+    internal class MapObjectEventArgs : EventArgs
+    {
+        internal static MapObjectEventArgs Create(IntPtr nativeHandle)
+        {
+            Interop.ViewGesture type;
+            Point screenCoordinate = new Point();
+            int touchCount;
+            MapObject mapObject;
+
+            Interop.ViewEventData.GetGestureType(nativeHandle, out type);
+            Interop.ViewEventData.GetPosition(nativeHandle, out screenCoordinate.X, out screenCoordinate.Y);
+            Interop.ViewEventData.GetFingers(nativeHandle, out touchCount);
+
+            IntPtr nativeObjectHandle;
+            Interop.ViewEventData.GetObject(nativeHandle, out nativeObjectHandle);
+            mapObject = MapObject.GetItemByHandle(nativeObjectHandle);
+            return new MapObjectEventArgs((GestureType)type, screenCoordinate, touchCount, mapObject);
+        }
+
+        internal MapObjectEventArgs(GestureType type, Point position, int touchCount, MapObject mapObject)
+        {
+            GestureType = type;
+            Position = position;
+            TouchCount = touchCount;
+            ViewObject = mapObject;
+        }
+
+        public GestureType GestureType { get; }
+        public Point Position { get; }
+        public int TouchCount { get; }
+        public MapObject ViewObject { get; }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MapObjectType.cs b/src/Tizen.Maps/Tizen.Maps/MapObjectType.cs
new file mode 100755 (executable)
index 0000000..ab491d5
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    internal enum MapObjectType
+    {
+        Marker,
+        Overlay,
+        Polygon,
+        Polyline,
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/MapService.cs b/src/Tizen.Maps/Tizen.Maps/MapService.cs
new file mode 100755 (executable)
index 0000000..87aee1f
--- /dev/null
@@ -0,0 +1,330 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Map service class for service request
+    /// </summary>
+    public partial class MapService : IDisposable
+    {
+        internal Interop.ServiceHandle handle;
+
+        internal PlaceFilter _filter = new PlaceFilter();
+        internal GeocodePreference _geocodePreference = new GeocodePreference();
+        internal PlaceSearchPreference _placePreference = new PlaceSearchPreference();
+        internal RouteSearchPreference _routePreference = new RouteSearchPreference();
+
+        private static List<string> s_providers;
+        private string _serviceProvider;
+        private string _serviceProviderKey;
+
+        /// <summary>
+        /// Creates a new Maps Service object for given service provider
+        /// </summary>
+        /// <param name="serviceProvider">Name of map service provider</param>
+        /// <param name="serviceProviderKey">Key string provided by map service provider</param>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory, connect to service</exception>
+        /// <exception cref="System.UnauthorizedAccessException">Throws if user does not have privilege to access this API</exception>
+        public MapService(string serviceProvider, string serviceProviderKey)
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Service.Create(serviceProvider, out nativeHandle);
+            if (err.ThrowIfFailed("Failed to create native service handle"))
+            {
+                handle = new Interop.ServiceHandle(nativeHandle);
+                _serviceProvider = serviceProvider;
+                ProviderKey = serviceProviderKey;
+            }
+        }
+
+        /// <summary>
+        /// List of available map service providers
+        /// </summary>
+        public static IEnumerable<string> Providers
+        {
+            get
+            {
+                if (s_providers != null) return s_providers;
+
+                s_providers = new List<string>();
+                Interop.Service.ProviderInfoCallback callback = (mapsProvider, userData) =>
+                {
+                    s_providers.Add(mapsProvider);
+                    return true;
+                };
+                var err = Interop.Service.ForeachProvider(callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get map service providers list");
+
+                return s_providers;
+            }
+        }
+
+        /// <summary>
+        /// Name of map service provider
+        /// </summary>
+        public string Provider { get { return _serviceProvider; } }
+
+
+        /// <summary>
+        /// Key for map service provider
+        /// </summary>
+        public string ProviderKey
+        {
+            get
+            {
+                return _serviceProviderKey;
+            }
+            set
+            {
+                var err = Interop.Service.SetProviderKey(handle, value);
+                if (err.WarnIfFailed("Failed to set service provider key"))
+                {
+                    _serviceProviderKey = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Filter used for place search result
+        /// </summary>
+        public PlaceFilter PlaceSearchFilter
+        {
+            get
+            {
+                return _filter;
+            }
+            set
+            {
+                _filter = value;
+            }
+        }
+
+        /// <summary>
+        /// Search preferences used for Geocode/ ReverseGeocode request
+        /// </summary>
+        public GeocodePreference GeocodePreferences
+        {
+            get
+            {
+                return _geocodePreference;
+            }
+            set
+            {
+                _geocodePreference = value;
+            }
+        }
+
+        /// <summary>
+        /// Search preferences used for <see cref="Place"/> search request
+        /// </summary>
+        public PlaceSearchPreference PlaceSearchPreferences
+        {
+            get
+            {
+                return _placePreference;
+            }
+            set
+            {
+                _placePreference = value;
+            }
+        }
+
+        /// <summary>
+        /// Search preferences used for <see cref="Route"/> search request
+        /// </summary>
+        public RouteSearchPreference RouteSearchPreferences
+        {
+            get
+            {
+                return _routePreference;
+            }
+            set
+            {
+                _routePreference = value;
+            }
+        }
+
+        /// <summary>
+        /// Gets the user's consent to use maps data
+        /// </summary>
+        /// <returns>true if user agreed that the application can use maps data, false otherwise</returns>
+        public static async Task<bool> RequestUserConsent(string provider)
+        {
+            TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
+            Interop.Service.RequestUserConsentCallback cb = (consented, serviceProvider, userData) =>
+            {
+                tcs.TrySetResult(consented);
+            };
+
+            var err = Interop.Service.RequestUserConsent(provider, cb, IntPtr.Zero);
+            if (err.IsFailed())
+            {
+                tcs.TrySetException(err.GetException("Failed to get user consent"));
+            }
+            return await tcs.Task.ConfigureAwait(false);
+        }
+
+        /// <summary>
+        /// Checks if the Maps Service supports given request
+        /// </summary>
+        /// <param name="type">request type to be checked</param>
+        /// <returns>true if the Maps Service supports a request, false otherwise</returns>
+        public bool IsSupported(ServiceRequestType type)
+        {
+            bool result;
+            var err = Interop.Service.ProviderIsServiceSupported(handle, (Interop.ServiceType)type, out result);
+            err.WarnIfFailed(string.Format("Failed to get if {0} is supported", type));
+            return (err.IsSuccess()) ? result : false;
+        }
+
+        /// <summary>
+        /// Checks if the Maps Service supports given data feature
+        /// </summary>
+        /// <param name="data">data feature to be checked </param>
+        /// <returns>true if the Maps Service supports a data feature, false otherwise</returns>
+        public bool IsSupported(ServiceData data)
+        {
+            bool result;
+            var err = Interop.Service.ProviderIsDataSupported(handle, (Interop.ServiceData)data, out result);
+            err.WarnIfFailed(string.Format("Failed to get if {0} data is supported", data));
+            return (err.IsSuccess()) ? result : false;
+        }
+
+        /// <summary>
+        /// Creates gGeocode search request for given free-formed address string
+        /// </summary>
+        /// <param name="address">Free-formed address</param>
+        /// <returns>Returns GeocodeRequest object created with address string</returns>
+        public GeocodeRequest CreateGeocodeRequest(string address)
+        {
+            return new GeocodeRequest(this, address);
+        }
+
+        /// <summary>
+        /// Creates geocode search request for given free-formed address string, within the specified boundary
+        /// </summary>
+        /// <param name="address">Free-formed address</param>
+        /// <param name="boundary">Interested area</param>
+        /// <returns>Returns GeocodeRequest object created with address string and specified boundary</returns>
+        public GeocodeRequest CreateGeocodeRequest(string address, Area boundary)
+        {
+            return new GeocodeRequest(this, address, boundary);
+        }
+
+        /// <summary>
+        /// Creates geocode search request for given structured address
+        /// </summary>
+        /// <param name="address">address of interest</param>
+        /// <returns>Returns GeocodeRequest object created with structured address</returns>
+        public GeocodeRequest CreateGeocodeRequest(PlaceAddress address)
+        {
+            return new GeocodeRequest(this, address);
+        }
+
+        /// <summary>
+        /// Creates reverse geocode search request for given latitude and longitude
+        /// </summary>
+        /// <param name="latitude">Latitude for location of interest</param>
+        /// <param name="longitute">Longitude for location of interest</param>
+        /// <returns>Returns ReverseGeocodeRequest object created with location coordinates</returns>
+        public ReverseGeocodeRequest CreateReverseGeocodeRequest(double latitude, double longitute)
+        {
+            return new ReverseGeocodeRequest(this, latitude, longitute);
+        }
+
+        /// <summary>
+        /// Creates reverse geocode search request for given position coordinates list
+        /// </summary>
+        /// <param name="coordinates">Coordinates list with [2 ~ 100] coordinates</param>
+        /// <returns>Returns MultiReverseGeocodeRequest object created with list of location coordinates</returns>
+        public MultiReverseGeocodeRequest CreateMultiReverseGeocodeRequest(IEnumerable<Geocoordinates> coordinates)
+        {
+            return new MultiReverseGeocodeRequest(this, coordinates);
+        }
+
+        /// <summary>
+        /// Creates route search request for origin and destination points
+        /// </summary>
+        /// <param name="from">starting point</param>
+        /// <param name="to">destination</param>
+        /// <returns>Returns RouteSearchRequest object created with origin and destination coordinates</returns>
+        public RouteSearchRequest CreateRouteSearchRequest(Geocoordinates from, Geocoordinates to)
+        {
+            return new RouteSearchRequest(this, from, to);
+        }
+
+        /// <summary>
+        /// Creates place search request  for specified search radius around a given coordinates position
+        /// </summary>
+        /// <param name="position">Interested position</param>
+        /// <param name="distance">Search radius</param>
+        /// <returns>Returns PlaceSearchRequest object created with location coordinates and search radius</returns>
+        public PlaceSearchRequest CreatePlaceSearchRequest(Geocoordinates position, int distance)
+        {
+            return new PlaceSearchRequest(this, position, distance);
+        }
+
+        /// <summary>
+        /// Creates place search for places within specified boundary
+        /// </summary>
+        /// <param name="boundary">Interested area</param>
+        /// <returns>Returns PlaceSearchRequest object created with specified boundary</returns>
+        public PlaceSearchRequest CreatePlaceSearchRequest(Area boundary)
+        {
+            return new PlaceSearchRequest(this, boundary);
+        }
+
+        /// <summary>
+        /// Creates place search for free formed address within boundary
+        /// </summary>
+        /// <param name="address">Free-formed address</param>
+        /// <param name="boundary">Interested area</param>
+        /// <returns>Returns PlaceSearchRequest object created with address string and specified boundary</returns>
+        public PlaceSearchRequest CreatePlaceSearchRequest(string address, Area boundary)
+        {
+            return new PlaceSearchRequest(this, address, boundary);
+        }
+
+        #region IDisposable Support
+        private bool disposedValue = false;
+        protected virtual void Dispose(bool disposing)
+        {
+            if (!disposedValue)
+            {
+                if (disposing)
+                {
+                    //_filter.Dispose();
+                    //_geocodePreference.Dispose();
+                    //_placePreference.Dispose();
+                    //_routePreference.Dispose();
+                }
+                handle.Dispose();
+                disposedValue = true;
+            }
+        }
+
+        public void Dispose()
+        {
+            Dispose(true);
+        }
+        #endregion
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MapServiceRequest.cs b/src/Tizen.Maps/Tizen.Maps/MapServiceRequest.cs
new file mode 100755 (executable)
index 0000000..1863a18
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Threading.Tasks;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Base class for map service request
+    /// </summary>
+    /// <typeparam name="T"></typeparam>
+    public abstract class MapServiceRequest<T>
+    {
+        protected TaskCompletionSource<IEnumerable<T>> _requestTask;
+        protected string errMessage;
+        protected int? _requestID;
+        protected ServiceRequestType _type;
+
+        internal Action startExecutionAction;
+        internal Interop.ErrorCode errorCode;
+        internal Interop.ServiceHandle _service;
+
+        /// <summary>
+        /// Creates map service request
+        /// </summary>
+        /// <param name="service">map service object</param>
+        /// <param name="type">Request type</param>
+        internal MapServiceRequest(MapService service, ServiceRequestType type)
+        {
+            _service = service.handle;
+            _type = type;
+        }
+
+        /// <summary>
+        /// Sends request to map service provider
+        /// </summary>
+        /// <returns>Response from map service provider</returns>
+        /// <exception cref="TaskCanceledException">Throws if request is canceled</exception>
+        /// <exception cref="InvalidOperationException">Throws if native operation failed</exception>
+        public async Task<IEnumerable<T>> GetResponseAsync()
+        {
+            if (_requestTask == null || _requestTask.Task.IsCanceled)
+            {
+                _requestTask = new TaskCompletionSource<IEnumerable<T>>();
+                startExecutionAction();
+                await _requestTask.Task;
+            }
+            errorCode.WarnIfFailed(errMessage);
+            return await _requestTask.Task;
+        }
+
+        /// <summary>
+        /// Cancel this map service request
+        /// </summary>
+        public void Cancel()
+        {
+            if (_requestTask?.Task.IsCompleted == false)
+            {
+                _requestTask?.SetCanceled();
+                if (_requestID != null)
+                {
+                    var err = Interop.Service.CancelRequest(_service, (int)_requestID);
+                    err.ThrowIfFailed(string.Format("Unable to cancel service request, Type: {0}, ID: {1}", _type, _requestID));
+                }
+
+                errorCode = Interop.ErrorCode.Canceled;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MapTypes.cs b/src/Tizen.Maps/Tizen.Maps/MapTypes.cs
new file mode 100755 (executable)
index 0000000..06b3cba
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    public enum MapTypes
+    {
+        Normal = Interop.ViewType.Normal,
+        Satellite = Interop.ViewType.Satellite,
+        Terrain = Interop.ViewType.Terrain,
+        Hybrid = Interop.ViewType.Hybrid,
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/MapView.cs b/src/Tizen.Maps/Tizen.Maps/MapView.cs
new file mode 100755 (executable)
index 0000000..a37301d
--- /dev/null
@@ -0,0 +1,492 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+using Layout = ElmSharp.Layout;
+using EvasObject = ElmSharp.EvasObject;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    public class MapView : Layout
+    {
+        internal Interop.ViewHandle handle;
+        private Interop.ServiceHandle _service;
+
+        private HashSet<MapObject> _children = new HashSet<MapObject>();
+
+        private Interop.View.ViewOnEventCallback _gestureEventCallback;
+        private Interop.View.ViewOnEventCallback _objectEventCallback;
+        private Interop.View.ViewOnEventCallback _viewReadyEventCallback;
+
+        private event EventHandler<MapGestureEventArgs> _scrolledEventHandler;
+        private event EventHandler<MapGestureEventArgs> _zoomedEventHandler;
+        private event EventHandler<MapGestureEventArgs> _tappedEventHandler;
+        private event EventHandler<MapGestureEventArgs> _doubleTappedEventHandler;
+        private event EventHandler<MapGestureEventArgs> _twoFingerTappedEventHandler;
+        private event EventHandler<MapGestureEventArgs> _rotatedEventHandler;
+        private event EventHandler<MapGestureEventArgs> _longPressedEventHandler;
+        private event EventHandler _viewReadyEventHandler;
+
+        public MapView(EvasObject parent, MapService service) : base(parent)
+        {
+            IntPtr nativeHandle;
+            var err = Interop.View.Create(service.handle, this, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native map view handle");
+
+            handle = new Interop.ViewHandle(nativeHandle);
+            _service = service.handle;
+
+            Console.WriteLine($"MapView Created: ServiceHandle: {(IntPtr)_service}, ViewHandle: {(IntPtr)handle}");
+
+            // We need to keep Gesture Tap event enabled for object event to work
+            Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Tap, true);
+            SetObjectEventCallback();
+        }
+
+        public event EventHandler<MapGestureEventArgs> Scrolled
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Scroll, true);
+                _scrolledEventHandler += value;
+            }
+            remove
+            {
+                _scrolledEventHandler -= value;
+                if (_scrolledEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Scroll, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> ZoomChanged
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Zoom, true);
+                _zoomedEventHandler += value;
+            }
+            remove
+            {
+                _zoomedEventHandler -= value;
+                if (_zoomedEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Zoom, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> Clicked
+        {
+            add
+            {
+                SetGestureEventCallback();
+                //Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Tap, true);
+                _tappedEventHandler += value;
+            }
+            remove
+            {
+                _tappedEventHandler -= value;
+                if (_tappedEventHandler == null)
+                {
+                    //Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Tap, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> DoubleClicked
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.DoubleTap, true);
+                _doubleTappedEventHandler += value;
+            }
+            remove
+            {
+                _doubleTappedEventHandler -= value;
+                if (_doubleTappedEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.DoubleTap, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> TwoFingerPressed
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.TwoFingerTap, true);
+                _twoFingerTappedEventHandler += value;
+            }
+            remove
+            {
+                _twoFingerTappedEventHandler -= value;
+                if (_twoFingerTappedEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.TwoFingerTap, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> Rotated
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Rotate, true);
+                _rotatedEventHandler += value;
+            }
+            remove
+            {
+                _rotatedEventHandler -= value;
+                if (_rotatedEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.Rotate, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler<MapGestureEventArgs> LongPressed
+        {
+            add
+            {
+                SetGestureEventCallback();
+                Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.LongPress, true);
+                _longPressedEventHandler += value;
+            }
+            remove
+            {
+                _longPressedEventHandler -= value;
+                if (_longPressedEventHandler == null)
+                {
+                    Interop.View.SetGestureEnabled(handle, Interop.ViewGesture.LongPress, false);
+                    UnsetGestureEventCallback();
+                }
+            }
+        }
+
+        public event EventHandler ViewReady
+        {
+            add
+            {
+                SetViewReadyEventCallback();
+                _viewReadyEventHandler += value;
+            }
+            remove
+            {
+                _viewReadyEventHandler -= value;
+                UnsetGestureEventCallback();
+            }
+        }
+
+        public int ZoomLevel
+        {
+            get
+            {
+                int value;
+                Interop.View.GetZoomLevel(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetZoomLevel(handle, value);
+            }
+        }
+
+        public int MinimumZoomLevel
+        {
+            get
+            {
+                int value;
+                Interop.View.GetMinZoomLevel(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetMinZoomLevel(handle, value);
+            }
+        }
+
+        public int MaximumZoomLevel
+        {
+            get
+            {
+                int value;
+                Interop.View.GetMaxZoomLevel(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetMaxZoomLevel(handle, value);
+            }
+        }
+
+        public double Orientation
+        {
+            get
+            {
+                double value;
+                Interop.View.GetOrientation(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetOrientation(handle, value);
+            }
+        }
+
+        public MapTypes MapType
+        {
+            get
+            {
+                Interop.ViewType value;
+                Interop.View.GetType(handle, out value);
+                return (MapTypes)value;
+            }
+            set
+            {
+                Interop.View.SetType(handle, (Interop.ViewType)value);
+            }
+        }
+
+        public bool BuildingsEnabled
+        {
+            get
+            {
+                bool value;
+                Interop.View.GetBuildingsEnabled(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetBuildingsEnabled(handle, value);
+            }
+        }
+
+        public bool TrafficEnabled
+        {
+            get
+            {
+                bool value;
+                Interop.View.GetTrafficEnabled(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetTrafficEnabled(handle, value);
+            }
+        }
+
+        public bool PublicTransitEnabled
+        {
+            get
+            {
+                bool value;
+                Interop.View.GetPublicTransitEnabled(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetPublicTransitEnabled(handle, value);
+            }
+        }
+
+        public bool ScalebarEnabled
+        {
+            get
+            {
+                bool value;
+                Interop.View.GetScalebarEnabled(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetScalebarEnabled(handle, value);
+            }
+        }
+
+        public string Language
+        {
+            get
+            {
+                string value;
+                Interop.View.GetLanguage(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.View.SetLanguage(handle, value);
+            }
+        }
+
+        public Geocoordinates Center
+        {
+            get
+            {
+                IntPtr coordinateHandle;
+                Interop.View.GetCenter(handle, out coordinateHandle);
+                return new Geocoordinates(coordinateHandle);
+            }
+            set
+            {
+                Geocoordinates geocoordinate = value;
+                Interop.View.SetCenter(handle, geocoordinate.handle);
+            }
+        }
+
+        public IEnumerable<MapObject> Children
+        {
+            get
+            {
+                return _children;
+            }
+        }
+
+        public Point GeolocationToScreen(Geocoordinates coordinates)
+        {
+            Point screenCoordinates = new Point();
+            Geocoordinates geocoordinate = coordinates;
+            Interop.View.GeolocationToScreen(handle, geocoordinate.handle, out screenCoordinates.X, out screenCoordinates.Y);
+            return screenCoordinates;
+        }
+
+        public Geocoordinates ScreenToGeolocation(Point screenCoordinates)
+        {
+            IntPtr coordinateHandle;
+            Interop.View.ScreenToGeolocation(handle, screenCoordinates.X, screenCoordinates.Y, out coordinateHandle);
+            return new Geocoordinates(coordinateHandle);
+        }
+
+        public void Add(MapObject child)
+        {
+            child.handle.ReleaseOwnership();
+            _children.Add(child);
+            child.AddToMapObjectTable();
+            Interop.View.AddObject(handle, child.handle);
+        }
+
+        public void Remove(MapObject child)
+        {
+            _children.Remove(child);
+            child.RemoveFromMapObjectTable();
+            Interop.View.RemoveObject(handle, child.handle);
+        }
+
+        public void RemoveAll()
+        {
+            foreach (var child in _children)
+            {
+                child.RemoveFromMapObjectTable();
+            }
+            _children.Clear();
+            Interop.View.RemoveAllObjects(handle);
+        }
+
+        public void CaptureSnapshot(SnapshotType type, int quality, string path)
+        {
+            var err = Interop.ViewSnapshot.ViewCaptureSnapshot(handle, (Interop.ViewSnapshotFormatType)type, quality, path);
+            err.ThrowIfFailed("Failed to create snapshot for the view");
+        }
+
+        private void SetGestureEventCallback()
+        {
+            if (_gestureEventCallback == null)
+            {
+                _gestureEventCallback = (type, eventData, userData) =>
+                {
+                    if (type != Interop.ViewEventType.Gesture) return;
+                    var eventArg = MapGestureEventArgs.Create(eventData);
+                    switch (eventArg.GestureType)
+                    {
+                        case GestureType.Scroll: _scrolledEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.Zoom: _zoomedEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.Tap: _tappedEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.DoubleTap: _doubleTappedEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.TwoFingerTap: _twoFingerTappedEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.Rotate: _rotatedEventHandler?.Invoke(this, eventArg); break;
+                        case GestureType.LongPress: _longPressedEventHandler?.Invoke(this, eventArg); break;
+                    }
+                };
+                Interop.View.SetEventCb(handle, Interop.ViewEventType.Gesture, _gestureEventCallback, IntPtr.Zero);
+            }
+        }
+
+        private void UnsetGestureEventCallback()
+        {
+            if (_scrolledEventHandler != null || _zoomedEventHandler != null
+                || _tappedEventHandler != null || _doubleTappedEventHandler != null
+                || _twoFingerTappedEventHandler != null || _rotatedEventHandler != null
+                || _longPressedEventHandler != null)
+            {
+                return;
+            }
+
+            Interop.View.UnsetEventCb(handle, Interop.ViewEventType.Gesture);
+            _gestureEventCallback = null;
+        }
+
+        private void SetObjectEventCallback()
+        {
+            if (_objectEventCallback == null)
+            {
+                _objectEventCallback = (type, eventData, userData) =>
+                {
+                    if (type != Interop.ViewEventType.Object) return;
+                    var eventArg = MapObjectEventArgs.Create(eventData);
+                    switch (eventArg.GestureType)
+                    {
+                        case GestureType.Tap: eventArg.ViewObject.HandleClickedEvent(); break;
+                    }
+                };
+                Interop.View.SetEventCb(handle, Interop.ViewEventType.Object, _objectEventCallback, IntPtr.Zero);
+            }
+        }
+
+        private void SetViewReadyEventCallback()
+        {
+            if (_viewReadyEventCallback == null)
+            {
+                _viewReadyEventCallback = (type, eventData, userData) =>
+                {
+                    _viewReadyEventHandler?.Invoke(this, EventArgs.Empty);
+                };
+                Interop.View.SetEventCb(handle, Interop.ViewEventType.Ready, _viewReadyEventCallback, IntPtr.Zero);
+            }
+        }
+
+        private void UnsetViewReadyEventCallback()
+        {
+            if (_viewReadyEventHandler == null)
+            {
+                Interop.View.UnsetEventCb(handle, Interop.ViewEventType.Ready);
+                _viewReadyEventCallback = null;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/Marker.cs b/src/Tizen.Maps/Tizen.Maps/Marker.cs
new file mode 100755 (executable)
index 0000000..27090e5
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using ElmSharp;
+
+namespace Tizen.Maps
+{
+    public class Marker : MapObject
+    {
+        internal Marker(Interop.ViewObjectHandle nativeHandle) : base(nativeHandle)
+        {
+        }
+
+        internal Marker(Geocoordinates coordinates, string imagePath, Interop.ViewMarkerType type) : this(CreateNativeHandle(coordinates, imagePath, type))
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (coordinates == null || imagePath == null)
+            {
+                err.ThrowIfFailed("given coordinates or imagePath is null");
+            }
+        }
+
+        public Geocoordinates Position
+        {
+            get
+            {
+                IntPtr nativeHandle;
+                Interop.ViewObject.MarkerGetCoordinates(handle, out nativeHandle);
+                return new Geocoordinates(nativeHandle);
+            }
+            set
+            {
+                // Marker takes ownership of the native handle.
+                IntPtr nativeHandle;
+                var err = Interop.Coordinates.Clone(value.handle, out nativeHandle);
+                err.WarnIfFailed("Failed to clone native handle for coordinates");
+
+                Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
+                err = Interop.ViewObject.MarkerSetCoordinates(handle, clonedHandle);
+                if (err.WarnIfFailed("Failed to set coordinates to marker"))
+                {
+                    clonedHandle.ReleaseOwnership();
+                }
+            }
+        }
+
+        public string ImagePath
+        {
+            get
+            {
+                string value;
+                Interop.ViewObject.MarkerGetImageFile(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.MarkerSetImageFile(handle, value);
+            }
+        }
+
+        public Size MarkerSize
+        {
+            get
+            {
+                int w, h;
+                Interop.ViewObject.MarkerGetSize(handle, out w, out h);
+                return new Size(w, h);
+            }
+            set
+            {
+                Interop.ViewObject.MarkerResize(handle, value.Width, value.Height);
+            }
+        }
+
+        public int ZOrder
+        {
+            get
+            {
+                int value;
+                Interop.ViewObject.MarkerGetZOrder(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.MarkerSetZOrder(handle, value);
+            }
+        }
+
+        public void Resize(Size newSize)
+        {
+            MarkerSize = newSize;
+        }
+
+        public void Move(Geocoordinates newPosition)
+        {
+            Position = newPosition;
+        }
+
+        private static Interop.ViewObjectHandle CreateNativeHandle(Geocoordinates coordinates, string imagePath, Interop.ViewMarkerType type)
+        {
+            if (coordinates == null || imagePath == null) return new Interop.ViewObjectHandle(IntPtr.Zero);
+
+            IntPtr nativeHandle;
+            var err = Interop.Coordinates.Clone(coordinates.handle, out nativeHandle);
+            err.WarnIfFailed("Failed to clone native handle for coordinates");
+
+            Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
+            err = Interop.ViewObject.CreateMarker(clonedHandle, imagePath, type, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for marker");
+
+            clonedHandle.ReleaseOwnership();
+            return new Interop.ViewObjectHandle(nativeHandle);
+        }
+    }
+
+    public class Pin : Marker
+    {
+        public Pin(Geocoordinates coordinates, string imagePath) : base(coordinates, imagePath, Interop.ViewMarkerType.Pin)
+        {
+        }
+    }
+
+    public class Sticker : Marker
+    {
+        public Sticker(Geocoordinates coordinates, string imagePath) : base(coordinates, imagePath, Interop.ViewMarkerType.Sticker)
+        {
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/MultiReverseGeocodeRequest.cs b/src/Tizen.Maps/Tizen.Maps/MultiReverseGeocodeRequest.cs
new file mode 100755 (executable)
index 0000000..c6b9f5e
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Multiple Reverse geocode Request for Tizen map service
+    /// </summary>
+    public class MultiReverseGeocodeRequest : MapServiceRequest<PlaceAddress>
+    {
+        private Interop.Service.MultiReverseGeocodeCallback _responseCallback;
+        private List<PlaceAddress> _addressesList = new List<PlaceAddress>();
+        private GeocodePreference _preferences;
+
+        internal MultiReverseGeocodeRequest(MapService service, IEnumerable<Geocoordinates> coordinates) : base(service, ServiceRequestType.ReverseGeocode)
+        {
+            var coordinateList = new GeocoordinatesList(coordinates, true);
+            _preferences = service.GeocodePreferences;
+            _responseCallback = (result, id, total, addressListHandle, userData) =>
+            {
+                errorCode = result;
+                if (result.IsSuccess())
+                {
+                    var addressList = new PlaceAddressList(addressListHandle);
+                    addressList.handle.ReleaseOwnership();
+                    _addressesList = addressList.Addresses as List<PlaceAddress>;
+                    _requestTask?.TrySetResult(_addressesList);
+                    return true;
+                }
+                else
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    return false;
+                }
+            };
+
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = "Failed to get address list for given co-ordinate list";
+                errorCode = Interop.Service.MultiReverseGeocode(_service, coordinateList.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Overlay.cs b/src/Tizen.Maps/Tizen.Maps/Overlay.cs
new file mode 100755 (executable)
index 0000000..1540e0c
--- /dev/null
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using EvasObject = ElmSharp.EvasObject;
+
+namespace Tizen.Maps
+{
+    public class Overlay : MapObject
+    {
+        private EvasObject _containedObject;
+
+        public Overlay(Geocoordinates coordinates, EvasObject objectToContain) : this(coordinates, objectToContain, Interop.ViewOverlayType.Normal)
+        {
+        }
+
+        internal Overlay(Interop.ViewObjectHandle nativeHandle) : base(nativeHandle)
+        {
+        }
+
+        internal Overlay(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type) : base(CreateNativeHandle(coordinates, objectToContain, type))
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (coordinates == null || objectToContain == null)
+            {
+                err.ThrowIfFailed("given coordinates or parent evas object is null");
+            }
+
+            _containedObject = objectToContain;
+        }
+
+        public Geocoordinates Coordinates
+        {
+            get
+            {
+                IntPtr nativeHandle;
+                Interop.ViewObject.OverlayGetCoordinates(handle, out nativeHandle);
+                return new Geocoordinates(nativeHandle);
+            }
+            set
+            {
+                // Overlay takes ownership of the native handle.
+                IntPtr nativeHandle;
+                var err = Interop.Coordinates.Clone(value.handle, out nativeHandle);
+                err.WarnIfFailed("Failed to clone native handle for coordinates");
+
+                Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
+                err = Interop.ViewObject.OverlaySetCoordinates(handle, clonedHandle);
+                if (err.WarnIfFailed("Failed to set coordinates to overlay"))
+                {
+                    clonedHandle.ReleaseOwnership();
+                }
+            }
+        }
+
+        public int MinimumZoomLevel
+        {
+            get
+            {
+                int value;
+                Interop.ViewObject.OverlayGetMinZoomLevel(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.OverlaySetMinZoomLevel(handle, value);
+            }
+        }
+
+        public int MaximumZoomLevel
+        {
+            get
+            {
+                int value;
+                Interop.ViewObject.OverlayGetMaxZoomLevel(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.OverlaySetMaxZoomLevel(handle, value);
+            }
+        }
+
+        private static Interop.ViewObjectHandle CreateNativeHandle(Geocoordinates coordinates, EvasObject objectToContain, Interop.ViewOverlayType type)
+        {
+            if (coordinates == null || objectToContain == null) return new Interop.ViewObjectHandle(IntPtr.Zero);
+
+            IntPtr nativeHandle;
+            var err = Interop.Coordinates.Clone(coordinates.handle, out nativeHandle);
+            err.ThrowIfFailed("Failed to clone native handle for coordinates");
+
+            Interop.CoordinatesHandle clonedHandle = new Interop.CoordinatesHandle(nativeHandle);
+            err = Interop.ViewObject.CreateOverlay(clonedHandle, objectToContain, type, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for Overlay");
+
+            clonedHandle.ReleaseOwnership();
+            return new Interop.ViewObjectHandle(nativeHandle);
+        }
+    }
+
+    public class BubbleOverlay : Overlay
+    {
+        public BubbleOverlay(Geocoordinates coordinates, EvasObject objectToContain) : base(coordinates, objectToContain, Interop.ViewOverlayType.Bubble)
+        {
+        }
+    }
+
+    public class BoxOverlay : Overlay
+    {
+        public BoxOverlay(Geocoordinates coordinates, EvasObject objectToContain) : base(coordinates, objectToContain, Interop.ViewOverlayType.Box)
+        {
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Place.cs b/src/Tizen.Maps/Tizen.Maps/Place.cs
new file mode 100755 (executable)
index 0000000..ded800b
--- /dev/null
@@ -0,0 +1,344 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place information, used in Place Discovery and Search
+    /// </summary>
+    public class Place
+    {
+        internal Interop.PlaceHandle handle;
+
+        private string _id;
+        private string _name;
+        private string _uri;
+        private Geocoordinates _location;
+        private int _distance;
+        private PlaceAddress _address;
+        private PlaceRating _rating;
+
+        private Dictionary<string, string> _properties;
+        private List<PlaceCategory> _categories = new List<PlaceCategory>();
+        private List<PlaceAttribute> _attributes = new List<PlaceAttribute>();
+        private List<PlaceContact> _contacts = new List<PlaceContact>();
+        private List<PlaceEditorial> _editorials = new List<PlaceEditorial>();
+        private List<PlaceImage> _images = new List<PlaceImage>();
+        private List<PlaceReview> _reviews = new List<PlaceReview>();
+
+        private PlaceLink _supplier;
+        private PlaceLink _related;
+
+        internal Place(IntPtr nativeHandle)
+        {
+            handle = new Interop.PlaceHandle(nativeHandle);
+
+            var err = Interop.Place.GetDistance(handle, out _distance);
+            err.WarnIfFailed("Failed to get distance for this place");
+
+            IntPtr supplierHandle;
+            err = Interop.Place.GetSupplierLink(handle, out supplierHandle);
+            if (err.WarnIfFailed("Failed to get supplier link for this image"))
+            {
+                _supplier = new PlaceLink(supplierHandle);
+            }
+
+            IntPtr relatedHandle;
+            err = Interop.Place.GetRelatedLink(handle, out relatedHandle);
+            if (err.WarnIfFailed("Failed to get related link for this image"))
+            {
+                _related = new PlaceLink(relatedHandle);
+            }
+        }
+
+        /// <summary>
+        /// Place ID
+        /// </summary>
+        public string Id
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_id))
+                {
+                    var err = Interop.Place.GetId(handle, out _id);
+                    err.WarnIfFailed("Failed to get id for this place");
+                }
+                return _id;
+            }
+        }
+
+        /// <summary>
+        /// Place Name
+        /// </summary>
+        public string Name
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_name))
+                {
+                    var err = Interop.Place.GetName(handle, out _name);
+                    err.WarnIfFailed("Failed to get name for this place");
+                }
+                return _name;
+            }
+        }
+
+        /// <summary>
+        /// Place URI
+        /// </summary>
+        public string Uri
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_uri))
+                {
+                    var err = Interop.Place.GetUri(handle, out _uri);
+                    err.WarnIfFailed("Failed to get URI for this place");
+                }
+                return _uri;
+            }
+        }
+
+        /// <summary>
+        /// Place location
+        /// </summary>
+        public Geocoordinates Location
+        {
+            get
+            {
+                if (_location == null)
+                {
+                    IntPtr locationHandle;
+                    var err = Interop.Place.GetLocation(handle, out locationHandle);
+                    if (err.WarnIfFailed("Failed to get coordinates for this place"))
+                    {
+                        _location = new Geocoordinates(locationHandle);
+                    }
+                }
+                return _location;
+            }
+        }
+
+        public int Distance { get { return _distance; } }
+
+        /// <summary>
+        /// Place address
+        /// </summary>
+        public PlaceAddress Address
+        {
+            get
+            {
+                if (_address == null)
+                {
+                    IntPtr addressHandle;
+                    var err = Interop.Place.GetAddress(handle, out addressHandle);
+                    if (err.WarnIfFailed("Failed to get address for this place"))
+                    {
+                        _address = new PlaceAddress(addressHandle);
+                    }
+                }
+                return _address;
+            }
+        }
+
+        /// <summary>
+        /// Rating for the place
+        /// </summary>
+        public PlaceRating Rating
+        {
+            get
+            {
+                if (_rating == null)
+                {
+                    IntPtr ratingHandle;
+                    var err = Interop.Place.GetRating(handle, out ratingHandle);
+                    if (err.WarnIfFailed("Failed to get rating for this place"))
+                    {
+                        _rating = new PlaceRating(ratingHandle);
+                    }
+                }
+                return _rating;
+            }
+        }
+
+        /// <summary>
+        /// All properties attached with this place
+        /// </summary>
+        public IDictionary<string, string> Properties
+        {
+            get
+            {
+                if (_properties != null) return _properties;
+                _properties = new Dictionary<string, string>();
+                Interop.Place.PropertiesCallback callback = (index, total, key, value, userData) =>
+                {
+                    _properties[key] = value;
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachProperty(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all properties for this place");
+
+                return _properties;
+            }
+        }
+
+        /// <summary>
+        /// All categories attached with this place
+        /// </summary>
+        public IEnumerable<PlaceCategory> Categories
+        {
+            get
+            {
+                if (_categories != null) return _categories;
+                _categories = new List<PlaceCategory>();
+                Interop.Place.CategoriesCallback callback = (index, total, categoryHandle, userData) =>
+                {
+                    _categories.Add(new PlaceCategory(categoryHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachCategory(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all categories for this place");
+
+                return _categories;
+            }
+        }
+
+        /// <summary>
+        /// All attributes attached with this place
+        /// </summary>
+        public IEnumerable<PlaceAttribute> Attributes
+        {
+            get
+            {
+                if (_attributes != null) return _attributes;
+                _attributes = new List<PlaceAttribute>();
+                Interop.Place.AttributesCallback callback = (index, total, attributeHandle, userData) =>
+                {
+                    _attributes.Add(new PlaceAttribute(attributeHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachAttribute(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all attributes for this place");
+
+                return _attributes;
+            }
+        }
+
+        /// <summary>
+        /// All contacts attached with this place
+        /// </summary>
+        public IEnumerable<PlaceContact> Contacts
+        {
+            get
+            {
+                if (_contacts != null) return _contacts;
+                _contacts = new List<PlaceContact>();
+                Interop.Place.ContactsCallback callback = (index, total, contactHandle, userData) =>
+                {
+                    _contacts.Add(new PlaceContact(contactHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachContact(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all contacts for this place");
+
+                return _contacts;
+            }
+        }
+
+        /// <summary>
+        /// All editorials attached with this place
+        /// </summary>
+        public IEnumerable<PlaceEditorial> Editorials
+        {
+            get
+            {
+                if (_editorials != null) return _editorials;
+                _editorials = new List<PlaceEditorial>();
+                Interop.Place.EditorialsCallback callback = (index, total, editorialHandle, userData) =>
+                {
+                    _editorials.Add(new PlaceEditorial(editorialHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachEditorial(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all editorials for this place");
+
+                return _editorials;
+            }
+        }
+
+        /// <summary>
+        /// All images attached with this place
+        /// </summary>
+        public IEnumerable<PlaceImage> Images
+        {
+            get
+            {
+                if (_images != null) return _images;
+                _images = new List<PlaceImage>();
+                Interop.Place.ImagesCallback callback = (index, total, imageHandle, userData) =>
+                {
+                    _images.Add(new PlaceImage(imageHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachImage(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all images for this place");
+
+                return _images;
+            }
+        }
+
+        /// <summary>
+        /// All reviews attached with this place
+        /// </summary>
+        public IEnumerable<PlaceReview> Reviews
+        {
+            get
+            {
+                if (_reviews != null) return _reviews;
+                _reviews = new List<PlaceReview>();
+                Interop.Place.ReviewsCallback callback = (index, total, reviewHandle, userData) =>
+                {
+                    _reviews.Add(new PlaceReview(reviewHandle));
+                    return true;
+                };
+
+                var err = Interop.Place.ForeachReview(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all reviews for this place");
+
+                return _reviews;
+            }
+        }
+
+        /// <summary>
+        /// Place image supplier link
+        /// </summary>
+        public PlaceLink Supplier { get { return _supplier; } }
+
+        /// <summary>
+        /// Place image related link
+        /// </summary>
+        public PlaceLink Related { get { return _related; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceAddress.cs b/src/Tizen.Maps/Tizen.Maps/PlaceAddress.cs
new file mode 100755 (executable)
index 0000000..0422785
--- /dev/null
@@ -0,0 +1,296 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Address information for the map point used in Geocode and Reverse Geocode requests.
+    /// </summary>
+    public class PlaceAddress
+    {
+        internal Interop.AddressHandle handle;
+        private string _building;
+        private string _city;
+        private string _country;
+        private string _countryCode;
+        private string _county;
+        private string _district;
+        private string _freetext;
+        private string _postalCode;
+        private string _state;
+        private string _street;
+
+        /// <summary>
+        /// Construct map address object
+        /// </summary>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public PlaceAddress()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Address.Create(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native address handle");
+
+            handle = new Interop.AddressHandle(nativeHandle);
+        }
+
+        internal PlaceAddress(IntPtr nativeHandle)
+        {
+            handle = new Interop.AddressHandle(nativeHandle);
+        }
+
+        /// <summary>
+        /// Building number for this address
+        /// </summary>
+        public string Building
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_building))
+                {
+                    var err = Interop.Address.GetBuildingNumber(handle, out _building);
+                    err.WarnIfFailed("Failed to get building number");
+                }
+                return _building == null ? string.Empty : _building;
+            }
+            set
+            {
+                var err = Interop.Address.SetBuildingNumber(handle, value);
+                if (err.WarnIfFailed("Failed to set building number"))
+                {
+                    _building = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// City name for this address
+        /// </summary>
+        public string City
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_city))
+                {
+                    var err = Interop.Address.GetCity(handle, out _city);
+                    err.WarnIfFailed("Failed to get city");
+                }
+                return _city == null ? string.Empty : _city;
+            }
+            set
+            {
+                var err = Interop.Address.SetCity(handle, value);
+                if (err.WarnIfFailed("Failed to set city"))
+                {
+                    _city = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Country name for this address
+        /// </summary>
+        public string Country
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_country))
+                {
+                    var err = Interop.Address.GetCountry(handle, out _country);
+                    err.WarnIfFailed("Failed to get country");
+                }
+                return _country == null ? string.Empty : _country;
+            }
+            set
+            {
+                var err = Interop.Address.SetCountry(handle, value);
+                if (err.WarnIfFailed("Failed to set country"))
+                {
+                    _country = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Country code for this address
+        /// </summary>
+        public string CountryCode
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_countryCode))
+                {
+                    var err = Interop.Address.GetCountryCode(handle, out _countryCode);
+                    err.WarnIfFailed("Failed to get country code");
+                }
+                return _countryCode == null ? string.Empty : _countryCode;
+            }
+            set
+            {
+                var err = Interop.Address.SetCountryCode(handle, value);
+                if (err.WarnIfFailed("Failed to set country code"))
+                {
+                    _countryCode = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// County for this address
+        /// </summary>
+        public string County
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_county))
+                {
+                    var err = Interop.Address.GetCounty(handle, out _county);
+                    err.WarnIfFailed("Failed to get county");
+                }
+                return _county == null ? string.Empty : _county;
+            }
+            set
+            {
+                var err = Interop.Address.SetCounty(handle, value);
+                if (err.WarnIfFailed("Failed to set county"))
+                {
+                    _county = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// District name for this address
+        /// </summary>
+        public string District
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_district))
+                {
+                    var err = Interop.Address.GetDistrict(handle, out _district);
+                    err.WarnIfFailed("Failed to get district");
+                }
+                return _district == null ? string.Empty : _district;
+            }
+            set
+            {
+                var err = Interop.Address.SetDistrict(handle, value);
+                if (err.WarnIfFailed("Failed to set district"))
+                {
+                    _district = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Free text associated with this address
+        /// </summary>
+        public string Freetext
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_freetext))
+                {
+                    var err = Interop.Address.GetFreetext(handle, out _freetext);
+                    err.WarnIfFailed("Failed to get free-text");
+                }
+                return _freetext == null ? string.Empty : _freetext;
+            }
+            set
+            {
+                var err = Interop.Address.SetFreetext(handle, value);
+                if (err.WarnIfFailed("Failed to set free-text"))
+                {
+                    _freetext = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Postal code for this address
+        /// </summary>
+        public string PostalCode
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_postalCode))
+                {
+                    var err = Interop.Address.GetPostalCode(handle, out _postalCode);
+                    err.WarnIfFailed("Failed to get postal code");
+                }
+                return _postalCode == null ? string.Empty : _postalCode;
+            }
+            set
+            {
+                var err = Interop.Address.SetPostalCode(handle, value);
+                if (err.WarnIfFailed("Failed to set postal code"))
+                {
+                    _postalCode = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// State name for this address
+        /// </summary>
+        public string State
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_state))
+                {
+                    var err = Interop.Address.GetState(handle, out _state);
+                    err.WarnIfFailed("Failed to get state");
+                }
+                return _state == null ? string.Empty : _state;
+            }
+            set
+            {
+                var err = Interop.Address.SetState(handle, value);
+                if (err.WarnIfFailed("Failed to set state"))
+                {
+                    _state = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Street name for this address
+        /// </summary>
+        public string Street
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_street))
+                {
+                    var err = Interop.Address.GetStreet(handle, out _street);
+                    err.WarnIfFailed("Failed to get street");
+                }
+                return _street == null ? string.Empty : _street;
+            }
+            set
+            {
+                var err = Interop.Address.SetStreet(handle, value);
+                if (err.WarnIfFailed("Failed to set street"))
+                {
+                    _street = value;
+                }
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceAddressList.cs b/src/Tizen.Maps/Tizen.Maps/PlaceAddressList.cs
new file mode 100755 (executable)
index 0000000..7b757cd
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// List of <see cref="PlaceAddress"/> objects to be used in <see cref="ServiceData.MapService"/> APIs
+    /// </summary>
+    internal class PlaceAddressList
+    {
+        internal Interop.AddressListHandle handle;
+        private List<PlaceAddress> _list;
+
+        /// <summary>
+        /// Construct map address list object
+        /// </summary>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public PlaceAddressList()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Address.ListCreate(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for address list");
+
+            handle = new Interop.AddressListHandle(nativeHandle);
+        }
+
+        internal PlaceAddressList(IntPtr nativeHandle)
+        {
+            handle = new Interop.AddressListHandle(nativeHandle);
+        }
+
+        /// <summary>
+        /// Iterator for addresses in this list
+        /// </summary>
+        public IEnumerable<PlaceAddress> Addresses
+        {
+            get
+            {
+                if (_list == null)
+                {
+                    _list = new List<PlaceAddress>();
+                    Interop.Address.AddressCallback callback = (index, handle, userData) =>
+                    {
+                        IntPtr cloned;
+                        // we need to clone handle as it will not be there once this callback returns
+                        if (Interop.Address.Clone(handle, out cloned).IsSuccess())
+                        {
+                            _list.Add(new PlaceAddress(cloned));
+                        }
+                        return true;
+                    };
+
+                    var err = Interop.Address.ListForeach(handle, callback, IntPtr.Zero);
+                    err.WarnIfFailed("Failed to get address list from native handle");
+                }
+                return _list;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceAttribute.cs b/src/Tizen.Maps/Tizen.Maps/PlaceAttribute.cs
new file mode 100755 (executable)
index 0000000..451f2a2
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Attributes information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceAttribute
+    {
+        private string _id;
+        private string _label;
+        private string _text;
+
+        internal PlaceAttribute(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceAttributeHandle(nativeHandle);
+            var err = Interop.PlaceAttribute.GetId(handle, out _id);
+            err.WarnIfFailed("Failed to get id for this attribute");
+
+            err = Interop.PlaceAttribute.GetLabel(handle, out _label);
+            err.WarnIfFailed("Failed to get label for this attribute");
+
+            err = Interop.PlaceAttribute.GetText(handle, out _text);
+            err.WarnIfFailed("Failed to get text for this attribute");
+        }
+
+        /// <summary>
+        /// Place Attribute ID
+        /// </summary>
+        public string Id { get { return _id; } }
+
+        /// <summary>
+        /// Place attribute label
+        /// </summary>
+        public string Label { get { return _label; } }
+
+        /// <summary>
+        /// Place attribute text
+        /// </summary>
+        public string Text { get { return _text; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceCategory.cs b/src/Tizen.Maps/Tizen.Maps/PlaceCategory.cs
new file mode 100755 (executable)
index 0000000..4659c18
--- /dev/null
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Category information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceCategory
+    {
+        internal Interop.PlaceCategoryHandle handle;
+        protected string _id;
+        protected string _name;
+        protected string _url;
+
+        /// <summary>
+        /// Constructs search category object
+        /// </summary>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public PlaceCategory()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.PlaceCategory.Create(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for Place Category");
+
+            handle = new Interop.PlaceCategoryHandle(nativeHandle);
+        }
+
+        internal PlaceCategory(IntPtr nativeHandle)
+        {
+            handle = new Interop.PlaceCategoryHandle(nativeHandle);
+            Initialize();
+        }
+
+        /// <summary>
+        /// ID for this category
+        /// </summary>
+        public string Id
+        {
+            get
+            {
+                return _id;
+            }
+            set
+            {
+                var err = Interop.PlaceCategory.SetId(handle, value);
+                if (err.WarnIfFailed("Failed to set id for place category"))
+                {
+                    _id = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Name for this category
+        /// </summary>
+        public string Name
+        {
+            get
+            {
+                return _name;
+            }
+            set
+            {
+                var err = Interop.PlaceCategory.SetName(handle, value);
+                if (err.WarnIfFailed("Failed to set name for place category"))
+                {
+                    _name = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// URL for this category
+        /// </summary>
+        public string Url
+        {
+            get
+            {
+                return _url;
+            }
+            set
+            {
+                var err = Interop.PlaceCategory.SetUrl(handle, value);
+                if (err.WarnIfFailed("Failed to set URL for place category"))
+                {
+                    _url = value;
+                }
+            }
+        }
+
+        internal void Initialize()
+        {
+            var err = Interop.PlaceCategory.GetId(handle, out _id);
+            err.WarnIfFailed("Failed to get id for place category");
+
+            err = Interop.PlaceCategory.GetName(handle, out _name);
+            err.WarnIfFailed("Failed to get name for place category");
+
+            err = Interop.PlaceCategory.GetUrl(handle, out _url);
+            err.WarnIfFailed("Failed to get URL for place category");
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceContact.cs b/src/Tizen.Maps/Tizen.Maps/PlaceContact.cs
new file mode 100755 (executable)
index 0000000..b3cf10f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Contact information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceContact
+    {
+        private string _label;
+        private string _type;
+        private string _value;
+
+        internal PlaceContact(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceContactHandle(nativeHandle);
+            var err = Interop.PlaceContact.GetLabel(handle, out _label);
+            err.WarnIfFailed("Failed to get label for this contact");
+
+            err = Interop.PlaceContact.GetType(handle, out _type);
+            err.WarnIfFailed("Failed to get type for this contact");
+
+            err = Interop.PlaceContact.GetValue(handle, out _value);
+            err.WarnIfFailed("Failed to get value for this contact");
+        }
+
+        /// <summary>
+        /// Place contact label
+        /// </summary>
+        public string Id { get { return _label; } }
+
+        /// <summary>
+        /// Place contact type
+        /// </summary>
+        public string Label { get { return _type; } }
+
+        /// <summary>
+        /// Place contact value
+        /// </summary>
+        public string Value { get { return _value; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceEditorial.cs b/src/Tizen.Maps/Tizen.Maps/PlaceEditorial.cs
new file mode 100755 (executable)
index 0000000..b77515e
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Editorial information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceEditorial
+    {
+        private string _description;
+        private string _language;
+        private PlaceMedia _media;
+
+        internal PlaceEditorial(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceEditorialHandle(nativeHandle);
+            var err = Interop.PlaceEditorial.GetDescription(handle, out _description);
+            err.WarnIfFailed("Failed to get description for this editorial");
+
+            err = Interop.PlaceEditorial.GetLanguage(handle, out _language);
+            err.WarnIfFailed("Failed to get language for this editorial");
+
+            IntPtr mediaHandle;
+            err = Interop.PlaceEditorial.GetMedia(handle, out mediaHandle);
+            if (err.WarnIfFailed("Failed to get media for this editorial"))
+            {
+                _media = new PlaceMedia(mediaHandle);
+            }
+        }
+
+        /// <summary>
+        /// Place editorial description
+        /// </summary>
+        public string Description { get { return _description; } }
+
+        /// <summary>
+        /// Place editorial language
+        /// </summary>
+        public string Language { get { return _language; } }
+
+        /// <summary>
+        /// Place editorial value
+        /// </summary>
+        public PlaceMedia Media { get { return _media; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceFilter.cs b/src/Tizen.Maps/Tizen.Maps/PlaceFilter.cs
new file mode 100755 (executable)
index 0000000..b649d66
--- /dev/null
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Filter information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceFilter
+    {
+        internal Interop.PlaceFilterHandle handle;
+        private string _address;
+        private PlaceCategory _category;
+        private string _keyword;
+        private string _name;
+
+        /// <summary>
+        /// Constructs new place filter
+        /// </summary>
+        /// <exception cref="System.InvalidOperationException">Throws if native operation failed to allocate memory</exception>
+        public PlaceFilter()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.PlaceFilter.Create(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native place filter handle");
+
+            handle = new Interop.PlaceFilterHandle(nativeHandle);
+        }
+
+        /// <summary>
+        /// Filter string for place addresses
+        /// </summary>
+        public string Address
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_address))
+                {
+                    var err = Interop.PlaceFilter.GetPlaceAddress(handle, out _address);
+                    err.WarnIfFailed("Failed to get filter string for place addresses");
+                }
+                return _address;
+            }
+            set
+            {
+                var err = Interop.PlaceFilter.SetPlaceAddress(handle, value);
+                if (err.WarnIfFailed("Failed to set filter string for place addresses"))
+                {
+                    _address = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Category filter for places
+        /// </summary>
+        public PlaceCategory Category
+        {
+            get
+            {
+                if (_category == null)
+                {
+                    IntPtr nativeHandle;
+                    var err = Interop.PlaceFilter.GetCategory(handle, out nativeHandle);
+                    if (err.WarnIfFailed("Failed to get category filter for places"))
+                    {
+                        _category = new PlaceCategory(nativeHandle);
+                    }
+                }
+                return _category;
+            }
+            set
+            {
+                var err = Interop.PlaceFilter.SetCategory(handle, value.handle);
+                if (err.WarnIfFailed("Failed to set category filter for places"))
+                {
+                    _category = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Filter keyword for place
+        /// </summary>
+        public string Keyword
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_keyword))
+                {
+                    var err = Interop.PlaceFilter.GetKeyword(handle, out _keyword);
+                    err.WarnIfFailed("Failed to get filter keywords for places");
+                }
+                return _keyword;
+            }
+            set
+            {
+                var err = Interop.PlaceFilter.SetKeyword(handle, value);
+                if (err.WarnIfFailed("Failed to set filter keywords for places"))
+                {
+                    _keyword = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Filter string for place names
+        /// </summary>
+        public string Name
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_name))
+                {
+                    var err = Interop.PlaceFilter.GetPlaceName(handle, out _name);
+                    err.WarnIfFailed("Failed to get filter string for place names");
+                }
+                return _name;
+            }
+            set
+            {
+                var err = Interop.PlaceFilter.SetPlaceName(handle, value);
+                if (err.WarnIfFailed("Failed to set filter string for place names"))
+                {
+                    _name = value;
+                }
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceImage.cs b/src/Tizen.Maps/Tizen.Maps/PlaceImage.cs
new file mode 100755 (executable)
index 0000000..272bbdb
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Image information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceImage
+    {
+        private string _id;
+        private string _url;
+        private int _width;
+        private int _height;
+        private PlaceLink _userLink;
+        private PlaceMedia _media;
+
+        internal PlaceImage(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceImageHandle(nativeHandle);
+            var err = Interop.PlaceImage.GetId(handle, out _id);
+            err.WarnIfFailed("Failed to get id for this image");
+
+            err = Interop.PlaceImage.GetUrl(handle, out _url);
+            err.WarnIfFailed("Failed to get URL for this image");
+
+            err = Interop.PlaceImage.GetWidth(handle, out _width);
+            err.WarnIfFailed("Failed to get width for this image");
+
+            err = Interop.PlaceImage.GetHeight(handle, out _height);
+            err.WarnIfFailed("Failed to get height for this image");
+
+            IntPtr userHandle;
+            err = Interop.PlaceImage.GetUserLink(handle, out userHandle);
+            if (err.WarnIfFailed("Failed to get user link for this image"))
+            {
+                _userLink = new PlaceLink(userHandle);
+            }
+
+            IntPtr mediaHandle;
+            err = Interop.PlaceImage.GetMedia(handle, out mediaHandle);
+            if (err.WarnIfFailed("Failed to get media for this image"))
+            {
+                _media = new PlaceMedia(mediaHandle);
+            }
+        }
+
+        /// <summary>
+        /// Place image Id
+        /// </summary>
+        public string Id { get { return _id; } }
+
+        /// <summary>
+        /// Place image URL
+        /// </summary>
+        public string Url { get { return _url; } }
+
+        /// <summary>
+        /// Place image width
+        /// </summary>
+        public int Width { get { return _width; } }
+
+        /// <summary>
+        /// Place image height
+        /// </summary>
+        public int Height { get { return _height; } }
+
+        /// <summary>
+        /// Place image user link
+        /// </summary>
+        public PlaceLink UserLink { get { return _userLink; } }
+
+        /// <summary>
+        /// Place image media
+        /// </summary>
+        public PlaceMedia ImageMedia { get { return _media; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceLink.cs b/src/Tizen.Maps/Tizen.Maps/PlaceLink.cs
new file mode 100755 (executable)
index 0000000..dade418
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Link Object information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceLink
+    {
+        private string _id;
+        private string _name;
+        private string _string;
+        private string _type;
+
+        internal PlaceLink(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceLinkObjectHandle(nativeHandle);
+
+            var err = Interop.PlaceLinkObject.GetId(handle, out _id);
+            err.WarnIfFailed("Failed to get id for this link");
+
+            err = Interop.PlaceLinkObject.GetName(handle, out _name);
+            err.WarnIfFailed("Failed to get name for this link");
+
+            err = Interop.PlaceLinkObject.GetString(handle, out _string);
+            err.WarnIfFailed("Failed to get string for this link");
+
+            err = Interop.PlaceLinkObject.GetType(handle, out _type);
+            err.WarnIfFailed("Failed to get type for this link");
+        }
+
+        /// <summary>
+        /// Place link ID
+        /// </summary>
+        public string Id { get { return _id; } }
+
+        /// <summary>
+        /// Place link name
+        /// </summary>
+        public string Name { get { return _name; } }
+
+        /// <summary>
+        /// Place link string
+        /// </summary>
+        public string LinkString { get { return _string; } }
+
+        /// <summary>
+        /// Place link type
+        /// </summary>
+        public string Type { get { return _type; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceList.cs b/src/Tizen.Maps/Tizen.Maps/PlaceList.cs
new file mode 100755 (executable)
index 0000000..e92bd5d
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// List of <see cref="Place"/> objects to be used in <see cref="ServiceData.MapService"/> APIs
+    /// </summary>
+    internal class PlaceList
+    {
+        internal Interop.PlaceListHandle handle;
+        private List<Place> _list;
+
+        internal PlaceList(IntPtr nativeHandle)
+        {
+            handle = new Interop.PlaceListHandle(nativeHandle);
+            Interop.Place.PlaceCallback callback = (index, placeHandle, userData) =>
+            {
+                _list.Add(new Place(placeHandle));
+                return true;
+            };
+
+            var err = Interop.Place.ListForeach(handle, callback, IntPtr.Zero);
+            err.WarnIfFailed("Failed to create address to the list from native handle");
+        }
+
+        /// <summary>
+        /// Iterator for addresses in this list
+        /// </summary>
+        public IEnumerable<Place> Places
+        {
+            get
+            {
+                if (_list == null)
+                {
+                    _list = new List<Place>();
+                    Interop.Place.PlaceCallback callback = (index, handle, userData) =>
+                    {
+                        _list.Add(new Place(handle));
+                        return true;
+                    };
+
+                    var err = Interop.Place.ListForeach(handle, callback, IntPtr.Zero);
+                    err.WarnIfFailed("Failed to get place list from native handle");
+                }
+                return _list;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceMedia.cs b/src/Tizen.Maps/Tizen.Maps/PlaceMedia.cs
new file mode 100755 (executable)
index 0000000..22a19ec
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Media information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceMedia
+    {
+        private string _attribution;
+        private PlaceLink _supplier;
+        private PlaceLink _via;
+
+        internal PlaceMedia(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceMediaHandle(nativeHandle);
+
+            var err = Interop.PlaceMedia.GetAttribution(handle, out _attribution);
+            err.WarnIfFailed("Failed to get attribution for this media");
+
+            IntPtr supplierHandle;
+            err = Interop.PlaceMedia.GetSupplier(handle, out supplierHandle);
+            if (err.WarnIfFailed("Failed to get supplier object for this media"))
+            {
+                _supplier = new PlaceLink(supplierHandle);
+            }
+
+            IntPtr viaHandle;
+            err = Interop.PlaceMedia.GetVia(handle, out viaHandle);
+            if (err.WarnIfFailed("Failed to get via object for this media"))
+            {
+                _via = new PlaceLink(viaHandle);
+            }
+        }
+
+        /// <summary>
+        /// Place media attribution
+        /// </summary>
+        public string Attribution { get { return _attribution; } }
+
+        /// <summary>
+        /// Place media supplier value
+        /// </summary>
+        public PlaceLink Supplier { get { return _supplier; } }
+
+        /// <summary>
+        /// Place media via value
+        /// </summary>
+        public PlaceLink Via { get { return _via; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceRating.cs b/src/Tizen.Maps/Tizen.Maps/PlaceRating.cs
new file mode 100755 (executable)
index 0000000..2d31e41
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Rating information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceRating
+    {
+        private int _count;
+        private double _average;
+
+        internal PlaceRating(IntPtr nativeHandle)
+        {
+            var handle = new Interop.PlaceRatingHandle(nativeHandle);
+
+            var err = Interop.PlaceRating.GetCount(handle, out _count);
+            err.WarnIfFailed("Failed to get count value for this rating");
+
+            err = Interop.PlaceRating.GetAverage(handle, out _average);
+            err.WarnIfFailed("Failed to get average value for this rating");
+        }
+
+        /// <summary>
+        /// Number of users rated for this rating
+        /// </summary>
+        public int UserCount { get { return _count; } }
+
+        /// <summary>
+        /// Average value of user rating
+        /// </summary>
+        public double Average { get { return _average; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceReview.cs b/src/Tizen.Maps/Tizen.Maps/PlaceReview.cs
new file mode 100755 (executable)
index 0000000..6c1f163
--- /dev/null
@@ -0,0 +1,109 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Review information, used in Place Discovery and Search requests
+    /// </summary>
+    public class PlaceReview
+    {
+        private DateTime _date;
+        private string _title;
+        private double _rating;
+        private string _description;
+        private string _language;
+        private PlaceMedia _media;
+        private PlaceLink _userLink;
+
+        internal PlaceReview(IntPtr nativeHandle)
+        {
+            string date;
+            var handle = new Interop.PlaceReviewHandle(nativeHandle);
+            var err = Interop.PlaceReview.GetDate(handle, out date);
+            if (err.WarnIfFailed("Failed to get date for this review"))
+            {
+                if (DateTime.TryParse(date, out _date) == false)
+                {
+                    Interop.ErrorCode.InvalidParameter.WarnIfFailed(string.Format("Wrong date format: {0}", date));
+                }
+            }
+
+            err = Interop.PlaceReview.GetTitle(handle, out _title);
+            err.WarnIfFailed("Failed to get title for this review");
+
+            err = Interop.PlaceReview.GetRating(handle, out _rating);
+            err.WarnIfFailed("Failed to get rating for this review");
+
+            err = Interop.PlaceReview.GetDescription(handle, out _description);
+            err.WarnIfFailed("Failed to get description for this review");
+
+            err = Interop.PlaceReview.GetLanguage(handle, out _language);
+            err.WarnIfFailed("Failed to get language for this review");
+
+            IntPtr mediaHandle;
+            err = Interop.PlaceReview.GetMedia(handle, out mediaHandle);
+            if (err.WarnIfFailed("Failed to get media for this review"))
+            {
+                _media = new PlaceMedia(mediaHandle);
+            }
+
+            IntPtr userHandle;
+            err = Interop.PlaceReview.GetUserLink(handle, out userHandle);
+            if (err.WarnIfFailed("Failed to get user link for this review"))
+            {
+                _userLink = new PlaceLink(userHandle);
+            }
+        }
+
+        /// <summary>
+        /// Time of this review
+        /// </summary>
+        public DateTime Date { get { return _date; } }
+
+        /// <summary>
+        /// Title of this review
+        /// </summary>
+        public string Title { get { return _title; } }
+
+        /// <summary>
+        /// Rating of this review
+        /// </summary>
+        public double Rating { get { return _rating; } }
+
+        /// <summary>
+        /// Description of this review
+        /// </summary>
+        public string Description { get { return _description; } }
+
+        /// <summary>
+        /// Language of this review
+        /// </summary>
+        public string Language { get { return _language; } }
+
+        /// <summary>
+        /// Media attached with this review
+        /// </summary>
+        public PlaceMedia ReviewMedia { get { return _media; } }
+
+        /// <summary>
+        /// User link of this review
+        /// </summary>
+        public PlaceLink UserLink { get { return _userLink; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceSearchPreference.cs b/src/Tizen.Maps/Tizen.Maps/PlaceSearchPreference.cs
new file mode 100755 (executable)
index 0000000..8e8cd66
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Preferences for place search requests
+    /// </summary>
+    public class PlaceSearchPreference
+    {
+        internal Interop.PreferenceHandle handle;
+
+        private string _language = string.Empty;
+        private string _countryCode = string.Empty;
+        private Interop.DistanceUnit? _distanceUnit;
+
+        private IDictionary<string, string> _properties = new Dictionary<string, string>();
+
+        /// <summary>
+        /// Constructor for search preference
+        /// </summary>
+        public PlaceSearchPreference()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Preference.Create(out nativeHandle);
+            err.WarnIfFailed("Failed to create native preference handle");
+
+            handle = new Interop.PreferenceHandle(nativeHandle);
+        }
+
+        /// <summary>
+        /// Constructor for search preference
+        /// </summary>
+        public PlaceSearchPreference(IDictionary<string, string> properties) : this()
+        {
+            _properties = properties;
+            foreach (var item in properties)
+            {
+                var err = Interop.Preference.SetProperty(handle, item.Key, item.Value);
+                err.WarnIfFailed(string.Format("Failed to set property: {0} = {1}", item.Key, item.Value));
+            }
+        }
+
+        /// <summary>
+        /// Distance unit
+        /// </summary>
+        public DistanceUnit Unit
+        {
+            get
+            {
+                if (_distanceUnit == null)
+                {
+                    var err = Interop.Preference.GetDistanceUnit(handle, out _distanceUnit);
+                    err.WarnIfFailed("Failed to get distance unit for this preference");
+                }
+                return (DistanceUnit)_distanceUnit;
+            }
+            set
+            {
+                var err = Interop.Preference.SetDistanceUnit(handle, (Interop.DistanceUnit)value);
+                if (err.WarnIfFailed("Failed to set distance unit for this preference"))
+                {
+                    _distanceUnit = (Interop.DistanceUnit)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Preferred language
+        /// </summary>
+        /// <remarks>
+        /// Language should be specified as an ISO 3166 alpha-2 two letter country-code followed by ISO 639-1 for the two-letter language code e.g. "ko-KR"
+        /// </remarks>
+        public string Language
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_language))
+                {
+                    var err = Interop.Preference.GetLanguage(handle, out _language);
+                    err.WarnIfFailed("Failed to get language for this preference");
+                }
+                return _language;
+            }
+            set
+            {
+                var err = Interop.Preference.SetLanguage(handle, value);
+                if (err.WarnIfFailed("Failed to set language for this preference"))
+                {
+                    _language = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Maximum result count for a service request
+        /// </summary>
+        public int MaxResults
+        {
+            get
+            {
+                int _maxResults = 0;
+                var err = Interop.Preference.GetMaxResults(handle, out _maxResults);
+                err.WarnIfFailed("Failed to get max result count for this preference");
+                return _maxResults;
+            }
+            set
+            {
+                var err = Interop.Preference.SetMaxResults(handle, value);
+                err.WarnIfFailed("Failed to set max result count for this preference");
+            }
+        }
+
+        /// <summary>
+        /// Preferred country
+        /// </summary>
+        public string CountryCode
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_countryCode))
+                {
+                    var err = Interop.Preference.GetCountryCode(handle, out _countryCode);
+                    err.WarnIfFailed("Failed to get country code for this preference");
+                }
+                return _countryCode;
+            }
+            set
+            {
+                var err = Interop.Preference.SetCountryCode(handle, value);
+                if (err.WarnIfFailed("Failed to set country code for this preference"))
+                {
+                    _countryCode = value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Search properties as key value pair
+        /// </summary>
+        public IReadOnlyDictionary<string, string> Properties
+        {
+            get
+            {
+                return _properties as IReadOnlyDictionary<string, string>;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/PlaceSearchRequest.cs b/src/Tizen.Maps/Tizen.Maps/PlaceSearchRequest.cs
new file mode 100755 (executable)
index 0000000..8cd831e
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place search request for Tizen map service
+    /// </summary>
+    public class PlaceSearchRequest : MapServiceRequest<Place>
+    {
+        private Interop.Service.SearchPlaceCallback _responseCallback;
+        private List<Place> _placeList = new List<Place>();
+        private PlaceFilter _filter;
+        private PlaceSearchPreference _preferences;
+
+        internal PlaceSearchRequest(MapService service, Geocoordinates position, int distance) : this(service, ServiceRequestType.SearchPlace)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get place list for given co-ordinate {0} and distance {1}", position, distance);
+                errorCode = Interop.Service.SearchPlace(_service, position.handle, distance, _filter.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        internal PlaceSearchRequest(MapService service, Area boundary) : this(service, ServiceRequestType.SearchPlaceByArea)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get place list for given boundary {0}", boundary);
+                errorCode = Interop.Service.SearchPlaceByArea(_service, boundary.handle, _filter.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        internal PlaceSearchRequest(MapService service, string address, Area boundary) : this(service, ServiceRequestType.SearchPlaceByAddress)
+        {
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get co-ordinates for given address {0} and boundary {1}", address, boundary);
+                errorCode = Interop.Service.SearchPlaceByAddress(_service, address, boundary.handle, _filter.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+
+        private PlaceSearchRequest(MapService service, ServiceRequestType type) : base(service, type)
+        {
+            _filter = service._filter;
+            _preferences = service.PlaceSearchPreferences;
+            _responseCallback = (result, id, index, total, placeHandle, userData) =>
+            {
+                errorCode = result;
+                if (result.IsSuccess())
+                {
+                    _placeList.Add(new Place(placeHandle));
+                    if (_placeList.Count == total)
+                    {
+                        _requestTask?.TrySetResult(_placeList);
+                    }
+                    return true;
+                }
+                else
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    return false;
+                }
+            };
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Polygon.cs b/src/Tizen.Maps/Tizen.Maps/Polygon.cs
new file mode 100755 (executable)
index 0000000..fd3dd78
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using Color = ElmSharp.Color;
+
+namespace Tizen.Maps
+{
+    public class Polygon : MapObject
+    {
+        private List<Geocoordinates> _coordinateList;
+
+        public Polygon(IEnumerable<Geocoordinates> coordinates, Color color) : base(CreateNativeHandle(coordinates, color))
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (coordinates == null || coordinates.Count() < 3)
+            {
+                err.ThrowIfFailed("given coordinates list should contain at least 3 coordinates");
+            }
+            _coordinateList = coordinates.ToList();
+        }
+
+        internal Polygon(Interop.ViewObjectHandle nativeHandle) : base(nativeHandle)
+        {
+        }
+
+        public IEnumerable<Geocoordinates> Coordinates
+        {
+            get
+            {
+                if (_coordinateList == null)
+                {
+                    _coordinateList = new List<Geocoordinates>();
+                    Interop.ViewObject.CoordinatesCallback callback = (index, nativeHandle, userData) =>
+                    {
+                        _coordinateList.Add(new Geocoordinates(nativeHandle));
+                        return true;
+                    };
+                    Interop.ViewObject.PolygonForeachPoint(handle, callback, IntPtr.Zero);
+                }
+                return _coordinateList;
+            }
+            set
+            {
+                var coordinates = value.ToList();
+
+                var err = Interop.ErrorCode.InvalidParameter;
+                if (coordinates == null || coordinates.Count() < 3)
+                {
+                    err.ThrowIfFailed("given coordinates list should contain at least 3 coordinates");
+                }
+
+                var coordinateList = new GeocoordinatesList(coordinates, false);
+                if (Interop.ViewObject.PolygonSetPolygon(handle, coordinateList.handle).IsSuccess())
+                {
+                    _coordinateList = coordinates;
+                }
+            }
+        }
+
+        public Color FillColor
+        {
+            get
+            {
+                byte r, g, b, a;
+                Interop.ViewObject.PolygonGetFillColor(handle, out r, out g, out b, out a);
+                return new Color(r, g, b, a);
+            }
+            set
+            {
+                Interop.ViewObject.PolygonSetFillColor(handle, (byte)value.R, (byte)value.G, (byte)value.B, (byte)value.A);
+            }
+        }
+
+        private static Interop.ViewObjectHandle CreateNativeHandle(IEnumerable<Geocoordinates> coordinates, Color color)
+        {
+            if (coordinates == null || coordinates.Count() < 3) return new Interop.ViewObjectHandle(IntPtr.Zero);
+
+            IntPtr nativeHandle;
+            var geocoordinateList = new GeocoordinatesList(coordinates.ToList(), false);
+            var err = Interop.ViewObject.CreatePolygon(geocoordinateList.handle, (byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for polygon");
+            return new Interop.ViewObjectHandle(nativeHandle);
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Polyline.cs b/src/Tizen.Maps/Tizen.Maps/Polyline.cs
new file mode 100755 (executable)
index 0000000..e27357f
--- /dev/null
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+using Color = ElmSharp.Color;
+
+namespace Tizen.Maps
+{
+    public class Polyline : MapObject
+    {
+        private List<Geocoordinates> _coordinateList;
+
+        public Polyline(List<Geocoordinates> coordinates, Color color, int width) : base(CreateNativeHandle(coordinates, color, width))
+        {
+            var err = Interop.ErrorCode.InvalidParameter;
+            if (coordinates == null || coordinates.Count() < 2)
+            {
+                err.ThrowIfFailed("given coordinates list should contain at least 2 coordinates");
+            }
+            _coordinateList = coordinates.ToList();
+        }
+
+        internal Polyline(Interop.ViewObjectHandle nativeHandle) : base(nativeHandle)
+        {
+        }
+
+        public IEnumerable<Geocoordinates> Coordinates
+        {
+            get
+            {
+                if (_coordinateList == null)
+                {
+                    _coordinateList = new List<Geocoordinates>();
+                    Interop.ViewObject.CoordinatesCallback callback = (index, nativeHandle, userData) =>
+                    {
+                        _coordinateList.Add(new Geocoordinates(nativeHandle));
+                        return true;
+                    };
+                    Interop.ViewObject.PolylineForeachPoint(handle, callback, IntPtr.Zero);
+                }
+                return _coordinateList;
+            }
+            set
+            {
+                var coordinates = value.ToList();
+                var err = Interop.ErrorCode.InvalidParameter;
+                if (coordinates == null || coordinates.Count() < 2)
+                {
+                    err.ThrowIfFailed("given coordinates list should contain at least 2 coordinates");
+                }
+
+                var coordinateList = new GeocoordinatesList(coordinates, false);
+                if (Interop.ViewObject.PolylineSetPolyline(handle, coordinateList.handle).IsSuccess())
+                {
+                    _coordinateList = coordinates;
+                }
+            }
+        }
+
+        public Color LineColor
+        {
+            get
+            {
+                byte r, g, b, a;
+                Interop.ViewObject.PolylineGetColor(handle, out r, out g, out b, out a);
+                return new Color(r, g, b, a);
+            }
+            set
+            {
+                Interop.ViewObject.PolylineSetColor(handle, (byte)value.R, (byte)value.G, (byte)value.B, (byte)value.A);
+            }
+        }
+
+        public int Width
+        {
+            get
+            {
+                int value;
+                Interop.ViewObject.PolylineGetWidth(handle, out value);
+                return value;
+            }
+            set
+            {
+                Interop.ViewObject.PolylineSetWidth(handle, value);
+            }
+        }
+
+        private static Interop.ViewObjectHandle CreateNativeHandle(IEnumerable<Geocoordinates> coordinates, Color color, int width)
+        {
+            if (coordinates == null || coordinates.Count() < 2) return new Interop.ViewObjectHandle(IntPtr.Zero);
+
+            IntPtr nativeHandle;
+            var coordinateList = new GeocoordinatesList(coordinates.ToList(), false);
+            var err = Interop.ViewObject.CreatePolyline(coordinateList.handle, (byte)color.R, (byte)color.G, (byte)color.B, (byte)color.A, width, out nativeHandle);
+            err.ThrowIfFailed("Failed to create native handle for polyline");
+            return new Interop.ViewObjectHandle(nativeHandle);
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/ReverseGeocodeRequest.cs b/src/Tizen.Maps/Tizen.Maps/ReverseGeocodeRequest.cs
new file mode 100755 (executable)
index 0000000..f40c358
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Reverse geocode request for Tizen map service
+    /// </summary>
+    public class ReverseGeocodeRequest : MapServiceRequest<PlaceAddress>
+    {
+        private Interop.Service.ReverseGeocodeCallback _responseCallback;
+        private List<PlaceAddress> _addressList = new List<PlaceAddress>();
+        private GeocodePreference _preferences;
+
+        internal ReverseGeocodeRequest(MapService service, double latitude, double longitute) : base(service, ServiceRequestType.ReverseGeocode)
+        {
+            _preferences = service.GeocodePreferences;
+            _responseCallback = (result, id, index, total, addressHandle, userData) =>
+            {
+                errorCode = result;
+                if (result.IsSuccess())
+                {
+                    _addressList.Add(new PlaceAddress(addressHandle));
+                    if (_addressList.Count == total)
+                    {
+                        _requestTask?.TrySetResult(_addressList);
+                    }
+                }
+                else
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+            };
+
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get co-ordinates for given Coordinate: {0}:{1}", latitude, longitute);
+                errorCode = Interop.Service.ReverseGeocode(_service, latitude, longitute, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                }
+                _requestID = requestID;
+            });
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/Route.cs b/src/Tizen.Maps/Tizen.Maps/Route.cs
new file mode 100755 (executable)
index 0000000..255929b
--- /dev/null
@@ -0,0 +1,218 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route information, used in Route Search requests
+    /// </summary>
+    public class Route
+    {
+        internal Interop.RouteHandle handle;
+        private Area _bondingBox;
+        private Geocoordinates _destination;
+        private double _distance;
+        private long _duration;
+        private string _id = string.Empty;
+        private Geocoordinates _origin;
+        private List<Geocoordinates> _path;
+
+        private Dictionary<string, string> _properties;
+        private List<RouteSegment> _segments;
+        private Interop.RouteTransportMode _transportMode;
+        private Interop.DistanceUnit _unit;
+
+        internal Route(IntPtr nativeHandle)
+        {
+            handle = new Interop.RouteHandle(nativeHandle);
+
+            var err = Interop.Route.GetTransportMode(handle, out _transportMode);
+            err.WarnIfFailed("Failed to get transport mode for the segment");
+
+            err = Interop.Route.GetTotalDistance(handle, out _distance);
+            err.WarnIfFailed("Failed to get distance for the segment");
+
+            err = Interop.Route.GetDistanceUnit(handle, out _unit);
+            err.WarnIfFailed("Failed to get distance for the segment");
+
+            err = Interop.Route.GetTotalDuration(handle, out _duration);
+            err.WarnIfFailed("Failed to get duration for the segment");
+        }
+
+        /// <summary>
+        /// Destination coordinates for this route
+        /// </summary>
+        public Geocoordinates Destination
+        {
+            get
+            {
+                if (_destination != null) return _destination;
+
+                IntPtr destinationHandle;
+                var err = Interop.Route.GetDestination(handle, out destinationHandle);
+                if (err.WarnIfFailed("Failed to get destination for the route"))
+                {
+                    _destination = new Geocoordinates(destinationHandle);
+                }
+                return _destination;
+            }
+        }
+
+        /// <summary>
+        /// Total distance for this route
+        /// </summary>
+        public double Distance { get { return _distance; } }
+
+        /// <summary>
+        /// Total duration to cover this route
+        /// </summary>
+        public double Duration { get { return _duration; } }
+
+        public string Id
+        {
+            get
+            {
+                if (string.IsNullOrEmpty(_id))
+                {
+                    string id;
+                    var err = Interop.Route.GetRouteId(handle, out id);
+                    if (err.WarnIfFailed("Failed to get route id"))
+                    {
+                        _id = id;
+                    }
+                }
+                return _id;
+            }
+        }
+
+        /// <summary>
+        /// Transport Mode for this route
+        /// </summary>
+        public TransportMode Mode { get { return (TransportMode)_transportMode; } }
+
+        /// <summary>
+        /// Origin coordinates for this route
+        /// </summary>
+        public Geocoordinates Origin
+        {
+            get
+            {
+                if (_origin != null) return _origin;
+
+                IntPtr originHandle;
+                var err = Interop.Route.GetOrigin(handle, out originHandle);
+                if (err.WarnIfFailed("Failed to get origin for the route"))
+                {
+                    _origin = new Geocoordinates(originHandle);
+                }
+                return _origin;
+            }
+        }
+
+        /// <summary>
+        /// Coordinates list for this route
+        /// </summary>
+        public IEnumerable<Geocoordinates> Path
+        {
+            get
+            {
+                if (_path != null) return _path;
+
+                _path = new List<Geocoordinates>();
+                Interop.Route.RoutePathCallback callback = (index, total, coordinateHandle, userData) =>
+                {
+                    _path.Add(new Geocoordinates(coordinateHandle));
+                    return true;
+                };
+
+                var err = Interop.Route.ForeachPath(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get path coordinates for this route");
+                return _path;
+            }
+        }
+
+        /// <summary>
+        /// All properties attached with this route
+        /// </summary>
+        public IDictionary<string, string> Properties
+        {
+            get
+            {
+                if (_properties != null) return _properties;
+                _properties = new Dictionary<string, string>();
+                Interop.Route.RoutePropertiesCallback callback = (index, total, key, value, userData) =>
+                {
+                    _properties[key] = value;
+                    return true;
+                };
+                var err = Interop.Route.ForeachProperty(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get all properties for this route");
+
+                return _properties;
+            }
+        }
+
+        /// <summary>
+        /// Segment list for this route
+        /// </summary>
+        public IEnumerable<RouteSegment> Segments
+        {
+            get
+            {
+                if (_segments != null) return _segments;
+
+                _segments = new List<RouteSegment>();
+                Interop.Route.RouteSegmentCallback callback = (index, total, segmentHandle, userData) =>
+                {
+                    _segments.Add(new RouteSegment(segmentHandle));
+                    return true;
+                };
+
+                var err = Interop.Route.ForeachSegment(handle, callback, IntPtr.Zero);
+                err.WarnIfFailed("Failed to get path segments for this route");
+                return _segments;
+            }
+        }
+
+        /// <summary>
+        /// Distance unit for this route
+        /// </summary>
+        public DistanceUnit Unit { get { return (DistanceUnit)_unit; } }
+
+        /// <summary>
+        /// Bounding area for this route
+        /// </summary>
+        private Area BoundingBox
+        {
+            get
+            {
+                if (_bondingBox != null) return _bondingBox;
+
+                IntPtr areaHandle;
+                var err = Interop.Route.GetBoundingBox(handle, out areaHandle);
+                if (err.WarnIfFailed("Failed to get bonding box for the route"))
+                {
+                    _bondingBox = new Area(areaHandle);
+                }
+                return _bondingBox;
+            }
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteFeature.cs b/src/Tizen.Maps/Tizen.Maps/RouteFeature.cs
new file mode 100755 (executable)
index 0000000..cb50d46
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route features, used for route search requests
+    /// </summary>
+    public enum RouteFeature
+    {
+        /// <summary>
+        /// Indicates no route features (are selected)
+        /// </summary>
+        None = Interop.RouteRequestFeature.None,
+        /// <summary>
+        /// Indicates toll roads (toll gates/booths)
+        /// </summary>
+        Toll = Interop.RouteRequestFeature.Toll,
+        /// <summary>
+        /// Indicates motorway
+        /// </summary>
+        Motorway = Interop.RouteRequestFeature.MotorWay,
+        /// <summary>
+        /// Indicates a boat ferry
+        /// </summary>
+        BoatFerry = Interop.RouteRequestFeature.BoatFerry,
+        /// <summary>
+        /// Indicates rail (train) ferry
+        /// </summary>
+        RailFerry = Interop.RouteRequestFeature.RailFerry,
+        /// <summary>
+        /// Indicates public transport
+        /// </summary>
+        PublicTransit = Interop.RouteRequestFeature.PublicTransit,
+        /// <summary>
+        /// Indicates tunnel
+        /// </summary>
+        Tunnel = Interop.RouteRequestFeature.Tunnel,
+        /// <summary>
+        /// Indicates dirt road
+        /// </summary>
+        DirtRoad = Interop.RouteRequestFeature.DirtRoad,
+        /// <summary>
+        /// Indicates park
+        /// </summary>
+        Parks = Interop.RouteRequestFeature.Parks,
+        /// <summary>
+        /// Indicates a high-occupancy vehicle lane
+        /// </summary>
+        Hovlane = Interop.RouteRequestFeature.Hovlane,
+        /// <summary>
+        /// Indicates stairs
+        /// </summary>
+        Stairs = Interop.RouteRequestFeature.Stairs,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteFeatureWeight.cs b/src/Tizen.Maps/Tizen.Maps/RouteFeatureWeight.cs
new file mode 100755 (executable)
index 0000000..f93faba
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route feature weights used in route search requests
+    /// </summary>
+    public enum RouteFeatureWeight
+    {
+        /// <summary>
+        /// Indicates normal weighting
+        /// </summary>
+        Normal = Interop.RouteFeatureWeight.Normal,
+        /// <summary>
+        /// Indicates that a feature is preferred
+        /// </summary>
+        Prefer = Interop.RouteFeatureWeight.Prefer,
+        /// <summary>
+        /// Indicates that a feature is to be avoided
+        /// </summary>
+        Avoid = Interop.RouteFeatureWeight.Avoid,
+        /// <summary>
+        /// Indicates that soft-exclude applies to the feature
+        /// </summary>
+        SoftExclude = Interop.RouteFeatureWeight.SoftExclude,
+        /// <summary>
+        /// Indicates that the feature is to be strictly excluded
+        /// </summary>
+        StrictExclude = Interop.RouteFeatureWeight.StrictExclude,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteManeuver.cs b/src/Tizen.Maps/Tizen.Maps/RouteManeuver.cs
new file mode 100755 (executable)
index 0000000..1b0e8fd
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route Maneuver information, used in Route Search requests
+    /// </summary>
+    public class RouteManeuver
+    {
+        private Interop.RouteDirection _direction;
+        private Interop.RouteTurnType _turntype;
+        private Geocoordinates _position;
+        private string _road = string.Empty;
+        private string _instruction = string.Empty;
+        private string _locale = string.Empty;
+        private int _timeToNextInstruction;
+        private double _distanceToNextInstruction;
+
+        internal RouteManeuver(IntPtr nativeHandle)
+        {
+            var handle = new Interop.RouteManeuverHandle(nativeHandle);
+
+            var err = Interop.RouteManeuver.GetDirectionId(handle, out _direction);
+            err.WarnIfFailed("Failed to get direction type for this maneuver");
+
+            err = Interop.RouteManeuver.GetTurnType(handle, out _turntype);
+            err.WarnIfFailed("Failed to get turn type for this maneuver");
+
+            err = Interop.RouteManeuver.GetTimeToNextInstruction(handle, out _timeToNextInstruction);
+            err.WarnIfFailed("Failed to get time to next instruction for this maneuver");
+
+            err = Interop.RouteManeuver.GetDistanceToNextInstruction(handle, out _distanceToNextInstruction);
+            err.WarnIfFailed("Failed to get distance to next instruction for this maneuver");
+
+            string instruction;
+            err = Interop.RouteManeuver.GetInstructionText(handle, out instruction);
+            if (err.WarnIfFailed("Failed to get instruction text for this maneuver"))
+            {
+                _instruction = instruction;
+            }
+
+            string locale;
+            err = Interop.RouteManeuver.GetLocale(handle, out locale);
+            if (err.WarnIfFailed("Failed to get locale for this maneuver"))
+            {
+                _locale = locale;
+            }
+
+            string road;
+            err = Interop.RouteManeuver.GetRoadName(handle, out road);
+            if (err.WarnIfFailed("Failed to get road name for this maneuver"))
+            {
+                _road = road;
+            }
+
+            IntPtr positionHandle;
+            err = Interop.RouteManeuver.GetPosition(handle, out positionHandle);
+            if (err.WarnIfFailed("Failed to get position for this maneuver"))
+            {
+                _position = new Geocoordinates(positionHandle);
+            }
+        }
+
+        /// <summary>
+        /// Direction type for this maneuver
+        /// </summary>
+        public DirectionType Direction { get { return (DirectionType)_direction; } }
+
+        /// <summary>
+        /// Turn type for this maneuver
+        /// </summary>
+        public TurnInstruction Turn { get { return (TurnInstruction)_turntype; } }
+
+        /// <summary>
+        /// Position for this maneuver
+        /// </summary>
+        public Geocoordinates Position { get { return _position; } }
+
+        /// <summary>
+        /// Name of the road for this maneuver
+        /// </summary>
+        public string Road { get { return string.IsNullOrEmpty(_road) ? "" : _road; } }
+
+        /// <summary>
+        /// Instruction text for this maneuver
+        /// </summary>
+        public string Instruction { get { return string.IsNullOrEmpty(_instruction) ? "" : _instruction; } }
+
+        /// <summary>
+        /// Locale for this maneuver
+        /// </summary>
+        public string Locale { get { return string.IsNullOrEmpty(_locale) ? "" : _locale; } }
+
+        /// <summary>
+        /// Time to next instruction for this maneuver
+        /// </summary>
+        public int TimeToNextInstruction { get { return _timeToNextInstruction; } }
+
+        /// <summary>
+        /// Distance to next instruction for this maneuver
+        /// </summary>
+        public double DistanceToNextInstruction { get { return _distanceToNextInstruction; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteOptimization.cs b/src/Tizen.Maps/Tizen.Maps/RouteOptimization.cs
new file mode 100755 (executable)
index 0000000..bde76fd
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Allowed route optimization option used in route search requests
+    /// </summary>
+    public enum RouteOptimization
+    {
+        /// <summary>
+        /// Search for fastest routes
+        /// </summary>
+        Fastest = Interop.RouteOptimization.Fastest,
+        /// <summary>
+        /// Search for shortest routes (car mode only)
+        /// </summary>
+        Shortest = Interop.RouteOptimization.Shortest,
+        /// <summary>
+        /// Search for most economic routes (car mode only)
+        /// </summary>
+        Economic = Interop.RouteOptimization.Economic,
+        /// <summary>
+        /// Search for most scenic routes
+        /// </summary>
+        Scenic = Interop.RouteOptimization.Scenic,
+        /// <summary>
+        /// Search for most fastest routes now, based on current traffic condition
+        /// </summary>
+        FastestNow = Interop.RouteOptimization.FastestNow,
+        /// <summary>
+        /// Search for direct drive routes
+        /// </summary>
+        DirectDrive = Interop.RouteOptimization.DirectDrive,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteSearchPreference.cs b/src/Tizen.Maps/Tizen.Maps/RouteSearchPreference.cs
new file mode 100755 (executable)
index 0000000..5704afc
--- /dev/null
@@ -0,0 +1,196 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Preferences for route search requests
+    /// </summary>
+    public class RouteSearchPreference
+    {
+        internal Interop.PreferenceHandle handle;
+
+        private Interop.DistanceUnit? _distanceUnit;
+        private Interop.RouteOptimization? _routeOptimization;
+        private Interop.RouteTransportMode? _transportMode;
+        private Interop.RouteFeatureWeight? _featureWeight;
+        private Interop.RouteRequestFeature? _requestFeature;
+        private bool? _searchAlternativeRoutes;
+
+        /// <summary>
+        /// Constructor for search preference
+        /// </summary>
+        public RouteSearchPreference()
+        {
+            IntPtr nativeHandle;
+            var err = Interop.Preference.Create(out nativeHandle);
+            err.ThrowIfFailed("Failed to create native preference handle");
+
+            handle = new Interop.PreferenceHandle(nativeHandle);
+        }
+
+        internal RouteSearchPreference(Interop.PreferenceHandle handle)
+        {
+            this.handle = handle;
+        }
+
+        /// <summary>
+        /// Distance unit
+        /// </summary>
+        public DistanceUnit Unit
+        {
+            get
+            {
+                if (_distanceUnit == null)
+                {
+                    var err = Interop.Preference.GetDistanceUnit(handle, out _distanceUnit);
+                    err.WarnIfFailed("Failed to get distance unit for this preference");
+                }
+                return (DistanceUnit)_distanceUnit;
+            }
+            set
+            {
+                var err = Interop.Preference.SetDistanceUnit(handle, (Interop.DistanceUnit)value);
+                if (err.WarnIfFailed("Failed to set distance unit for this preference"))
+                {
+                    _distanceUnit = (Interop.DistanceUnit)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Selected route optimization
+        /// </summary>
+        public RouteOptimization Optimization
+        {
+            get
+            {
+                if (_routeOptimization == null)
+                {
+                    var err = Interop.Preference.GetRouteOptimization(handle, out _routeOptimization);
+                    err.WarnIfFailed("Failed to get route optimization for this preference");
+                }
+                return (RouteOptimization)_routeOptimization;
+            }
+            set
+            {
+                var err = Interop.Preference.SetRouteOptimization(handle, (Interop.RouteOptimization)value);
+                if (err.WarnIfFailed("Failed to set route optimization for this preference"))
+                {
+                    _routeOptimization = (Interop.RouteOptimization)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Route transport mode
+        /// </summary>
+        public TransportMode Mode
+        {
+            get
+            {
+                if (_transportMode == null)
+                {
+                    var err = Interop.Preference.GetRouteTransportMode(handle, out _transportMode);
+                    err.WarnIfFailed("Failed to get route transport mode for this preference");
+                }
+                return (TransportMode)_transportMode;
+            }
+            set
+            {
+                var err = Interop.Preference.SetRouteTransportMode(handle, (Interop.RouteTransportMode)value);
+                if (err.WarnIfFailed("Failed to set route transport mode for this preference"))
+                {
+                    _transportMode = (Interop.RouteTransportMode)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Route feature weight
+        /// </summary>
+        public RouteFeatureWeight RouteFeatureWeight
+        {
+            get
+            {
+                if (_featureWeight == null)
+                {
+                    var err = Interop.Preference.GetRouteFeatureWeight(handle, out _featureWeight);
+                    err.WarnIfFailed("Failed to get route feature weight for this preference");
+                }
+                return (RouteFeatureWeight)_featureWeight;
+            }
+            set
+            {
+                var err = Interop.Preference.SetRouteFeatureWeight(handle, (Interop.RouteFeatureWeight)value);
+                if (err.WarnIfFailed("Failed to set route feature weight for this preference"))
+                {
+                    _featureWeight = (Interop.RouteFeatureWeight)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Route feature
+        /// </summary>
+        public RouteFeature RouteFeature
+        {
+            get
+            {
+                if (_requestFeature == null)
+                {
+                    var err = Interop.Preference.GetRouteFeature(handle, out _requestFeature);
+                    err.WarnIfFailed("Failed to get route feature for this preference");
+                }
+                return (RouteFeature)_requestFeature;
+            }
+            set
+            {
+                var err = Interop.Preference.SetRouteFeature(handle, (Interop.RouteRequestFeature)value);
+                if (err.WarnIfFailed("Failed to set route request feature for this preference"))
+                {
+                    _requestFeature = (Interop.RouteRequestFeature)value;
+                }
+            }
+        }
+
+        /// <summary>
+        /// Indicate if search for alternative routes is enabled.
+        /// </summary>
+        public bool SearchAlternativeRoutes
+        {
+            get
+            {
+                if (_searchAlternativeRoutes == null)
+                {
+                    var err = Interop.Preference.GetRouteAlternativesEnabled(handle, out _searchAlternativeRoutes);
+                    err.WarnIfFailed("Failed to get preference for alternative route search");
+                }
+                return (bool)_searchAlternativeRoutes;
+            }
+            set
+            {
+                var err = Interop.Preference.SetRouteAlternativesEnabled(handle, value);
+                if (err.WarnIfFailed("Failed to enable alternative route searches"))
+                {
+                    _searchAlternativeRoutes = value;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteSearchRequest.cs b/src/Tizen.Maps/Tizen.Maps/RouteSearchRequest.cs
new file mode 100755 (executable)
index 0000000..2e95560
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route search request for Tizen map service requests
+    /// </summary>
+    public class RouteSearchRequest : MapServiceRequest<Route>
+    {
+        private Interop.Service.SearchRouteCallback _responseCallback;
+        private List<Route> _routeList = new List<Route>();
+
+
+        private Geocoordinates _from;
+        private Geocoordinates _to;
+        private List<Geocoordinates> _waypoints = new List<Geocoordinates>();
+        private RouteSearchPreference _preferences;
+
+        internal RouteSearchRequest(MapService service, Geocoordinates from, Geocoordinates to) : this(service, ServiceRequestType.SearchByEndPoint)
+        {
+            _from = from;
+            _to = to;
+            startExecutionAction = new Action(() =>
+            {
+                int requestID;
+                errMessage = string.Format("Failed to get route list for given origin {0} and destination {1}", _from, _to);
+                if (_waypoints?.Count == 0)
+                {
+                    _type = ServiceRequestType.SearchByEndPoint;
+                    errorCode = Interop.Service.SearchRoute(_service, _from.handle, _to.handle, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                    if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                    {
+                        _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    }
+                }
+                else
+                {
+                    _type = ServiceRequestType.SearchWithWaypoints;
+
+                    var waypoints = GetCoordinateListForWaypoints();
+                    errorCode = Interop.Service.SearchRouteWaypoints(_service, waypoints, waypoints.Length, _preferences.handle, _responseCallback, IntPtr.Zero, out requestID);
+                    if (errorCode.IsFailed() && errorCode != Interop.ErrorCode.Canceled)
+                    {
+                        _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    }
+                }
+                _requestID = requestID;
+            });
+        }
+
+
+        private RouteSearchRequest(MapService service, ServiceRequestType type) : base(service, type)
+        {
+            _preferences = service.RouteSearchPreferences;
+            _responseCallback = (result, id, index, total, routeHandle, userData) =>
+            {
+                errorCode = result;
+                if (result.IsSuccess())
+                {
+                    _routeList.Add(new Route(routeHandle));
+                    if (_routeList.Count == total)
+                    {
+                        _requestTask?.TrySetResult(_routeList);
+                    }
+                    return true;
+                }
+                else
+                {
+                    _requestTask?.TrySetException(errorCode.GetException(errMessage));
+                    return false;
+                }
+            };
+        }
+
+        /// <summary>
+        /// List of way-points to cover between origin and destination
+        /// </summary>
+        public IEnumerable<Geocoordinates> Waypoints
+        {
+            get
+            {
+                return _waypoints;
+            }
+            set
+            {
+                _waypoints = value.ToList();
+            }
+        }
+
+        private IntPtr[] GetCoordinateListForWaypoints()
+        {
+            var waypoints = new IntPtr[_waypoints.Count + 2];
+            waypoints[0] = _from.handle;
+            for (int i = 0; i < _waypoints.Count; ++i)
+            {
+                waypoints[i + 1] = _waypoints[i].handle;
+            }
+            waypoints[waypoints.Length - 1] = _to.handle;
+            return waypoints;
+        }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/RouteSegment.cs b/src/Tizen.Maps/Tizen.Maps/RouteSegment.cs
new file mode 100755 (executable)
index 0000000..37b491a
--- /dev/null
@@ -0,0 +1,124 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+using System;
+using System.Collections.Generic;
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Place Segment information, used in Route Search requests
+    /// </summary>
+    public class RouteSegment
+    {
+        internal Interop.RouteSegmentHandle handle;
+        private Area _bondingBox;
+        private Geocoordinates _destination;
+        private double _distance;
+        private long _duration;
+        private List<RouteManeuver> _manuevers;
+        private Geocoordinates _origin;
+        private List<Geocoordinates> _path;
+
+        internal RouteSegment(IntPtr nativeHandle)
+        {
+            handle = new Interop.RouteSegmentHandle(nativeHandle);
+
+            var err = Interop.RouteSegment.GetDistance(handle, out _distance);
+            err.WarnIfFailed("Failed to get distance for the segment");
+
+            err = Interop.RouteSegment.GetDuration(handle, out _duration);
+            err.WarnIfFailed("Failed to get duration for the segment");
+
+            IntPtr areaHandle;
+            err = Interop.RouteSegment.GetBoundingBox(handle, out areaHandle);
+            if (err.WarnIfFailed("Failed to get bonding box for the segment"))
+            {
+                _bondingBox = new Area(areaHandle);
+            }
+
+            IntPtr originHandle;
+            err = Interop.RouteSegment.GetOrigin(handle, out originHandle);
+            if (err.WarnIfFailed("Failed to get origin for the segment"))
+            {
+                _origin = new Geocoordinates(originHandle);
+            }
+
+            IntPtr destinationHandle;
+            err = Interop.RouteSegment.GetDestination(handle, out destinationHandle);
+            if (err.WarnIfFailed("Failed to get destination for the segment"))
+            {
+                _destination = new Geocoordinates(destinationHandle);
+            }
+
+            _manuevers = new List<RouteManeuver>();
+            Interop.RouteSegment.SegmentManeuverCallback maneuvarCallback = (index, total, maneuverHandle, userData) =>
+            {
+                _manuevers.Add(new RouteManeuver(maneuverHandle));
+                return true;
+            };
+
+            err = Interop.RouteSegment.ForeachManeuver(handle, maneuvarCallback, IntPtr.Zero);
+            err.WarnIfFailed("Failed to get path maneuver for this segment");
+
+            _path = new List<Geocoordinates>();
+            Interop.RouteSegment.SegmentPathCallback pathcallback = (index, total, coordinateHandle, userData) =>
+            {
+                _path.Add(new Geocoordinates(coordinateHandle));
+                return true;
+            };
+
+            err = Interop.RouteSegment.ForeachPath(handle, pathcallback, IntPtr.Zero);
+            err.WarnIfFailed("Failed to get path coordinates for this segment");
+        }
+
+        /// <summary>
+        /// Origin coordinates for this segment
+        /// </summary>
+        public Geocoordinates Origin { get { return _origin; } }
+
+        /// <summary>
+        /// Destination coordinates for this segment
+        /// </summary>
+        public Geocoordinates Destination { get { return _destination; } }
+
+        /// <summary>
+        /// Total distance for this segment
+        /// </summary>
+        public double Distance { get { return _distance; } }
+
+        /// <summary>
+        /// Total duration to cover this segment
+        /// </summary>
+        public double Duration { get { return _duration; } }
+
+        /// <summary>
+        /// Maneuver list for this segment path
+        /// </summary>
+        public IEnumerable<RouteManeuver> Maneuvers { get { return _manuevers; } }
+
+        /// <summary>
+        /// Coordinates list for this segment path
+        /// </summary>
+        public IEnumerable<Geocoordinates> Path { get { return _path; } }
+
+        /// <summary>
+        /// Bounding area for this segment
+        /// </summary>
+        private Area BoundingBox { get { return _bondingBox; } }
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/ServiceData.cs b/src/Tizen.Maps/Tizen.Maps/ServiceData.cs
new file mode 100755 (executable)
index 0000000..151ea7f
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Features available in the Map Service
+    /// </summary>
+    public enum ServiceData
+    {
+        /// <summary>
+        /// Indicates availability of address value in the Place data
+        /// </summary>
+        PlaceAddress = Interop.ServiceData.PlaceAddress,
+        /// <summary>
+        /// Indicates availability of rating value in the Place data
+        /// </summary>
+        PlaceRating = Interop.ServiceData.PlaceRating,
+        /// <summary>
+        /// Indicates availability of place category list in the Place data
+        /// </summary>
+        PlaceCategories = Interop.ServiceData.PlaceCategories,
+        /// <summary>
+        /// Indicates availability of place attribute list in the Place data
+        /// </summary>
+        PlaceAttributes = Interop.ServiceData.PlaceAttributes,
+        /// <summary>
+        /// Indicates availability of place contact list in the Place data
+        /// </summary>
+        PlaceContacts = Interop.ServiceData.PlaceContacts,
+        /// <summary>
+        /// Indicates availability of place editorial list in the Place data
+        /// </summary>
+        PlaceEditorials = Interop.ServiceData.PlaceEditorials,
+        /// <summary>
+        /// Indicates availability of place review list in the Place data
+        /// </summary>
+        PlaceReviews = Interop.ServiceData.PlaceReviews,
+        /// <summary>
+        /// Indicates availability of place image in Place the data
+        /// </summary>
+        PlaceImage = Interop.ServiceData.PlaceImage,
+        /// <summary>
+        /// Indicates availability of place supplier link value in the Place data
+        /// </summary>
+        PlaceSupplier = Interop.ServiceData.PlaceSupplier,
+        /// <summary>
+        /// Indicates availability of related place link in the Place data
+        /// </summary>
+        PlaceRelated = Interop.ServiceData.PlaceRelated,
+
+        /// <summary>
+        /// Indicates that the Route Data Structure is defined as a Path (a list of geographical coordinates)
+        /// </summary>
+        RouteAsPath = Interop.ServiceData.RoutePath,
+        /// <summary>
+        /// Indicates that the Route Data Structure is defined as a list of Segments while each segment is defined as a Path
+        /// </summary>
+        SegmentsAsPath = Interop.ServiceData.RouteSegmentsPath,
+        /// <summary>
+        /// Indicates that the Route Data Structure is defined as a list of Segments while each segment is defined as a list of Maneuvers
+        /// </summary>
+        SegmentsAsManeuvers = Interop.ServiceData.RouteSegmentsManeuvers,
+
+        /// <summary>
+        /// Indicates availability of traffic information on the Map
+        /// </summary>
+        ViewTraffic = Interop.ServiceData.ViewTraffic,
+        /// <summary>
+        /// Indicates availability of public transit information on the Map
+        /// </summary>
+        ViewPublicTransit = Interop.ServiceData.ViewPublicTransit,
+        /// <summary>
+        /// Indicates availability of 3D building drawable on the Map
+        /// </summary>
+        ViewBuilding = Interop.ServiceData.ViewBuilding,
+        /// <summary>
+        /// Indicates availability of scale bar on the Map
+        /// </summary>
+        ViewScalebar = Interop.ServiceData.ViewScalebar,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/ServiceRequestType.cs b/src/Tizen.Maps/Tizen.Maps/ServiceRequestType.cs
new file mode 100755 (executable)
index 0000000..ea79b5e
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Service Requests available in the Maps Service
+    /// </summary>
+    public enum ServiceRequestType
+    {
+        /// <summary>
+        /// Service request to get position <see cref="Geocoordinates"/> for a given free-formed address string is allowed
+        /// </summary>
+        Geocode = Interop.ServiceType.Geocode,
+        /// <summary>
+        /// Service request to get position <see cref="Geocoordinates"/>  for a given address, within the specified bounding <see cref="Area"/>, is allowed
+        /// </summary>
+        GeocodeInsideArea = Interop.ServiceType.GeocodeInsideArea,
+        /// <summary>
+        /// Service request to get position <see cref="Geocoordinates"/> for a given <see cref="PlaceAddress"/> is allowed
+        /// </summary>
+        GeocodeByStructuredAddress = Interop.ServiceType.GeocodeByStructuredAddress,
+        /// <summary>
+        /// Service request to get <see cref="PlaceAddress"/> for a given <see cref="Geocoordinates"/> is allowed
+        /// </summary>
+        ReverseGeocode = Interop.ServiceType.ReverseGeocode,
+        /// <summary>
+        /// Service request to get <see cref="PlaceAddress"/> for a given <see cref="GeocoordinatesList"/> is allowed
+        /// </summary>
+        MultiReverseGeocode = Interop.ServiceType.MultiReverseGeocode,
+
+        /// <summary>
+        /// Service request to query <see cref="Place"/> information for a given <see cref="Geocoordinates"/> is allowed
+        /// </summary>
+        SearchPlace = Interop.ServiceType.SearchPlace,
+        /// <summary>
+        /// Service request to query <see cref="Place"/> information for a given <see cref="Area"/> is allowed
+        /// </summary>
+        SearchPlaceByArea = Interop.ServiceType.SearchPlaceByArea,
+        /// <summary>
+        /// Service request to query <see cref="Place"/> information for a given free-formed address string is allowed
+        /// </summary>
+        SearchPlaceByAddress = Interop.ServiceType.SearchPlaceByAddress,
+        /// <summary>
+        /// Service request to query <see cref="Place"/> information list for all places in a given <see cref="Area"/> is allowed
+        /// </summary>
+        SearchPlaceList = Interop.ServiceType.SearchPlaceList,
+        /// <summary>
+        /// Service request to get detailed <see cref="Place"/> information for a given <see cref="PlaceUrl"/> is allowed
+        /// </summary>
+        SearchGetPlaceDetails = Interop.ServiceType.SearchGetPlaceDetails,
+
+        /// <summary>
+        /// Service request to query <see cref="Route"/> information from a given origin <see cref="Geocoordinates"/> and destination <see cref="Geocoordinates"/> is allowed
+        /// </summary>
+        SearchByEndPoint = Interop.ServiceType.SearchRoute,
+        /// <summary>
+        /// Service request to query <see cref="Route"/> information passing through specified way-points <see cref="GeocoordinatesList"/> is allowed
+        /// </summary>
+        SearchWithWaypoints = Interop.ServiceType.SearchRouteWaypoints,
+
+        /// <summary>
+        /// Map view service is allowed
+        /// </summary>
+        View = Interop.ServiceType.View,
+        /// <summary>
+        /// Map view snapshot service is allowed
+        /// </summary>
+        ViewSnapshot = Interop.ServiceType.ViewSnapshot,
+
+        /// <summary>
+        /// Canceling a request is allowed
+        /// </summary>
+        CancelRequest = Interop.ServiceType.CancelRequest,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/SnapshotType.cs b/src/Tizen.Maps/Tizen.Maps/SnapshotType.cs
new file mode 100755 (executable)
index 0000000..88fce00
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Enumeration for snapshot file formats
+    /// </summary>
+    public enum SnapshotType
+    {
+        /// <summary>
+        /// BMP file format
+        /// </summary>
+        BMP = Interop.ViewSnapshotFormatType.ViewSnapshotBmp,
+        /// <summary>
+        /// JPEG file format
+        /// </summary>
+        JPEG = Interop.ViewSnapshotFormatType.ViewSnapshotJpeg,
+    }
+}
\ No newline at end of file
diff --git a/src/Tizen.Maps/Tizen.Maps/TransportMode.cs b/src/Tizen.Maps/Tizen.Maps/TransportMode.cs
new file mode 100755 (executable)
index 0000000..92195ea
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Route types
+    /// </summary>
+    public enum TransportMode
+    {
+        /// <summary>
+        /// Route is to be traveled by car
+        /// </summary>
+        Car = Interop.RouteTransportMode.Car,
+        /// <summary>
+        /// Route is for a pedestrian
+        /// </summary>
+        Pedestrian = Interop.RouteTransportMode.Pedestrian,
+        /// <summary>
+        /// Route is for a cyclist
+        /// </summary>
+        Bicycle = Interop.RouteTransportMode.Bicycle,
+        /// <summary>
+        /// Route is to be traveled using public transport
+        /// </summary>
+        Publictransit = Interop.RouteTransportMode.PublicTransit,
+        /// <summary>
+        /// Route is for a truck
+        /// </summary>
+        Truck = Interop.RouteTransportMode.Truck,
+    }
+}
diff --git a/src/Tizen.Maps/Tizen.Maps/TurnInstruction.cs b/src/Tizen.Maps/Tizen.Maps/TurnInstruction.cs
new file mode 100755 (executable)
index 0000000..0cb2761
--- /dev/null
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ * Licensed under the Apache License, Version 2.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+namespace Tizen.Maps
+{
+    /// <summary>
+    /// Turn Instruction type for route maneuver
+    /// </summary>
+    public enum TurnInstruction
+    {
+        /// <summary>
+        /// Unknown Instruction
+        /// </summary>
+        None = Interop.RouteTurnType.None,
+        /// <summary>
+        /// Instruction to move straight
+        /// </summary>
+        Straight = Interop.RouteTurnType.Straight,
+        /// <summary>
+        /// Instruction to bear right
+        /// </summary>
+        BearRight = Interop.RouteTurnType.BearRight,
+        /// <summary>
+        /// Instruction to turn slightly to the right
+        /// </summary>
+        LightRight = Interop.RouteTurnType.LightRight,
+        /// <summary>
+        /// Instruction to turn right
+        /// </summary>
+        Right = Interop.RouteTurnType.Right,
+        /// <summary>
+        /// Instruction to turn hard to the right
+        /// </summary>
+        HardRight = Interop.RouteTurnType.HardRight,
+        /// <summary>
+        /// Instruction to u-turn to the right
+        /// </summary>
+        UturnRight = Interop.RouteTurnType.UturnRight,
+        /// <summary>
+        /// Instruction to u-turn to the left
+        /// </summary>
+        UturnLeft = Interop.RouteTurnType.UturnLeft,
+        /// <summary>
+        /// Instruction to turn hard to the left
+        /// </summary>
+        HardLeft = Interop.RouteTurnType.HardLeft,
+        /// <summary>
+        /// Instruction to turn left
+        /// </summary>
+        Left = Interop.RouteTurnType.Left,
+        /// <summary>
+        /// Instruction to turn slightly to the left
+        /// </summary>
+        LightLeft = Interop.RouteTurnType.LightLeft,
+        /// <summary>
+        /// Instruction to bear left
+        /// </summary>
+        BearLeft = Interop.RouteTurnType.BearLeft,
+        /// <summary>
+        /// Instruction to take right fork
+        /// </summary>
+        RightFork = Interop.RouteTurnType.RightFork,
+        /// <summary>
+        /// Instruction to take left fork
+        /// </summary>
+        LeftFork = Interop.RouteTurnType.LeftFork,
+        /// <summary>
+        /// Instruction to take straight fork
+        /// </summary>
+        StraightFork = Interop.RouteTurnType.StraightFork,
+    }
+}