summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore10
-rw-r--r--api/.gitignore11
-rw-r--r--api/franca/CommonTypes.fidl34
-rw-r--r--api/franca/POIService/POIServiceContentAccess.fidl87
-rw-r--r--api/franca/POIService/POIServiceContentAccessModule.fidl95
-rw-r--r--api/franca/POIService/POIServiceSearch.fidl283
-rw-r--r--api/franca/POIService/POIServiceTypes.fidl259
-rw-r--r--api/map-viewer/constants.xsl65
-rw-r--r--api/map-viewer/enum.xsl32
-rwxr-xr-xapi/map-viewer/genivi-mapviewer-configuration.xml194
-rw-r--r--api/map-viewer/genivi-mapviewer-constants.xml87
-rwxr-xr-xapi/map-viewer/genivi-mapviewer-mapviewercontrol.xml1507
-rwxr-xr-xapi/map-viewer/genivi-mapviewer-session.xml104
-rwxr-xr-xapi/map-viewer/introspect.xsd147
-rw-r--r--api/map-viewer/introspect.xsl183
-rw-r--r--api/navigation-core/constants.xsl65
-rw-r--r--api/navigation-core/enum.xsl32
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-configuration.xml194
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-constants.xml212
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-guidance.xml373
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-locationinput.xml531
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-mapmatchedposition.xml379
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-routing.xml830
-rwxr-xr-xapi/navigation-core/genivi-navigationcore-session.xml104
-rwxr-xr-xapi/navigation-core/introspect.xsd147
-rw-r--r--api/navigation-core/introspect.xsl183
-rw-r--r--api/poi-service/constants.xsl65
-rw-r--r--api/poi-service/enum.xsl32
-rw-r--r--api/poi-service/genivi-poiservice-constants.xml70
-rw-r--r--api/poi-service/genivi-poiservice-contentaccessmodule.xml215
-rw-r--r--api/poi-service/genivi-poiservice-poicontentaccess.xml206
-rw-r--r--api/poi-service/genivi-poiservice-poisearch.xml609
-rwxr-xr-xapi/poi-service/introspect.xsd147
-rw-r--r--api/poi-service/introspect.xsl183
-rw-r--r--src/navigation/LICENSE15
-rw-r--r--src/navigation/README40
-rw-r--r--src/navigation/map-viewer/configuration-plugin/.gitignore9
-rw-r--r--src/navigation/map-viewer/configuration-plugin/CMakeLists.txt45
-rw-r--r--src/navigation/map-viewer/configuration-plugin/genivi_mapviewer_configuration.cxx269
-rw-r--r--src/navigation/map-viewer/mapviewercontrol-plugin/.gitignore10
-rw-r--r--src/navigation/map-viewer/mapviewercontrol-plugin/CMakeLists.txt72
-rw-r--r--src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx1670
-rw-r--r--src/navigation/map-viewer/navit_genivi_mapviewer.xsl48
-rw-r--r--src/navigation/map-viewer/session-plugin/.gitignore9
-rw-r--r--src/navigation/map-viewer/session-plugin/CMakeLists.txt44
-rw-r--r--src/navigation/map-viewer/session-plugin/genivi_mapviewer_session.cxx125
-rw-r--r--src/navigation/navigation-core/configuration-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/configuration-plugin/CMakeLists.txt44
-rw-r--r--src/navigation/navigation-core/configuration-plugin/genivi_navigationcore_configuration.cxx282
-rw-r--r--src/navigation/navigation-core/enhancedposition-plugin/.gitignore10
-rw-r--r--src/navigation/navigation-core/enhancedposition-plugin/CMakeLists.txt45
-rw-r--r--src/navigation/navigation-core/enhancedposition-plugin/genivi_positioning_enhancedposition.cxx328
-rw-r--r--src/navigation/navigation-core/guidance-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/guidance-plugin/CMakeLists.txt45
-rw-r--r--src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx719
-rw-r--r--src/navigation/navigation-core/locationinput-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/locationinput-plugin/CMakeLists.txt45
-rw-r--r--src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx507
-rw-r--r--src/navigation/navigation-core/mapmatchedposition-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/mapmatchedposition-plugin/CMakeLists.txt44
-rw-r--r--src/navigation/navigation-core/mapmatchedposition-plugin/genivi_navigationcore_mapmatchedposition.cxx375
-rw-r--r--src/navigation/navigation-core/navit_genivi_navigationcore.xsl63
-rw-r--r--src/navigation/navigation-core/routing-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/routing-plugin/CMakeLists.txt46
-rw-r--r--src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx924
-rw-r--r--src/navigation/navigation-core/session-plugin/.gitignore9
-rw-r--r--src/navigation/navigation-core/session-plugin/CMakeLists.txt44
-rw-r--r--src/navigation/navigation-core/session-plugin/genivi_navigationcore_session.cxx127
-rw-r--r--src/navigation/poi-cam/CMakeLists.txt49
-rw-r--r--src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx322
-rw-r--r--src/navigation/script/0positioning.mk49
-rw-r--r--src/navigation/script/1navit.mk61
-rw-r--r--src/navigation/script/Makefile51
-rw-r--r--src/navigation/script/map-viewer.mk74
-rw-r--r--src/navigation/script/navigation-core.mk120
-rw-r--r--src/navigation/script/poi-cam.mk47
-rwxr-xr-xsrc/navigation/script/run108
-rw-r--r--src/poi-service/.gitignore13
-rw-r--r--src/poi-service/LICENSE26
-rw-r--r--src/poi-service/README46
-rw-r--r--src/poi-service/poi-common/common-data-model.h1494
-rw-r--r--src/poi-service/poi-server/database.cpp259
-rw-r--r--src/poi-service/poi-server/database.h58
-rw-r--r--src/poi-service/poi-server/main.cpp2136
-rw-r--r--src/poi-service/poi-server/poi-datamodel.h147
-rw-r--r--src/poi-service/poi-server/poi-server-class.h377
-rw-r--r--src/poi-service/poi-server/poi-server.pro31
-rw-r--r--src/poi-service/resource/LICENSE2
-rw-r--r--src/poi-service/resource/airport.pngbin0 -> 1571 bytes
-rw-r--r--src/poi-service/resource/bicycle_shop.pngbin0 -> 1265 bytes
-rw-r--r--src/poi-service/resource/car.pngbin0 -> 1117 bytes
-rw-r--r--src/poi-service/resource/fillingstation.pngbin0 -> 1166 bytes
-rw-r--r--src/poi-service/resource/hotel_0star.pngbin0 -> 897 bytes
-rw-r--r--src/poi-service/resource/museum_art.pngbin0 -> 1073 bytes
-rw-r--r--src/poi-service/resource/restaurant.pngbin0 -> 1854 bytes
-rw-r--r--src/poi-service/resource/train.pngbin0 -> 1426 bytes
-rw-r--r--src/poi-service/resource/world.pngbin0 -> 2141 bytes
-rw-r--r--src/poi-service/script/Makefile59
-rwxr-xr-xsrc/poi-service/script/generate-api-for-navigation.sh30
-rw-r--r--src/poi-service/script/generate-api.mk93
-rwxr-xr-xsrc/poi-service/script/kill-all4
-rw-r--r--src/poi-service/script/poi-database-sample.dbbin0 -> 257024 bytes
-rw-r--r--src/poi-service/script/poi-server.mk68
-rwxr-xr-xsrc/poi-service/script/run41
-rw-r--r--test/poi-service/.gitignore13
-rw-r--r--test/poi-service/LICENSE26
-rw-r--r--test/poi-service/README58
-rw-r--r--test/poi-service/poi-client/about-dialog.cpp41
-rw-r--r--test/poi-service/poi-client/about-dialog.h49
-rw-r--r--test/poi-service/poi-client/about-dialog.ui89
-rw-r--r--test/poi-service/poi-client/deployment.pri126
-rw-r--r--test/poi-service/poi-client/main.cpp91
-rw-r--r--test/poi-service/poi-client/mainwindow.cpp1907
-rw-r--r--test/poi-service/poi-client/mainwindow.h257
-rw-r--r--test/poi-service/poi-client/mainwindow.ui1509
-rw-r--r--test/poi-service/poi-client/poi-client-DBusContentAccessInterface.cpp50
-rw-r--r--test/poi-service/poi-client/poi-client-DBusContentAccessInterface.h196
-rw-r--r--test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.cpp50
-rw-r--r--test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.h116
-rw-r--r--test/poi-service/poi-client/poi-client-DBusGuidanceInterface.cpp41
-rw-r--r--test/poi-service/poi-client/poi-client-DBusGuidanceInterface.h84
-rw-r--r--test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.cpp41
-rw-r--r--test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.h87
-rw-r--r--test/poi-service/poi-client/poi-client-DBusRoutingInterface.cpp40
-rw-r--r--test/poi-service/poi-client/poi-client-DBusRoutingInterface.h96
-rw-r--r--test/poi-service/poi-client/poi-client-DBusSearchInterface.cpp46
-rw-r--r--test/poi-service/poi-client/poi-client-DBusSearchInterface.h224
-rw-r--r--test/poi-service/poi-client/poi-client-config.h50
-rw-r--r--test/poi-service/poi-client/poi-client.conf32
-rw-r--r--test/poi-service/poi-client/poi-client.desktop.desktop12
-rw-r--r--test/poi-service/poi-client/poi-client.pro34
-rw-r--r--test/poi-service/poi-client/poi-client.svg93
-rw-r--r--test/poi-service/poi-client/poi-client64.pngbin0 -> 2843 bytes
-rw-r--r--test/poi-service/poi-client/poi-client80.pngbin0 -> 4177 bytes
-rw-r--r--test/poi-service/poi-client/ui_about-dialog.h73
-rw-r--r--test/poi-service/poi-client/ui_mainwindow.h1188
-rw-r--r--test/poi-service/poi-common/GENIVI_Black_Logo-no_background.pngbin0 -> 43869 bytes
-rw-r--r--test/poi-service/poi-common/about.txt11
-rw-r--r--test/poi-service/poi-common/magasin.jpgbin0 -> 34667 bytes
-rw-r--r--test/poi-service/poi-common/poi-client.pngbin0 -> 3823 bytes
-rw-r--r--test/poi-service/poi-common/poi-client_en.ts411
-rw-r--r--test/poi-service/poi-common/poi-client_jp.ts445
-rw-r--r--test/poi-service/poi-common/poi-common-data-model.h1501
-rw-r--r--test/poi-service/poi-common/poi-common-types.h228
-rw-r--r--test/poi-service/poi-common/poi-content-access-module.pngbin0 -> 3808 bytes
-rw-r--r--test/poi-service/poi-common/poi-content-access-module_en.ts70
-rw-r--r--test/poi-service/poi-common/poi-content-access-module_jp.ts77
-rw-r--r--test/poi-service/poi-common/poi-marshal-handler.cpp571
-rw-r--r--test/poi-service/poi-common/poi-marshal-handler.h158
-rw-r--r--test/poi-service/poi-common/poi-resource.qrc12
-rw-r--r--test/poi-service/poi-common/psa.jpgbin0 -> 143419 bytes
-rw-r--r--test/poi-service/poi-contentaccess-module/database.cpp259
-rw-r--r--test/poi-service/poi-contentaccess-module/database.h58
-rw-r--r--test/poi-service/poi-contentaccess-module/main.cpp947
-rw-r--r--test/poi-service/poi-contentaccess-module/mainwindow.cpp168
-rw-r--r--test/poi-service/poi-contentaccess-module/mainwindow.h78
-rw-r--r--test/poi-service/poi-contentaccess-module/mainwindow.ui347
-rw-r--r--test/poi-service/poi-contentaccess-module/poi-contentaccess-module-class.h186
-rw-r--r--test/poi-service/poi-contentaccess-module/poi-contentaccess-module.pro43
-rw-r--r--test/poi-service/poi-contentaccess-module/poi-datamodel.h136
-rw-r--r--test/poi-service/poi-contentaccess-module/ui_mainwindow.h196
-rw-r--r--test/poi-service/poi-supplier/database.cpp261
-rw-r--r--test/poi-service/poi-supplier/database.h61
-rw-r--r--test/poi-service/poi-supplier/main.cpp339
-rw-r--r--test/poi-service/poi-supplier/poi-datamodel.h103
-rw-r--r--test/poi-service/poi-supplier/poi-supplier.pro27
-rw-r--r--test/poi-service/poi-supplier/raw-file-sort.cpp532
-rw-r--r--test/poi-service/poi-supplier/raw-file-sort.h67
-rw-r--r--test/poi-service/resource/LICENSE2
-rw-r--r--test/poi-service/resource/airport.pngbin0 -> 1571 bytes
-rw-r--r--test/poi-service/resource/bicycle_shop.pngbin0 -> 1265 bytes
-rw-r--r--test/poi-service/resource/car.pngbin0 -> 1117 bytes
-rw-r--r--test/poi-service/resource/fillingstation.pngbin0 -> 1166 bytes
-rw-r--r--test/poi-service/resource/hotel_0star.pngbin0 -> 897 bytes
-rw-r--r--test/poi-service/resource/museum_art.pngbin0 -> 1073 bytes
-rw-r--r--test/poi-service/resource/restaurant.pngbin0 -> 1854 bytes
-rw-r--r--test/poi-service/resource/train.pngbin0 -> 1426 bytes
-rw-r--r--test/poi-service/resource/world.pngbin0 -> 2141 bytes
-rw-r--r--test/poi-service/script/Makefile61
-rw-r--r--test/poi-service/script/create-scheme.sql262
-rw-r--r--test/poi-service/script/generate-api.mk93
-rwxr-xr-xtest/poi-service/script/kill-all4
-rwxr-xr-xtest/poi-service/script/make-database88
-rw-r--r--test/poi-service/script/paris/bicycle.xml475
-rw-r--r--test/poi-service/script/paris/fuel-station.xml815
-rw-r--r--test/poi-service/script/paris/museum-and-hotel.xml13058
-rw-r--r--test/poi-service/script/paris/poi-client.conf34
-rw-r--r--test/poi-service/script/paris/station.xml2740
-rw-r--r--test/poi-service/script/poi-client.mk48
-rw-r--r--test/poi-service/script/poi-contentaccess-module.mk48
-rw-r--r--test/poi-service/script/poi-database-empty0
-rw-r--r--test/poi-service/script/poi-supplier.mk62
-rw-r--r--test/poi-service/script/populate-database-additional.sql80
-rw-r--r--test/poi-service/script/populate-database.sql137
-rwxr-xr-xtest/poi-service/script/prepare94
-rwxr-xr-xtest/poi-service/script/run59
-rw-r--r--test/poi-service/script/san-diego/bicycle.xml94
-rw-r--r--test/poi-service/script/san-diego/museum-and-hotel.xml1453
-rw-r--r--test/poi-service/script/san-diego/poi-client.conf48
-rw-r--r--test/poi-service/script/san-diego/station.xml169
-rw-r--r--test/poi-service/script/tokyo/bicycle.xml124
-rw-r--r--test/poi-service/script/tokyo/museum-and-hotel.xml3284
-rw-r--r--test/poi-service/script/tokyo/poi-client.conf32
-rw-r--r--test/poi-service/script/tokyo/station.xml3204
204 files changed, 60077 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0730a5b
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+#folders used for building the code
+*-debug/
+*-release/
+bin/
+
+#files
+*~
+*.pro.user
+
+/.project
diff --git a/api/.gitignore b/api/.gitignore
new file mode 100644
index 0000000..5b5f285
--- /dev/null
+++ b/api/.gitignore
@@ -0,0 +1,11 @@
+#folder used for downloading external APIs
+# enhanced-position-service/
+.project
+
+
+
+
+
+
+
+
diff --git a/api/franca/CommonTypes.fidl b/api/franca/CommonTypes.fidl
new file mode 100644
index 0000000..de36738
--- /dev/null
+++ b/api/franca/CommonTypes.fidl
@@ -0,0 +1,34 @@
+package org.genivi.lbs.CommonTypes
+
+typeCollection CommonTypes {
+ version {
+ major 0
+ minor 1
+ }
+ <** @description : A template to generate a dbus 'v'.**>
+ union variant_t {
+ UInt32 element1
+ Float element2
+ }
+ <** @description: version.**>
+ struct version_t {
+ <** @description : when the major changes, then backward compatibility with previous releases is not granted.**>
+ UInt16 ^major
+ <** @description : when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added).**>
+ UInt16 ^minor
+ <** @description : when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications).**>
+ UInt16 ^micro
+ <** @description : release date (e.g. 21-06-2011).**>
+ String date
+ }
+ <** @description: 3D geocoordinate.**>
+ struct geoCoordinate3D_t
+ {
+ <** @description : latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250.**>
+ Double latitude
+ <** @description : longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250.**>
+ Double longitude
+ <** @description : altitude above the sea level of the current position in meters.**>
+ Int32 altitude
+ }
+ } \ No newline at end of file
diff --git a/api/franca/POIService/POIServiceContentAccess.fidl b/api/franca/POIService/POIServiceContentAccess.fidl
new file mode 100644
index 0000000..6e5275f
--- /dev/null
+++ b/api/franca/POIService/POIServiceContentAccess.fidl
@@ -0,0 +1,87 @@
+package org.genivi.lbs.POIService
+
+import org.genivi.lbs.LBScommonTypes.* from "../CommonTypes.fidl"
+import org.genivi.lbs.POIServiceTypes.* from "POIServiceTypes.fidl"
+
+
+<** @description : This interface offers a set of common methods for Content Access Modules (CAM). The CAM provide and update POI and categories information from remote sources to the POIService modules.**>
+interface POIContentAccess {
+ version {
+ major 1
+ minor 0
+ }
+ <** @description : Register to the POI provider module
+ When the CAM registers, it provides a name and then get a unique id. This id must be used everytime the CAM communicates with the POI service component.
+ After the registration is done, the CAM can start to update POI categories and POI attributes as well as registers POI categories to search for.**>
+ method RegisterContentAccessModule {
+ in {
+ <** @description : The name of the CAM.**>
+ String moduleName
+ }
+
+ out {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ }
+
+ }
+ <** @description : Remove CAM from POI provider module.**>
+ method UnRegisterContentAccessModule {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ }
+ }
+ <** @description : Register to the POI provider module the categories you can search for POI.
+ The categories could be predifined one or customized ones. In order to register a customized category, you might need to create it before and add it to the POI service component.**>
+ method RegisterPoiCategories {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ <** @description : array[unique_id].
+ List of POI categories to register.
+ unique_id = Unique category id.
+ **>
+ UInt16[] poiCategories
+ }
+ }
+ <** @description : Update categories in the POI service component. It could be a predifined or a customed one.
+ The CAM provides for each categories the list of attributes (mandatories like name or optional) it wants to update.
+ Depending on the local database write policy, the CAM might only be able to update customized attributes for a category and not the predefined ones so some update could be rejected.**>
+ method UpdateCategories {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ <** @description : array[unique_id, attributes, sortOptions].**>
+ POIServiceTypes.CAMCategoryUpdate_t[] poiCategories
+ }
+ }
+ <** @description : Add new categories to the POI service component.
+ The CAM provides for each categories the name, the parent categories, the top level attribute, the list of attributes, the icons, ... .**>
+ method AddCategories {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ <** @description : List of details for all the POI categories.**>
+ POIServiceTypes.CAMCategory_t[] poiCategories
+ }
+ out {
+ <**
+ @description : array of unique POI categories as registered by the POI service component.
+ Note: A POI category is a unique ID
+ **>
+ UInt16[] poiCategoriesId
+ }
+ }
+ <** @description : Remove categories from the POI service component. It could be a predifined or a customed one.
+ Depending on the local database write policy, the CAM might only not be able to remove some categories.**>
+ method RemoveCategories {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ <** @description : array[unique_id].
+ List of POI categories to remove.**>
+ UInt16[] poiCategories
+ }
+ }
+} \ No newline at end of file
diff --git a/api/franca/POIService/POIServiceContentAccessModule.fidl b/api/franca/POIService/POIServiceContentAccessModule.fidl
new file mode 100644
index 0000000..dd6da9d
--- /dev/null
+++ b/api/franca/POIService/POIServiceContentAccessModule.fidl
@@ -0,0 +1,95 @@
+package org.genivi.lbs.POIService
+
+import org.genivi.lbs.CommonTypes.* from "../CommonTypes.fidl"
+import org.genivi.lbs.POIServiceTypes.* from "POIServiceTypes.fidl"
+
+
+<** @description : This interface offers methods that implement the POI search functionality of a navigation system.**>
+interface POIContentAccessModule {
+ version {
+ major 1
+ minor 0
+ }
+ <** @description : This method returns the API version implemented by the content access module.**>
+ method GetVersion {
+ out {
+ <** @description: .**>
+ CommonTypes.version_t ^version
+ }
+ }
+ <** @description : Set the current language set for the search by poi provider module.
+ The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language.**>
+ method SetLanguage {
+ in {
+ <** @description : The language to be used.**>
+ String languageCode
+ <** @description : The country specific variant for the language to be used.**>
+ String countryCode
+ }
+ }
+
+ <** @description : This method is sent by the POI service component to inform all the CAM that a new POI search was started.
+ It provides all the relevant search parameters. Of course the CAM will only be aware of the search if it registers one of the search categories.**>
+ method PoiSearchStarted {
+ in {
+ <** @description : poi search unique handle. It must be used by the CAM to send the list of results to the component.**>
+ UInt8 poiSearchHandle
+ <** @description : max size of the results list.**>
+ UInt16 maxSize
+ <** @description: struct(lat,lon,alt).**>
+ CommonTypes.geoCoordinate3D_t location
+ <** @description: array[struct(id,radius)].**>
+ POIServiceTypes.categoryRadius_t[] poiCategories
+ <** @description : array[struct(name, poiCategory, type, value, operator, mandatory)].**>
+ POIServiceTypes.attributeDetails_t[] poiAttributes
+ <** @description : contains the name of the poi that is searched. It could be a partial name or an empty string.**>
+ String inputString
+ <** @description : enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )
+ If more than one category was defined for this search, the sort criteria should be compliant with all categories.**>
+ UInt16 sortOption
+ }
+ }
+
+ <** @description : This method cancels the search for the current id.**>
+ method PoiSearchCanceled {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ }
+ }
+
+ <** @description : This method provides the poi results list found by the CAM.
+ As the POI unique id is managed by the POI component, the CAM only provides the POI name, the category and coordinates as well as all the relevant detailed information.**>
+ method ResultListRequested {
+ in {
+ <** @description : Content access module unique id as known by the POI service component.**>
+ UInt8 camId
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : List of attributes name to retrieve. This is optional and the list could be empty.**>
+ String[] attributes
+ }
+ out {
+ <** @description : enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... ).**>
+ UInt16 statusValue
+ <** @description : Number of items of the results list.**>
+ UInt16 resultListSize
+ <** @description : array[struct(source_id, name, category, location, distance, attributes)].**>
+ POIServiceTypes.poiCAMDetails_t[] resultList
+ }
+ }
+
+ <** @description : This method retrieves the details associated to one or more POI.
+ It contains the name, the parent categories, the list of attributes, the icons, ... .**>
+ method PoiDetailsRequested {
+ in {
+ <** @description : array[unique_poi_id].**>
+ UInt32[] source_id
+ }
+ out {
+ <** @description : array[(details, categories, attributes)] .**>
+ POIServiceTypes.searchResultDetails_t[] results
+ }
+ }
+
+ } \ No newline at end of file
diff --git a/api/franca/POIService/POIServiceSearch.fidl b/api/franca/POIService/POIServiceSearch.fidl
new file mode 100644
index 0000000..cad3e75
--- /dev/null
+++ b/api/franca/POIService/POIServiceSearch.fidl
@@ -0,0 +1,283 @@
+package org.genivi.lbs.POIService
+
+import org.genivi.lbs.CommonTypes.* from "../CommonTypes.fidl"
+import org.genivi.lbs.POIServiceTypes.* from "POIServiceTypes.fidl"
+
+
+<** @description : This interface offers methods that implement the POI search functionality of a navigation system.**>
+interface POISearch {
+ version {
+ major 1
+ minor 0
+ }
+ <** @description : This method returns the API version implemented by the content access module.**>
+ method GetVersion {
+ out {
+ <** @description: .**>
+ CommonTypes.version_t ^version
+ }
+ }
+
+ <** @description : Get the current language set for the search.
+ The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language. **>
+ method GetLanguage {
+ out {
+ <** @description : The language.**>
+ String languageCode
+ <** @description : The country specific variant for the language.**>
+ String countryCode
+ }
+ }
+
+ <** @description : Set the language.
+ The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language.**>
+ method SetLanguage {
+ in {
+ <** @description : The language to be used.**>
+ String languageCode
+ <** @description : The country specific variant for the language to be used.**>
+ String countryCode
+ }
+ }
+
+ <** @description : This method allows the application to validate that POI categories are supported by the POI component and the Content access modules.**>
+ method ValidateCategories {
+ in {
+ <** @description : list of categories enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)
+ Note: A POI category is a unique ID. It could be a predifined category or a custom one defined by a POI plug-in.**>
+ UInt16[] categories
+ }
+ out {
+ <** @description : List of status for all the POI categories.**>
+ POIServiceTypes.poiCategoryAndStatus_t[] results
+ }
+ }
+
+ <** @description : This method retrieves the list od POI categories available (pre-defined and custom).**>
+ method GetAvailableCategories {
+ out {
+ <** @description : List of categories (id, name and top_level).**>
+ POIServiceTypes.poiCategoryAndName_t[] categories
+ }
+ }
+
+ <** @description : Get the root category id. That would be ALL_CATEGORIES.**>
+ method GetRootCategory {
+ out {
+ <** @description : The root category is a top level one by design.**>
+ UInt16 category
+ }
+ }
+
+ <** @description : Get the children categories id and type (top level) from the a parent unique id.**>
+ method GetChildrenCategories {
+ in {
+ <** @description : unique category id.**>
+ UInt16 category
+ }
+ out {
+ <** @description : List of categories (id and top_level).**>
+ POIServiceTypes.poiCategoryAndLevel_t[] categories
+ }
+ }
+
+ <** @description : Get the parent categories id and type (top level) from the a unique id.**>
+ method GetParentCategories {
+ in {
+ <** @description : unique category id.**>
+ UInt16 category
+ }
+ out {
+ <** @description : List of categories (id and top_level).**>
+ POIServiceTypes.poiCategoryAndLevel_t[] categories
+ }
+ }
+
+ <** @description : GetCategoriesDetails = This method retrieves the details associated to one or more POI categories.
+ It contains the name, the parent categories, the top level attribute, the list of attributes, the icons, ... .**>
+ method GetCategoriesDetails {
+ in {
+ <** @description : list of categories enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)
+ Note: A POI category is a unique ID. It could be a predefined category or a custom one defined by a POI plug-in. **>
+ UInt16[] categories
+ }
+ out {
+ <** @description : List of details for all the POI categories.**>
+ POIServiceTypes.category_t[] results
+ }
+ }
+
+ <** @description : This method creates a new search input and retrieves a handle .**>
+ method CreatePoiSearchHandle {
+ out {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ }
+ }
+
+ <** @description : This method deletes a search input and its associated resources.**>
+ method DeletePoiSearchHandle {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ }
+ }
+
+ <** @description : This method sets the location to start the search around.
+ If a route handle was defined before, it will be replaced by this location.**>
+ method SetCenter {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : location of the center.**>
+ CommonTypes.geoCoordinate3D_t location
+ }
+ }
+
+ <** @description : This method allows to start a POI search along a guided route.
+ The route handle must be valid or the POI search will failed.
+ If a search location was defined before, it will be replaced by the route.**>
+ method SetRouteHandle {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : session handle.**>
+ UInt8 sessionHandle
+ <** @description : route handle.**>
+ UInt8 routeHandle
+ <** @description : (optional) Distance from vehicle (in meters) from where to start the search along. 0 or invalid distance means start from vehicle.**>
+ UInt16 startSearchOffset
+ <** @description : (optional) Length of the route (in meters) from where to start the search along. 0 or invalid lenght means end is the destination.**>
+ UInt16 endSearchOffset
+ }
+ }
+
+ <** @description : This method sets the POI categories for the current search input and the corresponding result-lists for the current session .**>
+ method SetCategories {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description: array[struct(id,radius)].**>
+ POIServiceTypes.categoryRadius_t[] poiCategories
+ }
+ }
+ <** @description : This method set POI attributes (optional) for the current search input and the corresponding result-lists for the current session
+ An attribute is attached to a category.**>
+ method SetAttributes {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : array[struct(name, poiCategory, type, value, operator, mandatory)].**>
+ POIServiceTypes.attributeDetails_t[] poiAttributes
+ }
+ }
+
+ <** @description : This method sends the search input for the search handle.
+ The search will start with the either the location or the route handle.
+ If no positon or route handle were configured, the search will use the vehicle position are center location.**>
+ method StartPoiSearch {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : contains the name of the poi that is searched. It could be a partial name or an empty string.**>
+ String inputString
+ <** @description : enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )
+ If more than one category was defined for this search, the sort criteria should be compliant with all categories.**>
+ UInt16 sortOption
+ }
+ }
+
+ <** @description : This method cancels the search for the current session.**>
+ method CancelPoiSearch {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ }
+ }
+
+ <** @description : This method starts to check for POI aound vehicle according to the criteria defined with the unique handle.
+ By default, it will search for POI around vehicle position with default radius defined for each categories.
+ If a route handle was defined, it will search along the route with default categorie's radius.**>
+ method StartPoiProximityAlert {
+ in {
+ <** @description : poi alert unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : contains the name of the poi that is searched. It could be a partial name or an empty string.**>
+ String inputString
+ <** @description : enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )
+ If more than one category was defined for this search, the sort criteria should be compliant with all categories.**>
+ UInt16 sortOption
+ }
+ }
+
+ <** @description : This method cancels the search for the current session.**>
+ method CancelPoiProximityAlert {
+ in {
+ <** @description : poi alert unique handle.**>
+ UInt8 poiSearchHandle
+ }
+ }
+
+ <** @description : This method gets the poi result list (e.g. after a Search/Scroll call) .**>
+ method RequestResultList {
+ in {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : starting offset of the newly requested list elements. If invalid (more that total list for instance) it starts from the begining.**>
+ UInt16 offset
+ <** @description : maximum number of elements that should be returned as result.**>
+ UInt16 maxWindowSize
+ <** @description : List of attributes name to retrieve. This is optional and the list could be empty.**>
+ String[] attributes
+ }
+ out {
+ <** @description : enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... ).**>
+ UInt16 statusValue
+ <** @description : Number of items of the results list.**>
+ UInt16 resultListSize
+ <** @description : array[unique_id, distance, route_status, attributes].**>
+ POIServiceTypes.searchResult_t[] resultListWindow
+ }
+ }
+
+ <** @description : This method retrieves the details associated to one or more POI.
+ It contains the name, the parent categories, the list of attributes, the icons, ... ..**>
+ method GetPoiDetails {
+ in {
+ <** @description : list of poi.**>
+ UInt32[] id
+ }
+ out {
+ <** @description : array[details, categories, attributes].**>
+ POIServiceTypes.searchResultDetails_t[] results
+ }
+ }
+
+ <** @description : This signal indicates that one or more POI categories were added, updated or removed.**>
+ broadcast CategoriesUpdated {
+ out {
+ <** @description : List of POI categories modified or added.**>
+ POIServiceTypes.poiCategoryAndReason_t[] poiCategories
+ }
+ }
+
+ <** @description : This signal updates the search or proximity alert status of the specified handle.**>
+ broadcast PoiStatus {
+ out {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... ).**>
+ UInt16 statusValue
+ }
+ }
+
+ <** @description : This signal updates in the poi results list.**>
+ broadcast ResultListChanged {
+ out {
+ <** @description : poi search unique handle.**>
+ UInt8 poiSearchHandle
+ <** @description : Number of items of the results list.**>
+ UInt16 resultListSize
+ }
+ }
+} \ No newline at end of file
diff --git a/api/franca/POIService/POIServiceTypes.fidl b/api/franca/POIService/POIServiceTypes.fidl
new file mode 100644
index 0000000..28d1f97
--- /dev/null
+++ b/api/franca/POIService/POIServiceTypes.fidl
@@ -0,0 +1,259 @@
+package org.genivi.lbs.POIServiceTypes
+
+import org.genivi.lbs.CommonTypes.* from "../CommonTypes.fidl"
+
+typeCollection POIServiceTypes {
+ version {
+ major 0
+ minor 1
+ }
+
+
+ <** @description:**>
+ struct details_t {
+ <** @description : list of parent categories unique id.**>
+ UInt16[] parents_id
+ <** @description : visual icons set.**>
+ CommonTypes.variant_t icons
+ <** @description : name.**>
+ String name
+ <** @description : short category description (optional).**>
+ String short_desc
+ <** @description : media associated (html web site, audio, video, ...) (optional).**>
+ CommonTypes.variant_t media
+ }
+
+ <** @description:**>
+ struct operator_t {
+ <** @description : enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....).**>
+ UInt16 operator_id
+ <** @description : attribute operator name.**>
+ String operator_name
+ }
+
+
+ <** @description:**>
+ struct categoryAttribute_t {
+ <** @description : attribute unique name.**>
+ String name
+ <** @description : enum(INVALID,STRING,INTEGER,COORDINATES ...).**>
+ UInt16 type
+ <** @description:**>
+ operator_t[] operators
+ }
+
+
+ <** @description:**>
+ struct categorySortOption_t {
+ <** @description : enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... ).**>
+ UInt16 id
+ <** @description : name to be displayed by application.**>
+ String name
+ }
+
+
+ <** @description:**>
+ struct CAMCategory_t {
+ <** @description : struct(list of parents_id, icons, name, short_desc, media).**>
+ details_t details
+ <** @description : array[struct(name, type, array[struct(operator_id, operator_name)])].**>
+ categoryAttribute_t[] attributes
+ <** @description : array[struct(id, name)].**>
+ categorySortOption_t[] sortOptions
+ }
+
+
+ <** @description:**>
+ struct CAMCategoryUpdate_t {
+ <** @description : enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...). Note: A POI category is a unique ID. It could be a predefined category or a custom one defined by a POI plug-in **>
+ UInt16 id
+ <** @description : array[struct(name, type, array[struct(operator_id, operator_name)])].**>
+ categoryAttribute_t[] attributes
+ <** @description : array[struct(id, name)].**>
+ categorySortOption_t[] sortOptions
+ }
+
+
+
+ <** @description:**>
+ struct poiAttribute_t
+ {
+ <** @description:attribute unique name (see data model)**>
+ String name
+ <** @description:enum(INVALID,STRING,INTEGER,COORDINATES ...)**>
+ UInt16 type
+ <** @description:The value depends on the attribute specifications and type**>
+ CommonTypes.variant_t value
+ }
+
+
+
+ <** @description:**>
+ struct categoryRadius_t
+ {
+ <** @description : enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...). Note: A POI category is a unique ID. It could be a predefined category or a custom one defined by a POI plug-in **>
+ UInt16 id
+ <** @description : activation or search radius around the position (in 10 meters) for the category. If value is 0 (zero), the default radius (defined for a category) is applied.**>
+ UInt32 radius
+ }
+
+
+ <** @description:**>
+ struct poiDetails_t
+ {
+ <** @description:POI id**>
+ UInt32 id
+ <** @description:POI name**>
+ String name
+ <** @description:latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250**>
+ Double latitude
+ <** @description:longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250**>
+ Double longitude
+ <** @description:altitude above the sea level of the current position in meters**>
+ Int32 altitude
+ }
+
+
+ <** @description:**>
+ struct searchResultDetails_t
+ {
+ <** @description: struct(id,name,latitude,longitude,altitude).**>
+ poiDetails_t details
+ <** @description: array[unique_id].**>
+ UInt16[] categories
+ <** @description: array[struct(name,type,value)].**>
+ poiAttribute_t[] attributes
+ }
+
+ <** @description:**>
+ struct searchResult_t
+ {
+ <** @description:POI id**>
+ UInt32 id
+ <** @description:distance in meters to poi from center of the search or from vehicle if search along**>
+ UInt32 distance
+ <** @description:enum(OFF_ROUTE,ON_ROUTE,INSIDE_CORRIDOR, ... )**>
+ UInt16 route_status
+ <** @description:List of attributes requested. It could be empty**>
+ poiAttribute_t[] attributes
+ }
+
+
+ <** @description:**>
+ struct poiCAMDetails_t
+ {
+ <** @description:POI unique id as known by the content access module. This id will be used by POI service to request POI details.**>
+ UInt32 source_id
+ <** @description:POI name.**>
+ String name
+ <** @description:POI category unique id.**>
+ UInt16 category
+ <** @description:POI location.**>
+ CommonTypes.geoCoordinate3D_t location
+ <** @description:distance in meters to poi from center of the search.**>
+ UInt16 distance
+ <** @description:List of attributes requested. It could be empty.**>
+ poiAttribute_t[] attributes
+ }
+
+
+ <** @description:**>
+ struct attributeDetails_t
+ {
+ <** @description : attribute unique name (see data model).**>
+ String name
+ <** @description : enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...). Note: A POI category is a unique ID. It could be a predefined category or a custom one defined by a POI plug-in **>
+ UInt16 poiCategory
+ <** @description : enum(INVALID,STRING,INTEGER,COORDINATES ...).**>
+ UInt16 type
+ <** @description : value or partial value. The value depends on the attribute specifications and type.**>
+ CommonTypes.variant_t value
+ <** @description : enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....).**>
+ UInt16 oper
+ <** @description : true if the attribute is mandatory for the search and false for optional.**>
+ Boolean mandatory
+ }
+
+ <** @description:**>
+ struct categoryDetails_t
+ {
+ <** @description : Category unique id.**>
+ UInt16 unique_id
+ <** @description : list of parent categories unique id.**>
+ UInt16[] parents_id
+ <** @description : visual icons set.**>
+ CommonTypes.variant_t icons
+ <** @description : name.**>
+ String name
+ <** @description : true if the category is a pre-defined one (top level), false for customized categories created by plug-in.**>
+ Boolean top_level
+ <** @description : short category description (optional).**>
+ String description
+ <** @description : media associated (html web site, audio, video, ...) (optional).**>
+ CommonTypes.variant_t media
+ }
+
+ <** @description:**>
+ struct category_t
+ {
+ <** @description : struct(unique_id, list of parents_id, icons, name, top_level, short_desc, media).**>
+ categoryDetails_t details
+ <** @description : array[struct(name, type, array[struct(operator_id, operator_name)].**>
+ categoryAttribute_t[] attributes
+ <** @description : array[struct(id, name)].**>
+ categorySortOption_t[] sortOptions
+ }
+
+ <** @description:**>
+ struct poiCategoryAndLevel_t
+ {
+ <** @description : Category unique id.**>
+ UInt16 unique_id
+ <** @description : true if the category is a pre-defined one (top level), false for customized categories created by plug-in.**>
+ Boolean top_level
+ }
+
+ <** @description:**>
+ struct poiCategoryAndName_t
+ {
+ <** @description : Category unique id.**>
+ UInt16 unique_id
+ <** @description : name.**>
+ String name
+ <** @description : true if the category is a pre-defined one (top level), false for customized categories created by plug-in.**>
+ Boolean top_level
+ }
+
+ <** @description:**>
+ struct poiCategoryAndReason_t
+ {
+ <** @description : Category unique id.**>
+ UInt16 unique_id
+ <** @description : enum(ADDED,REMOVED,ATTR_ADDED,ATTR_MODIFIED,ATTR_REMOVED, ... ) .**>
+ UInt16 reason
+ }
+ <** @description:**>
+ struct poiCategoryAndStatus_t
+ {
+ <** @description : Category unique id.**>
+ UInt16 unique_id
+ <** @description : true if the category is available .**>
+ UInt16 status
+ }
+
+ <** @description:**>
+ struct poiAddedDetails_t
+ {
+ <** @description:POI name**>
+ String name
+ <** @description:latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250**>
+ Double latitude
+ <** @description:longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250**>
+ Double longitude
+ <** @description:altitude above the sea level of the current position in meters**>
+ Int32 altitude
+ <** @description: array[struct(name,type,value)].**>
+ poiAttribute_t[] attributes
+ }
+
+}
diff --git a/api/map-viewer/constants.xsl b/api/map-viewer/constants.xsl
new file mode 100644
index 0000000..7616ebb
--- /dev/null
+++ b/api/map-viewer/constants.xsl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!-- 09.3.2011 Marco Residori: First Draft -->
+ <!-- 14.3.2011 Marco Residori: Improved layout -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .id { font-style: italic; font-size:8pt; }
+ .title { font-style: italic; color: blue }
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- definitions -->
+ <xsl:apply-templates select="constants"/>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="constants">
+ <div class="constants">
+ <h1>
+ <span class="keyword">constants</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <xsl:apply-templates select="doc"/>
+ <xsl:for-each select="id">
+ <hr/>
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="id"><xsl:value-of select="@name"/> = <xsl:value-of select="@value"/></span>
+ </li>
+ </xsl:for-each>
+ </div>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/map-viewer/enum.xsl b/api/map-viewer/enum.xsl
new file mode 100644
index 0000000..4c093e8
--- /dev/null
+++ b/api/map-viewer/enum.xsl
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ************************************************************************
+* Component Name: Navit POC
+* Author: Martin Schaller <martin.schaller@it-schaller.de>
+*
+* Copyright (C) 2012, GENIVI Alliance, Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+************************************************************************ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <xsl:output method="text" encoding="iso-8859-15"/>
+ <xsl:template match="constants">
+ <xsl:variable name="constants" select="translate(@name,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
+/* This is an automatically generated file, do not edit */
+
+enum GENIVI_<xsl:value-of select="$constants"/>_Constants {<xsl:for-each select="id">
+ GENIVI_<xsl:value-of select="$constants"/>_<xsl:value-of select="translate(@name,'-','_')"/> = <xsl:value-of select="@value"/>,</xsl:for-each>
+};
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/map-viewer/genivi-mapviewer-configuration.xml b/api/map-viewer/genivi-mapviewer-configuration.xml
new file mode 100755
index 0000000..6939312
--- /dev/null
+++ b/api/map-viewer/genivi-mapviewer-configuration.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/mapviewer" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.mapviewer.Configuration">
+ <version>2.0.0 (07-06-2013)</version>
+ <doc>
+ <line>Configuration = This interface offers functions to set and retrieve configuration parameters</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetUnitsOfMeasurement">
+ <doc>
+ <line>SetUnitsOfMeasurement = This method sets the units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="in">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = tuple (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'q', that represents an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetUnitsOfMeasurement">
+ <doc>
+ <line>GetUnitsOfMeasurement = This method retrieves the units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="out">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = tuple (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'q', that represents an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedUnitsOfMeasurement">
+ <doc>
+ <line>GetSupportedUnitsOfMeasurement = This method retrieves the supported units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="out">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'aq'; 'q' is an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetTimeFormat">
+ <doc>
+ <line>SetTimeFormat = This method sets the time format</line>
+ </doc>
+ <arg name="timeFormat" type="q" direction="in">
+ <doc>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetTimeFormat">
+ <doc>
+ <line>GetTimeFormat = This method retrieves the time format</line>
+ </doc>
+ <arg name="timeFormat" type="q" direction="out">
+ <doc>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedTimeFormats">
+ <doc>
+ <line>GetSupportedTimeFormats = This method retrieves the supported time formats</line>
+ </doc>
+ <arg name="timeFormatList" type="aq" direction="out">
+ <doc>
+ <line>timeFormatList = array[timeFormat]</line>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCoordinatesFormat">
+ <doc>
+ <line>SetCoordinatesFormat = This method sets the coordinates format</line>
+ </doc>
+ <arg name="coordinatesFormat" type="q" direction="in">
+ <doc>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCoordinatesFormat">
+ <doc>
+ <line>GetCoordinatesFormat = This method retrieves the coordinates format</line>
+ </doc>
+ <arg name="coordinatesFormat" type="q" direction="out">
+ <doc>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedCoordinatesFormats">
+ <doc>
+ <line>GetSupportedCoordinatesFormats = This method retrieves the supported coordinates formats</line>
+ </doc>
+ <arg name="coordinatesFormatList" type="aq" direction="out">
+ <doc>
+ <line>coordinatesFormatList = array[coordinatesFormat]</line>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetLocale">
+ <doc>
+ <line>SetLocale = This method sets the current language and country</line>
+ </doc>
+ <arg name="language" type="s" direction="in">
+ <doc>
+ <line>language = ISO 639‐3 language code (lower case)</line>
+ </doc>
+ </arg>
+ <arg name="country" type="s" direction="in">
+ <doc>
+ <line>country = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetLocale">
+ <doc>
+ <line>GetLocale = This method retrieves the current language and country</line>
+ </doc>
+ <arg name="language" type="s" direction="out">
+ <doc>
+ <line>language = ISO 639‐3 language code (lower case)</line>
+ </doc>
+ </arg>
+ <arg name="country" type="s" direction="out">
+ <doc>
+ <line>country = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedLocales">
+ <doc>
+ <line>GetSupportedLocales = This method retrieves the supported languages and countries</line>
+ </doc>
+ <arg name="localeList" type="a(ss)" direction="out">
+ <doc>
+ <line>localeList = array[struct(language,country)]</line>
+ <line>language = ISO 639-3 language code (lower case)</line>
+ <line>country = ISO 3166-1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="ConfigurationChanged">
+ <doc>
+ <line>ConfigurationChanged = This signal is sent to the clients when one or more configuration settings changes</line>
+ </doc>
+ <arg name="changedSettings" type="aq">
+ <doc>
+ <line>changedSettings = array[setting]</line>
+ <line>setting = enum(INVALID,UNITS_OF_MEASUREMENT,LOCALE,TIME_FORMAT,COORDINATES_FORMAT, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/map-viewer/genivi-mapviewer-constants.xml b/api/map-viewer/genivi-mapviewer-constants.xml
new file mode 100644
index 0000000..cc4515e
--- /dev/null
+++ b/api/map-viewer/genivi-mapviewer-constants.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="constants.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<constants name="MapViewer">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>This document defines the constants used in the MapViewer APIs</line>
+ </doc>
+
+ <id name="INVALID" value="0x0000" />
+ <id name="ALL" value="0xffff" />
+
+ <id name="AVAILABLE" value="0x0001" />
+ <id name="NOT_AVAILABLE" value="0x0002" />
+
+ <id name="TIME_FORMAT" value="0x0003" />
+ <id name="12H" value="0x0004" />
+ <id name="24H" value="0x0005" />
+
+ <id name="COORDINATES_FORMAT" value="0x0006" />
+ <id name="DEGREES" value="0x0007" />
+ <id name="MINUTES" value="0x0008" />
+ <id name="SECONDS" value="0x0009" />
+
+ <id name="MAIN_MAP" value="0x0010" />
+ <id name="SPLIT_SCREEN" value="0x0011" />
+
+ <id name="2D" value="0x0020" />
+ <id name="3D" value="0x0021" />
+
+ <id name="LOCALE" value="0x0025" />
+
+ <id name="UNITS_OF_MEASUREMENT" value="0x0030" />
+ <id name="LENGTH" value="0x0031" />
+ <id name="METER" value="0x0032" />
+ <id name="MILE" value="0x0033" />
+ <id name="KM" value="0x0034" />
+ <id name="YARD" value="0x0035" />
+ <id name="FOOT" value="0x0036" />
+
+ <id name="MIN" value="0x0040" />
+ <id name="MAX" value="0x0041" />
+ <id name="MID" value="0x0042" />
+
+ <id name="VISIBLE" value="0x0043" />
+ <id name="INVISIBLE" value="0x0044" />
+ <id name="FROZEN" value="0x0045" />
+
+ <id name="LEVEL1" value="0x0050" />
+ <id name="LEVEL2" value="0x0051" />
+ <id name="LEVEL3" value="0x0052" />
+ <id name="LEVEL4" value="0x0053" />
+ <id name="LEVEL5" value="0x0054" />
+
+ <id name="THEME_1" value="0x0060" />
+ <id name="THEME_2" value="0x0061" />
+ <id name="THEME_3" value="0x0062" />
+
+ <id name="CONSTANT_ANGLE" value="0x0070" />
+ <id name="TRACK_UP" value="0x0071" />
+ <id name="TOWARDS_TARGET" value="0x0072" />
+
+ <id name="PAN_START" value="0x0100" />
+ <id name="PAN_TO" value="0x0101" />
+ <id name="PAN_END" value="0x0102" />
+
+ <id name="BUILDINGS" value="0x0080" />
+ <id name="TERRAIN" value="0x0081" />
+
+ <id name="AUTOMATIC" value="0x0110" />
+ <id name="MANUAL" value="0x0111" />
+ <id name="HYBRID" value="0x0112" />
+
+ <id name="CUSTOM_ELEMENT" value="0x0120" />
+ <id name="CURRENT_POSITION" value="0x0121" />
+ <id name="WAYPOINT" value="0x0122" />
+ <id name="POI" value="0x0123" />
+ <id name="TRAFFIC_INCIDENT" value="0x0124" />
+ <id name="ROUTE" value="0x0125" />
+ <id name="GEOCOORDINATES" value="0x0126" />
+
+</constants>
diff --git a/api/map-viewer/genivi-mapviewer-mapviewercontrol.xml b/api/map-viewer/genivi-mapviewer-mapviewercontrol.xml
new file mode 100755
index 0000000..5edfb92
--- /dev/null
+++ b/api/map-viewer/genivi-mapviewer-mapviewercontrol.xml
@@ -0,0 +1,1507 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/mapviewer" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.mapviewer.MapViewerControl">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>MapViewerControl = This interface offers functions to control the MapViewer</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CreateMapViewInstance">
+ <doc>
+ <line>CreateMapViewInstance = This method creates a new map instance</line>
+ <line>Note: when a map instance is created, it is set to 'not visible' by default</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewSize" type="(qq)" direction="in">
+ <doc>
+ <line>mapViewSize = struct(horizontalSize,verticalSize) of the map instance in pixels.</line>
+ <line>horizontalSize = horizontal size of the map instance in pixels</line>
+ <line>verticalSize = vertical size of the map instance in pixels</line>
+ </doc>
+ </arg>
+ <arg name="mapViewType" type="q" direction="in">
+ <doc>
+ <line>mapViewType = enum(INVALID,MAIN_MAP,SPLIT_SCREEN, ... )</line>
+ <line>Note: to be used in case that a specific position of the map instance with respect to the display viewport is required</line>
+ <line>For example, if the instance 1 is of type MAIN_MAP and the instance 2 is of type SPLIT_SCREEN, the offset of the map instances</line>
+ <line>with respect to the display viewport could be (0;0) and (hres/2;0) respectively</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="out">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.mapviewer.MapViewerControl.Error.NoMoreMapViewInstanceHandles">
+ <doc>
+ <line>This error is generated if no more map view instance handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="ReleaseMapViewInstance">
+ <doc>
+ <line>ReleaseMapViewInstance = This method releases (i.e. destroys) a given map instance. Only invisible map instances can be released</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.mapviewer.MapViewerControl.Error.MapViewInstanceNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a map view instance handle that is not available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetMapViewType">
+ <doc>
+ <line>GetMapViewType = This method returns the map type of a map instance as it was set using CreateMapViewInstance</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewType" type="q" direction="out">
+ <doc>
+ <line>mapViewType = enum(INVALID,MAIN_MAP,SPLIT_SCREEN, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewTypes">
+ <doc>
+ <line>GetSupportedMapViewTypes = This method retrieves the supported map view types</line>
+ </doc>
+ <arg name="mapViewTypeList" type="aq" direction="out">
+ <doc>
+ <line>mapViewTypeList = array[mapViewType]</line>
+ <line>mapViewType = enum(INVALID,MAIN_MAP,SPLIT_SCREEN, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetTargetPoint">
+ <doc>
+ <line>SetTargetPoint = This method sets the position of the point the camera is always aimed at</line>
+ <line>Note: the target point is typically visualized in the center of the map</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="targetPoint" type="(ddi)" direction="in">
+ <doc>
+ <line>targetPoint = (lat,lon,alt)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ <line>alt = altitude to the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetTargetPoint">
+ <doc>
+ <line>GetTargetPoint = This method retrieves the target point position</line>
+ <line>Note: if the FollowCar mode is active, the this method will return the current vehicle position</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="targetPoint" type="(ddi)" direction="out">
+ <doc>
+ <line>targetPoint = (lat,lon,alt)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ <line>alt = altitude to the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetFollowCarMode">
+ <doc>
+ <line>SetFollowCarMode = This method sets the FollowCar mode</line>
+ <line>Note: if the FollowCar is activated, the current car position is interpreted as target point position</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="followCarMode" type="b" direction="in">
+ <doc>
+ <line>followCarMode = flag. If true, the current car position is interpreted as position of the point the camera must look at</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetFollowCarMode">
+ <doc>
+ <line>GetFollowCarMode = This method returns the current FollowCar-mode</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="followCarMode" type="b" direction="out">
+ <doc>
+ <line>followCarMode = flag. If true, the current car position is interpreted as position of the point the camera must look at</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraPosition">
+ <doc>
+ <line>SetCameraPosition = This method sets the coordinates of the point at which the camera must be positioned</line>
+ <line>Note: the camera heading will be automatically set in such a way, that the camera is aimed at the view point</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="position" type="(ddi)" direction="in">
+ <doc>
+ <line>position = (lat,lon,alt)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ <line>alt = altitude to the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraPosition">
+ <doc>
+ <line>GetCameraPosition = This method returns the coordinates of the point at which the camera is positioned</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="position" type="(ddi)" direction="out">
+ <doc>
+ <line>position = (lat,lon,alt)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ <line>alt = altitude to the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraHeadingAngle">
+ <doc>
+ <line>SetCameraHeadingAngle = This method sets the map view heading angle</line>
+ <line>Note: the camera position will be automatically set in such a way, that it looks at the currently selected target point</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="heading" type="i" direction="in">
+ <doc>
+ <line>heading = heading angle in degrees. Range [0:360]</line>
+ <line>The angle in degrees between projection on the ground plane of the line through the center of the screen and the top-centre of the screen, and the North direction</line>
+ <line>0 degrees means that the map view is oriented such that North is at the top of the screen</line>
+ <line>Degrees are measured clockwise such that 90 degrees correspond to the East direction</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraHeadingToTarget">
+ <doc>
+ <line>SetCameraHeadingToTarget = This method sets the camera heading in such a way, that the camera always looks at a given target</line>
+ <line>Note: the camera position will be automatically set in such a way, that it aims at the current view point</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="target" type="(dd)" direction="in">
+ <doc>
+ <line>target = struct(lat,lon)</line>
+ <line>lat = latitude of the point towards which the map vertical axis must be aligned in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude of the point towards which the map vertical axis must be aligned in format %3.6f. Range[-180:+180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraHeadingTrackUp">
+ <doc>
+ <line>SetCameraHeadingTrackUp = This method sets the camera heading in such a way, that the camera always looks in the direction in which the car is moving</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraHeading">
+ <doc>
+ <line>GetCameraHeading = This method returns the current camera heading</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="headingType" type="q" direction="out">
+ <doc>
+ <line>headingType = enum(INVALID,CONSTANT_ANGLE,TRACK_UP,TOWARDS_TARGET, ... )</line>
+ </doc>
+ </arg>
+ <arg name="headingAngle" type="i" direction="out">
+ <doc>
+ <line>headingAngle = heading angle in degrees measured from the North axis clockwise. Range[0:360]</line>
+ <line>Note: meaningful only if heading != TOWARDS_TARGET, otherwise it is just a dummy value and must be set to 0</line>
+ </doc>
+ </arg>
+ <arg name="target" type="(dd)" direction="out">
+ <doc>
+ <line>headingTarget = struct(lat,lon)</line>
+ <line>lat = latitude of the point towards which the map vertical axis must be aligned in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude of the point towards which the map vertical axis must be aligned in format %3.6f. Range[-180:+180]</line>
+ <line>Note: meaningful only if heading = TOWARDS_TARGET, otherwise it is just a dummy value and must be set to (0,0)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraTiltAngle">
+ <doc>
+ <line>SetCameraTiltAngle = This method sets the camera tilt angle</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="tilt" type="i" direction="in">
+ <doc>
+ <line>tilt = tilt angle in degrees. Range [-180:180]</line>
+ <line>Example: 0 = down (straight down to the ground plane), 90 = front (parrallel to the ground plane), 180 = top (straight up to the sky)</line>
+ <line>Negative angles [0:-180] result in an upside down view</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraTiltAngle">
+ <doc>
+ <line>GetMapViewTiltAngle = This method returns the camera tilt angle</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="tilt" type="i" direction="out">
+ <doc>
+ <line>tilt = tilt angle in degrees. Range [-180:180]</line>
+ <line>Example: 0 = down (straight down to the ground plane), 90 = front (parrallel to the ground plane), 180 = top (straight up to the sky)</line>
+ <line>Negative angles [0:-180] result in an upside down view</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraRollAngle">
+ <obligation>Optional</obligation>
+ <doc>
+ <line>SetCameraRollAngle = This method sets the camera roll angle</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="roll" type="i" direction="in">
+ <doc>
+ <line>roll = roll angle in degrees. Range [-180:180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraRollAngle">
+ <obligation>Optional</obligation>
+ <doc>
+ <line>GetCameraRollAngle = This method returns the camera roll angle</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="roll" type="i" direction="out">
+ <doc>
+ <line>roll = roll angle in degrees. Range [-180:180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCameraDistanceFromTargetPoint">
+ <doc>
+ <line>SetCameraDistanceFromTargetPoint = This method sets the mode and the camera distance from the target point</line>
+ <line>Note: this method can be used to zoom in and out</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="distance" type="u" direction="in">
+ <doc>
+ <line>distance = distance from the view point in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraDistanceFromTargetPoint">
+ <doc>
+ <line>GetCameraDistanceFromTargetPoint = This method gets the mode and the camera distance from the target point</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="distance" type="u" direction="out">
+ <doc>
+ <line>distance = distance from the view point in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewScaleMode">
+ <doc>
+ <line>SetMapViewScaleMode = This method sets the scaling mode.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleMode" type="q" direction="in">
+ <doc>
+ <line>scaleMode = enum(AUTOMATIC,MANUAL,HYBRID)</line>
+ <line>scaleMode = AUTOMATIC, adjusts the camera distance automatically (e.g. depending on the speed)</line>
+ <line>scaleMode = MANUAL, the camera distance is specified by the argument 'distance'</line>
+ <line>scaleMode = HYBRID, e.g. AUTOMATIC depending on the proximity to the target, MANUAL otherwise</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewScaleMode">
+ <doc>
+ <line>GetMapViewScaleMode = This method gets the scaling mode.</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleMode" type="q" direction="out">
+ <doc>
+ <line>scaleMode = enum(AUTOMATIC,MANUAL,HYBRID)</line>
+ <line>scaleMode = AUTOMATIC, adjusts the camera distance automatically (e.g. depending on the speed)</line>
+ <line>scaleMode = MANUAL, the camera distance is specified by the argument 'distance'</line>
+ <line>scaleMode = HYBRID, e.g. AUTOMATIC depending on the proximity to the target, MANUAL otherwise</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewScaleModes">
+ <doc>
+ <line>GetSupportedMapViewScaleModes = This method gets the supported scaling modes.</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleModeList" type="aq" direction="out">
+ <doc>
+ <line>scaleModeList = array[scaleMode]</line>
+ <line>scaleMode = enum(AUTOMATIC,MANUAL,HYBRID)</line>
+ <line>scaleMode = AUTOMATIC, adjusts the camera distance automatically (e.g. depending on the speed)</line>
+ <line>scaleMode = MANUAL, the camera distance is specified by the argument 'distance'</line>
+ <line>scaleMode = HYBRID, e.g. AUTOMATIC depending on the proximity to the target, MANUAL otherwise</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="MapViewScaleChanged">
+ <doc>
+ <line>MapViewScaleChanged = This signal is emitted when the mapview scale changes</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleID" type="y">
+ <doc>
+ <line>scaleID = scale identifier. Range[0:256]</line>
+ </doc>
+ </arg>
+ <arg name="isMinMax" type="q">
+ <doc>
+ <line>isMinMax = enum(INVALID,MIN,MAX,MID, ... )</line>
+ <line>MIN = scale ID minimal value</line>
+ <line>MID = scale ID intermediate value</line>
+ <line>MAX = scale ID maximal value</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="AddMapViewScaleChangedListener">
+ <doc>
+ <line>AddMapViewScaleChangedListener = This method adds a listener which is notified when map view scale changes.</line>
+ </doc>
+ </method>
+ <method name="RemoveMapViewScaleChangedListener">
+ <doc>
+ <line>RemoveMapViewScaleChangedListener = This method removes a listener which is notified when map view scale changes.</line>
+ </doc>
+ </method>
+ <method name="SetCameraHeight">
+ <doc>
+ <line>SetCameraHeight = This method sets the camera height</line>
+ <line>Note: this method is a subset of SetCameraPosition</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="height" type="u" direction="in">
+ <doc>
+ <line>height = height from the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCameraHeight">
+ <doc>
+ <line>GetCameraHeight = This method gets the camera height</line>
+ <line>Note: this method is a subset of GetCameraPosition</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="height" type="u" direction="out">
+ <doc>
+ <line>height = height from the ground in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewPerspective">
+ <doc>
+ <line>SetMapViewPerspective = This method sets the map perspective</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="perspective" type="q" direction="in">
+ <doc>
+ <line>perspective = enum(INVALID,2D,3D, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewPerspective">
+ <doc>
+ <line>GetMapViewPerspective = This method returns the current map perspective</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="perspective" type="q" direction="out">
+ <doc>
+ <line>perspective = enum(INVALID,2D,3D, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewPerspectives">
+ <doc>
+ <line>GetSupportedMapViewPerspectives = This method retrieves the supported mapview perspectives</line>
+ </doc>
+ <arg name="perspectiveList" type="aq" direction="out">
+ <doc>
+ <line>perspectiveList = array[perspective]</line>
+ <line>perspective = enum(INVALID,2D,3D, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewObjectVisibility">
+ <doc>
+ <line>SetMapViewObjectVisibility = This method specifies the type of objects to show on the map.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="objectVisibilityList" type="a{qb}" direction="in">
+ <doc>
+ <line> objectVisibilityList = array[objectVisibility]</line>
+ <line> objectVisibility = dictionary[key,value]</line>
+ <line> key = enum[BUILDINGS,TERRAIN, ...]</line>
+ <line> value = value of type 'b'; if true the objects are shown else they are not shown</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewObjectVisibility">
+ <doc>
+ <line>GetMapViewObjectVisibility = This method gets the type of objects shown on the map.</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="objectVisibilityList" type="a{qb}" direction="out">
+ <doc>
+ <line> objectVisibilityList = array[objectVisibility]</line>
+ <line> objectVisibility = dictionary[key,value]</line>
+ <line> key = enum[BUILDINGS,TERRAIN, ...]</line>
+ <line> value = value of type 'b'; if true the objects are shown else they are not shown</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewObjectVisibilities">
+ <doc>
+ <line>GetSupportedMapViewObjectVisibilities = This method gets the supported object visibilities.</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="objectVisibilityList" type="aq" direction="out">
+ <doc>
+ <line> objectVisibilityList = array[objectVisibility]</line>
+ <line> objectVisibility = enum[BUILDINGS,TERRAIN, ...]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetScaleList">
+ <doc>
+ <line>GetScaleList = This method returns a list of supported map scales</line>
+ <line>Note: a mapscale consists of an unique ID, a ScaleValue, a ScaleUnit and a number of MillimetesPerPixel</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleList" type="a(qqqu)" direction="out">
+ <doc>
+ <line>scaleList = array[struct(scaleId,scaleValue,scaleUnit,millimetersPerPixel)]</line>
+ <line>scaleId = scale identifier. Range [0:256]</line>
+ <line>scaleValue = scale value. It can assume values like 100, 200, 1000, ...</line>
+ <line>scaleUnit = unit of measurement. It is an enum(INVALID,METER,KM,MILE,YARD,FOOT, ... )</line>
+ <line>millimetersPerPixel = number indicating the number of millimeters per pixel</line>
+ <line>Example: ((1,100,METER,1000),(2,200,METER,1000),(3,500,METER,1000), ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewScale">
+ <doc>
+ <line>SetMapViewScale = This method sets the map scale by specifying a ScaleID</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleID" type="q" direction="in">
+ <doc>
+ <line>scaleID = scale identifier. Range[0:256]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewScaleByDelta">
+ <doc>
+ <line>SetMapViewScaleByDelta = This method sets the map scale by specifying a delta value with respect to the currently set ScaleID</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleDelta" type="n" direction="in">
+ <doc>
+ <line>scaleDelta = This parameter can have either positive or negative values. '0' means no change. Positive values indicate larger scales</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewScaleByMetersPerPixel">
+ <doc>
+ <line>SetMapViewScaleByMetersPerPixel = This method sets the map scale by specifying the number of meters that a pixel represents</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="metersPerPixel" type="d" direction="in">
+ <doc>
+ <line>metersPerPixel = meters per pixel</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewScale">
+ <doc>
+ <line>GetMapViewScale = This method returns the currently used map scale</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="scaleID" type="y" direction="out">
+ <doc>
+ <line>scaleID = scale identifier. Range[0:256]</line>
+ </doc>
+ </arg>
+ <arg name="isMinMax" type="q" direction="out">
+ <doc>
+ <line>isMinMax = enum(INVALID,MIN,MAX,MID, ... )</line>
+ <line>MIN = scale ID minimal value</line>
+ <line>MID = scale ID intermediate value</line>
+ <line>MAX = scale ID maximal value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewBoundingBox">
+ <doc>
+ <line>SetMapViewBoundingBox = This method sets the map bounding box</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="boundingBox" type="((dd)(dd))" direction="in">
+ <doc>
+ <line>boundingBox = struct(top-left-corner,bottom-right-corner)</line>
+ <line>top-left-corner = struct(lat,lon)</line>
+ <line>bottom-right-corner = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewBoundingBox">
+ <doc>
+ <line>GetMapViewBoundingBox = This method returns the bounding box of a given map instance</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="boundingBox" type="((dd)(dd))" direction="out">
+ <doc>
+ <line>boundingBox = struct(top-left-corner,bottom-right-corner)</line>
+ <line>top-left-corner = struct(lat,lon)</line>
+ <line>bottom-right-corner = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewSaveArea">
+ <doc>
+ <line>SetMapViewSaveArea = This methods defines the area that the HMI guarantees not to
+cover with other windows or user interface elements</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="saveArea" type="(dddd)" direction="in">
+ <doc>
+ <line>boundingBox = struct(rect-left,rect-right,rect-top,rect-bottom)</line>
+ <line>rect-left = covered area on the left. Range [0:1]</line>
+ <line>rect-right = covered area on the right. Range [0:1]</line>
+ <line>rect-top = covered area on top. Range [0:1]</line>
+ <line>rect-bottom = covered area at the bottom. Range [0:1]</line>
+ <line>Note: 0.0 means there is no covered area (offset) from that side</line>
+ <line>When all four parameters are 0 then the save area is equal to the viewport area (being the default)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewSaveArea">
+ <doc>
+ <line>SetMapViewSaveArea = This methods defines the area that the HMI guarantees not to
+cover with other windows or user interface elements</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="saveArea" type="(dddd)" direction="out">
+ <doc>
+ <line>boundingBox = struct(rect-left,rect-right,rect-top,rect-bottom)</line>
+ <line>rect-left = covered area on the left. Range [0:1]</line>
+ <line>rect-right = covered area on the right. Range [0:1]</line>
+ <line>rect-top = covered area on top. Range [0:1]</line>
+ <line>rect-bottom = covered area at the bottom. Range [0:1]</line>
+ <line>Note: 0.0 means there is no covered area (offset) from that side</line>
+ <line>When all four parameters are 0 then the save area is equal to the viewport area (being the default)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewPan">
+ <doc>
+ <line>SetMapViewPan = This method pans a given map instance</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="panningAction" type="q" direction="in">
+ <doc>
+ <line>panningAction = enum(PAN_START,PAN_TO,PAN_END)</line>
+ <line>PAN_START, start panning the map at the specified screen coordinate identified by the arguments 'x' and 'y'</line>
+ <line>PAN_TO, pan the map to the specified screen coordinate identified by the arguments 'x' and 'y'; it has no effect before PAN_START or after PAN_END</line>
+ <line>PAN_END, pan the map to the specified screen coordinate identified by the arguments 'x' and 'y' and end panning; it has no effect before PAN_START</line>
+ </doc>
+ </arg>
+ <arg name="pixelCoordinates" type="a(qq)" direction="in">
+ <doc>
+ <line>pixelCoordinates = array[struct(x,y)]</line>
+ <line>x = x-coordinate (x=0 indicates the first left pixel of the map view)</line>
+ <line>y = y-coordinate (y=0 indicates the first top pixel of the map view)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewPan">
+ <doc>
+ <line>GetMapViewPan</line>
+ <line>This method is meant for debugging purposes</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="valueToReturn" type="q" direction="in">
+ <doc>
+ <line>valueToReturn = enum(PAN_START,PAN_TO,PAN_END)</line>
+ </doc>
+ </arg>
+ <arg name="pixelCoordinates" type="a(qq)" direction="in">
+ <doc>
+ <line>pixelCoordinates = array[struct(x,y)]</line>
+ <line>x = x-coordinate (x=0 indicates the first left pixel of the map view)</line>
+ <line>y = y-coordinate (y=0 indicates the first top pixel of the map view)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewRotation">
+ <doc>
+ <line>SetMapViewRotation = This method rotates the map</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="rotationAngle" type="i" direction="in">
+ <doc>
+ <line>rotationAngle = rotation angle in degrees measured from the North axis clockwise. Range[0:360]</line>
+ </doc>
+ </arg>
+ <arg name="rotationAnglePerSecond" type="i" direction="in">
+ <doc>
+ <line>rotationAnglePerSecond = partial rotation for each second</line>
+ <line>The value can be set implement a smooth rotation</line>
+ <line>If rotationAnglePerSecond = rotationAngle it means that the rotation must be instantaneous</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewRotation">
+ <doc>
+ <line>GetMapViewRotation = This method is particularly interesting for debugging purposes</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="rotationAngle" type="i" direction="out">
+ <doc>
+ <line>rotationAngle = rotation angle in degrees measured from the North axis clockwise. Range[0:360]</line>
+ </doc>
+ </arg>
+ <arg name="rotationAnglePerFrame" type="i" direction="out">
+ <doc>
+ <line>rotationAnglePerFrame = partial rotation for each map frame in degrees</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewVisibilityMode">
+ <doc>
+ <line>SetMapViewVisibilityMode = This method sets the current visibility mode</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="visibilityMode" type="q" direction="in">
+ <doc>
+ <line>visibilityMode = enum(INVALID,VISIBLE,INVISIBLE,FROZEN, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewVisibilityMode">
+ <doc>
+ <line>GetMapViewVisibilityMode = This method returns the current visibility mode</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="visibilityMode" type="q" direction="out">
+ <doc>
+ <line>visibilityMode = enum(INVALID,VISIBLE,INVISIBLE,FROZEN, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewVisibilityModes">
+ <doc>
+ <line>GetSupportedMapViewVisibilityModes = This method retrieves the supported mapview visibility modes</line>
+ </doc>
+ <arg name="visibilityModeList" type="aq" direction="out">
+ <doc>
+ <line>visibilityModeList = array[visibilityMode]</line>
+ <line>visibilityMode = enum(INVALID,VISIBLE,INVISIBLE,FROZEN, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="MapViewVisibilityChanged">
+ <doc>
+ <line>MapViewVisibilityChanged = This signal is emitted when the MapView visibility changes</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="visibilityMode" type="q">
+ <doc>
+ <line>visibilityMode = enum(INVALID,VISIBLE,INVISIBLE,FROZEN, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="SetMapViewPerformanceLevel">
+ <doc>
+ <line>SetMapViewPerformanceLevel = This method sets the perfomance level of a given map instance</line>
+ <line>Note: it can be used to set the MapView in application specific performance mode (e.g. low CPU-usage or low memory-usage)</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="performanceLevel" type="q" direction="in">
+ <doc>
+ <line>performanceLevel = enum(INVALID,LEVEL1,LEVEL2,LEVEL3,LEVEL4,LEVEL5, ... )</line>
+ <line>Note: performance levels are application specific</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewPerformanceLevel">
+ <doc>
+ <line>GetMapViewPerformanceLevel = This method returns the perfomance level of a given map instance</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="performanceLevel" type="q" direction="out">
+ <doc>
+ <line>performanceLevel = enum(INVALID,LEVEL1,LEVEL2,LEVEL3,LEVEL4,LEVEL5, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewPerformanceLevels">
+ <doc>
+ <line>GetSupportedMapViewPerformanceLevels = This method retrieves the supported perfomance levels</line>
+ </doc>
+ <arg name="performanceLevelList" type="aq" direction="out">
+ <doc>
+ <line>performanceLevelList = array[performanceLevel]</line>
+ <line>performanceLevel = enum(INVALID,LEVEL1,LEVEL2,LEVEL3,LEVEL4,LEVEL5, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="DisplayRoute">
+ <doc>
+ <line>DisplayRoute = This method visualizes one of the calculated routes</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="highlighted" type="b" direction="in">
+ <doc>
+ <line>highlighted = flag. TRUE means highligted,FALSE means not highlighted</line>
+ <line>Note: the highlighted route must be visualized on top of the other routes</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="HideRoute">
+ <doc>
+ <line>HideRoute = This method hides one of the visible routes</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>Note: the routeHandle has to be one of the visible routes</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetDisplayedRoutes">
+ <doc>
+ <line>GetDisplayedRoutes = This method returns a list of displayed routes</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="displayedRoutes" type="a(ub)" direction="out">
+ <doc>
+ <line>displayedRoutes = array[struct(routeHandle,highlighted)]</line>
+ <line>routeHandle = Route handle of a displayed route. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>highlighted = flag. TRUE means highlighted,FALSE means not highlighted</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="DisplayedRoutes">
+ <doc>
+ <line>DisplayedRoutes = This signal is emitted when the list of displayed routes change</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="displayedRoutes" type="a(ub)">
+ <doc>
+ <line>displayedRoutes = array[struct(routeHandle,highlighted)]</line>
+ <line>routeHandle = Route handle of a displayed route. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>highlighted = flag. TRUE means highlighted,FALSE means not highlighted</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="GetPoiCategoriesVisible">
+ <doc>
+ <line>GetPoiCategoriesVisible = Get the set of POI categories displayed on the map.</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="poiCategoryIds" type="aq" direction="out">
+ <doc>
+ <line>poiCategoryIds = array[poiCategoryId]</line>
+ <line>poiCategoryId = a POI category as defined in the 'GENIVI POIService API'.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetPoiCategoriesVisible">
+ <doc>
+ <line>SetPoiCategoriesVisible = Add POI categories to the set of POI categories displayed on the map.
+ Any specified category that until now was displayed with scale limits is now displayed without limits.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="poiCategoryIds" type="aq" direction="in">
+ <doc>
+ <line>poiCategoryIds = array[poiCategoryId]</line>
+ <line>poiCategoryId = a POI category as defined in the 'GENIVI POIService API'.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetPoiCategoriesVisibleWithinLimits">
+ <doc>
+ <line>SetPoiCategoriesVisible = Add POI categories to the set of POI categories displayed on the map, where the POI's are only displayed in a specific range of scales.
+ Any specified category that until now was displayed without scale limits is now displayed with limits.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="poiCategoryIds" type="aq" direction="in">
+ <doc>
+ <line>poiCategoryIds = array[poiCategoryId]</line>
+ <line>poiCategoryId = a POI category as defined in the 'GENIVI POIService API'.</line>
+ </doc>
+ </arg>
+ <arg name="minScaleID" type="y" direction="in">
+ <doc>
+ <line>minScaleID = minimun scale on which the POI categories are displayed</line>
+ </doc>
+ </arg>
+ <arg name="maxScaleID" type="y" direction="in">
+ <doc>
+ <line>maxScaleID = maximum scale on which the POI categories are displayed</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetPoiCategoriesNotVisible">
+ <doc>
+ <line>SetPoiCategoriesNotVisible = Remove POI categories from the set of POI categories displayed on the map.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="poiCategoryIds" type="aq" direction="in">
+ <doc>
+ <line>poiCategoryIds = array[poiCategoryId]</line>
+ <line>poiCategoryId = a POI category as defined in the 'GENIVI POIService API'.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetTrafficIncidentsVisibility">
+ <doc>
+ <line>SetTrafficIncidentsVisibility = Set the visibility of Traffic Incidents on the map.</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="visible" type="b" direction="in">
+ <doc>
+ <line>visible = If true, Traffic Incidents are shown on the map, else they are not shown.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetMapViewTheme">
+ <doc>
+ <line>SetMapViewTheme = This method configures the theme of a given map view instance</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewTheme" type="q" direction="in">
+ <doc>
+ <line>mapViewTheme = enum(INVALID,THEME_1,THEME_2,THEME_3, ... )</line>
+ <line>Note: Themes are implementation specific. Example: THEME_1 = day color, THEME_2 = night color</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetMapViewTheme">
+ <doc>
+ <line>GetMapViewTheme = This method returns the current theme of a given map view instance</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewTheme" type="q" direction="out">
+ <doc>
+ <line>mapViewTheme = enum(INVALID,THEME_1,THEME_2,THEME_3, ... )</line>
+ <line>Note: Themes are implementation specific. Example: THEME_1 = day color, THEME_2 = night color</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedMapViewThemes">
+ <doc>
+ <line>GetSupportedMapViewThemes = This method retrieves the supported mapview themes</line>
+ </doc>
+ <arg name="mapViewThemeList" type="aq" direction="out">
+ <doc>
+ <line>mapViewThemeList = array[mapViewTheme]</line>
+ <line>mapViewTheme = enum(INVALID,THEME_1,THEME_2,THEME_3, ... )</line>
+ <line>Note: Themes are implementation specific. Example: THEME_1 = day color, THEME_2 = night color</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="ConvertPixelCoordsToGeoCoords">
+ <doc>
+ <line>ConvertPixelCoordsToGeoCoords = This method converts pixel coordinates to geographical coordinates</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="pixelCoordinates" type="a(qq)" direction="in">
+ <doc>
+ <line>pixelCoordinates = array[struct(x,y)]</line>
+ <line>x = x-coordinate (x=0 indicates the first left pixel of the map view)</line>
+ <line>y = y-coordinate (y=0 indicates the first top pixel of the map view)</line>
+ </doc>
+ </arg>
+ <arg name="geoCoordinates" type="a(dd)" direction="out">
+ <doc>
+ <line>geoCoordinates = array[struct(lat,lon)]</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="ConvertGeoCoordsToPixelCoords">
+ <doc>
+ <line>ConvertGeoCoordsToPixelCoords = This method converts geographical coordinates into pixel coordinates</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="geoCoordinates" type="a(dd)" direction="in">
+ <doc>
+ <line>geoCoordinates = array[struct(lat,lon)]</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]</line>
+ </doc>
+ </arg>
+ <arg name="pixelCoordinates" type="a(qq)" direction="out">
+ <doc>
+ <line>pixelCoordinates = array[struct(x,y)]</line>
+ <line>x = x-coordinate (x=0 indicates the first left pixel of the map view)</line>
+ <line>y = y-coordinate (y=0 indicates the first top pixel of the map view)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="DisplayCustomElements">
+ <doc>
+ <line>DisplayCustomElements = This method visualizes a set of custom elements on the map</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="customElements" type="a(ss(dd)(nn))" direction="in">
+ <doc>
+ <line>customElements = array[struct(name,iconUri,coordinate,anchorPoint)]</line>
+ <line>name = name of the custom element</line>
+ <line>iconUri = uri to the icon of the custome element</line>
+ <line>coordinate = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]. Example: 8.321000</line>
+ <line>anchorPoint=struct(anchorX,anchorY)</line>
+ <line>anchorPoint defines which point on the icon is used as the reference for associating the icon to the map coordinate</line>
+ <line> (0,0) is the center of the icon </line>
+ <line> (-1,-1) is the top left corner of the icon </line>
+ <line> (1,1) is the bottom right corner of the icon </line>
+ <line>anchorX = anchor x value</line>
+ <line>anchorY = anchor y value</line>
+ </doc>
+ </arg>
+ <arg name="customElementHandles" type="au" direction="out">
+ <doc>
+ <line>customElementHandles = handles to the custom elements displayed on the map.
+ The order of the handles is the same as the order of custom elements specified in the argument 'customElements'.
+ Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="HideCustomElements">
+ <doc>
+ <line>HideCustomElements = This method hides a set of custom elements which were visualized by DisplayCustomElements</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="customElementHandles" type="au" direction="in">
+ <doc>
+ <line>customElementHandles = Custom element handles. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetDisplayedCustomElements">
+ <doc>
+ <line>GetDisplayedCustomElements = This method retrieves the visualized custom elements on the map</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="customElements" type="a{u(ss(dd)(nn))}" direction="out">
+ <doc>
+ <line>customElements = array[customElement]</line>
+ <line>customElement = tuple[customElementHandle,struct(name,iconUri,coordinate,anchorPoint)]</line>
+ <line>customElementHandle = Custom element handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>name = name of the custom element</line>
+ <line>iconUri = uri to the icon of the custome element</line>
+ <line>coordinate = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]. Example: 8.321000</line>
+ <line>anchorPoint=struct(anchorX,anchorY)</line>
+ <line>anchorPoint defines which point on the icon is used as the reference for associating the icon to the map coordinate</line>
+ <line> (0,0) is the center of the icon </line>
+ <line> (-1,-1) is the top left corner of the icon </line>
+ <line> (1,1) is the bottom right corner of the icon </line>
+ <line>anchorX = anchor x value</line>
+ <line>anchorY = anchor y value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SelectElementsOnMap">
+ <doc>
+ <line>SelectElementsOnMap = This method selects elements on the map view which are at the position specified by user input</line>
+ </doc>
+ <arg name="mapViewInstanceHandle" type="u" direction="in">
+ <doc>
+ <line>mapViewInstanceHandle = Map instance handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="pixelCoordinate" type="(qq)" direction="in">
+ <doc>
+ <line>pixelCoordinates = struct(x,y)</line>
+ <line>x = x-coordinate of the position on the map view specified by user input (x=0 indicates the first left pixel of the map view)</line>
+ <line>y = y-coordinate of the position on the map view specified by user input (y=0 indicates the first top pixel of the map view)</line>
+ </doc>
+ </arg>
+ <arg name="selectableTypes" type="aq" direction="in">
+ <doc>
+ <line>selectableTypes = array[selectableType]</line>
+ <line>selectableType = enum(INVALID,CUSTOM_ELEMENT,CURRENT_POSITION,WAYPOINT,POI,TRAFFIC_INCIDENT,ROUTE,GEOCOORDINATES)</line>
+ <line>Note: The order of priority by which the elements are selected is implementation dependent</line>
+ </doc>
+ </arg>
+ <arg name="maxNumberOfSelectedElements" type="q" direction="in">
+ <doc>
+ <line>maxNumberOfSelectedElements = maximum number of selected elements to return. If 0, all possible elements which can be selected will be returned</line>
+ </doc>
+ </arg>
+ <arg name="selectedElements" type="a(q(dd)v)" direction="out">
+ <doc>
+ <line>selectedElements = array[selectableType,struct(lat,lon),value]</line>
+ <line>selectableType = enum(INVALID,CUSTOM_ELEMENT,CURRENT_POSITION,WAYPOINT,POI,TRAFFIC_INCIDENT,ROUTE,GEOCOORDINATES)</line>
+ <line>lat = latitude of the selected element in format %3.6f. Range[-90:+90]</line>
+ <line>lon = longitude of the selected element in format %3.6f. Range[-180:+180]</line>
+ <line>selectableType = CUSTOM_ELEMENT, value = value of type '(uss(nn))' that expresses the extra data for a custom element</line>
+ <line>Note: the extra data for a custom element is expressed as a struct(customElementHandle,name,iconUri,struct(anchorX,anchorY))</line>
+ <line>selectableType = CURRENT_POSITION, value = null</line>
+ <line>selectableType = WAYPOINT, value = value of type '(uq)' that expresses the extra data for a waypoint</line>
+ <line>Note: the extra data for a waypoint is expressed as a struct(routeHandle,waypointIndex) where waypointIndex is the index of the waypoint on the route (the first waypoint is index 0)</line>
+ <line>selectableType = POI, value = value of type 'u' that expresses a POI handle </line>
+ <line>selectableType = TRAFFIC_INCIDENT, value = value of type 'i' that expresses a traffic incident identifier</line>
+ <line>selectableType = ROUTE, value = value of type 'u' that expresses a route handle </line>
+ <line>selectableType = GEOCOORDINATES, value = null</line>
+ </doc>
+ </arg>
+ </method>
+ </interface>
+</node>
diff --git a/api/map-viewer/genivi-mapviewer-session.xml b/api/map-viewer/genivi-mapviewer-session.xml
new file mode 100755
index 0000000..f2a8a12
--- /dev/null
+++ b/api/map-viewer/genivi-mapviewer-session.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/mapviewer" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.mapviewer.Session">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>Session = This interface offers functions to create and delete sessions</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CreateSession">
+ <doc>
+ <line>CreateSession = This method creates a new session</line>
+ </doc>
+ <arg name="client" type="s" direction="in">
+ <doc>
+ <line>client = name or identifier of the client application that requests a new session</line>
+ <line>The navigation core must internally associate this name to the returned session handle</line>
+ <line>This parameter can be used to identify the client application and determine if a given feature is enabled for it</line>
+ </doc>
+ </arg>
+ <arg name="sessionHandle" type="u" direction="out">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.mapviewer.Session.Error.NoMoreSessionHandles">
+ <doc>
+ <line>This error is generated if no more session handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="DeleteSession">
+ <doc>
+ <line>DeleteSession = This method deletes a session and its associated resources</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.mapviewer.Session.Error.SessionNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a session handle that is not available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetSessionStatus">
+ <doc>
+ <line>GetSessionStatus = This method returns whether a given session handle is available or not (for example because it was deleted)</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="sessionStatus" type="q" direction="out">
+ <doc>
+ <line>sessionStatus = enum(INVALID,AVAILABLE,NOT_AVAILABLE)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetAllSessions">
+ <doc>
+ <line>GetAllSessions = This method returns a list of all available sessions</line>
+ </doc>
+ <arg name="sessionsList" type="a(us)" direction="out">
+ <doc>
+ <line>sessionsList = array[struct(sessionHandle,client)]</line>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>client = name or identifier of the client application that requested the sessionHandle</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="SessionDeleted">
+ <doc>
+ <line>SessionDeleted = This signal is emitted when a session is deleted</line>
+ </doc>
+ <arg name="sessionHandle" type="u">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/map-viewer/introspect.xsd b/api/map-viewer/introspect.xsd
new file mode 100755
index 0000000..76ed7ef
--- /dev/null
+++ b/api/map-viewer/introspect.xsd
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified">
+ <!-- xmlns="introspect.dtd"
+ targetNamespace="introspect.dtd"> -->
+ <xs:element name="node">
+ <xs:annotation>
+ <xs:documentation> DTD for D-Bus Introspection data
+ </xs:documentation>
+ <xs:documentation> (C) 2005-02-02 David A. Wheeler; released under
+ the D-Bus licenses,
+ GNU GPL version 2 (or greater) and AFL 1.1 (or
+ greater)
+ </xs:documentation>
+ <xs:documentation> see D-Bus specification for documentation
+ </xs:documentation>
+ <xs:documentation> Method arguments SHOULD include "direction",
+ while
+ signal and error arguments SHOULD not (since there's no point).
+ The
+ DTD format can't express that subtlety.
+ </xs:documentation>
+ <xs:documentation> Generic metadata </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="node"/>
+ <xs:element name="interface" type="interfaceType"/>
+ </xs:choice>
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="interfaceType">
+ <xs:sequence>
+ <xs:element name="version" type="xs:string"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="method" type="methodType"/>
+ <xs:element name="signal" type="signalType"/>
+ <xs:element name="property" type="propertyType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="methodType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="signalType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="argType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="direction" default="in">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="in"/>
+ <xs:enumeration value="out"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="propertyType">
+ <xs:annotation>
+ <xs:documentation> AKA "attribute" </xs:documentation>
+ </xs:annotation>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="access" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="read"/>
+ <xs:enumeration value="write"/>
+ <xs:enumeration value="readwrite"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="annotationType">
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="value" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- proprietary extensions from LBS-EG -->
+ <!-- <xs:complexType name="versionType" /> -->
+ <xs:complexType name="docType">
+ <xs:sequence>
+ <!-- <xs:element maxOccurs="unbounded" name="line" type="lineType"/> -->
+ <xs:element maxOccurs="unbounded" name="line" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="statusType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Approved"/>
+ <xs:enumeration value="Pending"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="pocType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Yes"/>
+ <xs:enumeration value="No"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="obligationType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Mandatory"/>
+ <xs:enumeration value="Optional"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="errorType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- <xs:complexType name="lineType" /> -->
+</xs:schema>
diff --git a/api/map-viewer/introspect.xsl b/api/map-viewer/introspect.xsl
new file mode 100644
index 0000000..29cc34c
--- /dev/null
+++ b/api/map-viewer/introspect.xsl
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!--
+ Copyright (C) 2005 Lennart Poettering.
+
+ Licensed under the Academic Free License version 2.1
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+ <!-- v0.1 26-06-2011 Marco Residori: Added support for inline documentation (tags doc,line and version) -->
+ <!-- v0.2 12-01-2012 Marco Residori: Added support for inline documentation (tags status,type) -->
+ <!-- v0.3 18-01-2012 Marco Residori: Added support for inline documentation (tag error) -->
+ <!-- v0.4 14-03-2012 Marco Residori: Added support for property-type and property-access. Replaced tag 'type' with 'obligation' -->
+
+ <!-- $Id$ -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .type { font-weight: bold; font-size: 10pt }
+ .symbol { font-family: monospace }
+ .title { font-style: italic; color: blue }
+ .interface { padding: 10px; margin: 10px }
+
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ .status { font-weight: bold; font-size:6pt }
+ .obligation { font-weight: bold; font-size:6pt }
+ .error { font-style: italic; font-size:8pt; color: black}
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- interfaces -->
+ <xsl:for-each select="node/interface">
+ <div class="interface">
+ <h1>
+ <span class="keyword">interface</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <ul>
+ <xsl:apply-templates select="doc"/>
+ </ul>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- methods, signals and properties -->
+ <xsl:for-each select="method|signal|property">
+ <hr/>
+ <li>
+ <xsl:if test="status !=''">
+ <span class="status">[<xsl:value-of select="status"/>] </span>
+ </xsl:if>
+ <xsl:if test="obligation !=''">
+ <span class="obligation">[<xsl:value-of select="obligation"/>] </span>
+ </xsl:if>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">
+ <xsl:value-of select="name()"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="keyword">
+ <xsl:value-of select="@access"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- arguments -->
+ <xsl:for-each select="arg">
+ <br/>
+ <xsl:apply-templates select="doc"/>
+ <li>
+ <span class="keyword">
+ <xsl:choose>
+ <xsl:when test="@direction !=''">
+ <xsl:value-of select="@direction"/>
+ </xsl:when>
+ <xsl:when test="name(..) ='signal'">
+ out
+ </xsl:when>
+ <xsl:otherwise>
+ in
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ </li>
+ </xsl:for-each>
+ <br/>
+ <!-- errors -->
+ <xsl:apply-templates select="error"/>
+ <br/>
+ </ul>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </div>
+ </xsl:for-each>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="annotation">
+ <li>
+ <span class="keyword">annotation</span>
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ <xsl:text> = </xsl:text>
+ <code>
+ <xsl:value-of select="@value"/>
+ </code>
+ </li>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+ <xsl:template match="error">
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">error</span>
+ <xsl:text> </xsl:text>
+ <span class="error">
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ </span>
+ <xsl:element name="br"/>
+ <br/>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/navigation-core/constants.xsl b/api/navigation-core/constants.xsl
new file mode 100644
index 0000000..7616ebb
--- /dev/null
+++ b/api/navigation-core/constants.xsl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!-- 09.3.2011 Marco Residori: First Draft -->
+ <!-- 14.3.2011 Marco Residori: Improved layout -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .id { font-style: italic; font-size:8pt; }
+ .title { font-style: italic; color: blue }
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- definitions -->
+ <xsl:apply-templates select="constants"/>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="constants">
+ <div class="constants">
+ <h1>
+ <span class="keyword">constants</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <xsl:apply-templates select="doc"/>
+ <xsl:for-each select="id">
+ <hr/>
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="id"><xsl:value-of select="@name"/> = <xsl:value-of select="@value"/></span>
+ </li>
+ </xsl:for-each>
+ </div>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/navigation-core/enum.xsl b/api/navigation-core/enum.xsl
new file mode 100644
index 0000000..4c093e8
--- /dev/null
+++ b/api/navigation-core/enum.xsl
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ************************************************************************
+* Component Name: Navit POC
+* Author: Martin Schaller <martin.schaller@it-schaller.de>
+*
+* Copyright (C) 2012, GENIVI Alliance, Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+************************************************************************ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <xsl:output method="text" encoding="iso-8859-15"/>
+ <xsl:template match="constants">
+ <xsl:variable name="constants" select="translate(@name,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
+/* This is an automatically generated file, do not edit */
+
+enum GENIVI_<xsl:value-of select="$constants"/>_Constants {<xsl:for-each select="id">
+ GENIVI_<xsl:value-of select="$constants"/>_<xsl:value-of select="translate(@name,'-','_')"/> = <xsl:value-of select="@value"/>,</xsl:for-each>
+};
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/navigation-core/genivi-navigationcore-configuration.xml b/api/navigation-core/genivi-navigationcore-configuration.xml
new file mode 100755
index 0000000..8585e50
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-configuration.xml
@@ -0,0 +1,194 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.Configuration">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>Configuration = This interface offers functions to set and retrieve configuration parameters</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetUnitsOfMeasurement">
+ <doc>
+ <line>SetUnitsOfMeasurement = This method sets the units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="in">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = tuple (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'q', that represents an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetUnitsOfMeasurement">
+ <doc>
+ <line>GetUnitsOfMeasurement = This method retrieves the units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="out">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = tuple (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'q', that represents an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedUnitsOfMeasurement">
+ <doc>
+ <line>GetSupportedUnitsOfMeasurement = This method retrieves the supported units of measurement</line>
+ </doc>
+ <arg name="unitsOfMeasurementList" type="a{qv}" direction="out">
+ <doc>
+ <line>unitsOfMeasurementList = array[unitsOfMeasurement]</line>
+ <line>unitsOfMeasurement = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,LENGTH, ... )</line>
+ <line>key = LENGTH, value = value of type 'aq'; 'q' is an enum(INVALID,METER,MILE, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetTimeFormat">
+ <doc>
+ <line>SetTimeFormat = This method sets the time format</line>
+ </doc>
+ <arg name="timeFormat" type="q" direction="in">
+ <doc>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetTimeFormat">
+ <doc>
+ <line>GetTimeFormat = This method retrieves the time format</line>
+ </doc>
+ <arg name="timeFormat" type="q" direction="out">
+ <doc>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedTimeFormats">
+ <doc>
+ <line>GetSupportedTimeFormats = This method retrieves the supported time formats</line>
+ </doc>
+ <arg name="timeFormatList" type="aq" direction="out">
+ <doc>
+ <line>timeFormatList = array[timeFormat]</line>
+ <line>timeFormat = enum(INVALID,12H,24H, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetCoordinatesFormat">
+ <doc>
+ <line>SetCoordinatesFormat = This method sets the coordinates format</line>
+ </doc>
+ <arg name="coordinatesFormat" type="q" direction="in">
+ <doc>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetCoordinatesFormat">
+ <doc>
+ <line>GetCoordinatesFormat = This method retrieves the coordinates format</line>
+ </doc>
+ <arg name="coordinatesFormat" type="q" direction="out">
+ <doc>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedCoordinatesFormats">
+ <doc>
+ <line>GetSupportedCoordinatesFormats = This method retrieves the supported coordinates formats</line>
+ </doc>
+ <arg name="coordinatesFormatList" type="aq" direction="out">
+ <doc>
+ <line>coordinatesFormatList = array[coordinatesFormat]</line>
+ <line>coordinatesFormat = enum(INVALID,DEGREES,MINUTES,SECONDS, ... )</line>
+ <line>DEGREES format = d.dº</line>
+ <line>MINUTES format = dºm.m'</line>
+ <line>SECONDS format = dºm's"</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetLocale">
+ <doc>
+ <line>SetLocale = This method sets the current language and country</line>
+ </doc>
+ <arg name="languageCode" type="s" direction="in">
+ <doc>
+ <line>languageCode = ISO 639‐3 language code (lower case)</line>
+ </doc>
+ </arg>
+ <arg name="countryCode" type="s" direction="in">
+ <doc>
+ <line>countryCode = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetLocale">
+ <doc>
+ <line>GetLocale = This method retrieves the current language and country</line>
+ </doc>
+ <arg name="languageCode" type="s" direction="out">
+ <doc>
+ <line>languageCode = ISO 639‐3 language code (lower case)</line>
+ </doc>
+ </arg>
+ <arg name="countryCode" type="s" direction="out">
+ <doc>
+ <line>countryCode = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedLocales">
+ <doc>
+ <line>GetSupportedLocales = This method retrieves the supported languages and countries</line>
+ </doc>
+ <arg name="localeList" type="a(ss)" direction="out">
+ <doc>
+ <line>localeList = array[struct(languageCode,countryCode)]</line>
+ <line>languageCode = ISO 639-3 language code (lower case)</line>
+ <line>countryCode = ISO 3166-1 alpha 3 country code (upper case)</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="ConfigurationChanged">
+ <doc>
+ <line>ConfigurationChanged = This signal is sent to the clients when one or more configuration settings changes</line>
+ </doc>
+ <arg name="changedSettings" type="aq">
+ <doc>
+ <line>changedSettings = array[setting]</line>
+ <line>setting = enum(INVALID,UNITS_OF_MEASUREMENT,LOCALE,TIME_FORMAT,COORDINATES_FORMAT, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/navigation-core/genivi-navigationcore-constants.xml b/api/navigation-core/genivi-navigationcore-constants.xml
new file mode 100755
index 0000000..64993cc
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-constants.xml
@@ -0,0 +1,212 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="constants.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<constants name="NavigationCore">
+ <version>3.0.0-alpha (23-10-2013)</version>
+ <doc>
+ <line>This document defines the constants used in the NavigationCore APIs</line>
+ </doc>
+
+ <id name="INVALID" value="0x0000" />
+ <id name="DEFAULT" value="0xfffe" />
+ <id name="ALL" value="0xffff" />
+
+ <id name="AVAILABLE" value="0x0001" />
+ <id name="NOT_AVAILABLE" value="0x0002" />
+
+ <id name="TIME_FORMAT" value="0x0003" />
+ <id name="12H" value="0x0004" />
+ <id name="24H" value="0x0005" />
+
+ <id name="COORDINATES_FORMAT" value="0x0006" />
+ <id name="DEGREES" value="0x0007" />
+ <id name="MINUTES" value="0x0008" />
+ <id name="SECONDS" value="0x0009" />
+
+ <id name="TIMESTAMP" value="0x0010" />
+ <id name="TIMEZONE_OFFSET" value="0x0011" />
+ <id name="DAYLIGHT_OFFSET" value="0x0012" />
+
+ <id name="LOCALE" value="0x0025" />
+
+ <id name="UNITS_OF_MEASUREMENT" value="0x0030" />
+ <id name="LENGTH" value="0x0031" />
+ <id name="METER" value="0x0032" />
+ <id name="MILE" value="0x0033" />
+ <id name="KM" value="0x0034" />
+ <id name="YARD" value="0x0035" />
+ <id name="FOOT" value="0x0036" />
+
+ <id name="DISABLED_PROMPT" value="0x0041" />
+ <id name="AUTOMATIC_PROMPT" value="0x0042" />
+ <id name="MANUAL_PROMPT" value="0x0043" />
+
+ <id name="CRUISE" value="0x0050" />
+ <id name="MANEUVER_APPEARED" value="0x0051" />
+ <id name="PRE_ADVICE" value="0x0052" />
+ <id name="ADVICE" value="0x0053" />
+ <id name="PASSED" value="0x0054" />
+
+ <id name="ACTIVE" value="0x0060" />
+ <id name="INACTIVE" value="0x0061" />
+
+ <id name="STRAIGHT_ON" value="0x0070" />
+ <id name="CROSSROAD" value="0x0071" />
+ <id name="ROUNDABOUT" value="0x0072" />
+ <id name="HIGHWAY_ENTER" value="0x0073" />
+ <id name="HIGHWAY_EXIT" value="0x0074" />
+ <id name="HIGHWAY_CHANGE_LANE" value="0x0075" />
+ <id name="DESTINATION" value="0x0076" />
+ <id name="WAYPOINT" value="0x0077" />
+ <id name="TURN" value="0x0078" />
+ <id name="BIFURCATION" value="0x0079" />
+
+ <id name="LEFT" value="0x0080" />
+ <id name="SLIGHT_LEFT" value="0x0081" />
+ <id name="HARD_LEFT" value="0x0082" />
+ <id name="RIGHT" value="0x0083" />
+ <id name="SLIGHT_RIGHT" value="0x0084" />
+ <id name="HARD_RIGHT" value="0x0085" />
+ <id name="UTURN_RIGHT" value="0x0086" />
+ <id name="UTURN_LEFT" value="0x0087" />
+
+ <id name="ALL_MANUAL" value="0x0090" />
+ <id name="ALL_AUTOMATIC" value="0x0091" />
+ <id name="TRAFFIC_MANUAL" value="0x0092" />
+ <id name="OFF_ROUTE_MANUAL" value="0x0093" />
+
+ <id name="LATITUDE" value="0x00a0" />
+ <id name="LONGITUDE" value="0x00a1" />
+ <id name="ALTITUDE" value="0x00a2" />
+
+ <id name="HEADING" value="0x00a3" />
+ <id name="SPEED" value="0x00a4" />
+ <id name="CLIMB" value="0x00a5" />
+
+ <id name="COUNTRY" value="0x00a6" />
+ <id name="STATE" value="0x00a7" />
+ <id name="CITY" value="0x00a8" />
+ <id name="ZIPCODE" value="0x00a9" />
+ <id name="STREET" value="0x00aa" />
+ <id name="HOUSENUMBER" value="0x00ab" />
+ <id name="CROSSING" value="0x00ac" />
+ <id name="DISTRICT" value="0x00ad" />
+ <id name="PHONENUMBER" value="0x00ae" />
+ <id name="POINAME" value="0x00af" />
+ <id name="TOWNCENTER" value="0x00b0" />
+ <id name="LOCATION_INPUT" value="0x00b1" />
+ <id name="FULL_ADDRESS" value="0x00b2" />
+ <id name="COUNTRYCODE" value="0x00b3" />
+ <id name="HOUSENAME" value="0x00b4" />
+
+ <id name="NOT_STARTED" value="0x0c0" />
+ <id name="SEARCHING" value="0x00c1" />
+ <id name="FINISHED" value="0x00c2" />
+
+ <id name="OK" value="0x00d0" />
+ <id name="UNKNOWN" value="0x00d1" />
+ <id name="AMBIGUOUS" value="0x00d2" />
+ <id name="INCONSISTENT" value="0x00d3" />
+
+ <id name="GNSS_FIX_STATUS" value="0x00e0" />
+ <id name="DR_STATUS" value="0x00e1" />
+ <id name="MM_STATUS" value="0x00e2" />
+ <id name="SIMULATION_MODE" value="0x00e3" />
+
+ <id name="MATCH_TYPE" value="0x00f0" />
+ <id name="ON_ROAD" value="0x00f1" />
+ <id name="OFF_ROAD" value="0x00f2" />
+ <id name="ON_FERRY" value="0x00f3" />
+ <id name="IN_TUNNEL" value="0x00f4" />
+ <id name="ON_CARPARK" value="0x00f5" />
+
+ <id name="NO_FIX" value="0x0100" />
+ <id name="TIME_FIX" value="0x0101" />
+ <id name="2D_FIX" value="0x0102" />
+ <id name="3D_FIX" value="0x0103" />
+
+ <id name="SEGMENT_ID" value="0x0110" />
+ <id name="DIRECTION_ON_SEGMENT" value="0x0112" />
+ <id name="DISTANCE_ON_SEGMENT" value="0x0113" />
+
+ <id name="INTERMEDIATE_POINTS" value="0x0120" />
+ <id name="WAYPOINT_TYPE" value="0x0121" />
+ <id name="SOFT_POINT" value="0x0122" />
+ <id name="HARD_POINT" value="0x0123" />
+
+ <id name="CALCULATION_OK" value="0x0130" />
+ <id name="NO_POSITION" value="0x0131" />
+
+ <id name="UNMATCHED_POSITION" value="0x0132" />
+ <id name="UNREACHABLE_DESTINATION" value="0x0133" />
+ <id name="UNFULFILLED_PREFERENCE_MODE" value="0x0134" />
+
+ <id name="LINK-ID" value="0x0140" />
+ <id name="START_LATITUDE" value="0x0141" />
+ <id name="END_LATITUDE" value="0x0142" />
+ <id name="START_LONGITUDE" value="0x0143" />
+ <id name="END_LONGITUDE" value="0x0144" />
+ <id name="START_ALTITUDE" value="0x0145" />
+ <id name="END_ALTITUDE" value="0x0146" />
+ <id name="ROAD_NAME" value="0x0147" />
+ <id name="DISTANCE" value="0x0148" />
+ <id name="TIME" value="0x0149" />
+ <id name="MANEUVER" value="0x014a" />
+ <id name="INSTRUCTION" value="0x014b" />
+ <id name="BORDER_CROSSING" value="0x014c" />
+ <id name="ADDITIONAL_INFORMATION" value="0x014d" />
+ <id name="ROAD_NUMBER" value="0x014e" />
+ <id name="START_OFFSET" value="0x014f" />
+
+ <id name="FASTEST" value="0x0160" />
+ <id name="SHORTEST" value="0x0161" />
+ <id name="ECOLOGICAL" value="0x0162" />
+ <id name="SCENIC" value="0x0163" />
+ <id name="EASY" value="0x0164" />
+ <id name="BALANCED" value="0x0166" />
+ <id name="CHEAPEST" value="0x0167" />
+
+ <id name="FERRY" value="0x0170" />
+ <id name="TOLL_ROADS" value="0x0171" />
+ <id name="TUNNELS" value="0x0172" />
+ <id name="HIGHWAYS_MOTORWAYS" value="0x0173" />
+ <id name="VEHICLE_SIZE_LIMIT" value="0x0174" />
+ <id name="CRIME_AREAS" value="0x0175" />
+
+ <id name="BY_CAR" value="0x0180" />
+ <id name="ON_FOOT" value="0x0181" />
+ <id name="LONG_RANGE_TRAINS" value="0x0182" />
+ <id name="PUBLIC_TRANSPORTATION" value="0x0183" />
+ <id name="BY_BICYCLE" value="0x0184" />
+ <id name="BY_TRUCK" value="0x0185" />
+
+ <id name="ARRIVAL_TIME" value="0x018a" />
+ <id name="ARRIVAL_DATE" value="0x018b" />
+ <id name="DEPARTURE_TIME" value="0x018c" />
+ <id name="DEPARTURE_DATE" value="0x018d" />
+ <id name="TOTAL_TIME" value="0x018e" />
+ <id name="TOTAL_DISTANCE" value="0x018f" />
+
+ <id name="PROHIBIT" value="0x0190" />
+ <id name="AVOID" value="0x0191" />
+ <id name="USE" value="0x0192" />
+ <id name="PREFER" value="0x0193" />
+ <id name="IGNORE" value="0x0194" />
+
+ <id name="TRAFFIC_REALTIME" value="0x0200" />
+
+ <id name="TRAFFIC" value="0x0210" />
+ <id name="OFF_ROUTE" value="0x0211" />
+ <id name="MANUAL" value="0x0212" />
+
+ <id name="SIMULATION_STATUS_NO_SIMULATION" value="0x0220" />
+ <id name="SIMULATION_STATUS_RUNNING" value="0x0221" />
+ <id name="SIMULATION_STATUS_PAUSED" value="0x0222" />
+ <id name="SIMULATION_STATUS_FIXED_POSITION" value="0x0223" />
+
+</constants>
diff --git a/api/navigation-core/genivi-navigationcore-guidance.xml b/api/navigation-core/genivi-navigationcore-guidance.xml
new file mode 100755
index 0000000..7217fb6
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-guidance.xml
@@ -0,0 +1,373 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.Guidance">
+ <version>3.0.0-alpha (23-10-2013)</version>
+ <doc>
+ <line>Guidance = This interface offers functions that implement the route-guidance functionality of a navigation system</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="StartGuidance">
+ <doc>
+ <line>StartGuidance = This method starts the guidance for a given route</line>
+ <line>The guidanceStatus will change to ACTIVE</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="StopGuidance">
+ <doc>
+ <line>StopGuidance = This method stops the guidance</line>
+ <line>The guidanceStatus will change to INACTIVE</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetVoiceGuidance">
+ <doc>
+ <line>SetVoiceGuidance = This method switch on/off the voice guidance</line>
+ </doc>
+ <arg name="activate" type="b" direction="in">
+ <doc>
+ <line>activation of the voice guidance</line>
+ </doc>
+ </arg>
+ <arg name="voice" type="s" direction="in">
+ <doc>
+ <line>kind of voice (to be defined)</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Guidance.Error.VoiceNotAllowed">
+ <doc>
+ <line>This error is generated if the voice generation is inactive </line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetGuidanceDetails">
+ <doc>
+ <line>GetGuidanceDetails = This method retrieves guidance information </line>
+ </doc>
+ <arg name="voiceGuidance" type="b" direction="out">
+ <doc>
+ <line>voiceGuidance = if TRUE voice guidance is active</line>
+ </doc>
+ </arg>
+ <arg name="vehicleOnTheRoad" type="b" direction="out">
+ <doc>
+ <line>vehicleOnTheRoad = if TRUE the vehicle is located on the road network</line>
+ </doc>
+ </arg>
+ <arg name="isDestinationReached" type="b" direction="out">
+ <doc>
+ <line>isDestinationReached = if TRUE the destination has been reached</line>
+ </doc>
+ </arg>
+ <arg name="maneuver" type="q" direction="out">
+ <doc>
+ <line>maneuver = enum(INVALID,CRUISE,MANEUVER_APPEARED,PRE_ADVICE,ADVICE,PASSED, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="PlayVoiceManeuver">
+ <doc>
+ <line>PlayVoiceManeuver = This method plays or repeats the last voice guidance</line>
+ </doc>
+ <error name="org.genivi.navigationcore.Guidance.Error.VoiceNotAllowed">
+ <doc>
+ <line>This error is generated if the voice generation is inactive </line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetWaypointInformation">
+ <doc>
+ <line>GetWaypointInformation = This method retrieves the information on the remaining way points of the route. A point can be the final destination as well as a stage defined by the user. The returned waypoints are ordered by their 'number'.</line>
+ </doc>
+ <arg name="requestedNumberOfWaypoints" type="q" direction="in">
+ <doc>
+ <line>requestedNumberOfWaypoints = the number of requested waypoints. If 0, all waypoints will be returned.</line>
+ </doc>
+ </arg>
+ <arg name="numberOfWaypoints" type="q" direction="out">
+ <doc>
+ <line>numberOfWaypoints = the number of retrieved waypoints(NOTE: the number corresponds to the number of elements in the array)</line>
+ </doc>
+ </arg>
+ <arg name="waypointsList" type="a(uuiqnnbq)" direction="out">
+ <doc>
+ <line>array[struct(waypointOffset,travelTime,direction,side,timeZone,daylightSavingTime,isDestination,number)]</line>
+ <line>waypointOffset = the offset of the way point in meters from the beginning of the route</line>
+ <line>travelTime = time to reach the way point in seconds</line>
+ <line>direction = direction of the way point in degree relatively to the North. Range [0:360]</line>
+ <line>side = enum(LEFT,RIGHT,NOT_AVAILABLE)</line>
+ <line>timeZone = time zone of the way point. It is expressed as the time difference from the UTC in minutes</line>
+ <line>daylightSavingTime = daylight saving time of the way point. It is expressed as the time difference from the UTC in minutes</line>
+ <line>isDestination = if TRUE the way point is the destination</line>
+ <line>number = number of the next waypoint (related to the waypoint list, first way point index is 0)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetDestinationInformation">
+ <doc>
+ <line>This method retrieves the information on the final destination</line>
+ </doc>
+ <arg name="offset" type="u" direction="out">
+ <doc>
+ <line>offset = offset of the destination in meter from the beginning of the route</line>
+ </doc>
+ </arg>
+ <arg name="travelTime" type="u" direction="out">
+ <doc>
+ <line>travelTime = time to reach the destination in second</line>
+ </doc>
+ </arg>
+ <arg name="direction" type="i" direction="out">
+ <doc>
+ <line>direction = direction of the destination in degree relatively to the North. Range [0:360]</line>
+ </doc>
+ </arg>
+ <arg name="side" type="q" direction="out">
+ <doc>
+ <line>side = enum(LEFT,RIGHT,NOT_AVAILABLE)</line>
+ </doc>
+ </arg>
+ <arg name="timeZone" type="n" direction="out">
+ <doc>
+ <line>timeZone = time zone of the destination. It is expressed as the time difference from the UTC in minutes</line>
+ </doc>
+ </arg>
+ <arg name="daylightSavingTime" type="n" direction="out">
+ <doc>
+ <line>daylightSavingTime = daylight saving time of the destination. It is expressed as the time difference from the UTC in minutes</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="VehicleLeftTheRoadNetwork">
+ <doc>
+ <line>VehicleLeftTheRoadNetwork = This signal is emitted when the vehicle exits from the road network</line>
+ </doc>
+ </signal>
+ <signal name="GuidanceStatusChanged">
+ <doc>
+ <line>GuidanceStatusChanged = This signal is emitted when the guidance status changes</line>
+ </doc>
+ <arg name="guidanceStatus" type="q">
+ <doc>
+ <line>guidanceStatus = enum(INVALID,ACTIVE,INACTIVE)</line>
+ <line>ACTIVE means that NavigationCore is providing guidance information</line>
+ <line>INACTIVE means that NavigationCore is not providing guidance information</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Active route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value. Should be ignored when guidanceStatus=INACTIVE.</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="WaypointReached">
+ <doc>
+ <line>WaypointReached = This signal is emitted when the destination is reached</line>
+ </doc>
+ <arg name="isDestination" type="b">
+ <doc>
+ <line>isDestination = flag. TRUE means that the way point is the destination</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="ManeuverChanged">
+ <doc>
+ <line>This signal is emitted each time a maneuver event is going</line>
+ </doc>
+ <arg name="maneuver" type="q">
+ <doc>
+ <line>maneuver = enum(INVALID,CRUISE,MANEUVER_APPEARED,PRE_ADVICE,ADVICE,PASSED, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="PositionOnRouteChanged">
+ <doc>
+ <line>PositionOnRouteChanged = This signal is emitted when the position on the route changes</line>
+ </doc>
+ <arg name="offsetOnRoute" type="u">
+ <doc>
+ <line>offsetOnRoute = the current offset on the route in meters from the beginning of the route</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="GetManeuversList">
+ <doc>
+ <line>GetManeuversList = This method retrieves the list of next maneuvers</line>
+ </doc>
+ <arg name="requestedNumberOfManeuvers" type="q" direction="in">
+ <doc>
+ <line>requestedNumberOfManeuvers = the number of requested maneuvers</line>
+ </doc>
+ </arg>
+ <arg name="maneuverOffset" type="u" direction="in">
+ <doc>
+ <line>maneuverOffset = the offset of the first maneuver to retrieve</line>
+ </doc>
+ </arg>
+ <arg name="numberOfManeuvers" type="q" direction="out">
+ <doc>
+ <line>numberOfManeuvers = the number of retrieved maneuvers</line>
+ <line>Note: the number corresponds to the number of elements in the array</line>
+ </doc>
+ </arg>
+ <arg name="maneuversList" type="a(ssqqua(uui(qq)(qs)))" direction="out">
+ <doc>
+ <line>array[struct(roadNumberAfterManeuver,roadNameAfterManeuver,roadPropertyAfterManeuver,drivingSide,offsetOfNextManeuver,array[struct(offsetOfManeuver,travelTime,direction,struct(maneuver,maneuverLength),struct(maneuverDirection,exitNumber))])]</line>
+ <line>roadNumberAfterManeuver = the number of the road after the maneuver (if a road has multiple road numbers, they will be separated by slashes ('/') and combined into one string)</line>
+ <line>roadNameAfterManeuver = the name of the road after the maneuver</line>
+ <line>roadPropertyAfterManeuver = enum(TOLL_ROADS, ... ,DEFAULT)</line>
+ <line>drivingSide = enum(LEFT,RIGHT)</line>
+ <line>offsetOfNextManeuver = the offset of the next maneuver in meters from the beginning of the route (next maneuver is the second maneuver on the route ahead)</line>
+ <line>offsetOfManeuver = the offset of the current maneuver in meters from the beginning of the route (current maneuver is the first maneuver on the route ahead)</line>
+ <line>travelTime = travel time to the basic maneuver in seconds</line>
+ <line>direction = direction of the maneuver in degree relatively to the North. Range [0:360]</line>
+ <line>maneuver = enum(INVALID,STRAIGHT_ON,TURN,CROSSROAD,ROUNDABOUT,HIGHWAY_ENTER,HIGHWAY_EXIT,BIFURCATION,HIGHWAY_CHANGE_LANE,DESTINATION,WAYPOINT)</line>
+ <line>maneuverLength = when maneuver=ROUNDABOUT the length of the route segment between the entry to and the exit from the roundabout; 0 otherwise.</line>
+ <line>maneuverDirection = enum(INVALID,STRAIGHT_ON,LEFT,SLIGHT_LEFT,HARD_LEFT,RIGHT,SLIGHT_RIGHT,HARD_RIGHT,UTURN_RIGHT, UTURN_LEFT)</line>
+ <line>exitNumber = when maneuver=ROUNDABOUT or maneuver=HIGHWAY_EXIT the exit number; null otherwise.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Guidance.Error.NoManeuver">
+ <doc>
+ <line>This error is generated in case there's no maneuver until the destination</line>
+ </doc>
+ </error>
+ </method>
+ <signal name="VehicleLeftTheRoute">
+ <doc>
+ <line>VehicleLeftTheRoute = This signal is emitted when the vehicle has left the route</line>
+ </doc>
+ </signal>
+ <method name="SetRouteCalculationMode">
+ <doc>
+ <line>SetRouteCalculationMode = This method configures the way the navigation application wants the navigation core to behave of reroute trigger</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeCalculationMode" type="q" direction="in">
+ <doc>
+ <line>routeCalculationMode = enum(INVALID,ALL_MANUAL,ALL_AUTOMATIC,TRAFFIC_MANUAL,OFF_ROUTE_MANUAL)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SkipNextManeuver">
+ <doc>
+ <line>SkipNextManeuver = This method allows to jump behind the current maneuver</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Guidance.Error.NoManeuver">
+ <doc>
+ <line>This error is generated in case there's no maneuver until the destination</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetGuidanceStatus">
+ <doc>
+ <line>GetGuidanceStatus = This method retrieves the guidance status</line>
+ </doc>
+ <arg name="guidanceStatus" type="q" direction="out">
+ <doc>
+ <line>guidanceStatus = enum(INVALID,ACTIVE,INACTIVE)</line>
+ <line>ACTIVE means that NavigationCore is providing guidance information</line>
+ <line>INACTIVE means that NavigationCore is not providing guidance information</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="out">
+ <doc>
+ <line>routeHandle = Active route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value. Should be ignored when guidanceStatus=INACTIVE</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetVoiceGuidanceSettings">
+ <doc>
+ <line>SetVoiceGuidanceSettings = This method sets the voice guidance settings</line>
+ </doc>
+ <arg name="promptMode" type="q" direction="in">
+ <doc>
+ <line>mode = enum(INVALID,DISABLED_PROMPT,AUTOMATIC_PROMPT,MANUAL_PROMPT, ... )</line>
+ <line>MANUAL_PROMPT means that a client application can ask the NavigationCore to play the voice prompts</line>
+ <line>AUTOMATIC_PROMPT means that the voice prompts will be requested by NavigationCore automatically</line>
+ <line>DISABLED_PROMPT means that the client application will the voice generator component directly to play the messages (bypassing the NavigationCore)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetVoiceGuidanceSettings">
+ <doc>
+ <line>GetVoiceGuidanceSettings = This method returns the used voice guidance settings</line>
+ </doc>
+ <arg name="promptMode" type="q" direction="out">
+ <doc>
+ <line>mode = enum(INVALID,DISABLED_PROMPT,AUTOMATIC_PROMPT,MANUAL_PROMPT, ... )</line>
+ <line>MANUAL_PROMPT means that a client application can ask the NavigationCore to play the voice prompts</line>
+ <line>AUTOMATIC_PROMPT means that the voice prompts will be requested by NavigationCore automatically</line>
+ <line>DISABLED_PROMPT means that the client application will the voice generator component directly to play the messages (bypassing the NavigationCore)</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="PositionToRouteChanged">
+ <doc>
+ <line>PositionToRouteChanged = This signal is emitted when the vehicle is off-the-road network and either the heading or the distance (or both) to the closest point on the active route changes</line>
+ </doc>
+ <arg name="distance" type="u">
+ <doc>
+ <line>distance = distance in meters to the closest point on the active route</line>
+ </doc>
+ </arg>
+ <arg name="direction" type="i">
+ <doc>
+ <line>direction = direction in degrees relatively to the closest point on the active route. Range [0:360]</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="ActiveRouteChanged">
+ <doc>
+ <line>ActiveRouteChanged = This signal is emitted when the active route changes</line>
+ </doc>
+ <arg name="changeCause" type="q">
+ <doc>
+ <line>changeCause = enum(INVALID,TRAFFIC,OFF_ROUTE,MANUAL,...)</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/navigation-core/genivi-navigationcore-locationinput.xml b/api/navigation-core/genivi-navigationcore-locationinput.xml
new file mode 100755
index 0000000..6c57400
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-locationinput.xml
@@ -0,0 +1,531 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.LocationInput">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>LocationInput = This interface offers functions that implement the location-input functionality of a navigation system</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line> version = struct(major,minor,micro,date)</line>
+ <line> major = when the major version changes, then backward compatibility with previous releases is not granted</line>
+ <line> minor = when the minor version changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line> micro = when the micro version changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line> date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CreateLocationInput">
+ <doc>
+ <line>CreateLocationInput = This method creates a new location input and retrieves a handle</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="out">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.LocationInput.Error.NoMoreLocationInputHandles">
+ <doc>
+ <line>This error is generated if no more location input handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="DeleteLocationInput">
+ <doc>
+ <line>DeleteLocationInput = This method deletes a location input and its associated resources</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.LocationInput.Error.LocationInputNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a location input handle that is not available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetSupportedAddressAttributes">
+ <doc>
+ <line>GetSupportedAddressAttributes = This method retrieves the supported address attributes</line>
+ </doc>
+ <arg name="addressAttributesList" type="aq" direction="out">
+ <doc>
+ <line>addressAttributesList = array[attribute]</line>
+ <line>attribute = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,STATE,CITY,ZIPCODE,STREET,HOUSENUMBER,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetAddress">
+ <doc>
+ <line>SetAddress = This method sets the address to start with for the LocationInput identified by the given handle</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="address" type="a{qv}" direction="in">
+ <doc>
+ <line>address = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range[-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range[-180:+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetSelectionCriterion">
+ <doc>
+ <line>SetSelectionCriterion = This method sets the selection criterion for the current speller, search input and the corresponding result-lists for the current session</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="selectionCriterion" type="q" direction="in">
+ <doc>
+ <line>selectionCriterion = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="Spell">
+ <doc>
+ <line>Spell = This method sends the next spell input for the current session</line>
+ <line>Note: when a spell is started the entries of the search are removed</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="inputCharacter" type="s" direction="in">
+ <doc>
+ <line>inputString = last input character (UTF-8) (0x08(Backspace) for delete last character, 0x0D(Carriage Return) for delete entire input)</line>
+ </doc>
+ </arg>
+ <arg name="maxWindowSize" type="q" direction="in">
+ <doc>
+ <line>maxWindowSize = maximum number of elements that should be returned as result</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="Search">
+ <doc>
+ <line>Search = This method sends the search input for the current session</line>
+ <line>Note: when a search is started the entries of the spell input are removed</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="inputString" type="s" direction="in">
+ <doc>
+ <line>inputString = contains the String, that is searched</line>
+ </doc>
+ </arg>
+ <arg name="maxWindowSize" type="q" direction="in">
+ <doc>
+ <line>maxWindowSize = maximum number of elements that should be returned as result</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="CurrentSelectionCriterion">
+ <doc>
+ <line>CurrentSelectionCriterion = This signal notifies the SelectionCriterion for the current speller input or search.</line>
+ <line>Note: when no SelectionCriterion was set or an input was finished, the SelectionCriterion has the value INVALID</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="selectionCriterion" type="q">
+ <doc>
+ <line>selectionCriterion = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="SearchStatus">
+ <doc>
+ <line>SearchStatus = This signal updates the search status of the specified session</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="statusValue" type="q">
+ <doc>
+ <line>statusValue = enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="SpellResult">
+ <doc>
+ <line>SpellResult = This signal notifies the result of the previous Spell method</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="uniqueString" type="s">
+ <doc>
+ <line>uniqueString = unique string derived from spell input (i.e. including auto-completion if applicable)</line>
+ </doc>
+ </arg>
+ <arg name="validCharacters" type="s">
+ <doc>
+ <line>validCharacters = set of (UTF-8 encoded) characters valid for next input (unified in a single string). A Backspace(0x08) is returned if the input character passed to the Spell method was invalid</line>
+ </doc>
+ </arg>
+ <arg name="fullMatch" type="b">
+ <doc>
+ <line>fullMatch = flag indicating whether the value in UniqueCharacters is already a full match for an existing list entry</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="RequestListUpdate">
+ <doc>
+ <line>RequestListUpdate = This method sends a request for more list elements for the current session</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="offset" type="q" direction="in">
+ <doc>
+ <line>offset = starting offset of the newly requested list elements</line>
+ </doc>
+ </arg>
+ <arg name="maxWindowSize" type="q" direction="in">
+ <doc>
+ <line>maxWindowSize = maximum number of elements that should be returned as result</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="SearchResultList">
+ <doc>
+ <line>SearchResultList = This signal updates the address result list (e.g. after a Search/Spell/Scroll call)</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="totalSize" type="q">
+ <doc>
+ <line>totalSize = total size of the result list</line>
+ </doc>
+ </arg>
+ <arg name="windowOffset" type="q">
+ <doc>
+ <line>windowOffset = window offset within the complete list</line>
+ </doc>
+ </arg>
+ <arg name="windowSize" type="q">
+ <doc>
+ <line>windowSize = size of the provided window</line>
+ </doc>
+ </arg>
+ <arg name="resultListWindow" type="aa{qv}">
+ <doc>
+ <line>resultListWindow = array[address]</line>
+ <line>address = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range [-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range [-180:+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="SearchResultListSizeChanged">
+ <doc>
+ <line>SearchResultListSizeChanged = This signal updates the size of the address result list</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="totalSize" type="q">
+ <doc>
+ <line>totalSize = total size of the result list</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="SelectEntry">
+ <doc>
+ <line>SelectEntry = This method triggers selection of a result list entry by index</line>
+ <line>Note: the update of the input content will be notified in signal ContentUpdated</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="index" type="q" direction="in">
+ <doc>
+ <line>index = absolute list index of the entry to be selected</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetEntry">
+ <doc>
+ <line>GetEntry = This method synchronously gets the address for the given result list entry</line>
+ </doc>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="index" type="q" direction="in">
+ <doc>
+ <line>index = list index of the entry to be returned</line>
+ </doc>
+ </arg>
+ <arg name="address" type="a{qv}" direction="out">
+ <doc>
+ <line>address = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range[-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range[-180:+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="ContentUpdated">
+ <doc>
+ <line>ContentUpdated = This signal updates the input content data for the specified session</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="guidable" type="b">
+ <doc>
+ <line>guidable = flag indicating whether the current address is guidable</line>
+ </doc>
+ </arg>
+ <arg name="availableSelectionCriteria" type="aq">
+ <doc>
+ <line>availableSelectionCriteria = array of enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>Note: availableSelectionCriteria indicates the parts of the address that can be changed</line>
+ </doc>
+ </arg>
+ <arg name="address" type="a{qv}">
+ <doc>
+ <line>address = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range[-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range[-180:+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="ValidateAddress">
+ <doc>
+ <line>ValidateAddress = This method validates an address from different sources than Navigation</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="inputAddress" type="a{qv}" direction="in">
+ <doc>
+ <line>inputAddress = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range[-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range[-180,+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="AddressValidationResult">
+ <doc>
+ <line>AddressValidationResult = This signal notifies the validation result of a former ValidateAddress call</line>
+ </doc>
+ <arg name="locationInputHandle" type="u">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="validatedAddressList" type="aa{qv}">
+ <doc>
+ <line>validatedAddressList = array[validatedAddress]</line>
+ <line>validatedAddress = array[attribute]</line>
+ <line>attribute = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>key = LATITUDE, value = value of type ´d´, that expresses the latitude in format %3.6f. Range[-90:+90]. Example: 48.70901</line>
+ <line>key = LONGITUDE, value = value of type ´d´, that expresses the longitude in format %3.6f. Range[-180:+180]. Example: 9.167898</line>
+ <line>key = ALTITUDE, value = value of type ´i´, that expresses the altitude in meters</line>
+ <line>key = COUNTRY, value = value of type ´s´, that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type ´s´, ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type ´s´, that identifies the city name</line>
+ <line>key = STREET, value = value of type ´s´, that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type ´s´, that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type ´s´, that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type ´s´, that identifies the district name</line>
+ <line>key = PHONENUMBER, value = value of type ´s´, that identifies a phone number</line>
+ <line>key = POINAME, value = value of type ´s´, that identifies a POI name</line>
+ </doc>
+ </arg>
+ <arg name="validationStatusList" type="aa{qq}">
+ <doc>
+ <line>validationStatusList = array[validationStatus]</line>
+ <line>validationStatus = array[item]</line>
+ <line>item = tuple(key,value)</line>
+ <line>key = enum(INVALID,LATITUDE,LONGITUDE,ALTITUDE,FULL_ADDRESS,COUNTRY,COUNTRYCODE,STATE,CITY,ZIPCODE,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,PHONENUMBER,POINAME,TOWNCENTER, ... )</line>
+ <line>value = enum(INVALID,OK,UNKNOWN,AMBIGUOUS,INCONSISTENT)</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="ReverseGeocode">
+ <doc>
+ <line>ReverseGeocode = This method transforms a geocoordinate into an address</line>
+ <line>Note: the update of the input content will be notified in signal ContentUpdated</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="locationInputHandle" type="u" direction="in">
+ <doc>
+ <line>locationInputHandle = Location input handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="coordinate" type="(dd)" direction="in">
+ <doc>
+ <line>coordinate = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]. Example: 8.321000</line>
+ </doc>
+ </arg>
+ </method>
+ </interface>
+</node>
diff --git a/api/navigation-core/genivi-navigationcore-mapmatchedposition.xml b/api/navigation-core/genivi-navigationcore-mapmatchedposition.xml
new file mode 100755
index 0000000..e0da874
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-mapmatchedposition.xml
@@ -0,0 +1,379 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.MapMatchedPosition">
+ <version>3.0.0-alpha (23-10-2013)</version>
+ <doc>
+ <line>MapMatchedPosition = This interface offers functions to retrieve the map matched position and to simulate positioning</line>
+ <line></line>
+ <line>If NavigationCore is not in Simulation Mode (Simulation Status is SIMULATION_STATUS_NO_SIMULATION), it is using the EnhancedPosition from the Positioning component.</line>
+ <line>In Simulation Mode it is not using this position, instead it uses FixedPosition or FollowActiveRoute to determine the position.</line>
+ <line>With FixedPosition (Simulation Status is SIMULATION_STATUS_FIXED_POSITION), the position is fixed, unless it is changed by a call to setPosition().</line>
+ <line>This supports use cases like: setting the current car position in a demo mode, or replay a position log file (where setPosition() is called for each logged location).</line>
+ <line>In Follow Active Route mode, NavigationCore is generating positions itself.</line>
+ <line>These positions follow the current active route. When the end of the route is reached, the position jumps back to the starting point of the route.</line>
+ <line>There are two sub states: Running (Simulation Status is SIMULATION_STATUS_RUNNING) and Paused (Simulation Status is SIMULATION_STATUS_PAUSED).</line>
+ <line>By default the ‘driving speed’ will be equal to the free flow speed of each road segment. However a speed factor can be set via the method SetSimulationSpeed.</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetSimulationMode">
+ <doc>
+ <line>SetSimulationMode = This method activates or deactivates the simulation mode</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="activate" type="b" direction="in">
+ <doc>
+ <line>activate = flag. TRUE means that the simulation mode is activated.</line>
+ <line>The simulation status will be SIMULATION_STATUS_FIXED_POSITION, with the position being the last known position in the NavigationCore.</line>
+ <line>FALSE means that the simulation mode is de-activated. The simulation status will be SIMULATION_STATUS_NO_SIMULATION</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSimulationStatus">
+ <doc>
+ <line>GetSimulationStatus = This method retrieves the simulation status</line>
+ </doc>
+ <arg name="simulationStatus" type="q" direction="out">
+ <doc>
+ <line>simulationStatus = enum(SIMULATION_STATUS_NO_SIMULATION, SIMULATION_STATUS_RUNNING, SIMULATION_STATUS_PAUSED, SIMULATION_STATUS_FIXED_POSITION)</line>
+ <line>SIMULATION_STATUS_NO_SIMULATION means that NavigationCore is using the EnhancedPosition</line>
+ <line>SIMULATION_STATUS_RUNNING means that positions are generated along the active route</line>
+ <line>SIMULATION_STATUS_PAUSED means that the generation of positions along the active route is paused</line>
+ <line>SIMULATION_STATUS_FIXED_POSITION means that the position is fixed.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="AddSimulationStatusListener">
+ <doc>
+ <line> AddSimulationStatusListener = Add this node as a listener to Simulation Status changes.</line>
+ <line>Upon changes a SimulationStatusChanged signal will be received. NavigationCore will only send out a SimulationStatusChanged signal if there is at least one node listening to these changes.</line>
+ </doc>
+ </method>
+ <method name="RemoveSimulationStatusListener">
+ <doc>
+ <line> RemoveSimulationStatusListener = Remove this node as a listener to Simulation Status changes.</line>
+ </doc>
+ </method>
+ <signal name="SimulationStatusChanged">
+ <doc>
+ <line>SimulationStatusChanged = This signal is emitted when the Simulation Status has changed</line>
+ </doc>
+ <arg name="simulationStatus" type="q">
+ <doc>
+ <line>simulationStatus = enum(SIMULATION_STATUS_NO_SIMULATION, SIMULATION_STATUS_RUNNING, SIMULATION_STATUS_PAUSED, SIMULATION_STATUS_FIXED_POSITION)</line>
+ <line>SIMULATION_STATUS_NO_SIMULATION means that NavigationCore is using the EnhancedPosition</line>
+ <line>SIMULATION_STATUS_RUNNING means that positions are generated along the active route</line>
+ <line>SIMULATION_STATUS_PAUSED means that the generation of positions along the active route is paused</line>
+ <line>SIMULATION_STATUS_FIXED_POSITION means that the position is fixed.</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="SetSimulationSpeed">
+ <doc>
+ <line>SetSimulationSpeed = This method sets the speed factor for the simulation mode</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="speedFactor" type="y" direction="in">
+ <doc>
+ <line>speedFactor = speed factor</line>
+ <line>unit is x0.25. Normal speed x1 is 4</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSimulationSpeed">
+ <doc>
+ <line>GetSimulationSpeed = returns the speed factor for the simulation mode</line>
+ </doc>
+ <arg name="speedFactor" type="y" direction="out">
+ <doc>
+ <line>speedFactor = speed factor</line>
+ <line>unit is x0.25. Normal speed x1 is 4</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="AddSimulationSpeedListener">
+ <doc>
+ <line> AddSimulationSpeedListener = Add this node as a listener to simulation speed factor changes.</line>
+ <line>Upon changes a SimulationSpeedChanged signal will be received.</line>
+ <line>NavigationCore will only send out a SimulationSpeedChanged signal if there is at least one node listening to these changes</line>
+ </doc>
+ </method>
+ <method name="RemoveSimulationSpeedListener">
+ <doc>
+ <line> RemoveSimulationSpeedListener = Remove this node as a listener to simulation speed factor changes.</line>
+ </doc>
+ </method>
+ <signal name="SimulationSpeedChanged">
+ <doc>
+ <line>SimulationSpeedChanged = This signal is emitted when the simulation speed factor has changed</line>
+ <line>NavigationCore will only send out a SimulationSpeedChanged signal if there is at least one node listening to these changes</line>
+ </doc>
+ <arg name="speedFactor" type="y">
+ <doc>
+ <line>speedFactor = speed factor</line>
+ <line>unit is x0.25. Normal speed x1 is 4</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="StartSimulation">
+ <doc>
+ <line>StartSimulation = This method starts, or resumes, a Follow Active Route simulation</line>
+ <line>If the current Simulation Status is SIMULATION_STATUS_PAUSED, the simulation is resumed from the current location.</line>
+ <line>Otherwise the simulation is started from the starting point of the route. In both cases the new status will be SIMULATION_STATUS_RUNNING</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="PauseSimulation">
+ <doc>
+ <line>PauseSimulation = This method freezes the current location</line>
+ <line>The new status will be SIMULATION_STATUS_PAUSED</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetPosition">
+ <doc>
+ <line>GetPosition = This method returns the current position</line>
+ </doc>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn= array[key]</line>
+ <line>key = enum(INVALID,TIMESTAMP,LATITUDE,LONGITUDE,ALTITUDE,HEADING,SPEED,CLIMB,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... ,ALL)</line>
+ </doc>
+ </arg>
+ <arg name="position" type="a{qv}" direction="out">
+ <doc>
+ <line>position = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,TIMESTAMP,LATITUDE,LONGITUDE,ALTITUDE,HEADING,SPEED,CLIMB,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... )</line>
+ <line>key = TIMESTAMP, value = value of type 't', that represents a timestamp in ms</line>
+ <line>key = LATITUDE, value = value of type 'd', that expresses the latitude of the current position in format %3.6f. Range [-90,+90]. Example: 48.053250</line>
+ <line>key = LONGITUDE, value = value of type 'd', that expresses the longitude of the current position in format %3.6f. Range [-180,+180]. Example: 8.324500</line>
+ <line>key = ALTITUDE, value = value of type 'i', that expresses the altitude above the sea level of the current position in meters</line>
+ <line>key = HEADING, value = value of type 'u', that expresses the course angle in degree (0 = north, 90 = east, 180 = south, 270 = west, no negative values)</line>
+ <line>key = SPEED, value = value of type 'd', that expresses speed measured in m/s. A negative value indicates that the vehicle is moving backwards</line>
+ <line>key = CLIMB, value = value of type 'i', that expresses the inclination measured in degrees</line>
+ <line>key = GNSS_FIX_STATUS, value = value of type 'q', that represents an enum(INVALID,NO_FIX,TIME_FIX,2D_FIX,3D_FIX, ... )</line>
+ <line>key = DR_STATUS, value = value of type 'b', where TRUE means that a dead-reckoning algorithm has been used to calculate the current position</line>
+ <line>key = MM_STATUS, value = value of type 'b', where TRUE means that a map-matching algorithm has been used to calculate the current position</line>
+ <line>key = SIMULATION_MODE, value = value of type 'b', where TRUE means that the current position is simulated</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.MapMatchedPosition.Error.NoPosition">
+ <doc>
+ <line>This error is generated if no position is available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="SetPosition">
+ <doc>
+ <line>SetPosition = This method sets the position to a specific location</line>
+ <line>Independent of the current Simulation Status, the new status will be SIMULATION_STATUS_FIXED_POSITION.</line>
+ <line>This method can be used to replay a position log file (with positions obtained via calls to GetPosition()) by calling this method for each position in the log file.</line>
+ <line>It is of course also possible to call this method just once with e.g. a 'current location' entered by the user (via the HMI).</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="position" type="a{qv}" direction="in">
+ <doc>
+ <line>position = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,TIMESTAMP,LATITUDE,LONGITUDE,ALTITUDE,HEADING,SPEED,CLIMB,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS, ... )</line>
+ <line>key = TIMESTAMP, value = value of type 't', that represents a timestamp in ms</line>
+ <line>key = LATITUDE, value = value of type 'd', that expresses the latitude of the current position in format %3.6f. Range [-90,+90]. Example: 48.053250</line>
+ <line>key = LONGITUDE, value = value of type 'd', that expresses the longitude of the current position in format %3.6f. Range [-180,+180]. Example: 8.324500</line>
+ <line>key = ALTITUDE, value = value of type 'i', that expresses the altitude above the sea level of the current position in meters</line>
+ <line>key = HEADING, value = value of type 'u', that expresses the course angle in degree (0 = north, 90 = east, 180 = south, 270 = west, no negative values)</line>
+ <line>key = SPEED, value = value of type 'd', that expresses speed measured in m/s. A negative value indicates that the vehicle is moving backwards</line>
+ <line>key = CLIMB, value = value of type 'i', that expresses the inclination measured in degrees</line>
+ <line>key = GNSS_FIX_STATUS, value = value of type 'q', that represents an enum(INVALID,NO_FIX,TIME_FIX,2D_FIX,3D_FIX, ... )</line>
+ <line>key = DR_STATUS, value = value of type 'b', where TRUE means that a dead-reckoning algorithm has been used to calculate the current position</line>
+ <line>key = MM_STATUS, value = value of type 'b', where TRUE means that a map-matching algorithm has been used to calculate the current position</line>
+ <line>Note that the key SIMULATION_MODE is not allowed here, as it will be true by definition.</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="PositionUpdate">
+ <doc>
+ <line>PositionUpdate = This signal is called to notify a client application of a position change. The update frequency is implementation specific. The maximal allowed frequency is 10Hz</line>
+ </doc>
+ <arg name="changedValues" type="aq">
+ <doc>
+ <line>changedValues = array[value]</line>
+ <line>value = enum(INVALID,TIMESTAMP,LATITUDE,LONGITUDE,ALTITUDE,HEADING,SPEED,CLIMB,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="GetAddress">
+ <doc>
+ <line>GetAddress = This method returns the current address</line>
+ </doc>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn= array[fieldType]</line>
+ <line>key = enum(INVALID,TIMESTAMP,COUNTRY,COUNTRYCODE,CITY,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,TIMEZONE_OFFSET,DAYLIGHT_OFFSET,MATCH_TYPE, ... ,ALL)</line>
+ </doc>
+ </arg>
+ <arg name="address" type="a{qv}" direction="out">
+ <doc>
+ <line>address = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,TIMESTAMP,COUNTRY,COUNTRYCODE,CITY,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,TIMEZONE_OFFSET,DAYLIGHT_OFFSET,MATCH_TYPE, ... )</line>
+ <line>key = TIMESTAMP, value = value of type 't', that represents a timestamp in ms</line>
+ <line>key = COUNTRY, value = value of type 's', that identifies the country name</line>
+ <line>key = COUNTRYCODE, value = value of type 's', ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>key = CITY, value = value of type 's', that identifies the city name</line>
+ <line>key = STREET, value = value of type 's', that identifies the street name</line>
+ <line>key = ROAD_NUMBER, value = value of type ´s´, that identifies the road number</line>
+ <line>key = HOUSENUMBER, value = value of type 's', that identifies the house number</line>
+ <line>key = HOUSENAME, value = value of type ´s´, that identifies the house name</line>
+ <line>key = CROSSING, value = value of type 's', that identifies the crossing</line>
+ <line>key = DISTRICT, value = value of type 's', that identifies the district name</line>
+ <line>key = TIMEZONE_OFFSET, value = value of type 'n', that identifies the timezone offset at the current address</line>
+ <line>key = DAYLIGHT_OFFSET, value = value of type 'n', that identifies the daylight offset at the current address</line>
+ <line>key = MATCH_TYPE, value = value of type 'q', that identifies an enum(INVALID,ON_ROAD,OFF_ROAD,ON_FERRY,IN_TUNNEL,ON_CARPARK, ... )</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.MapMatchedPosition.Error.NoMap">
+ <doc>
+ <line>This error is generated if no map is available</line>
+ </doc>
+ </error>
+ <error name="org.genivi.navigationcore.MapMatchedPosition.Error.OutOfKnownMap">
+ <doc>
+ <line>This error is generated if the vehicle is located in a position outside of the known map</line>
+ </doc>
+ </error>
+ </method>
+ <signal name="AddressUpdate">
+ <doc>
+ <line>AddressUpdate = This signal is called to notify a client application that the current address changed</line>
+ </doc>
+ <arg name="changedValues" type="aq">
+ <doc>
+ <line>changedValues = array[value]</line>
+ <line>value = enum(INVALID,TIMESTAMP,COUNTRY,COUNTRYCODE,CITY,STREET,ROAD_NUMBER,HOUSENUMBER,HOUSENAME,CROSSING,DISTRICT,TIMEZONE_OFFSET,DAYLIGHT_OFFSET,MATCH_TYPE, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="GetPositionOnSegment">
+ <doc>
+ <line>positionOnSegment = This method returns the vehicle position on a route segment</line>
+ </doc>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn= array[fieldType]</line>
+ <line>key = enum(INVALID,TIMESTAMP,SEGMENT_ID,DIRECTION_ON_SEGMENT,DISTANCE_ON_SEGMENT, ... ,ALL)</line>
+ </doc>
+ </arg>
+ <arg name="positionOnSegment" type="a{qv}" direction="out">
+ <doc>
+ <line>positionOnSegment = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,TIMESTAMP,SEGMENT_ID,DIRECTION_ON_SEGMENT,DISTANCE_ON_SEGMENT, ... )</line>
+ <line>key = TIMESTAMP, value = value of type 't', that represents a timestamp in ms</line>
+ <line>key = SEGMENT_ID, value = value = value of type 'ay', that represents a link-ID in a format whose interpretation is left to the navigationcore</line>
+ <line>key = DIRECTION_ON_SEGMENT, value = value of type 'b', where TRUE means forward and FALSE means backward</line>
+ <line>key = DISTANCE_ON_SEGMENT, value = value of type 'd', that indicates the distance in meter on the segment</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="PositionOnSegmentUpdate">
+ <doc>
+ <line>PositionOnSegmentUpdate = This signal is called to notify the client that the vehicle position on the route segment changed</line>
+ </doc>
+ <arg name="changedValues" type="aq">
+ <doc>
+ <line>changedValues = array[value]</line>
+ <line>value = enum(INVALID,TIMESTAMP,SEGMENT_ID,DIRECTION_ON_SEGMENT,DISTANCE_ON_SEGMENT, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="GetStatus">
+ <doc>
+ <line>GetStatus = This method returns the current status</line>
+ </doc>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn = array[fieldType]</line>
+ <line>key = enum(INVALID,TIMESTAMP,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... ,ALL)</line>
+ </doc>
+ </arg>
+ <arg name="status" type="a{qv}" direction="out">
+ <doc>
+ <line>status = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(INVALID,TIMESTAMP,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... )</line>
+ <line>key = TIMESTAMP, value = value of type 't', that represents a timestamp in ms</line>
+ <line>key = GNSS_FIX_STATUS, value = value of type 'q', that represents an enum(INVALID,NO_FIX,TIME_FIX,2D_FIX,3D_FIX, ... )</line>
+ <line>key = DR_STATUS, value = value of type 'b', where TRUE means that a dead-reckoning algorithm has been used to calculate the current position</line>
+ <line>key = MM_STATUS, value = value of type 'b', where TRUE means that a map-matching algorithm has been used to calculate the current position</line>
+ <line>key = SIMULATION_MODE, value = value of type 'b', where TRUE means that the current position is simulated</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="StatusUpdate">
+ <doc>
+ <line>StatusUpdate = This signal is emitted to notifiy a client application that the current status changed</line>
+ </doc>
+ <arg name="changedValues" type="aq">
+ <doc>
+ <line>changedValues = array[value]</line>
+ <line>value = enum(INVALID,TIMESTAMP,GNSS_FIX_STATUS,DR_STATUS,MM_STATUS,SIMULATION_MODE, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="OffRoadPositionChanged">
+ <doc>
+ <line>OffroadPositionChanged = This signal is emitted when the heading and the distance to the closest point on the road network changes</line>
+ </doc>
+ <arg name="distance" type="u">
+ <doc>
+ <line>distance = distance in meters to the closest point on the road network</line>
+ </doc>
+ </arg>
+ <arg name="direction" type="i">
+ <doc>
+ <line>direction = direction in degrees relatively to the closest point on the road network. Range [0:360]</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/navigation-core/genivi-navigationcore-routing.xml b/api/navigation-core/genivi-navigationcore-routing.xml
new file mode 100755
index 0000000..841fd60
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-routing.xml
@@ -0,0 +1,830 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.Routing">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>Routing = This interface offers functions that implement the routing functionality of a navigation system</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CreateRoute">
+ <doc>
+ <line>CreateRoute = This method creates a route</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="out">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.NoMoreRouteHandles">
+ <doc>
+ <line>This error is generated if no more routing handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="DeleteRoute">
+ <doc>
+ <line>DeleteRoute = This method deletes a route and its associated resources</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.RouteNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a route handle that is not available</line>
+ </doc>
+ </error>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to delete a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <signal name="RouteDeleted">
+ <doc>
+ <line>RouteDeleted = This signal is emitted to inform clients that the current route has been deleted</line>
+ </doc>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="SetCostModel">
+ <doc>
+ <line>SetCostModel = This method sets the cost model</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="costModel" type="q" direction="in">
+ <doc>
+ <line>costModel = enum(INVALID,FASTEST,SHORTEST,ECOLOGICAL,SCENIC,EASY,OFF_ROAD,BALANCED,CHEAPEST, ... )</line>
+ <line>FASTEST = least time to reach the destination </line>
+ <line>SHORTEST = shortest distance to destination </line>
+ <line>ECOLOGICAL = least fuel or electric charge to destination </line>
+ <line>SCENIC = most scenic route to destination </line>
+ <line>EASY = least number of turns to reach the destination </line>
+ <line>OFF_ROAD = a distance-optimised route between points that are not covered by road mappings</line>
+ <line>BALANCED = trade-off between FASTEST and SHORTEST (e.g. 50% FASTEST and 50% SHORTEST) </line>
+ <line>CHEAPEST = least fuel or electric charge to destination taking pricing into account </line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to set a cost model for a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetCostModel">
+ <doc>
+ <line>GetCostModel = This method retrieves the selected cost model</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="costModel" type="q" direction="out">
+ <doc>
+ <line>costModel = enum(INVALID,FASTEST,SHORTEST,ECOLOGICAL,SCENIC,EASY,OFF_ROAD,BALANCED,CHEAPEST, ... )</line>
+ <line>FASTEST = least time to reach the destination </line>
+ <line>SHORTEST = shortest distance to destination </line>
+ <line>ECOLOGICAL = least fuel or electric charge to destination </line>
+ <line>SCENIC = most scenic route to destination </line>
+ <line>EASY = least number of turns to reach the destination </line>
+ <line>OFF_ROAD = a distance-optimised route between points that are not covered by road mappings</line>
+ <line>BALANCED = trade-off between FASTEST and SHORTEST (e.g. 50% FASTEST and 50% SHORTEST) </line>
+ <line>CHEAPEST = least fuel or electric charge to destination taking pricing into account </line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedCostModels">
+ <doc>
+ <line>GetSupportedCostModels = This method retrieves a list of supported cost models</line>
+ </doc>
+ <arg name="costModelsList" type="aq" direction="out">
+ <doc>
+ <line>costModelsList = array[costModel]</line>
+ <line>costModel = enum(INVALID,FASTEST,SHORTEST,ECOLOGICAL,SCENIC,EASY,OFF_ROAD,BALANCED,CHEAPEST, ... )</line>
+ <line>FASTEST = least time to reach the destination </line>
+ <line>SHORTEST = shortest distance to destination </line>
+ <line>ECOLOGICAL = least fuel or electric charge to destination </line>
+ <line>SCENIC = most scenic route to destination </line>
+ <line>EASY = least number of turns to reach the destination </line>
+ <line>OFF_ROAD = a distance-optimised route between points that are not covered by road mappings</line>
+ <line>BALANCED = trade-off between FASTEST and SHORTEST (e.g. 50% FASTEST and 50% SHORTEST) </line>
+ <line>CHEAPEST = least fuel or electric charge to destination taking pricing into account </line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetRoutePreferences">
+ <doc>
+ <line>SetRoutePreferences = This method sets a list of route preferences</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="countryCode" type="s" direction="in">
+ <doc>
+ <line>countryCode = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>If this argument is an empty string, it means that the preferences apply to all countries</line>
+ </doc>
+ </arg>
+ <arg name="roadPreferenceList" type="a(qq)" direction="in">
+ <doc>
+ <line>roadPreferenceList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(PROHIBIT,AVOID,USE,PREFER)</line>
+ <line>preferenceMode = PROHIBIT. Routing module must not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = AVOID. Routing module should not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = USE. Routing module should calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = PREFER. Routing module should calculate a planned route including as much as possible sections matching given avoidance source.</line>
+ <line>preferenceSource = enum(FERRY,TOLL_ROADS,TUNNELS,HIGHWAYS_MOTORWAYS,VEHICLE_SIZE_LIMIT,CRIME_AREAS)</line>
+ </doc>
+ </arg>
+ <arg name="conditionPreferenceList" type="a(qq)" direction="in">
+ <doc>
+ <line>conditionPreferenceList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(USE,IGNORE)</line>
+ <line>preferenceSource = enum(TRAFFIC_REALTIME, ...)</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to set route preferences for a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ <error name="org.genivi.navigationcore.Routing.Error.RoutePreferenceNotSupported">
+ <doc>
+ <line>This error is generated if an application tries to set a route preference which is not supported (e.g. (USE,CRIME_AREA)). The preferences which are not supported are product dependent.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetRoutePreferences">
+ <doc>
+ <line>GetRoutePreferences = This method retrieves a list of selected route preferences</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="countryCode" type="s" direction="in">
+ <doc>
+ <line>countryCode = ISO 3166‐1 alpha 3 country code (upper case)</line>
+ <line>If this argument is an empty string, it means that the preferences apply to all countries</line>
+ </doc>
+ </arg>
+ <arg name="roadPreferenceList" type="a(qq)" direction="out">
+ <doc>
+ <line>roadPreferenceList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(PROHIBIT,AVOID,USE,PREFER)</line>
+ <line>preferenceMode = PROHIBIT. Routing module must not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = AVOID. Routing module should not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = USE. Routing module should calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = PREFER. Routing module should calculate a planned route including as much as possible sections matching given avoidance source.</line>
+ <line>preferenceSource = enum(FERRY,TOLL_ROADS,TUNNELS,HIGHWAYS_MOTORWAYS,VEHICLE_SIZE_LIMIT,CRIME_AREAS)</line>
+ </doc>
+ </arg>
+ <arg name="conditionPreferenceList" type="a(qq)" direction="out">
+ <doc>
+ <line>conditionPreferenceList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(USE,IGNORE)</line>
+ <line>preferenceSource = enum(TRAFFIC_REALTIME, ...)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedRoutePreferences">
+ <doc>
+ <line>GetSupportedRoutePreferences = This method retrieves a list of supported route preferences</line>
+ </doc>
+ <arg name="routePreferencesList" type="a(qq)" direction="out">
+ <doc>
+ <line>routePreferencesList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(PROHIBIT,AVOID,USE,PREFER)</line>
+ <line>preferenceMode = PROHIBIT. Routing module must not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = AVOID. Routing module should not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = USE. Routing module should calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = PREFER. Routing module should calculate a planned route including as much as possible sections matching given avoidance source.</line>
+ <line>preferenceSource = enum(FERRY,TOLL_ROADS,TUNNELS,HIGHWAYS_MOTORWAYS,VEHICLE_SIZE_LIMIT,CRIME_AREAS)</line>
+ </doc>
+ </arg>
+ <arg name="conditionPreferenceList" type="a(qq)" direction="out">
+ <doc>
+ <line>conditionPreferenceList = array[preference]</line>
+ <line>preference = struct(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(USE,IGNORE)</line>
+ <line>preferenceSource = enum(TRAFFIC_REALTIME, ...)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetRouteSchedule">
+ <doc>
+ <line> SetRouteSchedule = This method sets the time schedule for the route to be calculated</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeSchedule" type="a{qu}" direction="in">
+ <doc>
+ <line>routeSchedule = array[detail]</line>
+ <line>detail = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(ARRIVAL_TIME, ARRIVAL_DATE,DEPARTURE_TIME, DEPARTURE_DATE)</line>
+ <line>key = ARRIVAL_TIME, value of type 'u', that represents the arrival time is expressed in seconds since mid-night (UTC)</line>
+ <line>key = ARRIVAL_DATE, value of type 'u', that represents the arrival date is either a calendar date (the number of days since 1 Jan 2000) or a weekday indication. For weekday indication the values 0 till 6 are used (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ <line>key = DEPARTURE_TIME, value of type 'u', that represents the departure time is expressed in seconds since mid-night (UTC)</line>
+ <line>key = DEPARTURE_DATE, value of type 'u', that represents the departure date is either a calendar date (the number of days since 1 Jan 2000) or a weekday indication. For weekday indication the values 0 till 6 are used (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetRouteSchedule">
+ <doc>
+ <line> GetRouteSchedule = This method gets the time schedule for the route to be calculated</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn= array[value]</line>
+ <line>value= enum(ARRIVAL_TIME, ARRIVAL_DATE,DEPARTURE_TIME, DEPARTURE_DATE)</line>
+ </doc>
+ </arg>
+ <arg name="routeSchedule" type="a{qu}" direction="out">
+ <doc>
+ <line> routeSchedule = array[detail]</line>
+ <line>detail = dictionary[key,value]</line>
+ <line>dictionary = array of tuples (key,value)</line>
+ <line>key = enum(ARRIVAL_TIME, ARRIVAL_DATE,DEPARTURE_TIME, DEPARTURE_DATE)</line>
+ <line>key = ARRIVAL_TIME, value of type 'u', that represents the arrival time is expressed in seconds since mid-night (UTC)</line>
+ <line>key = ARRIVAL_DATE, value of type 'u', that represents the arrival date is either a calendar date (the number of days since 1 Jan 2000) or a weekday indication. For weekday indication the values 0 till 6 are used (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ <line>key = DEPARTURE_TIME, value of type 'u', that represents the departure time is expressed in seconds since mid-night (UTC)</line>
+ <line>key = DEPARTURE_DATE, value of type 'u', that represents the departure date is either a calendar date (the number of days since 1 Jan 2000) or a weekday indication. For weekday indication the values 0 till 6 are used (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetTransportationMeans">
+ <doc>
+ <line>SetTransportationMeans = This method sets a list of means of transportation that must be considered when calculating a route</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="transportationMeansList" type="aq" direction="in">
+ <doc>
+ <line>transportationMeansList = array[transportationMeans]</line>
+ <line>transportationMeans = enum(INVALID,BY_CAR,ON_FOOT,LONG_RANGE_TRAINS,PUBLIC_TRANSPORTATION,BY_BICYCLE,BY_TRUCK, ... )</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to set transportation means for a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetTransportationMeans">
+ <doc>
+ <line>GetTransportationMeans = This method retrieves the selected means of transportation</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="transportationMeansList" type="aq" direction="out">
+ <doc>
+ <line>transportationMeansList = array[transportationMeans]</line>
+ <line>transportationMeans = enum(INVALID,BY_CAR,ON_FOOT,LONG_RANGE_TRAINS,PUBLIC_TRANSPORTATION,BY_BICYCLE,BY_TRUCK, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetSupportedTransportationMeans">
+ <doc>
+ <line>GetSupportedTransportationMeans = This method retrieves a list of supported means of transportation</line>
+ </doc>
+ <arg name="transportationMeansList" type="aq" direction="out">
+ <doc>
+ <line>transportationMeansList = array[transportationMeans]</line>
+ <line>transportationMeans = enum(INVALID,BY_CAR,ON_FOOT,LONG_RANGE_TRAINS,PUBLIC_TRANSPORTATION,BY_BICYCLE,BY_TRUCK, ... )</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetExcludedAreas">
+ <doc>
+ <line>SetExcludedAreas = This method sets the areas to be excluded when calculating a route</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="excludedAreas" type="aa(dd)" direction="in">
+ <doc>
+ <line>excludedAreas = array[array(lat,lon)]</line>
+ <line>excludedAreas = array[convexPolygon]</line>
+ <line>convexPolygon = array[lat,lon] </line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>Note: a polygon must have at least 3 vertexes</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to set excluded areas for a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetExcludedAreas">
+ <doc>
+ <line>GetExcludedAreas = This method retrieves the areas to be excluded when calculating a route</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="excludedAreas" type="aa(dd)" direction="out">
+ <doc>
+ <line>excludedAreas = array[array(lat,lon)]</line>
+ <line>excludedAreas = array[convexPolygon]</line>
+ <line>convexPolygon = array[lat,lon]</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>Note: pass an empty array to remove previously selected excluded areas</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetWaypoints">
+ <doc>
+ <line>SetWaypoints = This method sets a list of waypoints</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="startFromCurrentPosition" type="b" direction="in">
+ <doc>
+ <line>startFromCurrentPosition = flag indicating if the current position is used as starting point</line>
+ </doc>
+ </arg>
+ <arg name="waypointsList" type="aa{qv}" direction="in">
+ <doc>
+ <line>waypointsList = array[waypoint]</line>
+ <line>waypoint = tuple (key,value)</line>
+ <line>key = enum(INVALID,WAYPOINT_TYPE,LOCATION_INPUT,LATITUDE,LONGITUDE,ALTITUDE, ... )</line>
+ <line>key = WAYPOINT_TYPE, value = value of type 'q', that represents an enum(INVALID,SOFT_POINT,HARD_POINT, ... )</line>
+ <line>key = LOCATION_INPUT, value = value of type 'ay'. This is a byte array whose interpretation is left to the navigation core</line>
+ <line>key = LATITUDE, value = value of type 'd', that expresses the latitude of the starting point in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>key = LONGITUDE, value = value of type 'd', that expresses the longitude of the starting point in format %3.6f. Range [-180:+180]. Example: 8.324500</line>
+ <line>key = ALTITUDE, value = value of type 'i', that expresses the altitude of the starting point in meters</line>
+ <line>Note: if the flag StartFromCurrentPosition=true, then at least one waypoint must be provided (destination)</line>
+ <line>Note: if the flag StartFromCurrentPosition=false, then at least two waypoints must be provided (starting point and destination)</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.WaypointCannotBeChanged">
+ <doc>
+ <line>This error is sent when a client application tries to change the waypoints while the route guidance is active</line>
+ </doc>
+ </error>
+ <error name="org.genivi.navigationcore.Routing.Error.TooManyWaypoints">
+ <doc>
+ <line>This error is sent when a client application tries to set a number of waypoints that exceeds the system capabilities</line>
+ </doc>
+ </error>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to set waypoints for a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetWaypoints">
+ <doc>
+ <line>GetWaypoints = This method retrieves a list of waypoints</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="startFromCurrentPosition" type="b" direction="out">
+ <doc>
+ <line>startFromCurrentPosition = flag indicating if the current position is used as starting point</line>
+ </doc>
+ </arg>
+ <arg name="waypointsList" type="aa{qv}" direction="out">
+ <doc>
+ <line>waypointsList = array[waypoint]</line>
+ <line>waypoint = tuple (key,value)</line>
+ <line>key = enum(INVALID,WAYPOINT_TYPE,LOCATION_INPUT,LATITUDE,LONGITUDE,ALTITUDE, ... )</line>
+ <line>key = WAYPOINT_TYPE, value = value of type 'q', that represents an enum(INVALID,SOFT_POINT,HARD_POINT, ... )</line>
+ <line>key = LOCATION_INPUT, value = value of type 'ay'. This is a byte array whose interpretation is left to the navigation core</line>
+ <line>key = LATITUDE, value = value of type 'd', that expresses the latitude of the starting point in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>key = LONGITUDE, value = value of type 'd', that expresses the longitude of the starting point in format %3.6f. Range [-180:+180]. Example: 8.324500</line>
+ <line>key = ALTITUDE, value = value of type 'i', that expresses the altitude of the starting point in meters</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CalculateRoute">
+ <doc>
+ <line>CalculateRoute = This method starts a route calculation</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to calculate a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="CancelRouteCalculation">
+ <doc>
+ <line>CancelRouteCalculation = This method cancels a route calculation</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="RouteCalculationCancelled">
+ <doc>
+ <line>RouteCalculationCancelled = This signal informs a client that a route calculation was cancelled</line>
+ </doc>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="RouteCalculationSuccessful">
+ <doc>
+ <line>RouteCalculationSuccessful = This signal informs a client that a route calculation was successful</line>
+ </doc>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="unfullfilledPreferences" type="a{qq}">
+ <doc>
+ <line>unfullfilledPreferences = array[preference]</line>
+ <line>preference = tuple(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(PROHIBIT,AVOID,USE,PREFER)</line>
+ <line>preferenceMode = PROHIBIT. Routing module must not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = AVOID. Routing module should not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = USE. Routing module should calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = PREFER. Routing module should calculate a planned route including as much as possible sections matching given avoidance source.</line>
+ <line>preferenceSource = enum(FERRY,TOLL_ROADS,TUNNELS,HIGHWAYS_MOTORWAYS,VEHICLE_SIZE_LIMIT,CRIME_AREAS)</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="RouteCalculationFailed">
+ <doc>
+ <line>RouteCalculationFailed = This signal informs a client that a route calculation failed</line>
+ </doc>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="errorCode" type="q">
+ <doc>
+ <line>errorCode = enum(INVALID,UNMATCHED_POSITION,UNREACHABLE_DESTINATION,UNFULFILLED_PREFERENCE_MODE, ... )</line>
+ <line>errorCode = UNFULFILLED_PREFERENCE_MODE. Refer to unfullfilledPreferences to see which routing preferences could not be met causing routing calculation to fail; for any other value the argument unfulfilledPreferences should be ignored. </line>
+ </doc>
+ </arg>
+ <arg name="unfullfilledPreferences" type="a{qq}">
+ <doc>
+ <line>unfullfilledPreferences = array[preference]</line>
+ <line>preference = tuple(preferenceMode,preferenceSource)</line>
+ <line>preferenceMode = enum(PROHIBIT,AVOID,USE,PREFER)</line>
+ <line>preferenceMode = PROHIBIT. Routing module must not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = AVOID. Routing module should not calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = USE. Routing module should calculate a planned route including sections matching given avoidance source.</line>
+ <line>preferenceMode = PREFER. Routing module should calculate a planned route including as much as possible sections matching given avoidance source.</line>
+ <line>preferenceSource = enum(FERRY,TOLL_ROADS,TUNNELS,HIGHWAYS_MOTORWAYS,VEHICLE_SIZE_LIMIT,CRIME_AREAS)</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="RouteCalculationProgressUpdate">
+ <doc>
+ <line>RouteCalculationProgressUpdate = This signal informs a client about a route calculation progress</line>
+ </doc>
+ <arg name="routeHandle" type="u">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="status" type="q">
+ <doc>
+ <line>status = enum(INVALID,CALCULATION_OK,NO_POSITION, ... )</line>
+ </doc>
+ </arg>
+ <arg name="percentage" type="y">
+ <doc>
+ <line>percentage = progress status. Range [0:100]</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="CalculateRoutes">
+ <doc>
+ <line>CalculateRoutes = This method allows a client to calculate alternative routes that differs from a list of already calculated routes</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="calculatedRoutesList" type="au" direction="in">
+ <doc>
+ <line>calculatedRoutesList = array[calculatedRoute]</line>
+ <line>calculatedRoute = Handle identifying an already calculated route. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="alternativeRoutesList" type="au" direction="out">
+ <doc>
+ <line>alternativeRoutesList = array[alternativeRoute]</line>
+ <line>alternativeRoute = Handle identifying an alternative route. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Routing.Error.OperationNotAllowed">
+ <doc>
+ <line>This error is generated if an application tries to calculate an alternative to a route which is not created manually (e.g. an alternative route calculated in the background)</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetRouteSegments">
+ <doc>
+ <line>GetRouteSegments = This method retrieves a list of segments for a given route starting from the one closest to the current position to the one closest to the destination</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="detailLevel" type="n" direction="in">
+ <doc>
+ <line>detailLevel = detail level</line>
+ </doc>
+ </arg>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn= array[key]</line>
+ <line>key = enum(INVALID,LINK-ID,INTERMEDIATE_POINTS,START_LATITUDE,START_LONGITUDE,START_ALTITUDE,</line>
+ <line>END_LATITUDE,END_LONGITUDE,END_ALTITUDE,ROAD_NAME,ROAD_NUMBER,DISTANCE,TIME,MANEUVER,INSTRUCTION,</line>
+ <line>BORDER_CROSSING,TIME_ZONE,DAYLIGHT_SAVING_TIME,ADDITIONAL_INFORMATION,HIGHWAY_EXIT, ... , ALL)</line>
+ </doc>
+ </arg>
+ <arg name="numberOfSegments" type="u" direction="in">
+ <doc>
+ <line>numberOfSegments = number of segments to be retrieved</line>
+ </doc>
+ </arg>
+ <arg name="offset" type="u" direction="in">
+ <doc>
+ <line>offset = offset from the beginning of the list</line>
+ </doc>
+ </arg>
+ <arg name="totalNumberOfSegments" type="u" direction="out">
+ <doc>
+ <line>totalNumberOfSegments = total number of segments</line>
+ </doc>
+ </arg>
+ <arg name="routeSegments" type="aa{qv}" direction="out">
+ <doc>
+ <line>routeSegments = array[segment]</line>
+ <line>segment = tuple(key,value)</line>
+ <line>Note: a segment is the shortest navigable stretch of a route (e.g. the stretch between two adjacent junctions)</line>
+ <line>key = enum(INVALID,LINK-ID,INTERMEDIATE_POINTS,START_LATITUDE,START_LONGITUDE,START_ALTITUDE,</line>
+ <line>END_LATITUDE,END_LONGITUDE,END_ALTITUDE,ROAD_NAME,ROAD_NUMBER,DISTANCE,TIME,MANEUVER,INSTRUCTION,</line>
+ <line>BORDER_CROSSING,TIME_ZONE,DAYLIGHT_SAVING_TIME,ADDITIONAL_INFORMATION,HIGHWAY_EXIT, ... )</line>
+ <line>key = LINK-ID, value = value of type 'ay', that represents a link-ID in a format whose interpretation is left to the navigationcore</line>
+ <line>key = START_LATITUDE, value = value of type 'd', that expresses the latitude of the starting point in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>key = END_LATITUDE, value = value of type 'd', that expresses the latitude of the ending point in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>Note: END_LATITUDE can be omitted, if it coincides with the latitude of the start point of the next segment</line>
+ <line>key = START_LONGITUDE, value = value of type 'd', that expresses the longitude of the starting point in format %3.6f. Range [-180:+180]. Example: 8.321000</line>
+ <line>key = END_LONGITUDE, value = value of type 'd', that expresses the longitude of the ending point in format %3.6f. Range [-180:+180]. Example: 8.321000</line>
+ <line>Note: END_LONGITUDE can be omitted, if it coincides with the longitude of the start point of the next segment</line>
+ <line>key = START_ALTITUDE, value = value of type 'i', that expresses the altitude relative to the ground of the starting point in meters</line>
+ <line>key = END_ALTITUDE, value = value of type 'i', that expresses the altitude relative to the ground of the ending point in meters</line>
+ <line>Note: END_ALTITUDE can be omitted, if it coincides with the altitude of the start point of the next segment</line>
+ <line>key = INTERMEDIATE_POINTS, value = value of type 'a(qddd)', that expresses an array of intermediate points</line>
+ <line>Note: an intermedate point is expressed as a struct(type,latitude,longitude,altitude), where type = enum(INVALID,HARD_POINT,SOFT_POINT, ... )</line>
+ <line>key = ROAD_NUMBER, value = value of type 's', that expresses the road number</line>
+ <line>key = ROAD_NAME, value = value of type 's', that expresses the road name</line>
+ <line>key = DISTANCE, value = value of type 'u', that identifies distance to the next segment in meters</line>
+ <line>key = TIME, value = value of type 'u', that identifies time to travel to the next segment in seconds</line>
+ <line>key = MANEUVER, value = value of type 'a(qqaq)', that identifies a pictogram that describes the next maneuver (OPTIONAL)</line>
+ <line>key = INSTRUCTION, value = value of type 's', that identifies the instruction to the user</line>
+ <line>key = BORDER_CROSSING, value = value of type 's', that contains information about border crossings</line>
+ <line>key = TIME_ZONE, value = value of type 'n', that indicates the time zone of the current segment. It is expressed as the time difference from the UTC in minutes</line>
+ <line>key = DAYLIGHT_SAVING_TIME, value = value of type 'n', that indicates the daylight saving time of the current segment. It is expressed as the time difference from the UTC in minutes</line>
+ <line>key = ADDITIONAL_INFORMATION, value = value of type 's', that contains additional information to the user (toll cost, ... )</line>
+ <line>key = HIGHWAY_EXIT, value = value of type 's', that in case the road segment ends with a highway exit, it expresses the highway exit number</line>
+ <line>key = START_OFFSET, value = value of type 'u', that indicates the offset of the starting point in meters from the beginning of the route</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetRouteOverview">
+ <doc>
+ <line> GetRouteOverview = This method retrieves general information about a given route</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="valuesToReturn" type="aq" direction="in">
+ <doc>
+ <line>valuesToReturn = array[key]</line>
+ <line>key = enum(ARRIVAL_TIME,ARRIVAL_DATE,DEPARTURE_TIME,DEPARTURE_DATE,TOTAL_DISTANCE,TOTAL_TIME, ... ,ALL)</line>
+ </doc>
+ </arg>
+ <arg name="routeOverview" type="a{qv}" direction="out">
+ <doc>
+ <line>routeOverview = array[detail]</line>
+ <line>detail = tuple(key,value)</line>
+ <line>key = enum(ARRIVAL_TIME,ARRIVAL_DATE,DEPARTURE_TIME,DEPARTURE_DATE,TOTAL_DISTANCE,TOTAL_TIME, ...)</line>
+ <line>key = ARRIVAL_TIME, value of type 'u', that represents the arrival time expressed in seconds since mid-night (UTC)</line>
+ <line>key = ARRIVAL_DATE, value of type 'u', that represents the arrival date expressed either as calendar date (the number of days since 1 Jan 2000) or as weekday. The weekday is expressed with values from 0 to 6 (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ <line>key = DEPARTURE_TIME, value of type 'u', that represents the departure time expressed in seconds since mid-night (UTC)</line>
+ <line>key = DEPARTURE_DATE, value of type 'u', that represents the departure date expressed either as calendar date (the number of days since 1 Jan 2000) or as weekday. The weekday is expressed with values from 0 to 6 (0 = Saturday, 1 = Sunday, 2 = Monday, ..., 6 = Friday)</line>
+ <line>key = TOTAL_DISTANCE, value of type 'u', that represents the total distance in m </line>
+ <line>key = TOTAL_TIME, value of type 'u', that represents the total time in seconds </line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetRouteBoundingBox">
+ <doc>
+ <line>GetRouteBoundingBox = This method retrieves the bounding box containing a calculated route</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="boundingBox" type="((dd)(dd))" direction="out">
+ <doc>
+ <line>boundingBox = struct(top-left-corner,bottom-right-corner)</line>
+ <line>geocoordinates of the top-left-corner = struct(lat,lon)</line>
+ <line>geocoordinates of the bottom-right-corner = struct(lat,lon)</line>
+ <line>lat = latitude in format %3.6f. Range[-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude in format %3.6f. Range[-180:+180]. Example: 8.321000</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetAllRoutes">
+ <doc>
+ <line>GetAllRoutes = This method retrieves the handles of all created routes</line>
+ </doc>
+ <arg name="routesList" type="au" direction="out">
+ <doc>
+ <line>routesList = array[route]</line>
+ <line>route = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="AlternativeRoutesAvailable">
+ <doc>
+ <line>AlternativeRoutesAvailable = This signal is emitted when alternative routes have been computed in the background and are available for guidance.</line>
+ </doc>
+ <arg name="routeHandlesList" type="au">
+ <doc>
+ <line>routeHandlesList = array[routeHandle]</line>
+ <line>routeHandle = Handle identifying a computed alternative route. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="SetBlockedRouteStretches">
+ <doc>
+ <line>SetBlockedRouteStretches = This method sets blocked streches on a given route</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="blockParameters" type="a(uu)" direction="in">
+ <doc>
+ <line>blockParameters = struct(offset,length)</line>
+ <line>offset = the offset in meters from the beginning of the route where the road block starts from</line>
+ <line>length = the length of the road block in meters</line>
+ <line>Note: pass an empty array to remove previously set blocked route stretches</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetBlockedRouteStretches">
+ <doc>
+ <line>GetBlockedRouteStretches = This method retrieves all blocked streches on a given route</line>
+ </doc>
+ <arg name="routeHandle" type="u" direction="in">
+ <doc>
+ <line>routeHandle = Route handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="blockParameters" type="a(uu)" direction="out">
+ <doc>
+ <line>blockParameters = struct(offset,length)</line>
+ <line>offset = the offset in meters from the beginning of the route where the road block starts from</line>
+ <line>length = the length of the road block in meters</line>
+ </doc>
+ </arg>
+ </method>
+ </interface>
+</node>
diff --git a/api/navigation-core/genivi-navigationcore-session.xml b/api/navigation-core/genivi-navigationcore-session.xml
new file mode 100755
index 0000000..36a552a
--- /dev/null
+++ b/api/navigation-core/genivi-navigationcore-session.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/navigationcore" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.navigationcore.Session">
+ <version>3.0.0-alpha (07-06-2013)</version>
+ <doc>
+ <line>Session = This interface offers functions to create and delete sessions</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 21-06-2011)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="CreateSession">
+ <doc>
+ <line>CreateSession = This method creates a new session</line>
+ </doc>
+ <arg name="client" type="s" direction="in">
+ <doc>
+ <line>client = name or identifier of the client application that requests a new session</line>
+ <line>The navigation core must internally associate this name to the returned session handle</line>
+ <line>This parameter can be used to identify the client application and determine if a given feature is enabled for it</line>
+ </doc>
+ </arg>
+ <arg name="sessionHandle" type="u" direction="out">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Session.Error.NoMoreSessionHandles">
+ <doc>
+ <line>This error is generated if no more session handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="DeleteSession">
+ <doc>
+ <line>DeleteSession = This method deletes a session and its associated resources</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.navigationcore.Session.Error.SessionNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a session handle that is not available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetSessionStatus">
+ <doc>
+ <line>GetSessionStatus = This method returns whether a given session handle is available or not (for example because it was deleted)</line>
+ </doc>
+ <arg name="sessionHandle" type="u" direction="in">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ <arg name="sessionStatus" type="q" direction="out">
+ <doc>
+ <line>sessionStatus = enum(INVALID,AVAILABLE,NOT_AVAILABLE)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetAllSessions">
+ <doc>
+ <line>GetAllSessions = This method returns a list of all available sessions</line>
+ </doc>
+ <arg name="sessionsList" type="a(us)" direction="out">
+ <doc>
+ <line>sessionsList = array[struct(sessionHandle,client)]</line>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ <line>client = name or identifier of the client application that requested the sessionHandle</line>
+ </doc>
+ </arg>
+ </method>
+ <signal name="SessionDeleted">
+ <doc>
+ <line>SessionDeleted = This signal is emitted when a session is deleted</line>
+ </doc>
+ <arg name="sessionHandle" type="u">
+ <doc>
+ <line>sessionHandle = Session handle. Range[0x0:0x7fffffff]. 0x0 is reserved as an invalid handle value</line>
+ </doc>
+ </arg>
+ </signal>
+ </interface>
+</node>
diff --git a/api/navigation-core/introspect.xsd b/api/navigation-core/introspect.xsd
new file mode 100755
index 0000000..76ed7ef
--- /dev/null
+++ b/api/navigation-core/introspect.xsd
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified">
+ <!-- xmlns="introspect.dtd"
+ targetNamespace="introspect.dtd"> -->
+ <xs:element name="node">
+ <xs:annotation>
+ <xs:documentation> DTD for D-Bus Introspection data
+ </xs:documentation>
+ <xs:documentation> (C) 2005-02-02 David A. Wheeler; released under
+ the D-Bus licenses,
+ GNU GPL version 2 (or greater) and AFL 1.1 (or
+ greater)
+ </xs:documentation>
+ <xs:documentation> see D-Bus specification for documentation
+ </xs:documentation>
+ <xs:documentation> Method arguments SHOULD include "direction",
+ while
+ signal and error arguments SHOULD not (since there's no point).
+ The
+ DTD format can't express that subtlety.
+ </xs:documentation>
+ <xs:documentation> Generic metadata </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="node"/>
+ <xs:element name="interface" type="interfaceType"/>
+ </xs:choice>
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="interfaceType">
+ <xs:sequence>
+ <xs:element name="version" type="xs:string"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="method" type="methodType"/>
+ <xs:element name="signal" type="signalType"/>
+ <xs:element name="property" type="propertyType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="methodType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="signalType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="argType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="direction" default="in">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="in"/>
+ <xs:enumeration value="out"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="propertyType">
+ <xs:annotation>
+ <xs:documentation> AKA "attribute" </xs:documentation>
+ </xs:annotation>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="access" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="read"/>
+ <xs:enumeration value="write"/>
+ <xs:enumeration value="readwrite"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="annotationType">
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="value" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- proprietary extensions from LBS-EG -->
+ <!-- <xs:complexType name="versionType" /> -->
+ <xs:complexType name="docType">
+ <xs:sequence>
+ <!-- <xs:element maxOccurs="unbounded" name="line" type="lineType"/> -->
+ <xs:element maxOccurs="unbounded" name="line" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="statusType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Approved"/>
+ <xs:enumeration value="Pending"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="pocType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Yes"/>
+ <xs:enumeration value="No"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="obligationType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Mandatory"/>
+ <xs:enumeration value="Optional"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="errorType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- <xs:complexType name="lineType" /> -->
+</xs:schema>
diff --git a/api/navigation-core/introspect.xsl b/api/navigation-core/introspect.xsl
new file mode 100644
index 0000000..29cc34c
--- /dev/null
+++ b/api/navigation-core/introspect.xsl
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!--
+ Copyright (C) 2005 Lennart Poettering.
+
+ Licensed under the Academic Free License version 2.1
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+ <!-- v0.1 26-06-2011 Marco Residori: Added support for inline documentation (tags doc,line and version) -->
+ <!-- v0.2 12-01-2012 Marco Residori: Added support for inline documentation (tags status,type) -->
+ <!-- v0.3 18-01-2012 Marco Residori: Added support for inline documentation (tag error) -->
+ <!-- v0.4 14-03-2012 Marco Residori: Added support for property-type and property-access. Replaced tag 'type' with 'obligation' -->
+
+ <!-- $Id$ -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .type { font-weight: bold; font-size: 10pt }
+ .symbol { font-family: monospace }
+ .title { font-style: italic; color: blue }
+ .interface { padding: 10px; margin: 10px }
+
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ .status { font-weight: bold; font-size:6pt }
+ .obligation { font-weight: bold; font-size:6pt }
+ .error { font-style: italic; font-size:8pt; color: black}
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- interfaces -->
+ <xsl:for-each select="node/interface">
+ <div class="interface">
+ <h1>
+ <span class="keyword">interface</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <ul>
+ <xsl:apply-templates select="doc"/>
+ </ul>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- methods, signals and properties -->
+ <xsl:for-each select="method|signal|property">
+ <hr/>
+ <li>
+ <xsl:if test="status !=''">
+ <span class="status">[<xsl:value-of select="status"/>] </span>
+ </xsl:if>
+ <xsl:if test="obligation !=''">
+ <span class="obligation">[<xsl:value-of select="obligation"/>] </span>
+ </xsl:if>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">
+ <xsl:value-of select="name()"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="keyword">
+ <xsl:value-of select="@access"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- arguments -->
+ <xsl:for-each select="arg">
+ <br/>
+ <xsl:apply-templates select="doc"/>
+ <li>
+ <span class="keyword">
+ <xsl:choose>
+ <xsl:when test="@direction !=''">
+ <xsl:value-of select="@direction"/>
+ </xsl:when>
+ <xsl:when test="name(..) ='signal'">
+ out
+ </xsl:when>
+ <xsl:otherwise>
+ in
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ </li>
+ </xsl:for-each>
+ <br/>
+ <!-- errors -->
+ <xsl:apply-templates select="error"/>
+ <br/>
+ </ul>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </div>
+ </xsl:for-each>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="annotation">
+ <li>
+ <span class="keyword">annotation</span>
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ <xsl:text> = </xsl:text>
+ <code>
+ <xsl:value-of select="@value"/>
+ </code>
+ </li>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+ <xsl:template match="error">
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">error</span>
+ <xsl:text> </xsl:text>
+ <span class="error">
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ </span>
+ <xsl:element name="br"/>
+ <br/>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/poi-service/constants.xsl b/api/poi-service/constants.xsl
new file mode 100644
index 0000000..7616ebb
--- /dev/null
+++ b/api/poi-service/constants.xsl
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!-- 09.3.2011 Marco Residori: First Draft -->
+ <!-- 14.3.2011 Marco Residori: Improved layout -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .id { font-style: italic; font-size:8pt; }
+ .title { font-style: italic; color: blue }
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- definitions -->
+ <xsl:apply-templates select="constants"/>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="constants">
+ <div class="constants">
+ <h1>
+ <span class="keyword">constants</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <xsl:apply-templates select="doc"/>
+ <xsl:for-each select="id">
+ <hr/>
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="id"><xsl:value-of select="@name"/> = <xsl:value-of select="@value"/></span>
+ </li>
+ </xsl:for-each>
+ </div>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/poi-service/enum.xsl b/api/poi-service/enum.xsl
new file mode 100644
index 0000000..4c093e8
--- /dev/null
+++ b/api/poi-service/enum.xsl
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- ************************************************************************
+* Component Name: Navit POC
+* Author: Martin Schaller <martin.schaller@it-schaller.de>
+*
+* Copyright (C) 2012, GENIVI Alliance, Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+************************************************************************ -->
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <xsl:output method="text" encoding="iso-8859-15"/>
+ <xsl:template match="constants">
+ <xsl:variable name="constants" select="translate(@name,'abcdefghijklmnopqrstuvwxyz','ABCDEFGHIJKLMNOPQRSTUVWXYZ')"/>
+/* This is an automatically generated file, do not edit */
+
+enum GENIVI_<xsl:value-of select="$constants"/>_Constants {<xsl:for-each select="id">
+ GENIVI_<xsl:value-of select="$constants"/>_<xsl:value-of select="translate(@name,'-','_')"/> = <xsl:value-of select="@value"/>,</xsl:for-each>
+};
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/api/poi-service/genivi-poiservice-constants.xml b/api/poi-service/genivi-poiservice-constants.xml
new file mode 100644
index 0000000..4831a80
--- /dev/null
+++ b/api/poi-service/genivi-poiservice-constants.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="constants.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<constants name="POIService">
+ <version>1.0.0 (19.12.2012)</version>
+ <doc>
+ <line>This document defines the constants used in the POIService APIs</line>
+ </doc>
+ <id name="INVALID" value="0"/>
+ <id name="AIRPORT" value="1"/>
+ <id name="SPORTING" value="2"/>
+ <id name="FERRY_TERMINAL" value="3"/>
+ <id name="ENTERTAINMENT" value="4"/>
+ <id name="HOTEL_MOTEL" value="5"/>
+ <id name="RESTAURANT" value="6"/>
+ <id name="PARKING" value="7"/>
+ <id name="FUEL_STATION" value="8"/>
+ <id name="SERVICE_AREA" value="9"/>
+ <id name="CAR_REPAIR_SHOP" value="10"/>
+ <id name="CAR_DEALER" value="11"/>
+ <id name="CAR_RENTAL_AGENCY" value="12"/>
+ <id name="MEDICAL" value="13"/>
+ <id name="SHOPPING" value="14"/>
+ <id name="BUSINESS_AREA" value="15"/>
+ <id name="LANDMARK" value="16"/>
+ <id name="FLASH_RADAR" value="17"/>
+ <id name="POI_TRUCK" value="18"/>
+ <id name="SANCTUARY" value="19"/>
+ <id name="TOLLBOOTH" value="20"/>
+ <id name="KIOSK" value="21"/>
+ <id name="WATER_CLOSET" value="22"/>
+ <id name="BANK_AND_FINANCIAL" value="23"/>
+ <id name="TRAVEL" value="24"/>
+ <id name="TOURIST" value="25"/>
+ <id name="PUBLIC_BUILDING" value="26"/>
+ <id name="RAILWAY_STATION" value="27"/>
+ <id name="DESTINATION_FLAG" value="204"/>
+ <id name="FAVORITE" value="205"/>
+ <id name="FAVORITE_HOME" value="206"/>
+ <id name="FAVORITE_ADDRESSBOOK" value="207"/>
+ <id name="USER_IMPORT" value="208"/>
+ <id name="USER_CONTACT" value="209"/>
+ <id name="MOTORWAY_EXIT" value="210"/>
+ <id name="ALL_CATEGORIES" value="0xffff"/>
+ <id name="STRING" value="500"/>
+ <id name="INTEGER" value="501"/>
+ <id name="COORDINATES" value="502"/>
+ <id name="NOT_STARTED" value="510"/>
+ <id name="SEARCHING" value="511"/>
+ <id name="FINISHED" value="512"/>
+ <id name="MORE_THAN" value="520"/>
+ <id name="LESS_THAN" value="521"/>
+ <id name="EQUAL" value="522"/>
+ <id name="SORT_DEFAULT" value="560"/>
+ <id name="SORT_BY_DISTANCE" value="561"/>
+ <id name="SORT_BY_TIME" value="562"/>
+ <id name="OFF_ROUTE" value="600"/>
+ <id name="ON_ROUTE" value="601"/>
+ <id name="INSIDE_CORRIDOR" value="602"/>
+ <id name="ADDED" value="700" />
+ <id name="REMOVED" value="701" />
+ <id name="ATTR_ADDED" value="702" />
+ <id name="ATTR_MODIFIED" value="703" />
+ <id name="ATTR_REMOVED" value="704" />
+</constants>
diff --git a/api/poi-service/genivi-poiservice-contentaccessmodule.xml b/api/poi-service/genivi-poiservice-contentaccessmodule.xml
new file mode 100644
index 0000000..cf04798
--- /dev/null
+++ b/api/poi-service/genivi-poiservice-contentaccessmodule.xml
@@ -0,0 +1,215 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/poiservice" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.poiservice.POIContentAccessModule">
+ <version>1.0.0 (19-12-2012)</version>
+ <doc>
+ <line>This interface offers a set of common methods to the POI components to deal with all the content access modules (CAM). The CAM provide and update POI and categories information from remote sources to the POIService modules</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the content access module.</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 22-05-2012)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetLanguage">
+ <doc>
+ <line>SetLanguage = Set the current language set for the search by poi provider module.</line>
+ <line>The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language.</line>
+ </doc>
+ <arg direction="in" name="languageCode" type="s">
+ <doc>
+ <line>languageCode = The language.</line>
+ </doc>
+ </arg>
+ <arg direction="in" name="countryCode" type="s">
+ <doc>
+ <line>countryCode = The country specific variant for the language.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="PoiSearchStarted">
+ <doc>
+ <line>PoiSearchStarted = This method is sent by the POI service component to inform all the CAM that a new POI search was started.</line>
+ <line>It provides all the relevant search parameters. Of course the CAM will only be aware of the search if it registers one of the search categories.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle. It must be used by the CAM to send the list of results to the component.</line>
+ </doc>
+ </arg>
+ <arg name="maxSize" type="q" direction="in">
+ <doc>
+ <line>maxSize = max size of the results list</line>
+ </doc>
+ </arg>
+ <arg name="location" type="(ddi)" direction="in">
+ <doc>
+ <line>location = struct(lat,lon,alt)</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>alt = altitude above the sea level of the current position in meters</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="a(qu)" direction="in">
+ <doc>
+ <line>poiCategories = array[struct(category, radius)]</line>
+ <line>category = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>radius = activation or search radius around the position (in 10 meters) for the category. If value is 0 (zero), the default radius (defined for a category) is applied.</line>
+ <line>Note: A POI category is a unique ID. It could be a predifined category or a custom one defined by a POI plug-in.</line>
+ </doc>
+ </arg>
+ <arg name="poiAttributes" type="a(sqqvqb)" direction="in">
+ <doc>
+ <line>poiAtttributes = array[struct(name, poiCategory, type, value, operator, mandatory)]</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>poiCategory = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value or partial value. The value depends on the attribute specifications and type.</line>
+ <line>operator = enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)</line>
+ <line>mandatory = true if the attribute is mandatory for the search and false for optional.</line>
+ </doc>
+ </arg>
+ <arg name="inputString" type="s" direction="in">
+ <doc>
+ <line>inputString = contains the name of the poi that is searched. It could be a partial name or an empty string.</line>
+ </doc>
+ </arg>
+ <arg name="sortOption" type="q" direction="in">
+ <doc>
+ <line>sortOption = enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>If more than one category was defined for this search, the sort criteria should be compliant with all categories.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="PoiSearchCanceled">
+ <doc>
+ <line>PoiSearchCanceled = This method cancels the search for the current id</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="ResultListRequested">
+ <doc>
+ <line>ResultListRequested = This method provides the poi results list found by the CAM.</line>
+ <line>As the POI unique id is managed by the POI component, the CAM only provides the POI name, the category and coordinates as well as all the relevant detailed information.</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="attributes" type="as" direction="in">
+ <doc>
+ <line>attributes = List of attributes name to retrieve. This is optional and the list could be empty.</line>
+ </doc>
+ </arg>
+ <arg name="statusValue" type="q" direction="out">
+ <doc>
+ <line>statusValue = enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... )</line>
+ </doc>
+ </arg>
+ <arg name="resultListSize" type="q" direction="out">
+ <doc>
+ <line>resultListSize = Number of items of the results list</line>
+ </doc>
+ </arg>
+ <arg name="resultList" type="a(usq(ddi)qa(sqv))" direction="out">
+ <doc>
+ <line>resultList = array[source_id,name, category, location, distance, attributes]</line>
+ <line>source_id = POI unique id as known by the content access module. This id will be used by POI service to request POI details.</line>
+ <line>name = POI name</line>
+ <line>category = POI category unique id</line>
+ <line>location = struct(lat,lon,alt)</line>
+ <line>POI location</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>alt = altitude above the sea level of the current position in meters</line>
+ <line>distance = distance in meters to poi from center of the search</line>
+ <line>attributes = array[struct(name, type, value)]</line>
+ <line>List of attributes requested. It could be empty.</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value. The value depends on the attribute specifications and type.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidCategory">
+ <doc>
+ <line>The category associated to a POI is not valid or was not added by the CAM to the component.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="PoiDetailsRequested">
+ <doc>
+ <line>PoiDetailsRequested = This method retrieves the details associated to one or more POI.</line>
+ <line>It contains the name, the parent categories, the list of attributes, the icons, ... .</line>
+ </doc>
+ <arg name="source_id" type="au" direction="in">
+ <doc>
+ <line>list of poi = Unique source poi id</line>
+ </doc>
+ </arg>
+ <arg name="results" type="a((usddi)aqa(sqv))" direction="out">
+ <doc>
+ <line>results = array[details, categories, attributes]</line>
+ <line>results = List of details for all the POI.</line>
+ <line>details = struct(unique id, name, lat, lon, alt)</line>
+ <line>source id = POI id</line>
+ <line>name = POI name</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>alt = altitude above the sea level of the current position in meters</line>
+ <line>categories = array[id]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>attributes = array[struct(name, type, value)]</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value. The value depends on the attribute specifications and type.</line>
+ <line>Note: This list only contains the available attributes. If there is no value for an optional attributes, it is not returned.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidPoiSourceId">
+ <doc>
+ <line>The poi unique source id is not valid for the content access module.</line>
+ </doc>
+ </error>
+ </method>
+ </interface>
+</node>
diff --git a/api/poi-service/genivi-poiservice-poicontentaccess.xml b/api/poi-service/genivi-poiservice-poicontentaccess.xml
new file mode 100644
index 0000000..2a025bb
--- /dev/null
+++ b/api/poi-service/genivi-poiservice-poicontentaccess.xml
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/poiservice" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.poiservice.POIContentAccess">
+ <version>1.0.0 (19-12-2012)</version>
+ <doc>
+ <line>This interface offers a set of common methods for Content Access Modules (CAM). The CAM provide and update POI and categories information from remote sources to the POIService modules</line>
+ </doc>
+ <method name="RegisterContentAccessModule">
+ <doc>
+ <line>RegisterContentAccessModule = Register to the POI provider module.</line>
+ <line>When the CAM registers, it provides a name and then get a unique id. This id must be used everytime the CAM communicates with the POI service component.</line>
+ <line>After the registration is done, the CAM can start to update POI categories and POI attributes as well as registers POI categories to search for.</line>
+ </doc>
+ <arg direction="in" name="moduleName" type="s">
+ <doc>
+ <line>moduleName = The name of the CAM.</line>
+ </doc>
+ </arg>
+ <arg direction="out" name="camId" type="y">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.RegistrationFailed">
+ <doc>
+ <line>The registration failed (for instance the name is not unique).</line>
+ </doc>
+ </error>
+ </method>
+ <method name="UnRegisterContentAccessModule">
+ <doc>
+ <line>UnRegisterContentAccessModule = Remove CAM from POI provider module.</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="RegisterPoiCategories">
+ <doc>
+ <line>RegisterPoiCategories = Register to the POI provider module the categories you can search for POI.</line>
+ <line>The categories could be predifined one or customized ones. In order to register a customized category, you might need to create it before and add it to the POI service component.</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="aq" direction="in">
+ <doc>
+ <line>poiCategories = array[unique_id]</line>
+ <line>List of POI categories to register.</line>
+ <line>unique_id = Unique category id</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidCategory">
+ <doc>
+ <line>The category was already registered.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="AddCategories">
+ <doc>
+ <line>AddCategories = Add new categories to the POI service component.</line>
+ <line>The CAM provides for each categories the name, the parent categories, the top level attribute, the list of attributes, the icons, ... .</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="a((aqvssv)a(sqa(qs))a(qs))" direction="in">
+ <doc>
+ <line>poiCategories = array[details, attributes, sortOptions]</line>
+ <line>List of details for all the POI categories.</line>
+ <line>details = struct(list of parents_id, icons, name, short_desc, media)]</line>
+ <line>parents_id = list of parent categories unique id</line>
+ <line>icons = visual icons set</line>
+ <line>name = name</line>
+ <line>short_desc = short category description (optional)</line>
+ <line>media = medial associated (html web site, audio, video, ...) (optional)</line>
+ <line>attributes = array[struct(name, type, array[struct(operator_id, operator_name)])</line>
+ <line>name = attribute unique name</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>operator_id = enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)</line>
+ <line>operator_name = attribute operator name</line>
+ <line>sortOptions = array[struct(id, name)]</line>
+ <line>id = enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>name = name to be displayed by application</line>
+ </doc>
+ </arg>
+ <arg name="poiCategoriesId" type="aq" direction="out">
+ <doc>
+ <line>poiCategoriesId = array of unique POI categories as registered by the POI service component.</line>
+ <line>Note: A POI category is a unique ID.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidCategory">
+ <doc>
+ <line>The category was already added or is already a predifined one.</line>
+ <line>Note: As there is no id yet, a category is defined as unique if there was no category registered before with the same name and parent category.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="UpdateCategories">
+ <doc>
+ <line>UpdateCategories = Update categories in the POI service component. It could be a predifined or a customed one.</line>
+ <line>The CAM provides for each categories the list of attributes (mandatories like name or optional) it wants to update.</line>
+ <line>Depending on the local database write policy, the CAM might only be able to update customized attributes for a category and not the predefined ones so some update could be rejected.</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="a(qa(sqa(qs))a(qs))" direction="in">
+ <doc>
+ <line>poiCategories = array[unique_id, attributes, sortOptions]</line>
+ <line>List of attributes to update.</line>
+ <line>unique_id = unique category id</line>
+ <line>attributes = array[struct(name, type, array[struct(operator_id, operator_name)])</line>
+ <line>name = attribute unique name</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>operator_id = enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)</line>
+ <line>operator_name = attribute operator name</line>
+ <line>sortOptions = array[struct(id, name)]</line>
+ <line>id = enum(SORT_DEFAULT,BY_DISTANCE,BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>name = name to be displayed by application</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.ReadOnly">
+ <doc>
+ <line>At least one of the attribute of a given category was not updated due to read-only policy.</line>
+ <line>Note: The other attributes were updated.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidCategory">
+ <doc>
+ <line>One of the category is not available.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="RemoveCategories">
+ <doc>
+ <line>RemoveCategories = Remove categories from the POI service component. It could be a predifined or a customed one.</line>
+ <line>Depending on the local database write policy, the CAM might only not be able to remove some categories.</line>
+ </doc>
+ <arg name="camId" type="y" direction="in">
+ <doc>
+ <line>camId = Content access module unique id as known by the POI service component.</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="aq" direction="in">
+ <doc>
+ <line>poiCategories = array[unique_id]</line>
+ <line>List of categories to remove.</line>
+ <line>unique_id = unique category id</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.CamNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to send data to the POI service component but the CAM id is not registered.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.ReadOnly">
+ <doc>
+ <line>At least one of the category was not deleted due to read-only policy.</line>
+ <line>Note: The other categories were removed.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiContentAccess.Error.InvalidCategory">
+ <doc>
+ <line>One of the category is not available.</line>
+ </doc>
+ </error>
+ </method>
+ </interface>
+</node>
diff --git a/api/poi-service/genivi-poiservice-poisearch.xml b/api/poi-service/genivi-poiservice-poisearch.xml
new file mode 100644
index 0000000..c674141
--- /dev/null
+++ b/api/poi-service/genivi-poiservice-poisearch.xml
@@ -0,0 +1,609 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?xml-stylesheet type="text/xsl" href="introspect.xsl"?>
+<!-- SPDX-License-Identifier: MPL-2.0
+ Copyright (C) 2014, BMW Car IT GmbH, Continental Automotive GmbH, PCA Peugeot Citroën, XS Embedded GmbH, TomTom International B.V., Alpine Electronics R&D Europe GmbH, AISIN AW CO., LTD., Neusoft Technology Solutions GmbH, Jaguar Land Rover Limited, Visteon Corporation
+ This Source Code Form is subject to the terms of the
+ Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ this file, you can obtain one at http://mozilla.org/MPL/2.0/.
+-->
+<node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="/org/genivi/poiservice" xsi:noNamespaceSchemaLocation="introspect.xsd">
+ <interface name="org.genivi.poiservice.POISearch">
+ <version>1.0.0 (19-12-2012)</version>
+ <doc>
+ <line>This interface offers methods that implement the POI search functionality of a navigation system</line>
+ </doc>
+ <method name="GetVersion">
+ <doc>
+ <line>GetVersion = This method returns the API version implemented by the server application</line>
+ </doc>
+ <arg name="version" type="(qqqs)" direction="out">
+ <doc>
+ <line>version = struct(major,minor,micro,date)</line>
+ <line>major = when the major changes, then backward compatibility with previous releases is not granted</line>
+ <line>minor = when the minor changes, then backward compatibility with previous releases is granted, but something changed in the implementation of the API (e.g. new methods may have been added)</line>
+ <line>micro = when the micro changes, then backward compatibility with previous releases is granted (bug fixes or documentation modifications)</line>
+ <line>date = release date (e.g. 22-05-2012)</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetLanguage">
+ <doc>
+ <line>GetLanguage = Get the current language set for the search.</line>
+ <line>The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language.</line>
+ </doc>
+ <arg direction="out" name="languageCode" type="s">
+ <doc>
+ <line>languageCode = The language.</line>
+ </doc>
+ </arg>
+ <arg direction="out" name="countryCode" type="s">
+ <doc>
+ <line>countryCode = The country specific variant for the language.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="SetLanguage">
+ <doc>
+ <line>SetLanguage = Set the language.</line>
+ <line>The language defines the poi and categories name and details language. If the language is not supported, the default details will be returned in the native language.</line>
+ </doc>
+ <arg direction="in" name="languageCode" type="s">
+ <doc>
+ <line>languageCode = The language to be used.</line>
+ </doc>
+ </arg>
+ <arg direction="in" name="countryCode" type="s">
+ <doc>
+ <line>countryCode = The country specific variant for the language to be used.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="ValidateCategories">
+ <doc>
+ <line>ValidateCategories = This method allows the application to validate that POI categories are supported by the POI component and the Content access modules.</line>
+ </doc>
+ <arg name="categories" type="aq" direction="in">
+ <doc>
+ <line>categories = array[id]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>Note: A POI category is a unique ID.</line>
+ </doc>
+ </arg>
+ <arg name="results" type="a(qb)" direction="out">
+ <doc>
+ <line>results = array[unique_id, status]</line>
+ <line>results = List of status for all the POI categories.</line>
+ <line>unique id = POI id</line>
+ <line>status = true if the category is available.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetAvailableCategories">
+ <doc>
+ <line>GetAvailableCategories = This method retrieves the list od POI categories available (pre-defined and custom).</line>
+ </doc>
+ <arg name="categories" type="a(qsb)" direction="out">
+ <doc>
+ <line>categories = array[struct(id, name, top_level)]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>name = name to be displayed by application</line>
+ <line>top_level = true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.</line>
+ <line>Note: A POI category is a unique ID.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetRootCategory">
+ <doc>
+ <line>GetRootCategory = Get the root category id. That would be ALL_CATEGORIES.</line>
+ </doc>
+ <arg name="category" type="q" direction="out">
+ <doc>
+ <line>id = ALL_CATEGORIES</line>
+ <line>The root category is a top level one by design.</line>
+ </doc>
+ </arg>
+ </method>
+ <method name="GetChildrenCategories">
+ <doc>
+ <line>GetChildrenCategories = Get the children categories id and type (top level) from the a parent unique id.</line>
+ </doc>
+ <arg name="category" type="q" direction="in">
+ <doc>
+ <line>unique category id</line>
+ </doc>
+ </arg>
+ <arg name="categories" type="a(qb)" direction="out">
+ <doc>
+ <line>categories = array[struct(id, top_level)]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>top_level = true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>The category is not available.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetParentCategories">
+ <doc>
+ <line>GetParentCategories = Get the parent categories id and type (top level) from the a unique id.</line>
+ </doc>
+ <arg name="category" type="q" direction="in">
+ <doc>
+ <line>unique category id</line>
+ </doc>
+ </arg>
+ <arg name="categories" type="a(qb)" direction="out">
+ <doc>
+ <line>categories = array[struct(id, top_level)]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>top_level = true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>The category is not available.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetCategoriesDetails">
+ <doc>
+ <line>GetCategoriesDetails = This method retrieves the details associated to one or more POI categories.</line>
+ <line>It contains the name, the parent categories, the top level attribute, the list of attributes, the icons, ... .</line>
+ </doc>
+ <arg name="categories" type="aq" direction="in">
+ <doc>
+ <line>list of categories = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>Note: A POI category is a unique ID. It could be a predifined category or a custom one defined by a POI plug-in.</line>
+ </doc>
+ </arg>
+ <arg name="results" type="a((qaqvsbsv)a(sqa(qs))a(qs))" direction="out">
+ <doc>
+ <line>results = array[details, attributes, sortOptions]</line>
+ <line>results = List of details for all the POI categories.</line>
+ <line>details = struct(unique_id, list of parents_id, icons, name, top_level, short_desc, media)]</line>
+ <line>unique_id = Category unique id</line>
+ <line>parents_id = list of parent categories unique id</line>
+ <line>icons = visual icons set</line>
+ <line>name = name</line>
+ <line>top_level = true if the category is a pre-defined one (top level), false for customized categories created by plug-in.</line>
+ <line>short_desc = short category description (optional)</line>
+ <line>media = medial associated (html web site, audio, video, ...) (optional)</line>
+ <line>attributes = array[struct(name, type, array[struct(operator_id, operator_name)])</line>
+ <line>name = attribute unique name</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>operator_id = enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)</line>
+ <line>operator_name = attribute operator name</line>
+ <line>sortOptions = array[struct(id, name)]</line>
+ <line>id = enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>name = name to be displayed by application</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>The category is not available.</line>
+ <line>If there are more than one category and one of them is not available, no detailed will be returned for this category but there will be no error.</line>
+ </doc>
+ </error>
+ </method>
+ <signal name="CategoriesUpdated">
+ <doc>
+ <line>CategoriesUpdated = This signal indicates that one or more POI categories were added, updated or removed.</line>
+ </doc>
+ <arg name="poiCategories" type="a(qq)" direction="out">
+ <doc>
+ <line>poiCategories = array[struct(unique_id, reason)]</line>
+ <line>List of POI categories modified or added.</line>
+ <line>unique_id = Unique category id</line>
+ <line>reason = enum(ADDED,REMOVED,ATTR_ADDED,ATTR_MODIFIED,ATTR_REMOVED, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="CreatePoiSearchHandle">
+ <doc>
+ <line>CreatePoiSearchHandle = This method creates a new location input and retrieves a handle</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="out">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.NoMoreHandles">
+ <doc>
+ <line>This error is generated if no more poi search unique handles are available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="DeletePoiSearchHandle">
+ <doc>
+ <line>DeletePoiSearchHandle = This method deletes a location input and its associated resources</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to delete a poi search unique handle that is not available</line>
+ </doc>
+ </error>
+ </method>
+ <method name="SetCenter">
+ <doc>
+ <line>SetCenter = This method sets the location to start the search around.</line>
+ <line>If a route handle was defined before, it will be replaced by this location.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="location" type="(ddi)" direction="in">
+ <doc>
+ <line>location = struct(lat,lon,alt)</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>alt = altitude above the sea level of the current position in meters</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidPosition">
+ <doc>
+ <line>This error is generated if an application tries to set invalid coordinates.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.SearchIsActive">
+ <doc>
+ <line>This error is generated if an application tries to change the search criteria but the search is on-going and could not be updated.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <method name="SetRouteHandle">
+ <doc>
+ <line>SetRouteHandle = This method allows to start a POI search along a guided route.</line>
+ <line>The route handle must be valid or the POI search will failed.</line>
+ <line>If a search location was defined before, it will be replaced by the route.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="sessionHandle" type="y" direction="in">
+ <doc>
+ <line>sessionHandle = session handle</line>
+ </doc>
+ </arg>
+ <arg name="routeHandle" type="y" direction="in">
+ <doc>
+ <line>routeHandle = route handle.</line>
+ </doc>
+ </arg>
+ <arg name="startSearchOffset" type="q" direction="in">
+ <doc>
+ <line>startSearchOffset (optional) = Distance from vehicle (in meters) from where to start the search along. 0 or invalid distance means start from vehicle.</line>
+ </doc>
+ </arg>
+ <arg name="endSearchOffset" type="q" direction="in">
+ <doc>
+ <line>endSearchOffset (optional) = Lenght of the route (in meters) from where to start the search along. 0 or invalid lenght means end is the destination.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidRouteHandle">
+ <doc>
+ <line>This error is generated if an application tries to set invalid route handle.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.SearchIsActive">
+ <doc>
+ <line>This error is generated if an application tries to change the search criteria but the search is on-going and could not be updated.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <method name="SetCategories">
+ <doc>
+ <line>SetCategories = This method sets the POI categories for the current search input and the corresponding result-lists for the current session</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="poiCategories" type="a(qu)" direction="in">
+ <doc>
+ <line>poiCategories = array[struct(category, radius)]</line>
+ <line>category = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>radius = activation or search radius around the position (in 10 meters) for the category. If value is 0 (zero), the default radius (defined for a category) is applied.</line>
+ <line>Note: A POI category is a unique ID. It could be a predifined category or a custom one defined by a POI plug-in.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>This error is generated if an application tries to set one or more invalid poi categories.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.SearchIsActive">
+ <doc>
+ <line>This error is generated if an application tries to change the search criteria but the search is on-going and could not be updated.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <method name="SetAttributes">
+ <doc>
+ <line>SetAttributes = This method set POI attributes (optional) for the current search input and the corresponding result-lists for the current session</line>
+ <line>An attribute is attached to a category</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="poiAttributes" type="a(sqqvqb)" direction="in">
+ <doc>
+ <line>poiAtttributes = array[struct(name, poiCategory, type, value, operator, mandatory)]</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>poiCategory = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value or partial value. The value depends on the attribute specifications and type.</line>
+ <line>operator = enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)</line>
+ <line>mandatory = true if the attribute is mandatory for the search and false for optional.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidPoiAttribute">
+ <doc>
+ <line>This error is generated if an application tries to set one or more invalid poi attributes.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.SearchIsActive">
+ <doc>
+ <line>This error is generated if an application tries to change the search criteria but the search is on-going and could not be updated.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <method name="StartPoiSearch">
+ <doc>
+ <line>StartPoiSearch = This method sends the search input for the search handle.</line>
+ <line>The search will start with the either the location or the route handle.</line>
+ <line>If no positon or route handle were configured, the search will use the vehicle position are center location.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="inputString" type="s" direction="in">
+ <doc>
+ <line>inputString = contains the name of the poi that is searched. It could be a partial name or an empty string.</line>
+ </doc>
+ </arg>
+ <arg name="sortOption" type="q" direction="in">
+ <doc>
+ <line>sortOption = enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>If more than one category was defined for this search, the sort criteria should be compliant with all categories.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>This error is generated if an application tries to start a search without, at least, one poi category defined.</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.BadLocation">
+ <doc>
+ <line>This error is generated if an application tries to start a search without a valid location (coordinates or route handle) defined.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="CancelPoiSearch">
+ <doc>
+ <line>CancelPoiSearch = This method cancels the search for the current session</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <method name="StartPoiProximityAlert">
+ <doc>
+ <line>StartPoiProximityAlert = This method starts to check for POI aound vehicle according to the criteria defined with the unique handle.</line>
+ <line>Bt default, it will search for POI around vehicle position with default radius defined for each categories.</line>
+ <line>If a route handle was defined, it will search along the route with default categorie's radius.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi alert unique handle</line>
+ </doc>
+ </arg>
+ <arg name="inputString" type="s" direction="in">
+ <doc>
+ <line>inputString = contains the name of the poi that is searched. It could be a partial name or an empty string.</line>
+ </doc>
+ </arg>
+ <arg name="sortOption" type="q" direction="in">
+ <doc>
+ <line>sortOption = enum(SORT_DEFAULT,SORT_BY_DISTANCE,SORT_BY_TIME,ATTRIBUTE_CUSTOM, ... )</line>
+ <line>If more than one category was defined for this search, the sort criteria should be compliant with all categories.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidCategory">
+ <doc>
+ <line>This error is generated if an application tries to start a search without, at least, one poi category defined.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="CancelPoiProximityAlert">
+ <doc>
+ <line>CancelPoiProximityAlert = This method cancels the search for the current session</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi alert unique handle</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ </method>
+ <signal name="PoiStatus">
+ <doc>
+ <line>PoiStatus = This signal updates the search or proximity alert status of the specified handle.</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="out">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="statusValue" type="q" direction="out">
+ <doc>
+ <line>statusValue = enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... )</line>
+ </doc>
+ </arg>
+ </signal>
+ <signal name="ResultListChanged">
+ <doc>
+ <line>ResultListChanged = This signal updates in the poi results list</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="out">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="resultListSize" type="q" direction="out">
+ <doc>
+ <line>resultListSize = Number of items of the results list</line>
+ </doc>
+ </arg>
+ </signal>
+ <method name="RequestResultList">
+ <doc>
+ <line>RequestResultList = This method gets the poi result list (e.g. after a Search/Scroll call)</line>
+ </doc>
+ <arg name="poiSearchHandle" type="y" direction="in">
+ <doc>
+ <line>poiSearchHandle = poi search unique handle</line>
+ </doc>
+ </arg>
+ <arg name="offset" type="q" direction="in">
+ <doc>
+ <line>offset = starting offset of the newly requested list elements. If invalid (more that total list for instance) it starts from the begining.</line>
+ </doc>
+ </arg>
+ <arg name="maxWindowSize" type="q" direction="in">
+ <doc>
+ <line>maxWindowSize = maximum number of elements that should be returned as result</line>
+ </doc>
+ </arg>
+ <arg name="attributes" type="as" direction="in">
+ <doc>
+ <line>attributes = List of attributes name to retrieve. This is optional and the list could be empty.</line>
+ </doc>
+ </arg>
+ <arg name="statusValue" type="q" direction="out">
+ <doc>
+ <line>statusValue = enum(INVALID,NOT_STARTED,SEARCHING,FINISHED, ... )</line>
+ </doc>
+ </arg>
+ <arg name="resultListSize" type="q" direction="out">
+ <doc>
+ <line>resultListSize = Number of items of the results list</line>
+ </doc>
+ </arg>
+ <arg name="resultListWindow" type="a(uuqa(sqv))" direction="out">
+ <doc>
+ <line>resultListWindow = array[unique_id, distance, route_status, attributes]</line>
+ <line>unique_id = POI unique id</line>
+ <line>distance = distance in meters to poi from center of the search or from vehicle if search along</line>
+ <line>route_status = enum(OFF_ROUTE,ON_ROUTE,INSIDE_CORRIDOR, ... )</line>
+ <line>attributes = array[struct(name, type, value)]</line>
+ <line>List of attributes requested. It could be empty.</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value. The value depends on the attribute specifications and type.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.HandleNotAvailable">
+ <doc>
+ <line>This error is generated if an application tries to use a poi search unique handle that is not available or not valid</line>
+ </doc>
+ </error>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidPoiAttribute">
+ <doc>
+ <line>This error is generated if an application tries to get one or more invalid poi attributes.</line>
+ </doc>
+ </error>
+ </method>
+ <method name="GetPoiDetails">
+ <doc>
+ <line>GetPoiDetails = This method retrieves the details associated to one or more POI.</line>
+ <line>It contains the name, the parent categories, the list of attributes, the icons, ... .</line>
+ </doc>
+ <arg name="id" type="au" direction="in">
+ <doc>
+ <line>list of poi = Unique poi id</line>
+ </doc>
+ </arg>
+ <arg name="results" type="a((usddi)aqa(sqv))" direction="out">
+ <doc>
+ <line>results = array[details, categories, attributes]</line>
+ <line>results = List of details for all the POI.</line>
+ <line>details = struct(unique id, name, lat, lon, alt)</line>
+ <line>unique id = POI id</line>
+ <line>name = POI name</line>
+ <line>lat = latitude of a vertex of the polygon in format %3.6f. Range [-90:+90]. Example: 48.053250</line>
+ <line>lon = longitude of a vertex of the polygon in format %3.6f. Range [-180:+180]. Example: 48.053250</line>
+ <line>alt = altitude above the sea level of the current position in meters</line>
+ <line>categories = array[id]</line>
+ <line>id = enum(INVALID,ALL_CATEGORIES,AIRPORT,RESTAURANT,HOTEL,GAZ_STATION,CAR_PARK, ...)</line>
+ <line>attributes = array[struct(name, type, value)]</line>
+ <line>name = attribute unique name (see data model)</line>
+ <line>type = enum(INVALID,STRING,INTEGER,COORDINATES ...)</line>
+ <line>value = value. The value depends on the attribute specifications and type.</line>
+ <line>Note: This list only contains the available attributes. If there is no value for an optional attributes, it is not returned.</line>
+ </doc>
+ </arg>
+ <error name="org.genivi.poiservice.poiSearch.Error.InvalidPoiId">
+ <doc>
+ <line>The poi unique id is not valid.</line>
+ </doc>
+ </error>
+ </method>
+ </interface>
+</node>
diff --git a/api/poi-service/introspect.xsd b/api/poi-service/introspect.xsd
new file mode 100755
index 0000000..76ed7ef
--- /dev/null
+++ b/api/poi-service/introspect.xsd
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wmh="http://www.wmhelp.com/2003/eGenerator" elementFormDefault="qualified">
+ <!-- xmlns="introspect.dtd"
+ targetNamespace="introspect.dtd"> -->
+ <xs:element name="node">
+ <xs:annotation>
+ <xs:documentation> DTD for D-Bus Introspection data
+ </xs:documentation>
+ <xs:documentation> (C) 2005-02-02 David A. Wheeler; released under
+ the D-Bus licenses,
+ GNU GPL version 2 (or greater) and AFL 1.1 (or
+ greater)
+ </xs:documentation>
+ <xs:documentation> see D-Bus specification for documentation
+ </xs:documentation>
+ <xs:documentation> Method arguments SHOULD include "direction",
+ while
+ signal and error arguments SHOULD not (since there's no point).
+ The
+ DTD format can't express that subtlety.
+ </xs:documentation>
+ <xs:documentation> Generic metadata </xs:documentation>
+ </xs:annotation>
+ <xs:complexType>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element ref="node"/>
+ <xs:element name="interface" type="interfaceType"/>
+ </xs:choice>
+ <xs:attribute name="name" type="xs:string"/>
+ </xs:complexType>
+ </xs:element>
+ <xs:complexType name="interfaceType">
+ <xs:sequence>
+ <xs:element name="version" type="xs:string"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="method" type="methodType"/>
+ <xs:element name="signal" type="signalType"/>
+ <xs:element name="property" type="propertyType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="methodType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="signalType">
+ <xs:sequence>
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="doc" type="docType"/>
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="arg" type="argType"/>
+ <xs:element name="annotation" type="annotationType"/>
+ <xs:element name="error" type="errorType"/>
+ </xs:choice>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <xs:complexType name="argType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="direction" default="in">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="in"/>
+ <xs:enumeration value="out"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="propertyType">
+ <xs:annotation>
+ <xs:documentation> AKA "attribute" </xs:documentation>
+ </xs:annotation>
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
+ <xs:element name="status" type="statusType" minOccurs="0"/>
+ <xs:element name="poc" type="pocType" minOccurs="0"/>
+ <xs:element name="obligation" type="obligationType" minOccurs="0"/>
+ <xs:element name="annotation" type="annotationType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="type" type="xs:string" use="required"/>
+ <xs:attribute name="access" use="required">
+ <xs:simpleType>
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="read"/>
+ <xs:enumeration value="write"/>
+ <xs:enumeration value="readwrite"/>
+ </xs:restriction>
+ </xs:simpleType>
+ </xs:attribute>
+ </xs:complexType>
+ <xs:complexType name="annotationType">
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ <xs:attribute name="value" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- proprietary extensions from LBS-EG -->
+ <!-- <xs:complexType name="versionType" /> -->
+ <xs:complexType name="docType">
+ <xs:sequence>
+ <!-- <xs:element maxOccurs="unbounded" name="line" type="lineType"/> -->
+ <xs:element maxOccurs="unbounded" name="line" type="xs:string"/>
+ </xs:sequence>
+ </xs:complexType>
+ <xs:simpleType name="statusType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Approved"/>
+ <xs:enumeration value="Pending"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="pocType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Yes"/>
+ <xs:enumeration value="No"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:simpleType name="obligationType">
+ <xs:restriction base="xs:NMTOKEN">
+ <xs:enumeration value="Mandatory"/>
+ <xs:enumeration value="Optional"/>
+ </xs:restriction>
+ </xs:simpleType>
+ <xs:complexType name="errorType">
+ <xs:sequence>
+ <xs:element name="doc" type="docType"/>
+ </xs:sequence>
+ <xs:attribute name="name" type="xs:string" use="required"/>
+ </xs:complexType>
+ <!-- <xs:complexType name="lineType" /> -->
+</xs:schema>
diff --git a/api/poi-service/introspect.xsl b/api/poi-service/introspect.xsl
new file mode 100644
index 0000000..29cc34c
--- /dev/null
+++ b/api/poi-service/introspect.xsl
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml" version="1.0">
+ <!--
+ Copyright (C) 2005 Lennart Poettering.
+
+ Licensed under the Academic Free License version 2.1
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+-->
+
+ <!-- v0.1 26-06-2011 Marco Residori: Added support for inline documentation (tags doc,line and version) -->
+ <!-- v0.2 12-01-2012 Marco Residori: Added support for inline documentation (tags status,type) -->
+ <!-- v0.3 18-01-2012 Marco Residori: Added support for inline documentation (tag error) -->
+ <!-- v0.4 14-03-2012 Marco Residori: Added support for property-type and property-access. Replaced tag 'type' with 'obligation' -->
+
+ <!-- $Id$ -->
+ <xsl:output method="xml" version="1.0" encoding="iso-8859-15" doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" indent="yes"/>
+ <xsl:template match="/">
+ <html>
+ <!-- head -->
+ <head>
+ <title>DBUS Introspection Data</title>
+ <style type="text/css">
+ body { color: black; background-color: white }
+ h1 { font-family: sans-serif }
+ ul { list-style-type: none; margin-bottom: 10px }
+ li { font-family: sans-serif }
+ .keyword { font-style: italic }
+ .type { font-weight: bold; font-size: 10pt }
+ .symbol { font-family: monospace }
+ .title { font-style: italic; color: blue }
+ .interface { padding: 10px; margin: 10px }
+
+ .line { font-style: italic; font-size:8pt; color: green}
+ .version { font-family: monospace }
+ .status { font-weight: bold; font-size:6pt }
+ .obligation { font-weight: bold; font-size:6pt }
+ .error { font-style: italic; font-size:8pt; color: black}
+ </style>
+ </head>
+ <!-- body -->
+ <body>
+ <!-- interfaces -->
+ <xsl:for-each select="node/interface">
+ <div class="interface">
+ <h1>
+ <span class="keyword">interface</span>
+ <xsl:text> </xsl:text>
+ <span class="title">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="version">version</span>
+ <xsl:text> </xsl:text>
+ <span class="version">
+ <xsl:value-of select="version"/>
+ </span>
+ </h1>
+ <ul>
+ <xsl:apply-templates select="doc"/>
+ </ul>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- methods, signals and properties -->
+ <xsl:for-each select="method|signal|property">
+ <hr/>
+ <li>
+ <xsl:if test="status !=''">
+ <span class="status">[<xsl:value-of select="status"/>] </span>
+ </xsl:if>
+ <xsl:if test="obligation !=''">
+ <span class="obligation">[<xsl:value-of select="obligation"/>] </span>
+ </xsl:if>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">
+ <xsl:value-of select="name()"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="keyword">
+ <xsl:value-of select="@access"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <ul>
+ <xsl:apply-templates select="annotation"/>
+ <!-- arguments -->
+ <xsl:for-each select="arg">
+ <br/>
+ <xsl:apply-templates select="doc"/>
+ <li>
+ <span class="keyword">
+ <xsl:choose>
+ <xsl:when test="@direction !=''">
+ <xsl:value-of select="@direction"/>
+ </xsl:when>
+ <xsl:when test="name(..) ='signal'">
+ out
+ </xsl:when>
+ <xsl:otherwise>
+ in
+ </xsl:otherwise>
+ </xsl:choose>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="type">
+ <xsl:value-of select="@type"/>
+ </span>
+ <xsl:text> </xsl:text>
+ <span class="symbol">
+ <xsl:value-of select="@name"/>
+ </span>
+ <xsl:text> </xsl:text>
+ </li>
+ </xsl:for-each>
+ <br/>
+ <!-- errors -->
+ <xsl:apply-templates select="error"/>
+ <br/>
+ </ul>
+ </li>
+ </xsl:for-each>
+ </ul>
+ </div>
+ </xsl:for-each>
+ </body>
+ </html>
+ </xsl:template>
+ <xsl:template match="annotation">
+ <li>
+ <span class="keyword">annotation</span>
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ <xsl:text> = </xsl:text>
+ <code>
+ <xsl:value-of select="@value"/>
+ </code>
+ </li>
+ </xsl:template>
+ <xsl:template match="doc">
+ <li>
+ <span class="line">
+ <xsl:for-each select="line">
+ <xsl:value-of select="."/>
+ <xsl:element name="br"/>
+ </xsl:for-each>
+ </span>
+ </li>
+ </xsl:template>
+ <xsl:template match="error">
+ <li>
+ <xsl:apply-templates select="doc"/>
+ <span class="keyword">error</span>
+ <xsl:text> </xsl:text>
+ <span class="error">
+ <code>
+ <xsl:value-of select="@name"/>
+ </code>
+ </span>
+ <xsl:element name="br"/>
+ <br/>
+ </li>
+ </xsl:template>
+</xsl:stylesheet>
diff --git a/src/navigation/LICENSE b/src/navigation/LICENSE
new file mode 100644
index 0000000..ce3d46e
--- /dev/null
+++ b/src/navigation/LICENSE
@@ -0,0 +1,15 @@
+/**
+ * @licence app begin@
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ *
+ * All the Source Code of this project is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ *
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
diff --git a/src/navigation/README b/src/navigation/README
new file mode 100644
index 0000000..0a05a77
--- /dev/null
+++ b/src/navigation/README
@@ -0,0 +1,40 @@
+Release date of the file: 11-04-2014
+Status: to be completed
+
+Project:
+Navigation software based on Navit and compliant with the Navigation APIs standardized by the GENIVI Alliance
+This project is one of the navigation-service common projects that implements the GENIVI navigation APIs.
+
+More:
+The GENIVI APIs are implemented into navit plugins, running on DBus. The HMI is made in Qml
+See also other navigation projects like proof of concepts implemented for poi-service, traffic-info and positioning
+
+What is in:
+This folder contains scripts for building Navit and the GENIVI plugins. It runs only the navigation middleware (without the HMI)
+FYI: the application (with the HMI) is located into git://git.projects.genivi.org/lbs/navigation-application.git
+ it's possible to build and run the whole stuff directly from that repository
+
+Author:
+Martin Schaller <martin.schaller@it-schaller.de>
+Philippe Colliot philippe.colliot@mpsa.com
+
+License:
+See headers and LICENSE file
+
+Test target:
+Ubuntu 12.04.1 LTS
+
+To get the code:
+git clone http://git.projects.genivi.org/lbs/navigation-service.git $WORKING-DIR
+
+Dependencies:
+<to be completed>
+
+Build:
+cd $WORKING-DIR/navigation-service/src/navigation/script
+make all
+
+To launch (several options available):
+./run
+
+
diff --git a/src/navigation/map-viewer/configuration-plugin/.gitignore b/src/navigation/map-viewer/configuration-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/map-viewer/configuration-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/map-viewer/configuration-plugin/CMakeLists.txt b/src/navigation/map-viewer/configuration-plugin/CMakeLists.txt
new file mode 100644
index 0000000..f287351
--- /dev/null
+++ b/src/navigation/map-viewer/configuration-plugin/CMakeLists.txt
@@ -0,0 +1,45 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories("${DBUS_CPP_INCLUDE_DIRS}")
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_mapviewer_configuration_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_mapviewer_configuration_adaptor.h
+ COMMAND dbusxx-xml2cpp ${mapviewer_API}/genivi-mapviewer-configuration.xml --adaptor=genivi_mapviewer_configuration_adaptor.h
+ DEPENDS ${mapviewer_API}/genivi-mapviewer-configuration.xml
+ )
+module_add_library(genivi_mapviewer_configuration genivi_mapviewer_configuration.cxx genivi_mapviewer_configuration_adaptor.h)
diff --git a/src/navigation/map-viewer/configuration-plugin/genivi_mapviewer_configuration.cxx b/src/navigation/map-viewer/configuration-plugin/genivi_mapviewer_configuration.cxx
new file mode 100644
index 0000000..a72c5b7
--- /dev/null
+++ b/src/navigation/map-viewer/configuration-plugin/genivi_mapviewer_configuration.cxx
@@ -0,0 +1,269 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_mapviewer_configuration.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* 2014-03-18, Philippe Colliot, Add JPN language to locale
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include <locale.h>
+#include <stdlib.h>
+#include "constants/genivi-mapviewer-constants.h"
+#include "genivi_mapviewer_configuration_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/event.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+static struct map32 {
+ const char *c3;
+ const char *c2;
+} language_map[] = {
+ {"deu","de"},
+ {"eng","en"},
+ {"fra","fr"},
+ {"jpn","jp"},
+};
+
+static struct map32 country_map[] = {
+ {"CHE","CH"},
+ {"DEU","DE"},
+ {"FRA","FR"},
+ {"USA","US"},
+ {"JPN","JP"},
+};
+
+static DBus::Variant
+variant_array_uint16(std::vector< uint16_t > i)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << i;
+ return variant;
+}
+
+static const char *
+map_3_to_2(struct map32 *map, int len, const char *in)
+{
+ int i;
+ for (i = 0 ; i < len ; i++)
+ if (!strcmp(map[i].c3,in))
+ return map[i].c2;
+ return "";
+}
+
+static const char *
+map_2_to_3(struct map32 *map, int len, const char *in)
+{
+ int i;
+ for (i = 0 ; i < len ; i++)
+ if (!strcmp(map[i].c2,in))
+ return map[i].c3;
+ return "";
+}
+
+static const char *
+language_3_to_2(const char *in)
+{
+ return map_3_to_2(language_map, sizeof(language_map)/sizeof(language_map[0]), in);
+}
+
+static const char *
+language_2_to_3(const char *in)
+{
+ return map_2_to_3(language_map, sizeof(language_map)/sizeof(language_map[0]), in);
+}
+
+static const char *
+country_3_to_2(const char *in)
+{
+ return map_3_to_2(country_map, sizeof(country_map)/sizeof(country_map[0]), in);
+}
+
+static const char *
+country_2_to_3(const char *in)
+{
+ return map_2_to_3(country_map, sizeof(country_map)/sizeof(country_map[0]), in);
+}
+
+
+std::map< uint16_t, ::DBus::Variant > unitsOfMeasurement;
+
+class Configuration
+: public org::genivi::mapviewer::Configuration_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Configuration(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/mapviewer")
+ {
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >ret;
+ ret._1=2;
+ ret._2=0;
+ ret._3=0;
+ ret._4="07-06-2013";
+ return ret;
+ }
+
+ void
+ SetUnitsOfMeasurement(const std::map< uint16_t, ::DBus::Variant >& unitsOfMeasurementList)
+ {
+ unitsOfMeasurement=unitsOfMeasurementList;
+ std::vector< uint16_t > changed;
+ changed.push_back(GENIVI_MAPVIEWER_UNITS_OF_MEASUREMENT);
+ ConfigurationChanged(changed);
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetUnitsOfMeasurement()
+ {
+ return unitsOfMeasurement;
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetSupportedUnitsOfMeasurement()
+ {
+ std::map< uint16_t, ::DBus::Variant > ret;
+ std::vector< uint16_t > length;
+ length.push_back(GENIVI_MAPVIEWER_MILE);
+ length.push_back(GENIVI_MAPVIEWER_METER);
+ ret[GENIVI_MAPVIEWER_LENGTH]=variant_array_uint16(length);
+ return ret;
+ }
+
+ void
+ SetTimeFormat(const uint16_t& timeFormat)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetTimeFormat()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedTimeFormats()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetLocale(const std::string& language, const std::string& country)
+ {
+ char *lang=g_strdup_printf("%s_%s.UTF-8",language_3_to_2(language.c_str()),country_3_to_2(country.c_str()));
+ setenv("LANG",lang,1);
+ setlocale(LC_ALL,"");
+ std::vector< uint16_t > changed;
+ changed.push_back(GENIVI_MAPVIEWER_LOCALE);
+ ConfigurationChanged(changed);
+ }
+
+ void
+ GetLocale(std::string& language, std::string& country)
+ {
+ char *lang=g_strdup(getenv("LANG"));
+ char *sep,*dot;
+ if (!lang || !(sep=strchr(lang,'_'))) {
+ g_free(lang);
+ throw DBus::ErrorFailed("LANG doesn't exist or doesn't contain a _");
+ }
+ *sep++='\0';
+ language=language_2_to_3(lang);
+ dot=strchr(sep,'.');
+ if (dot)
+ *dot='\0';
+ country=country_2_to_3(sep);
+ g_free(lang);
+ }
+
+ std::vector< ::DBus::Struct< std::string, std::string > >
+ GetSupportedLocales()
+ {
+ std::vector< ::DBus::Struct< std::string, std::string > > ret;
+ ::DBus::Struct< std::string, std::string > en_US { "eng","USA" };
+ ::DBus::Struct< std::string, std::string > de_DE { "deu","DEU" };
+ ::DBus::Struct< std::string, std::string > fr_FR { "fra","FRA" };
+ ::DBus::Struct< std::string, std::string > jp_JP { "jpn","JPN" };
+ ret.push_back(en_US);
+ ret.push_back(de_DE);
+ ret.push_back(fr_FR);
+ ret.push_back(jp_JP);
+ return ret;
+ }
+
+ void
+ SetCoordinatesFormat(const uint16_t& coordinatesFormat)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetCoordinatesFormat()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedCoordinatesFormats()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+};
+
+static class Configuration *server;
+
+static DBus::Variant
+variant_uint16(uint16_t i)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << i;
+ return variant;
+}
+
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_mapviewerconfiguration");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.mapviewer.Configuration");
+ unitsOfMeasurement[GENIVI_MAPVIEWER_LENGTH]=variant_uint16(GENIVI_MAPVIEWER_KM);
+ server=new Configuration(*conn);
+}
diff --git a/src/navigation/map-viewer/mapviewercontrol-plugin/.gitignore b/src/navigation/map-viewer/mapviewercontrol-plugin/.gitignore
new file mode 100644
index 0000000..93e9f1e
--- /dev/null
+++ b/src/navigation/map-viewer/mapviewercontrol-plugin/.gitignore
@@ -0,0 +1,10 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+*_proxy.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/map-viewer/mapviewercontrol-plugin/CMakeLists.txt b/src/navigation/map-viewer/mapviewercontrol-plugin/CMakeLists.txt
new file mode 100644
index 0000000..3efda81
--- /dev/null
+++ b/src/navigation/map-viewer/mapviewercontrol-plugin/CMakeLists.txt
@@ -0,0 +1,72 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(CheckIncludeFiles)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${layer_management_INST}/include)
+include_directories(${layer_management_INST}/include/ilm)
+include_directories(${layer_management_INST}/include/layermanager)
+set(CMAKE_REQUIRED_INCLUDES ${layer_management_INST}/include;${layer_management_INST}/include/ilm;${layer_management_INST}/include/layermanager)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs ${layer_management_INST}/lib)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+check_include_files (ilm/ilm_client.h LM)
+if (LM)
+ message("building with layer management")
+ set(genivi_mapviewer_mapviewercontrol_LIBS ${DBUS_CPP_LDFLAGS} "-lilmClient")
+ add_definitions(-DLM=1)
+else()
+ message("building without layer management")
+ set(genivi_mapviewer_mapviewercontrol_LIBS ${DBUS_CPP_LDFLAGS})
+ add_definitions(-DLM=0)
+endif()
+ADD_CUSTOM_COMMAND(OUTPUT genivi_mapviewer_mapviewercontrol_adaptor.h
+ COMMAND dbusxx-xml2cpp ${mapviewer_API}/genivi-mapviewer-mapviewercontrol.xml --adaptor=genivi_mapviewer_mapviewercontrol_adaptor.h &&
+ sed -i -e "'s/>, >/> >/g'" -e "'s/>, >/> >/g'" -e 's/>::DBus::Struct</>,::DBus::Struct</g' -e 's/>::DBus::Variant/>,::DBus::Variant/g' genivi_mapviewer_mapviewercontrol_adaptor.h
+ DEPENDS ${mapviewer_API}/genivi-mapviewer-mapviewercontrol.xml
+ )
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_routing_proxy.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-routing.xml --proxy=genivi_navigationcore_routing_proxy.h &&
+ sed -i -e "'s/>, >/> >/g'" -e 's/>::DBus::Struct</>,::DBus::Struct</g' genivi_navigationcore_routing_proxy.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-routing.xml
+ )
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_session_proxy.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-session.xml --proxy=genivi_navigationcore_session_proxy.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-session.xml
+ )
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_mapmatchedposition_proxy.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-mapmatchedposition.xml --proxy=genivi_navigationcore_mapmatchedposition_proxy.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-mapmatchedposition.xml
+ )
+module_add_library(genivi_mapviewer_mapviewercontrol genivi_mapviewer_mapviewercontrol.cxx genivi_mapviewer_mapviewercontrol_adaptor.h genivi_navigationcore_routing_proxy.h genivi_navigationcore_session_proxy.h genivi_navigationcore_mapmatchedposition_proxy.h)
diff --git a/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx b/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx
new file mode 100644
index 0000000..0799b2e
--- /dev/null
+++ b/src/navigation/map-viewer/mapviewercontrol-plugin/genivi_mapviewer_mapviewercontrol.cxx
@@ -0,0 +1,1670 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_mapviewer_mapviewercontrol.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include <math.h>
+#include <unistd.h>
+#include <stdlib.h>
+#if LM
+#include <ilm/ilm_client.h>
+#endif
+#include "genivi_mapviewer_mapviewercontrol_adaptor.h"
+#include "genivi_navigationcore_routing_proxy.h"
+#include "genivi_navigationcore_session_proxy.h"
+#include "genivi_navigationcore_mapmatchedposition_proxy.h"
+#include "constants/genivi-navigationcore-constants.h"
+#include "constants/genivi-mapviewer-constants.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/event.h"
+#include "navit/point.h"
+#include "navit/graphics.h"
+#include "navit/coord.h"
+#include "navit/transform.h"
+#include "navit/map.h"
+#include "navit/mapset.h"
+#include "navit/callback.h"
+#include "navit/vehicle.h"
+#include "navit/attr.h"
+#include "navit/layout.h"
+
+static DBus::Glib::BusDispatcher dispatchers[4];
+static DBus::Connection *conns[4];
+static int32_t navigationcore_session=-1;
+
+static double double_variant(DBus::Variant variant);
+class MapViewerControl;
+class MapMatchedPosition;
+class Routing;
+
+class DisplayedRoute
+{
+ char *m_filename;
+ std::vector <struct coord> m_coordinates;
+ struct mapset *m_mapset;
+ bool m_shown;
+
+ void AddGeoCoordinateD(double lat, double lon);
+ void AddGeoCoordinate(DBus::Variant lat, DBus::Variant lon);
+ bool AddSegment(std::map< uint16_t, ::DBus::Variant > map);
+ void WriteSegment(FILE *out);
+ public:
+ uint32_t m_handle;
+ struct attr m_map;
+ uint32_t RouteHandle();
+ void Show();
+ void Hide();
+ DisplayedRoute(class MapViewerControlObj *mapviewer, uint8_t RouteSession, uint32_t RouteHandle, struct mapset *mapset);
+ ~DisplayedRoute();
+};
+
+class MapViewerControlObj
+{
+ public:
+ struct attr m_navit,m_vehicle,m_graphics;
+ struct mapset *m_mapset;
+ uint32_t m_handle;
+ double m_scrolldirection, m_scrollspeed;
+ double m_rotationangle, m_rotationangleperframe;
+
+ struct callback *m_postdraw_callback;
+ struct callback *m_move_callback;
+ bool m_force_draw;
+ uint16_t m_perspective;
+ bool m_follow_car;
+ MapViewerControl *m_mapviewercontrol;
+ std::vector<DisplayedRoute *> m_displayed_routes;
+ MapMatchedPosition *m_mapmatchedposition;
+ Routing *m_routing;
+ struct point m_pan;
+ int m_pan_action;
+ void MoveMap(void);
+ void SetFollowCarMode(uint32_t SessionHandle, bool active);
+ void GetFollowCarMode(bool& active);
+ void SetCameraHeadingAngle(uint32_t sessionHandle, double angle);
+ void GetCameraHeadingAngle(double &angle);
+ void SetCameraTiltAngle(uint32_t sessionHandle, double angle);
+ void GetCameraTiltAngle(double &angle);
+ void SetCameraRollAngle(uint32_t sessionHandle, double angle);
+ void GetCameraRollAngle(double &angle);
+ void SetCameraDistanceFromTargetPoint(uint32_t sessionHandle, double distance);
+ void GetCameraDistanceFromTargetPoint(double &distance);
+ void SetCameraHeight(uint32_t sessionHandle, double height);
+ void GetCameraHeight(double &height);
+ void SetCameraHeadingTrackUp(uint32_t sessionHandle);
+ void SetMapViewPerspective(uint32_t SessionHandle, uint16_t MapViewPerspectiveMode);
+ void GetMapViewPerspective(uint16_t &MapViewPerspectiveMode);
+ void GetScaleList(std::vector< ::DBus::Struct< uint16_t, uint16_t, uint16_t, uint32_t > >& ScalesList);
+ void SetMapViewScale(uint32_t SessionHandle, uint32_t ScaleID);
+ void SetMapViewScaleByDelta(uint32_t SessionHandle, int16_t ScaleDelta);
+ void GetMapViewScale(uint8_t& ScaleID, uint16_t& IsMinMax);
+ void GetMapViewType(uint16_t& MapViewType);
+ void SetMapViewTheme(uint32_t sessionHandle, uint16_t mapViewTheme);
+ void GetMapViewTheme(uint16_t& mapViewTheme);
+ void SetTargetPoint(uint32_t SessionHandle, ::DBus::Struct< double, double, int32_t >target);
+ void GetTargetPoint(::DBus::Struct< double, double, int32_t >&target);
+ void SetMapViewPan(uint32_t SessionHandle, uint16_t panningAction, ::DBus::Struct< uint16_t, uint16_t >p);
+ void GetMapViewPan(const uint16_t& panningAction, ::DBus::Struct< uint16_t, uint16_t > &p);
+ void SetMapViewRotation(uint32_t sessionHandle, double rotationAngle, double rotationAnglePerFrame);
+ void GetMapViewRotation(int32_t& rotationAngle, int32_t& rotationAnglePerFrame);
+ void SetMapViewBoundingBox(uint32_t sessionHandle, const ::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >& boundingBox);
+ void GetMapViewBoundingBox(::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >& boundingBox);
+ void GetDisplayedRoutes(std::vector< ::DBus::Struct< uint32_t, bool > >& displayedRoutes);
+ void DisplayRoute(uint32_t SessionHandle, uint32_t RouteHandle, bool highlighted);
+ void HideRoute(uint32_t SessionHandle, uint32_t RouteHandle);
+ void ConvertPixelCoordsToGeoCoords(uint32_t sessionHandle, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates, std::vector< ::DBus::Struct< double, double > >& GeoCoordinates);
+ void ConvertGeoCoordsToPixelCoords(uint32_t sessionHandle, const std::vector< ::DBus::Struct< double, double > >& geoCoordinates, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates);
+ MapViewerControlObj(MapViewerControl *mapviewercontrol, uint32_t handle, const ::DBus::Struct< uint16_t, uint16_t >& MapViewSize);
+ ~MapViewerControlObj();
+};
+
+
+static std::map<uint32_t, MapViewerControlObj *> handles;
+
+
+class Routing
+: public org::genivi::navigationcore::Routing_proxy,
+ public DBus::ObjectProxy
+{
+ public:
+ MapViewerControlObj *m_mapviewerobj;
+ Routing(DBus::Connection &connection, MapViewerControlObj *obj)
+ : DBus::ObjectProxy(connection, "/org/genivi/navigationcore","org.genivi.navigationcore.Routing")
+ {
+ m_mapviewerobj=obj;
+ }
+
+
+ void RouteDeleted(const uint32_t& routeHandle)
+ {
+ }
+
+ void RouteCalculationCancelled(const uint32_t& routeHandle)
+ {
+ }
+
+ void RouteCalculationFailed(const uint32_t& routeHandle, const uint16_t& errorCode, const std::map< uint16_t, uint16_t >& unfullfilledPreferences)
+ {
+ std::vector<DisplayedRoute *>::iterator it;
+
+ for (it=m_mapviewerobj->m_displayed_routes.begin() ; it < m_mapviewerobj->m_displayed_routes.end(); it++ ) {
+ if (*it && (*it)->m_handle == routeHandle) {
+ (*it)->Hide();
+ }
+ }
+ }
+
+ void RouteCalculationSuccessful(const uint32_t& RouteHandle, const std::map< uint16_t, uint16_t >& unfullfilledPreferences)
+ {
+ std::vector<DisplayedRoute *>::iterator it;
+
+ for (it=m_mapviewerobj->m_displayed_routes.begin() ; it < m_mapviewerobj->m_displayed_routes.end(); it++ ) {
+ if (*it && (*it)->m_handle == RouteHandle) {
+ (*it)->Hide();
+ delete(*it);
+ *it=new DisplayedRoute(m_mapviewerobj,1,RouteHandle,m_mapviewerobj->m_mapset);
+ (*it)->Show();
+ }
+ }
+ }
+
+ void RouteCalculationProgressUpdate(const uint32_t& routeHandle, const uint16_t& status, const uint8_t& percentage)
+ {
+ }
+
+ void AlternativeRoutesAvailable(const std::vector< uint32_t >& routeHandlesList)
+ {
+
+ }
+};
+
+class NavigationCoreSession
+: public org::genivi::navigationcore::Session_proxy,
+ public DBus::ObjectProxy
+{
+ public:
+ NavigationCoreSession(DBus::Connection &connection)
+ : DBus::ObjectProxy(connection, "/org/genivi/navigationcore","org.genivi.navigationcore.Session")
+ {
+ }
+ void SessionDeleted(const uint32_t& sessionHandle)
+ {
+ }
+};
+
+static void position_update(MapMatchedPosition *pos, struct vehicle *v);
+
+class MapMatchedPosition
+: public org::genivi::navigationcore::MapMatchedPosition_proxy,
+ public DBus::ObjectProxy
+{
+ public:
+ struct callback *cb;
+ MapViewerControlObj *m_mapviewerobj;
+ MapMatchedPosition(DBus::Connection &connection, struct vehicle *v)
+ : DBus::ObjectProxy(connection, "/org/genivi/navigationcore","org.genivi.navigationcore.MapMatchedPosition")
+ {
+ cb=callback_new_2(callback_cast(position_update), this, v);
+ }
+
+ void PositionUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ event_add_timeout(0, 0, cb);
+ }
+
+ void AddressUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ }
+
+ void PositionOnSegmentUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ }
+
+ void StatusUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ }
+
+ void
+ SimulationStatusChanged(const uint16_t& simulationStatus)
+ {
+ }
+
+ void
+ OffRoadPositionChanged(const uint32_t& distance, const int32_t& direction)
+ {
+ }
+
+ void
+ SimulationSpeedChanged(const uint8_t& speedFactor)
+ {
+ }
+};
+
+static void
+position_update(MapMatchedPosition *pos, struct vehicle *v)
+{
+ std::vector< uint16_t > valuesToReturn;
+
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_LONGITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_SPEED);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_HEADING);
+
+ std::map< uint16_t, ::DBus::Variant> map=pos->GetPosition(valuesToReturn);
+ if (map.find(GENIVI_NAVIGATIONCORE_SPEED) != map.end()) {
+ struct attr position_speed={attr_position_speed};
+ double speed;
+ position_speed.u.numd=&speed;
+ speed=double_variant(map[GENIVI_NAVIGATIONCORE_SPEED]);
+ vehicle_set_attr(v, &position_speed);
+ }
+ if (map.find(GENIVI_NAVIGATIONCORE_HEADING) != map.end()) {
+ struct attr position_direction={attr_position_direction};
+ double direction;
+ position_direction.u.numd=&direction;
+ direction=double_variant(map[GENIVI_NAVIGATIONCORE_HEADING]);
+ vehicle_set_attr(v, &position_direction);
+ }
+ if (map.find(GENIVI_NAVIGATIONCORE_LATITUDE) != map.end() && map.find(GENIVI_NAVIGATIONCORE_LONGITUDE) != map.end()) {
+ struct attr position_coord_geo={attr_position_coord_geo};
+ struct coord_geo g;
+ position_coord_geo.u.coord_geo=&g;
+ g.lat=double_variant(map[GENIVI_NAVIGATIONCORE_LATITUDE]);
+ g.lng=double_variant(map[GENIVI_NAVIGATIONCORE_LONGITUDE]);
+ dbg(1,"update %f %f\n",g.lat,g.lng);
+ vehicle_set_attr(v, &position_coord_geo);
+ }
+}
+
+class MapViewerControl
+: public org::genivi::mapviewer::MapViewerControl_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ MapViewerControl(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/mapviewer")
+ {
+ }
+
+ uint32_t
+ CreateMapViewInstance(const uint32_t& sessionHandle, const ::DBus::Struct< uint16_t, uint16_t >& mapViewSize, const uint16_t& mapViewType)
+ {
+ dbg(0,"enter\n");
+ if (mapViewType != GENIVI_MAPVIEWER_MAIN_MAP)
+ throw DBus::ErrorInvalidArgs("Unsupported mapViewType");
+ uint32_t MapViewInstanceHandle=1;
+ while (handles[MapViewInstanceHandle]) {
+ MapViewInstanceHandle++;
+ if (MapViewInstanceHandle == 256)
+ throw DBus::ErrorLimitsExceeded("Out of mapviewinstance handles");
+ }
+ handles[MapViewInstanceHandle]=new MapViewerControlObj(this, MapViewInstanceHandle, mapViewSize);
+ return MapViewInstanceHandle;
+ }
+
+ void
+ ReleaseMapViewInstance(const uint32_t& SessionHandle, const uint32_t& MapViewInstanceHandle)
+ {
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ delete(obj);
+ handles[MapViewInstanceHandle]=NULL;
+ }
+
+ void
+ SetMapViewPerspective(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& perspective)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewPerspective(sessionHandle, perspective);
+ }
+
+ uint16_t
+ GetMapViewPerspective(const uint32_t& mapViewInstanceHandle)
+ {
+ uint16_t MapViewPerspectiveMode;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewPerspective(MapViewPerspectiveMode);
+ return MapViewPerspectiveMode;
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewPerspectives()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetMapViewScale(const uint32_t& SessionHandle, const uint32_t& MapViewInstanceHandle, const uint16_t& ScaleID)
+ {
+ dbg(0,"enter\n");
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewScale(SessionHandle, ScaleID);
+ }
+
+ void
+ SetMapViewScaleByDelta(const uint32_t& SessionHandle, const uint32_t& MapViewInstanceHandle, const int16_t& ScaleDelta)
+ {
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewScaleByDelta(SessionHandle, ScaleDelta);
+ }
+
+ void
+ GetMapViewScale(const uint32_t& MapViewInstanceHandle, uint8_t& ScaleID, uint16_t& IsMinMax)
+ {
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewScale(ScaleID, IsMinMax);
+ }
+
+ void
+ SetMapViewPan(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& panningAction, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates)
+ {
+ ::DBus::Struct< uint16_t, uint16_t > pixel;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ if (pixelCoordinates.size())
+ {
+ pixel = pixelCoordinates.at(0);
+ obj->SetMapViewPan(sessionHandle, panningAction, pixel);
+ }
+ }
+
+ void
+ GetMapViewPan(const uint32_t& mapViewInstanceHandle, const uint16_t& valueToReturn, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates)
+ {
+ ::DBus::Struct< uint16_t, uint16_t > pixel;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewPan(valueToReturn, pixel); //limited to one pixel coordinate
+#if 0 /* FIXME */
+ pixelCoordinates.push_back(pixel);
+#endif
+ }
+
+ void
+ DisplayRoute(const uint32_t& SessionHandle, const uint32_t& MapViewInstanceHandle, const uint32_t& RouteHandle, const bool& highlighted)
+ {
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->DisplayRoute(SessionHandle, RouteHandle, highlighted);
+ }
+
+ void
+ HideRoute(const uint32_t& SessionHandle, const uint32_t& MapViewInstanceHandle, const uint32_t& RouteHandle)
+ {
+ MapViewerControlObj *obj=handles[MapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->HideRoute(SessionHandle, RouteHandle);
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >ret;
+ ret._1=3;
+ ret._2=0;
+ ret._3=0;
+ ret._4="07-06-2013";
+ return ret;
+ }
+
+ uint16_t
+ GetMapViewType(const uint32_t& mapViewInstanceHandle)
+ {
+ uint16_t ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewType(ret);
+ return ret;
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewTypes()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetTargetPoint(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< double, double, int32_t >& targetPoint)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetTargetPoint(sessionHandle, targetPoint);
+ }
+
+ ::DBus::Struct< double, double, int32_t >
+ GetTargetPoint(const uint32_t& mapViewInstanceHandle)
+ {
+ ::DBus::Struct< double, double, int32_t > ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetTargetPoint(ret);
+ return ret;
+ }
+
+ void
+ SetFollowCarMode(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const bool& followCarMode)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetFollowCarMode(sessionHandle, followCarMode);
+ }
+
+ bool
+ GetFollowCarMode(const uint32_t& mapViewInstanceHandle)
+ {
+ bool followCarMode;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetFollowCarMode(followCarMode);
+ return followCarMode;
+ }
+
+ void
+ SetCameraPosition(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< double, double, int32_t >& position)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ ::DBus::Struct< double, double, int32_t >
+ GetCameraPosition(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetCameraHeadingAngle(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const int32_t& heading)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraHeadingAngle(sessionHandle, heading);
+ }
+
+ void
+ SetCameraHeadingToTarget(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< double, double >& target)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetCameraTiltAngle(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const int32_t& tilt)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraTiltAngle(sessionHandle, tilt);
+ }
+
+ int32_t
+ GetCameraTiltAngle(const uint32_t& mapViewInstanceHandle)
+ {
+ double ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetCameraTiltAngle(ret);
+ return ret;
+ }
+
+ void
+ SetCameraRollAngle(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const int32_t& roll)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraRollAngle(sessionHandle, roll);
+ }
+
+ int32_t
+ GetCameraRollAngle(const uint32_t& mapViewInstanceHandle)
+ {
+ double ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetCameraRollAngle(ret);
+ return ret;
+ }
+
+ void
+ SetCameraDistanceFromTargetPoint(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint32_t& distance)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraDistanceFromTargetPoint(sessionHandle, distance);
+ }
+
+
+ uint32_t
+ GetCameraDistanceFromTargetPoint(const uint32_t& mapViewInstanceHandle)
+ {
+ double ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetCameraDistanceFromTargetPoint(ret);
+ return ret;
+ }
+
+ void
+ SetMapViewScaleMode(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& scaleMode)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetMapViewScaleMode(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewScaleModes(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetCameraHeight(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint32_t& height)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraHeight(sessionHandle, height);
+ }
+
+ uint32_t
+ GetCameraHeight(const uint32_t& mapViewInstanceHandle)
+ {
+ double ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetCameraHeight(ret);
+ return ret;
+ }
+
+ std::vector< ::DBus::Struct< uint16_t, uint16_t, uint16_t, uint32_t > >
+ GetScaleList(const uint32_t& mapViewInstanceHandle)
+ {
+ std::vector< ::DBus::Struct< uint16_t, uint16_t, uint16_t, uint32_t > > ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetScaleList(ret);
+ return ret;
+ }
+
+ void
+ SetMapViewScaleByMetersPerPixel(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const double& metersPerPixel)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetMapViewBoundingBox(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >& boundingBox)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewBoundingBox(sessionHandle, boundingBox);
+ }
+
+ ::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >
+ GetMapViewBoundingBox(const uint32_t& mapViewInstanceHandle)
+ {
+ ::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > > ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewBoundingBox(ret);
+ return ret;
+ }
+
+ void
+ SetMapViewRotation(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const int32_t& rotationAngle, const int32_t& rotationAnglePerSecond)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewRotation(sessionHandle, rotationAngle, rotationAnglePerSecond);
+ }
+
+ void
+ GetMapViewRotation(const uint32_t& mapViewInstanceHandle, int32_t& rotationAngle, int32_t& rotationAnglePerFrame)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewRotation(rotationAngle, rotationAnglePerFrame);
+ }
+
+ void
+ SetMapViewVisibilityMode(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& visibilityMode)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetMapViewVisibilityMode(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewVisibilityModes()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetMapViewObjectVisibility(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::map< uint16_t, bool >& objectVisibilityList)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint16_t, bool >
+ GetMapViewObjectVisibility(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewObjectVisibilities(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetMapViewPerformanceLevel(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& performanceLevel)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetMapViewPerformanceLevel(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewPerformanceLevels()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< ::DBus::Struct< uint32_t, bool > >
+ GetDisplayedRoutes(const uint32_t& mapViewInstanceHandle)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ std::vector< ::DBus::Struct< uint32_t, bool > >ret;
+ obj->GetDisplayedRoutes(ret);
+ return ret;
+ }
+
+ void
+ SetMapViewTheme(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const uint16_t& mapViewTheme)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetMapViewTheme(sessionHandle, mapViewTheme);
+ }
+
+ uint16_t
+ GetMapViewTheme(const uint32_t& mapViewInstanceHandle)
+ {
+ uint16_t ret;
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->GetMapViewTheme(ret);
+ return ret;
+ }
+
+ std::vector< uint16_t >
+ GetSupportedMapViewThemes()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< ::DBus::Struct< double, double > >
+ ConvertPixelCoordsToGeoCoords(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ std::vector< ::DBus::Struct< double, double > >ret;
+ obj->ConvertPixelCoordsToGeoCoords(sessionHandle, pixelCoordinates, ret);
+ return ret;
+ }
+
+ std::vector< ::DBus::Struct< uint16_t, uint16_t > >
+ ConvertGeoCoordsToPixelCoords(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< ::DBus::Struct< double, double > >& geoCoordinates)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ std::vector< ::DBus::Struct< uint16_t, uint16_t > >ret;
+ obj->ConvertGeoCoordsToPixelCoords(sessionHandle, geoCoordinates, ret);
+ return ret;
+ }
+
+ void
+ SetCameraHeadingTrackUp(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle)
+ {
+ MapViewerControlObj *obj=handles[mapViewInstanceHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Invalid mapviewinstance handle");
+ obj->SetCameraHeadingTrackUp(sessionHandle);
+ }
+
+ void
+ SetMapViewSaveArea(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< double, double, double, double >& saveArea)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ ::DBus::Struct< double, double, double, double >
+ GetMapViewSaveArea(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetCameraHeading(const uint32_t& mapViewInstanceHandle, uint16_t& headingType, int32_t& headingAngle, ::DBus::Struct< double, double >& target)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint32_t >
+ DisplayCustomElements(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< ::DBus::Struct< std::string, std::string, ::DBus::Struct< double, double >, ::DBus::Struct< int16_t, int16_t > > >& customElements)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void HideCustomElements(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< uint32_t >& customElementHandles)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint32_t, ::DBus::Struct< std::string, std::string, ::DBus::Struct< double, double >, ::DBus::Struct< int16_t, int16_t > > >
+ GetDisplayedCustomElements(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ AddMapViewScaleChangedListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ RemoveMapViewScaleChangedListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+
+ void
+ SetPoiCategoriesNotVisible(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< uint16_t >& poiCategoryIds)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetTrafficIncidentsVisibility(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const bool& visible)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetPoiCategoriesVisible(const uint32_t& mapViewInstanceHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< ::DBus::Struct< uint16_t, ::DBus::Struct< double, double >, ::DBus::Variant > >
+ SelectElementsOnMap(const uint32_t& mapViewInstanceHandle, const ::DBus::Struct< uint16_t, uint16_t >& pixelCoordinate, const std::vector< uint16_t >& selectableTypes, const uint16_t& maxNumberOfSelectedElements)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetPoiCategoriesVisible(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< uint16_t >& poiCategoryIds)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetPoiCategoriesVisibleWithinLimits(const uint32_t& sessionHandle, const uint32_t& mapViewInstanceHandle, const std::vector< uint16_t >& poiCategoryIds, const uint8_t& minScaleID, const uint8_t& maxScaleID)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+};
+
+void
+MapViewerControlObj::SetMapViewPerspective(uint32_t SessionHandle, uint16_t MapViewPerspectiveMode)
+{
+ if (m_perspective != MapViewPerspectiveMode) {
+ m_perspective=MapViewPerspectiveMode;
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ switch (m_perspective) {
+ case GENIVI_MAPVIEWER_2D:
+ transform_set_pitch(trans, 0);
+ break;
+ case GENIVI_MAPVIEWER_3D:
+ transform_set_pitch(trans, 40);
+ break;
+ }
+ navit_draw_async(m_navit.u.navit, 1);
+ }
+}
+
+void
+MapViewerControlObj::GetMapViewPerspective(uint16_t& MapViewPerspectiveMode)
+{
+ MapViewPerspectiveMode=m_perspective;
+}
+
+void
+MapViewerControlObj::GetScaleList(std::vector< ::DBus::Struct< uint16_t, uint16_t, uint16_t, uint32_t > >& ScalesList)
+{
+ throw DBus::ErrorNotSupported("Not yet supported");
+}
+
+void
+MapViewerControlObj::SetMapViewScale(uint32_t SessionHandle, uint32_t ScaleID)
+{
+ long scale=1 << ScaleID;
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ transform_set_scale(trans, scale);
+ navit_draw(m_navit.u.navit);
+}
+
+void
+MapViewerControlObj::SetMapViewScaleByDelta(uint32_t SessionHandle, int16_t ScaleDelta)
+{
+ if (!ScaleDelta)
+ throw DBus::ErrorInvalidArgs("ScaleDelta must not be 0");
+ if (ScaleDelta < 0)
+ navit_zoom_out(m_navit.u.navit,1 << (-ScaleDelta),NULL);
+ else if (ScaleDelta > 0)
+ navit_zoom_in(m_navit.u.navit,1 << ScaleDelta,NULL);
+}
+
+void
+MapViewerControlObj::GetMapViewScale(uint8_t& ScaleID, uint16_t& IsMinMax)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ long scale=transform_get_scale(trans);
+ if (scale <= 1 || scale >= 2097152)
+ IsMinMax=1;
+ else
+ IsMinMax=0;
+ ScaleID=0;
+ while (scale > 1) {
+ scale >>=1;
+ ScaleID++;
+ }
+}
+
+void
+MapViewerControlObj::GetMapViewType(uint16_t& MapViewType)
+{
+ MapViewType=GENIVI_MAPVIEWER_MAIN_MAP;
+}
+
+void
+MapViewerControlObj::SetMapViewTheme(uint32_t sessionHandle, uint16_t mapViewTheme)
+{
+ struct attr layout,name;
+ struct attr_iter *iter;
+ const char *layout_name=NULL;
+ dbg(0,"Theme %d\n",mapViewTheme);
+ switch (mapViewTheme) {
+ case GENIVI_MAPVIEWER_THEME_1:
+ layout_name="Car";
+ break;
+ case GENIVI_MAPVIEWER_THEME_2:
+ layout_name="Car-dark";
+ break;
+ default:
+ dbg(0,"Invalid mapViewTheme\n");
+ throw DBus::ErrorInvalidArgs("Invalid mapViewTheme");
+ }
+ iter=navit_attr_iter_new();
+ while (navit_get_attr(m_navit.u.navit, attr_layout, &layout, iter)) {
+ dbg(0,"layout\n");
+ if (!layout_get_attr(layout.u.layout, attr_name, &name, NULL)) {
+ navit_attr_iter_destroy(iter);
+ throw DBus::ErrorFailed("Internal error: Failed to get layout name");
+ }
+ dbg(0,"%s vs %s\n",name.u.str,layout_name);
+ if (!strcmp(name.u.str,layout_name)) {
+ navit_set_attr(m_navit.u.navit, &layout);
+ navit_attr_iter_destroy(iter);
+ return;
+ }
+ }
+ navit_attr_iter_destroy(iter);
+ throw DBus::ErrorFailed("Internal error: Failed to get map layout");
+}
+
+void
+MapViewerControlObj::GetMapViewTheme(uint16_t& mapViewTheme)
+{
+ struct attr layout,name;
+ if (!navit_get_attr(m_navit.u.navit, attr_layout, &layout, NULL))
+ throw DBus::ErrorFailed("Internal error: Failed to get map layout");
+ if (!layout_get_attr(layout.u.layout, attr_name, &name, NULL))
+ throw DBus::ErrorFailed("Internal error: Failed to get layout name");
+ dbg(0,"name %s\n",name.u.str);
+ if (!strcmp(name.u.str,"Car-dark"))
+ mapViewTheme=GENIVI_MAPVIEWER_THEME_2;
+ else
+ mapViewTheme=GENIVI_MAPVIEWER_THEME_1;
+}
+
+void
+MapViewerControlObj::SetFollowCarMode(uint32_t SessionHandle, bool active)
+{
+ struct attr follow={attr_follow};
+ m_follow_car=active;
+ if (active)
+ follow.u.num=1;
+ else
+ follow.u.num=100000;
+ dbg(0,"setting follow to %d\n",follow.u.num);
+ navit_set_attr(m_navit.u.navit,&follow);
+ vehicle_set_attr(m_vehicle.u.vehicle,&follow);
+ follow.type=attr_timeout;
+ navit_set_attr(m_navit.u.navit,&follow);
+}
+
+void
+MapViewerControlObj::GetFollowCarMode(bool& active)
+{
+ active=m_follow_car;
+}
+
+void
+MapViewerControlObj::SetCameraHeadingAngle(uint32_t sessionHandle, double angle)
+{
+ struct attr orientation={attr_orientation};
+ orientation.u.num=angle;
+ navit_set_attr(m_navit.u.navit, &orientation);
+ navit_draw_async(m_navit.u.navit, 1);
+}
+
+void
+MapViewerControlObj::GetCameraHeadingAngle(double &angle)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ angle=transform_get_yaw(trans);
+}
+
+void
+MapViewerControlObj::SetCameraTiltAngle(uint32_t sessionHandle, double angle)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ transform_set_pitch(trans, angle);
+ navit_draw(m_navit.u.navit);
+
+}
+
+void
+MapViewerControlObj::GetCameraTiltAngle(double &angle)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ angle=transform_get_pitch(trans);
+}
+
+void
+MapViewerControlObj::SetCameraRollAngle(uint32_t sessionHandle, double angle)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ transform_set_roll(trans, angle);
+ navit_draw(m_navit.u.navit);
+}
+
+void
+MapViewerControlObj::GetCameraRollAngle(double &angle)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ angle=transform_get_roll(trans);
+}
+
+void
+MapViewerControlObj::SetCameraDistanceFromTargetPoint(uint32_t sessionHandle, double distance)
+{
+ struct transformation *t=navit_get_trans(m_navit.u.navit);
+ transform_set_distance(t, distance);
+ dbg(0,"distance %f\n",distance);
+ transform_set_scales(t, 100, 100, 100 << 8);
+ navit_draw(m_navit.u.navit);
+}
+
+void
+MapViewerControlObj::GetCameraDistanceFromTargetPoint(double &distance)
+{
+ struct transformation *t=navit_get_trans(m_navit.u.navit);
+ distance=transform_get_distance(t);
+}
+
+void
+MapViewerControlObj::SetCameraHeight(uint32_t sessionHandle, double height)
+{
+ struct transformation *t=navit_get_trans(m_navit.u.navit);
+ double distance=transform_get_distance(t);
+ if (height > distance || height < -distance)
+ throw DBus::ErrorInvalidArgs("Height > Distance");
+ double angle=acos(height/distance)*180.0/M_PI;
+ transform_set_pitch(t, angle);
+ dbg(0,"distance %f angle %f height %f\n",distance,angle,height);
+ navit_draw(m_navit.u.navit);
+}
+
+void
+MapViewerControlObj::GetCameraHeight(double &height)
+{
+ struct transformation *t=navit_get_trans(m_navit.u.navit);
+ double distance=transform_get_distance(t);
+ double angle=transform_get_pitch(t);
+ height=cos(angle*M_PI/180)*distance;
+ dbg(0,"distance %f angle %f height %f\n",distance,angle,height);
+}
+
+void
+MapViewerControlObj::SetCameraHeadingTrackUp(uint32_t sessionHandle)
+{
+ struct attr orientation={attr_orientation};
+ orientation.u.num=-1;
+ navit_set_attr(m_navit.u.navit, &orientation);
+ navit_draw_async(m_navit.u.navit, 1);
+}
+
+void
+MapViewerControlObj::SetTargetPoint(uint32_t SessionHandle, ::DBus::Struct< double, double, int32_t >target)
+{
+ struct coord_geo g;
+ struct attr center={attr_center};
+ center.u.coord_geo=&g;
+ g.lat=target._1;
+ g.lng=target._2;
+ navit_set_attr(m_navit.u.navit, &center);
+ navit_draw_async(m_navit.u.navit, 1);
+}
+
+void
+MapViewerControlObj::GetTargetPoint(::DBus::Struct< double, double, int32_t >&target)
+{
+ struct attr center;
+ if (!navit_get_attr(m_navit.u.navit, attr_center, &center, NULL) || !center.u.coord_geo)
+ throw DBus::ErrorFailed("Internal error: Failed to get center attribute");
+ target._1=center.u.coord_geo->lat;
+ target._2=center.u.coord_geo->lng;
+ target._3=0;
+}
+
+void
+MapViewerControlObj::MoveMap(void)
+{
+ if (m_scrollspeed || m_rotationangleperframe || m_force_draw) {
+ int w,h;
+ double refresh_time=0.3; // Time needed to redraw map
+ double r=m_scrollspeed*refresh_time;
+ struct point p;
+ struct transformation *t=navit_get_trans(m_navit.u.navit);
+ if (m_rotationangleperframe) {
+ int yaw=transform_get_yaw(t);
+ int delta=((int)(m_rotationangle+0.5)-yaw)%360;
+ if (delta > 180)
+ delta-=180;
+ if (delta < -180)
+ delta+=180;
+ if (delta < 0 && delta < -m_rotationangleperframe)
+ delta=-m_rotationangleperframe;
+ if (delta > 0 && delta > m_rotationangleperframe)
+ delta=m_rotationangleperframe;
+ if (delta)
+ transform_set_yaw(t, yaw+delta);
+ else
+ m_rotationangleperframe=0;
+ }
+ transform_get_size(t, &w, &h);
+ p.x=w/2+sin(m_scrolldirection*M_PI/180)*r;
+ p.y=h/2-cos(m_scrolldirection*M_PI/180)*r;
+ navit_set_center_screen(m_navit.u.navit, &p, 1);
+ m_force_draw=false;
+ }
+}
+
+static void
+MapViewerControlObj_MoveMap(class MapViewerControlObj *obj)
+{
+ obj->MoveMap();
+}
+
+static void
+MapViewerControlObj_PostDraw(class MapViewerControlObj *obj)
+{
+ event_add_timeout(0, 0, obj->m_move_callback);
+}
+
+void
+MapViewerControlObj::SetMapViewPan(uint32_t SessionHandle, uint16_t panningAction, ::DBus::Struct< uint16_t, uint16_t > p)
+{
+ struct transformation *tr;
+ struct coord co,cn,c,*cp;
+ struct point pan;
+ SetFollowCarMode(SessionHandle, false);
+ dbg(1,"enter %d\n",panningAction);
+ switch(panningAction) {
+ case GENIVI_MAPVIEWER_PAN_START:
+ break;
+ case GENIVI_MAPVIEWER_PAN_TO:
+ case GENIVI_MAPVIEWER_PAN_END:
+ tr=navit_get_trans(m_navit.u.navit);
+ transform_reverse(tr, &m_pan, &co);
+ pan.x=p._1;
+ pan.y=p._2;
+ transform_reverse(tr, &pan, &cn);
+ dbg(1,"%d,%d - %d,%d\n",m_pan.x,m_pan.y,pan.x,pan.y);
+ cp=transform_get_center(tr);
+ c.x=cp->x+co.x-cn.x;
+ c.y=cp->y+co.y-cn.y;
+ transform_set_center(tr, &c);
+ navit_draw(m_navit.u.navit);
+ default:
+ return;
+ }
+ m_pan_action=panningAction;
+ m_pan.x=p._1;
+ m_pan.y=p._2;
+}
+
+void
+MapViewerControlObj::GetMapViewPan(const uint16_t& panningAction, ::DBus::Struct< uint16_t, uint16_t >& p)
+{
+ p._1=m_pan.x;
+ p._2=m_pan.y;
+}
+
+void
+MapViewerControlObj::SetMapViewRotation(uint32_t sessionHandle, double rotationAngle, double rotationAnglePerFrame)
+{
+ m_rotationangle=rotationAngle;
+ m_rotationangleperframe=rotationAnglePerFrame;
+ SetFollowCarMode(sessionHandle, false);
+ MoveMap();
+
+}
+
+void
+MapViewerControlObj::GetMapViewRotation(int32_t& rotationAngle, int32_t& rotationAnglePerFrame)
+{
+ rotationAngle=m_rotationangle;
+ rotationAnglePerFrame=m_rotationangleperframe;
+}
+
+void
+MapViewerControlObj::SetMapViewBoundingBox(uint32_t sessionHandle, const ::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >& boundingBox)
+{
+ struct coord_rect r;
+ struct coord_geo g;
+ SetFollowCarMode(sessionHandle, false);
+ dbg(0,"%f,%f-%f,%f\n",boundingBox._1._1,boundingBox._1._2,boundingBox._2._1,boundingBox._2._2);
+ g.lat=boundingBox._1._1;
+ g.lng=boundingBox._1._2;
+ transform_from_geo(projection_mg, &g, &r.lu);
+ g.lat=boundingBox._2._1;
+ g.lng=boundingBox._2._2;
+ transform_from_geo(projection_mg, &g, &r.rl);
+ dbg(0,"0x%x,0x%x-0x%x,0x%x\n",r.lu.x,r.lu.y,r.rl.x,r.rl.y);
+ navit_zoom_to_rect(m_navit.u.navit, &r);
+}
+
+void
+MapViewerControlObj::GetMapViewBoundingBox(::DBus::Struct< ::DBus::Struct< double, double >, ::DBus::Struct< double, double > >& boundingBox)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ struct point p;
+ struct coord c;
+ struct coord_geo g;
+ int w,h;
+ transform_get_size(trans, &w, &h);
+ p.x=0;
+ p.y=0;
+ transform_reverse(trans, &p, &c);
+ transform_to_geo(projection_mg, &c, &g);
+ boundingBox._1._1=g.lat;
+ boundingBox._1._2=g.lng;
+ p.x=w;
+ p.y=h;
+ transform_reverse(trans, &p, &c);
+ transform_to_geo(projection_mg, &c, &g);
+ boundingBox._2._1=g.lat;
+ boundingBox._2._2=g.lng;
+}
+
+void
+MapViewerControlObj::GetDisplayedRoutes(std::vector< ::DBus::Struct< uint32_t, bool > >& displayedRoutes)
+{
+ int i;
+ for (i = 0 ; i < m_displayed_routes.size(); i++) {
+ ::DBus::Struct< uint32_t, bool> route;
+ route._1=m_displayed_routes[i]->RouteHandle();
+ route._2=false;
+ displayedRoutes.push_back(route);
+ }
+}
+
+void
+MapViewerControlObj::DisplayRoute(uint32_t SessionHandle, uint32_t RouteHandle, bool highlighted)
+{
+ HideRoute(SessionHandle, RouteHandle);
+ if (navigationcore_session == -1) {
+ NavigationCoreSession session(*conns[1]);
+ navigationcore_session=session.CreateSession("MapViewerControl");
+ }
+ DisplayedRoute *route=new DisplayedRoute(this,navigationcore_session,RouteHandle,m_mapset);
+ route->Show();
+ m_displayed_routes.push_back(route);
+ m_force_draw=true;
+ event_add_timeout(0, 0, m_move_callback);
+}
+
+void
+MapViewerControlObj::HideRoute(uint32_t SessionHandle, uint32_t RouteHandle)
+{
+ std::vector<DisplayedRoute *>::iterator it;
+
+ for (it=m_displayed_routes.begin() ; it < m_displayed_routes.end(); it++ ) {
+ if (*it && (*it)->m_handle == RouteHandle) {
+ (*it)->Hide();
+ m_displayed_routes.erase(it);
+ delete(*it);
+ m_force_draw=true;
+ event_add_timeout(0, 0, m_move_callback);
+ }
+ }
+ dbg(0,"Route not displayed\n");
+}
+
+void
+MapViewerControlObj::ConvertPixelCoordsToGeoCoords(uint32_t sessionHandle, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates, std::vector< ::DBus::Struct< double, double > >& geoCoordinates)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ struct coord c;
+ struct point p;
+ struct coord_geo g;
+ std::vector< ::DBus::Struct< uint16_t, uint16_t > >::const_iterator it;
+ for (it=pixelCoordinates.begin(); it < pixelCoordinates.end(); it++) {
+ ::DBus::Struct< double, double >geoCoordinate;
+ p.x=it->_1;
+ p.y=it->_2;
+ transform_reverse(trans, &p, &c);
+ transform_to_geo(projection_mg, &c, &g);
+ geoCoordinate._1=g.lat;
+ geoCoordinate._2=g.lng;
+ geoCoordinates.push_back(geoCoordinate);
+ }
+
+}
+
+void
+MapViewerControlObj::ConvertGeoCoordsToPixelCoords(uint32_t sessionHandle, const std::vector< ::DBus::Struct< double, double > >& geoCoordinates, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& pixelCoordinates)
+{
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ struct coord c;
+ struct point p;
+ struct coord_geo g;
+ std::vector< ::DBus::Struct< double, double > >::const_iterator it;
+ for (it=geoCoordinates.begin(); it < geoCoordinates.end(); it++) {
+ ::DBus::Struct< uint16_t, uint16_t >pixelCoordinate;
+ g.lat=it->_1;
+ g.lng=it->_2;
+ transform_from_geo(projection_mg, &g, &c);
+ transform(trans, projection_mg, &c, &p, 1, 0, 0, NULL);
+ pixelCoordinate._1=p.x;
+ pixelCoordinate._2=p.y;
+ pixelCoordinates.push_back(pixelCoordinate);
+ }
+}
+
+MapViewerControlObj::MapViewerControlObj(MapViewerControl *mapviewercontrol, uint32_t handle, const ::DBus::Struct< uint16_t, uint16_t >& MapViewSize)
+{
+ m_mapviewercontrol=mapviewercontrol;
+ m_handle=handle;
+ m_navit.type=attr_navit;
+ m_scrollspeed=0;
+ m_scrolldirection=0;
+ m_force_draw=false;
+ m_perspective=GENIVI_MAPVIEWER_2D;
+ m_follow_car=true;
+ m_routing=new Routing(*conns[2], this);
+ struct attr navit_template;
+ struct attr navit_flags={attr_flags};navit_flags.u.num=2;
+ struct attr *navit_attrs[]={&navit_flags,NULL};
+ if (!config_get_attr(config, attr_navit, &navit_template, NULL)) {
+ dbg(0,"failed to get navit template from config\n");
+ return;
+ }
+ m_navit.u.navit=navit_new(NULL,navit_attrs);
+ if (!m_navit.u.navit) {
+ dbg(0,"failed to create new navit instance\n");
+ return;
+ }
+ const char *graphics=getenv("NAVIT_GRAPHICS");
+ if (!graphics)
+ graphics="gtk_drawing_area";
+ struct attr graphics_type={attr_type};graphics_type.u.str=(char *)graphics;
+ struct attr graphics_w={attr_w};graphics_w.u.num=MapViewSize._1;
+ struct attr graphics_h={attr_h};graphics_h.u.num=MapViewSize._2;
+ struct attr graphics_window_title={attr_window_title};graphics_window_title.u.str=g_strdup_printf("Navit-%d",handle);
+ struct attr *graphics_attrs[]={&graphics_type,&graphics_w,&graphics_h,&graphics_window_title,NULL};
+ m_graphics.type=attr_graphics;
+ m_graphics.u.graphics=graphics_new(&m_navit,graphics_attrs);
+ g_free(graphics_window_title.u.str);
+
+ if (!m_graphics.u.graphics) {
+ dbg(0,"failed to create new graphics\n");
+ return;
+ }
+ m_postdraw_callback=callback_new_attr_1(reinterpret_cast<void (*)(void)>(MapViewerControlObj_PostDraw), attr_postdraw, this);
+ m_move_callback=callback_new_1(reinterpret_cast<void (*)(void)>(MapViewerControlObj_MoveMap), this);
+ graphics_add_callback(m_graphics.u.graphics, m_postdraw_callback);
+ navit_add_attr(m_navit.u.navit, &m_graphics);
+
+ struct attr mapset;
+ if (!navit_get_attr(navit_template.u.navit, attr_mapset, &mapset, NULL)) {
+ dbg(0,"failed to get mapset\n");
+ return;
+ }
+ mapset.u.mapset=mapset_dup(mapset.u.mapset);
+ m_mapset=mapset.u.mapset;
+ navit_add_attr(m_navit.u.navit, &mapset);
+
+ struct attr_iter *iter=navit_attr_iter_new();
+ struct attr layout;
+ while (navit_get_attr(navit_template.u.navit, attr_layout, &layout, iter)) {
+ navit_add_attr(m_navit.u.navit, &layout);
+ }
+ navit_attr_iter_destroy(iter);
+
+ struct attr vehicle_source={attr_source};vehicle_source.u.str=(char *)"null:";
+ struct attr vehicle_follow={attr_follow};vehicle_follow.u.num=1;
+ struct attr *vehicle_attrs[]={&vehicle_source,&vehicle_follow,NULL};
+ m_vehicle.type=attr_vehicle;
+ m_vehicle.u.vehicle=vehicle_new(&m_navit,vehicle_attrs);
+ navit_add_attr(m_navit.u.navit, &m_vehicle);
+ navit_set_attr(m_navit.u.navit, &m_vehicle);
+ m_mapmatchedposition=new MapMatchedPosition(*conns[3], m_vehicle.u.vehicle);
+
+ navit_init(m_navit.u.navit);
+ graphics_get_data(m_graphics.u.graphics,"window");
+ struct transformation *trans=navit_get_trans(m_navit.u.navit);
+ struct map_selection sel;
+ memset(&sel, 0, sizeof(sel));
+ sel.u.p_rect.rl.x=MapViewSize._1;
+ sel.u.p_rect.rl.y=MapViewSize._2;
+ transform_set_screen_selection(trans, &sel);
+#if LM
+ t_ilm_nativehandle nativehandle=(t_ilm_nativehandle)graphics_get_data(m_graphics.u.graphics,"xwindow_id");
+ t_ilm_surface surfaceId=2000+m_handle;
+ t_ilm_layer layerId=2000;
+ if (ilm_surfaceCreate(nativehandle, MapViewSize._1, MapViewSize._2, ILM_PIXELFORMAT_RGBA_8888, &surfaceId) != ILM_SUCCESS) {
+ dbg(0,"error on ilm_surfaceCreate\n");
+ }
+ if (ilm_layerAddSurface(layerId, surfaceId) != ILM_SUCCESS) {
+ dbg(0,"error on ilm_layerAddSurface\n");
+ }
+ if (ilm_commitChanges() != ILM_SUCCESS) {
+ dbg(0,"error on ilm_commitChanges\n");
+ }
+#endif
+}
+
+MapViewerControlObj::~MapViewerControlObj()
+{
+#if LM
+ t_ilm_surface surfaceId=2000+m_handle;
+ t_ilm_layer layerId=2000;
+ if (ilm_surfaceRemove(surfaceId) != ILM_SUCCESS) {
+ dbg(0,"error on ilm_surfaceRemove\n");
+ }
+ if (ilm_layerRemoveSurface(layerId, surfaceId) != ILM_SUCCESS) {
+ dbg(0,"error on ilm_layerAddSurface\n");
+ }
+ if (ilm_commitChanges() != ILM_SUCCESS) {
+ dbg(0,"error on ilm_commitChanges\n");
+ }
+#endif
+
+ graphics_remove_callback(m_graphics.u.graphics, m_postdraw_callback);
+#if 0
+ graphics_free(m_graphics.u.graphics);
+ vehicle_destroy(m_vehicle.u.vehicle);
+#endif
+ navit_destroy(m_navit.u.navit);
+ delete(m_routing);
+ delete(m_mapmatchedposition);
+}
+
+static double
+double_variant(DBus::Variant variant)
+{
+ double d;
+ DBus::MessageIter iter=variant.reader();
+ iter >> d;
+ return d;
+}
+
+uint32_t
+DisplayedRoute::RouteHandle()
+{
+ return m_handle;
+}
+
+void
+DisplayedRoute::Show()
+{
+ if (!m_shown) {
+ if (m_map.u.map)
+ mapset_add_attr(m_mapset, &m_map);
+ m_shown=true;
+ }
+}
+
+void
+DisplayedRoute::Hide()
+{
+ if (m_shown) {
+ if (m_map.u.map)
+ mapset_remove_attr(m_mapset, &m_map);
+ m_shown=false;
+ }
+}
+
+void
+DisplayedRoute::AddGeoCoordinateD(double lat, double lon)
+{
+ struct coord_geo g;
+ struct coord c;
+ g.lat=lat;
+ g.lng=lon;
+ transform_from_geo(projection_mg, &g, &c);
+ m_coordinates.push_back(c);
+}
+
+void
+DisplayedRoute::AddGeoCoordinate(DBus::Variant lat, DBus::Variant lon)
+{
+ AddGeoCoordinateD(double_variant(lat), double_variant(lon));
+}
+
+bool
+DisplayedRoute::AddSegment(std::map< uint16_t, ::DBus::Variant > map)
+{
+ if (map.find(GENIVI_NAVIGATIONCORE_START_LATITUDE) != map.end() && map.find(GENIVI_NAVIGATIONCORE_START_LONGITUDE) != map.end())
+ AddGeoCoordinate(map[GENIVI_NAVIGATIONCORE_START_LATITUDE],map[GENIVI_NAVIGATIONCORE_START_LONGITUDE]);
+ if (map.find(GENIVI_NAVIGATIONCORE_INTERMEDIATE_POINTS) != map.end()) {
+ ::DBus::Variant variant=map[GENIVI_NAVIGATIONCORE_INTERMEDIATE_POINTS];
+ std::vector<DBus::Struct<uint16_t, double, double, double> >intermediate_points;
+ DBus::MessageIter iter=variant.reader();
+ iter >> intermediate_points;
+ for (int i = 0 ; i < intermediate_points.size(); i++) {
+ AddGeoCoordinateD(intermediate_points[i]._2, intermediate_points[i]._3);
+ }
+ }
+ if (map.find(GENIVI_NAVIGATIONCORE_END_LATITUDE) != map.end() && map.find(GENIVI_NAVIGATIONCORE_END_LONGITUDE) != map.end()) {
+ AddGeoCoordinate(map[GENIVI_NAVIGATIONCORE_END_LATITUDE],map[GENIVI_NAVIGATIONCORE_END_LONGITUDE]);
+ return true;
+ }
+ return false;
+}
+
+void
+DisplayedRoute::WriteSegment(FILE *out)
+{
+ if (m_coordinates.size()) {
+ int i,header[3]={2+2*m_coordinates.size(),type_street_route,2*m_coordinates.size()};
+ fwrite(header, sizeof(header), 1, out);
+ for (i = 0 ; i < m_coordinates.size() ; i++)
+ fwrite(&m_coordinates[i], sizeof(struct coord), 1, out);
+ }
+}
+
+DisplayedRoute::DisplayedRoute(class MapViewerControlObj *mapviewer, uint8_t RouteSession, uint32_t RouteHandle, struct mapset *mapset)
+{
+ dbg(0,"enter\n");
+ std::vector< std::map< uint16_t, ::DBus::Variant > > RouteShape;
+ std::vector< uint16_t > valuesToReturn;
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LONGITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LONGITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_INTERMEDIATE_POINTS);
+ m_handle=RouteHandle;
+ m_map.type=attr_map;
+ m_map.u.map=NULL;
+ m_filename=NULL;
+ m_mapset=mapset;
+ m_shown=false;
+ uint32_t totalNumberOfSegments;
+ mapviewer->m_routing->GetRouteSegments(RouteHandle, 1, valuesToReturn, 0xffffffff, 0, totalNumberOfSegments, RouteShape);
+ m_filename=g_strdup_printf("/tmp/genivi_route_map_%d_%d.bin",mapviewer->m_handle,RouteHandle);
+ FILE *f=fopen(m_filename,"w");
+ int count=RouteShape.size();
+ bool complete=true;
+ for (int i = 0 ; i < count ; i++) {
+ std::map< uint16_t, ::DBus::Variant > map = RouteShape[i];
+ if (!complete) {
+ if (map.find(GENIVI_NAVIGATIONCORE_START_LATITUDE) != map.end() && map.find(GENIVI_NAVIGATIONCORE_START_LONGITUDE) != map.end())
+ AddGeoCoordinate(map[GENIVI_NAVIGATIONCORE_START_LATITUDE],map[GENIVI_NAVIGATIONCORE_START_LONGITUDE]);
+ else
+ dbg(0,"previous segment is missing end, but current segment is missing start also");
+ WriteSegment(f);
+ }
+ complete=AddSegment(map);
+ }
+ if (!complete)
+ dbg(0,"last segment is missing end");
+ WriteSegment(f);
+ fclose(f);
+ struct attr map_attr_type={attr_type};
+ map_attr_type.u.str=(char *)"binfile";
+ struct attr map_attr_data={attr_data};
+ map_attr_data.u.str=m_filename;
+ struct attr *map_attrs[]={&map_attr_type, &map_attr_data, NULL};
+ m_map.u.map=map_new(NULL,map_attrs);
+}
+
+DisplayedRoute::~DisplayedRoute()
+{
+ dbg(0,"enter\n");
+ if (m_map.u.map)
+ map_destroy(m_map.u.map);
+ if (m_filename) {
+ unlink(m_filename);
+ g_free(m_filename);
+ }
+}
+
+static class MapViewerControl *server;
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_mapviewercontrol");
+ int i;
+ for (i = 0 ; i < 4 ; i++) {
+ conns[i] = new DBus::Connection(DBus::Connection::SessionBus());
+ dispatchers[i].attach(NULL);
+ DBus::default_dispatcher = &dispatchers[i];
+ conns[i]->setup(&dispatchers[i]);
+ }
+ conns[0]->request_name("org.genivi.mapviewer.MapViewerControl");
+ server=new MapViewerControl(*conns[0]);
+#if LM
+ if (ilm_init() != ILM_SUCCESS) {
+ dbg(0,"error on ilm_init\n");
+ }
+#endif
+}
diff --git a/src/navigation/map-viewer/navit_genivi_mapviewer.xsl b/src/navigation/map-viewer/navit_genivi_mapviewer.xsl
new file mode 100644
index 0000000..4f55246
--- /dev/null
+++ b/src/navigation/map-viewer/navit_genivi_mapviewer.xsl
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<!-- ************************************************************************
+* Component Name: Navit POC
+* Author: Martin Schaller <martin.schaller@it-schaller.de>
+*
+* Copyright (C) 2012, GENIVI Alliance, Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+************************************************************************ -->
+<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xsl:template match="/config/plugins/plugin[1]" priority="1" >
+ <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../mapviewer-configuration/.libs/libgenivi_mapviewer_configuration.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../mapviewer-session/.libs/libgenivi_mapviewer_session.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../mapviewer-mapviewercontrol/.libs/libgenivi_mapviewer_mapviewercontrol.so" ondemand="no"/>
+ </xsl:template>
+ <xsl:template match="/config/plugins/plugin">
+ <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit">
+ <xsl:copy><xsl:attribute name="flags">7</xsl:attribute><xsl:attribute name="tracking">0</xsl:attribute><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/graphics">
+ <xsl:copy><xsl:attribute name="enabled">no</xsl:attribute><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/gui">
+ <xsl:copy><xsl:attribute name="enabled">no</xsl:attribute><xsl:apply-templates select="@*[not(name()='enabled')]|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/vehicle[@name='Local GPS']">
+ <xsl:copy><xsl:attribute name="source">null:</xsl:attribute><xsl:attribute name="follow">null:</xsl:attribute></xsl:copy>
+ </xsl:template>
+ <xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
+</xsl:transform>
diff --git a/src/navigation/map-viewer/session-plugin/.gitignore b/src/navigation/map-viewer/session-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/map-viewer/session-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/map-viewer/session-plugin/CMakeLists.txt b/src/navigation/map-viewer/session-plugin/CMakeLists.txt
new file mode 100644
index 0000000..051c794
--- /dev/null
+++ b/src/navigation/map-viewer/session-plugin/CMakeLists.txt
@@ -0,0 +1,44 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_mapviewer_session_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_mapviewer_session_adaptor.h
+ COMMAND dbusxx-xml2cpp ${mapviewer_API}/genivi-mapviewer-session.xml --adaptor=genivi_mapviewer_session_adaptor.h
+ DEPENDS ${mapviewer_API}/genivi-mapviewer-session.xml
+ )
+module_add_library(genivi_mapviewer_session genivi_mapviewer_session.cxx genivi_mapviewer_session_adaptor.h)
diff --git a/src/navigation/map-viewer/session-plugin/genivi_mapviewer_session.cxx b/src/navigation/map-viewer/session-plugin/genivi_mapviewer_session.cxx
new file mode 100644
index 0000000..5399fcc
--- /dev/null
+++ b/src/navigation/map-viewer/session-plugin/genivi_mapviewer_session.cxx
@@ -0,0 +1,125 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_mapviewer_session.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-mapviewer-constants.h"
+#include "genivi_mapviewer_session_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/event.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+static std::map<uint32_t, std::string *> handles;
+
+class Session
+: public org::genivi::mapviewer::Session_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Session(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/mapviewer")
+ {
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > Version;
+ dbg(1,"enter\n");
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4="07-06-2013";
+ return Version;
+ }
+
+ uint32_t CreateSession(const std::string &client)
+ {
+ dbg(0,"enter\n");
+ uint32_t SessionHandle=1;
+ while (handles[SessionHandle]) {
+ SessionHandle++;
+ if (SessionHandle == 256)
+ throw DBus::Error("org.genivi.mapviewer.Session.Error.NoMoreSessionHandles","Out of session handles");
+ }
+ handles[SessionHandle]=new std::string(client);
+ return SessionHandle;
+ }
+
+ uint16_t GetSessionStatus(const uint32_t& SessionHandle)
+ {
+ if (handles[SessionHandle])
+ return GENIVI_MAPVIEWER_AVAILABLE;
+ else
+ return GENIVI_MAPVIEWER_NOT_AVAILABLE;
+ }
+
+ void DeleteSession(const uint32_t& SessionHandle)
+ {
+ dbg(0,"enter\n");
+ if (!handles[SessionHandle])
+ throw DBus::Error("org.genivi.mapviewer.Session.Error.NotAvailableSessionHandle","Session handle invalid");
+ delete(handles[SessionHandle]);
+ handles[SessionHandle]=NULL;
+ SessionDeleted(SessionHandle);
+ }
+
+ std::vector< ::DBus::Struct< uint32_t, std::string > >
+ GetAllSessions()
+ {
+ std::vector< ::DBus::Struct< uint32_t, std::string > > ret;
+ std::map<uint32_t, std::string *>::const_iterator it;
+ for(it = handles.begin(); it != handles.end(); it++) {
+ ::DBus::Struct< uint32_t, std::string > session;
+ if (it->second) {
+ session._1=it->first;
+ session._2=*it->second;
+ ret.push_back(session);
+ }
+ }
+ return ret;
+ }
+};
+
+static class Session *server;
+
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_mapviewersession");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.mapviewer.Session");
+ server=new Session(*conn);
+}
diff --git a/src/navigation/navigation-core/configuration-plugin/.gitignore b/src/navigation/navigation-core/configuration-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/configuration-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/configuration-plugin/CMakeLists.txt b/src/navigation/navigation-core/configuration-plugin/CMakeLists.txt
new file mode 100644
index 0000000..60d0145
--- /dev/null
+++ b/src/navigation/navigation-core/configuration-plugin/CMakeLists.txt
@@ -0,0 +1,44 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_configuration_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_configuration_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-configuration.xml --adaptor=genivi_navigationcore_configuration_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-configuration.xml
+ )
+module_add_library(genivi_navigationcore_configuration genivi_navigationcore_configuration.cxx genivi_navigationcore_configuration_adaptor.h)
diff --git a/src/navigation/navigation-core/configuration-plugin/genivi_navigationcore_configuration.cxx b/src/navigation/navigation-core/configuration-plugin/genivi_navigationcore_configuration.cxx
new file mode 100644
index 0000000..5f5e72b
--- /dev/null
+++ b/src/navigation/navigation-core/configuration-plugin/genivi_navigationcore_configuration.cxx
@@ -0,0 +1,282 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_configuration.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* 2014-03-18, Philippe Colliot, Add JPN language to locale
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include <locale.h>
+#include <stdlib.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_configuration_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/event.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+static DBus::Variant
+variant_array_uint16(std::vector< uint16_t > i)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << i;
+ return variant;
+}
+
+static struct map32 {
+ const char *c3;
+ const char *c2;
+} language_map[] = {
+ {"deu","de"},
+ {"eng","en"},
+ {"fra","fr"},
+ {"jpn","jp"},
+};
+
+static struct map32 country_map[] = {
+ {"CHE","CH"},
+ {"DEU","DE"},
+ {"FRA","FR"},
+ {"USA","US"},
+ {"JPN","JP"},
+};
+
+static const char *
+map_3_to_2(struct map32 *map, int len, const char *in)
+{
+ int i;
+ for (i = 0 ; i < len ; i++)
+ if (!strcmp(map[i].c3,in))
+ return map[i].c2;
+ return "";
+}
+
+static const char *
+map_2_to_3(struct map32 *map, int len, const char *in)
+{
+ int i;
+ for (i = 0 ; i < len ; i++)
+ if (!strcmp(map[i].c2,in))
+ return map[i].c3;
+ return "";
+}
+
+static const char *
+language_3_to_2(const char *in)
+{
+ return map_3_to_2(language_map, sizeof(language_map)/sizeof(language_map[0]), in);
+}
+
+static const char *
+language_2_to_3(const char *in)
+{
+ return map_2_to_3(language_map, sizeof(language_map)/sizeof(language_map[0]), in);
+}
+
+static const char *
+country_3_to_2(const char *in)
+{
+ return map_3_to_2(country_map, sizeof(country_map)/sizeof(country_map[0]), in);
+}
+
+static const char *
+country_2_to_3(const char *in)
+{
+ return map_2_to_3(country_map, sizeof(country_map)/sizeof(country_map[0]), in);
+}
+
+
+std::map< uint16_t, ::DBus::Variant > unitsOfMeasurement;
+
+class Configuration
+: public org::genivi::navigationcore::Configuration_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Configuration(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >ret;
+ ret._1=3;
+ ret._2=0;
+ ret._3=0;
+ ret._4="07-06-2013";
+ return ret;
+ }
+
+ void
+ SetUnitsOfMeasurement(const std::map< uint16_t, ::DBus::Variant >& unitsOfMeasurementList)
+ {
+ unitsOfMeasurement=unitsOfMeasurementList;
+ std::vector< uint16_t > changed;
+ changed.push_back(GENIVI_NAVIGATIONCORE_UNITS_OF_MEASUREMENT);
+ ConfigurationChanged(changed);
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetUnitsOfMeasurement()
+ {
+ return unitsOfMeasurement;
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetSupportedUnitsOfMeasurement()
+ {
+ std::map< uint16_t, ::DBus::Variant > ret;
+ std::vector< uint16_t > length;
+ length.push_back(GENIVI_NAVIGATIONCORE_MILE);
+ length.push_back(GENIVI_NAVIGATIONCORE_METER);
+ ret[GENIVI_NAVIGATIONCORE_LENGTH]=variant_array_uint16(length);
+ return ret;
+ }
+
+ void
+ SetTimeFormat(const uint16_t& timeFormat)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetTimeFormat()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedTimeFormats()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetLocale(const std::string& language, const std::string& country)
+ {
+ char *lang=g_strdup_printf("%s_%s.UTF-8",language_3_to_2(language.c_str()),country_3_to_2(country.c_str()));
+ setenv("LANG",lang,1);
+ setlocale(LC_ALL,"");
+ std::vector< uint16_t > changed;
+ changed.push_back(GENIVI_NAVIGATIONCORE_LOCALE);
+ ConfigurationChanged(changed);
+ }
+
+ void
+ GetLocale(std::string& language, std::string& country)
+ {
+ char *lang=g_strdup(getenv("LANG"));
+ char *sep,*dot;
+ if (!lang || !(sep=strchr(lang,'_'))) {
+ g_free(lang);
+ throw DBus::ErrorFailed("LANG doesn't exist or doesn't contain a _");
+ }
+ *sep++='\0';
+ language=language_2_to_3(lang);
+ dot=strchr(sep,'.');
+ if (dot)
+ *dot='\0';
+ country=country_2_to_3(sep);
+ g_free(lang);
+ }
+
+ std::vector< ::DBus::Struct< std::string, std::string > >
+ GetSupportedLocales()
+ {
+ std::vector< ::DBus::Struct< std::string, std::string > > ret;
+ ::DBus::Struct< std::string, std::string > en_US { "eng","USA" };
+ ::DBus::Struct< std::string, std::string > de_DE { "deu","DEU" };
+ ::DBus::Struct< std::string, std::string > fr_FR { "fra","FRA" };
+ ::DBus::Struct< std::string, std::string > jp_JP { "jpn","JPN" };
+ ret.push_back(en_US);
+ ret.push_back(de_DE);
+ ret.push_back(fr_FR);
+ ret.push_back(jp_JP);
+ return ret;
+ }
+
+ void
+ SetTTSSettings(const uint16_t& ttsMode)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetTTSSettings()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetCoordinatesFormat(const uint16_t& coordinatesFormat)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetCoordinatesFormat()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedCoordinatesFormats()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+};
+
+static class Configuration *server;
+
+static DBus::Variant
+variant_uint16(uint16_t i)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << i;
+ return variant;
+}
+
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_navigationcoreconfiguration");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.Configuration");
+ unitsOfMeasurement[GENIVI_NAVIGATIONCORE_LENGTH]=variant_uint16(GENIVI_NAVIGATIONCORE_KM);
+ server=new Configuration(*conn);
+}
diff --git a/src/navigation/navigation-core/enhancedposition-plugin/.gitignore b/src/navigation/navigation-core/enhancedposition-plugin/.gitignore
new file mode 100644
index 0000000..93e9f1e
--- /dev/null
+++ b/src/navigation/navigation-core/enhancedposition-plugin/.gitignore
@@ -0,0 +1,10 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+*_proxy.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/enhancedposition-plugin/CMakeLists.txt b/src/navigation/navigation-core/enhancedposition-plugin/CMakeLists.txt
new file mode 100644
index 0000000..584c7ee
--- /dev/null
+++ b/src/navigation/navigation-core/enhancedposition-plugin/CMakeLists.txt
@@ -0,0 +1,45 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_positioning_enhancedposition_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_positioning_enhancedposition_proxy.h
+ COMMAND dbusxx-xml2cpp ${positioning_API}/genivi-positioning-enhancedposition.xml --proxy=genivi_positioning_enhancedposition_proxy.h &&
+ sed -i -e "'s/>, >/> >/g'" -e 's/>::DBus::Struct</>,::DBus::Struct</g' genivi_positioning_enhancedposition_proxy.h
+ DEPENDS ${positioning_API}/genivi-positioning-enhancedposition.xml
+ )
+module_add_library(genivi_positioning_enhancedposition genivi_positioning_enhancedposition.cxx genivi_positioning_enhancedposition_proxy.h)
diff --git a/src/navigation/navigation-core/enhancedposition-plugin/genivi_positioning_enhancedposition.cxx b/src/navigation/navigation-core/enhancedposition-plugin/genivi_positioning_enhancedposition.cxx
new file mode 100644
index 0000000..814ef4e
--- /dev/null
+++ b/src/navigation/navigation-core/enhancedposition-plugin/genivi_positioning_enhancedposition.cxx
@@ -0,0 +1,328 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_positioning_enhancedposition.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+/**
+ * @file vehicle_enhancedposition.c
+ * Navit, a modular navigation system.
+ *
+ * Copyright (C) 2005-2008 Navit Team
+ * Copyright (C) BMW Car IT GmbH 2011
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "constants/genivi-enhancedpositionservice-constants.h"
+#include <glib.h>
+#include <string.h>
+#include <stdbool.h>
+#include <assert.h>
+#include <math.h>
+
+#include "navit/debug.h"
+#include "navit/item.h"
+#include "navit/navit.h"
+#include "navit/map.h"
+#include "navit/callback.h"
+#include "navit/transform.h"
+#include "navit/plugin.h"
+#include "navit/event.h"
+#include "navit/vehicle.h"
+
+#include "time.h"
+
+#include "genivi_positioning_enhancedposition_proxy.h"
+
+DBus::Glib::BusDispatcher dispatcher;
+DBus::Connection *conn;
+
+struct vehicle_priv {
+ class EnhancedPosition *enhanced_position;
+ struct callback_list *cbl;
+ struct callback *cb;
+ int cb_pending;
+ struct coord_geo geo;
+ double speed;
+ double direction;
+ double height;
+ int fix_type;
+ time_t fix_time;
+ char fixiso8601[128];
+ double hdop;
+ int sats;
+ int sats_signal;
+ int sats_used;
+};
+
+class EnhancedPosition
+: public org::genivi::positioning::EnhancedPosition_proxy,
+ public DBus::ObjectProxy
+{
+ public:
+ struct vehicle_priv *m_priv;
+ EnhancedPosition(DBus::Connection &connection, struct vehicle_priv *priv)
+ : DBus::ObjectProxy(connection, "/position","org.genivi.positioning.EnhancedPosition")
+ {
+ m_priv=priv;
+ try {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string>version;
+ version=GetVersion();
+ dbg(0,"EnhancedPosition version %d.%d.%d\n",version._1,version._2,version._3);
+ } catch(...) {
+ dbg(0,"Exception during GetVersion\n");
+ }
+ }
+
+ void
+ PositionUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ dbg(1,"enter\n");
+ int i;
+ bool position_found=false;
+ for (i = 0 ; i < changedValues.size() ; i++) {
+ if (changedValues[i] == GENIVI_ENHANCEDPOSITIONSERVICE_LATITUDE ||
+ changedValues[i] == GENIVI_ENHANCEDPOSITIONSERVICE_LONGITUDE) {
+ position_found=true;
+ break;
+ }
+ }
+ if (position_found && !m_priv->cb_pending) {
+ event_add_timeout(0, 0, m_priv->cb);
+ m_priv->cb_pending=1;
+ }
+ }
+
+ void
+ RotationRateUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ dbg(0,"enter\n");
+ }
+
+ void
+ AccuracyUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ dbg(0,"enter\n");
+ }
+
+ void SatelliteInfoUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ dbg(0,"enter\n");
+ }
+
+ void StatusUpdate(const std::vector< uint16_t >& changedValues)
+ {
+ dbg(0,"enter\n");
+ }
+};
+
+/**
+ * @see vehicle_enhancedposition_methods
+ */
+static void vehicle_enhancedposition_destroy(struct vehicle_priv *priv)
+{
+ dbg(0,"enter\n");
+ DBus::default_dispatcher = &dispatcher;
+ delete(priv->enhanced_position);
+ callback_destroy(priv->cb);
+ g_free(priv);
+}
+
+/**
+ * This function is used to really fetch the changed attribute, e.g. Position,
+ * into navit core.
+ *
+ * @see vehicle_enhancedposition_methods
+ */
+static int vehicle_enhancedposition_position_attr_get(struct vehicle_priv *priv, enum attr_type type, struct attr *attr)
+{
+ dbg(1, "enter\n");
+
+ switch (type) {
+ case attr_position_fix_type:
+ // printf("fix_type\n");
+ attr->u.num = priv->fix_type;
+ break;
+ case attr_position_height:
+ // printf("height\n");
+ attr->u.numd = &priv->height;
+ break;
+ case attr_position_speed:
+ // printf("speed\n");
+ attr->u.numd = &priv->speed;
+ break;
+ case attr_position_direction:
+ // printf("direction\n");
+ attr->u.numd = &priv->direction;
+ break;
+#if 0
+ case attr_position_hdop:
+ // printf("hdop\n");
+ attr->u.numd = &priv->hdop;
+ break;
+ case attr_position_qual:
+ // printf("qual\n");
+ attr->u.num = priv->sats;
+ break;
+ case attr_position_sats_signal:
+ // printf("sats signal\n");
+ attr->u.num = priv->sats_signal;
+ break;
+ case attr_position_sats_used:
+ // printf("sats used\n");
+ attr->u.num = priv->sats_used;
+ break;
+#endif
+ case attr_position_coord_geo:
+ attr->u.coord_geo = &priv->geo;
+ break;
+ case attr_position_time_iso8601: {
+ struct tm tm;
+ if (!priv->fix_time) {
+ dbg(0,"no fix time\n");
+ return 0;
+ }
+ if (gmtime_r(&priv->fix_time, &tm)) {
+ strftime(priv->fixiso8601, sizeof(priv->fixiso8601), "%Y-%m-%dT%TZ", &tm);
+ attr->u.str = priv->fixiso8601;
+ } else
+ return 0;
+ break;
+ }
+ default:
+ // printf("other attribute\n");
+ return 0;
+ }
+ return 1;
+}
+
+static int vehicle_enhancedposition_set_attr(struct vehicle_priv *priv, struct attr *attr)
+{
+ dbg(0, "enter\n");
+}
+
+// navit plugin callbacks
+struct vehicle_methods vehicle_enhancedposition_methods = {
+ vehicle_enhancedposition_destroy,
+ vehicle_enhancedposition_position_attr_get,
+ vehicle_enhancedposition_set_attr,
+};
+
+static double
+double_variant(DBus::Variant variant)
+{
+ double d;
+ DBus::MessageIter iter=variant.reader();
+ iter >> d;
+ return d;
+}
+
+
+static void
+vehicle_process_map(struct vehicle_priv *priv, std::map< uint16_t, ::DBus::Variant >&map)
+{
+ std::map< uint16_t, ::DBus::Variant >::const_iterator itr;
+ for(itr = map.begin(); itr != map.end(); ++itr) {
+ switch ((*itr).first) {
+ case GENIVI_ENHANCEDPOSITIONSERVICE_TIMESTAMP:
+ break;
+ case GENIVI_ENHANCEDPOSITIONSERVICE_LATITUDE:
+ priv->geo.lat=double_variant((*itr).second);
+ break;
+ case GENIVI_ENHANCEDPOSITIONSERVICE_LONGITUDE:
+ priv->geo.lng=double_variant((*itr).second);
+ break;
+ case GENIVI_ENHANCEDPOSITIONSERVICE_ALTITUDE:
+ priv->height=double_variant((*itr).second);
+ break;
+ case GENIVI_ENHANCEDPOSITIONSERVICE_HEADING:
+ priv->direction=double_variant((*itr).second);
+ break;
+ case GENIVI_ENHANCEDPOSITIONSERVICE_SPEED:
+ priv->speed=floor(double_variant((*itr).second)*360+0.5)/100;
+ break;
+ }
+ }
+}
+
+static void
+vehicle_enhancedposition_callback(struct vehicle_priv *priv)
+{
+ dbg(1,"enter\n");
+ std::map< uint16_t, ::DBus::Variant >position=priv->enhanced_position->GetPosition();
+ vehicle_process_map(priv, position);
+ time(&priv->fix_time); /* FIXME: Use actual value */
+ priv->fix_type=2; /* 3d, FIXME: Use actual value */
+ callback_list_call_attr_0(priv->cbl, attr_position_coord_geo);
+ priv->cb_pending=0;
+}
+
+/**
+ * vehicle_enhancedposition Constructor.
+ *
+ * @see plugin_init
+ */
+static struct vehicle_priv *
+vehicle_enhancedposition_new(struct vehicle_methods *meth,
+ struct callback_list *cbl, struct attr **attrs)
+{
+ struct vehicle_priv *ret;
+
+ dbg(0, "enter\n");
+
+ *meth=vehicle_enhancedposition_methods;
+ ret = g_new0(struct vehicle_priv, 1);
+ ret->enhanced_position = new EnhancedPosition(*conn,ret);
+ ret->cb=callback_new_1(callback_cast(vehicle_enhancedposition_callback), ret);
+ ret->cbl=cbl;
+
+ return ret;
+}
+
+void plugin_init(void)
+{
+ event_request_system("glib","genivi_navigationcore_enhpos");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ dbg(0,"enter\n");
+
+ plugin_register_vehicle_type("enhancedposition", vehicle_enhancedposition_new);
+}
diff --git a/src/navigation/navigation-core/guidance-plugin/.gitignore b/src/navigation/navigation-core/guidance-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/guidance-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/guidance-plugin/CMakeLists.txt b/src/navigation/navigation-core/guidance-plugin/CMakeLists.txt
new file mode 100644
index 0000000..ba71412
--- /dev/null
+++ b/src/navigation/navigation-core/guidance-plugin/CMakeLists.txt
@@ -0,0 +1,45 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_guidance_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_guidance_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-guidance.xml --adaptor=genivi_navigationcore_guidance_adaptor.h &&
+ sed -i -e "'s/>, >/> >/g'" -e "'s/>, >/> >/g'" -e 's/>::DBus::Struct</>,::DBus::Struct</g' genivi_navigationcore_guidance_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-guidance.xml
+ )
+module_add_library(genivi_navigationcore_guidance genivi_navigationcore_guidance.cxx genivi_navigationcore_guidance_adaptor.h)
diff --git a/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx b/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx
new file mode 100644
index 0000000..c3f6820
--- /dev/null
+++ b/src/navigation/navigation-core/guidance-plugin/genivi_navigationcore_guidance.cxx
@@ -0,0 +1,719 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_guidance.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_guidance_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/callback.h"
+#include "navit/navigation.h"
+#include "navit/map.h"
+#include "navit/transform.h"
+#include "navit/track.h"
+#include "navit/vehicle.h"
+#include "navit/route.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+class Guidance;
+
+class GuidanceObj
+{
+ public:
+ struct callback *m_guidance_callback;
+ struct attr m_route, m_vehicleprofile, m_tracking_callback;
+ uint32_t m_session,m_route_handle;
+ Guidance *m_guidance;
+ bool m_paused;
+ struct item *get_item(struct map_rect *mr);
+ struct map_rect *get_map_rect(void);
+ void SetSimulationMode(uint32_t SessionHandle, bool Activate);
+ void GetSimulationMode(bool& SimulationMode);
+ void SetSimulationSpeed(uint32_t sessionHandle);
+ void PauseGuidance(uint32_t sessionHandle);
+ void ResumeGuidance(uint32_t sessionHandle);
+ void GetGuidanceStatus(uint16_t& guidanceStatus, uint32_t& routeHandle);
+ void GetDestinationInformation(uint32_t& offset, uint32_t& TravelTime, int32_t& Direction, int16_t& TimeZone);
+ void GetManeuver(struct item *item, uint32_t& DistanceToManeuver, ::DBus::Struct< uint16_t, uint16_t >& Maneuver, std::string& RoadAfterManeuver, uint16_t& ManeuverDirection);
+ void GetManeuversList(const uint16_t& requestedNumberOfManeuvers, const uint32_t& maneuverOffset, uint16_t& numberOfManeuvers, std::vector< ::DBus::Struct< std::string, std::string, uint16_t, uint16_t, uint32_t, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, ::DBus::Struct< uint16_t, uint16_t >, ::DBus::Struct< uint16_t, std::string > > > > >& maneuversList);
+ void GetGuidanceDetails(bool& voiceGuidance, bool& vehicleOnTheRoad, bool& isDestinationReached, uint16_t& maneuver);
+ GuidanceObj(class Guidance *guidance, uint32_t SessionHandle, uint32_t RouteHandle);
+ ~GuidanceObj();
+};
+
+void GuidanceObj_Callback(GuidanceObj *obj);
+static class GuidanceObj *guidance;
+static struct attr vehicle_speed={attr_speed,(char *)40};
+
+static struct navit *
+get_navit(void)
+{
+ struct attr navit;
+ if (!config_get_attr(config, attr_navit, &navit, NULL))
+ return NULL;
+ return navit.u.navit;
+}
+
+static struct navigation *
+get_navigation(void)
+{
+ struct navit *navit=get_navit();
+ struct attr navigation;
+ if (!navit)
+ return NULL;
+ if (!navit_get_attr(navit, attr_navigation, &navigation, NULL))
+ return NULL;
+ return navigation.u.navigation;
+}
+
+static struct tracking *
+get_tracking(void)
+{
+ struct navit *navit=get_navit();
+ struct attr tracking;
+ if (!navit)
+ return NULL;
+ if (!navit_get_attr(navit, attr_trackingo, &tracking, NULL))
+ return NULL;
+ return tracking.u.tracking;
+}
+
+static struct vehicle *
+get_vehicle(const char *source_prefix)
+{
+ struct navit *navit=get_navit();
+ struct attr vehicle;
+ struct vehicle *ret=NULL;
+ if (!source_prefix) {
+ if (navit_get_attr(navit, attr_vehicle, &vehicle, NULL))
+ ret=vehicle.u.vehicle;
+ } else {
+ struct attr_iter *iter=navit_attr_iter_new();
+ while (navit_get_attr(navit, attr_vehicle, &vehicle, iter)) {
+ struct attr source;
+ if (vehicle.u.vehicle && vehicle_get_attr(vehicle.u.vehicle, attr_source, &source, NULL) &&
+ !strncmp(source.u.str, source_prefix, strlen(source_prefix))) {
+ ret=vehicle.u.vehicle;
+ break;
+ }
+ }
+ navit_attr_iter_destroy(iter);
+ }
+ return ret;
+}
+
+class Guidance
+: public org::genivi::navigationcore::Guidance_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Guidance(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ simulationMode = true; //by default
+ }
+
+ void
+ SetSimulationMode(const uint32_t& SessionHandle, const bool& Activate)
+ {
+ dbg(0,"enter Activate=%d\n",Activate);
+ struct attr vehicle;
+ vehicle.type=attr_vehicle;
+ vehicle.u.vehicle=get_vehicle(Activate?"enhancedposition:":"demo:");
+ if (vehicle.u.vehicle) {
+ simulationMode = Activate;
+ struct navit *navit=get_navit();
+ navit_set_attr(navit, &vehicle);
+ } else {
+ dbg(0,"Failed to get vehicle\n");
+ }
+ }
+
+ bool
+ GetSimulationMode()
+ {
+ return (simulationMode);
+ }
+
+ void
+ StartGuidance(const uint32_t& SessionHandle, const uint32_t& RouteHandle)
+ {
+ uint32_t Result;
+ dbg(0,"enter\n");
+ if (guidance) {
+ dbg(0,"guidance already active\n");
+ throw DBus::ErrorFailed("guidance already active");
+ }
+ guidance=new GuidanceObj(this, SessionHandle, RouteHandle);
+ }
+
+ void
+ StopGuidance(const uint32_t& SessionHandle)
+ {
+ dbg(0,"enter\n");
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ delete(guidance);
+ guidance=NULL;
+ }
+
+ void
+ GetDestinationInformation(uint32_t& offset, uint32_t& travelTime, int32_t& direction, uint16_t& side, int16_t& timeZone, int16_t& daylightSavingTime)
+ {
+ dbg(1,"enter\n");
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ guidance->GetDestinationInformation(offset, travelTime, direction, timeZone);
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ DBus::Struct<uint16_t, uint16_t, uint16_t, std::string> Version;
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("23-10-2013");
+ return Version;
+ }
+
+ void
+ SetSimulationSpeed(const uint32_t& sessionHandle, const uint8_t& speedFactor)
+ {
+ vehicle_speed.u.num=speedFactor*40/4;
+ if (guidance)
+ guidance->SetSimulationSpeed(sessionHandle);
+ }
+
+ uint8_t
+ GetSimulationSpeed()
+ {
+ return vehicle_speed.u.num*4/40;
+ }
+
+ void
+ PauseGuidance(const uint32_t& sessionHandle)
+ {
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ guidance->PauseGuidance(sessionHandle);
+ }
+
+ void
+ ResumeGuidance(const uint32_t& sessionHandle)
+ {
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ guidance->ResumeGuidance(sessionHandle);
+ }
+
+ void
+ SetVoiceGuidance(const bool& activate, const std::string& voice)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetGuidanceDetails(bool& voiceGuidance, bool& vehicleOnTheRoad, bool& isDestinationReached, uint16_t& maneuver)
+ {
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ guidance->GetGuidanceDetails(voiceGuidance, vehicleOnTheRoad, isDestinationReached, maneuver);
+ }
+
+ void
+ PlayVoiceManeuver()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+
+ void
+ GetWaypointInformation(const uint16_t& requestedNumberOfWaypoints, uint16_t& numberOfWaypoints, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, uint16_t, int16_t, int16_t, bool, uint16_t > >& waypointsList)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetManeuversList(const uint16_t& requestedNumberOfManeuvers, const uint32_t& maneuverOffset, uint16_t& numberOfManeuvers, std::vector< ::DBus::Struct< std::string, std::string, uint16_t, uint16_t, uint32_t, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, ::DBus::Struct< uint16_t, uint16_t >, ::DBus::Struct< uint16_t, std::string > > > > >& maneuversList)
+ {
+ if (!guidance) {
+ dbg(0,"no guidance active\n");
+ throw DBus::ErrorFailed("no guidance active");
+ }
+ guidance->GetManeuversList(requestedNumberOfManeuvers, maneuverOffset, numberOfManeuvers, maneuversList);
+ }
+
+ void
+ SetRouteCalculationMode(const uint32_t& sessionHandle, const uint16_t& routeCalculationMode)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SkipNextManeuver(const uint32_t& sessionHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetGuidanceStatus(uint16_t& guidanceStatus, uint32_t& routeHandle)
+ {
+ if (guidance) {
+ guidance->GetGuidanceStatus(guidanceStatus, routeHandle);
+ } else {
+ guidanceStatus=GENIVI_NAVIGATIONCORE_INACTIVE;
+ routeHandle=0;
+ }
+ }
+
+ void
+ SetVoiceGuidanceSettings(const uint16_t& promptMode)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetVoiceGuidanceSettings()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetNearestRouteLocation(double& distance, double& direction)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ GetNearestRoadLocation(double& distance, int32_t& direction)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ bool simulationMode;
+};
+
+void
+GuidanceObj::GetDestinationInformation(uint32_t& Distance, uint32_t& TravelTime, int32_t& Direction, int16_t &TimeZone)
+{
+ struct coord c[2];
+ int idx=0;
+ struct attr destination_time, destination_length;
+ struct map_rect *mr=get_map_rect();
+ struct item *item;
+ if (!mr)
+ throw DBus::ErrorFailed("internal error:failed to get map rect");
+ while (item=map_rect_get_item(mr)) {
+ if (item_coord_get(item, &c[idx], 1)) {
+ if (!idx) {
+ if (!item_attr_get(item, attr_destination_time, &destination_time))
+ destination_time.u.num=-1;
+ if (!item_attr_get(item, attr_destination_length, &destination_length))
+ destination_length.u.num=-1;
+ idx=1;
+ }
+ }
+ }
+ if (!idx)
+ throw DBus::ErrorFailed("internal error:navigation has only one coordinate");
+ if (destination_time.u.num == -1 || destination_length.u.num == -1) {
+ dbg(0,"time %d length %d\n",destination_time.u.num, destination_length.u.num);
+ throw DBus::ErrorFailed("internal error:failed to get time or length");
+ }
+ Distance=destination_length.u.num;
+ TravelTime=destination_time.u.num/10;
+ Direction=transform_get_angle_delta(&c[0], &c[1], 0);
+ TimeZone=0;
+}
+
+void
+GuidanceObj::GetManeuver(struct item *item, uint32_t& DistanceToManeuver, ::DBus::Struct< uint16_t, uint16_t >& Maneuver, std::string& RoadAfterManeuver, uint16_t& ManeuverDirection)
+{
+ struct attr length, street_name;
+ if (item_attr_get(item, attr_length, &length)) {
+ DistanceToManeuver=length.u.num;
+ }
+ if (item_attr_get(item, attr_street_name, &street_name)) {
+ RoadAfterManeuver=std::string(street_name.u.str);
+ }
+ switch (item->type) {
+ case type_nav_straight:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_STRAIGHT_ON;
+ break;
+ case type_nav_turnaround:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_UTURN_LEFT;
+ break;
+ case type_nav_right_1:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_RIGHT;
+ break;
+ case type_nav_right_2:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_RIGHT;
+ break;
+ case type_nav_right_3:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_RIGHT;
+ break;
+ case type_nav_left_1:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_LEFT;
+ break;
+ case type_nav_left_2:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_LEFT;
+ break;
+ case type_nav_left_3:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_CROSSROAD;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_LEFT;
+ break;
+ // FIXME: Are ManeuverDirection values right here?
+ case type_nav_roundabout_r1:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_RIGHT;
+ break;
+ case type_nav_roundabout_r2:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_RIGHT;
+ break;
+ case type_nav_roundabout_r3:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_RIGHT;
+ break;
+ case type_nav_roundabout_r4:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_STRAIGHT_ON;
+ break;
+ case type_nav_roundabout_r5:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_LEFT;
+ break;
+ case type_nav_roundabout_r6:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_LEFT;
+ break;
+ case type_nav_roundabout_r7:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_LEFT;
+ break;
+ case type_nav_roundabout_r8:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_UTURN_LEFT;
+ break;
+ // FIXME: Distinguish between clockwise and counterclockwise roundabout?
+ case type_nav_roundabout_l1:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_LEFT;
+ break;
+ case type_nav_roundabout_l2:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_LEFT;
+ break;
+ case type_nav_roundabout_l3:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_LEFT;
+ break;
+ case type_nav_roundabout_l4:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_STRAIGHT_ON;
+ break;
+ case type_nav_roundabout_l5:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_SLIGHT_RIGHT;
+ break;
+ case type_nav_roundabout_l6:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_RIGHT;
+ break;
+ case type_nav_roundabout_l7:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_HARD_RIGHT;
+ break;
+ case type_nav_roundabout_l8:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_ROUNDABOUT;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_UTURN_RIGHT;
+ break;
+ case type_nav_destination:
+ Maneuver._1=GENIVI_NAVIGATIONCORE_DESTINATION;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_STRAIGHT_ON;
+ break;
+ default:
+ dbg(0,"Unable to convert type %s\n",item_to_name(item->type));
+ Maneuver._1=GENIVI_NAVIGATIONCORE_INVALID;
+ ManeuverDirection=GENIVI_NAVIGATIONCORE_INVALID;
+ }
+}
+
+
+void
+GuidanceObj::GetGuidanceDetails(bool& voiceGuidance, bool& vehicleOnTheRoad, bool& isDestinationReached, uint16_t& maneuver)
+{
+}
+
+void
+GuidanceObj::GetManeuversList(const uint16_t& requestedNumberOfManeuvers, const uint32_t& maneuverOffset, uint16_t& numberOfManeuvers, std::vector< ::DBus::Struct< std::string, std::string, uint16_t, uint16_t, uint32_t, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, ::DBus::Struct< uint16_t, uint16_t >, ::DBus::Struct< uint16_t, std::string > > > > >& maneuversList)
+{
+ struct map_rect *mr=get_map_rect();
+ struct item *item;
+ uint16_t maneuverIndex;
+ numberOfManeuvers = 0;
+ maneuverIndex = 0;
+ while (item=get_item(mr)) { //scan the list of maneuvers of the route
+ if (maneuverIndex >= maneuverOffset && maneuverIndex < maneuverOffset+requestedNumberOfManeuvers) {
+ ::DBus::Struct< std::string, std::string, uint16_t, uint16_t, uint32_t, std::vector< ::DBus::Struct< uint32_t, uint32_t, int32_t, ::DBus::Struct< uint16_t, uint16_t >, ::DBus::Struct< uint16_t, std::string > > > >maneuver;
+ ::DBus::Struct< uint32_t, uint32_t, int32_t, ::DBus::Struct< uint16_t, uint16_t >, ::DBus::Struct< uint16_t, std::string > > sub_maneuver;
+ maneuver._1 = ""; //roadNumberAfterManeuver
+ maneuver._3 = GENIVI_NAVIGATIONCORE_DEFAULT; //roadPropertyAfterManeuver
+ maneuver._4 = GENIVI_NAVIGATIONCORE_RIGHT; //drivingSide
+ maneuver._5 = 0; //offsetOfNextManeuver
+ GetManeuver(item, sub_maneuver._1, sub_maneuver._4, maneuver._2, sub_maneuver._5._1);
+ maneuver._6.push_back(sub_maneuver);
+ if (maneuversList.size())
+ maneuversList.back()._5 = sub_maneuver._1; //offsetOfNextManeuver of the last record is the offsetOfManeuver of this one
+ maneuversList.push_back(maneuver);
+ numberOfManeuvers++;
+ }
+ maneuverIndex++;
+ }
+ map_rect_destroy(mr);
+}
+
+void
+GuidanceObj::SetSimulationSpeed(uint32_t sessionHandle)
+{
+ struct vehicle *vehicle=get_vehicle("demo:");
+ if (vehicle && !m_paused)
+ vehicle_set_attr(vehicle, &vehicle_speed);
+}
+
+void
+GuidanceObj::PauseGuidance(uint32_t sessionHandle)
+{
+ struct vehicle *vehicle=get_vehicle("demo:");
+ if (vehicle) {
+ struct attr vehicle_speed0={attr_speed,(char *)0};
+ vehicle_set_attr(vehicle, &vehicle_speed0);
+ }
+ m_paused=true;
+}
+
+void
+GuidanceObj::ResumeGuidance(uint32_t sessionHandle)
+{
+ struct vehicle *vehicle=get_vehicle("demo:");
+ m_paused=false;
+ GuidanceObj_Callback(this);
+ if (vehicle)
+ vehicle_set_attr(vehicle, &vehicle_speed);
+}
+
+void
+GuidanceObj::GetGuidanceStatus(uint16_t& guidanceStatus, uint32_t& routeHandle)
+{
+#if 0
+ if (m_paused)
+ return GENIVI_NAVIGATIONCORE_PAUSED;
+#endif
+ guidanceStatus=GENIVI_NAVIGATIONCORE_ACTIVE;
+ routeHandle=m_route_handle;
+}
+
+
+void
+GuidanceObj_Callback(GuidanceObj *obj)
+{
+ struct attr level;
+ struct map_rect *mr;
+ struct item *item;
+ dbg(1,"enter\n");
+ if (obj->m_paused)
+ return;
+ mr=obj->get_map_rect();
+ if (!mr) {
+ dbg(0,"failed to get map rect\n");
+ return;
+ }
+ item=obj->get_item(mr);
+ if (item && item_attr_get(item, attr_level, &level)) {
+ int maneuver;
+ dbg(1,"level=%d\n",level.u.num);
+ switch(level.u.num) {
+ case 3:
+ maneuver=GENIVI_NAVIGATIONCORE_CRUISE;
+ break;
+ case 2:
+ maneuver=GENIVI_NAVIGATIONCORE_MANEUVER_APPEARED;
+ break;
+ case 1:
+ maneuver=GENIVI_NAVIGATIONCORE_PRE_ADVICE;
+ break;
+ case 0:
+ maneuver=GENIVI_NAVIGATIONCORE_ADVICE;
+ break;
+ default:
+ maneuver=GENIVI_NAVIGATIONCORE_INVALID;
+ }
+ obj->m_guidance->ManeuverChanged(maneuver);
+ } else {
+ dbg(0,"failed to get level item=%p\n",item);
+ }
+}
+
+static DBus::Variant
+variant_double(double d)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << d;
+ return variant;
+}
+
+
+void
+GuidanceObj_TrackingCallback(GuidanceObj *obj)
+{
+ dbg(1,"enter\n");
+ struct attr attr;
+ route_set_position_from_tracking(obj->m_route.u.route, get_tracking(), projection_mg);
+ if (!obj->m_paused)
+ obj->m_guidance->PositionOnRouteChanged(0); //to do return the current offset on the route in meters from the beginning of the route
+
+ int destreached=route_destination_reached(obj->m_route.u.route);
+ if (destreached)
+ obj->m_guidance->WaypointReached(destreached == 2);
+ if (destreached == 2)
+ route_set_destination(obj->m_route.u.route, NULL, 0);
+}
+
+struct item *
+GuidanceObj::get_item(struct map_rect *mr)
+{
+ struct item *ret;
+ while (mr && (ret = map_rect_get_item(mr))) {
+ if (ret->type != type_nav_position && ret->type != type_nav_none)
+ break;
+ }
+ return ret;
+}
+
+struct map_rect *
+GuidanceObj::get_map_rect(void)
+{
+ struct map *map=navigation_get_map(get_navigation());
+ if (!map)
+ return NULL;
+ return map_rect_new(map, NULL);
+}
+
+GuidanceObj::GuidanceObj(Guidance *guidance, uint32_t SessionHandle, uint32_t RouteHandle)
+{
+ m_guidance=guidance;
+ m_session=SessionHandle;
+ m_route_handle=RouteHandle;
+ m_guidance_callback=callback_new_1(reinterpret_cast<void (*)(void)>(GuidanceObj_Callback), this);
+ m_paused=false;
+ m_tracking_callback.type=attr_callback;
+ m_tracking_callback.u.callback=NULL;
+ struct attr id={attr_id};
+ id.u.num=RouteHandle;
+ struct attr *in[]={&id, NULL};
+ struct attr **ret=NULL;
+ struct attr callback_list;
+ struct navit *navit=get_navit();
+ if (navit_get_attr(navit, attr_callback_list, &callback_list, NULL)) {
+ callback_list_call_attr_4(callback_list.u.callback_list, attr_command, "navit_genivi_get_route", in, &ret, NULL);
+ if (ret && ret[0] && ret[1] && ret[0]->type == attr_route && ret[1]->type == attr_vehicleprofile) {
+ struct tracking *tracking=get_tracking();
+ m_route=*ret[0];
+ m_vehicleprofile=*ret[1];
+ m_tracking_callback.u.callback=callback_new_attr_1(reinterpret_cast<void (*)(void)>(GuidanceObj_TrackingCallback), attr_position_coord_geo, this);
+ tracking_add_attr(tracking, &m_tracking_callback);
+ struct vehicle *demo=get_vehicle("demo:");
+ if (demo) {
+ vehicle_set_attr(demo, &m_route);
+ vehicle_set_attr(demo, &vehicle_speed);
+ }
+ navigation_set_route(get_navigation(), m_route.u.route);
+ tracking_set_route(get_tracking(), m_route.u.route);
+ navigation_register_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
+ GuidanceObj_Callback(this);
+ }
+ g_free(ret);
+ }
+ m_guidance->GuidanceStatusChanged(GENIVI_NAVIGATIONCORE_ACTIVE, RouteHandle);
+}
+
+GuidanceObj::~GuidanceObj()
+{
+ if (m_tracking_callback.u.callback) {
+ struct tracking *tracking=get_tracking();
+ if (tracking)
+ tracking_remove_attr(tracking, &m_tracking_callback);
+ callback_destroy(m_tracking_callback.u.callback);
+ }
+ if (m_guidance_callback) {
+ navigation_unregister_callback(get_navigation(), attr_navigation_speech, m_guidance_callback);
+ callback_destroy(m_guidance_callback);
+ }
+ m_guidance->GuidanceStatusChanged(GENIVI_NAVIGATIONCORE_INACTIVE, 0);
+}
+
+static class Guidance *server;
+
+void
+plugin_init(void)
+{
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ // FIXME: What dbus address to use?
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.Guidance");
+ server=new Guidance(*conn);
+}
diff --git a/src/navigation/navigation-core/locationinput-plugin/.gitignore b/src/navigation/navigation-core/locationinput-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/locationinput-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/locationinput-plugin/CMakeLists.txt b/src/navigation/navigation-core/locationinput-plugin/CMakeLists.txt
new file mode 100644
index 0000000..b65cb13
--- /dev/null
+++ b/src/navigation/navigation-core/locationinput-plugin/CMakeLists.txt
@@ -0,0 +1,45 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(../../..)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_locationinput_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_locationinput_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-locationinput.xml --adaptor=genivi_navigationcore_locationinput_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-locationinput.xml
+ )
+module_add_library(genivi_navigationcore_locationinput genivi_navigationcore_locationinput.cxx genivi_navigationcore_locationinput_adaptor.h)
diff --git a/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx b/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx
new file mode 100644
index 0000000..5176ccb
--- /dev/null
+++ b/src/navigation/navigation-core/locationinput-plugin/genivi_navigationcore_locationinput.cxx
@@ -0,0 +1,507 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_locationinput.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_locationinput_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/search.h"
+#include "navit/callback.h"
+#include "navit/event.h"
+#include "navit/coord.h"
+#include "navit/transform.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+class LocationInput;
+
+class LocationInputObj
+{
+ public:
+ struct search_list *m_sl;
+ uint8_t m_handle;
+ uint8_t m_session;
+ uint32_t m_criterion;
+ uint32_t m_windowsize;
+ struct attr m_search;
+ LocationInput *m_locationinput;
+ struct callback *m_callback;
+ struct event_idle *m_event;
+ bool m_spell;
+ bool m_spell_backspace;
+ std::vector< std::vector< std::map< uint16_t, ::DBus::Variant > > > m_data;
+
+ void SetSelectionCriterion(uint32_t SessionHandle, uint32_t SelectionCriterion);
+ void Search(uint32_t SessionHandle, const std::string& InputString, uint32_t MaxWindowSize);
+ void SelectEntry(const uint32_t& SessionHandle, const uint32_t& Index);
+ struct navit *get_navit(void);
+ struct mapset *get_mapset(struct navit *navit);
+ void IdleStop(void);
+ void Idle(void);
+ void Spell(uint32_t SessionHandle, const std::string& InputCharacter, uint32_t MaxWindowSize);
+ void GetEntry(uint16_t index, std::map< uint16_t, ::DBus::Variant >& entry);
+ void ValidateAddress(uint32_t sessionHandle, const std::map< uint16_t, ::DBus::Variant >& inputAddress);
+ LocationInputObj(LocationInput *locationinput, uint32_t handle);
+ ~LocationInputObj();
+};
+
+static std::map<uint32_t, LocationInputObj *> handles;
+
+
+
+class LocationInput
+: public org::genivi::navigationcore::LocationInput_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ LocationInput(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ }
+
+ uint32_t CreateLocationInput(const uint32_t& SessionHandle)
+ {
+ uint32_t LocationInputHandle;
+ dbg(0,"enter\n");
+ LocationInputHandle=1;
+ while (handles[LocationInputHandle]) {
+ LocationInputHandle++;
+ if (LocationInputHandle == 256)
+ throw DBus::ErrorLimitsExceeded("Out of location handles");
+ }
+ handles[LocationInputHandle]=new LocationInputObj(this, LocationInputHandle);
+ return LocationInputHandle;
+ }
+
+ void DeleteLocationInput(const uint32_t& SessionHandle, const uint32_t& LocationInputHandle)
+ {
+ dbg(0,"enter\n");
+ LocationInputObj *obj=handles[LocationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ delete(obj);
+ handles[LocationInputHandle]=NULL;
+ }
+
+ std::vector< uint16_t > GetSupportedAddressAttributes()
+ {
+ std::vector< uint16_t > AddressAttributes;
+ AddressAttributes.resize(5);
+ AddressAttributes[0]=GENIVI_NAVIGATIONCORE_COUNTRY;
+ AddressAttributes[1]=GENIVI_NAVIGATIONCORE_CITY;
+ AddressAttributes[2]=GENIVI_NAVIGATIONCORE_STREET;
+ AddressAttributes[3]=GENIVI_NAVIGATIONCORE_HOUSENUMBER;
+ AddressAttributes[4]=GENIVI_NAVIGATIONCORE_FULL_ADDRESS;
+ return AddressAttributes;
+ }
+
+ void SetAddress(const uint32_t& SessionHandle, const uint32_t& LocationInputHandle, const std::map< uint16_t, ::DBus::Variant >& Address)
+ {
+ dbg(0,"enter\n");
+ LocationInputObj *obj=handles[LocationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void SetSelectionCriterion(const uint32_t& SessionHandle, const uint32_t& LocationInputHandle, const uint16_t& SelectionCriterion)
+ {
+ dbg(0,"enter\n");
+ LocationInputObj *obj=handles[LocationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->SetSelectionCriterion(SessionHandle, SelectionCriterion);
+ }
+
+ void Search(const uint32_t& SessionHandle, const uint32_t& LocationInputHandle, const std::string& InputString, const uint16_t& MaxWindowSize)
+ {
+ dbg(0,"enter\n");
+ LocationInputObj *obj=handles[LocationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->Search(SessionHandle, InputString, MaxWindowSize);
+ }
+
+ void SelectEntry(const uint32_t& SessionHandle, const uint32_t& LocationInputHandle, const uint16_t& Index)
+ {
+ dbg(0,"enter\n");
+ LocationInputObj *obj=handles[LocationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->SelectEntry(SessionHandle, Index);
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > GetVersion()
+ {
+ DBus::Struct<uint16_t, uint16_t, uint16_t, std::string> Version;
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("07-06-2013");
+ return Version;
+ }
+
+ void Spell(const uint32_t& sessionHandle, const uint32_t& locationInputHandle, const std::string& inputCharacter, const uint16_t& maxWindowSize)
+ {
+ LocationInputObj *obj=handles[locationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->Spell(sessionHandle, inputCharacter, maxWindowSize);
+ }
+
+ void RequestListUpdate(const uint32_t& sessionHandle, const uint32_t& locationInputHandle, const uint16_t& offset, const uint16_t& maxWindowSize)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint16_t, ::DBus::Variant > GetEntry(const uint32_t& locationInputHandle, const uint16_t& index)
+ {
+ std::map< uint16_t, ::DBus::Variant > ret;
+ LocationInputObj *obj=handles[locationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->GetEntry(index, ret);
+ return ret;
+ }
+
+ void ValidateAddress(const uint32_t& sessionHandle, const uint32_t& locationInputHandle, const std::map< uint16_t, ::DBus::Variant >& inputAddress)
+ {
+ LocationInputObj *obj=handles[locationInputHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("location handle invalid");
+ obj->ValidateAddress(sessionHandle, inputAddress);
+ }
+
+ void ReverseGeocode(const uint32_t& sessionHandle, const uint32_t& locationInputHandle, const ::DBus::Struct< double, double >& coordinate)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+};
+
+struct navit *
+LocationInputObj::get_navit(void)
+{
+ struct attr navit;
+ if (!config_get_attr(config, attr_navit, &navit, NULL))
+ return NULL;
+ return navit.u.navit;
+}
+struct mapset *
+LocationInputObj::get_mapset(struct navit *navit)
+{
+ struct attr mapset;
+ if (!navit_get_attr(navit, attr_mapset, &mapset, NULL))
+ return NULL;
+ return mapset.u.mapset;
+}
+
+void
+LocationInputObj::SetSelectionCriterion(uint32_t SessionHandle, uint32_t SelectionCriterion)
+{
+ m_criterion=SelectionCriterion;
+ switch(m_criterion) {
+ case GENIVI_NAVIGATIONCORE_COUNTRY:
+ m_search.type=attr_country_name;
+ break;
+ case GENIVI_NAVIGATIONCORE_CITY:
+ m_search.type=attr_town_name;
+ break;
+ case GENIVI_NAVIGATIONCORE_STREET:
+ m_search.type=attr_street_name;
+ break;
+ case GENIVI_NAVIGATIONCORE_HOUSENUMBER:
+ m_search.type=attr_house_number;
+ break;
+ case GENIVI_NAVIGATIONCORE_FULL_ADDRESS:
+ m_search.type=attr_address;
+ break;
+ default:
+ throw DBus::ErrorInvalidArgs("Invalid selection criterion");
+ }
+ g_free(m_search.u.str);
+ m_search.u.str=NULL;
+ m_locationinput->CurrentSelectionCriterion(m_handle, SelectionCriterion);
+}
+
+void
+LocationInputObj::Search(uint32_t SessionHandle, const std::string& InputString, uint32_t MaxWindowSize)
+{
+ IdleStop();
+ g_free(m_search.u.str);
+
+ m_session=SessionHandle;
+ m_search.u.str=g_strdup(InputString.c_str());
+ m_windowsize=MaxWindowSize;
+ m_spell=false;
+
+ search_list_search(m_sl, &m_search, 0);
+ m_event=event_add_idle(0, m_callback);
+}
+
+void
+LocationInputObj::Spell(uint32_t SessionHandle, const std::string& InputCharacter, uint32_t MaxWindowSize)
+{
+ IdleStop();
+
+ m_spell=true;
+ m_spell_backspace=false;
+ m_session=SessionHandle;
+ char *newstr;
+ const char *input=InputCharacter.c_str();
+ int len=strlen(input)+1;
+ dbg(0,"input '%s' (%d)\n",input,strlen(input));
+ if (m_search.u.str && strlen(m_search.u.str)) {
+ const char *i=input;
+ char c;
+ newstr=g_strdup(m_search.u.str);
+ dbg(1,"string %s\n",newstr);
+ while ((c=*i++)) {
+ dbg(1,"char '%c'\n",c);
+ if (c == '\b') {
+ m_spell_backspace=true;
+ *g_utf8_prev_char(newstr+strlen(newstr))='\0';
+ } else {
+ int len=strlen(newstr);
+ newstr=g_renew(char,newstr,len+2);
+ newstr[len]=c;
+ newstr[len+1]='\0';
+ }
+ dbg(1,"string now %s\n",newstr);
+ }
+ } else {
+ if (strcmp(input,"\b"))
+ newstr=g_strdup(input);
+ else
+ newstr=NULL;
+ }
+ g_free(m_search.u.str);
+ dbg(1,"search string '%s' (%d)\n",newstr,strlen(newstr));
+ m_search.u.str=newstr;
+ m_windowsize=MaxWindowSize;
+
+ search_list_search(m_sl, &m_search, 1);
+ dbg(1,"backspace %d\n",m_spell_backspace);
+ m_event=event_add_idle(0, m_callback);
+
+}
+
+void
+LocationInputObj::SelectEntry(const uint32_t& SessionHandle, const uint32_t& Index)
+{
+ std::map< uint16_t, ::DBus::Variant > *res=NULL;
+ std::vector< uint16_t> next;
+ int window=0;
+ bool guidable=false;
+ for (int i = 0 ; i < m_data.size() ; i++) {
+ if (Index >= window && Index < window+m_data[i].size()) {
+ res=&m_data[i][Index-window];
+ break;
+ }
+ window+=m_data[i].size();
+ }
+ if (!res)
+ throw DBus::ErrorInvalidArgs("Invalid index");
+ search_list_select(m_sl, m_search.type, Index+1, 1);
+ switch(m_criterion) {
+ case GENIVI_NAVIGATIONCORE_COUNTRY:
+ next.push_back(GENIVI_NAVIGATIONCORE_COUNTRY);
+ next.push_back(GENIVI_NAVIGATIONCORE_CITY);
+ break;
+ case GENIVI_NAVIGATIONCORE_CITY:
+ next.push_back(GENIVI_NAVIGATIONCORE_COUNTRY);
+ next.push_back(GENIVI_NAVIGATIONCORE_CITY);
+ next.push_back(GENIVI_NAVIGATIONCORE_STREET);
+ break;
+ case GENIVI_NAVIGATIONCORE_STREET:
+ case GENIVI_NAVIGATIONCORE_HOUSENUMBER:
+ next.push_back(GENIVI_NAVIGATIONCORE_COUNTRY);
+ next.push_back(GENIVI_NAVIGATIONCORE_CITY);
+ next.push_back(GENIVI_NAVIGATIONCORE_STREET);
+ next.push_back(GENIVI_NAVIGATIONCORE_HOUSENUMBER);
+ break;
+ }
+ if (res->find(GENIVI_NAVIGATIONCORE_LATITUDE) != res->end())
+ guidable=true;
+ m_locationinput->ContentUpdated(m_handle, guidable, next, *res);
+}
+
+void
+LocationInputObj::IdleStop(void)
+{
+ if (m_event) {
+ event_remove_idle(m_event);
+ m_event=NULL;
+ }
+}
+
+static DBus::Variant
+variant_string(std::string s)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << s;
+ return variant;
+}
+
+static DBus::Variant
+variant_double(double d)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << d;
+ return variant;
+}
+
+void
+LocationInputObj::Idle(void)
+{
+ dbg(1,"enter\n");
+ m_locationinput->SearchStatus(m_handle, GENIVI_NAVIGATIONCORE_SEARCHING);
+ struct search_list_result *res;
+ int chunk=0;
+ uint16_t count=0,offset=0;
+ m_data.resize(0);
+ m_data.resize(1);
+ while ((res=search_list_get_result(m_sl))) {
+ std::map< uint16_t, ::DBus::Variant> entry;
+ if (res->country && res->country->name) {
+ dbg(0,"country %s\n",res->country->name);
+ entry[GENIVI_NAVIGATIONCORE_COUNTRY]=variant_string(std::string(res->country->name));
+ }
+ if (res->town && res->town->common.town_name) {
+ dbg(0,"town %s\n",res->town->common.town_name);
+ entry[GENIVI_NAVIGATIONCORE_CITY]=variant_string(std::string(res->town->common.town_name));
+ }
+ if (res->street && res->street->name) {
+ dbg(0,"street %s\n",res->street->name);
+ entry[GENIVI_NAVIGATIONCORE_STREET]=variant_string(std::string(res->street->name));
+ }
+ if (res->house_number && res->house_number->house_number) {
+ dbg(0,"house number %s\n",res->house_number->house_number);
+ entry[GENIVI_NAVIGATIONCORE_HOUSENUMBER]=variant_string(std::string(res->house_number->house_number));
+ }
+ if (res->c) {
+ struct coord_geo g;
+ struct coord c;
+ c.x=res->c->x;
+ c.y=res->c->y;
+ transform_to_geo(res->c->pro, &c, &g);
+ entry[GENIVI_NAVIGATIONCORE_LATITUDE]=variant_double(g.lat);
+ entry[GENIVI_NAVIGATIONCORE_LONGITUDE]=variant_double(g.lng);
+ }
+ m_data[chunk].push_back(entry);
+ if (m_data[chunk].size() >= m_windowsize) {
+ chunk++;
+ m_data.resize(chunk+1);
+ }
+ count++;
+ }
+ if (m_spell) {
+ char *unique;
+ if (m_spell_backspace)
+ unique=g_strdup(m_search.u.str);
+ else
+ unique=search_list_get_unique(m_sl, NULL);
+ m_spell_backspace=false;
+ if (unique) {
+ char *next=search_list_get_unique(m_sl, unique);
+ if (next) {
+ m_locationinput->SpellResult(m_handle, unique, next, false);
+ g_free(next);
+ }
+ g_free(unique);
+ } else
+ m_locationinput->SpellResult(m_handle, "", "\b", false);
+
+ }
+ for (int i = 0 ; i <= chunk ; i++) {
+ uint16_t window=m_data[i].size();
+ if (window != 0 || i == 0)
+ m_locationinput->SearchResultList(m_handle, count, offset, window, m_data[i]);
+ offset+=window;
+ }
+ m_locationinput->SearchStatus(m_handle, GENIVI_NAVIGATIONCORE_FINISHED);
+ IdleStop();
+
+}
+
+static void
+LocationInputObj_Idle(LocationInputObj *obj)
+{
+ obj->Idle();
+}
+
+void
+LocationInputObj::GetEntry(uint16_t index, std::map< uint16_t, ::DBus::Variant >& entry)
+{
+}
+
+void
+LocationInputObj::ValidateAddress(uint32_t sessionHandle, const std::map< uint16_t, ::DBus::Variant >& inputAddress)
+{
+}
+
+LocationInputObj::LocationInputObj(LocationInput *locationinput, uint32_t handle)
+{
+ m_locationinput=locationinput;
+ m_handle=handle;
+ m_sl=search_list_new(get_mapset(get_navit()));
+ m_search.type=attr_none;
+ m_search.u.str=NULL;
+ m_event=NULL;
+ m_callback=callback_new_1(reinterpret_cast<void (*)(void)>(LocationInputObj_Idle), this);
+}
+
+LocationInputObj::~LocationInputObj()
+{
+ IdleStop();
+ callback_destroy(m_callback);
+ g_free(m_search.u.str);
+ search_list_destroy(m_sl);
+}
+
+static class LocationInput *server;
+
+void
+plugin_init(void)
+{
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.LocationInput");
+ server=new LocationInput(*conn);
+}
diff --git a/src/navigation/navigation-core/mapmatchedposition-plugin/.gitignore b/src/navigation/navigation-core/mapmatchedposition-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/mapmatchedposition-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/mapmatchedposition-plugin/CMakeLists.txt b/src/navigation/navigation-core/mapmatchedposition-plugin/CMakeLists.txt
new file mode 100644
index 0000000..af7d338
--- /dev/null
+++ b/src/navigation/navigation-core/mapmatchedposition-plugin/CMakeLists.txt
@@ -0,0 +1,44 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_mapmatchedposition_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_mapmatchedposition_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-mapmatchedposition.xml --adaptor=genivi_navigationcore_mapmatchedposition_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-mapmatchedposition.xml
+ )
+module_add_library(genivi_navigationcore_mapmatchedposition genivi_navigationcore_mapmatchedposition.cxx genivi_navigationcore_mapmatchedposition_adaptor.h genivi_navigationcore_mapmatchedposition_adaptor.h)
diff --git a/src/navigation/navigation-core/mapmatchedposition-plugin/genivi_navigationcore_mapmatchedposition.cxx b/src/navigation/navigation-core/mapmatchedposition-plugin/genivi_navigationcore_mapmatchedposition.cxx
new file mode 100644
index 0000000..37032c8
--- /dev/null
+++ b/src/navigation/navigation-core/mapmatchedposition-plugin/genivi_navigationcore_mapmatchedposition.cxx
@@ -0,0 +1,375 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_mapmatchedposition.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_mapmatchedposition_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/callback.h"
+#include "navit/navigation.h"
+#include "navit/map.h"
+#include "navit/transform.h"
+#include "navit/track.h"
+#include "navit/vehicle.h"
+#include "navit/route.h"
+#include "navit/config_.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+static class MapMatchedPosition *server;
+static struct attr config_cb,navit_cb,tracking_cb;
+static struct tracking *tracking;
+static struct item last_item;
+static char *street_name;
+static struct attr vehicle_speed={attr_speed,(char *)40};
+static uint16_t simulationMode=GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_NO_SIMULATION;
+
+static struct navit *
+get_navit(void)
+{
+ struct attr navit;
+ if (!config_get_attr(config, attr_navit, &navit, NULL))
+ return NULL;
+ return navit.u.navit;
+}
+
+static struct vehicle *
+get_vehicle(const char *source_prefix)
+{
+ struct navit *navit=get_navit();
+ struct attr vehicle;
+ struct vehicle *ret=NULL;
+ if (!source_prefix) {
+ if (navit_get_attr(navit, attr_vehicle, &vehicle, NULL))
+ ret=vehicle.u.vehicle;
+ } else {
+ struct attr_iter *iter=navit_attr_iter_new();
+ while (navit_get_attr(navit, attr_vehicle, &vehicle, iter)) {
+ struct attr source;
+ if (vehicle.u.vehicle && vehicle_get_attr(vehicle.u.vehicle, attr_source, &source, NULL) &&
+ !strncmp(source.u.str, source_prefix, strlen(source_prefix))) {
+ ret=vehicle.u.vehicle;
+ break;
+ }
+ }
+ navit_attr_iter_destroy(iter);
+ }
+ return ret;
+}
+
+void
+demo_update(bool start)
+{
+ struct attr vehicle_null_speed={attr_speed,(char *)0};
+ struct vehicle *vehicle=get_vehicle("demo:");
+ vehicle_set_attr(vehicle, start?&vehicle_speed:&vehicle_null_speed);
+}
+
+static DBus::Variant
+variant_double(double d)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << d;
+ return variant;
+}
+
+static DBus::Variant
+variant_string(std::string s)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << s;
+ return variant;
+}
+
+
+class MapMatchedPosition
+: public org::genivi::navigationcore::MapMatchedPosition_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ MapMatchedPosition(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > Version;
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("23-10-2013");
+ return Version;
+ }
+
+#if 0
+ void
+ GetSupportedPositionInfo(std::vector< int32_t >& PositionInfo, uint32_t& Result)
+ {
+ PositionInfo.push_back(GENIVI_NAVIGATIONCORE_LATITUDE);
+ PositionInfo.push_back(GENIVI_NAVIGATIONCORE_LONGITUDE);
+ PositionInfo.push_back(GENIVI_NAVIGATIONCORE_SPEED);
+ PositionInfo.push_back(GENIVI_NAVIGATIONCORE_HEADING);
+ }
+#endif
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetPosition(const std::vector< uint16_t >& valuesToReturn)
+ {
+ dbg(1,"enter\n");
+ std::map< uint16_t, ::DBus::Variant >map;
+ struct attr attr;
+ for (int i = 0 ; i < valuesToReturn.size() ; i++) {
+ switch (valuesToReturn[i]) {
+ case GENIVI_NAVIGATIONCORE_LATITUDE:
+ if (tracking_get_attr(tracking, attr_position_coord_geo, &attr, NULL))
+ map[GENIVI_NAVIGATIONCORE_LATITUDE]=variant_double(attr.u.coord_geo->lat);
+ break;
+ case GENIVI_NAVIGATIONCORE_LONGITUDE:
+ if (tracking_get_attr(tracking, attr_position_coord_geo, &attr, NULL))
+ map[GENIVI_NAVIGATIONCORE_LONGITUDE]=variant_double(attr.u.coord_geo->lng);
+ break;
+ case GENIVI_NAVIGATIONCORE_SPEED:
+ if (tracking_get_attr(tracking, attr_position_speed, &attr, NULL))
+ map[GENIVI_NAVIGATIONCORE_SPEED]=variant_double(*attr.u.numd);
+ break;
+ case GENIVI_NAVIGATIONCORE_HEADING:
+ if (tracking_get_attr(tracking, attr_position_direction, &attr, NULL))
+ map[GENIVI_NAVIGATIONCORE_HEADING]=variant_double(*attr.u.numd);
+ break;
+ }
+ }
+ return map;
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetAddress(const std::vector< uint16_t >& valuesToReturn)
+ {
+ std::map< uint16_t, ::DBus::Variant >ret;
+ std::vector< uint16_t >::const_iterator it;
+ for (it = valuesToReturn.begin(); it < valuesToReturn.end(); it++) {
+ if (*it == GENIVI_NAVIGATIONCORE_STREET && street_name) {
+ ret[*it]=variant_string(street_name);
+ }
+ }
+ return ret;
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetPositionOnSegment(const std::vector< uint16_t >& valuesToReturn)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetStatus(const std::vector< uint16_t >& valuesToReturn)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ uint16_t
+ GetSimulationStatus()
+ {
+ return simulationMode;
+ }
+
+ void
+ RemoveSimulationSpeedListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ AddSimulationStatusListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ AddSimulationSpeedListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetPosition(const uint32_t& sessionHandle, const std::map< uint16_t, ::DBus::Variant >& position)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ StartSimulation(const uint32_t& sessionHandle)
+ {
+ if (simulationMode == GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_PAUSED || simulationMode == GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_FIXED_POSITION ) {
+ simulationMode=GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_RUNNING;
+ SimulationStatusChanged(simulationMode);
+ demo_update(true);
+ }
+ }
+
+ void
+ PauseSimulation(const uint32_t& sessionHandle)
+ {
+ if (simulationMode == GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_RUNNING) {
+ simulationMode=GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_PAUSED;
+ SimulationStatusChanged(simulationMode);
+ demo_update(false);
+ }
+ }
+
+
+ void
+ SetSimulationMode(const uint32_t& SessionHandle, const bool& Activate)
+ {
+ dbg(0,"enter Activate=%d\n",Activate);
+ uint16_t newSimulationMode;
+ struct attr vehicle;
+ vehicle.type=attr_vehicle;
+ vehicle.u.vehicle=get_vehicle(Activate?"demo:":"enhancedposition:");
+ if (vehicle.u.vehicle) {
+ newSimulationMode = Activate ? GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_FIXED_POSITION : GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_NO_SIMULATION;
+ if (newSimulationMode != simulationMode) {
+ simulationMode=newSimulationMode;
+ SimulationStatusChanged(simulationMode);
+ }
+ demo_update(false);
+ struct navit *navit=get_navit();
+ navit_set_attr(navit, &vehicle);
+ } else {
+ dbg(0,"Failed to get vehicle\n");
+ }
+ }
+
+ void
+ SetSimulationSpeed(const uint32_t& sessionHandle, const uint8_t& speedFactor)
+ {
+ int speed=speedFactor*40/4;
+ if (vehicle_speed.u.num != speed) {
+ vehicle_speed.u.num=speed;
+ SimulationSpeedChanged(speedFactor);
+ if (simulationMode == GENIVI_NAVIGATIONCORE_SIMULATION_STATUS_RUNNING) {
+ demo_update(true);
+ }
+ }
+ }
+
+ uint8_t
+ GetSimulationSpeed()
+ {
+ return vehicle_speed.u.num*4/40;
+ }
+
+ void
+ RemoveSimulationStatusListener()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+};
+
+static void
+tracking_attr_position_coord_geo(void)
+{
+ struct attr position_coord_geo, current_item;
+ dbg(1,"enter\n");
+ if (tracking_get_attr(tracking, attr_position_coord_geo, &position_coord_geo, NULL)) {
+ std::vector< uint16_t >changes;
+ changes.push_back(GENIVI_NAVIGATIONCORE_LATITUDE);
+ changes.push_back(GENIVI_NAVIGATIONCORE_LONGITUDE);
+ changes.push_back(GENIVI_NAVIGATIONCORE_SPEED);
+ changes.push_back(GENIVI_NAVIGATIONCORE_HEADING);
+ server->PositionUpdate(changes);
+ }
+ if (tracking_get_attr(tracking, attr_current_item, &current_item, NULL) && current_item.u.item) {
+ if (!item_is_equal(last_item, *current_item.u.item)) {
+ last_item=*current_item.u.item;
+ char *new_street_name=NULL;
+ struct map_rect *mr=map_rect_new(last_item.map, NULL);
+ struct item *item;
+ if (mr && (item = map_rect_get_item_byid(mr, last_item.id_hi, last_item.id_lo))) {
+ struct attr label;
+ if (item_attr_get(item, attr_label, &label))
+ new_street_name=label.u.str;
+ }
+ if (g_strcmp0(new_street_name, street_name)) {
+ g_free(street_name);
+ street_name=g_strdup(new_street_name);
+ std::vector< uint16_t >changes;
+ changes.push_back(GENIVI_NAVIGATIONCORE_STREET);
+ server->AddressUpdate(changes);
+ }
+ if (mr)
+ map_rect_destroy(mr);
+ }
+ }
+}
+
+static void
+navit_attr_navit(struct navit *navit)
+{
+ struct attr tracking_attr;
+ if (navit_get_attr(navit, attr_trackingo, &tracking_attr, NULL)) {
+ tracking=tracking_attr.u.tracking;
+ tracking_cb.type=attr_callback;
+ tracking_cb.u.callback=callback_new_attr_0(callback_cast(tracking_attr_position_coord_geo), attr_position_coord_geo);
+ tracking_add_attr(tracking, &tracking_cb);
+ }
+}
+
+static void
+config_attr_navit(struct navit *navit, int add)
+{
+ if (!tracking && !navit_cb.u.callback && add) {
+ navit_cb.type=attr_callback;
+ navit_cb.u.callback=callback_new_attr_0(callback_cast(navit_attr_navit), attr_navit);
+ navit_add_attr(navit, &navit_cb);
+ }
+}
+
+
+void
+plugin_init(void)
+{
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.MapMatchedPosition");
+ server=new MapMatchedPosition(*conn);
+ config_cb.type=attr_callback;
+ config_cb.u.callback=callback_new_attr_0(callback_cast(config_attr_navit), attr_navit);
+ config_add_attr(config, &config_cb);
+}
diff --git a/src/navigation/navigation-core/navit_genivi_navigationcore.xsl b/src/navigation/navigation-core/navit_genivi_navigationcore.xsl
new file mode 100644
index 0000000..2c35a04
--- /dev/null
+++ b/src/navigation/navigation-core/navit_genivi_navigationcore.xsl
@@ -0,0 +1,63 @@
+<?xml version="1.0"?>
+<!-- ************************************************************************
+* Component Name: Navit POC
+* Author: Martin Schaller <martin.schaller@it-schaller.de>
+*
+* Copyright (C) 2012, GENIVI Alliance, Inc.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License version 2 as
+* published by the Free Software Foundation.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*
+************************************************************************ -->
+<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xi="http://www.w3.org/2001/XInclude">
+ <xsl:template match="/config/plugins/plugin[1]" priority="1" >
+ <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-configuration/.libs/libgenivi_navigationcore_configuration.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-locationinput/.libs/libgenivi_navigationcore_locationinput.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-routing/.libs/libgenivi_navigationcore_routing.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-session/.libs/libgenivi_navigationcore_session.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-guidance/.libs/libgenivi_navigationcore_guidance.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-mapmatchedposition/.libs/libgenivi_navigationcore_mapmatchedposition.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../navigationcore-enhancedposition/.libs/libgenivi_positioning_enhancedposition.so" ondemand="no"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <plugin path="../../poiservice/.libs/libgenivi_poiservice_cam_navit.so" ondemand="no"/>
+ </xsl:template>
+ <xsl:template match="/config/plugins/plugin">
+ <xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit">
+ <xsl:copy><xsl:attribute name="flags">3</xsl:attribute><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/graphics">
+ <xsl:copy><xsl:attribute name="enabled">no</xsl:attribute><xsl:apply-templates select="@*|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/gui">
+ <xsl:copy><xsl:attribute name="enabled">no</xsl:attribute><xsl:apply-templates select="@*[not(name()='enabled')]|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/vehicle[@name='Local GPS']">
+ <xsl:copy><xsl:attribute name="enabled">no</xsl:attribute><xsl:apply-templates select="@*[not(name()='enabled')]|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="/config/navit/vehicle[@name='Demo']">
+ <vehicle name="EnhancedPosition" profilename="car" active="yes" source="enhancedposition://"/>
+ <xsl:text>&#x0A; </xsl:text>
+ <xsl:copy><xsl:attribute name="active">no</xsl:attribute><xsl:apply-templates select="@*[not(name()='enabled' or name()='active')]|node()"/></xsl:copy>
+ </xsl:template>
+ <xsl:template match="@*|node()"><xsl:copy><xsl:apply-templates select="@*|node()"/></xsl:copy></xsl:template>
+</xsl:transform>
diff --git a/src/navigation/navigation-core/routing-plugin/.gitignore b/src/navigation/navigation-core/routing-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/routing-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/routing-plugin/CMakeLists.txt b/src/navigation/navigation-core/routing-plugin/CMakeLists.txt
new file mode 100644
index 0000000..980ba02
--- /dev/null
+++ b/src/navigation/navigation-core/routing-plugin/CMakeLists.txt
@@ -0,0 +1,46 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(../../..)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1 -g)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_routing_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_routing_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-routing.xml --adaptor=genivi_navigationcore_routing_adaptor.h &&
+ sed -i -e "'s/>, >/> >/g'" -e 's/>::DBus::Struct</>,::DBus::Struct</g' genivi_navigationcore_routing_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-routing.xml
+ )
+module_add_library(genivi_navigationcore_routing genivi_navigationcore_routing.cxx genivi_navigationcore_routing_adaptor.h)
diff --git a/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx b/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx
new file mode 100644
index 0000000..217a9cc
--- /dev/null
+++ b/src/navigation/navigation-core/routing-plugin/genivi_navigationcore_routing.cxx
@@ -0,0 +1,924 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_routing.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_routing_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/coord.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/route.h"
+#include "navit/transform.h"
+#include "navit/command.h"
+#include "navit/callback.h"
+#include "navit/vehicle.h"
+#include "navit/vehicleprofile.h"
+#include "navit/roadprofile.h"
+#include "navit/map.h"
+#include "navit/event.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+struct vehicleprofile_settings {
+ int flags_forward_mask,flags_reverse_mask;
+ int ferry_weight;
+ int highway_city_weight;
+ int highway_land_weight;
+};
+
+class Routing;
+
+class RoutingObj
+{
+ public:
+ struct search_list *m_sl;
+ uint32_t m_handle;
+ uint32_t m_session;
+ uint32_t m_costmodel;
+ Routing *m_routing;
+ bool m_startfromcurrentposition;
+ int m_route_status;
+ int m_vehicleprofile_idx;
+ struct vehicleprofile_settings m_vehicleprofile_settings[2];
+ std::vector< ::DBus::Struct< uint16_t, uint16_t > > m_route_preferences_list[2];
+ std::vector< std::map< uint16_t, ::DBus::Variant > > m_waypoints;
+ struct callback *m_callback;
+ struct attr m_route,m_vehicleprofile;
+ struct navit *get_navit(void);
+ struct mapset *get_mapset(struct navit *navit);
+ struct route *get_route(struct navit *navit);
+ struct vehicle *get_vehicle(struct navit *navit);
+ struct tracking *get_tracking(void);
+ void map_to_pcoord(std::map< uint16_t, ::DBus::Variant >map, struct pcoord *pc);
+ void SetCostModel(uint32_t SessionHandle, uint16_t CostModel);
+ void GetCostModel(uint16_t &CostModel);
+ void SetWaypoints(uint32_t SessionHandle, bool StartFromCurrentPosition, std::vector< std::map< uint16_t, ::DBus::Variant > > Waypoints);
+ void GetWaypoints(bool& StartFromCurrentPosition, std::vector< std::map< uint16_t, ::DBus::Variant > >& Waypoints);
+ void CalculateRoute(uint32_t SessionHandle);
+ void GetRouteSegments(int16_t detailLevel , const std::vector< uint16_t >& valuesToReturn, const uint32_t& numberOfSegments, const uint32_t& offset, uint32_t& totalNumberOfSegments, std::vector< std::map< uint16_t, ::DBus::Variant > >& RouteSegments);
+ void GetRouteOverview(uint32_t routeHandle , std::map< uint16_t, ::DBus::Variant >& routeOverview);
+ void GetRouteBoundingBox(::DBus::Struct< ::DBus::Struct< double, double >,::DBus::Struct< double, double > > &boundingBox);
+ void CancelRouteCalculation(uint32_t sessionHandle);
+ bool RoutePreference(uint16_t preferenceSource, uint16_t preferenceMode);
+ void SetRoutePreferences(uint32_t sessionHandle, const std::string& country, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& routePreferencesList);
+ void GetRoutePreferences(const std::string& country, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& roadPreferenceList);
+ RoutingObj(Routing *routing, uint32_t session, uint32_t handle);
+ ~RoutingObj();
+};
+
+static std::map<uint32_t, RoutingObj *> handles;
+
+static bool commands_registered;
+
+static void
+navit_genivi_get_route(struct navit *nav, char *function, struct attr **in, struct attr ***out, int *valid)
+{
+ if (!out || !in || !in[0])
+ return;
+ if (!ATTR_IS_INT(in[0]->type))
+ return;
+ RoutingObj *obj=handles[in[0]->u.num];
+ if (!obj)
+ return;
+ *out=attr_generic_add_attr(*out, &obj->m_route);
+ *out=attr_generic_add_attr(*out, &obj->m_vehicleprofile);
+}
+
+static struct command_table commands[] = {
+ {"navit_genivi_get_route",command_cast(navit_genivi_get_route)},
+};
+
+
+class Routing
+: public org::genivi::navigationcore::Routing_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Routing(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ }
+
+ uint32_t
+ CreateRoute(const uint32_t& SessionHandle)
+ {
+ dbg(0,"enter\n");
+ uint32_t RouteHandle=1;
+ while (handles[RouteHandle]) {
+ RouteHandle++;
+ if (RouteHandle == 256)
+ throw DBus::ErrorLimitsExceeded("Out of route handles");
+ }
+ handles[RouteHandle]=new RoutingObj(this, SessionHandle, RouteHandle);
+ return RouteHandle;
+ }
+
+ void
+ DeleteRoute(const uint32_t& SessionHandle, const uint32_t& RouteHandle)
+ {
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ delete(obj);
+ handles[RouteHandle]=NULL;
+ RouteDeleted(RouteHandle);
+ }
+
+ void
+ SetCostModel(const uint32_t& SessionHandle, const uint32_t& RouteHandle, const uint16_t& CostModel)
+ {
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->SetCostModel(SessionHandle, CostModel);
+ }
+
+ uint16_t
+ GetCostModel(const uint32_t& RouteHandle)
+ {
+ uint16_t CostModel;
+ dbg(0,"enter\n");
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetCostModel(CostModel);
+ return CostModel;
+ }
+
+ std::vector< uint16_t >
+ GetSupportedCostModels()
+ {
+ std::vector< uint16_t > CostModels;
+ CostModels.resize(2);
+ CostModels[0]=GENIVI_NAVIGATIONCORE_FASTEST;
+ CostModels[1]=GENIVI_NAVIGATIONCORE_SHORTEST;
+ return CostModels;
+ }
+
+ void
+ SetWaypoints(const uint32_t& SessionHandle , const uint32_t& RouteHandle , const bool& StartFromCurrentPosition , const std::vector< std::map< uint16_t, ::DBus::Variant > >& Waypoints)
+ {
+ dbg(0,"enter\n");
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->SetWaypoints(SessionHandle, StartFromCurrentPosition, Waypoints);
+ }
+
+ void
+ GetWaypoints(const uint32_t& RouteHandle , bool& StartFromCurrentPosition , std::vector< std::map< uint16_t, ::DBus::Variant > >& Waypoints)
+ {
+ dbg(0,"enter\n");
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetWaypoints(StartFromCurrentPosition, Waypoints);
+ }
+
+ void
+ CalculateRoute(const uint32_t& SessionHandle , const uint32_t& RouteHandle )
+ {
+ dbg(0,"enter\n");
+ RoutingObj *obj=handles[RouteHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->CalculateRoute(SessionHandle);
+ }
+
+ void
+ GetRouteSegments(const uint32_t& routeHandle, const int16_t& detailLevel, const std::vector< uint16_t >& valuesToReturn, const uint32_t& numberOfSegments, const uint32_t& offset, uint32_t& totalNumberOfSegments, std::vector< std::map< uint16_t, ::DBus::Variant > >& routeSegments)
+ {
+ dbg(0,"enter\n");
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetRouteSegments(detailLevel, valuesToReturn, numberOfSegments, offset, totalNumberOfSegments, routeSegments);
+ }
+
+ DBus::Struct<uint16_t, uint16_t, uint16_t, std::string> GetVersion()
+ {
+ DBus::Struct<uint16_t, uint16_t, uint16_t, std::string>Version;
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("07-06-2013");
+ return Version;
+ }
+
+ void
+ SetRoutePreferences(const uint32_t& sessionHandle, const uint32_t& routeHandle, const std::string& country, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& roadPreferenceList, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& conditionPreferenceList)
+ {
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->SetRoutePreferences(sessionHandle, country, roadPreferenceList);
+ }
+
+ void
+ GetRoutePreferences(const uint32_t& routeHandle, const std::string& country, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& roadPreferenceList, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& conditionPreferenceList)
+ {
+ ::DBus::Struct< uint16_t, uint16_t > roadPreference;
+ ::DBus::Struct< uint16_t, uint16_t > conditionPreference;
+
+ conditionPreference._1 = GENIVI_NAVIGATIONCORE_USE;
+ conditionPreference._2 = GENIVI_NAVIGATIONCORE_TRAFFIC_REALTIME;
+
+ conditionPreferenceList.push_back(conditionPreference); //by default
+
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetRoutePreferences(country, roadPreferenceList);
+ if (roadPreferenceList.size() == 0)
+ { //add a default value (bug in qml to be fixed)
+ roadPreference._1 = GENIVI_NAVIGATIONCORE_DEFAULT;
+ roadPreference._2 = GENIVI_NAVIGATIONCORE_DEFAULT;
+ roadPreferenceList.push_back(roadPreference);
+ }
+ }
+
+ void
+ GetSupportedRoutePreferences(std::vector< ::DBus::Struct< uint16_t, uint16_t > >& routePreferencesList, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& conditionPreferenceList)
+ {
+ ::DBus::Struct< uint16_t, uint16_t > routePreference;
+ ::DBus::Struct< uint16_t, uint16_t > conditionPreference;
+ routePreference._1 = GENIVI_NAVIGATIONCORE_AVOID;
+ routePreference._2 = GENIVI_NAVIGATIONCORE_HIGHWAYS_MOTORWAYS;
+ routePreferencesList.push_back(routePreference);
+ routePreference._1 = GENIVI_NAVIGATIONCORE_AVOID;
+ routePreference._2 = GENIVI_NAVIGATIONCORE_TOLL_ROADS;
+ routePreferencesList.push_back(routePreference);
+ routePreference._1 = GENIVI_NAVIGATIONCORE_AVOID;
+ routePreference._2 = GENIVI_NAVIGATIONCORE_FERRY;
+ routePreferencesList.push_back(routePreference);
+ conditionPreference._1 = GENIVI_NAVIGATIONCORE_USE;
+ conditionPreference._2 = GENIVI_NAVIGATIONCORE_TRAFFIC_REALTIME;
+ conditionPreferenceList.push_back(conditionPreference);
+ }
+
+ void SetRouteSchedule(const uint32_t& sessionHandle, const uint32_t& routeHandle, const std::map< uint16_t, uint32_t >& routeSchedule)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint16_t, uint32_t > GetRouteSchedule(const uint32_t& routeHandle, const std::vector< uint16_t >& valuesToReturn)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetTransportationMeans(const uint32_t& sessionHandle, const uint32_t& routeHandle, const std::vector< uint16_t >& transportationMeansList)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetTransportationMeans(const uint32_t& routeHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< uint16_t >
+ GetSupportedTransportationMeans()
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ SetExcludedAreas(const uint32_t& sessionHandle, const uint32_t& routeHandle, const std::vector< std::vector< ::DBus::Struct< double, double > > >& excludedAreas)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< std::vector< ::DBus::Struct< double, double > > >
+ GetExcludedAreas(const uint32_t& routeHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ void
+ CancelRouteCalculation(const uint32_t& sessionHandle, const uint32_t& routeHandle)
+ {
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->CancelRouteCalculation(sessionHandle);
+ RouteCalculationCancelled(routeHandle);
+ }
+
+ std::vector< uint32_t >
+ CalculateRoutes(const uint32_t& sessionHandle, const std::vector< uint32_t >& calculatedRoutesList)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::map< uint16_t, ::DBus::Variant >
+ GetRouteOverview(const uint32_t& routeHandle, const std::vector< uint16_t >& valuesToReturn )
+ {
+ std::map< uint16_t, ::DBus::Variant > ret;
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetRouteOverview(routeHandle, ret);
+ return ret;
+ }
+
+ std::vector< uint32_t >
+ GetAllRoutes()
+ {
+ std::vector< uint32_t >ret;
+ std::map<uint32_t, RoutingObj *>::const_iterator itr;
+
+ for(itr = handles.begin(); itr != handles.end(); itr++)
+ ret.push_back((*itr).first);
+ return ret;
+ }
+
+ ::DBus::Struct< ::DBus::Struct< double, double >,::DBus::Struct< double, double > >
+ GetRouteBoundingBox(const uint32_t& routeHandle)
+ {
+ ::DBus::Struct< ::DBus::Struct< double, double >,::DBus::Struct< double, double > > ret;
+ RoutingObj *obj=handles[routeHandle];
+ if (!obj)
+ throw DBus::ErrorInvalidArgs("Route handle invalid");
+ obj->GetRouteBoundingBox(ret);
+ return ret;
+ }
+
+ void
+ SetBlockedRouteStretches(const uint32_t& sessionHandle, const uint32_t& routeHandle, const std::vector< ::DBus::Struct< uint32_t, uint32_t > >& blockParameters)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+
+ std::vector< ::DBus::Struct< uint32_t, uint32_t > >
+ GetBlockedRouteStretches(const uint32_t& routeHandle)
+ {
+ throw DBus::ErrorNotSupported("Not yet supported");
+ }
+};
+
+struct navit *
+RoutingObj::get_navit(void)
+{
+ struct attr navit,callback_list;
+ if (!config_get_attr(config, attr_navit, &navit, NULL))
+ return NULL;
+
+ if (!commands_registered && navit_get_attr(navit.u.navit, attr_callback_list, &callback_list, NULL)) {
+ command_add_table(callback_list.u.callback_list, commands, sizeof(commands)/sizeof(struct command_table), navit.u.navit);
+ commands_registered=true;
+ }
+
+ return navit.u.navit;
+}
+
+struct mapset *
+RoutingObj::get_mapset(struct navit *navit)
+{
+ struct attr mapset;
+ if (!navit_get_attr(navit, attr_mapset, &mapset, NULL))
+ return NULL;
+ return mapset.u.mapset;
+}
+
+struct route *
+RoutingObj::get_route(struct navit *navit)
+{
+ struct attr route;
+ if (!navit_get_attr(navit, attr_route, &route, NULL))
+ return NULL;
+ return route.u.route;
+}
+
+struct vehicle *
+RoutingObj::get_vehicle(struct navit *navit)
+{
+ struct attr vehicle;
+ if (!navit_get_attr(navit, attr_vehicle, &vehicle, NULL))
+ return NULL;
+ return vehicle.u.vehicle;
+}
+
+struct tracking *
+RoutingObj::get_tracking(void)
+{
+ struct navit *navit=get_navit();
+ struct attr tracking;
+ if (!navit)
+ return NULL;
+ if (!navit_get_attr(navit, attr_trackingo, &tracking, NULL))
+ return NULL;
+ return tracking.u.tracking;
+}
+
+
+void
+RoutingObj::SetCostModel(uint32_t SessionHandle, uint16_t CostModel)
+{
+ const char *vehicleprofile_name;
+ switch (CostModel) {
+ case GENIVI_NAVIGATIONCORE_FASTEST:
+ vehicleprofile_name="car";
+ m_vehicleprofile_idx=0;
+ break;
+ case GENIVI_NAVIGATIONCORE_SHORTEST:
+ vehicleprofile_name="car_shortest";
+ m_vehicleprofile_idx=1;
+ break;
+ default:
+ throw DBus::ErrorInvalidArgs("Invalid cost model");
+ }
+ m_costmodel=CostModel;
+ m_vehicleprofile.u.vehicleprofile=NULL;
+ GList *vehicleprofiles=navit_get_vehicleprofiles(get_navit());
+
+ while (vehicleprofiles) {
+ struct attr name;
+ if (vehicleprofile_get_attr((struct vehicleprofile *)vehicleprofiles->data, attr_name, &name, NULL)) {
+ if ((!strcmp(name.u.str,vehicleprofile_name))) {
+ m_vehicleprofile.u.vehicleprofile=(struct vehicleprofile *)vehicleprofiles->data;
+ break;
+ }
+ }
+ vehicleprofiles=g_list_next(vehicleprofiles);
+ }
+ if (!m_vehicleprofile.u.vehicleprofile)
+ throw DBus::ErrorFailed("internal error:no vehicleprofile found");
+}
+
+void
+RoutingObj::GetCostModel(uint16_t& CostModel)
+{
+ CostModel=m_costmodel;
+}
+
+void
+RoutingObj::SetWaypoints(uint32_t SessionHandle, bool StartFromCurrentPosition, std::vector< std::map< uint16_t, ::DBus::Variant > > Waypoints)
+{
+ if (StartFromCurrentPosition) {
+ if (Waypoints.size() != 1)
+ throw DBus::ErrorFailed("StartFromCurrentPosition is set, but Waypoint size is not 1");
+ } else {
+ if (Waypoints.size() != 2)
+ throw DBus::ErrorFailed("StartFromCurrentPosition is not set, but Waypoint size is not 2");
+ }
+ for (int i=0 ; i < Waypoints.size(); i++) {
+ if (Waypoints[i].find(GENIVI_NAVIGATIONCORE_LATITUDE) == Waypoints[i].end())
+ throw DBus::ErrorInvalidArgs("Waypoint doesn't contain Latitude");
+ if (Waypoints[i].find(GENIVI_NAVIGATIONCORE_LONGITUDE) == Waypoints[i].end())
+ throw DBus::ErrorInvalidArgs("Waypoint doesn't contain Longitude");
+ }
+ m_startfromcurrentposition=StartFromCurrentPosition;
+ m_waypoints=Waypoints;
+
+}
+
+void
+RoutingObj::GetWaypoints(bool& StartFromCurrentPosition, std::vector< std::map< uint16_t, ::DBus::Variant > >& Waypoints)
+{
+ StartFromCurrentPosition=m_startfromcurrentposition;
+ Waypoints=m_waypoints;
+}
+
+void
+RoutingObj::map_to_pcoord(std::map< uint16_t, ::DBus::Variant >map, struct pcoord *pc)
+{
+ struct coord_geo g;
+ struct coord c;
+
+ g.lat=map[GENIVI_NAVIGATIONCORE_LATITUDE];
+ g.lng=map[GENIVI_NAVIGATIONCORE_LONGITUDE];
+ transform_from_geo(projection_mg, &g, &c);
+ pc->pro=projection_mg;
+ pc->x=c.x;
+ pc->y=c.y;
+ dbg(0,"lat %f lon %f is 0x%x,0x%x\n",g.lat,g.lng,pc->x,pc->y);
+
+}
+
+void
+RoutingObj::CalculateRoute(uint32_t SessionHandle)
+{
+ struct pcoord pc;
+
+ if (!m_waypoints.size())
+ throw DBus::ErrorFailed("no waipoints set");
+ route_set_profile(m_route.u.route,m_vehicleprofile.u.vehicleprofile);
+ if (!m_startfromcurrentposition) {
+ route_set_destination(m_route.u.route, NULL, 0);
+ map_to_pcoord(m_waypoints[0], &pc);
+ route_set_position(m_route.u.route, &pc);
+ map_to_pcoord(m_waypoints[1], &pc);
+ } else {
+ struct tracking *tracking=get_tracking();
+ if (tracking)
+ route_set_position_from_tracking(m_route.u.route, tracking, projection_mg);
+ map_to_pcoord(m_waypoints[0], &pc);
+ }
+ m_route_status = route_status_destination_set;
+ route_set_destination(m_route.u.route, &pc, 1);
+}
+
+static DBus::Variant
+variant_double(double d)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << d;
+ return variant;
+}
+
+static DBus::Variant
+variant_uint16(uint16_t i)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << i;
+ return variant;
+}
+
+static DBus::Variant
+variant_string(std::string s)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << s;
+ return variant;
+}
+
+static bool
+vector_contains(const std::vector< uint16_t >& vector, uint16_t val)
+{
+ int i;
+ for (i = 0 ; i < vector.size() ; i++) {
+ if (vector[i] == val)
+ return true;
+ }
+ return false;
+}
+
+static void
+get_map(struct coord *c, struct item *item, int is_end, const std::vector< uint16_t >& valuesToReturn, std::map< uint16_t, ::DBus::Variant > &map)
+{
+ uint16_t lat_key=is_end?GENIVI_NAVIGATIONCORE_END_LATITUDE:GENIVI_NAVIGATIONCORE_START_LATITUDE;
+ uint16_t lon_key=is_end?GENIVI_NAVIGATIONCORE_END_LONGITUDE:GENIVI_NAVIGATIONCORE_START_LONGITUDE;
+ if (vector_contains(valuesToReturn, lat_key) || vector_contains(valuesToReturn, lon_key)) {
+ struct coord_geo g;
+ transform_to_geo(projection_mg, c, &g);
+ if (vector_contains(valuesToReturn, lat_key))
+ map[lat_key]=variant_double(g.lat);
+ if (vector_contains(valuesToReturn, lon_key))
+ map[lon_key]=variant_double(g.lng);
+ }
+ if (item && (vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_DISTANCE) || vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_TIME))) {
+ struct attr length, time;
+ if (item_attr_get(item, attr_length, &length) && vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_DISTANCE)) {
+ map[GENIVI_NAVIGATIONCORE_DISTANCE]=variant_double(length.u.num);
+ }
+ if (item_attr_get(item, attr_time, &time) && vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_TIME)) {
+ map[GENIVI_NAVIGATIONCORE_TIME]=variant_uint16((time.u.num+5)/10);
+ }
+ }
+ if (item && vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_ROAD_NAME)) {
+ struct attr street_item;
+ if (item_attr_get(item, attr_street_item, &street_item)) {
+ struct map_rect *mr=map_rect_new(street_item.u.item->map, NULL);
+ struct item *item2=map_rect_get_item_byid(mr, street_item.u.item->id_hi, street_item.u.item->id_lo);
+ struct attr label;
+ if (item2 && item_attr_get(item2, attr_label, &label))
+ map[GENIVI_NAVIGATIONCORE_ROAD_NAME]=variant_string(label.u.str);
+ map_rect_destroy(mr);
+ }
+ }
+}
+
+
+void
+RoutingObj::GetRouteSegments(int16_t detailLevel , const std::vector< uint16_t >& valuesToReturn, const uint32_t& numberOfSegments, const uint32_t& offset, uint32_t& totalNumberOfSegments, std::vector< std::map< uint16_t, ::DBus::Variant > >& RouteSegments)
+{
+ struct map *m=route_get_map(m_route.u.route);
+ if (!m)
+ throw DBus::ErrorFailed("internal error:failed to get route map");
+ struct map_rect *mr=map_rect_new(m, NULL);
+ if (!mr)
+ throw DBus::ErrorFailed("internal error:failed to create route map rect");
+ struct item *item;
+ struct coord c[128],last;
+ int count,i;
+ int pos;
+ bool intermediate=vector_contains(valuesToReturn, GENIVI_NAVIGATIONCORE_INTERMEDIATE_POINTS);
+ totalNumberOfSegments=0;
+ while ((item=map_rect_get_item(mr))) {
+ if (item->type == type_street_route) {
+ pos=0;
+ if (totalNumberOfSegments >= offset && totalNumberOfSegments < offset+numberOfSegments) {
+ std::vector<DBus::Struct<uint16_t, double, double, double> >intermediate_points;
+ do {
+ count=item_coord_get(item, c, 128);
+ for (i = 0 ; i < count ; i++) {
+ switch (pos) {
+ case 0: /* last not valid */
+ pos++;
+ break;
+ case 1: /* last is start coordinates */
+ {
+ std::map< uint16_t, ::DBus::Variant > map;
+ get_map(&last, item, 0, valuesToReturn, map);
+ RouteSegments.push_back(map);
+ pos++;
+ }
+ break;
+ case 2: /* last is intermediate coordinates */
+ if (intermediate) {
+ struct coord_geo g;
+ transform_to_geo(projection_mg, &last, &g);
+ DBus::Struct<uint16_t, double, double, double> point;
+ point._1=0;
+ point._2=g.lat;
+ point._3=g.lng;
+ point._4=0;
+ intermediate_points.push_back(point);
+ }
+ }
+ last=c[i];
+ }
+ } while (count == 128);
+#if 0
+ if (intermediate_points.size()) {
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << intermediate_points;
+ RouteSegments.back()[GENIVI_NAVIGATIONCORE_INTERMEDIATE_POINTS]=variant;
+ }
+#endif
+ }
+ totalNumberOfSegments++;
+ }
+ }
+ if (pos == 2) /* last is final coordinates */
+ get_map(&last, NULL, 1, valuesToReturn, RouteSegments.back());
+ map_rect_destroy(mr);
+}
+
+void
+RoutingObj::GetRouteOverview(uint32_t routeHandle , std::map< uint16_t, ::DBus::Variant >& routeOverview)
+{
+ struct attr destination_length, destination_time;
+ if (!route_get_attr(m_route.u.route,attr_destination_length, &destination_length, NULL))
+ throw DBus::ErrorFailed("internal error:failed to get attribute destination_length");
+ if (!route_get_attr(m_route.u.route,attr_destination_time, &destination_time, NULL))
+ throw DBus::ErrorFailed("internal error:failed to get attribute destination_time");
+
+ DBus::Variant var1,var2;
+ DBus::MessageIter iter1 = var1.writer();
+ DBus::MessageIter iter2 = var2.writer();
+ iter1.append_uint32(destination_length.u.num);
+ iter2.append_uint32(destination_time.u.num/10);
+ routeOverview[GENIVI_NAVIGATIONCORE_TOTAL_DISTANCE] = var1;
+ routeOverview[GENIVI_NAVIGATIONCORE_TOTAL_TIME] = var2;
+}
+
+void
+RoutingObj::GetRouteBoundingBox(::DBus::Struct< ::DBus::Struct< double, double >,::DBus::Struct< double, double > > &boundingBox)
+{
+ struct coord_rect r;
+ struct coord_geo g;
+ bool first=true;
+ struct map *m=route_get_map(m_route.u.route);
+ struct item *item;
+
+ if (!m)
+ throw DBus::ErrorFailed("internal error:failed to get route map");
+ struct map_rect *mr=map_rect_new(m, NULL);
+ if (!mr)
+ throw DBus::ErrorFailed("internal error:failed to create route map rect");
+ while ((item=map_rect_get_item(mr))) {
+ struct coord c[128];
+ int count,i;
+ do {
+ count=item_coord_get(item, c, 128);
+ for (i = 0 ; i < count ; i++) {
+ if (first) {
+ first=0;
+ r.lu=c[i];
+ r.rl=c[i];
+ } else
+ coord_rect_extend(&r, &c[i]);
+ }
+ } while (count == 128);
+ }
+ map_rect_destroy(mr);
+ if (first)
+ throw DBus::ErrorFailed("no route available");
+ dbg(0,"bounding box 0x%x,0x%x-0x%x,0x%x\n",r.lu.x,r.lu.y,r.rl.x,r.rl.y);
+ transform_to_geo(projection_mg, &r.lu, &g);
+ boundingBox._1._1=g.lat;
+ boundingBox._1._2=g.lng;
+ dbg(0,"%f,%f\n",g.lat,g.lng);
+ transform_to_geo(projection_mg, &r.rl, &g);
+ boundingBox._2._1=g.lat;
+ boundingBox._2._2=g.lng;
+ dbg(0,"-%f,%f\n",g.lat,g.lng);
+}
+
+void
+RoutingObj::CancelRouteCalculation(uint32_t sessionHandle)
+{
+ route_set_destination(m_route.u.route, NULL, 0);
+}
+
+void
+RoutingObj_Callback(struct RoutingObj *obj)
+{
+ struct attr route_status;
+ if (!route_get_attr(obj->m_route.u.route, attr_route_status, &route_status, NULL)) {
+ dbg(0,"failed to get route status\n");
+ return;
+ }
+ if (route_status.u.num == route_status_destination_set) {
+ obj->m_routing->RouteCalculationProgressUpdate(obj->m_handle, GENIVI_NAVIGATIONCORE_OK, 5);
+ obj->m_route_status=route_status.u.num;
+ }
+ if (route_status.u.num == route_status_building_graph) {
+ obj->m_route_status=route_status.u.num;
+ }
+ if (route_status.u.num == route_status_building_path && obj->m_route_status == route_status_building_graph) {
+ obj->m_routing->RouteCalculationProgressUpdate(obj->m_handle, GENIVI_NAVIGATIONCORE_OK, 50);
+ obj->m_route_status=route_status.u.num;
+ }
+ if (route_status.u.num == route_status_path_done_new ||
+ (obj->m_route_status==route_status_destination_set && route_status.u.num == route_status_path_done_incremental)) {
+ if (route_status.u.num == route_status_path_done_new)
+ obj->m_routing->RouteCalculationProgressUpdate(obj->m_handle, GENIVI_NAVIGATIONCORE_OK, 100);
+ obj->m_route_status=route_status.u.num;
+ dbg(0,"callback routing ok\n");
+ std::map< uint16_t, uint16_t > unfulfilled_preferences;
+ obj->m_routing->RouteCalculationSuccessful(obj->m_handle, unfulfilled_preferences);
+ }
+ if (route_status.u.num == route_status_not_found) {
+ obj->m_route_status=route_status.u.num;
+ dbg(0,"callback routing failed\n");
+ std::map< uint16_t, uint16_t > unfulfilled_preferences;
+ obj->m_routing->RouteCalculationFailed(obj->m_handle, GENIVI_NAVIGATIONCORE_UNREACHABLE_DESTINATION, unfulfilled_preferences);
+ }
+}
+
+
+bool
+RoutingObj::RoutePreference(uint16_t preferenceSource,uint16_t preferenceMode)
+{
+ int index;
+
+ for (index=0;index<m_route_preferences_list[m_vehicleprofile_idx].size();index++)
+ {
+ if (((m_route_preferences_list[m_vehicleprofile_idx].at(index))._1 == preferenceSource) && ((m_route_preferences_list[m_vehicleprofile_idx].at(index))._2 == preferenceMode))
+ return true;
+ }
+
+ return false;
+}
+
+void
+RoutingObj::SetRoutePreferences(uint32_t sessionHandle, const std::string& country, const std::vector< ::DBus::Struct< uint16_t, uint16_t > >& routePreferencesList)
+{
+ int idx;
+ struct attr flags_forward_mask,flags_reverse_mask,roadprofile,item_types,route_weight;
+ m_route_preferences_list[m_vehicleprofile_idx]=routePreferencesList;
+ struct vehicleprofile_settings *s=&m_vehicleprofile_settings[m_vehicleprofile_idx];
+
+ if (!s->flags_forward_mask) {
+ vehicleprofile_get_attr(m_vehicleprofile.u.vehicleprofile, attr_flags_forward_mask, &flags_forward_mask, NULL);
+ vehicleprofile_get_attr(m_vehicleprofile.u.vehicleprofile, attr_flags_reverse_mask, &flags_reverse_mask, NULL);
+ s->flags_forward_mask=flags_forward_mask.u.num;
+ s->flags_reverse_mask=flags_reverse_mask.u.num;
+ }
+ flags_forward_mask.type=attr_flags_forward_mask;
+ flags_reverse_mask.type=attr_flags_reverse_mask;
+ if (RoutePreference(GENIVI_NAVIGATIONCORE_AVOID, GENIVI_NAVIGATIONCORE_TOLL_ROADS)) {
+ flags_forward_mask.u.num=s->flags_forward_mask | AF_TOLL;
+ flags_reverse_mask.u.num=s->flags_reverse_mask | AF_TOLL;
+ } else {
+ flags_forward_mask.u.num=s->flags_forward_mask;
+ flags_reverse_mask.u.num=s->flags_reverse_mask;
+ }
+ vehicleprofile_set_attr(m_vehicleprofile.u.vehicleprofile, &flags_forward_mask);
+ vehicleprofile_set_attr(m_vehicleprofile.u.vehicleprofile, &flags_reverse_mask);
+ struct attr_iter *iter=vehicleprofile_attr_iter_new();
+ while (vehicleprofile_get_attr(m_vehicleprofile.u.vehicleprofile, attr_roadprofile, &roadprofile, iter)) {
+ if (roadprofile_get_attr(roadprofile.u.roadprofile, attr_item_types, &item_types, NULL)) {
+ int *par=NULL;
+ bool active=false;
+ switch (item_types.u.item_types[0]) {
+ case type_ferry:
+ par=&s->ferry_weight;
+ active=RoutePreference(GENIVI_NAVIGATIONCORE_AVOID, GENIVI_NAVIGATIONCORE_FERRY);
+ break;
+ case type_highway_city:
+ par=&s->highway_city_weight;
+ active=RoutePreference(GENIVI_NAVIGATIONCORE_AVOID, GENIVI_NAVIGATIONCORE_HIGHWAYS_MOTORWAYS);
+ break;
+ case type_highway_land:
+ par=&s->highway_land_weight;
+ active=RoutePreference(GENIVI_NAVIGATIONCORE_AVOID, GENIVI_NAVIGATIONCORE_HIGHWAYS_MOTORWAYS);
+ break;
+ }
+ if (par) {
+ if (!*par) {
+ roadprofile_get_attr(roadprofile.u.roadprofile, attr_route_weight, &route_weight, NULL);
+ *par=route_weight.u.num;
+ }
+ route_weight.type=attr_route_weight;
+ route_weight.u.num=active?0:*par;
+ roadprofile_set_attr(roadprofile.u.roadprofile, &route_weight);
+ }
+ }
+ }
+ vehicleprofile_attr_iter_destroy(iter);
+
+}
+
+void
+RoutingObj::GetRoutePreferences(const std::string& country, std::vector< ::DBus::Struct< uint16_t, uint16_t > >& roadPreferenceList)
+{
+ roadPreferenceList=m_route_preferences_list[m_vehicleprofile_idx];
+}
+
+
+RoutingObj::RoutingObj(Routing *routing, uint32_t session, uint32_t handle)
+{
+ struct attr callback;
+
+ m_routing=routing;
+ m_session=session;
+ m_handle=handle;
+ m_route.type=attr_route;
+ m_route.u.route=route_new(NULL, NULL);
+ m_vehicleprofile.type=attr_vehicleprofile;
+ m_vehicleprofile.u.vehicleprofile=NULL;
+ m_callback=callback_new_attr_1(reinterpret_cast<void (*)(void)>(RoutingObj_Callback), attr_route_status, this);
+ memset(m_vehicleprofile_settings, 0, sizeof(m_vehicleprofile_settings));
+ SetCostModel(handle, GENIVI_NAVIGATIONCORE_FASTEST);
+ callback.type=attr_callback;
+ callback.u.callback=m_callback;
+ route_add_attr(m_route.u.route, &callback);
+ route_set_mapset(m_route.u.route, get_mapset(get_navit()));
+}
+
+RoutingObj::~RoutingObj()
+{
+ struct attr callback;
+
+ callback.type=attr_callback;
+ callback.u.callback=m_callback;
+ route_remove_attr(m_route.u.route, &callback);
+ callback_destroy(m_callback);
+ route_destroy(m_route.u.route);
+}
+
+static class Routing *server;
+
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_routing");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.Routing");
+ server=new Routing(*conn);
+}
diff --git a/src/navigation/navigation-core/session-plugin/.gitignore b/src/navigation/navigation-core/session-plugin/.gitignore
new file mode 100644
index 0000000..96372cd
--- /dev/null
+++ b/src/navigation/navigation-core/session-plugin/.gitignore
@@ -0,0 +1,9 @@
+CMakeCache.txt
+CMakeFiles/
+cmake_install.cmake
+compat_includes
+compat_libs
+*_adaptor.h
+Makefile
+.svn
+.libs
diff --git a/src/navigation/navigation-core/session-plugin/CMakeLists.txt b/src/navigation/navigation-core/session-plugin/CMakeLists.txt
new file mode 100644
index 0000000..02484bc
--- /dev/null
+++ b/src/navigation/navigation-core/session-plugin/CMakeLists.txt
@@ -0,0 +1,44 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_navigationcore_session_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_navigationcore_session_adaptor.h
+ COMMAND dbusxx-xml2cpp ${navigationcore_API}/genivi-navigationcore-session.xml --adaptor=genivi_navigationcore_session_adaptor.h
+ DEPENDS ${navigationcore_API}/genivi-navigationcore-session.xml
+ )
+module_add_library(genivi_navigationcore_session genivi_navigationcore_session.cxx genivi_navigationcore_session_adaptor.h)
diff --git a/src/navigation/navigation-core/session-plugin/genivi_navigationcore_session.cxx b/src/navigation/navigation-core/session-plugin/genivi_navigationcore_session.cxx
new file mode 100644
index 0000000..c2ddff1
--- /dev/null
+++ b/src/navigation/navigation-core/session-plugin/genivi_navigationcore_session.cxx
@@ -0,0 +1,127 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_navigationcore_session.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "constants/genivi-navigationcore-constants.h"
+#include "genivi_navigationcore_session_adaptor.h"
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/event.h"
+
+static DBus::Glib::BusDispatcher dispatcher;
+static DBus::Connection *conn;
+
+static std::map<uint32_t, std::string *> handles;
+
+class Session
+: public org::genivi::navigationcore::Session_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ public:
+ Session(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/navigationcore")
+ {
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > GetVersion()
+ {
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > Version;
+ dbg(1,"enter\n");
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("07-06-2013");
+ return Version;
+ }
+
+ uint32_t CreateSession(const std::string &client)
+ {
+ dbg(0,"enter\n");
+ uint32_t SessionHandle=1;
+ while (handles[SessionHandle]) {
+ SessionHandle++;
+ if (SessionHandle == 256)
+ throw DBus::Error("org.genivi.navigationcore.Session.Error.NoMoreSessionHandles","Out of session handles");
+ }
+ handles[SessionHandle]=new std::string(client);
+ return SessionHandle;
+ }
+
+ uint16_t GetSessionStatus(const uint32_t& SessionHandle)
+ {
+ if (handles[SessionHandle])
+ return GENIVI_NAVIGATIONCORE_AVAILABLE;
+ else
+ return GENIVI_NAVIGATIONCORE_NOT_AVAILABLE;
+ }
+
+ void DeleteSession(const uint32_t& SessionHandle)
+ {
+ dbg(0,"enter\n");
+ if (!handles[SessionHandle])
+ throw DBus::Error("org.genivi.navigationcore.Session.Error.NotAvailableSessionHandle","Session handle invalid");
+ delete(handles[SessionHandle]);
+ handles[SessionHandle]=NULL;
+ SessionDeleted(SessionHandle);
+ }
+
+ std::vector< ::DBus::Struct< uint32_t, std::string > >
+ GetAllSessions()
+ {
+ std::vector< ::DBus::Struct< uint32_t, std::string > > ret;
+ std::map<uint32_t, std::string *>::const_iterator it;
+ for(it = handles.begin(); it != handles.end(); it++) {
+ ::DBus::Struct< uint32_t, std::string > session;
+ if (it->second) {
+ session._1=it->first;
+ session._2=*it->second;
+ ret.push_back(session);
+ }
+
+ }
+ return ret;
+ }
+
+};
+
+static class Session *server;
+
+
+void
+plugin_init(void)
+{
+ event_request_system("glib","genivi_navigationcoresession");
+ dispatcher.attach(NULL);
+ DBus::default_dispatcher = &dispatcher;
+ conn = new DBus::Connection(DBus::Connection::SessionBus());
+ conn->setup(&dispatcher);
+ conn->request_name("org.genivi.navigationcore.Session");
+ server=new Session(*conn);
+}
diff --git a/src/navigation/poi-cam/CMakeLists.txt b/src/navigation/poi-cam/CMakeLists.txt
new file mode 100644
index 0000000..a646f57
--- /dev/null
+++ b/src/navigation/poi-cam/CMakeLists.txt
@@ -0,0 +1,49 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file CMakeLists.txt
+#
+# \brief This file is part of the build system.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+cmake_minimum_required(VERSION 2.8)
+include(FindPkgConfig)
+include(${navit_SOURCE_DIR}/cmake/navit_macros.cmake)
+include_directories(${INCLUDE_DIRECTORIES})
+include_directories(.)
+include_directories(../../..)
+include_directories(compat_includes)
+include_directories(${navit_SOURCE_DIR}/..)
+include_directories(${CMAKE_CURRENT_BINARY_DIR})
+include_directories(${CMAKE_CURRENT_BINARY_DIR}/..)
+link_directories(${CMAKE_CURRENT_SOURCE_DIR}/compat_libs)
+add_definitions(-DPLUGIN=1)
+pkg_search_module(DBUS_CPP dbus-c++-glib-1 dbus-c++-1)
+include_directories(${DBUS_CPP_INCLUDE_DIRS})
+set(genivi_poiservice_cam_navit_LIBS ${DBUS_CPP_LDFLAGS})
+ADD_CUSTOM_COMMAND(OUTPUT genivi_poiservice_poicontentaccess_proxy.h
+ COMMAND dbusxx-xml2cpp ${poi-service_API}/genivi-poiservice-poicontentaccess.xml --proxy=genivi_poiservice_poicontentaccess_proxy.h
+ DEPENDS ${poi-service_API}/genivi-poiservice-poicontentaccess.xml
+ )
+ADD_CUSTOM_COMMAND(OUTPUT genivi_poiservice_contentaccessmodule_adaptor.h
+ COMMAND dbusxx-xml2cpp ${poi-service_API}/genivi-poiservice-contentaccessmodule.xml --adaptor=genivi_poiservice_contentaccessmodule_adaptor.h
+ DEPENDS ${poi-service_API}/genivi-poiservice-contentaccessmodule.xml
+ )
+module_add_library(genivi_poiservice_cam_navit genivi_poiservice_cam_navit.cxx genivi_poiservice_poicontentaccess_proxy.h genivi_poiservice_contentaccessmodule_adaptor.h)
diff --git a/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
new file mode 100644
index 0000000..63956e9
--- /dev/null
+++ b/src/navigation/poi-cam/genivi_poiservice_cam_navit.cxx
@@ -0,0 +1,322 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file genivi_poiservice_cam_navit.cxx
+*
+* \brief This file is part of the Navit POC.
+*
+* \author Martin Schaller <martin.schaller@it-schaller.de>
+*
+* \version 1.0
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+*
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <dbus-c++/glib-integration.h>
+#include "navit/config.h"
+#define USE_PLUGINS 1
+#include "navit/debug.h"
+#include "navit/plugin.h"
+#include "navit/item.h"
+#include "navit/config_.h"
+#include "navit/navit.h"
+#include "navit/search.h"
+#include "navit/callback.h"
+#include "navit/event.h"
+#include "navit/coord.h"
+#include "navit/transform.h"
+#include "navit/map.h"
+#include "navit/mapset.h"
+#include "constants/genivi-poiservice-constants.h"
+#include "genivi_poiservice_poicontentaccess_proxy.h"
+#include "genivi_poiservice_contentaccessmodule_adaptor.h"
+
+#include <algorithm>
+
+static DBus::Glib::BusDispatcher dispatchers[2];
+static DBus::Connection *conns[2];
+static const char *cam_name="org.genivi.poiservice.POIContentAccessModuleNavit";
+
+static DBus::Variant
+variant_string(std::string s)
+{
+ DBus::Variant variant;
+ DBus::MessageIter iter=variant.writer();
+ iter << s;
+ return variant;
+}
+
+static bool
+do_sort_distance(::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > a, ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > b)
+{
+ return a._5 < b._5;
+}
+
+
+class PoiContentAccess
+: public org::genivi::poiservice::POIContentAccess_proxy,
+ public DBus::ObjectProxy
+{
+ public:
+
+ PoiContentAccess(DBus::Connection &connection)
+ : DBus::ObjectProxy(connection, "/org/genivi/poiservice/POIContentAccess","org.genivi.poiservice.POIContentAccess")
+ {
+ }
+
+};
+
+class ContentAccessModule
+: public org::genivi::poiservice::POIContentAccessModule_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ private:
+ std::vector< uint16_t > m_poiCategoriesId;
+ std::vector< ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > > m_resultList;
+ int m_max_radius;
+ bool (*m_sort_func)(::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > a, ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > b);
+ struct coord m_center;
+ double m_scale;
+ struct mapset *m_mapset;
+ struct mapset_handle *m_msh;
+ struct map *m_map;
+ struct map_rect *m_map_rect;
+ struct map_selection m_selection;
+ public:
+
+ ContentAccessModule(DBus::Connection &connection)
+ : DBus::ObjectAdaptor(connection, "/org/genivi/poiservice/POIContentAccessModule")
+ {
+ m_mapset=NULL;
+ m_msh=NULL;
+ m_map_rect=NULL;
+ }
+
+ void
+ register_cam(void)
+ {
+ class PoiContentAccess *pca;
+ pca=new PoiContentAccess(*conns[1]);
+ int camid=pca->RegisterContentAccessModule(cam_name);
+ dbg(0,"camid=%d\n",camid);
+
+ std::vector< ::DBus::Struct< ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > > poiCategories1;
+ ::DBus::Struct< ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > poiCategory;
+
+ /* poiCategory._1._1 parents_id */;
+ poiCategory._1._2=variant_string(""); /* icons */
+ poiCategory._1._3="fuel"; /* name */
+ /* poiCategory,_1._4 short_desc */
+ poiCategory._1._5=variant_string(""); /* media */
+
+ /* poiCategory,_2 attributes */
+ /* poiCategory,_3 sortOptions */
+
+ poiCategories1.push_back(poiCategory);
+
+ m_poiCategoriesId=pca->AddCategories(camid, poiCategories1);
+ for (int i = 0 ; i < m_poiCategoriesId.size(); i++) {
+ dbg(0,"Added category id %d\n",m_poiCategoriesId[i]);
+ }
+ pca->RegisterPoiCategories(camid, m_poiCategoriesId);
+ delete(pca);
+ }
+
+ void
+ map_next(void)
+ {
+ m_map=mapset_next(m_msh, 1);
+ if (m_map_rect)
+ map_rect_destroy(m_map_rect);
+ if (m_map)
+ m_map_rect=map_rect_new(m_map, &m_selection);
+ else
+ m_map_rect=NULL;
+ }
+
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string >
+ GetVersion()
+ {
+ DBus::Struct<uint16_t, uint16_t, uint16_t, std::string> Version;
+ Version._1=3;
+ Version._2=0;
+ Version._3=0;
+ Version._4=std::string("23-10-2013");
+ return Version;
+ }
+
+ void
+ SetLanguage(const std::string& languageCode, const std::string& countryCode)
+ {
+ }
+
+ void
+ PoiSearchStarted(const uint8_t& poiSearchHandle, const uint16_t& maxSize, const ::DBus::Struct< double, double, int32_t >& location, const std::vector< ::DBus::Struct< uint16_t, uint32_t > >& poiCategories, const std::vector< ::DBus::Struct< std::string, uint16_t, uint16_t, ::DBus::Variant, uint16_t, bool > >& poiAttributes, const std::string& inputString, const uint16_t& sortOption)
+ {
+ struct attr navit;
+ struct coord_geo g;
+ dbg(0,"enter handle=%d size=%d location=%f,%f,%d string='%s' sortOption=%d\n",poiSearchHandle, maxSize, location._1,location._2,location._3, inputString.c_str(), sortOption);
+ m_resultList.resize(0);
+ m_max_radius=0;
+ for (int i = 0 ; i < poiCategories.size(); i++) {
+ dbg(0,"category %d %d\n",poiCategories[i]._1,poiCategories[i]._2);
+ if (m_max_radius < poiCategories[i]._2)
+ m_max_radius=poiCategories[i]._2;
+ }
+ for (int i = 0 ; i < poiAttributes.size(); i++) {
+ dbg(0,"attribute %s %d %d %d %d\n",poiAttributes[i]._1.c_str(), poiAttributes[i]._2, poiAttributes[i]._3, poiAttributes[i]._5, poiAttributes[i]._6);
+ }
+ dbg(0,"max radius %d\n",m_max_radius);
+ if (!m_mapset) {
+ if (!config_get_attr(config, attr_navit, &navit, NULL)) {
+ dbg(0,"failed to get navit\n");
+ return;
+ }
+ m_mapset=navit_get_mapset(navit.u.navit);
+ }
+ dbg(0,"mapset %p\n",m_mapset);
+ g.lat=location._1;
+ g.lng=location._2;
+ transform_from_geo(projection_mg, &g, &m_center);
+ dbg(0,"c 0x%x,0x%x\n",m_center.x,m_center.y);
+ m_scale=transform_scale(m_center.y);
+ int d=m_max_radius*10/m_scale;
+ m_selection.next=NULL;
+ m_selection.u.c_rect.rl=m_center;
+ m_selection.u.c_rect.rl.x+=d;
+ m_selection.u.c_rect.rl.y-=d;
+ m_selection.u.c_rect.lu=m_center;
+ m_selection.u.c_rect.lu.x-=d;
+ m_selection.u.c_rect.lu.y+=d;
+ m_selection.order=18;
+ m_selection.range.min=type_poi_fuel;
+ m_selection.range.max=type_poi_fuel;
+ dbg(0,"rect 0x%x,0x%x-0x%x,0x%x\n",m_selection.u.c_rect.lu.x,m_selection.u.c_rect.lu.y,m_selection.u.c_rect.rl.x,m_selection.u.c_rect.rl.y);
+ if (m_msh)
+ mapset_close(m_msh);
+ m_msh=mapset_open(m_mapset);
+ map_next();
+ m_sort_func=NULL;
+ // m_sort_func=do_sort_distance;
+ }
+
+ void
+ PoiSearchCanceled(const uint8_t& poiSearchHandle)
+ {
+ dbg(0,"enter\n");
+ }
+
+ void
+ add_poi(struct item *item)
+ {
+ struct attr label;
+ struct coord c;
+ dbg(0,"adding poi\n");
+ ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > result;
+ result._1=m_resultList.size(); /* source_id */
+ if (item_attr_get(item, attr_label, &label))
+ result._2=std::string(label.u.str); /* name */
+ else
+ result._2=std::string(""); /* name */
+ result._3=m_poiCategoriesId[0]; /* category */
+ if (item_coord_get(item, &c, 1)) {
+ struct coord_geo g;
+ transform_to_geo(projection_mg, &c, &g);
+ result._4._1=g.lat; /* lat */
+ result._4._2=g.lng; /* lon */
+ double distance=transform_distance(projection_mg, &m_center, &c)/m_scale/10;
+#if 0
+ if (distance > m_max_radius)
+ return;
+#endif
+ result._5=distance; /* distance */
+ } else {
+ result._4._1=0; /* lat */
+ result._4._2=0; /* lon */
+ result._5=0; /* distance */
+ }
+ result._4._3=0; /* altitude */
+ /* result._6 attributes */
+ result._7=variant_string(std::string("")); /* value */
+ m_resultList.push_back(result);
+ }
+
+ void
+ ResultListRequested(const uint8_t& camId, const uint8_t& poiSearchHandle, const std::vector< std::string >& attributes, uint16_t& statusValue, uint16_t& resultListSize, std::vector< ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > >& resultList)
+ {
+ struct item *item;
+ int count=0;
+ dbg(0,"enter camId=%d handle=%d\n", camId, poiSearchHandle);
+ while (resultList.size() < 256 && m_map_rect) {
+ while (resultList.size() < 256 && (item=map_rect_get_item(m_map_rect))) {
+ if (item->type == type_poi_fuel)
+ add_poi(item);
+ count++;
+ }
+ map_next();
+ }
+ dbg(0,"got %d items\n",count);
+ statusValue=GENIVI_POISERVICE_FINISHED;
+ if (m_sort_func)
+ std::sort(m_resultList.begin(), m_resultList.end(), m_sort_func);
+ resultList=m_resultList;
+ resultListSize=resultList.size();
+ }
+
+ std::vector< ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, double, double, int32_t >, std::vector< uint16_t >, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > >
+ PoiDetailsRequested(const std::vector< uint32_t >& source_id)
+ {
+ dbg(0,"enter\n");
+ std::vector< ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, double, double, int32_t >, std::vector< uint16_t >, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > > ret;
+ for (int i = 0 ; i < source_id.size() ; i++) {
+ int sid=source_id[i];
+ ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, double, double, int32_t >, std::vector< uint16_t >, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > result;
+ result._1._1=sid; /* source id */
+ result._1._2=m_resultList[sid]._2; /* name */
+ result._1._3=m_resultList[sid]._4._1; /* lat */
+ result._1._4=m_resultList[sid]._4._2; /* lon */
+ result._1._5=0; /* alt */
+ result._2.push_back(m_poiCategoriesId[0]);
+ ret.push_back(result);
+ }
+ return ret;
+ }
+};
+
+
+static class ContentAccessModule *server;
+
+void
+plugin_init(void)
+{
+ dbg(0,"enter\n");
+ event_request_system("glib","genivi_poiservice");
+ int i;
+ for (i = 0 ; i < 2 ; i++) {
+ conns[i] = new DBus::Connection(DBus::Connection::SessionBus());
+ dispatchers[i].attach(NULL);
+ DBus::default_dispatcher = &dispatchers[i];
+ conns[i]->setup(&dispatchers[i]);
+ }
+ conns[0]->request_name(cam_name);
+ server=new ContentAccessModule(*conns[0]);
+ try {
+ server->register_cam();
+ } catch(...) {
+ dbg(0,"Exception during register_cam\n");
+ }
+}
diff --git a/src/navigation/script/0positioning.mk b/src/navigation/script/0positioning.mk
new file mode 100644
index 0000000..170760d
--- /dev/null
+++ b/src/navigation/script/0positioning.mk
@@ -0,0 +1,49 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file 0positioning.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+positioning_SRC=$(SRC_DIR)/positioning
+positioning_API=$(positioning_SRC)/EnhancedPositionService/api
+positioning_BIN=$(BIN_DIR)/positioning
+positioning_URL=https://git.genivi.org/srv/git/positioning
+positioning_VERSION=daaf1b10766b04f5b1b6fa7fb7fc465bc48debb2
+
+ALL+=positioning
+
+help::
+ @echo "positioning: Build positioning"
+
+
+positioning: $(positioning_BIN)/EnhancedPositionService/src/server/position-daemon
+
+$(positioning_BIN)/Makefile: $(positioning_SRC)/CMakeLists.txt
+ mkdir -p $(positioning_BIN)
+ cd $(positioning_BIN) && cmake -DWITH_GPSD=OFF -DWITH_DLT=OFF -DWITH_REPLAYER=ON -DWITH_TESTS=OFF $(positioning_SRC)
+
+$(positioning_BIN)/EnhancedPositionService/src/server/position-daemon: $(positioning_BIN)/Makefile
+ cd $(positioning_BIN) && make
+
+$(positioning_SRC)/CMakeLists.txt:
+ cd $(positioning_SRC)/.. && git clone $(positioning_URL)
+ cd $(positioning_SRC) && git checkout $(positioning_VERSION)
diff --git a/src/navigation/script/1navit.mk b/src/navigation/script/1navit.mk
new file mode 100644
index 0000000..a689558
--- /dev/null
+++ b/src/navigation/script/1navit.mk
@@ -0,0 +1,61 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file 1navit.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+navit_SRC=$(SRC_DIR)/navit
+navit_SRC2=$(navit_SRC)/navit
+navit_BIN=$(BIN_DIR)/navit
+navit_URL=http://git.navit-project.org/navit.git
+navit_VERSION=6d7a8e00a67e133981e322ad13a60c9a6a9896de
+navit_DEPS=gtk2.0-dev
+
+DEPS+=$(navit_DEPS)
+ALL+=navit navit_map
+
+help::
+ @echo "navit: Build navit"
+ @echo "navit_map: Download and install navit map"
+
+navit: $(navit_BIN)/navit/navit
+
+$(navit_BIN)/navit/navit: $(navit_BIN)/Makefile
+ make -C $(navit_BIN)
+
+$(navit_BIN)/Makefile: $(navit_SRC2)/CMakeLists.txt
+ mkdir -p $(navit_BIN)
+ cd $(navit_BIN) && cmake -DSAMPLE_MAP=0 -Dvehicle/null=1 -Dgraphics/qt_qpainter=0 $(navit_SRC2)
+
+$(navit_SRC2)/CMakeLists.txt:
+ cd $(navit_SRC)/.. && git clone $(navit_URL)
+ cd $(navit_SRC) && git checkout $(navit_VERSION)
+
+navit_map: $(navit_BIN)/navit/maps/switzerland.xml
+
+$(navit_BIN)/navit/maps/switzerland.xml: $(MAP_DIR)/switzerland.bin
+ echo '<map type="binfile" data="$(MAP_DIR)/switzerland.bin" />' >$(navit_BIN)/navit/maps/switzerland.xml
+
+$(MAP_DIR)/switzerland.bin:
+ mkdir -p $(MAP_DIR)
+ wget -O $(MAP_DIR)/switzerland.bin.tmp http://www.navit-project.org/switzerland.bin
+ mv $(MAP_DIR)/switzerland.bin.tmp $(MAP_DIR)/switzerland.bin
diff --git a/src/navigation/script/Makefile b/src/navigation/script/Makefile
new file mode 100644
index 0000000..57e8782
--- /dev/null
+++ b/src/navigation/script/Makefile
@@ -0,0 +1,51 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file Makefile
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+SRC_DIR=$(CURDIR)/../../navigation
+PATCH_DIR=$(SRC_DIR)/patches
+API_DIR=$(CURDIR)/../../../api
+BIN_DIR=$(CURDIR)/../bin
+MAP_DIR=$(CURDIR)/../../map
+CONSTANTS_BIN=$(BIN_DIR)/constants
+
+QMAKE=qmake
+
+default: help
+
+help::
+ @echo "The following targets exist"
+ @echo "all: Build $(ALL)"
+ @echo "all2: Install all necessary dependencies and build all"
+
+
+include *.mk
+
+all: $(ALL)
+
+deps::
+ sudo apt-get install $(DEPS)
+
+all2: deps all
+navit-plugins: all
diff --git a/src/navigation/script/map-viewer.mk b/src/navigation/script/map-viewer.mk
new file mode 100644
index 0000000..3e7e4a5
--- /dev/null
+++ b/src/navigation/script/map-viewer.mk
@@ -0,0 +1,74 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file map-viewer.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+mapviewer_SRC=$(SRC_DIR)/map-viewer
+mapviewer_API=$(API_DIR)/map-viewer
+mapviewer-configuration_SRC=$(mapviewer_SRC)/configuration-plugin
+mapviewer-configuration_BIN=$(BIN_DIR)/mapviewer-configuration
+mapviewer-mapviewercontrol_SRC=$(mapviewer_SRC)/mapviewercontrol-plugin
+mapviewer-mapviewercontrol_BIN=$(BIN_DIR)/mapviewer-mapviewercontrol
+mapviewer-session_SRC=$(mapviewer_SRC)/session-plugin
+mapviewer-session_BIN=$(BIN_DIR)/mapviewer-session
+
+ALL+=mapviewer
+
+help::
+ @echo "mapviewer: Build all mapviewer modules"
+ @echo "mapviewer-configuration: Build mapviewer configuration module"
+ @echo "mapviewer-mapviewercontrol: Build mapviewer mapviewercontrol module"
+ @echo "mapviewer-session: Build mapviewer session module"
+
+
+mapviewer: mapviewer-configuration mapviewer-mapviewercontrol mapviewer-session $(navit_BIN)/navit/navit_genivi_mapviewer.xml
+
+
+$(navit_BIN)/navit/navit_genivi_mapviewer.xml: $(mapviewer_SRC)/navit_genivi_mapviewer.xsl $(navit_SRC2)/navit/navit_shipped.xml
+ xsltproc $(mapviewer_SRC)/navit_genivi_mapviewer.xsl $(navit_SRC2)/navit/navit_shipped.xml > $(navit_BIN)/navit/navit_genivi_mapviewer.xml
+
+mapviewer-configuration: $(mapviewer-configuration_BIN)/.libs/libgenivi_mapviewer_configuration.so
+
+$(mapviewer-configuration_BIN)/.libs/libgenivi_mapviewer_configuration.so: $(mapviewer-configuration_BIN)/Makefile $(CONSTANTS_BIN)/genivi-mapviewer-constants.h
+ make -C $(mapviewer-configuration_BIN)
+$(mapviewer-configuration_BIN)/Makefile: $(mapviewer-configuration_SRC)/CMakeLists.txt
+ mkdir -p $(mapviewer-configuration_BIN)
+ cd $(mapviewer-configuration_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dmapviewer_API=$(mapviewer_API) $(mapviewer-configuration_SRC)
+
+mapviewer-mapviewercontrol: $(mapviewer-mapviewercontrol_BIN)/.libs/libgenivi_mapviewer_mapviewercontrol.so
+$(mapviewer-mapviewercontrol_BIN)/.libs/libgenivi_mapviewer_mapviewercontrol.so: $(mapviewer-mapviewercontrol_BIN)/Makefile $(CONSTANTS_BIN)/genivi-mapviewer-constants.h $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ make -C $(mapviewer-mapviewercontrol_BIN)
+$(mapviewer-mapviewercontrol_BIN)/Makefile: $(mapviewer-mapviewercontrol_SRC)/CMakeLists.txt
+ mkdir -p $(mapviewer-mapviewercontrol_BIN)
+ cd $(mapviewer-mapviewercontrol_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dlayer_management_INST=$(layer_management_INST) -Dmapviewer_API=$(mapviewer_API) -Dnavigationcore_API=$(navigationcore_API) $(mapviewer-mapviewercontrol_SRC)
+
+mapviewer-session: $(mapviewer-session_BIN)/.libs/libgenivi_mapviewer_session.so
+$(mapviewer-session_BIN)/.libs/libgenivi_mapviewer_session.so: $(mapviewer-session_BIN)/Makefile $(CONSTANTS_BIN)/genivi-mapviewer-constants.h
+ make -C $(mapviewer-session_BIN)
+$(mapviewer-session_BIN)/Makefile: $(mapviewer-session_SRC)/CMakeLists.txt
+ mkdir -p $(mapviewer-session_BIN)
+ cd $(mapviewer-session_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dmapviewer_API=$(mapviewer_API) $(mapviewer-session_SRC)
+
+$(CONSTANTS_BIN)/genivi-mapviewer-constants.h: $(mapviewer_API)/genivi-mapviewer-constants.xml $(mapviewer_API)/enum.xsl
+ mkdir -p $(CONSTANTS_BIN)
+ xsltproc $(mapviewer_API)/enum.xsl $(mapviewer_API)/genivi-mapviewer-constants.xml >$(CONSTANTS_BIN)/genivi-mapviewer-constants.h
diff --git a/src/navigation/script/navigation-core.mk b/src/navigation/script/navigation-core.mk
new file mode 100644
index 0000000..7b76cca
--- /dev/null
+++ b/src/navigation/script/navigation-core.mk
@@ -0,0 +1,120 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file navigation-core.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+navigationcore_SRC=$(SRC_DIR)/navigation-core
+navigationcore_API=$(API_DIR)/navigation-core
+navigationcore-configuration_SRC=$(navigationcore_SRC)/configuration-plugin
+navigationcore-configuration_BIN=$(BIN_DIR)/navigationcore-configuration
+navigationcore-guidance_SRC=$(navigationcore_SRC)/guidance-plugin
+navigationcore-guidance_BIN=$(BIN_DIR)/navigationcore-guidance
+navigationcore-locationinput_SRC=$(navigationcore_SRC)/locationinput-plugin
+navigationcore-locationinput_BIN=$(BIN_DIR)/navigationcore-locationinput
+navigationcore-mapmatchedposition_SRC=$(navigationcore_SRC)/mapmatchedposition-plugin
+navigationcore-mapmatchedposition_BIN=$(BIN_DIR)/navigationcore-mapmatchedposition
+navigationcore-routing_SRC=$(navigationcore_SRC)/routing-plugin
+navigationcore-routing_BIN=$(BIN_DIR)/navigationcore-routing
+navigationcore-session_SRC=$(navigationcore_SRC)/session-plugin
+navigationcore-session_BIN=$(BIN_DIR)/navigationcore-session
+navigationcore-enhancedposition_SRC=$(navigationcore_SRC)/enhancedposition-plugin
+navigationcore-enhancedposition_BIN=$(BIN_DIR)/navigationcore-enhancedposition
+
+ALL+=navigationcore
+
+help::
+ @echo "navigationcore: Build all navigationcore modules"
+ @echo "navigationcore-configuration: Build navigationcore configuration module"
+ @echo "navigationcore-guidance: Build navigationcore guidance module"
+ @echo "navigationcore-locationinput: Build navigationcore locationinput module"
+ @echo "navigationcore-mapmatchedposition: Build navigationcore mapmatchedposition module"
+ @echo "navigationcore-routing: Build navigationcore routing module"
+ @echo "navigationcore-session: Build navigationcore session module"
+ @echo "navigationcore-enhancedposition: Build navigationcore enhancedposition module"
+
+navigationcore: navigationcore-configuration navigationcore-guidance navigationcore-locationinput navigationcore-mapmatchedposition navigationcore-routing navigationcore-session navigationcore-enhancedposition $(navit_BIN)/navit/navit_genivi_navigationcore.xml
+
+$(navit_BIN)/navit/navit_genivi_navigationcore.xml: $(navigationcore_SRC)/navit_genivi_navigationcore.xsl $(navit_SRC2)/navit/navit_shipped.xml
+ xsltproc $(navigationcore_SRC)/navit_genivi_navigationcore.xsl $(navit_SRC2)/navit/navit_shipped.xml > $(navit_BIN)/navit/navit_genivi_navigationcore.xml
+
+$(CONSTANTS_BIN)/genivi-navigationcore-constants.h: $(navigationcore_API)/genivi-navigationcore-constants.xml $(navigationcore_API)/enum.xsl
+ mkdir -p $(CONSTANTS_BIN)
+ xsltproc $(navigationcore_API)/enum.xsl $(navigationcore_API)/genivi-navigationcore-constants.xml >$(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+
+$(CONSTANTS_BIN)/genivi-enhancedpositionservice-constants.h: positioning $(positioning_API)/genivi-positioning-constants.xml $(navigationcore_API)/enum.xsl
+ mkdir -p $(CONSTANTS_BIN)
+ xsltproc $(navigationcore_API)/enum.xsl $(positioning_API)/genivi-positioning-constants.xml >$(CONSTANTS_BIN)/genivi-enhancedpositionservice-constants.h
+
+navigationcore-configuration: $(navigationcore-configuration_BIN)/.libs/libgenivi-navigationcore-configuration.so
+
+navigationcore-configuration: $(navigationcore-configuration_BIN)/.libs/libgenivi-navigationcore-configuration.so
+$(navigationcore-configuration_BIN)/.libs/libgenivi-navigationcore-configuration.so: $(navigationcore-configuration_BIN)/Makefile
+ make -C $(navigationcore-configuration_BIN)
+$(navigationcore-configuration_BIN)/Makefile: $(navigationcore-configuration_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-configuration_BIN)
+ cd $(navigationcore-configuration_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-configuration_SRC)
+
+navigationcore-guidance: $(navigationcore-guidance_BIN)/.libs/libgenivi-navigationcore-guidance.so
+$(navigationcore-guidance_BIN)/.libs/libgenivi-navigationcore-guidance.so: $(navigationcore-guidance_BIN)/Makefile
+ make -C $(navigationcore-guidance_BIN)
+$(navigationcore-guidance_BIN)/Makefile: $(navigationcore-guidance_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-guidance_BIN)
+ cd $(navigationcore-guidance_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-guidance_SRC)
+
+navigationcore-locationinput: $(navigationcore-locationinput_BIN)/.libs/libgenivi-navigationcore-locationinput.so
+$(navigationcore-locationinput_BIN)/.libs/libgenivi-navigationcore-locationinput.so: $(navigationcore-locationinput_BIN)/Makefile
+ make -C $(navigationcore-locationinput_BIN)
+$(navigationcore-locationinput_BIN)/Makefile: $(navigationcore-locationinput_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-locationinput_BIN)
+ cd $(navigationcore-locationinput_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-locationinput_SRC)
+
+navigationcore-mapmatchedposition: $(navigationcore-mapmatchedposition_BIN)/.libs/libgenivi-navigationcore-mapmatchedposition.so
+$(navigationcore-mapmatchedposition_BIN)/.libs/libgenivi-navigationcore-mapmatchedposition.so: $(navigationcore-mapmatchedposition_BIN)/Makefile
+ make -C $(navigationcore-mapmatchedposition_BIN)
+$(navigationcore-mapmatchedposition_BIN)/Makefile: $(navigationcore-mapmatchedposition_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-mapmatchedposition_BIN)
+ cd $(navigationcore-mapmatchedposition_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-mapmatchedposition_SRC)
+
+navigationcore-routing: $(navigationcore-routing_BIN)/.libs/libgenivi-navigationcore-routing.so
+$(navigationcore-routing_BIN)/.libs/libgenivi-navigationcore-routing.so: $(navigationcore-routing_BIN)/Makefile
+ make -C $(navigationcore-routing_BIN)
+$(navigationcore-routing_BIN)/Makefile: $(navigationcore-routing_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-routing_BIN)
+ cd $(navigationcore-routing_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-routing_SRC)
+
+navigationcore-session: $(navigationcore-session_BIN)/.libs/libgenivi-navigationcore-session.so
+$(navigationcore-session_BIN)/.libs/libgenivi-navigationcore-session.so: $(navigationcore-session_BIN)/Makefile
+ make -C $(navigationcore-session_BIN)
+$(navigationcore-session_BIN)/Makefile: $(navigationcore-session_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h
+ mkdir -p $(navigationcore-session_BIN)
+ cd $(navigationcore-session_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dnavigationcore_API=$(navigationcore_API) $(navigationcore-session_SRC)
+
+# NOTE: extended by thomas.bader@bmw.de
+navigationcore-enhancedposition: $(navigationcore-enhancedposition_BIN)/.libs/libgenivi_positioning_enhancedposition.so
+
+$(navigationcore-enhancedposition_BIN)/.libs/libgenivi_positioning_enhancedposition.so: $(navigationcore-enhancedposition_BIN)/Makefile
+ make -C $(navigationcore-enhancedposition_BIN)
+
+$(navigationcore-enhancedposition_BIN)/Makefile: $(navigationcore-enhancedposition_SRC)/CMakeLists.txt $(CONSTANTS_BIN)/genivi-navigationcore-constants.h $(CONSTANTS_BIN)/genivi-enhancedpositionservice-constants.h
+ mkdir -p $(navigationcore-enhancedposition_BIN)
+ cd $(navigationcore-enhancedposition_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dpositioning_API=$(positioning_API) $(navigationcore-enhancedposition_SRC)
diff --git a/src/navigation/script/poi-cam.mk b/src/navigation/script/poi-cam.mk
new file mode 100644
index 0000000..d26e407
--- /dev/null
+++ b/src/navigation/script/poi-cam.mk
@@ -0,0 +1,47 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file poi-cam.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+poiservice_SRC=$(SRC_DIR)/poi-cam
+poiservice_BIN=$(BIN_DIR)/poi-cam
+poi-service_API=
+
+ifneq ($(poi-service_API),)
+ALL+=poiservice
+
+help::
+ @echo "poiservice: Build poiservice module"
+
+poiservice: $(poiservice_BIN)/.libs/libgenivi_poiservice_configuration.so
+
+$(poiservice_BIN)/.libs/libgenivi_poiservice_configuration.so: $(poiservice_BIN)/Makefile $(CONSTANTS_BIN)/genivi-poiservice-constants.h
+ make -C $(poiservice_BIN)
+$(poiservice_BIN)/Makefile: $(poiservice_SRC)/CMakeLists.txt
+ mkdir -p $(poiservice_BIN)
+ cd $(poiservice_BIN) && cmake -C $(navit_BIN)/cmake_plugin_settings.txt -Dpoi-service_API=$(poi-service_API) $(poiservice_SRC)
+
+$(CONSTANTS_BIN)/genivi-poiservice-constants.h: $(poi-service_API)/genivi-poiservice-constants.xml $(poi-service_API)/enum.xsl
+ mkdir -p $(CONSTANTS_BIN)
+ xsltproc $(poi-service_API)/enum.xsl $(poi-service_API)/genivi-poiservice-constants.xml >$(CONSTANTS_BIN)/genivi-poiservice-constants.h
+endif
diff --git a/src/navigation/script/run b/src/navigation/script/run
new file mode 100755
index 0000000..fd1f0af
--- /dev/null
+++ b/src/navigation/script/run
@@ -0,0 +1,108 @@
+#! /bin/bash
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file run
+#
+# \brief This file is part of the Build System.
+#
+# \author Martin Schaller <martin.schaller@it-schaller.de>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+function run
+{
+ local x=$xterm
+ local title="$1"
+ shift
+ if [ "$1" = "-n" ]
+ then
+ shift
+ x=0
+ fi
+ if [ "$x" = 1 ]
+ then
+ xterm -T "$title" -sb -sl 5000 -e "$@" &
+ else
+ "$@" &
+ fi
+ PIDS="$PIDS $!"
+}
+
+function terminate
+{
+ set +e
+ trap "" EXIT INT
+ kill $PIDS
+}
+
+
+xterm=0
+enhpos=1
+center="4612 N 0608 E"
+BIN_DIR=$PWD/../bin
+SRC_DIR=$PWD/..
+while getopts b:c:nx opt
+do
+ case $opt in
+ b)
+ BIN_DIR=$OPTARG
+ ;;
+ c)
+ case "$OPTARG" in
+ paris)
+ center="2.34 48.86"
+ ;;
+ tokyo)
+ center="139.74 35.70"
+ ;;
+ [0-9-]*)
+ center=$OPTARG
+ ;;
+ *)
+ echo "Unsupported center $OPTARG" >&2
+ exit 1
+ ;;
+ esac
+ ;;
+ n)
+ enhpos=0
+ ;;
+ x)
+ xterm=1
+ ;;
+ \?)
+ echo "Usage:"
+ echo "$0 [-a application][-c center][-lnx]"
+ echo "-c: Set center (supported values: paris,tokyo,longitude latitude). Default is geneve"
+ echo "-n: Don't start enhanced positioning service"
+ echo "-x: Run subprocesses in own xterm to get separated log messages"
+ exit 1
+ esac
+done
+trap "terminate" EXIT INT
+set -e
+if [ "$enhpos" = 1 ]
+then
+ REPLAYER_LOG_FILE=$SRC_DIR/positioning/provider/rest/geneve-cologny.gvsl run EnhancedPositionService $BIN_DIR/positioning/EnhancedPositionService/src/server/position-daemon
+fi
+cd $BIN_DIR/navit/navit
+>bookmark.txt
+echo "$center" >center.txt
+run MapViewer ./navit navit_genivi_mapviewer.xml
+run NavigationCore ./navit navit_genivi_navigationcore.xml
+wait
diff --git a/src/poi-service/.gitignore b/src/poi-service/.gitignore
new file mode 100644
index 0000000..6e9d54c
--- /dev/null
+++ b/src/poi-service/.gitignore
@@ -0,0 +1,13 @@
+#files
+*.qm
+*.odt#
+*_adaptor.h
+*_proxy.h
+genivi-*.h
+
+
+
+
+
+
+
diff --git a/src/poi-service/LICENSE b/src/poi-service/LICENSE
new file mode 100644
index 0000000..5eb5f4f
--- /dev/null
+++ b/src/poi-service/LICENSE
@@ -0,0 +1,26 @@
+/**
+ * @licence app begin@
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * \copyright Copyright (C) 2013-2014 PCA Peugeot Citroen
+ *
+ * All the Source Code of this project is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Some part of the code is subject of the terms of other licenses:
+ * Apache License Version 2.0
+ * Creative Commons Attribution Share-Alike 3.0 License
+ * Nokia Qt LGPL 2.1 Exception 1.0 License
+ * Nokia Qt LGPL 2.1 Exception 1.1 License
+ * Data used for populating the POI database is downloaded from this site
+ * http://www.overpass-api.de/
+ * and is provided by © OpenStreetMap contributors
+ * See http://www.openstreetmap.org/copyright
+ *
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
diff --git a/src/poi-service/README b/src/poi-service/README
new file mode 100644
index 0000000..d5dadc5
--- /dev/null
+++ b/src/poi-service/README
@@ -0,0 +1,46 @@
+Release date of the file: 11-04-2014
+Status: to be completed
+
+Project:
+Search engine for Point Of Interest with a content access module mechanism to extend to additional sources of data
+This project is one of the navigation-service common projects that implements the GENIVI navigation APIs.
+
+More:
+The project is made of four parts:
+- poi-supplier that populates a sqlite3 based database from OSM data in xml format
+- poi-server that implements the poi search API and access an embedded database
+- poi-contentaccess-module that implements a content access module that access an additional database, and a simple HMI
+- poi-client that implements a client with a test HMI
+See also other navigation projects like navigation or proof of concepts implemented for traffic-info and positioning
+
+What is in:
+This folder contains scripts for building poi-server
+FYI: poi-supplier, poi-contentaccess-module and poi-client are located under test/poi-service
+
+Author:
+Philippe Colliot philippe.colliot@mpsa.com
+
+License:
+See headers and LICENSE file
+
+Test target:
+Ubuntu 12.04.1 LTS
+
+To get the code:
+Code is part of the navigation-service repository, so you need to clone all:
+git clone http://git.projects.genivi.org/lbs/navigation-service.git $WORKING-DIR
+
+Dependencies:
+libqt4-dev libdbus-c++-dev libsqlite3-dev sqlite3 libglib2.0-dev libglibmm-2.4-dev libdbus-1-dev xsltproc
+
+Build:
+# Enter into the directory
+cd $WORKING-DIR/navigation-service/src/poi-service/script
+make all
+
+To launch:
+./run
+
+Clean up:
+./kill-all
+
diff --git a/src/poi-service/poi-common/common-data-model.h b/src/poi-service/poi-common/common-data-model.h
new file mode 100644
index 0000000..7572160
--- /dev/null
+++ b/src/poi-service/poi-common/common-data-model.h
@@ -0,0 +1,1494 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2011-2012 PCA Peugeot Citroën
+ *
+ * This file is part of GENIVI Project POISearch Proof Of Concept [common data model].
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * \file POIPOCCommonDataModel.h
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+#ifndef __POIPOCCOMMONDATAMODEL_H__
+#define __POIPOCCOMMONDATAMODEL_H__
+
+#include <dbus-c++/dbus.h>
+
+/* How to
+ These classes are gateways between internal data and DBus data
+ Internal access is provided by set and get
+ DBus access is provided by setDBus and getDBus
+ Code rules:
+ if data name is MYNAME:
+class DBus_MYNAME // DBus data type ex:(qqqs)
+{
+public:
+ struct MYNAME_t //no class used into this public structure
+ {
+...
+ };
+
+ typedef ... DBus_MYNAME_t;
+
+ DBus_MYNAME(){
+...
+ }
+
+ ~DBus_MYNAME(){}
+
+ void set(MYNAME_t value){
+...
+ }
+
+ MYNAME_t get(){
+...
+ return(m_MYNAME);
+ }
+
+ void setDBus(DBus_MYNAME_t value){
+...
+ }
+
+ DBus_MYNAME_t getDBus(){
+ DBus_MYNAME_t return_value;
+...
+ return(return_value);
+ }
+
+private:
+ MYNAME_t m_MYNAME;
+};
+
+*/
+
+class DBus_dataFormatConverter
+{
+public:
+ DBus_dataFormatConverter()
+ {
+ }
+ ~ DBus_dataFormatConverter()
+ {
+ }
+ DBus::Variant createVariantString(std::string str)
+ {
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_string(str.c_str());
+ return var;
+ }
+
+ DBus::Variant createVariantUint16(uint16_t value)
+ {
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_uint16(value);
+ return var;
+ }
+};
+
+class DBus_version : DBus_dataFormatConverter // (qqqs)
+{
+public:
+ struct version_t
+ {
+ ushort major;
+ ushort minor;
+ ushort micro;
+ std::string date;
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > DBus_version_t;
+
+ DBus_version(){
+ m_version.major = 0;
+ m_version.minor = 0;
+ m_version.micro = 0;
+ m_version.date = "";
+ }
+
+ ~DBus_version(){}
+
+ void set(version_t value){
+ m_version.major = value.major;
+ m_version.minor = value.minor;
+ m_version.micro = value.micro;
+ m_version.date = value.date;
+ }
+
+ version_t get(){
+ return(m_version);
+ }
+
+ void setDBus(DBus_version_t value){
+ m_version.major = value._1;
+ m_version.minor = value._2;
+ m_version.micro = value._3;
+ m_version.date = value._4;
+ }
+
+ DBus_version_t getDBus(){
+ DBus_version_t return_value;
+ return_value._1 = m_version.major;
+ return_value._2 = m_version.minor;
+ return_value._3 = m_version.micro;
+ return_value._4 = m_version.date;
+ return(return_value);
+ }
+
+private:
+ version_t m_version;
+};
+
+class DBus_categoryDetails : DBus_dataFormatConverter // (qaqvsbsv) -->in this implementation, the two variant data are string
+{
+public:
+ struct categoryDetails_t
+ {
+ uint16_t id; //Category unique id
+ bool top_level; //false if predefined, true if created by plugin
+ std::string name;
+ std::vector<uint16_t> parents_id; //list of parent categories unique id
+ std::string icons; //visual icons set
+ std::string description; //short category description (optional)
+ std::string media; //media associated (html web site, audio, video, ...) (optional)
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::vector< uint16_t >, ::DBus::Variant, std::string, bool, std::string, ::DBus::Variant > DBus_categoryDetails_t;
+
+ DBus_categoryDetails()
+ {
+ m_categoryDetails.id = 0;
+ m_categoryDetails.parents_id.clear();
+ m_categoryDetails.parents_id.push_back(0); //one element by default
+ m_categoryDetails.icons = "";
+ m_categoryDetails.name = "";
+ m_categoryDetails.top_level = true;
+ m_categoryDetails.description = "";
+ m_categoryDetails.media = "";
+ }
+
+ ~DBus_categoryDetails(){}
+
+ void set(categoryDetails_t value)
+ {
+ size_t index;
+ m_categoryDetails.id = value.id;
+ m_categoryDetails.parents_id.clear();
+ for (index=0;index<value.parents_id.size();index++)
+ {
+ m_categoryDetails.parents_id.push_back(value.parents_id.at(index));
+ }
+ m_categoryDetails.icons = value.icons;
+ m_categoryDetails.name = value.name;
+ m_categoryDetails.top_level = value.top_level;
+ m_categoryDetails.description = value.description;
+ m_categoryDetails.media = value.media;
+ }
+
+ categoryDetails_t get()
+ {
+ return(m_categoryDetails);
+ }
+
+ void setDBus(DBus_categoryDetails_t value)
+ {
+ size_t index;
+ m_categoryDetails.id = value._1;
+ m_categoryDetails.parents_id.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ m_categoryDetails.parents_id.push_back(value._2.at(index));
+ }
+ m_categoryDetails.icons = value._3.reader().get_string();
+ m_categoryDetails.name = value._4;
+ m_categoryDetails.top_level = value._5;
+ m_categoryDetails.description = value._6;
+ m_categoryDetails.description = value._7.reader().get_string();
+ }
+
+ DBus_categoryDetails_t getDBus()
+ {
+ size_t index;
+ DBus_categoryDetails_t return_value;
+
+ return_value._1 = m_categoryDetails.id;
+ return_value._2.clear();
+ for (index=0;index<m_categoryDetails.parents_id.size();index++)
+ {
+ return_value._2.push_back(m_categoryDetails.parents_id.at(index));
+ }
+ return_value._3 = createVariantString(m_categoryDetails.icons);
+ return_value._4 = m_categoryDetails.name;
+ return_value._5 = m_categoryDetails.top_level;
+ return_value._6 = m_categoryDetails.description;
+ return_value._7 = createVariantString(m_categoryDetails.media);
+ return(return_value);
+ }
+
+private:
+ categoryDetails_t m_categoryDetails;
+};
+
+class DBus_categoryOperator : DBus_dataFormatConverter // (qs)
+{
+public:
+ struct categoryOperator_t
+ {
+ uint16_t id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ std::string name; //attribute operator name
+ };
+
+ typedef::DBus::Struct< uint16_t, std::string > DBus_categoryOperator_t;
+
+ DBus_categoryOperator(){
+ m_categoryOperator.id = 0;
+ m_categoryOperator.name = "";
+ }
+
+ ~DBus_categoryOperator(){
+ }
+
+ void set(categoryOperator_t value){
+ m_categoryOperator.id = value.id;
+ m_categoryOperator.name = value.name;
+ }
+
+ categoryOperator_t get(){
+ return(m_categoryOperator);
+ }
+
+ void setDBus(DBus_categoryOperator_t value){
+ m_categoryOperator.id = value._1;
+ m_categoryOperator.name = value._2;
+ }
+
+ DBus_categoryOperator_t getDBus(){
+ DBus_categoryOperator_t return_value;
+ return_value._1 = m_categoryOperator.id;
+ return_value._2 = m_categoryOperator.name;
+ return(return_value);
+ }
+
+private:
+ categoryOperator_t m_categoryOperator;
+};
+
+class DBus_categoryAttribute : DBus_dataFormatConverter // (sqa(qs))
+{
+public:
+ struct categoryAttribute_t
+ {
+ std::string name; //attribute unique name
+ uint16_t type; //enum(INVALID,STRING,INTEGER,COORDINATES ...)
+ std::vector<DBus_categoryOperator::categoryOperator_t > oper;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_categoryAttribute_t;
+
+ DBus_categoryAttribute(){
+ DBus_categoryOperator op;
+ m_categoryAttribute.name = "";
+ m_categoryAttribute.type = 0;
+ m_categoryAttribute.oper.clear();
+ m_categoryAttribute.oper.push_back(op.get()); //one element by default
+ }
+
+ ~DBus_categoryAttribute(){
+ }
+
+ void set(categoryAttribute_t value){
+ size_t index;
+ m_categoryAttribute.name = value.name;
+ m_categoryAttribute.type = value.type;
+ m_categoryAttribute.oper.clear();
+ for (index=0;index<value.oper.size();index++)
+ {
+ m_categoryAttribute.oper.push_back(value.oper.at(index));
+ }
+ }
+
+ categoryAttribute_t get(){
+ return(m_categoryAttribute);
+ }
+
+ void setDBus(DBus_categoryAttribute_t value){
+ size_t index;
+ DBus_categoryOperator op;
+ m_categoryAttribute.name = value._1;
+ m_categoryAttribute.type = value._2;
+ m_categoryAttribute.oper.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ op.setDBus(value._3.at(index));
+ m_categoryAttribute.oper.push_back(op.get());
+ }
+ }
+
+ DBus_categoryAttribute_t getDBus(){
+ DBus_categoryAttribute_t return_value;
+ size_t index;
+ DBus_categoryOperator op;
+ return_value._1 = m_categoryAttribute.name;
+ return_value._2 = m_categoryAttribute.type;
+ return_value._3.clear();
+ for (index=0;index<m_categoryAttribute.oper.size();index++)
+ {
+ op.set(m_categoryAttribute.oper.at(index));
+ return_value._3.push_back(op.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ categoryAttribute_t m_categoryAttribute;
+};
+
+class DBus_categorySortOption : DBus_dataFormatConverter // (qs)
+{
+public:
+ struct categorySortOption_t
+ {
+ ushort id; //enum(GENIVI_POISERVICE_SORT_DEFAULT,GENIVI_POISERVICE_SORT_BY_DISTANCE,GENIVI_POISERVICE_SORT_BY_TIME ... )
+ std::string name; //name to be displayed by application
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::string > DBus_categorySortOption_t;
+
+ DBus_categorySortOption(){
+ m_categorySortOption.id = 0;
+ m_categorySortOption.name = "";
+ }
+
+ ~DBus_categorySortOption(){
+ }
+
+ void set(categorySortOption_t value){
+ m_categorySortOption.id = value.id;
+ m_categorySortOption.name = value.name;
+ }
+
+ categorySortOption_t get(){
+ return(m_categorySortOption);
+ }
+
+ void setDBus(DBus_categorySortOption_t value){
+ m_categorySortOption.id = value._1;
+ m_categorySortOption.name = value._2;
+ }
+
+ DBus_categorySortOption_t getDBus(){
+ DBus_categorySortOption_t return_value;
+ return_value._1 = m_categorySortOption.id;
+ return_value._2 = m_categorySortOption.name;
+ return(return_value);
+ }
+
+private:
+ categorySortOption_t m_categorySortOption;
+};
+
+class DBus_category : DBus_dataFormatConverter // ((qaqvsbsv)a(sqa(qs))a(qs))
+{
+public:
+ struct category_t
+ {
+ DBus_categoryDetails::categoryDetails_t details;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< uint16_t, std::vector< uint16_t >, ::DBus::Variant, std::string, bool, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_category_t;
+
+ DBus_category()
+ {
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_category.details = details.get();
+ m_category.attributes.clear();
+ m_category.attributes.push_back(attrib.get()); //one element by default
+ m_category.sortOptions.clear();
+ m_category.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~ DBus_category(){}
+
+ void set(category_t value)
+ {
+ size_t index;
+ m_category.details = value.details;
+ m_category.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_category.attributes.push_back(value.attributes.at(index));
+ }
+ m_category.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_category.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ category_t get()
+ {
+ return(m_category);
+ }
+
+ void setDBus(DBus_category_t value)
+ {
+ size_t index;
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.setDBus(value._1);
+ m_category.details = details.get();
+ m_category.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_category.attributes.push_back(attrib.get());
+ }
+ m_category.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_category.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_category_t getDBus()
+ {
+ DBus_category_t return_value;
+ size_t index;
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.set(m_category.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for(index=0;index<m_category.attributes.size();index++)
+ {
+ attrib.set(m_category.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_category.sortOptions.size();index++)
+ {
+ sortOption.set(m_category.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ category_t m_category;
+};
+
+class DBus_categoryId : DBus_dataFormatConverter // (qb)
+{
+public:
+ struct categoryId_t
+ {
+ ushort id;
+ bool top_level; //false if predefined, true if created by plugin
+ };
+
+ typedef ::DBus::Struct< uint16_t, bool > DBus_categoryId_t;
+
+
+ DBus_categoryId(){
+ m_categoryId.id = 0;
+ m_categoryId.top_level = true;
+ }
+
+ ~DBus_categoryId(){}
+
+ void set(categoryId_t value){
+ m_categoryId.id = value.id;
+ m_categoryId.top_level = value.top_level;
+ }
+
+ categoryId_t get(){
+ return(m_categoryId);
+ }
+
+ void setDBus(DBus_categoryId_t value){
+ m_categoryId.id = value._1;
+ m_categoryId.top_level = value._2;
+ }
+
+ DBus_categoryId_t getDBus(){
+ DBus_categoryId_t return_value;
+ return_value._1 = m_categoryId.id;
+ return_value._2 = m_categoryId.top_level;
+ return(return_value);
+ }
+
+private:
+ categoryId_t m_categoryId;
+};
+
+class DBus_categoryReason : DBus_dataFormatConverter // (qq)
+{
+public:
+ struct categoryReason_t
+ {
+ ushort id;
+ ushort reason; //enum(ADDED,REMOVED,ATTR_ADDED,ATTR_MODIFIED,ATTR_REMOVED, ... )
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint16_t > DBus_categoryReason_t;
+
+
+ DBus_categoryReason(){
+ m_categoryReason.id = 0;
+ m_categoryReason.reason = true;
+ }
+
+ ~DBus_categoryReason(){}
+
+ void set(categoryReason_t value){
+ m_categoryReason.id = value.id;
+ m_categoryReason.reason = value.reason;
+ }
+
+ categoryReason_t get(){
+ return(m_categoryReason);
+ }
+
+ void setDBus(DBus_categoryReason_t value){
+ m_categoryReason.id = value._1;
+ m_categoryReason.reason = value._2;
+ }
+
+ DBus_categoryReason_t getDBus(){
+ DBus_categoryReason_t return_value;
+ return_value._1 = m_categoryReason.id;
+ return_value._2 = m_categoryReason.reason;
+ return(return_value);
+ }
+
+private:
+ categoryReason_t m_categoryReason;
+};
+
+class DBus_categoryIdName : DBus_categoryId // (qsb)
+{
+public:
+
+ struct categoryIdName_t
+ {
+ DBus_categoryId::categoryId_t id;
+ std::string name;
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::string, bool > DBus_categoryIdName_t;
+
+
+ DBus_categoryIdName(){
+ m_categoryIdName = "";
+ }
+
+ ~DBus_categoryIdName(){}
+
+ void set(categoryIdName_t value){
+ DBus_categoryId::set(value.id);
+ m_categoryIdName = value.name;
+ }
+
+ categoryIdName_t get(){
+ categoryIdName_t return_value;
+ return_value.id = DBus_categoryId::get();
+ return_value.name = m_categoryIdName;
+ return(return_value);
+ }
+
+ void setDBus(DBus_categoryIdName_t value){
+ DBus_categoryId::DBus_categoryId_t id;
+ id._1 = value._1;
+ id._2 = value._3;
+ DBus_categoryId::setDBus(id);
+ m_categoryIdName = value._2;
+ }
+
+ DBus_categoryIdName_t getDBus(){
+ DBus_categoryIdName_t return_value;
+ DBus_categoryId::DBus_categoryId_t id;
+ id = DBus_categoryId::getDBus();
+ return_value._1 = id._1;
+ return_value._2 = m_categoryIdName;
+ return_value._3 = id._2;
+ return(return_value);
+ }
+
+private:
+ std::string m_categoryIdName;
+};
+
+class DBus_categoryRadius : DBus_dataFormatConverter // (qu)
+{
+public:
+ struct categoryRadius_t
+ {
+ ushort id;
+ uint radius;
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint32_t > DBus_categoryRadius_t;
+
+ DBus_categoryRadius(){
+ m_categoryRadius.id = 0;
+ m_categoryRadius.radius = 0;
+ }
+
+ ~DBus_categoryRadius(){}
+
+ void set(categoryRadius_t value){
+ m_categoryRadius.id = value.id;
+ m_categoryRadius.radius = value.radius;
+ }
+
+ categoryRadius_t get(){
+ return(m_categoryRadius);
+ }
+
+ void setDBus(DBus_categoryRadius_t value){
+ m_categoryRadius.id = value._1;
+ m_categoryRadius.radius = value._2;
+ }
+
+ DBus_categoryRadius_t getDBus(){
+ DBus_categoryRadius_t return_value;
+ return_value._1 = m_categoryRadius.id;
+ return_value._2 = m_categoryRadius.radius;
+ return(return_value);
+ }
+
+private:
+ categoryRadius_t m_categoryRadius;
+};
+
+class DBus_attribute : DBus_dataFormatConverter // (sqv) -->in this implementation, the variant data is a string
+{
+public:
+ struct attribute_t
+ {
+ std::string name;
+ ushort type;
+ std::string value;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > DBus_attribute_t;
+
+
+ DBus_attribute(){
+ m_attribute.name = "";
+ m_attribute.type = 0;
+ m_attribute.value = "";
+ }
+
+ ~DBus_attribute(){}
+
+ void set(attribute_t value){
+ m_attribute.name = value.name;
+ m_attribute.type = value.type;
+ m_attribute.value = value.value;
+ }
+
+ attribute_t get(){
+ return(m_attribute);
+ }
+
+ void setDBus(DBus_attribute_t value){
+ m_attribute.name = value._1;
+ m_attribute.type = value._2;
+ m_attribute.value = value._3.reader().get_string();
+ }
+
+ DBus_attribute_t getDBus(){
+ DBus_attribute_t return_value;
+ return_value._1 = m_attribute.name;
+ return_value._2 = m_attribute.type;
+ return_value._3 = createVariantString(m_attribute.value);
+ return(return_value);
+ }
+
+private:
+ attribute_t m_attribute;
+};
+
+class DBus_attributeDetails : DBus_attribute //(sqqvqb) -->in this implementation, the variant data is string
+{
+public:
+ struct attributeDetails_t
+ {
+ DBus_attribute::attribute_t attribute;
+ ushort poiCategory; //Category unique id
+ ushort id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ bool mandatory; //true if the attribute is mandatory for the search and false for optional
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, uint16_t, ::DBus::Variant, uint16_t, bool > DBus_attributeDetails_t;
+
+
+ DBus_attributeDetails(){
+ m_attributeDetails.poiCategory = 0;
+ m_attributeDetails.id = 0;
+ m_attributeDetails.mandatory = true;
+ }
+
+ ~DBus_attributeDetails(){}
+
+ void set(attributeDetails_t value){
+ DBus_attribute::set(value.attribute);
+ m_attributeDetails.poiCategory = value.poiCategory;
+ m_attributeDetails.id = value.id;
+ m_attributeDetails.mandatory = value.mandatory;
+ }
+
+ attributeDetails_t get(){
+ attributeDetails_t return_value;
+ return_value.attribute = DBus_attribute::get();
+ return_value.poiCategory = m_attributeDetails.poiCategory;
+ return_value.id = m_attributeDetails.id;
+ return_value.mandatory = m_attributeDetails.mandatory;
+ return(return_value);
+ }
+
+ void setDBus(DBus_attributeDetails_t value){
+ DBus_attribute::DBus_attribute_t attribute;
+ attribute._1 = value._1;
+ attribute._2 = value._3;
+ attribute._3 = value._4;
+ DBus_attribute::setDBus(attribute);
+ m_attributeDetails.poiCategory = value._2;
+ m_attributeDetails.id = value._5;
+ m_attributeDetails.mandatory = value._6;
+ }
+
+ DBus_attributeDetails_t getDBus(){
+ DBus_attributeDetails_t return_value;
+ DBus_attribute::DBus_attribute_t attribute;
+ attribute = DBus_attribute::getDBus();
+ return_value._1 = attribute._1;
+ return_value._2 = m_attributeDetails.poiCategory;
+ return_value._3 = attribute._2;
+ return_value._4 = attribute._3;
+ return_value._5 = m_attributeDetails.id;
+ return_value._6 = m_attributeDetails.mandatory;
+ return(return_value);
+ }
+
+private:
+ attributeDetails_t m_attributeDetails;
+};
+
+class DBus_poiAttribute : DBus_dataFormatConverter // (sqv) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct poiAttribute_t
+ {
+ std::string name;
+ ushort type;
+ std::string value;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > DBus_poiAttribute_t;
+
+
+ DBus_poiAttribute(){
+ m_poiAttribute.name = "";
+ m_poiAttribute.type = 0;
+ m_poiAttribute.value = "";
+ }
+
+ ~DBus_poiAttribute(){}
+
+ void set(poiAttribute_t value){
+ m_poiAttribute.name = value.name;
+ m_poiAttribute.type = value.type;
+ m_poiAttribute.value = value.value;
+ }
+
+ poiAttribute_t get(){
+ return(m_poiAttribute);
+ }
+
+ void setDBus(DBus_poiAttribute_t value){
+ std::ostringstream oss;
+ uint16_t number;
+ m_poiAttribute.name = value._1;
+ m_poiAttribute.type = value._2;
+ if (m_poiAttribute.type == GENIVI_POISERVICE_STRING)
+ m_poiAttribute.value = value._3.reader().get_string();
+ else
+ { // it's a GENIVI_POISERVICE_INTEGER
+ number = value._3.reader().get_uint16();
+ oss << number;
+ m_poiAttribute.value = oss.str(); //convert to a string
+ }
+ }
+
+ DBus_poiAttribute_t getDBus(){
+ DBus_poiAttribute_t return_value;
+ std::istringstream iss;
+ uint16_t number;
+ return_value._1 = m_poiAttribute.name;
+ return_value._2 = m_poiAttribute.type;
+ if (m_poiAttribute.type == GENIVI_POISERVICE_STRING)
+ return_value._3 = createVariantString(m_poiAttribute.value);
+ else
+ {
+ iss.str(m_poiAttribute.value);
+ iss >> number; //get the numeric value
+ return_value._3 = createVariantUint16(number);
+ }
+
+ return(return_value);
+ }
+
+private:
+ poiAttribute_t m_poiAttribute;
+};
+
+class DBus_poiDetails : DBus_dataFormatConverter //(usddi)
+{
+public:
+ struct poiDetails_t
+ {
+ uint id;
+ std::string name;
+ double latitude;
+ double longitude;
+ int altitude;
+ };
+ typedef ::DBus::Struct< uint32_t, std::string, double, double, int32_t > DBus_poiDetails_t;
+
+ DBus_poiDetails(){
+ m_poiDetails.id = 0;
+ m_poiDetails.name = "";
+ m_poiDetails.latitude = 48.85792; //by default center of Paris
+ m_poiDetails.longitude = 2.3383145;
+ m_poiDetails.altitude = 0;
+ }
+
+ ~DBus_poiDetails(){}
+
+ void set(poiDetails_t value){
+ m_poiDetails.id = value.id;
+ m_poiDetails.name = value.name;
+ m_poiDetails.latitude = value.latitude;
+ m_poiDetails.longitude = value.longitude;
+ m_poiDetails.altitude = value.altitude;
+ }
+
+ poiDetails_t get(){
+ return(m_poiDetails);
+ }
+
+ void setDBus(DBus_poiDetails_t value){
+ m_poiDetails.id = value._1;
+ m_poiDetails.name = value._2;
+ m_poiDetails.latitude = value._3;
+ m_poiDetails.longitude = value._4;
+ m_poiDetails.altitude = value._5;
+ }
+
+ DBus_poiDetails_t getDBus(){
+ DBus_poiDetails_t return_value;
+ return_value._1 = m_poiDetails.id;
+ return_value._2 = m_poiDetails.name;
+ return_value._3 = m_poiDetails.latitude;
+ return_value._4 = m_poiDetails.longitude;
+ return_value._5 = m_poiDetails.altitude;
+ return(return_value);
+ }
+
+private:
+ poiDetails_t m_poiDetails;
+};
+
+class DBus_searchResult : DBus_dataFormatConverter //(uuqa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct searchResult_t
+ {
+ uint id;
+ uint distance;
+ ushort route_status;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< uint32_t, uint32_t, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_searchResult_t;
+
+ DBus_searchResult(){
+ DBus_poiAttribute attrib;
+ m_searchResult.id = 0;
+ m_searchResult.distance = 0;
+ m_searchResult.route_status = 0;
+ m_searchResult.attributes.clear();
+ m_searchResult.attributes.push_back(attrib.get());
+ }
+
+ ~DBus_searchResult(){
+ }
+
+ void set(searchResult_t value){
+ size_t index;
+ m_searchResult.id = value.id;
+ m_searchResult.distance = value.distance;
+ m_searchResult.route_status = value.route_status;
+ m_searchResult.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_searchResult.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ searchResult_t get(){
+ return(m_searchResult);
+ }
+
+ void setDBus(DBus_searchResult_t value){
+ size_t index;
+ DBus_poiAttribute attrib;
+ m_searchResult.id = value._1;
+ m_searchResult.distance = value._2;
+ m_searchResult.route_status = value._3;
+ m_searchResult.attributes.clear();
+ for (index=0;index<value._4.size();index++)
+ {
+ attrib.setDBus(value._4.at(index));
+ m_searchResult.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_searchResult_t getDBus(){
+ DBus_searchResult_t return_value;
+ size_t index;
+ DBus_poiAttribute attrib;
+ return_value._1 = m_searchResult.id;
+ return_value._2 = m_searchResult.distance;
+ return_value._3 = m_searchResult.route_status;
+ return_value._4.clear();
+ for (index=0;index<m_searchResult.attributes.size();index++)
+ {
+ attrib.set(m_searchResult.attributes.at(index));
+ return_value._4.push_back(attrib.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ searchResult_t m_searchResult;
+};
+
+class DBus_searchResultDetails : DBus_dataFormatConverter // ((usddi)aqa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct searchResultDetails_t
+ {
+ DBus_poiDetails::poiDetails_t details;
+ std::vector<ushort> categories;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, double, double, int32_t >, std::vector< uint16_t >, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_searchResultDetails_t;
+
+ DBus_searchResultDetails(){
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+ m_searchResultDetails.details = details.get();
+ m_searchResultDetails.categories.clear();
+ m_searchResultDetails.categories.push_back(0); //one element by default
+ m_searchResultDetails.attributes.clear();
+ m_searchResultDetails.attributes.push_back(attrib.get()); //one element by default
+ }
+
+ ~DBus_searchResultDetails(){}
+
+ void set(searchResultDetails_t value){
+ size_t index;
+ m_searchResultDetails.details = value.details;
+ m_searchResultDetails.categories.clear();
+ for (index=0;index<value.categories.size();index++)
+ {
+ m_searchResultDetails.categories.push_back(value.categories.at(index));
+ }
+ m_searchResultDetails.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_searchResultDetails.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ searchResultDetails_t get(){
+ return(m_searchResultDetails);
+ }
+
+ void setDBus(DBus_searchResultDetails_t value){
+ size_t index;
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+
+ details.setDBus(value._1);
+ m_searchResultDetails.details = details.get();
+ m_searchResultDetails.categories.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ m_searchResultDetails.categories.push_back(value._2.at(index));
+ }
+ m_searchResultDetails.attributes.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ attrib.setDBus(value._3.at(index));
+ m_searchResultDetails.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_searchResultDetails_t getDBus(){
+ DBus_searchResultDetails_t return_value;
+ size_t index;
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+
+ details.set(m_searchResultDetails.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for (index=0;index<m_searchResultDetails.categories.size();index++)
+ {
+ return_value._2.push_back(m_searchResultDetails.categories.at(index));
+ }
+ return_value._3.clear();
+ for (index=0;index<m_searchResultDetails.attributes.size();index++)
+ {
+ attrib.set(m_searchResultDetails.attributes.at(index));
+ return_value._3.push_back(attrib.getDBus());
+ }
+
+ return(return_value);
+ }
+
+private:
+ searchResultDetails_t m_searchResultDetails;
+};
+
+class DBus_geoCoordinate3D : DBus_dataFormatConverter //(ddi)
+{
+public:
+ struct geoCoordinate3D_t
+ {
+ double latitude;
+ double longitude;
+ int altitude;
+ };
+ typedef ::DBus::Struct< double, double, int32_t > DBus_geoCoordinate3D_t;
+
+ DBus_geoCoordinate3D(){
+ m_geoCoordinate3D.latitude = 48.85792; //by default center of Paris
+ m_geoCoordinate3D.longitude = 2.3383145;
+ m_geoCoordinate3D.altitude = 0;
+ }
+
+ ~DBus_geoCoordinate3D(){}
+
+ void set(geoCoordinate3D_t value){
+ m_geoCoordinate3D.latitude = value.latitude;
+ m_geoCoordinate3D.longitude = value.longitude;
+ m_geoCoordinate3D.altitude = value.altitude;
+ }
+
+ geoCoordinate3D_t get(){
+ return(m_geoCoordinate3D);
+ }
+
+ void setDBus(DBus_geoCoordinate3D_t value){
+ m_geoCoordinate3D.latitude = value._1;
+ m_geoCoordinate3D.longitude = value._2;
+ m_geoCoordinate3D.altitude = value._3;
+ }
+
+ DBus_geoCoordinate3D_t getDBus(){
+ DBus_geoCoordinate3D_t return_value;
+ return_value._1 = m_geoCoordinate3D.latitude;
+ return_value._2 = m_geoCoordinate3D.longitude;
+ return_value._3 = m_geoCoordinate3D.altitude;
+ return(return_value);
+ }
+
+private:
+ geoCoordinate3D_t m_geoCoordinate3D;
+};
+
+class DBus_poiCAMDetails : DBus_dataFormatConverter // (usq(ddi)qa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct poiCAMDetails_t //no class used into this public structure
+ {
+ uint source_id;
+ std::string name;
+ ushort category;
+ DBus_geoCoordinate3D::geoCoordinate3D_t location;
+ ushort distance;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_poiCAMDetails_t;
+
+ DBus_poiCAMDetails(){
+ DBus_poiAttribute attrib;
+ DBus_geoCoordinate3D loc;
+
+ m_poiCAMDetails.source_id = 0;
+ m_poiCAMDetails.name = "";
+ m_poiCAMDetails.category = 0;
+ m_poiCAMDetails.location = loc.get();
+ m_poiCAMDetails.distance = 0;
+ m_poiCAMDetails.attributes.clear();
+ m_poiCAMDetails.attributes.push_back(attrib.get());
+ }
+
+ ~DBus_poiCAMDetails(){}
+
+ void set(poiCAMDetails_t value){
+ size_t index;
+
+ m_poiCAMDetails.source_id = value.source_id;
+ m_poiCAMDetails.name = value.name;
+ m_poiCAMDetails.category = value.category;
+ m_poiCAMDetails.location = value.location;
+ m_poiCAMDetails.distance = value.distance;
+ m_poiCAMDetails.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_poiCAMDetails.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ poiCAMDetails_t get(){
+ return(m_poiCAMDetails);
+ }
+
+ void setDBus(DBus_poiCAMDetails_t value){
+ size_t index;
+ DBus_geoCoordinate3D loc;
+ DBus_poiAttribute attrib;
+
+ m_poiCAMDetails.source_id = value._1;
+ m_poiCAMDetails.name = value._2;
+ m_poiCAMDetails.category = value._3;
+ loc.setDBus(value._4);
+ m_poiCAMDetails.location = loc.get();
+ m_poiCAMDetails.distance = value._5,
+ m_poiCAMDetails.attributes.clear();
+ for (index=0;index<value._6.size();index++)
+ {
+ attrib.setDBus(value._6.at(index));
+ m_poiCAMDetails.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_poiCAMDetails_t getDBus(){
+ DBus_poiCAMDetails_t return_value;
+ size_t index;
+ DBus_geoCoordinate3D loc;
+ DBus_poiAttribute attrib;
+
+ return_value._1 = m_poiCAMDetails.source_id;
+ return_value._2 = m_poiCAMDetails.name;
+ return_value._3 = m_poiCAMDetails.category;
+ loc.set(m_poiCAMDetails.location);
+ return_value._4 = loc.getDBus();
+ return_value._5 = m_poiCAMDetails.distance;
+ return_value._6.clear();
+ for (index=0;index<m_poiCAMDetails.attributes.size();index++)
+ {
+ attrib.set(m_poiCAMDetails.attributes.at(index));
+ return_value._6.push_back(attrib.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ poiCAMDetails_t m_poiCAMDetails;
+};
+
+class DBus_CAMcategoryDetails : DBus_dataFormatConverter // (aqvssv) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategoryDetails_t
+ {
+ std::vector<ushort> parents_id;
+ std::string icons;
+ std::string name;
+ std::string short_desc;
+ std::string media;
+ };
+
+ typedef ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant > DBus_CAMcategoryDetails_t;
+
+ DBus_CAMcategoryDetails(){
+ m_CAMcategoryDetails.parents_id.clear();
+ m_CAMcategoryDetails.parents_id.push_back(0); //one element by default
+ m_CAMcategoryDetails.icons = "";
+ m_CAMcategoryDetails.name = "";
+ m_CAMcategoryDetails.short_desc = "";
+ m_CAMcategoryDetails.media = "";
+ }
+
+ ~DBus_CAMcategoryDetails(){}
+
+ void set(CAMcategoryDetails_t value){
+ size_t index;
+ m_CAMcategoryDetails.parents_id.clear();
+ for (index=0;index<value.parents_id.size();index++)
+ {
+ m_CAMcategoryDetails.parents_id.push_back(value.parents_id.at(index));
+ }
+ m_CAMcategoryDetails.icons = value.icons;
+ m_CAMcategoryDetails.name = value.name;
+ m_CAMcategoryDetails.short_desc = value.short_desc;
+ m_CAMcategoryDetails.media = value.media;
+ }
+
+ CAMcategoryDetails_t get(){
+ return(m_CAMcategoryDetails);
+ }
+
+ void setDBus(DBus_CAMcategoryDetails_t value){
+ size_t index;
+ m_CAMcategoryDetails.parents_id.clear();
+ for (index=0;index<value._1.size();index++)
+ {
+ m_CAMcategoryDetails.parents_id.push_back(value._1.at(index));
+ }
+ m_CAMcategoryDetails.icons = value._2.reader().get_string();
+ m_CAMcategoryDetails.name = value._3;
+ m_CAMcategoryDetails.short_desc = value._4;
+ m_CAMcategoryDetails.media = value._5.reader().get_string();
+ }
+
+ DBus_CAMcategoryDetails_t getDBus(){
+ DBus_CAMcategoryDetails_t return_value;
+ size_t index;
+ return_value._1.clear();
+ for (index=0;index<m_CAMcategoryDetails.parents_id.size();index++)
+ {
+ return_value._1.push_back(m_CAMcategoryDetails.parents_id.at(index));
+ }
+ return_value._2 = createVariantString(m_CAMcategoryDetails.icons);
+ return_value._3 = m_CAMcategoryDetails.name;
+ return_value._4 = m_CAMcategoryDetails.short_desc;
+ return_value._5 = createVariantString(m_CAMcategoryDetails.media);
+ return(return_value);
+ }
+
+private:
+ CAMcategoryDetails_t m_CAMcategoryDetails;
+};
+
+class DBus_CAMcategory : DBus_dataFormatConverter // ((aqvssv)a(sqa(qs))a(qs))) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategory_t //no class used into this public structure
+ {
+ DBus_CAMcategoryDetails::CAMcategoryDetails_t details;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_CAMcategory_t;
+
+ DBus_CAMcategory(){
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategory.details = details.get();
+ m_CAMcategory.attributes.clear();
+ m_CAMcategory.attributes.push_back(attrib.get()); //one element by default
+ m_CAMcategory.sortOptions.clear();
+ m_CAMcategory.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~DBus_CAMcategory(){}
+
+ void set(CAMcategory_t value){
+ size_t index;
+ m_CAMcategory.details = value.details;
+ m_CAMcategory.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_CAMcategory.attributes.push_back(value.attributes.at(index));
+ }
+ m_CAMcategory.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_CAMcategory.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ CAMcategory_t get(){
+ return(m_CAMcategory);
+ }
+
+ void setDBus(DBus_CAMcategory_t value){
+ size_t index;
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.setDBus(value._1);
+ m_CAMcategory.details = details.get();
+ m_CAMcategory.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_CAMcategory.attributes.push_back(attrib.get());
+ }
+ m_CAMcategory.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_CAMcategory.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_CAMcategory_t getDBus(){
+ DBus_CAMcategory_t return_value;
+ size_t index;
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.set(m_CAMcategory.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for(index=0;index<m_CAMcategory.attributes.size();index++)
+ {
+ attrib.set(m_CAMcategory.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_CAMcategory.sortOptions.size();index++)
+ {
+ sortOption.set(m_CAMcategory.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ CAMcategory_t m_CAMcategory;
+};
+
+class DBus_CAMcategoryUpdate : DBus_dataFormatConverter // (qa(sqa(qs))a(qs)) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategoryUpdate_t //no class used into this public structure
+ {
+ ushort unique_id;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_CAMcategoryUpdate_t;
+
+ DBus_CAMcategoryUpdate(){
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategoryUpdate.unique_id = 0;
+ m_CAMcategoryUpdate.attributes.clear();
+ m_CAMcategoryUpdate.attributes.push_back(attrib.get()); //one element by default
+ m_CAMcategoryUpdate.sortOptions.clear();
+ m_CAMcategoryUpdate.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~DBus_CAMcategoryUpdate(){}
+
+ void set(CAMcategoryUpdate_t value){
+ size_t index;
+ m_CAMcategoryUpdate.unique_id = value.unique_id;
+ m_CAMcategoryUpdate.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_CAMcategoryUpdate.attributes.push_back(value.attributes.at(index));
+ }
+ m_CAMcategoryUpdate.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_CAMcategoryUpdate.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ CAMcategoryUpdate_t get(){
+ return(m_CAMcategoryUpdate);
+ }
+
+ void setDBus(DBus_CAMcategoryUpdate_t value){
+ size_t index;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategoryUpdate.unique_id = value._1;
+ m_CAMcategoryUpdate.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_CAMcategoryUpdate.attributes.push_back(attrib.get());
+ }
+ m_CAMcategoryUpdate.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_CAMcategoryUpdate.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_CAMcategoryUpdate_t getDBus(){
+ DBus_CAMcategoryUpdate_t return_value;
+ size_t index;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ return_value._1 = m_CAMcategoryUpdate.unique_id;
+ return_value._2.clear();
+ for(index=0;index<m_CAMcategoryUpdate.attributes.size();index++)
+ {
+ attrib.set(m_CAMcategoryUpdate.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_CAMcategoryUpdate.sortOptions.size();index++)
+ {
+ sortOption.set(m_CAMcategoryUpdate.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ CAMcategoryUpdate_t m_CAMcategoryUpdate;
+};
+
+#define ALL_CATEGORIES 0
+#define INVALID_CATEGORY 0x00
+#define MAX_CATEGORIES 256 //to be improved
+#define CAM_CATEGORY_OFFSET 0x0100 //offset added to create the id of a category provided by a CAM (to be multiplied by the camId)
+#define CAM_ATTRIBUTE_OFFSET 0x0100 //offset added to create the id of an attribute provided by a CAM (to be multiplied by the camId)
+
+#endif
diff --git a/src/poi-service/poi-server/database.cpp b/src/poi-service/poi-server/database.cpp
new file mode 100644
index 0000000..a36ed7d
--- /dev/null
+++ b/src/poi-service/poi-server/database.cpp
@@ -0,0 +1,259 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "database.h"
+#include <stdio.h>
+#include <iostream>
+
+/**
+ * \fn Database(const char* filename)
+ * \brief Constructor.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return void.
+ */
+Database::Database(const char* filename)
+{
+ database = NULL;
+ open(filename); //no check for valid file
+ m_filename = filename;
+}
+
+/**
+ * \fn ~Database()
+ * \brief Destructor.
+ *
+ * \param
+ * \return void.
+ */
+Database::~Database()
+{
+}
+
+/**
+ * \fn open(const char* filename)
+ * \brief Open the database.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return bool. -true if database consistant
+ */
+bool Database::open(const char* filename)
+{
+ if(sqlite3_open(filename, &database) == SQLITE_OK)
+ return true;
+
+ return false;
+}
+
+/**
+ * \fn schema()
+ * \brief Get the scheme of the database.
+ *
+ * \param
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::schema()
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command += " \"";
+ command += ".schema";
+ command += "\"";
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn add(const char* scheme_filename)
+ * \brief Add a scheme to the database.
+ *
+ * \param const char* scheme_filename -filename that contains the scheme
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::add(const char* scheme_filename)
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command = command + " < " + scheme_filename;
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn beginTransaction()
+ * \brief Begin a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::beginTransaction()
+{
+ char* errorMessage;
+ sqlite3_exec(database, "BEGIN TRANSACTION;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn appendTransaction(const char* query)
+ * \brief Append a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return void
+ */
+void Database::appendTransaction(const char* query)
+{
+ sqlite3_exec(database, query, NULL, NULL, NULL);
+}
+
+/**
+ * \fn commitTransaction()
+ * \brief Commit a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::commitTransaction()
+{
+ char* errorMessage;
+ sqlite3_exec(database, "COMMIT;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn query(const char* query)
+ * \brief Query a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return vector<vector<string> > -Result of the query
+ */
+vector<vector<string> > Database::query(const char* query)
+{
+ sqlite3_stmt *statement;
+ vector<vector<string> > results;
+
+ if(sqlite3_prepare_v2(database, query, -1, &statement, 0) == SQLITE_OK)
+ {
+ int cols = sqlite3_column_count(statement);
+ int result = 0;
+ while(true)
+ {
+ result = sqlite3_step(statement);
+
+ if(result == SQLITE_ROW)
+ {
+ vector<string> values;
+ for(int col = 0; col < cols; col++)
+ {
+ std::string val;
+ char * ptr = (char*)sqlite3_column_text(statement, col);
+ if(ptr)
+ {
+ val = ptr;
+ }
+ else val = ""; // this can be commented out since std::string val;
+ values.push_back(val); // now we will never push NULL
+ }
+ results.push_back(values);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sqlite3_finalize(statement);
+ }
+
+ string error = sqlite3_errmsg(database);
+ if(error != "not an error") cout << query << " " << error << endl;
+ return results;
+}
+
+/**
+ * \fn close()
+ * \brief Close the database.
+ *
+ * \param
+ * \return void
+ */
+void Database::close()
+{
+ sqlite3_close(database);
+}
+
+/**
+ * \fn callback(void *NotUsed, int argc, char **argv, char **azColName)
+ * \brief Call back function for database access.
+ *
+ * \param void *NotUsed
+ * \param int argc
+ * \param char **argv
+ * \param char **azColName
+ * \return int
+ */
+int Database::callback(void *NotUsed, int argc, char **argv, char **azColName)
+{
+ NotUsed=0;
+ int i;
+ for(i=0; i<argc; i++){
+ printf("%s = %s\n", azColName[i], argv[i] ? argv[i]: "NULL");
+ }
+ printf("\n");
+ return 0;
+}
+
+
diff --git a/src/poi-service/poi-server/database.h b/src/poi-service/poi-server/database.h
new file mode 100644
index 0000000..1a7c89c
--- /dev/null
+++ b/src/poi-service/poi-server/database.h
@@ -0,0 +1,58 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __DATABASE_H__
+#define __DATABASE_H__
+
+#include <string>
+#include <vector>
+#include <sqlite3.h>
+
+using namespace std;
+
+class Database
+{
+ public:
+ Database(const char* filename);
+ ~Database();
+
+ bool open(const char* filename);
+ bool schema();
+ bool add(const char* scheme_filename);
+ vector<vector<string> > query(const char* query);
+ void close();
+ void beginTransaction();
+ void appendTransaction(const char* query);
+ void commitTransaction();
+
+ private:
+ static int callback(void *NotUsed, int argc, char **argv, char **azColName);
+ sqlite3 *database;
+ std::string m_filename;
+};
+
+#endif
diff --git a/src/poi-service/poi-server/main.cpp b/src/poi-service/poi-server/main.cpp
new file mode 100644
index 0000000..a580b9e
--- /dev/null
+++ b/src/poi-service/poi-server/main.cpp
@@ -0,0 +1,2136 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file main.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <iostream>
+#include <cmath>
+#include <typeinfo>
+#include <getopt.h>
+#include <dbus-c++/glib-integration.h>
+
+#include "poi-server-class.h"
+
+static const char* poiSearch_SERVICE_NAME = "org.genivi.poiservice.POISearch";
+static const char* poiSearch_OBJECT_PATH = "/org/genivi/poiservice/POISearch";
+static const char* poiContentAccess_SERVICE_NAME = "org.genivi.poiservice.POIContentAccess";
+static const char* poiContentAccess_OBJECT_PATH = "/org/genivi/poiservice/POIContentAccess";
+static const char* contentAccessModule_OBJECT_PATH = "/org/genivi/poiservice/POIContentAccessModule";
+static const char* EnhancedPosition_SERVICE_NAME = "org.genivi.positioning.EnhancedPosition";
+static const char* EnhancedPosition_OBJECT_PATH = "/position";
+static const char* Routing_SERVICE_NAME = "org.genivi.navigationcore.Routing";
+static const char* Routing_OBJECT_PATH = "/org/genivi/navigationcore";
+
+// SQL requests
+static const char* SQL_REQUEST_GET_AVAILABLE_CATEGORIES = "SELECT Id,name FROM poicategory WHERE Id IN (SELECT poicategory_Id FROM belongsto GROUP BY poicategory_Id);";
+static const char* SQL_REQUEST_GET_CATEGORY_ATTRIBUTES = "SELECT Id,name FROM poiattribute WHERE Id IN (SELECT poiattribute_Id FROM hasattribute WHERE poicategory_Id IS ";
+static const char* SQL_REQUEST_GET_AVAILABLE_AREA = "SELECT leftlongitude,bottomlatitude,rightlongitude,toplatitude FROM availablearea;";
+static const char* SQL_REQUEST_GET_PARENT_CATEGORIES = "SELECT parentId FROM poicategorykinship WHERE childId IS ";
+static const char* SQL_REQUEST_GET_CHILD_CATEGORIES = "SELECT childId FROM poicategorykinship WHERE parentId IS ";
+static const char* SQL_REQUEST_GET_CATEGORY_ICONS = "SELECT url,format FROM iconset WHERE Id IS (SELECT iconset_Id FROM isdisplayedas WHERE poicategory_Id IS ";
+
+// DBus instances
+static DBus::Glib::BusDispatcher *dispatcher;
+static DBus::Connection *dbusConnection;
+static poiSearchServer *serverPoiSearch;
+static poiContentAccessServer *serverpoiContentAccess;
+static EnhancedPosition *clientEnhancedPosition;
+static Routing *clientRouting;
+
+// class Routing
+
+Routing::Routing(DBus::Connection &connection)
+ : DBus::ObjectProxy(connection,Routing_OBJECT_PATH,Routing_SERVICE_NAME)
+{
+}
+
+Routing::~Routing()
+{
+}
+
+void Routing::RouteDeleted(const uint32_t &routeHandle)
+{
+
+}
+
+void Routing::RouteCalculationCancelled(const uint32_t &routeHandle)
+{
+
+}
+
+void Routing::RouteCalculationSuccessful(const uint32_t& routeHandle, const std::map< uint16_t, uint16_t >& unfullfilledPreferences)
+{
+
+}
+
+void Routing::RouteCalculationFailed(const uint32_t& routeHandle, const uint16_t& errorCode, const std::map< uint16_t, uint16_t >& unfullfilledPreferences)
+{
+
+}
+
+void Routing::RouteCalculationProgressUpdate(const uint32_t& routeHandle, const uint16_t &status, const uint8_t &percentage)
+{
+
+}
+
+void Routing::AlternativeRoutesAvailable (const std::vector<uint32_t>& routeHandlesList)
+{
+
+}
+
+
+
+// class EnhancedPosition
+
+EnhancedPosition::EnhancedPosition(DBus::Connection &connection)
+ : DBus::ObjectProxy(connection,EnhancedPosition_OBJECT_PATH,EnhancedPosition_SERVICE_NAME)
+{
+ m_currentLocation.latitude = 48.85792; //by default center of Paris
+ m_currentLocation.longitude = 2.3383145;
+ m_currentLocation.altitude = 0;
+}
+EnhancedPosition::~EnhancedPosition()
+{
+}
+void EnhancedPosition::PositionUpdate(const std::vector< uint16_t >& changedValues)
+{
+ std::map< uint16_t, ::DBus::Variant > reply;
+ std::map< uint16_t, ::DBus::Variant >::iterator iter;
+
+ reply = GetPosition();
+ iter = reply.find(GENIVI_NAVIGATIONCORE_LATITUDE);
+ if (iter != reply.end())
+ m_currentLocation.latitude = reply.at(GENIVI_NAVIGATIONCORE_LATITUDE);
+ iter = reply.find(GENIVI_NAVIGATIONCORE_LONGITUDE);
+ if (iter != reply.end())
+ m_currentLocation.longitude = reply.at(GENIVI_NAVIGATIONCORE_LONGITUDE);
+ iter = reply.find(GENIVI_NAVIGATIONCORE_ALTITUDE);
+ if (iter != reply.end())
+ m_currentLocation.altitude = reply.at(GENIVI_NAVIGATIONCORE_ALTITUDE);
+}
+
+void EnhancedPosition::RotationRateUpdate(const std::vector< uint16_t >& changedValues)
+{
+
+}
+
+void EnhancedPosition::AccuracyUpdate(const std::vector< uint16_t >& changedValues)
+{
+
+}
+
+void EnhancedPosition::SatelliteInfoUpdate(const std::vector< uint16_t >& changedValues)
+{
+
+}
+
+void EnhancedPosition::StatusUpdate(const std::vector< uint16_t >& changedValues)
+{
+
+}
+
+// Specific methods
+
+DBus_geoCoordinate3D::geoCoordinate3D_t EnhancedPosition::GetCurrentLocation()
+{
+ return(m_currentLocation);
+}
+
+// class contentAccessModule
+
+contentAccessModule::contentAccessModule(DBus::Connection &connection, const std::string& service)
+ : DBus::ObjectProxy(connection, contentAccessModule_OBJECT_PATH,service.c_str())
+{
+}
+
+contentAccessModule::~contentAccessModule()
+{
+}
+
+// class poiContentAccessServer
+
+poiContentAccessServer::poiContentAccessServer(DBus::Connection &connection)
+: DBus::ObjectAdaptor(connection, poiContentAccess_OBJECT_PATH)
+{
+ //version is hard coded
+ m_version._1 = 0;
+ m_version._2 = 4;
+ m_version._3 = 0;
+ m_version._4 = "25-10-2012";
+ m_camName = "";
+ m_camId = INVALID_HANDLE;
+ mp_clientcontentAccessModule = NULL;
+ m_poiSearchHandle = INVALID_HANDLE;
+ m_poiCategoriesAdded.clear();
+ m_poiCategoriesRegistered.clear();
+}
+
+poiContentAccessServer::~poiContentAccessServer()
+{
+ if (mp_clientcontentAccessModule)
+ delete(mp_clientcontentAccessModule);
+}
+
+uint8_t poiContentAccessServer::RegisterContentAccessModule(const std::string& moduleName)
+{
+ // the POC is limited to the management of one CAM !
+ if (m_camId != INVALID_HANDLE)
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+ m_camName = moduleName;
+ m_camId = VALID_HANDLE;
+ // create a client for contentAccessModule
+ mp_clientcontentAccessModule = new contentAccessModule(*dbusConnection, moduleName);
+ // connect it to the POISearch server
+ ConnectTocontentAccessModuleClient(mp_clientcontentAccessModule);
+ }
+ return(m_camId);
+}
+
+void poiContentAccessServer::UnRegisterContentAccessModule(const uint8_t& camId)
+{
+ if ((m_camId == INVALID_HANDLE) || (camId != m_camId))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+ m_poiCategoriesRegistered.clear();
+ m_poiCategoriesAdded.clear();
+ m_camName = "";
+ m_camId = INVALID_HANDLE;
+ ConnectTocontentAccessModuleClient(NULL);
+ delete(mp_clientcontentAccessModule);
+ }
+}
+
+void poiContentAccessServer::RegisterPoiCategories(const uint8_t& camId, const std::vector< uint16_t >& poiCategories)
+{
+ std::vector< DBus_categoryReason::DBus_categoryReason_t > poiCategoriesAndReason;
+ DBus_categoryReason::categoryReason_t categoryAndReason;
+ DBus_categoryReason catAndReas;
+ size_t category_index;
+
+ if ((m_camId == INVALID_HANDLE) || (camId != m_camId))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+ if (m_poiCategoriesRegistered.size() < MAX_CATEGORIES)
+ { //limitation of categories managed
+ for (category_index=0;category_index<poiCategories.size();category_index++)
+ {
+ if (poiCategories.at(category_index) == (m_poiCategoriesAdded.at(category_index).id))
+ { //category id has been added before, so register it
+ m_poiCategoriesRegistered.push_back(m_poiCategoriesAdded.at(category_index));
+ categoryAndReason.id = m_poiCategoriesAdded.at(category_index).id;
+ categoryAndReason.reason = GENIVI_POISERVICE_ADDED;
+ catAndReas.set(categoryAndReason);
+ poiCategoriesAndReason.push_back(catAndReas.getDBus());
+ }
+ }
+ mp_poiSearch->CategoriesUpdated(poiCategoriesAndReason);
+ }
+ else
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMCategoryNotAvailable"); //to be discussed !
+ }
+}
+
+std::vector< uint16_t > poiContentAccessServer::AddCategories(const uint8_t& camId, const std::vector< DBus_CAMcategory::DBus_CAMcategory_t >& poiCategories)
+{
+ DBus_CAMcategory CAMcat;
+ DBus_CAMcategory::CAMcategory_t CAMCategory;
+ DBus_CAMcategoryDetails::CAMcategoryDetails_t details;
+ poi_category_t category;
+ category_attribute_t attribute;
+ std::vector<uint16_t> return_value;
+ size_t category_index,attribute_index;
+
+ return_value.clear();
+
+ if ((m_camId == INVALID_HANDLE) || (camId != m_camId))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+ if (m_poiCategoriesAdded.size() < MAX_CATEGORIES)
+ { //limitation of categories managed
+ for (category_index=0;category_index<poiCategories.size();category_index++)
+ {
+ CAMcat.setDBus(poiCategories.at(category_index));
+ CAMCategory = CAMcat.get();
+
+ details = CAMCategory.details;
+
+ category.id = (camId*CAM_CATEGORY_OFFSET) + category_index; //create an alias
+ category.name = details.name; // get the category name
+ category.icon = details.icons;
+ category.top_level = false; //additional categories, so false
+ category.attributeList.clear();
+ for (attribute_index=0;attribute_index<CAMCategory.attributes.size();attribute_index++)
+ {
+ attribute.name = (CAMCategory.attributes.at(attribute_index)).name;
+ attribute.id = (camId*CAM_ATTRIBUTE_OFFSET) + attribute_index;
+ attribute.isSearched = false;
+ category.attributeList.push_back(attribute);
+ }
+ m_poiCategoriesAdded.push_back(category);
+ return_value.push_back(category.id);
+ }
+ }
+ else
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMCategoriesOverflow"); //to be discussed !
+ }
+ return(return_value);
+}
+
+void poiContentAccessServer::UpdateCategories(const uint8_t& camId, const std::vector< DBus_CAMcategoryUpdate::DBus_CAMcategoryUpdate_t >& poiCategories)
+{
+ if ((m_camId == INVALID_HANDLE) || (camId != m_camId))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+
+ }
+}
+
+void poiContentAccessServer::RemoveCategories(const uint8_t& camId, const std::vector< uint16_t >& poiCategories)
+{
+ std::vector< DBus_categoryReason::DBus_categoryReason_t > poiCategoriesAndReason;
+ DBus_categoryReason::categoryReason_t categoryAndReason;
+ DBus_categoryReason catAndReas;
+ size_t category_index;
+
+ if ((m_camId == INVALID_HANDLE) || (camId != m_camId))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CAMNotAvailable"); //to be discussed !
+ else
+ {
+ if ((m_poiCategoriesAdded.size() > 0) && (poiCategories.size() > 0))
+ {
+ if (poiCategories.size() > m_poiCategoriesAdded.size())
+ sendDBusError("org.genivi.poiprovider.poiContentAccess.Error.CategoryError"); //to be discussed !
+ else
+ {
+ for (category_index=0;category_index<poiCategories.size();category_index++)
+ {
+ categoryAndReason.id = poiCategories.at(category_index); //prepare it before, because after it'll be erased !
+ categoryAndReason.reason = GENIVI_POISERVICE_REMOVED;
+ catAndReas.set(categoryAndReason);
+ if (removeCategoryFromTables(poiCategories.at(category_index)) == true)
+ poiCategoriesAndReason.push_back(catAndReas.getDBus());
+ }
+ //warn the clients
+ mp_poiSearch->CategoriesUpdated(poiCategoriesAndReason);
+ }
+ }
+ }
+}
+
+// Specific methods
+
+void poiContentAccessServer::ConnectTopoiSearchServer(poiSearchServer *poiSearch)
+{
+ mp_poiSearch = poiSearch; //link to the instance of poi search
+}
+
+void poiContentAccessServer::ConnectTocontentAccessModuleClient(contentAccessModule *client)
+{
+ mp_contentAccessModule = client; //link to the instance of contentAccessModule
+}
+
+DBus::Variant poiContentAccessServer::createVariantString(std::string str)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_string(str.c_str());
+ return var;
+}
+
+DBus::Variant poiContentAccessServer::createVariantUint16(uint16_t value)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_uint16(value);
+ return var;
+}
+
+bool poiContentAccessServer::GetRegisteredContentAccessModule(cam_t *cam)
+{
+ if (m_camId == INVALID_HANDLE)
+ return(false);
+ else
+ {
+ cam->id = m_camId;
+ cam->name = m_camName;
+ return(true);
+ }
+}
+
+bool poiContentAccessServer::GetRegisteredCategories(uint8_t camId, std::vector< DBus_categoryIdName::DBus_categoryIdName_t > *categoryList)
+{
+ DBus_categoryIdName::categoryIdName_t category;
+ DBus_categoryIdName cat;
+ size_t category_index;
+
+ if (camId != m_camId)
+ return(false);
+ else
+ { //only one cam managed
+ for (category_index=0;category_index<m_poiCategoriesRegistered.size();category_index++)
+ {
+ category.id.id = (m_poiCategoriesRegistered.at(category_index)).id;
+ category.name = (m_poiCategoriesRegistered.at(category_index)).name;
+ category.id.top_level = (m_poiCategoriesRegistered.at(category_index)).top_level;
+ cat.set(category);
+ categoryList->push_back(cat.getDBus());
+ }
+ return(true);
+ }
+}
+
+bool poiContentAccessServer::GetRegisteredCategoriesDetails(uint8_t camId, std::vector<DBus_category> *categoryList)
+{
+ DBus_category cat;
+ DBus_category::category_t category;
+ DBus_categoryDetails::categoryDetails_t categoryDetails;
+ DBus_categoryOperator::categoryOperator_t categoryOperator;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> categoryAttributeList;
+ DBus_categoryAttribute::categoryAttribute_t categoryAttribute;
+ std::vector<DBus_categorySortOption::categorySortOption_t> categorySortOptionList;;
+ DBus_categorySortOption::categorySortOption_t categorySortOption;;
+ uint16_t index;
+ size_t category_index;
+
+ if (camId != m_camId)
+ return(false);
+ else
+ { //only one cam managed
+ for (category_index=0;category_index<m_poiCategoriesRegistered.size();category_index++)
+ {
+ categoryDetails.id = (m_poiCategoriesRegistered.at(category_index)).id;
+ categoryDetails.parents_id.clear();
+
+ for (index=0;index<(m_poiCategoriesRegistered.at(category_index)).parentList.size();index++)
+ { //parents
+ categoryDetails.parents_id.push_back((m_poiCategoriesRegistered.at(category_index)).parentList.at(index));
+ }
+ categoryDetails.icons = (m_poiCategoriesRegistered.at(category_index)).icon;
+ categoryDetails.name = (m_poiCategoriesRegistered.at(category_index)).name;
+ categoryDetails.top_level = (m_poiCategoriesRegistered.at(category_index)).top_level;
+ categoryDetails.description = "no description available";
+ categoryDetails.media = "no media";
+ categoryAttributeList.clear();
+ for (index=0;index<((m_poiCategoriesRegistered.at(category_index)).attributeList.size());index++)
+ {
+ categoryAttribute.name = ((m_poiCategoriesRegistered.at(category_index)).attributeList.at(index)).name;
+ categoryAttribute.type = 0;
+ categoryAttribute.oper.clear();
+ categoryOperator.id = GENIVI_POISERVICE_EQUAL;
+ categoryOperator.name = "EQUAL";
+ categoryAttribute.oper.push_back(categoryOperator);
+ categoryAttributeList.push_back(categoryAttribute);
+ }
+ categorySortOptionList.clear();
+ categorySortOption.id = GENIVI_POISERVICE_SORT_DEFAULT;
+ categorySortOption.name = "DEFAULT";
+ categorySortOptionList.push_back(categorySortOption);
+
+ category.details = categoryDetails;
+ category.attributes = categoryAttributeList;
+ category.sortOptions = categorySortOptionList;
+ cat.set(category);
+ categoryList->push_back(cat);
+ }
+ return(true);
+ }
+}
+
+void poiContentAccessServer::ResetRegisteredSearchCategoriesFlags(uint8_t camId)
+{
+ size_t index;
+
+ if (camId == m_camId)
+ { //only one cam managed
+ //firstly clean up the list used for the search
+ m_poiCategories.clear();
+ for (index=0;index<m_poiCategoriesRegistered.size();index++)
+ {
+ (m_poiCategoriesRegistered.at(index)).isSearch = false;
+ }
+ }
+}
+
+void poiContentAccessServer::ResetRegisteredAttributeCategoriesFlags(uint8_t camId)
+{
+ size_t index,sub_index;
+
+ if (camId == m_camId)
+ { //only one cam managed
+ //firstly clean up the list used for the search
+ m_poiAttributes.clear();
+ for (index=0;index<m_poiCategoriesRegistered.size();index++)
+ {
+ for (sub_index=0;sub_index<((m_poiCategoriesRegistered.at(index)).attributeList).size();sub_index++)
+ (m_poiCategoriesRegistered.at(index)).attributeList.at(sub_index).isSearched =false;
+ }
+ }
+}
+
+void poiContentAccessServer::SetRegisteredSearchCategory(uint8_t camId, DBus_categoryRadius::categoryRadius_t category)
+{
+ size_t index;
+ DBus_categoryRadius catRad;
+
+ if (camId == m_camId)
+ { //only one cam managed
+ //firstly clean up the list used for the search
+ m_poiCategories.clear();
+ for (index=0;index<m_poiCategoriesRegistered.size();index++)
+ {
+ if ((m_poiCategoriesRegistered.at(index)).id == category.id)
+ {
+ (m_poiCategoriesRegistered.at(index)).isSearch = true;
+ (m_poiCategoriesRegistered.at(index)).id= category.id;
+ (m_poiCategoriesRegistered.at(index)).radius = category.radius;
+ catRad.set(category);
+ m_poiCategories.push_back(catRad.getDBus()); //populate the list used for the search
+ }
+ }
+ }
+}
+
+void poiContentAccessServer::SetRegisteredAttributeCategoryFlag(uint8_t camId,uint32_t categoryId, std::string attributeName, uint16_t attributeId)
+{
+ size_t index, sub_index;
+ DBus_attributeDetails attrib;
+ DBus_attributeDetails::attributeDetails_t attribute;
+
+ if (camId == m_camId)
+ { //only one cam managed
+
+ //default setting of attribute
+ attribute = attrib.get();
+
+ for (index=0;index<m_poiCategoriesRegistered.size();index++)
+ {
+ if ((m_poiCategoriesRegistered.at(index)).id == categoryId)
+ {
+ for (sub_index=0;sub_index<((m_poiCategoriesRegistered.at(index)).attributeList).size();sub_index++)
+ {
+ if ((m_poiCategoriesRegistered.at(index)).attributeList.at(sub_index).name == attributeName)
+ {
+ (m_poiCategoriesRegistered.at(index)).attributeList.at(sub_index).isSearched =true;
+ attribute.id = attributeId;
+ attribute.attribute.name = attributeName;
+ attribute.poiCategory = categoryId;
+ attrib.set(attribute);
+ m_poiAttributes.push_back(attrib.getDBus());
+ }
+ }
+ }
+ }
+ }
+}
+
+void poiContentAccessServer::SetLanguage(std::string LanguageCode, std::string CountryCode)
+{
+ if (m_camId != INVALID_HANDLE)
+ { //only one cam managed
+ mp_contentAccessModule->SetLanguage(LanguageCode,CountryCode);
+ }
+}
+
+void poiContentAccessServer::SetPoiSearchHandle(uint8_t poiSearchHandle)
+{
+ m_poiSearchHandle = poiSearchHandle;
+}
+
+void poiContentAccessServer::ResetPoiSearchHandle()
+{
+ m_poiSearchHandle = INVALID_HANDLE;
+}
+
+void poiContentAccessServer::PoiSearchCanceled(uint8_t poiSearchHandle)
+{
+ m_poiTable.clear();
+ m_poiDetailsTable.clear();
+ mp_contentAccessModule->PoiSearchCanceled(poiSearchHandle);
+}
+
+DBus_poiCAMDetails::DBus_poiCAMDetails_t poiContentAccessServer::GetResultPoi(uint16_t index)
+{
+ return(m_poiTable.at(index));
+}
+
+DBus_searchResultDetails::DBus_searchResultDetails_t poiContentAccessServer::GetPoiDetails(uint32_t id)
+{
+ uint16_t index;
+ bool isPOIFound;
+ DBus_searchResultDetails searchResDet;
+ DBus_searchResultDetails::searchResultDetails_t searchResDetails;
+ isPOIFound = false;
+ index=0;
+ while ((isPOIFound == false) && (index<m_poiDetailsTable.size()))
+ {
+ searchResDet.setDBus(m_poiDetailsTable.at(index));
+ searchResDetails = searchResDet.get();
+ if (searchResDetails.details.id == id)
+ isPOIFound = true;
+ else
+ index++;
+ }
+ return(m_poiDetailsTable.at(index));
+}
+
+uint16_t poiContentAccessServer::searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString)
+{
+ uint16_t maxSize;
+ uint16_t sortOption;
+ DBus_geoCoordinate3D loc;
+ std::vector< std::string > attributes;
+ uint16_t statusValue;
+ uint16_t resultListSize;
+ std::vector<uint32_t> poiList;
+ uint16_t index;
+
+ resultListSize = 0;
+
+ if (m_camId != INVALID_HANDLE)
+ { //only one cam managed
+ m_poiTable.clear(); //clean up the table of poi
+ m_poiDetailsTable.clear(); //clean up the table of details
+
+ //prepare the data for the Poi Search on the CAM
+ maxSize = 255; //by default, to be discussed why it's needed to define it ?
+ sortOption = 0; //by default
+ loc.set(location);
+ mp_contentAccessModule->PoiSearchStarted(m_poiSearchHandle,maxSize,loc.getDBus(),m_poiCategories,m_poiAttributes,*inputString,sortOption);
+
+ //wait for end of search on the CAM
+ do
+ {
+ mp_contentAccessModule->ResultListRequested(m_camId,m_poiSearchHandle,attributes,statusValue,resultListSize,m_poiTable);
+ } while(statusValue == GENIVI_POISERVICE_SEARCHING);
+
+ //get details now !
+ //build list of poi to get
+ for (index=0;index<resultListSize;index++)
+ poiList.push_back(m_poiTable.at(index)._1);
+ m_poiDetailsTable = mp_contentAccessModule->PoiDetailsRequested(poiList);
+ }
+
+ return(resultListSize);
+}
+
+bool poiContentAccessServer::isAttributeAvailable(std::string attributeName)
+{
+ //to do
+ return(true);
+}
+
+bool poiContentAccessServer::removeCategoryFromTables(uint16_t id)
+{
+ size_t index;
+ bool isFound;
+
+ //check if category has been registered and remove it
+ isFound = false;
+ index = 0;
+ do {
+ if ((m_poiCategoriesRegistered.at(index)).id == id)
+ {
+ m_poiCategoriesRegistered.erase(m_poiCategoriesRegistered.begin()+index);
+ isFound = true;
+ }
+ else
+ index++;
+ } while ((isFound==false) && (index<m_poiCategoriesRegistered.size()));
+
+ if (isFound == true)
+ {
+ //remove the category that has been added
+ isFound = false;
+ index = 0;
+ do {
+ if ((m_poiCategoriesAdded.at(index)).id == id)
+ {
+ m_poiCategoriesAdded.erase(m_poiCategoriesAdded.begin()+index);
+ isFound = true;
+ }
+ else
+ index++;
+ } while ((isFound==false) && (index<m_poiCategoriesAdded.size()));
+ return(true);
+ }
+ return(false);
+}
+
+void poiContentAccessServer::sendDBusError(const char* message)
+{
+ //todo DBus::ErrorInvalidArgs( throw ??
+ throw DBus::ErrorFailed(message);
+}
+
+// class poiSearchServer
+
+poiSearchServer::poiSearchServer(DBus::Connection &connection, const char* poiDatabaseFileName, poiContentAccessServer* poiContentAccess)
+ : DBus::ObjectAdaptor(connection, poiSearch_OBJECT_PATH)
+ {
+ std::string sqlQuery; //SQL request on database
+ std::ostringstream strStream; //temporary stream used for transformation into string
+ vector<vector<string> > query_result, additionnal_query_result;
+ vector<string> query_line, additionnal_query_line;
+ size_t index,sub_index;
+ category_attribute_t attribute;
+ uint16_t value;
+ uint16_t parent,child;
+
+ //version is hard coded
+ DBus_version::version_t version;
+ version.major = 1;
+ version.minor = 0;
+ version.micro = 0;
+ version.date = "19-12-2012";
+ m_version.set(version);
+ m_languageCode = "fra"; //french by default (ISO 639-2)
+ m_countryCode = "FRA"; //france by default (ISO 3166-1 alpha-3)
+ m_poiSearchHandle = INVALID_HANDLE;
+ m_poiSearchProximity = false; //by default search around the current location
+ mp_database = new Database(poiDatabaseFileName);
+ mp_poiContentAccess = poiContentAccess;
+ mp_dbusConnection = &connection;
+ m_availableCategories = 0;
+ m_rootCategory = 0;
+ m_searchStatus = GENIVI_POISERVICE_NOT_STARTED;
+ m_routeHandle = INVALID_HANDLE;
+
+ // all the pois and the related stuff are included into the database at the startup
+ // so we can update some tables into the constructor
+
+ // retrieve the available categories (the ones that have at least one record)
+ query_result = mp_database->query(SQL_REQUEST_GET_AVAILABLE_CATEGORIES);
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ { // Id,name
+ m_availableCategories = query_result.size(); //store the number of categories
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ // read the result of the query and store it
+ query_line = query_result.at(index);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ m_availableCategoryTable[index].id = value;
+
+ // retrieve the associated icons (for the moment, just one)
+ sqlQuery = SQL_REQUEST_GET_CATEGORY_ICONS;
+ strStream.str("");
+ strStream << value;
+ sqlQuery += strStream.str();
+ sqlQuery += ");";
+ additionnal_query_result = mp_database->query(sqlQuery.c_str());
+ if (additionnal_query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ additionnal_query_line = additionnal_query_result.at(0);
+ m_availableCategoryTable[index].icon = additionnal_query_line[0] + '.' + additionnal_query_line[1];
+ }
+
+ m_availableCategoryTable[index].name = query_line[1];
+
+ // retrieve the associated attributes
+ sqlQuery = SQL_REQUEST_GET_CATEGORY_ATTRIBUTES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ");";
+ additionnal_query_result = mp_database->query(sqlQuery.c_str());
+ if (additionnal_query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ for (sub_index = 0; sub_index <additionnal_query_result.size(); sub_index++)
+ {
+ additionnal_query_line = additionnal_query_result.at(sub_index);
+ fromString<ushort>(attribute.id,additionnal_query_line[0], std::dec);
+ attribute.name = additionnal_query_line[1];
+ attribute.isSearched = false;
+ m_availableCategoryTable[index].attributeList.push_back(attribute);
+ }
+ }
+ m_availableCategoryTable[index].top_level = true; //this POC only manages predefined categories
+ m_availableCategoryTable[index].isSearch = false; //for the moment no categories selected
+ }
+ }
+
+ //retrieve the parents of the categories
+ //root category is the only one that is its own parent
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ sqlQuery = SQL_REQUEST_GET_PARENT_CATEGORIES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ";";
+ query_result = mp_database->query(sqlQuery.c_str());
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ for (parent=0;parent<query_result.size();parent++)
+ {
+ query_line = query_result.at(parent);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ if (index == value)
+ m_rootCategory = index; //child is parent, so it's the root
+ m_availableCategoryTable[index].parentList.push_back(value);
+ }
+ }
+ }
+
+ //retrieve the children of the categories
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ sqlQuery = SQL_REQUEST_GET_CHILD_CATEGORIES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ";";
+ query_result = mp_database->query(sqlQuery.c_str());
+ if (query_result.empty())
+ {
+ //no child
+ }
+ else
+ {
+ for (child=0;child<query_result.size();child++)
+ {
+ query_line = query_result.at(child);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ m_availableCategoryTable[index].childList.push_back(value);
+ }
+ }
+ }
+
+ //retrieve the available area into the database
+ query_result = mp_database->query(SQL_REQUEST_GET_AVAILABLE_AREA);
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ // read the result of the query, for the moment only the first area !
+ query_line = query_result.at(0);
+ fromString<double>(m_leftBottomLocation.latitude,query_line[0], std::dec);
+ fromString<double>(m_leftBottomLocation.longitude,query_line[1], std::dec);
+ fromString<double>(m_rightTopLocation.latitude,query_line[2], std::dec);
+ fromString<double>(m_rightTopLocation.longitude,query_line[3], std::dec);
+ }
+ m_centerLocation.latitude = 48.85792; //by default center of Paris
+ m_centerLocation.longitude = 2.3383145;
+ m_centerLocation.altitude = 0;
+ }
+
+poiSearchServer::~poiSearchServer()
+ {
+ delete mp_database;
+ }
+
+DBus_version::DBus_version_t poiSearchServer::GetVersion()
+{
+ return(m_version.getDBus());
+}
+
+void poiSearchServer::GetLanguage(std::string& languageCode, std::string& countryCode)
+{
+ // in fact only one language and one country available
+ languageCode = m_languageCode;
+ countryCode = m_countryCode;
+}
+
+void poiSearchServer::SetLanguage(const std::string& languageCode, const std::string& countryCode)
+{
+ m_languageCode = languageCode;
+ m_countryCode = countryCode;
+}
+
+std::vector< ::DBus::Struct< uint16_t, bool > > poiSearchServer::ValidateCategories(const std::vector< uint16_t >& categories)
+{
+ std::vector< ::DBus::Struct< uint16_t, bool > > table;
+ return(table);
+}
+
+std::vector< DBus_categoryIdName::DBus_categoryIdName_t > poiSearchServer::GetAvailableCategories()
+{
+ std::vector< DBus_categoryIdName::DBus_categoryIdName_t > return_value;
+ std::vector< DBus_categoryIdName::DBus_categoryIdName_t > categoryCAMList;
+ DBus_categoryIdName::categoryIdName_t category;
+ DBus_categoryIdName cat;
+ uint16_t index;
+ cam_t cam;
+
+ // load categories from the embedded database
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ category.id.id = m_availableCategoryTable[index].id;
+ category.id.top_level = m_availableCategoryTable[index].top_level;
+ category.name = m_availableCategoryTable[index].name;
+ cat.set(category);
+ return_value.push_back(cat.getDBus());
+ }
+
+ // load categories from the additional database
+ if (mp_poiContentAccess->GetRegisteredContentAccessModule(&cam))
+ {
+ if (mp_poiContentAccess->GetRegisteredCategories(cam.id,&categoryCAMList) == true)
+ {
+ return_value.insert(return_value.end(),categoryCAMList.begin(),categoryCAMList.end());
+ }
+ }
+
+ return (return_value);
+}
+
+uint16_t poiSearchServer::GetRootCategory()
+{
+ return(m_rootCategory);
+}
+
+std::vector< DBus_categoryId::DBus_categoryId_t > poiSearchServer::GetChildrenCategories(const uint16_t& category)
+{
+ std::vector< DBus_categoryId::DBus_categoryId_t > return_value;
+ DBus_categoryId::categoryId_t child_category;
+ DBus_categoryId child_cat;
+ uint16_t index;
+ return_value.clear();
+ for (index=0;index<m_availableCategoryTable[category].childList.size();index++)
+ {
+ child_category.id = m_availableCategoryTable[category].childList[index];
+ child_category.top_level = m_availableCategoryTable[child_category.id].top_level;
+ child_cat.set(child_category);
+ return_value.push_back(child_cat.getDBus());
+ }
+ return(return_value);
+}
+
+std::vector< DBus_categoryId::DBus_categoryId_t > poiSearchServer::GetParentCategories(const uint16_t& category)
+{
+ std::vector< DBus_categoryId::DBus_categoryId_t > return_value;
+ DBus_categoryId::categoryId_t parent_category;
+ DBus_categoryId parent_cat;
+ uint16_t index;
+ return_value.clear();
+ for (index=0;index<m_availableCategoryTable[category].parentList.size();index++)
+ {
+ parent_category.id = m_availableCategoryTable[category].parentList[index];
+ parent_category.top_level = m_availableCategoryTable[parent_category.id].top_level;
+ parent_cat.set(parent_category);
+ return_value.push_back(parent_cat.getDBus());
+ }
+ return(return_value);
+}
+
+std::vector< DBus_category::DBus_category_t > poiSearchServer::GetCategoriesDetails(const std::vector< uint16_t >& categories)
+{
+ std::vector<DBus_category::DBus_category_t > return_value;
+ std::vector<DBus_category> categoryCAMList;
+ DBus_category cat;
+ DBus_category::category_t category;
+ DBus_categoryDetails::categoryDetails_t categoryDetails;
+ DBus_categoryOperator::categoryOperator_t categoryOperator;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> categoryAttributeList;
+ DBus_categoryAttribute::categoryAttribute_t categoryAttribute;
+ std::vector<DBus_categorySortOption::categorySortOption_t> categorySortOptionList;;
+ DBus_categorySortOption::categorySortOption_t categorySortOption;;
+ size_t index,sub_index;
+ uint16_t category_index;
+ cam_t cam;
+
+ // load categories details from the embedded database
+ index=0;
+ return_value.clear();
+ while ((index<categories.size())&&(index < m_availableCategories))
+ {
+ if ( isCategoryAvailable(categories.at(index),&category_index) == true)
+ { //category found into the embedded data!
+ categoryDetails.id = m_availableCategoryTable[category_index].id;
+ categoryDetails.parents_id.clear();
+
+ for (sub_index=0;sub_index<m_availableCategoryTable[category_index].parentList.size();sub_index++)
+ { //parents
+ categoryDetails.parents_id.push_back(m_availableCategoryTable[category_index].parentList.at(sub_index));
+ }
+ categoryDetails.icons = m_availableCategoryTable[category_index].icon;
+ categoryDetails.name = m_availableCategoryTable[category_index].name;
+ categoryDetails.top_level = m_availableCategoryTable[category_index].top_level;
+ categoryDetails.description = "no description available";
+ categoryDetails.media = "no media";
+ categoryAttributeList.clear();
+ //scan the attributes
+ for (sub_index=0;sub_index<m_availableCategoryTable[category_index].attributeList.size();sub_index++)
+ {
+ categoryAttribute.name = (m_availableCategoryTable[category_index].attributeList.at(sub_index)).name;
+ categoryAttribute.type = 0;
+ categoryAttribute.oper.clear();
+ categoryOperator.id = GENIVI_POISERVICE_EQUAL;
+ categoryOperator.name = "EQUAL";
+ categoryAttribute.oper.push_back(categoryOperator);
+ categoryAttributeList.push_back(categoryAttribute);
+ }
+
+ categorySortOptionList.clear();
+ categorySortOption.id = GENIVI_POISERVICE_SORT_DEFAULT;
+ categorySortOption.name = "DEFAULT";
+ categorySortOptionList.push_back(categorySortOption);
+
+ category.details = categoryDetails;
+ category.attributes = categoryAttributeList;
+ category.sortOptions = categorySortOptionList;
+ cat.set(category);
+ return_value.push_back(cat.getDBus());
+ }
+ index++;
+ }
+
+ // load categories details from the additional database
+ if (mp_poiContentAccess->GetRegisteredContentAccessModule(&cam))
+ {
+ categoryCAMList.clear();
+ if (mp_poiContentAccess->GetRegisteredCategoriesDetails(cam.id,&categoryCAMList) == true)
+ {
+ for (index=0;index<categoryCAMList.size();index++)
+ return_value.push_back((categoryCAMList.at(index)).getDBus());
+ }
+ }
+
+ return (return_value);
+}
+
+uint8_t poiSearchServer::CreatePoiSearchHandle()
+{
+ // the POC is limited to the management of one handle !
+ if (m_poiSearchHandle != INVALID_HANDLE)
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ m_poiSearchHandle = VALID_HANDLE;
+ //set the handle for the content access server
+ mp_poiContentAccess->SetPoiSearchHandle(m_poiSearchHandle);
+ //set the language used by the content access server
+ mp_poiContentAccess->SetLanguage(m_languageCode,m_countryCode);
+ }
+ return (m_poiSearchHandle);
+}
+
+void poiSearchServer::DeletePoiSearchHandle(const uint8_t& poiSearchHandle)
+{
+ cam_t cam;
+ bool reply;
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ m_poiSearchHandle = INVALID_HANDLE;
+ reply = mp_poiContentAccess->GetRegisteredContentAccessModule(&cam);
+ if (reply == true)
+ {
+ //reset the handle
+ mp_poiContentAccess->ResetPoiSearchHandle();
+ }
+
+ }
+}
+
+void poiSearchServer::SetRouteHandle(const uint8_t& poiSearchHandle, const uint8_t& sessionHandle, const uint8_t& routeHandle, const uint16_t& startSearchOffset, const uint16_t& endSearchOffset)
+{
+ uint32_t index;
+ int16_t detailLevel;
+ std::vector< uint16_t > valuesToReturn;
+ uint32_t numberOfSegments;
+ uint32_t offset;
+ uint32_t totalNumberOfSegments;
+ std::vector< std::map< uint16_t, ::DBus::Variant > > routeSegments;
+ std::map< uint16_t, ::DBus::Variant > element;
+ std::map< uint16_t, ::DBus::Variant >::iterator iter;
+ route_vector_t routeVector;
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ m_sessionHandle = sessionHandle;
+ m_routeHandle = routeHandle;
+ m_startSearchOffset = startSearchOffset;
+ m_endSearchOffset = endSearchOffset;
+
+ //Get the route segments
+ m_route.clear(); //clear the existing route
+ detailLevel = 0; //to be clarified
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LONGITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LONGITUDE);
+ offset = 0;
+
+ //First get the total amount of segments
+ numberOfSegments = 0;
+
+ mp_Routing->GetRouteSegments(m_routeHandle,detailLevel,valuesToReturn,numberOfSegments,offset,totalNumberOfSegments,routeSegments);
+ m_totalNumberOfSegments = totalNumberOfSegments;
+
+ // Get all the segments
+ numberOfSegments = m_totalNumberOfSegments;
+ mp_Routing->GetRouteSegments(m_routeHandle,detailLevel,valuesToReturn,numberOfSegments,offset,totalNumberOfSegments,routeSegments);
+ for (index=0;index<routeSegments.size();index++)
+ {
+ element = routeSegments.at(index);
+ iter = element.find(GENIVI_NAVIGATIONCORE_START_LATITUDE);
+ if (iter != element.end())
+ routeVector.startPoint.latitude = element.at(GENIVI_NAVIGATIONCORE_START_LATITUDE);
+ iter = element.find(GENIVI_NAVIGATIONCORE_START_LONGITUDE);
+ if (iter != element.end())
+ routeVector.startPoint.longitude = element.at(GENIVI_NAVIGATIONCORE_START_LONGITUDE);
+ iter = element.find(GENIVI_NAVIGATIONCORE_END_LATITUDE);
+ if (iter != element.end())
+ routeVector.endPoint.latitude = element.at(GENIVI_NAVIGATIONCORE_END_LATITUDE);
+ iter = element.find(GENIVI_NAVIGATIONCORE_END_LONGITUDE);
+ if (iter != element.end())
+ routeVector.endPoint.longitude = element.at(GENIVI_NAVIGATIONCORE_END_LONGITUDE);
+ m_route.push_back(routeVector);
+ }
+ }
+}
+
+void poiSearchServer::SetCategories(const uint8_t& poiSearchHandle, const std::vector< DBus_categoryRadius::DBus_categoryRadius_t >& poiCategories)
+{
+ uint16_t index;
+ uint16_t category_index;
+ cam_t cam;
+ DBus_categoryRadius catRad;
+ DBus_categoryRadius::categoryRadius_t categoryRadius;
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ //reset of the flags of the categories into the embedded database
+ for (index=0;index<m_availableCategories;index++)
+ {
+ m_availableCategoryTable[index].isSearch = false;
+ }
+
+ //reset the flags of the categories into the additional database
+ if ((mp_poiContentAccess->GetRegisteredContentAccessModule(&cam)) == true)
+ {
+ mp_poiContentAccess->ResetRegisteredSearchCategoriesFlags(cam.id);
+ }
+
+ for (index=0; index < poiCategories.size();index++)
+ {
+ catRad.setDBus(poiCategories.at(index));
+ categoryRadius = catRad.get();
+ if ( isCategoryAvailable(categoryRadius.id,&category_index) == true)
+ { //category found into the embedded data !
+ m_availableCategoryTable[category_index].isSearch = true;
+ m_availableCategoryTable[category_index].radius = (categoryRadius.radius)*10; //get the radius (unit is 10 m)
+ m_availableCategoryTable[category_index].angle = calculateAngle(m_availableCategoryTable[category_index].radius);
+ }
+ else
+ {
+ if ((mp_poiContentAccess->GetRegisteredContentAccessModule(&cam)) == true)
+ {
+ mp_poiContentAccess->SetRegisteredSearchCategory(cam.id,categoryRadius);
+ }
+ }
+ }
+ }
+}
+
+void poiSearchServer::SetAttributes(const uint8_t& poiSearchHandle, const std::vector< DBus_attributeDetails::DBus_attributeDetails_t >& poiAttributes)
+{
+ DBus_attributeDetails attribDet;
+ DBus_attributeDetails::attributeDetails_t attributeDetails;
+ size_t index,sub_index;
+ uint16_t category_index;
+ cam_t cam;
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ //reset flags for all the attributes of the categories into the embedded database
+ for (index=0;index<m_availableCategories;index++)
+ {
+ for (category_index=0;category_index<((m_availableCategoryTable[index]).attributeList).size();category_index++)
+ (m_availableCategoryTable[index]).attributeList.at(category_index).isSearched =false;
+ }
+
+ //reset the flags of all the attributes of the categories into the additional database
+ if ((mp_poiContentAccess->GetRegisteredContentAccessModule(&cam)) == true)
+ {
+ mp_poiContentAccess->ResetRegisteredAttributeCategoriesFlags(cam.id);
+ }
+
+ //set the flags of attributes to be searched for the given categories
+ for (index=0;index<poiAttributes.size();index++)
+ {
+ attribDet.setDBus(poiAttributes[index]);
+ attributeDetails = attribDet.get(); //get the attribute in readable format
+ if ( isCategoryAvailable(attributeDetails.poiCategory,&category_index) == true)
+ { //category found into the embedded database!
+ for (sub_index=0;sub_index<(m_availableCategoryTable[category_index].attributeList.size());sub_index++)
+ { //check attribute by name
+ if ((m_availableCategoryTable[category_index].attributeList.at(sub_index)).name == attributeDetails.attribute.name)
+ (m_availableCategoryTable[category_index].attributeList.at(sub_index)).isSearched =true;
+ }
+ }
+ else
+ { //set the flags of attributes to be searched into the additional database
+ if ((mp_poiContentAccess->GetRegisteredContentAccessModule(&cam)) == true)
+ {
+ mp_poiContentAccess->SetRegisteredAttributeCategoryFlag(cam.id,attributeDetails.poiCategory,attributeDetails.attribute.name,attributeDetails.id);
+ }
+ }
+ }
+ }
+}
+
+void poiSearchServer::StartPoiSearch(const uint8_t& poiSearchHandle, const std::string& inputString, const uint16_t& sortOption)
+{
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ m_totalSize = 0;
+ if (m_poiSearchProximity == false)
+ { //no proximity search started on this session !
+ m_searchStatus = GENIVI_POISERVICE_SEARCHING;
+ PoiStatus(poiSearchHandle,(uint16_t)m_searchStatus);
+ //sortOption is not used yet
+ //for the moment, no thread used, because just one handle managed
+ // search on the embedded database first
+ m_totalSize = searchAroundALocation(m_centerLocation,&inputString); //search around the current location of the vehicle
+ //and now search on the additional database if the cam has been registered before the creation of the poi search handle
+ m_totalSize += mp_poiContentAccess->searchAroundALocation(m_centerLocation,&inputString);
+ m_searchStatus = GENIVI_POISERVICE_FINISHED;
+ PoiStatus(poiSearchHandle,(uint16_t)m_searchStatus);
+ ResultListChanged(poiSearchHandle,m_totalSize);
+ }
+ }
+}
+
+void poiSearchServer::CancelPoiSearch(const uint8_t& poiSearchHandle)
+{
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ if (m_poiSearchProximity == false)
+ { //no proximity search started on this session !
+ m_searchStatus = GENIVI_POISERVICE_NOT_STARTED;
+ PoiStatus(poiSearchHandle,(uint16_t)m_searchStatus);
+ }
+ }
+}
+
+void poiSearchServer::SetCenter(const uint8_t& poiSearchHandle, const DBus_geoCoordinate3D::DBus_geoCoordinate3D_t& location)
+{
+ DBus_geoCoordinate3D geoCoord;
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ geoCoord.setDBus(location);
+ m_centerLocation = geoCoord.get();
+ }
+}
+
+void poiSearchServer::StartPoiProximityAlert(const uint8_t& poiSearchHandle, const std::string& inputString, const uint16_t& sortOption)
+{
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ if (m_poiSearchProximity == false)
+ {
+ m_poiSearchProximity = true; //start proximity search !
+ m_searchStatus = GENIVI_POISERVICE_SEARCHING;
+ PoiStatus(poiSearchHandle,(uint16_t)m_searchStatus);
+ }
+ }
+}
+
+void poiSearchServer::CancelPoiProximityAlert(const uint8_t& poiSearchHandle)
+{
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ if (m_poiSearchProximity == true)
+ {
+ m_poiSearchProximity = false; //stop proximity search !
+ m_searchStatus = GENIVI_POISERVICE_NOT_STARTED;
+ PoiStatus(poiSearchHandle,(uint16_t)m_searchStatus);
+ }
+ }
+}
+
+void poiSearchServer::RequestResultList(const uint8_t& poiSearchHandle, const uint16_t& offset, const uint16_t& maxWindowSize, const std::vector< std::string >& attributes, uint16_t& statusValue, uint16_t& resultListSize, std::vector< DBus_searchResult::DBus_searchResult_t >& resultListWindow)
+{
+ DBus_searchResult::searchResult_t element; //id distance status attributes[]
+ DBus_searchResult el;
+ DBus_poiCAMDetails::poiCAMDetails_t camElement; //id name category location distance attributes[]
+ DBus_poiCAMDetails camEl;
+ DBus_poiAttribute::poiAttribute_t attribute; //name type value
+ uint16_t index,size,sub_index;
+ size_t attribute_index;
+ poi_t poi;
+ std::ostringstream strStream; //temporary stream used for transformation into string
+
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ statusValue = m_searchStatus;
+ if (m_searchStatus == GENIVI_POISERVICE_FINISHED)
+ { //consider that the search is finished for the CAM too
+
+ if ((offset+1)>m_totalSize)
+ index=0;
+ else
+ index=offset;
+ if ((index+maxWindowSize)>m_totalSize)
+ size=m_totalSize-index;
+ else
+ size=maxWindowSize;
+ resultListSize = size;
+
+ while (size>0)
+ { //load the poi into the vector
+ if ((index+1)>m_poiTable.size())
+ {
+ //no more data into the embedded table, so pick data from the additional table
+ camEl.setDBus(mp_poiContentAccess->GetResultPoi(index-m_poiTable.size()));
+ camElement = camEl.get();
+ element.id = camElement.source_id; //id
+ element.distance = camElement.distance; //distance
+ element.route_status = GENIVI_POISERVICE_OFF_ROUTE;
+ element.attributes.clear(); //clean list of attributes
+ for (sub_index=0;sub_index<camElement.attributes.size();sub_index++)
+ { //need to be improved here, no management of different types of value, by default set to string
+ attribute.name = (camElement.attributes.at(sub_index)).name; //name
+ attribute.type= (camElement.attributes.at(sub_index)).type;
+ attribute.value = (camElement.attributes.at(sub_index)).value;
+ element.attributes.push_back(attribute);
+ }
+ el.set(element);
+ resultListWindow.push_back(el.getDBus());
+ index++;
+ size-=1;
+ }
+ else
+ { // pick data from the embedded table
+ poi = m_poiTable.at(index);
+ element.id = poi.segment;
+ element.distance = poi.distance;
+ element.route_status = GENIVI_POISERVICE_OFF_ROUTE;
+ element.attributes.clear(); //clean list of attributes
+
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[poi.categoryIndex].attributeList.size();attribute_index++)
+ { //scan the attributes for the category
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_SOURCE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.source;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_WEBSITE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.website;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_PHONE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.phone;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_STARS)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_INTEGER;
+ strStream.str("");
+ strStream << poi.stars;
+ attribute.value = strStream.str();
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPENINGHOURS)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.openinghours;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRHOUSENUMBER)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.addr_house_number;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRSTREET)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.addr_street;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRPOSTCODE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_INTEGER;
+ strStream.str("");
+ strStream << poi.addr_postcode;
+ attribute.value = strStream.str(); element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRCITY)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.addr_city;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_BRAND)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.brand;
+ element.attributes.push_back(attribute);
+ }
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPERATEUR)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ if (isAttributeRequired(attribute.name,attributes)==true)
+ {
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.operateur;
+ element.attributes.push_back(attribute);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ el.set(element);
+ resultListWindow.push_back(el.getDBus());
+ index++;
+ size-=1;
+ }
+ }
+ }
+ }
+}
+
+std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > poiSearchServer::GetPoiDetails(const std::vector< uint32_t >& id)
+{
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > return_value;
+ DBus_searchResultDetails searchResDet;
+ DBus_searchResultDetails::searchResultDetails_t searchResDetails;
+ DBus_poiAttribute::poiAttribute_t attribute;
+ uint16_t indexPOIList,indexIDList;
+ size_t attribute_index;
+ poi_t poi;
+ bool isPOIFound;
+ std::ostringstream strStream; //temporary stream used for transformation into string
+
+ //for the moment, no optimization so it needs to be improved a little :-)
+
+ for (indexIDList=0;indexIDList<id.size();indexIDList++)
+ { //scan the list of poi to detail
+ isPOIFound = false;
+
+ //scan the embedded table
+ //'while' first because the table could be empty in case of additional data only !
+ indexPOIList=0;
+ while((isPOIFound == false) && (indexPOIList<m_poiTable.size()))
+ {
+ poi = m_poiTable.at(indexPOIList);
+ if (poi.segment == id.at(indexIDList))
+ {
+ isPOIFound = true;
+ searchResDetails.details.id = poi.segment;
+ searchResDetails.details.name = poi.name;
+ searchResDetails.details.latitude = poi.coordinate.latitude;
+ searchResDetails.details.longitude = poi.coordinate.longitude;
+ searchResDetails.details.altitude = poi.coordinate.altitude;
+ searchResDetails.categories.clear();
+ searchResDetails.categories.push_back(m_availableCategoryTable[poi.categoryIndex].id); //POI only owns to one category for the moment !
+ searchResDetails.attributes.clear();
+
+ // check the attributes for the category and get the value
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[poi.categoryIndex].attributeList.size();attribute_index++)
+ { //scan the attributes for the category
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_SOURCE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.source;
+ searchResDetails.attributes.push_back(attribute);
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_WEBSITE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.website;
+ searchResDetails.attributes.push_back(attribute);
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_PHONE)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.phone;
+ searchResDetails.attributes.push_back(attribute);
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_STARS)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ attribute.type = GENIVI_POISERVICE_INTEGER;
+ strStream.str("");
+ strStream << poi.stars;
+ attribute.value = strStream.str();
+ searchResDetails.attributes.push_back(attribute);
+ }
+ else
+ {
+ if ((m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPENINGHOURS)
+ {
+ attribute.name = (m_availableCategoryTable[poi.categoryIndex].attributeList.at(attribute_index)).name;
+ attribute.type = GENIVI_POISERVICE_STRING;
+ attribute.value = poi.openinghours;
+ searchResDetails.attributes.push_back(attribute);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ searchResDet.set(searchResDetails);
+ return_value.push_back(searchResDet.getDBus());
+ }
+ else
+ ++indexPOIList;
+ }
+
+ if (isPOIFound == false)
+ {
+ //not found in embedded table, so get it into the additional data
+ //we consider that the element exists into the additional data (no check)
+ return_value.push_back(mp_poiContentAccess->GetPoiDetails(id.at(indexIDList)));
+ }
+ }
+
+ return (return_value);
+}
+
+// Specific methods
+
+void poiSearchServer::ConnectToEnhancedPositionClient(EnhancedPosition *client)
+{
+ mp_enhancedPosition = client; //link to the instance of enhancedPosition
+}
+
+void poiSearchServer::ConnectToRoutingClient(Routing *client)
+{
+ mp_Routing = client; //link to the instance of routing
+}
+
+DBus::Variant poiSearchServer::createVariantString(std::string str)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_string(str.c_str());
+ return var;
+}
+
+DBus::Variant poiSearchServer::createVariantUint16(uint16_t value)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_uint16(value);
+ return var;
+}
+
+void poiSearchServer::sendDBusError(const char* message)
+{
+ throw DBus::ErrorFailed(message);
+}
+
+void poiSearchServer::onError()
+{
+}
+
+uint16_t poiSearchServer::searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString)
+{
+ uint16_t index, all_categories_index;
+ uint16_t total_size;
+ DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,right_top_location;
+
+ total_size = 0;
+
+ m_poiTable.clear(); //clean the table of poi
+
+ if (isAllCategoriesSelected(&all_categories_index))
+ {
+ left_bottom_location.latitude = location.latitude - m_availableCategoryTable[all_categories_index].angle;
+ left_bottom_location.longitude = location.longitude - m_availableCategoryTable[all_categories_index].angle;
+ right_top_location.latitude = location.latitude + m_availableCategoryTable[all_categories_index].angle;
+ right_top_location.longitude = location.longitude + m_availableCategoryTable[all_categories_index].angle;
+ for (index=0;index<m_availableCategories;index++)
+ {
+ total_size += searchPOIRequest(index, *inputString,left_bottom_location,right_top_location);
+ }
+ }
+ else
+ {
+ for (index=0;index<m_availableCategories;index++)
+ {
+ if (m_availableCategoryTable[index].isSearch)
+ {
+ left_bottom_location.latitude = location.latitude - m_availableCategoryTable[index].angle;
+ left_bottom_location.longitude = location.longitude - m_availableCategoryTable[index].angle;
+ right_top_location.latitude = location.latitude + m_availableCategoryTable[index].angle;
+ right_top_location.longitude = location.longitude + m_availableCategoryTable[index].angle;
+ total_size += searchPOIRequest(index, *inputString,left_bottom_location,right_top_location);
+ }
+ }
+
+ }
+ return(total_size);
+}
+
+uint16_t poiSearchServer::searchPOIRequest(uint16_t categoryIndex, std::string search_string, DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,DBus_geoCoordinate3D::geoCoordinate3D_t right_top_location)
+{
+ std::string sqlQuery; //SQL request on database
+ vector<vector<string> > sqlQueryResult; //result of the query on database
+ vector<string> sqlQueryLine;
+ std::ostringstream strStream; //temporary stream used for transformation into string
+ size_t index,sub_index,attribute_index;
+ poi_t poi;
+ std::string name;
+
+ name = m_availableCategoryTable[categoryIndex].name;
+
+ sqlQuery = "SELECT name,segment,latitude,longitude,altitude";
+
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[categoryIndex].attributeList.size();attribute_index++)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).isSearched == true)
+ {
+ sqlQuery += ",";
+ sqlQuery += (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ }
+
+ }
+ sqlQuery += " FROM poi WHERE (Id IN (SELECT poi_Id FROM belongsto,poicategory WHERE (belongsto.poicategory_Id = poicategory.Id) AND (poicategory.name = '";
+ sqlQuery += name;
+ sqlQuery += "'))) AND ((latitude > ";
+ strStream.str(""); //to clean before !
+ strStream << left_bottom_location.latitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ") AND (latitude < ";
+ strStream.str(""); //to clean before !
+ strStream << right_top_location.latitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ")) AND ((longitude > ";
+ strStream.str(""); //to clean before !
+ strStream << left_bottom_location.longitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ") AND (longitude < ";
+ strStream.str(""); //to clean before !
+ strStream << right_top_location.longitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ")) AND (name LIKE '%";
+ sqlQuery += search_string;
+ sqlQuery += "%');";
+ sqlQueryResult = mp_database->query(sqlQuery.c_str());
+
+ //populate the table of poi
+ poi.categoryIndex = categoryIndex;
+
+ for (index=0;index<sqlQueryResult.size();index++)
+ {
+ sqlQueryLine = sqlQueryResult.at(index);
+ poi.name = sqlQueryLine[0];
+ fromString<uint64_t>(poi.segment,sqlQueryLine[1], std::dec);
+ fromString<double>(poi.coordinate.latitude,sqlQueryLine[2], std::dec);
+ fromString<double>(poi.coordinate.longitude,sqlQueryLine[3], std::dec);
+ fromString<int>(poi.coordinate.altitude,sqlQueryLine[4], std::dec);
+ sub_index = 5;
+
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[categoryIndex].attributeList.size();attribute_index++)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).isSearched == true)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_SOURCE)
+ poi.source = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_WEBSITE)
+ poi.website = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_PHONE)
+ poi.phone = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_STARS)
+ fromString<uint16_t>(poi.stars,sqlQueryLine[sub_index], std::dec);
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPENINGHOURS)
+ poi.openinghours = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRHOUSENUMBER)
+ poi.addr_house_number = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRSTREET)
+ poi.addr_street = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRPOSTCODE)
+ fromString<uint16_t>(poi.addr_postcode,sqlQueryLine[sub_index], std::dec);
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_ADDRCITY)
+ poi.addr_city = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_BRAND)
+ poi.brand = sqlQueryLine[sub_index];
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPERATEUR)
+ poi.operateur = sqlQueryLine[sub_index];
+ sub_index++;
+ }
+
+ }
+
+ //calculate distance from the center location
+ poi.distance = calculateDistance(m_centerLocation,poi.coordinate);
+ m_poiTable.push_back(poi);
+ }
+
+ return(sqlQueryResult.size());
+}
+
+bool poiSearchServer::isCategoryAvailable(uint16_t id, uint16_t *category_id)
+{
+ bool isFound = false;
+ uint16_t index = 0;
+ do
+ {
+ if (m_availableCategoryTable[index].id == id)
+ {
+ *category_id = index;
+ isFound = true;
+ }
+ else
+ ++index;
+ } while ((isFound==false) && (index < m_availableCategories));
+
+ return(isFound);
+}
+
+bool poiSearchServer::isAllCategoriesSelected(uint16_t* index)
+{
+ bool isSelected = false;
+ *index = 0;
+ do
+ {
+ if ((m_availableCategoryTable[*index].name == "all categories") && m_availableCategoryTable[*index].isSearch)
+ {
+ isSelected = true;
+ }
+ else
+ *index += 1;
+ } while ((isSelected==false) && (*index < m_availableCategories));
+
+ return(isSelected);
+}
+
+bool poiSearchServer::isAttributeRequired(std::string attribute,std::vector<std::string> attributes)
+{
+ bool isRequired = false;
+ size_t index;
+ index=0;
+ while((isRequired==false)&&(index < attributes.size()))
+ {
+ if (attributes.at(index) == attribute)
+ isRequired = true;
+ else
+ index++;
+ };
+
+ return(isRequired);
+}
+
+uint32_t poiSearchServer::calculateDistance(const DBus_geoCoordinate3D::geoCoordinate3D_t origin, const DBus_geoCoordinate3D::geoCoordinate3D_t target)
+{
+ //this piece of software is based on an haversine formula given by:
+ // - Doctors Rick and Peterson, The Math Forum
+ // http://mathforum.org/dr.math/
+ // haversine of angle A is (1-cos(A))/2 that is equal to sin^2(A/2)
+
+ //earth is considered to be a perfect spĥere, in order to simplify calculation
+ const double PI = 4.0*atan(1.0);
+ const double earth=6378137; //IUGG value for the equatorial radius of the Earth in m
+ DBus_geoCoordinate3D::geoCoordinate3D_t pointA, pointB;
+ double buffer;
+
+ pointA.latitude = origin.latitude * (PI/180);
+ pointA.longitude = origin.longitude * (PI/180);
+ pointB.latitude = target.latitude * (PI/180);
+ pointB.longitude = target.longitude * (PI/180);
+
+ buffer= pow(sin((pointA.latitude-pointB.latitude)/2.0),2.0)+cos(pointA.latitude)*cos(pointB.latitude)*pow(sin((pointA.longitude-pointB.longitude)/2),2);
+ buffer = 2*atan2(sqrt(buffer),sqrt(1.0-buffer));
+ buffer=earth*buffer;
+ return ((uint32_t) buffer); //return distance in meters
+}
+
+double poiSearchServer::calculateAngle(const uint32_t radius)
+{
+ //N is the point on the sphere for the origin
+ //M is a point of the sphere at the distance radius (NM = radius)
+ //O is the center of the earth
+ //ON=OM so the triangle is isosceles
+ //alpha is the angle ON,OM
+ //beta is the angle NM,NO
+ //OM*sin(alpha)=NM*sin(beta)
+ //alpha+beta+beta=PI (because of isoceles)
+ //beta=(PI-alpha)/2
+ //sin(beta) = cos(alpha/2)
+ //sin(alpha)=2*sin(alpha/2)*cos(alpha/2)
+ //alpha=2*arcsin(NM/(2*OM))
+
+ //earth is considered to be a perfect spĥere, in order to simplify calculation
+ const double PI = 4.0*atan(1.0);
+ const double earth=6378137; //IUGG value for the equatorial radius of the Earth in m
+ double angle;
+ angle=2*asin(radius/(2*earth));
+ angle = (angle*180)/PI; //in degrees
+ return(angle);
+}
+
+bool poiSearchServer::calculateLineCoefficient(double* a,double* b,const DBus_geoCoordinate3D::geoCoordinate3D_t pointA,const DBus_geoCoordinate3D::geoCoordinate3D_t pointB)
+{
+ /* longitude on the x axis, latitude on the y axis
+ * segment line y = a*x + b
+ * pointA and pointB points of the segment
+ * if xA is different of xB
+ * a = (yA-yB)/(xA-xB)
+ * b = (xA*yB - xB*yA)/(xA-xB)
+ */
+ if (pointA.longitude == pointB.longitude)
+ { //equation x = constant
+ *b = pointA.longitude; //constant into *b
+ return(false);
+ }
+ else
+ {
+ *a = (pointA.latitude-pointB.latitude)/(pointA.longitude-pointB.longitude);
+ *b = (pointA.longitude*pointB.latitude - pointB.longitude*pointA.latitude)/(pointA.longitude-pointB.longitude);
+ return(true);
+ }
+}
+
+/**
+ * \fn double calculateOrthoDistance(const double a,const double b,const DBus_geoCoordinate3D::geoCoordinate3D_t pointP)
+ * \brief calculate ortho distance between a point P and a line defined by the slope a and the y intercept b.
+ *
+ * \param double a -slope
+ * \param double b -y intercept
+ * \param DBus_geoCoordinate3D::geoCoordinate3D_t pointP -point
+ * \return uint32_t distance.
+ */
+uint32_t poiSearchServer::calculateOrthoDistance(const double a,const double b,const DBus_geoCoordinate3D::geoCoordinate3D_t pointP)
+{
+ /* longitude on the x axis, latitude on the y axis
+ * segment line y = a*x + b
+ * projection line y = c*x + d
+ * pointP point and pointI ortho projection
+ * ortho projection => c = (-1)/a
+ * P point of projection line so yP = c*xP + d
+ * => d = yP + xP/a
+ * I point of segment and projection lines
+ * so yI = a*xI + b
+ * and yI = c*xI + d
+ * => xI = (d-b)/(a-c)
+ * and yI = (a*d - b*c)/(a-c)
+ * so xI = (a*yP + xP -a*b)/(1+a*a)
+ * and yI = (a*a*yP + a*xP + b)/(1+a*a)
+ * distance = sqrt((xP-xI)*(xP-xI) + (yP-yI)*(yP-yI))
+ * distance = (a*xP - yP + b)/sqrt(1 + a*a)
+ */
+ return ((uint32_t)((a*pointP.longitude - pointP.latitude + b)/sqrt(1 + a*a)));
+}
+
+
+const char* program_name; //file to sink outputs
+
+/**
+ * \fn is_readable (const std::string & file)
+ * \brief Check if file can be opened.
+ *
+ * \param const std::string & file -name of the file
+ * \return true if file readable.
+ */
+bool is_readable( const std::string & file )
+{
+ std::ifstream fi( file.c_str() );
+ return !fi.fail();
+}
+
+/**
+ * \fn print_usage (FILE* stream, int exit_code)
+ * \brief Display the available options.
+ *
+ * \param const FILE* stream -name of stream to use
+ * \param int exit_code -exit code
+ * \return void.
+ */
+void print_usage (FILE* stream, int exit_code)
+{
+ fprintf (stream, "Use: %s options [database]\n",program_name);
+ fprintf (stream,
+ " -h --help Display this message.\n"
+ " -f --file database Open the database.\n");
+ exit (exit_code);
+}
+
+/**
+ * \fn int main (int argc , char** argv)
+ * \brief POI Server implements the component of POI Service "POISearch" that includes search and content access.
+ *
+ * \param int argc
+ * \param char** argv
+ * \return EXIT_SUCCESS, EXIT_FAILURE.
+ */
+int main(int argc , char** argv )
+{
+ GMainLoop * mainloop ;
+
+ // Set the global C and C++ locale to the user-configured locale,
+ // so we can use std::cout with UTF-8, via Glib::ustring, without exceptions.
+ std::locale::global(std::locale(""));
+
+ //index used for argument analysis
+ int next_option;
+
+ /* Valid letters for short options. */
+ const char* const short_options = "hf:";
+ /* Valid string for long options. */
+ const struct option long_options[] = {
+ { "help", 0, NULL, 'h' },
+ { "file", 2, NULL, 'f' },
+ { NULL, 0, NULL, 0 } /* Always at the end of the table. */
+ };
+ char* database_filename = NULL; //database filename passed as first argument
+ program_name = argv[0];
+
+ do {
+ next_option = getopt_long (argc, argv, short_options,
+ long_options, NULL);
+ switch (next_option)
+ {
+ case 'h': /* -h --help */
+ print_usage (stdout, 0);
+ break;
+ case 'f': /* -f --file database*/
+ database_filename = argv[2];
+ if (!is_readable(database_filename))
+ print_usage (stderr, 1);
+ else
+ {
+ // creating the dispatcher
+ dispatcher = new DBus::Glib::BusDispatcher();
+ DBus::default_dispatcher = dispatcher;
+ dispatcher->attach(NULL);
+
+ // create a connection on the session bus
+ dbusConnection = new DBus::Connection(DBus::Connection::SessionBus());
+ dbusConnection->setup(dispatcher);
+
+ // create the server for poiContentAccess
+ dbusConnection->request_name(poiContentAccess_SERVICE_NAME);
+ serverpoiContentAccess=new poiContentAccessServer(*dbusConnection);
+
+ // create the server for POISearch
+ dbusConnection->request_name(poiSearch_SERVICE_NAME);
+ serverPoiSearch=new poiSearchServer(*dbusConnection,database_filename,serverpoiContentAccess);
+
+ // connect the serverPoiSearch to the serverpoiContentAccess
+ serverpoiContentAccess->ConnectTopoiSearchServer(serverPoiSearch);
+
+ // create a client for EnhancedPosition
+ clientEnhancedPosition = new EnhancedPosition(*dbusConnection);
+
+ // connect it to the POISearch server
+ serverPoiSearch->ConnectToEnhancedPositionClient(clientEnhancedPosition);
+
+ // create a client for Routing
+ clientRouting = new Routing(*dbusConnection);
+
+ // connect it to the POISearch server
+ serverPoiSearch->ConnectToRoutingClient(clientRouting);
+
+ // Create a new GMainLoop with default context and initial state of "not running "
+ mainloop = g_main_loop_new (g_main_context_default() , FALSE );
+
+ // Send a feedback to the user
+ cout << "poi server started" << endl;
+
+ // loop listening
+
+ g_main_loop_run ( mainloop );
+
+ // clean memory
+ delete serverPoiSearch;
+ delete serverpoiContentAccess;
+ delete clientEnhancedPosition;
+ delete clientRouting;
+ delete dbusConnection;
+ delete dispatcher;
+ }
+ break;
+ case '?': /* Invalid option. */
+ print_usage (stderr, 1);
+ case -1: /* End of options. */
+ break;
+ default: /* Error */
+ print_usage (stderr, 1);
+ }
+ }
+ while (next_option != -1);
+
+ return EXIT_SUCCESS;
+}
diff --git a/src/poi-service/poi-server/poi-datamodel.h b/src/poi-service/poi-server/poi-datamodel.h
new file mode 100644
index 0000000..a1ec2ea
--- /dev/null
+++ b/src/poi-service/poi-server/poi-datamodel.h
@@ -0,0 +1,147 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-datamodel.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __POIPOCDATAMODEL_H__
+#define __POIPOCDATAMODEL_H__
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <iostream>
+#include <fstream>
+#include "../poi-common/common-data-model.h"
+
+/**
+ * \struct category_attribute_t
+ * \brief attributes.
+ *
+ * Used to store attributes
+ *
+ */
+typedef struct
+{
+ ushort id; //unique id
+ std::string name; //attribute unique name
+ bool isSearched; //attributes is into the search scope
+} category_attribute_t;
+
+
+/**
+ * \struct poi_category_t
+ * \brief poi data.
+ *
+ * Used to store the poi category data
+ *
+ */
+typedef struct
+{
+ uint32_t id; // unique id
+ std::string name; // unique name
+ std::string icon; // url of the associated icon
+ bool top_level; //true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.
+ uint32_t radius;
+ double angle; //angle corresponding to the radius (to speed up the SQL search)
+ bool hasRecordsInTheDatabase; //records exist in the database
+ bool isSearch; //true if the category is into the scope of the search
+ std::vector<category_attribute_t> attributeList; //list of attributes
+ std::vector<uint16_t> parentList; //list of parents
+ std::vector<uint16_t> childList; //list of children
+} poi_category_t;
+
+
+/**
+ * \struct route_vector_t
+ * \brief vector in a route.
+ *
+ * Used to store vector of a route
+ *
+ */
+typedef struct
+{
+ DBus_geoCoordinate3D::geoCoordinate3D_t startPoint;
+ DBus_geoCoordinate3D::geoCoordinate3D_t endPoint;
+} route_vector_t;
+
+enum ATTRIBUTE_LIST{
+ ATTRIBUTE_SOURCE = 0,
+ ATTRIBUTE_WEBSITE,
+ ATTRIBUTE_PHONE,
+ ATTRIBUTE_STARS,
+ ATTRIBUTE_OPENINGHOURS,
+ ATTRIBUTE_ADDRHOUSENUMBER,
+ ATTRIBUTE_ADDRSTREET,
+ ATTRIBUTE_ADDRPOSTCODE,
+ ATTRIBUTE_ADDRCITY,
+ ATTRIBUTE_BRAND,
+ ATTRIBUTE_OPERATEUR,
+ ATTRIBUTE_SIZE
+};
+
+
+/**
+ * \struct poi_t
+ * \brief poi related informations.
+ *
+ * Used to store data of a poi
+ *
+ */
+typedef struct {
+ std::string name;
+ DBus_geoCoordinate3D::geoCoordinate3D_t coordinate;
+ uint64_t segment; /*!< segment (similar to id of <node id="185881594" latitude="48.8607204" longitude="2.2960844"/>). */
+ uint16_t offset;
+ uint16_t categoryIndex; //index into the table of categories
+ uint32_t distance;
+ std::string source;
+ std::string website;
+ std::string phone;
+ uint16_t stars;
+ std::string openinghours;
+ std::string addr_house_number;
+ std::string addr_street;
+ uint16_t addr_postcode;
+ std::string addr_city;
+ std::string brand;
+ std::string operateur;
+} poi_t;
+
+/**
+ * \struct cam_t
+ * \brief cam related informations.
+ *
+ * Used to store data of a cam
+ *
+ */
+typedef struct {
+ uint8_t id;
+ std::string name;
+} cam_t;
+
+
+#endif
diff --git a/src/poi-service/poi-server/poi-server-class.h b/src/poi-service/poi-server/poi-server-class.h
new file mode 100644
index 0000000..0b4fa60
--- /dev/null
+++ b/src/poi-service/poi-server/poi-server-class.h
@@ -0,0 +1,377 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-server-class.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POIPOCSERVERCLASS_H
+#define POIPOCSERVERCLASS_H
+
+#include "../poi-common/genivi-positioning-constants.h"
+#include "../poi-common/genivi-mapviewer-constants.h"
+#include "../poi-common/genivi-navigationcore-constants.h"
+#include "../poi-common/genivi-poiservice-constants.h"
+#include "../poi-common/genivi-poiservice-poisearch_adaptor.h"
+#include "../poi-common/genivi-poiservice-poicontentaccess_adaptor.h"
+#include "../poi-common/genivi-navigationcore-routing_proxy.h"
+#include "../poi-common/genivi-positioning-enhancedposition_proxy.h"
+#include "../poi-common/genivi-poiservice-contentaccessmodule_proxy.h"
+#include "../poi-common/common-data-model.h"
+#include <dbus-c++/glib-integration.h>
+
+#include "poi-datamodel.h"
+#include "database.h"
+
+
+// string conversion to numeric: the third parameter of fromString() should be one of std::hex, std::dec or std::oct
+template <class T>
+bool fromString(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&))
+{
+ std::istringstream iss(s);
+ return !(iss >> f >> t).fail();
+}
+
+
+using namespace DBus;
+using namespace Glib;
+
+class Routing;
+class EnhancedPosition;
+class contentAccessModule;
+class poiSearchServer;
+class poiContentAccessServer;
+
+class Routing
+: public org::genivi::navigationcore::Routing_proxy,
+ public DBus::IntrospectableProxy,
+ public DBus::ObjectProxy
+{
+ public:
+
+ Routing(DBus::Connection &connection);
+
+ ~Routing();
+
+ void RouteDeleted(const uint32_t& routeHandle);
+
+ void RouteCalculationCancelled(const uint32_t& routeHandle);
+
+ void RouteCalculationSuccessful(const uint32_t& routeHandle, const std::map< uint16_t, uint16_t >& unfullfilledPreferences);
+
+ void RouteCalculationFailed(const uint32_t& routeHandle, const uint16_t& errorCode,const std::map< uint16_t, uint16_t >& unfullfilledPreferences);
+
+ void RouteCalculationProgressUpdate(const uint32_t& routeHandle, const uint16_t& status, const uint8_t& percentage);
+
+ void AlternativeRoutesAvailable (const std::vector<uint32_t>& routeHandlesList);
+
+};
+
+class EnhancedPosition
+: public org::genivi::positioning::EnhancedPosition_proxy,
+ public DBus::IntrospectableProxy,
+ public DBus::ObjectProxy
+{
+
+ public:
+
+ EnhancedPosition(DBus::Connection &connection);
+
+ ~EnhancedPosition();
+
+ void PositionUpdate(const std::vector< uint16_t >& changedValues);
+
+ void RotationRateUpdate(const std::vector< uint16_t >& changedValues);
+
+ void AccuracyUpdate(const std::vector< uint16_t >& changedValues);
+
+ void SatelliteInfoUpdate(const std::vector< uint16_t >& changedValues);
+
+ void StatusUpdate(const std::vector< uint16_t >& changedValues);
+
+ DBus_geoCoordinate3D::geoCoordinate3D_t GetCurrentLocation();
+
+ private:
+
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_currentLocation;
+};
+
+class contentAccessModule
+: public org::genivi::poiservice::POIContentAccessModule_proxy,
+ public DBus::IntrospectableProxy,
+ public DBus::ObjectProxy
+{
+
+public:
+
+ contentAccessModule(DBus::Connection &connection, const std::string& service);
+
+ ~contentAccessModule();
+
+private:
+
+};
+
+class poiContentAccessServer
+: public org::genivi::poiservice::POIContentAccess_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ enum {
+ INVALID_HANDLE = 0xFF,
+ VALID_HANDLE = 1 //the POC manages only one handle !
+ } CONSTANTS;
+
+public:
+
+ poiContentAccessServer(DBus::Connection &connection);
+
+ ~poiContentAccessServer();
+
+ void ConnectTopoiSearchServer(poiSearchServer *poiSearch);
+
+ //connection to the DBus proxy clients
+
+ void ConnectTocontentAccessModuleClient(contentAccessModule *client);
+
+ // DBus methods
+
+ uint8_t RegisterContentAccessModule(const std::string& moduleName);
+
+ void UnRegisterContentAccessModule(const uint8_t& camId);
+
+ void RegisterPoiCategories(const uint8_t& camId, const std::vector< uint16_t >& poiCategories);
+
+ std::vector< uint16_t > AddCategories(const uint8_t& camId, const std::vector< DBus_CAMcategory::DBus_CAMcategory_t >& poiCategories);
+
+ void UpdateCategories(const uint8_t& camId, const std::vector< DBus_CAMcategoryUpdate::DBus_CAMcategoryUpdate_t >& poiCategories);
+
+ void RemoveCategories(const uint8_t& camId, const std::vector< uint16_t >& poiCategories);
+
+// Specific methods
+
+ bool GetRegisteredContentAccessModule(cam_t *cam);
+
+ bool GetRegisteredCategories(uint8_t camId, std::vector< DBus_categoryIdName::DBus_categoryIdName_t > *categoryList);
+
+ bool GetRegisteredCategoriesDetails(uint8_t camId, std::vector<DBus_category> *categoryList);
+
+ void ResetRegisteredSearchCategoriesFlags(uint8_t camId);
+
+ void ResetRegisteredAttributeCategoriesFlags(uint8_t camId);
+
+ void SetRegisteredSearchCategory(uint8_t camId,DBus_categoryRadius::categoryRadius_t category);
+
+ void SetRegisteredAttributeCategoryFlag(uint8_t camId,uint32_t categoryId, std::string attributeName, uint16_t attributeId);
+
+ void SetLanguage(std::string LanguageCode, std::string CountryCode);
+
+ uint16_t searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString);
+
+ void SetPoiSearchHandle(uint8_t poiSearchHandle);
+
+ void ResetPoiSearchHandle();
+
+ void PoiSearchCanceled(uint8_t poiSearchHandle);
+
+ DBus_poiCAMDetails::DBus_poiCAMDetails_t GetResultPoi(uint16_t index);
+
+ DBus_searchResultDetails::DBus_searchResultDetails_t GetPoiDetails(uint32_t id);
+
+ bool isAttributeAvailable(std::string attributeName);
+
+ bool removeCategoryFromTables(uint16_t id);
+
+private:
+
+ // data conversion routines
+
+ DBus::Variant createVariantString(std::string str);
+
+ DBus::Variant createVariantUint16(uint16_t value);
+
+ void sendDBusError(const char* message);
+
+ uint8_t m_poiSearchHandle; // the POC is limited to the management of one handle !
+
+ contentAccessModule *mp_contentAccessModule;
+ poiSearchServer *mp_poiSearch;
+ ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > m_version;
+ std::string m_camName;
+ uint8_t m_camId;
+ contentAccessModule *mp_clientcontentAccessModule;
+ std::vector< poi_category_t > m_poiCategoriesRegistered;
+ std::vector< poi_category_t > m_poiCategoriesAdded;
+
+ //DBus data
+ std::vector< DBus_poiCAMDetails::DBus_poiCAMDetails_t > m_poiTable;
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > m_poiDetailsTable;
+ std::vector< DBus_categoryRadius::DBus_categoryRadius_t > m_poiCategories;
+ std::vector< DBus_attributeDetails::DBus_attributeDetails_t > m_poiAttributes;
+
+};
+
+class poiSearchServer
+: public org::genivi::poiservice::POISearch_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+ enum {
+ INVALID_HANDLE = 0xFF,
+ VALID_HANDLE = 1 //the POC manages only one handle !
+ } CONSTANTS;
+
+public:
+
+ poiSearchServer(DBus::Connection &connection, const char* poiDatabaseFileName, poiContentAccessServer* poiContentAccess);
+
+ ~poiSearchServer();
+
+
+//connection to the DBus proxy clients
+
+ void ConnectToEnhancedPositionClient(EnhancedPosition *client);
+
+ void ConnectToRoutingClient(Routing *client);
+
+
+//implementation of the DBus methods of the POISearch component
+
+ DBus_version::DBus_version_t GetVersion();
+
+ void GetLanguage(std::string& languageCode, std::string& countryCode);
+
+ void SetLanguage(const std::string& languageCode, const std::string& countryCode);
+
+ std::vector< ::DBus::Struct< uint16_t, bool > > ValidateCategories(const std::vector< uint16_t >& categories);
+
+ std::vector< DBus_categoryIdName::DBus_categoryIdName_t > GetAvailableCategories();
+
+ uint16_t GetRootCategory();
+
+ std::vector< DBus_categoryId::DBus_categoryId_t > GetChildrenCategories(const uint16_t& category);
+
+ std::vector< DBus_categoryId::DBus_categoryId_t > GetParentCategories(const uint16_t& category);
+
+ std::vector< DBus_category::DBus_category_t > GetCategoriesDetails(const std::vector< uint16_t >& categories);
+
+ uint8_t CreatePoiSearchHandle();
+
+ void DeletePoiSearchHandle(const uint8_t& poiSearchHandle);
+
+ void SetRouteHandle(const uint8_t& poiSearchHandle, const uint8_t& sessionHandle, const uint8_t& routeHandle, const uint16_t& startSearchOffset, const uint16_t& endSearchOffset);
+
+ void SetCategories(const uint8_t& poiSearchHandle, const std::vector< DBus_categoryRadius::DBus_categoryRadius_t >& poiCategories);
+
+ void SetAttributes(const uint8_t& poiSearchHandle, const std::vector< DBus_attributeDetails::DBus_attributeDetails_t >& poiAttributes);
+
+ void StartPoiSearch(const uint8_t& poiSearchHandle, const std::string& inputString, const uint16_t& sortOption);
+
+ void CancelPoiSearch(const uint8_t& poiSearchHandle);
+
+ void SetCenter(const uint8_t& poiSearchHandle, const DBus_geoCoordinate3D::DBus_geoCoordinate3D_t& location);
+
+ void StartPoiProximityAlert(const uint8_t& poiSearchHandle, const std::string& inputString, const uint16_t& sortOption);
+
+ void CancelPoiProximityAlert(const uint8_t& poiSearchHandle);
+
+ void RequestResultList(const uint8_t& poiSearchHandle, const uint16_t& offset, const uint16_t& maxWindowSize, const std::vector< std::string >& attributes, uint16_t& statusValue, uint16_t& resultListSize, std::vector< DBus_searchResult::DBus_searchResult_t >& resultListWindow);
+
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > GetPoiDetails(const std::vector< uint32_t >& id);
+
+private:
+
+// data conversion routines
+
+ DBus::Variant createVariantString(std::string str);
+
+ DBus::Variant createVariantUint16(uint16_t value);
+
+// error management
+
+ void sendDBusError(const char* message);
+ void onError();
+
+// search routines
+
+ uint16_t searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString);
+
+ uint16_t searchPOIRequest(uint16_t categoryIndex, std::string search_string,DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,DBus_geoCoordinate3D::geoCoordinate3D_t right_top_location);
+
+// category and attribute routines
+
+ bool isCategoryAvailable(uint16_t id, uint16_t *category_id);
+
+ bool isAllCategoriesSelected(uint16_t* index);
+
+ bool isAttributeRequired(std::string attribute,std::vector< std::string > attributes);
+
+// geometrical routines
+
+ uint32_t calculateDistance(const DBus_geoCoordinate3D::geoCoordinate3D_t origin, const DBus_geoCoordinate3D::geoCoordinate3D_t target);
+
+ double calculateAngle(const uint32_t radius);
+
+ bool calculateLineCoefficient(double* a,double* b,const DBus_geoCoordinate3D::geoCoordinate3D_t pointA,const DBus_geoCoordinate3D::geoCoordinate3D_t pointB);
+
+ uint32_t calculateOrthoDistance(const double a,const double b,const DBus_geoCoordinate3D::geoCoordinate3D_t pointP);
+
+// private data
+
+// DBus data
+ DBus_version m_version;
+ std::string m_languageCode, m_countryCode;
+ uint8_t m_poiSearchHandle; // the POC is limited to the management of one handle !
+ uint16_t m_rootCategory;
+ uint8_t m_sessionHandle;
+ uint8_t m_routeHandle;
+ uint16_t m_startSearchOffset;
+ uint16_t m_endSearchOffset;
+ ushort m_searchStatus;
+ uint32_t m_totalNumberOfSegments;
+ EnhancedPosition *mp_enhancedPosition;
+ Routing *mp_Routing;
+ poiContentAccessServer *mp_poiContentAccess;
+
+ uint16_t m_totalSize;
+
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_centerLocation;
+ bool m_poiSearchProximity; // boolean set if search for proximity is chosen
+ DBus::Connection *mp_dbusConnection;
+
+// buffers
+ std::vector<poi_t> m_poiTable;
+ std::vector<route_vector_t> m_route;
+
+// database access
+ Database *mp_database;
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_leftBottomLocation;
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_rightTopLocation;
+
+// category and attribute management
+ uint16_t m_availableCategories;
+ poi_category_t m_availableCategoryTable[MAX_CATEGORIES];
+};
+
+
+#endif // POIPOCSERVERCLASS_H
diff --git a/src/poi-service/poi-server/poi-server.pro b/src/poi-service/poi-server/poi-server.pro
new file mode 100644
index 0000000..1d02b16
--- /dev/null
+++ b/src/poi-service/poi-server/poi-server.pro
@@ -0,0 +1,31 @@
+TEMPLATE = app
+CONFIG += console
+CONFIG -= qt
+
+SOURCES += main.cpp \
+ database.cpp
+
+HEADERS += \
+ database.h \
+ genivi-positioning-enhancedposition_proxy.h \
+ genivi-poiservice-poisearch_adaptor.h \
+ genivi-poiservice-poicontentaccess_adaptor.h \
+ genivi-poiservice-contentaccessmodule_proxy.h \
+ poi-server-class.h \
+ poi-datamodel.h
+
+INCLUDEPATH += /usr/include/glibmm-2.4 \
+ /usr/lib/i386-linux-gnu/glibmm-2.4/include \
+ /usr/include/glib-2.0 \
+ /usr/lib/i386-linux-gnu/glib-2.0/include \
+ /usr/include/dbus-c++-1 \
+ /usr/include/dbus-1.0 \
+ /usr/lib/i386-linux-gnu/dbus-1.0/include
+
+LIBS += -lglibmm-2.4 \
+ -lglib-2.0 \
+ -lgobject-2.0 \
+ -lsqlite3 \
+ -ldbus-c++-glib-1 \
+ -ldbus-c++-1 \
+ -ldbus-1
diff --git a/src/poi-service/resource/LICENSE b/src/poi-service/resource/LICENSE
new file mode 100644
index 0000000..8a44f66
--- /dev/null
+++ b/src/poi-service/resource/LICENSE
@@ -0,0 +1,2 @@
+* Creative Commons Attribution Share-Alike 3.0 License
+* Thanks to Maps Icons Collection http://mapicons.nicolasmollet.com
diff --git a/src/poi-service/resource/airport.png b/src/poi-service/resource/airport.png
new file mode 100644
index 0000000..90ce0b0
--- /dev/null
+++ b/src/poi-service/resource/airport.png
Binary files differ
diff --git a/src/poi-service/resource/bicycle_shop.png b/src/poi-service/resource/bicycle_shop.png
new file mode 100644
index 0000000..aeb6e4b
--- /dev/null
+++ b/src/poi-service/resource/bicycle_shop.png
Binary files differ
diff --git a/src/poi-service/resource/car.png b/src/poi-service/resource/car.png
new file mode 100644
index 0000000..db73b2c
--- /dev/null
+++ b/src/poi-service/resource/car.png
Binary files differ
diff --git a/src/poi-service/resource/fillingstation.png b/src/poi-service/resource/fillingstation.png
new file mode 100644
index 0000000..e6a3aad
--- /dev/null
+++ b/src/poi-service/resource/fillingstation.png
Binary files differ
diff --git a/src/poi-service/resource/hotel_0star.png b/src/poi-service/resource/hotel_0star.png
new file mode 100644
index 0000000..a39c20b
--- /dev/null
+++ b/src/poi-service/resource/hotel_0star.png
Binary files differ
diff --git a/src/poi-service/resource/museum_art.png b/src/poi-service/resource/museum_art.png
new file mode 100644
index 0000000..a069b4a
--- /dev/null
+++ b/src/poi-service/resource/museum_art.png
Binary files differ
diff --git a/src/poi-service/resource/restaurant.png b/src/poi-service/resource/restaurant.png
new file mode 100644
index 0000000..76ea9f0
--- /dev/null
+++ b/src/poi-service/resource/restaurant.png
Binary files differ
diff --git a/src/poi-service/resource/train.png b/src/poi-service/resource/train.png
new file mode 100644
index 0000000..2b5cf95
--- /dev/null
+++ b/src/poi-service/resource/train.png
Binary files differ
diff --git a/src/poi-service/resource/world.png b/src/poi-service/resource/world.png
new file mode 100644
index 0000000..40790ae
--- /dev/null
+++ b/src/poi-service/resource/world.png
Binary files differ
diff --git a/src/poi-service/script/Makefile b/src/poi-service/script/Makefile
new file mode 100644
index 0000000..b5246ab
--- /dev/null
+++ b/src/poi-service/script/Makefile
@@ -0,0 +1,59 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file Makefile
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+
+ROOT_DIR=$(CURDIR)/..
+API_DIR=$(CURDIR)/../../../api
+BIN_DIR=$(ROOT_DIR)/bin
+COMMON_DIR=$(ROOT_DIR)/poi-common
+EXE_DIR=$(BIN_DIR)
+QMAKE=qmake
+CXX=g++
+CXXFLAGS=-pipe -O2 -Wall
+CHK_DIR_EXISTS=test -d
+MKDIR=mkdir -p
+
+default: help
+
+help::
+ @echo "The following targets exist"
+ @echo "all: Build $(ALL)"
+ @echo "clean: Clean up build dir"
+
+#Generate the proxies and adaptors for the DBus APIs first
+include generate-api.mk
+
+include poi-server.mk
+
+all: $(ALL)
+
+deps::
+ sudo apt-get install $(DEPS)
+
+all2: deps all
+
+clean: $(CLEAN)
+
+
diff --git a/src/poi-service/script/generate-api-for-navigation.sh b/src/poi-service/script/generate-api-for-navigation.sh
new file mode 100755
index 0000000..9ecc705
--- /dev/null
+++ b/src/poi-service/script/generate-api-for-navigation.sh
@@ -0,0 +1,30 @@
+#!/bin/sh
+API_DIR=${1-../../../api}
+TARGET_DIR=${2-../poi-common}
+echo 'clean up'
+
+echo "generate the adaptors and the proxys for the POI APIs from $API_DIR to $TARGET_DIR"
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --adaptor=${TARGET_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --proxy=${TARGET_DIR}/genivi-poiservice-contentaccessmodule_proxy.h
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --adaptor=${TARGET_DIR}/genivi-poiservice-poicontentaccess_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --proxy=${TARGET_DIR}/genivi-poiservice-poicontentaccess_proxy.h
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --adaptor=${TARGET_DIR}/genivi-poiservice-poisearch_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --proxy=${TARGET_DIR}/genivi-poiservice-poisearch_proxy.h
+
+echo 'generate the constants for the POI APIs'
+xsltproc ${API_DIR}/poi-service/enum.xsl ${API_DIR}/poi-service/genivi-poiservice-constants.xml > ${TARGET_DIR}/genivi-poiservice-constants.h
+
+echo 'generate the adaptors and the proxys for the other APIs'
+dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --adaptor=${TARGET_DIR}/genivi-navigationcore-guidance_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --proxy=${TARGET_DIR}/genivi-navigationcore-guidance_proxy.h
+dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --adaptor=${TARGET_DIR}/genivi-navigationcore-routing_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --proxy=${TARGET_DIR}/genivi-navigationcore-routing_proxy.h
+dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --adaptor=${TARGET_DIR}/genivi-positioning-enhancedposition_adaptor.h
+dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --proxy=${TARGET_DIR}/genivi-positioning-enhancedposition_proxy.h
+
+echo 'generate the constants for the other APIs'
+xsltproc ${API_DIR}/navigation-core/enum.xsl ${API_DIR}/navigation-core/genivi-navigationcore-constants.xml > ${TARGET_DIR}/genivi-navigationcore-constants.h
+xsltproc ${API_DIR}/enhanced-position-service/enum.xsl ${API_DIR}/enhanced-position-service/genivi-positioning-constants.xml > ${TARGET_DIR}/genivi-positioning-constants.h
+xsltproc ${API_DIR}/map-viewer/enum.xsl ${API_DIR}/map-viewer/genivi-mapviewer-constants.xml > ${TARGET_DIR}/genivi-mapviewer-constants.h
+
+
diff --git a/src/poi-service/script/generate-api.mk b/src/poi-service/script/generate-api.mk
new file mode 100644
index 0000000..82dcea7
--- /dev/null
+++ b/src/poi-service/script/generate-api.mk
@@ -0,0 +1,93 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file generate-api.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+COMMON_DIR=$(ROOT_DIR)/poi-common
+TARGET_GENERATED_API_DIR=$(COMMON_DIR)
+
+ALL+=generate-api
+CLEAN+=clean-generate-api
+
+help::
+ @echo "generate-api: Generate the proxies and adaptors"
+
+generate-api: generate-api-poi generate-api-other
+
+clean-generate-api::
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_adaptor.h
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_proxy.h
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_constants.h
+
+generate-api-poi:: ${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h: ${API_DIR}/poi-service/genivi-poiservice-constants.xml
+ xsltproc ${API_DIR}/poi-service/enum.xsl ${API_DIR}/poi-service/genivi-poiservice-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h
+
+generate-api-other:: ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h ${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h: ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h: ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h: ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h: ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h: ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml
+ dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h: ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml
+ dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h: ${API_DIR}/navigation-core/genivi-navigationcore-constants.xml
+ xsltproc ${API_DIR}/navigation-core/enum.xsl ${API_DIR}/navigation-core/genivi-navigationcore-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h: ${API_DIR}/enhanced-position-service/genivi-positioning-constants.xml
+ xsltproc ${API_DIR}/enhanced-position-service/enum.xsl ${API_DIR}/enhanced-position-service/genivi-positioning-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h: ${API_DIR}/map-viewer/genivi-mapviewer-constants.xml
+ xsltproc ${API_DIR}/map-viewer/enum.xsl ${API_DIR}/map-viewer/genivi-mapviewer-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h
+
diff --git a/src/poi-service/script/kill-all b/src/poi-service/script/kill-all
new file mode 100755
index 0000000..510d023
--- /dev/null
+++ b/src/poi-service/script/kill-all
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo 'kill all remaining process'
+kill -9 `ps -ef | grep poi- | grep -v grep | awk '{print $2}'`
+
diff --git a/src/poi-service/script/poi-database-sample.db b/src/poi-service/script/poi-database-sample.db
new file mode 100644
index 0000000..32145a9
--- /dev/null
+++ b/src/poi-service/script/poi-database-sample.db
Binary files differ
diff --git a/src/poi-service/script/poi-server.mk b/src/poi-service/script/poi-server.mk
new file mode 100644
index 0000000..ffbb070
--- /dev/null
+++ b/src/poi-service/script/poi-server.mk
@@ -0,0 +1,68 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file poi-server.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+POI_SERVER_SRC_DIR=$(ROOT_DIR)/poi-server
+POI_SERVER_BIN_DIR=$(BIN_DIR)/poi-server-bin
+POI_SERVER_DEPS=POI_SERVER_LIBSqlite3-dev sqlite3
+POI_SERVER_INCPATH=-I$(COMMON_DIR) -I$(POI_SERVER_SRC_DIR) -I/usr/include/glibmm-2.4 -I/usr/lib/i386-linux-gnu/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include -I/usr/include/dbus-c++-1 -I/usr/include/dbus-1.0 -I/usr/lib/i386-linux-gnu/dbus-1.0/include
+POI_SERVER_LIBS=-lglibmm-2.4 -lglib-2.0 -lgobject-2.0 -lsqlite3 -ldbus-c++-glib-1 -ldbus-c++-1 -ldbus-1
+POI_SERVER_LINK=g++
+POI_SERVER_LFLAGS=-Wl,-O1
+
+DEPS+=$(POI_SERVER_DEPS)
+ALL+=poi-server
+CLEAN+=clean-poi-server
+
+help::
+ @echo "poi-server: Build the poi server"
+
+clean-poi-server::
+ rm -rf $(POI_SERVER_BIN_DIR)
+ rm -rf $(BIN_DIR)/poi-server
+
+poi-server: $(POI_SERVER_BIN_DIR)/main.o $(POI_SERVER_BIN_DIR)/database.o
+ $(POI_SERVER_LINK) $(POI_SERVER_LFLAGS) $(POI_SERVER_BIN_DIR)/main.o $(POI_SERVER_BIN_DIR)/database.o $(POI_SERVER_LIBS) -o $(EXE_DIR)/poi-server
+
+$(POI_SERVER_BIN_DIR)/main.o: $(POI_SERVER_SRC_DIR)/main.cpp $(POI_SERVER_SRC_DIR)/poi-server-class.h \
+ $(COMMON_DIR)/genivi-positioning-constants.h \
+ $(COMMON_DIR)/genivi-mapviewer-constants.h \
+ $(COMMON_DIR)/genivi-navigationcore-constants.h \
+ $(COMMON_DIR)/genivi-poiservice-constants.h \
+ $(COMMON_DIR)/genivi-poiservice-poisearch_adaptor.h \
+ $(COMMON_DIR)/genivi-poiservice-poicontentaccess_adaptor.h \
+ $(COMMON_DIR)/genivi-navigationcore-routing_proxy.h \
+ $(COMMON_DIR)/genivi-positioning-enhancedposition_proxy.h \
+ $(COMMON_DIR)/genivi-poiservice-contentaccessmodule_proxy.h \
+ $(COMMON_DIR)/common-data-model.h \
+ $(POI_SERVER_SRC_DIR)/poi-datamodel.h \
+ $(POI_SERVER_SRC_DIR)/database.h
+ @$(CHK_DIR_EXISTS) $(POI_SERVER_BIN_DIR) || $(MKDIR) $(POI_SERVER_BIN_DIR)
+ $(CXX) -c $(CXXFLAGS) $(POI_SERVER_INCPATH) -o $(POI_SERVER_BIN_DIR)/main.o $(POI_SERVER_SRC_DIR)/main.cpp
+
+$(POI_SERVER_BIN_DIR)/database.o: $(POI_SERVER_SRC_DIR)/database.cpp $(POI_SERVER_SRC_DIR)/database.h
+ @$(CHK_DIR_EXISTS) $(POI_SERVER_BIN_DIR) || $(MKDIR) $(POI_SERVER_BIN_DIR)
+ $(CXX) -c $(CXXFLAGS) $(POI_SERVER_INCPATH) -o $(POI_SERVER_BIN_DIR)/database.o $(POI_SERVER_SRC_DIR)/database.cpp
+
+
diff --git a/src/poi-service/script/run b/src/poi-service/script/run
new file mode 100755
index 0000000..a3ca15b
--- /dev/null
+++ b/src/poi-service/script/run
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file run
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+
+echo '------------------------start the server------------------------'
+CURDIR=$PWD
+ROOT_DIR=$CURDIR/..
+BIN_DIR=$ROOT_DIR/bin
+EXE_DIR=$BIN_DIR
+MAIN_DATABASE='poi-database-sample.db'
+
+echo 'kill orphan process if necessary'
+$CURDIR/kill-all
+
+echo 'run'
+$EXE_DIR/poi-server -f $MAIN_DATABASE &
+
diff --git a/test/poi-service/.gitignore b/test/poi-service/.gitignore
new file mode 100644
index 0000000..6e9d54c
--- /dev/null
+++ b/test/poi-service/.gitignore
@@ -0,0 +1,13 @@
+#files
+*.qm
+*.odt#
+*_adaptor.h
+*_proxy.h
+genivi-*.h
+
+
+
+
+
+
+
diff --git a/test/poi-service/LICENSE b/test/poi-service/LICENSE
new file mode 100644
index 0000000..5eb5f4f
--- /dev/null
+++ b/test/poi-service/LICENSE
@@ -0,0 +1,26 @@
+/**
+ * @licence app begin@
+ * SPDX-License-Identifier: MPL-2.0
+ *
+ * \copyright Copyright (C) 2013-2014 PCA Peugeot Citroen
+ *
+ * All the Source Code of this project is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * Some part of the code is subject of the terms of other licenses:
+ * Apache License Version 2.0
+ * Creative Commons Attribution Share-Alike 3.0 License
+ * Nokia Qt LGPL 2.1 Exception 1.0 License
+ * Nokia Qt LGPL 2.1 Exception 1.1 License
+ * Data used for populating the POI database is downloaded from this site
+ * http://www.overpass-api.de/
+ * and is provided by © OpenStreetMap contributors
+ * See http://www.openstreetmap.org/copyright
+ *
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
diff --git a/test/poi-service/README b/test/poi-service/README
new file mode 100644
index 0000000..b21107e
--- /dev/null
+++ b/test/poi-service/README
@@ -0,0 +1,58 @@
+Release date of the file: 11-04-2014
+Status: to be completed
+
+Project:
+Search engine for Point Of Interest with a content access module mechanism to extend to additional sources of data
+This project is one of the navigation-service common projects that implements the GENIVI navigation APIs.
+
+More:
+The project is made of four parts:
+- poi-supplier that populates a sqlite3 based database from OSM data in xml format
+- poi-server that implements the poi search API and access an embedded database
+- poi-contentaccess-module that implements a content access module that access an additional database, and a simple HMI
+- poi-client that implements a client with a test HMI
+See also other navigation projects like navigation or proof of concepts implemented for traffic-info and positioning
+
+What is in:
+This folder contains scripts for building poi-supplier, poi-contentaccess-module and poi-client, generating the databases and launching the whole stuff (build poi-server if necessary)
+FYI: poi-server is located under src/poi-service
+
+Author:
+Philippe Colliot philippe.colliot@mpsa.com
+
+License:
+See headers and LICENSE file (mainly MPL V2)
+
+Test target:
+Ubuntu 12.04.1 LTS
+
+To get the code:
+Code is part of the navigation-service repository, so you need to clone all:
+git clone http://git.projects.genivi.org/lbs/navigation-service.git $WORKING-DIR
+
+Dependencies:
+libqt4-dev libdbus-c++-dev libxml2-dev libsqlite3-dev sqlite3 libglib2.0-dev libglibmm-2.4-dev libdbus-1-dev libxml++2.6-dev xsltproc
+
+Important notice before building the POC:
+# The software is using stream conversion, so please care if your local settings are right
+# There could be a potential runtime error due to a wrong sql request (problem with the use of ',' in place of '.')
+# so, if you enter
+locale | grep 'LC_NUMERIC'
+# you must get
+LC_NUMERIC="en_US.UTF-8"
+
+Build:
+# Enter into the directory
+cd $WORKING-DIR/navigation-service/test/poi-service/script
+make all
+
+Prepare databases, configure and run:
+As examples, three databases can be generated for Paris, Tokyo and San-Diego
+
+To launch the stuff for Paris:
+./prepare paris
+./run
+
+Clean up:
+./kill-all
+
diff --git a/test/poi-service/poi-client/about-dialog.cpp b/test/poi-service/poi-client/about-dialog.cpp
new file mode 100644
index 0000000..45e7902
--- /dev/null
+++ b/test/poi-service/poi-client/about-dialog.cpp
@@ -0,0 +1,41 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file about-dialog.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "about-dialog.h"
+#include "ui_about-dialog.h"
+
+aboutDialog::aboutDialog(QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::aboutDialog)
+{
+ ui->setupUi(this);
+}
+
+aboutDialog::~aboutDialog()
+{
+ delete ui;
+}
diff --git a/test/poi-service/poi-client/about-dialog.h b/test/poi-service/poi-client/about-dialog.h
new file mode 100644
index 0000000..94c3c9f
--- /dev/null
+++ b/test/poi-service/poi-client/about-dialog.h
@@ -0,0 +1,49 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file about-dialog.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef ABOUTDIALOG_H
+#define ABOUTDIALOG_H
+
+#include <QtGui/QDialog>
+
+namespace Ui {
+class aboutDialog;
+}
+
+class aboutDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit aboutDialog(QWidget *parent = 0);
+ ~aboutDialog();
+
+private:
+ Ui::aboutDialog *ui;
+};
+
+#endif // ABOUTDIALOG_H
diff --git a/test/poi-service/poi-client/about-dialog.ui b/test/poi-service/poi-client/about-dialog.ui
new file mode 100644
index 0000000..31fd4e1
--- /dev/null
+++ b/test/poi-service/poi-client/about-dialog.ui
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>aboutDialog</class>
+ <widget class="QDialog" name="aboutDialog">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>276</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>About</string>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(176, 196, 222);</string>
+ </property>
+ <widget class="QTextBrowser" name="textBrowser">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>20</x>
+ <y>10</y>
+ <width>361</width>
+ <height>192</height>
+ </rect>
+ </property>
+ <property name="source">
+ <url>
+ <string>qrc:/new/text/about.txt</string>
+ </url>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="pushButton">
+ <property name="geometry">
+ <rect>
+ <x>280</x>
+ <y>220</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>OK</string>
+ </property>
+ </widget>
+ <widget class="QWidget" name="widget" native="true">
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>210</y>
+ <width>231</width>
+ <height>51</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">image: url(:/new/image/psa.jpg);</string>
+ </property>
+ </widget>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>pushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>aboutDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>333</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>374</x>
+ <y>214</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/test/poi-service/poi-client/deployment.pri b/test/poi-service/poi-client/deployment.pri
new file mode 100644
index 0000000..cc21b2b
--- /dev/null
+++ b/test/poi-service/poi-client/deployment.pri
@@ -0,0 +1,126 @@
+# checksum 0x838c version 0x70002
+# This file was generated by an application wizard of Qt Creator.
+# The code below handles deployment to Symbian and Maemo, aswell as copying
+# of the application data to shadow build directories on desktop.
+# It is recommended not to modify this file, since newer versions of Qt Creator
+# may offer an updated version of it.
+
+defineTest(qtcAddDeployment) {
+for(deploymentfolder, DEPLOYMENTFOLDERS) {
+ item = item$${deploymentfolder}
+ itemsources = $${item}.sources
+ $$itemsources = $$eval($${deploymentfolder}.source)
+ itempath = $${item}.path
+ $$itempath= $$eval($${deploymentfolder}.target)
+ export($$itemsources)
+ export($$itempath)
+ DEPLOYMENT += $$item
+}
+
+MAINPROFILEPWD = $$PWD
+
+symbian {
+ isEmpty(ICON):exists($${TARGET}.svg):ICON = $${TARGET}.svg
+ isEmpty(TARGET.EPOCHEAPSIZE):TARGET.EPOCHEAPSIZE = 0x20000 0x2000000
+} else:win32 {
+ copyCommand =
+ for(deploymentfolder, DEPLOYMENTFOLDERS) {
+ source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
+ source = $$replace(source, /, \\)
+ sourcePathSegments = $$split(source, \\)
+ target = $$OUT_PWD/$$eval($${deploymentfolder}.target)/$$last(sourcePathSegments)
+ target = $$replace(target, /, \\)
+ target ~= s,\\\\\\.?\\\\,\\,
+ !isEqual(source,$$target) {
+ !isEmpty(copyCommand):copyCommand += &&
+ isEqual(QMAKE_DIR_SEP, \\) {
+ copyCommand += $(COPY_DIR) \"$$source\" \"$$target\"
+ } else {
+ source = $$replace(source, \\\\, /)
+ target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
+ target = $$replace(target, \\\\, /)
+ copyCommand += test -d \"$$target\" || mkdir -p \"$$target\" && cp -r \"$$source\" \"$$target\"
+ }
+ }
+ }
+ !isEmpty(copyCommand) {
+ copyCommand = @echo Copying application data... && $$copyCommand
+ copydeploymentfolders.commands = $$copyCommand
+ first.depends = $(first) copydeploymentfolders
+ export(first.depends)
+ export(copydeploymentfolders.commands)
+ QMAKE_EXTRA_TARGETS += first copydeploymentfolders
+ }
+} else:unix {
+ maemo5 {
+ desktopfile.files = $${TARGET}.desktop
+ desktopfile.path = /usr/share/applications/hildon
+ icon.files = $${TARGET}64.png
+ icon.path = /usr/share/icons/hicolor/64x64/apps
+ } else:!isEmpty(MEEGO_VERSION_MAJOR) {
+ desktopfile.files = $${TARGET}_harmattan.desktop
+ desktopfile.path = /usr/share/applications
+ icon.files = $${TARGET}80.png
+ icon.path = /usr/share/icons/hicolor/80x80/apps
+ } else { # Assumed to be a Desktop Unix
+ copyCommand =
+ for(deploymentfolder, DEPLOYMENTFOLDERS) {
+ source = $$MAINPROFILEPWD/$$eval($${deploymentfolder}.source)
+ source = $$replace(source, \\\\, /)
+ macx {
+ target = $$OUT_PWD/$${TARGET}.app/Contents/Resources/$$eval($${deploymentfolder}.target)
+ } else {
+ target = $$OUT_PWD/$$eval($${deploymentfolder}.target)
+ }
+ target = $$replace(target, \\\\, /)
+ sourcePathSegments = $$split(source, /)
+ targetFullPath = $$target/$$last(sourcePathSegments)
+ targetFullPath ~= s,/\\.?/,/,
+ !isEqual(source,$$targetFullPath) {
+ !isEmpty(copyCommand):copyCommand += &&
+ copyCommand += $(MKDIR) \"$$target\"
+ copyCommand += && $(COPY_DIR) \"$$source\" \"$$target\"
+ }
+ }
+ !isEmpty(copyCommand) {
+ copyCommand = @echo Copying application data... && $$copyCommand
+ copydeploymentfolders.commands = $$copyCommand
+ first.depends = $(first) copydeploymentfolders
+ export(first.depends)
+ export(copydeploymentfolders.commands)
+ QMAKE_EXTRA_TARGETS += first copydeploymentfolders
+ }
+ }
+ installPrefix = /opt/$${TARGET}
+ for(deploymentfolder, DEPLOYMENTFOLDERS) {
+ item = item$${deploymentfolder}
+ itemfiles = $${item}.files
+ $$itemfiles = $$eval($${deploymentfolder}.source)
+ itempath = $${item}.path
+ $$itempath = $${installPrefix}/$$eval($${deploymentfolder}.target)
+ export($$itemfiles)
+ export($$itempath)
+ INSTALLS += $$item
+ }
+
+ !isEmpty(desktopfile.path) {
+ export(icon.files)
+ export(icon.path)
+ export(desktopfile.files)
+ export(desktopfile.path)
+ INSTALLS += icon desktopfile
+ }
+
+ target.path = $${installPrefix}/bin
+ export(target.path)
+ INSTALLS += target
+}
+
+export (ICON)
+export (INSTALLS)
+export (DEPLOYMENT)
+export (TARGET.EPOCHEAPSIZE)
+export (TARGET.CAPABILITY)
+export (LIBS)
+export (QMAKE_EXTRA_TARGETS)
+}
diff --git a/test/poi-service/poi-client/main.cpp b/test/poi-service/poi-client/main.cpp
new file mode 100644
index 0000000..eea3c6f
--- /dev/null
+++ b/test/poi-service/poi-client/main.cpp
@@ -0,0 +1,91 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file main.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "mainwindow.h"
+#include "../poi-common/poi-marshal-handler.h"
+
+#include <QtGui/QApplication>
+#include <QTranslator>
+#include <QSettings>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MarshalHandler::registerMetaType();
+
+ QTranslator translator;
+
+ MainWindow mainWindow;
+
+ //get settings stored into the conf file (in $HOME/.config/poi-service/poi-client.conf)
+
+ QSettings settings("poi-service", "poi-client");
+ mainWindow.settingsInvalidHandle = settings.value("InvalidHandle").toUInt();
+ mainWindow.settingsPoiDisplayTableRows = settings.value("PoiDisplayTableRows").toInt();
+ mainWindow.settingsDefaultTextToSearch = settings.value("DefaultTextToSearch").toString();
+ mainWindow.settingsDefaultLocation.latitude = settings.value("DefaultLocation/latitude").toDouble();
+ mainWindow.settingsDefaultLocation.longitude = settings.value("DefaultLocation/longitude").toDouble();
+ mainWindow.settingsDefaultLocation.altitude = settings.value("DefaultLocation/altitude").toInt();
+ mainWindow.settingsDefaultTextToBeInitialized = settings.value("DefaultTextToBeInitialized").toString();
+ mainWindow.settingsDefaultRadius = settings.value("DefaultRadius").toUInt();
+ mainWindow.settingsLanguageCode = settings.value("Language/language").toString();
+ mainWindow.settingsCountryCode = settings.value("Language/country").toString();
+ mainWindow.settingsHMIlanguage = settings.value("Language/HMI").toString();
+
+ mainWindow.settingsAttributeSource = settings.value("Attribute/Source").toString();
+ mainWindow.settingsAttributeWebSite = settings.value("Attribute/WebSite").toString();
+ mainWindow.settingsAttributePhone = settings.value("Attribute/Phone").toString();
+ mainWindow.settingsAttributeStars = settings.value("Attribute/Stars").toString();
+ mainWindow.settingsAttributeOpeningHours = settings.value("Attribute/OpeningHours").toString();
+ mainWindow.settingsAttributeAddrHouseNumber = settings.value("Attribute/Number").toString();
+ mainWindow.settingsAttributeAddrStreet = settings.value("Attribute/Street").toString();
+ mainWindow.settingsAttributeAddrPostCode = settings.value("Attribute/PostCode").toString();
+ mainWindow.settingsAttributeAddrCity = settings.value("Attribute/City").toString();
+ mainWindow.settingsAttributeBrand = settings.value("Attribute/Brand").toString();
+ mainWindow.settingsAttributeOperateur = settings.value("Attribute/Operateur").toString();
+ mainWindow.settingsMapWidthInMeter = settings.value("MapWidthInMeter").toUInt();
+ mainWindow.settingsMapHeightInMeter = settings.value("MapHeightInMeter").toUInt();
+ mainWindow.settingsTimerPeriodForPosition = settings.value("TimerPeriodForPosition").toInt();
+
+ if (translator.load("poi-client_"+ mainWindow.settingsHMIlanguage,"../poi-common/"))
+ {
+ app.installTranslator(&translator);
+
+ //init ui
+ mainWindow.InitUi();
+
+ mainWindow.show();
+
+ QDBusConnection connection = QDBusConnection::sessionBus();
+
+
+ return app.exec();
+ }
+ else
+ return(-1);
+
+}
diff --git a/test/poi-service/poi-client/mainwindow.cpp b/test/poi-service/poi-client/mainwindow.cpp
new file mode 100644
index 0000000..3844941
--- /dev/null
+++ b/test/poi-service/poi-client/mainwindow.cpp
@@ -0,0 +1,1907 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file mainwindow.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "about-dialog.h"
+#include <QtCore/QCoreApplication>
+#include <QMetaType>
+#include <QFontDatabase>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent), ui(new Ui::MainWindow)
+{
+}
+
+MainWindow::~MainWindow()
+{
+ delete mp_tableViewPoi;
+ delete m_dbusPoiSearchInterface;
+ delete m_dbusNavigationRoutingInterface;
+ delete m_dbusNavigationGuidanceInterface;
+ delete m_dbusPositioningEnhancedPositionInterface;
+ delete ui;
+}
+
+/**
+ * \fn InitUi()
+ * \brief Initialize the user interface and the DBus.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::InitUi()
+{
+ uchar row,column;
+ QStringList headers;
+ double fractpart, intpart;
+ QString str;
+
+ ui->setupUi(this);
+
+ // populate table of poi
+ mp_tableViewPoi = new QStandardItemModel(settingsPoiDisplayTableRows,columnSize,this); //set up the columns and the rows of the table
+
+ // populate the column headers (order sensitive!)
+ // Must fit that order: "Name","Category","Distance","ID","Latitude","Longitude"
+ headers << QString(tr("Name")) << QString(tr("Category")) << QString(tr("Distance")) << QString(tr("ID")) << QString(tr("Latitude")) << QString(tr("Longitude"));
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operator"
+ headers << QString(tr("Source")) << QString(tr("WebSite")) << QString(tr("Phone")) << QString(tr("Stars")) << QString(tr("Open hours")) << QString(tr("Number")) << QString(tr("Street")) << QString(tr("Post code")) << QString(tr("City")) << QString(tr("Brand")) << QString(tr("Operator"));
+ headers << QString(tr("Icon"));
+
+ mp_tableViewPoi->setHorizontalHeaderLabels(headers);
+
+ for (row=0;row<settingsPoiDisplayTableRows;row++)
+ {
+ for (column =0;column<columnSize;column++)
+ {
+ QStandardItem *cell = new QStandardItem();
+ mp_tableViewPoi->setItem(row,column,cell);
+ }
+ }
+
+ //create checkboxes for getting attributes
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operator"
+ QFont font("Ubuntu",8);
+ QLabel *attribLabelSource = new QLabel(tr("Source"));
+ attribLabelSource->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelSource);
+ QCheckBox *attribGetSource = new QCheckBox();
+ attribGetSource->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetSource);
+ ui->AttributeToGetLayout->addWidget(attribGetSource);
+
+ QLabel *attribLabelWebSite = new QLabel(tr("WebSite"));
+ attribLabelWebSite->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelWebSite);
+ QCheckBox *attribGetWebSite = new QCheckBox();
+ attribGetWebSite->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetWebSite);
+ ui->AttributeToGetLayout->addWidget(attribGetWebSite);
+
+ QLabel *attribLabelPhone = new QLabel(tr("Phone"));
+ attribLabelPhone->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelPhone);
+ QCheckBox *attribGetPhone = new QCheckBox();
+ attribGetPhone->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetPhone);
+ ui->AttributeToGetLayout->addWidget(attribGetPhone);
+
+ QLabel *attribLabelStars = new QLabel(tr("Stars"));
+ attribLabelStars->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelStars);
+ QCheckBox *attribGetStars = new QCheckBox();
+ attribGetStars->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetStars);
+ ui->AttributeToGetLayout->addWidget(attribGetStars);
+
+ QLabel *attribLabelOpenHours = new QLabel(tr("Open hours"));
+ attribLabelOpenHours->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelOpenHours);
+ QCheckBox *attribGetOpenHours = new QCheckBox();
+ attribGetOpenHours->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetOpenHours);
+ ui->AttributeToGetLayout->addWidget(attribGetOpenHours);
+
+ QLabel *attribLabelHouseNumber = new QLabel(tr("Number"));
+ attribLabelHouseNumber->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelHouseNumber);
+ QCheckBox *attribGetHouseNumber = new QCheckBox();
+ attribGetHouseNumber->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetHouseNumber);
+ ui->AttributeToGetLayout->addWidget(attribGetHouseNumber);
+
+ QLabel *attribLabelStreet = new QLabel(tr("Street"));
+ attribLabelStreet->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelStreet);
+ QCheckBox *attribGetStreet = new QCheckBox();
+ attribGetStreet->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetStreet);
+ ui->AttributeToGetLayout->addWidget(attribGetStreet);
+
+ QLabel *attribLabelPostCode = new QLabel(tr("Post code"));
+ attribLabelPostCode->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelPostCode);
+ QCheckBox *attribGetPostCode = new QCheckBox();
+ attribGetPostCode->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetPostCode);
+ ui->AttributeToGetLayout->addWidget(attribGetPostCode);
+
+ QLabel *attribLabelCity = new QLabel(tr("City"));
+ attribLabelCity->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelCity);
+ QCheckBox *attribGetCity = new QCheckBox();
+ attribGetCity->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetCity);
+ ui->AttributeToGetLayout->addWidget(attribGetCity);
+
+ QLabel *attribLabelBrand = new QLabel(tr("Brand"));
+ attribLabelBrand->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelBrand);
+ QCheckBox *attribGetBrand = new QCheckBox();
+ attribGetBrand->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetBrand);
+ ui->AttributeToGetLayout->addWidget(attribGetBrand);
+
+ QLabel *attribLabelOperateur = new QLabel(tr("Operator"));
+ attribLabelOperateur->setFont(font);
+ ui->AttributeToGetLayout->addWidget(attribLabelOperateur);
+ QCheckBox *attribGetOperateur = new QCheckBox();
+ attribGetOperateur->setChecked(Qt::Unchecked);
+ mp_attributeGetCheckBox.append(attribGetOperateur);
+ ui->AttributeToGetLayout->addWidget(attribGetOperateur);
+
+ ui->table_view_poi->setModel(mp_tableViewPoi);
+
+ //no POI handle
+ m_poiSearchHandle = settingsInvalidHandle;
+ ui->poiHandle->setText(noValue);
+
+
+ //no language set
+ ui->languageCode->setText(noValue);
+ ui->countryCode->setText(noValue);
+
+ //no search mode selected
+ isSetProximityModeSelected = false;
+ isSearchAroundTheVehicleSelected = false;
+ ui->searchMode->setText(noValue);
+ ui->startSearch->setEnabled(false);
+ ui->cancelSearch->setEnabled(false);
+
+ // no route handle
+ m_routeHandle = settingsInvalidHandle;
+ m_startSearchOffset = 0; //by default from the vehicle current location
+ m_endSearchOffset = 0; //by default until the destination
+ ui->routeHandle->setText(noValue);
+
+ m_totalNumberOfSegments = 0;
+ ui->routeTotalSegments->setText(QString::number(m_totalNumberOfSegments));
+
+ //search buffer empty
+ ui->totalSize->setText(tr("EMPTY"));
+ m_totalSize = 0;
+ m_currentTopListIndex = 0;
+
+ ui->recordFrom->setText(noValue);
+ ui->recordTo->setText(noValue);
+
+ // init default location
+ m_geoLocation.latitude = settingsDefaultLocation.latitude;
+ m_geoLocation.longitude = settingsDefaultLocation.longitude;
+ m_geoLocation.altitude = settingsDefaultLocation.altitude;
+
+ if (m_geoLocation.latitude < 0)
+ {
+ ui->latitude_direction->setCurrentIndex(ui->latitude_direction->findText(tr("SOUTH")));
+ m_geoLocation.latitude *= -1;
+ }
+ else
+ ui->latitude_direction->setCurrentIndex(ui->latitude_direction->findText(tr("NORTH")));
+
+ if (m_geoLocation.longitude < 0)
+ {
+ ui->longitude_direction->setCurrentIndex(ui->longitude_direction->findText(tr("WEST")));
+ m_geoLocation.longitude *= -1;
+ }
+ else
+ ui->longitude_direction->setCurrentIndex(ui->longitude_direction->findText(tr("EAST")));
+
+
+ fractpart = (modf(m_geoLocation.latitude, &intpart))*60;
+ str.setNum(intpart);
+ ui->latitude_degree->setText(str);
+ fractpart = modf(fractpart, &intpart);
+ str.setNum(intpart);
+ ui->latitude_minute->setText(str);
+ fractpart = (modf(fractpart*60, &intpart));
+ str.setNum(intpart);
+ ui->latitude_second->setText(str);
+
+ fractpart = (modf(m_geoLocation.longitude, &intpart))*60;
+ str.setNum(intpart);
+ ui->longitude_degree->setText(str);
+ fractpart = modf(fractpart, &intpart);
+ str.setNum(intpart);
+ ui->longitude_minute->setText(str);
+ fractpart = (modf(fractpart*60, &intpart));
+ str.setNum(intpart);
+ ui->longitude_second->setText(str);
+
+ //no current location for the time being
+ ui->currentLocationLatitude->setText(noValue);
+ ui->currentLocationLongitude->setText(noValue);
+
+ // default version
+ ui->VersionSearch->setText(noValue);
+
+ // default text to search
+ ui->stringToSearch->setText(settingsDefaultTextToSearch);
+
+ //status
+ manageStatus(GENIVI_POISERVICE_NOT_STARTED);
+
+ //connect the graphic scene and the graphic view
+ ui->graphicsView->setScene(&m_scenePOI);
+
+ m_scenePOI.setForegroundBrush(QColor(255, 255, 255, 127));
+ m_scenePOI.setForegroundBrush(QBrush(Qt::lightGray, Qt::CrossPattern));
+ m_scenePOI.setSceneRect(0,0,ui->graphicsView->width(),ui->graphicsView->height());
+ m_mapWidth = ui->graphicsView->width();
+ m_mapHeight = ui->graphicsView->height();
+ m_mapCenterX = ui->graphicsView->width()/2;
+ m_mapCenterY = ui->graphicsView->height()/2;
+
+ // init D-Bus (every interfaces on the session bus)
+ //create instances of clients
+ m_dbusPoiSearchInterface = new org::genivi::poiservice::poiSearch::DBusSearchInterface("org.genivi.poiservice.POISearch", "/org/genivi/poiservice/POISearch",
+ QDBusConnection::sessionBus(), this);
+ m_dbusContentAccessInterface = new org::genivi::poiservice::poiContentAccess::DBusContentAccessInterface("org.genivi.poiservice.POIContentAccess","/org/genivi/poiservice/POIContentAccess",
+ QDBusConnection::sessionBus(), this);
+ m_dbusNavigationRoutingInterface = new org::genivi::navigationcore::Routing::DBusRoutingInterface("org.genivi.navigationcore.Routing", "/org/genivi/navigationcore",
+ QDBusConnection::sessionBus(), this);
+ m_dbusNavigationGuidanceInterface = new org::genivi::navigationcore::Guidance::DBusGuidanceInterface("org.genivi.navigationcore.Guidance", "/org/genivi/navigationcore",
+ QDBusConnection::sessionBus(), this);
+ m_dbusPositioningEnhancedPositionInterface = new org::genivi::positioning::EnhancedPosition::DBusEnhancedPositionInterface("org.genivi.positioning.EnhancedPosition", "/position",
+ QDBusConnection::sessionBus(), this);
+ m_dbusNavigationCoreSessionInterface = new org::genivi::navigationcore::Session::DBusNavigationCoreSessionInterface("org.genivi.navigationcore.Session", "/org/genivi/navigationcore",
+ QDBusConnection::sessionBus(), this );
+
+ //connect to signals
+ QObject::connect(m_dbusPoiSearchInterface, SIGNAL(PoiStatus(uchar,ushort)), this, SLOT(on_DBusSignalPoiStatus(uchar,ushort)));
+ QObject::connect(m_dbusPoiSearchInterface, SIGNAL(ResultListChanged(uchar,ushort)), this, SLOT(on_DBusSignalResultListChanged(uchar,ushort)));
+ QObject::connect(m_dbusPoiSearchInterface, SIGNAL(CategoriesUpdated(QList<poiCategoryAndReason_t>)), this, SLOT(on_DBusSignalCategoriesUpdated(QList<poiCategoryAndReason_t>)));
+
+ QObject::connect(m_dbusNavigationRoutingInterface, SIGNAL(RouteCalculationSuccessful(uchar,tupleUshort_t)),this,SLOT(on_DBusSignalRouteCalculationSuccessful(uchar, tupleUshort_t)));
+ QObject::connect(m_dbusNavigationRoutingInterface, SIGNAL(RouteDeleted(uchar)),this,SLOT(on_DBusSignalRouteDeleted(uchar)));
+
+ QObject::connect(m_dbusPositioningEnhancedPositionInterface, SIGNAL(PositionUpdate(QList<ushort>)),this,SLOT(on_DBusSignalPositionUpdate(QList<ushort>)));
+
+ // start periodic timer for position
+ m_dbusPositioningEnhancedPositionInterface->startTimerForPosition(settingsTimerPeriodForPosition);
+
+ initSettings();
+}
+
+/**
+ * \fn select_category()
+ * \brief Invoke the DBus methods SetCategories and SetAttributes before launching a search.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::select_category()
+{
+ QList<poiSearch_t> poi_search_list;
+ poiSearch_t poi_search;
+ ushort index,attribute_index;
+ QList<poiAttributeFull_t> poi_attribute_list;
+ poiAttributeFull_t poi_attribute;
+ uint radius_displayed;
+
+ // Update the requested categories
+ // read the panel values and update the ellipses for embedded data
+ for (index=0; index < m_poiCategoryList.size(); index++)
+ {
+ if (mp_categoryCheckBox[index]->isChecked())
+ { //poi category selected for the search
+ poi_search.id = m_poiCategoryList.at(index).id;
+ poi_search.radius = (mp_radiusLineEditBox.at(index)->text().toUInt())/10; //radius sent in ten of meters
+ radius_displayed = ((mp_radiusLineEditBox.at(index)->text().toUInt())*m_mapWidth)/(2*settingsMapWidthInMeter);
+ mp_radiusEllipse.at(index)->setRect(QRectF((m_mapCenterX - radius_displayed/2), (m_mapCenterY - radius_displayed/2), radius_displayed, radius_displayed));
+ mp_radiusEllipse.at(index)->show();
+ poi_search_list << poi_search;
+ }
+ else
+ mp_radiusEllipse.at(index)->hide();
+ }
+
+ // read the panel values and update the ellipses for additional data
+ for (index=0; index < m_poiCategoryListAdditional.size(); index++)
+ {
+ if (mp_categoryCheckBoxAdditional[index]->isChecked())
+ { //poi category selected for the search
+ poi_search.id = m_poiCategoryListAdditional.at(index).id;
+ poi_search.radius = (mp_radiusLineEditBoxAdditional.at(index)->text().toUInt())/10; //radius sent in ten of meters
+ radius_displayed = ((mp_radiusLineEditBoxAdditional.at(index)->text().toUInt())*m_mapWidth)/(2*settingsMapWidthInMeter);
+ mp_radiusEllipseAdditional.at(index)->setRect(QRectF((m_mapCenterX - radius_displayed/2), (m_mapCenterY - radius_displayed/2), radius_displayed, radius_displayed));
+ mp_radiusEllipseAdditional.at(index)->show();
+ poi_search_list << poi_search;
+ }
+ else
+ mp_radiusEllipseAdditional.at(index)->hide();
+ }
+
+ //call the method with the list
+ QDBusPendingReply<> reply_0 = m_dbusPoiSearchInterface->SetCategories(m_poiSearchHandle,poi_search_list);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+
+ // Update the requested attributes
+ // read the panel values for embedded data
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ for (index=0; index < m_poiCategoryList.size(); index++)
+ {
+ //preset the structure with default values
+ poi_attribute.poiCategory = m_poiCategoryList.at(index).id;
+ poi_attribute.value = QDBusVariant("no value");
+ poi_attribute.mandatory = true;
+ if (mp_categoryCheckBox[index]->isChecked())
+ { //poi category selected for the search
+ attribute_index = 0;
+ if (mp_attributeSourceCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeSourceCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeWebSiteCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeWebSiteCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributePhoneCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributePhoneCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeStarsCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeStarsCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_INTEGER;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeOpeningHoursCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeOpeningHoursCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrHouseNumberCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrHouseNumberCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrStreetCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrStreetCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrPostCodeCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrPostCodeCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_INTEGER;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrCityCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrCityCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeBrandCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeBrandCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeOperateurCheckBox.at(index)->isEnabled())
+ {
+ if (mp_attributeOperateurCheckBox.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsList.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ }
+ }
+
+ // read the panel values for additional data
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ for (index=0; index < m_poiCategoryListAdditional.size(); index++)
+ {
+ //preset the structure with default values
+ poi_attribute.poiCategory = m_poiCategoryListAdditional.at(index).id;
+ poi_attribute.value = QDBusVariant("no value");
+ poi_attribute.mandatory = true;
+ if (mp_categoryCheckBoxAdditional[index]->isChecked())
+ { //poi category selected for the search
+ attribute_index = 0;
+ if (mp_attributeSourceCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeSourceCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeWebSiteCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeWebSiteCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributePhoneCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributePhoneCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeStarsCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeStarsCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_INTEGER;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name;
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeOpeningHoursCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeOpeningHoursCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrHouseNumberCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrHouseNumberCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrStreetCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrStreetCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrPostCodeCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrPostCodeCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_INTEGER;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeAddrCityCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeAddrCityCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeBrandCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeBrandCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ if (mp_attributeOperateurCheckBoxAdditional.at(index)->isEnabled())
+ {
+ if (mp_attributeOperateurCheckBoxAdditional.at(index)->isChecked())
+ {
+ poi_attribute.type = GENIVI_POISERVICE_STRING;
+ poi_attribute.name = m_poiCategoryDetailsListAdditional.at(index).attributes.at(attribute_index).name; // dirty, to be enhanced !
+ poi_attribute.id = attribute_index;
+ poi_attribute_list.append(poi_attribute);
+ }
+ attribute_index++;
+ }
+ }
+ }
+
+ //call the method with the list
+ QDBusPendingReply<> reply_1 = m_dbusPoiSearchInterface->SetAttributes(m_poiSearchHandle,poi_attribute_list);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+}
+
+/**
+ * \fn on_startSearch_clicked()
+ * \brief Start search around the vehicle invoke the DBus methods SetCategories, SetAttributes and StartPoiSearch.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::on_startSearch_clicked()
+{
+ ushort sortOption = GENIVI_POISERVICE_SORT_DEFAULT;
+
+ if ((isSearchAroundTheVehicleSelected == false) && (isSetProximityModeSelected == false))
+ {
+ isSearchAroundTheVehicleSelected = true;
+
+ if (ui->checkLocation->isChecked())
+ { //location is given by enhanced position (current vehicle position)
+ if ((ui->currentLocationLatitude->text() == noValue)&&(ui->currentLocationLongitude->text() == noValue))
+ { //no location received
+ // get default location
+ ui->searchMode->setText(tr("Around the default location"));
+ m_geoLocation.latitude = settingsDefaultLocation.latitude;
+ m_geoLocation.longitude = settingsDefaultLocation.longitude;
+ m_geoLocation.altitude = settingsDefaultLocation.altitude;
+ }
+ else
+ { //get last location received
+ ui->searchMode->setText(tr("Around the vehicle"));
+ m_geoLocation.latitude = ui->currentLocationLatitude->text().toDouble();
+ m_geoLocation.longitude = ui->currentLocationLongitude->text().toDouble();
+ //todo manage the altitude
+ }
+
+ }
+ else
+ { //location is set by the user
+ //get the value of the location on the panel
+ ui->searchMode->setText(tr("Around a location"));
+ m_geoLocation.latitude = ui->latitude_degree->text().toDouble() + (ui->latitude_minute->text().toDouble()/60) + (ui->latitude_second->text().toDouble()/3600);
+ m_geoLocation.longitude = ui->longitude_degree->text().toDouble() + (ui->longitude_minute->text().toDouble()/60) + (ui->longitude_second->text().toDouble()/3600);
+
+ if (ui->latitude_direction->currentIndex() == ui->latitude_direction->findText(tr("SOUTH")))
+ m_geoLocation.latitude *= -1;
+
+ if (ui->longitude_direction->currentIndex() == ui->longitude_direction->findText(tr("WEST")))
+ m_geoLocation.longitude *= -1;
+ }
+
+ //set the center
+ QDBusPendingReply<> reply_0 = m_dbusPoiSearchInterface->SetCenter(m_poiSearchHandle,m_geoLocation);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+
+ //select the categories
+ select_category();
+
+ //start the search
+ QDBusPendingReply<> reply_1 = m_dbusPoiSearchInterface->StartPoiSearch(m_poiSearchHandle,ui->stringToSearch->text(),sortOption);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ }
+}
+
+/**
+ * \fn on_cancelSearch_clicked()
+ * \brief Stop search around the vehicle, invoke the DBus method CancelPoiSearch.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::on_cancelSearch_clicked()
+{
+ if (isSearchAroundTheVehicleSelected == true)
+ {
+ isSearchAroundTheVehicleSelected = false;
+ ui->searchMode->setText(noValue);
+ clearViewTable();
+ ui->totalSize->setText(tr("EMPTY"));
+ m_totalSize = 0;
+ m_currentTopListIndex = 0;
+ ui->recordFrom->setText(noValue);
+ ui->recordTo->setText(noValue);
+
+ QDBusPendingReply<> reply_0 = m_dbusPoiSearchInterface->CancelPoiSearch(m_poiSearchHandle);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ }
+}
+
+/**
+ * \fn on_createpoiHandle_clicked()
+ * \brief Invoke the DBus method CreatePoiSearchHandle and set the m_poiSearchHandle.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::on_createpoiHandle_clicked()
+{
+ QString str;
+ QDBusPendingReply<uchar> reply = m_dbusPoiSearchInterface->CreatePoiSearchHandle();
+ reply.waitForFinished();
+ if (reply.isError())
+ manageDBusError(reply.reply()); // call failed
+ else
+ {
+ m_poiSearchHandle = reply.value();// use the returned value
+ str = QString(tr("NUMBER")) + QString(": ") + QString::number(m_poiSearchHandle);
+ ui->poiHandle->setText(str);
+ ui->startSearch->setEnabled(true);
+ ui->cancelSearch->setEnabled(true);
+ }
+}
+
+/**
+ * \fn on_deletepoiHandle_clicked()
+ * \brief Invoke the DBus method DeletePoiSearchHandle and reset the m_poiSearchHandle.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::on_deletepoiHandle_clicked()
+{
+ QDBusPendingReply<> reply = m_dbusPoiSearchInterface->DeletePoiSearchHandle(m_poiSearchHandle);
+ reply.waitForFinished();
+ if (reply.isError())
+ manageDBusError(reply.reply()); // call failed
+ else
+ {
+ m_poiSearchHandle = settingsInvalidHandle;
+ ui->poiHandle->setText(noValue);
+ ui->startSearch->setEnabled(false);
+ ui->cancelSearch->setEnabled(false);
+ }
+}
+
+/**
+ * \fn initSettings()
+ * \brief Init the settings of the application, invoke DBus methods GetAvailableCategories, GetCategoriesDetails, GetVersion and GetRootCategory.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::initSettings()
+{
+ ushort index,sub_index;
+ uint radius;
+ version_t version;
+ QList<ushort> categories;
+
+ // dbus must be connected !
+
+ // init the languages
+ // for the poi search
+ QDBusPendingReply<> reply_4 = m_dbusPoiSearchInterface->SetLanguage(settingsLanguageCode,settingsCountryCode);
+ reply_4.waitForFinished();
+ if (reply_4.isError())
+ manageDBusError(reply_4.reply()); // call failed
+ else
+ { // get the language to check if it's ok
+ QDBusPendingReply<QString,QString> reply_5 = m_dbusPoiSearchInterface->GetLanguage();
+ reply_5.waitForFinished();
+ if (reply_5.isError())
+ manageDBusError(reply_5.reply()); // call failed
+ else
+ {
+ if ((qdbus_cast<QString>(reply_5.argumentAt(0)) == settingsLanguageCode) && (qdbus_cast<QString>(reply_5.argumentAt(1)) == settingsCountryCode))
+ {
+ ui->languageCode->setText(settingsLanguageCode);
+ ui->countryCode->setText(settingsCountryCode);
+ }
+ }
+ }
+
+ // init values provided by the POISearch server
+
+ // GetAvailableCategories
+ QDBusPendingReply<QList<poiCategoryFull_t> > reply_0 = m_dbusPoiSearchInterface->GetAvailableCategories();
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ else
+ { // get the categories and update the panel
+ m_poiCategoryList.append(reply_0.value());
+ for (index=0;index < m_poiCategoryList.size(); index++)
+ {
+ categories << m_poiCategoryList.at(index).id;
+
+ QCheckBox *cat = new QCheckBox();
+ cat->setText(QString::fromStdString(m_poiCategoryList.at(index).name));
+ cat->setChecked(Qt::Unchecked);
+ mp_categoryCheckBox.append(cat);
+ ui->CategoryLayout->addWidget(cat);
+
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+
+ QCheckBox *attribSource = new QCheckBox();
+ attribSource->setChecked(Qt::Unchecked);
+ mp_attributeSourceCheckBox.append(attribSource);
+ ui->SourceLayout->addWidget(attribSource);
+
+ QCheckBox *attribWebSite = new QCheckBox();
+ attribWebSite->setChecked(Qt::Unchecked);
+ mp_attributeWebSiteCheckBox.append(attribWebSite);
+ ui->WebSiteLayout->addWidget(attribWebSite);
+
+ QCheckBox *attribPhone = new QCheckBox();
+ attribPhone->setChecked(Qt::Unchecked);
+ mp_attributePhoneCheckBox.append(attribPhone);
+ ui->PhoneLayout->addWidget(attribPhone);
+
+ QCheckBox *attribStars = new QCheckBox();
+ attribStars->setChecked(Qt::Unchecked);
+ mp_attributeStarsCheckBox.append(attribStars);
+ ui->StarsLayout->addWidget(attribStars);
+
+ QCheckBox *attribOpeningHours = new QCheckBox();
+ attribStars->setChecked(Qt::Unchecked);
+ mp_attributeOpeningHoursCheckBox.append(attribOpeningHours);
+ ui->OpeningHoursLayout->addWidget(attribOpeningHours);
+
+ QCheckBox *attribAddrHouseNumber = new QCheckBox();
+ attribAddrHouseNumber->setChecked(Qt::Unchecked);
+ mp_attributeAddrHouseNumberCheckBox.append(attribAddrHouseNumber);
+ ui->AddrHouseNumberLayout->addWidget(attribAddrHouseNumber);
+
+ QCheckBox *attribAddrStreet = new QCheckBox();
+ attribAddrStreet->setChecked(Qt::Unchecked);
+ mp_attributeAddrStreetCheckBox.append(attribAddrStreet);
+ ui->AddrStreetLayout->addWidget(attribAddrStreet);
+
+ QCheckBox *attribAddrPostCode = new QCheckBox();
+ attribAddrPostCode->setChecked(Qt::Unchecked);
+ mp_attributeAddrPostCodeCheckBox.append(attribAddrPostCode);
+ ui->AddrPostCodeLayout->addWidget(attribAddrPostCode);
+
+ QCheckBox *attribAddrCity = new QCheckBox();
+ attribAddrCity->setChecked(Qt::Unchecked);
+ mp_attributeAddrCityCheckBox.append(attribAddrCity);
+ ui->AddrCityLayout->addWidget(attribAddrCity);
+
+ QCheckBox *attribBrand = new QCheckBox();
+ attribBrand->setChecked(Qt::Unchecked);
+ mp_attributeBrandCheckBox.append(attribBrand);
+ ui->BrandLayout->addWidget(attribBrand);
+
+ QCheckBox *attribOperateur = new QCheckBox();
+ attribOperateur->setChecked(Qt::Unchecked);
+ mp_attributeOperateurCheckBox.append(attribOperateur);
+ ui->OperateurLayout->addWidget(attribOperateur);
+
+ QLineEdit *rad = new QLineEdit();
+ rad->setText(QString::number(settingsDefaultRadius));
+ mp_radiusLineEditBox.append(rad);
+ ui->RadiusLayout->addWidget(rad);
+
+ radius = (settingsDefaultRadius*m_mapWidth)/(2*settingsMapWidthInMeter);
+ QGraphicsEllipseItem *ellipse = m_scenePOI.addEllipse(QRectF((m_mapCenterX - radius/2), (m_mapCenterY - radius/2), radius, radius), QPen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin), QBrush(Qt::NoBrush));
+ ellipse->hide();
+ mp_radiusEllipse.append(ellipse);
+ }
+ }
+
+ QDBusPendingReply<QList<categoryDetailsList_t> > reply_1 = m_dbusPoiSearchInterface->GetCategoriesDetails(categories);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ else
+ { // get the categories details and update the panel
+ m_poiCategoryDetailsList.append(reply_1.value());
+ for (index=0;index < m_poiCategoryDetailsList.size(); index++)
+ {
+ if (m_poiCategoryList.at(index).id != m_poiCategoryDetailsList.at(index).details.id)
+ {
+ //to do manage the error
+ break;
+ }
+ else
+ {
+ //disable all the attributes as a default setting value
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ mp_attributeSourceCheckBox.at(index)->setEnabled(false);
+ mp_attributeWebSiteCheckBox.at(index)->setEnabled(false);
+ mp_attributePhoneCheckBox.at(index)->setEnabled(false);
+ mp_attributeStarsCheckBox.at(index)->setEnabled(false);
+ mp_attributeOpeningHoursCheckBox.at(index)->setEnabled(false);
+ mp_attributeAddrHouseNumberCheckBox.at(index)->setEnabled(false);
+ mp_attributeAddrStreetCheckBox.at(index)->setEnabled(false);
+ mp_attributeAddrPostCodeCheckBox.at(index)->setEnabled(false);
+ mp_attributeAddrCityCheckBox.at(index)->setEnabled(false);
+ mp_attributeBrandCheckBox.at(index)->setEnabled(false);
+ mp_attributeOperateurCheckBox.at(index)->setEnabled(false);
+ //get the available attributes for the category
+ // dirty code here (use of #define), need to be improved !!
+ for (sub_index=0;sub_index<m_poiCategoryDetailsList.at(index).attributes.size();sub_index++)
+ {
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeSource.toStdString())
+ mp_attributeSourceCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeWebSite.toStdString())
+ mp_attributeWebSiteCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributePhone.toStdString())
+ mp_attributePhoneCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeStars.toStdString())
+ mp_attributeStarsCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeOpeningHours.toStdString())
+ mp_attributeOpeningHoursCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeAddrHouseNumber.toStdString())
+ mp_attributeAddrHouseNumberCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeAddrStreet.toStdString())
+ mp_attributeAddrStreetCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeAddrPostCode.toStdString())
+ mp_attributeAddrPostCodeCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeAddrCity.toStdString())
+ mp_attributeAddrCityCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeBrand.toStdString())
+ mp_attributeBrandCheckBox.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsList.at(index).attributes.at(sub_index).name == settingsAttributeOperateur.toStdString())
+ mp_attributeOperateurCheckBox.at(index)->setEnabled(true);
+ }
+ }
+ }
+ }
+
+ // GetVersion of the poisearch component
+ QDBusPendingReply<version_t > reply_2 = m_dbusPoiSearchInterface->GetVersion();
+ reply_2.waitForFinished();
+ if (reply_2.isError())
+ manageDBusError(reply_2.reply()); // call failed
+ else
+ { // get the version and update the panel
+ version = reply_2.value();
+ ui->VersionSearch->setText("Search: " + QString::number(version.major) + "." + QString::number(version.minor) + "." + QString::number(version.micro) + " " + QString::fromStdString(version.date));
+ }
+
+ // GetRootCategory
+ QDBusPendingReply<ushort > reply_3 = m_dbusPoiSearchInterface->GetRootCategory();
+ reply_3.waitForFinished();
+ if (reply_3.isError())
+ manageDBusError(reply_3.reply()); // call failed
+ else
+ { // get the root category and update the panel
+ m_rootCategory.id = reply_3.value();
+ }
+}
+
+/**
+ * \fn
+ * \brief .
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::on_About_clicked()
+{
+ aboutDialog about(this);
+ about.exec();
+}
+
+/**
+ * \fn refreshViewTable(ushort windowSize)
+ * \brief Refresh the POI view by invoking the DBus methods RequestResultList and GetPoiDetails.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::refreshViewTable(ushort windowSize)
+{
+ ushort index,sub_index,index_in_table;
+ QString str;
+ QList<std::string> attributes;
+ QList<resultSearch_t> poiList;
+ QList<resultSearchDetails_t> poiDetailsList;
+ QList<uint> idList;
+
+ //populate attributes list with the requested attributes (dirty, to be improved)
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_SOURCE)->isChecked())
+ attributes << settingsAttributeSource.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_WEBSITE)->isChecked())
+ attributes << settingsAttributeWebSite.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_PHONE)->isChecked())
+ attributes << settingsAttributePhone.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_STARS)->isChecked())
+ attributes << settingsAttributeStars.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_OPENINGHOURS)->isChecked())
+ attributes << settingsAttributeOpeningHours.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_ADDRHOUSENUMBER)->isChecked())
+ attributes << settingsAttributeAddrHouseNumber.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_ADDRSTREET)->isChecked())
+ attributes << settingsAttributeAddrStreet.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_ADDRPOSTCODE)->isChecked())
+ attributes << settingsAttributeAddrPostCode.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_ADDRCITY)->isChecked())
+ attributes << settingsAttributeAddrCity.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_BRAND)->isChecked())
+ attributes << settingsAttributeBrand.toStdString();
+ if (mp_attributeGetCheckBox.at(ATTRIBUTE_OPERATEUR)->isChecked())
+ attributes << settingsAttributeOperateur.toStdString();
+
+ clearViewTable();
+
+ // RequestResultList
+ QDBusPendingReply<ushort, ushort, QList<resultSearch_t> >reply_0 = m_dbusPoiSearchInterface->RequestResultList(m_poiSearchHandle, m_currentTopListIndex, windowSize, attributes);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ else
+ { // get the poi and update the panel
+ if (qdbus_cast<ushort>(reply_0.argumentAt(0)) == GENIVI_POISERVICE_FINISHED) //check status
+ {
+ poiList << (qdbus_cast<QList<resultSearch_t> >(reply_0.argumentAt(2))); //get the list
+ if (qdbus_cast<ushort>(reply_0.argumentAt(1)) != m_totalSize)
+ {
+ //POIListChanged gives a size that is different from the size given by this method ?
+ }
+ if (poiList.size() > 0) //check if list not empty to avoid crash !
+ {
+ for(index=0;index<qdbus_cast<ushort>(reply_0.argumentAt(1));index++)
+ {
+ mp_tableViewPoi->item(index,columnDistance)->setText(QString::number(poiList.at(index).distance));
+ mp_tableViewPoi->item(index,columnId)->setText(QString::number(poiList.at(index).id));
+ idList.push_back(poiList.at(index).id);
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ for (sub_index=0;sub_index<poiList.at(index).attributes.size();sub_index++)
+ {
+ str = poiList.at(index).attributes.at(sub_index).value.variant().toString();
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeSource.toStdString())
+ mp_tableViewPoi->item(index,columnSource)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeWebSite.toStdString())
+ mp_tableViewPoi->item(index,columnWebSite)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributePhone.toStdString())
+ mp_tableViewPoi->item(index,columnPhone)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeStars.toStdString())
+ mp_tableViewPoi->item(index,columnStars)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeOpeningHours.toStdString())
+ mp_tableViewPoi->item(index,columnOpeningHours)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeAddrHouseNumber.toStdString())
+ mp_tableViewPoi->item(index,columnAddrHouseNumber)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeAddrStreet.toStdString())
+ mp_tableViewPoi->item(index,columnAddrStreet)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeAddrPostCode.toStdString())
+ mp_tableViewPoi->item(index,columnAddrPostcode)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeAddrCity.toStdString())
+ mp_tableViewPoi->item(index,columnAddrCity)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeBrand.toStdString())
+ mp_tableViewPoi->item(index,columnBrand)->setText(str);
+ else
+ if (poiList.at(index).attributes.at(sub_index).name == settingsAttributeOperateur.toStdString())
+ mp_tableViewPoi->item(index,columnOperateur)->setText(str);
+ }
+ }
+ }
+ }
+ }
+
+ // GetPoiDetails
+ QDBusPendingReply<QList<resultSearchDetails_t> >reply_1 = m_dbusPoiSearchInterface->GetPoiDetails(idList);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ else
+ { // get the poi and update the panel
+ poiDetailsList.append(reply_1.value());
+ if (poiDetailsList.size() > 0)
+ {
+ for(index=0;index<poiDetailsList.size();index++)
+ {
+ mp_tableViewPoi->item(index,columnName)->setText(poiDetailsList.at(index).details.name);
+ if (giveCategoryIndex(poiDetailsList.at(index).categories.at(0),&index_in_table) == true)
+ { //found into the embedded data
+ mp_tableViewPoi->item(index,columnCategory)->setText(QString::fromStdString(m_poiCategoryList.at(index_in_table).name)); //only one category !
+ mp_tableViewPoi->item(index,columnIcon)->setText(m_poiCategoryDetailsList.at(index_in_table).details.icons.variant().toString());
+ QPixmap pixmap(mp_tableViewPoi->item(index,columnIcon)->text());
+ m_tableIconPOI.append(pixmap);
+ }
+ else
+ { //search into the additional data
+ if (giveCategoryIndexAdditional(poiDetailsList.at(index).categories.at(0),&index_in_table) == true)
+ { //found into the additional data
+ mp_tableViewPoi->item(index,columnCategory)->setText(QString::fromStdString(m_poiCategoryListAdditional.at(index_in_table).name)); //only one category !
+ mp_tableViewPoi->item(index,columnIcon)->setText(m_poiCategoryDetailsListAdditional.at(index_in_table).details.icons.variant().toString());
+ QPixmap pixmap(mp_tableViewPoi->item(index,columnIcon)->text());
+ m_tableIconPOI.append(pixmap);
+ }
+ }
+ mp_tableViewPoi->item(index,columnLatitude)->setText(QString::number(poiDetailsList.at(index).details.latitude));
+ mp_tableViewPoi->item(index,columnLongitude)->setText(QString::number(poiDetailsList.at(index).details.longitude));
+ }
+ }
+ }
+ ui->recordFrom->setText(QString::number(m_currentTopListIndex));
+ ui->recordTo->setText(QString::number(m_currentTopListIndex+windowSize-1));
+}
+
+/**
+ * \fn on_getTopList_clicked()
+ * \brief get top records of the list.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::on_getTopList_clicked()
+{
+ if (m_totalSize != 0)
+ {
+ m_currentTopListIndex = 0;
+ if (m_totalSize > settingsPoiDisplayTableRows)
+ refreshViewTable(settingsPoiDisplayTableRows);
+ else
+ refreshViewTable(m_totalSize);
+ }
+}
+
+/**
+ * \fn on_getNextList_clicked()
+ * \brief get next records.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::on_getNextList_clicked()
+{
+ if (m_totalSize != 0)
+ {
+ if ((m_currentTopListIndex + settingsPoiDisplayTableRows) < m_totalSize)
+ {
+ m_currentTopListIndex += settingsPoiDisplayTableRows;
+ if ((m_currentTopListIndex + settingsPoiDisplayTableRows) < m_totalSize)
+ refreshViewTable(settingsPoiDisplayTableRows);
+ else
+ refreshViewTable(m_totalSize - m_currentTopListIndex);
+ }
+ else
+ { //end of list reached, do something ?
+
+ }
+ }
+}
+
+/**
+ * \fn on_getPrevList_clicked()
+ * \brief get previous records.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::on_getPrevList_clicked()
+{
+ if (m_totalSize != 0)
+ {
+ if (m_currentTopListIndex >= settingsPoiDisplayTableRows)
+ { //not the top page
+ m_currentTopListIndex -= settingsPoiDisplayTableRows;
+ refreshViewTable(settingsPoiDisplayTableRows);
+ }
+ else
+ { //top of list reached, do something ?
+
+ }
+ }
+}
+
+
+
+/**
+ * \fn on_setProximity_clicked()
+ * \brief Set proximity alert invoke the DBus methods SetCategories, SetAttributes, SetCenter and StartPoiProximityAlert.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::on_setProximity_clicked()
+{
+ ushort sortOption = GENIVI_POISERVICE_SORT_DEFAULT;
+
+ if ((isSetProximityModeSelected == false) && (isSearchAroundTheVehicleSelected == false))
+ {
+ isSetProximityModeSelected = true;
+ ui->searchMode->setText(tr("Proximity search"));
+
+ //select the categories
+ select_category();
+
+ //set the proximity alert
+ QDBusPendingReply<> reply_1 = m_dbusPoiSearchInterface->StartPoiProximityAlert(m_poiSearchHandle,ui->stringToSearch->text(),sortOption);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ }
+}
+
+/**
+ * \fn on_cancelProximity_clicked()
+ * \brief Stop proximity alert, invoke the DBus method CancelPoiProximityAlert.
+ *
+ * \param
+ * \return
+ */
+void MainWindow::on_cancelProximity_clicked()
+{
+ if (isSetProximityModeSelected == true)
+ {
+ isSetProximityModeSelected = false;
+ ui->searchMode->setText(noValue);
+
+ //search around a location unset
+ QDBusPendingReply<> reply_0 = m_dbusPoiSearchInterface->CancelPoiProximityAlert(m_poiSearchHandle);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ }
+}
+
+
+//Management of DBus signals
+/**
+ * \fn on_DBusSignalPoiStatus(uchar poiSearchHandle,ushort statusValue)
+ * \brief Signal received when the POI status changed.
+ *
+ * \param uchar poiSearchHandle
+ * \param ushort statusValue
+ * \return
+ */
+void MainWindow::on_DBusSignalPoiStatus(uchar poiSearchHandle,ushort statusValue)
+{
+ if (poiSearchHandle == m_poiSearchHandle)
+ {
+ manageStatus(statusValue);
+ }
+}
+
+/**
+ * \fn on_DBusSignalResultListChanged(uchar poiSearchHandle,ushort totalSize)
+ * \brief Signal received when the result list changed.
+ *
+ * \param uchar poiSearchHandle
+ * \param ushort totalSize
+ * \return
+ */
+void MainWindow::on_DBusSignalResultListChanged(uchar poiSearchHandle,ushort resultListSize)
+{
+ QString str;
+ if (poiSearchHandle == m_poiSearchHandle)
+ {
+ m_totalSize = resultListSize;
+ if (m_totalSize == 0)
+ ui->totalSize->setText(tr("EMPTY"));
+ else
+ {
+ str = QString::number(m_totalSize) + " record(s)";
+ ui->totalSize->setText(str);
+ clearViewTable();
+ m_currentTopListIndex = 0;
+ ui->recordFrom->setText("");
+ ui->recordTo->setText("");
+ }
+ }
+}
+
+/**
+ * \fn on_DBusSignalCategoriesRegistered(QList<ushort> poiCategories)
+ * \brief Signal received when new categories have been registered, invokes the DBus method GetAvailableCategories and GetCategoriesDetails.
+ *
+ * \param QList<ushort> poiCategories
+ * \param
+ * \return
+ */
+void MainWindow::on_DBusSignalCategoriesUpdated(QList<poiCategoryAndReason_t> poiCategoriesAndReason)
+{
+ ushort index,sub_index;
+ uint radius;
+ QList<poiCategoryFull_t> poiList;
+ QList<ushort> categories;
+ QCheckBox *item;
+ QLineEdit *line;
+ QGraphicsEllipseItem *ellipse;
+
+ // Because of relatively low amount of categories, strategy is to clean up everything and to refresh the whole additional categories
+ // Implementation is not really the right way to manage it, needs to be improved
+ // Preliminary clean up
+
+ // Clean up display
+ for (index=0;index < mp_categoryCheckBoxAdditional.size();index++)
+ {
+ item = mp_categoryCheckBoxAdditional.at(index);
+ delete item;
+ }
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ for (index=0;index < mp_attributeSourceCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeSourceCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeWebSiteCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeWebSiteCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributePhoneCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributePhoneCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeStarsCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeStarsCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeOpeningHoursCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeOpeningHoursCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeAddrHouseNumberCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeAddrHouseNumberCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeAddrStreetCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeAddrStreetCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeAddrPostCodeCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeAddrPostCodeCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeAddrCityCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeAddrCityCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeBrandCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeBrandCheckBoxAdditional.at(index);
+ delete item;
+ }
+ for (index=0;index < mp_attributeOperateurCheckBoxAdditional.size();index++)
+ {
+ item = mp_attributeOperateurCheckBoxAdditional.at(index);
+ delete item;
+ }
+
+ for (index=0;index < mp_radiusLineEditBoxAdditional.size();index++)
+ {
+ line = mp_radiusLineEditBoxAdditional.at(index);
+ delete line;
+ }
+ for (index=0;index < mp_radiusEllipseAdditional.size();index++)
+ {
+ ellipse = mp_radiusEllipseAdditional.at(index);
+ delete ellipse;
+ }
+
+ // Clean up tables
+ m_poiCategoryListAdditional.clear();
+ m_poiCategoryDetailsListAdditional.clear();
+ mp_categoryCheckBoxAdditional.clear();
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ mp_attributeSourceCheckBoxAdditional.clear();
+ mp_attributeWebSiteCheckBoxAdditional.clear();
+ mp_attributePhoneCheckBoxAdditional.clear();
+ mp_attributeStarsCheckBoxAdditional.clear();
+ mp_attributeOpeningHoursCheckBoxAdditional.clear();
+ mp_attributeAddrHouseNumberCheckBoxAdditional.clear();
+ mp_attributeAddrStreetCheckBoxAdditional.clear();
+ mp_attributeAddrPostCodeCheckBoxAdditional.clear();
+ mp_attributeAddrCityCheckBoxAdditional.clear();
+ mp_attributeBrandCheckBoxAdditional.clear();
+ mp_attributeOperateurCheckBoxAdditional.clear();
+ mp_radiusLineEditBoxAdditional.clear();
+ mp_radiusEllipseAdditional.clear();
+
+
+ // GetAvailableCategories (the embedded and the additional)
+ QDBusPendingReply<QList<poiCategoryFull_t> > reply_0 = m_dbusPoiSearchInterface->GetAvailableCategories();
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ else
+ { // check if it's an additional category and update the additional panel
+ poiList.append(reply_0.value());
+ categories.clear(); // list used for the GetCategoriesDetails
+ for (index=0;index < poiList.size(); index++)
+ {
+ if (isNewCategory(poiList.at(index).id,poiCategoriesAndReason) == true)
+ {
+ m_poiCategoryListAdditional.push_back(poiList.at(index));
+
+ categories << poiList.at(index).id;
+
+ QCheckBox *cat = new QCheckBox();
+ cat->setText(QString::fromStdString((poiList.at(index)).name));
+ cat->setChecked(Qt::Unchecked);
+ mp_categoryCheckBoxAdditional.append(cat);
+ ui->CategoryLayoutAdditional->addWidget(cat);
+
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ QCheckBox *attribSource = new QCheckBox();
+ attribSource->setChecked(Qt::Unchecked);
+ attribSource->setEnabled(false);
+ mp_attributeSourceCheckBoxAdditional.append(attribSource);
+ ui->SourceLayoutAdditional->addWidget(attribSource);
+
+ QCheckBox *attribWebSite = new QCheckBox();
+ attribWebSite->setChecked(Qt::Unchecked);
+ attribWebSite->setEnabled(false);
+ mp_attributeWebSiteCheckBoxAdditional.append(attribWebSite);
+ ui->WebSiteLayoutAdditional->addWidget(attribWebSite);
+
+ QCheckBox *attribPhone = new QCheckBox();
+ attribPhone->setChecked(Qt::Unchecked);
+ attribPhone->setEnabled(false);
+ mp_attributePhoneCheckBoxAdditional.append(attribPhone);
+ ui->PhoneLayoutAdditional->addWidget(attribPhone);
+
+ QCheckBox *attribStars = new QCheckBox();
+ attribStars->setChecked(Qt::Unchecked);
+ attribStars->setEnabled(false);
+ mp_attributeStarsCheckBoxAdditional.append(attribStars);
+ ui->StarsLayoutAdditional->addWidget(attribStars);
+
+ QCheckBox *attribOpeningHours = new QCheckBox();
+ attribOpeningHours->setChecked(Qt::Unchecked);
+ attribOpeningHours->setEnabled(false);
+ mp_attributeOpeningHoursCheckBoxAdditional.append(attribOpeningHours);
+ ui->OpeningHoursLayoutAdditional->addWidget(attribOpeningHours);
+
+ QCheckBox *attribAddrHouseNumber = new QCheckBox();
+ attribAddrHouseNumber->setChecked(Qt::Unchecked);
+ attribAddrHouseNumber->setEnabled(false);
+ mp_attributeAddrHouseNumberCheckBoxAdditional.append(attribAddrHouseNumber);
+ ui->AddrHouseNumberLayoutAdditional->addWidget(attribAddrHouseNumber);
+
+ QCheckBox *attribAddrStreet = new QCheckBox();
+ attribAddrStreet->setChecked(Qt::Unchecked);
+ attribAddrStreet->setEnabled(false);
+ mp_attributeAddrStreetCheckBoxAdditional.append(attribAddrStreet);
+ ui->AddrStreetLayoutAdditional->addWidget(attribAddrStreet);
+
+ QCheckBox *attribAddrPostCode = new QCheckBox();
+ attribAddrPostCode->setChecked(Qt::Unchecked);
+ attribAddrPostCode->setEnabled(false);
+ mp_attributeAddrPostCodeCheckBoxAdditional.append(attribAddrPostCode);
+ ui->AddrPostCodeLayoutAdditional->addWidget(attribAddrPostCode);
+
+ QCheckBox *attribAddrCity = new QCheckBox();
+ attribAddrCity->setChecked(Qt::Unchecked);
+ attribAddrCity->setEnabled(false);
+ mp_attributeAddrCityCheckBoxAdditional.append(attribAddrCity);
+ ui->AddrCityLayoutAdditional->addWidget(attribAddrCity);
+
+ QCheckBox *attribBrand = new QCheckBox();
+ attribBrand->setChecked(Qt::Unchecked);
+ attribBrand->setEnabled(false);
+ mp_attributeBrandCheckBoxAdditional.append(attribBrand);
+ ui->BrandLayoutAdditional->addWidget(attribBrand);
+
+ QCheckBox *attribOperateur = new QCheckBox();
+ attribOperateur->setChecked(Qt::Unchecked);
+ attribOperateur->setEnabled(false);
+ mp_attributeOperateurCheckBoxAdditional.append(attribOperateur);
+ ui->OperateurLayoutAdditional->addWidget(attribOperateur);
+
+ QLineEdit *rad = new QLineEdit();
+ rad->setText(QString::number(settingsDefaultRadius));
+ mp_radiusLineEditBoxAdditional.append(rad);
+ ui->RadiusLayoutAdditional->addWidget(rad);
+
+ radius = (settingsDefaultRadius*m_mapWidth)/(2*settingsMapWidthInMeter);
+ QGraphicsEllipseItem *ellipse = m_scenePOI.addEllipse(QRectF((m_mapCenterX - radius/2), (m_mapCenterY - radius/2), radius, radius), QPen(Qt::green, 3, Qt::DashDotLine, Qt::RoundCap, Qt::RoundJoin), QBrush(Qt::NoBrush));
+ ellipse->hide();
+ mp_radiusEllipseAdditional.append(ellipse);
+ }
+ }
+ }
+
+ // GetCategoriesDetails
+ QDBusPendingReply<QList<categoryDetailsList_t> > reply_1 = m_dbusPoiSearchInterface->GetCategoriesDetails(categories);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ else
+ { // get the categories details and update the panel
+ m_poiCategoryDetailsListAdditional.append(reply_1.value());
+ for (index=0;index < m_poiCategoryDetailsListAdditional.size(); index++)
+ {
+ if (m_poiCategoryListAdditional.at(index).id != m_poiCategoryDetailsListAdditional.at(index).details.id)
+ {
+ //to do manage the error
+ break;
+ }
+ else
+ {
+ //get the available attributes for the category
+ // dirty code here (use of #define), need to be improved !!
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ for (sub_index=0;sub_index<m_poiCategoryDetailsListAdditional.at(index).attributes.size();sub_index++)
+ {
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeSource.toStdString())
+ mp_attributeSourceCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeWebSite.toStdString())
+ mp_attributeWebSiteCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributePhone.toStdString())
+ mp_attributePhoneCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeStars.toStdString())
+ mp_attributeStarsCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeOpeningHours.toStdString())
+ mp_attributeOpeningHoursCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeAddrHouseNumber.toStdString())
+ mp_attributeAddrHouseNumberCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeAddrStreet.toStdString())
+ mp_attributeAddrStreetCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeAddrPostCode.toStdString())
+ mp_attributeAddrPostCodeCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeAddrCity.toStdString())
+ mp_attributeAddrCityCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeBrand.toStdString())
+ mp_attributeBrandCheckBoxAdditional.at(index)->setEnabled(true);
+ else
+ if (m_poiCategoryDetailsListAdditional.at(index).attributes.at(sub_index).name == settingsAttributeOperateur.toStdString())
+ mp_attributeOperateurCheckBoxAdditional.at(index)->setEnabled(true);
+ }
+ }
+ }
+ }
+}
+
+
+/**
+ * \fn on_DBusSignalPositionUpdate(QList<ushort> changedValues)
+ * \brief Signal received when the position changed, invokes the DBus method GetPosition.
+ *
+ * \param QList<ushort> changedValues
+ * \param
+ * \return
+ */
+void MainWindow::on_DBusSignalPositionUpdate(QList<ushort> changedValues)
+{
+ tupleVariant_t position;
+ tupleVariant_t satelliteInfo;
+ QList<satellitedetails_t> satelliteDetailsList;
+ QVariant value1;
+
+ //todo management of kind of values updated
+
+ // GetPosition
+ QDBusPendingReply<tupleVariant_t>reply_0 = m_dbusPositioningEnhancedPositionInterface->GetPosition();
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+ else
+ {
+ position = reply_0.value();
+ if (position.contains(GENIVI_ENHANCEDPOSITIONSERVICE_LATITUDE))
+ ui->currentLocationLatitude->setText(QString::number(position.value(GENIVI_ENHANCEDPOSITIONSERVICE_LATITUDE).variant().toDouble()));
+ if (position.contains(GENIVI_ENHANCEDPOSITIONSERVICE_LONGITUDE))
+ ui->currentLocationLongitude->setText(QString::number(position.value(GENIVI_ENHANCEDPOSITIONSERVICE_LONGITUDE).variant().toDouble()));
+
+ }
+
+ // GetSatelliteInfo
+ QDBusPendingReply<tupleVariant_t>reply_1 = m_dbusPositioningEnhancedPositionInterface->GetSatelliteInfo();
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ else
+ {
+ satelliteInfo = reply_1.value();
+ if (satelliteInfo.contains(GENIVI_ENHANCEDPOSITIONSERVICE_VISIBLE_SATELLITES))
+ {
+ m_satelliteAmount = satelliteInfo.value(GENIVI_ENHANCEDPOSITIONSERVICE_VISIBLE_SATELLITES).variant().toUInt();
+ }
+ if (satelliteInfo.contains(GENIVI_ENHANCEDPOSITIONSERVICE_SATELLITE_DETAILS))
+ {
+ value1 = satelliteInfo.value(GENIVI_ENHANCEDPOSITIONSERVICE_SATELLITE_DETAILS).variant();
+ satelliteDetailsList.clear();
+ value1.value<QDBusArgument>() >> satelliteDetailsList;
+ }
+ }
+
+}
+
+/**
+ * \fn on_DBusSignalRouteCalculationSuccessful(uchar sessionHandle, uchar routeHandle, QList<ushort> unfullfilledPreferences)
+ * \brief Signal received when a route calculation is done, invokes the DBus methods SetRouteHandle, GetRouteBoundingBox and GetRouteSegments.
+ *
+ * \param uchar routeHandle
+ * \param QList<ushort> unfullfilledPreferences
+ * \return
+ */
+void MainWindow::on_DBusSignalRouteCalculationSuccessful(uchar routeHandle, tupleUshort_t unfullfilledPreferences)
+{
+ QString str;
+ short detailLevel;
+ QList<ushort> valuesToReturn;
+ uint numberOfSegments;
+ uint offset;
+ int index;
+ route_vector_t routeVector;
+ QList<tupleVariant_t> routeSegments;
+
+ m_routeHandle = routeHandle;
+ ui->searchMode->setText(tr("Along a route"));
+ str = QString(tr("NUMBER")) + QString(": ") + QString::number(m_routeHandle);
+ ui->routeHandle->setText(str);
+ m_totalNumberOfSegments = 0; //reset the number of segments
+ m_route.clear();//empty the route
+
+ //Set the route on the server
+ QDBusPendingReply<> reply_0 = m_dbusPoiSearchInterface->SetRouteHandle(m_poiSearchHandle,m_sessionHandle, m_routeHandle,m_startSearchOffset,m_endSearchOffset);
+ reply_0.waitForFinished();
+ if (reply_0.isError())
+ manageDBusError(reply_0.reply()); // call failed
+
+ //Get the bounding box for displaying it on the client
+ QDBusPendingReply<boundingBox_t> reply_1 = m_dbusNavigationRoutingInterface->GetRouteBoundingBox(m_sessionHandle, m_routeHandle);
+ reply_1.waitForFinished();
+ if (reply_1.isError())
+ manageDBusError(reply_1.reply()); // call failed
+ else
+ {
+
+ }
+
+ //Get the amount of segments
+ detailLevel = 1;
+ offset = 0;
+ numberOfSegments = 0; //just to get the total amount !
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LATITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_START_LONGITUDE);
+ valuesToReturn.push_back(GENIVI_NAVIGATIONCORE_END_LONGITUDE);
+
+ QDBusPendingReply<uint,QList<tupleVariant_t> > reply_2 = m_dbusNavigationRoutingInterface->GetRouteSegments(m_routeHandle,detailLevel,valuesToReturn,numberOfSegments,offset);
+ reply_2.waitForFinished();
+ if (reply_2.isError())
+ manageDBusError(reply_2.reply()); // call failed
+ else
+ {
+ m_totalNumberOfSegments = qdbus_cast<uint>(reply_2.argumentAt(0));
+ ui->routeTotalSegments->setText(QString::number(m_totalNumberOfSegments));
+ }
+
+ //Get the whole route
+ numberOfSegments = m_totalNumberOfSegments;
+ QDBusPendingReply<uint,QList<tupleVariant_t> > reply_3 = m_dbusNavigationRoutingInterface->GetRouteSegments(m_routeHandle,detailLevel,valuesToReturn,numberOfSegments,offset);
+ reply_3.waitForFinished();
+ if (reply_3.isError())
+ manageDBusError(reply_3.reply()); // call failed
+ else
+ {
+ routeSegments << (qdbus_cast<QList<tupleVariant_t> >(reply_3.argumentAt(1))); //get the list
+ for (index=0;index<routeSegments.size();index++)
+ {
+ if (routeSegments.at(index).contains(GENIVI_NAVIGATIONCORE_START_LATITUDE))
+ routeVector.startPoint.latitude = routeSegments.at(index).value(GENIVI_NAVIGATIONCORE_START_LATITUDE).variant().toDouble();
+ if (routeSegments.at(index).contains(GENIVI_NAVIGATIONCORE_START_LONGITUDE))
+ routeVector.startPoint.longitude = routeSegments.at(index).value(GENIVI_NAVIGATIONCORE_START_LONGITUDE).variant().toDouble();
+ if (routeSegments.at(index).contains(GENIVI_NAVIGATIONCORE_END_LATITUDE))
+ routeVector.endPoint.latitude = routeSegments.at(index).value(GENIVI_NAVIGATIONCORE_END_LATITUDE).variant().toDouble();
+ if (routeSegments.at(index).contains(GENIVI_NAVIGATIONCORE_END_LONGITUDE))
+ routeVector.endPoint.longitude = routeSegments.at(index).value(GENIVI_NAVIGATIONCORE_END_LONGITUDE).variant().toDouble();
+ m_route.push_back(routeVector);
+ }
+ }
+
+}
+
+/**
+ * \fn on_DBusSignalRouteDeleted(uchar sessionHandle, uchar routeHandle)
+ * \brief Signal recieved when a route is deleted.
+ *
+ * \param uchar routeHandle
+ * \return
+ */
+void MainWindow::on_DBusSignalRouteDeleted(uchar routeHandle)
+{
+ if (m_routeHandle == routeHandle)
+ {
+ m_routeHandle = GENIVI_POISERVICE_INVALID;
+ }
+}
+
+//Utilities
+/**
+ * \fn clearViewTable()
+ * \brief clean up the view table.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::clearViewTable()
+{
+ uchar row,column;
+
+ m_tableIconPOI.clear();
+ for (row=0;row<settingsPoiDisplayTableRows;row++)
+ {
+ for (column =0;column<columnSize;column++)
+ {
+ mp_tableViewPoi->item(row,column)->setText("");
+ }
+ }
+
+
+}
+
+/**
+ * \fn manageDBusError(QDBusMessage reply)
+ * \brief manage the error that appears on the dbus.
+ *
+ * \param
+ * \param
+ * \return
+ */
+void MainWindow::manageDBusError(QDBusMessage reply)
+{
+ qDebug() << reply.errorMessage();
+}
+
+/**
+ * \fn manageStatus(ushort statusValue)
+ * \brief manage the string displayed according to the status.
+ *
+ * \param ushort statusValue
+ * \param
+ * \return
+ */
+void MainWindow::manageStatus(ushort statusValue)
+{
+ QString str;
+
+ m_searchStatus = statusValue;
+
+ switch(statusValue)
+ {
+ case GENIVI_POISERVICE_INVALID:
+ str="INVALID";
+ break;
+ case GENIVI_POISERVICE_NOT_STARTED:
+ str="NOT_STARTED";
+ break;
+ case GENIVI_POISERVICE_SEARCHING:
+ str="SEARCHING";
+ break;
+ case GENIVI_POISERVICE_FINISHED:
+ str="FINISHED";
+ break;
+ default:
+ str="INVALID";
+ break;
+ }
+ ui->search_status->setText(str);
+}
+
+
+/**
+ * \fn giveCategoryIndex(ushort id,ushort* index_in_table)
+ * \brief give the index of the category into the embedded data.
+ *
+ * \param ushort id . The category id
+ * \param ushort* index_in_table . The index
+ * \param
+ * \return true if index found
+ */
+bool MainWindow::giveCategoryIndex(ushort id,ushort* index_in_table)
+{
+ bool isFound;
+
+ isFound = false;
+ *index_in_table = 0;
+ do
+ {
+ if (m_poiCategoryList.at(*index_in_table).id == id)
+ {
+ isFound = true;
+ }
+ else
+ *index_in_table += 1;
+ } while ((isFound == false) && (*index_in_table <m_poiCategoryList.size()));
+ return(isFound);
+}
+
+/**
+ * \fn giveCategoryIndexAdditional(ushort id,ushort* index_in_table)
+ * \brief give the index of the category into the additional data.
+ *
+ * \param ushort id . The category id
+ * \param ushort* index_in_table . The index
+ * \param
+ * \return true if index found
+ */
+bool MainWindow::giveCategoryIndexAdditional(ushort id,ushort* index_in_table)
+{
+ bool isFound;
+
+ isFound = false;
+ *index_in_table = 0;
+ do
+ {
+ if (m_poiCategoryListAdditional.at(*index_in_table).id == id)
+ {
+ isFound = true;
+ }
+ else
+ *index_in_table += 1;
+ } while ((isFound == false) && (*index_in_table <m_poiCategoryListAdditional.size()));
+ return(isFound);
+}
+
+bool MainWindow::isNewCategory(ushort id,QList<poiCategoryAndReason_t> poiList)
+{
+ bool isFound;
+ ushort index = 0;
+ isFound = false;
+
+ do
+ {
+ if ((poiList.at(index).reason == GENIVI_POISERVICE_ADDED)&&poiList.at(index).id == id)
+ isFound = true;
+ else
+ ++index;
+ } while ((isFound == false) && (index < poiList.size()));
+ return(isFound);
+}
diff --git a/test/poi-service/poi-client/mainwindow.h b/test/poi-service/poi-client/mainwindow.h
new file mode 100644
index 0000000..000fe85
--- /dev/null
+++ b/test/poi-service/poi-client/mainwindow.h
@@ -0,0 +1,257 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file mainwindow.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QtGui/QMainWindow>
+#include "QStandardItemModel"
+#include <QtDBus>
+#include <QDBusArgument>
+#include <QCheckBox>
+#include <QLineEdit>
+#include <QListWidgetItem>
+#include <QGraphicsScene>
+#include <QGraphicsEllipseItem>
+#include "../poi-common/genivi-positioning-constants.h"
+#include "../poi-common/genivi-mapviewer-constants.h"
+#include "../poi-common/genivi-navigationcore-constants.h"
+#include "../poi-common/genivi-poiservice-constants.h"
+
+#include "poi-client-DBusSearchInterface.h"
+#include "poi-client-DBusContentAccessInterface.h"
+#include "poi-client-DBusRoutingInterface.h"
+#include "poi-client-DBusGuidanceInterface.h"
+#include "poi-client-DBusEnhancedPositionInterface.h"
+#include "poi-client-DBusNavigationCoreSessionInterface.h"
+
+namespace Ui {
+ class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+public:
+ enum ScreenOrientation {
+ ScreenOrientationLockPortrait,
+ ScreenOrientationLockLandscape,
+ ScreenOrientationAuto
+ };
+
+ explicit MainWindow(QWidget *parent = 0);
+ virtual ~MainWindow();
+
+ void InitUi();
+
+// settings (from the config file)
+ uint settingsInvalidHandle;
+ int settingsPoiDisplayTableRows; //max number of rows displayed at a time
+ QString settingsDefaultTextToSearch;
+ geoCoordinate3D_t settingsDefaultLocation;
+ QString settingsDefaultTextToBeInitialized;
+ uint settingsDefaultRadius;
+ version_t settingsVersion;
+ QString settingsLanguageCode;
+ QString settingsCountryCode;
+ QString settingsHMIlanguage;
+
+ // Must fit that list and order of attributes: "Source","WebSite","Phone","Stars","Open hours","HouseNumber","Street","Post code","City","Brand","Operateur"
+ QString settingsAttributeSource;
+ QString settingsAttributeWebSite;
+ QString settingsAttributePhone;
+ QString settingsAttributeStars;
+ QString settingsAttributeOpeningHours;
+ QString settingsAttributeAddrHouseNumber;
+ QString settingsAttributeAddrStreet;
+ QString settingsAttributeAddrPostCode;
+ QString settingsAttributeAddrCity;
+ QString settingsAttributeBrand;
+ QString settingsAttributeOperateur;
+
+ uint settingsMapWidthInMeter;
+ uint settingsMapHeightInMeter;
+ int settingsTimerPeriodForPosition;
+
+
+private slots:
+
+ void on_startSearch_clicked();
+
+ void on_createpoiHandle_clicked();
+
+ void on_deletepoiHandle_clicked();
+
+ void on_cancelSearch_clicked();
+
+ void on_About_clicked();
+
+ void on_getTopList_clicked();
+
+ void on_getNextList_clicked();
+
+ void on_getPrevList_clicked();
+
+ void on_DBusSignalPoiStatus(uchar poiSearchHandle,ushort statusValue);
+
+ void on_DBusSignalResultListChanged(uchar poiSearchHandle,ushort resultListSize);
+
+ void on_DBusSignalCategoriesUpdated(QList<poiCategoryAndReason_t> poiCategories);
+
+ void on_DBusSignalPositionUpdate(QList<ushort> changedValues);
+
+ void on_DBusSignalRouteCalculationSuccessful(uchar routeHandle,tupleUshort_t unfullfilledPreferences);
+
+ void on_DBusSignalRouteDeleted(uchar routeHandle);
+
+ void on_setProximity_clicked();
+
+ void on_cancelProximity_clicked();
+
+
+private:
+
+ void select_category();
+ void manageDBusError(QDBusMessage reply);
+ void initSettings();
+ void manageStatus(ushort statusValue);
+ void refreshViewTable(ushort windowSize);
+ void clearViewTable();
+ bool giveCategoryIndex(ushort id,ushort *index_in_table);
+ bool giveCategoryIndexAdditional(ushort id,ushort *index_in_table);
+ bool isNewCategory(ushort id,QList<poiCategoryAndReason_t> poiList);
+
+ enum tableViewPoiConstants
+ {
+ columnName = 0,
+ columnCategory = 1,
+ columnDistance = 2,
+ columnId = 3,
+ columnLatitude = 4,
+ columnLongitude = 5,
+ columnSource = 6,
+ columnWebSite = 7,
+ columnPhone = 8,
+ columnStars = 9,
+ columnOpeningHours = 10,
+ columnAddrHouseNumber = 11,
+ columnAddrStreet = 12,
+ columnAddrPostcode = 13,
+ columnAddrCity = 14,
+ columnBrand = 15,
+ columnOperateur = 16,
+ columnIcon = 17,
+ columnSize
+ };
+
+ Ui::MainWindow *ui;
+ QGraphicsScene m_scenePOI;
+ QList<QPixmap> m_tableIconPOI;
+
+ //handles to DBus interfaces
+ org::genivi::poiservice::poiSearch::DBusSearchInterface *m_dbusPoiSearchInterface;
+ org::genivi::navigationcore::Routing::DBusRoutingInterface *m_dbusNavigationRoutingInterface;
+ org::genivi::navigationcore::Guidance::DBusGuidanceInterface *m_dbusNavigationGuidanceInterface;
+ DBusEnhancedPositionInterface *m_dbusPositioningEnhancedPositionInterface;
+ org::genivi::navigationcore::Session::DBusNavigationCoreSessionInterface *m_dbusNavigationCoreSessionInterface;
+ org::genivi::poiservice::poiContentAccess::DBusContentAccessInterface *m_dbusContentAccessInterface;
+
+ geoCoordinate3D_t m_geoLocation;
+
+ //handles to managed elements by GENIVI components
+ uint m_poiSearchHandle;
+ uchar m_routeHandle;
+ uchar m_sessionHandle;
+
+ std::string m_languageCode;
+ std::string m_countryCode;
+
+ ushort m_searchStatus;
+
+ poiCategoryFull_t m_rootCategory;
+
+ QList<poiCategoryFull_t> m_poiCategoryList;
+ QList<poiCategoryFull_t> m_poiCategoryListAdditional;
+ QList<categoryDetailsList_t> m_poiCategoryDetailsList;
+ QList<categoryDetailsList_t> m_poiCategoryDetailsListAdditional;
+
+ QList<QLineEdit*> mp_radiusLineEditBox;
+ QList<QCheckBox*> mp_categoryCheckBox;
+
+ QList<QCheckBox*> mp_attributeSourceCheckBox;
+ QList<QCheckBox*> mp_attributeWebSiteCheckBox;
+ QList<QCheckBox*> mp_attributePhoneCheckBox;
+ QList<QCheckBox*> mp_attributeStarsCheckBox;
+ QList<QCheckBox*> mp_attributeOpeningHoursCheckBox;
+ QList<QCheckBox*> mp_attributeAddrHouseNumberCheckBox;
+ QList<QCheckBox*> mp_attributeAddrStreetCheckBox;
+ QList<QCheckBox*> mp_attributeAddrPostCodeCheckBox;
+ QList<QCheckBox*> mp_attributeAddrCityCheckBox;
+ QList<QCheckBox*> mp_attributeBrandCheckBox;
+ QList<QCheckBox*> mp_attributeOperateurCheckBox;
+ QList<QCheckBox*> mp_attributeGetCheckBox;
+
+ QList<QLineEdit*> mp_radiusLineEditBoxAdditional;
+ QList<QCheckBox*> mp_categoryCheckBoxAdditional;
+
+ QList<QCheckBox*> mp_attributeSourceCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeWebSiteCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributePhoneCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeStarsCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeOpeningHoursCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeAddrHouseNumberCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeAddrStreetCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeAddrPostCodeCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeAddrCityCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeBrandCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeOperateurCheckBoxAdditional;
+ QList<QCheckBox*> mp_attributeGetCheckBoxAdditional;
+
+ QStandardItemModel *mp_tableViewPoi;
+ ushort m_totalSize;
+ ushort m_currentTopListIndex;
+ ushort m_startSearchOffset;
+ ushort m_endSearchOffset;
+
+ //
+ QList<QGraphicsEllipseItem*> mp_radiusEllipse;
+ QList<QGraphicsEllipseItem*> mp_radiusEllipseAdditional;
+ QList<QBrush> m_categoryColor;
+ uint m_mapWidth;
+ uint m_mapHeight;
+ uint m_mapCenterX;
+ uint m_mapCenterY;
+ uint m_totalNumberOfSegments;
+ QList<route_vector_t> m_route;
+ bool isSetProximityModeSelected;
+ bool isSearchAroundTheVehicleSelected;
+
+ QList<satellitedetails_t> m_satelliteDetails;
+ uchar m_satelliteAmount;
+};
+
+#endif // MAINWINDOW_H
diff --git a/test/poi-service/poi-client/mainwindow.ui b/test/poi-service/poi-client/mainwindow.ui
new file mode 100644
index 0000000..098df07
--- /dev/null
+++ b/test/poi-service/poi-client/mainwindow.ui
@@ -0,0 +1,1509 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="enabled">
+ <bool>true</bool>
+ </property>
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>910</width>
+ <height>768</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>910</width>
+ <height>768</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>910</width>
+ <height>768</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>POI Search Proof Of Concept</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../poi-common/POIPOCResource.qrc">
+ <normaloff>:/new/image/POIPOCClient.png</normaloff>:/new/image/POIPOCClient.png</iconset>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(176, 196, 222);</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <widget class="QWidget" name="verticalLayoutWidget">
+ <property name="geometry">
+ <rect>
+ <x>460</x>
+ <y>10</y>
+ <width>141</width>
+ <height>51</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Search mode</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="searchMode">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_2">
+ <property name="geometry">
+ <rect>
+ <x>150</x>
+ <y>10</y>
+ <width>281</width>
+ <height>220</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_2">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Search around &lt;/p&gt;&lt;p&gt; a location&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_8">
+ <item>
+ <widget class="QCheckBox" name="checkLocation">
+ <property name="text">
+ <string>Current</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_9">
+ <item>
+ <widget class="QLabel" name="label_16">
+ <property name="text">
+ <string>Lat:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="currentLocationLatitude">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_10">
+ <item>
+ <widget class="QLabel" name="label_17">
+ <property name="text">
+ <string>Lon:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="currentLocationLongitude">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="latitude_layout">
+ <item>
+ <widget class="QComboBox" name="latitude_direction">
+ <property name="font">
+ <font>
+ <pointsize>7</pointsize>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <item>
+ <property name="text">
+ <string>NORTH</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>SOUTH</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="latitude_degree"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="latitude_minute"/>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="latitude_second"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_3">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="longitude_layout">
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QComboBox" name="longitude_direction">
+ <property name="font">
+ <font>
+ <pointsize>7</pointsize>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <item>
+ <property name="text">
+ <string>EAST</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>WEST</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="longitude_degree"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_5">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="longitude_minute"/>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="longitude_second"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_6">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_17">
+ <item>
+ <widget class="QLineEdit" name="stringToSearch">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout_16">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <spacer name="horizontalSpacer_13">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="startSearch">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>SEARCH</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_14">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_6">
+ <item>
+ <spacer name="horizontalSpacer_16">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="cancelSearch">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>CANCEL</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_25">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_4">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>133</y>
+ <width>111</width>
+ <height>101</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_4">
+ <item>
+ <widget class="QLabel" name="label_4">
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Set proximity alert</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_11">
+ <item>
+ <widget class="QPushButton" name="setProximity">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>SET</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_12">
+ <item>
+ <widget class="QPushButton" name="cancelProximity">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>UNSET</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_5">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>111</width>
+ <height>111</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_5">
+ <item>
+ <widget class="QLabel" name="label_5">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Manage poi handle</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_8">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="poiHandle">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="createpoiHandle">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>CREATE</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="deletepoiHandle">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>DELETE</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_3">
+ <property name="geometry">
+ <rect>
+ <x>460</x>
+ <y>80</y>
+ <width>141</width>
+ <height>81</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QLabel" name="label_8">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Search status</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="verticalSpacer_9">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLabel" name="search_status">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="totalSize">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="Line" name="line">
+ <property name="geometry">
+ <rect>
+ <x>130</x>
+ <y>10</y>
+ <width>20</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ <widget class="Line" name="line_3">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>240</y>
+ <width>891</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="Line" name="line_4">
+ <property name="geometry">
+ <rect>
+ <x>430</x>
+ <y>10</y>
+ <width>20</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ <widget class="Line" name="line_10">
+ <property name="geometry">
+ <rect>
+ <x>630</x>
+ <y>10</y>
+ <width>20</width>
+ <height>231</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ <widget class="QWidget" name="widget" native="true">
+ <property name="geometry">
+ <rect>
+ <x>670</x>
+ <y>40</y>
+ <width>121</width>
+ <height>91</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">image: url(:/new/image/GENIVI_Black_Logo-no_background.png);</string>
+ </property>
+ </widget>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>260</y>
+ <width>891</width>
+ <height>471</height>
+ </rect>
+ </property>
+ <property name="currentIndex">
+ <number>1</number>
+ </property>
+ <widget class="QWidget" name="searchSettings">
+ <property name="accessibleName">
+ <string/>
+ </property>
+ <attribute name="title">
+ <string>Categories</string>
+ </attribute>
+ <widget class="QWidget" name="verticalLayoutWidget_7">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>120</y>
+ <width>861</width>
+ <height>171</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <item>
+ <layout class="QHBoxLayout" name="CategoryDetailsLayout">
+ <item>
+ <layout class="QVBoxLayout" name="CategoryLayout">
+ <item>
+ <widget class="QLabel" name="label_9">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="RadiusLayout">
+ <item>
+ <widget class="QLabel" name="label_10">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Radius</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="SourceLayout">
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="WebSiteLayout">
+ <item>
+ <widget class="QLabel" name="label_7">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>WebSite</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="PhoneLayout">
+ <item>
+ <widget class="QLabel" name="label_11">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Phone</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="StarsLayout">
+ <item>
+ <widget class="QLabel" name="label_12">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Stars</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="OpeningHoursLayout">
+ <item>
+ <widget class="QLabel" name="label_6">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Open hours</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrHouseNumberLayout">
+ <item>
+ <widget class="QLabel" name="label_18">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Number</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrStreetLayout">
+ <item>
+ <widget class="QLabel" name="label_21">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Street</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrPostCodeLayout">
+ <item>
+ <widget class="QLabel" name="label_22">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Post code</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrCityLayout">
+ <item>
+ <widget class="QLabel" name="label_30">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>City</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="BrandLayout">
+ <item>
+ <widget class="QLabel" name="label_31">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Brand</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="OperateurLayout">
+ <item>
+ <widget class="QLabel" name="label_32">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Operator</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_14">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>340</y>
+ <width>861</width>
+ <height>91</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_15">
+ <item>
+ <layout class="QHBoxLayout" name="CategoryDetailsLayoutAdditional">
+ <item>
+ <layout class="QVBoxLayout" name="CategoryLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_23">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Category</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="RadiusLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_28">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Radius</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="SourceLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_24">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Source</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="WebSiteLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_25">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>WebSite</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="PhoneLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_26">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Phone</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="StarsLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_27">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Stars</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="OpeningHoursLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_29">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Open hours</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrHouseNumberLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_34">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Number</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrStreetLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_37">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Street</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrPostCodeLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_36">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Post code</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="AddrCityLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_35">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>City</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="BrandLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_39">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Brand</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QVBoxLayout" name="OperateurLayoutAdditional">
+ <item>
+ <widget class="QLabel" name="label_38">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Operator</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <widget class="QWidget" name="resultList">
+ <attribute name="title">
+ <string>Result list</string>
+ </attribute>
+ <widget class="QTableView" name="table_view_poi">
+ <property name="geometry">
+ <rect>
+ <x>100</x>
+ <y>90</y>
+ <width>881</width>
+ <height>341</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <family>Monospace</family>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="autoFillBackground">
+ <bool>true</bool>
+ </property>
+ <property name="sortingEnabled">
+ <bool>true</bool>
+ </property>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_11">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>90</y>
+ <width>91</width>
+ <height>95</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_12">
+ <item>
+ <widget class="QPushButton" name="getTopList">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>TOP</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="getPrevList">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>PREV</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="getNextList">
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>NEXT</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QLabel" name="recordFrom">
+ <property name="geometry">
+ <rect>
+ <x>50</x>
+ <y>260</y>
+ <width>41</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="label_14">
+ <property name="geometry">
+ <rect>
+ <x>6</x>
+ <y>260</y>
+ <width>38</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>FROM:</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="recordTo">
+ <property name="geometry">
+ <rect>
+ <x>50</x>
+ <y>290</y>
+ <width>41</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="label_15">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>290</y>
+ <width>41</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TO:</string>
+ </property>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_6">
+ <property name="geometry">
+ <rect>
+ <x>30</x>
+ <y>10</y>
+ <width>831</width>
+ <height>61</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_7">
+ <item>
+ <widget class="QLabel" name="label_13">
+ <property name="font">
+ <font>
+ <pointsize>8</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Attributes to get</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="AttributeToGetLayout"/>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <widget class="QWidget" name="resultView">
+ <attribute name="title">
+ <string>Result view</string>
+ </attribute>
+ <widget class="QGraphicsView" name="graphicsView">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>70</y>
+ <width>360</width>
+ <height>360</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_10">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>10</y>
+ <width>121</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_11">
+ <item>
+ <widget class="QLabel" name="label_20">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Route handle</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="routeHandle">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QWidget" name="verticalLayoutWidget_9">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>10</y>
+ <width>121</width>
+ <height>41</height>
+ </rect>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_9">
+ <item>
+ <widget class="QLabel" name="label_19">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>Route segments</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="routeTotalSegments">
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <widget class="QWidget" name="settings">
+ <attribute name="title">
+ <string>Settings</string>
+ </attribute>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>30</y>
+ <width>191</width>
+ <height>61</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Version</string>
+ </property>
+ <widget class="QLabel" name="VersionSearch">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>30</y>
+ <width>197</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>to be initialized</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>120</y>
+ <width>121</width>
+ <height>81</height>
+ </rect>
+ </property>
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <widget class="QLabel" name="languageCode">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>30</y>
+ <width>101</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>languageCode</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="countryCode">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>60</y>
+ <width>91</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>countryCode</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QPushButton" name="About">
+ <property name="geometry">
+ <rect>
+ <x>360</x>
+ <y>390</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>About</string>
+ </property>
+ </widget>
+ </widget>
+ </widget>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>910</width>
+ <height>25</height>
+ </rect>
+ </property>
+ </widget>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources>
+ <include location="../poi-common/POIPOCResource.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.cpp b/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.cpp
new file mode 100644
index 0000000..c2f1abc
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.cpp
@@ -0,0 +1,50 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusContentAccessInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include "poi-client-config.h"
+#include "poi-client-DBusContentAccessInterface.h"
+
+
+DBusContentAccessInterface::DBusContentAccessInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+}
+
+DBusContentAccessInterface::~DBusContentAccessInterface()
+{
+}
+
+
+DBusContentAccessModuleInterface::DBusContentAccessModuleInterface (const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+}
+
+DBusContentAccessModuleInterface::~DBusContentAccessModuleInterface()
+{
+}
diff --git a/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.h b/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.h
new file mode 100644
index 0000000..8c5b2dc
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusContentAccessInterface.h
@@ -0,0 +1,196 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusContentAccessInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICLIENTDBUSCONTENTACCESSINTERFACE_H
+#define POICLIENTDBUSCONTENTACCESSINTERFACE_H
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-client-config.h"
+
+#include "../poi-common/poi-marshal-handler.h"
+
+
+/*
+ * Proxy class for interface POIPOCDBusContentAccessInterface
+ */
+class DBusContentAccessInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.poiservice.POIContentAccess"; }
+
+public:
+ DBusContentAccessInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusContentAccessInterface();
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<uchar> RegisterContentAccessModule(QString moduleName)
+ { //"s" in "y" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(moduleName);
+ return asyncCallWithArgumentList(QLatin1String("RegisterContentAccessModule"), argumentList);
+ }
+
+ inline QDBusPendingReply<> UnRegisterContentAccessModule(uchar camId)
+ { // "y" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(camId);
+ return asyncCallWithArgumentList(QLatin1String("UnRegisterContentAccessModule"), argumentList);
+ }
+
+ inline QDBusPendingReply<> RegisterPoiCategories(uchar camId, QList<ushort> poiCategories)
+ { // "y" "aq" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(camId) << qVariantFromValue(poiCategories);
+ return asyncCallWithArgumentList(QLatin1String("RegisterPoiCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<ushort> > AddCategories(uchar camId, QList<poiCategoryCamAdd_t> poiCategories)
+ { // "y" "a((aqvssv)a(sqa(qs))a(qs))" in "aq" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(camId) << qVariantFromValue(poiCategories);
+ return asyncCallWithArgumentList(QLatin1String("AddCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<> UpdateCategories(uchar camId, poiCategoryCamUpdate_t poiCategories)
+ { // "y" "(qa(sqa(qs))a(qs))" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(camId) << qVariantFromValue(poiCategories);
+ return asyncCallWithArgumentList(QLatin1String("UpdateCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<> RemoveCategories(uchar camId, QList<ushort> poiCategories)
+ { // "y" "aq" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(camId) << qVariantFromValue(poiCategories);
+ return asyncCallWithArgumentList(QLatin1String("RemoveCategories"), argumentList);
+ }
+
+Q_SIGNALS: // SIGNALS
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace poiservice {
+ namespace poiContentAccess {
+ typedef ::DBusContentAccessInterface DBusContentAccessInterface;
+ }
+ }
+ }
+}
+
+/*
+ * Proxy class for interface DBusContentAccessModuleInterface
+ */
+class DBusContentAccessModuleInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.poiservice.POIContentAccessModule"; }
+
+public:
+ DBusContentAccessModuleInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusContentAccessModuleInterface();
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<version_t> GetVersion()
+ { //"(qqqs)" out
+ return asyncCall(QLatin1String("GetVersion"));
+ }
+
+ inline QDBusPendingReply<>SetLanguage(QString languageCode,QString countryCode)
+ { // "s" "s" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(languageCode) << qVariantFromValue(countryCode);
+ return asyncCallWithArgumentList(QLatin1String("SetLanguage"), argumentList);
+ }
+
+ inline QDBusPendingReply<>PoiSearchStarted(uchar poiSearchHandle,ushort maxSize, geoCoordinate3D_t location, QList<poiSearch_t> poiCategories, QList<poiAttributeFull_t> poiAttributes, std::string inputString, ushort sortOption)
+ { // "y" "q" "(ddi)" "a(qu)" "a(sqqvqb)" "s" "q" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(maxSize) << qVariantFromValue(location) << qVariantFromValue(poiCategories) << qVariantFromValue(poiAttributes) << qVariantFromValue(inputString) << qVariantFromValue(sortOption);
+ return asyncCallWithArgumentList(QLatin1String("PoiSearchStarted"), argumentList);
+ }
+
+ inline QDBusPendingReply<> PoiSearchCanceled(uchar poiSearchHandle)
+ { //"y" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle);
+ return asyncCallWithArgumentList(QLatin1String("PoiSearchCanceled"), argumentList);
+ }
+
+ inline QDBusPendingReply<ushort, ushort, QList<resultCamSearch_t> >ResultListRequested(uchar camId, uchar poiSearchHandle, QList<std::string> attributes)
+ { // "y" "y" "as" in "q" "q" "a(usq(ddi)qa(sqv))" out
+ QList<QVariant> argumentList;
+ QStringList dst;
+ foreach(const std::string &s,attributes)
+ dst.append(QString::fromStdString(s));
+ argumentList << qVariantFromValue(camId) << qVariantFromValue(poiSearchHandle) << qVariantFromValue(dst);
+ return asyncCallWithArgumentList(QLatin1String("ResultListRequested"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<resultCamSearchDetails_t> >PoiDetailsRequested(QList<ushort> source_id)
+ { // "aq" in "a((usddi)aqa(sqv))" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(source_id);
+ return asyncCallWithArgumentList(QLatin1String("PoiDetailsRequested"), argumentList);
+ }
+
+Q_SIGNALS: // SIGNALS
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace poiservice {
+ namespace contentAccessModule {
+ typedef ::DBusContentAccessModuleInterface DBusContentAccessModuleInterface;
+ }
+ }
+ }
+}
+
+#endif // POICLIENTDBUSCONTENTACCESSINTERFACE_H
diff --git a/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.cpp b/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.cpp
new file mode 100644
index 0000000..6999d70
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.cpp
@@ -0,0 +1,50 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusEnhancedPositionInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "poi-client-config.h"
+#include "poi-client-DBusEnhancedPositionInterface.h"
+
+
+DBusEnhancedPositionInterface::DBusEnhancedPositionInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+ mp_timer = new QTimer(this);
+ QObject::connect(mp_timer, SIGNAL(timeout()), this, SLOT(onTimerPositionTimeout()));
+}
+
+DBusEnhancedPositionInterface::~DBusEnhancedPositionInterface()
+{
+ mp_timer->stop();
+ delete mp_timer;
+}
+
+void DBusEnhancedPositionInterface::startTimerForPosition(uint timerTick)
+{
+ mp_timer->setInterval(timerTick);
+ mp_timer->start();
+}
+
diff --git a/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.h b/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.h
new file mode 100644
index 0000000..b29e492
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusEnhancedPositionInterface.h
@@ -0,0 +1,116 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusEnhancedPositionInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICLIENTDBUSENHANCEDPOSITIONINTERFACE_H
+#define POICLIENTDBUSENHANCEDPOSITIONINTERFACE_H
+
+#include "../poi-common/poi-marshal-handler.h"
+
+/*
+ * Proxy class for interface POIPOCDBusEnhancedPositionInterface
+ */
+class DBusEnhancedPositionInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.positioning.EnhancedPosition"; }
+public:
+ DBusEnhancedPositionInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusEnhancedPositionInterface();
+
+ void startTimerForPosition(uint timerTick);
+
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<version_t> GetVersion()
+ { //"(qqqs)" out
+ return asyncCall(QLatin1String("GetVersion"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetData(QList<ushort> valuesToReturn)
+ { // "aq" in "a{qv}" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(valuesToReturn);
+ return asyncCallWithArgumentList(QLatin1String("GetData"), argumentList);
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetPosition()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetPosition"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetRotationRate()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetRotationRate"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetAccuracy()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetAccuracy"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetSatelliteInfo()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetSatelliteInfo"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetStatus()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetStatus"));
+ }
+
+ inline QDBusPendingReply<tupleVariant_t> GetTime()
+ { // "a{qv}" out
+ return asyncCall(QLatin1String("GetTime"));
+ }
+
+ void onTimerPositionTimeout()
+ {
+ QDBusPendingReply<tupleVariant_t> reply = GetTime();
+ reply.waitForFinished();
+ }
+
+Q_SIGNALS: // SIGNALS
+
+private:
+ QTimer* mp_timer;
+};
+
+namespace org {
+ namespace genivi {
+ namespace positioning {
+ namespace EnhancedPosition {
+ typedef ::DBusEnhancedPositionInterface DBusEnhancedPositionInterface;
+ }
+ }
+ }
+}
+
+#endif // POICLIENTDBUSENHANCEDPOSITIONINTERFACE_H
diff --git a/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.cpp b/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.cpp
new file mode 100644
index 0000000..578002b
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.cpp
@@ -0,0 +1,41 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusGuidanceInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "poi-client-config.h"
+#include "poi-client-DBusGuidanceInterface.h"
+
+DBusGuidanceInterface::DBusGuidanceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+
+}
+
+DBusGuidanceInterface::~DBusGuidanceInterface()
+{
+}
+
+
diff --git a/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.h b/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.h
new file mode 100644
index 0000000..f73ed5c
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusGuidanceInterface.h
@@ -0,0 +1,84 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusGuidanceInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICLIENTDBUSGUIDANCEINTERFACE_H
+#define POICLIENTDBUSGUIDANCEINTERFACE_H
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-client-config.h"
+
+#include "../poi-common/poi-marshal-handler.h"
+
+
+/*
+ * Proxy class for interface POIPOCDBusGuidanceInterface
+ */
+class DBusGuidanceInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.navigationcore.Guidance"; }
+
+public:
+ DBusGuidanceInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusGuidanceInterface();
+
+public Q_SLOTS: // METHODS
+
+
+
+
+Q_SIGNALS: // SIGNALS
+//D-Bus signals here
+
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace navigationcore {
+ namespace Guidance {
+ typedef ::DBusGuidanceInterface DBusGuidanceInterface;
+ }
+ }
+ }
+}
+
+#endif // POICLIENTDBUSGUIDANCEINTERFACE_H
diff --git a/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.cpp b/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.cpp
new file mode 100644
index 0000000..27c0fb8
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.cpp
@@ -0,0 +1,41 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusNavigationCoreSessionInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "poi-client-config.h"
+#include "poi-client-DBusNavigationCoreSessionInterface.h"
+
+
+DBusNavigationCoreSessionInterface::DBusNavigationCoreSessionInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+}
+
+DBusNavigationCoreSessionInterface::~DBusNavigationCoreSessionInterface()
+{
+}
+
+
diff --git a/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.h b/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.h
new file mode 100644
index 0000000..902648e
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusNavigationCoreSessionInterface.h
@@ -0,0 +1,87 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusNavigationCoreSessionInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICLIENTDBUSNAVIGATIONCORESESSIONINTERFACE_H
+#define POICLIENTDBUSNAVIGATIONCORESESSIONINTERFACE_H
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-client-config.h"
+
+#include "../poi-common/poi-marshal-handler.h"
+
+
+/*
+ * Proxy class for interface POIPOCDBusNavigationCoreSessionInterface
+ */
+class DBusNavigationCoreSessionInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.navigationcore.Session"; }
+
+public:
+ DBusNavigationCoreSessionInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusNavigationCoreSessionInterface();
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<QList<sessions_t> >GetAllSessions()
+ { // "a(ys)" out
+ return asyncCall(QLatin1String("GetAllSessions"));
+ }
+
+
+
+Q_SIGNALS: // SIGNALS
+//D-Bus signals here
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace navigationcore {
+ namespace Session {
+ typedef ::DBusNavigationCoreSessionInterface DBusNavigationCoreSessionInterface;
+ }
+ }
+ }
+}
+
+#endif // POICLIENTDBUSNAVIGATIONCORESESSIONINTERFACE_H
diff --git a/test/poi-service/poi-client/poi-client-DBusRoutingInterface.cpp b/test/poi-service/poi-client/poi-client-DBusRoutingInterface.cpp
new file mode 100644
index 0000000..928c7c3
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusRoutingInterface.cpp
@@ -0,0 +1,40 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusRoutingInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "poi-client-config.h"
+#include "poi-client-DBusRoutingInterface.h"
+
+
+DBusRoutingInterface::DBusRoutingInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+}
+
+DBusRoutingInterface::~DBusRoutingInterface()
+{
+}
+
diff --git a/test/poi-service/poi-client/poi-client-DBusRoutingInterface.h b/test/poi-service/poi-client/poi-client-DBusRoutingInterface.h
new file mode 100644
index 0000000..71b7e3f
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusRoutingInterface.h
@@ -0,0 +1,96 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusRoutingInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICLIENTDBUSROUTINGINTERFACE_H
+#define POICLIENTDBUSROUTINGINTERFACE_H
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-client-config.h"
+
+#include "../poi-common/poi-marshal-handler.h"
+
+
+/*
+ * Proxy class for interface POIPOCDBusRoutingInterface
+ */
+class DBusRoutingInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.navigationcore.Routing"; }
+
+public:
+ DBusRoutingInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusRoutingInterface();
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<boundingBox_t> GetRouteBoundingBox(uchar sessionHandle, uchar routeHandle)
+ { // "y" "y" in "((dd)(dd))" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(routeHandle);
+ return asyncCallWithArgumentList(QLatin1String("GetRouteBoundingBox"), argumentList);
+ }
+
+ inline QDBusPendingReply<uint,QList<tupleVariant_t> > GetRouteSegments(uchar routeHandle, short detailLevel, QList<ushort> valuesToReturn, uint numberOfSegments, uint offset)
+ { // "y" "n" "aq" "u" "u" in "u" "aa{qv}" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(routeHandle) << qVariantFromValue(detailLevel) << qVariantFromValue(valuesToReturn) << qVariantFromValue(numberOfSegments) << qVariantFromValue(offset);
+ return asyncCallWithArgumentList(QLatin1String("GetRouteSegments"), argumentList);
+ }
+
+Q_SIGNALS: // SIGNALS
+//D-Bus signals here
+ void RouteCalculationSuccessful(uchar,tupleUshort_t); // "y" "a{qq}" out
+ void RouteDeleted(uchar); // "y" out
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace navigationcore {
+ namespace Routing {
+ typedef ::DBusRoutingInterface DBusRoutingInterface;
+ }
+ }
+ }
+}
+
+#endif // POICLIENTDBUSROUTINGINTERFACE_H
diff --git a/test/poi-service/poi-client/poi-client-DBusSearchInterface.cpp b/test/poi-service/poi-client/poi-client-DBusSearchInterface.cpp
new file mode 100644
index 0000000..ca2f9e9
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusSearchInterface.cpp
@@ -0,0 +1,46 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusSearchInterface.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include "poi-client-config.h"
+#include "poi-client-DBusSearchInterface.h"
+
+
+DBusSearchInterface::DBusSearchInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
+ : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
+{
+}
+
+DBusSearchInterface::~DBusSearchInterface()
+{
+}
+
+
+
+
+
+
diff --git a/test/poi-service/poi-client/poi-client-DBusSearchInterface.h b/test/poi-service/poi-client/poi-client-DBusSearchInterface.h
new file mode 100644
index 0000000..39731f3
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-DBusSearchInterface.h
@@ -0,0 +1,224 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-DBusSearchInterface.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#ifndef POICLIENTDBUSSEARCHINTERFACE
+#define POICLIENTDBUSSEARCHINTERFACE
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-client-config.h"
+
+#include "../poi-common/poi-marshal-handler.h"
+
+
+/*
+ * Proxy class for interface DBusSearchInterface
+ */
+class DBusSearchInterface: public QDBusAbstractInterface
+{
+ Q_OBJECT
+public:
+ static inline const char *staticInterfaceName()
+ { return "org.genivi.poiservice.POISearch"; }
+
+public:
+ DBusSearchInterface(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
+
+ ~DBusSearchInterface();
+
+public Q_SLOTS: // METHODS
+
+ inline QDBusPendingReply<version_t> GetVersion()
+ { //"(qqqs)" out
+ return asyncCall(QLatin1String("GetVersion"));
+ }
+
+ inline QDBusPendingReply<QString,QString> GetLanguage()
+ { //"s" "s" out
+ return asyncCall(QLatin1String("GetLanguage"));
+ }
+
+ inline QDBusPendingReply<>SetLanguage(QString languageCode,QString countryCode)
+ { // "s" "s" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(languageCode) << qVariantFromValue(countryCode);
+ return asyncCallWithArgumentList(QLatin1String("SetLanguage"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<results_t> >ValidateCategories(QList<ushort> categories)
+ {// "aq" in "a(qb)" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(categories);
+ return asyncCallWithArgumentList(QLatin1String("ValidateCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<poiCategoryFull_t> > GetAvailableCategories()
+ { // "a(qsb)" out
+ return asyncCall(QLatin1String("GetAvailableCategories"));
+ }
+
+ inline QDBusPendingReply<ushort> GetRootCategory()
+ { // "q" out
+ return asyncCall(QLatin1String("GetRootCategory"));
+ }
+
+ inline QDBusPendingReply<QList<poiCategory_t> > GetChildrenCategories(ushort category)
+ { // "q" in "a(qb)" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(category);
+ return asyncCallWithArgumentList(QLatin1String("GetChildrenCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<poiCategory_t> > GetParentCategories(ushort category)
+ { // "q" in "a(qb)" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(category);
+ return asyncCallWithArgumentList(QLatin1String("GetParentCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<categoryDetailsList_t> >GetCategoriesDetails(QList<ushort> categories)
+ { // "aq" in "a((qaqvsbsv)a(sqa(qs))a(qs))" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(categories);
+ return asyncCallWithArgumentList(QLatin1String("GetCategoriesDetails"), argumentList);
+ }
+
+ inline QDBusPendingReply<uchar> CreatePoiSearchHandle()
+ { //"y" out
+ return asyncCall(QLatin1String("CreatePoiSearchHandle"));
+ }
+
+ inline QDBusPendingReply<> DeletePoiSearchHandle(uchar poiSearchHandle)
+ { //"y" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle);
+ return asyncCallWithArgumentList(QLatin1String("DeletePoiSearchHandle"), argumentList);
+ }
+
+ inline QDBusPendingReply<> SetCategories(uchar poiSearchHandle, QList<poiSearch_t> poiSearchCategories)
+ { // "y" "a(qu)" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(poiSearchCategories);
+ return asyncCallWithArgumentList(QLatin1String("SetCategories"), argumentList);
+ }
+
+ inline QDBusPendingReply<>SetRouteHandle(uchar poiSearchHandle, uchar sessionHandle, uchar routeHandle, ushort startSearchOffset, ushort endSearchOffset)
+ { // "y" "y" "y" "q" "q" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(sessionHandle) << qVariantFromValue(routeHandle) << qVariantFromValue(startSearchOffset) << qVariantFromValue(endSearchOffset);
+ return asyncCallWithArgumentList(QLatin1String("SetRouteHandle"), argumentList);
+ }
+
+ inline QDBusPendingReply<>StartPoiSearch(uchar poiSearchHandle, const QString &inputString, ushort sortOption)
+ { // "y" "s" "q" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(inputString) << qVariantFromValue(sortOption);
+ return asyncCallWithArgumentList(QLatin1String("StartPoiSearch"), argumentList);
+ }
+
+ inline QDBusPendingReply<>CancelPoiSearch(uchar poiSearchHandle)
+ { // "y" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle);
+ return asyncCallWithArgumentList(QLatin1String("CancelPoiSearch"), argumentList);
+ }
+
+ inline QDBusPendingReply<>StartPoiProximityAlert(uchar poiSearchHandle, const QString &inputString, ushort sortOption)
+ { // "y" "s" "q" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(inputString) << qVariantFromValue(sortOption);
+ return asyncCallWithArgumentList(QLatin1String("StartPoiProximityAlert"), argumentList);
+ }
+
+ inline QDBusPendingReply<>CancelPoiProximityAlert(uchar poiSearchHandle)
+ { // "y" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle);
+ return asyncCallWithArgumentList(QLatin1String("CancelPoiProximityAlert"), argumentList);
+ }
+
+ inline QDBusPendingReply<ushort, ushort, QList<resultSearch_t> >RequestResultList(uchar poiSearchHandle, ushort offset, ushort maxWindowSize, QList<std::string> attributes)
+ { // "y" "q" "q" "as" in "q" "q" "a(uuqa(sqv))" out
+ QList<QVariant> argumentList;
+ QStringList dst;
+ foreach(const std::string &s,attributes)
+ dst.append(QString::fromStdString(s));
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(offset) << qVariantFromValue(maxWindowSize) << qVariantFromValue(dst);
+ return asyncCallWithArgumentList(QLatin1String("RequestResultList"), argumentList);
+ }
+
+ inline QDBusPendingReply<>SetCenter(uchar poiSearchHandle, geoCoordinate3D_t location)
+ { // "y" "(ddi)" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(location);
+ return asyncCallWithArgumentList(QLatin1String("SetCenter"), argumentList);
+ }
+
+ inline QDBusPendingReply<QList<resultSearchDetails_t> >GetPoiDetails(QList<uint> idList)
+ { // "au" in "a((usddi)aqa(sqv))" out
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(idList);
+ return asyncCallWithArgumentList(QLatin1String("GetPoiDetails"), argumentList);
+ }
+
+ inline QDBusPendingReply<>SetAttributes(uchar poiSearchHandle,QList<poiAttributeFull_t> poiAttributes)
+ { // "y" "a(sqqvqb)" in
+ QList<QVariant> argumentList;
+ argumentList << qVariantFromValue(poiSearchHandle) << qVariantFromValue(poiAttributes);
+ return asyncCallWithArgumentList(QLatin1String("SetAttributes"), argumentList);
+ }
+
+
+Q_SIGNALS: // SIGNALS
+ void crashed();
+ void PoiStatus(uchar,ushort); // "y" "q" out
+ void ResultListChanged(uchar,ushort); // "y" "q" out
+ void CategoriesUpdated(QList<poiCategoryAndReason_t>); // "a(qq)" out
+private:
+
+};
+
+namespace org {
+ namespace genivi {
+ namespace poiservice {
+ namespace poiSearch {
+ typedef ::DBusSearchInterface DBusSearchInterface;
+ }
+ }
+ }
+}
+#endif
diff --git a/test/poi-service/poi-client/poi-client-config.h b/test/poi-service/poi-client/poi-client-config.h
new file mode 100644
index 0000000..0960bf6
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client-config.h
@@ -0,0 +1,50 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-client-config.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POIPOCCLIENTCONFIG_H
+#define POIPOCCLIENTCONFIG_H
+
+
+enum attributeList{
+ ATTRIBUTE_SOURCE = 0,
+ ATTRIBUTE_WEBSITE,
+ ATTRIBUTE_PHONE,
+ ATTRIBUTE_STARS,
+ ATTRIBUTE_OPENINGHOURS,
+ ATTRIBUTE_ADDRHOUSENUMBER,
+ ATTRIBUTE_ADDRSTREET,
+ ATTRIBUTE_ADDRPOSTCODE,
+ ATTRIBUTE_ADDRCITY,
+ ATTRIBUTE_BRAND,
+ ATTRIBUTE_OPERATEUR,
+ ATTRIBUTE_SIZE
+};
+
+#define noValue "-------"
+
+
+#endif // POIPOCCLIENTCONFIG_H
diff --git a/test/poi-service/poi-client/poi-client.conf b/test/poi-service/poi-client/poi-client.conf
new file mode 100644
index 0000000..b02b5fe
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client.conf
@@ -0,0 +1,32 @@
+[General]
+InvalidHandle=255
+PoiDisplayTableRows=15
+DefaultTextToSearch=enter text to search
+DefaultTextToBeInitialized=to be initialized
+DefaultRadius=100
+CAMName=org.genivi.poiservice.POIContentAccessModule
+MapWidthInMeter = 5000
+MapHeightInMeter = 5000
+TimerPeriodForPosition = 100
+
+[Attribute]
+Source = source
+WebSite = website
+Phone = phone
+Stars = stars
+OpeningHours = openingHours
+Number = addrHouseNumber
+Street = addrStreet
+PostCode = addrPostCode
+City = addrCity
+
+[Language]
+language=fra
+country=FRA
+HMI=en
+
+[DefaultLocation]
+latitude=48.85792
+longitude=2.3383145
+altitude=30
+
diff --git a/test/poi-service/poi-client/poi-client.desktop.desktop b/test/poi-service/poi-client/poi-client.desktop.desktop
new file mode 100644
index 0000000..1d7faf5
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client.desktop.desktop
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Version=1.0
+Type=Application
+Terminal=false
+Name=POIPOCClient
+Exec=/opt/POIPOCClient/bin/POIPOCClient
+Icon=POIPOCClient64
+X-Window-Icon=
+X-HildonDesk-ShowInToolbar=true
+X-Osso-Type=application/x-executable
+Name[en_US]=poi-client.desktop
diff --git a/test/poi-service/poi-client/poi-client.pro b/test/poi-service/poi-client/poi-client.pro
new file mode 100644
index 0000000..8429d52
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client.pro
@@ -0,0 +1,34 @@
+
+QT += dbus
+
+SOURCES += main.cpp mainwindow.cpp \
+ about-dialog.cpp \
+ poi-client-DBusSearchInterface.cpp \
+ poi-client-DBusRoutingInterface.cpp \
+ poi-client-DBusGuidanceInterface.cpp \
+ poi-client-DBusEnhancedPositionInterface.cpp \
+ poi-client-DBusNavigationCoreSessionInterface.cpp \
+ poi-client-DBusContentAccessInterface.cpp \
+ ../poi-common/poi-marshal-handler.cpp
+HEADERS += mainwindow.h \
+ poi-client-config.h \
+ about-dialog.h \
+ poi-client-DBusSearchInterface.h \
+ poi-client-DBusRoutingInterface.h \
+ poi-client-DBusGuidanceInterface.h \
+ poi-client-DBusEnhancedPositionInterface.h \
+ poi-client-DBusNavigationCoreSessionInterface.h \
+ poi-client-DBusContentAccessInterface.h \
+ ../poi-common/poi-marshal-handler.h
+FORMS += mainwindow.ui \
+ about-dialog.ui
+
+
+OTHER_FILES += \
+ about.txt
+
+RESOURCES += \
+ ../poi-common/poi-resource.qrc
+
+TRANSLATIONS = ../poi-common/poi-client_en.ts \
+ ../poi-common/poi-client_jp.ts
diff --git a/test/poi-service/poi-client/poi-client.svg b/test/poi-service/poi-client/poi-client.svg
new file mode 100644
index 0000000..566acfa
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client.svg
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ height="44px"
+ version="1.1"
+ viewBox="0 0 44 44"
+ width="44px"
+ x="0px"
+ y="0px"
+ id="svg2"
+ inkscape:version="0.47 r22583"
+ sodipodi:docname="qt.svg">
+ <metadata
+ id="metadata18">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs16">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 22 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="44 : 22 : 1"
+ inkscape:persp3d-origin="22 : 14.666667 : 1"
+ id="perspective2836" />
+ </defs>
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="1920"
+ inkscape:window-height="1020"
+ id="namedview14"
+ showgrid="false"
+ inkscape:zoom="21.454545"
+ inkscape:cx="49.412871"
+ inkscape:cy="21.894358"
+ inkscape:window-x="-4"
+ inkscape:window-y="-4"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="g3" />
+ <g
+ transform="matrix(0.18308778,0,0,0.18308778,6.6100946,3.2385199)"
+ id="g3">
+ <path
+ d="M 43.09,0.3586 C 40.94,0.0036 38.84,-0.0824 36.81,0.0776 31.968136,0.39505671 27.122677,0.73638425 22.28,1.0696 9.62,2.0816 0,12.4996 0,26.8896 l 0,169.7 14.19,13.2 28.87,-209.42 0.03,-0.011 z"
+ style="fill:#006225"
+ id="path5"
+ sodipodi:nodetypes="cccccccc" />
+ <path
+ d="m 174.4,160 c 0,12.5 -7.75,24.07 -17.57,25.77 L 14.23,209.73 V 25.93 C 14.23,9.21 27.57,-2.27 43.12,0.3 l 131.3,21.52 v 138.2 z"
+ style="fill:#80c342"
+ id="path7" />
+ <path
+ d="m 154.9,80.96 -12.96,-0.598 0,0.278 6.945,0.32 6.016,0 z"
+ style="fill:#006225"
+ id="path11" />
+ <path
+ d="m 144.6,135.6 c 0.66,0.328 1.43,0.476 2.351,0.476 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 h -6.015 c -1.821,0.832 -3.532,1.457 -5.176,1.848 z"
+ style="fill:#006225"
+ id="path13" />
+ <path
+ id="path17"
+ style="fill:#ffffff"
+ d="m 91.15,132.4 c 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -4.34,0 -7.68,2.535 -10.01,7.625 -2.52,5.543 -3.793,17.04 -3.793,34.44 0,16.82 1.238,28.75 3.734,35.75 2.356,6.672 5.879,9.976 10.5,9.976 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 m 17.98,3.75 c -4.117,9.707 -10.39,16.06 -18.99,19 0.867,4.449 2.176,7.441 3.922,9.019 1.351,1.211 3.433,1.821 6.222,1.821 0.805,0 1.668,-0.055 2.59,-0.157 v 13.12 l -5.961,0.782 c -1.758,0.23 -3.426,0.343 -5.004,0.343 -5.218,0 -9.445,-1.265 -12.62,-3.824 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 1.629,0 3.309,0.102 5.043,0.305 11.95,1.375 20.62,7.016 26.26,16.79 5.535,9.562 8.254,23.27 8.254,41.26 0,16.48 -2,29.45 -6.043,39.02 z M 130.4,45.91 l 11.52,1.238 0,20.21 12.96,0.914 0,12.68 -12.96,-0.598 0,46.33 c 0,4.032 0.445,6.625 1.34,7.789 0.8,1.067 2.046,1.594 3.71,1.594 0.161,0 0.329,-0.004 0.497,-0.016 2.55,-0.148 5.32,-0.933 8.343,-2.308 v 11.65 c -5.136,2.258 -10.18,3.598 -15.12,4.02 -0.718,0.055 -1.41,0.086 -2.078,0.086 -4.48,0 -7.906,-1.301 -10.25,-3.934 -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.535 L 118.046,79.25 V 65.66 l 7.586,0.547 4.773,-20.3 z" />
+ <path
+ d="m 100.3,166 c 0.809,0 1.672,-0.055 2.59,-0.157 H 98.054 C 98.73,165.949 99.507,166 100.3,166 z"
+ style="fill:#006225"
+ id="path19" />
+ <path
+ id="path21"
+ style="fill:#006225"
+ d="m 84.85,63.98 c 2.336,5.997 3.484,16.92 3.484,32.81 0,17.7 -1.16,29.57 -3.512,35.62 -1.894,4.879 -4.527,7.902 -7.863,9.07 0.965,0.368 1.992,0.551 3.078,0.551 0.207,0 0.41,-0.008 0.621,-0.019 4.633,-0.293 8.121,-3.496 10.49,-9.602 2.351,-6.051 3.511,-17.91 3.511,-35.62 0,-15.89 -1.148,-26.82 -3.484,-32.81 -2.336,-6.027 -5.832,-9.281 -10.52,-9.691 -0.359,-0.031 -0.714,-0.051 -1.058,-0.051 -1.09,0 -2.117,0.16 -3.082,0.481 h -0.004 c 3.601,1.121 6.379,4.215 8.336,9.261 z m -2.344,114.3 c -0.113,-0.05 -0.227,-0.105 -0.336,-0.16 -0.012,-0.004 -0.023,-0.012 -0.035,-0.015 -0.102,-0.051 -0.207,-0.106 -0.309,-0.157 -0.019,-0.011 -0.039,-0.019 -0.058,-0.031 -0.09,-0.051 -0.184,-0.098 -0.278,-0.148 -0.027,-0.016 -0.054,-0.036 -0.086,-0.051 -0.082,-0.043 -0.164,-0.09 -0.242,-0.137 -0.039,-0.023 -0.078,-0.047 -0.113,-0.07 -0.07,-0.039 -0.145,-0.082 -0.215,-0.125 -0.047,-0.031 -0.094,-0.059 -0.14,-0.09 -0.059,-0.039 -0.118,-0.074 -0.176,-0.113 -0.059,-0.039 -0.114,-0.075 -0.168,-0.114 -0.051,-0.031 -0.102,-0.066 -0.149,-0.097 -0.066,-0.047 -0.132,-0.094 -0.195,-0.137 -0.039,-0.027 -0.078,-0.055 -0.113,-0.082 -0.078,-0.055 -0.153,-0.113 -0.231,-0.172 -0.023,-0.016 -0.05,-0.035 -0.078,-0.055 -0.098,-0.078 -0.199,-0.156 -0.297,-0.234 -4.207,-3.379 -7.308,-9.894 -9.297,-19.54 -9.136,-1.945 -16.26,-7.754 -21.19,-17.5 -5.004,-9.902 -7.551,-24.39 -7.551,-43.34 0,-20.43 3.484,-35.51 10.34,-45.07 5.789,-8.07 13.86,-12.04 24.02,-12.04 h -6.351 c -10.15,0.008 -18.22,3.977 -24,12.04 -6.855,9.563 -10.34,24.64 -10.34,45.07 0,18.95 2.547,33.44 7.551,43.34 4.934,9.75 12.05,15.56 21.19,17.5 1.989,9.641 5.09,16.16 9.297,19.54 3.176,2.559 7.403,3.824 12.62,3.824 0.098,0 0.199,0 0.297,-0.004 h 5.539 c -3.406,-0.05 -6.383,-0.66 -8.906,-1.828 L 82.498,178.28 z M 128.4,145.6 c -2.73,-3.051 -4.09,-7.949 -4.09,-14.67 V 79.57 l -6.226,-0.285 v -13.59 h -6.016 v 3.035 c 0.871,3.273 1.555,6.82 2.063,10.64 l 4.164,0.192 v 51.36 c 0,6.723 1.367,11.62 4.09,14.67 2.343,2.633 5.765,3.934 10.25,3.934 h 6.015 c -4.48,0 -7.906,-1.301 -10.25,-3.934 z m 2.043,-99.66 -6.016,0 -4.668,19.88 5.911,0.422 4.773,-20.3 z" />
+ </g>
+</svg>
diff --git a/test/poi-service/poi-client/poi-client64.png b/test/poi-service/poi-client/poi-client64.png
new file mode 100644
index 0000000..d011758
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client64.png
Binary files differ
diff --git a/test/poi-service/poi-client/poi-client80.png b/test/poi-service/poi-client/poi-client80.png
new file mode 100644
index 0000000..2b44c03
--- /dev/null
+++ b/test/poi-service/poi-client/poi-client80.png
Binary files differ
diff --git a/test/poi-service/poi-client/ui_about-dialog.h b/test/poi-service/poi-client/ui_about-dialog.h
new file mode 100644
index 0000000..ba2c21d
--- /dev/null
+++ b/test/poi-service/poi-client/ui_about-dialog.h
@@ -0,0 +1,73 @@
+/********************************************************************************
+** Form generated from reading UI file 'about-dialog.ui'
+**
+** Created: Fri Feb 7 10:48:21 2014
+** by: Qt User Interface Compiler version 4.8.1
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_ABOUT_2D_DIALOG_H
+#define UI_ABOUT_2D_DIALOG_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QDialog>
+#include <QtGui/QHeaderView>
+#include <QtGui/QPushButton>
+#include <QtGui/QTextBrowser>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_aboutDialog
+{
+public:
+ QTextBrowser *textBrowser;
+ QPushButton *pushButton;
+ QWidget *widget;
+
+ void setupUi(QDialog *aboutDialog)
+ {
+ if (aboutDialog->objectName().isEmpty())
+ aboutDialog->setObjectName(QString::fromUtf8("aboutDialog"));
+ aboutDialog->setEnabled(true);
+ aboutDialog->resize(400, 276);
+ aboutDialog->setStyleSheet(QString::fromUtf8("background-color: rgb(176, 196, 222);"));
+ textBrowser = new QTextBrowser(aboutDialog);
+ textBrowser->setObjectName(QString::fromUtf8("textBrowser"));
+ textBrowser->setEnabled(true);
+ textBrowser->setGeometry(QRect(20, 10, 361, 192));
+ textBrowser->setSource(QUrl(QString::fromUtf8("qrc:/new/text/about.txt")));
+ pushButton = new QPushButton(aboutDialog);
+ pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setGeometry(QRect(280, 220, 98, 27));
+ pushButton->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ widget = new QWidget(aboutDialog);
+ widget->setObjectName(QString::fromUtf8("widget"));
+ widget->setGeometry(QRect(30, 210, 231, 51));
+ widget->setStyleSheet(QString::fromUtf8("image: url(:/new/image/psa.jpg);"));
+
+ retranslateUi(aboutDialog);
+ QObject::connect(pushButton, SIGNAL(clicked()), aboutDialog, SLOT(accept()));
+
+ QMetaObject::connectSlotsByName(aboutDialog);
+ } // setupUi
+
+ void retranslateUi(QDialog *aboutDialog)
+ {
+ aboutDialog->setWindowTitle(QApplication::translate("aboutDialog", "About", 0, QApplication::UnicodeUTF8));
+ pushButton->setText(QApplication::translate("aboutDialog", "OK", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class aboutDialog: public Ui_aboutDialog {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_ABOUT_2D_DIALOG_H
diff --git a/test/poi-service/poi-client/ui_mainwindow.h b/test/poi-service/poi-client/ui_mainwindow.h
new file mode 100644
index 0000000..b205d14
--- /dev/null
+++ b/test/poi-service/poi-client/ui_mainwindow.h
@@ -0,0 +1,1188 @@
+/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created: Fri Feb 7 10:47:41 2014
+** by: Qt User Interface Compiler version 4.8.1
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QCheckBox>
+#include <QtGui/QComboBox>
+#include <QtGui/QFrame>
+#include <QtGui/QGraphicsView>
+#include <QtGui/QGroupBox>
+#include <QtGui/QHBoxLayout>
+#include <QtGui/QHeaderView>
+#include <QtGui/QLabel>
+#include <QtGui/QLineEdit>
+#include <QtGui/QMainWindow>
+#include <QtGui/QMenuBar>
+#include <QtGui/QPushButton>
+#include <QtGui/QSpacerItem>
+#include <QtGui/QTabWidget>
+#include <QtGui/QTableView>
+#include <QtGui/QVBoxLayout>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+ QWidget *centralWidget;
+ QWidget *verticalLayoutWidget;
+ QVBoxLayout *verticalLayout;
+ QLabel *label_2;
+ QSpacerItem *verticalSpacer_2;
+ QLabel *searchMode;
+ QWidget *verticalLayoutWidget_2;
+ QVBoxLayout *verticalLayout_2;
+ QHBoxLayout *horizontalLayout;
+ QLabel *label;
+ QVBoxLayout *verticalLayout_8;
+ QCheckBox *checkLocation;
+ QHBoxLayout *horizontalLayout_9;
+ QLabel *label_16;
+ QLabel *currentLocationLatitude;
+ QHBoxLayout *horizontalLayout_10;
+ QLabel *label_17;
+ QLabel *currentLocationLongitude;
+ QHBoxLayout *latitude_layout;
+ QComboBox *latitude_direction;
+ QSpacerItem *horizontalSpacer;
+ QLineEdit *latitude_degree;
+ QSpacerItem *horizontalSpacer_2;
+ QLineEdit *latitude_minute;
+ QLineEdit *latitude_second;
+ QSpacerItem *horizontalSpacer_3;
+ QHBoxLayout *longitude_layout;
+ QSpacerItem *horizontalSpacer_4;
+ QComboBox *longitude_direction;
+ QLineEdit *longitude_degree;
+ QSpacerItem *horizontalSpacer_5;
+ QLineEdit *longitude_minute;
+ QLineEdit *longitude_second;
+ QSpacerItem *horizontalSpacer_6;
+ QVBoxLayout *verticalLayout_17;
+ QLineEdit *stringToSearch;
+ QVBoxLayout *verticalLayout_16;
+ QHBoxLayout *horizontalLayout_4;
+ QSpacerItem *horizontalSpacer_13;
+ QPushButton *startSearch;
+ QSpacerItem *horizontalSpacer_14;
+ QHBoxLayout *horizontalLayout_6;
+ QSpacerItem *horizontalSpacer_16;
+ QPushButton *cancelSearch;
+ QSpacerItem *horizontalSpacer_25;
+ QWidget *verticalLayoutWidget_4;
+ QVBoxLayout *verticalLayout_4;
+ QLabel *label_4;
+ QHBoxLayout *horizontalLayout_11;
+ QPushButton *setProximity;
+ QHBoxLayout *horizontalLayout_12;
+ QPushButton *cancelProximity;
+ QWidget *verticalLayoutWidget_5;
+ QVBoxLayout *verticalLayout_5;
+ QLabel *label_5;
+ QSpacerItem *verticalSpacer_8;
+ QLabel *poiHandle;
+ QPushButton *createpoiHandle;
+ QPushButton *deletepoiHandle;
+ QWidget *verticalLayoutWidget_3;
+ QVBoxLayout *verticalLayout_3;
+ QLabel *label_8;
+ QSpacerItem *verticalSpacer_9;
+ QLabel *search_status;
+ QLabel *totalSize;
+ QFrame *line;
+ QFrame *line_3;
+ QFrame *line_4;
+ QFrame *line_10;
+ QWidget *widget;
+ QTabWidget *tabWidget;
+ QWidget *searchSettings;
+ QWidget *verticalLayoutWidget_7;
+ QVBoxLayout *verticalLayout_6;
+ QHBoxLayout *CategoryDetailsLayout;
+ QVBoxLayout *CategoryLayout;
+ QLabel *label_9;
+ QVBoxLayout *RadiusLayout;
+ QLabel *label_10;
+ QVBoxLayout *SourceLayout;
+ QLabel *label_3;
+ QVBoxLayout *WebSiteLayout;
+ QLabel *label_7;
+ QVBoxLayout *PhoneLayout;
+ QLabel *label_11;
+ QVBoxLayout *StarsLayout;
+ QLabel *label_12;
+ QVBoxLayout *OpeningHoursLayout;
+ QLabel *label_6;
+ QVBoxLayout *AddrHouseNumberLayout;
+ QLabel *label_18;
+ QVBoxLayout *AddrStreetLayout;
+ QLabel *label_21;
+ QVBoxLayout *AddrPostCodeLayout;
+ QLabel *label_22;
+ QVBoxLayout *AddrCityLayout;
+ QLabel *label_30;
+ QVBoxLayout *BrandLayout;
+ QLabel *label_31;
+ QVBoxLayout *OperateurLayout;
+ QLabel *label_32;
+ QWidget *verticalLayoutWidget_14;
+ QVBoxLayout *verticalLayout_15;
+ QHBoxLayout *CategoryDetailsLayoutAdditional;
+ QVBoxLayout *CategoryLayoutAdditional;
+ QLabel *label_23;
+ QVBoxLayout *RadiusLayoutAdditional;
+ QLabel *label_28;
+ QVBoxLayout *SourceLayoutAdditional;
+ QLabel *label_24;
+ QVBoxLayout *WebSiteLayoutAdditional;
+ QLabel *label_25;
+ QVBoxLayout *PhoneLayoutAdditional;
+ QLabel *label_26;
+ QVBoxLayout *StarsLayoutAdditional;
+ QLabel *label_27;
+ QVBoxLayout *OpeningHoursLayoutAdditional;
+ QLabel *label_29;
+ QVBoxLayout *AddrHouseNumberLayoutAdditional;
+ QLabel *label_34;
+ QVBoxLayout *AddrStreetLayoutAdditional;
+ QLabel *label_37;
+ QVBoxLayout *AddrPostCodeLayoutAdditional;
+ QLabel *label_36;
+ QVBoxLayout *AddrCityLayoutAdditional;
+ QLabel *label_35;
+ QVBoxLayout *BrandLayoutAdditional;
+ QLabel *label_39;
+ QVBoxLayout *OperateurLayoutAdditional;
+ QLabel *label_38;
+ QWidget *resultList;
+ QTableView *table_view_poi;
+ QWidget *verticalLayoutWidget_11;
+ QVBoxLayout *verticalLayout_12;
+ QPushButton *getTopList;
+ QPushButton *getPrevList;
+ QPushButton *getNextList;
+ QLabel *recordFrom;
+ QLabel *label_14;
+ QLabel *recordTo;
+ QLabel *label_15;
+ QWidget *verticalLayoutWidget_6;
+ QVBoxLayout *verticalLayout_7;
+ QLabel *label_13;
+ QHBoxLayout *AttributeToGetLayout;
+ QWidget *resultView;
+ QGraphicsView *graphicsView;
+ QWidget *verticalLayoutWidget_10;
+ QVBoxLayout *verticalLayout_11;
+ QLabel *label_20;
+ QLabel *routeHandle;
+ QWidget *verticalLayoutWidget_9;
+ QVBoxLayout *verticalLayout_9;
+ QLabel *label_19;
+ QLabel *routeTotalSegments;
+ QWidget *settings;
+ QGroupBox *groupBox_2;
+ QLabel *VersionSearch;
+ QGroupBox *groupBox;
+ QLabel *languageCode;
+ QLabel *countryCode;
+ QPushButton *About;
+ QMenuBar *menuBar;
+
+ void setupUi(QMainWindow *MainWindow)
+ {
+ if (MainWindow->objectName().isEmpty())
+ MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->setEnabled(true);
+ MainWindow->resize(910, 768);
+ QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ sizePolicy.setHorizontalStretch(0);
+ sizePolicy.setVerticalStretch(0);
+ sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
+ MainWindow->setSizePolicy(sizePolicy);
+ MainWindow->setMinimumSize(QSize(910, 768));
+ MainWindow->setMaximumSize(QSize(910, 768));
+ QIcon icon;
+ icon.addFile(QString::fromUtf8(":/new/image/POIPOCClient.png"), QSize(), QIcon::Normal, QIcon::Off);
+ MainWindow->setWindowIcon(icon);
+ MainWindow->setStyleSheet(QString::fromUtf8("background-color: rgb(176, 196, 222);"));
+ centralWidget = new QWidget(MainWindow);
+ centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ verticalLayoutWidget = new QWidget(centralWidget);
+ verticalLayoutWidget->setObjectName(QString::fromUtf8("verticalLayoutWidget"));
+ verticalLayoutWidget->setGeometry(QRect(460, 10, 141, 51));
+ verticalLayout = new QVBoxLayout(verticalLayoutWidget);
+ verticalLayout->setSpacing(6);
+ verticalLayout->setContentsMargins(11, 11, 11, 11);
+ verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setContentsMargins(0, 0, 0, 0);
+ label_2 = new QLabel(verticalLayoutWidget);
+ label_2->setObjectName(QString::fromUtf8("label_2"));
+ QFont font;
+ font.setPointSize(9);
+ label_2->setFont(font);
+
+ verticalLayout->addWidget(label_2);
+
+ verticalSpacer_2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+
+ verticalLayout->addItem(verticalSpacer_2);
+
+ searchMode = new QLabel(verticalLayoutWidget);
+ searchMode->setObjectName(QString::fromUtf8("searchMode"));
+ searchMode->setFont(font);
+
+ verticalLayout->addWidget(searchMode);
+
+ verticalLayoutWidget_2 = new QWidget(centralWidget);
+ verticalLayoutWidget_2->setObjectName(QString::fromUtf8("verticalLayoutWidget_2"));
+ verticalLayoutWidget_2->setGeometry(QRect(150, 10, 281, 220));
+ verticalLayout_2 = new QVBoxLayout(verticalLayoutWidget_2);
+ verticalLayout_2->setSpacing(6);
+ verticalLayout_2->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+ verticalLayout_2->setContentsMargins(0, 0, 0, 0);
+ horizontalLayout = new QHBoxLayout();
+ horizontalLayout->setSpacing(6);
+ horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ label = new QLabel(verticalLayoutWidget_2);
+ label->setObjectName(QString::fromUtf8("label"));
+ label->setFont(font);
+ label->setAlignment(Qt::AlignCenter);
+
+ horizontalLayout->addWidget(label);
+
+ verticalLayout_8 = new QVBoxLayout();
+ verticalLayout_8->setSpacing(6);
+ verticalLayout_8->setObjectName(QString::fromUtf8("verticalLayout_8"));
+ checkLocation = new QCheckBox(verticalLayoutWidget_2);
+ checkLocation->setObjectName(QString::fromUtf8("checkLocation"));
+
+ verticalLayout_8->addWidget(checkLocation);
+
+ horizontalLayout_9 = new QHBoxLayout();
+ horizontalLayout_9->setSpacing(6);
+ horizontalLayout_9->setObjectName(QString::fromUtf8("horizontalLayout_9"));
+ label_16 = new QLabel(verticalLayoutWidget_2);
+ label_16->setObjectName(QString::fromUtf8("label_16"));
+
+ horizontalLayout_9->addWidget(label_16);
+
+ currentLocationLatitude = new QLabel(verticalLayoutWidget_2);
+ currentLocationLatitude->setObjectName(QString::fromUtf8("currentLocationLatitude"));
+
+ horizontalLayout_9->addWidget(currentLocationLatitude);
+
+
+ verticalLayout_8->addLayout(horizontalLayout_9);
+
+ horizontalLayout_10 = new QHBoxLayout();
+ horizontalLayout_10->setSpacing(6);
+ horizontalLayout_10->setObjectName(QString::fromUtf8("horizontalLayout_10"));
+ label_17 = new QLabel(verticalLayoutWidget_2);
+ label_17->setObjectName(QString::fromUtf8("label_17"));
+
+ horizontalLayout_10->addWidget(label_17);
+
+ currentLocationLongitude = new QLabel(verticalLayoutWidget_2);
+ currentLocationLongitude->setObjectName(QString::fromUtf8("currentLocationLongitude"));
+
+ horizontalLayout_10->addWidget(currentLocationLongitude);
+
+
+ verticalLayout_8->addLayout(horizontalLayout_10);
+
+
+ horizontalLayout->addLayout(verticalLayout_8);
+
+
+ verticalLayout_2->addLayout(horizontalLayout);
+
+ latitude_layout = new QHBoxLayout();
+ latitude_layout->setSpacing(6);
+ latitude_layout->setObjectName(QString::fromUtf8("latitude_layout"));
+ latitude_direction = new QComboBox(verticalLayoutWidget_2);
+ latitude_direction->setObjectName(QString::fromUtf8("latitude_direction"));
+ QFont font1;
+ font1.setPointSize(7);
+ latitude_direction->setFont(font1);
+ latitude_direction->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ latitude_layout->addWidget(latitude_direction);
+
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ latitude_layout->addItem(horizontalSpacer);
+
+ latitude_degree = new QLineEdit(verticalLayoutWidget_2);
+ latitude_degree->setObjectName(QString::fromUtf8("latitude_degree"));
+
+ latitude_layout->addWidget(latitude_degree);
+
+ horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ latitude_layout->addItem(horizontalSpacer_2);
+
+ latitude_minute = new QLineEdit(verticalLayoutWidget_2);
+ latitude_minute->setObjectName(QString::fromUtf8("latitude_minute"));
+
+ latitude_layout->addWidget(latitude_minute);
+
+ latitude_second = new QLineEdit(verticalLayoutWidget_2);
+ latitude_second->setObjectName(QString::fromUtf8("latitude_second"));
+
+ latitude_layout->addWidget(latitude_second);
+
+ horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ latitude_layout->addItem(horizontalSpacer_3);
+
+
+ verticalLayout_2->addLayout(latitude_layout);
+
+ longitude_layout = new QHBoxLayout();
+ longitude_layout->setSpacing(6);
+ longitude_layout->setObjectName(QString::fromUtf8("longitude_layout"));
+ horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ longitude_layout->addItem(horizontalSpacer_4);
+
+ longitude_direction = new QComboBox(verticalLayoutWidget_2);
+ longitude_direction->setObjectName(QString::fromUtf8("longitude_direction"));
+ longitude_direction->setFont(font1);
+ longitude_direction->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ longitude_layout->addWidget(longitude_direction);
+
+ longitude_degree = new QLineEdit(verticalLayoutWidget_2);
+ longitude_degree->setObjectName(QString::fromUtf8("longitude_degree"));
+
+ longitude_layout->addWidget(longitude_degree);
+
+ horizontalSpacer_5 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ longitude_layout->addItem(horizontalSpacer_5);
+
+ longitude_minute = new QLineEdit(verticalLayoutWidget_2);
+ longitude_minute->setObjectName(QString::fromUtf8("longitude_minute"));
+
+ longitude_layout->addWidget(longitude_minute);
+
+ longitude_second = new QLineEdit(verticalLayoutWidget_2);
+ longitude_second->setObjectName(QString::fromUtf8("longitude_second"));
+
+ longitude_layout->addWidget(longitude_second);
+
+ horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ longitude_layout->addItem(horizontalSpacer_6);
+
+
+ verticalLayout_2->addLayout(longitude_layout);
+
+ verticalLayout_17 = new QVBoxLayout();
+ verticalLayout_17->setSpacing(6);
+ verticalLayout_17->setObjectName(QString::fromUtf8("verticalLayout_17"));
+ stringToSearch = new QLineEdit(verticalLayoutWidget_2);
+ stringToSearch->setObjectName(QString::fromUtf8("stringToSearch"));
+ stringToSearch->setFont(font);
+
+ verticalLayout_17->addWidget(stringToSearch);
+
+
+ verticalLayout_2->addLayout(verticalLayout_17);
+
+ verticalLayout_16 = new QVBoxLayout();
+ verticalLayout_16->setSpacing(6);
+ verticalLayout_16->setObjectName(QString::fromUtf8("verticalLayout_16"));
+ horizontalLayout_4 = new QHBoxLayout();
+ horizontalLayout_4->setSpacing(6);
+ horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
+ horizontalSpacer_13 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_4->addItem(horizontalSpacer_13);
+
+ startSearch = new QPushButton(verticalLayoutWidget_2);
+ startSearch->setObjectName(QString::fromUtf8("startSearch"));
+ startSearch->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ horizontalLayout_4->addWidget(startSearch);
+
+ horizontalSpacer_14 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_4->addItem(horizontalSpacer_14);
+
+ horizontalLayout_6 = new QHBoxLayout();
+ horizontalLayout_6->setSpacing(6);
+ horizontalLayout_6->setObjectName(QString::fromUtf8("horizontalLayout_6"));
+ horizontalSpacer_16 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_6->addItem(horizontalSpacer_16);
+
+ cancelSearch = new QPushButton(verticalLayoutWidget_2);
+ cancelSearch->setObjectName(QString::fromUtf8("cancelSearch"));
+ cancelSearch->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ horizontalLayout_6->addWidget(cancelSearch);
+
+ horizontalSpacer_25 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+ horizontalLayout_6->addItem(horizontalSpacer_25);
+
+
+ horizontalLayout_4->addLayout(horizontalLayout_6);
+
+
+ verticalLayout_16->addLayout(horizontalLayout_4);
+
+
+ verticalLayout_2->addLayout(verticalLayout_16);
+
+ verticalLayoutWidget_4 = new QWidget(centralWidget);
+ verticalLayoutWidget_4->setObjectName(QString::fromUtf8("verticalLayoutWidget_4"));
+ verticalLayoutWidget_4->setGeometry(QRect(10, 133, 111, 101));
+ verticalLayout_4 = new QVBoxLayout(verticalLayoutWidget_4);
+ verticalLayout_4->setSpacing(6);
+ verticalLayout_4->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
+ verticalLayout_4->setContentsMargins(0, 0, 0, 0);
+ label_4 = new QLabel(verticalLayoutWidget_4);
+ label_4->setObjectName(QString::fromUtf8("label_4"));
+ QFont font2;
+ font2.setPointSize(8);
+ label_4->setFont(font2);
+ label_4->setAlignment(Qt::AlignCenter);
+
+ verticalLayout_4->addWidget(label_4);
+
+ horizontalLayout_11 = new QHBoxLayout();
+ horizontalLayout_11->setSpacing(6);
+ horizontalLayout_11->setObjectName(QString::fromUtf8("horizontalLayout_11"));
+ setProximity = new QPushButton(verticalLayoutWidget_4);
+ setProximity->setObjectName(QString::fromUtf8("setProximity"));
+ setProximity->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ horizontalLayout_11->addWidget(setProximity);
+
+
+ verticalLayout_4->addLayout(horizontalLayout_11);
+
+ horizontalLayout_12 = new QHBoxLayout();
+ horizontalLayout_12->setSpacing(6);
+ horizontalLayout_12->setObjectName(QString::fromUtf8("horizontalLayout_12"));
+ cancelProximity = new QPushButton(verticalLayoutWidget_4);
+ cancelProximity->setObjectName(QString::fromUtf8("cancelProximity"));
+ cancelProximity->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ horizontalLayout_12->addWidget(cancelProximity);
+
+
+ verticalLayout_4->addLayout(horizontalLayout_12);
+
+ verticalLayoutWidget_5 = new QWidget(centralWidget);
+ verticalLayoutWidget_5->setObjectName(QString::fromUtf8("verticalLayoutWidget_5"));
+ verticalLayoutWidget_5->setGeometry(QRect(10, 10, 111, 111));
+ verticalLayout_5 = new QVBoxLayout(verticalLayoutWidget_5);
+ verticalLayout_5->setSpacing(6);
+ verticalLayout_5->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_5->setObjectName(QString::fromUtf8("verticalLayout_5"));
+ verticalLayout_5->setContentsMargins(0, 0, 0, 0);
+ label_5 = new QLabel(verticalLayoutWidget_5);
+ label_5->setObjectName(QString::fromUtf8("label_5"));
+ QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ sizePolicy1.setHorizontalStretch(0);
+ sizePolicy1.setVerticalStretch(0);
+ sizePolicy1.setHeightForWidth(label_5->sizePolicy().hasHeightForWidth());
+ label_5->setSizePolicy(sizePolicy1);
+ label_5->setFont(font2);
+
+ verticalLayout_5->addWidget(label_5);
+
+ verticalSpacer_8 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+
+ verticalLayout_5->addItem(verticalSpacer_8);
+
+ poiHandle = new QLabel(verticalLayoutWidget_5);
+ poiHandle->setObjectName(QString::fromUtf8("poiHandle"));
+ poiHandle->setFont(font);
+
+ verticalLayout_5->addWidget(poiHandle);
+
+ createpoiHandle = new QPushButton(verticalLayoutWidget_5);
+ createpoiHandle->setObjectName(QString::fromUtf8("createpoiHandle"));
+ createpoiHandle->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ verticalLayout_5->addWidget(createpoiHandle);
+
+ deletepoiHandle = new QPushButton(verticalLayoutWidget_5);
+ deletepoiHandle->setObjectName(QString::fromUtf8("deletepoiHandle"));
+ deletepoiHandle->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ verticalLayout_5->addWidget(deletepoiHandle);
+
+ verticalLayoutWidget_3 = new QWidget(centralWidget);
+ verticalLayoutWidget_3->setObjectName(QString::fromUtf8("verticalLayoutWidget_3"));
+ verticalLayoutWidget_3->setGeometry(QRect(460, 80, 141, 81));
+ verticalLayout_3 = new QVBoxLayout(verticalLayoutWidget_3);
+ verticalLayout_3->setSpacing(6);
+ verticalLayout_3->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3"));
+ verticalLayout_3->setContentsMargins(0, 0, 0, 0);
+ label_8 = new QLabel(verticalLayoutWidget_3);
+ label_8->setObjectName(QString::fromUtf8("label_8"));
+ label_8->setFont(font);
+ label_8->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter);
+
+ verticalLayout_3->addWidget(label_8);
+
+ verticalSpacer_9 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+
+ verticalLayout_3->addItem(verticalSpacer_9);
+
+ search_status = new QLabel(verticalLayoutWidget_3);
+ search_status->setObjectName(QString::fromUtf8("search_status"));
+ search_status->setFont(font);
+
+ verticalLayout_3->addWidget(search_status);
+
+ totalSize = new QLabel(verticalLayoutWidget_3);
+ totalSize->setObjectName(QString::fromUtf8("totalSize"));
+ totalSize->setFont(font);
+
+ verticalLayout_3->addWidget(totalSize);
+
+ line = new QFrame(centralWidget);
+ line->setObjectName(QString::fromUtf8("line"));
+ line->setGeometry(QRect(130, 10, 20, 231));
+ line->setFrameShape(QFrame::VLine);
+ line->setFrameShadow(QFrame::Sunken);
+ line_3 = new QFrame(centralWidget);
+ line_3->setObjectName(QString::fromUtf8("line_3"));
+ line_3->setGeometry(QRect(10, 240, 891, 21));
+ line_3->setFrameShape(QFrame::HLine);
+ line_3->setFrameShadow(QFrame::Sunken);
+ line_4 = new QFrame(centralWidget);
+ line_4->setObjectName(QString::fromUtf8("line_4"));
+ line_4->setGeometry(QRect(430, 10, 20, 231));
+ line_4->setFrameShape(QFrame::VLine);
+ line_4->setFrameShadow(QFrame::Sunken);
+ line_10 = new QFrame(centralWidget);
+ line_10->setObjectName(QString::fromUtf8("line_10"));
+ line_10->setGeometry(QRect(630, 10, 20, 231));
+ line_10->setFrameShape(QFrame::VLine);
+ line_10->setFrameShadow(QFrame::Sunken);
+ widget = new QWidget(centralWidget);
+ widget->setObjectName(QString::fromUtf8("widget"));
+ widget->setGeometry(QRect(670, 40, 121, 91));
+ widget->setStyleSheet(QString::fromUtf8("image: url(:/new/image/GENIVI_Black_Logo-no_background.png);"));
+ tabWidget = new QTabWidget(centralWidget);
+ tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
+ tabWidget->setGeometry(QRect(10, 260, 891, 471));
+ searchSettings = new QWidget();
+ searchSettings->setObjectName(QString::fromUtf8("searchSettings"));
+ verticalLayoutWidget_7 = new QWidget(searchSettings);
+ verticalLayoutWidget_7->setObjectName(QString::fromUtf8("verticalLayoutWidget_7"));
+ verticalLayoutWidget_7->setGeometry(QRect(10, 120, 861, 171));
+ verticalLayout_6 = new QVBoxLayout(verticalLayoutWidget_7);
+ verticalLayout_6->setSpacing(6);
+ verticalLayout_6->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_6->setObjectName(QString::fromUtf8("verticalLayout_6"));
+ verticalLayout_6->setContentsMargins(0, 0, 0, 0);
+ CategoryDetailsLayout = new QHBoxLayout();
+ CategoryDetailsLayout->setSpacing(6);
+ CategoryDetailsLayout->setObjectName(QString::fromUtf8("CategoryDetailsLayout"));
+ CategoryLayout = new QVBoxLayout();
+ CategoryLayout->setSpacing(6);
+ CategoryLayout->setObjectName(QString::fromUtf8("CategoryLayout"));
+ label_9 = new QLabel(verticalLayoutWidget_7);
+ label_9->setObjectName(QString::fromUtf8("label_9"));
+ label_9->setFont(font);
+
+ CategoryLayout->addWidget(label_9);
+
+
+ CategoryDetailsLayout->addLayout(CategoryLayout);
+
+ RadiusLayout = new QVBoxLayout();
+ RadiusLayout->setSpacing(6);
+ RadiusLayout->setObjectName(QString::fromUtf8("RadiusLayout"));
+ label_10 = new QLabel(verticalLayoutWidget_7);
+ label_10->setObjectName(QString::fromUtf8("label_10"));
+ label_10->setFont(font);
+
+ RadiusLayout->addWidget(label_10);
+
+
+ CategoryDetailsLayout->addLayout(RadiusLayout);
+
+ SourceLayout = new QVBoxLayout();
+ SourceLayout->setSpacing(6);
+ SourceLayout->setObjectName(QString::fromUtf8("SourceLayout"));
+ label_3 = new QLabel(verticalLayoutWidget_7);
+ label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setFont(font);
+
+ SourceLayout->addWidget(label_3);
+
+
+ CategoryDetailsLayout->addLayout(SourceLayout);
+
+ WebSiteLayout = new QVBoxLayout();
+ WebSiteLayout->setSpacing(6);
+ WebSiteLayout->setObjectName(QString::fromUtf8("WebSiteLayout"));
+ label_7 = new QLabel(verticalLayoutWidget_7);
+ label_7->setObjectName(QString::fromUtf8("label_7"));
+ label_7->setFont(font);
+
+ WebSiteLayout->addWidget(label_7);
+
+
+ CategoryDetailsLayout->addLayout(WebSiteLayout);
+
+ PhoneLayout = new QVBoxLayout();
+ PhoneLayout->setSpacing(6);
+ PhoneLayout->setObjectName(QString::fromUtf8("PhoneLayout"));
+ label_11 = new QLabel(verticalLayoutWidget_7);
+ label_11->setObjectName(QString::fromUtf8("label_11"));
+ label_11->setFont(font);
+
+ PhoneLayout->addWidget(label_11);
+
+
+ CategoryDetailsLayout->addLayout(PhoneLayout);
+
+ StarsLayout = new QVBoxLayout();
+ StarsLayout->setSpacing(6);
+ StarsLayout->setObjectName(QString::fromUtf8("StarsLayout"));
+ label_12 = new QLabel(verticalLayoutWidget_7);
+ label_12->setObjectName(QString::fromUtf8("label_12"));
+ label_12->setFont(font);
+
+ StarsLayout->addWidget(label_12);
+
+
+ CategoryDetailsLayout->addLayout(StarsLayout);
+
+ OpeningHoursLayout = new QVBoxLayout();
+ OpeningHoursLayout->setSpacing(6);
+ OpeningHoursLayout->setObjectName(QString::fromUtf8("OpeningHoursLayout"));
+ label_6 = new QLabel(verticalLayoutWidget_7);
+ label_6->setObjectName(QString::fromUtf8("label_6"));
+ label_6->setFont(font);
+
+ OpeningHoursLayout->addWidget(label_6);
+
+
+ CategoryDetailsLayout->addLayout(OpeningHoursLayout);
+
+ AddrHouseNumberLayout = new QVBoxLayout();
+ AddrHouseNumberLayout->setSpacing(6);
+ AddrHouseNumberLayout->setObjectName(QString::fromUtf8("AddrHouseNumberLayout"));
+ label_18 = new QLabel(verticalLayoutWidget_7);
+ label_18->setObjectName(QString::fromUtf8("label_18"));
+ label_18->setFont(font);
+
+ AddrHouseNumberLayout->addWidget(label_18);
+
+
+ CategoryDetailsLayout->addLayout(AddrHouseNumberLayout);
+
+ AddrStreetLayout = new QVBoxLayout();
+ AddrStreetLayout->setSpacing(6);
+ AddrStreetLayout->setObjectName(QString::fromUtf8("AddrStreetLayout"));
+ label_21 = new QLabel(verticalLayoutWidget_7);
+ label_21->setObjectName(QString::fromUtf8("label_21"));
+ label_21->setFont(font);
+
+ AddrStreetLayout->addWidget(label_21);
+
+
+ CategoryDetailsLayout->addLayout(AddrStreetLayout);
+
+ AddrPostCodeLayout = new QVBoxLayout();
+ AddrPostCodeLayout->setSpacing(6);
+ AddrPostCodeLayout->setObjectName(QString::fromUtf8("AddrPostCodeLayout"));
+ label_22 = new QLabel(verticalLayoutWidget_7);
+ label_22->setObjectName(QString::fromUtf8("label_22"));
+ label_22->setFont(font);
+
+ AddrPostCodeLayout->addWidget(label_22);
+
+
+ CategoryDetailsLayout->addLayout(AddrPostCodeLayout);
+
+ AddrCityLayout = new QVBoxLayout();
+ AddrCityLayout->setSpacing(6);
+ AddrCityLayout->setObjectName(QString::fromUtf8("AddrCityLayout"));
+ label_30 = new QLabel(verticalLayoutWidget_7);
+ label_30->setObjectName(QString::fromUtf8("label_30"));
+ label_30->setFont(font);
+
+ AddrCityLayout->addWidget(label_30);
+
+
+ CategoryDetailsLayout->addLayout(AddrCityLayout);
+
+ BrandLayout = new QVBoxLayout();
+ BrandLayout->setSpacing(6);
+ BrandLayout->setObjectName(QString::fromUtf8("BrandLayout"));
+ label_31 = new QLabel(verticalLayoutWidget_7);
+ label_31->setObjectName(QString::fromUtf8("label_31"));
+ label_31->setFont(font);
+
+ BrandLayout->addWidget(label_31);
+
+
+ CategoryDetailsLayout->addLayout(BrandLayout);
+
+ OperateurLayout = new QVBoxLayout();
+ OperateurLayout->setSpacing(6);
+ OperateurLayout->setObjectName(QString::fromUtf8("OperateurLayout"));
+ label_32 = new QLabel(verticalLayoutWidget_7);
+ label_32->setObjectName(QString::fromUtf8("label_32"));
+ label_32->setFont(font);
+
+ OperateurLayout->addWidget(label_32);
+
+
+ CategoryDetailsLayout->addLayout(OperateurLayout);
+
+
+ verticalLayout_6->addLayout(CategoryDetailsLayout);
+
+ verticalLayoutWidget_14 = new QWidget(searchSettings);
+ verticalLayoutWidget_14->setObjectName(QString::fromUtf8("verticalLayoutWidget_14"));
+ verticalLayoutWidget_14->setGeometry(QRect(10, 340, 861, 91));
+ verticalLayout_15 = new QVBoxLayout(verticalLayoutWidget_14);
+ verticalLayout_15->setSpacing(6);
+ verticalLayout_15->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_15->setObjectName(QString::fromUtf8("verticalLayout_15"));
+ verticalLayout_15->setContentsMargins(0, 0, 0, 0);
+ CategoryDetailsLayoutAdditional = new QHBoxLayout();
+ CategoryDetailsLayoutAdditional->setSpacing(6);
+ CategoryDetailsLayoutAdditional->setObjectName(QString::fromUtf8("CategoryDetailsLayoutAdditional"));
+ CategoryLayoutAdditional = new QVBoxLayout();
+ CategoryLayoutAdditional->setSpacing(6);
+ CategoryLayoutAdditional->setObjectName(QString::fromUtf8("CategoryLayoutAdditional"));
+ label_23 = new QLabel(verticalLayoutWidget_14);
+ label_23->setObjectName(QString::fromUtf8("label_23"));
+ label_23->setFont(font);
+
+ CategoryLayoutAdditional->addWidget(label_23);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(CategoryLayoutAdditional);
+
+ RadiusLayoutAdditional = new QVBoxLayout();
+ RadiusLayoutAdditional->setSpacing(6);
+ RadiusLayoutAdditional->setObjectName(QString::fromUtf8("RadiusLayoutAdditional"));
+ label_28 = new QLabel(verticalLayoutWidget_14);
+ label_28->setObjectName(QString::fromUtf8("label_28"));
+ label_28->setFont(font);
+
+ RadiusLayoutAdditional->addWidget(label_28);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(RadiusLayoutAdditional);
+
+ SourceLayoutAdditional = new QVBoxLayout();
+ SourceLayoutAdditional->setSpacing(6);
+ SourceLayoutAdditional->setObjectName(QString::fromUtf8("SourceLayoutAdditional"));
+ label_24 = new QLabel(verticalLayoutWidget_14);
+ label_24->setObjectName(QString::fromUtf8("label_24"));
+ label_24->setFont(font);
+
+ SourceLayoutAdditional->addWidget(label_24);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(SourceLayoutAdditional);
+
+ WebSiteLayoutAdditional = new QVBoxLayout();
+ WebSiteLayoutAdditional->setSpacing(6);
+ WebSiteLayoutAdditional->setObjectName(QString::fromUtf8("WebSiteLayoutAdditional"));
+ label_25 = new QLabel(verticalLayoutWidget_14);
+ label_25->setObjectName(QString::fromUtf8("label_25"));
+ label_25->setFont(font);
+
+ WebSiteLayoutAdditional->addWidget(label_25);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(WebSiteLayoutAdditional);
+
+ PhoneLayoutAdditional = new QVBoxLayout();
+ PhoneLayoutAdditional->setSpacing(6);
+ PhoneLayoutAdditional->setObjectName(QString::fromUtf8("PhoneLayoutAdditional"));
+ label_26 = new QLabel(verticalLayoutWidget_14);
+ label_26->setObjectName(QString::fromUtf8("label_26"));
+ label_26->setFont(font);
+
+ PhoneLayoutAdditional->addWidget(label_26);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(PhoneLayoutAdditional);
+
+ StarsLayoutAdditional = new QVBoxLayout();
+ StarsLayoutAdditional->setSpacing(6);
+ StarsLayoutAdditional->setObjectName(QString::fromUtf8("StarsLayoutAdditional"));
+ label_27 = new QLabel(verticalLayoutWidget_14);
+ label_27->setObjectName(QString::fromUtf8("label_27"));
+ label_27->setFont(font);
+
+ StarsLayoutAdditional->addWidget(label_27);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(StarsLayoutAdditional);
+
+ OpeningHoursLayoutAdditional = new QVBoxLayout();
+ OpeningHoursLayoutAdditional->setSpacing(6);
+ OpeningHoursLayoutAdditional->setObjectName(QString::fromUtf8("OpeningHoursLayoutAdditional"));
+ label_29 = new QLabel(verticalLayoutWidget_14);
+ label_29->setObjectName(QString::fromUtf8("label_29"));
+ label_29->setFont(font);
+
+ OpeningHoursLayoutAdditional->addWidget(label_29);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(OpeningHoursLayoutAdditional);
+
+ AddrHouseNumberLayoutAdditional = new QVBoxLayout();
+ AddrHouseNumberLayoutAdditional->setSpacing(6);
+ AddrHouseNumberLayoutAdditional->setObjectName(QString::fromUtf8("AddrHouseNumberLayoutAdditional"));
+ label_34 = new QLabel(verticalLayoutWidget_14);
+ label_34->setObjectName(QString::fromUtf8("label_34"));
+ label_34->setFont(font);
+
+ AddrHouseNumberLayoutAdditional->addWidget(label_34);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(AddrHouseNumberLayoutAdditional);
+
+ AddrStreetLayoutAdditional = new QVBoxLayout();
+ AddrStreetLayoutAdditional->setSpacing(6);
+ AddrStreetLayoutAdditional->setObjectName(QString::fromUtf8("AddrStreetLayoutAdditional"));
+ label_37 = new QLabel(verticalLayoutWidget_14);
+ label_37->setObjectName(QString::fromUtf8("label_37"));
+ label_37->setFont(font);
+
+ AddrStreetLayoutAdditional->addWidget(label_37);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(AddrStreetLayoutAdditional);
+
+ AddrPostCodeLayoutAdditional = new QVBoxLayout();
+ AddrPostCodeLayoutAdditional->setSpacing(6);
+ AddrPostCodeLayoutAdditional->setObjectName(QString::fromUtf8("AddrPostCodeLayoutAdditional"));
+ label_36 = new QLabel(verticalLayoutWidget_14);
+ label_36->setObjectName(QString::fromUtf8("label_36"));
+ label_36->setFont(font);
+
+ AddrPostCodeLayoutAdditional->addWidget(label_36);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(AddrPostCodeLayoutAdditional);
+
+ AddrCityLayoutAdditional = new QVBoxLayout();
+ AddrCityLayoutAdditional->setSpacing(6);
+ AddrCityLayoutAdditional->setObjectName(QString::fromUtf8("AddrCityLayoutAdditional"));
+ label_35 = new QLabel(verticalLayoutWidget_14);
+ label_35->setObjectName(QString::fromUtf8("label_35"));
+ label_35->setFont(font);
+
+ AddrCityLayoutAdditional->addWidget(label_35);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(AddrCityLayoutAdditional);
+
+ BrandLayoutAdditional = new QVBoxLayout();
+ BrandLayoutAdditional->setSpacing(6);
+ BrandLayoutAdditional->setObjectName(QString::fromUtf8("BrandLayoutAdditional"));
+ label_39 = new QLabel(verticalLayoutWidget_14);
+ label_39->setObjectName(QString::fromUtf8("label_39"));
+ label_39->setFont(font);
+
+ BrandLayoutAdditional->addWidget(label_39);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(BrandLayoutAdditional);
+
+ OperateurLayoutAdditional = new QVBoxLayout();
+ OperateurLayoutAdditional->setSpacing(6);
+ OperateurLayoutAdditional->setObjectName(QString::fromUtf8("OperateurLayoutAdditional"));
+ label_38 = new QLabel(verticalLayoutWidget_14);
+ label_38->setObjectName(QString::fromUtf8("label_38"));
+ label_38->setFont(font);
+
+ OperateurLayoutAdditional->addWidget(label_38);
+
+
+ CategoryDetailsLayoutAdditional->addLayout(OperateurLayoutAdditional);
+
+
+ verticalLayout_15->addLayout(CategoryDetailsLayoutAdditional);
+
+ tabWidget->addTab(searchSettings, QString());
+ resultList = new QWidget();
+ resultList->setObjectName(QString::fromUtf8("resultList"));
+ table_view_poi = new QTableView(resultList);
+ table_view_poi->setObjectName(QString::fromUtf8("table_view_poi"));
+ table_view_poi->setGeometry(QRect(100, 90, 881, 341));
+ QFont font3;
+ font3.setFamily(QString::fromUtf8("Monospace"));
+ font3.setPointSize(8);
+ table_view_poi->setFont(font3);
+ table_view_poi->setAutoFillBackground(true);
+ table_view_poi->setSortingEnabled(true);
+ verticalLayoutWidget_11 = new QWidget(resultList);
+ verticalLayoutWidget_11->setObjectName(QString::fromUtf8("verticalLayoutWidget_11"));
+ verticalLayoutWidget_11->setGeometry(QRect(0, 90, 91, 95));
+ verticalLayout_12 = new QVBoxLayout(verticalLayoutWidget_11);
+ verticalLayout_12->setSpacing(6);
+ verticalLayout_12->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_12->setObjectName(QString::fromUtf8("verticalLayout_12"));
+ verticalLayout_12->setContentsMargins(0, 0, 0, 0);
+ getTopList = new QPushButton(verticalLayoutWidget_11);
+ getTopList->setObjectName(QString::fromUtf8("getTopList"));
+ getTopList->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ verticalLayout_12->addWidget(getTopList);
+
+ getPrevList = new QPushButton(verticalLayoutWidget_11);
+ getPrevList->setObjectName(QString::fromUtf8("getPrevList"));
+ getPrevList->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ verticalLayout_12->addWidget(getPrevList);
+
+ getNextList = new QPushButton(verticalLayoutWidget_11);
+ getNextList->setObjectName(QString::fromUtf8("getNextList"));
+ getNextList->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+
+ verticalLayout_12->addWidget(getNextList);
+
+ recordFrom = new QLabel(resultList);
+ recordFrom->setObjectName(QString::fromUtf8("recordFrom"));
+ recordFrom->setGeometry(QRect(50, 260, 41, 29));
+ recordFrom->setFont(font);
+ label_14 = new QLabel(resultList);
+ label_14->setObjectName(QString::fromUtf8("label_14"));
+ label_14->setGeometry(QRect(6, 260, 38, 29));
+ label_14->setFont(font);
+ recordTo = new QLabel(resultList);
+ recordTo->setObjectName(QString::fromUtf8("recordTo"));
+ recordTo->setGeometry(QRect(50, 290, 41, 29));
+ recordTo->setFont(font);
+ label_15 = new QLabel(resultList);
+ label_15->setObjectName(QString::fromUtf8("label_15"));
+ label_15->setGeometry(QRect(10, 290, 41, 29));
+ label_15->setFont(font);
+ verticalLayoutWidget_6 = new QWidget(resultList);
+ verticalLayoutWidget_6->setObjectName(QString::fromUtf8("verticalLayoutWidget_6"));
+ verticalLayoutWidget_6->setGeometry(QRect(30, 10, 831, 61));
+ verticalLayout_7 = new QVBoxLayout(verticalLayoutWidget_6);
+ verticalLayout_7->setSpacing(6);
+ verticalLayout_7->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_7->setObjectName(QString::fromUtf8("verticalLayout_7"));
+ verticalLayout_7->setContentsMargins(0, 0, 0, 0);
+ label_13 = new QLabel(verticalLayoutWidget_6);
+ label_13->setObjectName(QString::fromUtf8("label_13"));
+ label_13->setFont(font2);
+
+ verticalLayout_7->addWidget(label_13);
+
+ AttributeToGetLayout = new QHBoxLayout();
+ AttributeToGetLayout->setSpacing(6);
+ AttributeToGetLayout->setObjectName(QString::fromUtf8("AttributeToGetLayout"));
+
+ verticalLayout_7->addLayout(AttributeToGetLayout);
+
+ tabWidget->addTab(resultList, QString());
+ resultView = new QWidget();
+ resultView->setObjectName(QString::fromUtf8("resultView"));
+ graphicsView = new QGraphicsView(resultView);
+ graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
+ graphicsView->setGeometry(QRect(10, 70, 360, 360));
+ sizePolicy.setHeightForWidth(graphicsView->sizePolicy().hasHeightForWidth());
+ graphicsView->setSizePolicy(sizePolicy);
+ verticalLayoutWidget_10 = new QWidget(resultView);
+ verticalLayoutWidget_10->setObjectName(QString::fromUtf8("verticalLayoutWidget_10"));
+ verticalLayoutWidget_10->setGeometry(QRect(10, 10, 121, 41));
+ verticalLayout_11 = new QVBoxLayout(verticalLayoutWidget_10);
+ verticalLayout_11->setSpacing(6);
+ verticalLayout_11->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_11->setObjectName(QString::fromUtf8("verticalLayout_11"));
+ verticalLayout_11->setContentsMargins(0, 0, 0, 0);
+ label_20 = new QLabel(verticalLayoutWidget_10);
+ label_20->setObjectName(QString::fromUtf8("label_20"));
+ label_20->setFont(font);
+
+ verticalLayout_11->addWidget(label_20);
+
+ routeHandle = new QLabel(verticalLayoutWidget_10);
+ routeHandle->setObjectName(QString::fromUtf8("routeHandle"));
+ routeHandle->setFont(font);
+
+ verticalLayout_11->addWidget(routeHandle);
+
+ verticalLayoutWidget_9 = new QWidget(resultView);
+ verticalLayoutWidget_9->setObjectName(QString::fromUtf8("verticalLayoutWidget_9"));
+ verticalLayoutWidget_9->setGeometry(QRect(170, 10, 121, 41));
+ verticalLayout_9 = new QVBoxLayout(verticalLayoutWidget_9);
+ verticalLayout_9->setSpacing(6);
+ verticalLayout_9->setContentsMargins(11, 11, 11, 11);
+ verticalLayout_9->setObjectName(QString::fromUtf8("verticalLayout_9"));
+ verticalLayout_9->setContentsMargins(0, 0, 0, 0);
+ label_19 = new QLabel(verticalLayoutWidget_9);
+ label_19->setObjectName(QString::fromUtf8("label_19"));
+ label_19->setFont(font);
+
+ verticalLayout_9->addWidget(label_19);
+
+ routeTotalSegments = new QLabel(verticalLayoutWidget_9);
+ routeTotalSegments->setObjectName(QString::fromUtf8("routeTotalSegments"));
+ routeTotalSegments->setFont(font);
+
+ verticalLayout_9->addWidget(routeTotalSegments);
+
+ tabWidget->addTab(resultView, QString());
+ settings = new QWidget();
+ settings->setObjectName(QString::fromUtf8("settings"));
+ groupBox_2 = new QGroupBox(settings);
+ groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setGeometry(QRect(10, 30, 191, 61));
+ VersionSearch = new QLabel(groupBox_2);
+ VersionSearch->setObjectName(QString::fromUtf8("VersionSearch"));
+ VersionSearch->setGeometry(QRect(0, 30, 197, 21));
+ groupBox = new QGroupBox(settings);
+ groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setGeometry(QRect(10, 120, 121, 81));
+ languageCode = new QLabel(groupBox);
+ languageCode->setObjectName(QString::fromUtf8("languageCode"));
+ languageCode->setGeometry(QRect(0, 30, 101, 17));
+ countryCode = new QLabel(groupBox);
+ countryCode->setObjectName(QString::fromUtf8("countryCode"));
+ countryCode->setGeometry(QRect(0, 60, 91, 17));
+ About = new QPushButton(settings);
+ About->setObjectName(QString::fromUtf8("About"));
+ About->setGeometry(QRect(360, 390, 98, 27));
+ About->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ tabWidget->addTab(settings, QString());
+ MainWindow->setCentralWidget(centralWidget);
+ menuBar = new QMenuBar(MainWindow);
+ menuBar->setObjectName(QString::fromUtf8("menuBar"));
+ menuBar->setGeometry(QRect(0, 0, 910, 25));
+ MainWindow->setMenuBar(menuBar);
+
+ retranslateUi(MainWindow);
+
+ tabWidget->setCurrentIndex(1);
+
+
+ QMetaObject::connectSlotsByName(MainWindow);
+ } // setupUi
+
+ void retranslateUi(QMainWindow *MainWindow)
+ {
+ MainWindow->setWindowTitle(QApplication::translate("MainWindow", "POI Search Proof Of Concept", 0, QApplication::UnicodeUTF8));
+ label_2->setText(QApplication::translate("MainWindow", "Search mode", 0, QApplication::UnicodeUTF8));
+ searchMode->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ label->setText(QApplication::translate("MainWindow", "<html><head/><body><p>Search around </p><p> a location</p></body></html>", 0, QApplication::UnicodeUTF8));
+ checkLocation->setText(QApplication::translate("MainWindow", "Current", 0, QApplication::UnicodeUTF8));
+ label_16->setText(QApplication::translate("MainWindow", "Lat:", 0, QApplication::UnicodeUTF8));
+ currentLocationLatitude->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ label_17->setText(QApplication::translate("MainWindow", "Lon:", 0, QApplication::UnicodeUTF8));
+ currentLocationLongitude->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ latitude_direction->clear();
+ latitude_direction->insertItems(0, QStringList()
+ << QApplication::translate("MainWindow", "NORTH", 0, QApplication::UnicodeUTF8)
+ << QApplication::translate("MainWindow", "SOUTH", 0, QApplication::UnicodeUTF8)
+ );
+ longitude_direction->clear();
+ longitude_direction->insertItems(0, QStringList()
+ << QApplication::translate("MainWindow", "EAST", 0, QApplication::UnicodeUTF8)
+ << QApplication::translate("MainWindow", "WEST", 0, QApplication::UnicodeUTF8)
+ );
+ startSearch->setText(QApplication::translate("MainWindow", "SEARCH", 0, QApplication::UnicodeUTF8));
+ cancelSearch->setText(QApplication::translate("MainWindow", "CANCEL", 0, QApplication::UnicodeUTF8));
+ label_4->setText(QApplication::translate("MainWindow", "Set proximity alert", 0, QApplication::UnicodeUTF8));
+ setProximity->setText(QApplication::translate("MainWindow", "SET", 0, QApplication::UnicodeUTF8));
+ cancelProximity->setText(QApplication::translate("MainWindow", "UNSET", 0, QApplication::UnicodeUTF8));
+ label_5->setText(QApplication::translate("MainWindow", "Manage poi handle", 0, QApplication::UnicodeUTF8));
+ poiHandle->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ createpoiHandle->setText(QApplication::translate("MainWindow", "CREATE", 0, QApplication::UnicodeUTF8));
+ deletepoiHandle->setText(QApplication::translate("MainWindow", "DELETE", 0, QApplication::UnicodeUTF8));
+ label_8->setText(QApplication::translate("MainWindow", "Search status", 0, QApplication::UnicodeUTF8));
+ search_status->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ totalSize->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+#ifndef QT_NO_ACCESSIBILITY
+ searchSettings->setAccessibleName(QString());
+#endif // QT_NO_ACCESSIBILITY
+ label_9->setText(QApplication::translate("MainWindow", "Category", 0, QApplication::UnicodeUTF8));
+ label_10->setText(QApplication::translate("MainWindow", "Radius", 0, QApplication::UnicodeUTF8));
+ label_3->setText(QApplication::translate("MainWindow", "Source", 0, QApplication::UnicodeUTF8));
+ label_7->setText(QApplication::translate("MainWindow", "WebSite", 0, QApplication::UnicodeUTF8));
+ label_11->setText(QApplication::translate("MainWindow", "Phone", 0, QApplication::UnicodeUTF8));
+ label_12->setText(QApplication::translate("MainWindow", "Stars", 0, QApplication::UnicodeUTF8));
+ label_6->setText(QApplication::translate("MainWindow", "Open hours", 0, QApplication::UnicodeUTF8));
+ label_18->setText(QApplication::translate("MainWindow", "Number", 0, QApplication::UnicodeUTF8));
+ label_21->setText(QApplication::translate("MainWindow", "Street", 0, QApplication::UnicodeUTF8));
+ label_22->setText(QApplication::translate("MainWindow", "Post code", 0, QApplication::UnicodeUTF8));
+ label_30->setText(QApplication::translate("MainWindow", "City", 0, QApplication::UnicodeUTF8));
+ label_31->setText(QApplication::translate("MainWindow", "Brand", 0, QApplication::UnicodeUTF8));
+ label_32->setText(QApplication::translate("MainWindow", "Operator", 0, QApplication::UnicodeUTF8));
+ label_23->setText(QApplication::translate("MainWindow", "Category", 0, QApplication::UnicodeUTF8));
+ label_28->setText(QApplication::translate("MainWindow", "Radius", 0, QApplication::UnicodeUTF8));
+ label_24->setText(QApplication::translate("MainWindow", "Source", 0, QApplication::UnicodeUTF8));
+ label_25->setText(QApplication::translate("MainWindow", "WebSite", 0, QApplication::UnicodeUTF8));
+ label_26->setText(QApplication::translate("MainWindow", "Phone", 0, QApplication::UnicodeUTF8));
+ label_27->setText(QApplication::translate("MainWindow", "Stars", 0, QApplication::UnicodeUTF8));
+ label_29->setText(QApplication::translate("MainWindow", "Open hours", 0, QApplication::UnicodeUTF8));
+ label_34->setText(QApplication::translate("MainWindow", "Number", 0, QApplication::UnicodeUTF8));
+ label_37->setText(QApplication::translate("MainWindow", "Street", 0, QApplication::UnicodeUTF8));
+ label_36->setText(QApplication::translate("MainWindow", "Post code", 0, QApplication::UnicodeUTF8));
+ label_35->setText(QApplication::translate("MainWindow", "City", 0, QApplication::UnicodeUTF8));
+ label_39->setText(QApplication::translate("MainWindow", "Brand", 0, QApplication::UnicodeUTF8));
+ label_38->setText(QApplication::translate("MainWindow", "Operator", 0, QApplication::UnicodeUTF8));
+ tabWidget->setTabText(tabWidget->indexOf(searchSettings), QApplication::translate("MainWindow", "Categories", 0, QApplication::UnicodeUTF8));
+ getTopList->setText(QApplication::translate("MainWindow", "TOP", 0, QApplication::UnicodeUTF8));
+ getPrevList->setText(QApplication::translate("MainWindow", "PREV", 0, QApplication::UnicodeUTF8));
+ getNextList->setText(QApplication::translate("MainWindow", "NEXT", 0, QApplication::UnicodeUTF8));
+ recordFrom->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ label_14->setText(QApplication::translate("MainWindow", "FROM:", 0, QApplication::UnicodeUTF8));
+ recordTo->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ label_15->setText(QApplication::translate("MainWindow", "TO:", 0, QApplication::UnicodeUTF8));
+ label_13->setText(QApplication::translate("MainWindow", "Attributes to get", 0, QApplication::UnicodeUTF8));
+ tabWidget->setTabText(tabWidget->indexOf(resultList), QApplication::translate("MainWindow", "Result list", 0, QApplication::UnicodeUTF8));
+ label_20->setText(QApplication::translate("MainWindow", "Route handle", 0, QApplication::UnicodeUTF8));
+ routeHandle->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ label_19->setText(QApplication::translate("MainWindow", "Route segments", 0, QApplication::UnicodeUTF8));
+ routeTotalSegments->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ tabWidget->setTabText(tabWidget->indexOf(resultView), QApplication::translate("MainWindow", "Result view", 0, QApplication::UnicodeUTF8));
+ groupBox_2->setTitle(QApplication::translate("MainWindow", "Version", 0, QApplication::UnicodeUTF8));
+ VersionSearch->setText(QApplication::translate("MainWindow", "to be initialized", 0, QApplication::UnicodeUTF8));
+ groupBox->setTitle(QApplication::translate("MainWindow", "Language", 0, QApplication::UnicodeUTF8));
+ languageCode->setText(QApplication::translate("MainWindow", "languageCode", 0, QApplication::UnicodeUTF8));
+ countryCode->setText(QApplication::translate("MainWindow", "countryCode", 0, QApplication::UnicodeUTF8));
+ About->setText(QApplication::translate("MainWindow", "About", 0, QApplication::UnicodeUTF8));
+ tabWidget->setTabText(tabWidget->indexOf(settings), QApplication::translate("MainWindow", "Settings", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H
diff --git a/test/poi-service/poi-common/GENIVI_Black_Logo-no_background.png b/test/poi-service/poi-common/GENIVI_Black_Logo-no_background.png
new file mode 100644
index 0000000..7b7f024
--- /dev/null
+++ b/test/poi-service/poi-common/GENIVI_Black_Logo-no_background.png
Binary files differ
diff --git a/test/poi-service/poi-common/about.txt b/test/poi-service/poi-common/about.txt
new file mode 100644
index 0000000..c7c72b4
--- /dev/null
+++ b/test/poi-service/poi-common/about.txt
@@ -0,0 +1,11 @@
+Copyright (C) 2011-2014 PCA Peugeot Citroen
+
+This software is part of GENIVI Project POISearch Proof Of Concept.
+
+This Source Code Form is subject to the terms of the
+Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+Author: Philippe Colliot philippe.colliot@mpsa.com
+
+For further information see http://www.genivi.org/.
diff --git a/test/poi-service/poi-common/magasin.jpg b/test/poi-service/poi-common/magasin.jpg
new file mode 100644
index 0000000..31648a6
--- /dev/null
+++ b/test/poi-service/poi-common/magasin.jpg
Binary files differ
diff --git a/test/poi-service/poi-common/poi-client.png b/test/poi-service/poi-common/poi-client.png
new file mode 100644
index 0000000..ef88c23
--- /dev/null
+++ b/test/poi-service/poi-common/poi-client.png
Binary files differ
diff --git a/test/poi-service/poi-common/poi-client_en.ts b/test/poi-service/poi-common/poi-client_en.ts
new file mode 100644
index 0000000..74e3625
--- /dev/null
+++ b/test/poi-service/poi-common/poi-client_en.ts
@@ -0,0 +1,411 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="35"/>
+ <source>POI Search Proof Of Concept</source>
+ <translation>Search client</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="63"/>
+ <source>Search mode</source>
+ <translation>Search mode</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="88"/>
+ <location filename="../poi-client/mainwindow.ui" line="142"/>
+ <location filename="../poi-client/mainwindow.ui" line="160"/>
+ <location filename="../poi-client/mainwindow.ui" line="521"/>
+ <location filename="../poi-client/mainwindow.ui" line="593"/>
+ <location filename="../poi-client/mainwindow.ui" line="605"/>
+ <location filename="../poi-client/mainwindow.ui" line="1227"/>
+ <location filename="../poi-client/mainwindow.ui" line="1263"/>
+ <location filename="../poi-client/mainwindow.ui" line="1362"/>
+ <location filename="../poi-client/mainwindow.ui" line="1398"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="114"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Search around &lt;/p&gt;&lt;p&gt; a location&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Search around &lt;/p&gt;&lt;p&gt; a location&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="126"/>
+ <source>Current</source>
+ <translation>Current</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="135"/>
+ <source>Lat:</source>
+ <translation>Lat:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="153"/>
+ <source>Lon:</source>
+ <translation>Lon:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="184"/>
+ <location filename="../poi-client/mainwindow.cpp" line="217"/>
+ <source>NORTH</source>
+ <translation>NORTH</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="189"/>
+ <location filename="../poi-client/mainwindow.cpp" line="213"/>
+ <location filename="../poi-client/mainwindow.cpp" line="677"/>
+ <source>SOUTH</source>
+ <translation>SOUTH</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="271"/>
+ <location filename="../poi-client/mainwindow.cpp" line="225"/>
+ <source>EAST</source>
+ <translation>EAST</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="276"/>
+ <location filename="../poi-client/mainwindow.cpp" line="221"/>
+ <location filename="../poi-client/mainwindow.cpp" line="680"/>
+ <source>WEST</source>
+ <translation>WEST</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="354"/>
+ <source>SEARCH</source>
+ <translation>SEARCH</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="392"/>
+ <source>CANCEL</source>
+ <translation>CANCEL</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="435"/>
+ <source>Set proximity alert</source>
+ <translation>Proximity alert</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="450"/>
+ <source>SET</source>
+ <translation>SET</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="464"/>
+ <source>UNSET</source>
+ <translation>UNSET</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="496"/>
+ <source>Manage poi handle</source>
+ <translation>Manage poi handle</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="531"/>
+ <source>CREATE</source>
+ <translation>CREATE</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="541"/>
+ <source>DELETE</source>
+ <translation>DELETE</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="565"/>
+ <source>Search status</source>
+ <translation>Search status</translation>
+ </message>
+ <message>
+ <source>Page</source>
+ <translation type="obsolete">Search settings</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="893"/>
+ <location filename="../poi-client/mainwindow.ui" line="1117"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="155"/>
+ <source>Brand</source>
+ <translation>Brand</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="861"/>
+ <location filename="../poi-client/mainwindow.ui" line="1085"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="139"/>
+ <source>Post code</source>
+ <translation>Post code</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="877"/>
+ <location filename="../poi-client/mainwindow.ui" line="1101"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="147"/>
+ <source>City</source>
+ <translation>City</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="845"/>
+ <location filename="../poi-client/mainwindow.ui" line="1069"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="131"/>
+ <source>Street</source>
+ <translation>Street</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="693"/>
+ <source>Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="829"/>
+ <location filename="../poi-client/mainwindow.ui" line="1053"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="123"/>
+ <source>Number</source>
+ <translation>Number</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="909"/>
+ <location filename="../poi-client/mainwindow.ui" line="1133"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="163"/>
+ <source>Operator</source>
+ <translation>Operator</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1146"/>
+ <source>Result list</source>
+ <translation>Result list</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1314"/>
+ <source>Result view</source>
+ <translation>Result view</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1407"/>
+ <source>Settings</source>
+ <translation>Settings</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1487"/>
+ <source>About</source>
+ <translation>ABOUT</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="717"/>
+ <location filename="../poi-client/mainwindow.ui" line="941"/>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Category</source>
+ <translation>Category</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="749"/>
+ <location filename="../poi-client/mainwindow.ui" line="973"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="83"/>
+ <source>Source</source>
+ <translation>Source</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="765"/>
+ <location filename="../poi-client/mainwindow.ui" line="989"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="91"/>
+ <source>WebSite</source>
+ <translation>WebSite</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="781"/>
+ <location filename="../poi-client/mainwindow.ui" line="1005"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="99"/>
+ <source>Phone</source>
+ <translation>Phone</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="797"/>
+ <location filename="../poi-client/mainwindow.ui" line="1021"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="107"/>
+ <source>Stars</source>
+ <translation>Stars</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="733"/>
+ <location filename="../poi-client/mainwindow.ui" line="957"/>
+ <source>Radius</source>
+ <translation>Radius</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="813"/>
+ <location filename="../poi-client/mainwindow.ui" line="1037"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="115"/>
+ <source>Open hours</source>
+ <translation>Open hours</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1302"/>
+ <source>Attributes to get</source>
+ <translation>Attributes to get</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1245"/>
+ <source>FROM:</source>
+ <translation>FROM:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1281"/>
+ <source>TO:</source>
+ <translation>TO:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1386"/>
+ <source>Route segments</source>
+ <translation>Route segments</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1350"/>
+ <source>Route handle</source>
+ <translation>Route handle</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1186"/>
+ <source>TOP</source>
+ <translation>TOP</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1196"/>
+ <source>PREV</source>
+ <translation>PREV</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1206"/>
+ <source>NEXT</source>
+ <translation>NEXT</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1445"/>
+ <source>Language</source>
+ <translation>Language</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1457"/>
+ <source>languageCode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1470"/>
+ <source>countryCode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1419"/>
+ <source>Version</source>
+ <translation>Version</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1431"/>
+ <source>to be initialized</source>
+ <translation>Enter the string to search</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Name</source>
+ <translation>Name</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Distance</source>
+ <translation>Distance</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Latitude</source>
+ <translation>Latitude</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Longitude</source>
+ <translation>Longitude</translation>
+ </message>
+ <message>
+ <source>Operateur</source>
+ <translation type="obsolete">Operator</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="67"/>
+ <source>Icon</source>
+ <translation>Icon</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="199"/>
+ <location filename="../poi-client/mainwindow.cpp" line="715"/>
+ <location filename="../poi-client/mainwindow.cpp" line="1310"/>
+ <source>EMPTY</source>
+ <translation>EMPTY</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="656"/>
+ <source>Around the default location</source>
+ <translation>Around the default location</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="663"/>
+ <source>Around the vehicle</source>
+ <translation>Around the vehicle</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="673"/>
+ <source>Around a location</source>
+ <translation>Around a location</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="1242"/>
+ <source>Proximity search</source>
+ <translation>Proximity search</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="1677"/>
+ <source>Along a route</source>
+ <translation>Along a route</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="745"/>
+ <location filename="../poi-client/mainwindow.cpp" line="1678"/>
+ <source>NUMBER</source>
+ <translation>NUMBER</translation>
+ </message>
+</context>
+<context>
+ <name>aboutDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="obsolete">About</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="17"/>
+ <source>About</source>
+ <translation>About</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="36"/>
+ <source>qrc:/new/text/about.txt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="53"/>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+</context>
+</TS>
diff --git a/test/poi-service/poi-common/poi-client_jp.ts b/test/poi-service/poi-common/poi-client_jp.ts
new file mode 100644
index 0000000..5d0f2a3
--- /dev/null
+++ b/test/poi-service/poi-common/poi-client_jp.ts
@@ -0,0 +1,445 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja_JP" sourcelanguage="en_US">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="35"/>
+ <source>POI Search Proof Of Concept</source>
+ <translatorcomment>けんさくクライアント</translatorcomment>
+ <translation>検索クライアント</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="63"/>
+ <source>Search mode</source>
+ <translatorcomment>けんさくのほうほう</translatorcomment>
+ <translation>検索の方法</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="88"/>
+ <location filename="../poi-client/mainwindow.ui" line="142"/>
+ <location filename="../poi-client/mainwindow.ui" line="160"/>
+ <location filename="../poi-client/mainwindow.ui" line="521"/>
+ <location filename="../poi-client/mainwindow.ui" line="593"/>
+ <location filename="../poi-client/mainwindow.ui" line="605"/>
+ <location filename="../poi-client/mainwindow.ui" line="1227"/>
+ <location filename="../poi-client/mainwindow.ui" line="1263"/>
+ <location filename="../poi-client/mainwindow.ui" line="1362"/>
+ <location filename="../poi-client/mainwindow.ui" line="1398"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="114"/>
+ <source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Search around &lt;/p&gt;&lt;p&gt; a location&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
+ <translatorcomment>ばしょをみまわす</translatorcomment>
+ <translation>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;場所を &lt;/p&gt;&lt;p&gt; 見回す&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="126"/>
+ <source>Current</source>
+ <translatorcomment>げんざいち</translatorcomment>
+ <translation>現在地</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="135"/>
+ <source>Lat:</source>
+ <translatorcomment>いど</translatorcomment>
+ <translation>緯度:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="153"/>
+ <source>Lon:</source>
+ <translatorcomment>けいど</translatorcomment>
+ <translation>軽度:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="184"/>
+ <location filename="../poi-client/mainwindow.cpp" line="217"/>
+ <source>NORTH</source>
+ <translatorcomment>ほくい</translatorcomment>
+ <translation>北緯</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="189"/>
+ <location filename="../poi-client/mainwindow.cpp" line="213"/>
+ <location filename="../poi-client/mainwindow.cpp" line="677"/>
+ <source>SOUTH</source>
+ <translatorcomment>なんい</translatorcomment>
+ <translation>南緯</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="271"/>
+ <location filename="../poi-client/mainwindow.cpp" line="225"/>
+ <source>EAST</source>
+ <translatorcomment>とうけい</translatorcomment>
+ <translation>東経</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="276"/>
+ <location filename="../poi-client/mainwindow.cpp" line="221"/>
+ <location filename="../poi-client/mainwindow.cpp" line="680"/>
+ <source>WEST</source>
+ <translatorcomment>せいけい</translatorcomment>
+ <translation>西経</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="354"/>
+ <source>SEARCH</source>
+ <translatorcomment>けんさく</translatorcomment>
+ <translation>検索</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="392"/>
+ <source>CANCEL</source>
+ <translatorcomment>キャンセル</translatorcomment>
+ <translation>キャンセル</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="435"/>
+ <source>Set proximity alert</source>
+ <translatorcomment>しゅうへんけいほう</translatorcomment>
+ <translation>周辺警報</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="450"/>
+ <source>SET</source>
+ <translatorcomment>おく</translatorcomment>
+ <translation>置く</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="464"/>
+ <source>UNSET</source>
+ <translatorcomment>はずす</translatorcomment>
+ <translation>外す</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="496"/>
+ <source>Manage poi handle</source>
+ <translation>POIハンドル</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="531"/>
+ <source>CREATE</source>
+ <translatorcomment>そうにゅう</translatorcomment>
+ <translation>挿入</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="541"/>
+ <source>DELETE</source>
+ <translatorcomment>さくじょ</translatorcomment>
+ <translation>削除</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="565"/>
+ <source>Search status</source>
+ <translatorcomment>けんさくのじょうたい</translatorcomment>
+ <translation>検索の状態</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="893"/>
+ <location filename="../poi-client/mainwindow.ui" line="1117"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="155"/>
+ <source>Brand</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="861"/>
+ <location filename="../poi-client/mainwindow.ui" line="1085"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="139"/>
+ <source>Post code</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="877"/>
+ <location filename="../poi-client/mainwindow.ui" line="1101"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="147"/>
+ <source>City</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="845"/>
+ <location filename="../poi-client/mainwindow.ui" line="1069"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="131"/>
+ <source>Street</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="693"/>
+ <source>Categories</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="829"/>
+ <location filename="../poi-client/mainwindow.ui" line="1053"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="123"/>
+ <source>Number</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="909"/>
+ <location filename="../poi-client/mainwindow.ui" line="1133"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="163"/>
+ <source>Operator</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1146"/>
+ <source>Result list</source>
+ <translatorcomment>けっかひょう</translatorcomment>
+ <translation>結果表</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1314"/>
+ <source>Result view</source>
+ <translatorcomment>ちずにけっか</translatorcomment>
+ <translation>地図に結果</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1407"/>
+ <source>Settings</source>
+ <translatorcomment>せってい</translatorcomment>
+ <translation>設定</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1487"/>
+ <source>About</source>
+ <translatorcomment>そうせつ</translatorcomment>
+ <translation>創設</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="717"/>
+ <location filename="../poi-client/mainwindow.ui" line="941"/>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Category</source>
+ <translatorcomment>しゅるい</translatorcomment>
+ <translation>種類</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="749"/>
+ <location filename="../poi-client/mainwindow.ui" line="973"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="83"/>
+ <source>Source</source>
+ <translatorcomment>てんきょ</translatorcomment>
+ <translation>典拠</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="765"/>
+ <location filename="../poi-client/mainwindow.ui" line="989"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="91"/>
+ <source>WebSite</source>
+ <translation>ウエブサイト</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="781"/>
+ <location filename="../poi-client/mainwindow.ui" line="1005"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="99"/>
+ <source>Phone</source>
+ <translation>電話番号</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="797"/>
+ <location filename="../poi-client/mainwindow.ui" line="1021"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="107"/>
+ <source>Stars</source>
+ <translatorcomment>ほしじるし</translatorcomment>
+ <translation>星印</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="733"/>
+ <location filename="../poi-client/mainwindow.ui" line="957"/>
+ <source>Radius</source>
+ <translatorcomment>はんけい</translatorcomment>
+ <translation>半径</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="813"/>
+ <location filename="../poi-client/mainwindow.ui" line="1037"/>
+ <location filename="../poi-client/mainwindow.cpp" line="66"/>
+ <location filename="../poi-client/mainwindow.cpp" line="115"/>
+ <source>Open hours</source>
+ <translatorcomment>えいぎょうじかん</translatorcomment>
+ <translation>営業時間</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1302"/>
+ <source>Attributes to get</source>
+ <translatorcomment>じょうほう</translatorcomment>
+ <translation>情報</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1245"/>
+ <source>FROM:</source>
+ <translation>から:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1281"/>
+ <source>TO:</source>
+ <translation>まで:</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1386"/>
+ <source>Route segments</source>
+ <translatorcomment>ルートぶぶん</translatorcomment>
+ <translation>ルート部分</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1350"/>
+ <source>Route handle</source>
+ <translation>ルートハンドル</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1186"/>
+ <source>TOP</source>
+ <translatorcomment>いちばんうえ</translatorcomment>
+ <translation>一番上</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1196"/>
+ <source>PREV</source>
+ <translatorcomment>まえ</translatorcomment>
+ <translation>前</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1206"/>
+ <source>NEXT</source>
+ <translatorcomment>つぎ</translatorcomment>
+ <translation>次</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1445"/>
+ <source>Language</source>
+ <translation>言語</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1457"/>
+ <source>languageCode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1470"/>
+ <source>countryCode</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1419"/>
+ <source>Version</source>
+ <translation>バージョン</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.ui" line="1431"/>
+ <source>to be initialized</source>
+ <translatorcomment>もじをにゅうりょくください</translatorcomment>
+ <translation>文字を入力してください</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Name</source>
+ <translatorcomment>なまえ</translatorcomment>
+ <translation>名前</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Distance</source>
+ <translatorcomment>きょり</translatorcomment>
+ <translation>距離</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>ID</source>
+ <translation>ID</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Latitude</source>
+ <translatorcomment>いど</translatorcomment>
+ <translation>緯度</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="64"/>
+ <source>Longitude</source>
+ <translatorcomment>けいど</translatorcomment>
+ <translation>軽度</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="67"/>
+ <source>Icon</source>
+ <translation>アイコン</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="199"/>
+ <location filename="../poi-client/mainwindow.cpp" line="715"/>
+ <location filename="../poi-client/mainwindow.cpp" line="1310"/>
+ <source>EMPTY</source>
+ <translatorcomment>あき</translatorcomment>
+ <translation>空き</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="656"/>
+ <source>Around the default location</source>
+ <translation>ディフォルト地で検索</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="663"/>
+ <source>Around the vehicle</source>
+ <translation>現在地で検索</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="673"/>
+ <source>Around a location</source>
+ <translatorcomment>ちでけんさく</translatorcomment>
+ <translation>地で検索</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="1242"/>
+ <source>Proximity search</source>
+ <translation>周辺で検索</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="1677"/>
+ <source>Along a route</source>
+ <translatorcomment>ルートぞい</translatorcomment>
+ <translation>ルート沿い</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/mainwindow.cpp" line="745"/>
+ <location filename="../poi-client/mainwindow.cpp" line="1678"/>
+ <source>NUMBER</source>
+ <translatorcomment>ばんごう</translatorcomment>
+ <translation>番号</translation>
+ </message>
+</context>
+<context>
+ <name>aboutDialog</name>
+ <message>
+ <source>Dialog</source>
+ <translation type="obsolete">ソフトについて</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="17"/>
+ <source>About</source>
+ <translation>ソフトについて</translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="36"/>
+ <source>qrc:/new/text/about.txt</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-client/about-dialog.ui" line="53"/>
+ <source>OK</source>
+ <translatorcomment>もどる</translatorcomment>
+ <translation>戻る</translation>
+ </message>
+</context>
+</TS>
diff --git a/test/poi-service/poi-common/poi-common-data-model.h b/test/poi-service/poi-common/poi-common-data-model.h
new file mode 100644
index 0000000..71a232a
--- /dev/null
+++ b/test/poi-service/poi-common/poi-common-data-model.h
@@ -0,0 +1,1501 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-common-data-model.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __POICOMMONDATAMODEL_H__
+#define __POICOMMONDATAMODEL_H__
+
+#include <dbus-c++/dbus.h>
+
+/* How to
+ These classes are gateways between internal data and DBus data
+ Internal access is provided by set and get
+ DBus access is provided by setDBus and getDBus
+ Code rules:
+ if data name is MYNAME:
+class DBus_MYNAME // DBus data type ex:(qqqs)
+{
+public:
+ struct MYNAME_t //no class used into this public structure
+ {
+...
+ };
+
+ typedef ... DBus_MYNAME_t;
+
+ DBus_MYNAME(){
+...
+ }
+
+ ~DBus_MYNAME(){}
+
+ void set(MYNAME_t value){
+...
+ }
+
+ MYNAME_t get(){
+...
+ return(m_MYNAME);
+ }
+
+ void setDBus(DBus_MYNAME_t value){
+...
+ }
+
+ DBus_MYNAME_t getDBus(){
+ DBus_MYNAME_t return_value;
+...
+ return(return_value);
+ }
+
+private:
+ MYNAME_t m_MYNAME;
+};
+
+*/
+
+class DBus_dataFormatConverter
+{
+public:
+ DBus_dataFormatConverter()
+ {
+ }
+ ~ DBus_dataFormatConverter()
+ {
+ }
+ DBus::Variant createVariantString(std::string str)
+ {
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_string(str.c_str());
+ return var;
+ }
+
+ DBus::Variant createVariantUint16(uint16_t value)
+ {
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_uint16(value);
+ return var;
+ }
+};
+
+class DBus_version : DBus_dataFormatConverter // (qqqs)
+{
+public:
+ struct version_t
+ {
+ ushort major;
+ ushort minor;
+ ushort micro;
+ std::string date;
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint16_t, uint16_t, std::string > DBus_version_t;
+
+ DBus_version(){
+ m_version.major = 0;
+ m_version.minor = 0;
+ m_version.micro = 0;
+ m_version.date = "";
+ }
+
+ ~DBus_version(){}
+
+ void set(version_t value){
+ m_version.major = value.major;
+ m_version.minor = value.minor;
+ m_version.micro = value.micro;
+ m_version.date = value.date;
+ }
+
+ version_t get(){
+ return(m_version);
+ }
+
+ void setDBus(DBus_version_t value){
+ m_version.major = value._1;
+ m_version.minor = value._2;
+ m_version.micro = value._3;
+ m_version.date = value._4;
+ }
+
+ DBus_version_t getDBus(){
+ DBus_version_t return_value;
+ return_value._1 = m_version.major;
+ return_value._2 = m_version.minor;
+ return_value._3 = m_version.micro;
+ return_value._4 = m_version.date;
+ return(return_value);
+ }
+
+private:
+ version_t m_version;
+};
+
+class DBus_categoryDetails : DBus_dataFormatConverter // (qaqvsbsv) -->in this implementation, the two variant data are string
+{
+public:
+ struct categoryDetails_t
+ {
+ uint16_t id; //Category unique id
+ bool top_level; //false if predefined, true if created by plugin
+ std::string name;
+ std::vector<uint16_t> parents_id; //list of parent categories unique id
+ std::string icons; //visual icons set
+ std::string description; //short category description (optional)
+ std::string media; //media associated (html web site, audio, video, ...) (optional)
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::vector< uint16_t >, ::DBus::Variant, std::string, bool, std::string, ::DBus::Variant > DBus_categoryDetails_t;
+
+ DBus_categoryDetails()
+ {
+ m_categoryDetails.id = 0;
+ m_categoryDetails.parents_id.clear();
+ m_categoryDetails.parents_id.push_back(0); //one element by default
+ m_categoryDetails.icons = "";
+ m_categoryDetails.name = "";
+ m_categoryDetails.top_level = true;
+ m_categoryDetails.description = "";
+ m_categoryDetails.media = "";
+ }
+
+ ~DBus_categoryDetails(){}
+
+ void set(categoryDetails_t value)
+ {
+ size_t index;
+ m_categoryDetails.id = value.id;
+ m_categoryDetails.parents_id.clear();
+ for (index=0;index<value.parents_id.size();index++)
+ {
+ m_categoryDetails.parents_id.push_back(value.parents_id.at(index));
+ }
+ m_categoryDetails.icons = value.icons;
+ m_categoryDetails.name = value.name;
+ m_categoryDetails.top_level = value.top_level;
+ m_categoryDetails.description = value.description;
+ m_categoryDetails.media = value.media;
+ }
+
+ categoryDetails_t get()
+ {
+ return(m_categoryDetails);
+ }
+
+ void setDBus(DBus_categoryDetails_t value)
+ {
+ size_t index;
+ m_categoryDetails.id = value._1;
+ m_categoryDetails.parents_id.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ m_categoryDetails.parents_id.push_back(value._2.at(index));
+ }
+ m_categoryDetails.icons = value._3.reader().get_string();
+ m_categoryDetails.name = value._4;
+ m_categoryDetails.top_level = value._5;
+ m_categoryDetails.description = value._6;
+ m_categoryDetails.description = value._7.reader().get_string();
+ }
+
+ DBus_categoryDetails_t getDBus()
+ {
+ size_t index;
+ DBus_categoryDetails_t return_value;
+
+ return_value._1 = m_categoryDetails.id;
+ return_value._2.clear();
+ for (index=0;index<m_categoryDetails.parents_id.size();index++)
+ {
+ return_value._2.push_back(m_categoryDetails.parents_id.at(index));
+ }
+ return_value._3 = createVariantString(m_categoryDetails.icons);
+ return_value._4 = m_categoryDetails.name;
+ return_value._5 = m_categoryDetails.top_level;
+ return_value._6 = m_categoryDetails.description;
+ return_value._7 = createVariantString(m_categoryDetails.media);
+ return(return_value);
+ }
+
+private:
+ categoryDetails_t m_categoryDetails;
+};
+
+class DBus_categoryOperator : DBus_dataFormatConverter // (qs)
+{
+public:
+ struct categoryOperator_t
+ {
+ uint16_t id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ std::string name; //attribute operator name
+ };
+
+ typedef::DBus::Struct< uint16_t, std::string > DBus_categoryOperator_t;
+
+ DBus_categoryOperator(){
+ m_categoryOperator.id = 0;
+ m_categoryOperator.name = "";
+ }
+
+ ~DBus_categoryOperator(){
+ }
+
+ void set(categoryOperator_t value){
+ m_categoryOperator.id = value.id;
+ m_categoryOperator.name = value.name;
+ }
+
+ categoryOperator_t get(){
+ return(m_categoryOperator);
+ }
+
+ void setDBus(DBus_categoryOperator_t value){
+ m_categoryOperator.id = value._1;
+ m_categoryOperator.name = value._2;
+ }
+
+ DBus_categoryOperator_t getDBus(){
+ DBus_categoryOperator_t return_value;
+ return_value._1 = m_categoryOperator.id;
+ return_value._2 = m_categoryOperator.name;
+ return(return_value);
+ }
+
+private:
+ categoryOperator_t m_categoryOperator;
+};
+
+class DBus_categoryAttribute : DBus_dataFormatConverter // (sqa(qs))
+{
+public:
+ struct categoryAttribute_t
+ {
+ std::string name; //attribute unique name
+ uint16_t type; //enum(INVALID,STRING,INTEGER,COORDINATES ...)
+ std::vector<DBus_categoryOperator::categoryOperator_t > oper;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_categoryAttribute_t;
+
+ DBus_categoryAttribute(){
+ DBus_categoryOperator op;
+ m_categoryAttribute.name = "";
+ m_categoryAttribute.type = 0;
+ m_categoryAttribute.oper.clear();
+ m_categoryAttribute.oper.push_back(op.get()); //one element by default
+ }
+
+ ~DBus_categoryAttribute(){
+ }
+
+ void set(categoryAttribute_t value){
+ size_t index;
+ m_categoryAttribute.name = value.name;
+ m_categoryAttribute.type = value.type;
+ m_categoryAttribute.oper.clear();
+ for (index=0;index<value.oper.size();index++)
+ {
+ m_categoryAttribute.oper.push_back(value.oper.at(index));
+ }
+ }
+
+ categoryAttribute_t get(){
+ return(m_categoryAttribute);
+ }
+
+ void setDBus(DBus_categoryAttribute_t value){
+ size_t index;
+ DBus_categoryOperator op;
+ m_categoryAttribute.name = value._1;
+ m_categoryAttribute.type = value._2;
+ m_categoryAttribute.oper.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ op.setDBus(value._3.at(index));
+ m_categoryAttribute.oper.push_back(op.get());
+ }
+ }
+
+ DBus_categoryAttribute_t getDBus(){
+ DBus_categoryAttribute_t return_value;
+ size_t index;
+ DBus_categoryOperator op;
+ return_value._1 = m_categoryAttribute.name;
+ return_value._2 = m_categoryAttribute.type;
+ return_value._3.clear();
+ for (index=0;index<m_categoryAttribute.oper.size();index++)
+ {
+ op.set(m_categoryAttribute.oper.at(index));
+ return_value._3.push_back(op.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ categoryAttribute_t m_categoryAttribute;
+};
+
+class DBus_categorySortOption : DBus_dataFormatConverter // (qs)
+{
+public:
+ struct categorySortOption_t
+ {
+ ushort id; //enum(GENIVI_POISERVICE_SORT_DEFAULT,GENIVI_POISERVICE_SORT_BY_DISTANCE,GENIVI_POISERVICE_SORT_BY_TIME ... )
+ std::string name; //name to be displayed by application
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::string > DBus_categorySortOption_t;
+
+ DBus_categorySortOption(){
+ m_categorySortOption.id = 0;
+ m_categorySortOption.name = "";
+ }
+
+ ~DBus_categorySortOption(){
+ }
+
+ void set(categorySortOption_t value){
+ m_categorySortOption.id = value.id;
+ m_categorySortOption.name = value.name;
+ }
+
+ categorySortOption_t get(){
+ return(m_categorySortOption);
+ }
+
+ void setDBus(DBus_categorySortOption_t value){
+ m_categorySortOption.id = value._1;
+ m_categorySortOption.name = value._2;
+ }
+
+ DBus_categorySortOption_t getDBus(){
+ DBus_categorySortOption_t return_value;
+ return_value._1 = m_categorySortOption.id;
+ return_value._2 = m_categorySortOption.name;
+ return(return_value);
+ }
+
+private:
+ categorySortOption_t m_categorySortOption;
+};
+
+class DBus_category : DBus_dataFormatConverter // ((qaqvsbsv)a(sqa(qs))a(qs))
+{
+public:
+ struct category_t
+ {
+ DBus_categoryDetails::categoryDetails_t details;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< uint16_t, std::vector< uint16_t >, ::DBus::Variant, std::string, bool, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_category_t;
+
+ DBus_category()
+ {
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_category.details = details.get();
+ m_category.attributes.clear();
+ m_category.attributes.push_back(attrib.get()); //one element by default
+ m_category.sortOptions.clear();
+ m_category.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~ DBus_category(){}
+
+ void set(category_t value)
+ {
+ size_t index;
+ m_category.details = value.details;
+ m_category.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_category.attributes.push_back(value.attributes.at(index));
+ }
+ m_category.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_category.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ category_t get()
+ {
+ return(m_category);
+ }
+
+ void setDBus(DBus_category_t value)
+ {
+ size_t index;
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.setDBus(value._1);
+ m_category.details = details.get();
+ m_category.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_category.attributes.push_back(attrib.get());
+ }
+ m_category.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_category.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_category_t getDBus()
+ {
+ DBus_category_t return_value;
+ size_t index;
+ DBus_categoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.set(m_category.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for(index=0;index<m_category.attributes.size();index++)
+ {
+ attrib.set(m_category.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_category.sortOptions.size();index++)
+ {
+ sortOption.set(m_category.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ category_t m_category;
+};
+
+class DBus_categoryId : DBus_dataFormatConverter // (qb)
+{
+public:
+ struct categoryId_t
+ {
+ ushort id;
+ bool top_level; //false if predefined, true if created by plugin
+ };
+
+ typedef ::DBus::Struct< uint16_t, bool > DBus_categoryId_t;
+
+
+ DBus_categoryId(){
+ m_categoryId.id = 0;
+ m_categoryId.top_level = true;
+ }
+
+ ~DBus_categoryId(){}
+
+ void set(categoryId_t value){
+ m_categoryId.id = value.id;
+ m_categoryId.top_level = value.top_level;
+ }
+
+ categoryId_t get(){
+ return(m_categoryId);
+ }
+
+ void setDBus(DBus_categoryId_t value){
+ m_categoryId.id = value._1;
+ m_categoryId.top_level = value._2;
+ }
+
+ DBus_categoryId_t getDBus(){
+ DBus_categoryId_t return_value;
+ return_value._1 = m_categoryId.id;
+ return_value._2 = m_categoryId.top_level;
+ return(return_value);
+ }
+
+private:
+ categoryId_t m_categoryId;
+};
+
+class DBus_categoryReason : DBus_dataFormatConverter // (qq)
+{
+public:
+ struct categoryReason_t
+ {
+ ushort id;
+ ushort reason; //enum(ADDED,REMOVED,ATTR_ADDED,ATTR_MODIFIED,ATTR_REMOVED, ... )
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint16_t > DBus_categoryReason_t;
+
+
+ DBus_categoryReason(){
+ m_categoryReason.id = 0;
+ m_categoryReason.reason = true;
+ }
+
+ ~DBus_categoryReason(){}
+
+ void set(categoryReason_t value){
+ m_categoryReason.id = value.id;
+ m_categoryReason.reason = value.reason;
+ }
+
+ categoryReason_t get(){
+ return(m_categoryReason);
+ }
+
+ void setDBus(DBus_categoryReason_t value){
+ m_categoryReason.id = value._1;
+ m_categoryReason.reason = value._2;
+ }
+
+ DBus_categoryReason_t getDBus(){
+ DBus_categoryReason_t return_value;
+ return_value._1 = m_categoryReason.id;
+ return_value._2 = m_categoryReason.reason;
+ return(return_value);
+ }
+
+private:
+ categoryReason_t m_categoryReason;
+};
+
+class DBus_categoryIdName : DBus_categoryId // (qsb)
+{
+public:
+
+ struct categoryIdName_t
+ {
+ DBus_categoryId::categoryId_t id;
+ std::string name;
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::string, bool > DBus_categoryIdName_t;
+
+
+ DBus_categoryIdName(){
+ m_categoryIdName = "";
+ }
+
+ ~DBus_categoryIdName(){}
+
+ void set(categoryIdName_t value){
+ DBus_categoryId::set(value.id);
+ m_categoryIdName = value.name;
+ }
+
+ categoryIdName_t get(){
+ categoryIdName_t return_value;
+ return_value.id = DBus_categoryId::get();
+ return_value.name = m_categoryIdName;
+ return(return_value);
+ }
+
+ void setDBus(DBus_categoryIdName_t value){
+ DBus_categoryId::DBus_categoryId_t id;
+ id._1 = value._1;
+ id._2 = value._3;
+ DBus_categoryId::setDBus(id);
+ m_categoryIdName = value._2;
+ }
+
+ DBus_categoryIdName_t getDBus(){
+ DBus_categoryIdName_t return_value;
+ DBus_categoryId::DBus_categoryId_t id;
+ id = DBus_categoryId::getDBus();
+ return_value._1 = id._1;
+ return_value._2 = m_categoryIdName;
+ return_value._3 = id._2;
+ return(return_value);
+ }
+
+private:
+ std::string m_categoryIdName;
+};
+
+class DBus_categoryRadius : DBus_dataFormatConverter // (qu)
+{
+public:
+ struct categoryRadius_t
+ {
+ ushort id;
+ uint radius;
+ };
+
+ typedef ::DBus::Struct< uint16_t, uint32_t > DBus_categoryRadius_t;
+
+ DBus_categoryRadius(){
+ m_categoryRadius.id = 0;
+ m_categoryRadius.radius = 0;
+ }
+
+ ~DBus_categoryRadius(){}
+
+ void set(categoryRadius_t value){
+ m_categoryRadius.id = value.id;
+ m_categoryRadius.radius = value.radius;
+ }
+
+ categoryRadius_t get(){
+ return(m_categoryRadius);
+ }
+
+ void setDBus(DBus_categoryRadius_t value){
+ m_categoryRadius.id = value._1;
+ m_categoryRadius.radius = value._2;
+ }
+
+ DBus_categoryRadius_t getDBus(){
+ DBus_categoryRadius_t return_value;
+ return_value._1 = m_categoryRadius.id;
+ return_value._2 = m_categoryRadius.radius;
+ return(return_value);
+ }
+
+private:
+ categoryRadius_t m_categoryRadius;
+};
+
+class DBus_attribute : DBus_dataFormatConverter // (sqv) -->in this implementation, the variant data is a string
+{
+public:
+ struct attribute_t
+ {
+ std::string name;
+ ushort type;
+ std::string value;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > DBus_attribute_t;
+
+
+ DBus_attribute(){
+ m_attribute.name = "";
+ m_attribute.type = 0;
+ m_attribute.value = "";
+ }
+
+ ~DBus_attribute(){}
+
+ void set(attribute_t value){
+ m_attribute.name = value.name;
+ m_attribute.type = value.type;
+ m_attribute.value = value.value;
+ }
+
+ attribute_t get(){
+ return(m_attribute);
+ }
+
+ void setDBus(DBus_attribute_t value){
+ m_attribute.name = value._1;
+ m_attribute.type = value._2;
+ m_attribute.value = value._3.reader().get_string();
+ }
+
+ DBus_attribute_t getDBus(){
+ DBus_attribute_t return_value;
+ return_value._1 = m_attribute.name;
+ return_value._2 = m_attribute.type;
+ return_value._3 = createVariantString(m_attribute.value);
+ return(return_value);
+ }
+
+private:
+ attribute_t m_attribute;
+};
+
+class DBus_attributeDetails : DBus_attribute //(sqqvqb) -->in this implementation, the variant data is string
+{
+public:
+ struct attributeDetails_t
+ {
+ DBus_attribute::attribute_t attribute;
+ ushort poiCategory; //Category unique id
+ ushort id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ bool mandatory; //true if the attribute is mandatory for the search and false for optional
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, uint16_t, ::DBus::Variant, uint16_t, bool > DBus_attributeDetails_t;
+
+
+ DBus_attributeDetails(){
+ m_attributeDetails.poiCategory = 0;
+ m_attributeDetails.id = 0;
+ m_attributeDetails.mandatory = true;
+ }
+
+ ~DBus_attributeDetails(){}
+
+ void set(attributeDetails_t value){
+ DBus_attribute::set(value.attribute);
+ m_attributeDetails.poiCategory = value.poiCategory;
+ m_attributeDetails.id = value.id;
+ m_attributeDetails.mandatory = value.mandatory;
+ }
+
+ attributeDetails_t get(){
+ attributeDetails_t return_value;
+ return_value.attribute = DBus_attribute::get();
+ return_value.poiCategory = m_attributeDetails.poiCategory;
+ return_value.id = m_attributeDetails.id;
+ return_value.mandatory = m_attributeDetails.mandatory;
+ return(return_value);
+ }
+
+ void setDBus(DBus_attributeDetails_t value){
+ DBus_attribute::DBus_attribute_t attribute;
+ attribute._1 = value._1;
+ attribute._2 = value._3;
+ attribute._3 = value._4;
+ DBus_attribute::setDBus(attribute);
+ m_attributeDetails.poiCategory = value._2;
+ m_attributeDetails.id = value._5;
+ m_attributeDetails.mandatory = value._6;
+ }
+
+ DBus_attributeDetails_t getDBus(){
+ DBus_attributeDetails_t return_value;
+ DBus_attribute::DBus_attribute_t attribute;
+ attribute = DBus_attribute::getDBus();
+ return_value._1 = attribute._1;
+ return_value._2 = m_attributeDetails.poiCategory;
+ return_value._3 = attribute._2;
+ return_value._4 = attribute._3;
+ return_value._5 = m_attributeDetails.id;
+ return_value._6 = m_attributeDetails.mandatory;
+ return(return_value);
+ }
+
+private:
+ attributeDetails_t m_attributeDetails;
+};
+
+class DBus_poiAttribute : DBus_dataFormatConverter // (sqv) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct poiAttribute_t
+ {
+ std::string name;
+ ushort type;
+ std::string value;
+ };
+
+ typedef ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > DBus_poiAttribute_t;
+
+
+ DBus_poiAttribute(){
+ m_poiAttribute.name = "";
+ m_poiAttribute.type = 0;
+ m_poiAttribute.value = "";
+ }
+
+ ~DBus_poiAttribute(){}
+
+ void set(poiAttribute_t value){
+ m_poiAttribute.name = value.name;
+ m_poiAttribute.type = value.type;
+ m_poiAttribute.value = value.value;
+ }
+
+ poiAttribute_t get(){
+ return(m_poiAttribute);
+ }
+
+ void setDBus(DBus_poiAttribute_t value){
+ std::ostringstream oss;
+ uint16_t number;
+ m_poiAttribute.name = value._1;
+ m_poiAttribute.type = value._2;
+ if (m_poiAttribute.type == GENIVI_POISERVICE_STRING)
+ m_poiAttribute.value = value._3.reader().get_string();
+ else
+ { // it's a GENIVI_POISERVICE_INTEGER
+ number = value._3.reader().get_uint16();
+ oss << number;
+ m_poiAttribute.value = oss.str(); //convert to a string
+ }
+ }
+
+ DBus_poiAttribute_t getDBus(){
+ DBus_poiAttribute_t return_value;
+ std::istringstream iss;
+ uint16_t number;
+ return_value._1 = m_poiAttribute.name;
+ return_value._2 = m_poiAttribute.type;
+ if (m_poiAttribute.type == GENIVI_POISERVICE_STRING)
+ return_value._3 = createVariantString(m_poiAttribute.value);
+ else
+ {
+ iss.str(m_poiAttribute.value);
+ iss >> number; //get the numeric value
+ return_value._3 = createVariantUint16(number);
+ }
+
+ return(return_value);
+ }
+
+private:
+ poiAttribute_t m_poiAttribute;
+};
+
+class DBus_poiDetails : DBus_dataFormatConverter //(usddi)
+{
+public:
+ struct poiDetails_t
+ {
+ uint id;
+ std::string name;
+ double latitude;
+ double longitude;
+ int altitude;
+ };
+ typedef ::DBus::Struct< uint32_t, std::string, double, double, int32_t > DBus_poiDetails_t;
+
+ DBus_poiDetails(){
+ m_poiDetails.id = 0;
+ m_poiDetails.name = "";
+ m_poiDetails.latitude = 48.85792; //by default center of Paris
+ m_poiDetails.longitude = 2.3383145;
+ m_poiDetails.altitude = 0;
+ }
+
+ ~DBus_poiDetails(){}
+
+ void set(poiDetails_t value){
+ m_poiDetails.id = value.id;
+ m_poiDetails.name = value.name;
+ m_poiDetails.latitude = value.latitude;
+ m_poiDetails.longitude = value.longitude;
+ m_poiDetails.altitude = value.altitude;
+ }
+
+ poiDetails_t get(){
+ return(m_poiDetails);
+ }
+
+ void setDBus(DBus_poiDetails_t value){
+ m_poiDetails.id = value._1;
+ m_poiDetails.name = value._2;
+ m_poiDetails.latitude = value._3;
+ m_poiDetails.longitude = value._4;
+ m_poiDetails.altitude = value._5;
+ }
+
+ DBus_poiDetails_t getDBus(){
+ DBus_poiDetails_t return_value;
+ return_value._1 = m_poiDetails.id;
+ return_value._2 = m_poiDetails.name;
+ return_value._3 = m_poiDetails.latitude;
+ return_value._4 = m_poiDetails.longitude;
+ return_value._5 = m_poiDetails.altitude;
+ return(return_value);
+ }
+
+private:
+ poiDetails_t m_poiDetails;
+};
+
+class DBus_searchResult : DBus_dataFormatConverter //(uuqa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct searchResult_t
+ {
+ uint id;
+ uint distance;
+ ushort route_status;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< uint32_t, uint32_t, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_searchResult_t;
+
+ DBus_searchResult(){
+ DBus_poiAttribute attrib;
+ m_searchResult.id = 0;
+ m_searchResult.distance = 0;
+ m_searchResult.route_status = 0;
+ m_searchResult.attributes.clear();
+ m_searchResult.attributes.push_back(attrib.get());
+ }
+
+ ~DBus_searchResult(){
+ }
+
+ void set(searchResult_t value){
+ size_t index;
+ m_searchResult.id = value.id;
+ m_searchResult.distance = value.distance;
+ m_searchResult.route_status = value.route_status;
+ m_searchResult.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_searchResult.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ searchResult_t get(){
+ return(m_searchResult);
+ }
+
+ void setDBus(DBus_searchResult_t value){
+ size_t index;
+ DBus_poiAttribute attrib;
+ m_searchResult.id = value._1;
+ m_searchResult.distance = value._2;
+ m_searchResult.route_status = value._3;
+ m_searchResult.attributes.clear();
+ for (index=0;index<value._4.size();index++)
+ {
+ attrib.setDBus(value._4.at(index));
+ m_searchResult.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_searchResult_t getDBus(){
+ DBus_searchResult_t return_value;
+ size_t index;
+ DBus_poiAttribute attrib;
+ return_value._1 = m_searchResult.id;
+ return_value._2 = m_searchResult.distance;
+ return_value._3 = m_searchResult.route_status;
+ return_value._4.clear();
+ for (index=0;index<m_searchResult.attributes.size();index++)
+ {
+ attrib.set(m_searchResult.attributes.at(index));
+ return_value._4.push_back(attrib.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ searchResult_t m_searchResult;
+};
+
+class DBus_searchResultDetails : DBus_dataFormatConverter // ((usddi)aqa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct searchResultDetails_t
+ {
+ DBus_poiDetails::poiDetails_t details;
+ std::vector<ushort> categories;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< uint32_t, std::string, double, double, int32_t >, std::vector< uint16_t >, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_searchResultDetails_t;
+
+ DBus_searchResultDetails(){
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+ m_searchResultDetails.details = details.get();
+ m_searchResultDetails.categories.clear();
+ m_searchResultDetails.categories.push_back(0); //one element by default
+ m_searchResultDetails.attributes.clear();
+ m_searchResultDetails.attributes.push_back(attrib.get()); //one element by default
+ }
+
+ ~DBus_searchResultDetails(){}
+
+ void set(searchResultDetails_t value){
+ size_t index;
+ m_searchResultDetails.details = value.details;
+ m_searchResultDetails.categories.clear();
+ for (index=0;index<value.categories.size();index++)
+ {
+ m_searchResultDetails.categories.push_back(value.categories.at(index));
+ }
+ m_searchResultDetails.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_searchResultDetails.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ searchResultDetails_t get(){
+ return(m_searchResultDetails);
+ }
+
+ void setDBus(DBus_searchResultDetails_t value){
+ size_t index;
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+
+ details.setDBus(value._1);
+ m_searchResultDetails.details = details.get();
+ m_searchResultDetails.categories.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ m_searchResultDetails.categories.push_back(value._2.at(index));
+ }
+ m_searchResultDetails.attributes.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ attrib.setDBus(value._3.at(index));
+ m_searchResultDetails.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_searchResultDetails_t getDBus(){
+ DBus_searchResultDetails_t return_value;
+ size_t index;
+ DBus_poiDetails details;
+ DBus_poiAttribute attrib;
+
+ details.set(m_searchResultDetails.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for (index=0;index<m_searchResultDetails.categories.size();index++)
+ {
+ return_value._2.push_back(m_searchResultDetails.categories.at(index));
+ }
+ return_value._3.clear();
+ for (index=0;index<m_searchResultDetails.attributes.size();index++)
+ {
+ attrib.set(m_searchResultDetails.attributes.at(index));
+ return_value._3.push_back(attrib.getDBus());
+ }
+
+ return(return_value);
+ }
+
+private:
+ searchResultDetails_t m_searchResultDetails;
+};
+
+class DBus_geoCoordinate3D : DBus_dataFormatConverter //(ddi)
+{
+public:
+ struct geoCoordinate3D_t
+ {
+ double latitude;
+ double longitude;
+ int altitude;
+ };
+ typedef ::DBus::Struct< double, double, int32_t > DBus_geoCoordinate3D_t;
+
+ DBus_geoCoordinate3D(){
+ m_geoCoordinate3D.latitude = 48.85792; //by default center of Paris
+ m_geoCoordinate3D.longitude = 2.3383145;
+ m_geoCoordinate3D.altitude = 0;
+ }
+
+ ~DBus_geoCoordinate3D(){}
+
+ void set(geoCoordinate3D_t value){
+ m_geoCoordinate3D.latitude = value.latitude;
+ m_geoCoordinate3D.longitude = value.longitude;
+ m_geoCoordinate3D.altitude = value.altitude;
+ }
+
+ geoCoordinate3D_t get(){
+ return(m_geoCoordinate3D);
+ }
+
+ void setDBus(DBus_geoCoordinate3D_t value){
+ m_geoCoordinate3D.latitude = value._1;
+ m_geoCoordinate3D.longitude = value._2;
+ m_geoCoordinate3D.altitude = value._3;
+ }
+
+ DBus_geoCoordinate3D_t getDBus(){
+ DBus_geoCoordinate3D_t return_value;
+ return_value._1 = m_geoCoordinate3D.latitude;
+ return_value._2 = m_geoCoordinate3D.longitude;
+ return_value._3 = m_geoCoordinate3D.altitude;
+ return(return_value);
+ }
+
+private:
+ geoCoordinate3D_t m_geoCoordinate3D;
+};
+
+class DBus_poiCAMDetails : DBus_dataFormatConverter // (usq(ddi)qa(sqv)) -->in this implementation, the variant data depends on the value of 'type'
+{
+public:
+ struct poiCAMDetails_t //no class used into this public structure
+ {
+ uint source_id;
+ std::string name;
+ ushort category;
+ DBus_geoCoordinate3D::geoCoordinate3D_t location;
+ ushort distance;
+ std::vector<DBus_poiAttribute::poiAttribute_t> attributes;
+ };
+
+ typedef ::DBus::Struct< uint32_t, std::string, uint16_t, ::DBus::Struct< double, double, int32_t >, uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, ::DBus::Variant > > > DBus_poiCAMDetails_t;
+
+ DBus_poiCAMDetails(){
+ DBus_poiAttribute attrib;
+ DBus_geoCoordinate3D loc;
+
+ m_poiCAMDetails.source_id = 0;
+ m_poiCAMDetails.name = "";
+ m_poiCAMDetails.category = 0;
+ m_poiCAMDetails.location = loc.get();
+ m_poiCAMDetails.distance = 0;
+ m_poiCAMDetails.attributes.clear();
+ m_poiCAMDetails.attributes.push_back(attrib.get());
+ }
+
+ ~DBus_poiCAMDetails(){}
+
+ void set(poiCAMDetails_t value){
+ size_t index;
+
+ m_poiCAMDetails.source_id = value.source_id;
+ m_poiCAMDetails.name = value.name;
+ m_poiCAMDetails.category = value.category;
+ m_poiCAMDetails.location = value.location;
+ m_poiCAMDetails.distance = value.distance;
+ m_poiCAMDetails.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_poiCAMDetails.attributes.push_back(value.attributes.at(index));
+ }
+ }
+
+ poiCAMDetails_t get(){
+ return(m_poiCAMDetails);
+ }
+
+ void setDBus(DBus_poiCAMDetails_t value){
+ size_t index;
+ DBus_geoCoordinate3D loc;
+ DBus_poiAttribute attrib;
+
+ m_poiCAMDetails.source_id = value._1;
+ m_poiCAMDetails.name = value._2;
+ m_poiCAMDetails.category = value._3;
+ loc.setDBus(value._4);
+ m_poiCAMDetails.location = loc.get();
+ m_poiCAMDetails.distance = value._5,
+ m_poiCAMDetails.attributes.clear();
+ for (index=0;index<value._6.size();index++)
+ {
+ attrib.setDBus(value._6.at(index));
+ m_poiCAMDetails.attributes.push_back(attrib.get());
+ }
+ }
+
+ DBus_poiCAMDetails_t getDBus(){
+ DBus_poiCAMDetails_t return_value;
+ size_t index;
+ DBus_geoCoordinate3D loc;
+ DBus_poiAttribute attrib;
+
+ return_value._1 = m_poiCAMDetails.source_id;
+ return_value._2 = m_poiCAMDetails.name;
+ return_value._3 = m_poiCAMDetails.category;
+ loc.set(m_poiCAMDetails.location);
+ return_value._4 = loc.getDBus();
+ return_value._5 = m_poiCAMDetails.distance;
+ return_value._6.clear();
+ for (index=0;index<m_poiCAMDetails.attributes.size();index++)
+ {
+ attrib.set(m_poiCAMDetails.attributes.at(index));
+ return_value._6.push_back(attrib.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ poiCAMDetails_t m_poiCAMDetails;
+};
+
+class DBus_CAMcategoryDetails : DBus_dataFormatConverter // (aqvssv) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategoryDetails_t
+ {
+ std::vector<ushort> parents_id;
+ std::string icons;
+ std::string name;
+ std::string short_desc;
+ std::string media;
+ };
+
+ typedef ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant > DBus_CAMcategoryDetails_t;
+
+ DBus_CAMcategoryDetails(){
+ m_CAMcategoryDetails.parents_id.clear();
+ m_CAMcategoryDetails.parents_id.push_back(0); //one element by default
+ m_CAMcategoryDetails.icons = "";
+ m_CAMcategoryDetails.name = "";
+ m_CAMcategoryDetails.short_desc = "";
+ m_CAMcategoryDetails.media = "";
+ }
+
+ ~DBus_CAMcategoryDetails(){}
+
+ void set(CAMcategoryDetails_t value){
+ size_t index;
+ m_CAMcategoryDetails.parents_id.clear();
+ for (index=0;index<value.parents_id.size();index++)
+ {
+ m_CAMcategoryDetails.parents_id.push_back(value.parents_id.at(index));
+ }
+ m_CAMcategoryDetails.icons = value.icons;
+ m_CAMcategoryDetails.name = value.name;
+ m_CAMcategoryDetails.short_desc = value.short_desc;
+ m_CAMcategoryDetails.media = value.media;
+ }
+
+ CAMcategoryDetails_t get(){
+ return(m_CAMcategoryDetails);
+ }
+
+ void setDBus(DBus_CAMcategoryDetails_t value){
+ size_t index;
+ m_CAMcategoryDetails.parents_id.clear();
+ for (index=0;index<value._1.size();index++)
+ {
+ m_CAMcategoryDetails.parents_id.push_back(value._1.at(index));
+ }
+ m_CAMcategoryDetails.icons = value._2.reader().get_string();
+ m_CAMcategoryDetails.name = value._3;
+ m_CAMcategoryDetails.short_desc = value._4;
+ m_CAMcategoryDetails.media = value._5.reader().get_string();
+ }
+
+ DBus_CAMcategoryDetails_t getDBus(){
+ DBus_CAMcategoryDetails_t return_value;
+ size_t index;
+ return_value._1.clear();
+ for (index=0;index<m_CAMcategoryDetails.parents_id.size();index++)
+ {
+ return_value._1.push_back(m_CAMcategoryDetails.parents_id.at(index));
+ }
+ return_value._2 = createVariantString(m_CAMcategoryDetails.icons);
+ return_value._3 = m_CAMcategoryDetails.name;
+ return_value._4 = m_CAMcategoryDetails.short_desc;
+ return_value._5 = createVariantString(m_CAMcategoryDetails.media);
+ return(return_value);
+ }
+
+private:
+ CAMcategoryDetails_t m_CAMcategoryDetails;
+};
+
+class DBus_CAMcategory : DBus_dataFormatConverter // ((aqvssv)a(sqa(qs))a(qs))) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategory_t //no class used into this public structure
+ {
+ DBus_CAMcategoryDetails::CAMcategoryDetails_t details;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< ::DBus::Struct< std::vector< uint16_t >, ::DBus::Variant, std::string, std::string, ::DBus::Variant >, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_CAMcategory_t;
+
+ DBus_CAMcategory(){
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategory.details = details.get();
+ m_CAMcategory.attributes.clear();
+ m_CAMcategory.attributes.push_back(attrib.get()); //one element by default
+ m_CAMcategory.sortOptions.clear();
+ m_CAMcategory.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~DBus_CAMcategory(){}
+
+ void set(CAMcategory_t value){
+ size_t index;
+ m_CAMcategory.details = value.details;
+ m_CAMcategory.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_CAMcategory.attributes.push_back(value.attributes.at(index));
+ }
+ m_CAMcategory.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_CAMcategory.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ CAMcategory_t get(){
+ return(m_CAMcategory);
+ }
+
+ void setDBus(DBus_CAMcategory_t value){
+ size_t index;
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.setDBus(value._1);
+ m_CAMcategory.details = details.get();
+ m_CAMcategory.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_CAMcategory.attributes.push_back(attrib.get());
+ }
+ m_CAMcategory.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_CAMcategory.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_CAMcategory_t getDBus(){
+ DBus_CAMcategory_t return_value;
+ size_t index;
+ DBus_CAMcategoryDetails details;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ details.set(m_CAMcategory.details);
+ return_value._1 = details.getDBus();
+ return_value._2.clear();
+ for(index=0;index<m_CAMcategory.attributes.size();index++)
+ {
+ attrib.set(m_CAMcategory.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_CAMcategory.sortOptions.size();index++)
+ {
+ sortOption.set(m_CAMcategory.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ CAMcategory_t m_CAMcategory;
+};
+
+class DBus_CAMcategoryUpdate : DBus_dataFormatConverter // (qa(sqa(qs))a(qs)) -->in this implementation, the variant data is string
+{
+public:
+ struct CAMcategoryUpdate_t //no class used into this public structure
+ {
+ ushort unique_id;
+ std::vector<DBus_categoryAttribute::categoryAttribute_t> attributes;
+ std::vector<DBus_categorySortOption::categorySortOption_t> sortOptions;
+ };
+
+ typedef ::DBus::Struct< uint16_t, std::vector< ::DBus::Struct< std::string, uint16_t, std::vector< ::DBus::Struct< uint16_t, std::string > > > >, std::vector< ::DBus::Struct< uint16_t, std::string > > > DBus_CAMcategoryUpdate_t;
+
+ DBus_CAMcategoryUpdate(){
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategoryUpdate.unique_id = 0;
+ m_CAMcategoryUpdate.attributes.clear();
+ m_CAMcategoryUpdate.attributes.push_back(attrib.get()); //one element by default
+ m_CAMcategoryUpdate.sortOptions.clear();
+ m_CAMcategoryUpdate.sortOptions.push_back(sortOption.get()); //one element by default
+ }
+
+ ~DBus_CAMcategoryUpdate(){}
+
+ void set(CAMcategoryUpdate_t value){
+ size_t index;
+ m_CAMcategoryUpdate.unique_id = value.unique_id;
+ m_CAMcategoryUpdate.attributes.clear();
+ for (index=0;index<value.attributes.size();index++)
+ {
+ m_CAMcategoryUpdate.attributes.push_back(value.attributes.at(index));
+ }
+ m_CAMcategoryUpdate.sortOptions.clear();
+ for (index=0;index<value.sortOptions.size();index++)
+ {
+ m_CAMcategoryUpdate.sortOptions.push_back(value.sortOptions.at(index));
+ }
+ }
+
+ CAMcategoryUpdate_t get(){
+ return(m_CAMcategoryUpdate);
+ }
+
+ void setDBus(DBus_CAMcategoryUpdate_t value){
+ size_t index;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ m_CAMcategoryUpdate.unique_id = value._1;
+ m_CAMcategoryUpdate.attributes.clear();
+ for (index=0;index<value._2.size();index++)
+ {
+ attrib.setDBus(value._2.at(index));
+ m_CAMcategoryUpdate.attributes.push_back(attrib.get());
+ }
+ m_CAMcategoryUpdate.sortOptions.clear();
+ for (index=0;index<value._3.size();index++)
+ {
+ sortOption.setDBus(value._3.at(index));
+ m_CAMcategoryUpdate.sortOptions.push_back(sortOption.get());
+ }
+ }
+
+ DBus_CAMcategoryUpdate_t getDBus(){
+ DBus_CAMcategoryUpdate_t return_value;
+ size_t index;
+ DBus_categoryAttribute attrib;
+ DBus_categorySortOption sortOption;
+
+ return_value._1 = m_CAMcategoryUpdate.unique_id;
+ return_value._2.clear();
+ for(index=0;index<m_CAMcategoryUpdate.attributes.size();index++)
+ {
+ attrib.set(m_CAMcategoryUpdate.attributes.at(index));
+ return_value._2.push_back(attrib.getDBus());
+ }
+ return_value._3.clear();
+ for(index=0;index<m_CAMcategoryUpdate.sortOptions.size();index++)
+ {
+ sortOption.set(m_CAMcategoryUpdate.sortOptions.at(index));
+ return_value._3.push_back(sortOption.getDBus());
+ }
+ return(return_value);
+ }
+
+private:
+ CAMcategoryUpdate_t m_CAMcategoryUpdate;
+};
+
+#define ALL_CATEGORIES 0
+#define INVALID_CATEGORY 0x00
+#define MAX_CATEGORIES 256 //to be improved
+#define CAM_CATEGORY_OFFSET 0x0100 //offset added to create the id of a category provided by a CAM (to be multiplied by the camId)
+#define CAM_ATTRIBUTE_OFFSET 0x0100 //offset added to create the id of an attribute provided by a CAM (to be multiplied by the camId)
+
+#endif
diff --git a/test/poi-service/poi-common/poi-common-types.h b/test/poi-service/poi-common/poi-common-types.h
new file mode 100644
index 0000000..9ce012e
--- /dev/null
+++ b/test/poi-service/poi-common/poi-common-types.h
@@ -0,0 +1,228 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2011-2012 PCA Peugeot Citroën
+ *
+ * This file is part of GENIVI Project POISearch Proof Of Concept [POIPOCClient].
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * \file POIPOCCommonTypes.h
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+#ifndef POIPOCCOMMONTYPES_H
+#define POIPOCCOMMONTYPES_H
+
+#include <QtCore/QString>
+#include <QDBusArgument>
+
+struct geoCoordinate2D_t
+{ //(dd)
+ double latitude;
+ double longitude;
+};
+
+struct geoCoordinate3D_t
+{ //(ddi)
+ double latitude;
+ double longitude;
+ int altitude;
+};
+
+struct poiCategoryAndReason_t
+{ //(qq)
+ ushort id;
+ ushort reason;
+};
+
+struct boundingBox_t
+{ //(dd)(dd)
+ geoCoordinate2D_t topLeftCorner;
+ geoCoordinate2D_t bottomRightCorner;
+};
+
+struct results_t
+{ //(qb)
+ ushort id;
+ bool status;
+};
+
+struct sessions_t
+{ //(ys)
+ uchar sessionHandle;
+ std::string client;
+};
+
+struct poiCategory_t
+{ //(qb)
+ ushort id;
+ bool top_level; //false if predefined, true if created by plugin
+};
+
+struct poiCategoryFull_t
+{ //(qsb)
+ ushort id;
+ std::string name;
+ bool top_level; //false if predefined, true if created by plugin
+};
+
+struct poiSearch_t
+{ //(qu)
+ ushort id;
+ uint radius;
+};
+
+struct version_t
+{ //(qqqs)
+ ushort major;
+ ushort minor;
+ ushort micro;
+ std::string date;
+};
+
+struct poiAttribute_t
+{ //(sqv)
+ std::string name;
+ ushort type;
+ QDBusVariant value;
+};
+
+struct poiAttributeFull_t
+{ //(sqqvqb)
+ std::string name;
+ ushort poiCategory; //Category unique id
+ ushort type;
+ QDBusVariant value;
+ ushort id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ bool mandatory; //true if the attribute is mandatory for the search and false for optional
+};
+
+struct resultSearch_t
+{ //(uuqa(sqv))
+ uint id;
+ uint distance;
+ ushort route_status;
+ QList<poiAttribute_t> attributes;
+};
+
+struct detailsPOISearch_t
+{ //(usddi)
+ uint id;
+ QString name; //need to be a QString for UTF8
+ double latitude;
+ double longitude;
+ int altitude;
+};
+
+struct resultSearchDetails_t
+{ //((usddi)aqa(sqv))
+ detailsPOISearch_t details;
+ QList<ushort> categories;
+ QList<poiAttribute_t> attributes;
+};
+
+struct categoryDetails_t
+{ //(qaqvsbsv)
+ ushort id; //Category unique id
+ QList<ushort> parents_id; //list of parent categories unique id
+ QDBusVariant icons; //visual icons set
+ QString name; //need to be a QString for UTF8
+ bool top_level; //false if predefined, true if created by plugin
+ std::string description; //short category description (optional)
+ QDBusVariant media; //media associated (html web site, audio, video, ...) (optional)
+};
+
+struct categoryOperator_t
+{ //(qs)
+ ushort id; //enum(INVALID,MORE_THAN,LESS_THAN,EQUAL, ....)
+ std::string name; //attribute operator name
+};
+
+struct categoryAttribute_t
+{ //(sqa(qs))
+ std::string name; //attribute unique name
+ ushort type; //enum(INVALID,STRING,INTEGER,COORDINATES ...)
+ QList<categoryOperator_t> oper;
+};
+
+struct categorySortOption_t
+{ //(qs)
+ ushort id; //enum(GENIVI_POISERVICE_SORT_DEFAULT,GENIVI_POISERVICE_SORT_BY_DISTANCE,GENIVI_POISERVICE_SORT_BY_TIME ... )
+ std::string name; //name to be displayed by application
+};
+
+struct categoryDetailsList_t
+{ //((qaqvsbsv)a(sqa(qs))a(qs))
+ categoryDetails_t details;
+ QList<categoryAttribute_t> attributes;
+ QList<categorySortOption_t> sortOptions;
+};
+
+typedef QMap<ushort,QDBusVariant> tupleVariant_t;
+
+typedef QMap<ushort,ushort> tupleUshort_t;
+
+struct resultCamSearch_t
+{ //(usq(ddi)qa(sqv))
+ uint source_id;
+ std::string name;
+ ushort category;
+ geoCoordinate3D_t location;
+ ushort distance;
+ QList<poiAttribute_t> attributes;
+};
+
+struct resultCamSearchDetails_t
+{ //((usddi)aqa(sqv))
+ detailsPOISearch_t details;
+ QList<ushort> categories;
+ QList<poiAttribute_t> attributes;
+};
+
+struct detailsCamCategory_t
+{ //(aqvssv)
+ QList<ushort> parents_id;
+ QDBusVariant icons;
+ std::string name;
+ std::string short_desc;
+ QDBusVariant media;
+};
+
+struct poiCategoryCamAdd_t
+{ //((aqvssv)a(sqa(qs))a(qs))
+ detailsCamCategory_t details;
+ QList<categoryAttribute_t> attributes;
+ QList<categorySortOption_t> sortOptions;
+};
+
+struct poiCategoryCamUpdate_t
+{ //(qa(sqa(qs))a(qs))
+ ushort unique_id;
+ QList<categoryAttribute_t> attributes;
+ QList<categorySortOption_t> sortOptions;
+};
+
+struct satellitedetails_t
+{ //(ubuuu)
+ uint satId;
+ bool inUse;
+ uint elevation;
+ uint azimuth;
+ uint snr;
+};
+
+struct route_vector_t
+{ //(dd)(dd)
+ geoCoordinate2D_t startPoint;
+ geoCoordinate2D_t endPoint;
+};
+
+#endif // POIPOCCOMMONTYPES_H
diff --git a/test/poi-service/poi-common/poi-content-access-module.png b/test/poi-service/poi-common/poi-content-access-module.png
new file mode 100644
index 0000000..9a0eaae
--- /dev/null
+++ b/test/poi-service/poi-common/poi-content-access-module.png
Binary files differ
diff --git a/test/poi-service/poi-common/poi-content-access-module_en.ts b/test/poi-service/poi-common/poi-content-access-module_en.ts
new file mode 100644
index 0000000..0d0bc07
--- /dev/null
+++ b/test/poi-service/poi-common/poi-content-access-module_en.ts
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="222"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="82"/>
+ <source>REGISTER</source>
+ <translation>REGISTER</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="203"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="83"/>
+ <source>UNREGISTER</source>
+ <translation>UNREGISTER</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="26"/>
+ <source>Bicycle shop</source>
+ <translation>Bicycle shop</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="54"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="75"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="96"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="135"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="261"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="279"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="118"/>
+ <source>Version</source>
+ <translation>Version</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="171"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="84"/>
+ <source>ADDandREG</source>
+ <translation>ADDandREG</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="187"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="85"/>
+ <source>REMOVE</source>
+ <translation>REMOVE</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="244"/>
+ <source>Language</source>
+ <translation>Language</translation>
+ </message>
+ <message>
+ <source>NUMBER: </source>
+ <translation type="obsolete">NUMBER: </translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="109"/>
+ <source>NUMBER</source>
+ <translation>NUMBER</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="143"/>
+ <source>Categories added</source>
+ <translation>Added</translation>
+ </message>
+</context>
+</TS>
diff --git a/test/poi-service/poi-common/poi-content-access-module_jp.ts b/test/poi-service/poi-common/poi-content-access-module_jp.ts
new file mode 100644
index 0000000..81b3d5a
--- /dev/null
+++ b/test/poi-service/poi-common/poi-content-access-module_jp.ts
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja_JP" sourcelanguage="ja_JP">
+<context>
+ <name>MainWindow</name>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="222"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="82"/>
+ <source>REGISTER</source>
+ <translatorcomment>とうき</translatorcomment>
+ <translation>登記</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="203"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="83"/>
+ <source>UNREGISTER</source>
+ <translatorcomment>ちょうし</translatorcomment>
+ <translation>中止</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="26"/>
+ <source>Bicycle shop</source>
+ <translatorcomment>じてんしゃてん</translatorcomment>
+ <translation>自転車店</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="54"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="75"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="96"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="135"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="261"/>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="279"/>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="118"/>
+ <source>Version</source>
+ <translation>バージョン</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="171"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="84"/>
+ <source>ADDandREG</source>
+ <translatorcomment>たす</translatorcomment>
+ <translation>足す</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="187"/>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="85"/>
+ <source>REMOVE</source>
+ <translatorcomment>とる</translatorcomment>
+ <translation>取る</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.ui" line="244"/>
+ <source>Language</source>
+ <translatorcomment>げんご</translatorcomment>
+ <translation>言語</translation>
+ </message>
+ <message>
+ <source>NUMBER: </source>
+ <translation type="obsolete">番号: </translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="109"/>
+ <source>NUMBER</source>
+ <translation>番号</translation>
+ </message>
+ <message>
+ <location filename="../poi-contentaccess-module/mainwindow.cpp" line="143"/>
+ <source>Categories added</source>
+ <translatorcomment>たした</translatorcomment>
+ <translation>足した</translation>
+ </message>
+</context>
+</TS>
diff --git a/test/poi-service/poi-common/poi-marshal-handler.cpp b/test/poi-service/poi-common/poi-marshal-handler.cpp
new file mode 100644
index 0000000..8cab97e
--- /dev/null
+++ b/test/poi-service/poi-common/poi-marshal-handler.cpp
@@ -0,0 +1,571 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-marshal-handler.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "poi-marshal-handler.h"
+
+const QDBusArgument &operator>>(const QDBusArgument &argument, std::string &dest) {
+ QString str;
+ argument >> str;
+ dest = str.toStdString();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const std::string &source)
+{
+ QString str = QString::fromStdString(source);
+ argument << str;
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryAndReason_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.reason;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryAndReason_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.reason;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategory_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.top_level;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategory_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.top_level;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryFull_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.name >> dest.top_level;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryFull_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.name << source.top_level;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiSearch_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.radius;
+ argument.endStructure();
+ return argument;
+
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiSearch_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.radius;
+ argument.endStructure();
+ return argument;
+}
+
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,version_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.major >> dest.minor >> dest.micro >> dest.date;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const version_t &source)
+{
+ argument.beginStructure();
+ argument << source.major << source.minor << source.micro << source.date;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,geoCoordinate2D_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.latitude >> dest.longitude;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const geoCoordinate2D_t &source)
+{
+ argument.beginStructure();
+ argument << source.latitude << source.longitude;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,geoCoordinate3D_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.latitude >> dest.longitude >> dest.altitude;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const geoCoordinate3D_t &source)
+{
+ argument.beginStructure();
+ argument << source.latitude << source.longitude << source.altitude;
+ argument.endStructure();
+ return argument;
+}
+
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiAttribute_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.name >> dest.type >> dest.value;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiAttribute_t &source)
+{
+ argument.beginStructure();
+ argument << source.name << source.type << source.value;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiAttributeFull_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.name >> dest.poiCategory >> dest.type >> dest.value >> dest.id >> dest.mandatory;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiAttributeFull_t &source)
+{
+ argument.beginStructure();
+ argument << source.name << source.poiCategory << source.type << source.value << source.id << source.mandatory;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultSearch_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.distance >> dest.route_status >> dest.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const resultSearch_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.distance << source.route_status << source.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryDetails_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.parents_id >> dest.icons >> dest.name >> dest.top_level >> dest.description >> dest.media;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const categoryDetails_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.parents_id << source.icons << source.name << source.top_level << source.description << source.media;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryOperator_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.name;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const categoryOperator_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.name;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryAttribute_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.name >> dest.type >> dest.oper;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const categoryAttribute_t &source)
+{
+ argument.beginStructure();
+ argument << source.name << source.type << source.oper ;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,categorySortOption_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.name ;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const categorySortOption_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.name;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryDetailsList_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.details >> dest.attributes >> dest.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const categoryDetailsList_t &source)
+{
+ argument.beginStructure();
+ argument << source.details << source.attributes << source.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,detailsPOISearch_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.name >> dest.latitude >> dest.longitude >> dest.altitude;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const detailsPOISearch_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.name << source.latitude << source.longitude << source.altitude;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultSearchDetails_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.details >> dest.categories >> dest.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const resultSearchDetails_t &source)
+{
+ argument.beginStructure();
+ argument << source.details << source.categories << source.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,results_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.id >> dest.status;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const results_t &source)
+{
+ argument.beginStructure();
+ argument << source.id << source.status;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,satellitedetails_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.satId >> dest.inUse >> dest.elevation >> dest.azimuth >> dest.snr;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const satellitedetails_t &source)
+{
+ argument.beginStructure();
+ argument << source.satId << source.inUse << source.elevation << source.azimuth << source.snr;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,sessions_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.sessionHandle >> dest.client;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const sessions_t &source)
+{
+ argument.beginStructure();
+ argument << source.sessionHandle << source.client;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,boundingBox_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.topLeftCorner >> dest.bottomRightCorner;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const boundingBox_t &source)
+{
+ argument.beginStructure();
+ argument << source.topLeftCorner << source.bottomRightCorner;
+ argument.endStructure();
+ return argument;
+}
+
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,detailsCamCategory_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.parents_id >> dest.icons >> dest.name >> dest.short_desc >> dest.media;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const detailsCamCategory_t &source)
+{
+ argument.beginStructure();
+ argument << source.parents_id << source.icons << source.name << source.short_desc << source.media;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryCamAdd_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.details >> dest.attributes >> dest.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryCamAdd_t &source)
+{
+ argument.beginStructure();
+ argument << source.details << source.attributes << source.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryCamUpdate_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.unique_id >> dest.attributes >> dest.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryCamUpdate_t &source)
+{
+ argument.beginStructure();
+ argument << source.unique_id << source.attributes << source.sortOptions;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultCamSearch_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.source_id >> dest.name >> dest.category >> dest.location >> dest.distance >> dest.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const resultCamSearch_t &source)
+{
+ argument.beginStructure();
+ argument << source.source_id << source.name << source.category << source.location << source.distance << source.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultCamSearchDetails_t &dest)
+{
+ argument.beginStructure();
+ argument >> dest.details >> dest.categories >> dest.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+QDBusArgument &operator << (QDBusArgument &argument, const resultCamSearchDetails_t &source)
+{
+ argument.beginStructure();
+ argument << source.details << source.categories << source.attributes;
+ argument.endStructure();
+ return argument;
+}
+
+MarshalHandler::MarshalHandler()
+{
+}
+
+void MarshalHandler::registerMetaType()
+{
+ qDBusRegisterMetaType<results_t>();
+ qDBusRegisterMetaType<QList<results_t> >();
+ qDBusRegisterMetaType<poiCategoryAndReason_t>();
+ qDBusRegisterMetaType<QList<poiCategoryAndReason_t> >();
+ qDBusRegisterMetaType<detailsPOISearch_t>();
+ qDBusRegisterMetaType<resultSearchDetails_t>();
+ qDBusRegisterMetaType<QList<resultSearchDetails_t> >();
+ qDBusRegisterMetaType<poiAttributeFull_t>();
+ qDBusRegisterMetaType<QList<poiAttributeFull_t> >();
+ qDBusRegisterMetaType<poiCategory_t>();
+ qDBusRegisterMetaType<QList<poiCategory_t> >();
+ qDBusRegisterMetaType<version_t>();
+ qDBusRegisterMetaType<geoCoordinate3D_t>();
+ qDBusRegisterMetaType<std::string>();
+ qDBusRegisterMetaType<QList<std::string> >();
+ qDBusRegisterMetaType<QList<ushort> >();
+ qDBusRegisterMetaType<QList<uint> >();
+ qDBusRegisterMetaType<poiCategoryFull_t>();
+ qDBusRegisterMetaType<QList<poiCategoryFull_t> >();
+ qDBusRegisterMetaType<poiSearch_t>();
+ qDBusRegisterMetaType<QList<poiSearch_t> >();
+ qDBusRegisterMetaType<poiAttribute_t>();
+ qDBusRegisterMetaType<QList<poiAttribute_t> >();
+ qDBusRegisterMetaType<resultSearch_t>();
+ qDBusRegisterMetaType<QList<resultSearch_t> >();
+ qDBusRegisterMetaType<categoryDetails_t>();
+ qDBusRegisterMetaType<categoryOperator_t>();
+ qDBusRegisterMetaType<QList<categoryOperator_t> >();
+ qDBusRegisterMetaType<categoryAttribute_t>();
+ qDBusRegisterMetaType<QList<categoryAttribute_t> >();
+ qDBusRegisterMetaType<categorySortOption_t>();
+ qDBusRegisterMetaType<QList<categorySortOption_t> >();
+ qDBusRegisterMetaType<categoryDetailsList_t>();
+ qDBusRegisterMetaType<QList<categoryDetailsList_t> >();
+ qDBusRegisterMetaType<satellitedetails_t>();
+ qDBusRegisterMetaType<QList<satellitedetails_t> >();
+ qDBusRegisterMetaType<tupleVariant_t>();
+ qDBusRegisterMetaType<QList<tupleVariant_t> >();
+ qDBusRegisterMetaType<sessions_t>();
+ qDBusRegisterMetaType<QList<sessions_t> >();
+ qDBusRegisterMetaType<detailsCamCategory_t>();
+ qDBusRegisterMetaType<poiCategoryCamAdd_t>();
+ qDBusRegisterMetaType<QList<poiCategoryCamAdd_t> >();
+ qDBusRegisterMetaType<poiCategoryCamUpdate_t>();
+ qDBusRegisterMetaType<QList<poiCategoryCamUpdate_t> >();
+ qDBusRegisterMetaType<resultCamSearch_t>();
+ qDBusRegisterMetaType<QList<resultCamSearch_t> >();
+ qDBusRegisterMetaType<resultCamSearchDetails_t>();
+ qDBusRegisterMetaType<QList<resultCamSearchDetails_t> >();
+
+ qRegisterMetaType<results_t>();
+ qRegisterMetaType<QList<results_t> >();
+ qRegisterMetaType<poiCategoryAndReason_t>();
+ qRegisterMetaType<QList<poiCategoryAndReason_t> >();
+ qRegisterMetaType<detailsPOISearch_t>();
+ qRegisterMetaType<resultSearchDetails_t>();
+ qRegisterMetaType<QList<resultSearchDetails_t> >();
+ qRegisterMetaType<poiAttributeFull_t>();
+ qRegisterMetaType<QList<poiAttributeFull_t> >();
+ qRegisterMetaType<poiCategory_t>();
+ qRegisterMetaType<QList<poiCategory_t> >();
+ qRegisterMetaType<version_t>();
+ qRegisterMetaType<geoCoordinate3D_t>();
+ qRegisterMetaType<std::string>();
+ qRegisterMetaType<QList<std::string> >();
+ qRegisterMetaType<QList<ushort> >();
+ qRegisterMetaType<QList<uint> >();
+ qRegisterMetaType<poiCategoryFull_t>();
+ qRegisterMetaType<QList<poiCategoryFull_t> >();
+ qRegisterMetaType<poiSearch_t>();
+ qRegisterMetaType<QList<poiSearch_t> >();
+ qRegisterMetaType<poiAttribute_t>();
+ qRegisterMetaType<QList<poiAttribute_t> >();
+ qRegisterMetaType<resultSearch_t>();
+ qRegisterMetaType<QList<resultSearch_t> >();
+ qRegisterMetaType<categoryDetails_t>();
+ qRegisterMetaType<categoryOperator_t>();
+ qRegisterMetaType<QList<categoryOperator_t> >();
+ qRegisterMetaType<categoryAttribute_t>();
+ qRegisterMetaType<QList<categoryAttribute_t> >();
+ qRegisterMetaType<categorySortOption_t>();
+ qRegisterMetaType<QList<categorySortOption_t> >();
+ qRegisterMetaType<categoryDetailsList_t>();
+ qRegisterMetaType<QList<categoryDetailsList_t> >();
+ qRegisterMetaType<satellitedetails_t>();
+ qRegisterMetaType<QList<satellitedetails_t> >();
+ qRegisterMetaType<tupleVariant_t>();
+ qRegisterMetaType<QList<tupleVariant_t> >();
+ qRegisterMetaType<sessions_t>();
+ qRegisterMetaType<QList<sessions_t> >();
+ qRegisterMetaType<detailsCamCategory_t>();
+ qRegisterMetaType<poiCategoryCamAdd_t>();
+ qRegisterMetaType<QList<poiCategoryCamAdd_t> >();
+ qRegisterMetaType<poiCategoryCamUpdate_t>();
+ qRegisterMetaType<QList<poiCategoryCamUpdate_t> >();
+ qRegisterMetaType<resultCamSearch_t>();
+ qRegisterMetaType<QList<resultCamSearch_t> >();
+ qRegisterMetaType<resultCamSearchDetails_t>();
+ qRegisterMetaType<QList<resultCamSearchDetails_t> >();
+
+}
+
diff --git a/test/poi-service/poi-common/poi-marshal-handler.h b/test/poi-service/poi-common/poi-marshal-handler.h
new file mode 100644
index 0000000..a7f4682
--- /dev/null
+++ b/test/poi-service/poi-common/poi-marshal-handler.h
@@ -0,0 +1,158 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-marshal-handler.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef MARSHALHANDLER_H
+#define MARSHALHANDLER_H
+
+#include <QtCore/QObject>
+#include <QtCore/QMetaObject>
+#include <QtCore/QVariant>
+#include <QtDBus/QtDBus>
+#include <QtCore/QByteArray>
+#include <QtCore/QList>
+#include <QtCore/QMap>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QVariant>
+
+#include "poi-common-types.h"
+
+class MarshalHandler
+{
+public:
+ MarshalHandler();
+ static void registerMetaType();
+};
+
+Q_DECLARE_METATYPE(std::string)
+const QDBusArgument &operator>>(const QDBusArgument &argument, std::string &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const std::string &source);
+Q_DECLARE_METATYPE(QList<std::string>)
+Q_DECLARE_METATYPE(QList<ushort>)
+Q_DECLARE_METATYPE(QList<uint>)
+Q_DECLARE_METATYPE(geoCoordinate2D_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,geoCoordinate2D_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const geoCoordinate2D_t &source);
+Q_DECLARE_METATYPE(geoCoordinate3D_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,geoCoordinate3D_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const geoCoordinate3D_t &source);
+Q_DECLARE_METATYPE(poiCategoryAndReason_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryAndReason_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryAndReason_t &source);
+Q_DECLARE_METATYPE(QList<poiCategoryAndReason_t>)
+Q_DECLARE_METATYPE(boundingBox_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,boundingBox_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const boundingBox_t &source);
+Q_DECLARE_METATYPE(results_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,results_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const results_t &source);
+Q_DECLARE_METATYPE(QList<results_t>)
+Q_DECLARE_METATYPE(sessions_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,sessions_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const sessions_t &source);
+Q_DECLARE_METATYPE(QList<sessions_t>)
+Q_DECLARE_METATYPE(poiCategory_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategory_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategory_t &source);
+Q_DECLARE_METATYPE(QList<poiCategory_t>)
+Q_DECLARE_METATYPE(poiCategoryFull_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryFull_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryFull_t &source);
+Q_DECLARE_METATYPE(QList<poiCategoryFull_t>)
+Q_DECLARE_METATYPE(poiSearch_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiSearch_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiSearch_t &source);
+Q_DECLARE_METATYPE(QList<poiSearch_t>)
+Q_DECLARE_METATYPE(version_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,version_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const version_t &source);
+Q_DECLARE_METATYPE(poiAttribute_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiAttribute_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiAttribute_t &source);
+Q_DECLARE_METATYPE(QList<poiAttribute_t>)
+Q_DECLARE_METATYPE(poiAttributeFull_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiAttributeFull_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiAttributeFull_t &source);
+Q_DECLARE_METATYPE(QList<poiAttributeFull_t>)
+Q_DECLARE_METATYPE(resultSearch_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultSearch_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const resultSearch_t &source);
+Q_DECLARE_METATYPE(QList<resultSearch_t>)
+Q_DECLARE_METATYPE(detailsPOISearch_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,detailsPOISearch_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const detailsPOISearch_t &source);
+Q_DECLARE_METATYPE(resultSearchDetails_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultSearchDetails_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const resultSearchDetails_t &source);
+Q_DECLARE_METATYPE(QList<resultSearchDetails_t>)
+Q_DECLARE_METATYPE(categoryDetails_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryDetails_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const categoryDetails_t &source);
+Q_DECLARE_METATYPE(categoryOperator_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryOperator_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const categoryOperator_t &source);
+Q_DECLARE_METATYPE(QList<categoryOperator_t>)
+Q_DECLARE_METATYPE(categoryAttribute_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryAttribute_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const categoryAttribute_t &source);
+Q_DECLARE_METATYPE(QList<categoryAttribute_t>)
+Q_DECLARE_METATYPE(categorySortOption_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,categorySortOption_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const categorySortOption_t &source);
+Q_DECLARE_METATYPE(QList<categorySortOption_t>)
+Q_DECLARE_METATYPE(categoryDetailsList_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,categoryDetailsList_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const categoryDetailsList_t &source);
+Q_DECLARE_METATYPE(QList<categoryDetailsList_t>)
+Q_DECLARE_METATYPE(tupleVariant_t)
+Q_DECLARE_METATYPE(QList<tupleVariant_t>)
+Q_DECLARE_METATYPE(tupleUshort_t)
+Q_DECLARE_METATYPE(resultCamSearch_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultCamSearch_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const resultCamSearch_t &source);
+Q_DECLARE_METATYPE(QList<resultCamSearch_t>)
+Q_DECLARE_METATYPE(resultCamSearchDetails_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,resultCamSearchDetails_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const resultCamSearchDetails_t &source);
+Q_DECLARE_METATYPE(QList<resultCamSearchDetails_t>)
+Q_DECLARE_METATYPE(detailsCamCategory_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,detailsCamCategory_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const detailsCamCategory_t &source);
+Q_DECLARE_METATYPE(poiCategoryCamAdd_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryCamAdd_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryCamAdd_t &source);
+Q_DECLARE_METATYPE(QList<poiCategoryCamAdd_t>)
+Q_DECLARE_METATYPE(poiCategoryCamUpdate_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,poiCategoryCamUpdate_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const poiCategoryCamUpdate_t &source);
+Q_DECLARE_METATYPE(QList<poiCategoryCamUpdate_t>)
+Q_DECLARE_METATYPE(satellitedetails_t)
+const QDBusArgument &operator >> (const QDBusArgument &argument,satellitedetails_t &dest);
+QDBusArgument &operator << (QDBusArgument &argument, const satellitedetails_t &source);
+Q_DECLARE_METATYPE(QList<satellitedetails_t>)
+
+#endif // MARSHALHANDLER_H
diff --git a/test/poi-service/poi-common/poi-resource.qrc b/test/poi-service/poi-common/poi-resource.qrc
new file mode 100644
index 0000000..af7b51d
--- /dev/null
+++ b/test/poi-service/poi-common/poi-resource.qrc
@@ -0,0 +1,12 @@
+<RCC>
+ <qresource prefix="/new/image">
+ <file>magasin.jpg</file>
+ <file>psa.jpg</file>
+ <file>GENIVI_Black_Logo-no_background.png</file>
+ <file>poi-client.png</file>
+ <file>poi-content-access-module.png</file>
+ </qresource>
+ <qresource prefix="/new/text">
+ <file>about.txt</file>
+ </qresource>
+</RCC>
diff --git a/test/poi-service/poi-common/psa.jpg b/test/poi-service/poi-common/psa.jpg
new file mode 100644
index 0000000..ecd2d3f
--- /dev/null
+++ b/test/poi-service/poi-common/psa.jpg
Binary files differ
diff --git a/test/poi-service/poi-contentaccess-module/database.cpp b/test/poi-service/poi-contentaccess-module/database.cpp
new file mode 100644
index 0000000..a36ed7d
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/database.cpp
@@ -0,0 +1,259 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include "database.h"
+#include <stdio.h>
+#include <iostream>
+
+/**
+ * \fn Database(const char* filename)
+ * \brief Constructor.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return void.
+ */
+Database::Database(const char* filename)
+{
+ database = NULL;
+ open(filename); //no check for valid file
+ m_filename = filename;
+}
+
+/**
+ * \fn ~Database()
+ * \brief Destructor.
+ *
+ * \param
+ * \return void.
+ */
+Database::~Database()
+{
+}
+
+/**
+ * \fn open(const char* filename)
+ * \brief Open the database.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return bool. -true if database consistant
+ */
+bool Database::open(const char* filename)
+{
+ if(sqlite3_open(filename, &database) == SQLITE_OK)
+ return true;
+
+ return false;
+}
+
+/**
+ * \fn schema()
+ * \brief Get the scheme of the database.
+ *
+ * \param
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::schema()
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command += " \"";
+ command += ".schema";
+ command += "\"";
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn add(const char* scheme_filename)
+ * \brief Add a scheme to the database.
+ *
+ * \param const char* scheme_filename -filename that contains the scheme
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::add(const char* scheme_filename)
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command = command + " < " + scheme_filename;
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn beginTransaction()
+ * \brief Begin a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::beginTransaction()
+{
+ char* errorMessage;
+ sqlite3_exec(database, "BEGIN TRANSACTION;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn appendTransaction(const char* query)
+ * \brief Append a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return void
+ */
+void Database::appendTransaction(const char* query)
+{
+ sqlite3_exec(database, query, NULL, NULL, NULL);
+}
+
+/**
+ * \fn commitTransaction()
+ * \brief Commit a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::commitTransaction()
+{
+ char* errorMessage;
+ sqlite3_exec(database, "COMMIT;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn query(const char* query)
+ * \brief Query a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return vector<vector<string> > -Result of the query
+ */
+vector<vector<string> > Database::query(const char* query)
+{
+ sqlite3_stmt *statement;
+ vector<vector<string> > results;
+
+ if(sqlite3_prepare_v2(database, query, -1, &statement, 0) == SQLITE_OK)
+ {
+ int cols = sqlite3_column_count(statement);
+ int result = 0;
+ while(true)
+ {
+ result = sqlite3_step(statement);
+
+ if(result == SQLITE_ROW)
+ {
+ vector<string> values;
+ for(int col = 0; col < cols; col++)
+ {
+ std::string val;
+ char * ptr = (char*)sqlite3_column_text(statement, col);
+ if(ptr)
+ {
+ val = ptr;
+ }
+ else val = ""; // this can be commented out since std::string val;
+ values.push_back(val); // now we will never push NULL
+ }
+ results.push_back(values);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sqlite3_finalize(statement);
+ }
+
+ string error = sqlite3_errmsg(database);
+ if(error != "not an error") cout << query << " " << error << endl;
+ return results;
+}
+
+/**
+ * \fn close()
+ * \brief Close the database.
+ *
+ * \param
+ * \return void
+ */
+void Database::close()
+{
+ sqlite3_close(database);
+}
+
+/**
+ * \fn callback(void *NotUsed, int argc, char **argv, char **azColName)
+ * \brief Call back function for database access.
+ *
+ * \param void *NotUsed
+ * \param int argc
+ * \param char **argv
+ * \param char **azColName
+ * \return int
+ */
+int Database::callback(void *NotUsed, int argc, char **argv, char **azColName)
+{
+ NotUsed=0;
+ int i;
+ for(i=0; i<argc; i++){
+ printf("%s = %s\n", azColName[i], argv[i] ? argv[i]: "NULL");
+ }
+ printf("\n");
+ return 0;
+}
+
+
diff --git a/test/poi-service/poi-contentaccess-module/database.h b/test/poi-service/poi-contentaccess-module/database.h
new file mode 100644
index 0000000..1a7c89c
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/database.h
@@ -0,0 +1,58 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __DATABASE_H__
+#define __DATABASE_H__
+
+#include <string>
+#include <vector>
+#include <sqlite3.h>
+
+using namespace std;
+
+class Database
+{
+ public:
+ Database(const char* filename);
+ ~Database();
+
+ bool open(const char* filename);
+ bool schema();
+ bool add(const char* scheme_filename);
+ vector<vector<string> > query(const char* query);
+ void close();
+ void beginTransaction();
+ void appendTransaction(const char* query);
+ void commitTransaction();
+
+ private:
+ static int callback(void *NotUsed, int argc, char **argv, char **azColName);
+ sqlite3 *database;
+ std::string m_filename;
+};
+
+#endif
diff --git a/test/poi-service/poi-contentaccess-module/main.cpp b/test/poi-service/poi-contentaccess-module/main.cpp
new file mode 100644
index 0000000..fa5efa2
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/main.cpp
@@ -0,0 +1,947 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file main.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <iostream>
+#include <cmath>
+#include <typeinfo>
+#include <getopt.h>
+
+#include "poi-contentaccess-module-class.h"
+
+#include <QtGui/QApplication>
+#include <QTranslator>
+#include "mainwindow.h"
+
+#include <QSettings>
+
+static const char* contentAccessModule_SERVICE_NAME = "org.genivi.poiservice.POIContentAccessModule";
+static const char* contentAccessModule_OBJECT_PATH = "/org/genivi/poiservice/POIContentAccessModule";
+static const char* poiContentAccess_SERVICE_NAME = "org.genivi.poiservice.POIContentAccess";
+static const char* poiContentAccess_OBJECT_PATH = "/org/genivi/poiservice/POIContentAccess";
+
+// SQL requests
+static const char* SQL_REQUEST_GET_AVAILABLE_CATEGORIES = "SELECT Id,name FROM poicategory WHERE Id IN (SELECT poicategory_Id FROM belongsto GROUP BY poicategory_Id);";
+static const char* SQL_REQUEST_GET_VALIDATE_CATEGORIES = "SELECT Id,name FROM poicategory;";
+static const char* SQL_REQUEST_GET_CATEGORY_ATTRIBUTES = "SELECT Id,name FROM poiattribute WHERE Id IN (SELECT poiattribute_Id FROM hasattribute WHERE poicategory_Id IS ";
+static const char* SQL_REQUEST_GET_AVAILABLE_AREA = "SELECT leftlongitude,bottomlatitude,rightlongitude,toplatitude FROM availablearea;";
+static const char* SQL_REQUEST_GET_PARENT_CATEGORIES = "SELECT parentId FROM poicategorykinship WHERE childId IS ";
+static const char* SQL_REQUEST_GET_CHILD_CATEGORIES = "SELECT childId FROM poicategorykinship WHERE parentId IS ";
+static const char* SQL_REQUEST_GET_CATEGORY_ICONS = "SELECT url,format FROM iconset WHERE Id IS (SELECT iconset_Id FROM isdisplayedas WHERE poicategory_Id IS ";
+
+// DBus instances
+static DBus::Glib::BusDispatcher *dispatcher;
+static DBus::Connection *dbusConnection;
+static contentAccessModuleServer *servercontentAccessModule;
+static poiContentAccess *clientpoiContentAccess;
+
+
+// class poiContentAccess
+
+poiContentAccess::poiContentAccess(DBus::Connection &connection)
+ : DBus::ObjectProxy(connection,poiContentAccess_OBJECT_PATH,poiContentAccess_SERVICE_NAME)
+ {
+
+ }
+
+poiContentAccess::~poiContentAccess()
+ {
+
+ }
+
+// class contentAccessModuleServer
+
+contentAccessModuleServer::contentAccessModuleServer(DBus::Connection &connection, const char* poiDatabaseFileName)
+ : DBus::ObjectAdaptor(connection, contentAccessModule_OBJECT_PATH)
+ {
+ std::string sqlQuery; //SQL request on database
+ std::ostringstream strStream; //temporary stream used for transformation into string
+ vector<vector<string> > query_result, additionnal_query_result;
+ vector<string> query_line, additionnal_query_line;
+ size_t index,sub_index;
+ category_attribute_t attribute;
+ uint16_t value;
+ uint16_t parent,child;
+
+ //version is hard coded
+ DBus_version::version_t version;
+ version.major = 1;
+ version.minor = 0;
+ version.micro = 0;
+ version.date = "19-12-2012";
+ m_version.set(version);
+
+ //status
+ m_poiSearchHandle = INVALID_HANDLE;
+ m_camId = INVALID_HANDLE;
+ m_searchStatus = GENIVI_POISERVICE_NOT_STARTED;
+
+ //database
+ mp_database = new Database(poiDatabaseFileName);
+
+ m_availableCategories = 0;
+
+ // all the pois and the related stuff are included into the database at the startup
+ // so we can update some tables into the constructor
+
+ // retrieve the available categories (the ones that have at least one record)
+ query_result = mp_database->query(SQL_REQUEST_GET_AVAILABLE_CATEGORIES);
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ { // Id,name
+ m_availableCategories = query_result.size(); //store the number of categories
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ // read the result of the query and store it
+ query_line = query_result.at(index);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ m_availableCategoryTable[index].id = value;
+
+ // retrieve the associated icons (for the moment, just one)
+ sqlQuery = SQL_REQUEST_GET_CATEGORY_ICONS;
+ strStream.str("");
+ strStream << value;
+ sqlQuery += strStream.str();
+ sqlQuery += ");";
+ additionnal_query_result = mp_database->query(sqlQuery.c_str());
+ if (additionnal_query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ additionnal_query_line = additionnal_query_result.at(0);
+ m_availableCategoryTable[index].icon = additionnal_query_line[0] + '.' + additionnal_query_line[1];
+ }
+
+ m_availableCategoryTable[index].name = query_line[1];
+
+ // retrieve the associated attributes
+ sqlQuery = SQL_REQUEST_GET_CATEGORY_ATTRIBUTES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ");";
+ additionnal_query_result = mp_database->query(sqlQuery.c_str());
+ if (additionnal_query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ for (sub_index = 0; sub_index <additionnal_query_result.size(); sub_index++)
+ {
+ additionnal_query_line = additionnal_query_result.at(sub_index);
+ fromString<ushort>(attribute.id,additionnal_query_line[0], std::dec);
+ attribute.name = additionnal_query_line[1];
+ attribute.isSearched = false;
+ m_availableCategoryTable[index].attributeList.push_back(attribute);
+ }
+ }
+ m_availableCategoryTable[index].top_level = true; //this POC only manages predefined categories
+ m_availableCategoryTable[index].isSearch = false; //for the moment no categories selected
+ }
+ }
+
+ //retrieve the parents of the categories
+ //root category is the only one that is its own parent
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ sqlQuery = SQL_REQUEST_GET_PARENT_CATEGORIES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ";";
+ query_result = mp_database->query(sqlQuery.c_str());
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ for (parent=0;parent<query_result.size();parent++)
+ {
+ query_line = query_result.at(parent);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ if (index == value)
+ m_rootCategory = index; //child is parent, so it's the root
+ m_availableCategoryTable[index].parentList.push_back(value);
+ }
+ }
+ }
+
+ //retrieve the children of the categories
+ for (index = 0; index < m_availableCategories; index++)
+ {
+ sqlQuery = SQL_REQUEST_GET_CHILD_CATEGORIES;
+ strStream.str("");
+ strStream << m_availableCategoryTable[index].id;
+ sqlQuery += strStream.str();
+ sqlQuery += ";";
+ query_result = mp_database->query(sqlQuery.c_str());
+ if (query_result.empty())
+ {
+ //no child
+ }
+ else
+ {
+ for (child=0;child<query_result.size();child++)
+ {
+ query_line = query_result.at(child);
+ fromString<uint16_t>(value,query_line[0], std::dec);
+ m_availableCategoryTable[index].childList.push_back(value);
+ }
+ }
+ }
+
+ //retrieve the available area into the database
+ query_result = mp_database->query(SQL_REQUEST_GET_AVAILABLE_AREA);
+ if (query_result.empty())
+ {
+ onError(); //database is not well populated
+ //todo something with table ?
+ }
+ else
+ {
+ // read the result of the query, for the moment only the first area !
+ query_line = query_result.at(0);
+ fromString<double>(m_leftBottomLocation.latitude,query_line[0], std::dec);
+ fromString<double>(m_leftBottomLocation.longitude,query_line[1], std::dec);
+ fromString<double>(m_rightTopLocation.latitude,query_line[2], std::dec);
+ fromString<double>(m_rightTopLocation.longitude,query_line[3], std::dec);
+ }
+ m_centerLocation.latitude = 48.85792; //by default center of Paris
+ m_centerLocation.longitude = 2.3383145;
+ m_centerLocation.altitude = 0;
+
+ }
+
+contentAccessModuleServer::~contentAccessModuleServer()
+ {
+ delete mp_database;
+ }
+
+DBus_version::DBus_version_t contentAccessModuleServer::GetVersion()
+ {
+ return(m_version.getDBus());
+ }
+
+void contentAccessModuleServer::SetLanguage(const std::string& languageCode, const std::string& countryCode)
+ {
+ m_languageCode = languageCode;
+ m_countryCode = countryCode;
+ mp_HMI->on_SetLanguage(languageCode,countryCode);
+ }
+
+void contentAccessModuleServer::PoiSearchStarted(const uint8_t& poiSearchHandle, const uint16_t& maxSize, const DBus_geoCoordinate3D::DBus_geoCoordinate3D_t& location, const std::vector< DBus_categoryRadius::DBus_categoryRadius_t >& poiCategories, const std::vector< DBus_attributeDetails::DBus_attributeDetails_t >& poiAttributes, const std::string& inputString, const uint16_t& sortOption)
+ {
+ uint16_t index,sub_index,category_index;
+ bool isCategoryFound, isAttributeFound;
+ DBus_attributeDetails attribDet;
+ DBus_attributeDetails::attributeDetails_t attribDetails;
+ DBus_geoCoordinate3D geoCoord;
+ DBus_geoCoordinate3D::geoCoordinate3D_t geoCoordinate;
+ DBus_categoryRadius catRad;
+ DBus_categoryRadius::categoryRadius_t catRadius;
+
+ //todo: limit the search to maxSize, manage sortOption
+
+ if (m_poiSearchHandle != INVALID_HANDLE)
+ // new search launched before end of the last one
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ //preliminary reset of flags for categories
+ for (index=0;index<m_availableCategories;index++)
+ {
+ m_availableCategoryTable[index].isSearch = false;
+ //reset flags for all the attributes of the category
+ for (category_index=0;category_index<((m_availableCategoryTable[index]).attributeList).size();category_index++)
+ (m_availableCategoryTable[index]).attributeList.at(category_index).isSearched =false;
+ }
+
+ //now scan the flags to set and set the flag into the m_availableCategoryTable
+ for (index=0;index<poiCategories.size();index++)
+ {
+ catRad.setDBus(poiCategories.at(index));
+ catRadius = catRad.get();
+ sub_index = 0;
+ isCategoryFound = false;
+ do
+ {
+ if (catRadius.id == (m_availableCategoryTable[sub_index].alias_id))
+ { //the content access server is using alias !
+ isCategoryFound = true;
+ m_availableCategoryTable[sub_index].isSearch = true;
+ m_availableCategoryTable[sub_index].radius = (catRadius.radius)*10; //get the radius (unit is 10 m)
+ m_availableCategoryTable[sub_index].angle = calculateAngle(m_availableCategoryTable[sub_index].radius);
+ }
+ else
+ ++sub_index;
+ } while((isCategoryFound == false) && (sub_index<m_availableCategories));
+ }
+
+ //reset flags for all the attributes of the categories into the database
+ for (index=0;index<m_availableCategories;index++)
+ {
+ for (category_index=0;category_index<((m_availableCategoryTable[index]).attributeList).size();category_index++)
+ (m_availableCategoryTable[index]).attributeList.at(category_index).isSearched =false;
+ }
+
+ //now scan the flags to be set
+ for (index=0;index<poiAttributes.size();index++)
+ {
+ sub_index = 0;
+ isAttributeFound = false;
+ attribDet.setDBus(poiAttributes.at(index));
+ attribDetails = attribDet.get();
+ if ( isCategoryAvailable(attribDetails.poiCategory,&category_index) == true)
+ { //category found into the database!
+ if (m_availableCategoryTable[category_index].isSearch)
+ { //category selected for the search
+ for (sub_index=0;sub_index<(m_availableCategoryTable[category_index].attributeList.size());sub_index++)
+ { //check attribute by name
+ if ((m_availableCategoryTable[category_index].attributeList.at(sub_index)).name == attribDetails.attribute.name)
+ (m_availableCategoryTable[category_index].attributeList.at(sub_index)).isSearched =true;
+ }
+ }
+ }
+ }
+
+ m_poiSearchHandle = poiSearchHandle;
+ geoCoord.setDBus(location);
+ geoCoordinate = geoCoord.get();
+ m_centerLocation.latitude = geoCoordinate.latitude;
+ m_centerLocation.longitude = geoCoordinate.longitude;
+ m_centerLocation.altitude = geoCoordinate.altitude;
+ m_searchStatus = GENIVI_POISERVICE_SEARCHING;
+ //sortOption is not used
+ //maxSize is not used
+ m_totalSize = searchAroundALocation(m_centerLocation,&inputString);
+ m_searchStatus = GENIVI_POISERVICE_FINISHED;
+ }
+ }
+
+void contentAccessModuleServer::PoiSearchCanceled(const uint8_t& poiSearchHandle)
+ {
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // try to cancel an unavailable handle
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ m_poiSearchHandle = INVALID_HANDLE;
+ m_totalSize = 0;
+ m_poiTable.clear();
+ }
+ }
+
+void contentAccessModuleServer::ResultListRequested(const uint8_t& camId, const uint8_t& poiSearchHandle, const std::vector< std::string >& attributes, uint16_t& statusValue, uint16_t& resultListSize, std::vector< DBus_poiCAMDetails::DBus_poiCAMDetails_t >& resultList)
+ {
+
+ //this method is supposed to check the camId, but into the POC, it's the HMI that declares the CAM (for the moment)
+
+ //todo: manage attributes
+ if ((m_poiSearchHandle == INVALID_HANDLE) || (poiSearchHandle != m_poiSearchHandle))
+ // to do send an error message
+ sendDBusError("org.genivi.poiprovider.poiSearch.Error.HandleNotAvailable"); //to be discussed !
+ else
+ {
+ resultListSize = m_totalSize;
+ resultList.insert(resultList.end(),m_poiTable.begin(),m_poiTable.end());
+ statusValue = m_searchStatus;
+ m_poiSearchHandle = INVALID_HANDLE; //search is considered to be finished ?
+ }
+ }
+
+std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > contentAccessModuleServer::PoiDetailsRequested(const std::vector< uint32_t >& source_id)
+ {
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > return_value;
+ DBus_searchResultDetails searchDet;
+ DBus_searchResultDetails::searchResultDetails_t searchDetails;
+ uint16_t index,indexPOIList;
+ bool isPOIFound;
+
+ return_value.clear();
+ for (index=0;index<source_id.size();index++)
+ { //scan the list of poi to detail
+ isPOIFound = false;
+ //scan the table
+ indexPOIList=0;
+ while((isPOIFound == false) && (indexPOIList<m_poiDetailsTable.size()))
+ {
+ searchDet.setDBus(m_poiDetailsTable.at(indexPOIList));
+ searchDetails = searchDet.get();
+ if (searchDetails.details.id == source_id.at(index))
+ {
+ isPOIFound = true;
+ return_value.push_back(m_poiDetailsTable.at(indexPOIList));
+ }
+ else
+ ++indexPOIList;
+ }
+ }
+ return (return_value);
+ }
+
+// Specific methods
+
+DBus::Variant contentAccessModuleServer::createVariantString(std::string str)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_string(str.c_str());
+ return var;
+}
+
+DBus::Variant contentAccessModuleServer::createVariantUint16(uint16_t value)
+{
+ DBus::Variant var;
+ DBus::MessageIter iter = var.writer();
+ iter.append_uint16(value);
+ return var;
+}
+
+void contentAccessModuleServer::connectToHMI(MainWindow *w)
+{
+ mp_HMI = w;
+}
+
+void contentAccessModuleServer::connectCAM(uint8_t camId)
+{
+ m_camId = camId;
+}
+
+void contentAccessModuleServer::disconnectCAM()
+{
+ m_camId = INVALID_HANDLE;
+}
+
+std::vector<DBus_CAMcategory::DBus_CAMcategory_t> contentAccessModuleServer::getCategories()
+{
+ std::vector< DBus_CAMcategory::DBus_CAMcategory_t > return_value;
+ DBus_CAMcategory CAMcat;
+ DBus_CAMcategory::CAMcategory_t CAMCategory;
+ DBus_categoryAttribute::categoryAttribute_t categoryAttribute;
+ DBus_categoryOperator::categoryOperator_t categoryOperator;
+ size_t index,sub_index;
+
+ for (index=0;index<m_availableCategories;index++)
+ {
+ CAMCategory.details.name = m_availableCategoryTable[index].name;
+ for (sub_index=0;sub_index<m_availableCategoryTable[index].parentList.size();sub_index++)
+ {
+ CAMCategory.details.parents_id.push_back(m_availableCategoryTable[index].parentList.at(sub_index));
+ }
+ CAMCategory.details.media = "";
+ CAMCategory.details.icons = m_availableCategoryTable[index].icon;
+ CAMCategory.details.short_desc = "";
+ //scan the attributes
+ CAMCategory.attributes.clear();
+ for (sub_index=0;sub_index<m_availableCategoryTable[index].attributeList.size();sub_index++)
+ {
+ categoryAttribute.name = (m_availableCategoryTable[index].attributeList.at(sub_index)).name;
+ categoryAttribute.type = 0;
+ categoryAttribute.oper.clear();
+ categoryOperator.id = GENIVI_POISERVICE_EQUAL;
+ categoryOperator.name = "EQUAL";
+ categoryAttribute.oper.push_back(categoryOperator);
+ CAMCategory.attributes.push_back(categoryAttribute);
+ }
+
+ CAMcat.set(CAMCategory);
+ return_value.push_back(CAMcat.getDBus());
+ }
+
+ return(return_value);
+}
+
+void contentAccessModuleServer::setCategoriesID(std::vector<uint16_t> categoryIDList)
+{
+ size_t index;
+ for (index=0;index<m_availableCategories;index++)
+ { //consider the given ID are in the same order as the registered ones
+ m_availableCategoryTable[index].alias_id = categoryIDList.at(index);
+ }
+}
+
+std::string contentAccessModuleServer::getCAMName()
+{
+ std::string str = contentAccessModule_SERVICE_NAME;
+ return(str);
+}
+
+uint8_t contentAccessModuleServer::getCAMId()
+{
+ return(m_camId);
+}
+
+uint16_t contentAccessModuleServer::searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString)
+ {
+ uint16_t index;
+ uint16_t total_size;
+ DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,right_top_location;
+
+ total_size = 0;
+ m_poiTable.clear(); //clean the table of poi
+
+ for (index=0;index<m_availableCategories;index++)
+ {
+ if (m_availableCategoryTable[index].isSearch)
+ {
+ left_bottom_location.latitude = location.latitude - m_availableCategoryTable[index].angle;
+ left_bottom_location.longitude = location.longitude - m_availableCategoryTable[index].angle;
+ right_top_location.latitude = location.latitude + m_availableCategoryTable[index].angle;
+ right_top_location.longitude = location.longitude + m_availableCategoryTable[index].angle;
+ total_size += searchPOIRequest(index, *inputString,left_bottom_location,right_top_location);
+ }
+ }
+
+ return(total_size);
+ }
+
+uint16_t contentAccessModuleServer::searchPOIRequest(uint16_t categoryIndex, std::string search_string, DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,DBus_geoCoordinate3D::geoCoordinate3D_t right_top_location)
+ {
+ std::string sqlQuery; //SQL request on database
+ vector<vector<string> > sqlQueryResult; //result of the query on database
+ vector<string> sqlQueryLine;
+ std::ostringstream strStream; //temporary stream used for transformation into string
+ size_t index,sub_index,attribute_index;
+ DBus_poiCAMDetails poiCAMDet;
+ DBus_poiCAMDetails::poiCAMDetails_t poi; //source_id, name, category, location, distance, attributes
+ DBus_poiAttribute::poiAttribute_t poiAttrib;
+ DBus_searchResultDetails poiDet;
+ DBus_searchResultDetails::searchResultDetails_t poiDetails; //details(unique id, name, lat, lon, alt), categories, attributes(name, type, value)
+ std::string name;
+
+ name = m_availableCategoryTable[categoryIndex].name;
+
+ sqlQuery = "SELECT name,segment,latitude,longitude,altitude";
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[categoryIndex].attributeList.size();attribute_index++)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).isSearched == true)
+ {
+ sqlQuery += ",";
+ sqlQuery += (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ }
+
+ }
+
+ sqlQuery += " FROM poi WHERE (Id IN (SELECT poi_Id FROM belongsto,poicategory WHERE (belongsto.poicategory_Id = poicategory.Id) AND (poicategory.name = '";
+ sqlQuery += name;
+ sqlQuery += "'))) AND ((latitude > ";
+ strStream.str(""); //to clean before !
+ strStream << left_bottom_location.latitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ") AND (latitude < ";
+ strStream.str(""); //to clean before !
+ strStream << right_top_location.latitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ")) AND ((longitude > ";
+ strStream.str(""); //to clean before !
+ strStream << left_bottom_location.longitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ") AND (longitude < ";
+ strStream.str(""); //to clean before !
+ strStream << right_top_location.longitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ")) AND (name LIKE '%";
+ sqlQuery += search_string;
+ sqlQuery += "%');";
+ sqlQueryResult = mp_database->query(sqlQuery.c_str());
+
+ //populate the tables of poi
+ poi.category = categoryIndex; //category
+ poiDetails.categories.push_back(m_availableCategoryTable[categoryIndex].alias_id); //categories for the table of details
+
+ for (index=0;index<sqlQueryResult.size();index++)
+ {
+ sqlQueryLine = sqlQueryResult.at(index);
+ fromString<uint32_t>(poi.source_id,sqlQueryLine[1], std::dec); //source_id
+ fromString<uint32_t>(poiDetails.details.id,sqlQueryLine[1], std::dec); //source_id for the table of details
+ poi.name = sqlQueryLine[0]; //name
+ poiDetails.details.name = sqlQueryLine[0]; //name for the table of details
+ fromString<double>(poi.location.latitude,sqlQueryLine[2], std::dec); //location lat
+ fromString<double>(poi.location.longitude,sqlQueryLine[3], std::dec); //location lon
+ fromString<int>(poi.location.altitude,sqlQueryLine[4], std::dec); //location alt
+
+ fromString<double>(poiDetails.details.latitude,sqlQueryLine[2], std::dec); //location lat for the table of details
+ fromString<double>(poiDetails.details.longitude,sqlQueryLine[3], std::dec); //location lon for the table of details
+ fromString<int>(poiDetails.details.altitude,sqlQueryLine[4], std::dec); //location alt for the table of details
+
+ sub_index = 5; //next index to scan into the query line
+ for (attribute_index=0;attribute_index<m_availableCategoryTable[categoryIndex].attributeList.size();attribute_index++)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).isSearched == true)
+ {
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_SOURCE)
+ {
+ poiAttrib.name = (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ poiAttrib.type = GENIVI_POISERVICE_STRING;
+ poiAttrib.value = sqlQueryLine[sub_index];
+ poi.attributes.push_back(poiAttrib);
+ poiDetails.attributes.push_back(poiAttrib); //for the table of details
+ }
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_WEBSITE)
+ {
+ poiAttrib.name = (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ poiAttrib.type = GENIVI_POISERVICE_STRING;
+ poiAttrib.value = sqlQueryLine[sub_index];
+ poi.attributes.push_back(poiAttrib);
+ poiDetails.attributes.push_back(poiAttrib); //for the table of details
+ }
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_PHONE)
+ {
+ poiAttrib.name = (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ poiAttrib.type = GENIVI_POISERVICE_STRING;
+ poiAttrib.value = sqlQueryLine[sub_index];
+ poi.attributes.push_back(poiAttrib);
+ poiDetails.attributes.push_back(poiAttrib); //for the table of details
+ }
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_STARS)
+ {
+ poiAttrib.name = (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ poiAttrib.type = GENIVI_POISERVICE_INTEGER;
+ poiAttrib.value = sqlQueryLine[sub_index];
+ poi.attributes.push_back(poiAttrib);
+ poiDetails.attributes.push_back(poiAttrib); //for the table of details
+ }
+ else
+ if ((m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).id == ATTRIBUTE_OPENINGHOURS)
+ {
+ poiAttrib.name = (m_availableCategoryTable[categoryIndex].attributeList.at(attribute_index)).name;
+ poiAttrib.type = GENIVI_POISERVICE_STRING;
+ poiAttrib.value = sqlQueryLine[sub_index];
+ poi.attributes.push_back(poiAttrib);
+ poiDetails.attributes.push_back(poiAttrib); //for the table of details
+ }
+ sub_index++;
+ }
+
+ }
+
+ //calculate distance from the center location
+ poi.distance = calculateDistance(m_centerLocation,poi.location);
+ poiCAMDet.set(poi);
+ m_poiTable.push_back(poiCAMDet.getDBus());
+ poiDet.set(poiDetails);
+ m_poiDetailsTable.push_back(poiDet.getDBus());
+ }
+
+ return(sqlQueryResult.size());
+ }
+
+void contentAccessModuleServer::sendDBusError(const char* message)
+ {
+ throw DBus::ErrorFailed(message);
+ }
+
+void contentAccessModuleServer::onError()
+{
+}
+
+bool contentAccessModuleServer::isCategoryAvailable(uint16_t id, uint16_t *category_id)
+{
+ bool isFound = false;
+ uint16_t index = 0;
+ do
+ {
+ if (m_availableCategoryTable[index].alias_id == id)
+ {
+ *category_id = index;
+ isFound = true;
+ }
+ else
+ ++index;
+ } while ((isFound==false) && (index < m_availableCategories));
+
+ return(isFound);
+}
+
+uint32_t contentAccessModuleServer::calculateDistance(const DBus_geoCoordinate3D::geoCoordinate3D_t origin, const DBus_geoCoordinate3D::geoCoordinate3D_t target)
+ {
+ //this piece of software is based on an haversine formula given by:
+ // - Doctors Rick and Peterson, The Math Forum
+ // http://mathforum.org/dr.math/
+ // haversine of angle A is (1-cos(A))/2 that is equal to sin^2(A/2)
+
+ //earth is considered to be a perfect spĥere, in order to simplify calculation
+ const double PI = 4.0*atan(1.0);
+ const double earth=6378137; //IUGG value for the equatorial radius of the Earth in m
+ DBus_geoCoordinate3D::geoCoordinate3D_t pointA, pointB;
+ double buffer;
+
+ pointA.latitude = origin.latitude * (PI/180);
+ pointA.longitude = origin.longitude * (PI/180);
+ pointB.latitude = target.latitude * (PI/180);
+ pointB.longitude = target.longitude * (PI/180);
+
+ buffer= pow(sin((pointA.latitude-pointB.latitude)/2.0),2.0)+cos(pointA.latitude)*cos(pointB.latitude)*pow(sin((pointA.longitude-pointB.longitude)/2),2);
+ buffer = 2*atan2(sqrt(buffer),sqrt(1.0-buffer));
+ buffer=earth*buffer;
+ return ((uint32_t) buffer); //return distance in meters
+ }
+
+double contentAccessModuleServer::calculateAngle(const uint32_t radius)
+ {
+ //N is the point on the sphere for the origin
+ //M is a point of the sphere at the distance radius (NM = radius)
+ //O is the center of the earth
+ //ON=OM so the triangle is isosceles
+ //alpha is the angle ON,OM
+ //beta is the angle NM,NO
+ //OM*sin(alpha)=NM*sin(beta)
+ //alpha+beta+beta=PI (because of isoceles)
+ //beta=(PI-alpha)/2
+ //sin(beta) = cos(alpha/2)
+ //sin(alpha)=2*sin(alpha/2)*cos(alpha/2)
+ //alpha=2*arcsin(NM/(2*OM))
+
+ //earth is considered to be a perfect spĥere, in order to simplify calculation
+ const double PI = 4.0*atan(1.0);
+ const double earth=6378137; //IUGG value for the equatorial radius of the Earth in m
+ double angle;
+ angle=2*asin(radius/(2*earth));
+ angle = (angle*180)/PI; //in degrees
+ return(angle);
+ }
+
+const char* program_name; //file to sink outputs
+
+/**
+ * \fn is_readable (const std::string & file)
+ * \brief Check if file can be opened.
+ *
+ * \param const std::string & file -name of the file
+ * \return true if file readable.
+ */
+bool is_readable( const std::string & file )
+{
+ std::ifstream fi( file.c_str() );
+ return !fi.fail();
+}
+
+/**
+ * \fn print_usage (FILE* stream, int exit_code)
+ * \brief Display the available options.
+ *
+ * \param const FILE* stream -name of stream to use
+ * \param int exit_code -exit code
+ * \return void.
+ */
+void print_usage (FILE* stream, int exit_code)
+{
+ fprintf (stream, "Use: %s options [database]\n",program_name);
+ fprintf (stream,
+ " -h --help Display this message.\n"
+ " -f --file database Open the database.\n"
+ " -i --internationalisation database language(en,jp) Open the database, international version.\n");
+ exit (exit_code);
+}
+
+/**
+ * \fn int main (int argc , char** argv)
+ * \brief POI Server which implements the components of POI Service (search, contentaccess and content access module).
+ *
+ * \param int argc
+ * \param char** argv
+ * \return EXIT_SUCCESS, EXIT_FAILURE.
+ */
+
+
+int main(int argc , char** argv )
+{
+ GMainLoop * mainloop ;
+
+ // Set the global C and C++ locale to the user-configured locale,
+ // so we can use std::cout with UTF-8, via Glib::ustring, without exceptions.
+ std::locale::global(std::locale(""));
+
+ //index used for argument analysis
+ int next_option;
+
+ /* Valid letters for short options. */
+ const char* const short_options = "hfi:";
+ /* Valid string for long options. */
+ const struct option long_options[] = {
+ { "help", 0, NULL, 'h' },
+ { "file", 1, NULL, 'f' },
+ { "internationalisation", 2, NULL, 'i' },
+ { NULL, 0, NULL, 0 } /* Always at the end of the table. */
+ };
+ char* database_filename = NULL; //database filename passed as first argument
+
+
+ program_name = argv[0];
+
+ do {
+ next_option = getopt_long (argc, argv, short_options,
+ long_options, NULL);
+ switch (next_option)
+ {
+ case 'h': /* -h --help */
+ print_usage (stdout, 0);
+ break;
+ case 'f': /* -f --file database */
+ database_filename = argv[2];
+ if (!is_readable(database_filename))
+ print_usage (stderr, 1);
+ else
+ {
+ QApplication a(argc, argv);
+ QTranslator translator;
+ translator.load("POIPOC_en.ts","../POIPOCCommon/"); // english by default
+ a.installTranslator(&translator);
+ MainWindow mainWindow;
+
+ // creating the dispatcher
+ dispatcher = new DBus::Glib::BusDispatcher();
+ DBus::default_dispatcher = dispatcher;
+ dispatcher->attach(NULL);
+
+ // create a connection on the session bus
+ dbusConnection = new DBus::Connection(DBus::Connection::SessionBus());
+ dbusConnection->setup(dispatcher);
+
+ // create the server for contentAccessModule
+ dbusConnection->request_name(contentAccessModule_SERVICE_NAME);
+ servercontentAccessModule=new contentAccessModuleServer(*dbusConnection,database_filename);
+
+ // connect it to the HMI panel
+ mainWindow.ConnectTocontentAccessModuleServer(servercontentAccessModule);
+
+ // connect the HMI panel to it
+ servercontentAccessModule->connectToHMI(&mainWindow);
+
+ // create a client for poiContentAccess
+ clientpoiContentAccess = new poiContentAccess(*dbusConnection);
+
+ // connect it to the HMI panel
+ mainWindow.ConnectTopoiContentAccessClient(clientpoiContentAccess);
+
+ // Create a new GMainLoop with default context and initial state of "not running "
+ mainloop = g_main_loop_new (g_main_context_default() , FALSE );
+
+ // loop listening
+ mainWindow.InitUi();
+ mainWindow.show();
+
+ return a.exec();
+
+ // clean memory
+ delete servercontentAccessModule;
+ delete dbusConnection;
+ delete dispatcher;
+ }
+ break;
+ case 'i': /* -i --internationalisation database language */
+ database_filename = argv[2];
+ if (!is_readable(database_filename))
+ print_usage (stderr, 1);
+ else
+ {
+ QApplication a(argc, argv);
+ QTranslator translator;
+ QString language(argv[3]);
+ if (translator.load("poi-contentaccess-module_"+ language,"../poi-common/"))
+ {
+ a.installTranslator(&translator);
+ MainWindow mainWindow;
+
+ // creating the dispatcher
+ dispatcher = new DBus::Glib::BusDispatcher();
+ DBus::default_dispatcher = dispatcher;
+ dispatcher->attach(NULL);
+
+ // create a connection on the session bus
+ dbusConnection = new DBus::Connection(DBus::Connection::SessionBus());
+ dbusConnection->setup(dispatcher);
+
+ // create the server for contentAccessModule
+ dbusConnection->request_name(contentAccessModule_SERVICE_NAME);
+ servercontentAccessModule=new contentAccessModuleServer(*dbusConnection,database_filename);
+
+ // connect it to the HMI panel
+ mainWindow.ConnectTocontentAccessModuleServer(servercontentAccessModule);
+
+ // connect the HMI panel to it
+ servercontentAccessModule->connectToHMI(&mainWindow);
+
+ // create a client for poiContentAccess
+ clientpoiContentAccess = new poiContentAccess(*dbusConnection);
+
+ // connect it to the HMI panel
+ mainWindow.ConnectTopoiContentAccessClient(clientpoiContentAccess);
+
+ // Create a new GMainLoop with default context and initial state of "not running "
+ mainloop = g_main_loop_new (g_main_context_default() , FALSE );
+
+ // loop listening
+ mainWindow.InitUi();
+ mainWindow.show();
+
+ int ret = a.exec();
+
+ // clean memory
+ delete servercontentAccessModule;
+ delete dbusConnection;
+ delete dispatcher;
+ }
+ else
+ {
+ print_usage (stderr, 1);
+ }
+ }
+ break;
+ case '?': /* Invalid option. */
+ print_usage (stderr, 1);
+ case -1: /* End of options. */
+ break;
+ default: /* Error */
+ print_usage (stderr, 1);
+ }
+ }
+ while (next_option != -1);
+
+ return EXIT_SUCCESS;
+}
+
diff --git a/test/poi-service/poi-contentaccess-module/mainwindow.cpp b/test/poi-service/poi-contentaccess-module/mainwindow.cpp
new file mode 100644
index 0000000..784db11
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/mainwindow.cpp
@@ -0,0 +1,168 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file mainwindow.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <iostream>
+#include <cmath>
+#include <typeinfo>
+#include <getopt.h>
+
+#include "poi-contentaccess-module-class.h"
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+
+MainWindow::MainWindow(QWidget *parent) :
+ QMainWindow(parent),
+ ui(new Ui::MainWindow)
+{
+
+ ui->setupUi(this);
+
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::ConnectTocontentAccessModuleServer(contentAccessModuleServer *server)
+{
+ mp_contentAccessModule = server; //link to the instance of contentAccessModule
+}
+
+void MainWindow::ConnectTopoiContentAccessClient(poiContentAccess *client)
+{
+ mp_poiContentAccess = client; //link to the instance of poiContentAccess
+}
+
+void MainWindow::InitUi()
+{
+ DBus_version vers;
+ DBus_version::version_t version;
+
+ // version
+ vers.setDBus(mp_contentAccessModule->GetVersion());
+ version = vers.get();
+ ui->VersionCAM->setText("CAM: " + QString::number(version.major) + "." + QString::number(version.minor) + "." + QString::number(version.micro) + " " + QString::fromStdString(version.date));
+
+ //no cam id, no category added and registered
+ ui->camID->setText(noValue);
+ ui->poiCategoryID->setText(noValue);
+ ui->poiCategoryName->setText(noValue);
+
+ //no language set
+ ui->languageCode->setText(noValue);
+ ui->countryCode->setText(noValue);
+
+ //internationalisation
+ ui->registerCAM->setText(tr("REGISTER"));
+ ui->unregisterCAM->setText(tr("UNREGISTER"));
+ ui->addCAMCategory->setText(tr("ADDandREG"));
+ ui->removeCAMCategory->setText(tr("REMOVE"));
+
+ initSettings();
+}
+
+void MainWindow::initSettings()
+{
+ m_categoriesID.clear();
+}
+
+void MainWindow::on_SetLanguage(const std::string languageCode, const std::string countryCode)
+{
+ ui->languageCode->setText(QString::fromStdString(languageCode));
+ ui->countryCode->setText(QString::fromStdString(countryCode));
+}
+
+
+void MainWindow::on_registerCAM_clicked()
+{
+ uint8_t camId;
+ QString str;
+
+ camId = mp_poiContentAccess->RegisterContentAccessModule(mp_contentAccessModule->getCAMName());
+ mp_contentAccessModule->connectCAM(camId);
+ str = QString(tr("NUMBER")) + QString(": ") + QString::number(camId);
+ ui->camID->setText(str);
+}
+
+void MainWindow::on_unregisterCAM_clicked()
+{
+ //first remove the categories
+ on_removeCAMCategory_clicked();
+
+ // and now unregister the CAM
+ mp_poiContentAccess->UnRegisterContentAccessModule(mp_contentAccessModule->getCAMId());
+ mp_contentAccessModule->disconnectCAM();
+ ui->camID->setText(noValue);
+}
+
+void MainWindow::on_addCAMCategory_clicked()
+{
+ std::vector< DBus_CAMcategory::DBus_CAMcategory_t > poiCategories;
+
+ //check if the CAM has been registered
+ if (mp_contentAccessModule->getCAMId() != mp_contentAccessModule->INVALID_HANDLE)
+ {
+ //get the categories IDs from the CAM
+ poiCategories = mp_contentAccessModule->getCategories();
+ // add the categories on the content access server
+ m_categoriesID = mp_poiContentAccess->AddCategories(mp_contentAccessModule->getCAMId(),poiCategories);
+ // set the categories alias IDs into the CAM
+ mp_contentAccessModule->setCategoriesID(m_categoriesID);
+
+ //register the categories (by using the alias IDs)
+ mp_poiContentAccess->RegisterPoiCategories(mp_contentAccessModule->getCAMId(),m_categoriesID);
+
+ //refresh the panel
+ ui->poiCategoryID->setText(QString::number(m_categoriesID.size()));
+ ui->poiCategoryName->setText(tr("Categories added"));
+ }
+}
+
+void MainWindow::on_removeCAMCategory_clicked()
+{
+ //remove the categories if necessary(the categories are unregistered on the server side)
+ if (m_categoriesID.size()>0)
+ {
+ mp_poiContentAccess->RemoveCategories(mp_contentAccessModule->getCAMId(),m_categoriesID);
+
+ //no category
+ m_categoriesID.clear();
+
+ //refresh the panel (only one category)
+ ui->poiCategoryID->setText(noValue);
+ ui->poiCategoryName->setText(noValue);
+ }
+}
diff --git a/test/poi-service/poi-contentaccess-module/mainwindow.h b/test/poi-service/poi-contentaccess-module/mainwindow.h
new file mode 100644
index 0000000..d274230
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/mainwindow.h
@@ -0,0 +1,78 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file mainwindow.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QtGui/QMainWindow>
+
+#define noValue "-------"
+
+class contentAccessModuleServer;
+class poiContentAccess;
+
+
+namespace Ui {
+class MainWindow;
+}
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = 0);
+ ~MainWindow();
+
+ void ConnectTocontentAccessModuleServer(contentAccessModuleServer *server);
+
+ void ConnectTopoiContentAccessClient(poiContentAccess *client);
+
+ void InitUi();
+
+ void on_SetLanguage(const std::string languageCode, const std::string countryCode);
+
+
+private slots:
+ void on_registerCAM_clicked();
+
+ void on_unregisterCAM_clicked();
+
+ void on_addCAMCategory_clicked();
+
+ void on_removeCAMCategory_clicked();
+
+private:
+ void initSettings();
+
+ Ui::MainWindow *ui;
+ contentAccessModuleServer* mp_contentAccessModule;
+ poiContentAccess* mp_poiContentAccess;
+ std::vector<ushort> m_categoriesID;
+};
+
+#endif // MAINWINDOW_H
diff --git a/test/poi-service/poi-contentaccess-module/mainwindow.ui b/test/poi-service/poi-contentaccess-module/mainwindow.ui
new file mode 100644
index 0000000..2316d86
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/mainwindow.ui
@@ -0,0 +1,347 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>350</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>443</height>
+ </size>
+ </property>
+ <property name="maximumSize">
+ <size>
+ <width>350</width>
+ <height>443</height>
+ </size>
+ </property>
+ <property name="windowTitle">
+ <string>Bicycle shop</string>
+ </property>
+ <property name="windowIcon">
+ <iconset resource="../POIPOCCommon/POIPOCResource.qrc">
+ <normaloff>:/new/image/POIPOCContentAccessModule.png</normaloff>:/new/image/POIPOCContentAccessModule.png</iconset>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(176, 196, 222);</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <widget class="QLabel" name="camID">
+ <property name="geometry">
+ <rect>
+ <x>280</x>
+ <y>200</y>
+ <width>71</width>
+ <height>20</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">color: rgb(0, 85, 255);</string>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="poiCategoryName">
+ <property name="geometry">
+ <rect>
+ <x>280</x>
+ <y>310</y>
+ <width>101</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">color: rgb(0, 85, 255);</string>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="poiCategoryID">
+ <property name="geometry">
+ <rect>
+ <x>280</x>
+ <y>340</y>
+ <width>101</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">color: rgb(0, 85, 255);</string>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>300</y>
+ <width>141</width>
+ <height>61</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 170, 255);</string>
+ </property>
+ <property name="title">
+ <string>Version</string>
+ </property>
+ <widget class="QLabel" name="VersionCAM">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>30</y>
+ <width>131</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="QWidget" name="background" native="true">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>401</width>
+ <height>181</height>
+ </rect>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">image: url(:/new/image/magasin.jpg);</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="addCAMCategory">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>300</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="autoFillBackground">
+ <bool>false</bool>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>ADDandREG</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="removeCAMCategory">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>340</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>REMOVE</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="unregisterCAM">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>240</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="text">
+ <string>UNREGISTER</string>
+ </property>
+ </widget>
+ <widget class="QPushButton" name="registerCAM">
+ <property name="geometry">
+ <rect>
+ <x>170</x>
+ <y>200</y>
+ <width>98</width>
+ <height>27</height>
+ </rect>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 255, 255);</string>
+ </property>
+ <property name="locale">
+ <locale language="English" country="UnitedStates"/>
+ </property>
+ <property name="text">
+ <string>REGISTER</string>
+ </property>
+ </widget>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>200</y>
+ <width>120</width>
+ <height>80</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <weight>75</weight>
+ <bold>true</bold>
+ </font>
+ </property>
+ <property name="styleSheet">
+ <string notr="true">background-color: rgb(170, 170, 255);</string>
+ </property>
+ <property name="title">
+ <string>Language</string>
+ </property>
+ <widget class="QLabel" name="languageCode">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>30</y>
+ <width>66</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ <widget class="QLabel" name="countryCode">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>60</y>
+ <width>66</width>
+ <height>17</height>
+ </rect>
+ </property>
+ <property name="font">
+ <font>
+ <pointsize>9</pointsize>
+ </font>
+ </property>
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </widget>
+ <widget class="Line" name="line">
+ <property name="geometry">
+ <rect>
+ <x>150</x>
+ <y>280</y>
+ <width>241</width>
+ <height>16</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ <widget class="Line" name="line_2">
+ <property name="geometry">
+ <rect>
+ <x>143</x>
+ <y>200</y>
+ <width>20</width>
+ <height>191</height>
+ </rect>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ </widget>
+ <zorder>background</zorder>
+ <zorder>camID</zorder>
+ <zorder>poiCategoryName</zorder>
+ <zorder>poiCategoryID</zorder>
+ <zorder>groupBox_2</zorder>
+ <zorder>addCAMCategory</zorder>
+ <zorder>removeCAMCategory</zorder>
+ <zorder>unregisterCAM</zorder>
+ <zorder>registerCAM</zorder>
+ <zorder>groupBox</zorder>
+ <zorder>line</zorder>
+ <zorder>line_2</zorder>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>350</width>
+ <height>25</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QToolBar" name="mainToolBar">
+ <attribute name="toolBarArea">
+ <enum>TopToolBarArea</enum>
+ </attribute>
+ <attribute name="toolBarBreak">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources>
+ <include location="../POIPOCCommon/POIPOCResource.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/test/poi-service/poi-contentaccess-module/poi-contentaccess-module-class.h b/test/poi-service/poi-contentaccess-module/poi-contentaccess-module-class.h
new file mode 100644
index 0000000..60914ed
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/poi-contentaccess-module-class.h
@@ -0,0 +1,186 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-contentaccess-module-class.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef POICONTENTACCESSMODULECLASS_H
+#define POICONTENTACCESSMODULECLASS_H
+
+
+#include "../poi-common/genivi-poiservice-constants.h"
+#include "../poi-common/genivi-poiservice-contentaccessmodule_adaptor.h"
+#include "../poi-common/genivi-poiservice-poicontentaccess_proxy.h"
+#include "../poi-common/poi-common-data-model.h"
+#include <dbus-c++/glib-integration.h>
+
+#include "poi-datamodel.h"
+#include "database.h"
+
+#include "mainwindow.h"
+
+
+// string conversion to numeric: the third parameter of fromString() should be one of std::hex, std::dec or std::oct
+template <class T>
+bool fromString(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&))
+{
+ std::istringstream iss(s);
+ return !(iss >> f >> t).fail();
+}
+
+using namespace DBus;
+using namespace Glib;
+
+class contentAccessModuleServer;
+class poiContentAccess;
+
+
+class poiContentAccess
+: public org::genivi::poiservice::POIContentAccess_proxy,
+ public DBus::IntrospectableProxy,
+ public DBus::ObjectProxy
+{
+
+public:
+
+ poiContentAccess(DBus::Connection &connection);
+
+ ~poiContentAccess();
+
+private:
+
+};
+
+
+class contentAccessModuleServer
+: public org::genivi::poiservice::POIContentAccessModule_adaptor,
+ public DBus::IntrospectableAdaptor,
+ public DBus::ObjectAdaptor
+{
+public:
+ enum {
+ INVALID_HANDLE = 0xFF,
+ VALID_HANDLE = 1, //the POC manages only one handle !
+ BICYCLE_CATEGORY_ID = 0xFE //the POC manages only one category !
+ } CONSTANTS;
+
+ contentAccessModuleServer(DBus::Connection &connection, const char* poiDatabaseFileName);
+
+ ~contentAccessModuleServer();
+
+ DBus_version::DBus_version_t GetVersion();
+
+ void SetLanguage(const std::string& languageCode, const std::string& countryCode);
+
+ void PoiSearchStarted(const uint8_t& poiSearchHandle, const uint16_t& maxSize, const DBus_geoCoordinate3D::DBus_geoCoordinate3D_t& location, const std::vector< DBus_categoryRadius::DBus_categoryRadius_t >& poiCategories, const std::vector< DBus_attributeDetails::DBus_attributeDetails_t >& poiAttributes, const std::string& inputString, const uint16_t& sortOption);
+
+ void PoiSearchCanceled(const uint8_t& poiSearchHandle);
+
+ void ResultListRequested(const uint8_t& camId, const uint8_t& poiSearchHandle, const std::vector< std::string >& attributes, uint16_t& statusValue, uint16_t& resultListSize, std::vector< DBus_poiCAMDetails::DBus_poiCAMDetails_t >& resultList);
+
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > PoiDetailsRequested(const std::vector< uint32_t >& source_id);
+
+ void connectToHMI(MainWindow *w);
+
+ void connectCAM(uint8_t camId);
+
+ void disconnectCAM();
+
+ std::vector<DBus_CAMcategory::DBus_CAMcategory_t> getCategories();
+
+ void setCategoriesID(std::vector<uint16_t> categoryIDList);
+
+ std::string getCAMName();
+
+ uint8_t getCAMId();
+
+
+private:
+
+// data conversion routines
+
+ DBus::Variant createVariantString(std::string str);
+
+ DBus::Variant createVariantUint16(uint16_t value);
+
+// search routines
+
+ uint16_t searchAroundALocation(DBus_geoCoordinate3D::geoCoordinate3D_t location,const std::string* inputString);
+
+ uint16_t searchPOIRequest(uint16_t categoryIndex, std::string search_string, DBus_geoCoordinate3D::geoCoordinate3D_t left_bottom_location,DBus_geoCoordinate3D::geoCoordinate3D_t right_top_location);
+
+// error management
+
+ void sendDBusError(const char* message);
+
+ void onError();
+
+//
+ bool isCategoryAvailable(uint16_t id, uint16_t *category_id);
+
+// geometrical routines
+
+
+ uint32_t calculateDistance(const DBus_geoCoordinate3D::geoCoordinate3D_t origin, const DBus_geoCoordinate3D::geoCoordinate3D_t target);
+
+
+ double calculateAngle(const uint32_t radius);
+
+// data
+
+ DBus_version m_version;
+
+ std::string m_languageCode, m_countryCode;
+
+ uint8_t m_poiSearchHandle; // the POC is limited to the management of one handle !
+
+ Database *mp_database; // database access
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_leftBottomLocation;
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_rightTopLocation;
+
+ MainWindow *mp_HMI;
+
+ ushort m_searchStatus;
+
+ DBus_geoCoordinate3D::geoCoordinate3D_t m_centerLocation;
+
+ uint16_t m_totalSize;
+
+ uint8_t m_camId;
+
+
+// buffers
+ std::vector< DBus_poiCAMDetails::DBus_poiCAMDetails_t > m_poiTable; // source_id, name, category, location, distance, attributes
+ std::vector< DBus_searchResultDetails::DBus_searchResultDetails_t > m_poiDetailsTable; //details(unique id, name, lat, lon, alt), categories, attributes(name, type, value)
+
+
+// category and attribute management
+ uint16_t m_availableCategories;
+ poi_category_t m_availableCategoryTable[MAX_CATEGORIES];
+ uint16_t m_rootCategory;
+};
+
+
+
+#endif // POIPOCCONTENTACCESSMODULECLASS_H
diff --git a/test/poi-service/poi-contentaccess-module/poi-contentaccess-module.pro b/test/poi-service/poi-contentaccess-module/poi-contentaccess-module.pro
new file mode 100644
index 0000000..4b631d0
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/poi-contentaccess-module.pro
@@ -0,0 +1,43 @@
+TEMPLATE = app
+CONFIG += console
+QT += core gui
+
+RESOURCES += \
+ ../poi-common/poi-resource.qrc
+
+SOURCES += main.cpp \
+ database.cpp \
+ mainwindow.cpp
+
+INCLUDEPATH += /usr/include/glibmm-2.4 \
+ /usr/lib/i386-linux-gnu/glibmm-2.4/include \
+ /usr/include/glib-2.0 \
+ /usr/lib/i386-linux-gnu/glib-2.0/include \
+ /usr/include/dbus-c++-1 \
+ /usr/include/dbus-1.0 \
+ /usr/lib/i386-linux-gnu/dbus-1.0/include
+
+LIBS += -lglibmm-2.4 \
+ -lglib-2.0 \
+ -lgobject-2.0 \
+ -lsqlite3 \
+ -ldbus-c++-glib-1 \
+ -ldbus-c++-1 \
+ -ldbus-1
+
+HEADERS += \
+ database.h \
+ mainwindow.h \
+ poi-datamodel.h \
+ poi-contentaccess-module-class.h \
+ ../poi-common/poi-common-data-model.h
+
+FORMS += \
+ mainwindow.ui
+
+TRANSLATIONS = ../poi-common/poi-content-access-module_en.ts \
+ ../poi-common/poi-content-access-module_jp.ts
+
+OTHER_FILES +=
+
+
diff --git a/test/poi-service/poi-contentaccess-module/poi-datamodel.h b/test/poi-service/poi-contentaccess-module/poi-datamodel.h
new file mode 100644
index 0000000..ed471d6
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/poi-datamodel.h
@@ -0,0 +1,136 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-datamodel.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __POIDATAMODEL_H__
+#define __POIDATAMODEL_H__
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <iostream>
+#include <fstream>
+#include "../poi-common/poi-common-data-model.h"
+
+/**
+ * \struct category_attribute_t
+ * \brief attributes.
+ *
+ * Used to store attributes
+ *
+ */
+typedef struct
+{
+ ushort id; //unique id (used for the search into the database)
+ ushort alias_id; //id given by the content access server
+ std::string name; //attribute unique name
+ bool isSearched; //attributes is into the search scope
+} category_attribute_t;
+
+/**
+ * \struct poi_category_t
+ * \brief poi data.
+ *
+ * Used to store the poi category data
+ *
+ */
+typedef struct
+{
+ uint32_t id; // unique id (used for the search into the database)
+ uint32_t alias_id; //id given by the content access server
+ std::string name; // unique name
+ std::string icon; // url of the associated icon
+ bool top_level; //true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.
+ uint32_t radius;
+ double angle; //angle corresponding to the radius (to speed up the SQL search)
+ bool hasRecordsInTheDatabase; //records exist in the database
+ bool isSearch; //true if the category is into the scope of the search
+ std::vector<category_attribute_t> attributeList; //list of attributes
+ std::vector<uint16_t> parentList; //list of parents
+ std::vector<uint16_t> childList; //list of children
+} poi_category_t;
+
+
+/**
+ * \struct route_vector_t
+ * \brief vector in a route.
+ *
+ * Used to store vector of a route
+ *
+ */
+typedef struct
+{
+ DBus_geoCoordinate3D::geoCoordinate3D_t startPoint;
+ DBus_geoCoordinate3D::geoCoordinate3D_t endPoint;
+} route_vector_t;
+
+enum ATTRIBUTE_LIST{
+ ATTRIBUTE_SOURCE = 0,
+ ATTRIBUTE_WEBSITE,
+ ATTRIBUTE_PHONE,
+ ATTRIBUTE_STARS,
+ ATTRIBUTE_OPENINGHOURS,
+ ATTRIBUTE_SIZE
+};
+
+
+
+/**
+ * \struct poi_t
+ * \brief poi related informations.
+ *
+ * Used to store data of a poi
+ *
+ */
+typedef struct {
+ std::string name;
+ DBus_geoCoordinate3D::geoCoordinate3D_t coordinate;
+ uint64_t segment; /*!< segment (similar to id of <node id="185881594" lat="48.8607204" lon="2.2960844"/>). */
+ uint16_t offset;
+ uint16_t categoryIndex; //index into the table of categories
+ std::string source;
+ std::string website;
+ std::string phone;
+ uint16_t stars;
+ std::string openinghours;
+ uint32_t distance;
+} poi_t;
+
+/**
+ * \struct cam_t
+ * \brief cam related informations.
+ *
+ * Used to store data of a cam
+ *
+ */
+typedef struct {
+ uint8_t id;
+ std::string name;
+} cam_t;
+
+#endif
diff --git a/test/poi-service/poi-contentaccess-module/ui_mainwindow.h b/test/poi-service/poi-contentaccess-module/ui_mainwindow.h
new file mode 100644
index 0000000..eab23f8
--- /dev/null
+++ b/test/poi-service/poi-contentaccess-module/ui_mainwindow.h
@@ -0,0 +1,196 @@
+/********************************************************************************
+** Form generated from reading UI file 'mainwindow.ui'
+**
+** Created: Thu Mar 14 14:16:40 2013
+** by: Qt User Interface Compiler version 4.8.1
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef UI_MAINWINDOW_H
+#define UI_MAINWINDOW_H
+
+#include <QtCore/QLocale>
+#include <QtCore/QVariant>
+#include <QtGui/QAction>
+#include <QtGui/QApplication>
+#include <QtGui/QButtonGroup>
+#include <QtGui/QFrame>
+#include <QtGui/QGroupBox>
+#include <QtGui/QHeaderView>
+#include <QtGui/QLabel>
+#include <QtGui/QMainWindow>
+#include <QtGui/QMenuBar>
+#include <QtGui/QPushButton>
+#include <QtGui/QStatusBar>
+#include <QtGui/QToolBar>
+#include <QtGui/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+ QWidget *centralWidget;
+ QLabel *camID;
+ QLabel *poiCategoryName;
+ QLabel *poiCategoryID;
+ QGroupBox *groupBox_2;
+ QLabel *VersionCAM;
+ QWidget *background;
+ QPushButton *addCAMCategory;
+ QPushButton *removeCAMCategory;
+ QPushButton *unregisterCAM;
+ QPushButton *registerCAM;
+ QGroupBox *groupBox;
+ QLabel *languageCode;
+ QLabel *countryCode;
+ QFrame *line;
+ QFrame *line_2;
+ QMenuBar *menuBar;
+ QToolBar *mainToolBar;
+ QStatusBar *statusBar;
+
+ void setupUi(QMainWindow *MainWindow)
+ {
+ if (MainWindow->objectName().isEmpty())
+ MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->resize(350, 443);
+ MainWindow->setMinimumSize(QSize(350, 443));
+ MainWindow->setMaximumSize(QSize(350, 443));
+ QIcon icon;
+ icon.addFile(QString::fromUtf8(":/new/image/POIPOCContentAccessModule.png"), QSize(), QIcon::Normal, QIcon::Off);
+ MainWindow->setWindowIcon(icon);
+ MainWindow->setStyleSheet(QString::fromUtf8("background-color: rgb(207, 245, 255);"));
+ centralWidget = new QWidget(MainWindow);
+ centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ camID = new QLabel(centralWidget);
+ camID->setObjectName(QString::fromUtf8("camID"));
+ camID->setGeometry(QRect(280, 200, 71, 20));
+ QFont font;
+ font.setPointSize(9);
+ camID->setFont(font);
+ camID->setStyleSheet(QString::fromUtf8("color: rgb(0, 85, 255);"));
+ poiCategoryName = new QLabel(centralWidget);
+ poiCategoryName->setObjectName(QString::fromUtf8("poiCategoryName"));
+ poiCategoryName->setGeometry(QRect(280, 310, 101, 17));
+ poiCategoryName->setFont(font);
+ poiCategoryName->setStyleSheet(QString::fromUtf8("color: rgb(0, 85, 255);"));
+ poiCategoryID = new QLabel(centralWidget);
+ poiCategoryID->setObjectName(QString::fromUtf8("poiCategoryID"));
+ poiCategoryID->setGeometry(QRect(280, 340, 101, 17));
+ poiCategoryID->setFont(font);
+ poiCategoryID->setStyleSheet(QString::fromUtf8("color: rgb(0, 85, 255);"));
+ groupBox_2 = new QGroupBox(centralWidget);
+ groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setGeometry(QRect(10, 300, 141, 61));
+ QFont font1;
+ font1.setBold(true);
+ font1.setWeight(75);
+ groupBox_2->setFont(font1);
+ groupBox_2->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 170, 255);"));
+ VersionCAM = new QLabel(groupBox_2);
+ VersionCAM->setObjectName(QString::fromUtf8("VersionCAM"));
+ VersionCAM->setGeometry(QRect(0, 30, 131, 17));
+ VersionCAM->setFont(font);
+ background = new QWidget(centralWidget);
+ background->setObjectName(QString::fromUtf8("background"));
+ background->setGeometry(QRect(0, 0, 401, 181));
+ background->setAutoFillBackground(false);
+ background->setStyleSheet(QString::fromUtf8("image: url(:/new/image/magasin.jpg);"));
+ addCAMCategory = new QPushButton(centralWidget);
+ addCAMCategory->setObjectName(QString::fromUtf8("addCAMCategory"));
+ addCAMCategory->setGeometry(QRect(170, 300, 98, 27));
+ addCAMCategory->setAutoFillBackground(false);
+ addCAMCategory->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ removeCAMCategory = new QPushButton(centralWidget);
+ removeCAMCategory->setObjectName(QString::fromUtf8("removeCAMCategory"));
+ removeCAMCategory->setGeometry(QRect(170, 340, 98, 27));
+ removeCAMCategory->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ unregisterCAM = new QPushButton(centralWidget);
+ unregisterCAM->setObjectName(QString::fromUtf8("unregisterCAM"));
+ unregisterCAM->setGeometry(QRect(170, 240, 98, 27));
+ unregisterCAM->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ registerCAM = new QPushButton(centralWidget);
+ registerCAM->setObjectName(QString::fromUtf8("registerCAM"));
+ registerCAM->setGeometry(QRect(170, 200, 98, 27));
+ registerCAM->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 255, 255);"));
+ registerCAM->setLocale(QLocale(QLocale::English, QLocale::UnitedStates));
+ groupBox = new QGroupBox(centralWidget);
+ groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setGeometry(QRect(10, 200, 120, 80));
+ groupBox->setFont(font1);
+ groupBox->setStyleSheet(QString::fromUtf8("background-color: rgb(170, 170, 255);"));
+ languageCode = new QLabel(groupBox);
+ languageCode->setObjectName(QString::fromUtf8("languageCode"));
+ languageCode->setGeometry(QRect(0, 30, 66, 17));
+ languageCode->setFont(font);
+ countryCode = new QLabel(groupBox);
+ countryCode->setObjectName(QString::fromUtf8("countryCode"));
+ countryCode->setGeometry(QRect(0, 60, 66, 17));
+ countryCode->setFont(font);
+ line = new QFrame(centralWidget);
+ line->setObjectName(QString::fromUtf8("line"));
+ line->setGeometry(QRect(150, 280, 241, 16));
+ line->setFrameShape(QFrame::HLine);
+ line->setFrameShadow(QFrame::Sunken);
+ line_2 = new QFrame(centralWidget);
+ line_2->setObjectName(QString::fromUtf8("line_2"));
+ line_2->setGeometry(QRect(143, 200, 20, 191));
+ line_2->setFrameShape(QFrame::VLine);
+ line_2->setFrameShadow(QFrame::Sunken);
+ MainWindow->setCentralWidget(centralWidget);
+ background->raise();
+ camID->raise();
+ poiCategoryName->raise();
+ poiCategoryID->raise();
+ groupBox_2->raise();
+ addCAMCategory->raise();
+ removeCAMCategory->raise();
+ unregisterCAM->raise();
+ registerCAM->raise();
+ groupBox->raise();
+ line->raise();
+ line_2->raise();
+ menuBar = new QMenuBar(MainWindow);
+ menuBar->setObjectName(QString::fromUtf8("menuBar"));
+ menuBar->setGeometry(QRect(0, 0, 350, 25));
+ MainWindow->setMenuBar(menuBar);
+ mainToolBar = new QToolBar(MainWindow);
+ mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
+ MainWindow->addToolBar(Qt::TopToolBarArea, mainToolBar);
+ statusBar = new QStatusBar(MainWindow);
+ statusBar->setObjectName(QString::fromUtf8("statusBar"));
+ MainWindow->setStatusBar(statusBar);
+
+ retranslateUi(MainWindow);
+
+ QMetaObject::connectSlotsByName(MainWindow);
+ } // setupUi
+
+ void retranslateUi(QMainWindow *MainWindow)
+ {
+ MainWindow->setWindowTitle(QApplication::translate("MainWindow", "Bicycle shop", 0, QApplication::UnicodeUTF8));
+ camID->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ poiCategoryName->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ poiCategoryID->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ groupBox_2->setTitle(QApplication::translate("MainWindow", "Version", 0, QApplication::UnicodeUTF8));
+ VersionCAM->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ addCAMCategory->setText(QApplication::translate("MainWindow", "ADDandREG", 0, QApplication::UnicodeUTF8));
+ removeCAMCategory->setText(QApplication::translate("MainWindow", "REMOVE", 0, QApplication::UnicodeUTF8));
+ unregisterCAM->setText(QApplication::translate("MainWindow", "UNREGISTER", 0, QApplication::UnicodeUTF8));
+ registerCAM->setText(QApplication::translate("MainWindow", "REGISTER", 0, QApplication::UnicodeUTF8));
+ groupBox->setTitle(QApplication::translate("MainWindow", "Language", 0, QApplication::UnicodeUTF8));
+ languageCode->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ countryCode->setText(QApplication::translate("MainWindow", "TextLabel", 0, QApplication::UnicodeUTF8));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // UI_MAINWINDOW_H
diff --git a/test/poi-service/poi-supplier/database.cpp b/test/poi-service/poi-supplier/database.cpp
new file mode 100644
index 0000000..91978f4
--- /dev/null
+++ b/test/poi-service/poi-supplier/database.cpp
@@ -0,0 +1,261 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include "database.h"
+#include <stdio.h>
+#include <iostream>
+
+/**
+ * \fn Database(const char* filename)
+ * \brief Constructor.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return void.
+ */
+Database::Database(char* filename)
+{
+ database = NULL;
+ open(filename);
+ m_filename = filename;
+}
+
+/**
+ * \fn ~Database()
+ * \brief Destructor.
+ *
+ * \param
+ * \return void.
+ */
+Database::~Database()
+{
+}
+
+/**
+ * \fn open(const char* filename)
+ * \brief Open the database.
+ *
+ * \param const char* filename -name of the database file to open
+ * \return bool. -true if database consistant
+ */
+bool Database::open(char* filename)
+{
+ if(sqlite3_open(filename, &database) == SQLITE_OK)
+ return true;
+
+ return false;
+}
+
+/**
+ * \fn schema()
+ * \brief Get the scheme of the database.
+ *
+ * \param
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::schema()
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command += " \"";
+ command += ".schema";
+ command += "\"";
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn add(const char* scheme_filename)
+ * \brief Add a scheme to the database.
+ *
+ * \param const char* scheme_filename -filename that contains the scheme
+ * \return bool. -true if SQL command succeed
+ */
+bool Database::add(const char* scheme_filename)
+{
+ FILE *fpipe;
+ std::string command = "";
+ command += "sqlite3 ";
+ command += m_filename;
+ command = command + " < " + scheme_filename;
+
+ char line[256];
+
+ if ( !(fpipe = (FILE*)popen(command.c_str(),"r")) )
+ { // If fpipe is NULL
+ perror("Problems with pipe");
+ return false;
+ }
+
+ while ( fgets( line, sizeof line, fpipe))
+ {
+ printf("%s", line);
+ }
+ pclose(fpipe);
+
+ return true;
+}
+
+/**
+ * \fn beginTransaction()
+ * \brief Begin a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::beginTransaction()
+{
+ char* errorMessage;
+ sqlite3_exec(database, "BEGIN TRANSACTION;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn appendTransaction(const char* query)
+ * \brief Append a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return void
+ */
+void Database::appendTransaction(const char* query)
+{
+ char* errorMessage = "";
+ sqlite3_exec(database, query, NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn commitTransaction()
+ * \brief Commit a SQL transaction.
+ *
+ * \param
+ * \return void
+ */
+void Database::commitTransaction()
+{
+ char* errorMessage = "";
+ sqlite3_exec(database, "COMMIT;", NULL, NULL, &errorMessage);
+}
+
+/**
+ * \fn query(const char* query)
+ * \brief Query a SQL request.
+ *
+ * \param const char* query -SQL request
+ * \return vector<vector<string> > -Result of the query
+ */
+vector<vector<Glib::ustring> > Database::query(const char* query)
+{
+ sqlite3_stmt *statement;
+ vector<vector<Glib::ustring> > results;
+
+ if(sqlite3_prepare_v2(database, query, -1, &statement, 0) == SQLITE_OK)
+ {
+ int cols = sqlite3_column_count(statement);
+ int result = 0;
+ while(true)
+ {
+ result = sqlite3_step(statement);
+
+ if(result == SQLITE_ROW)
+ {
+ vector<Glib::ustring> values;
+ for(int col = 0; col < cols; col++)
+ {
+ Glib::ustring val;
+ char * ptr = (char*)sqlite3_column_text(statement, col);
+ if(ptr)
+ {
+ val = ptr;
+ }
+ else val = ""; // this can be commented out since std::string val;
+ values.push_back(val); // now we will never push NULL
+ }
+ results.push_back(values);
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sqlite3_finalize(statement);
+ }
+
+ string error = sqlite3_errmsg(database);
+ if(error != "not an error") cout << query << " " << error << endl;
+ return results;
+}
+
+/**
+ * \fn close()
+ * \brief Close the database.
+ *
+ * \param
+ * \return void
+ */
+void Database::close()
+{
+ sqlite3_close(database);
+}
+
+/**
+ * \fn callback(void *NotUsed, int argc, char **argv, char **azColName)
+ * \brief Call back function for database access.
+ *
+ * \param void *NotUsed
+ * \param int argc
+ * \param char **argv
+ * \param char **azColName
+ * \return int
+ */
+int Database::callback(void *NotUsed, int argc, char **argv, char **azColName)
+{
+ NotUsed=0;
+ int i;
+ for(i=0; i<argc; i++){
+ printf("%s = %s\n", azColName[i], argv[i] ? argv[i]: "NULL");
+ }
+ printf("\n");
+ return 0;
+}
+
+
diff --git a/test/poi-service/poi-supplier/database.h b/test/poi-service/poi-supplier/database.h
new file mode 100644
index 0000000..07b378f
--- /dev/null
+++ b/test/poi-service/poi-supplier/database.h
@@ -0,0 +1,61 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file database.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#ifndef __DATABASE_H__
+#define __DATABASE_H__
+
+#include <string>
+#include <vector>
+#include <sqlite3.h>
+#include <glibmm/ustring.h>
+
+
+using namespace std;
+
+class Database
+{
+ public:
+ Database(char* filename);
+ ~Database();
+
+ bool open(char* filename);
+ bool schema();
+ bool add(const char* scheme_filename);
+ vector<vector<Glib::ustring> > query(const char* query);
+ void close();
+ void beginTransaction();
+ void appendTransaction(const char* query);
+ void commitTransaction();
+
+ private:
+ static int callback(void *NotUsed, int argc, char **argv, char **azColName);
+ sqlite3 *database;
+ std::string m_filename;
+};
+
+#endif
diff --git a/test/poi-service/poi-supplier/main.cpp b/test/poi-service/poi-supplier/main.cpp
new file mode 100644
index 0000000..9b8a4d1
--- /dev/null
+++ b/test/poi-service/poi-supplier/main.cpp
@@ -0,0 +1,339 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file main.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include <getopt.h>
+#include "poi-datamodel.h"
+
+#include "raw-file-sort.h"
+#include "database.h"
+
+#ifndef SAFE_DELETE
+#define SAFE_DELETE(_p) { if ((_p) != NULL) { delete(_p); (_p) = NULL; } }
+#endif
+
+#ifndef SAFE_DELETE_LIST
+#define SAFE_DELETE_LIST(_p) { if ((_p) != NULL) { delete[](_p); (_p) = NULL; } }
+#endif
+
+const char* SQL_POI_TABLE_SELECT = "SELECT Id,name,latitude,longitude,altitude,segment,offset,source,website,phone,stars,openingHours,addrHousenumber,addrStreet,addrPostCode,addrCity FROM poi;";
+const char* SQL_POI_TABLE_INSERT = "INSERT INTO poi VALUES (";
+const char* SQL_BELONGSTO_TABLE_INSERT = "INSERT INTO belongsto (Id,poiprovider_Id,poicategory_Id,poi_Id) ";
+const char* SQL_POIPROVIDERID_SELECT = "(SELECT Id FROM poiprovider WHERE name='OpenStreetMap')";
+const char* SQL_POICATEGORYID_SELECT = "(SELECT Id FROM poicategory WHERE name='";
+const char* SQL_POI_MAX_ID = "SELECT MAX(Id) FROM poi;";
+const char* program_name; //file to sink outputs
+
+
+// the third parameter of from_string() should be
+// one of std::hex, std::dec or std::oct
+template <class T>
+bool from_string(T& t, const std::string& s, std::ios_base& (*f)(std::ios_base&))
+{
+ std::istringstream iss(s);
+ return !(iss >> f >> t).fail();
+}
+
+/**
+ * \fn print_usage (FILE* stream, int exit_code)
+ * \brief Display the available options.
+ *
+ * \param const FILE* stream -name of stream to use
+ * \param int exit_code -exit code
+ * \return void.
+ */
+void print_usage (FILE* stream, int exit_code)
+{
+ fprintf (stream, "Use: %s options [database] [file] [sort key]\n",program_name);
+ fprintf (stream,
+ " -h --help Display this message.\n"
+ " -a --add_scheme database scheme Add sql scheme to database.\n"
+ " -v --view database View database structure.\n"
+ " -p --parse_file database file primary=KEY secondary=KEY1,[KEY2,] Parse file according to sort keys (end with a comma) and update the database.\n"
+ " -s --select database Select poi table to check the database.\n"
+ );
+ exit (exit_code);
+}
+
+/**
+ * \fn int main (int argc , char** argv)
+ * \brief xml parser and POI database provider.
+ *
+ * \param int argc
+ * \param char** argv
+ * \return EXIT_SUCCESS, EXIT_FAILURE.
+ */
+int main(int argc , char** argv )
+{
+ poi_t poi_buffer[POI_BUFFER_SIZE]; //table to store the POIs
+ uint16_t poi_buffer_index; //number of POIs found
+
+ std::string sort_primary_key; //primary key (set as a parameter)
+ std::string *sort_list; //list of secondary keys (set as parameters)
+ uint8_t sort_list_size; //number of secondary keys
+
+ Database *sqlDatabase; //sqlite3 database
+ Glib::ustring sqlQuery; //SQL request on database
+ vector<vector<Glib::ustring> > sqlQueryResult; //result of the query on database
+ vector<Glib::ustring> sqlQueryLine;
+
+ std::ostringstream strStream; //temporary stream used for transformation into string
+ uint16_t offset_id; //offset to the next free item in the database
+
+ // Set the global C and C++ locale to the user-configured locale,
+ // so we can use std::cout with UTF-8, via Glib::ustring, without exceptions.
+ std::locale::global(std::locale(""));
+
+ //index used for argument analysis
+ int next_option;
+ size_t begin_index;
+ size_t end_index;
+ size_t key_index;
+
+ /* Valid letters for short options. */
+ const char* const short_options = "ha:v:p:s:";
+ /* Valid string for long options. */
+ const struct option long_options[] = {
+ { "help", 0, NULL, 'h' },
+ { "add_scheme", 2, NULL, 'a' },
+ { "view_structure", 2, NULL, 'v' },
+ { "parse_file", 4, NULL, 'p' },
+ { "select", 2, NULL, 's' },
+ { NULL, 0, NULL, 0 } /* Always at the end of the table. */
+ };
+ char* database_filename = NULL; //database filename passed as argument
+ const char* scheme_filename = NULL; //sql scheme filename passed as argument
+ const char* xml_filename = NULL; //xml filename passed as argument
+ std::string keys = "";
+ program_name = argv[0];
+
+ do {
+ next_option = getopt_long (argc, argv, short_options,
+ long_options, NULL);
+ switch (next_option)
+ {
+ case 'h': /* -h --help */
+ print_usage (stdout, 0);
+ break;
+ case 'a': /* -a --add_scheme database scheme */
+ database_filename = argv[2];
+ scheme_filename = argv[3];
+ sqlDatabase = new Database(database_filename);
+ sqlDatabase->add(scheme_filename);
+ sqlDatabase->close();
+ delete sqlDatabase;
+ break;
+ case 'v': /* -v --view database */
+ database_filename = argv[2];
+ sqlDatabase = new Database(database_filename);
+ sqlDatabase->schema();
+ sqlDatabase->close();
+ delete sqlDatabase;
+ break;
+ case 's': /* -s --select database */
+ database_filename = argv[2];
+ sqlDatabase = new Database(database_filename);
+ sqlQueryResult = sqlDatabase->query(SQL_POI_TABLE_SELECT);
+ for(vector<vector<Glib::ustring> >::iterator it = sqlQueryResult.begin(); it < sqlQueryResult.end(); ++it)
+ {
+ vector<Glib::ustring> row = *it;
+ cout << "Values: (Id=" << row.at(0) << ", name=" << row.at(1) << ")" << endl;
+ }
+ sqlDatabase->close();
+ delete sqlDatabase;
+ break;
+ case 'p': /* -p --parse_file database file primary=KEY secondary=KEY1,[KEY2,] */
+ xml_filename = argv[3];
+ //get primary key
+ keys = argv[4];
+ if (keys.find("primary=",0) == string::npos)
+ print_usage (stderr, 1); /* Invalid option. */
+ begin_index = keys.find("=",0);
+ sort_primary_key = keys.substr(begin_index+1,keys.length());
+ //get secondary key list
+ keys = argv[5];
+ if (keys.find("secondary=",0) == string::npos)
+ print_usage (stderr, 1); /* Invalid option. */
+ keys.erase(0,10); //remove 'secondary=' so 10 char !
+
+ sort_list_size = 0;
+ begin_index = 0;
+ do
+ {
+ end_index = keys.find(",",begin_index);
+ if (end_index != string::npos)
+ {
+ sort_list_size++;
+ begin_index = end_index + 1;
+ }
+ else
+ break;
+
+ } while(begin_index < keys.length());
+ if (sort_list_size == 0)
+ print_usage (stderr, 1); /* Invalid option. */
+
+ sort_list = new std::string[sort_list_size];
+ key_index = 0;
+ begin_index = 0;
+ end_index = 0;
+ do
+ {
+ end_index = keys.find(",",begin_index);
+ if (end_index != string::npos)
+ {
+ sort_list[key_index++] = keys.substr(begin_index,(end_index - begin_index));
+ begin_index = end_index + 1;
+ }
+
+ } while(begin_index < keys.length());
+ //parse the file
+ xml_parser(xml_filename, sort_primary_key, sort_list, sort_list_size, poi_buffer, &poi_buffer_index);
+ // database update
+ database_filename = argv[2];
+ sqlDatabase = new Database(database_filename);
+ //get id
+ sqlQueryResult = sqlDatabase->query(SQL_POI_MAX_ID);
+ sqlQueryLine = sqlQueryResult.at(0);
+ if (sqlQueryLine[0] == "")
+ offset_id = 0; //table is empty
+ else
+ {
+ from_string<uint16_t>(offset_id,sqlQueryLine[0], std::dec);
+ offset_id +=1; //to next free index
+ }
+
+ //populate the table
+ begin_index = 0;
+ while (begin_index < poi_buffer_index)
+ {
+ sqlDatabase->beginTransaction();
+
+ // prepare statement for the poi table
+ // example:INSERT INTO poi VALUES (1,'Palais de la D=Wcouverte',48.8662070,2.3109250,0,27415779,0,'default','http://www.palais-decouverte.fr/','default',0,'Tu-Sa 09:30-18:30; Sa 10:00-19:00; PH 10:00-19:00','default','default',2,'default');
+ sqlQuery = SQL_POI_TABLE_INSERT;
+ strStream.str("");
+ strStream << (begin_index + offset_id);
+ sqlQuery += strStream.str();
+ sqlQuery += ",'";
+ sqlQuery.append(poi_buffer[begin_index].name);
+ sqlQuery += "',";
+ strStream.str("");
+ strStream.precision(7);
+ strStream << fixed << poi_buffer[begin_index].node.latitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ",";
+ strStream.str("");
+ strStream.precision(7);
+ strStream << fixed << poi_buffer[begin_index].node.longitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ",";
+ strStream.str("");
+ strStream << poi_buffer[begin_index].altitude;
+ sqlQuery += strStream.str();
+ sqlQuery += ",";
+ strStream.str("");
+ strStream << poi_buffer[begin_index].node.segment;
+ sqlQuery += strStream.str();
+ sqlQuery += ",";
+ strStream.str("");
+ strStream << poi_buffer[begin_index].offset;
+ sqlQuery += strStream.str();
+ sqlQuery += ",'";
+ sqlQuery.append(poi_buffer[begin_index].source);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].website);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].phone);
+ sqlQuery += "',";
+ strStream.str("");
+ strStream << poi_buffer[begin_index].stars;
+ sqlQuery += strStream.str();
+ sqlQuery += ",'";
+ sqlQuery.append(poi_buffer[begin_index].opening_hours);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].addr_house_number);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].addr_street);
+ sqlQuery += "',";
+ strStream.str("");
+ strStream << poi_buffer[begin_index].addr_postcode;
+ sqlQuery += strStream.str();
+ sqlQuery += ",'";
+ sqlQuery.append(poi_buffer[begin_index].addr_city);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].brand);
+ sqlQuery += "','";
+ sqlQuery.append(poi_buffer[begin_index].operateur);
+ sqlQuery += "');";
+ sqlDatabase->appendTransaction(sqlQuery.c_str());
+
+ // prepare statement for the belongsto table
+ // example: INSERT INTO belongsto (Id,poiprovider_Id,poicategory_Id,poi_Id)
+ // SELECT (begin_index + offset_id),(SELECT Id FROM poiprovider WHERE name='OpenStreetMap'),(SELECT Id FROM poicategory WHERE name='museum'),(begin_index + offset_id) ;
+ // database needs to be populated with poi categories and providers before !
+ // to do : preliminary check before the loop !
+ sqlQuery = SQL_BELONGSTO_TABLE_INSERT;
+ sqlQuery += "SELECT ";
+ strStream.str("");
+ strStream << (begin_index + offset_id);
+ sqlQuery += strStream.str();
+ sqlQuery += ",";
+ sqlQuery += SQL_POIPROVIDERID_SELECT;
+ sqlQuery += ",";
+ sqlQuery += SQL_POICATEGORYID_SELECT;
+ sqlQuery.append(poi_buffer[begin_index].category);
+ sqlQuery += "'),";
+ strStream.str("");
+ strStream << (begin_index + offset_id);
+ sqlQuery += strStream.str();
+ sqlQuery += ";";
+ sqlDatabase->appendTransaction(sqlQuery.c_str());
+
+ sqlDatabase->commitTransaction(); //execute the transaction
+
+ begin_index++;
+ }
+
+
+ cout << ("Added records= ") << poi_buffer_index << endl;
+ sqlDatabase->close();
+ delete sqlDatabase;
+ delete[] sort_list;
+ break;
+ case '?': /* Invalid option. */
+ print_usage (stderr, 1);
+ case -1: /* End of options. */
+ break;
+ default: /* Error */
+ return EXIT_FAILURE;
+ }
+ }
+ while (next_option != -1);
+
+ return EXIT_SUCCESS;
+}
diff --git a/test/poi-service/poi-supplier/poi-datamodel.h b/test/poi-service/poi-supplier/poi-datamodel.h
new file mode 100644
index 0000000..ab9b29e
--- /dev/null
+++ b/test/poi-service/poi-supplier/poi-datamodel.h
@@ -0,0 +1,103 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file poi-datamodel.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+#ifndef __POIPOCDATAMODEL_H__
+#define __POIPOCDATAMODEL_H__
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <iostream>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+#include <glibmm/ustring.h>
+
+typedef enum {
+ INVALID = 0,
+ NOT_STARTED,
+ SEARCHING,
+ FINISHED
+} search_status_t;
+
+typedef struct
+{
+ uint8_t id; // unique id
+ Glib::ustring name; // unique name
+ bool top_level; //true if the category is a pre-defined one (top level with only ALL_CATEGORIES as parent), false for customized categories created by plug-in.
+ uint32_t radius;
+ double angle; //angle corresponding to the radius (to speed up the SQL search)
+ bool isSearch; //true if the category is into the scope of the search
+} poi_category_t;
+
+typedef struct
+{
+ double lat;
+ double lon;
+ int32_t alt;
+} location_t;
+
+/**
+ * \struct geo_node_t
+ * \brief id and geo coordinates.
+ *
+ * Used to store geo coordinate data
+ *
+ */
+typedef struct {
+ uint64_t segment; /*!< segment (similar to id of <node id="185881594" lat="48.8607204" lon="2.2960844"/>). */
+ double latitude; /*!< . */
+ double longitude; /*!< . */
+} geo_node_t;
+
+/**
+ * \struct poi_t
+ * \brief poi related informations.
+ *
+ * Used to store data of a poi
+ *
+ */
+typedef struct {
+ Glib::ustring name;
+ geo_node_t node;
+ uint16_t altitude;
+ uint16_t offset;
+ Glib::ustring category;
+ Glib::ustring source;
+ Glib::ustring website;
+ std::string phone;
+ uint16_t stars;
+ Glib::ustring opening_hours;
+ Glib::ustring addr_house_number;
+ Glib::ustring addr_street;
+ uint16_t addr_postcode;
+ Glib::ustring addr_city;
+ Glib::ustring brand;
+ Glib::ustring operateur; //nb: use the french word to avoid error with operator keyword
+} poi_t;
+
+#endif
diff --git a/test/poi-service/poi-supplier/poi-supplier.pro b/test/poi-service/poi-supplier/poi-supplier.pro
new file mode 100644
index 0000000..8b2bd78
--- /dev/null
+++ b/test/poi-service/poi-supplier/poi-supplier.pro
@@ -0,0 +1,27 @@
+TEMPLATE = app
+CONFIG += console
+CONFIG -= qt
+
+SOURCES += main.cpp \
+ database.cpp \
+ raw-file-sort.cpp
+
+HEADERS += \
+ database.h \
+ raw-file-sort.h \
+ poi-datamodel.h
+INCLUDEPATH += /usr/include/libxml++-2.6 \
+ /usr/lib/libxml++-2.6/include \
+ /usr/include/libxml2 \
+ /usr/include/glibmm-2.4 \
+ /usr/lib/i386-linux-gnu/glibmm-2.4/include \
+ /usr/include/glib-2.0 \
+ /usr/lib/i386-linux-gnu/glib-2.0/include
+
+LIBS += -lxml++-2.6 \
+ -lxml2 \
+ -lglibmm-2.4 \
+ -lglib-2.0 \
+ -lgobject-2.0 \
+ -lsqlite3
+
diff --git a/test/poi-service/poi-supplier/raw-file-sort.cpp b/test/poi-service/poi-supplier/raw-file-sort.cpp
new file mode 100644
index 0000000..0aea306
--- /dev/null
+++ b/test/poi-service/poi-supplier/raw-file-sort.cpp
@@ -0,0 +1,532 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file raw-file-sort.cpp
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#include "poi-datamodel.h"
+#include "raw-file-sort.h"
+
+/**
+ * \def std::string toString(const T& t)
+ * \brief Macro to move into a string.
+ * \param numeric value
+*/
+template<class T>
+ std::string toString(const T& t)
+{
+ std::ostringstream stream;
+ stream << t;
+ return stream.str();
+}
+
+/**
+ * \def std::string toString(const T& t)
+ * \brief Macro to move into a numeric value.
+ * \param string
+ * the third parameter of from_string() should be one of std::hex, std::dec or std::oct
+ *
+*/
+template <class T>
+bool from_string(T& t,
+ const Glib::ustring& s,
+ std::ios_base& (*f)(std::ios_base&))
+{
+ std::istringstream iss(s);
+ return !(iss >> f >> t).fail();
+}
+
+void clear_string(Glib::ustring* str)
+{
+ std::string::size_type index = 0;
+ /*
+ while ((index = str->find('\'', index)) != std::string::npos)
+ {
+ str->replace(index++, 1, "\"");
+ }
+ */
+}
+
+/**
+ * \fn void xml_parser (Glib::ustring file_to_parse, std::string sort_primary_key, std::string* sort_list, uint8_t sort_list_size, poi_t* poi_buffer,uint16_t* poi_buffer_index)
+ * \brief Function to parse and extract the POI from an xml file.
+ *
+ * \param Glib::ustring file_to_parse -Name of the file to parse
+ * \param std::string sort_primary_key -Primary key to find (e.g. "tourism")
+ * \param std::string* sort_list -List of secondary keys to find (e.g. "museum" or "hotel")
+ * \param uint8_t sort_list_size -Number of secondary keys to find
+ * \param poi_t* poi_buffer -Buffer of poi populated by the function
+ * \param uint16_t* poi_buffer_index -Number of poi found
+ * \return void.
+ */
+void xml_parser(Glib::ustring file_to_parse, std::string sort_primary_key, std::string* sort_list, uint8_t sort_list_size, poi_t* poi_buffer,uint16_t* poi_buffer_index)
+{
+ geo_node_t geo_node_buffer[GEO_NODE_BUFFER_SIZE]; // table to store the geo locations, for the time being, all the lat lon node are stored
+ uint16_t geo_node_buffer_index = 0; //index of the next free row in the geo_node_buffer
+
+ uint64_t node_buffer[NODE_BUFFER_SIZE]; // table to store the nd id
+ uint16_t node_buffer_index = 0; //index of the next free row in the node_buffer
+
+ geo_node_t node; //temporary geo node
+ poi_t poi; //temporary poi
+ INIT_DEFAULT_POI(node,poi); //set the node and the poi to default value (in case of missing fields into the xml file)
+
+ *poi_buffer_index = 0; //for the moment, no poi into the buffer
+
+ uint16_t sort_index = 0; //generic index
+
+ //booleans used for content analysis
+ bool is_a_geo_node = false; // true when something like that appears: <node id="1426135889" lat="48.8829411" lon="2.3077935"> or />
+ bool is_a_way = false; // true when something like that appears: <way id="68353844">
+ bool is_primary_key_found = false; //true when primary key found
+ bool is_sort_key_found = false; //true when the keys are found
+ bool is_a_poi_name = false; //true when something like that appears: <tag k="name" v="xxxx"/>
+ bool is_a_poi_phone = false; //true when something like that appears: <tag k="phone" v="xxxx"/>
+ bool is_a_poi_website = false; //true when something like that appears: <tag k="website" v="xxxx"/>
+ bool is_a_poi_stars = false; //true when something like that appears: <tag k="stars" v="x"/>
+ bool is_a_poi_source = false; //true when something like that appears: <tag k="source" v="xxxx"/>
+ bool is_a_poi_opening_hours = false; //true when something like that appears: <tag k="opening_hours" v="Mo-Sa 10:00-19:15"/>
+ bool is_a_poi_addr_house_number = false; //true when something like that appears: <tag k="addr:housenumber" v="139"/>
+ bool is_a_poi_addr_street = false; //true when something like that appears: <tag k="addr:street" v="Boulevard Voltaire"/>
+ bool is_a_poi_addr_postcode = false; //true when something like that appears: <tag k="addr:postcode" v="94410"/>
+ bool is_a_poi_addr_city = false; //true when something like that appears: <tag k="addr:city" v="Saint-Maurice"/>
+ bool is_a_poi_brand = false; //true when something like that appears:<tag k="brand" v="Agip"/>
+ bool is_a_poi_operateur = false; //true when something like that appears:<tag k="operator" v="Total"/>
+
+ std::string name; //name read into the xml file
+ Glib::ustring value; //value read into the xml file
+ uint8_t depth; //depth into the xml tree
+
+ xmlpp::TextReader reader(file_to_parse); //open the file to parse
+
+ while(reader.read())
+ {
+ depth = reader.get_depth();
+ name = reader.get_name();
+
+ // begin of analysis of is_a_node
+ if (is_a_geo_node == false)
+ {
+ if ((depth ==1) && (name == "node"))
+ {
+ if(reader.has_attributes())
+ {
+ reader.move_to_first_attribute();
+ do
+ {
+ name = reader.get_name();
+ value = reader.get_value();
+ if (name == "id")
+ {
+ from_string<uint64_t>(node.segment, value, std::dec);
+ }
+ if (name == "lat")
+ {
+ from_string<double>(node.latitude, value, std::dec);
+ }
+ if (name == "lon")
+ {
+ from_string<double>(node.longitude, value, std::dec);
+ is_a_geo_node = true;
+ }
+ } while(reader.move_to_next_attribute());
+ reader.move_to_element();
+ }
+ }
+ }
+ else // is_a_geo_node is true
+ { //a node 'node' already read, see next node
+ if (depth ==1)
+ { //come back from sub node analysis
+ if (is_sort_key_found)
+ {
+ if (*poi_buffer_index < POI_BUFFER_SIZE)
+ {
+ poi_buffer[*poi_buffer_index].node.segment = node.segment;
+ poi_buffer[*poi_buffer_index].node.latitude = node.latitude;
+ poi_buffer[*poi_buffer_index].node.longitude = node.longitude;
+ poi_buffer[*poi_buffer_index].category = poi.category;
+ clear_string(&poi.name);
+ poi_buffer[*poi_buffer_index].name = poi.name;
+ poi_buffer[*poi_buffer_index].phone = poi.phone;
+ clear_string(&poi.website);
+ poi_buffer[*poi_buffer_index].website = poi.website;
+ clear_string(&poi.source);
+ poi_buffer[*poi_buffer_index].source = poi.source;
+ clear_string(&poi.opening_hours);
+ poi_buffer[*poi_buffer_index].opening_hours = poi.opening_hours;
+ clear_string(&poi.addr_house_number);
+ poi_buffer[*poi_buffer_index].addr_house_number = poi.addr_house_number;
+ clear_string(&poi.addr_street);
+ poi_buffer[*poi_buffer_index].addr_street = poi.addr_street;
+ poi_buffer[*poi_buffer_index].addr_postcode = poi.addr_postcode;
+ clear_string(&poi.addr_city);
+ poi_buffer[*poi_buffer_index].addr_city = poi.addr_city;
+ poi_buffer[*poi_buffer_index].stars = poi.stars;
+ poi_buffer[*poi_buffer_index].offset = poi.offset;
+ clear_string(&poi.brand);
+ poi_buffer[*poi_buffer_index].brand = poi.brand;
+ clear_string(&poi.operateur);
+ poi_buffer[*poi_buffer_index].operateur = poi.operateur;
+ *poi_buffer_index +=1;
+ INIT_DEFAULT_POI(node,poi); //reset the node and the poi to default value
+ }
+ else
+ std::cout << "poi buffer overload";
+ is_sort_key_found = false;
+ }
+ else
+ { //next node is not a sub node
+ //save the simple node 'node' into the buffer
+ if (geo_node_buffer_index < GEO_NODE_BUFFER_SIZE)
+ {
+ geo_node_buffer[geo_node_buffer_index].segment = node.segment;
+ geo_node_buffer[geo_node_buffer_index].latitude = node.latitude;
+ geo_node_buffer[geo_node_buffer_index].longitude = node.longitude;
+ geo_node_buffer_index++;
+ }
+ else
+ std::cout << "geo node buffer overload";
+ }
+ is_a_geo_node = false;
+ }
+ else
+ { // depth is not 1
+ if ((depth == 2) && (name == "tag")&&(reader.has_attributes()))
+ {
+ reader.move_to_first_attribute();
+ do
+ {
+ name = reader.get_name();
+ value = reader.get_value();
+ if (name == "k")
+ {
+ if (value == "name")
+ is_a_poi_name = true;
+ else if (value == "phone")
+ is_a_poi_phone = true;
+ else if (value == "website")
+ is_a_poi_website = true;
+ else if (value == "stars")
+ is_a_poi_stars = true;
+ else if (value == "source")
+ is_a_poi_source = true;
+ else if (value == "opening_hours")
+ is_a_poi_opening_hours = true;
+ else if (value == "addr:housenumber")
+ is_a_poi_addr_house_number = true;
+ else if (value == "addr:street")
+ is_a_poi_addr_street = true;
+ else if (value == "addr:postcode")
+ is_a_poi_addr_postcode = true;
+ else if (value == "addr:city")
+ is_a_poi_addr_city = true;
+ else if (value == "brand")
+ is_a_poi_brand = true;
+ else if (value == "operator")
+ is_a_poi_operateur = true;
+ else if (value == sort_primary_key)
+ is_primary_key_found = true;
+ }
+
+ if ((is_a_poi_name)&&(name == "v"))
+ {
+ poi.name = value;
+ is_a_poi_name = false;
+ }
+ else if ((is_a_poi_phone)&&(name == "v"))
+ {
+ poi.phone = value;
+ is_a_poi_phone = false;
+ }
+ else if ((is_a_poi_website)&&(name == "v"))
+ {
+ poi.website = value;
+ is_a_poi_website = false;
+ }
+ else if ((is_a_poi_stars)&&(name == "v"))
+ {
+ from_string<uint16_t>(poi.stars, value, std::dec);
+ is_a_poi_stars = false;
+ }
+ else if ((is_a_poi_source)&&(name == "v"))
+ {
+ poi.source = value;
+ is_a_poi_source = false;
+ }
+ else if ((is_a_poi_opening_hours)&&(name == "v"))
+ {
+ poi.opening_hours = value;
+ is_a_poi_opening_hours = false;
+ }
+ else if ((is_a_poi_addr_house_number)&&(name == "v"))
+ {
+ poi.addr_house_number = value;
+ is_a_poi_addr_house_number = false;
+ }
+ else if ((is_a_poi_addr_street)&&(name == "v"))
+ {
+ poi.addr_street = value;
+ is_a_poi_addr_street = false;
+ }
+ else if ((is_a_poi_addr_postcode)&&(name == "v"))
+ {
+ from_string<uint16_t>(poi.addr_postcode, value, std::dec);
+ is_a_poi_addr_postcode = false;
+ }
+ else if ((is_a_poi_addr_city)&&(name == "v"))
+ {
+ poi.addr_city = value;
+ is_a_poi_addr_city = false;
+ }
+ else if ((is_a_poi_operateur)&&(name == "v"))
+ {
+ poi.operateur = value;
+ is_a_poi_operateur = false;
+ }
+ else if ((is_a_poi_brand)&&(name == "v"))
+ {
+ poi.brand = value;
+ is_a_poi_brand = false;
+ }
+ else if ((is_primary_key_found)&&(name == "v"))
+ {
+ poi.category = value;
+ is_primary_key_found = false;
+ sort_index = 0;
+ do {
+ if (value == sort_list[sort_index])
+ is_sort_key_found = true; // sort key found
+ } while ((++sort_index < sort_list_size) && (is_sort_key_found == false));
+ }
+ } while(reader.move_to_next_attribute());
+ reader.move_to_element();
+ }
+ }
+ }
+ // begin of analysis of is_a_way
+ if (is_a_way == false)
+ {
+ if ((depth ==1) && (name == "way"))
+ is_a_way = true;
+ }
+ else //is_a_way is true
+ { //a node 'way' already read, see next node
+ if (depth ==1)
+ { //come back from sub node analysis
+ if (is_sort_key_found)
+ {
+ if (*poi_buffer_index < POI_BUFFER_SIZE)
+ {
+ // looking for geo coordinate
+ if (geo_node_buffer_index > 0)
+ { //at least one position available, can search for the id
+ sort_index = 0;
+ do
+ {
+ if (node_buffer[0] == geo_node_buffer[sort_index].segment)
+ { // for the moment, just use id of the first node stored into node_buffer[0]
+ poi_buffer[*poi_buffer_index].node.segment = geo_node_buffer[sort_index].segment;
+ poi_buffer[*poi_buffer_index].node.latitude = geo_node_buffer[sort_index].latitude;
+ poi_buffer[*poi_buffer_index].node.longitude = geo_node_buffer[sort_index].longitude;
+ poi_buffer[*poi_buffer_index].category = poi.category;
+ clear_string(&poi.name);
+ poi_buffer[*poi_buffer_index].name = poi.name;
+ poi_buffer[*poi_buffer_index].phone = poi.phone;
+ clear_string(&poi.website);
+ poi_buffer[*poi_buffer_index].website = poi.website;
+ clear_string(&poi.source);
+ poi_buffer[*poi_buffer_index].source = poi.source;
+ clear_string(&poi.opening_hours);
+ poi_buffer[*poi_buffer_index].opening_hours = poi.opening_hours;
+ clear_string(&poi.addr_house_number);
+ poi_buffer[*poi_buffer_index].addr_house_number = poi.addr_house_number;
+ clear_string(&poi.addr_street);
+ poi_buffer[*poi_buffer_index].addr_street = poi.addr_street;
+ poi_buffer[*poi_buffer_index].addr_postcode = poi.addr_postcode;
+ clear_string(&poi.addr_city);
+ poi_buffer[*poi_buffer_index].addr_city = poi.addr_city;
+ poi_buffer[*poi_buffer_index].stars = poi.stars;
+ poi_buffer[*poi_buffer_index].offset = poi.offset;
+ clear_string(&poi.brand);
+ poi_buffer[*poi_buffer_index].brand = poi.brand;
+ clear_string(&poi.operateur);
+ poi_buffer[*poi_buffer_index].operateur = poi.operateur;
+ *poi_buffer_index +=1;
+ break; // found so not necessary to go forward
+ }
+ } while (++sort_index < geo_node_buffer_index);
+ if (sort_index == geo_node_buffer_index)
+ {
+
+ }
+ }
+ INIT_DEFAULT_POI(node,poi); //reset the node and the poi to default value
+ }
+ else
+ std::cout << "poi buffer overload";
+ is_sort_key_found = false;
+ }
+ node_buffer_index = 0; //reset for the next way
+ is_a_way = false;
+ }
+ else
+ {
+ if (depth == 2)
+ { // next node will be a sub node to be checked
+ if (name == "nd")
+ { //search for the specific nd
+ if(reader.has_attributes())
+ {
+ reader.move_to_first_attribute();
+ name = reader.get_name();
+ value = reader.get_value();
+ if (name == "ref")
+ {
+ if (node_buffer_index < NODE_BUFFER_SIZE)
+ { //save the sub node 'nd' into the buffer
+ from_string<uint64_t>(node_buffer[node_buffer_index], value, std::dec);
+ node_buffer_index++;
+ }
+ else
+ std::cout << "node buffer overload";
+ }
+ }
+ }
+ if ((name == "tag")&&(reader.has_attributes()))
+ {
+ reader.move_to_first_attribute();
+ do
+ {
+ name = reader.get_name();
+ value = reader.get_value();
+ if (name == "k")
+ {
+ if (value == "name")
+ is_a_poi_name = true;
+ else if (value == "phone")
+ is_a_poi_phone = true;
+ else if (value == "website")
+ is_a_poi_website = true;
+ else if (value == "stars")
+ is_a_poi_stars = true;
+ else if (value == "source")
+ is_a_poi_source = true;
+ else if (value == "opening_hours")
+ is_a_poi_opening_hours = true;
+ else if (value == "addr:housenumber")
+ is_a_poi_addr_house_number = true;
+ else if (value == "addr:street")
+ is_a_poi_addr_street = true;
+ else if (value == "addr:postcode")
+ is_a_poi_addr_postcode = true;
+ else if (value == "addr:city")
+ is_a_poi_addr_city = true;
+ else if (value == "operator")
+ is_a_poi_operateur = true;
+ else if (value == "brand")
+ is_a_poi_brand = true;
+ else if (value == sort_primary_key)
+ is_primary_key_found = true;
+ }
+
+ if ((is_a_poi_name)&&(name == "v"))
+ {
+ poi.name = value;
+ is_a_poi_name = false;
+ }
+ else if ((is_a_poi_phone)&&(name == "v"))
+ {
+ poi.phone = value;
+ is_a_poi_phone = false;
+ }
+ else if ((is_a_poi_website)&&(name == "v"))
+ {
+ poi.website = value;
+ is_a_poi_website = false;
+ }
+ else if ((is_a_poi_stars)&&(name == "v"))
+ {
+ from_string<uint16_t>(poi.stars, value, std::dec);
+ is_a_poi_stars = false;
+ }
+ else if ((is_a_poi_source)&&(name == "v"))
+ {
+ poi.source = value;
+ is_a_poi_source = false;
+ }
+ else if ((is_a_poi_opening_hours)&&(name == "v"))
+ {
+ poi.opening_hours = value;
+ is_a_poi_opening_hours = false;
+ }
+ else if ((is_a_poi_addr_house_number)&&(name == "v"))
+ {
+ poi.addr_house_number = value;
+ is_a_poi_addr_house_number = false;
+ }
+ else if ((is_a_poi_addr_street)&&(name == "v"))
+ {
+ poi.addr_street = value;
+ is_a_poi_addr_street = false;
+ }
+ else if ((is_a_poi_addr_postcode)&&(name == "v"))
+ {
+ from_string<uint16_t>(poi.addr_postcode, value, std::dec);
+ is_a_poi_addr_postcode = false;
+ }
+ else if ((is_a_poi_addr_city)&&(name == "v"))
+ {
+ poi.addr_city = value;
+ is_a_poi_addr_city = false;
+ }
+ else if ((is_a_poi_operateur)&&(name == "v"))
+ {
+ poi.operateur = value;
+ is_a_poi_operateur = false;
+ }
+ else if ((is_a_poi_brand)&&(name == "v"))
+ {
+ poi.brand = value;
+ is_a_poi_brand = false;
+ }
+ else if ((is_primary_key_found)&&(name == "v"))
+ {
+ poi.category = value;
+ is_primary_key_found = false;
+ sort_index = 0;
+ do {
+ if (value == sort_list[sort_index])
+ is_sort_key_found = true; // sort key found
+ } while ((++sort_index < sort_list_size) && (is_sort_key_found == false));
+ }
+ } while(reader.move_to_next_attribute());
+ reader.move_to_element();
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/test/poi-service/poi-supplier/raw-file-sort.h b/test/poi-service/poi-supplier/raw-file-sort.h
new file mode 100644
index 0000000..b4d937f
--- /dev/null
+++ b/test/poi-service/poi-supplier/raw-file-sort.h
@@ -0,0 +1,67 @@
+/**
+* @licence app begin@
+* SPDX-License-Identifier: MPL-2.0
+*
+* \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+*
+* \file raw-file-sort.h
+*
+* \brief This file is part of the poi proof of concept.
+*
+* \author Philippe Colliot <philippe.colliot@mpsa.com>
+*
+* \version 1.1
+*
+* This Source Code Form is subject to the terms of the
+* Mozilla Public License (MPL), v. 2.0.
+* If a copy of the MPL was not distributed with this file,
+* You can obtain one at http://mozilla.org/MPL/2.0/.
+*
+* For further information see http://www.genivi.org/.
+*
+* List of changes:
+* 10-02-2014, Philippe Colliot, refinement and migration to the new repository
+* <date>, <name>, <description of change>
+*
+* @licence end@
+*/
+
+#ifndef __RAW_FILE_SORT_H__
+#define __RAW_FILE_SORT_H__
+
+#include <stdbool.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <iostream>
+#include <stdlib.h>
+#include <stdint.h>
+#include <sys/types.h>
+
+#include <libxml++/libxml++.h>
+#include <libxml++/parsers/textreader.h>
+
+/**
+ * \enum CONSTANTS
+ * \brief Miscellaneous constants.
+ *
+ */
+enum CONSTANTS {
+ GEO_NODE_BUFFER_SIZE = 5000,
+ POI_BUFFER_SIZE = 2000,
+ NODE_BUFFER_SIZE = 10000
+};
+
+
+/**
+ * \def INIT_DEFAULT_POI(node, poi)
+ * \brief Macro to set to default values.
+ * \param node and poi
+ *
+*/
+#define INIT_DEFAULT_POI(node, poi) { (node.segment = 0);(node.latitude = 0);(node.longitude = 0);(poi.category = "default");(poi.name = "default");(poi.phone = "default");(poi.website = "default");(poi.source = "default");(poi.opening_hours = "default");(poi.stars = 0);(poi.addr_house_number = "default");(poi.addr_street = "default");(poi.addr_postcode = 0);(poi.addr_city = "default");(poi.altitude = 0);(poi.offset = 0);;(poi.brand = "default");(poi.operateur = "default"); }
+
+
+void clear_string(Glib::ustring *str);
+void xml_parser(Glib::ustring file_to_parse, std::string sort_primary_key, std::string* sort_list, uint8_t sort_list_size, poi_t* poi_buffer,uint16_t* poi_buffer_index);
+
+#endif
diff --git a/test/poi-service/resource/LICENSE b/test/poi-service/resource/LICENSE
new file mode 100644
index 0000000..8a44f66
--- /dev/null
+++ b/test/poi-service/resource/LICENSE
@@ -0,0 +1,2 @@
+* Creative Commons Attribution Share-Alike 3.0 License
+* Thanks to Maps Icons Collection http://mapicons.nicolasmollet.com
diff --git a/test/poi-service/resource/airport.png b/test/poi-service/resource/airport.png
new file mode 100644
index 0000000..90ce0b0
--- /dev/null
+++ b/test/poi-service/resource/airport.png
Binary files differ
diff --git a/test/poi-service/resource/bicycle_shop.png b/test/poi-service/resource/bicycle_shop.png
new file mode 100644
index 0000000..aeb6e4b
--- /dev/null
+++ b/test/poi-service/resource/bicycle_shop.png
Binary files differ
diff --git a/test/poi-service/resource/car.png b/test/poi-service/resource/car.png
new file mode 100644
index 0000000..db73b2c
--- /dev/null
+++ b/test/poi-service/resource/car.png
Binary files differ
diff --git a/test/poi-service/resource/fillingstation.png b/test/poi-service/resource/fillingstation.png
new file mode 100644
index 0000000..e6a3aad
--- /dev/null
+++ b/test/poi-service/resource/fillingstation.png
Binary files differ
diff --git a/test/poi-service/resource/hotel_0star.png b/test/poi-service/resource/hotel_0star.png
new file mode 100644
index 0000000..a39c20b
--- /dev/null
+++ b/test/poi-service/resource/hotel_0star.png
Binary files differ
diff --git a/test/poi-service/resource/museum_art.png b/test/poi-service/resource/museum_art.png
new file mode 100644
index 0000000..a069b4a
--- /dev/null
+++ b/test/poi-service/resource/museum_art.png
Binary files differ
diff --git a/test/poi-service/resource/restaurant.png b/test/poi-service/resource/restaurant.png
new file mode 100644
index 0000000..76ea9f0
--- /dev/null
+++ b/test/poi-service/resource/restaurant.png
Binary files differ
diff --git a/test/poi-service/resource/train.png b/test/poi-service/resource/train.png
new file mode 100644
index 0000000..2b5cf95
--- /dev/null
+++ b/test/poi-service/resource/train.png
Binary files differ
diff --git a/test/poi-service/resource/world.png b/test/poi-service/resource/world.png
new file mode 100644
index 0000000..40790ae
--- /dev/null
+++ b/test/poi-service/resource/world.png
Binary files differ
diff --git a/test/poi-service/script/Makefile b/test/poi-service/script/Makefile
new file mode 100644
index 0000000..366f779
--- /dev/null
+++ b/test/poi-service/script/Makefile
@@ -0,0 +1,61 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file Makefile
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+
+ROOT_DIR=$(CURDIR)/..
+API_DIR=$(CURDIR)/../../../api
+BIN_DIR=$(ROOT_DIR)/bin
+COMMON_DIR=$(ROOT_DIR)/poi-common
+EXE_DIR=$(BIN_DIR)
+SERVER_DIR=$(CURDIR)/../../../src/poi-service/script/
+QMAKE=qmake
+CXX=g++
+CXXFLAGS=-pipe -O2 -Wall
+CHK_DIR_EXISTS=test -d
+MKDIR=mkdir -p
+
+default: help
+
+help::
+ @echo "The following targets exist"
+ @echo "all: Build $(ALL)"
+ @echo "clean: Clean up build dir"
+
+#Generate the proxies and adaptors for the DBus APIs first
+include generate-api.mk
+
+include poi-supplier.mk
+include poi-client.mk
+include poi-contentaccess-module.mk
+
+all: $(ALL)
+
+deps::
+ sudo apt-get install $(DEPS)
+
+all2: deps all
+
+clean: $(CLEAN)
+
diff --git a/test/poi-service/script/create-scheme.sql b/test/poi-service/script/create-scheme.sql
new file mode 100644
index 0000000..154f550
--- /dev/null
+++ b/test/poi-service/script/create-scheme.sql
@@ -0,0 +1,262 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2011-2012 PCA Peugeot Citroën
+ *
+ * This file is part of GENIVI Project POISearch Proof Of Concept [POIPOCSupplier].
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * \file CreateScheme.sql
+ * Modifications:
+ * 19-12-2013 Philippe Colliot
+ * add new fields to poi (brand and operateur)
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+
+/*
+* Table of available area
+*/
+DROP TABLE IF EXISTS availablearea;
+CREATE TABLE availablearea (
+ Id int NOT NULL,
+ leftlongitude double DEFAULT NULL,
+ bottomlatitude double DEFAULT NULL,
+ rightlongitude double DEFAULT NULL,
+ toplatitude double DEFAULT NULL,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of available attribute
+*/
+DROP TABLE IF EXISTS poiattribute;
+CREATE TABLE poiattribute (
+ Id int NOT NULL,
+ name text UNIQUE,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of poi
+*/
+DROP TABLE IF EXISTS poi;
+CREATE TABLE poi (
+ Id int NOT NULL,
+ name text UNIQUE,
+ latitude double DEFAULT NULL,
+ longitude double DEFAULT NULL,
+ altitude int DEFAULT NULL,
+ segment int DEFAULT NULL,
+ offset int DEFAULT NULL,
+ source text,
+ website text,
+ phone text,
+ stars int,
+ openingHours text,
+ addrHouseNumber text,
+ addrStreet text,
+ addrPostCode int,
+ addrCity text,
+ brand text,
+ operateur text,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of category
+*/
+DROP TABLE IF EXISTS poicategory;
+CREATE TABLE poicategory (
+ Id int NOT NULL,
+ name text UNIQUE,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of kinship between categories
+*/
+DROP TABLE IF EXISTS poicategorykinship;
+CREATE TABLE poicategorykinship (
+ Id int NOT NULL,
+ childId int NOT NULL,
+ parentId int NOT NULL,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of provider
+*/
+DROP TABLE IF EXISTS poiprovider;
+CREATE TABLE poiprovider (
+ Id int NOT NULL,
+ name text UNIQUE,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of icons
+*/
+DROP TABLE IF EXISTS iconset;
+CREATE TABLE iconset (
+ Id int NOT NULL,
+ width int DEFAULT NULL,
+ height int DEFAULT NULL,
+ url text DEFAULT NULL,
+ format text DEFAULT NULL,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Table of media files
+*/
+DROP TABLE IF EXISTS mediaset;
+CREATE TABLE mediaset (
+ Id int NOT NULL,
+ description text DEFAULT NULL,
+ url text DEFAULT NULL,
+ format text DEFAULT NULL,
+ PRIMARY KEY (Id)
+);
+
+/*
+* Link between a poicategory and an attribute
+* (followed by the associated triggers)
+*/
+DROP TABLE IF EXISTS hasattribute;
+CREATE TABLE hasattribute (
+ Id int NOT NULL,
+ poicategory_Id int NOT NULL,
+ poiattribute_Id int NOT NULL,
+ PRIMARY KEY (Id,poiattribute_Id,poicategory_Id),
+ FOREIGN KEY (poicategory_Id)
+ REFERENCES poicategory(Id)
+ FOREIGN KEY (poiattribute_Id)
+ REFERENCES poiattribute(Id)
+);
+DROP TRIGGER IF EXISTS trig_poiattribute_Id;
+CREATE TRIGGER trig_poiattribute_Id
+BEFORE INSERT ON [hasattribute]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poiattribute WHERE Id = NEW.poiattribute_Id) IS NULL;
+END;
+DROP TRIGGER IF EXISTS trig_poicategory1_Id;
+CREATE TRIGGER trig_poicategory1_Id
+BEFORE INSERT ON [hasattribute]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poicategory WHERE Id = NEW.poicategory_Id) IS NULL;
+END;
+
+/*
+* Link between a poicategory and an icon (restricted to only one icon per category)
+* (followed by the associated triggers)
+*/
+DROP TABLE IF EXISTS isdisplayedas;
+CREATE TABLE isdisplayedas (
+ Id int NOT NULL,
+ poicategory_Id int NOT NULL,
+ iconset_Id int NOT NULL,
+ PRIMARY KEY (Id,poicategory_Id,iconset_Id),
+ FOREIGN KEY (poicategory_Id)
+ REFERENCES poicategory(Id)
+ FOREIGN KEY (iconset_Id)
+ REFERENCES iconset(Id)
+);
+DROP TRIGGER IF EXISTS trig_iconset_Id;
+CREATE TRIGGER trig_iconset_Id
+BEFORE INSERT ON [isdisplayedas]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM iconset WHERE Id = NEW.iconset_Id) IS NULL;
+END;
+DROP TRIGGER IF EXISTS trig_poicategory_Id;
+CREATE TRIGGER trig_poicategory_Id
+BEFORE INSERT ON [isdisplayedas]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poicategory WHERE Id = NEW.poicategory_Id) IS NULL;
+END;
+
+/*
+* Link between a poi, a poicategory and a poiprovider
+* (followed by the associated triggers)
+*/
+DROP TABLE IF EXISTS belongsto;
+CREATE TABLE belongsto (
+ Id int NOT NULL,
+ poi_Id int NOT NULL,
+ poicategory_Id int NOT NULL,
+ poiprovider_Id int NOT NULL,
+ PRIMARY KEY (Id,poi_Id,poicategory_Id,poiprovider_Id),
+ FOREIGN KEY (poiprovider_Id)
+ REFERENCES poiprovider(Id)
+ FOREIGN KEY (poicategory_Id)
+ REFERENCES poicategory(Id)
+ FOREIGN KEY (poi_Id)
+ REFERENCES poi(Id)
+);
+DROP TRIGGER IF EXISTS trig_poiprovider_Id;
+CREATE TRIGGER trig_poiprovider_Id
+BEFORE INSERT ON [belongsto]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poiprovider WHERE Id = NEW.poiprovider_Id) IS NULL;
+END;
+DROP TRIGGER IF EXISTS trig_poicategory_Id;
+CREATE TRIGGER trig_poicategory_Id
+BEFORE INSERT ON [belongsto]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poicategory WHERE Id = NEW.poicategory_Id) IS NULL;
+END;
+DROP TRIGGER IF EXISTS trig_poi_Id;
+CREATE TRIGGER trig_poi_Id
+BEFORE INSERT ON [belongsto]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poi WHERE Id = NEW.poi_Id) IS NULL;
+END;
+
+/*
+* Link between a poi and an media file (restricted to only one media file per poi)
+* (followed by the associated triggers)
+*/
+DROP TABLE IF EXISTS isshownas;
+CREATE TABLE isshownas (
+ Id int NOT NULL,
+ poi_Id int NOT NULL,
+ mediaset_Id int NOT NULL,
+ PRIMARY KEY (Id,poi_Id,mediaset_Id),
+ FOREIGN KEY (poi_Id)
+ REFERENCES poi(Id)
+ FOREIGN KEY (mediaset_Id)
+ REFERENCES mediaset(Id)
+);
+DROP TRIGGER IF EXISTS trig_mediaset_Id;
+CREATE TRIGGER trig_mediaset_Id
+BEFORE INSERT ON [isshownas]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM mediaset WHERE Id = NEW.mediaset_Id) IS NULL;
+END;
+DROP TRIGGER IF EXISTS trig_poi1_Id;
+CREATE TRIGGER trig_poi1_Id
+BEFORE INSERT ON [isshownas]
+FOR EACH ROW BEGIN
+ SELECT RAISE(ROLLBACK, 'key violation...')
+ WHERE (SELECT Id FROM poi WHERE Id = NEW.poi_Id) IS NULL;
+END;
+
+
+
diff --git a/test/poi-service/script/generate-api.mk b/test/poi-service/script/generate-api.mk
new file mode 100644
index 0000000..7e2fca6
--- /dev/null
+++ b/test/poi-service/script/generate-api.mk
@@ -0,0 +1,93 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file generate-api.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+COMMON_DIR=$(ROOT_DIR)/poi-common
+TARGET_GENERATED_API_DIR=$(COMMON_DIR)
+
+ALL+=generate-api
+CLEAN+=clean-generate-api
+
+help::
+ @echo "generate-api: Generate the proxies and adaptors"
+
+generate-api: generate-api-poi generate-api-other
+
+clean-generate-api::
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_adaptor.h
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_proxy.h
+ rm -rf ${TARGET_GENERATED_API_DIR}/*_constants.h
+
+generate-api-poi: ${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-contentaccessmodule.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-contentaccessmodule_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poicontentaccess.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poicontentaccess_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h: ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h: ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml
+ dbusxx-xml2cpp ${API_DIR}/poi-service/genivi-poiservice-poisearch.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-poiservice-poisearch_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h: ${API_DIR}/poi-service/genivi-poiservice-constants.xml
+ xsltproc ${API_DIR}/poi-service/enum.xsl ${API_DIR}/poi-service/genivi-poiservice-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-poiservice-constants.h
+
+generate-api-other: ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h ${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h ${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h: ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h: ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-guidance.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-guidance_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h: ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h: ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml
+ dbusxx-xml2cpp ${API_DIR}/navigation-core/genivi-navigationcore-routing.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-navigationcore-routing_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h: ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml
+ dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --adaptor=${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_adaptor.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h: ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml
+ dbusxx-xml2cpp ${API_DIR}/enhanced-position-service/genivi-positioning-enhancedposition.xml --proxy=${TARGET_GENERATED_API_DIR}/genivi-positioning-enhancedposition_proxy.h
+
+${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h: ${API_DIR}/navigation-core/genivi-navigationcore-constants.xml
+ xsltproc ${API_DIR}/navigation-core/enum.xsl ${API_DIR}/navigation-core/genivi-navigationcore-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-navigationcore-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h: ${API_DIR}/enhanced-position-service/genivi-positioning-constants.xml
+ xsltproc ${API_DIR}/enhanced-position-service/enum.xsl ${API_DIR}/enhanced-position-service/genivi-positioning-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-positioning-constants.h
+
+${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h: ${API_DIR}/map-viewer/genivi-mapviewer-constants.xml
+ xsltproc ${API_DIR}/map-viewer/enum.xsl ${API_DIR}/map-viewer/genivi-mapviewer-constants.xml > ${TARGET_GENERATED_API_DIR}/genivi-mapviewer-constants.h
+
diff --git a/test/poi-service/script/kill-all b/test/poi-service/script/kill-all
new file mode 100755
index 0000000..510d023
--- /dev/null
+++ b/test/poi-service/script/kill-all
@@ -0,0 +1,4 @@
+#!/bin/sh
+echo 'kill all remaining process'
+kill -9 `ps -ef | grep poi- | grep -v grep | awk '{print $2}'`
+
diff --git a/test/poi-service/script/make-database b/test/poi-service/script/make-database
new file mode 100755
index 0000000..223aec9
--- /dev/null
+++ b/test/poi-service/script/make-database
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file make-database
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+
+CURDIR=$PWD
+ROOT_DIR=$CURDIR/..
+BIN_DIR=$ROOT_DIR/bin
+EXE_DIR=$BIN_DIR
+CHK_DIR_EXISTS='test -d'
+MKDIR='mkdir -p'
+
+if [ $# -eq 0 ]
+ then
+ echo "Set city area (supported values: paris,tokyo,san-diego)"
+ exit
+fi
+
+#folder that contains the downloaded poi files
+POI_FILES_DIR=$ROOT_DIR/script/$1
+
+FUEL_FILE=$POI_FILES_DIR/'fuel-station.xml'
+MUSEUM_AND_HOTEL_FILE=$POI_FILES_DIR/'museum-and-hotel.xml'
+STATION_FILE=$POI_FILES_DIR/'station.xml'
+BICYCLE_FILE=$POI_FILES_DIR/'bicycle.xml'
+MAIN_DATABASE=$EXE_DIR/'poi-database.db'
+ADDITIONAL_DATABASE=$EXE_DIR/'poi-database-additional.db'
+
+if [ ! -f $FUEL_FILE ]
+then
+ echo $FUEL_FILE does not exist
+ exit
+fi
+if [ ! -f $MUSEUM_AND_HOTEL_FILE ]
+then
+ echo $MUSEUM_AND_HOTEL_FILE does not exist
+ exit
+fi
+if [ ! -f $STATION_FILE ]
+then
+ echo $STATION_FILE does not exist
+ exit
+fi
+if [ ! -f $BICYCLE_FILE ]
+then
+ echo $BICYCLE_FILE does not exist
+ exit
+fi
+
+echo 'clean up'
+rm $EXE_DIR/*.db
+echo 'create empty databases'
+cp poi-database-empty $MAIN_DATABASE
+cp poi-database-empty $ADDITIONAL_DATABASE
+echo 'create the main databases for the poi-client'
+sqlite3 $MAIN_DATABASE < create-scheme.sql
+sqlite3 $MAIN_DATABASE < populate-database.sql
+$EXE_DIR/poi-supplier -p $MAIN_DATABASE $FUEL_FILE primary=amenity secondary=fuel,
+$EXE_DIR/poi-supplier -p $MAIN_DATABASE $MUSEUM_AND_HOTEL_FILE primary=tourism secondary=museum,hotel,
+$EXE_DIR/poi-supplier -p $MAIN_DATABASE $STATION_FILE primary=railway secondary=station,
+echo 'create the additional database for the poi-content-access-client'
+sqlite3 $ADDITIONAL_DATABASE < create-scheme.sql
+sqlite3 $ADDITIONAL_DATABASE < populate-database-additional.sql
+$EXE_DIR/poi-supplier -p $ADDITIONAL_DATABASE $BICYCLE_FILE primary=shop secondary=bicycle,
+
diff --git a/test/poi-service/script/paris/bicycle.xml b/test/poi-service/script/paris/bicycle.xml
new file mode 100644
index 0000000..5060f25
--- /dev/null
+++ b/test/poi-service/script/paris/bicycle.xml
@@ -0,0 +1,475 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2012-11-19T13:19:02Z"/>
+
+ <node id="251373376" lat="48.8402323" lon="2.3503076">
+ <tag k="name" v="Gepetto &amp; Vélos"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="287611762" lat="48.8626879" lon="2.3507834">
+ <tag k="addr:housenumber" v="52"/>
+ <tag k="name" v="Au Réparateur de Bicyclettes"/>
+ <tag k="opening_hours" v="Mo-Sa 10:00-19:15"/>
+ <tag k="phone" v="01 48 04 51 19"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.aureparateurdebicyclettes.fr/"/>
+ </node>
+ <node id="287612106" lat="48.8775699" lon="2.3374536">
+ <tag k="email" v="contact@velo-electro.com"/>
+ <tag k="name" v="Vélo Electro"/>
+ <tag k="opening_hours" v="Tu-Fr 10:00-14:30,15:30-19:30; Sa 10:00-19:30"/>
+ <tag k="phone" v="01 42 81 54 68"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.velo-electro.com/"/>
+ </node>
+ <node id="381167598" lat="48.8338563" lon="2.3018511">
+ <tag k="name" v="Neovelo"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406633544" lat="48.8559475" lon="2.3835669">
+ <tag k="addr:housenumber" v="139"/>
+ <tag k="addr:street" v="Boulevard Voltaire"/>
+ <tag k="name" v="Les Petits Vélos de Maurice"/>
+ <tag k="phone" v="01 44 93 79 84"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406635770" lat="48.8565271" lon="2.3804575">
+ <tag k="name" v="RapidVélos"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406637567" lat="48.8501427" lon="2.3910294">
+ <tag k="name" v="Cycles Pliants Expansion"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406638261" lat="48.8500086" lon="2.3911871">
+ <tag k="name" v="Velectris"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406639776" lat="48.8499064" lon="2.3992524">
+ <tag k="name" v="Cycles Delcayre"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://cyclesdelcayre.fr/"/>
+ </node>
+ <node id="406641765" lat="48.8463287" lon="2.4117690">
+ <tag k="name" v="Rando Cycles"/>
+ <tag k="opening_hours" v="Tu-Sa 10:00-13:00 14:00-19:00; Sa 10:00-13:00 14:00-18:00"/>
+ <tag k="phone" v="01 43 41 18 10"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.rando-cycles.com/"/>
+ </node>
+ <node id="406649851" lat="48.8680273" lon="2.3900290">
+ <tag k="name" v="BMG Baillou"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406651951" lat="48.8661485" lon="2.3664546">
+ <tag k="addr:housename" v="9"/>
+ <tag k="name" v="Cycles Laurent"/>
+ <tag k="opening_hours" v="mo-sa 10:00-18:45"/>
+ <tag k="phone" v="01 47 00 27 47"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.cycles-laurent-paris.fr/"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406653301" lat="48.8610925" lon="2.3705079">
+ <tag k="name" v="Paris à Vélo, c’est Sympa"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406654663" lat="48.8568808" lon="2.3729654">
+ <tag k="addr:housename" v="7"/>
+ <tag k="name" v="Bicloune"/>
+ <tag k="opening_hours" v="Tu, We, Fr 13:00-18:00; Tu 13:00-20:00; Sa 09:30-12:00 13:00-18:00"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.bicloune.fr/"/>
+ </node>
+ <node id="406659843" lat="48.8596055" lon="2.3672696">
+ <tag k="name" v="Cycl'Art by Bicloune"/>
+ <tag k="opening_hours" v="Tu-Sa 10:00-13:00 14:00-19:00"/>
+ <tag k="phone" v="01 42 77 58 06"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.bicloune.fr/"/>
+ </node>
+ <node id="406661388" lat="48.8619149" lon="2.3649376">
+ <tag k="name" v="Preya cycle"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406661925" lat="48.8626851" lon="2.3636889">
+ <tag k="name" v="Paris Bike Tour"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406664708" lat="48.8456128" lon="2.3401302">
+ <tag k="addr:housenumber" v="81"/>
+ <tag k="name" v="Au Point Vélo Hollandais"/>
+ <tag k="phone" v="01 43 54 85 36"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.velo-ville-hollandais.fr/; http://www.pointvelo.com/"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406666447" lat="48.8396531" lon="2.3561742">
+ <tag k="name" v="Paris Vélo Rent a Bike"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406669671" lat="48.8353354" lon="2.3239365">
+ <tag k="name" v="Gitane cycles"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406670408" lat="48.8451785" lon="2.3193421">
+ <tag k="name" v="Bike in Paris"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406674136" lat="48.8496463" lon="2.3235990">
+ <tag k="name" v="Les Vélos Parisiens"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406676109" lat="48.8524944" lon="2.3375559">
+ <tag k="name" v="Cycle Centre"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406678204" lat="48.8393787" lon="2.3607356">
+ <tag k="name" v="Esprit Vélo"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406680366" lat="48.8231494" lon="2.3553016">
+ <tag k="addr:housenumber" v="34"/>
+ <tag k="addr:street" v="Rue Damesme"/>
+ <tag k="name" v="Cyclo Sport 34"/>
+ <tag k="opening_hours" v="Tu-Fr 09:30-12:30 14:00-19:00; Sa 09:30-12:30 14:00-18:00"/>
+ <tag k="phone" v="01 45 88 50 04"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406683542" lat="48.8224146" lon="2.3462367">
+ <tag k="addr:housenumber" v="14"/>
+ <tag k="addr:street" v="Place de Rungis"/>
+ <tag k="name" v="Mountain Biker"/>
+ <tag k="opening_hours" v="Tu-Fr 10:00-19:00; Sa 10:00-18:30"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.mountainbikerparis.fr/"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="406687039" lat="48.8275570" lon="2.3331644">
+ <tag k="name" v="Rasan Bike"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406692819" lat="48.8904588" lon="2.3845951">
+ <tag k="name" v="Cyclo Pouce"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406696580" lat="48.8802190" lon="2.3670520">
+ <tag k="name" v="Valmy Cycle"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="406698923" lat="48.8821782" lon="2.3636917">
+ <tag k="name" v="Le Petit Boyauteur"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="408498997" lat="48.8620618" lon="2.3399933">
+ <tag k="addr:housenumber" v="156"/>
+ <tag k="addr:street" v="Rue Saint-Honoré"/>
+ <tag k="name" v="Cycles Saint-Honoré"/>
+ <tag k="opening_hours" v="mo-fr 10:00-13:00 14:00-19:00; sa 14:00-19:00"/>
+ <tag k="phone" v="01 42 60 06 19"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://cyclesainthonore.fr/"/>
+ </node>
+ <node id="408500826" lat="48.8837864" lon="2.3182242">
+ <tag k="name" v="ADV Atelier des Vélos"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="408501350" lat="48.8979512" lon="2.3360083">
+ <tag k="name" v="Lardais Patrick"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="408503857" lat="48.8488852" lon="2.4290130">
+ <tag k="name" v="Bouticycle du Château"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="408561503" lat="48.8158348" lon="2.3050058">
+ <tag k="name" v="Un vélo dans la ville"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="408561867" lat="48.8336881" lon="2.3187203">
+ <tag k="addr:housenumber" v="36"/>
+ <tag k="name" v="Ok Ça Roule"/>
+ <tag k="phone" v="01 45 42 74 56"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="408561950" lat="48.8397690" lon="2.2932915">
+ <tag k="name" v="URBAN CYCLES 15"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="408561953" lat="48.8388787" lon="2.2902125">
+ <tag k="name" v="R B Cyclos"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="408561956" lat="48.8392689" lon="2.2836616">
+ <tag k="addr:housenumber" v="93"/>
+ <tag k="name" v="Cyclo Paris 15"/>
+ <tag k="phone" v="01 45 57 56 88"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.velo-hollandais-paris.fr/"/>
+ </node>
+ <node id="408562162" lat="48.8254765" lon="2.2487000">
+ <tag k="name" v="Giant Bicycles"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="446865631" lat="48.8756469" lon="2.3872915">
+ <tag k="name" v="Respiro"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="621288102" lat="48.8696198" lon="2.3660804">
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="632979744" lat="48.8943204" lon="2.3406884">
+ <tag k="name" v="Vélo 18 Vintage"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="647811682" lat="48.8578908" lon="2.3534575">
+ <tag k="name" v="BHV Vélo"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="647817455" lat="48.8948557" lon="2.2975658">
+ <tag k="name" v="Alex Singer"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="675581050" lat="48.8463762" lon="2.4113526">
+ <tag k="name" v="Rando Boutique"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="675823880" lat="48.8898032" lon="2.3220340">
+ <tag k="name" v="Vélo à Vivre"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="675841308" lat="48.8312605" lon="2.3488990">
+ <tag k="name" v="Buzibi"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="675848662" lat="48.8642141" lon="2.3657368">
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="name" v="BiCyCle Store"/>
+ <tag k="opening_hours" v="mo-sa 10:00-19:00"/>
+ <tag k="phone" v="+33 (0)9 51 61 68 29"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.bicyclestore.fr"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="675865742" lat="48.8510262" lon="2.2933495">
+ <tag k="name" v="Roulez Champions"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="675880112" lat="48.8676879" lon="2.3689019">
+ <tag k="addr:housenumber" v="104"/>
+ <tag k="name" v="Cyclope"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.cyclopebikes.fr/"/>
+ </node>
+ <node id="675891753" lat="48.8621084" lon="2.3821230">
+ <tag k="name" v="Franscoop"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="705458913" lat="48.8522049" lon="2.3676800">
+ <tag k="addr:housenumber" v="37"/>
+ <tag k="addr:street" v="Boulevard Bourdon"/>
+ <tag k="name" v="Maison du vélo"/>
+ <tag k="opening_hours" v="Tu-Sa 10:00-19:00"/>
+ <tag k="phone" v="+33 1 49 96 52 09"/>
+ <tag k="service:bicycle:diy" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="website" v="http://www.paris.fr/maisonduvelo"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="705459010" lat="48.8523036" lon="2.3673131">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Rue Jacques Cœur"/>
+ <tag k="name" v="Atelier vélorutionnaire"/>
+ <tag k="opening_hours" v="Tu 16:00-21:00; Th 16:00-21:00; Su 14:00-19:00"/>
+ <tag k="service:bicycle:diy" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="website" v="http://www.velorution.org"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="836814910" lat="48.8304368" lon="2.2944717">
+ <tag k="addr:housenumber" v="77"/>
+ <tag k="addr:street" v="Boulevard Lefebvre"/>
+ <tag k="name" v="Holland Bikes"/>
+ <tag k="note" v="Réparation toutes marques"/>
+ <tag k="phone" v="01 42 50 42 40"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.hollandbikes.com/"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="836814917" lat="48.8339438" lon="2.3094456">
+ <tag k="addr:housenumber" v="38"/>
+ <tag k="addr:street" v="Rue Georges Pitard"/>
+ <tag k="name" v="L'Ère du Vélo"/>
+ <tag k="phone" v="01 48 28 39 22"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="website" v="http://www.lereduvelo.fr/"/>
+ </node>
+ <node id="836814947" lat="48.8305190" lon="2.2942200">
+ <tag k="addr:housenumber" v="77"/>
+ <tag k="addr:street" v="Boulevard Lefebvre"/>
+ <tag k="name" v="Holland Bikes"/>
+ <tag k="note" v="Réparation toutes marques"/>
+ <tag k="phone" v="01 42 50 42 40"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.hollandbikes.com/"/>
+ </node>
+ <node id="904060582" lat="48.8502727" lon="2.3588853">
+ <tag k="name" v="Giant"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1002548792" lat="48.8652464" lon="2.3695461">
+ <tag k="name" v="Go Sport Vélo"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1079210602" lat="48.8464625" lon="2.3817701">
+ <tag k="name" v="Vélo services"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1300607533" lat="48.8772979" lon="2.2851254">
+ <tag k="name" v="Velo &amp; Oxygen"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1369678524" lat="48.8560577" lon="2.3569772">
+ <tag k="name" v="Ecox"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1378321857" lat="48.8699411" lon="2.3668506">
+ <tag k="addr:housenumber" v="50"/>
+ <tag k="addr:postcode" v="75010"/>
+ <tag k="addr:street" v="Quai de Jemmapes"/>
+ <tag k="name" v="Velovia - réseau Cyclable"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="www.cyclable.com"/>
+ </node>
+ <node id="1458502559" lat="48.8551953" lon="2.4106265">
+ <tag k="name" v="Ecox"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1458511693" lat="48.8647906" lon="2.3476242">
+ <tag k="addr:housenumber" v="40"/>
+ <tag k="addr:street" v="Rue Tiquetonne"/>
+ <tag k="name" v="En Selle Marcel"/>
+ <tag k="opening_hours" v="tu-sa 11:00-19:00"/>
+ <tag k="phone" v="01 44 54 06 46"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://ensellemarcel.over-blog.com/"/>
+ </node>
+ <node id="1458511931" lat="48.8630959" lon="2.3587203">
+ <tag k="name" v="freemos"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1655787083" lat="48.8302744" lon="2.3765726">
+ <tag k="name" v="Decathlon"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1747138935" lat="48.8392743" lon="2.4024830">
+ <tag k="addr:housenumber" v="23"/>
+ <tag k="addr:street" v="Rue de Toul"/>
+ <tag k="name" v="Belleville Lowrider"/>
+ <tag k="note" v="Vélo californien"/>
+ <tag k="phone" v="01 44 87 09 66"/>
+ <tag k="service:bicycle:rental" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.belleville-lowrider.fr/"/>
+ </node>
+ <node id="1747138937" lat="48.8520816" lon="2.2952447">
+ <tag k="name" v="Fat Tire Bike Tours"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1747138939" lat="48.8510756" lon="2.3508986">
+ <tag k="addr:housenumber" v="63"/>
+ <tag k="addr:street" v="Quai de la Tournelle"/>
+ <tag k="name" v="Free Scoot"/>
+ <tag k="phone" v="01 44 07 06 72"/>
+ <tag k="service:bicycle:rental" v="yes"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1747138940" lat="48.8779728" lon="2.3735745">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue des Chaufourniers"/>
+ <tag k="name" v="JPCycles"/>
+ <tag k="note" v="à vérifier sur place"/>
+ <tag k="phone" v="09 53 76 97 70"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1851326075" lat="48.8595201" lon="2.4036286">
+ <tag k="addr:housenumber" v="15"/>
+ <tag k="addr:street" v="Rue Pierre Bonnard"/>
+ <tag k="contact:email" v="paris@cyclocoop.org"/>
+ <tag k="contact:website" v="http://cyclocoop.org"/>
+ <tag k="name" v="Cyclofficine de Paris-Est"/>
+ <tag k="opening_hours" v="Th-Sa 13:30-19:30"/>
+ <tag k="service:bicycle:diy" v="yes"/>
+ <tag k="service:bicycle:second_hand" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1883161740" lat="48.8788264" lon="2.3714577">
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1896147373" lat="48.8891012" lon="2.3335587">
+ <tag k="addr:housenumber" v="32"/>
+ <tag k="name" v="Paris Vert"/>
+ <tag k="opening_hours" v="Tu-Sa 09:30-18:30"/>
+ <tag k="phone" v="01 53 09 99 09"/>
+ <tag k="service:bicycle:repair" v="yes"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.parisvert.fr/"/>
+ </node>
+
+</osm>
diff --git a/test/poi-service/script/paris/fuel-station.xml b/test/poi-service/script/paris/fuel-station.xml
new file mode 100644
index 0000000..3609e4f
--- /dev/null
+++ b/test/poi-service/script/paris/fuel-station.xml
@@ -0,0 +1,815 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-12-19T09:07:02Z"/>
+
+ <node id="25209547" lat="48.8316281" lon="2.3594731">
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="name" v="Station Total Access"/>
+ <tag k="operator" v="Total Access"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25210286" lat="48.8535333" lon="2.4151180">
+ <tag k="addr:postcode" v="75020"/>
+ <tag k="address" v="Porte de Montreuil"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="Paris"/>
+ <tag k="name" v="Relais Total de la Porte de Montreuil"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25210943" lat="48.8337497" lon="2.2848189">
+ <tag k="addr:postcode" v="75015"/>
+ <tag k="address" v="44 Bd Victor"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Station BP"/>
+ <tag k="operator" v="BP"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25211773" lat="48.8169651" lon="2.3597405">
+ <tag k="addr:postcode" v="75013"/>
+ <tag k="address" v="Porte D'Italie"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Relais Total Porte D'italie"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25213384" lat="48.8346251" lon="2.2657680">
+ <tag k="addr:postcode" v="75015"/>
+ <tag k="address" v="Quai d'Issy-les-Moulineaux - Porte d'Issy"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Relais Total Du Pont Aval"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25213823" lat="48.8256612" lon="2.4077565">
+ <tag k="addr:postcode" v="94220"/>
+ <tag k="address" v="N 6 , 114, rue de Paris - Porte de Charenton"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="CHARENTON-LE-PONT"/>
+ <tag k="name" v="Station Avia"/>
+ <tag k="operator" v="Avia"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25213980" lat="48.9012005" lon="2.3862959">
+ <tag k="addr:postcode" v="75019"/>
+ <tag k="address" v="13, boulevard de la Commanderie - Porte de La Villette"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Station Total"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="25214653" lat="48.8801709" lon="2.3706981">
+ <tag k="addr:postcode" v="75019"/>
+ <tag k="address" v="152/162, boulevard de la Villette"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Relais Total De Chaufourniers"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </node>
+ <node id="66492656" lat="48.8315802" lon="2.3158225">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="BP"/>
+ <tag k="operator" v="BP"/>
+ </node>
+ <node id="255003455" lat="48.8841896" lon="2.2703742">
+ <tag k="amenity" v="fuel"/>
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ </node>
+ <node id="258317404" lat="48.8455659" lon="2.3086884">
+ <tag k="amenity" v="fuel"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="259284911" lat="48.8391995" lon="2.2925362">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="BP"/>
+ </node>
+ <node id="259285107" lat="48.8367458" lon="2.2828065">
+ <tag k="amenity" v="fuel"/>
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ </node>
+ <node id="261582387" lat="48.8501676" lon="2.3621707">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="262276013" lat="48.8593908" lon="2.3144172">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ </node>
+ <node id="267156943" lat="48.8299268" lon="2.3465439">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="267652178" lat="48.8609726" lon="2.2828299">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="BP"/>
+ </node>
+ <node id="272631884" lat="48.8826632" lon="2.2476348">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="BP"/>
+ </node>
+ <node id="298915407" lat="48.8563192" lon="2.3153625">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="307372951" lat="48.8611046" lon="2.3413657">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Oil France"/>
+ </node>
+ <node id="309654919" lat="48.8475898" lon="2.3031985">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Shell"/>
+ <tag k="operator" v="Shell"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="315123765" lat="48.8463297" lon="2.2794951">
+ <tag k="amenity" v="fuel"/>
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ </node>
+ <node id="320203219" lat="48.9002724" lon="2.3738351">
+ <tag k="amenity" v="fuel"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="330413037" lat="48.8402491" lon="2.3214518">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="385442502" lat="48.8178365" lon="2.2768143">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Esso"/>
+ <tag k="operator" v="Esso"/>
+ </node>
+ <node id="423836418" lat="48.8804901" lon="2.2865619">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="471629646" lat="48.8636820" lon="2.4079099">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="476757242" lat="48.8844643" lon="2.4302306">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Relais des Fontaines"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="477195597" lat="48.8891565" lon="2.3974249">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="477199342" lat="48.8884623" lon="2.4082739">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Elan"/>
+ <tag k="operator" v="Elan"/>
+ </node>
+ <node id="489662580" lat="48.8962798" lon="2.2868916">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="582751437" lat="48.8912181" lon="2.2474811">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="source" v="Microsoft Bing satellite 2012"/>
+ </node>
+ <node id="605504117" lat="48.8229206" lon="2.2952295">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="614321106" lat="48.8213817" lon="2.3123435">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Elf"/>
+ <tag k="operator" v="Elf"/>
+ </node>
+ <node id="625171506" lat="48.8323948" lon="2.3645635">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="BP"/>
+ <tag k="operator" v="BP"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="648114671" lat="48.8645440" lon="2.4097670">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="661296854" lat="48.8765664" lon="2.4182091">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Garage Legendre"/>
+ <tag k="operator" v="Elan"/>
+ </node>
+ <node id="667281517" lat="48.8258601" lon="2.3878725">
+ <tag k="amenity" v="fuel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="667281518" lat="48.8457817" lon="2.3802229">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="667281519" lat="48.8443860" lon="2.3959250">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="766791661" lat="48.9007433" lon="2.3748278">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="fuel:GTL_diesel" v="yes"/>
+ <tag k="fuel:HGV_diesel" v="yes"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:octane_100" v="no"/>
+ <tag k="fuel:octane_95" v="yes"/>
+ <tag k="name" v="Relais du périphérique exterieur"/>
+ <tag k="opening_hours" v="Mo-Su 06:00-22:00"/>
+ <tag k="operator" v="Total"/>
+ </node>
+ <node id="797969992" lat="48.8959689" lon="2.3111720">
+ <tag k="amenity" v="fuel"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="BP"/>
+ <tag k="operator" v="BP"/>
+ </node>
+ <node id="870422866" lat="48.8829736" lon="2.4265647"/>
+ <node id="870438422" lat="48.8828425" lon="2.4266683"/>
+ <node id="870465818" lat="48.8828828" lon="2.4267858"/>
+ <node id="870477542" lat="48.8830140" lon="2.4266825"/>
+ <node id="880470216" lat="48.8256889" lon="2.2481637"/>
+ <node id="880472144" lat="48.8257675" lon="2.2482166"/>
+ <node id="880474062" lat="48.8257456" lon="2.2481312"/>
+ <node id="880478275" lat="48.8257103" lon="2.2482507"/>
+ <node id="894235041" lat="48.9000640" lon="2.3292228"/>
+ <node id="894242694" lat="48.9000753" lon="2.3292409"/>
+ <node id="894264753" lat="48.9000636" lon="2.3291904"/>
+ <node id="916640221" lat="48.8464518" lon="2.3874499"/>
+ <node id="916641569" lat="48.8463602" lon="2.3873388"/>
+ <node id="916642317" lat="48.8464517" lon="2.3873379"/>
+ <node id="916644392" lat="48.8463645" lon="2.3875220"/>
+ <node id="924687591" lat="48.8198012" lon="2.3969429"/>
+ <node id="924688914" lat="48.8198831" lon="2.3960761"/>
+ <node id="924689439" lat="48.8194129" lon="2.3975138"/>
+ <node id="924689859" lat="48.8194066" lon="2.3975148"/>
+ <node id="924690990" lat="48.8196410" lon="2.3972150"/>
+ <node id="924693308" lat="48.8192941" lon="2.3967703"/>
+ <node id="924697268" lat="48.8197208" lon="2.3970785"/>
+ <node id="924700960" lat="48.8193953" lon="2.3975033"/>
+ <node id="924702277" lat="48.8195837" lon="2.3973110"/>
+ <node id="924703591" lat="48.8193404" lon="2.3974640"/>
+ <node id="924704693" lat="48.8192201" lon="2.3970747"/>
+ <node id="924705404" lat="48.8193949" lon="2.3974940"/>
+ <node id="924705785" lat="48.8191313" lon="2.3969629"/>
+ <node id="924706795" lat="48.8191300" lon="2.3969777"/>
+ <node id="924715095" lat="48.8191420" lon="2.3969499"/>
+ <node id="924716326" lat="48.8194013" lon="2.3975121"/>
+ <node id="924718955" lat="48.8191390" lon="2.3970169"/>
+ <node id="924721020" lat="48.8191418" lon="2.3970596"/>
+ <node id="924724932" lat="48.8191323" lon="2.3969847"/>
+ <node id="924727873" lat="48.8196498" lon="2.3963535"/>
+ <node id="924729138" lat="48.8200662" lon="2.3964336"/>
+ <node id="924730180" lat="48.8191394" lon="2.3969932"/>
+ <node id="924731221" lat="48.8193637" lon="2.3973555"/>
+ <node id="924736971" lat="48.8198574" lon="2.3968340"/>
+ <node id="924738006" lat="48.8193947" lon="2.3974971"/>
+ <node id="924739717" lat="48.8191477" lon="2.3971047"/>
+ <node id="924745257" lat="48.8191298" lon="2.3969718"/>
+ <node id="924747643" lat="48.8200674" lon="2.3964355"/>
+ <node id="930290277" lat="48.8205844" lon="2.3248487"/>
+ <node id="930318016" lat="48.8206750" lon="2.3249460"/>
+ <node id="930341949" lat="48.8205680" lon="2.3248290"/>
+ <node id="951862155" lat="48.8554466" lon="2.4174509"/>
+ <node id="951877503" lat="48.8555614" lon="2.4173919"/>
+ <node id="951934402" lat="48.8555448" lon="2.4171337"/>
+ <node id="951948436" lat="48.8569166" lon="2.4291817"/>
+ <node id="952055818" lat="48.8555940" lon="2.4173237"/>
+ <node id="952192857" lat="48.8570103" lon="2.4289536"/>
+ <node id="952361222" lat="48.8556023" lon="2.4174740"/>
+ <node id="953933936" lat="48.8570424" lon="2.4291311"/>
+ <node id="954040540" lat="48.8554674" lon="2.4175440"/>
+ <node id="954071549" lat="48.8568858" lon="2.4290049"/>
+ <node id="954090776" lat="48.8556671" lon="2.4173353"/>
+ <node id="954158365" lat="48.8556064" lon="2.4170982"/>
+ <node id="955211223" lat="48.8635857" lon="2.2722338">
+ <tag k="amenity" v="fuel"/>
+ <tag k="operator" v="shell"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="957778578" lat="48.8997247" lon="2.2610152"/>
+ <node id="957779357" lat="48.8999029" lon="2.2610369"/>
+ <node id="957779755" lat="48.8997496" lon="2.2608963"/>
+ <node id="957779956" lat="48.8996951" lon="2.2609472"/>
+ <node id="957780038" lat="48.8997564" lon="2.2610405"/>
+ <node id="957780170" lat="48.8997552" lon="2.2607096"/>
+ <node id="957780327" lat="48.8997560" lon="2.2610573"/>
+ <node id="957780383" lat="48.8998575" lon="2.2609391"/>
+ <node id="957780604" lat="48.8998665" lon="2.2606908"/>
+ <node id="957781778" lat="48.8999856" lon="2.2609551"/>
+ <node id="957782370" lat="48.8997337" lon="2.2610068"/>
+ <node id="957782578" lat="48.8997781" lon="2.2607605"/>
+ <node id="957783025" lat="48.8998366" lon="2.2606250"/>
+ <node id="957783190" lat="48.8999313" lon="2.2608345"/>
+ <node id="957783582" lat="48.8998120" lon="2.2608355"/>
+ <node id="957783769" lat="48.8997207" lon="2.2610063"/>
+ <node id="957783832" lat="48.8997663" lon="2.2610629"/>
+ <node id="957784157" lat="48.8997607" lon="2.2610680"/>
+ <node id="957784215" lat="48.8997704" lon="2.2610263"/>
+ <node id="968171170" lat="48.8536267" lon="2.3664311">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="968924214" lat="48.8408422" lon="2.3172666">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="BP"/>
+ <tag k="fuel:diesel" v="no"/>
+ <tag k="fuel:octane_95" v="no"/>
+ <tag k="fuel:octane_98" v="no"/>
+ <tag k="name" v="8 à Huit"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="969203965" lat="48.9006923" lon="2.3752658"/>
+ <node id="969203967" lat="48.9008580" lon="2.3740693"/>
+ <node id="969203983" lat="48.9008608" lon="2.3741677"/>
+ <node id="969203986" lat="48.9008494" lon="2.3749161"/>
+ <node id="969203988" lat="48.9008549" lon="2.3747755"/>
+ <node id="969204003" lat="48.9005733" lon="2.3752427"/>
+ <node id="969204008" lat="48.9008614" lon="2.3742742"/>
+ <node id="969204009" lat="48.9007002" lon="2.3738851"/>
+ <node id="969204012" lat="48.9008384" lon="2.3750157"/>
+ <node id="969204014" lat="48.9008603" lon="2.3743504"/>
+ <node id="969204028" lat="48.9008196" lon="2.3750991"/>
+ <node id="969204031" lat="48.9008591" lon="2.3739932"/>
+ <node id="969204032" lat="48.9008570" lon="2.3738996"/>
+ <node id="969204047" lat="48.9008594" lon="2.3744733"/>
+ <node id="969204051" lat="48.9007807" lon="2.3752015"/>
+ <node id="969204055" lat="48.9008578" lon="2.3746127"/>
+ <node id="973809220" lat="48.8760276" lon="2.3806123">
+ <tag k="amenity" v="fuel"/>
+ <tag k="operator" v="BP"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="987734571" lat="48.8842378" lon="2.3608157">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="993642116" lat="48.8387798" lon="2.2536841">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="994059048" lat="48.8391316" lon="2.2485201">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Combustible de Boulogne"/>
+ <tag k="network" v="Elan"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="995502815" lat="48.8257564" lon="2.2481734"/>
+ <node id="995502826" lat="48.8256992" lon="2.2482054"/>
+ <node id="1119984190" lat="48.8273666" lon="2.2716056"/>
+ <node id="1119984194" lat="48.8277579" lon="2.2713308"/>
+ <node id="1119984196" lat="48.8281523" lon="2.2728394">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Esso Express"/>
+ </node>
+ <node id="1119984227" lat="48.8275149" lon="2.2719489"/>
+ <node id="1119984230" lat="48.8277712" lon="2.2717015"/>
+ <node id="1172665573" lat="48.8168431" lon="2.3604808">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Relais Total Porte D'Italie"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="1188299494" lat="48.8960731" lon="2.2520490">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="BP"/>
+ <tag k="shop" v="yes"/>
+ </node>
+ <node id="1191594862" lat="48.8595020" lon="2.3116861">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1211057208" lat="48.8969126" lon="2.2546796">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ </node>
+ <node id="1243135736" lat="48.8407841" lon="2.3912112">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Total"/>
+ </node>
+ <node id="1266563433" lat="48.8607706" lon="2.3747898">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="1280606426" lat="48.8772002" lon="2.3615138">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Esso"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1282166627" lat="48.8787212" lon="2.3698437">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Esso"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1319463008" lat="48.8204344" lon="2.3051655">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="BP"/>
+ </node>
+ <node id="1339598425" lat="48.8958396" lon="2.3104767"/>
+ <node id="1339598434" lat="48.8957807" lon="2.3104495"/>
+ <node id="1339598472" lat="48.8958597" lon="2.3100537"/>
+ <node id="1339598520" lat="48.8957917" lon="2.3104546"/>
+ <node id="1339598702" lat="48.8959187" lon="2.3100810"/>
+ <node id="1547720813" lat="48.8586303" lon="2.3897622">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="1547748415" lat="48.8579937" lon="2.3897210">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="1568009842" lat="48.8364028" lon="2.2775659">
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="bp"/>
+ </node>
+ <node id="1650397378" lat="48.8995880" lon="2.3300677"/>
+ <node id="1650397379" lat="48.8996017" lon="2.3299812"/>
+ <node id="1650397382" lat="48.8998251" lon="2.3301423"/>
+ <node id="1650397383" lat="48.8998351" lon="2.3300550"/>
+ <node id="1650397385" lat="48.8998577" lon="2.3301063"/>
+ <node id="1650397387" lat="48.8999051" lon="2.3291991"/>
+ <node id="1650397388" lat="48.8999073" lon="2.3293410"/>
+ <node id="1650397393" lat="48.9000766" lon="2.3293746"/>
+ <node id="1650397394" lat="48.9001047" lon="2.3292388"/>
+ <node id="1650397396" lat="48.9001347" lon="2.3292856"/>
+ <node id="1747138950" lat="48.8558395" lon="2.3835889">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="1871844543" lat="48.8205780" lon="2.3247820"/>
+ <node id="1871844544" lat="48.8205816" lon="2.3247820"/>
+ <node id="1871844546" lat="48.8205880" lon="2.3248530"/>
+ <node id="1871844548" lat="48.8205940" lon="2.3248430"/>
+ <node id="1871844550" lat="48.8206030" lon="2.3247820"/>
+ <node id="1871844570" lat="48.8206370" lon="2.3248170"/>
+ <node id="1871844572" lat="48.8206410" lon="2.3248950"/>
+ <node id="1871844576" lat="48.8206650" lon="2.3248290"/>
+ <node id="1871844578" lat="48.8206720" lon="2.3248990"/>
+ <node id="1871844580" lat="48.8206740" lon="2.3248140"/>
+ <node id="1871844582" lat="48.8206880" lon="2.3248300"/>
+ <node id="1871844586" lat="48.8207040" lon="2.3248030"/>
+ <node id="1871844590" lat="48.8207070" lon="2.3249470"/>
+ <node id="1871844596" lat="48.8207280" lon="2.3248360"/>
+ <node id="1873395703" lat="48.8998716" lon="2.2609694"/>
+ <node id="1873395712" lat="48.8999568" lon="2.2608910"/>
+ <node id="1937157672" lat="48.8519985" lon="2.2908966">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:octane_95" v="yes"/>
+ <tag k="fuel:octane_98" v="no"/>
+ <tag k="name" v="Total"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="1987167009" lat="48.8656358" lon="2.2892405">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Elan"/>
+ </node>
+ <node id="1997748867" lat="48.8786755" lon="2.3549221">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="142"/>
+ <tag k="addr:postcode" v="75010"/>
+ <tag k="addr:state" v="Île-de-France"/>
+ <tag k="addr:street" v="Rue La Fayette"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="atm" v="no"/>
+ <tag k="fuel" v="yes"/>
+ <tag k="name" v="Station essence"/>
+ </node>
+ <node id="2034367275" lat="48.8797035" lon="2.3026873">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="2040281444" lat="48.8164408" lon="2.3252194">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="2117639904" lat="48.8219928" lon="2.4027040">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:octane_95" v="yes"/>
+ <tag k="fuel:octane_98" v="yes"/>
+ <tag k="name" v="Relais Total de Conflans"/>
+ </node>
+ <node id="2184296199" lat="48.8478375" lon="2.3535433">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ </node>
+ <node id="2261671804" lat="48.8841496" lon="2.3640114">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Avia"/>
+ <tag k="fuel:octane_100" v="yes"/>
+ </node>
+ <node id="2330020597" lat="48.8973798" lon="2.3589436">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Esso"/>
+ </node>
+ <node id="2330020601" lat="48.8986959" lon="2.3633779">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="2330020604" lat="48.9000487" lon="2.3617903">
+ <tag k="amenity" v="fuel"/>
+ </node>
+ <node id="2377881055" lat="48.8936152" lon="2.3152934">
+ <tag k="addr:housenumber" v="190"/>
+ <tag k="addr:street" v="Avenue de Clichy"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:octane_95" v="yes"/>
+ <tag k="fuel:octane_98" v="yes"/>
+ <tag k="name" v="Total"/>
+ </node>
+ <node id="2394065587" lat="48.8522407" lon="2.2805336">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Agip"/>
+ <tag k="source" v="survey 2013"/>
+ </node>
+ <node id="2409683708" lat="48.8191934" lon="2.2957144">
+ <tag k="amenity" v="fuel"/>
+ <tag k="source" v="local_knowledge"/>
+ </node>
+ <node id="2419607653" lat="48.8935024" lon="2.3027161"/>
+ <node id="2419607655" lat="48.8936066" lon="2.3031200"/>
+ <node id="2419607656" lat="48.8936156" lon="2.3027024"/>
+ <node id="2419607657" lat="48.8937234" lon="2.3031035"/>
+ <node id="2449638808" lat="48.8550277" lon="2.3255601">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Avia"/>
+ <tag k="operator" v="Avia"/>
+ <tag k="shop" v="convenience"/>
+ </node>
+ <node id="2526480478" lat="48.8962481" lon="2.3594957">
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="opening_hours" v="24/7"/>
+ <tag k="shop" v="no"/>
+ </node>
+ <way id="73428044">
+ <nd ref="870422866"/>
+ <nd ref="870438422"/>
+ <nd ref="870465818"/>
+ <nd ref="870477542"/>
+ <nd ref="870422866"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total Acess"/>
+ <tag k="building" v="roof"/>
+ <tag k="height" v="5"/>
+ <tag k="name" v="Total Access"/>
+ <tag k="operator" v="Total"/>
+ <tag k="shop" v="yes"/>
+ <tag k="source" v="extraction vectorielle v1 cadastre-dgi-fr source : Direction Générale des Impôts - Cadas. Mise à jour : 2010"/>
+ </way>
+ <way id="74493518">
+ <nd ref="880474062"/>
+ <nd ref="880470216"/>
+ <nd ref="995502826"/>
+ <nd ref="880478275"/>
+ <nd ref="880472144"/>
+ <nd ref="995502815"/>
+ <nd ref="880474062"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="BP"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:name" v="survey"/>
+ </way>
+ <way id="78019560">
+ <nd ref="916640221"/>
+ <nd ref="916642317"/>
+ <nd ref="916641569"/>
+ <nd ref="916644392"/>
+ <nd ref="916640221"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </way>
+ <way id="79147677">
+ <nd ref="924702277"/>
+ <nd ref="924690990"/>
+ <nd ref="924697268"/>
+ <nd ref="924687591"/>
+ <nd ref="924736971"/>
+ <nd ref="924747643"/>
+ <nd ref="924729138"/>
+ <nd ref="924688914"/>
+ <nd ref="924727873"/>
+ <nd ref="924693308"/>
+ <nd ref="924715095"/>
+ <nd ref="924705785"/>
+ <nd ref="924745257"/>
+ <nd ref="924706795"/>
+ <nd ref="924724932"/>
+ <nd ref="924730180"/>
+ <nd ref="924718955"/>
+ <nd ref="924721020"/>
+ <nd ref="924739717"/>
+ <nd ref="924704693"/>
+ <nd ref="924731221"/>
+ <nd ref="924703591"/>
+ <nd ref="924705404"/>
+ <nd ref="924738006"/>
+ <nd ref="924700960"/>
+ <nd ref="924716326"/>
+ <nd ref="924689859"/>
+ <nd ref="924689439"/>
+ <nd ref="924702277"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="name" v="Station Service Carrefour Quais d'ivry"/>
+ <tag k="source" v="extraction vectorielle v1 cadastre-dgi-fr source : Direction Générale des Impôts - Cadas. Mise à jour : 2010"/>
+ </way>
+ <way id="81771134">
+ <nd ref="954158365"/>
+ <nd ref="951934402"/>
+ <nd ref="952055818"/>
+ <nd ref="951877503"/>
+ <nd ref="951862155"/>
+ <nd ref="954040540"/>
+ <nd ref="952361222"/>
+ <nd ref="954090776"/>
+ <nd ref="954158365"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="operator" v="Carrefour"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </way>
+ <way id="81839193">
+ <nd ref="951948436"/>
+ <nd ref="953933936"/>
+ <nd ref="952192857"/>
+ <nd ref="954071549"/>
+ <nd ref="951948436"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="name" v="Elf"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </way>
+ <way id="82250343">
+ <nd ref="957783769"/>
+ <nd ref="957778578"/>
+ <nd ref="957782370"/>
+ <nd ref="957780327"/>
+ <nd ref="957784157"/>
+ <nd ref="957783832"/>
+ <nd ref="957780038"/>
+ <nd ref="957784215"/>
+ <nd ref="957780383"/>
+ <nd ref="1873395703"/>
+ <nd ref="957779357"/>
+ <nd ref="957781778"/>
+ <nd ref="1873395712"/>
+ <nd ref="957783190"/>
+ <nd ref="957780604"/>
+ <nd ref="957783025"/>
+ <nd ref="957780170"/>
+ <nd ref="957782578"/>
+ <nd ref="957783582"/>
+ <nd ref="957779755"/>
+ <nd ref="957779956"/>
+ <nd ref="957783769"/>
+ <tag k="addr:housenumber" v="45"/>
+ <tag k="addr:postcode" v="92400"/>
+ <tag k="addr:street" v="Boulevard de Verdun"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="name" v="Total Access"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </way>
+ <way id="83297869">
+ <nd ref="969203965"/>
+ <nd ref="969204051"/>
+ <nd ref="969204028"/>
+ <nd ref="969204012"/>
+ <nd ref="969203986"/>
+ <nd ref="969203988"/>
+ <nd ref="969204055"/>
+ <nd ref="969204047"/>
+ <nd ref="969204014"/>
+ <nd ref="969204008"/>
+ <nd ref="969203983"/>
+ <nd ref="969203967"/>
+ <nd ref="969204031"/>
+ <nd ref="969204032"/>
+ <nd ref="969204009"/>
+ <nd ref="969204003"/>
+ <nd ref="969203965"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="area" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </way>
+ <way id="96711347">
+ <nd ref="1119984194"/>
+ <nd ref="1119984230"/>
+ <nd ref="1119984227"/>
+ <nd ref="1119984190"/>
+ <nd ref="1119984194"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="name" v="Total"/>
+ <tag k="shop" v="yes"/>
+ </way>
+ <way id="119155614">
+ <nd ref="1339598702"/>
+ <nd ref="1339598472"/>
+ <nd ref="1339598434"/>
+ <nd ref="1339598520"/>
+ <nd ref="1339598425"/>
+ <nd ref="1339598702"/>
+ <tag k="addr:postcode" v="75017"/>
+ <tag k="address" v="Porte De Clichy"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="yes"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Relais Total Des Batignolles"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ </way>
+ <way id="152205002">
+ <nd ref="894264753"/>
+ <nd ref="894235041"/>
+ <nd ref="894242694"/>
+ <nd ref="1650397394"/>
+ <nd ref="1650397396"/>
+ <nd ref="1650397393"/>
+ <nd ref="1650397388"/>
+ <nd ref="1650397387"/>
+ <nd ref="894264753"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:e10" v="yes"/>
+ <tag k="fuel:octane_95" v="no"/>
+ <tag k="fuel:octane_98" v="yes"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="Esso Express Saint-Ouen"/>
+ <tag k="shop" v="no"/>
+ </way>
+ <way id="152205005">
+ <nd ref="1650397383"/>
+ <nd ref="1650397385"/>
+ <nd ref="1650397382"/>
+ <nd ref="1650397378"/>
+ <nd ref="1650397379"/>
+ <nd ref="1650397383"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="roof"/>
+ <tag k="fuel:diesel" v="yes"/>
+ <tag k="fuel:e10" v="yes"/>
+ <tag k="fuel:octane_95" v="no"/>
+ <tag k="fuel:octane_98" v="yes"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="Esso Express Saint-Ouen Bichat"/>
+ <tag k="shop" v="no"/>
+ </way>
+ <way id="176708088">
+ <nd ref="1871844596"/>
+ <nd ref="1871844586"/>
+ <nd ref="1871844582"/>
+ <nd ref="1871844580"/>
+ <nd ref="1871844576"/>
+ <nd ref="1871844570"/>
+ <nd ref="1871844550"/>
+ <nd ref="1871844544"/>
+ <nd ref="1871844543"/>
+ <nd ref="930341949"/>
+ <nd ref="930290277"/>
+ <nd ref="1871844546"/>
+ <nd ref="1871844548"/>
+ <nd ref="1871844572"/>
+ <nd ref="1871844578"/>
+ <nd ref="930318016"/>
+ <nd ref="1871844590"/>
+ <nd ref="1871844596"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="brand" v="Total"/>
+ <tag k="building" v="yes"/>
+ <tag k="operator" v="Total"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </way>
+ <way id="233599523">
+ <nd ref="2419607656"/>
+ <nd ref="2419607657"/>
+ <nd ref="2419607655"/>
+ <nd ref="2419607653"/>
+ <nd ref="2419607656"/>
+ <tag k="addr:postcode" v="75017"/>
+ <tag k="address" v="2 bd Fort de Vaux (périph. ext., sortie pte de Clichy, dir pte d'Asnières)"/>
+ <tag k="amenity" v="fuel"/>
+ <tag k="building" v="yes"/>
+ <tag k="fuel:lpg" v="yes"/>
+ <tag k="is_in" v="PARIS"/>
+ <tag k="name" v="Station Service E. Leclerc - Levallois Distribution"/>
+ <tag k="operator" v="E. Leclerc"/>
+ <tag k="shop" v="no"/>
+ <tag k="source" v="stations.gpl.online.fr"/>
+ <tag k="wall" v="no"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/paris/museum-and-hotel.xml b/test/poi-service/script/paris/museum-and-hotel.xml
new file mode 100644
index 0000000..b722f99
--- /dev/null
+++ b/test/poi-service/script/paris/museum-and-hotel.xml
@@ -0,0 +1,13058 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. It has there been collected by a large group of contributors. For individual attribution of each item please refer to http://www.openstreetmap.org/api/0.6/[node|way|relation]/#id/history </note>
+<meta osm_base="2012-08-15T06:42:02Z"/>
+
+ <node id="21662047" lat="48.8487530" lon="2.3593610"/>
+ <node id="21662048" lat="48.8491190" lon="2.3588172"/>
+ <node id="21662049" lat="48.8494261" lon="2.3578865"/>
+ <node id="21662491" lat="48.8479338" lon="2.3606386"/>
+ <node id="21662510" lat="48.8472984" lon="2.3616579"/>
+ <node id="21662511" lat="48.8469525" lon="2.3621407"/>
+ <node id="21662512" lat="48.8459358" lon="2.3633208"/>
+ <node id="27415779" lat="48.8662070" lon="2.3109250">
+ <tag k="name" v="Palais de la Découverte"/>
+ <tag k="opening_hours" v="Tu-Sa 09:30-18:30; Sa 10:00-19:00; PH 10:00-19:00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.palais-decouverte.fr/"/>
+ <tag k="wikipedia" v="fr:Palais de la découverte"/>
+ </node>
+ <node id="130102845" lat="48.8560795" lon="2.3115715">
+ <tag k="name" v="Musée de l'Armée"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="185881594" lat="48.8607204" lon="2.2960844"/>
+ <node id="185881595" lat="48.8601143" lon="2.2970269"/>
+ <node id="185881597" lat="48.8605798" lon="2.2984532"/>
+ <node id="185881598" lat="48.8607626" lon="2.2995103"/>
+ <node id="185881599" lat="48.8618503" lon="2.2989250"/>
+ <node id="185881600" lat="48.8617537" lon="2.2985522">
+ <tag k="addr:housenumber" v="29"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ </node>
+ <node id="185881601" lat="48.8614495" lon="2.2975710">
+ <tag k="addr:housenumber" v="39"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ </node>
+ <node id="185881603" lat="48.8613167" lon="2.2972320">
+ <tag k="addr:housenumber" v="43"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ </node>
+ <node id="185881604" lat="48.8610315" lon="2.2966254">
+ <tag k="addr:housenumber" v="51"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ </node>
+ <node id="191770987" lat="48.8385211" lon="2.3203937"/>
+ <node id="191770988" lat="48.8386623" lon="2.3205311"/>
+ <node id="191770990" lat="48.8386839" lon="2.3204818"/>
+ <node id="191770992" lat="48.8387567" lon="2.3205642"/>
+ <node id="191770993" lat="48.8386341" lon="2.3209087"/>
+ <node id="191770995" lat="48.8386623" lon="2.3211319"/>
+ <node id="191770996" lat="48.8386115" lon="2.3212692"/>
+ <node id="191770997" lat="48.8384589" lon="2.3212177"/>
+ <node id="191770999" lat="48.8383742" lon="2.3211576"/>
+ <node id="191771001" lat="48.8381934" lon="2.3215181"/>
+ <node id="191771002" lat="48.8381323" lon="2.3214821"/>
+ <node id="191771003" lat="48.8380123" lon="2.3211681"/>
+ <node id="191771005" lat="48.8382669" lon="2.3206856"/>
+ <node id="191771006" lat="48.8383460" lon="2.3206684"/>
+ <node id="205271816" lat="48.8510011" lon="2.3431958"/>
+ <node id="212545494" lat="48.8508692" lon="2.3437386"/>
+ <node id="212545496" lat="48.8507909" lon="2.3436950"/>
+ <node id="212545497" lat="48.8506820" lon="2.3441188"/>
+ <node id="212545498" lat="48.8505570" lon="2.3440527"/>
+ <node id="212546071" lat="48.8503285" lon="2.3444050"/>
+ <node id="224711659" lat="48.8403064" lon="2.3155776">
+ <tag k="name" v="Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="237003117" lat="48.8507240" lon="2.3518758">
+ <tag k="alt_name" v="Hôtel de Miramion"/>
+ <tag k="name" v="Musée de l'Assistance Publique Hôpitaux de Paris"/>
+ <tag k="phone" v="01.40.27.50.05"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.aphp.fr/"/>
+ </node>
+ <node id="237015622" lat="48.8424522" lon="2.3557040"/>
+ <node id="237015623" lat="48.8424379" lon="2.3556143"/>
+ <node id="237015624" lat="48.8416104" lon="2.3559297"/>
+ <node id="237015626" lat="48.8418596" lon="2.3568694"/>
+ <node id="237015628" lat="48.8426173" lon="2.3564213"/>
+ <node id="237015631" lat="48.8425664" lon="2.3561702"/>
+ <node id="237016931" lat="48.8420354" lon="2.3589336"/>
+ <node id="237016932" lat="48.8421679" lon="2.3588540"/>
+ <node id="237018217" lat="48.8430694" lon="2.3621494"/>
+ <node id="237018219" lat="48.8428676" lon="2.3622691"/>
+ <node id="237018220" lat="48.8431966" lon="2.3636137"/>
+ <node id="237018222" lat="48.8434273" lon="2.3634770"/>
+ <node id="237018223" lat="48.8433829" lon="2.3633036"/>
+ <node id="237018224" lat="48.8433345" lon="2.3633318"/>
+ <node id="237018225" lat="48.8430788" lon="2.3623362"/>
+ <node id="237018226" lat="48.8431122" lon="2.3623159"/>
+ <node id="237430763" lat="48.8334716" lon="2.3500332"/>
+ <node id="242556936" lat="48.8330803" lon="2.3495500"/>
+ <node id="242923585" lat="48.8486940" lon="2.3340343">
+ <tag k="name" v="Musée du Luxembourg"/>
+ <tag k="phone" v="01.40.13.62.00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museeduluxembourg.fr/"/>
+ </node>
+ <node id="243202970" lat="48.8612183" lon="2.3523016"/>
+ <node id="245805297" lat="48.8488657" lon="2.3577500"/>
+ <node id="245805298" lat="48.8490009" lon="2.3575420">
+ <tag k="addr:housenumber" v="23"/>
+ <tag k="addr:street" v="Quai Saint-Bernard"/>
+ </node>
+ <node id="245805299" lat="48.8491279" lon="2.3572659"/>
+ <node id="245805300" lat="48.8491720" lon="2.3569494"/>
+ <node id="247435001" lat="48.8626324" lon="2.3411196">
+ <tag k="name" v="BVJ Paris-Louvre"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247435003" lat="48.8645200" lon="2.3405468">
+ <tag k="name" v="Hôtel de Rouen"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247435032" lat="48.8611819" lon="2.3436118">
+ <tag k="name" v="Hôtel Saint-Honoré"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247435275" lat="48.8643625" lon="2.3363084">
+ <tag k="name" v="Hôtel Montpensier"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247436637" lat="48.8629098" lon="2.3381793">
+ <tag k="name" v="Hôtel Louvre Bon Enfants"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247436814" lat="48.8670031" lon="2.3287060">
+ <tag k="name" v="Hôtel Vendôme"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247437972" lat="48.8667055" lon="2.3279639">
+ <tag k="name" v="Hôtel Costes"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247584452" lat="48.8631692" lon="2.3329513">
+ <tag k="layer" v="4"/>
+ <tag k="name" v="Musée des Arts Décoratifs - Musée de la Publicité"/>
+ <tag k="name:ru" v="Музей декоративного искусства"/>
+ <tag k="phone" v="01.44.55.57.50"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.lesartsdecoratifs.fr/francais/arts-decoratifs/"/>
+ <tag k="wikipedia" v="fr:Musée des Arts décoratifs de Paris"/>
+ <tag k="wikipedia:en" v="Musée_des_Arts_Décoratifs,_Paris"/>
+ <tag k="wikipedia:ru" v="Музей_декоративного_искусства_(Париж)"/>
+ </node>
+ <node id="247609768" lat="48.8711661" lon="2.3415044">
+ <tag k="name" v="Hôtel Vivienne"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="247618453" lat="48.8660977" lon="2.3554138">
+ <tag k="fax" v="+33 (0)1 53 01 82 01"/>
+ <tag k="fee" v="full:6,50; discount:4,5; free: under 26, handicap, press, unemployment, ICOM, AMCSTI, PARIS MUSEUM PASS, Cnam, Amis du Musée des arts et métiers, 1er dimanche de chaque mois, jeudi à partir 18h00"/>
+ <tag k="name" v="Musée national des Arts et Métiers"/>
+ <tag k="opening_hours" v="Tu-Su 10:00-18:00; Th 10:00-21:30; May 1 off; Dec 25 off"/>
+ <tag k="phone" v="+33 (0)1 53 01 82 00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.arts-et-metiers.net/"/>
+ <tag k="wikipedia" v="fr:Musée des arts et métiers"/>
+ </node>
+ <node id="251001754" lat="48.8696872" lon="2.3486973">
+ <tag k="name" v="Hôtel des Boulevards"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251001755" lat="48.8695728" lon="2.3486760">
+ <tag k="name" v="Hôtel Sainte-Marie"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251127407" lat="48.8559607" lon="2.3573425">
+ <tag k="name" v="Hôtel Paris Rivoli"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251127867" lat="48.8569202" lon="2.3552931">
+ <tag k="name" v="Hôtel du Loiret"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251127869" lat="48.8534997" lon="2.3618939">
+ <tag k="name" v="Hôtel du Septième Art"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251128397" lat="48.8539941" lon="2.3675165">
+ <tag k="name" v="Hôtel Bastille Speria"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251128405" lat="48.8562648" lon="2.3573443">
+ <tag k="name" v="Hôtel Caron de Beaumarchais"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251130023" lat="48.8539504" lon="2.3631680">
+ <tag k="name" v="Jardins de Paris Marais-Bastille"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251130907" lat="48.8544261" lon="2.3652418">
+ <tag k="name" v="Hôtel de la Place des Vosges"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251131789" lat="48.8566486" lon="2.3558134">
+ <tag k="name" v="Hôtel de Nice"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251318666" lat="48.8779237" lon="2.3345515">
+ <tag k="ele" v="23.0"/>
+ <tag k="name" v="Musée Gustave Moreau"/>
+ <tag k="phone" v="01.48.74.38.50"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-moreau.fr"/>
+ </node>
+ <node id="251531802" lat="48.8487987" lon="2.3483264">
+ <tag k="name" v="Hôtel du Commerce"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251531803" lat="48.8523050" lon="2.3468998">
+ <tag k="name" v="Hôtel Esmerelda"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251531804" lat="48.8369895" lon="2.3513817">
+ <tag k="busway" v="track"/>
+ <tag k="cycleway" v="share_busway"/>
+ <tag k="name" v="Port-Royal-Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251652817" lat="48.8528444" lon="2.3444884">
+ <tag k="name" v="Hôtel du Levant"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251652818" lat="48.8507040" lon="2.3495969">
+ <tag k="name" v="Maitre Albert B&amp;B"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251733867" lat="48.8486356" lon="2.3404438">
+ <tag k="name" v="Le Clos Medicis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251733868" lat="48.8487309" lon="2.3414218">
+ <tag k="name" v="Hôtel Trianon Rive Gauche"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251733871" lat="48.8563230" lon="2.3352294">
+ <tag k="name" v="L'Hôtel"/>
+ <tag k="note" v="c'est bien son nom"/>
+ <tag k="note:en" v="this is the real name"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251733872" lat="48.8457742" lon="2.3243407">
+ <tag k="name" v="Victoria Palace Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251742041" lat="48.8626245" lon="2.3025393">
+ <tag k="name" v="Les Egouts de Paris"/>
+ <tag k="phone" v="01.53.68.27.81"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </node>
+ <node id="251758241" lat="48.8519056" lon="2.3254299">
+ <tag k="name" v="Hôtel Chomel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758242" lat="48.8521505" lon="2.3260910">
+ <tag k="name" v="Hôtel Lindbergh"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758243" lat="48.8563970" lon="2.3060759">
+ <tag k="name" v="Hôtel du Champ de Mars"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758244" lat="48.8599286" lon="2.3087880">
+ <tag k="name" v="Hôtel Saint-Dominique"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758245" lat="48.8526771" lon="2.3090528">
+ <tag k="name" v="Hôtel Duquesne Eiffel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758246" lat="48.8599838" lon="2.3062819">
+ <tag k="name" v="Hôtel de la Tulipe"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758247" lat="48.8571597" lon="2.3065436">
+ <tag k="name" v="Grand Hôtel Leveque"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758248" lat="48.8604075" lon="2.3104739">
+ <tag k="name" v="Timhôtel Best Western Tour Eiffel Invalides"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758252" lat="48.8643297" lon="2.3182161">
+ <tag k="name" v="Phytéas's houseboat B&amp;B"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758253" lat="48.8672908" lon="2.3210898">
+ <tag k="alt_name" v="Hôtel des Monnaies"/>
+ <tag k="name" v="Hôtel de Crillon"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wikipedia" v="fr:Hôtel de Crillon"/>
+ </node>
+ <node id="251758254" lat="48.8696521" lon="2.3221321">
+ <tag k="name" v="Hôtel Sofitel Le Faubourg-Paris"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758255" lat="48.8687840" lon="2.3006774">
+ <tag k="name" v="Four Seasons Hôtel George V"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251758256" lat="48.8729139" lon="2.3216323">
+ <tag k="name" v="Hyatt Regency Paris - Madeleine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251851365" lat="48.8767170" lon="2.3485948">
+ <tag k="name" v="Hôtel de Lille"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251851366" lat="48.8798562" lon="2.3434989">
+ <tag k="addr:housenumber" v="39"/>
+ <tag k="addr:street" v="Rue Rodier"/>
+ <tag k="name" v="Perfect Hotel &amp; Hostel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251851394" lat="48.8763467" lon="2.3710708">
+ <tag k="name" v="Hôtel Vicq d'Azir"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251851395" lat="48.8773197" lon="2.3627064">
+ <tag k="name" v="Hôtel du Terrage"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="251851402" lat="48.8711954" lon="2.3550205">
+ <tag k="addr:housenumber" v="31"/>
+ <tag k="addr:street" v="Boulevard de Strasbourg"/>
+ <tag k="name" v="Comfort Hotel Gare de l'Est"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wifi" v="free"/>
+ </node>
+ <node id="251851404" lat="48.8794148" lon="2.3584116">
+ <tag k="name" v="Albert 1er Hotel"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252211317" lat="48.8663410" lon="2.3817465">
+ <tag k="name" v="Musée Edith Piaf"/>
+ <tag k="phone" v="01.43.55.52.72"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="252683843" lat="48.8651810" lon="2.3673647">
+ <tag k="name" v="Hôtel Voltaire République"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252683844" lat="48.8661043" lon="2.3685294">
+ <tag k="name" v="Hôtel Mondia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252683845" lat="48.8670657" lon="2.3747048">
+ <tag k="name" v="Hôtel Le Quartier République, Le Marais"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252683846" lat="48.8662470" lon="2.3669000">
+ <tag k="name" v="Le Général Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252683847" lat="48.8553916" lon="2.3882956">
+ <tag k="name" v="Classics Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252684077" lat="48.8551772" lon="2.3787982">
+ <tag k="name" v="Grand Hôtel Nouvel Opera"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252684078" lat="48.8659703" lon="2.3724217">
+ <tag k="name" v="Hôtel de Nemours"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252732427" lat="48.8658412" lon="2.3674790">
+ <tag k="name" v="Hôtel du Nord et de l'Est"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252788280" lat="48.8456631" lon="2.3753357">
+ <tag k="name" v="Blue Planet Hostel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252789601" lat="48.8467986" lon="2.3778628">
+ <tag k="name" v="Hôtel Prince Albert"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252792984" lat="48.8349874" lon="2.4067169">
+ <tag k="name" v="Hôtel de la Porte Dorée"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252792985" lat="48.8470135" lon="2.3707909">
+ <tag k="name" v="Hôtel de l'Aveyron"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252793231" lat="48.8473827" lon="2.3714639">
+ <tag k="name" v="Corail Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252806984" lat="48.8490527" lon="2.3858203">
+ <tag k="name" v="Hôtel Le Quartier Bastille, Le Faubourg"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252806985" lat="48.8462381" lon="2.3733925">
+ <tag k="name" v="Hôtel Palym"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252807616" lat="48.8395127" lon="2.3927042">
+ <tag k="name" v="Hôtel Le Quartier Bercy - Square"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252809356" lat="48.8452783" lon="2.3754729">
+ <tag k="name" v="Novotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252809357" lat="48.8316566" lon="2.3859378">
+ <tag k="name" v="Sofitel Paris Bercy"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="252817439" lat="48.8336900" lon="2.3550288">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Kyriad Italie Gobelins"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252817440" lat="48.8301361" lon="2.3564885">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Ibis Paris Avenue d'Italie"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wheelchair:description" v="Elevators and sliding doors, not known if there any rooms are specially adapted to wheelchair users (standard rooms are not)"/>
+ </node>
+ <node id="252819330" lat="48.8283030" lon="2.3473418">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Timhotel Italie"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="limited"/>
+ </node>
+ <node id="252819331" lat="48.8274613" lon="2.3519416">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Verlaine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252819332" lat="48.8328956" lon="2.3593239">
+ <tag k="name" v="Jack's"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252819333" lat="48.8329267" lon="2.3552878">
+ <tag k="name" v="La Manufacture"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252819868" lat="48.8301742" lon="2.3530144">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:housenumber" v="13"/>
+ <tag k="addr:postcode" v="75013"/>
+ <tag k="addr:street" v="Boulevard Auguste Blanqui"/>
+ <tag k="name" v="Mercure Blanqui Place d'Italie"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="252820658" lat="48.8321073" lon="2.3538107">
+ <tag k="name" v="Mercure Gobelins"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="252820659" lat="48.8289257" lon="2.3741427">
+ <tag k="name" v="All Seasons Tolbiac Bibliothèque"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252820661" lat="48.8315527" lon="2.3572533">
+ <tag k="name" v="Holiday Inn Express Paris place d'Italie"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252820662" lat="48.8363513" lon="2.3601974">
+ <tag k="name" v="Hôtel Villa Lutece"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252855046" lat="48.8403827" lon="2.3113658">
+ <tag k="name" v="Musée Pasteur"/>
+ <tag k="phone" v="01.45.68.82.83"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.pariserve.tm.fr/"/>
+ </node>
+ <node id="252860489" lat="48.8336237" lon="2.3315381">
+ <tag k="name" v="L'hôtel du Lion"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252863244" lat="48.8421541" lon="2.3046648">
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ <tag k="name" v="Aloha Youth Hostel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252863492" lat="48.8485373" lon="2.2987376">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Eiffel Seine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252958953" lat="48.8671624" lon="2.2857115">
+ <tag k="name" v="Le Parc"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252969205" lat="48.8850200" lon="2.3249065">
+ <tag k="name" v="Hôtel Eldorado"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252969206" lat="48.8867535" lon="2.3138206">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Prince Albert Monceau"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252969212" lat="48.8804975" lon="2.2858320">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Saint-Cyr Étoile"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="252970813" lat="48.8862589" lon="2.3407230">
+ <tag k="name" v="Espace Dali"/>
+ <tag k="phone" v="01.42.64.40.10"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.daliparis.com/"/>
+ </node>
+ <node id="253007446" lat="48.8861896" lon="2.3361789">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Bonséjour"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253007447" lat="48.8846951" lon="2.3480296">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Sofia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253007449" lat="48.8839698" lon="2.3264000">
+ <tag k="name" v="Hôtel des Arts"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253007450" lat="48.8927500" lon="2.3435040">
+ <tag k="name" v="Hôtel Eden Montmartre"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253007452" lat="48.8801463" lon="2.3372618">
+ <tag k="name" v="Paris Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253007453" lat="48.8866384" lon="2.3330799">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Terrass'hôtel"/>
+ <tag k="note" v="SIC: the name is the owner's preferred spelling"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253065826" lat="48.8957518" lon="2.3879761">
+ <tag k="name" v="Cité des Sciences et de l'Industrie"/>
+ <tag k="phone" v="01.40.05.70.00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.cite-sciences.fr/"/>
+ <tag k="wikipedia" v="fr:Cité des sciences et de l'industrie"/>
+ </node>
+ <node id="253983923" lat="48.8693546" lon="2.3495274">
+ <tag k="name" v="Hôtel Bonne Nouvelle"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253986765" lat="48.8644952" lon="2.3495828">
+ <tag k="name" v="Tiquetonne Hôtel"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="253987375" lat="48.8713219" lon="2.3426051">
+ <tag k="name" v="Tryp Hôtel Paris François"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.solmelia.com"/>
+ </node>
+ <node id="253993053" lat="48.8649114" lon="2.3469659">
+ <tag k="name" v="Hôtel Victoires Opéra"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="254008894" lat="48.8615532" lon="2.3650131">
+ <tag k="name" v="Hôtel du Marais"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="254009082" lat="48.8662848" lon="2.3574075">
+ <tag k="name" v="Grand Hôtel des Arts et Metiers"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="254033221" lat="48.8548081" lon="2.3660657">
+ <tag k="name" v="Maison de Victor Hugo"/>
+ <tag k="phone" v="01.42.72.10.16"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ <tag k="wikipedia" v="fr:Maison de Victor Hugo"/>
+ </node>
+ <node id="255038752" lat="48.8460247" lon="2.3981137">
+ <tag k="name" v="Hôtel Royal Bel Air"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="256147849" lat="48.8457093" lon="2.3636395"/>
+ <node id="256148606" lat="48.8456661" lon="2.3628994"/>
+ <node id="256148607" lat="48.8457339" lon="2.3630196"/>
+ <node id="256148608" lat="48.8455192" lon="2.3633114"/>
+ <node id="256148609" lat="48.8491906" lon="2.3576380"/>
+ <node id="256148611" lat="48.8487896" lon="2.3582217"/>
+ <node id="256148612" lat="48.8488687" lon="2.3583590"/>
+ <node id="256148613" lat="48.8485467" lon="2.3587967"/>
+ <node id="256148614" lat="48.8484507" lon="2.3586852"/>
+ <node id="256148615" lat="48.8483377" lon="2.3588225"/>
+ <node id="256148617" lat="48.8484507" lon="2.3589684"/>
+ <node id="256148618" lat="48.8483377" lon="2.3591057"/>
+ <node id="256148619" lat="48.8482417" lon="2.3589856"/>
+ <node id="256148621" lat="48.8481344" lon="2.3591572"/>
+ <node id="256148622" lat="48.8482248" lon="2.3592774"/>
+ <node id="256148623" lat="48.8467449" lon="2.3614832"/>
+ <node id="256148624" lat="48.8466433" lon="2.3613373"/>
+ <node id="256324365" lat="48.8421016" lon="2.3032187">
+ <tag k="created_by" v="Potlatch 0.8b"/>
+ <tag k="name" v="Hôtel Carladez Cambronne"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="256324720" lat="48.8399264" lon="2.3032478">
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ <tag k="name" v="Hôtel Novotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="257746377" lat="48.8228513" lon="2.2733220">
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ <tag k="name" v="Musée de la carte à Jouer"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="259009772" lat="48.8471379" lon="2.3013512">
+ <tag k="name" v="Hôtel Ibis Cambronne"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="259288684" lat="48.8322073" lon="2.2777093">
+ <tag k="created_by" v="Potlatch 0.8a"/>
+ <tag k="name" v="Hôtel Pullman Rive Gauche"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="259477205" lat="48.8384924" lon="2.3151043">
+ <tag k="name" v="Hôtel Novotel Vaugirard"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="261576901" lat="48.8489274" lon="2.3573282"/>
+ <node id="261576902" lat="48.8489053" lon="2.3572967"/>
+ <node id="261576903" lat="48.8492117" lon="2.3568184"/>
+ <node id="261577998" lat="48.8486345" lon="2.3574243"/>
+ <node id="262241323" lat="48.8513447" lon="2.3272485">
+ <tag k="name" v="Hôtel Lutetia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="264775551" lat="48.8789301" lon="2.3620440">
+ <tag k="railway" v="subway_entrance"/>
+ </node>
+ <node id="265606996" lat="48.8261552" lon="2.2782521">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="267211208" lat="48.8784567" lon="2.3583300">
+ <tag k="name" v="Hôtel Kuntz"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="267486654" lat="48.9011636" lon="2.3332328">
+ <tag k="created_by" v="Potlatch 0.9c"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="268057549" lat="48.8454273" lon="2.3241304">
+ <tag k="name" v="Hôtel Le Littré"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274247570" lat="48.8909078" lon="2.3765643">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Crimée"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274249824" lat="48.8716372" lon="2.3925342">
+ <tag k="created_by" v="Potlatch 0.10b"/>
+ <tag k="name" v="Hôtel Ermitage"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274258047" lat="48.8733283" lon="2.3004615">
+ <tag k="name" v="Hôtel Balzac"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274259534" lat="48.8764711" lon="2.2911189">
+ <tag k="name" v="Hôtel Acacias Etoile"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274261929" lat="48.8706550" lon="2.3303465">
+ <tag k="name" v="Le Grand Hôtel Intercontinental"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:InterContinental Paris Le Grand"/>
+ </node>
+ <node id="276203548" lat="48.8273283" lon="2.3211689">
+ <tag k="created_by" v="Potlatch 0.10a"/>
+ <tag k="name" v="Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="276919076" lat="48.8381218" lon="2.2586505">
+ <tag k="amenity" v="restaurant"/>
+ <tag k="name" v="Le Vélodrome"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="280085353" lat="48.8651191" lon="2.3417893">
+ <tag k="amenity" v="arts_centre"/>
+ <tag k="fax" v="01.40.67.92.13"/>
+ <tag k="name" v="Musée en Herbe"/>
+ <tag k="opening_hours" v="Mo-Su 10:00-19:00; Th 10:00-21:00"/>
+ <tag k="phone" v="01.40.67.97.66"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.musee-en-herbe.com/"/>
+ <tag k="wikipedia:en" v="Musée_en_Herbe"/>
+ <tag k="wikipedia:fr" v="Musée_en_Herbe"/>
+ </node>
+ <node id="281000310" lat="48.8685689" lon="2.3500099">
+ <tag k="name" v="Hôtel Royal Aboukir"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="289425906" lat="48.8574419" lon="2.3062436">
+ <tag k="name" v="Grand Hôtel Leveque"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="289439794" lat="48.8684048" lon="2.3213802">
+ <tag k="name" v="Hôtel Sofitel Le Faubourg"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="289464150" lat="48.8728474" lon="2.3193054">
+ <tag k="name" v="Hôtel Astor Saint-Honoré"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="293982721" lat="48.8674459" lon="2.3652734">
+ <tag k="name" v="Crowne Plaza"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="293986527" lat="48.8649422" lon="2.3776744">
+ <tag k="name" v="Hôtel Verlain"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="294038640" lat="48.8782641" lon="2.3739629">
+ <tag k="name" v="Hôtel Antinéa"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="298569320" lat="48.8567926" lon="2.3055714">
+ <tag k="name" v="Hôtel Valadon"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="303825545" lat="48.8631694" lon="2.4154683">
+ <tag k="created_by" v="Potlatch 0.10d"/>
+ <tag k="name" v="Novotel Paris Est"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="304741556" lat="48.8235187" lon="2.2729518">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="304741581" lat="48.8233881" lon="2.2730353">
+ <tag k="name" v="Classics - Parc Des Expositions"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="304741582" lat="48.8233911" lon="2.2748217">
+ <tag k="created_by" v="Potlatch 0.10e"/>
+ <tag k="name" v="Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="306024613" lat="48.8689702" lon="2.3336520">
+ <tag k="name" v="Hôtel États-Unis Opéra"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="306025542" lat="48.8690718" lon="2.3338065">
+ <tag k="name" v="Hôtel L'Horset Opéra"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="306154661" lat="48.8867704" lon="2.3058396">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hôtel Saint-Cyr Étoile"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="306911945" lat="48.8407077" lon="2.2993225">
+ <tag k="created_by" v="Potlatch 0.10e"/>
+ <tag k="name" v="Hôtel Val Girard"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="308113480" lat="48.8467419" lon="2.2878241">
+ <tag k="name" v="Alizé Grenelle"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://www.hotelbeaugralize.com/Alize/"/>
+ </node>
+ <node id="308113482" lat="48.8472201" lon="2.2858925">
+ <tag k="name" v="Beaugrenelle Saint-Charles"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://hotelbeaugralize.com/Beaugrenelle/"/>
+ </node>
+ <node id="308530497" lat="48.8704849" lon="2.3297146">
+ <tag k="name" v="Hôtel Scribe"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="310294465" lat="48.8376960" lon="2.3062844">
+ <tag k="name" v="Holiday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="320952615" lat="48.8515866" lon="2.3435085">
+ <tag k="name" v="Hôtel Cluny Square"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="320952626" lat="48.8498287" lon="2.3425912">
+ <tag k="name" v="Hôtel de Suez"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="321003930" lat="48.8329227" lon="2.3571708">
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="321205142" lat="48.8321555" lon="2.3588862">
+ <tag k="name" v="Hôtel de la place des Alpes"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="321287189" lat="48.8153394" lon="2.4116258">
+ <tag k="name" v="Chinagora"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="321321672" lat="48.8325906" lon="2.3590836">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:housenumber" v="26"/>
+ <tag k="addr:interpolation" v="even"/>
+ <tag k="addr:postcode" v="75013"/>
+ <tag k="addr:street" v="Avenue Stephen Pichon"/>
+ <tag k="name" v="Ibis"/>
+ <tag k="operator" v="Accor"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="323911913" lat="48.8551205" lon="2.3589562">
+ <tag k="amenity" v="arts_centre"/>
+ <tag k="name" v="Maison Européenne de la Photographie"/>
+ <tag k="phone" v="01.44.78.75.00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.mep-fr.org/"/>
+ </node>
+ <node id="324191957" lat="48.8772610" lon="2.3543434">
+ <tag k="name" v="Hôtel Paris Est Lafayette"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="324299178" lat="48.8695018" lon="2.3546892">
+ <tag k="name" v="Musee de l'Eventail"/>
+ <tag k="phone" v="01.42.08.90.20"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.annehoguet.fr/musee.htm"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="330057519" lat="48.8457171" lon="2.3762487">
+ <tag k="name" v="Novotel Paris Gare de Lyon"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="338242543" lat="48.8506769" lon="2.3924817">
+ <tag k="name" v="Hôtel du Prince Eugène"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="338546592" lat="48.8416763" lon="2.3569475"/>
+ <node id="338546614" lat="48.8417045" lon="2.3569311"/>
+ <node id="338546616" lat="48.8417417" lon="2.3570760"/>
+ <node id="338546618" lat="48.8417141" lon="2.3570928"/>
+ <node id="338546620" lat="48.8420379" lon="2.3583498"/>
+ <node id="338546946" lat="48.8420668" lon="2.3583328"/>
+ <node id="338546948" lat="48.8421043" lon="2.3584780"/>
+ <node id="338546951" lat="48.8420754" lon="2.3584949"/>
+ <node id="338546953" lat="48.8419539" lon="2.3586168"/>
+ <node id="338546955" lat="48.8419188" lon="2.3586379"/>
+ <node id="338546977" lat="48.8418587" lon="2.3584039"/>
+ <node id="338546979" lat="48.8418939" lon="2.3583830"/>
+ <node id="338546998" lat="48.8415588" lon="2.3572320"/>
+ <node id="338547031" lat="48.8415943" lon="2.3572123"/>
+ <node id="338547033" lat="48.8414948" lon="2.3570014"/>
+ <node id="338547035" lat="48.8415342" lon="2.3569774"/>
+ <node id="354627220" lat="48.8417734" lon="2.3317486">
+ <tag k="name" v="Hôtel Apostrophe"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="354648289" lat="48.8789004" lon="2.3448758">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue de la Tour d'Auvergne"/>
+ <tag k="name" v="Hôtel La Tour d'Auvergne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="354653445" lat="48.8515615" lon="2.3906806">
+ <tag k="name" v="Grand Hotel Français"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="354658898" lat="48.8390977" lon="2.3974259">
+ <tag k="name" v="Grand Hôtel Doré"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="354664734" lat="48.8452340" lon="2.3101111">
+ <tag k="name" v="Hôtel Sublim Eiffel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="355349419" lat="48.8420815" lon="2.3583884"/>
+ <node id="361128665" lat="48.8707687" lon="2.3598696">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:postcode" v="75010"/>
+ <tag k="addr:street" v="Rue Lucien Sampaix"/>
+ <tag k="name" v="Hôtel Albouy"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="368330079" lat="48.8782622" lon="2.3479113">
+ <tag k="name" v="Relais du Pré"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="368330088" lat="48.8775316" lon="2.3471837">
+ <tag k="name" v="Hôtel du Pré"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="368330093" lat="48.8784021" lon="2.3475786">
+ <tag k="name" v="Residence du Pré"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="394566883" lat="48.8537719" lon="2.3323137">
+ <tag k="name" v="Au Manoir Saint-Germain des Prés"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="408959736" lat="48.8831159" lon="2.3425480">
+ <tag k="name" v="Adagio Paris Montmartre"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="408961558" lat="48.8868146" lon="2.3594625">
+ <tag k="name" v="Kube Hotel"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="409552544" lat="48.8481953" lon="2.3419715">
+ <tag k="name" v="Hôtel Cujas Panthéon"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="410272989" lat="48.8962803" lon="2.3888171">
+ <tag k="name" v="Cité des Enfants"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.cite-sciences.fr/fr/cite-des-sciences/contenu/c/1248104303612/cite-des-enfants/"/>
+ </node>
+ <node id="412221222" lat="48.8272832" lon="2.3485801">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Saint-Charles"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="414195849" lat="48.8400155" lon="2.3612991">
+ <tag k="contact:fax" v="0143319603"/>
+ <tag k="contact:phone" v="0143313750"/>
+ <tag k="contact:website" v="www.hoteldevillas.com"/>
+ <tag k="name" v="Hôtel deVillas"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="418140402" lat="48.8675681" lon="2.3752283">
+ <tag k="name" v="Idéal Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="418389702" lat="48.8353581" lon="2.3231984">
+ <tag k="name" v="Hôtel du Maine"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="418510260" lat="48.8316922" lon="2.3218269">
+ <tag k="name" v="Montparnasse Rive Gauche"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="426157617" lat="48.8328764" lon="2.3573057">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:housenumber" v="12"/>
+ <tag k="addr:postcode" v="75013"/>
+ <tag k="addr:street" v="Rue Édouard Manet"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="426204040" lat="48.8305203" lon="2.3549865">
+ <tag k="name" v="Citadines"/>
+ <tag k="operator" v="Appart'Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="428145711" lat="48.8616153" lon="2.3542965">
+ <tag k="name" v="Musée de la Poupée"/>
+ <tag k="phone" v="01.44.54.04.48"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedelapoupeeparis.com/"/>
+ </node>
+ <node id="428158055" lat="48.8471830" lon="2.3777539">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="471410543" lat="48.8493663" lon="2.4164765">
+ <tag k="name" v="Etap'hotel"/>
+ <tag k="operator" v="Accor Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="472351942" lat="48.8350411" lon="2.4053733">
+ <tag k="name" v="Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="472351943" lat="48.8360061" lon="2.4060195">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="472351944" lat="48.8362217" lon="2.4040125">
+ <tag k="name" v="Sport Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="472398313" lat="48.8665538" lon="2.4164224">
+ <tag k="name" v="Etap Hotel Porte de Bagnolet"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="472398315" lat="48.8664974" lon="2.4167829">
+ <tag k="name" v="Ibis Porte de Bagnolet"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="473827195" lat="48.8351933" lon="2.3876342">
+ <tag k="name" v="Hôtel Kyriad"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="473827217" lat="48.8388012" lon="2.3804572">
+ <tag k="name" v="Novotel Paris Bercy"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="473827219" lat="48.8384022" lon="2.3811331">
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="473838040" lat="48.8365540" lon="2.3938673">
+ <tag k="name" v="Hôtel Paris Bercy"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="474642445" lat="48.8715462" lon="2.3439256">
+ <tag k="name" v="Brebant"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="490767852" lat="48.8746470" lon="2.3057595">
+ <tag k="name" v="Hôtel Plaza Élysées"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="492871739" lat="48.8824615" lon="2.3498469">
+ <tag k="name" v="Hôtel Altona"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="493554424" lat="48.8149659" lon="2.4188038">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="493870538" lat="48.8339332" lon="2.3324134">
+ <tag k="name" v="Catacombes de Paris"/>
+ <tag k="phone" v="01.43.22.47.63"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="catacombes.paris.fr/"/>
+ </node>
+ <node id="494663377" lat="48.8337124" lon="2.3176364">
+ <tag k="name" v="Hôtel Losserand Montparnasse"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="495494197" lat="48.8932614" lon="2.3984506">
+ <tag k="name" v="Hôtel Suite-home"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="495985883" lat="48.8150987" lon="2.4202526">
+ <tag k="addr:housenumber" v="18"/>
+ <tag k="addr:street" v="Avenue du Général de Gaulle"/>
+ <tag k="amenity" v="restaurant"/>
+ <tag k="name" v="Au Petit Caporal"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="hotelpetitcaporal.com"/>
+ </node>
+ <node id="500255579" lat="48.8367389" lon="2.3923200">
+ <tag k="name" v="Wattignies Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="508601813" lat="48.8393596" lon="2.3892373">
+ <tag k="name" v="Hôtel Bercy Gare de Lyon"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="517939496" lat="48.8506899" lon="2.3430502">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939509" lat="48.8503309" lon="2.3437096">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939510" lat="48.8503198" lon="2.3437740">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939511" lat="48.8503211" lon="2.3438631">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939517" lat="48.8503946" lon="2.3435423">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939556" lat="48.8503265" lon="2.3442785">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="517939564" lat="48.8507821" lon="2.3430932">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="519073606" lat="48.8430418" lon="2.4051424">
+ <tag k="name" v="Hôtel Allegro"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="528462280" lat="48.8491489" lon="2.3571521">
+ <tag k="addr:housenumber" v="27"/>
+ <tag k="addr:street" v="Quai Saint-Bernard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="528462282" lat="48.8491358" lon="2.3572323">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="528462288" lat="48.8489560" lon="2.3576146">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="528462291" lat="48.8490933" lon="2.3573602">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="528462294" lat="48.8490377" lon="2.3574771">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="528462297" lat="48.8490728" lon="2.3574053">
+ <tag k="addr:housenumber" v="25"/>
+ <tag k="addr:street" v="Quai Saint-Bernard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="529914028" lat="48.8880472" lon="2.2525318">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:postcode" v="92081"/>
+ <tag k="addr:street" v="Boulevard de Neuilly"/>
+ <tag k="name" v="Hôtel Ibis Paris La Défense"/>
+ <tag k="operator" v="Accor Hotels"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://www.accorhotels.com/de/hotel-0747-novotel-paris-la-defense/index.shtml"/>
+ </node>
+ <node id="529914035" lat="48.8879723" lon="2.2528582">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:postcode" v="92081"/>
+ <tag k="addr:street" v="Boulevard de Neuilly"/>
+ <tag k="name" v="Novotel Paris La Défense"/>
+ <tag k="operator" v="Accor Hotels"/>
+ <tag k="phone" v="(+33)1/41452323"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://www.accorhotels.com/de/hotel-0747-novotel-paris-la-defense/index.shtml"/>
+ </node>
+ <node id="530272873" lat="48.8458059" lon="2.3717510">
+ <tag k="name" v="Terminus"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530272876" lat="48.8493585" lon="2.3744491">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530272916" lat="48.8468441" lon="2.3725504">
+ <tag k="name" v="Viator"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530272917" lat="48.8472258" lon="2.3726440">
+ <tag k="name" v="du Midi"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530272919" lat="48.8467471" lon="2.3717077">
+ <tag k="name" v="Holiday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530751113" lat="48.8470172" lon="2.3723416">
+ <tag k="name" v="Saint-Hubert"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530751143" lat="48.8462447" lon="2.3719493">
+ <tag k="name" v="Azur"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530751145" lat="48.8468976" lon="2.3728340">
+ <tag k="name" v="Lyon Bastille"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530751148" lat="48.8470867" lon="2.3720884">
+ <tag k="name" v="Adriatic"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="530876703" lat="48.8444405" lon="2.3728366">
+ <tag k="name" v="Mercure"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="534906172" lat="48.8460900" lon="2.3773280">
+ <tag k="name" v="Concordia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="534908405" lat="48.8457514" lon="2.3754798">
+ <tag k="name" v="Hôtel Helvetia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535858170" lat="48.8474633" lon="2.3712106">
+ <tag k="name" v="Hôtel de Marseille"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535860983" lat="48.8473704" lon="2.3710629">
+ <tag k="name" v="Hôtel Alexandrie"/>
+ <tag k="rooms" v="37"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535861513" lat="48.8472924" lon="2.3712576">
+ <tag k="name" v="Nièvre Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535864949" lat="48.8470930" lon="2.3706217">
+ <tag k="name" v="Modern's"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535866251" lat="48.8469719" lon="2.3704290">
+ <tag k="name" v="Bel Oranger"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535867137" lat="48.8468671" lon="2.3702623">
+ <tag k="name" v="Hôtel de l'Aveyron"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535869178" lat="48.8468041" lon="2.3701620">
+ <tag k="name" v="Gare de Lyon"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="535946091" lat="48.8457840" lon="2.3705756">
+ <tag k="name" v="Aurore Best Western"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="536518255" lat="48.8337553" lon="2.3488361"/>
+ <node id="536518299" lat="48.8334530" lon="2.3487419"/>
+ <node id="541208586" lat="48.8778477" lon="2.3549476">
+ <tag k="name" v="Hôtel Europe"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="546475310" lat="48.8756394" lon="2.3255995">
+ <tag k="name" v="Concorde Lafayette"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="549777229" lat="48.8416838" lon="2.3561727">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777231" lat="48.8416521" lon="2.3560655">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777232" lat="48.8416362" lon="2.3560746">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777233" lat="48.8416799" lon="2.3561750">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777237" lat="48.8424728" lon="2.3565314">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777238" lat="48.8425541" lon="2.3564916">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777241" lat="48.8424787" lon="2.3565351">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777242" lat="48.8425580" lon="2.3564893">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777244" lat="48.8424812" lon="2.3565450">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777246" lat="48.8424744" lon="2.3565377">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777247" lat="48.8425506" lon="2.3564603">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777248" lat="48.8425564" lon="2.3565009">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777251" lat="48.8425991" lon="2.3562990">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777252" lat="48.8426258" lon="2.3564163">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777253" lat="48.8425964" lon="2.3563006">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777304" lat="48.8419388" lon="2.3568517">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777305" lat="48.8420177" lon="2.3568056">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777308" lat="48.8420216" lon="2.3568033">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777310" lat="48.8420200" lon="2.3567968">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777312" lat="48.8420201" lon="2.3568147">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777314" lat="48.8419430" lon="2.3568599">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777315" lat="48.8419407" lon="2.3568506">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777317" lat="48.8418563" lon="2.3568564">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777318" lat="48.8419325" lon="2.3568267">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777320" lat="48.8418290" lon="2.3567489">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777322" lat="48.8418299" lon="2.3567484">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777496" lat="48.8429106" lon="2.3624356">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777497" lat="48.8431522" lon="2.3634398">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777499" lat="48.8430548" lon="2.3628464">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777500" lat="48.8430064" lon="2.3628749">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777501" lat="48.8430759" lon="2.3629269">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777502" lat="48.8430274" lon="2.3629561">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777503" lat="48.8429438" lon="2.3624149">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777504" lat="48.8432005" lon="2.3634112">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777505" lat="48.8431896" lon="2.3627676">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777506" lat="48.8432333" lon="2.3627414">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777507" lat="48.8432539" lon="2.3628219">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777508" lat="48.8432102" lon="2.3628477">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777509" lat="48.8433609" lon="2.3635160">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777511" lat="48.8433652" lon="2.3635295">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777513" lat="48.8432662" lon="2.3635887">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549777514" lat="48.8432627" lon="2.3635745">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ </node>
+ <node id="549792487" lat="48.8491377" lon="2.3566947">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ </node>
+ <node id="556687831" lat="48.8470895" lon="2.3710844">
+ <tag k="name" v="Hôtel Mignon"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="556688379" lat="48.8476417" lon="2.3718307">
+ <tag k="name" v="de France"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="563298391" lat="48.8499435" lon="2.3756832">
+ <tag k="name" v="Alcyon"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="571518042" lat="48.8845491" lon="2.3442421"/>
+ <node id="571518044" lat="48.8844796" lon="2.3443290"/>
+ <node id="571518046" lat="48.8844759" lon="2.3445350"/>
+ <node id="571518047" lat="48.8845430" lon="2.3447385"/>
+ <node id="571518050" lat="48.8851036" lon="2.3443019"/>
+ <node id="571518052" lat="48.8850797" lon="2.3447991"/>
+ <node id="571518054" lat="48.8850818" lon="2.3447396"/>
+ <node id="571518057" lat="48.8851351" lon="2.3447226"/>
+ <node id="571518058" lat="48.8851775" lon="2.3446714"/>
+ <node id="571518059" lat="48.8852073" lon="2.3446047"/>
+ <node id="571518061" lat="48.8852112" lon="2.3445202"/>
+ <node id="571518062" lat="48.8851911" lon="2.3444434"/>
+ <node id="571518065" lat="48.8851502" lon="2.3443868"/>
+ <node id="571518066" lat="48.8851000" lon="2.3443624"/>
+ <node id="582747696" lat="48.8548916" lon="2.3050685">
+ <tag k="name" v="Hôtel Prince"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="582931088" lat="48.8471437" lon="2.3484561">
+ <tag k="name" v="Le central"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="583318136" lat="48.8196796" lon="2.3762012">
+ <tag k="name" v="Kyriad"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="591672596" lat="48.8565619" lon="2.3273421">
+ <tag k="name" v="Hôtel Pont Royal"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="596074206" lat="48.8920695" lon="2.3152913">
+ <tag k="addr:city" v="paris"/>
+ <tag k="addr:housenumber" v="163 bis ave de clichy"/>
+ <tag k="addr:postcode" v="75017"/>
+ <tag k="addr:street" v="avenue de clichy"/>
+ <tag k="name" v="IBIS"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="597276040" lat="48.8943764" lon="2.3125163">
+ <tag k="name" v="Timhotel Berthier Paris XVII"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="597414066" lat="48.8710747" lon="2.3050358">
+ <tag k="name" v="Hôtel Marriott"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="615119708" lat="48.8918168" lon="2.3021731"/>
+ <node id="615119709" lat="48.8920665" lon="2.3023106"/>
+ <node id="615119710" lat="48.8920847" lon="2.3022824"/>
+ <node id="615119711" lat="48.8922734" lon="2.3025838"/>
+ <node id="615119712" lat="48.8922771" lon="2.3026249"/>
+ <node id="615119713" lat="48.8922165" lon="2.3028298"/>
+ <node id="615119714" lat="48.8919253" lon="2.3020283"/>
+ <node id="615119715" lat="48.8920260" lon="2.3021892"/>
+ <node id="615119716" lat="48.8920064" lon="2.3022181"/>
+ <node id="617271663" lat="48.8333040" lon="2.3565158">
+ <tag k="name" v="Hôtel Coypel"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="617271681" lat="48.8332640" lon="2.3559756">
+ <tag k="name" v="Hôtel des Arts"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="622303211" lat="48.8491651" lon="2.3421996">
+ <tag k="name" v="Hôtel Dacia"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="629382811" lat="48.8371967" lon="2.2971923">
+ <tag k="name" v="Convention Montparnasse"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="632026005" lat="48.8544214" lon="2.3636362"/>
+ <node id="632026006" lat="48.8544160" lon="2.3636326"/>
+ <node id="632026007" lat="48.8543786" lon="2.3637712"/>
+ <node id="632026009" lat="48.8543737" lon="2.3637675"/>
+ <node id="632026010" lat="48.8544559" lon="2.3635061"/>
+ <node id="632026016" lat="48.8544598" lon="2.3640111"/>
+ <node id="632026017" lat="48.8543351" lon="2.3638955"/>
+ <node id="632026018" lat="48.8543331" lon="2.3638943"/>
+ <node id="632026022" lat="48.8543275" lon="2.3639203"/>
+ <node id="632026023" lat="48.8544779" lon="2.3639556"/>
+ <node id="632026037" lat="48.8545637" lon="2.3635871"/>
+ <node id="632026039" lat="48.8545976" lon="2.3636124"/>
+ <node id="632026042" lat="48.8548234" lon="2.3635960"/>
+ <node id="632026043" lat="48.8548104" lon="2.3637288"/>
+ <node id="632026044" lat="48.8548156" lon="2.3635351"/>
+ <node id="632026045" lat="48.8547288" lon="2.3637103"/>
+ <node id="632026049" lat="48.8548137" lon="2.3635334"/>
+ <node id="632026050" lat="48.8548209" lon="2.3636031"/>
+ <node id="632026051" lat="48.8548007" lon="2.3635890"/>
+ <node id="632026052" lat="48.8547883" lon="2.3635159"/>
+ <node id="632026056" lat="48.8546237" lon="2.3640620"/>
+ <node id="632026058" lat="48.8546948" lon="2.3641192"/>
+ <node id="632026193" lat="48.8549169" lon="2.3637622"/>
+ <node id="632026196" lat="48.8548621" lon="2.3636215"/>
+ <node id="632026197" lat="48.8549127" lon="2.3637591"/>
+ <node id="632026198" lat="48.8549426" lon="2.3636496"/>
+ <node id="632026199" lat="48.8548682" lon="2.3636012"/>
+ <node id="632026208" lat="48.8549033" lon="2.3638067"/>
+ <node id="635373657" lat="48.8881213" lon="2.2472387"/>
+ <node id="635373659" lat="48.8881041" lon="2.2472558"/>
+ <node id="635373661" lat="48.8880734" lon="2.2472951"/>
+ <node id="635373663" lat="48.8880561" lon="2.2473264"/>
+ <node id="635373667" lat="48.8880466" lon="2.2473439"/>
+ <node id="635373675" lat="48.8884711" lon="2.2473474"/>
+ <node id="635373676" lat="48.8884409" lon="2.2472947"/>
+ <node id="635373677" lat="48.8884041" lon="2.2472493"/>
+ <node id="635373678" lat="48.8883733" lon="2.2472222"/>
+ <node id="635373679" lat="48.8883636" lon="2.2472155"/>
+ <node id="635373681" lat="48.8883193" lon="2.2471923"/>
+ <node id="635373683" lat="48.8882843" lon="2.2471845"/>
+ <node id="635373686" lat="48.8882371" lon="2.2471837"/>
+ <node id="635373687" lat="48.8881905" lon="2.2471954"/>
+ <node id="635373690" lat="48.8881482" lon="2.2472177"/>
+ <node id="635373693" lat="48.8879453" lon="2.2476851"/>
+ <node id="635373695" lat="48.8879407" lon="2.2476672"/>
+ <node id="635373696" lat="48.8879490" lon="2.2476728"/>
+ <node id="635373700" lat="48.8880156" lon="2.2474167"/>
+ <node id="635373702" lat="48.8880114" lon="2.2474303"/>
+ <node id="635373703" lat="48.8880191" lon="2.2474357"/>
+ <node id="635373704" lat="48.8880156" lon="2.2474479"/>
+ <node id="635373705" lat="48.8880081" lon="2.2474428"/>
+ <node id="635373706" lat="48.8880041" lon="2.2474561"/>
+ <node id="635373722" lat="48.8879663" lon="2.2475821"/>
+ <node id="635373723" lat="48.8879428" lon="2.2480163"/>
+ <node id="635373725" lat="48.8880902" lon="2.2477823"/>
+ <node id="635373726" lat="48.8880788" lon="2.2478220"/>
+ <node id="635373729" lat="48.8880135" lon="2.2477783"/>
+ <node id="635373732" lat="48.8880590" lon="2.2477613"/>
+ <node id="635373735" lat="48.8880473" lon="2.2478010"/>
+ <node id="635373737" lat="48.8883885" lon="2.2480769"/>
+ <node id="635373738" lat="48.8883928" lon="2.2480633"/>
+ <node id="635373740" lat="48.8884011" lon="2.2480686"/>
+ <node id="635373743" lat="48.8885028" lon="2.2477253"/>
+ <node id="635373745" lat="48.8885087" lon="2.2476992"/>
+ <node id="635373748" lat="48.8885139" lon="2.2476710"/>
+ <node id="635373749" lat="48.8885179" lon="2.2476357"/>
+ <node id="635373750" lat="48.8885208" lon="2.2476095"/>
+ <node id="635373752" lat="48.8885210" lon="2.2475510"/>
+ <node id="635373754" lat="48.8885202" lon="2.2475367"/>
+ <node id="635373756" lat="48.8885190" lon="2.2475222"/>
+ <node id="635373758" lat="48.8885174" lon="2.2475090"/>
+ <node id="635373762" lat="48.8885151" lon="2.2474933"/>
+ <node id="635373764" lat="48.8885115" lon="2.2474724"/>
+ <node id="635373766" lat="48.8885087" lon="2.2474605"/>
+ <node id="635373768" lat="48.8884954" lon="2.2474088"/>
+ <node id="635373770" lat="48.8884893" lon="2.2473935"/>
+ <node id="635373772" lat="48.8884897" lon="2.2477766"/>
+ <node id="635373774" lat="48.8884815" lon="2.2477701"/>
+ <node id="635373775" lat="48.8884859" lon="2.2477559"/>
+ <node id="635373776" lat="48.8884938" lon="2.2477610"/>
+ <node id="635373777" lat="48.8879057" lon="2.2481412"/>
+ <node id="635373779" lat="48.8879368" lon="2.2482713"/>
+ <node id="635373782" lat="48.8879720" lon="2.2482971"/>
+ <node id="635373784" lat="48.8878833" lon="2.2485868"/>
+ <node id="635373788" lat="48.8878961" lon="2.2486458"/>
+ <node id="635373794" lat="48.8879585" lon="2.2483413"/>
+ <node id="635373802" lat="48.8879434" lon="2.2483906"/>
+ <node id="635373803" lat="48.8882827" lon="2.2484578"/>
+ <node id="635373805" lat="48.8883051" lon="2.2483824"/>
+ <node id="635373808" lat="48.8882963" lon="2.2483774"/>
+ <node id="635373810" lat="48.8882999" lon="2.2483645"/>
+ <node id="635373813" lat="48.8883094" lon="2.2483700"/>
+ <node id="635373816" lat="48.8883967" lon="2.2480825"/>
+ <node id="648128004" lat="48.8597406" lon="2.4028163">
+ <tag k="addr:housenumber" v="109"/>
+ <tag k="addr:street" v="Rue de Bagnolet"/>
+ <tag k="name" v="Mama Shelter Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="650007651" lat="48.8531115" lon="2.3447283">
+ <tag k="name" v="Albe Hôtel Saint-Michel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="653735967" lat="48.8286829" lon="2.2832909"/>
+ <node id="653735972" lat="48.8286313" lon="2.2832028"/>
+ <node id="653735985" lat="48.8287955" lon="2.2829877"/>
+ <node id="653735989" lat="48.8288482" lon="2.2830752"/>
+ <node id="653802736" lat="48.8300373" lon="2.2841154"/>
+ <node id="653802739" lat="48.8305646" lon="2.2837203"/>
+ <node id="653802743" lat="48.8302052" lon="2.2843071"/>
+ <node id="653802745" lat="48.8301833" lon="2.2843391"/>
+ <node id="653802747" lat="48.8302346" lon="2.2843518"/>
+ <node id="653802748" lat="48.8302424" lon="2.2841503"/>
+ <node id="653802750" lat="48.8303277" lon="2.2841038"/>
+ <node id="653802752" lat="48.8303575" lon="2.2840482"/>
+ <node id="653802754" lat="48.8303759" lon="2.2840716"/>
+ <node id="653802756" lat="48.8306472" lon="2.2838633"/>
+ <node id="653802758" lat="48.8306348" lon="2.2838914"/>
+ <node id="653802759" lat="48.8304540" lon="2.2842291"/>
+ <node id="661136639" lat="48.8229487" lon="2.3162754">
+ <tag k="name" v="F1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="664266270" lat="48.8305333" lon="2.3383411">
+ <tag k="name" v="FIAP"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="664266485" lat="48.8306215" lon="2.3378772"/>
+ <node id="664266486" lat="48.8304645" lon="2.3378784"/>
+ <node id="664266487" lat="48.8304503" lon="2.3385329"/>
+ <node id="664266488" lat="48.8306116" lon="2.3385481"/>
+ <node id="667526202" lat="48.8288534" lon="2.2822756">
+ <tag k="name" v="Hôtel Luxor"/>
+ <tag k="source" v="knowledge"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="676727798" lat="48.8553536" lon="2.3448903"/>
+ <node id="676727799" lat="48.8553850" lon="2.3448594"/>
+ <node id="676727800" lat="48.8553809" lon="2.3448544"/>
+ <node id="676727801" lat="48.8553791" lon="2.3448375"/>
+ <node id="676727802" lat="48.8553762" lon="2.3448342"/>
+ <node id="676727803" lat="48.8553842" lon="2.3448144"/>
+ <node id="676727804" lat="48.8553879" lon="2.3448169"/>
+ <node id="676727805" lat="48.8553990" lon="2.3448109"/>
+ <node id="676727806" lat="48.8554026" lon="2.3448130"/>
+ <node id="676727807" lat="48.8554198" lon="2.3447658"/>
+ <node id="676727808" lat="48.8554104" lon="2.3447563"/>
+ <node id="676727809" lat="48.8554144" lon="2.3447450"/>
+ <node id="676727810" lat="48.8554247" lon="2.3447536"/>
+ <node id="676727811" lat="48.8554313" lon="2.3447387"/>
+ <node id="676727812" lat="48.8554385" lon="2.3447456"/>
+ <node id="676727814" lat="48.8554318" lon="2.3447631"/>
+ <node id="676727815" lat="48.8554437" lon="2.3447740"/>
+ <node id="676727816" lat="48.8554513" lon="2.3447569"/>
+ <node id="676727817" lat="48.8554574" lon="2.3447631"/>
+ <node id="676727818" lat="48.8554505" lon="2.3447792"/>
+ <node id="676727819" lat="48.8554943" lon="2.3448190"/>
+ <node id="676727820" lat="48.8555014" lon="2.3448021"/>
+ <node id="676727821" lat="48.8555064" lon="2.3448078"/>
+ <node id="676727822" lat="48.8555004" lon="2.3448242"/>
+ <node id="676727823" lat="48.8555140" lon="2.3448365"/>
+ <node id="676727841" lat="48.8552887" lon="2.3450523"/>
+ <node id="676727842" lat="48.8552872" lon="2.3450496"/>
+ <node id="676727843" lat="48.8552887" lon="2.3450388"/>
+ <node id="676727844" lat="48.8552945" lon="2.3450372"/>
+ <node id="676727845" lat="48.8552995" lon="2.3450283"/>
+ <node id="676727846" lat="48.8553132" lon="2.3450403"/>
+ <node id="676727847" lat="48.8553328" lon="2.3449899"/>
+ <node id="676727848" lat="48.8553196" lon="2.3449762"/>
+ <node id="676727849" lat="48.8553255" lon="2.3449605"/>
+ <node id="676727850" lat="48.8553399" lon="2.3449711"/>
+ <node id="676727851" lat="48.8552569" lon="2.3452146"/>
+ <node id="676727852" lat="48.8552543" lon="2.3451990"/>
+ <node id="676727853" lat="48.8552569" lon="2.3451460"/>
+ <node id="676727854" lat="48.8552790" lon="2.3452366"/>
+ <node id="676727855" lat="48.8552720" lon="2.3452116"/>
+ <node id="676727856" lat="48.8552669" lon="2.3451928"/>
+ <node id="676727857" lat="48.8552691" lon="2.3451568"/>
+ <node id="676727858" lat="48.8552603" lon="2.3451329"/>
+ <node id="676727859" lat="48.8552743" lon="2.3451411"/>
+ <node id="676727860" lat="48.8552809" lon="2.3451242"/>
+ <node id="676727861" lat="48.8552667" lon="2.3451099"/>
+ <node id="676727862" lat="48.8552692" lon="2.3451038"/>
+ <node id="676727863" lat="48.8552670" lon="2.3450934"/>
+ <node id="676727864" lat="48.8552704" lon="2.3450860"/>
+ <node id="676727865" lat="48.8552729" lon="2.3450859"/>
+ <node id="676727866" lat="48.8553601" lon="2.3449199"/>
+ <node id="676727867" lat="48.8553474" lon="2.3449077"/>
+ <node id="676727868" lat="48.8553672" lon="2.3449026"/>
+ <node id="676727870" lat="48.8555059" lon="2.3449048"/>
+ <node id="676727871" lat="48.8555051" lon="2.3449142"/>
+ <node id="676727872" lat="48.8555046" lon="2.3449209"/>
+ <node id="676727873" lat="48.8555076" lon="2.3449242"/>
+ <node id="676727874" lat="48.8555017" lon="2.3449386"/>
+ <node id="676727875" lat="48.8554991" lon="2.3449369"/>
+ <node id="676727876" lat="48.8554872" lon="2.3449489"/>
+ <node id="676727877" lat="48.8554839" lon="2.3449455"/>
+ <node id="676727878" lat="48.8554820" lon="2.3449461"/>
+ <node id="676727883" lat="48.8554657" lon="2.3449892"/>
+ <node id="676727884" lat="48.8554592" lon="2.3450074"/>
+ <node id="676727885" lat="48.8554378" lon="2.3450595"/>
+ <node id="676727886" lat="48.8554775" lon="2.3450020"/>
+ <node id="676727887" lat="48.8554716" lon="2.3450171"/>
+ <node id="676727888" lat="48.8553844" lon="2.3451971"/>
+ <node id="676727889" lat="48.8554062" lon="2.3452187"/>
+ <node id="676727890" lat="48.8554114" lon="2.3451278"/>
+ <node id="676727891" lat="48.8554233" lon="2.3451392"/>
+ <node id="676727892" lat="48.8554163" lon="2.3451556"/>
+ <node id="676727893" lat="48.8554043" lon="2.3451459"/>
+ <node id="676727896" lat="48.8554500" lon="2.3450715"/>
+ <node id="676727897" lat="48.8554442" lon="2.3450861"/>
+ <node id="676727898" lat="48.8554317" lon="2.3450768"/>
+ <node id="676727902" lat="48.8553411" lon="2.3452868"/>
+ <node id="676727903" lat="48.8553369" lon="2.3452680"/>
+ <node id="676727904" lat="48.8553175" lon="2.3452695"/>
+ <node id="676727905" lat="48.8553126" lon="2.3452887"/>
+ <node id="676727906" lat="48.8553014" lon="2.3452822"/>
+ <node id="676727908" lat="48.8553052" lon="2.3452641"/>
+ <node id="676727909" lat="48.8552770" lon="2.3452622"/>
+ <node id="676727910" lat="48.8552698" lon="2.3452508"/>
+ <node id="676727911" lat="48.8552880" lon="2.3452489"/>
+ <node id="676727915" lat="48.8553848" lon="2.3452809"/>
+ <node id="676727916" lat="48.8553641" lon="2.3452492"/>
+ <node id="676727917" lat="48.8553485" lon="2.3452641"/>
+ <node id="676727918" lat="48.8553508" lon="2.3452845"/>
+ <node id="676727927" lat="48.8555213" lon="2.3448198"/>
+ <node id="676727928" lat="48.8555295" lon="2.3448280"/>
+ <node id="676727929" lat="48.8555240" lon="2.3448412"/>
+ <node id="676727930" lat="48.8555352" lon="2.3448518"/>
+ <node id="676727931" lat="48.8555337" lon="2.3448554"/>
+ <node id="676727932" lat="48.8555388" lon="2.3448607"/>
+ <node id="676727963" lat="48.8555196" lon="2.3449168"/>
+ <node id="676748293" lat="48.8567159" lon="2.3418236">
+ <tag k="name" v="Hôtel Henri IV"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="676841432" lat="48.8305806" lon="2.2837481"/>
+ <node id="676841470" lat="48.8301415" lon="2.2839806"/>
+ <node id="676860093" lat="48.8578252" lon="2.3467061">
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="addr:street" v="Avenue Victoria"/>
+ <tag k="fax" v="+33-1-40263561"/>
+ <tag k="name" v="Hôtel Victoria Châtelet"/>
+ <tag k="phone" v="+33-1-40269017"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hovicha.com"/>
+ </node>
+ <node id="676872530" lat="48.8582914" lon="2.3464129">
+ <tag k="name" v="Hôtel Britannique"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="677125995" lat="48.8388814" lon="2.2893381">
+ <tag k="name" v="Hôtel All Seasons Paris XV Lecourbe"/>
+ <tag k="operator" v="All Seasons"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="677468148" lat="48.8936639" lon="2.3472231">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="22"/>
+ <tag k="addr:postcode" v="75018"/>
+ <tag k="addr:street" v="Square de Clignancourt"/>
+ <tag k="entrance" v="yes"/>
+ <tag k="name" v="Hôtel des Olympiades"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="677805412" lat="48.8608183" lon="2.3461668"/>
+ <node id="677805413" lat="48.8608276" lon="2.3461766"/>
+ <node id="677805417" lat="48.8608275" lon="2.3461719"/>
+ <node id="677805420" lat="48.8608435" lon="2.3461840"/>
+ <node id="677805421" lat="48.8608497" lon="2.3461608"/>
+ <node id="677805423" lat="48.8608785" lon="2.3461757"/>
+ <node id="677805424" lat="48.8608887" lon="2.3461320"/>
+ <node id="677805425" lat="48.8609075" lon="2.3461224"/>
+ <node id="677805427" lat="48.8609803" lon="2.3461596"/>
+ <node id="677805429" lat="48.8609941" lon="2.3462109"/>
+ <node id="677805454" lat="48.8606637" lon="2.3468619"/>
+ <node id="677805455" lat="48.8606551" lon="2.3468585"/>
+ <node id="677805457" lat="48.8606480" lon="2.3468511"/>
+ <node id="677805462" lat="48.8606430" lon="2.3468409"/>
+ <node id="677805463" lat="48.8606421" lon="2.3468262"/>
+ <node id="677805464" lat="48.8606450" lon="2.3468097"/>
+ <node id="677805465" lat="48.8606505" lon="2.3468014"/>
+ <node id="677805466" lat="48.8606559" lon="2.3467968"/>
+ <node id="677805468" lat="48.8606636" lon="2.3467955"/>
+ <node id="677805475" lat="48.8607229" lon="2.3465726"/>
+ <node id="677805477" lat="48.8607193" lon="2.3465706"/>
+ <node id="677805478" lat="48.8607378" lon="2.3464874"/>
+ <node id="677805480" lat="48.8607430" lon="2.3464897"/>
+ <node id="677805481" lat="48.8607274" lon="2.3465342">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Place Marguerite de Navarre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="677805483" lat="48.8606704" lon="2.3467968"/>
+ <node id="677805485" lat="48.8606774" lon="2.3468028"/>
+ <node id="677805487" lat="48.8606892" lon="2.3467445">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Place Marguerite de Navarre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="677805489" lat="48.8606858" lon="2.3467421"/>
+ <node id="677805521" lat="48.8610099" lon="2.3462186"/>
+ <node id="677805522" lat="48.8610146" lon="2.3462006"/>
+ <node id="677805523" lat="48.8610662" lon="2.3462277"/>
+ <node id="677805524" lat="48.8610566" lon="2.3462684"/>
+ <node id="677805526" lat="48.8610894" lon="2.3462891"/>
+ <node id="677805527" lat="48.8611057" lon="2.3462815"/>
+ <node id="677805528" lat="48.8611312" lon="2.3463517"/>
+ <node id="677805530" lat="48.8611419" lon="2.3463028"/>
+ <node id="677805531" lat="48.8611222" lon="2.3463569"/>
+ <node id="677805533" lat="48.8611298" lon="2.3463842"/>
+ <node id="677805534" lat="48.8611401" lon="2.3463797"/>
+ <node id="677805536" lat="48.8611643" lon="2.3463926"/>
+ <node id="677805538" lat="48.8611594" lon="2.3464180"/>
+ <node id="677805540" lat="48.8611497" lon="2.3464231"/>
+ <node id="677805542" lat="48.8611576" lon="2.3464560"/>
+ <node id="677805544" lat="48.8611706" lon="2.3464494"/>
+ <node id="677805548" lat="48.8612133" lon="2.3464747"/>
+ <node id="677805550" lat="48.8612117" lon="2.3464823"/>
+ <node id="677805552" lat="48.8612226" lon="2.3464886"/>
+ <node id="677805553" lat="48.8612083" lon="2.3465545"/>
+ <node id="677805555" lat="48.8612302" lon="2.3465666"/>
+ <node id="677805557" lat="48.8611935" lon="2.3466101"/>
+ <node id="677805559" lat="48.8611612" lon="2.3469231"/>
+ <node id="677805560" lat="48.8611661" lon="2.3469535"/>
+ <node id="677805562" lat="48.8612180" lon="2.3466231"/>
+ <node id="677805564" lat="48.8611857" lon="2.3466461"/>
+ <node id="677805565" lat="48.8612210" lon="2.3466653"/>
+ <node id="677805566" lat="48.8606177" lon="2.3470667"/>
+ <node id="677805567" lat="48.8606121" lon="2.3470632"/>
+ <node id="677805568" lat="48.8606166" lon="2.3470415"/>
+ <node id="677805569" lat="48.8606235" lon="2.3470437"/>
+ <node id="677805570" lat="48.8606362" lon="2.3469864">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Place Marguerite de Navarre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="677805571" lat="48.8605782" lon="2.3472097"/>
+ <node id="677805573" lat="48.8605920" lon="2.3472059"/>
+ <node id="677805574" lat="48.8605893" lon="2.3472158"/>
+ <node id="677805576" lat="48.8605820" lon="2.3471922"/>
+ <node id="677805577" lat="48.8605879" lon="2.3471948"/>
+ <node id="677805579" lat="48.8607260" lon="2.3472766"/>
+ <node id="677805581" lat="48.8607239" lon="2.3472861"/>
+ <node id="677805583" lat="48.8607128" lon="2.3472805"/>
+ <node id="677805585" lat="48.8607148" lon="2.3472710"/>
+ <node id="677805602" lat="48.8610017" lon="2.3474204"/>
+ <node id="677805603" lat="48.8609985" lon="2.3474344"/>
+ <node id="677805604" lat="48.8609921" lon="2.3474581"/>
+ <node id="677805605" lat="48.8609944" lon="2.3474589"/>
+ <node id="677805606" lat="48.8609913" lon="2.3474725"/>
+ <node id="677805607" lat="48.8609828" lon="2.3474668"/>
+ <node id="677805608" lat="48.8609914" lon="2.3474318"/>
+ <node id="677805609" lat="48.8609860" lon="2.3474278"/>
+ <node id="677805610" lat="48.8609884" lon="2.3474181"/>
+ <node id="677805611" lat="48.8611661" lon="2.3469800"/>
+ <node id="677805612" lat="48.8611633" lon="2.3470052"/>
+ <node id="677805613" lat="48.8611583" lon="2.3470250"/>
+ <node id="677805614" lat="48.8611513" lon="2.3470428"/>
+ <node id="677805615" lat="48.8611427" lon="2.3470602"/>
+ <node id="677805616" lat="48.8611319" lon="2.3470742"/>
+ <node id="677805617" lat="48.8611237" lon="2.3470823"/>
+ <node id="677805618" lat="48.8610561" lon="2.3473777"/>
+ <node id="677805619" lat="48.8610166" lon="2.3473570"/>
+ <node id="677805620" lat="48.8610413" lon="2.3474421"/>
+ <node id="677805621" lat="48.8610387" lon="2.3474541"/>
+ <node id="677967765" lat="48.8606933" lon="2.3467079"/>
+ <node id="679398752" lat="48.8638091" lon="2.3326325">
+ <tag k="name" v="Hôtel Régina"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="681244345" lat="48.8504471" lon="2.2886735"/>
+ <node id="681244412" lat="48.8547291" lon="2.2925050"/>
+ <node id="681244515" lat="48.8547492" lon="2.2924761"/>
+ <node id="681244621" lat="48.8550309" lon="2.2921335"/>
+ <node id="681244688" lat="48.8550123" lon="2.2923366"/>
+ <node id="681245256" lat="48.8506236" lon="2.2887582"/>
+ <node id="681245462" lat="48.8506092" lon="2.2888202"/>
+ <node id="681245486" lat="48.8551196" lon="2.2921282"/>
+ <node id="681245742" lat="48.8545170" lon="2.2921932"/>
+ <node id="681245807" lat="48.8506249" lon="2.2887026"/>
+ <node id="681245853" lat="48.8547000" lon="2.2919712"/>
+ <node id="681246004" lat="48.8546332" lon="2.2920743"/>
+ <node id="681246052" lat="48.8505949" lon="2.2887641"/>
+ <node id="681246128" lat="48.8549551" lon="2.2921502"/>
+ <node id="681246245" lat="48.8551165" lon="2.2921243"/>
+ <node id="681246320" lat="48.8551329" lon="2.2921060"/>
+ <node id="681246551" lat="48.8550473" lon="2.2922821"/>
+ <node id="681246574" lat="48.8546116" lon="2.2920460"/>
+ <node id="681246601" lat="48.8506151" lon="2.2887570"/>
+ <node id="681246619" lat="48.8550912" lon="2.2921646"/>
+ <node id="681246626" lat="48.8504340" lon="2.2887377">
+ <tag k="FIXME" v="add name, ajouter le nom"/>
+ <tag k="amenity" v="cafe"/>
+ </node>
+ <node id="681246965" lat="48.8549977" lon="2.2920855"/>
+ <node id="681247073" lat="48.8550905" lon="2.2920454"/>
+ <node id="681247229" lat="48.8547234" lon="2.2924983"/>
+ <node id="681247237" lat="48.8551071" lon="2.2921889"/>
+ <node id="681247354" lat="48.8506031" lon="2.2888035"/>
+ <node id="681247415" lat="48.8548664" lon="2.2921624"/>
+ <node id="681247437" lat="48.8506118" lon="2.2887679"/>
+ <node id="681247478" lat="48.8505883" lon="2.2888704"/>
+ <node id="681247523" lat="48.8549143" lon="2.2920895"/>
+ <node id="681247571" lat="48.8506009" lon="2.2888117"/>
+ <node id="681247592" lat="48.8505895" lon="2.2887859"/>
+ <node id="681247630" lat="48.8548388" lon="2.2926070"/>
+ <node id="681247720" lat="48.8548304" lon="2.2921629"/>
+ <node id="681677111" lat="48.8629051" lon="2.3356927">
+ <tag k="name" v="Hôtel du Louvre"/>
+ <tag k="name:ru" v="отель Лувр"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="681818221" lat="48.8648471" lon="2.3365400">
+ <tag k="name" v="Hôtel Louvre Piémont"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="681818370" lat="48.8662227" lon="2.3372151"/>
+ <node id="681818371" lat="48.8663136" lon="2.3372627"/>
+ <node id="681818409" lat="48.8661711" lon="2.3374322"/>
+ <node id="681818410" lat="48.8662882" lon="2.3373623"/>
+ <node id="681818411" lat="48.8662631" lon="2.3374785"/>
+ <node id="681842338" lat="48.8662717" lon="2.3372408">
+ <tag k="addr:housenumber" v="50"/>
+ <tag k="addr:street" v="Rue de Richelieu"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="681842395" lat="48.8662176" lon="2.3374556">
+ <tag k="addr:housenumber" v="45"/>
+ <tag k="addr:street" v="Rue de Montpensier"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="682215491" lat="48.8640595" lon="2.3341241">
+ <tag k="name" v="Hôtel Normandy"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="682302357" lat="48.8664704" lon="2.3357313">
+ <tag k="name" v="Hôtel Louvre Saint-Anne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="682302360" lat="48.8667958" lon="2.3359208">
+ <tag k="name" v="Hôtel Opéra Maintenon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="682364952" lat="48.8659945" lon="2.3315480">
+ <tag k="name" v="Hôtel Prince Albert Louvre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="682433279" lat="48.8505420" lon="2.2888306">
+ <tag k="addr:housenumber" v="30"/>
+ <tag k="name" v="Campanile"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="683094871" lat="48.8650960" lon="2.3319535">
+ <tag k="name" v="Londres Saint-Honoré"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="683362063" lat="48.8678579" lon="2.3288217"/>
+ <node id="683362092" lat="48.8684424" lon="2.3280605"/>
+ <node id="683362094" lat="48.8682599" lon="2.3278882"/>
+ <node id="683362144" lat="48.8684686" lon="2.3286883"/>
+ <node id="683362165" lat="48.8687418" lon="2.3273656"/>
+ <node id="683362175" lat="48.8689633" lon="2.3275508"/>
+ <node id="683362312" lat="48.8682006" lon="2.3291898"/>
+ <node id="683362315" lat="48.8681939" lon="2.3291371"/>
+ <node id="683362318" lat="48.8682571" lon="2.3291804"/>
+ <node id="683512523" lat="48.8638554" lon="2.3221594"/>
+ <node id="683512525" lat="48.8638579" lon="2.3221613"/>
+ <node id="683512527" lat="48.8638538" lon="2.3221737"/>
+ <node id="683512528" lat="48.8638513" lon="2.3221718"/>
+ <node id="683512530" lat="48.8639076" lon="2.3219986"/>
+ <node id="683512532" lat="48.8638964" lon="2.3220444"/>
+ <node id="683512533" lat="48.8638933" lon="2.3220422"/>
+ <node id="683512534" lat="48.8640098" lon="2.3221304"/>
+ <node id="683512536" lat="48.8640121" lon="2.3221322"/>
+ <node id="683512537" lat="48.8640096" lon="2.3220560"/>
+ <node id="683512540" lat="48.8639916" lon="2.3220424"/>
+ <node id="683512541" lat="48.8640265" lon="2.3220886"/>
+ <node id="683512543" lat="48.8640044" lon="2.3220719"/>
+ <node id="683512544" lat="48.8639465" lon="2.3220292"/>
+ <node id="683512547" lat="48.8639861" lon="2.3220590"/>
+ <node id="683512549" lat="48.8639339" lon="2.3219992"/>
+ <node id="683512550" lat="48.8639519" lon="2.3220128"/>
+ <node id="683512552" lat="48.8639288" lon="2.3220146"/>
+ <node id="683512554" lat="48.8636896" lon="2.3226762"/>
+ <node id="683512556" lat="48.8636875" lon="2.3226746"/>
+ <node id="683512558" lat="48.8636838" lon="2.3226861"/>
+ <node id="683512560" lat="48.8636863" lon="2.3226880"/>
+ <node id="683512562" lat="48.8636479" lon="2.3228046"/>
+ <node id="683512563" lat="48.8636448" lon="2.3228023"/>
+ <node id="683512565" lat="48.8636412" lon="2.3228134"/>
+ <node id="683512566" lat="48.8636439" lon="2.3228154"/>
+ <node id="683512568" lat="48.8637316" lon="2.3225467"/>
+ <node id="683512569" lat="48.8637291" lon="2.3225449"/>
+ <node id="683512572" lat="48.8637252" lon="2.3225567"/>
+ <node id="683512573" lat="48.8637281" lon="2.3225589"/>
+ <node id="683512575" lat="48.8635046" lon="2.3232313"/>
+ <node id="683512578" lat="48.8635188" lon="2.3231881"/>
+ <node id="683512580" lat="48.8635212" lon="2.3231900"/>
+ <node id="683512581" lat="48.8635601" lon="2.3230719"/>
+ <node id="683512583" lat="48.8635575" lon="2.3230699"/>
+ <node id="683512584" lat="48.8635609" lon="2.3230597"/>
+ <node id="683512586" lat="48.8635633" lon="2.3230615"/>
+ <node id="683512588" lat="48.8635446" lon="2.3232575"/>
+ <node id="683512590" lat="48.8635220" lon="2.3232600"/>
+ <node id="683512591" lat="48.8635274" lon="2.3232457"/>
+ <node id="683512593" lat="48.8637194" lon="2.3230182"/>
+ <node id="683512594" lat="48.8637220" lon="2.3230202"/>
+ <node id="683512596" lat="48.8636020" lon="2.3229440"/>
+ <node id="683512598" lat="48.8635993" lon="2.3229419"/>
+ <node id="683512600" lat="48.8636030" lon="2.3229307"/>
+ <node id="683512601" lat="48.8636054" lon="2.3229325"/>
+ <node id="683512603" lat="48.8636773" lon="2.3231464"/>
+ <node id="683512604" lat="48.8636798" lon="2.3231482"/>
+ <node id="683512606" lat="48.8637182" lon="2.3230316"/>
+ <node id="683512607" lat="48.8637157" lon="2.3230297"/>
+ <node id="683512609" lat="48.8636760" lon="2.3231599"/>
+ <node id="683512610" lat="48.8636734" lon="2.3231580"/>
+ <node id="683512611" lat="48.8635778" lon="2.3233057"/>
+ <node id="683512622" lat="48.8635387" lon="2.3232727"/>
+ <node id="683512624" lat="48.8636353" lon="2.3232746"/>
+ <node id="683512625" lat="48.8636376" lon="2.3232767"/>
+ <node id="683512627" lat="48.8636235" lon="2.3233201"/>
+ <node id="683512628" lat="48.8636019" lon="2.3233035"/>
+ <node id="683512630" lat="48.8635962" lon="2.3233194"/>
+ <node id="683512632" lat="48.8635838" lon="2.3232896"/>
+ <node id="683512633" lat="48.8639257" lon="2.3223875"/>
+ <node id="683512635" lat="48.8638901" lon="2.3225054"/>
+ <node id="683512637" lat="48.8638876" lon="2.3225034"/>
+ <node id="683512638" lat="48.8638862" lon="2.3225174"/>
+ <node id="683512640" lat="48.8638837" lon="2.3225155"/>
+ <node id="683512641" lat="48.8637738" lon="2.3224181"/>
+ <node id="683512643" lat="48.8637713" lon="2.3224162"/>
+ <node id="683512645" lat="48.8637672" lon="2.3224286"/>
+ <node id="683512646" lat="48.8637698" lon="2.3224305"/>
+ <node id="683512648" lat="48.8638131" lon="2.3222875"/>
+ <node id="683512649" lat="48.8638157" lon="2.3222895"/>
+ <node id="683512651" lat="48.8638120" lon="2.3223022"/>
+ <node id="683512652" lat="48.8638091" lon="2.3223000"/>
+ <node id="683512654" lat="48.8639746" lon="2.3222475"/>
+ <node id="683512655" lat="48.8639720" lon="2.3222455"/>
+ <node id="683512657" lat="48.8639280" lon="2.3223892"/>
+ <node id="683512658" lat="48.8639680" lon="2.3222582"/>
+ <node id="683512660" lat="48.8639705" lon="2.3222601"/>
+ <node id="683512661" lat="48.8639320" lon="2.3223771"/>
+ <node id="683512663" lat="48.8639295" lon="2.3223752"/>
+ <node id="683512665" lat="48.8638440" lon="2.3226457"/>
+ <node id="683512666" lat="48.8638419" lon="2.3226442"/>
+ <node id="683512668" lat="48.8638034" lon="2.3227612"/>
+ <node id="683512669" lat="48.8638059" lon="2.3227631"/>
+ <node id="683512671" lat="48.8638455" lon="2.3226319"/>
+ <node id="683512673" lat="48.8638479" lon="2.3226338"/>
+ <node id="683512674" lat="48.8637598" lon="2.3229037"/>
+ <node id="683512676" lat="48.8637576" lon="2.3229020"/>
+ <node id="683512678" lat="48.8638020" lon="2.3227750"/>
+ <node id="683512679" lat="48.8637996" lon="2.3227732"/>
+ <node id="683512681" lat="48.8637613" lon="2.3228896"/>
+ <node id="683512682" lat="48.8637638" lon="2.3228915"/>
+ <node id="683512703" lat="48.8659984" lon="2.3236056"/>
+ <node id="683512705" lat="48.8659584" lon="2.3235751"/>
+ <node id="683512706" lat="48.8660217" lon="2.3236032"/>
+ <node id="683512708" lat="48.8660038" lon="2.3235895"/>
+ <node id="683512710" lat="48.8659411" lon="2.3235620"/>
+ <node id="683512711" lat="48.8659271" lon="2.3235513"/>
+ <node id="683512713" lat="48.8659637" lon="2.3235594"/>
+ <node id="683512715" lat="48.8659464" lon="2.3235462"/>
+ <node id="683512724" lat="48.8659240" lon="2.3235659"/>
+ <node id="683512725" lat="48.8659274" lon="2.3235686"/>
+ <node id="683512727" lat="48.8659236" lon="2.3235617"/>
+ <node id="683512729" lat="48.8659250" lon="2.3235628"/>
+ <node id="683512786" lat="48.8657974" lon="2.3239506"/>
+ <node id="683512787" lat="48.8658134" lon="2.3239026"/>
+ <node id="683512789" lat="48.8658009" lon="2.3239532"/>
+ <node id="683512791" lat="48.8657957" lon="2.3239557"/>
+ <node id="683512792" lat="48.8657928" lon="2.3239645"/>
+ <node id="683512793" lat="48.8657825" lon="2.3240106"/>
+ <node id="683512795" lat="48.8657960" lon="2.3239669"/>
+ <node id="683512796" lat="48.8657911" lon="2.3239816"/>
+ <node id="683512798" lat="48.8657772" lon="2.3239709"/>
+ <node id="683512799" lat="48.8657677" lon="2.3239993"/>
+ <node id="683512801" lat="48.8657148" lon="2.3242037"/>
+ <node id="683512803" lat="48.8657174" lon="2.3241959"/>
+ <node id="683512804" lat="48.8657012" lon="2.3242536"/>
+ <node id="683512806" lat="48.8657172" lon="2.3242055"/>
+ <node id="683512807" lat="48.8657203" lon="2.3241981"/>
+ <node id="683512809" lat="48.8656974" lon="2.3242588"/>
+ <node id="683512810" lat="48.8656995" lon="2.3242523"/>
+ <node id="683512812" lat="48.8656998" lon="2.3242607"/>
+ <node id="683512813" lat="48.8657409" lon="2.3241359"/>
+ <node id="683512815" lat="48.8657362" lon="2.3241323"/>
+ <node id="683512817" lat="48.8657328" lon="2.3241422"/>
+ <node id="683512818" lat="48.8657339" lon="2.3241475"/>
+ <node id="683512827" lat="48.8657351" lon="2.3241439"/>
+ <node id="683512828" lat="48.8657365" lon="2.3241495"/>
+ <node id="683512830" lat="48.8658132" lon="2.3242741"/>
+ <node id="683512831" lat="48.8656283" lon="2.3244767"/>
+ <node id="683512833" lat="48.8656418" lon="2.3244261"/>
+ <node id="683512834" lat="48.8656042" lon="2.3245343"/>
+ <node id="683512836" lat="48.8656011" lon="2.3245436"/>
+ <node id="683512838" lat="48.8656079" lon="2.3245316"/>
+ <node id="683512839" lat="48.8656064" lon="2.3245360"/>
+ <node id="683512843" lat="48.8656258" lon="2.3244838"/>
+ <node id="683512844" lat="48.8656095" lon="2.3245328"/>
+ <node id="683512846" lat="48.8656260" lon="2.3244749"/>
+ <node id="683512848" lat="48.8656236" lon="2.3244822"/>
+ <node id="683512851" lat="48.8656339" lon="2.3245676"/>
+ <node id="683512853" lat="48.8656326" lon="2.3245709"/>
+ <node id="683512854" lat="48.8656236" lon="2.3245633"/>
+ <node id="683512856" lat="48.8656146" lon="2.3245535"/>
+ <node id="683512857" lat="48.8656788" lon="2.3243145"/>
+ <node id="683512859" lat="48.8656810" lon="2.3243078"/>
+ <node id="683512860" lat="48.8656646" lon="2.3243661"/>
+ <node id="683512862" lat="48.8656812" lon="2.3243164"/>
+ <node id="683512863" lat="48.8656835" lon="2.3243097"/>
+ <node id="683512865" lat="48.8656445" lon="2.3244282"/>
+ <node id="683512866" lat="48.8656439" lon="2.3244197"/>
+ <node id="683512868" lat="48.8656636" lon="2.3243720"/>
+ <node id="683512869" lat="48.8656469" lon="2.3244220"/>
+ <node id="683512871" lat="48.8656623" lon="2.3243643"/>
+ <node id="683512872" lat="48.8656605" lon="2.3243696"/>
+ <node id="683512874" lat="48.8657978" lon="2.3243327"/>
+ <node id="683512875" lat="48.8658002" lon="2.3243256"/>
+ <node id="683512877" lat="48.8657969" lon="2.3243231"/>
+ <node id="683512878" lat="48.8657797" lon="2.3243883"/>
+ <node id="683512880" lat="48.8657822" lon="2.3243809"/>
+ <node id="683512881" lat="48.8657796" lon="2.3243790"/>
+ <node id="683512883" lat="48.8657956" lon="2.3243310"/>
+ <node id="683512884" lat="48.8657629" lon="2.3244369"/>
+ <node id="683512886" lat="48.8657606" lon="2.3244440"/>
+ <node id="683512887" lat="48.8657767" lon="2.3243860"/>
+ <node id="683512889" lat="48.8657604" lon="2.3244350"/>
+ <node id="683512891" lat="48.8657577" lon="2.3244418"/>
+ <node id="683512893" lat="48.8657054" lon="2.3246195"/>
+ <node id="683512894" lat="48.8657082" lon="2.3246110"/>
+ <node id="683512896" lat="48.8657264" lon="2.3245490"/>
+ <node id="683512897" lat="48.8657240" lon="2.3245562"/>
+ <node id="683512899" lat="48.8657239" lon="2.3245471"/>
+ <node id="683512900" lat="48.8657080" lon="2.3246053"/>
+ <node id="683512902" lat="48.8657065" lon="2.3246097"/>
+ <node id="683512904" lat="48.8657213" lon="2.3245541"/>
+ <node id="683512905" lat="48.8657050" lon="2.3246030"/>
+ <node id="683512907" lat="48.8656912" lon="2.3246093"/>
+ <node id="683512908" lat="48.8656903" lon="2.3246121"/>
+ <node id="683512910" lat="48.8656716" lon="2.3245992"/>
+ <node id="683512911" lat="48.8656725" lon="2.3245964"/>
+ <node id="683512913" lat="48.8657446" lon="2.3244930"/>
+ <node id="683512914" lat="48.8657424" lon="2.3244996"/>
+ <node id="683512916" lat="48.8657415" lon="2.3244906"/>
+ <node id="683512918" lat="48.8657403" lon="2.3244979"/>
+ <node id="683512923" lat="48.8658901" lon="2.3236811"/>
+ <node id="683512930" lat="48.8658868" lon="2.3236786"/>
+ <node id="683512932" lat="48.8658893" lon="2.3236713"/>
+ <node id="683512933" lat="48.8658924" lon="2.3236737"/>
+ <node id="683512935" lat="48.8658716" lon="2.3237376"/>
+ <node id="683512936" lat="48.8658682" lon="2.3237351"/>
+ <node id="683512937" lat="48.8658709" lon="2.3237270"/>
+ <node id="683512939" lat="48.8658741" lon="2.3237294"/>
+ <node id="683512941" lat="48.8659849" lon="2.3237515"/>
+ <node id="683512942" lat="48.8659056" lon="2.3236234"/>
+ <node id="683512944" lat="48.8659084" lon="2.3236255"/>
+ <node id="683512945" lat="48.8659109" lon="2.3236184"/>
+ <node id="683512947" lat="48.8659080" lon="2.3236162"/>
+ <node id="683512948" lat="48.8658194" lon="2.3238976"/>
+ <node id="683512950" lat="48.8658159" lon="2.3238950"/>
+ <node id="683512951" lat="48.8658168" lon="2.3239052"/>
+ <node id="683512953" lat="48.8658536" lon="2.3237915"/>
+ <node id="683512954" lat="48.8658508" lon="2.3237893"/>
+ <node id="683512956" lat="48.8658529" lon="2.3237831"/>
+ <node id="683512957" lat="48.8658557" lon="2.3237852"/>
+ <node id="683512959" lat="48.8658358" lon="2.3238483"/>
+ <node id="683512960" lat="48.8658323" lon="2.3238456"/>
+ <node id="683512962" lat="48.8658346" lon="2.3238385"/>
+ <node id="683512963" lat="48.8658373" lon="2.3238406"/>
+ <node id="683512965" lat="48.8659302" lon="2.3239190"/>
+ <node id="683512966" lat="48.8659331" lon="2.3239212"/>
+ <node id="683512967" lat="48.8659357" lon="2.3239135"/>
+ <node id="683512968" lat="48.8659326" lon="2.3239111"/>
+ <node id="683512969" lat="48.8659483" lon="2.3238639"/>
+ <node id="683512970" lat="48.8659509" lon="2.3238658"/>
+ <node id="683512971" lat="48.8659536" lon="2.3238577"/>
+ <node id="683512972" lat="48.8659505" lon="2.3238553"/>
+ <node id="683512973" lat="48.8659663" lon="2.3238077"/>
+ <node id="683512974" lat="48.8659718" lon="2.3238016"/>
+ <node id="683512975" lat="48.8659691" lon="2.3238098"/>
+ <node id="683512976" lat="48.8659690" lon="2.3237995"/>
+ <node id="683512977" lat="48.8660237" lon="2.3236417"/>
+ <node id="683512978" lat="48.8659906" lon="2.3237464"/>
+ <node id="683512979" lat="48.8659881" lon="2.3237540"/>
+ <node id="683512980" lat="48.8660033" lon="2.3236951"/>
+ <node id="683512981" lat="48.8659871" lon="2.3237437"/>
+ <node id="683512982" lat="48.8660093" lon="2.3236906"/>
+ <node id="683512983" lat="48.8660069" lon="2.3236979"/>
+ <node id="683512984" lat="48.8660215" lon="2.3236399"/>
+ <node id="683512985" lat="48.8660056" lon="2.3236877"/>
+ <node id="683512986" lat="48.8660272" lon="2.3236383"/>
+ <node id="683512987" lat="48.8660254" lon="2.3236368"/>
+ <node id="683512988" lat="48.8660164" lon="2.3236192"/>
+ <node id="683512989" lat="48.8660301" lon="2.3236297"/>
+ <node id="683512990" lat="48.8658350" lon="2.3242216"/>
+ <node id="683512991" lat="48.8658412" lon="2.3242031"/>
+ <node id="683512992" lat="48.8658900" lon="2.3240412"/>
+ <node id="683512993" lat="48.8658158" lon="2.3242761"/>
+ <node id="683512994" lat="48.8658181" lon="2.3242693"/>
+ <node id="683512995" lat="48.8658154" lon="2.3242673"/>
+ <node id="683512996" lat="48.8658315" lon="2.3242190"/>
+ <node id="683512997" lat="48.8658926" lon="2.3240432"/>
+ <node id="683512998" lat="48.8658986" lon="2.3240255"/>
+ <node id="683512999" lat="48.8658958" lon="2.3240233"/>
+ <node id="683513000" lat="48.8659119" lon="2.3239748"/>
+ <node id="683513010" lat="48.8659153" lon="2.3239774"/>
+ <node id="683513012" lat="48.8659178" lon="2.3239699"/>
+ <node id="683513014" lat="48.8659141" lon="2.3239671"/>
+ <node id="683513015" lat="48.8658380" lon="2.3242007"/>
+ <node id="684614123" lat="48.8505378" lon="2.2886883">
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="687993813" lat="48.8665049" lon="2.3397933"/>
+ <node id="687993949" lat="48.8664147" lon="2.3397432"/>
+ <node id="687994318" lat="48.8663542" lon="2.3399983"/>
+ <node id="687994326" lat="48.8664460" lon="2.3400477"/>
+ <node id="688006988" lat="48.8664042" lon="2.3400252">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue de la Banque"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="689142924" lat="48.8692604" lon="2.3339332">
+ <tag k="name" v="Hôtel France d'Antin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="689178439" lat="48.8692690" lon="2.3340349">
+ <tag k="name" v="Hôtel France d'Antin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="691376980" lat="48.8748178" lon="2.3602198">
+ <tag k="name" v="Hôtel à la Villa Saint-Martin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="694681440" lat="48.8514252" lon="2.3590008"/>
+ <node id="694681453" lat="48.8515011" lon="2.3587579"/>
+ <node id="694681520" lat="48.8517549" lon="2.3589342"/>
+ <node id="694681590" lat="48.8516577" lon="2.3592009"/>
+ <node id="694681698" lat="48.8514923" lon="2.3588204"/>
+ <node id="694681710" lat="48.8514591" lon="2.3587245"/>
+ <node id="694681773" lat="48.8513751" lon="2.3589582"/>
+ <node id="694681779" lat="48.8515112" lon="2.3587288"/>
+ <node id="694681910" lat="48.8515804" lon="2.3591318"/>
+ <node id="694681973" lat="48.8517073" lon="2.3590648">
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="addr:street" v="Quai d'Anjou"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="694681988" lat="48.8515178" lon="2.3587344"/>
+ <node id="694682126" lat="48.8516472" lon="2.3589515"/>
+ <node id="694682137" lat="48.8514082" lon="2.3588626"/>
+ <node id="694682160" lat="48.8513930" lon="2.3589087"/>
+ <node id="695121789" lat="48.8527864" lon="2.3423027">
+ <tag k="name" v="Holiday Inn Paris Notre-Dame"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="695286618" lat="48.8497835" lon="2.3468492">
+ <tag k="name" v="Jardin de Cluny"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="696070832" lat="48.8524421" lon="2.3546323">
+ <tag k="name" v="Hôtel de Lutèce"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="696070843" lat="48.8525926" lon="2.3542186">
+ <tag k="name" v="Hôtel Saint-Louis"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="696070844" lat="48.8523187" lon="2.3549674">
+ <tag k="name" v="Hôtel des Deux Iles"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="697323147" lat="48.8277692" lon="2.2733630">
+ <tag k="name" v="Le Gabriel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="697454394" lat="48.8611082" lon="2.3523882"/>
+ <node id="697454536" lat="48.8611022" lon="2.3523037"/>
+ <node id="697454538" lat="48.8609278" lon="2.3522895"/>
+ <node id="697454546" lat="48.8611159" lon="2.3522469"/>
+ <node id="697454548" lat="48.8613444" lon="2.3517851"/>
+ <node id="697454549" lat="48.8609384" lon="2.3522449"/>
+ <node id="697454558" lat="48.8613208" lon="2.3524551"/>
+ <node id="697454566" lat="48.8611313" lon="2.3523487"/>
+ <node id="697454576" lat="48.8597029" lon="2.3524388"/>
+ <node id="697454579" lat="48.8612043" lon="2.3523617"/>
+ <node id="697454582" lat="48.8611370" lon="2.3523252"/>
+ <node id="697454593" lat="48.8611774" lon="2.3523468"/>
+ <node id="697454603" lat="48.8611712" lon="2.3523692"/>
+ <node id="697454606" lat="48.8615340" lon="2.3518920"/>
+ <node id="697454613" lat="48.8611496" lon="2.3532219"/>
+ <node id="697454617" lat="48.8611984" lon="2.3523841"/>
+ <node id="697454619" lat="48.8614645" lon="2.3521955"/>
+ <node id="697454622" lat="48.8612718" lon="2.3520879"/>
+ <node id="697454629" lat="48.8598614" lon="2.3517474"/>
+ <node id="697454631" lat="48.8610983" lon="2.3524311"/>
+ <node id="698985599" lat="48.8722043" lon="2.3250526">
+ <tag k="email" v="reservation@hotelfolkestoneopera.com"/>
+ <tag k="fax" v="+33 1 42656409"/>
+ <tag k="name" v="Folkestone Opéra"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="phone" v="+33 1 42657309"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.bestwestern-folkestoneopera.com/"/>
+ </node>
+ <node id="698985600" lat="48.8734124" lon="2.3240936">
+ <tag k="email" v="reservation@hotelsydneyopera.com"/>
+ <tag k="fax" v="+33 1 42650307"/>
+ <tag k="name" v="Sydney Opéra"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="phone" v="+33 1 42653548"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotelsydneyopera.com/"/>
+ </node>
+ <node id="698985601" lat="48.8836865" lon="2.3338083">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="72"/>
+ <tag k="addr:postcode" v="75018"/>
+ <tag k="addr:street" v="Boulevard de Clichy"/>
+ <tag k="name" v="Musée de l'Erotisme"/>
+ <tag k="name:en" v="Erotic Museum"/>
+ <tag k="name:fr" v="Musée de l'érotisme"/>
+ <tag k="opening_hours" v="Mo-Su 10:00-02:00"/>
+ <tag k="phone" v="01.42.58.28.73"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-erotisme.com"/>
+ <tag k="wikipedia" v="fr:Musée de l'érotisme (Paris)"/>
+ <tag k="wikipedia:en" v="Museum of Eroticism"/>
+ </node>
+ <node id="699045688" lat="48.8549427" lon="2.3558366"/>
+ <node id="699045741" lat="48.8550345" lon="2.3559781"/>
+ <node id="699045840" lat="48.8548912" lon="2.3563922"/>
+ <node id="699045899" lat="48.8549160" lon="2.3557435"/>
+ <node id="699045911" lat="48.8549415" lon="2.3557666"/>
+ <node id="699045933" lat="48.8549118" lon="2.3563476"/>
+ <node id="699045962" lat="48.8550465" lon="2.3560163"/>
+ <node id="699045990" lat="48.8549626" lon="2.3557858"/>
+ <node id="699046001" lat="48.8549272" lon="2.3558781"/>
+ <node id="699046037" lat="48.8547254" lon="2.3562354"/>
+ <node id="699046039" lat="48.8550266" lon="2.3559971"/>
+ <node id="700451789" lat="48.8586565" lon="2.3537620">
+ <tag k="name" v="Hôtel Acacias"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="702307590" lat="48.8567557" lon="2.3551825">
+ <tag k="name" v="Hôtel Rivoli"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="702405541" lat="48.8267304" lon="2.3324502">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="702718403" lat="48.8583361" lon="2.3560324">
+ <tag k="name" v="Hôtel De La Bretonnerie"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="703460922" lat="48.8555439" lon="2.3632131">
+ <tag k="name" v="Hôtel Jeanne d'Arc"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="703461067" lat="48.8550844" lon="2.3634743">
+ <tag k="name" v="Hôtel Turenne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="703723123" lat="48.8442570" lon="2.3445852"/>
+ <node id="703723146" lat="48.8442620" lon="2.3445608"/>
+ <node id="703723169" lat="48.8442961" lon="2.3445770"/>
+ <node id="703723197" lat="48.8442912" lon="2.3446013"/>
+ <node id="703723234" lat="48.8443293" lon="2.3446199"/>
+ <node id="703723243" lat="48.8441664" lon="2.3448298"/>
+ <node id="703723256" lat="48.8442754" lon="2.3448817"/>
+ <node id="703723283" lat="48.8443139" lon="2.3448997"/>
+ <node id="703723303" lat="48.8442931" lon="2.3450018"/>
+ <node id="703723320" lat="48.8441271" lon="2.3449247"/>
+ <node id="703723337" lat="48.8441483" lon="2.3448218"/>
+ <node id="703723340" lat="48.8442198" lon="2.3445687"/>
+ <node id="703870928" lat="48.8544026" lon="2.3636954">
+ <tag k="addr:housenumber" v="62"/>
+ <tag k="addr:street" v="Rue Saint-Antoine"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="705045827" lat="48.8655367" lon="2.3107584"/>
+ <node id="705045828" lat="48.8655448" lon="2.3107577"/>
+ <node id="705045829" lat="48.8655444" lon="2.3107484"/>
+ <node id="705045830" lat="48.8655662" lon="2.3107469"/>
+ <node id="705045831" lat="48.8655628" lon="2.3106249"/>
+ <node id="705045832" lat="48.8655850" lon="2.3106236"/>
+ <node id="705045833" lat="48.8655842" lon="2.3105918"/>
+ <node id="705045834" lat="48.8656124" lon="2.3105906"/>
+ <node id="705045835" lat="48.8656135" lon="2.3105851"/>
+ <node id="705045836" lat="48.8656161" lon="2.3105795"/>
+ <node id="705045837" lat="48.8656187" lon="2.3105767"/>
+ <node id="705045838" lat="48.8656229" lon="2.3105731"/>
+ <node id="705045839" lat="48.8656275" lon="2.3105709"/>
+ <node id="705045840" lat="48.8656346" lon="2.3105704"/>
+ <node id="705045841" lat="48.8656393" lon="2.3105714"/>
+ <node id="705045842" lat="48.8656438" lon="2.3105750"/>
+ <node id="705045843" lat="48.8656475" lon="2.3105790"/>
+ <node id="705045844" lat="48.8656503" lon="2.3105835"/>
+ <node id="705045845" lat="48.8656518" lon="2.3105885"/>
+ <node id="705045846" lat="48.8655978" lon="2.3112256"/>
+ <node id="705045847" lat="48.8655975" lon="2.3112130"/>
+ <node id="705045848" lat="48.8655904" lon="2.3112131"/>
+ <node id="705045849" lat="48.8655904" lon="2.3112078"/>
+ <node id="705045850" lat="48.8655760" lon="2.3112084"/>
+ <node id="705045851" lat="48.8655722" lon="2.3110881"/>
+ <node id="705045852" lat="48.8655528" lon="2.3110866"/>
+ <node id="705045853" lat="48.8655515" lon="2.3110766"/>
+ <node id="705045854" lat="48.8655430" lon="2.3110776"/>
+ <node id="705045855" lat="48.8657502" lon="2.3112292"/>
+ <node id="705045856" lat="48.8657470" lon="2.3112276"/>
+ <node id="705045857" lat="48.8657434" lon="2.3112239"/>
+ <node id="705045858" lat="48.8657408" lon="2.3112184"/>
+ <node id="705045859" lat="48.8657391" lon="2.3112130"/>
+ <node id="705045860" lat="48.8657386" lon="2.3112064"/>
+ <node id="705045861" lat="48.8657403" lon="2.3112009"/>
+ <node id="705045862" lat="48.8657003" lon="2.3112027"/>
+ <node id="705045863" lat="48.8657003" lon="2.3112084"/>
+ <node id="705045864" lat="48.8656932" lon="2.3112085"/>
+ <node id="705045865" lat="48.8656936" lon="2.3112212"/>
+ <node id="705045866" lat="48.8650969" lon="2.3122703"/>
+ <node id="705045867" lat="48.8651022" lon="2.3122410"/>
+ <node id="705045868" lat="48.8651211" lon="2.3121573"/>
+ <node id="705045869" lat="48.8651127" lon="2.3121917"/>
+ <node id="705045870" lat="48.8650821" lon="2.3125973"/>
+ <node id="705045871" lat="48.8650793" lon="2.3125182"/>
+ <node id="705045872" lat="48.8650731" lon="2.3125183"/>
+ <node id="705045873" lat="48.8650757" lon="2.3124633"/>
+ <node id="705045874" lat="48.8650884" lon="2.3124648"/>
+ <node id="705045875" lat="48.8650915" lon="2.3123904"/>
+ <node id="705045876" lat="48.8650791" lon="2.3123892"/>
+ <node id="705045877" lat="48.8650815" lon="2.3123346"/>
+ <node id="705045878" lat="48.8650875" lon="2.3123355"/>
+ <node id="705045879" lat="48.8650914" lon="2.3123045"/>
+ <node id="705045880" lat="48.8651512" lon="2.3119219"/>
+ <node id="705045881" lat="48.8651611" lon="2.3119232"/>
+ <node id="705045882" lat="48.8651611" lon="2.3119167"/>
+ <node id="705045883" lat="48.8651683" lon="2.3119174"/>
+ <node id="705045884" lat="48.8651746" lon="2.3119172"/>
+ <node id="705045885" lat="48.8651804" lon="2.3119163"/>
+ <node id="705045886" lat="48.8651863" lon="2.3119147"/>
+ <node id="705045887" lat="48.8651923" lon="2.3119116"/>
+ <node id="705045888" lat="48.8651961" lon="2.3119076"/>
+ <node id="705045889" lat="48.8652008" lon="2.3119008"/>
+ <node id="705045890" lat="48.8652044" lon="2.3118935"/>
+ <node id="705045891" lat="48.8652069" lon="2.3118853"/>
+ <node id="705045892" lat="48.8652085" lon="2.3118774"/>
+ <node id="705045893" lat="48.8652118" lon="2.3118778"/>
+ <node id="705045894" lat="48.8652126" lon="2.3118625"/>
+ <node id="705045895" lat="48.8652274" lon="2.3118642"/>
+ <node id="705045896" lat="48.8652289" lon="2.3118357"/>
+ <node id="705045897" lat="48.8653305" lon="2.3118476"/>
+ <node id="705045898" lat="48.8653285" lon="2.3118763"/>
+ <node id="705045899" lat="48.8657153" lon="2.3119210"/>
+ <node id="705045900" lat="48.8651287" lon="2.3121282"/>
+ <node id="705045901" lat="48.8651394" lon="2.3120930"/>
+ <node id="705045902" lat="48.8651506" lon="2.3120599"/>
+ <node id="705045903" lat="48.8651631" lon="2.3120235"/>
+ <node id="705045904" lat="48.8651631" lon="2.3120216"/>
+ <node id="705045905" lat="48.8651622" lon="2.3120197"/>
+ <node id="705045906" lat="48.8651607" lon="2.3120187"/>
+ <node id="705045907" lat="48.8651564" lon="2.3120189"/>
+ <node id="705045908" lat="48.8651562" lon="2.3120094"/>
+ <node id="705045909" lat="48.8651464" lon="2.3120114"/>
+ <node id="705045910" lat="48.8660632" lon="2.3105259"/>
+ <node id="705045911" lat="48.8660915" lon="2.3105237"/>
+ <node id="705045912" lat="48.8660910" lon="2.3104998"/>
+ <node id="705045913" lat="48.8661327" lon="2.3104977"/>
+ <node id="705045914" lat="48.8661331" lon="2.3105219"/>
+ <node id="705045915" lat="48.8661616" lon="2.3105205"/>
+ <node id="705045916" lat="48.8661620" lon="2.3105263"/>
+ <node id="705045917" lat="48.8661660" lon="2.3105259"/>
+ <node id="705045918" lat="48.8661675" lon="2.3105543"/>
+ <node id="705045919" lat="48.8662367" lon="2.3105506"/>
+ <node id="705045920" lat="48.8662366" lon="2.3105224"/>
+ <node id="705045921" lat="48.8662406" lon="2.3105224"/>
+ <node id="705045922" lat="48.8662400" lon="2.3105167"/>
+ <node id="705045923" lat="48.8662687" lon="2.3105154"/>
+ <node id="705045924" lat="48.8662683" lon="2.3104909"/>
+ <node id="705045925" lat="48.8663097" lon="2.3104893"/>
+ <node id="705045926" lat="48.8663100" lon="2.3105131"/>
+ <node id="705045927" lat="48.8663388" lon="2.3105114"/>
+ <node id="705045928" lat="48.8663396" lon="2.3105553"/>
+ <node id="705045929" lat="48.8660640" lon="2.3105688"/>
+ <node id="705045930" lat="48.8667518" lon="2.3105343"/>
+ <node id="705045931" lat="48.8667538" lon="2.3105282"/>
+ <node id="705045932" lat="48.8667569" lon="2.3105225"/>
+ <node id="705045933" lat="48.8667601" lon="2.3105189"/>
+ <node id="705045934" lat="48.8667646" lon="2.3105158"/>
+ <node id="705045935" lat="48.8667698" lon="2.3105138"/>
+ <node id="705045936" lat="48.8667754" lon="2.3105142"/>
+ <node id="705045937" lat="48.8667812" lon="2.3105168"/>
+ <node id="705045938" lat="48.8667855" lon="2.3105211"/>
+ <node id="705045939" lat="48.8667890" lon="2.3105262"/>
+ <node id="705045940" lat="48.8667916" lon="2.3105325"/>
+ <node id="705045941" lat="48.8668196" lon="2.3105313"/>
+ <node id="705045942" lat="48.8668201" lon="2.3105643"/>
+ <node id="705045943" lat="48.8668418" lon="2.3105628"/>
+ <node id="705045944" lat="48.8667403" lon="2.3111674"/>
+ <node id="705045945" lat="48.8667400" lon="2.3111548"/>
+ <node id="705045946" lat="48.8667327" lon="2.3111554"/>
+ <node id="705045947" lat="48.8667326" lon="2.3111501"/>
+ <node id="705045948" lat="48.8666933" lon="2.3111525"/>
+ <node id="705045949" lat="48.8666938" lon="2.3111552"/>
+ <node id="705045950" lat="48.8666938" lon="2.3111594"/>
+ <node id="705045951" lat="48.8666930" lon="2.3111628"/>
+ <node id="705045952" lat="48.8666913" lon="2.3111670"/>
+ <node id="705045953" lat="48.8666891" lon="2.3111705"/>
+ <node id="705045954" lat="48.8666852" lon="2.3111754"/>
+ <node id="705045955" lat="48.8666831" lon="2.3111771"/>
+ <node id="705045956" lat="48.8666815" lon="2.3111778"/>
+ <node id="705045957" lat="48.8666796" lon="2.3111783"/>
+ <node id="705045958" lat="48.8668365" lon="2.3111436"/>
+ <node id="705045959" lat="48.8668364" lon="2.3111492"/>
+ <node id="705045960" lat="48.8668292" lon="2.3111492"/>
+ <node id="705045961" lat="48.8668297" lon="2.3111624"/>
+ <node id="705045962" lat="48.8668443" lon="2.3106849">
+ <tag k="man_made" v="surveillance"/>
+ <tag k="surveillance" v="outdoor"/>
+ </node>
+ <node id="705045963" lat="48.8668658" lon="2.3106836"/>
+ <node id="705045964" lat="48.8668658" lon="2.3106947"/>
+ <node id="705045965" lat="48.8668743" lon="2.3106941"/>
+ <node id="705045966" lat="48.8668814" lon="2.3110124"/>
+ <node id="705045967" lat="48.8668729" lon="2.3110127"/>
+ <node id="705045968" lat="48.8668732" lon="2.3110234"/>
+ <node id="705045969" lat="48.8668530" lon="2.3110250"/>
+ <node id="705045970" lat="48.8668506" lon="2.3111428"/>
+ <node id="705045971" lat="48.8666609" lon="2.3115471"/>
+ <node id="705045972" lat="48.8666749" lon="2.3115486"/>
+ <node id="705045973" lat="48.8666809" lon="2.3115509"/>
+ <node id="705045974" lat="48.8666805" lon="2.3115600"/>
+ <node id="705045975" lat="48.8666733" lon="2.3115581"/>
+ <node id="705045976" lat="48.8666585" lon="2.3115572"/>
+ <node id="705045977" lat="48.8666584" lon="2.3115639"/>
+ <node id="705045978" lat="48.8666511" lon="2.3115629"/>
+ <node id="705045979" lat="48.8666470" lon="2.3116430"/>
+ <node id="705045980" lat="48.8666544" lon="2.3116437"/>
+ <node id="705045981" lat="48.8666537" lon="2.3116500"/>
+ <node id="705045982" lat="48.8666675" lon="2.3116526"/>
+ <node id="705045983" lat="48.8666758" lon="2.3116531"/>
+ <node id="705045984" lat="48.8666755" lon="2.3116621"/>
+ <node id="705045985" lat="48.8666649" lon="2.3116623"/>
+ <node id="705045986" lat="48.8666550" lon="2.3116613"/>
+ <node id="705045987" lat="48.8666361" lon="2.3120285"/>
+ <node id="705045988" lat="48.8670226" lon="2.3120747"/>
+ <node id="705045989" lat="48.8670243" lon="2.3120454"/>
+ <node id="705045990" lat="48.8671261" lon="2.3120571"/>
+ <node id="705045991" lat="48.8671250" lon="2.3120859"/>
+ <node id="705045992" lat="48.8671388" lon="2.3120874"/>
+ <node id="705045993" lat="48.8671383" lon="2.3121027"/>
+ <node id="705045994" lat="48.8671417" lon="2.3121028"/>
+ <node id="705045995" lat="48.8671423" lon="2.3121090"/>
+ <node id="705045996" lat="48.8671435" lon="2.3121145"/>
+ <node id="705045997" lat="48.8671446" lon="2.3121198"/>
+ <node id="705045998" lat="48.8671461" lon="2.3121250"/>
+ <node id="705045999" lat="48.8671486" lon="2.3121308"/>
+ <node id="705046000" lat="48.8671511" lon="2.3121359"/>
+ <node id="705046001" lat="48.8671539" lon="2.3121401"/>
+ <node id="705046002" lat="48.8671565" lon="2.3121434"/>
+ <node id="705046003" lat="48.8671613" lon="2.3121472"/>
+ <node id="705046004" lat="48.8671663" lon="2.3121499"/>
+ <node id="705046005" lat="48.8671710" lon="2.3121511"/>
+ <node id="705046006" lat="48.8671754" lon="2.3121516"/>
+ <node id="705046007" lat="48.8671788" lon="2.3121526"/>
+ <node id="705046008" lat="48.8671838" lon="2.3121537"/>
+ <node id="705046009" lat="48.8671834" lon="2.3121596"/>
+ <node id="705046010" lat="48.8671790" lon="2.3122489"/>
+ <node id="705046011" lat="48.8671786" lon="2.3122547"/>
+ <node id="705046012" lat="48.8671726" lon="2.3122546"/>
+ <node id="705046013" lat="48.8671717" lon="2.3122550"/>
+ <node id="705046014" lat="48.8671711" lon="2.3122560"/>
+ <node id="705046015" lat="48.8671709" lon="2.3122588"/>
+ <node id="705046016" lat="48.8671724" lon="2.3122690"/>
+ <node id="705046017" lat="48.8671749" lon="2.3122784"/>
+ <node id="705046018" lat="48.8671775" lon="2.3122852"/>
+ <node id="705046019" lat="48.8671795" lon="2.3122908"/>
+ <node id="705046020" lat="48.8651019" lon="2.3127532"/>
+ <node id="705046021" lat="48.8650929" lon="2.3127008"/>
+ <node id="705046022" lat="48.8650870" lon="2.3126544"/>
+ <node id="705046023" lat="48.8651063" lon="2.3129427"/>
+ <node id="705046024" lat="48.8650996" lon="2.3129422"/>
+ <node id="705046025" lat="48.8651043" lon="2.3128529"/>
+ <node id="705046026" lat="48.8651141" lon="2.3128540"/>
+ <node id="705046027" lat="48.8651151" lon="2.3128474"/>
+ <node id="705046028" lat="48.8651185" lon="2.3128481"/>
+ <node id="705046029" lat="48.8651201" lon="2.3128486"/>
+ <node id="705046030" lat="48.8651212" lon="2.3128478"/>
+ <node id="705046031" lat="48.8651222" lon="2.3128455"/>
+ <node id="705046032" lat="48.8651221" lon="2.3128430"/>
+ <node id="705046033" lat="48.8651203" lon="2.3128332"/>
+ <node id="705046034" lat="48.8651160" lon="2.3128217"/>
+ <node id="705046035" lat="48.8651109" lon="2.3127971"/>
+ <node id="705046036" lat="48.8651250" lon="2.3129729"/>
+ <node id="705046037" lat="48.8651178" lon="2.3129922"/>
+ <node id="705046038" lat="48.8651259" lon="2.3130069"/>
+ <node id="705046039" lat="48.8651103" lon="2.3130222"/>
+ <node id="705046040" lat="48.8650981" lon="2.3129970"/>
+ <node id="705046041" lat="48.8651165" lon="2.3129797"/>
+ <node id="705046042" lat="48.8651171" lon="2.3129812"/>
+ <node id="705046043" lat="48.8651195" lon="2.3129737"/>
+ <node id="705046044" lat="48.8651050" lon="2.3129722"/>
+ <node id="705046045" lat="48.8651694" lon="2.3129763"/>
+ <node id="705046046" lat="48.8651688" lon="2.3129771"/>
+ <node id="705046047" lat="48.8651679" lon="2.3129756"/>
+ <node id="705046048" lat="48.8651666" lon="2.3129769"/>
+ <node id="705046049" lat="48.8651657" lon="2.3129750"/>
+ <node id="705046050" lat="48.8651555" lon="2.3129940"/>
+ <node id="705046051" lat="48.8651385" lon="2.3129817"/>
+ <node id="705046052" lat="48.8651792" lon="2.3130365"/>
+ <node id="705046053" lat="48.8651935" lon="2.3130256"/>
+ <node id="705046054" lat="48.8651918" lon="2.3130230"/>
+ <node id="705046055" lat="48.8651934" lon="2.3130209"/>
+ <node id="705046056" lat="48.8651926" lon="2.3130196"/>
+ <node id="705046057" lat="48.8651938" lon="2.3130180"/>
+ <node id="705046058" lat="48.8651937" lon="2.3130146"/>
+ <node id="705046059" lat="48.8651721" lon="2.3129764"/>
+ <node id="705046060" lat="48.8651650" lon="2.3131231"/>
+ <node id="705046061" lat="48.8651498" lon="2.3131022"/>
+ <node id="705046062" lat="48.8651661" lon="2.3130775"/>
+ <node id="705046063" lat="48.8652046" lon="2.3131285"/>
+ <node id="705046064" lat="48.8652052" lon="2.3131174"/>
+ <node id="705046065" lat="48.8651861" lon="2.3131156"/>
+ <node id="705046066" lat="48.8651869" lon="2.3130942"/>
+ <node id="705046067" lat="48.8651788" lon="2.3130985"/>
+ <node id="705046068" lat="48.8651795" lon="2.3130992"/>
+ <node id="705046069" lat="48.8651750" lon="2.3130930"/>
+ <node id="705046070" lat="48.8651885" lon="2.3130844"/>
+ <node id="705046071" lat="48.8651839" lon="2.3130570"/>
+ <node id="705046072" lat="48.8652644" lon="2.3131197"/>
+ <node id="705046073" lat="48.8652637" lon="2.3131355"/>
+ <node id="705046074" lat="48.8658580" lon="2.3132962"/>
+ <node id="705046075" lat="48.8658588" lon="2.3132723"/>
+ <node id="705046076" lat="48.8658456" lon="2.3132710"/>
+ <node id="705046077" lat="48.8658473" lon="2.3132555"/>
+ <node id="705046078" lat="48.8658219" lon="2.3132526"/>
+ <node id="705046079" lat="48.8658236" lon="2.3132184"/>
+ <node id="705046080" lat="48.8658192" lon="2.3132185"/>
+ <node id="705046081" lat="48.8658209" lon="2.3131829"/>
+ <node id="705046082" lat="48.8659747" lon="2.3132305"/>
+ <node id="705046083" lat="48.8659747" lon="2.3132331"/>
+ <node id="705046084" lat="48.8659510" lon="2.3132303"/>
+ <node id="705046085" lat="48.8659492" lon="2.3132668"/>
+ <node id="705046086" lat="48.8659236" lon="2.3132644"/>
+ <node id="705046087" lat="48.8659234" lon="2.3132799"/>
+ <node id="705046089" lat="48.8659107" lon="2.3132784"/>
+ <node id="705046090" lat="48.8659094" lon="2.3133025"/>
+ <node id="705046091" lat="48.8661460" lon="2.3132534"/>
+ <node id="705046092" lat="48.8661460" lon="2.3132504"/>
+ <node id="705046093" lat="48.8660753" lon="2.3132426"/>
+ <node id="705046094" lat="48.8660753" lon="2.3132451"/>
+ <node id="705046095" lat="48.8660445" lon="2.3132414"/>
+ <node id="705046096" lat="48.8660446" lon="2.3132386"/>
+ <node id="705046097" lat="48.8664038" lon="2.3132535"/>
+ <node id="705046098" lat="48.8664023" lon="2.3132873"/>
+ <node id="705046099" lat="48.8663983" lon="2.3132871"/>
+ <node id="705046100" lat="48.8662935" lon="2.3133071"/>
+ <node id="705046101" lat="48.8662689" lon="2.3133047"/>
+ <node id="705046102" lat="48.8662707" lon="2.3132682"/>
+ <node id="705046103" lat="48.8662472" lon="2.3132656"/>
+ <node id="705046104" lat="48.8662471" lon="2.3132624"/>
+ <node id="705046105" lat="48.8661769" lon="2.3132540"/>
+ <node id="705046106" lat="48.8661767" lon="2.3132569"/>
+ <node id="705046107" lat="48.8663968" lon="2.3133210"/>
+ <node id="705046108" lat="48.8663719" lon="2.3133179"/>
+ <node id="705046109" lat="48.8663708" lon="2.3133329"/>
+ <node id="705046110" lat="48.8663566" lon="2.3133315"/>
+ <node id="705046111" lat="48.8663557" lon="2.3133551"/>
+ <node id="705046112" lat="48.8663050" lon="2.3133495"/>
+ <node id="705046113" lat="48.8663061" lon="2.3133243"/>
+ <node id="705046114" lat="48.8662927" lon="2.3133235"/>
+ <node id="705046115" lat="48.8671819" lon="2.3129055"/>
+ <node id="705046116" lat="48.8671717" lon="2.3129465"/>
+ <node id="705046117" lat="48.8671611" lon="2.3129865"/>
+ <node id="705046118" lat="48.8671543" lon="2.3130093"/>
+ <node id="705046120" lat="48.8671361" lon="2.3130631"/>
+ <node id="705046121" lat="48.8671313" lon="2.3130763"/>
+ <node id="705046122" lat="48.8671299" lon="2.3130784"/>
+ <node id="705046123" lat="48.8671299" lon="2.3130805"/>
+ <node id="705046124" lat="48.8671304" lon="2.3130818"/>
+ <node id="705046125" lat="48.8671312" lon="2.3130825"/>
+ <node id="705046126" lat="48.8671364" lon="2.3130830"/>
+ <node id="705046127" lat="48.8671363" lon="2.3130895"/>
+ <node id="705046128" lat="48.8671463" lon="2.3130906"/>
+ <node id="705046130" lat="48.8670936" lon="2.3132112"/>
+ <node id="705046131" lat="48.8670815" lon="2.3132183"/>
+ <node id="705046132" lat="48.8670739" lon="2.3131968"/>
+ <node id="705046133" lat="48.8670722" lon="2.3131988"/>
+ <node id="705046134" lat="48.8670711" lon="2.3131969"/>
+ <node id="705046135" lat="48.8670702" lon="2.3131974"/>
+ <node id="705046136" lat="48.8670685" lon="2.3131960"/>
+ <node id="705046137" lat="48.8670677" lon="2.3131958"/>
+ <node id="705046138" lat="48.8670664" lon="2.3131964"/>
+ <node id="705046140" lat="48.8670417" lon="2.3132292"/>
+ <node id="705046141" lat="48.8670415" lon="2.3132325"/>
+ <node id="705046142" lat="48.8670420" lon="2.3132339"/>
+ <node id="705046143" lat="48.8670409" lon="2.3132356"/>
+ <node id="705046144" lat="48.8670421" lon="2.3132373"/>
+ <node id="705046145" lat="48.8670408" lon="2.3132395"/>
+ <node id="705046146" lat="48.8670535" lon="2.3132546"/>
+ <node id="705046147" lat="48.8670394" lon="2.3133002"/>
+ <node id="705046148" lat="48.8670612" lon="2.3132990"/>
+ <node id="705046149" lat="48.8671416" lon="2.3131798"/>
+ <node id="705046150" lat="48.8671344" lon="2.3131793"/>
+ <node id="705046151" lat="48.8671327" lon="2.3132081"/>
+ <node id="705046152" lat="48.8671192" lon="2.3132065"/>
+ <node id="705046153" lat="48.8671205" lon="2.3132145"/>
+ <node id="705046154" lat="48.8671212" lon="2.3132135"/>
+ <node id="705046155" lat="48.8671372" lon="2.3132351"/>
+ <node id="705046156" lat="48.8671228" lon="2.3132581"/>
+ <node id="705046157" lat="48.8671075" lon="2.3132376"/>
+ <node id="705046158" lat="48.8671178" lon="2.3132252"/>
+ <node id="705046159" lat="48.8671125" lon="2.3132038"/>
+ <node id="705046160" lat="48.8670526" lon="2.3133115"/>
+ <node id="705046161" lat="48.8670700" lon="2.3133273"/>
+ <node id="705046162" lat="48.8670549" lon="2.3133427"/>
+ <node id="705046163" lat="48.8670441" lon="2.3133151"/>
+ <node id="705046164" lat="48.8670448" lon="2.3133133"/>
+ <node id="705046165" lat="48.8670386" lon="2.3133107"/>
+ <node id="705046166" lat="48.8670380" lon="2.3133316"/>
+ <node id="705046167" lat="48.8670187" lon="2.3133296"/>
+ <node id="705046168" lat="48.8670181" lon="2.3133406"/>
+ <node id="705046169" lat="48.8669599" lon="2.3133329"/>
+ <node id="705046170" lat="48.8669607" lon="2.3133178"/>
+ <node id="705046171" lat="48.8671934" lon="2.3121605"/>
+ <node id="705046172" lat="48.8671887" lon="2.3122503"/>
+ <node id="705046173" lat="48.8671897" lon="2.3123401"/>
+ <node id="705046174" lat="48.8671979" lon="2.3123911"/>
+ <node id="705046175" lat="48.8672038" lon="2.3124313"/>
+ <node id="705046176" lat="48.8672112" lon="2.3125104"/>
+ <node id="705046177" lat="48.8672135" lon="2.3125838"/>
+ <node id="705046178" lat="48.8672298" lon="2.3125850"/>
+ <node id="705046179" lat="48.8672274" lon="2.3126394"/>
+ <node id="705046180" lat="48.8672050" lon="2.3126372"/>
+ <node id="705046181" lat="48.8672049" lon="2.3126403"/>
+ <node id="705046182" lat="48.8671993" lon="2.3126404"/>
+ <node id="705046183" lat="48.8671956" lon="2.3127070"/>
+ <node id="705046184" lat="48.8672013" lon="2.3127077"/>
+ <node id="705046185" lat="48.8672011" lon="2.3127112"/>
+ <node id="705046186" lat="48.8672234" lon="2.3127141"/>
+ <node id="705046187" lat="48.8672209" lon="2.3127680"/>
+ <node id="705046188" lat="48.8672044" lon="2.3127659"/>
+ <node id="705046189" lat="48.8671974" lon="2.3128226"/>
+ <node id="705046190" lat="48.8671880" lon="2.3128747"/>
+ <node id="705056071" lat="48.8502562" lon="2.3622864"/>
+ <node id="705056082" lat="48.8503741" lon="2.3621762"/>
+ <node id="705056087" lat="48.8507062" lon="2.3620368"/>
+ <node id="705056120" lat="48.8506295" lon="2.3618684"/>
+ <node id="705056142" lat="48.8507665" lon="2.3623052">
+ <tag k="amenity" v="post_box"/>
+ <tag k="operator" v="La Poste"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="705056162" lat="48.8503419" lon="2.3622167"/>
+ <node id="705056183" lat="48.8503084" lon="2.3623814">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Rue Agrippa d'Aubigné"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="705056192" lat="48.8503423" lon="2.3624434"/>
+ <node id="705056200" lat="48.8504640" lon="2.3622927"/>
+ <node id="705056205" lat="48.8505859" lon="2.3618941"/>
+ <node id="705056211" lat="48.8506938" lon="2.3623964">
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="addr:street" v="Boulevard Morland"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="705056252" lat="48.8504778" lon="2.3620079"/>
+ <node id="705056265" lat="48.8506104" lon="2.3625009"/>
+ <node id="705056269" lat="48.8506911" lon="2.3620467"/>
+ <node id="705056279" lat="48.8504156" lon="2.3623529"/>
+ <node id="705056291" lat="48.8507174" lon="2.3620274"/>
+ <node id="705056319" lat="48.8507766" lon="2.3622925"/>
+ <node id="705056342" lat="48.8504818" lon="2.3622706"/>
+ <node id="705056357" lat="48.8503618" lon="2.3621535"/>
+ <node id="705056380" lat="48.8503298" lon="2.3621948"/>
+ <node id="705056391" lat="48.8506416" lon="2.3618886"/>
+ <node id="705056413" lat="48.8506550" lon="2.3620733"/>
+ <node id="705056417" lat="48.8505495" lon="2.3623942"/>
+ <node id="705056439" lat="48.8504968" lon="2.3622980"/>
+ <node id="705211298" lat="48.8523982" lon="2.3636825">
+ <tag k="name" v="Hôtel Saint-Louis Marais"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="706658468" lat="48.8684818" lon="2.3557047">
+ <tag k="name" v="Hôtel du Plat d'Étain"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="706744257" lat="48.8682462" lon="2.3617582">
+ <tag k="name" v="Hôtel de la Paix République"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="707236992" lat="48.8418616" lon="2.3576657"/>
+ <node id="707237071" lat="48.8418642" lon="2.3576641"/>
+ <node id="707237117" lat="48.8418928" lon="2.3577753"/>
+ <node id="707237124" lat="48.8414538" lon="2.3566619"/>
+ <node id="707237167" lat="48.8418903" lon="2.3577769"/>
+ <node id="707317041" lat="48.8678710" lon="2.3558815">
+ <tag k="name" v="Hôtel Nazareth"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="707688515" lat="48.8659462" lon="2.3570719">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:postcode" v="75003"/>
+ <tag k="addr:street" v="Rue Montgolfier"/>
+ <tag k="name" v="Austin's Arts Et Metiers Hotel "/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="707827416" lat="48.8663823" lon="2.3605584">
+ <tag k="addr:housenumber" v="72"/>
+ <tag k="addr:street" v="Rue de Turbigo"/>
+ <tag k="name" v="Paris France Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="707827645" lat="48.8664540" lon="2.3608723">
+ <tag k="addr:housenumber" v="76"/>
+ <tag k="addr:street" v="Rue de Turbigo"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="708412962" lat="48.8506169" lon="2.3430137"/>
+ <node id="708412963" lat="48.8504778" lon="2.3444699"/>
+ <node id="708412964" lat="48.8505909" lon="2.3430278"/>
+ <node id="708412965" lat="48.8503285" lon="2.3444074"/>
+ <node id="708412966" lat="48.8504501" lon="2.3433977"/>
+ <node id="708980733" lat="48.8614284" lon="2.3554271"/>
+ <node id="708980738" lat="48.8610395" lon="2.3557672">
+ <tag k="addr:housenumber" v="73"/>
+ <tag k="addr:street" v="Rue du Temple"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="708980750" lat="48.8613039" lon="2.3551442"/>
+ <node id="708980793" lat="48.8612435" lon="2.3550663"/>
+ <node id="708980809" lat="48.8611620" lon="2.3551684"/>
+ <node id="708980816" lat="48.8613423" lon="2.3556515"/>
+ <node id="708980832" lat="48.8615482" lon="2.3553745"/>
+ <node id="708980871" lat="48.8612626" lon="2.3558561"/>
+ <node id="708980873" lat="48.8608822" lon="2.3555189"/>
+ <node id="708980879" lat="48.8612087" lon="2.3559870"/>
+ <node id="708980893" lat="48.8613433" lon="2.3549951"/>
+ <node id="708980897" lat="48.8611197" lon="2.3552208"/>
+ <node id="708980918" lat="48.8613714" lon="2.3555744"/>
+ <node id="708980940" lat="48.8615325" lon="2.3555859"/>
+ <node id="708980981" lat="48.8614445" lon="2.3554075"/>
+ <node id="708981018" lat="48.8609469" lon="2.3554340"/>
+ <node id="708981041" lat="48.8612604" lon="2.3550461"/>
+ <node id="708981060" lat="48.8615009" lon="2.3555634"/>
+ <node id="708981076" lat="48.8609488" lon="2.3554328"/>
+ <node id="708981083" lat="48.8615862" lon="2.3554416"/>
+ <node id="708981113" lat="48.8612865" lon="2.3551655"/>
+ <node id="708981117" lat="48.8609506" lon="2.3556268">
+ <tag k="addr:housenumber" v="71"/>
+ <tag k="addr:street" v="Rue du Temple"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="708981119" lat="48.8611362" lon="2.3558980">
+ <tag k="addr:housenumber" v="75"/>
+ <tag k="addr:street" v="Rue du Temple"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="708981133" lat="48.8612735" lon="2.3550854"/>
+ <node id="708981149" lat="48.8612854" lon="2.3557957"/>
+ <node id="708981159" lat="48.8613269" lon="2.3556922"/>
+ <node id="708981222" lat="48.8614761" lon="2.3554623"/>
+ <node id="708981267" lat="48.8612702" lon="2.3558336"/>
+ <node id="708981286" lat="48.8613266" lon="2.3549632"/>
+ <node id="708981305" lat="48.8613050" lon="2.3549892"/>
+ <node id="708981308" lat="48.8614621" lon="2.3556604"/>
+ <node id="708981329" lat="48.8613242" lon="2.3549662"/>
+ <node id="708981334" lat="48.8615722" lon="2.3554796"/>
+ <node id="713826818" lat="48.8630139" lon="2.3614339">
+ <tag k="name" v="Hôtel du Marais"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="714137202" lat="48.8615764" lon="2.3586900"/>
+ <node id="714137432" lat="48.8609353" lon="2.3588944"/>
+ <node id="714137492" lat="48.8611147" lon="2.3590971"/>
+ <node id="714137645" lat="48.8611092" lon="2.3591050"/>
+ <node id="714137665" lat="48.8612473" lon="2.3583064"/>
+ <node id="715635949" lat="48.8599475" lon="2.3597251"/>
+ <node id="715635960" lat="48.8599228" lon="2.3606118"/>
+ <node id="715635976" lat="48.8593366" lon="2.3596778"/>
+ <node id="715635991" lat="48.8600560" lon="2.3570115"/>
+ <node id="715635996" lat="48.8596519" lon="2.3588993"/>
+ <node id="715636003" lat="48.8595358" lon="2.3599150"/>
+ <node id="715636039" lat="48.8610539" lon="2.3583596"/>
+ <node id="715636051" lat="48.8600350" lon="2.3570264"/>
+ <node id="715636067" lat="48.8595353" lon="2.3579598"/>
+ <node id="715636069" lat="48.8600632" lon="2.3603520"/>
+ <node id="715636098" lat="48.8594660" lon="2.3592181"/>
+ <node id="715636112" lat="48.8600229" lon="2.3600990"/>
+ <node id="715636125" lat="48.8594703" lon="2.3598410"/>
+ <node id="715636148" lat="48.8595672" lon="2.3600056"/>
+ <node id="715636154" lat="48.8593922" lon="2.3594445"/>
+ <node id="715636184" lat="48.8606336" lon="2.3592131"/>
+ <node id="715636186" lat="48.8593268" lon="2.3596670"/>
+ <node id="715636201" lat="48.8600883" lon="2.3570012"/>
+ <node id="715636210" lat="48.8597316" lon="2.3574230"/>
+ <node id="715636240" lat="48.8606843" lon="2.3591110"/>
+ <node id="715636265" lat="48.8600308" lon="2.3604207"/>
+ <node id="715636282" lat="48.8593576" lon="2.3597188"/>
+ <node id="715636307" lat="48.8595400" lon="2.3599276"/>
+ <node id="715636328" lat="48.8603478" lon="2.3594284"/>
+ <node id="715636330" lat="48.8611508" lon="2.3581819"/>
+ <node id="715636332" lat="48.8594475" lon="2.3598531"/>
+ <node id="715636339" lat="48.8599907" lon="2.3570889"/>
+ <node id="715636356" lat="48.8595562" lon="2.3599485"/>
+ <node id="715636385" lat="48.8604584" lon="2.3595700"/>
+ <node id="715636425" lat="48.8594941" lon="2.3598645"/>
+ <node id="715636438" lat="48.8605291" lon="2.3574959"/>
+ <node id="715636446" lat="48.8597892" lon="2.3574047"/>
+ <node id="715636447" lat="48.8595889" lon="2.3600658"/>
+ <node id="715636466" lat="48.8592965" lon="2.3596249"/>
+ <node id="715636474" lat="48.8599919" lon="2.3596402"/>
+ <node id="715636481" lat="48.8595135" lon="2.3591207"/>
+ <node id="715636486" lat="48.8595960" lon="2.3600776"/>
+ <node id="715636494" lat="48.8596937" lon="2.3582446"/>
+ <node id="715636511" lat="48.8606828" lon="2.3591095"/>
+ <node id="715636514" lat="48.8593319" lon="2.3596812"/>
+ <node id="715636527" lat="48.8600742" lon="2.3570047"/>
+ <node id="715636542" lat="48.8595757" lon="2.3590471"/>
+ <node id="715636575" lat="48.8606944" lon="2.3590682"/>
+ <node id="715636584" lat="48.8600444" lon="2.3570143"/>
+ <node id="715636597" lat="48.8596279" lon="2.3581289"/>
+ <node id="715636599" lat="48.8600398" lon="2.3603945"/>
+ <node id="715636620" lat="48.8594395" lon="2.3598382"/>
+ <node id="715636630" lat="48.8594940" lon="2.3592519"/>
+ <node id="715636648" lat="48.8595422" lon="2.3599330"/>
+ <node id="715636658" lat="48.8603825" lon="2.3594582"/>
+ <node id="715636659" lat="48.8605828" lon="2.3575400">
+ <tag k="addr:housenumber" v="58"/>
+ <tag k="addr:street" v="Rue des Archives"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715636663" lat="48.8594615" lon="2.3598410"/>
+ <node id="715636684" lat="48.8595684" lon="2.3599898"/>
+ <node id="715636693" lat="48.8594989" lon="2.3577474">
+ <tag k="addr:housenumber" v="56"/>
+ <tag k="addr:street" v="Rue des Francs Bourgeois"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715636700" lat="48.8594110" lon="2.3594081"/>
+ <node id="715636748" lat="48.8606146" lon="2.3592513"/>
+ <node id="715636751" lat="48.8595094" lon="2.3598878"/>
+ <node id="715636765" lat="48.8595149" lon="2.3591225"/>
+ <node id="715636768" lat="48.8600962" lon="2.3570053"/>
+ <node id="715636774" lat="48.8597329" lon="2.3574250"/>
+ <node id="715636776" lat="48.8595942" lon="2.3600794"/>
+ <node id="715636811" lat="48.8599280" lon="2.3606119"/>
+ <node id="715636830" lat="48.8595244" lon="2.3599012">
+ <tag k="addr:housenumber" v="87"/>
+ <tag k="addr:street" v="Rue Vieille du Temple"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715636837" lat="48.8593579" lon="2.3597103"/>
+ <node id="715636852" lat="48.8599970" lon="2.3596310"/>
+ <node id="715636862" lat="48.8595420" lon="2.3599231"/>
+ <node id="715636895" lat="48.8602437" lon="2.3592792"/>
+ <node id="715636898" lat="48.8610586" lon="2.3583641"/>
+ <node id="715636913" lat="48.8600319" lon="2.3570220"/>
+ <node id="715636921" lat="48.8594539" lon="2.3578095"/>
+ <node id="715636923" lat="48.8600707" lon="2.3603523"/>
+ <node id="715636981" lat="48.8601250" lon="2.3602472"/>
+ <node id="715637006" lat="48.8594849" lon="2.3598527"/>
+ <node id="715637013" lat="48.8605403" lon="2.3575029"/>
+ <node id="715637017" lat="48.8598539" lon="2.3585069"/>
+ <node id="715637031" lat="48.8598353" lon="2.3573314"/>
+ <node id="715637034" lat="48.8595585" lon="2.3600229"/>
+ <node id="715637040" lat="48.8593697" lon="2.3594854"/>
+ <node id="715637042" lat="48.8594671" lon="2.3592158"/>
+ <node id="715637082" lat="48.8606321" lon="2.3592119"/>
+ <node id="715637085" lat="48.8593268" lon="2.3596715"/>
+ <node id="715637093" lat="48.8600737" lon="2.3570002"/>
+ <node id="715637094" lat="48.8595135" lon="2.3598880"/>
+ <node id="715637101" lat="48.8601001" lon="2.3599672"/>
+ <node id="715637103" lat="48.8597574" lon="2.3573872"/>
+ <node id="715637130" lat="48.8607010" lon="2.3590751"/>
+ <node id="715637132" lat="48.8602040" lon="2.3592213"/>
+ <node id="715637136" lat="48.8597267" lon="2.3574335">
+ <tag k="addr:housenumber" v="58"/>
+ <tag k="addr:street" v="Rue des Francs Bourgeois"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715637139" lat="48.8600549" lon="2.3570080"/>
+ <node id="715637152" lat="48.8600402" lon="2.3604073"/>
+ <node id="715637178" lat="48.8595610" lon="2.3590284"/>
+ <node id="715637180" lat="48.8594194" lon="2.3598114"/>
+ <node id="715637190" lat="48.8596197" lon="2.3581140"/>
+ <node id="715637198" lat="48.8596722" lon="2.3601947"/>
+ <node id="715637209" lat="48.8595433" lon="2.3599300"/>
+ <node id="715637223" lat="48.8603789" lon="2.3594650"/>
+ <node id="715637224" lat="48.8606563" lon="2.3576210"/>
+ <node id="715637225" lat="48.8594564" lon="2.3598427"/>
+ <node id="715637242" lat="48.8595653" lon="2.3599709"/>
+ <node id="715637253" lat="48.8594809" lon="2.3592797"/>
+ <node id="715637256" lat="48.8605149" lon="2.3594547"/>
+ <node id="715637277" lat="48.8595046" lon="2.3598820"/>
+ <node id="715637281" lat="48.8600992" lon="2.3570023"/>
+ <node id="715637285" lat="48.8597682" lon="2.3574042"/>
+ <node id="715637286" lat="48.8595873" lon="2.3600680"/>
+ <node id="715744219" lat="48.8589037" lon="2.3616854"/>
+ <node id="715744232" lat="48.8591840" lon="2.3620044"/>
+ <node id="715744237" lat="48.8591594" lon="2.3620623"/>
+ <node id="715744246" lat="48.8590496" lon="2.3619462"/>
+ <node id="715744260" lat="48.8591558" lon="2.3620628"/>
+ <node id="715744274" lat="48.8590662" lon="2.3616558"/>
+ <node id="715744277" lat="48.8589439" lon="2.3618870"/>
+ <node id="715744284" lat="48.8592543" lon="2.3618670"/>
+ <node id="715744289" lat="48.8589131" lon="2.3618540"/>
+ <node id="715744305" lat="48.8590327" lon="2.3619791"/>
+ <node id="715744341" lat="48.8591736" lon="2.3620240"/>
+ <node id="715744370" lat="48.8591236" lon="2.3620289"/>
+ <node id="715744378" lat="48.8591282" lon="2.3617266"/>
+ <node id="715744382" lat="48.8589712" lon="2.3615459"/>
+ <node id="715744390" lat="48.8591983" lon="2.3619752"/>
+ <node id="715744410" lat="48.8589603" lon="2.3619034"/>
+ <node id="715744434" lat="48.8588543" lon="2.3617919"/>
+ <node id="715744449" lat="48.8592214" lon="2.3619306">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue de la Perle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715744451" lat="48.8591763" lon="2.3620290"/>
+ <node id="715744461" lat="48.8590046" lon="2.3619508"/>
+ <node id="715744490" lat="48.8590786" lon="2.3616699"/>
+ <node id="715963536" lat="48.8597560" lon="2.3620109"/>
+ <node id="715963539" lat="48.8600823" lon="2.3622936"/>
+ <node id="715963544" lat="48.8596301" lon="2.3622302"/>
+ <node id="715963546" lat="48.8598032" lon="2.3615952"/>
+ <node id="715963556" lat="48.8596991" lon="2.3626571">
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:street" v="Rue de Thorigny"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963565" lat="48.8595005" lon="2.3624514"/>
+ <node id="715963574" lat="48.8597583" lon="2.3620134"/>
+ <node id="715963576" lat="48.8598240" lon="2.3619000"/>
+ <node id="715963578" lat="48.8597947" lon="2.3627550"/>
+ <node id="715963590" lat="48.8597464" lon="2.3618022"/>
+ <node id="715963597" lat="48.8596863" lon="2.3621368"/>
+ <node id="715963603" lat="48.8597278" lon="2.3614239"/>
+ <node id="715963606" lat="48.8595067" lon="2.3624415"/>
+ <node id="715963611" lat="48.8598426" lon="2.3616427"/>
+ <node id="715963614" lat="48.8596251" lon="2.3616188">
+ <tag k="addr:housenumber" v="12"/>
+ <tag k="addr:street" v="Rue de la Perle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963619" lat="48.8598106" lon="2.3619235"/>
+ <node id="715963621" lat="48.8596376" lon="2.3625942"/>
+ <node id="715963622" lat="48.8598992" lon="2.3625874">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue des Coutures Saint-Gervais"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963634" lat="48.8600260" lon="2.3623839">
+ <tag k="addr:housenumber" v="1b"/>
+ <tag k="addr:street" v="Rue des Coutures Saint-Gervais"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963641" lat="48.8595404" lon="2.3624923"/>
+ <node id="715963648" lat="48.8596854" lon="2.3621315"/>
+ <node id="715963651" lat="48.8595922" lon="2.3622922"/>
+ <node id="715963653" lat="48.8596669" lon="2.3615394">
+ <tag k="addr:housenumber" v="14"/>
+ <tag k="addr:street" v="Rue de la Perle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963654" lat="48.8597518" lon="2.3614522"/>
+ <node id="715963658" lat="48.8595574" lon="2.3623585"/>
+ <node id="715963664" lat="48.8595903" lon="2.3616848"/>
+ <node id="715963674" lat="48.8597479" lon="2.3617990"/>
+ <node id="715963684" lat="48.8595946" lon="2.3622952"/>
+ <node id="715963687" lat="48.8597019" lon="2.3614730">
+ <tag k="addr:housenumber" v="16"/>
+ <tag k="addr:street" v="Rue de la Perle"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="715963700" lat="48.8596287" lon="2.3622290"/>
+ <node id="715963702" lat="48.8602544" lon="2.3620151"/>
+ <node id="715963703" lat="48.8597268" lon="2.3614988"/>
+ <node id="715963711" lat="48.8597213" lon="2.3618469"/>
+ <node id="715963726" lat="48.8598959" lon="2.3615496"/>
+ <node id="715963727" lat="48.8597978" lon="2.3619454"/>
+ <node id="716912600" lat="48.8580214" lon="2.3617789"/>
+ <node id="716912623" lat="48.8581063" lon="2.3619371"/>
+ <node id="716912640" lat="48.8581355" lon="2.3619674"/>
+ <node id="716912651" lat="48.8581165" lon="2.3620773"/>
+ <node id="716912667" lat="48.8582250" lon="2.3623998"/>
+ <node id="716912671" lat="48.8581503" lon="2.3613882"/>
+ <node id="716912673" lat="48.8579908" lon="2.3622302"/>
+ <node id="716912684" lat="48.8582645" lon="2.3615277"/>
+ <node id="716912706" lat="48.8581107" lon="2.3618603"/>
+ <node id="716912716" lat="48.8581612" lon="2.3619002"/>
+ <node id="716912727" lat="48.8580438" lon="2.3622674"/>
+ <node id="716912749" lat="48.8579925" lon="2.3622258"/>
+ <node id="716912755" lat="48.8583483" lon="2.3620660"/>
+ <node id="716912787" lat="48.8580878" lon="2.3619200"/>
+ <node id="716912797" lat="48.8583171" lon="2.3620389"/>
+ <node id="716912806" lat="48.8582190" lon="2.3621635"/>
+ <node id="716912821" lat="48.8579786" lon="2.3618219"/>
+ <node id="716912828" lat="48.8582353" lon="2.3621799"/>
+ <node id="716912868" lat="48.8580375" lon="2.3616778"/>
+ <node id="716912877" lat="48.8582094" lon="2.3614604">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Rue Elzévir"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="716912879" lat="48.8579982" lon="2.3618385"/>
+ <node id="716912883" lat="48.8583288" lon="2.3621187"/>
+ <node id="716912887" lat="48.8582915" lon="2.3621026"/>
+ <node id="716912912" lat="48.8581304" lon="2.3618747"/>
+ <node id="716912917" lat="48.8581684" lon="2.3623588"/>
+ <node id="716912922" lat="48.8580144" lon="2.3617314"/>
+ <node id="716912927" lat="48.8582195" lon="2.3621662"/>
+ <node id="717510305" lat="48.8579599" lon="2.3634912"/>
+ <node id="717510323" lat="48.8571592" lon="2.3629413"/>
+ <node id="717510329" lat="48.8574048" lon="2.3631100"/>
+ <node id="717510352" lat="48.8570072" lon="2.3628332"/>
+ <node id="717510364" lat="48.8577708" lon="2.3628843"/>
+ <node id="717510374" lat="48.8570542" lon="2.3628612">
+ <tag k="addr:housenumber" v="23"/>
+ <tag k="addr:street" v="Rue de Sévigné"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="717510379" lat="48.8579522" lon="2.3635112"/>
+ <node id="717510390" lat="48.8572476" lon="2.3618736"/>
+ <node id="717510399" lat="48.8571122" lon="2.3629083"/>
+ <node id="717510434" lat="48.8576296" lon="2.3632793"/>
+ <node id="717510449" lat="48.8569604" lon="2.3627981"/>
+ <node id="717510453" lat="48.8580936" lon="2.3631046"/>
+ <node id="717510491" lat="48.8572722" lon="2.3618571"/>
+ <node id="717510507" lat="48.8583425" lon="2.3626081"/>
+ <node id="717510511" lat="48.8577080" lon="2.3621756"/>
+ <node id="717510514" lat="48.8571134" lon="2.3629032"/>
+ <node id="717510536" lat="48.8580793" lon="2.3635724"/>
+ <node id="717510542" lat="48.8573743" lon="2.3619317">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Rue Payenne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="717510544" lat="48.8569613" lon="2.3627951"/>
+ <node id="717510551" lat="48.8571609" lon="2.3629376"/>
+ <node id="717510589" lat="48.8570085" lon="2.3628288"/>
+ <node id="717510613" lat="48.8581471" lon="2.3631422"/>
+ <node id="717510618" lat="48.8575642" lon="2.3620705">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Rue Payenne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="717510619" lat="48.8569509" lon="2.3627884"/>
+ <node id="717510647" lat="48.8584130" lon="2.3626591"/>
+ <node id="719020336" lat="48.8505845" lon="2.3430447">
+ <tag k="addr:housenumber" v="30"/>
+ <tag k="addr:street" v="Rue du Sommerard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020357" lat="48.8503252" lon="2.3441819">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Place Paul Painlevé"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020385" lat="48.8508638" lon="2.3431315">
+ <tag k="addr:housenumber" v="23b"/>
+ <tag k="addr:street" v="Boulevard Saint-Michel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020393" lat="48.8504254" lon="2.3434620">
+ <tag k="addr:housenumber" v="26"/>
+ <tag k="addr:street" v="Rue du Sommerard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020424" lat="48.8505176" lon="2.3432204">
+ <tag k="addr:housenumber" v="28"/>
+ <tag k="addr:street" v="Rue du Sommerard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020426" lat="48.8503634" lon="2.3436244">
+ <tag k="addr:housenumber" v="24"/>
+ <tag k="addr:street" v="Rue du Sommerard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="719020444" lat="48.8503220" lon="2.3439302">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Place Paul Painlevé"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="725413069" lat="48.8461851" lon="2.3424770"/>
+ <node id="725413070" lat="48.8461841" lon="2.3424748"/>
+ <node id="725413071" lat="48.8462276" lon="2.3423653"/>
+ <node id="725413084" lat="48.8462182" lon="2.3425900"/>
+ <node id="725413085" lat="48.8462427" lon="2.3425511"/>
+ <node id="725413099" lat="48.8462702" lon="2.3426490"/>
+ <node id="725571150" lat="48.8462250" lon="2.3424520"/>
+ <node id="725571165" lat="48.8462502" lon="2.3423856"/>
+ <node id="725571167" lat="48.8462549" lon="2.3424891"/>
+ <node id="725571169" lat="48.8462769" lon="2.3424439"/>
+ <node id="725571171" lat="48.8462563" lon="2.3424257"/>
+ <node id="725571173" lat="48.8462657" lon="2.3423995"/>
+ <node id="725571175" lat="48.8462907" lon="2.3424218"/>
+ <node id="725571180" lat="48.8463488" lon="2.3424740"/>
+ <node id="725571182" lat="48.8463545" lon="2.3424791"/>
+ <node id="725571191" lat="48.8462881" lon="2.3426216">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Rue Malebranche"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="725571194" lat="48.8463359" lon="2.3425483"/>
+ <node id="725571196" lat="48.8463327" lon="2.3425532">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Rue Malebranche"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="726567920" lat="48.8609832" lon="2.3789073">
+ <tag k="name" v="Garden Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="727734322" lat="48.8422868" lon="2.3203371">
+ <tag k="name" v="Miramar"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="727779854" lat="48.8429153" lon="2.3212276">
+ <tag k="name" v="Timhotel Montparnasse"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="729868303" lat="48.8644122" lon="2.3662794">
+ <tag k="contact:phone" v="+33-0147003346"/>
+ <tag k="name" v="Printania"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="734695116" lat="48.8442494" lon="2.3422817">
+ <tag k="name" v="Hôtel Gay-Lussac"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="735171928" lat="48.8792991" lon="2.3688560">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="735172066" lat="48.8811018" lon="2.3654227">
+ <tag k="name" v="Campanile"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="739801720" lat="48.8429257" lon="2.3631379">
+ <tag k="name" v="Appart' Valley"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="752433097" lat="48.8453636" lon="2.3830215">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Rue Crozatier"/>
+ <tag k="name" v="Hôtel de Venise"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="761249978" lat="48.8381865" lon="2.3497555"/>
+ <node id="761249982" lat="48.8381037" lon="2.3497583"/>
+ <node id="761250014" lat="48.8382151" lon="2.3496145"/>
+ <node id="761250018" lat="48.8381618" lon="2.3498765"/>
+ <node id="761250039" lat="48.8381784" lon="2.3497947"/>
+ <node id="761250042" lat="48.8380971" lon="2.3497887"/>
+ <node id="761250050" lat="48.8381103" lon="2.3497199"/>
+ <node id="761250062" lat="48.8381122" lon="2.3495665"/>
+ <node id="761250063" lat="48.8381347" lon="2.3497724"/>
+ <node id="761250065" lat="48.8381122" lon="2.3497269"/>
+ <node id="761250080" lat="48.8381090" lon="2.3497253"/>
+ <node id="761250093" lat="48.8380841" lon="2.3497076"/>
+ <node id="761250094" lat="48.8381432" lon="2.3497351"/>
+ <node id="761250097" lat="48.8381055" lon="2.3497591"/>
+ <node id="761250109" lat="48.8381618" lon="2.3495896">
+ <tag k="addr:housenumber" v="15"/>
+ <tag k="addr:street" v="Rue Pascal"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="773602205" lat="48.8675046" lon="2.3539915">
+ <tag k="name" v="Little Palace Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wikipedia" v="fr:Le Palace (Paris)"/>
+ </node>
+ <node id="778227840" lat="48.8544758" lon="2.3355256"/>
+ <node id="778227958" lat="48.8544704" lon="2.3355283"/>
+ <node id="778228209" lat="48.8547056" lon="2.3356214"/>
+ <node id="778228264" lat="48.8544197" lon="2.3357624"/>
+ <node id="778228402" lat="48.8545028" lon="2.3354171"/>
+ <node id="778228434" lat="48.8545976" lon="2.3359087"/>
+ <node id="778228529" lat="48.8544750" lon="2.3355298"/>
+ <node id="778228570" lat="48.8545229" lon="2.3353342"/>
+ <node id="778228894" lat="48.8544546" lon="2.3356656"/>
+ <node id="778228962" lat="48.8547512" lon="2.3354841"/>
+ <node id="778229154" lat="48.8545166" lon="2.3353256"/>
+ <node id="778229333" lat="48.8545162" lon="2.3353298"/>
+ <node id="778229598" lat="48.8546402" lon="2.3357880"/>
+ <node id="778229776" lat="48.8544272" lon="2.3356425"/>
+ <node id="780319544" lat="48.8496648" lon="2.3402192">
+ <tag k="name" v="Hôtel Saint-Paul Rive Gauche"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="782249947" lat="48.8357043" lon="2.4091177"/>
+ <node id="782251472" lat="48.8354662" lon="2.4097293"/>
+ <node id="782251973" lat="48.8352110" lon="2.4086634"/>
+ <node id="782253229" lat="48.8353809" lon="2.4099400"/>
+ <node id="782253443" lat="48.8350430" lon="2.4091086"/>
+ <node id="782253794" lat="48.8355576" lon="2.4094266"/>
+ <node id="782254066" lat="48.8353749" lon="2.4100985"/>
+ <node id="782254679" lat="48.8354185" lon="2.4099711"/>
+ <node id="782255124" lat="48.8354574" lon="2.4097230"/>
+ <node id="782256060" lat="48.8350001" lon="2.4098007"/>
+ <node id="782256825" lat="48.8353758" lon="2.4100859"/>
+ <node id="782259100" lat="48.8354127" lon="2.4099789"/>
+ <node id="782259443" lat="48.8355662" lon="2.4094335"/>
+ <node id="782260533" lat="48.8355697" lon="2.4093893"/>
+ <node id="782260755" lat="48.8350543" lon="2.4091176"/>
+ <node id="782260813" lat="48.8353785" lon="2.4100894"/>
+ <node id="782260932" lat="48.8353500" lon="2.4087726"/>
+ <node id="782261025" lat="48.8356667" lon="2.4092359"/>
+ <node id="782261039" lat="48.8348422" lon="2.4097310"/>
+ <node id="782261242" lat="48.8354426" lon="2.4097604"/>
+ <node id="782262225" lat="48.8349854" lon="2.4098450"/>
+ <node id="782262510" lat="48.8354439" lon="2.4097604"/>
+ <node id="782263390" lat="48.8355682" lon="2.4093872"/>
+ <node id="782263947" lat="48.8356296" lon="2.4092062"/>
+ <node id="782264816" lat="48.8356699" lon="2.4092268"/>
+ <node id="782264853" lat="48.8354156" lon="2.4099802"/>
+ <node id="782265019" lat="48.8350001" lon="2.4092810"/>
+ <node id="782265746" lat="48.8356677" lon="2.4092240"/>
+ <node id="782266667" lat="48.8353351" lon="2.4088162"/>
+ <node id="782267844" lat="48.8357099" lon="2.4091099"/>
+ <node id="782270170" lat="48.8349871" lon="2.4092706"/>
+ <node id="782270343" lat="48.8357070" lon="2.4091183"/>
+ <node id="782600979" lat="48.8482427" lon="2.3349204"/>
+ <node id="782601092" lat="48.8482723" lon="2.3339236"/>
+ <node id="782601256" lat="48.8482708" lon="2.3339755"/>
+ <node id="782601280" lat="48.8483175" lon="2.3339263"/>
+ <node id="782601483" lat="48.8482683" lon="2.3339598"/>
+ <node id="782601636" lat="48.8482498" lon="2.3348678"/>
+ <node id="782601652" lat="48.8484068" lon="2.3339298"/>
+ <node id="782601835" lat="48.8482676" lon="2.3339752"/>
+ <node id="782601850" lat="48.8484065" lon="2.3339441"/>
+ <node id="782601893" lat="48.8484008" lon="2.3341413"/>
+ <node id="782602014" lat="48.8483643" lon="2.3339276"/>
+ <node id="782602060" lat="48.8483707" lon="2.3349254"/>
+ <node id="782602071" lat="48.8483812" lon="2.3349112"/>
+ <node id="782602219" lat="48.8482708" lon="2.3339376"/>
+ <node id="782602244" lat="48.8484049" lon="2.3339445"/>
+ <node id="782602289" lat="48.8484010" lon="2.3341337"/>
+ <node id="782602402" lat="48.8482692" lon="2.3339234"/>
+ <node id="782602457" lat="48.8483706" lon="2.3349290"/>
+ <node id="782602474" lat="48.8484017" lon="2.3341413"/>
+ <node id="782602613" lat="48.8482701" lon="2.3339598"/>
+ <node id="782602792" lat="48.8482687" lon="2.3339373"/>
+ <node id="782602840" lat="48.8482527" lon="2.3349210"/>
+ <node id="782602853" lat="48.8483826" lon="2.3349296"/>
+ <node id="782602998" lat="48.8482439" lon="2.3348688"/>
+ <node id="782603026" lat="48.8484048" lon="2.3339600"/>
+ <node id="782603208" lat="48.8483118" lon="2.3339258"/>
+ <node id="782603266" lat="48.8482528" lon="2.3349176"/>
+ <node id="782603284" lat="48.8483834" lon="2.3349114"/>
+ <node id="782603443" lat="48.8483584" lon="2.3339275"/>
+ <node id="784316020" lat="48.8793613" lon="2.3620142"/>
+ <node id="784317546" lat="48.8790956" lon="2.3620197"/>
+ <node id="784318799" lat="48.8790537" lon="2.3620123"/>
+ <node id="784320067" lat="48.8789184" lon="2.3619602"/>
+ <node id="784339383" lat="48.8789093" lon="2.3619557"/>
+ <node id="784346182" lat="48.8791773" lon="2.3620185"/>
+ <node id="784350653" lat="48.8791981" lon="2.3620192"/>
+ <node id="784354261" lat="48.8787862" lon="2.3619002"/>
+ <node id="784354812" lat="48.8792793" lon="2.3620188"/>
+ <node id="784357272" lat="48.8788705" lon="2.3619383"/>
+ <node id="784358766" lat="48.8746102" lon="2.3558012"/>
+ <node id="784363867" lat="48.8746383" lon="2.3556749"/>
+ <node id="784364244" lat="48.8793963" lon="2.3620107"/>
+ <node id="784369152" lat="48.8792691" lon="2.3622459"/>
+ <node id="784380704" lat="48.8795291" lon="2.3619864"/>
+ <node id="784382071" lat="48.8793203" lon="2.3620175"/>
+ <node id="784383731" lat="48.8795092" lon="2.3620434"/>
+ <node id="784385304" lat="48.8792384" lon="2.3620179"/>
+ <node id="784388476" lat="48.8746905" lon="2.3558625"/>
+ <node id="784394160" lat="48.8794297" lon="2.3621207"/>
+ <node id="784416890" lat="48.8795402" lon="2.3621648"/>
+ <node id="784428707" lat="48.8788925" lon="2.3619487"/>
+ <node id="784437084" lat="48.8604069" lon="2.3261896"/>
+ <node id="784437090" lat="48.8600812" lon="2.3272670"/>
+ <node id="784437095" lat="48.8599036" lon="2.3278508"/>
+ <node id="784437109" lat="48.8604487" lon="2.3260967"/>
+ <node id="784437114" lat="48.8602061" lon="2.3268539"/>
+ <node id="784437121" lat="48.8599565" lon="2.3276954"/>
+ <node id="784437147" lat="48.8603216" lon="2.3264977"/>
+ <node id="784437154" lat="48.8599363" lon="2.3277617"/>
+ <node id="784437187" lat="48.8599227" lon="2.3278328"/>
+ <node id="784437192" lat="48.8599256" lon="2.3252960"/>
+ <node id="784437194" lat="48.8599835" lon="2.3276334"/>
+ <node id="784437217" lat="48.8603938" lon="2.3262414"/>
+ <node id="784437219" lat="48.8603153" lon="2.3264934"/>
+ <node id="784437223" lat="48.8599861" lon="2.3276056"/>
+ <node id="784437226" lat="48.8602607" lon="2.3266737"/>
+ <node id="784437230" lat="48.8601401" lon="2.3270714"/>
+ <node id="784437234" lat="48.8604409" lon="2.3261226"/>
+ <node id="784437240" lat="48.8603919" lon="2.3262402"/>
+ <node id="784437244" lat="48.8601032" lon="2.3272187"/>
+ <node id="784437267" lat="48.8595932" lon="2.3276612"/>
+ <node id="784437269" lat="48.8604086" lon="2.3261908"/>
+ <node id="784437272" lat="48.8601419" lon="2.3270910"/>
+ <node id="784437277" lat="48.8600120" lon="2.3253539"/>
+ <node id="784437282" lat="48.8604624" lon="2.3256691">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue de la Légion d'Honneur"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437286" lat="48.8604219" lon="2.3256411"/>
+ <node id="784437288" lat="48.8599254" lon="2.3278345"/>
+ <node id="784437294" lat="48.8599860" lon="2.3276354"/>
+ <node id="784437304" lat="48.8603947" lon="2.3262471"/>
+ <node id="784437310" lat="48.8599355" lon="2.3277780"/>
+ <node id="784437322" lat="48.8593296" lon="2.3274763"/>
+ <node id="784437334" lat="48.8598727" lon="2.3254840">
+ <tag k="addr:housenumber" v="60b"/>
+ <tag k="addr:street" v="Rue de Lille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437358" lat="48.8604439" lon="2.3261243"/>
+ <node id="784437361" lat="48.8600872" lon="2.3272713"/>
+ <node id="784437371" lat="48.8603358" lon="2.3255832"/>
+ <node id="784437375" lat="48.8598942" lon="2.3278729"/>
+ <node id="784437378" lat="48.8603201" lon="2.3255721"/>
+ <node id="784437383" lat="48.8595762" lon="2.3276496"/>
+ <node id="784437386" lat="48.8603806" lon="2.3263217"/>
+ <node id="784437414" lat="48.8599878" lon="2.3275746"/>
+ <node id="784437419" lat="48.8597203" lon="2.3277510"/>
+ <node id="784437423" lat="48.8602124" lon="2.3268582"/>
+ <node id="784437426" lat="48.8599208" lon="2.3278392">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Quai Anatole France"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437445" lat="48.8597437" lon="2.3259203">
+ <tag k="addr:housenumber" v="62"/>
+ <tag k="addr:street" v="Rue de Lille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437475" lat="48.8604277" lon="2.3261772"/>
+ <node id="784437478" lat="48.8598950" lon="2.3278697"/>
+ <node id="784437488" lat="48.8600111" lon="2.3253565"/>
+ <node id="784437494" lat="48.8603681" lon="2.3263439"/>
+ <node id="784437498" lat="48.8601902" lon="2.3269065"/>
+ <node id="784437501" lat="48.8601464" lon="2.3270759"/>
+ <node id="784437522" lat="48.8604224" lon="2.3256393"/>
+ <node id="784437550" lat="48.8604137" lon="2.3261841"/>
+ <node id="784437558" lat="48.8600784" lon="2.3251790"/>
+ <node id="784437586" lat="48.8600327" lon="2.3274515"/>
+ <node id="784437591" lat="48.8602669" lon="2.3266779"/>
+ <node id="784437594" lat="48.8603538" lon="2.3263661"/>
+ <node id="784437597" lat="48.8592911" lon="2.3274502"/>
+ <node id="784437602" lat="48.8598973" lon="2.3278714"/>
+ <node id="784437606" lat="48.8603056" lon="2.3265503"/>
+ <node id="784437610" lat="48.8605465" lon="2.3257271"/>
+ <node id="784437616" lat="48.8604370" lon="2.3260882"/>
+ <node id="784437637" lat="48.8598862" lon="2.3254262"/>
+ <node id="784437642" lat="48.8592922" lon="2.3274473"/>
+ <node id="784437645" lat="48.8602993" lon="2.3265463"/>
+ <node id="784437652" lat="48.8594629" lon="2.3275700"/>
+ <node id="784437667" lat="48.8603936" lon="2.3262503"/>
+ <node id="784437685" lat="48.8603992" lon="2.3262708"/>
+ <node id="784437695" lat="48.8601964" lon="2.3269111"/>
+ <node id="784437698" lat="48.8597596" lon="2.3277786"/>
+ <node id="784437701" lat="48.8603971" lon="2.3262532"/>
+ <node id="784437704" lat="48.8601355" lon="2.3270868"/>
+ <node id="784437706" lat="48.8603922" lon="2.3262454"/>
+ <node id="784437724" lat="48.8602511" lon="2.3267306"/>
+ <node id="784437732" lat="48.8604171" lon="2.3261866"/>
+ <node id="784437748" lat="48.8602448" lon="2.3267263"/>
+ <node id="784437752" lat="48.8598250" lon="2.3256454">
+ <tag k="addr:housenumber" v="60t"/>
+ <tag k="addr:street" v="Rue de Lille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437783" lat="48.8599241" lon="2.3252951"/>
+ <node id="784437792" lat="48.8599149" lon="2.3278587"/>
+ <node id="784437800" lat="48.8600219" lon="2.3253640"/>
+ <node id="784437802" lat="48.8603359" lon="2.3255794"/>
+ <node id="784437805" lat="48.8599909" lon="2.3276087"/>
+ <node id="784437812" lat="48.8604213" lon="2.3261732"/>
+ <node id="784437829" lat="48.8604801" lon="2.3259460">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Quai Anatole France"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437834" lat="48.8604101" lon="2.3261861"/>
+ <node id="784437844" lat="48.8596358" lon="2.3262852">
+ <tag k="addr:housenumber" v="62b"/>
+ <tag k="addr:street" v="Rue de Lille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="784437854" lat="48.8600486" lon="2.3273989"/>
+ <node id="784437858" lat="48.8599703" lon="2.3276883"/>
+ <node id="784437861" lat="48.8600425" lon="2.3273946"/>
+ <node id="784437864" lat="48.8600265" lon="2.3274473"/>
+ <node id="784437880" lat="48.8603835" lon="2.3263234"/>
+ <node id="784437891" lat="48.8599417" lon="2.3277822"/>
+ <node id="784437895" lat="48.8603768" lon="2.3253866"/>
+ <node id="784437898" lat="48.8603929" lon="2.3262669"/>
+ <node id="784437901" lat="48.8599641" lon="2.3276843"/>
+ <node id="784437905" lat="48.8603600" lon="2.3263707"/>
+ <node id="784437908" lat="48.8598890" lon="2.3254288"/>
+ <node id="784437912" lat="48.8600969" lon="2.3272144"/>
+ <node id="784437930" lat="48.8604128" lon="2.3261875"/>
+ <node id="784437938" lat="48.8599941" lon="2.3275791"/>
+ <node id="784437941" lat="48.8599399" lon="2.3277640"/>
+ <node id="784437945" lat="48.8599598" lon="2.3276980"/>
+ <node id="784437951" lat="48.8599263" lon="2.3252943"/>
+ <node id="784437958" lat="48.8603730" lon="2.3263473"/>
+ <node id="784444257" lat="48.8746290" lon="2.3558156"/>
+ <node id="784444605" lat="48.8790037" lon="2.3619974"/>
+ <node id="784457336" lat="48.8787613" lon="2.3619436"/>
+ <node id="784459957" lat="48.8794342" lon="2.3621121"/>
+ <node id="784461280" lat="48.8793979" lon="2.3620273"/>
+ <node id="784464761" lat="48.8794357" lon="2.3622224">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue du Château Landon"/>
+ </node>
+ <node id="784471155" lat="48.8795174" lon="2.3621660"/>
+ <node id="784472188" lat="48.8747294" lon="2.3557325"/>
+ <node id="784474564" lat="48.8791377" lon="2.3620186"/>
+ <node id="784499599" lat="48.8746846" lon="2.3558582"/>
+ <node id="784512707" lat="48.8794317" lon="2.3620549"/>
+ <node id="787318811" lat="48.8695127" lon="2.3745131"/>
+ <node id="787319805" lat="48.8695291" lon="2.3745009"/>
+ <node id="787320602" lat="48.8577366" lon="2.3724122"/>
+ <node id="787322003" lat="48.8587037" lon="2.3819794"/>
+ <node id="787323055" lat="48.8574467" lon="2.3728568"/>
+ <node id="787326292" lat="48.8696239" lon="2.3745636"/>
+ <node id="787327385" lat="48.8574328" lon="2.3728192"/>
+ <node id="787330678" lat="48.8574407" lon="2.3729019"/>
+ <node id="787332794" lat="48.8695476" lon="2.3746162"/>
+ <node id="787334181" lat="48.8586723" lon="2.3822834"/>
+ <node id="787334631" lat="48.8574157" lon="2.3729240"/>
+ <node id="787334903" lat="48.8574957" lon="2.3731664"/>
+ <node id="787334959" lat="48.8577583" lon="2.3724999"/>
+ <node id="787337169" lat="48.8574988" lon="2.3731753"/>
+ <node id="787338063" lat="48.8694919" lon="2.3744519"/>
+ <node id="787340694" lat="48.8576001" lon="2.3731381"/>
+ <node id="787343280" lat="48.8574672" lon="2.3727816"/>
+ <node id="787344051" lat="48.8578141" lon="2.3727268"/>
+ <node id="787346286" lat="48.8574715" lon="2.3727835"/>
+ <node id="787348825" lat="48.8696427" lon="2.3748972"/>
+ <node id="787349691" lat="48.8578768" lon="2.3728892"/>
+ <node id="787352233" lat="48.8587575" lon="2.3819756"/>
+ <node id="787353236" lat="48.8577885" lon="2.3726608"/>
+ <node id="787355106" lat="48.8695048" lon="2.3744897"/>
+ <node id="787355717" lat="48.8585550" lon="2.3822088"/>
+ <node id="787356054" lat="48.8574458" lon="2.3732215"/>
+ <node id="787360855" lat="48.8697079" lon="2.3748461"/>
+ <node id="787364151" lat="48.8574710" lon="2.3732862"/>
+ <node id="787369958" lat="48.8577653" lon="2.3724921"/>
+ <node id="787370855" lat="48.8577806" lon="2.3723729"/>
+ <node id="787371747" lat="48.8695724" lon="2.3743905"/>
+ <node id="787373041" lat="48.8574520" lon="2.3727936"/>
+ <node id="787377199" lat="48.8576146" lon="2.3731729"/>
+ <node id="787378181" lat="48.8586172" lon="2.3819854"/>
+ <node id="787380784" lat="48.8695936" lon="2.3747518"/>
+ <node id="787383154" lat="48.8574588" lon="2.3727829"/>
+ <node id="787387141" lat="48.8575044" lon="2.3731581"/>
+ <node id="787390010" lat="48.8695218" lon="2.3744769"/>
+ <node id="787399483" lat="48.8577648" lon="2.3725193"/>
+ <node id="787400281" lat="48.8578649" lon="2.3725885"/>
+ <node id="787402798" lat="48.8574509" lon="2.3728032"/>
+ <node id="787404953" lat="48.8586771" lon="2.3819813"/>
+ <node id="787407060" lat="48.8586332" lon="2.3819842"/>
+ <node id="789974581" lat="48.8918122" lon="2.3849242"/>
+ <node id="789975553" lat="48.8920147" lon="2.3849014"/>
+ <node id="789975852" lat="48.8921871" lon="2.3849773"/>
+ <node id="789976630" lat="48.8918362" lon="2.3849116"/>
+ <node id="789976634" lat="48.8919274" lon="2.3848813"/>
+ <node id="789976866" lat="48.8920871" lon="2.3849097"/>
+ <node id="789977276" lat="48.8921416" lon="2.3849364"/>
+ <node id="789977593" lat="48.8919709" lon="2.3847167"/>
+ <node id="789977619" lat="48.8921645" lon="2.3846028"/>
+ <node id="789977743" lat="48.8920640" lon="2.3848928"/>
+ <node id="789977981" lat="48.8917419" lon="2.3847690"/>
+ <node id="789978213" lat="48.8920479" lon="2.3848866"/>
+ <node id="789978302" lat="48.8919039" lon="2.3848942"/>
+ <node id="789979057" lat="48.8920595" lon="2.3846069"/>
+ <node id="789979590" lat="48.8919805" lon="2.3847163"/>
+ <node id="789979661" lat="48.8919681" lon="2.3848710"/>
+ <node id="789979750" lat="48.8917140" lon="2.3847736"/>
+ <node id="789979780" lat="48.8919734" lon="2.3848998"/>
+ <node id="789979808" lat="48.8920228" lon="2.3848749"/>
+ <node id="789979833" lat="48.8917607" lon="2.3848056"/>
+ <node id="789979853" lat="48.8917228" lon="2.3847677"/>
+ <node id="789980035" lat="48.8920413" lon="2.3848777"/>
+ <node id="789980101" lat="48.8922457" lon="2.3845865"/>
+ <node id="789980152" lat="48.8917529" lon="2.3849541"/>
+ <node id="789980482" lat="48.8918099" lon="2.3849334"/>
+ <node id="789980802" lat="48.8918175" lon="2.3847754"/>
+ <node id="789980844" lat="48.8919485" lon="2.3848758"/>
+ <node id="789981051" lat="48.8921163" lon="2.3849272"/>
+ <node id="789981392" lat="48.8922526" lon="2.3849651"/>
+ <node id="789981456" lat="48.8920917" lon="2.3849051"/>
+ <node id="789981637" lat="48.8917851" lon="2.3849396"/>
+ <node id="789981735" lat="48.8918404" lon="2.3849109"/>
+ <node id="789981971" lat="48.8921160" lon="2.3849171"/>
+ <node id="789982072" lat="48.8918690" lon="2.3848986"/>
+ <node id="789982408" lat="48.8923464" lon="2.3847109"/>
+ <node id="789982703" lat="48.8919308" lon="2.3847261"/>
+ <node id="789982766" lat="48.8919115" lon="2.3847433"/>
+ <node id="789982828" lat="48.8919423" lon="2.3848799"/>
+ <node id="789982896" lat="48.8922382" lon="2.3846010"/>
+ <node id="789982917" lat="48.8917868" lon="2.3847777"/>
+ <node id="789982939" lat="48.8917621" lon="2.3849552"/>
+ <node id="789982942" lat="48.8918574" lon="2.3847455"/>
+ <node id="789983037" lat="48.8922036" lon="2.3849955"/>
+ <node id="789984015" lat="48.8920644" lon="2.3849002"/>
+ <node id="789984122" lat="48.8922080" lon="2.3846570"/>
+ <node id="789984475" lat="48.8922260" lon="2.3850134"/>
+ <node id="789984584" lat="48.8922171" lon="2.3846215"/>
+ <node id="789985250" lat="48.8917029" lon="2.3847922"/>
+ <node id="789985584" lat="48.8917909" lon="2.3849432"/>
+ <node id="789985748" lat="48.8921823" lon="2.3849783"/>
+ <node id="789986705" lat="48.8918670" lon="2.3847413"/>
+ <node id="789986979" lat="48.8920689" lon="2.3845715"/>
+ <node id="789987206" lat="48.8920441" lon="2.3846160"/>
+ <node id="789988610" lat="48.8919915" lon="2.3847109"/>
+ <node id="789988667" lat="48.8919708" lon="2.3847379"/>
+ <node id="789988751" lat="48.8921635" lon="2.3849530"/>
+ <node id="789989028" lat="48.8922114" lon="2.3849961"/>
+ <node id="789989912" lat="48.8921648" lon="2.3849628"/>
+ <node id="789990647" lat="48.8919490" lon="2.3848733"/>
+ <node id="789991706" lat="48.8922144" lon="2.3846468"/>
+ <node id="789992501" lat="48.8917498" lon="2.3847640"/>
+ <node id="789992585" lat="48.8917964" lon="2.3847720"/>
+ <node id="789992612" lat="48.8919400" lon="2.3847248"/>
+ <node id="789992654" lat="48.8917379" lon="2.3849644"/>
+ <node id="789992661" lat="48.8919553" lon="2.3847393"/>
+ <node id="789992699" lat="48.8921368" lon="2.3849392"/>
+ <node id="789992750" lat="48.8918398" lon="2.3847653"/>
+ <node id="789992970" lat="48.8919235" lon="2.3848893"/>
+ <node id="789993212" lat="48.8922478" lon="2.3848921"/>
+ <node id="789993438" lat="48.8918443" lon="2.3849164"/>
+ <node id="789994206" lat="48.8920426" lon="2.3846102"/>
+ <node id="789994386" lat="48.8918869" lon="2.3847512"/>
+ <node id="789994605" lat="48.8917711" lon="2.3848018"/>
+ <node id="789994670" lat="48.8918659" lon="2.3849082"/>
+ <node id="789994895" lat="48.8916909" lon="2.3847991"/>
+ <node id="789994957" lat="48.8919786" lon="2.3846583"/>
+ <node id="789995150" lat="48.8918994" lon="2.3848884"/>
+ <node id="789995340" lat="48.8922234" lon="2.3846101"/>
+ <node id="790433164" lat="48.8428170" lon="2.3334415"/>
+ <node id="790434303" lat="48.8426828" lon="2.3337476"/>
+ <node id="790434668" lat="48.8428140" lon="2.3334717"/>
+ <node id="790434679" lat="48.8426986" lon="2.3334740"/>
+ <node id="790434905" lat="48.8429309" lon="2.3338757"/>
+ <node id="790434958" lat="48.8430268" lon="2.3340658"/>
+ <node id="790435296" lat="48.8428238" lon="2.3334350"/>
+ <node id="790435362" lat="48.8429157" lon="2.3341730"/>
+ <node id="790435507" lat="48.8428250" lon="2.3334567"/>
+ <node id="790435569" lat="48.8427903" lon="2.3333714"/>
+ <node id="790435749" lat="48.8425998" lon="2.3335981"/>
+ <node id="791861511" lat="48.8359371" lon="2.2493675"/>
+ <node id="791861522" lat="48.8361374" lon="2.2504999"/>
+ <node id="791861911" lat="48.8360292" lon="2.2506762"/>
+ <node id="791862523" lat="48.8361626" lon="2.2505571"/>
+ <node id="791862635" lat="48.8360732" lon="2.2503572"/>
+ <node id="791862832" lat="48.8359973" lon="2.2493282"/>
+ <node id="791862842" lat="48.8360168" lon="2.2506795"/>
+ <node id="791862976" lat="48.8360043" lon="2.2494178"/>
+ <node id="791862979" lat="48.8360276" lon="2.2506709"/>
+ <node id="791863242" lat="48.8359889" lon="2.2493446"/>
+ <node id="791863684" lat="48.8360776" lon="2.2493869"/>
+ <node id="791863696" lat="48.8359055" lon="2.2492673"/>
+ <node id="791863982" lat="48.8359965" lon="2.2506141"/>
+ <node id="791864181" lat="48.8360547" lon="2.2493175"/>
+ <node id="791864575" lat="48.8360076" lon="2.2506065"/>
+ <node id="791864770" lat="48.8359913" lon="2.2493323"/>
+ <node id="791864960" lat="48.8360252" lon="2.2494090"/>
+ <node id="791865470" lat="48.8359593" lon="2.2494369"/>
+ <node id="791865615" lat="48.8359606" lon="2.2504539"/>
+ <node id="791865670" lat="48.8360120" lon="2.2491883"/>
+ <node id="796082706" lat="48.8377969" lon="2.3464058">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="796866336" lat="48.8612382" lon="2.3198453"/>
+ <node id="796866413" lat="48.8612217" lon="2.3196515"/>
+ <node id="796866699" lat="48.8612182" lon="2.3196290"/>
+ <node id="796866706" lat="48.8612451" lon="2.3195388"/>
+ <node id="796866843" lat="48.8613629" lon="2.3196169"/>
+ <node id="796866953" lat="48.8612829" lon="2.3196918"/>
+ <node id="796867022" lat="48.8614427" lon="2.3196688"/>
+ <node id="796867052" lat="48.8613646" lon="2.3199330"/>
+ <node id="797959956" lat="48.8977239" lon="2.3105703">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:postcode" v="92110"/>
+ <tag k="addr:street" v="RUE DU 8 MAI 1945"/>
+ <tag k="fax" v="+33-1-76687701"/>
+ <tag k="name" v="Holiday Inn : Porte de Clichy"/>
+ <tag k="operator" v="IHG"/>
+ <tag k="phone" v="+33-1-76687700"/>
+ <tag k="points" v="PriorityPoints"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="797963541" lat="48.8970833" lon="2.3097772">
+ <tag k="name" v="IBIS"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="797978414" lat="48.8759291" lon="2.3587392">
+ <tag k="fax" v="+33-1-55260500"/>
+ <tag k="name" v="Holiday Inn : Gare de L'est"/>
+ <tag k="operator" v="IHG"/>
+ <tag k="phone" v="+33-1-55260505"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="804285854" lat="48.8449596" lon="2.3251083">
+ <tag k="addr:housenumber" v="159"/>
+ <tag k="addr:street" v="Rue de Rennes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="806114440" lat="48.8535941" lon="2.3383125">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:postcode" v="75006"/>
+ <tag k="addr:street" v="Rue de l'Ancienne Comédie"/>
+ <tag k="entrance" v="yes"/>
+ <tag k="name" v="Le Petit Trianon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="806897882" lat="48.8545440" lon="2.3358646">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Rue de Furstemberg"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="807097780" lat="48.8660456" lon="2.3145051">
+ <tag k="name" v="Musée du Petit Palais"/>
+ <tag k="opening_hours" v="Tu-Su 10:00-18:00; PH off"/>
+ <tag k="phone" v="01.53.43.40.00"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.petitpalais.paris.fr/"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="807213009" lat="48.8666395" lon="2.3119621"/>
+ <node id="807213078" lat="48.8666760" lon="2.3112494"/>
+ <node id="807213658" lat="48.8666490" lon="2.3116040"/>
+ <node id="809890949" lat="48.8670535" lon="2.3132136"/>
+ <node id="809890958" lat="48.8651831" lon="2.3129958"/>
+ <node id="810097657" lat="48.8668775" lon="2.3108372"/>
+ <node id="810097732" lat="48.8668783" lon="2.3108713"/>
+ <node id="810097754" lat="48.8662043" lon="2.3105523"/>
+ <node id="810252617" lat="48.8708870" lon="2.3092693">
+ <tag k="name" v="Hôtel Beauchamps"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="810252674" lat="48.8704285" lon="2.3107083">
+ <tag k="name" v="Hôtel du Rond-Point des Champs-Élysées"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="810252700" lat="48.8700870" lon="2.3111689">
+ <tag k="name" v="Hôtel Elysée Park"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="810252727" lat="48.8700445" lon="2.3113231">
+ <tag k="name" v="Hôtel Mathis Élysées"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="812117901" lat="48.8692140" lon="2.3206778">
+ <tag k="name" v="Hôtel de Castiglione"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="812117989" lat="48.8731008" lon="2.3097181">
+ <tag k="name" v="Le 123 Elysées"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="812118110" lat="48.8717330" lon="2.3147998">
+ <tag k="name" v="Le Bristol"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="812605822" lat="48.8157912" lon="2.3636778"/>
+ <node id="812606130" lat="48.8155862" lon="2.3637783"/>
+ <node id="812606198" lat="48.8157663" lon="2.3638779"/>
+ <node id="812606369" lat="48.8157676" lon="2.3638845"/>
+ <node id="812606695" lat="48.8158294" lon="2.3636971"/>
+ <node id="812606760" lat="48.8159012" lon="2.3639643"/>
+ <node id="812607484" lat="48.8158291" lon="2.3636886"/>
+ <node id="812607555" lat="48.8159056" lon="2.3640146"/>
+ <node id="812608260" lat="48.8157859" lon="2.3638933"/>
+ <node id="812608331" lat="48.8156033" lon="2.3638183"/>
+ <node id="812608970" lat="48.8160518" lon="2.3643611"/>
+ <node id="812609609" lat="48.8157647" lon="2.3638293"/>
+ <node id="812610061" lat="48.8156454" lon="2.3638781"/>
+ <node id="812610078" lat="48.8160286" lon="2.3644079"/>
+ <node id="812612702" lat="48.8160533" lon="2.3643515"/>
+ <node id="812612839" lat="48.8160529" lon="2.3643450"/>
+ <node id="812613559" lat="48.8158403" lon="2.3637591"/>
+ <node id="812614458" lat="48.8157797" lon="2.3638956"/>
+ <node id="812615363" lat="48.8157663" lon="2.3638736"/>
+ <node id="812615368" lat="48.8156649" lon="2.3639772"/>
+ <node id="812617298" lat="48.8157675" lon="2.3638669"/>
+ <node id="812618880" lat="48.8160487" lon="2.3643677"/>
+ <node id="812619753" lat="48.8158011" lon="2.3636669"/>
+ <node id="812619904" lat="48.8157696" lon="2.3638623"/>
+ <node id="812620821" lat="48.8156176" lon="2.3638895"/>
+ <node id="812620824" lat="48.8159556" lon="2.3640900"/>
+ <node id="812620996" lat="48.8157802" lon="2.3636995"/>
+ <node id="812621065" lat="48.8157887" lon="2.3636863"/>
+ <node id="812621449" lat="48.8160476" lon="2.3643958"/>
+ <node id="812621779" lat="48.8156181" lon="2.3637469"/>
+ <node id="812622037" lat="48.8158276" lon="2.3637107"/>
+ <node id="812622553" lat="48.8157884" lon="2.3636955"/>
+ <node id="812627276" lat="48.8156739" lon="2.3640600"/>
+ <node id="812627468" lat="48.8158908" lon="2.3639081"/>
+ <node id="812627880" lat="48.8158261" lon="2.3637156"/>
+ <node id="812629019" lat="48.8156743" lon="2.3638676"/>
+ <node id="812629237" lat="48.8156924" lon="2.3639656"/>
+ <node id="812629365" lat="48.8157711" lon="2.3638910"/>
+ <node id="812629816" lat="48.8155951" lon="2.3638216"/>
+ <node id="812630723" lat="48.8160511" lon="2.3643390"/>
+ <node id="812631183" lat="48.8158292" lon="2.3637026"/>
+ <node id="812631239" lat="48.8157823" lon="2.3638953"/>
+ <node id="812632183" lat="48.8158279" lon="2.3645245"/>
+ <node id="812632393" lat="48.8160475" lon="2.3643326"/>
+ <node id="812632589" lat="48.8157954" lon="2.3636711"/>
+ <node id="812633518" lat="48.8160405" lon="2.3643740"/>
+ <node id="812633849" lat="48.8158538" lon="2.3645373"/>
+ <node id="812634199" lat="48.8160529" lon="2.3643564"/>
+ <node id="812634266" lat="48.8158832" lon="2.3639124"/>
+ <node id="812634291" lat="48.8158204" lon="2.3639984"/>
+ <node id="812634305" lat="48.8160609" lon="2.3643186"/>
+ <node id="812634532" lat="48.8157761" lon="2.3636780"/>
+ <node id="812635067" lat="48.8157669" lon="2.3638695"/>
+ <node id="812635520" lat="48.8160443" lon="2.3643723"/>
+ <node id="812635904" lat="48.8157738" lon="2.3638575"/>
+ <node id="812637253" lat="48.8158955" lon="2.3639666"/>
+ <node id="812637446" lat="48.8159249" lon="2.3640064"/>
+ <node id="812637690" lat="48.8156213" lon="2.3637627"/>
+ <node id="812638464" lat="48.8157751" lon="2.3638946"/>
+ <node id="812638679" lat="48.8158415" lon="2.3637581"/>
+ <node id="813459341" lat="48.8730746" lon="2.3180911">
+ <tag k="name" v="Timhotel Élysée"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="813499812" lat="48.8727854" lon="2.3165686"/>
+ <node id="813499828" lat="48.8729250" lon="2.3165501"/>
+ <node id="813500036" lat="48.8728226" lon="2.3165975"/>
+ <node id="813500255" lat="48.8728409" lon="2.3165889"/>
+ <node id="813500706" lat="48.8727929" lon="2.3166117"/>
+ <node id="813501115" lat="48.8729010" lon="2.3164215"/>
+ <node id="813502287" lat="48.8727684" lon="2.3164780"/>
+ <node id="813926466" lat="48.8727499" lon="2.3156956"/>
+ <node id="813926533" lat="48.8728147" lon="2.3159191"/>
+ <node id="813927224" lat="48.8727539" lon="2.3156957"/>
+ <node id="813927504" lat="48.8727908" lon="2.3156944"/>
+ <node id="813927988" lat="48.8728273" lon="2.3158909"/>
+ <node id="813929221" lat="48.8727581" lon="2.3159237"/>
+ <node id="814051385" lat="48.8729293" lon="2.3160487"/>
+ <node id="814051537" lat="48.8729340" lon="2.3160388"/>
+ <node id="814051726" lat="48.8729866" lon="2.3162820"/>
+ <node id="814051844" lat="48.8729749" lon="2.3162869"/>
+ <node id="814052049" lat="48.8731077" lon="2.3160246"/>
+ <node id="814052251" lat="48.8731163" lon="2.3162187"/>
+ <node id="814098761" lat="48.8734274" lon="2.3182214"/>
+ <node id="814098933" lat="48.8733167" lon="2.3182444"/>
+ <node id="814099047" lat="48.8733310" lon="2.3182412"/>
+ <node id="814099102" lat="48.8733020" lon="2.3180951"/>
+ <node id="814099188" lat="48.8734117" lon="2.3180699"/>
+ <node id="814099291" lat="48.8734206" lon="2.3181576"/>
+ <node id="815501043" lat="48.8843714" lon="2.2606115"/>
+ <node id="815507462" lat="48.8843173" lon="2.2607817"/>
+ <node id="815508372" lat="48.8842121" lon="2.2604818"/>
+ <node id="815508799" lat="48.8843099" lon="2.2605024"/>
+ <node id="815508926" lat="48.8841578" lon="2.2605369"/>
+ <node id="815509897" lat="48.8795346" lon="2.2748633"/>
+ <node id="815510010" lat="48.8794228" lon="2.2747784"/>
+ <node id="815510881" lat="48.8794887" lon="2.2750034"/>
+ <node id="815510905" lat="48.8841509" lon="2.2605682"/>
+ <node id="815511224" lat="48.8843495" lon="2.2605398"/>
+ <node id="815511257" lat="48.8793762" lon="2.2749214"/>
+ <node id="815511738" lat="48.8795205" lon="2.2748525"/>
+ <node id="815511975" lat="48.8841371" lon="2.2606308"/>
+ <node id="815512049" lat="48.8795338" lon="2.2748656"/>
+ <node id="815512584" lat="48.8843503" lon="2.2605499"/>
+ <node id="815512797" lat="48.8842176" lon="2.2604570"/>
+ <node id="815513138" lat="48.8793926" lon="2.2748710"/>
+ <node id="815513536" lat="48.8843065" lon="2.2605186"/>
+ <node id="815514295" lat="48.8843476" lon="2.2605484"/>
+ <node id="815514371" lat="48.8795114" lon="2.2748457"/>
+ <node id="815515414" lat="48.8841741" lon="2.2604631"/>
+ <node id="815777441" lat="48.8729256" lon="2.3237568">
+ <tag k="name" v="Royal Madeleine"/>
+ <tag k="operator" v="Mercure"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="815831251" lat="48.8722936" lon="2.3258193">
+ <tag k="name" v="Hôtel Opal"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="815866443" lat="48.8708859" lon="2.3258330"/>
+ <node id="815866492" lat="48.8708832" lon="2.3259434"/>
+ <node id="815866537" lat="48.8708720" lon="2.3258164"/>
+ <node id="815866542" lat="48.8707345" lon="2.3257161"/>
+ <node id="815866545" lat="48.8708339" lon="2.3258107"/>
+ <node id="815866575" lat="48.8709412" lon="2.3258658"/>
+ <node id="815866616" lat="48.8708810" lon="2.3258279"/>
+ <node id="815866623" lat="48.8708636" lon="2.3258094"/>
+ <node id="815866651" lat="48.8708167" lon="2.3259221"/>
+ <node id="815866688" lat="48.8709147" lon="2.3260989"/>
+ <node id="815866690" lat="48.8708169" lon="2.3258178"/>
+ <node id="815866722" lat="48.8709367" lon="2.3259134"/>
+ <node id="815866732" lat="48.8708086" lon="2.3259024"/>
+ <node id="815866767" lat="48.8708929" lon="2.3258449"/>
+ <node id="815866771" lat="48.8708607" lon="2.3258189"/>
+ <node id="815866814" lat="48.8708064" lon="2.3259195"/>
+ <node id="815866851" lat="48.8706383" lon="2.3260280"/>
+ <node id="815866856" lat="48.8708059" lon="2.3259229"/>
+ <node id="815866889" lat="48.8706368" lon="2.3260224"/>
+ <node id="815866892" lat="48.8708185" lon="2.3259047"/>
+ <node id="817974720" lat="48.8844920" lon="2.3446024"/>
+ <node id="817976111" lat="48.8845702" lon="2.3447401"/>
+ <node id="819010090" lat="48.8815927" lon="2.3475414">
+ <tag k="name" v="Vintage Hostel Near Gare du Nord"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="819030499" lat="48.8818743" lon="2.3221457">
+ <tag k="name" v="Hôtel Berne Opéra"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="819030723" lat="48.8810389" lon="2.3229900"/>
+ <node id="819030787" lat="48.8809058" lon="2.3229688"/>
+ <node id="819031342" lat="48.8808957" lon="2.3229782"/>
+ <node id="819031524" lat="48.8809420" lon="2.3228837"/>
+ <node id="819031859" lat="48.8808466" lon="2.3228557"/>
+ <node id="819032083" lat="48.8809437" lon="2.3228688"/>
+ <node id="819032381" lat="48.8809008" lon="2.3228081"/>
+ <node id="819032613" lat="48.8809647" lon="2.3228496"/>
+ <node id="819032685" lat="48.8809109" lon="2.3230163"/>
+ <node id="819032949" lat="48.8809334" lon="2.3228920"/>
+ <node id="819033214" lat="48.8809735" lon="2.3228542"/>
+ <node id="819033276" lat="48.8809278" lon="2.3230005"/>
+ <node id="819033782" lat="48.8809814" lon="2.3228479"/>
+ <node id="819033801" lat="48.8809384" lon="2.3230830"/>
+ <node id="819033834" lat="48.8809220" lon="2.3229838"/>
+ <node id="819175697" lat="48.8784358" lon="2.3267899">
+ <tag k="name" v="Hôtel de la Flèche d'Or"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="819175912" lat="48.8765921" lon="2.3270551">
+ <tag k="name" v="Grand Hôtel du Havre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="819175919" lat="48.8768790" lon="2.3270689">
+ <tag k="name" v="Hôtel Britannia"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="819176251" lat="48.8767937" lon="2.3270652">
+ <tag k="name" v="Hôtel de Dieppe"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="821879323" lat="48.8837078" lon="2.3286418">
+ <tag k="name" v="Hôtel Place de Clichy"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="822766349" lat="48.8796258" lon="2.3122172"/>
+ <node id="822766456" lat="48.8795789" lon="2.3120691"/>
+ <node id="822766556" lat="48.8794687" lon="2.3119822"/>
+ <node id="822766796" lat="48.8793233" lon="2.3119831"/>
+ <node id="822766962" lat="48.8796079" lon="2.3121561"/>
+ <node id="822767063" lat="48.8795392" lon="2.3120089"/>
+ <node id="822767160" lat="48.8793565" lon="2.3120114"/>
+ <node id="822767385" lat="48.8796003" lon="2.3121178"/>
+ <node id="822767587" lat="48.8794997" lon="2.3119850"/>
+ <node id="822767664" lat="48.8793395" lon="2.3120053"/>
+ <node id="822951213" lat="48.8792162" lon="2.3125984"/>
+ <node id="822951627" lat="48.8792950" lon="2.3128171"/>
+ <node id="822952077" lat="48.8792901" lon="2.3119122"/>
+ <node id="822952082" lat="48.8791267" lon="2.3126952"/>
+ <node id="822952087" lat="48.8793668" lon="2.3127750"/>
+ <node id="822952111" lat="48.8789463" lon="2.3122902"/>
+ <node id="822952288" lat="48.8796774" lon="2.3125784"/>
+ <node id="822952402" lat="48.8796755" lon="2.3125790"/>
+ <node id="822952929" lat="48.8797172" lon="2.3125516"/>
+ <node id="822953163" lat="48.8788886" lon="2.3129599"/>
+ <node id="822953165" lat="48.8792564" lon="2.3127105"/>
+ <node id="822953192" lat="48.8786984" lon="2.3125628"/>
+ <node id="822953456" lat="48.8793687" lon="2.3124333"/>
+ <node id="822953634" lat="48.8789987" lon="2.3128371"/>
+ <node id="822953662" lat="48.8788113" lon="2.3124394"/>
+ <node id="822953917" lat="48.8796368" lon="2.3122589"/>
+ <node id="822953933" lat="48.8794922" lon="2.3126965"/>
+ <node id="824421442" lat="48.8552985" lon="2.3155675"/>
+ <node id="824421579" lat="48.8554200" lon="2.3157274"/>
+ <node id="824421619" lat="48.8553998" lon="2.3159509"/>
+ <node id="824421665" lat="48.8554374" lon="2.3156067"/>
+ <node id="824421691" lat="48.8552239" lon="2.3157715"/>
+ <node id="824421735" lat="48.8554127" lon="2.3157871"/>
+ <node id="824421823" lat="48.8552461" lon="2.3155651"/>
+ <node id="824421894" lat="48.8552412" lon="2.3155654"/>
+ <node id="824422022" lat="48.8552336" lon="2.3155733"/>
+ <node id="824422318" lat="48.8552343" lon="2.3156660"/>
+ <node id="824422380" lat="48.8554109" lon="2.3158066"/>
+ <node id="824422433" lat="48.8551882" lon="2.3160979"/>
+ <node id="824422441" lat="48.8551808" lon="2.3160888"/>
+ <node id="824422602" lat="48.8553832" lon="2.3155895"/>
+ <node id="824422824" lat="48.8551876" lon="2.3161075"/>
+ <node id="824422845" lat="48.8552372" lon="2.3155681"/>
+ <node id="824422915" lat="48.8552000" lon="2.3159883"/>
+ <node id="824422998" lat="48.8551985" lon="2.3159982"/>
+ <node id="824423034" lat="48.8551828" lon="2.3160931"/>
+ <node id="824423115" lat="48.8551794" lon="2.3160804"/>
+ <node id="824423158" lat="48.8554152" lon="2.3158085"/>
+ <node id="824423248" lat="48.8551887" lon="2.3160009"/>
+ <node id="824423520" lat="48.8553221" lon="2.3161471"/>
+ <node id="824423575" lat="48.8551710" lon="2.3160776"/>
+ <node id="824423778" lat="48.8552386" lon="2.3161207"/>
+ <node id="824423831" lat="48.8552179" lon="2.3156450"/>
+ <node id="824424087" lat="48.8551926" lon="2.3159986"/>
+ <node id="824424176" lat="48.8552304" lon="2.3157650"/>
+ <node id="824424248" lat="48.8552471" lon="2.3155572"/>
+ <node id="824424294" lat="48.8551855" lon="2.3160059"/>
+ <node id="824424306" lat="48.8552249" lon="2.3157642"/>
+ <node id="824424342" lat="48.8552299" lon="2.3156628"/>
+ <node id="824424418" lat="48.8552067" lon="2.3159900"/>
+ <node id="824424503" lat="48.8552382" lon="2.3161256"/>
+ <node id="824424520" lat="48.8553946" lon="2.3159495"/>
+ <node id="824424566" lat="48.8553836" lon="2.3155927"/>
+ <node id="824424600" lat="48.8552976" lon="2.3155704"/>
+ <node id="824424650" lat="48.8551835" lon="2.3160126"/>
+ <node id="824424742" lat="48.8551783" lon="2.3160118"/>
+ <node id="824424779" lat="48.8552262" lon="2.3155781"/>
+ <node id="824424812" lat="48.8553856" lon="2.3160356"/>
+ <node id="824425093" lat="48.8552397" lon="2.3156778"/>
+ <node id="824425142" lat="48.8552248" lon="2.3156470"/>
+ <node id="824425154" lat="48.8552096" lon="2.3159034"/>
+ <node id="824425341" lat="48.8553765" lon="2.3161559"/>
+ <node id="824425485" lat="48.8553900" lon="2.3160370"/>
+ <node id="824425489" lat="48.8552334" lon="2.3156761"/>
+ <node id="824425510" lat="48.8552157" lon="2.3159050"/>
+ <node id="824425555" lat="48.8554241" lon="2.3157279"/>
+ <node id="824425633" lat="48.8553228" lon="2.3161421"/>
+ <node id="824425840" lat="48.8552274" lon="2.3156588"/>
+ <node id="824425869" lat="48.8552318" lon="2.3155800"/>
+ <node id="826680502" lat="48.8756068" lon="2.3099825"/>
+ <node id="826680637" lat="48.8760493" lon="2.3105231"/>
+ <node id="826680773" lat="48.8752588" lon="2.3109365"/>
+ <node id="826680813" lat="48.8757613" lon="2.3107710"/>
+ <node id="826681071" lat="48.8756071" lon="2.3099889"/>
+ <node id="826681223" lat="48.8757516" lon="2.3098133"/>
+ <node id="826681454" lat="48.8753703" lon="2.3101768"/>
+ <node id="826681492" lat="48.8756641" lon="2.3108989"/>
+ <node id="826681596" lat="48.8756123" lon="2.3101564"/>
+ <node id="826681735" lat="48.8756517" lon="2.3099405"/>
+ <node id="826681739" lat="48.8756434" lon="2.3099187"/>
+ <node id="826681884" lat="48.8759229" lon="2.3106318"/>
+ <node id="826682038" lat="48.8752297" lon="2.3101886"/>
+ <node id="826682083" lat="48.8758041" lon="2.3108856"/>
+ <node id="826682191" lat="48.8755595" lon="2.3101613"/>
+ <node id="826995359" lat="48.8882128" lon="2.2484917"/>
+ <node id="826997265" lat="48.8885055" lon="2.2477133"/>
+ <node id="827019436" lat="48.8882165" lon="2.2484899"/>
+ <node id="828098463" lat="48.8756281" lon="2.3041375">
+ <tag k="name" v="Étoile Saint-Honoré"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="828116852" lat="48.8750502" lon="2.3048717">
+ <tag k="name" v="Hôtel Étoile Friedland"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="828134449" lat="48.8737055" lon="2.3062317">
+ <tag k="name" v="Champs-Élysées Plaza"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="828148097" lat="48.8726755" lon="2.3049470">
+ <tag k="name" v="Hôtel California"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="828583803" lat="48.8607275" lon="2.2960951"/>
+ <node id="828584146" lat="48.8607297" lon="2.2960918"/>
+ <node id="828584315" lat="48.8607954" lon="2.2961911"/>
+ <node id="828728726" lat="48.8704404" lon="2.3077470">
+ <tag k="name" v="Hôtel du Colisée"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="829132701" lat="48.8717742" lon="2.2984126">
+ <tag k="name" v="Hôtel Amarante Champs-Élysées"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="829543920" lat="48.8691738" lon="2.3031698">
+ <tag k="name" v="Hôtel Powers"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="830142556" lat="48.8826120" lon="2.3279359"/>
+ <node id="830142557" lat="48.8818407" lon="2.3284872"/>
+ <node id="830142580" lat="48.8813470" lon="2.3283572"/>
+ <node id="830142872" lat="48.8817885" lon="2.3285742"/>
+ <node id="830142914" lat="48.8817845" lon="2.3285809"/>
+ <node id="830143077" lat="48.8814647" lon="2.3281564"/>
+ <node id="830143362" lat="48.8818059" lon="2.3286865"/>
+ <node id="830144202" lat="48.8825818" lon="2.3281087"/>
+ <node id="830146210" lat="48.8825491" lon="2.3279651"/>
+ <node id="830146604" lat="48.8826455" lon="2.3280763"/>
+ <node id="830147159" lat="48.8814680" lon="2.3283016"/>
+ <node id="830149878" lat="48.8818869" lon="2.3285530"/>
+ <node id="830150278" lat="48.8817879" lon="2.3285974"/>
+ <node id="830151452" lat="48.8814378" lon="2.3281567"/>
+ <node id="830151483" lat="48.8814543" lon="2.3281565"/>
+ <node id="830153158" lat="48.8813433" lon="2.3281599"/>
+ <node id="830671151" lat="48.8668308" lon="2.3028826">
+ <tag k="name" v="Hôtel de la Trémoille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="831433151" lat="48.8761191" lon="2.3419940"/>
+ <node id="831433218" lat="48.8761909" lon="2.3417588"/>
+ <node id="831435717" lat="48.8761403" lon="2.3419180"/>
+ <node id="831436792" lat="48.8761813" lon="2.3419444"/>
+ <node id="831440340" lat="48.8762289" lon="2.3417733"/>
+ <node id="831440377" lat="48.8761603" lon="2.3420196"/>
+ <node id="831440954" lat="48.8761253" lon="2.3417748"/>
+ <node id="831441015" lat="48.8761844" lon="2.3419322"/>
+ <node id="831452196" lat="48.8761661" lon="2.3418010"/>
+ <node id="831452221" lat="48.8760353" lon="2.3421045"/>
+ <node id="831452223" lat="48.8761712" lon="2.3417832"/>
+ <node id="831452480" lat="48.8761216" lon="2.3421588"/>
+ <node id="831452482" lat="48.8762106" lon="2.3418386"/>
+ <node id="831452567" lat="48.8761822" lon="2.3417897"/>
+ <node id="832376582" lat="48.8762223" lon="2.3368620"/>
+ <node id="832376644" lat="48.8762293" lon="2.3370428"/>
+ <node id="832377086" lat="48.8761768" lon="2.3368002"/>
+ <node id="832377177" lat="48.8761686" lon="2.3369316">
+ <tag k="addr:housenumber" v="30"/>
+ <tag k="addr:street" v="Rue de Châteaudun"/>
+ </node>
+ <node id="832378324" lat="48.8762344" lon="2.3368636"/>
+ <node id="832378336" lat="48.8761634" lon="2.3370141"/>
+ <node id="832378521" lat="48.8762334" lon="2.3369010"/>
+ <node id="832378808" lat="48.8762208" lon="2.3369018"/>
+ <node id="832378830" lat="48.8762361" lon="2.3368022"/>
+ <node id="832378926" lat="48.8761819" lon="2.3370444"/>
+ <node id="832525115" lat="48.8795858" lon="2.3341916"/>
+ <node id="832525526" lat="48.8795229" lon="2.3343420"/>
+ <node id="832525723" lat="48.8763995" lon="2.3350911"/>
+ <node id="832527944" lat="48.8763814" lon="2.3351306"/>
+ <node id="832527958" lat="48.8795796" lon="2.3341885"/>
+ <node id="832528237" lat="48.8795737" lon="2.3341857"/>
+ <node id="832528258" lat="48.8763973" lon="2.3351328"/>
+ <node id="832528373" lat="48.8796101" lon="2.3342208"/>
+ <node id="832528450" lat="48.8794475" lon="2.3343068"/>
+ <node id="832528800" lat="48.8763318" lon="2.3350791"/>
+ <node id="832529759" lat="48.8795793" lon="2.3343685"/>
+ <node id="832530697" lat="48.8794823" lon="2.3341400"/>
+ <node id="832530805" lat="48.8763165" lon="2.3353090"/>
+ <node id="832530807" lat="48.8763834" lon="2.3350881"/>
+ <node id="832530811" lat="48.8764045" lon="2.3353219"/>
+ <node id="832531012" lat="48.8795479" lon="2.3343535"/>
+ <node id="832531199" lat="48.8764203" lon="2.3350947"/>
+ <node id="833344024" lat="48.8686655" lon="2.2984696">
+ <tag k="name" v="Hôtel Élysées Régencia"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="838040718" lat="48.8736939" lon="2.3003734">
+ <tag k="name" v="Hôtel de Vigny"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="840978667" lat="48.8788507" lon="2.3128807">
+ <tag k="addr:housenumber" v="63"/>
+ <tag k="addr:street" v="Rue de Monceau"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="840978808" lat="48.8787605" lon="2.3126925">
+ <tag k="addr:housenumber" v="63b"/>
+ <tag k="addr:street" v="Rue de Monceau"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841000540" lat="48.8758856" lon="2.3101329">
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="addr:street" v="Rue du Docteur Lancereaux"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841045716" lat="48.8752531" lon="2.3107890">
+ <tag k="addr:housenumber" v="158"/>
+ <tag k="addr:street" v="Boulevard Haussmann"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841045850" lat="48.8752382" lon="2.3104060">
+ <tag k="addr:housenumber" v="158b"/>
+ <tag k="addr:street" v="Boulevard Haussmann"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841915376" lat="48.8809885" lon="2.3230366">
+ <tag k="addr:housenumber" v="19"/>
+ <tag k="addr:street" v="Rue de Berne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841953241" lat="48.8792628" lon="2.3127281">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Passage Commun C8"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841988748" lat="48.8728065" lon="2.3157788">
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="addr:street" v="Rue de Penthièvre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841988804" lat="48.8730306" lon="2.3160309">
+ <tag k="addr:housenumber" v="24"/>
+ <tag k="addr:street" v="Rue de Miromesnil"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841988944" lat="48.8729512" lon="2.3161631">
+ <tag k="addr:housenumber" v="14"/>
+ <tag k="addr:street" v="Rue de Penthièvre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841989226" lat="48.8729134" lon="2.3164879">
+ <tag k="addr:housenumber" v="15"/>
+ <tag k="addr:street" v="Rue de Penthièvre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="841989453" lat="48.8727803" lon="2.3159219">
+ <tag k="addr:housenumber" v="25"/>
+ <tag k="addr:street" v="Rue de Miromesnil"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="842075868" lat="48.8733095" lon="2.3181711">
+ <tag k="addr:housenumber" v="20"/>
+ <tag k="addr:street" v="Rue Roquépine"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="842128547" lat="48.8707777" lon="2.3260637">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Rue Vignon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="842128691" lat="48.8706937" lon="2.3258439">
+ <tag k="addr:housenumber" v="28"/>
+ <tag k="addr:street" v="Place de la Madeleine"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="843377831" lat="48.8152732" lon="2.3755124">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="855292250" lat="48.8605898" lon="2.3521542">
+ <tag k="man_made" v="surveillance"/>
+ <tag k="surveillance" v="outdoor"/>
+ </node>
+ <node id="855292280" lat="48.8606298" lon="2.3521759">
+ <tag k="entrance" v="yes"/>
+ </node>
+ <node id="855292291" lat="48.8606671" lon="2.3521963">
+ <tag k="man_made" v="surveillance"/>
+ <tag k="surveillance" v="outdoor"/>
+ </node>
+ <node id="861288578" lat="48.8888774" lon="2.3943052">
+ <tag k="addr:housenumber" v="216"/>
+ <tag k="addr:postcode" v="75019"/>
+ <tag k="addr:street" v="AVENUE JEAN JAURES"/>
+ <tag k="fax" v="+33-01-44841820"/>
+ <tag k="name" v="Holiday Inn : Paris-La Villette"/>
+ <tag k="phone" v="+33-01-44841818"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="861290071" lat="48.8884053" lon="2.3785210">
+ <tag k="name" v="Holiday Inn Express : Hôtel Paris-Canal De La Villette"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="867430381" lat="48.8964510" lon="2.4039028"/>
+ <node id="867434699" lat="48.8964539" lon="2.4038396"/>
+ <node id="867442515" lat="48.8967271" lon="2.4038817"/>
+ <node id="867444990" lat="48.8968513" lon="2.4037649"/>
+ <node id="867454851" lat="48.8966874" lon="2.4034774"/>
+ <node id="867456110" lat="48.8966177" lon="2.4036732"/>
+ <node id="867459633" lat="48.8964437" lon="2.4038970"/>
+ <node id="867462787" lat="48.8966961" lon="2.4034959"/>
+ <node id="867470413" lat="48.8967600" lon="2.4035730"/>
+ <node id="867476552" lat="48.8964523" lon="2.4038425"/>
+ <node id="867477180" lat="48.8967706" lon="2.4039957"/>
+ <node id="867477493" lat="48.8964382" lon="2.4038780"/>
+ <node id="867484162" lat="48.8966442" lon="2.4036441"/>
+ <node id="867489155" lat="48.8967834" lon="2.4035951"/>
+ <node id="867490100" lat="48.8964679" lon="2.4038868"/>
+ <node id="867495273" lat="48.8967829" lon="2.4035855"/>
+ <node id="867495347" lat="48.8967782" lon="2.4035761"/>
+ <node id="867497242" lat="48.8963694" lon="2.4038274"/>
+ <node id="867499713" lat="48.8969477" lon="2.4039677"/>
+ <node id="867499996" lat="48.8967510" lon="2.4035548"/>
+ <node id="867500826" lat="48.8966446" lon="2.4037297"/>
+ <node id="867503736" lat="48.8964846" lon="2.4039037"/>
+ <node id="867506872" lat="48.8968923" lon="2.4040289"/>
+ <node id="867509932" lat="48.8968184" lon="2.4039445"/>
+ <node id="867510294" lat="48.8968444" lon="2.4039299"/>
+ <node id="867511883" lat="48.8968631" lon="2.4037894"/>
+ <node id="867512680" lat="48.8967642" lon="2.4035696"/>
+ <node id="867513650" lat="48.8968228" lon="2.4039529"/>
+ <node id="867514491" lat="48.8964633" lon="2.4038966"/>
+ <node id="867516775" lat="48.8964591" lon="2.4039017"/>
+ <node id="867525384" lat="48.8967128" lon="2.4034768"/>
+ <node id="867526635" lat="48.8963773" lon="2.4038642"/>
+ <node id="867526769" lat="48.8964402" lon="2.4038900"/>
+ <node id="867528239" lat="48.8964683" lon="2.4038759"/>
+ <node id="867530809" lat="48.8967772" lon="2.4036110"/>
+ <node id="867532281" lat="48.8967726" lon="2.4035708"/>
+ <node id="867532520" lat="48.8967392" lon="2.4035307"/>
+ <node id="869479394" lat="48.8457239" lon="2.3448389">
+ <tag k="name" v="Hôtel du Panthéon"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="875693841" lat="48.8360825" lon="2.2524723"/>
+ <node id="875694260" lat="48.8361994" lon="2.2523824"/>
+ <node id="875698397" lat="48.8361327" lon="2.2524345"/>
+ <node id="877959029" lat="48.8832437" lon="2.3593471">
+ <tag k="name" v="Faubourg 216-224"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="877959041" lat="48.8836193" lon="2.3594167">
+ <tag k="name" v="Faubourg 216-224"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotel-faubourg-216-214-paris.federal-hotel.com/"/>
+ </node>
+ <node id="878701583" lat="48.8315784" lon="2.2467258"/>
+ <node id="878702453" lat="48.8315809" lon="2.2467388"/>
+ <node id="878704724" lat="48.8315649" lon="2.2467457"/>
+ <node id="878707650" lat="48.8315624" lon="2.2467327"/>
+ <node id="878708471" lat="48.8315188" lon="2.2468470"/>
+ <node id="878709291" lat="48.8314932" lon="2.2468287"/>
+ <node id="878710474" lat="48.8315523" lon="2.2467514"/>
+ <node id="878711338" lat="48.8315922" lon="2.2467341"/>
+ <node id="878712453" lat="48.8315393" lon="2.2466814"/>
+ <node id="878713801" lat="48.8316065" lon="2.2468097"/>
+ <node id="878714890" lat="48.8314508" lon="2.2467192"/>
+ <node id="879496873" lat="48.8813609" lon="2.3620200">
+ <tag k="name" v="Timhotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="880470095" lat="48.8274283" lon="2.2475817"/>
+ <node id="880470489" lat="48.8273469" lon="2.2474331"/>
+ <node id="880470720" lat="48.8272413" lon="2.2472359"/>
+ <node id="880471002" lat="48.8273018" lon="2.2474979"/>
+ <node id="880471242" lat="48.8273800" lon="2.2474217"/>
+ <node id="880471666" lat="48.8273869" lon="2.2476095"/>
+ <node id="880471968" lat="48.8273824" lon="2.2474837"/>
+ <node id="880472457" lat="48.8273755" lon="2.2472860"/>
+ <node id="880472543" lat="48.8273103" lon="2.2473576"/>
+ <node id="880472979" lat="48.8273219" lon="2.2473241"/>
+ <node id="880473365" lat="48.8273206" lon="2.2475796"/>
+ <node id="880473786" lat="48.8274004" lon="2.2474640"/>
+ <node id="880474653" lat="48.8273557" lon="2.2474726"/>
+ <node id="880475143" lat="48.8273334" lon="2.2471834"/>
+ <node id="880476348" lat="48.8273257" lon="2.2473403"/>
+ <node id="880476434" lat="48.8272705" lon="2.2473603"/>
+ <node id="880476895" lat="48.8273641" lon="2.2474297"/>
+ <node id="880477886" lat="48.8274424" lon="2.2475722"/>
+ <node id="880478711" lat="48.8273530" lon="2.2471882"/>
+ <node id="880478789" lat="48.8273302" lon="2.2474424"/>
+ <node id="880479130" lat="48.8272447" lon="2.2472505"/>
+ <node id="880479523" lat="48.8273048" lon="2.2475109"/>
+ <node id="880479821" lat="48.8273917" lon="2.2474686"/>
+ <node id="880480284" lat="48.8273611" lon="2.2474957"/>
+ <node id="880480553" lat="48.8273771" lon="2.2474606"/>
+ <node id="880480878" lat="48.8273369" lon="2.2471975"/>
+ <node id="880481024" lat="48.8274007" lon="2.2473934"/>
+ <node id="880481079" lat="48.8273223" lon="2.2473507"/>
+ <node id="880481353" lat="48.8273378" lon="2.2473151"/>
+ <node id="880481847" lat="48.8273354" lon="2.2476441"/>
+ <node id="880598163" lat="48.8801030" lon="2.3594914">
+ <tag k="name" v="Hôtel Plaza La Fayette"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="880598197" lat="48.8793848" lon="2.3585618">
+ <tag k="name" v="Hôtel Bristol Nord"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="880598227" lat="48.8795188" lon="2.3583338">
+ <tag k="name" v="Hôtel Montana"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://hotel-montana-lafayette.com"/>
+ </node>
+ <node id="881302453" lat="48.8688321" lon="2.3305499">
+ <tag k="name" v="Park Hyatt Paris -Vendome"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="883277910" lat="48.8788369" lon="2.3643037">
+ <tag k="name" v="Hôtel de France"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="891069113" lat="48.8797564" lon="2.3574795">
+ <tag k="name" v="Marciano"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.marcianohotel-garedunord.com"/>
+ </node>
+ <node id="894150034" lat="48.8789739" lon="2.3632105">
+ <tag k="name" v="Excelsior Hôtel Varlin"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="894232821" lat="48.8834164" lon="2.3250401"/>
+ <node id="894233827" lat="48.8924878" lon="2.3224029"/>
+ <node id="894239835" lat="48.8964768" lon="2.3282995"/>
+ <node id="894239984" lat="48.8833775" lon="2.3251706"/>
+ <node id="894240397" lat="48.8964872" lon="2.3283047"/>
+ <node id="894241345" lat="48.8925344" lon="2.3224411"/>
+ <node id="894242129" lat="48.8925494" lon="2.3224834"/>
+ <node id="894242231" lat="48.8834112" lon="2.3250141"/>
+ <node id="894242500" lat="48.8834344" lon="2.3250297"/>
+ <node id="894242729" lat="48.8925268" lon="2.3224642"/>
+ <node id="894245246" lat="48.8965721" lon="2.3284708"/>
+ <node id="894246371" lat="48.8925817" lon="2.3223918"/>
+ <node id="894247632" lat="48.8834787" lon="2.3251088"/>
+ <node id="894250356" lat="48.8925576" lon="2.3224604"/>
+ <node id="894251269" lat="48.8924800" lon="2.3224256"/>
+ <node id="894252436" lat="48.8924891" lon="2.3223154"/>
+ <node id="894253879" lat="48.8834542" lon="2.3249903"/>
+ <node id="894254654" lat="48.8965889" lon="2.3283567"/>
+ <node id="894258306" lat="48.8924309" lon="2.3224752"/>
+ <node id="894259818" lat="48.8964561" lon="2.3284318"/>
+ <node id="894260125" lat="48.8924563" lon="2.3224060"/>
+ <node id="894264636" lat="48.8833530" lon="2.3250460"/>
+ <node id="894264653" lat="48.8964931" lon="2.3282837"/>
+ <node id="894265004" lat="48.8924643" lon="2.3223836"/>
+ <node id="894265727" lat="48.8834289" lon="2.3250041"/>
+ <node id="894272867" lat="48.8925239" lon="2.3225513"/>
+ <node id="894713136" lat="48.8954877" lon="2.4002250">
+ <tag k="name" v="Hôtel du Canal"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="894713146" lat="48.8951687" lon="2.3996689">
+ <tag k="name" v="Au royal Pantin"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="895570198" lat="48.8831393" lon="2.3659280">
+ <tag k="name" v="Grand Hôtel de l'Univers-Nord"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="895871271" lat="48.8603141" lon="2.3246828">
+ <tag k="fax" v="01.40.62.84.96"/>
+ <tag k="name" v="Musée de la Légion d'Honneur et des Ordres de Chevalerie"/>
+ <tag k="name:ru" v="Музей Почетного легиона и рыцарских орденов"/>
+ <tag k="opening_hours" v="We-Su 13:00-18:00"/>
+ <tag k="phone" v="01.40.62.84.25"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.musee-legiondhonneur.fr/"/>
+ <tag k="wikipedia" v="fr:Musée de la Légion d'honneur"/>
+ </node>
+ <node id="897206048" lat="48.8851472" lon="2.3273760"/>
+ <node id="897206054" lat="48.8853655" lon="2.3273015"/>
+ <node id="897206067" lat="48.8853910" lon="2.3273441"/>
+ <node id="897206158" lat="48.8853606" lon="2.3273016"/>
+ <node id="897206366" lat="48.8852220" lon="2.3272788"/>
+ <node id="897206760" lat="48.8852250" lon="2.3272431"/>
+ <node id="897208518" lat="48.8852799" lon="2.3274889"/>
+ <node id="897208577" lat="48.8851853" lon="2.3274395"/>
+ <node id="897208655" lat="48.8852863" lon="2.3272163"/>
+ <node id="897209289" lat="48.8852986" lon="2.3271894"/>
+ <node id="897209894" lat="48.8852969" lon="2.3272362"/>
+ <node id="897210180" lat="48.8853032" lon="2.3272265"/>
+ <node id="897211079" lat="48.8853567" lon="2.3273044"/>
+ <node id="897211529" lat="48.8853025" lon="2.3274595"/>
+ <node id="897212547" lat="48.8852181" lon="2.3274936"/>
+ <node id="897212895" lat="48.8853692" lon="2.3273077"/>
+ <node id="897213208" lat="48.8852272" lon="2.3272821"/>
+ <node id="897213245" lat="48.8852402" lon="2.3275304"/>
+ <node id="897215081" lat="48.8852989" lon="2.3271974"/>
+ <node id="897215398" lat="48.8852975" lon="2.3272021"/>
+ <node id="897216511" lat="48.8852857" lon="2.3271678"/>
+ <node id="897217633" lat="48.8852394" lon="2.3272667"/>
+ <node id="897217882" lat="48.8852437" lon="2.3275362"/>
+ <node id="897218493" lat="48.8853321" lon="2.3272931"/>
+ <node id="897218548" lat="48.8853464" lon="2.3273179"/>
+ <node id="897219557" lat="48.8853373" lon="2.3272848"/>
+ <node id="897219619" lat="48.8852239" lon="2.3272767"/>
+ <node id="900669295" lat="48.8318013" lon="2.3866661">
+ <tag k="name" v="Hôtel Pullman Paris Bercy"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="909443614" lat="48.8795548" lon="2.3363831">
+ <tag k="name" v="Hôtel George Opera"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="910390736" lat="48.8559492" lon="2.3460263">
+ <tag k="historic" v="castle"/>
+ <tag k="name" v="Conciergerie"/>
+ <tag k="operator" v="Centre des monuments nationaux"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://conciergerie.monuments-nationaux.fr/"/>
+ <tag k="wikipedia" v="fr:Conciergerie"/>
+ </node>
+ <node id="912442174" lat="48.8809651" lon="2.3627422">
+ <tag k="name" v="Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="913551209" lat="48.8292303" lon="2.3775477">
+ <tag k="name" v="Musée National du Sport"/>
+ <tag k="phone" v="01.45.83.15.80"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedusport.fr/"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="913551542" lat="48.8278532" lon="2.3796372">
+ <tag k="name" v="Home Business Residence"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="914052499" lat="48.8606389" lon="2.2987952">
+ <tag k="addr:housenumber" v="204"/>
+ <tag k="addr:street" v="Rue de l'Université"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="914052833" lat="48.8605969" lon="2.2985525">
+ <tag k="addr:housenumber" v="210"/>
+ <tag k="addr:street" v="Rue de l'Université"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="914052924" lat="48.8604594" lon="2.2980843">
+ <tag k="addr:housenumber" v="212"/>
+ <tag k="addr:street" v="Rue de l'Université"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="914053025" lat="48.8607526" lon="2.2994520">
+ <tag k="addr:housenumber" v="198"/>
+ <tag k="addr:street" v="Rue de l'Université"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="914219257" lat="48.8876880" lon="2.3406769"/>
+ <node id="914220376" lat="48.8880633" lon="2.3407759"/>
+ <node id="914221259" lat="48.8878294" lon="2.3407173"/>
+ <node id="914222297" lat="48.8877469" lon="2.3404029"/>
+ <node id="914224886" lat="48.8880364" lon="2.3404837"/>
+ <node id="914753298" lat="48.8884427" lon="2.3405795"/>
+ <node id="914764541" lat="48.8861908" lon="2.3385040"/>
+ <node id="914768581" lat="48.8861490" lon="2.3384505"/>
+ <node id="914783309" lat="48.8862387" lon="2.3387539"/>
+ <node id="914789374" lat="48.8860986" lon="2.3386212"/>
+ <node id="914792680" lat="48.8862557" lon="2.3385870"/>
+ <node id="914794899" lat="48.8861790" lon="2.3386973"/>
+ <node id="917991979" lat="48.8495277" lon="2.3799649"/>
+ <node id="917992064" lat="48.8496013" lon="2.3796887"/>
+ <node id="917992524" lat="48.8463864" lon="2.3768704"/>
+ <node id="917992889" lat="48.8495496" lon="2.3796795"/>
+ <node id="917993354" lat="48.8495195" lon="2.3800740"/>
+ <node id="917993493" lat="48.8463592" lon="2.3768607"/>
+ <node id="917993514" lat="48.8496331" lon="2.3797270"/>
+ <node id="917993675" lat="48.8464856" lon="2.3766655"/>
+ <node id="917993954" lat="48.8463153" lon="2.3764707"/>
+ <node id="917995597" lat="48.8495887" lon="2.3796736"/>
+ <node id="917995717" lat="48.8495759" lon="2.3796581"/>
+ <node id="917996850" lat="48.8464825" lon="2.3766246"/>
+ <node id="917996885" lat="48.8463550" lon="2.3764378"/>
+ <node id="917997086" lat="48.8495951" lon="2.3800923"/>
+ <node id="918070957" lat="48.8511788" lon="2.3754966"/>
+ <node id="918071454" lat="48.8511968" lon="2.3754333"/>
+ <node id="918083058" lat="48.8512582" lon="2.3754762"/>
+ <node id="918083696" lat="48.8513390" lon="2.3755327"/>
+ <node id="918085561" lat="48.8513234" lon="2.3755974"/>
+ <node id="918149139" lat="48.8398236" lon="2.3814962"/>
+ <node id="918149356" lat="48.8398197" lon="2.3814970"/>
+ <node id="918149505" lat="48.8398994" lon="2.3812691"/>
+ <node id="918149516" lat="48.8398414" lon="2.3817623"/>
+ <node id="918149707" lat="48.8399064" lon="2.3812871"/>
+ <node id="918150162" lat="48.8398359" lon="2.3813787"/>
+ <node id="918150236" lat="48.8399679" lon="2.3814508"/>
+ <node id="918150653" lat="48.8398462" lon="2.3813824"/>
+ <node id="918150726" lat="48.8397809" lon="2.3816057"/>
+ <node id="918150853" lat="48.8398294" lon="2.3814949"/>
+ <node id="918151063" lat="48.8398267" lon="2.3814923"/>
+ <node id="918151064" lat="48.8398671" lon="2.3814008"/>
+ <node id="918151270" lat="48.8397136" lon="2.3814323"/>
+ <node id="918151566" lat="48.8398258" lon="2.3814938"/>
+ <node id="918151663" lat="48.8398068" lon="2.3814781"/>
+ <node id="918152182" lat="48.8397874" lon="2.3813683"/>
+ <node id="918152215" lat="48.8398205" lon="2.3813387"/>
+ <node id="918152451" lat="48.8397830" lon="2.3813722"/>
+ <node id="918152979" lat="48.8398182" lon="2.3814499"/>
+ <node id="918153459" lat="48.8398127" lon="2.3814725"/>
+ <node id="918358637" lat="48.8488897" lon="2.3684401">
+ <tag k="name" v="Hôtel des Trois Gares"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="918447613" lat="48.8448068" lon="2.3524819">
+ <tag k="name" v="Hôtel Acte V"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="919127275" lat="48.8369622" lon="2.3822591"/>
+ <node id="919127303" lat="48.8370893" lon="2.3822805"/>
+ <node id="919127497" lat="48.8368219" lon="2.3823158"/>
+ <node id="919127499" lat="48.8370830" lon="2.3822929"/>
+ <node id="919127514" lat="48.8371492" lon="2.3822754"/>
+ <node id="919127624" lat="48.8371248" lon="2.3822886"/>
+ <node id="919127668" lat="48.8371954" lon="2.3824414"/>
+ <node id="919127720" lat="48.8369764" lon="2.3830339"/>
+ <node id="919128777" lat="48.8371984" lon="2.3823652"/>
+ <node id="919128837" lat="48.8371012" lon="2.3822661"/>
+ <node id="919128922" lat="48.8368565" lon="2.3822945"/>
+ <node id="919128926" lat="48.8369195" lon="2.3822733"/>
+ <node id="919129113" lat="48.8371950" lon="2.3823696"/>
+ <node id="919129132" lat="48.8372097" lon="2.3823683"/>
+ <node id="919129389" lat="48.8369432" lon="2.3822652"/>
+ <node id="919129449" lat="48.8372216" lon="2.3824076"/>
+ <node id="919129569" lat="48.8371996" lon="2.3823637"/>
+ <node id="919129655" lat="48.8369911" lon="2.3822604"/>
+ <node id="919129750" lat="48.8369325" lon="2.3822718"/>
+ <node id="919129751" lat="48.8368936" lon="2.3822793"/>
+ <node id="919129930" lat="48.8370063" lon="2.3822689"/>
+ <node id="919130226" lat="48.8371433" lon="2.3822647"/>
+ <node id="919130252" lat="48.8373244" lon="2.3825946"/>
+ <node id="919130545" lat="48.8370125" lon="2.3822749"/>
+ <node id="919130842" lat="48.8371525" lon="2.3822900"/>
+ <node id="919130958" lat="48.8369771" lon="2.3822583"/>
+ <node id="919130963" lat="48.8366795" lon="2.3824964"/>
+ <node id="919130967" lat="48.8371085" lon="2.3822598"/>
+ <node id="920168162" lat="48.8352682" lon="2.3525009"/>
+ <node id="920168189" lat="48.8348055" lon="2.3511162"/>
+ <node id="920168380" lat="48.8352543" lon="2.3524608"/>
+ <node id="920168765" lat="48.8341458" lon="2.3516696"/>
+ <node id="920169162" lat="48.8341626" lon="2.3516610"/>
+ <node id="920169251" lat="48.8351222" lon="2.3520846"/>
+ <node id="920169829" lat="48.8348626" lon="2.3514958"/>
+ <node id="920170268" lat="48.8338801" lon="2.3517577"/>
+ <node id="920170964" lat="48.8345492" lon="2.3513511"/>
+ <node id="920171345" lat="48.8351741" lon="2.3519914"/>
+ <node id="920171614" lat="48.8345170" lon="2.3514033"/>
+ <node id="920171851" lat="48.8353154" lon="2.3518768"/>
+ <node id="920172018" lat="48.8345200" lon="2.3513869"/>
+ <node id="920172388" lat="48.8351000" lon="2.3520509"/>
+ <node id="920172587" lat="48.8348499" lon="2.3512133"/>
+ <node id="920173850" lat="48.8351287" lon="2.3520280"/>
+ <node id="920174136" lat="48.8345193" lon="2.3527871"/>
+ <node id="920175289" lat="48.8351022" lon="2.3520499"/>
+ <node id="920176087" lat="48.8345258" lon="2.3513726"/>
+ <node id="920176224" lat="48.8339006" lon="2.3517532"/>
+ <node id="920176252" lat="48.8344967" lon="2.3527138"/>
+ <node id="920176255" lat="48.8342860" lon="2.3522916"/>
+ <node id="920176469" lat="48.8348663" lon="2.3513166"/>
+ <node id="920176470" lat="48.8352405" lon="2.3524214"/>
+ <node id="920176625" lat="48.8336501" lon="2.3517749"/>
+ <node id="920176737" lat="48.8342742" lon="2.3522819"/>
+ <node id="920177086" lat="48.8348278" lon="2.3512370"/>
+ <node id="920177247" lat="48.8336025" lon="2.3517702"/>
+ <node id="920177364" lat="48.8351856" lon="2.3519824"/>
+ <node id="920177666" lat="48.8335849" lon="2.3518724"/>
+ <node id="920177959" lat="48.8337575" lon="2.3517839"/>
+ <node id="920177985" lat="48.8337438" lon="2.3519439"/>
+ <node id="920178162" lat="48.8336639" lon="2.3519080"/>
+ <node id="920178442" lat="48.8353017" lon="2.3525956"/>
+ <node id="920178563" lat="48.8352803" lon="2.3517765"/>
+ <node id="920178658" lat="48.8344560" lon="2.3525810"/>
+ <node id="920179187" lat="48.8336051" lon="2.3518816"/>
+ <node id="920179727" lat="48.8352175" lon="2.3523560"/>
+ <node id="920179866" lat="48.8344264" lon="2.3525143"/>
+ <node id="920180668" lat="48.8346051" lon="2.3530374"/>
+ <node id="920181144" lat="48.8337729" lon="2.3517807"/>
+ <node id="920181200" lat="48.8352079" lon="2.3526608"/>
+ <node id="920181361" lat="48.8345793" lon="2.3513590"/>
+ <node id="920181665" lat="48.8351225" lon="2.3520329"/>
+ <node id="920182186" lat="48.8352256" lon="2.3516200"/>
+ <node id="920182194" lat="48.8345296" lon="2.3513664"/>
+ <node id="920182198" lat="48.8352636" lon="2.3519200"/>
+ <node id="920182703" lat="48.8351589" lon="2.3521891"/>
+ <node id="920182765" lat="48.8351311" lon="2.3521100"/>
+ <node id="920182809" lat="48.8352432" lon="2.3519353"/>
+ <node id="920183010" lat="48.8352553" lon="2.3524638"/>
+ <node id="920183086" lat="48.8345387" lon="2.3513567"/>
+ <node id="920183104" lat="48.8340056" lon="2.3520614"/>
+ <node id="920183990" lat="48.8351837" lon="2.3516563"/>
+ <node id="920184159" lat="48.8352139" lon="2.3523456"/>
+ <node id="920184398" lat="48.8345711" lon="2.3513531"/>
+ <node id="920184493" lat="48.8349071" lon="2.3514977"/>
+ <node id="920184586" lat="48.8351773" lon="2.3522415"/>
+ <node id="920184844" lat="48.8351818" lon="2.3516531"/>
+ <node id="920184970" lat="48.8338911" lon="2.3520100"/>
+ <node id="920185475" lat="48.8345603" lon="2.3513498"/>
+ <node id="920190540" lat="48.8336197" lon="2.3488174"/>
+ <node id="920190550" lat="48.8336271" lon="2.3487767"/>
+ <node id="920190576" lat="48.8333632" lon="2.3489341"/>
+ <node id="921238848" lat="48.8647693" lon="2.3649321">
+ <tag k="name" v="Hôtel Américain"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.paris-hotel-americain.com/"/>
+ </node>
+ <node id="921243394" lat="48.8632732" lon="2.3526751">
+ <tag k="name" v="Hôtel du Séjour"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hoteldusejour.com/"/>
+ </node>
+ <node id="921510550" lat="48.8376084" lon="2.3727980"/>
+ <node id="921523793" lat="48.8374851" lon="2.3726678"/>
+ <node id="921526827" lat="48.8374931" lon="2.3729410"/>
+ <node id="921526845" lat="48.8375298" lon="2.3728954"/>
+ <node id="921528741" lat="48.8374158" lon="2.3730368"/>
+ <node id="921532039" lat="48.8375415" lon="2.3726743"/>
+ <node id="921535155" lat="48.8375455" lon="2.3728759"/>
+ <node id="921538138" lat="48.8373239" lon="2.3728686"/>
+ <node id="921545381" lat="48.8374855" lon="2.3729503"/>
+ <node id="924399889" lat="48.8813801" lon="2.3333421"/>
+ <node id="924399917" lat="48.8814950" lon="2.3335234"/>
+ <node id="924399994" lat="48.8811463" lon="2.3333866"/>
+ <node id="924400028" lat="48.8814577" lon="2.3336923"/>
+ <node id="924400181" lat="48.8827372" lon="2.3346464"/>
+ <node id="924400573" lat="48.8813101" lon="2.3332926"/>
+ <node id="924400596" lat="48.8810962" lon="2.3334248"/>
+ <node id="924401143" lat="48.8828395" lon="2.3346974"/>
+ <node id="924401351" lat="48.8812461" lon="2.3332591"/>
+ <node id="924402023" lat="48.8827917" lon="2.3343890"/>
+ <node id="924402130" lat="48.8811648" lon="2.3336402"/>
+ <node id="924402143" lat="48.8812103" lon="2.3334204"/>
+ <node id="924402380" lat="48.8813826" lon="2.3333288"/>
+ <node id="924402385" lat="48.8808989" lon="2.3332555"/>
+ <node id="924402417" lat="48.8828927" lon="2.3344421"/>
+ <node id="924402621" lat="48.8814411" lon="2.3337677"/>
+ <node id="924402627" lat="48.8812390" lon="2.3336788"/>
+ <node id="924402707" lat="48.8815200" lon="2.3334102"/>
+ <node id="924403114" lat="48.8811998" lon="2.3334794"/>
+ <node id="924403151" lat="48.8828652" lon="2.3345748"/>
+ <node id="924403315" lat="48.8813987" lon="2.3337624"/>
+ <node id="924403514" lat="48.8813109" lon="2.3332895"/>
+ <node id="924404011" lat="48.8808860" lon="2.3333143"/>
+ <node id="924404053" lat="48.8814379" lon="2.3337824"/>
+ <node id="924405249" lat="48.8815091" lon="2.3334590"/>
+ <node id="924405303" lat="48.8828752" lon="2.3345256"/>
+ <node id="924406509" lat="48.8815020" lon="2.3334911"/>
+ <node id="924406532" lat="48.8809804" lon="2.3332984"/>
+ <node id="925427080" lat="48.8645510" lon="2.2967926"/>
+ <node id="925427082" lat="48.8639051" lon="2.2979272"/>
+ <node id="925427090" lat="48.8643316" lon="2.2968329"/>
+ <node id="925427092" lat="48.8645343" lon="2.2972489"/>
+ <node id="925427107" lat="48.8644278" lon="2.2972872"/>
+ <node id="925427109" lat="48.8646579" lon="2.2972674"/>
+ <node id="925427110" lat="48.8636602" lon="2.2967823"/>
+ <node id="925427118" lat="48.8642595" lon="2.2973874"/>
+ <node id="925427123" lat="48.8638027" lon="2.2969190"/>
+ <node id="925427129" lat="48.8644575" lon="2.2968322"/>
+ <node id="925427130" lat="48.8639154" lon="2.2977862"/>
+ <node id="925427135" lat="48.8641998" lon="2.2968814"/>
+ <node id="925427144" lat="48.8645960" lon="2.2967572"/>
+ <node id="925427146" lat="48.8640138" lon="2.2982922"/>
+ <node id="925427148" lat="48.8643754" lon="2.2968106"/>
+ <node id="925427157" lat="48.8644754" lon="2.2972782"/>
+ <node id="925427158" lat="48.8646153" lon="2.2966788"/>
+ <node id="925427159" lat="48.8647083" lon="2.2980283"/>
+ <node id="925427160" lat="48.8655363" lon="2.2994027"/>
+ <node id="925427163" lat="48.8643968" lon="2.2973182"/>
+ <node id="925427170" lat="48.8646181" lon="2.2971820"/>
+ <node id="925427172" lat="48.8637127" lon="2.2968732"/>
+ <node id="925427174" lat="48.8642902" lon="2.2973549"/>
+ <node id="925427183" lat="48.8641307" lon="2.2967736"/>
+ <node id="925427187" lat="48.8644071" lon="2.2967785"/>
+ <node id="925427193" lat="48.8642590" lon="2.2968515"/>
+ <node id="925427200" lat="48.8646053" lon="2.2967152"/>
+ <node id="925427201" lat="48.8640843" lon="2.2984486"/>
+ <node id="925427203" lat="48.8643374" lon="2.2968126"/>
+ <node id="925427210" lat="48.8644371" lon="2.2972813"/>
+ <node id="925427212" lat="48.8646725" lon="2.2972837"/>
+ <node id="925427213" lat="48.8655730" lon="2.2993887"/>
+ <node id="925427222" lat="48.8643372" lon="2.2973469"/>
+ <node id="925427224" lat="48.8646045" lon="2.2971335"/>
+ <node id="925427227" lat="48.8636778" lon="2.2968229"/>
+ <node id="925427237" lat="48.8642027" lon="2.2968958"/>
+ <node id="925427243" lat="48.8644806" lon="2.2968179"/>
+ <node id="925427245" lat="48.8639061" lon="2.2978319"/>
+ <node id="925427252" lat="48.8642977" lon="2.2968494"/>
+ <node id="925427259" lat="48.8642118" lon="2.2984458"/>
+ <node id="925427263" lat="48.8643978" lon="2.2967833"/>
+ <node id="925427264" lat="48.8655567" lon="2.2995530"/>
+ <node id="925427269" lat="48.8644630" lon="2.2972691"/>
+ <node id="925427272" lat="48.8645744" lon="2.2959152"/>
+ <node id="925427279" lat="48.8642989" lon="2.2973501"/>
+ <node id="925427291" lat="48.8639505" lon="2.2977070"/>
+ <node id="925427300" lat="48.8645876" lon="2.2968081"/>
+ <node id="925427304" lat="48.8639084" lon="2.2979504"/>
+ <node id="925427308" lat="48.8643402" lon="2.2968281"/>
+ <node id="925427313" lat="48.8645090" lon="2.2972617"/>
+ <node id="925427315" lat="48.8641049" lon="2.2984659"/>
+ <node id="925427323" lat="48.8655071" lon="2.2991861"/>
+ <node id="925427324" lat="48.8644304" lon="2.2973016"/>
+ <node id="925427325" lat="48.8646526" lon="2.2972612"/>
+ <node id="925427326" lat="48.8636684" lon="2.2968029"/>
+ <node id="925427328" lat="48.8643242" lon="2.2973378"/>
+ <node id="925427337" lat="48.8638188" lon="2.2969188"/>
+ <node id="925427341" lat="48.8639100" lon="2.2978085"/>
+ <node id="925427348" lat="48.8642248" lon="2.2968691"/>
+ <node id="925427352" lat="48.8640450" lon="2.2984352"/>
+ <node id="925427355" lat="48.8643031" lon="2.2968302"/>
+ <node id="925427361" lat="48.8644719" lon="2.2972648"/>
+ <node id="925427366" lat="48.8647048" lon="2.2979615"/>
+ <node id="925427370" lat="48.8655104" lon="2.2992094"/>
+ <node id="925427376" lat="48.8643718" lon="2.2973304"/>
+ <node id="925427380" lat="48.8646116" lon="2.2971862"/>
+ <node id="925427382" lat="48.8636494" lon="2.2967436"/>
+ <node id="925427389" lat="48.8642931" lon="2.2973703"/>
+ <node id="925427400" lat="48.8641578" lon="2.2969027"/>
+ <node id="925427405" lat="48.8644333" lon="2.2967657"/>
+ <node id="925427406" lat="48.8639257" lon="2.2977555"/>
+ <node id="925427414" lat="48.8642625" lon="2.2968670"/>
+ <node id="925427418" lat="48.8645807" lon="2.2967927"/>
+ <node id="925427421" lat="48.8643630" lon="2.2968004"/>
+ <node id="925427428" lat="48.8644972" lon="2.2972520"/>
+ <node id="925427430" lat="48.8645489" lon="2.2971128"/>
+ <node id="925427433" lat="48.8646402" lon="2.2966438"/>
+ <node id="925427435" lat="48.8656580" lon="2.2995221"/>
+ <node id="925427442" lat="48.8643340" lon="2.2973335"/>
+ <node id="925427445" lat="48.8645709" lon="2.2971594"/>
+ <node id="925427446" lat="48.8636884" lon="2.2968414"/>
+ <node id="925427448" lat="48.8640025" lon="2.2976535"/>
+ <node id="925427459" lat="48.8638503" lon="2.2969111"/>
+ <node id="925427461" lat="48.8644924" lon="2.2968726"/>
+ <node id="925427466" lat="48.8639034" lon="2.2978552"/>
+ <node id="925427469" lat="48.8643066" lon="2.2968452"/>
+ <node id="925427474" lat="48.8645453" lon="2.2971147"/>
+ <node id="925427475" lat="48.8646045" lon="2.2967286"/>
+ <node id="925427476" lat="48.8640623" lon="2.2984386"/>
+ <node id="925427482" lat="48.8644010" lon="2.2967988"/>
+ <node id="925427486" lat="48.8644658" lon="2.2972830"/>
+ <node id="925427487" lat="48.8644976" lon="2.2968702"/>
+ <node id="925427488" lat="48.8635768" lon="2.2964029"/>
+ <node id="925427498" lat="48.8643596" lon="2.2973202"/>
+ <node id="925427500" lat="48.8646024" lon="2.2971558"/>
+ <node id="925427502" lat="48.8637556" lon="2.2969057"/>
+ <node id="925427510" lat="48.8639398" lon="2.2977248"/>
+ <node id="925427513" lat="48.8641902" lon="2.2968862"/>
+ <node id="925427517" lat="48.8645897" lon="2.2967972"/>
+ <node id="925427526" lat="48.8642683" lon="2.2968473"/>
+ <node id="925427528" lat="48.8645062" lon="2.2972478"/>
+ <node id="925427535" lat="48.8641142" lon="2.2984772"/>
+ <node id="925427539" lat="48.8655034" lon="2.2990800"/>
+ <node id="925427542" lat="48.8644060" lon="2.2973123"/>
+ <node id="925427548" lat="48.8646282" lon="2.2966677"/>
+ <node id="925427549" lat="48.8646007" lon="2.2959055"/>
+ <node id="925427555" lat="48.8643273" lon="2.2973528"/>
+ <node id="925427564" lat="48.8639748" lon="2.2976761"/>
+ <node id="925427568" lat="48.8642276" lon="2.2968846"/>
+ <node id="925427580" lat="48.8645421" lon="2.2968496"/>
+ <node id="925427589" lat="48.8643284" lon="2.2968174"/>
+ <node id="925427592" lat="48.8645219" lon="2.2971885"/>
+ <node id="925427593" lat="48.8646199" lon="2.2966720"/>
+ <node id="925427594" lat="48.8647073" lon="2.2979610"/>
+ <node id="925427603" lat="48.8643689" lon="2.2973165"/>
+ <node id="925427612" lat="48.8637866" lon="2.2969167"/>
+ <node id="925427619" lat="48.8644486" lon="2.2968370"/>
+ <node id="925427623" lat="48.8642718" lon="2.2968627"/>
+ <node id="925427631" lat="48.8645901" lon="2.2967542"/>
+ <node id="925427632" lat="48.8639848" lon="2.2983061"/>
+ <node id="925427634" lat="48.8643665" lon="2.2968159"/>
+ <node id="925427637" lat="48.8644998" lon="2.2972665"/>
+ <node id="925427639" lat="48.8646384" lon="2.2966137"/>
+ <node id="925427645" lat="48.8656758" lon="2.2994908"/>
+ <node id="925427651" lat="48.8643933" lon="2.2973037"/>
+ <node id="925427662" lat="48.8639024" lon="2.2978796">
+ <tag k="addr:housenumber" v="16"/>
+ <tag k="addr:street" v="Avenue de New-York"/>
+ </node>
+ <node id="925427670" lat="48.8642346" lon="2.2968643"/>
+ <node id="925427674" lat="48.8645561" lon="2.2971704"/>
+ <node id="925427679" lat="48.8646035" lon="2.2967250"/>
+ <node id="925427685" lat="48.8644103" lon="2.2967940"/>
+ <node id="925427690" lat="48.8644405" lon="2.2972953"/>
+ <node id="925427693" lat="48.8655807" lon="2.2992177"/>
+ <node id="925427698" lat="48.8643622" lon="2.2973357"/>
+ <node id="925427700" lat="48.8646079" lon="2.2971438"/>
+ <node id="925427701" lat="48.8637708" lon="2.2969122"/>
+ <node id="925427704" lat="48.8642869" lon="2.2975113"/>
+ <node id="925427714" lat="48.8641934" lon="2.2969016"/>
+ <node id="925427721" lat="48.8644575" lon="2.2968296"/>
+ <node id="925427726" lat="48.8642942" lon="2.2968350"/>
+ <node id="925427729" lat="48.8645570" lon="2.2971088"/>
+ <node id="925427730" lat="48.8641976" lon="2.2984061"/>
+ <node id="925427737" lat="48.8643725" lon="2.2967956"/>
+ <node id="925427738" lat="48.8656922" lon="2.2990986"/>
+ <node id="925427740" lat="48.8644031" lon="2.2972989"/>
+ <node id="925427742" lat="48.8646395" lon="2.2972417"/>
+ <node id="925427743" lat="48.8645748" lon="2.2959183"/>
+ <node id="925427748" lat="48.8643024" lon="2.2973656"/>
+ <node id="925427755" lat="48.8637342" lon="2.2968926"/>
+ <node id="925427765" lat="48.8642369" lon="2.2968798"/>
+ <node id="925525711" lat="48.8655356" lon="2.2969077"/>
+ <node id="925525714" lat="48.8659465" lon="2.2964996"/>
+ <node id="925525719" lat="48.8657855" lon="2.2970434"/>
+ <node id="925525726" lat="48.8657851" lon="2.2969813"/>
+ <node id="925525733" lat="48.8658174" lon="2.2968980"/>
+ <node id="925525738" lat="48.8655148" lon="2.2964782"/>
+ <node id="925525739" lat="48.8659293" lon="2.2967219"/>
+ <node id="925525746" lat="48.8657118" lon="2.2969207"/>
+ <node id="925525749" lat="48.8658936" lon="2.2964962"/>
+ <node id="925525755" lat="48.8657244" lon="2.2961972"/>
+ <node id="925525763" lat="48.8656329" lon="2.2964647"/>
+ <node id="925525769" lat="48.8658851" lon="2.2968303"/>
+ <node id="925525776" lat="48.8655340" lon="2.2968906"/>
+ <node id="925525778" lat="48.8657339" lon="2.2963426"/>
+ <node id="925525779" lat="48.8659779" lon="2.2966710"/>
+ <node id="925525785" lat="48.8657301" lon="2.2971819"/>
+ <node id="925525788" lat="48.8657615" lon="2.2962956"/>
+ <node id="925525791" lat="48.8659149" lon="2.2965503"/>
+ <node id="925525799" lat="48.8657907" lon="2.2970335"/>
+ <node id="925525808" lat="48.8656752" lon="2.2962052"/>
+ <node id="925525828" lat="48.8657783" lon="2.2969741"/>
+ <node id="925525846" lat="48.8657841" lon="2.2964009"/>
+ <node id="925525848" lat="48.8659237" lon="2.2967225"/>
+ <node id="925525863" lat="48.8654470" lon="2.2968892"/>
+ <node id="925525869" lat="48.8657512" lon="2.2963325"/>
+ <node id="925525871" lat="48.8659805" lon="2.2966037"/>
+ <node id="925525890" lat="48.8657532" lon="2.2962672"/>
+ <node id="925525904" lat="48.8657197" lon="2.2961409"/>
+ <node id="925525918" lat="48.8657600" lon="2.2969138"/>
+ <node id="925525935" lat="48.8658306" lon="2.2964215"/>
+ <node id="925525937" lat="48.8659047" lon="2.2967912"/>
+ <node id="925525948" lat="48.8656534" lon="2.2968936"/>
+ <node id="925525952" lat="48.8657612" lon="2.2963039"/>
+ <node id="925525954" lat="48.8659477" lon="2.2965462"/>
+ <node id="925525967" lat="48.8657668" lon="2.2971219"/>
+ <node id="925525994" lat="48.8658325" lon="2.2968885"/>
+ <node id="925526009" lat="48.8654291" lon="2.2964913"/>
+ <node id="925526011" lat="48.8657519" lon="2.2963983"/>
+ <node id="925526018" lat="48.8659293" lon="2.2967194"/>
+ <node id="925526033" lat="48.8657129" lon="2.2969637"/>
+ <node id="925526037" lat="48.8659737" lon="2.2965898"/>
+ <node id="925526049" lat="48.8657785" lon="2.2970508"/>
+ <node id="925526053" lat="48.8657222" lon="2.2961978"/>
+ <node id="925526066" lat="48.8657905" lon="2.2969911"/>
+ <node id="925526068" lat="48.8656327" lon="2.2964460"/>
+ <node id="925526084" lat="48.8658449" lon="2.2964327"/>
+ <node id="925526085" lat="48.8658955" lon="2.2968115"/>
+ <node id="925526109" lat="48.8659831" lon="2.2966705"/>
+ <node id="925526132" lat="48.8657703" lon="2.2971772"/>
+ <node id="925526151" lat="48.8657922" lon="2.2970278"/>
+ <node id="925526157" lat="48.8657280" lon="2.2962381"/>
+ <node id="925526172" lat="48.8657743" lon="2.2969721"/>
+ <node id="925526190" lat="48.8658605" lon="2.2968632"/>
+ <node id="925526209" lat="48.8654520" lon="2.2968881"/>
+ <node id="925526213" lat="48.8659805" lon="2.2965902"/>
+ <node id="925526231" lat="48.8657217" lon="2.2971225"/>
+ <node id="925526257" lat="48.8656786" lon="2.2961466"/>
+ <node id="925526288" lat="48.8659126" lon="2.2967693"/>
+ <node id="925526301" lat="48.8656530" lon="2.2968755"/>
+ <node id="925526312" lat="48.8657438" lon="2.2963394"/>
+ <node id="925526315" lat="48.8659768" lon="2.2966560"/>
+ <node id="925526332" lat="48.8657693" lon="2.2971203"/>
+ <node id="925526336" lat="48.8657296" lon="2.2962536"/>
+ <node id="925526357" lat="48.8656863" lon="2.2964075"/>
+ <node id="925526362" lat="48.8658470" lon="2.2968769"/>
+ <node id="925526385" lat="48.8657358" lon="2.2964006"/>
+ <node id="925526386" lat="48.8659559" lon="2.2967154"/>
+ <node id="925526407" lat="48.8657192" lon="2.2970801"/>
+ <node id="925526415" lat="48.8657588" lon="2.2963164"/>
+ <node id="925526418" lat="48.8659734" lon="2.2965525"/>
+ <node id="925526443" lat="48.8657427" lon="2.2962565"/>
+ <node id="925526463" lat="48.8655153" lon="2.2964601"/>
+ <node id="925526470" lat="48.8658020" lon="2.2969055"/>
+ <node id="925526486" lat="48.8659827" lon="2.2966560"/>
+ <node id="925526500" lat="48.8657145" lon="2.2969191"/>
+ <node id="925526506" lat="48.8657602" lon="2.2962842"/>
+ <node id="925526510" lat="48.8659027" lon="2.2965163"/>
+ <node id="925526519" lat="48.8657264" lon="2.2962366"/>
+ <node id="925526533" lat="48.8656938" lon="2.2964571"/>
+ <node id="925526541" lat="48.8658711" lon="2.2964608"/>
+ <node id="925526546" lat="48.8654530" lon="2.2968974"/>
+ <node id="925526548" lat="48.8657349" lon="2.2963597"/>
+ <node id="925526549" lat="48.8659821" lon="2.2967041"/>
+ <node id="925526556" lat="48.8657266" lon="2.2971229"/>
+ <node id="925526564" lat="48.8656833" lon="2.2962056"/>
+ <node id="925526572" lat="48.8657860" lon="2.2969109"/>
+ <node id="925526585" lat="48.8657999" lon="2.2964054"/>
+ <node id="925526587" lat="48.8659189" lon="2.2967469"/>
+ <node id="925526596" lat="48.8657130" lon="2.2968684"/>
+ <node id="925526598" lat="48.8659747" lon="2.2966038"/>
+ <node id="925526603" lat="48.8657667" lon="2.2970551"/>
+ <node id="925526610" lat="48.8657940" lon="2.2970091"/>
+ <node id="925526613" lat="48.8656898" lon="2.2964079"/>
+ <node id="925526619" lat="48.8657619" lon="2.2969707"/>
+ <node id="925526626" lat="48.8657328" lon="2.2963602"/>
+ <node id="925526627" lat="48.8659584" lon="2.2967697"/>
+ <node id="926929568" lat="48.8713522" lon="2.2936933">
+ <tag k="name" v="Hôtel Raphael"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="929095856" lat="48.8401677" lon="2.3307424"/>
+ <node id="929095944" lat="48.8401053" lon="2.3307380"/>
+ <node id="929096056" lat="48.8375086" lon="2.3319805"/>
+ <node id="929096547" lat="48.8371293" lon="2.3318826"/>
+ <node id="929096880" lat="48.8401768" lon="2.3307975"/>
+ <node id="929097730" lat="48.8400620" lon="2.3307021"/>
+ <node id="929097937" lat="48.8371649" lon="2.3321100"/>
+ <node id="929099107" lat="48.8400263" lon="2.3305979"/>
+ <node id="929099140" lat="48.8374715" lon="2.3317537"/>
+ <node id="929099320" lat="48.8401701" lon="2.3307565"/>
+ <node id="929100477" lat="48.8400390" lon="2.3306831"/>
+ <node id="929100616" lat="48.8401363" lon="2.3305560"/>
+ <node id="929179029" lat="48.8313428" lon="2.3406769"/>
+ <node id="929179851" lat="48.8318085" lon="2.3398492"/>
+ <node id="929180851" lat="48.8318671" lon="2.3393348"/>
+ <node id="929180949" lat="48.8315687" lon="2.3406815"/>
+ <node id="929181433" lat="48.8315568" lon="2.3406880"/>
+ <node id="929181479" lat="48.8315151" lon="2.3407203"/>
+ <node id="929182088" lat="48.8318653" lon="2.3396451"/>
+ <node id="929182564" lat="48.8315800" lon="2.3406712"/>
+ <node id="929183875" lat="48.8313698" lon="2.3393148"/>
+ <node id="929184515" lat="48.8319179" lon="2.3394559"/>
+ <node id="929241287" lat="48.8338710" lon="2.3286678"/>
+ <node id="929241620" lat="48.8338255" lon="2.3287951"/>
+ <node id="929241950" lat="48.8339341" lon="2.3287199"/>
+ <node id="929242203" lat="48.8338885" lon="2.3288455"/>
+ <node id="929366410" lat="48.8650667" lon="2.2937426"/>
+ <node id="929366422" lat="48.8650729" lon="2.2935903"/>
+ <node id="929366428" lat="48.8655837" lon="2.2931362"/>
+ <node id="929366436" lat="48.8651350" lon="2.2937753"/>
+ <node id="929366445" lat="48.8653585" lon="2.2932425"/>
+ <node id="929366462" lat="48.8650533" lon="2.2937236"/>
+ <node id="929366474" lat="48.8650802" lon="2.2935736"/>
+ <node id="929366490" lat="48.8651087" lon="2.2937772"/>
+ <node id="929366499" lat="48.8653925" lon="2.2932446"/>
+ <node id="929366520" lat="48.8655432" lon="2.2940584"/>
+ <node id="929366536" lat="48.8664199" lon="2.2892440">
+ <tag k="name" v="Hôtel Baltimore"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="929366538" lat="48.8652720" lon="2.2933736"/>
+ <node id="929366570" lat="48.8650975" lon="2.2937799"/>
+ <node id="929366588" lat="48.8650484" lon="2.2936336"/>
+ <node id="929366598" lat="48.8656973" lon="2.2933003"/>
+ <node id="929366612" lat="48.8652049" lon="2.2938364"/>
+ <node id="929366620" lat="48.8652810" lon="2.2933243"/>
+ <node id="929366636" lat="48.8650522" lon="2.2937050"/>
+ <node id="929366647" lat="48.8650997" lon="2.2935687"/>
+ <node id="929366660" lat="48.8651461" lon="2.2937782"/>
+ <node id="929366668" lat="48.8653292" lon="2.2932693"/>
+ <node id="929366685" lat="48.8650513" lon="2.2936480"/>
+ <node id="929366696" lat="48.8651278" lon="2.2935641"/>
+ <node id="929366711" lat="48.8650810" lon="2.2937605"/>
+ <node id="929366718" lat="48.8653679" lon="2.2932620"/>
+ <node id="929366725" lat="48.8650612" lon="2.2936111"/>
+ <node id="929366732" lat="48.8655450" lon="2.2930798"/>
+ <node id="929366742" lat="48.8655555" lon="2.2940370"/>
+ <node id="929366750" lat="48.8651636" lon="2.2934559"/>
+ <node id="929366767" lat="48.8650607" lon="2.2937323"/>
+ <node id="929366778" lat="48.8650799" lon="2.2935814"/>
+ <node id="929366784" lat="48.8655915" lon="2.2931475"/>
+ <node id="929366792" lat="48.8651263" lon="2.2937774"/>
+ <node id="929366801" lat="48.8652695" lon="2.2933685"/>
+ <node id="929366817" lat="48.8650573" lon="2.2937194"/>
+ <node id="929366827" lat="48.8650879" lon="2.2935678"/>
+ <node id="929366832" lat="48.8657307" lon="2.2933490"/>
+ <node id="929366842" lat="48.8651065" lon="2.2937767"/>
+ <node id="929366851" lat="48.8654903" lon="2.2931401"/>
+ <node id="929366867" lat="48.8650488" lon="2.2936595"/>
+ <node id="929366872" lat="48.8654802" lon="2.2940215"/>
+ <node id="929366880" lat="48.8651098" lon="2.2935654"/>
+ <node id="929366894" lat="48.8650978" lon="2.2937727"/>
+ <node id="929366906" lat="48.8650530" lon="2.2936356"/>
+ <node id="929366912" lat="48.8654799" lon="2.2931170"/>
+ <node id="929366921" lat="48.8651980" lon="2.2938603"/>
+ <node id="929366937" lat="48.8653077" lon="2.2932955"/>
+ <node id="929366977" lat="48.8650776" lon="2.2937569"/>
+ <node id="929367001" lat="48.8650643" lon="2.2936049"/>
+ <node id="929367032" lat="48.8651436" lon="2.2937720"/>
+ <node id="929367056" lat="48.8653308" lon="2.2932703"/>
+ <node id="929367086" lat="48.8650466" lon="2.2936455"/>
+ <node id="929367100" lat="48.8651280" lon="2.2935558"/>
+ <node id="929367115" lat="48.8651254" lon="2.2937775"/>
+ <node id="929367124" lat="48.8653900" lon="2.2932399"/>
+ <node id="929367134" lat="48.8655530" lon="2.2930720"/>
+ <node id="929367144" lat="48.8655502" lon="2.2940340"/>
+ <node id="929367152" lat="48.8651752" lon="2.2934780"/>
+ <node id="929367179" lat="48.8650567" lon="2.2937334"/>
+ <node id="929367205" lat="48.8650815" lon="2.2935793"/>
+ <node id="929367217" lat="48.8656724" lon="2.2933240"/>
+ <node id="929367231" lat="48.8654859" lon="2.2939966"/>
+ <node id="929367245" lat="48.8652904" lon="2.2933454"/>
+ <node id="929367276" lat="48.8650531" lon="2.2937050"/>
+ <node id="929367298" lat="48.8650901" lon="2.2935734"/>
+ <node id="929367309" lat="48.8657247" lon="2.2933724"/>
+ <node id="929367325" lat="48.8651050" lon="2.2937829"/>
+ <node id="929367343" lat="48.8653074" lon="2.2932929"/>
+ <node id="929367384" lat="48.8650507" lon="2.2936594"/>
+ <node id="929367412" lat="48.8651200" lon="2.2935642"/>
+ <node id="929367440" lat="48.8650891" lon="2.2937671"/>
+ <node id="929367466" lat="48.8650567" lon="2.2936231"/>
+ <node id="929367475" lat="48.8655349" lon="2.2930598"/>
+ <node id="929367496" lat="48.8651343" lon="2.2938239"/>
+ <node id="929367512" lat="48.8651095" lon="2.2935147"/>
+ <node id="929417978" lat="48.8683349" lon="2.2891747">
+ <tag k="name" v="Hôtel Ambassade"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="929442057" lat="48.8650549" lon="2.2937284"/>
+ <node id="929558482" lat="48.8652994" lon="2.2905368">
+ <tag k="name" v="Villa des ambassadeurs"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="929970118" lat="48.8382741" lon="2.2905724"/>
+ <node id="929970141" lat="48.8382566" lon="2.2904217"/>
+ <node id="929970152" lat="48.8383241" lon="2.2903708"/>
+ <node id="929970165" lat="48.8383505" lon="2.2903486"/>
+ <node id="929970180" lat="48.8382215" lon="2.2904676"/>
+ <node id="929970233" lat="48.8384328" lon="2.2905083"/>
+ <node id="929970236" lat="48.8383351" lon="2.2903187"/>
+ <node id="929970310" lat="48.8383182" lon="2.2906585"/>
+ <node id="929970337" lat="48.8382687" lon="2.2904426"/>
+ <node id="929970439" lat="48.8383114" lon="2.2903491"/>
+ <node id="930290286" lat="48.8235653" lon="2.3248555"/>
+ <node id="930291087" lat="48.8238334" lon="2.3241420"/>
+ <node id="930293876" lat="48.8236419" lon="2.3248935"/>
+ <node id="930294071" lat="48.8238686" lon="2.3242925"/>
+ <node id="930295544" lat="48.8235753" lon="2.3248111"/>
+ <node id="930305945" lat="48.8238556" lon="2.3240480"/>
+ <node id="930307953" lat="48.8235382" lon="2.3251612"/>
+ <node id="930307999" lat="48.8238245" lon="2.3241499"/>
+ <node id="930309706" lat="48.8238515" lon="2.3241753"/>
+ <node id="930310779" lat="48.8239143" lon="2.3240779"/>
+ <node id="930311793" lat="48.8238498" lon="2.3240724"/>
+ <node id="930314792" lat="48.8238909" lon="2.3241875"/>
+ <node id="930316726" lat="48.8237709" lon="2.3239329"/>
+ <node id="930319208" lat="48.8236045" lon="2.3246800"/>
+ <node id="930319823" lat="48.8238261" lon="2.3241635"/>
+ <node id="930324966" lat="48.8238045" lon="2.3242604"/>
+ <node id="930325376" lat="48.8238927" lon="2.3241788"/>
+ <node id="930327176" lat="48.8235891" lon="2.3251330"/>
+ <node id="930330954" lat="48.8239276" lon="2.3240147"/>
+ <node id="930334766" lat="48.8238836" lon="2.3239904"/>
+ <node id="930336067" lat="48.8237082" lon="2.3242140"/>
+ <node id="930336771" lat="48.8237690" lon="2.3247599"/>
+ <node id="930341867" lat="48.8235010" lon="2.3251443"/>
+ <node id="930342217" lat="48.8238559" lon="2.3241596"/>
+ <node id="930342980" lat="48.8235499" lon="2.3251151"/>
+ <node id="930343380" lat="48.8237313" lon="2.3249377"/>
+ <node id="930817643" lat="48.8260219" lon="2.3326339"/>
+ <node id="930818989" lat="48.8261533" lon="2.3327700"/>
+ <node id="930820556" lat="48.8260624" lon="2.3327455"/>
+ <node id="930823567" lat="48.8260137" lon="2.3327019"/>
+ <node id="930829615" lat="48.8261643" lon="2.3326707"/>
+ <node id="931569255" lat="48.8260099" lon="2.3327338"/>
+ <node id="931569256" lat="48.8260932" lon="2.3327546"/>
+ <node id="931572250" lat="48.8260617" lon="2.3327473"/>
+ <node id="936840599" lat="48.8691051" lon="2.2891789">
+ <tag k="name" v="Hôtel Victor Hugo"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="938011490" lat="48.8751792" lon="2.2867328"/>
+ <node id="938012165" lat="48.8752781" lon="2.2868044"/>
+ <node id="938012717" lat="48.8752348" lon="2.2865601"/>
+ <node id="938013482" lat="48.8753321" lon="2.2866312"/>
+ <node id="938799113" lat="48.8752039" lon="2.2866560">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue du Bois de Boulogne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938799611" lat="48.8752855" lon="2.2865972">
+ <tag k="addr:housenumber" v="30"/>
+ <tag k="addr:street" v="Rue Duret"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938824244" lat="48.8743938" lon="2.2895014">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue Chalgrin"/>
+ <tag k="name" v="Residence Chalgrin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="938872681" lat="48.8653195" lon="2.2939017">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Avenue d'Iéna"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938887895" lat="48.8656005" lon="2.2995396">
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:street" v="Avenue Marceau"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938888063" lat="48.8650504" lon="2.2936808">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Place d'Iéna"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938892874" lat="48.8639236" lon="2.2980214">
+ <tag k="addr:housenumber" v="14"/>
+ <tag k="addr:street" v="Avenue de New-York"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938892875" lat="48.8641670" lon="2.2961144">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Rue de la Manutention"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938892913" lat="48.8645839" lon="2.2981329">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Rue Gaston de Saint-Paul"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938892935" lat="48.8656872" lon="2.2992188">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue Léonce Reynaud"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="938892950" lat="48.8656789" lon="2.2994175">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue Léonce Reynaud"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="939459958" lat="48.8761867" lon="2.2834356">
+ <tag k="name" v="Résidence Impériale"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="940712742" lat="48.8494162" lon="2.3809935">
+ <tag k="name" v="Color Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="942552878" lat="48.8705816" lon="2.2797433"/>
+ <node id="942552913" lat="48.8704168" lon="2.2799983"/>
+ <node id="942553042" lat="48.8706980" lon="2.2798938"/>
+ <node id="942553081" lat="48.8703712" lon="2.2798809"/>
+ <node id="942553138" lat="48.8703281" lon="2.2796693"/>
+ <node id="942553183" lat="48.8703964" lon="2.2795668"/>
+ <node id="942553209" lat="48.8705832" lon="2.2800519"/>
+ <node id="942553243" lat="48.8702864" lon="2.2797341"/>
+ <node id="942553341" lat="48.8704839" lon="2.2795951"/>
+ <node id="942553382" lat="48.8704545" lon="2.2799921"/>
+ <node id="942553553" lat="48.8705868" lon="2.2797349"/>
+ <node id="942553602" lat="48.8704198" lon="2.2799931"/>
+ <node id="942553769" lat="48.8706443" lon="2.2798123"/>
+ <node id="942553801" lat="48.8703714" lon="2.2799193"/>
+ <node id="942553931" lat="48.8706504" lon="2.2799505"/>
+ <node id="942553967" lat="48.8703736" lon="2.2798680"/>
+ <node id="942554026" lat="48.8704011" lon="2.2795750"/>
+ <node id="942554064" lat="48.8704915" lon="2.2795820"/>
+ <node id="942554098" lat="48.8705432" lon="2.2801223"/>
+ <node id="942554227" lat="48.8705465" lon="2.2796718"/>
+ <node id="942554266" lat="48.8704464" lon="2.2799943"/>
+ <node id="942554384" lat="48.8706360" lon="2.2798264"/>
+ <node id="942554423" lat="48.8703680" lon="2.2799234"/>
+ <node id="942554577" lat="48.8706560" lon="2.2799571"/>
+ <node id="942554606" lat="48.8703684" lon="2.2798763"/>
+ <node id="942554663" lat="48.8703328" lon="2.2796754"/>
+ <node id="942554692" lat="48.8704396" lon="2.2795014"/>
+ <node id="942554734" lat="48.8705873" lon="2.2800601"/>
+ <node id="942554849" lat="48.8705401" lon="2.2796797"/>
+ <node id="942554874" lat="48.8704496" lon="2.2799989"/>
+ <node id="942609932" lat="48.8717084" lon="2.2815156"/>
+ <node id="942609966" lat="48.8713640" lon="2.2813031"/>
+ <node id="942610130" lat="48.8717076" lon="2.2815363"/>
+ <node id="942610339" lat="48.8714166" lon="2.2816047"/>
+ <node id="942610474" lat="48.8716754" lon="2.2812380"/>
+ <node id="942610585" lat="48.8717006" lon="2.2814458"/>
+ <node id="942610639" lat="48.8713570" lon="2.2815217"/>
+ <node id="942610837" lat="48.8717112" lon="2.2815145"/>
+ <node id="942610876" lat="48.8714657" lon="2.2812893"/>
+ <node id="942610896" lat="48.8713504" lon="2.2813058"/>
+ <node id="942611096" lat="48.8717063" lon="2.2815249"/>
+ <node id="942611132" lat="48.8714641" lon="2.2812790"/>
+ <node id="942611209" lat="48.8714122" lon="2.2812920"/>
+ <node id="942611352" lat="48.8714444" lon="2.2815981"/>
+ <node id="942611573" lat="48.8716981" lon="2.2814464"/>
+ <node id="942611627" lat="48.8714067" lon="2.2815085"/>
+ <node id="942611853" lat="48.8717043" lon="2.2814540"/>
+ <node id="942611905" lat="48.8713152" lon="2.2814705"/>
+ <node id="942612059" lat="48.8717091" lon="2.2815244"/>
+ <node id="942612093" lat="48.8714106" lon="2.2812920"/>
+ <node id="942612285" lat="48.8715707" lon="2.2815683"/>
+ <node id="942612470" lat="48.8714129" lon="2.2815675"/>
+ <node id="942612510" lat="48.8715191" lon="2.2812765"/>
+ <node id="942612553" lat="48.8715457" lon="2.2812699"/>
+ <node id="942612622" lat="48.8717012" lon="2.2814546"/>
+ <node id="942612672" lat="48.8713007" lon="2.2815354"/>
+ <node id="942635311" lat="48.8688538" lon="2.2828484"/>
+ <node id="942635330" lat="48.8687934" lon="2.2829761"/>
+ <node id="942635402" lat="48.8687889" lon="2.2828126"/>
+ <node id="942635508" lat="48.8688435" lon="2.2827248"/>
+ <node id="942635610" lat="48.8688729" lon="2.2827244"/>
+ <node id="942635697" lat="48.8690021" lon="2.2827054"/>
+ <node id="942635782" lat="48.8687783" lon="2.2827879"/>
+ <node id="942635870" lat="48.8688056" lon="2.2827616"/>
+ <node id="942635954" lat="48.8688773" lon="2.2827362"/>
+ <node id="942636015" lat="48.8689622" lon="2.2826102"/>
+ <node id="942636033" lat="48.8688942" lon="2.2826759"/>
+ <node id="942636096" lat="48.8687324" lon="2.2828320"/>
+ <node id="942636114" lat="48.8688746" lon="2.2828978"/>
+ <node id="942636259" lat="48.8688157" lon="2.2827863"/>
+ <node id="942636433" lat="48.8688567" lon="2.2827562"/>
+ <node id="942636535" lat="48.8689024" lon="2.2826960"/>
+ <node id="945719563" lat="48.8942047" lon="2.2662113"/>
+ <node id="945719734" lat="48.8940562" lon="2.2664388"/>
+ <node id="945720003" lat="48.8940622" lon="2.2662105"/>
+ <node id="945720159" lat="48.8941960" lon="2.2661599"/>
+ <node id="945721514" lat="48.8941054" lon="2.2663099"/>
+ <node id="945721620" lat="48.8939678" lon="2.2662207"/>
+ <node id="945722000" lat="48.8942069" lon="2.2661863"/>
+ <node id="945722375" lat="48.8941634" lon="2.2661131"/>
+ <node id="945722979" lat="48.8941301" lon="2.2663665"/>
+ <node id="945723344" lat="48.8941983" lon="2.2661955"/>
+ <node id="945723865" lat="48.8940376" lon="2.2661508"/>
+ <node id="945724014" lat="48.8941868" lon="2.2661679"/>
+ <node id="946410671" lat="48.8846029" lon="2.2586862"/>
+ <node id="946411002" lat="48.8861821" lon="2.2611910"/>
+ <node id="946411052" lat="48.8845174" lon="2.2586539"/>
+ <node id="946411402" lat="48.8861224" lon="2.2611344"/>
+ <node id="946411559" lat="48.8861523" lon="2.2609729"/>
+ <node id="946412001" lat="48.8845877" lon="2.2586612"/>
+ <node id="946412089" lat="48.8861103" lon="2.2608724"/>
+ <node id="946412195" lat="48.8861700" lon="2.2609188"/>
+ <node id="946412335" lat="48.8845797" lon="2.2587237"/>
+ <node id="946412365" lat="48.8861191" lon="2.2611467"/>
+ <node id="946412553" lat="48.8845985" lon="2.2587343"/>
+ <node id="946412741" lat="48.8845588" lon="2.2586507"/>
+ <node id="946412755" lat="48.8860633" lon="2.2610906"/>
+ <node id="946412899" lat="48.8861588" lon="2.2609777"/>
+ <node id="946413339" lat="48.8845834" lon="2.2586654"/>
+ <node id="946413644" lat="48.8861966" lon="2.2611835"/>
+ <node id="946413836" lat="48.8846259" lon="2.2587817"/>
+ <node id="946414030" lat="48.8845522" lon="2.2586726"/>
+ <node id="946414044" lat="48.8862126" lon="2.2609457"/>
+ <node id="946414190" lat="48.8861599" lon="2.2609740"/>
+ <node id="946414331" lat="48.8862280" lon="2.2611394"/>
+ <node id="946414994" lat="48.8862693" lon="2.2610707"/>
+ <node id="946415529" lat="48.8847055" lon="2.2586046"/>
+ <node id="946415543" lat="48.8862633" lon="2.2610533"/>
+ <node id="946415687" lat="48.8861828" lon="2.2609914"/>
+ <node id="946415829" lat="48.8862253" lon="2.2611358"/>
+ <node id="946416873" lat="48.8847129" lon="2.2586669"/>
+ <node id="946416887" lat="48.8862606" lon="2.2610575"/>
+ <node id="946417556" lat="48.8861884" lon="2.2611742"/>
+ <node id="946418232" lat="48.8846003" lon="2.2586906"/>
+ <node id="946418573" lat="48.8845510" lon="2.2585186"/>
+ <node id="946418832" lat="48.8846025" lon="2.2586948"/>
+ <node id="946418929" lat="48.8861864" lon="2.2611800">
+ <tag k="amenity" v="cafe"/>
+ <tag k="name" v="Le Brazza"/>
+ <tag k="shop" v="tobacco"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="946495328" lat="48.8385581" lon="2.3228175">
+ <tag k="name" v="Holliday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="947057515" lat="48.8646194" lon="2.2777565"/>
+ <node id="947057672" lat="48.8645926" lon="2.2780220"/>
+ <node id="947057719" lat="48.8646438" lon="2.2778980"/>
+ <node id="947057801" lat="48.8645336" lon="2.2779498"/>
+ <node id="947057843" lat="48.8645873" lon="2.2778295"/>
+ <node id="947057889" lat="48.8646151" lon="2.2778627"/>
+ <node id="947057941" lat="48.8646474" lon="2.2777862"/>
+ <node id="947307305" lat="48.8860709" lon="2.2610554">
+ <tag k="amenity" v="bank"/>
+ <tag k="name" v="CIC"/>
+ <tag k="operator" v="CIC"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="947307604" lat="48.8843598" lon="2.2605776">
+ <tag k="amenity" v="restaurant"/>
+ <tag k="name" v="Bistro Romain"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="952053143" lat="48.8967400" lon="2.3850836">
+ <tag k="name" v="Hôtel Forest Hill La Villette"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="958755455" lat="48.8957973" lon="2.2512497">
+ <tag k="name" v="Mercure"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="959800723" lat="48.8716939" lon="2.2814079">
+ <tag k="addr:housenumber" v="59"/>
+ <tag k="addr:street" v="Avenue Foch"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="959800747" lat="48.8645621" lon="2.2779846">
+ <tag k="addr:housenumber" v="85"/>
+ <tag k="addr:street" v="Rue de la Pompe"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="959856456" lat="48.8687527" lon="2.2828800">
+ <tag k="addr:housenumber" v="102"/>
+ <tag k="addr:street" v="Avenue Victor Hugo"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="963961524" lat="48.8586659" lon="2.2826833">
+ <tag k="name" v="Hôtel Gavarni"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="968445398" lat="48.8179391" lon="2.3294356">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968445839" lat="48.8176920" lon="2.3295911">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968446083" lat="48.8176682" lon="2.3296018">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968446180" lat="48.8180151" lon="2.3293587">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968446510" lat="48.8174068" lon="2.3292794">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968448471" lat="48.8176690" lon="2.3295418">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968448717" lat="48.8173384" lon="2.3298049">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968449923" lat="48.8173369" lon="2.3297408">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968449959" lat="48.8173485" lon="2.3297199">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968450270" lat="48.8175190" lon="2.3295105">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968450339" lat="48.8176068" lon="2.3294331">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968454420" lat="48.8176058" lon="2.3294502">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968454694" lat="48.8173463" lon="2.3297428">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968454923" lat="48.8180243" lon="2.3292476">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968457131" lat="48.8174138" lon="2.3292823">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968457373" lat="48.8173711" lon="2.3293827">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968458302" lat="48.8178233" lon="2.3291313">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968461734" lat="48.8175609" lon="2.3291052">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968462053" lat="48.8177823" lon="2.3296513">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968462758" lat="48.8176670" lon="2.3294619">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968464044" lat="48.8176650" lon="2.3296340">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968466725" lat="48.8174022" lon="2.3293896">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968467295" lat="48.8173543" lon="2.3298812">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968467929" lat="48.8179141" lon="2.3292223">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968469582" lat="48.8177988" lon="2.3296623">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968469853" lat="48.8173413" lon="2.3297746">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968473737" lat="48.8177815" lon="2.3296584">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968474124" lat="48.8173584" lon="2.3298407">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968474261" lat="48.8176695" lon="2.3295867">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968474356" lat="48.8180078" lon="2.3294482">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968474998" lat="48.8179231" lon="2.3295945">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968475885" lat="48.8176486" lon="2.3295379">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968476036" lat="48.8179184" lon="2.3296352">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968476124" lat="48.8174220" lon="2.3298980">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968476804" lat="48.8174110" lon="2.3300121">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968476947" lat="48.8178038" lon="2.3296138">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968478228" lat="48.8173543" lon="2.3295617">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968478309" lat="48.8179206" lon="2.3291527">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968478626" lat="48.8175952" lon="2.3294296">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968478824" lat="48.8174182" lon="2.3291769">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968478921" lat="48.8176772" lon="2.3294473">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968479410" lat="48.8176483" lon="2.3294753">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968479558" lat="48.8173424" lon="2.3296843">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968480142" lat="48.8177868" lon="2.3296104">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968480189" lat="48.8173338" lon="2.3297730">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968480955" lat="48.8176698" lon="2.3294459">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968481157" lat="48.8177715" lon="2.3296073">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968481355" lat="48.8173600" lon="2.3295020">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968483469" lat="48.8173392" lon="2.3297179">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968483553" lat="48.8176701" lon="2.3295303">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968483990" lat="48.8173651" lon="2.3294499">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968485713" lat="48.8176227" lon="2.3294696">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968487448" lat="48.8176446" lon="2.3298550">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968489800" lat="48.8175337" lon="2.3293470">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968489985" lat="48.8176022" lon="2.3293619">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968493377" lat="48.8175207" lon="2.3294913">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968494098" lat="48.8175599" lon="2.3298393">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968494538" lat="48.8178197" lon="2.3291585">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968494985" lat="48.8175414" lon="2.3300434">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968496794" lat="48.8175503" lon="2.3292069">
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ </node>
+ <node id="968924209" lat="48.8412408" lon="2.3134332">
+ <tag k="name" v="Hôtel Atlantique"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="971088066" lat="48.8596715" lon="2.2670124"/>
+ <node id="971088093" lat="48.8596928" lon="2.2669143"/>
+ <node id="971088220" lat="48.8591809" lon="2.2673690"/>
+ <node id="971088257" lat="48.8594815" lon="2.2678508"/>
+ <node id="971088303" lat="48.8595917" lon="2.2668619"/>
+ <node id="971088320" lat="48.8593224" lon="2.2667443"/>
+ <node id="971088437" lat="48.8591152" lon="2.2676589"/>
+ <node id="971088469" lat="48.8592899" lon="2.2668911"/>
+ <node id="971088506" lat="48.8593480" lon="2.2666526"/>
+ <node id="971088558" lat="48.8596292" lon="2.2668815"/>
+ <node id="971088649" lat="48.8596475" lon="2.2671184"/>
+ <node id="971088821" lat="48.8594765" lon="2.2668016"/>
+ <node id="971088887" lat="48.8594906" lon="2.2667483"/>
+ <node id="971476091" lat="48.8739957" lon="2.3427413">
+ <tag k="name" v="Hôtel Jeff"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="974640037" lat="48.8742380" lon="2.2811266">
+ <tag k="fax" v="+33 (0)1 45 01 98 68"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Hôtel Résidence Foch"/>
+ <tag k="phone" v="+33 (0)1 45 00 46 50"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.foch-paris-hotel.com/"/>
+ </node>
+ <node id="975545513" lat="48.8168060" lon="2.3058229"/>
+ <node id="975555713" lat="48.8169545" lon="2.3057347"/>
+ <node id="975557924" lat="48.8168235" lon="2.3058364"/>
+ <node id="975562616" lat="48.8168019" lon="2.3058926"/>
+ <node id="975564559" lat="48.8169535" lon="2.3057373"/>
+ <node id="975567886" lat="48.8166944" lon="2.3060924"/>
+ <node id="975568194" lat="48.8169281" lon="2.3057122"/>
+ <node id="975580409" lat="48.8167220" lon="2.3061324"/>
+ <node id="975583991" lat="48.8168430" lon="2.3057245"/>
+ <node id="975592683" lat="48.8166991" lon="2.3060790"/>
+ <node id="975592949" lat="48.8168348" lon="2.3057180"/>
+ <node id="975599642" lat="48.8167523" lon="2.3061762"/>
+ <node id="975600090" lat="48.8168442" lon="2.3059305"/>
+ <node id="975603529" lat="48.8167735" lon="2.3062067"/>
+ <node id="975603751" lat="48.8168820" lon="2.3059236"/>
+ <node id="975987576" lat="48.8575222" lon="2.2845690">
+ <tag k="name" v="Musée du Vin"/>
+ <tag k="phone" v="01.45.25.63.26"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museeduvinparis.com"/>
+ </node>
+ <node id="976163231" lat="48.8553889" lon="2.2808680"/>
+ <node id="976163730" lat="48.8553456" lon="2.2808176"/>
+ <node id="976163979" lat="48.8551897" lon="2.2811252"/>
+ <node id="976164100" lat="48.8553191" lon="2.2810824"/>
+ <node id="976164252" lat="48.8552260" lon="2.2811862"/>
+ <node id="976164314" lat="48.8552913" lon="2.2812748"/>
+ <node id="976164528" lat="48.8552894" lon="2.2812723"/>
+ <node id="976164564" lat="48.8553201" lon="2.2810793"/>
+ <node id="976164802" lat="48.8553451" lon="2.2809831"/>
+ <node id="976164877" lat="48.8551838" lon="2.2810859"/>
+ <node id="976164899" lat="48.8554146" lon="2.2808979"/>
+ <node id="976164958" lat="48.8551616" lon="2.2810650"/>
+ <node id="976164994" lat="48.8553073" lon="2.2811172"/>
+ <node id="976165019" lat="48.8553073" lon="2.2810660"/>
+ <node id="976165185" lat="48.8550841" lon="2.2804620"/>
+ <node id="976165646" lat="48.8550212" lon="2.2807326"/>
+ <node id="976165691" lat="48.8549761" lon="2.2806023"/>
+ <node id="976165761" lat="48.8553366" lon="2.2811505"/>
+ <node id="976165774" lat="48.8553660" lon="2.2810041"/>
+ <node id="976165892" lat="48.8551278" lon="2.2810080"/>
+ <node id="976166021" lat="48.8551186" lon="2.2809842"/>
+ <node id="976978213" lat="48.8363040" lon="2.2531981"/>
+ <node id="976978222" lat="48.8360067" lon="2.2506468">
+ <tag k="amenity" v="restaurant"/>
+ <tag k="cuisine" v="italian"/>
+ <tag k="name" v="L'Antipasto"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="976978233" lat="48.8364267" lon="2.2531054"/>
+ <node id="976978250" lat="48.8360594" lon="2.2524888"/>
+ <node id="976978257" lat="48.8359725" lon="2.2504927">
+ <tag k="name" v="La Baleine Bleue"/>
+ <tag k="note" v="selling aquarium stuff"/>
+ <tag k="shop" v="yes"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="976978263" lat="48.8363123" lon="2.2527415">
+ <tag k="amenity" v="restaurant"/>
+ <tag k="cuisine" v="french"/>
+ <tag k="name" v="L'AOC"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="977194184" lat="48.8439118" lon="2.3545847">
+ <tag k="name" v="TimHotel"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="977194956" lat="48.8417544" lon="2.3564509">
+ <tag k="entrance" v="yes"/>
+ </node>
+ <node id="979334707" lat="48.8514571" lon="2.2773609">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Rue Gros"/>
+ </node>
+ <node id="979334717" lat="48.8514702" lon="2.2773307"/>
+ <node id="979334749" lat="48.8515208" lon="2.2778496"/>
+ <node id="979334779" lat="48.8514835" lon="2.2777803"/>
+ <node id="979334839" lat="48.8515149" lon="2.2778481"/>
+ <node id="979334996" lat="48.8514965" lon="2.2778199"/>
+ <node id="979335073" lat="48.8516706" lon="2.2776063"/>
+ <node id="979335255" lat="48.8514610" lon="2.2773505"/>
+ <node id="979335258" lat="48.8514725" lon="2.2777530"/>
+ <node id="979335596" lat="48.8514549" lon="2.2774510"/>
+ <node id="979335635" lat="48.8514665" lon="2.2777246">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Rue Gros"/>
+ </node>
+ <node id="979335932" lat="48.8514751" lon="2.2777623"/>
+ <node id="979335976" lat="48.8515062" lon="2.2778415"/>
+ <node id="979336202" lat="48.8514529" lon="2.2774427"/>
+ <node id="979336458" lat="48.8514542" lon="2.2774531"/>
+ <node id="979336509" lat="48.8514503" lon="2.2774107"/>
+ <node id="979336852" lat="48.8514496" lon="2.2774940"/>
+ <node id="979336904" lat="48.8514981" lon="2.2778277"/>
+ <node id="979337080" lat="48.8514512" lon="2.2774681">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Rue Gros"/>
+ </node>
+ <node id="979337115" lat="48.8516668" lon="2.2775457"/>
+ <node id="979337266" lat="48.8515347" lon="2.2778489"/>
+ <node id="979337318" lat="48.8515436" lon="2.2778441"/>
+ <node id="979337562" lat="48.8514532" lon="2.2773770"/>
+ <node id="979337880" lat="48.8515264" lon="2.2778500"/>
+ <node id="979338174" lat="48.8515476" lon="2.2778378"/>
+ <node id="979338205" lat="48.8514797" lon="2.2773171"/>
+ <node id="979338250" lat="48.8514944" lon="2.2777941"/>
+ <node id="979338317" lat="48.8516710" lon="2.2775840"/>
+ <node id="980278817" lat="48.8805760" lon="2.2843365"/>
+ <node id="980279578" lat="48.8792354" lon="2.2852862"/>
+ <node id="980279817" lat="48.8801172" lon="2.2839290"/>
+ <node id="980281114" lat="48.8800192" lon="2.2853817"/>
+ <node id="980281195" lat="48.8791718" lon="2.2860360"/>
+ <node id="980281361" lat="48.8805312" lon="2.2844640"/>
+ <node id="980282077" lat="48.8799900" lon="2.2841346"/>
+ <node id="980282612" lat="48.8793532" lon="2.2863096"/>
+ <node id="980282782" lat="48.8804601" lon="2.2846657"/>
+ <node id="980282912" lat="48.8799595" lon="2.2844048"/>
+ <node id="980283152" lat="48.8799630" lon="2.2844381"/>
+ <node id="980283199" lat="48.8804576" lon="2.2846731"/>
+ <node id="980283940" lat="48.8791459" lon="2.2859925"/>
+ <node id="980284043" lat="48.8799611" lon="2.2844214"/>
+ <node id="980284851" lat="48.8799951" lon="2.2841197"/>
+ <node id="980284871" lat="48.8800472" lon="2.2840112"/>
+ <node id="980285312" lat="48.8805239" lon="2.2844579"/>
+ <node id="980285774" lat="48.8805549" lon="2.2843965"/>
+ <node id="980286606" lat="48.8804504" lon="2.2846671"/>
+ <node id="980286982" lat="48.8799603" lon="2.2844131"/>
+ <node id="980287096" lat="48.8804266" lon="2.2847344"/>
+ <node id="980287120" lat="48.8791815" lon="2.2851950"/>
+ <node id="980287610" lat="48.8789448" lon="2.2849227"/>
+ <node id="980287996" lat="48.8804087" lon="2.2848115"/>
+ <node id="980290824" lat="48.8798464" lon="2.2859633"/>
+ <node id="980291314" lat="48.8800592" lon="2.2839936"/>
+ <node id="980294261" lat="48.8806024" lon="2.2842621"/>
+ <node id="980294416" lat="48.8789918" lon="2.2850119"/>
+ <node id="980294852" lat="48.8804837" lon="2.2845986"/>
+ <node id="980295811" lat="48.8800155" lon="2.2840695"/>
+ <node id="980296114" lat="48.8799589" lon="2.2843965"/>
+ <node id="980296434" lat="48.8800398" lon="2.2840235"/>
+ <node id="980296778" lat="48.8800893" lon="2.2839564"/>
+ <node id="980297638" lat="48.8799620" lon="2.2844298"/>
+ <node id="980298780" lat="48.8805524" lon="2.2844039"/>
+ <node id="980299624" lat="48.8796751" lon="2.2856794"/>
+ <node id="980300042" lat="48.8805002" lon="2.2845254"/>
+ <node id="980300245" lat="48.8799750" lon="2.2841890"/>
+ <node id="980302489" lat="48.8798439" lon="2.2844793"/>
+ <node id="980302975" lat="48.8805215" lon="2.2844653"/>
+ <node id="980303188" lat="48.8804027" lon="2.2848018"/>
+ <node id="980305872" lat="48.8795894" lon="2.2856688"/>
+ <node id="980307199" lat="48.8800938" lon="2.2839515"/>
+ <node id="980308870" lat="48.8792192" lon="2.2861278"/>
+ <node id="980309316" lat="48.8804126" lon="2.2848003"/>
+ <node id="980309821" lat="48.8796042" lon="2.2857325"/>
+ <node id="980310189" lat="48.8804766" lon="2.2845925"/>
+ <node id="980310450" lat="48.8790379" lon="2.2849535"/>
+ <node id="980311255" lat="48.8805998" lon="2.2842694"/>
+ <node id="980312132" lat="48.8790633" lon="2.2856581"/>
+ <node id="980312464" lat="48.8800676" lon="2.2839824"/>
+ <node id="980312889" lat="48.8798289" lon="2.2844823"/>
+ <node id="980314472" lat="48.8800034" lon="2.2840978"/>
+ <node id="980315554" lat="48.8800360" lon="2.2840298"/>
+ <node id="980316183" lat="48.8799575" lon="2.2843628"/>
+ <node id="980319437" lat="48.8791502" lon="2.2860002"/>
+ <node id="980319815" lat="48.8790442" lon="2.2856814"/>
+ <node id="980320020" lat="48.8796713" lon="2.2862795"/>
+ <node id="980322495" lat="48.8799577" lon="2.2843713"/>
+ <node id="980322878" lat="48.8801271" lon="2.2839209"/>
+ <node id="980325429" lat="48.8801625" lon="2.2838965"/>
+ <node id="980325648" lat="48.8799831" lon="2.2841576"/>
+ <node id="980326357" lat="48.8804054" lon="2.2847944"/>
+ <node id="980326963" lat="48.8793858" lon="2.2863229"/>
+ <node id="980327174" lat="48.8805952" lon="2.2842562"/>
+ <node id="980327550" lat="48.8799582" lon="2.2843124"/>
+ <node id="980328977" lat="48.8798557" lon="2.2861299"/>
+ <node id="980329530" lat="48.8799732" lon="2.2841971"/>
+ <node id="980331943" lat="48.8799418" lon="2.2862311"/>
+ <node id="980332273" lat="48.8800004" lon="2.2841049"/>
+ <node id="980333254" lat="48.8790277" lon="2.2848152"/>
+ <node id="980335496" lat="48.8800848" lon="2.2839613"/>
+ <node id="980336111" lat="48.8799592" lon="2.2842956"/>
+ <node id="980337076" lat="48.8800435" lon="2.2840174"/>
+ <node id="980338808" lat="48.8800255" lon="2.2840493"/>
+ <node id="980339325" lat="48.8793558" lon="2.2863314"/>
+ <node id="980340334" lat="48.8799657" lon="2.2842375"/>
+ <node id="980341142" lat="48.8801124" lon="2.2839331"/>
+ <node id="980341417" lat="48.8800984" lon="2.2839467"/>
+ <node id="980341883" lat="48.8800187" lon="2.2840626"/>
+ <node id="980343728" lat="48.8799581" lon="2.2843797"/>
+ <node id="980345035" lat="48.8799699" lon="2.2842131"/>
+ <node id="980346507" lat="48.8801097" lon="2.2852363"/>
+ <node id="980347622" lat="48.8800553" lon="2.2839994"/>
+ <node id="980347823" lat="48.8799788" lon="2.2841731"/>
+ <node id="980349251" lat="48.8792108" lon="2.2860887"/>
+ <node id="980351458" lat="48.8801221" lon="2.2839248"/>
+ <node id="980352666" lat="48.8796461" lon="2.2852148"/>
+ <node id="980353895" lat="48.8801320" lon="2.2839169"/>
+ <node id="980354145" lat="48.8800530" lon="2.2851969"/>
+ <node id="980354569" lat="48.8800633" lon="2.2839880"/>
+ <node id="980354831" lat="48.8805714" lon="2.2843235"/>
+ <node id="980354971" lat="48.8801236" lon="2.2852767"/>
+ <node id="980355344" lat="48.8793224" lon="2.2863181"/>
+ <node id="980356470" lat="48.8799769" lon="2.2841810"/>
+ <node id="980357703" lat="48.8804339" lon="2.2847404"/>
+ <node id="980358890" lat="48.8801370" lon="2.2839133"/>
+ <node id="980360423" lat="48.8799583" lon="2.2843880"/>
+ <node id="980365348" lat="48.8799685" lon="2.2842211"/>
+ <node id="980367899" lat="48.8800063" lon="2.2840906"/>
+ <node id="980368915" lat="48.8805287" lon="2.2844711"/>
+ <node id="980372889" lat="48.8799255" lon="2.2853977"/>
+ <node id="980381632" lat="48.8792276" lon="2.2861070"/>
+ <node id="980383128" lat="48.8806038" lon="2.2842581"/>
+ <node id="980383983" lat="48.8798920" lon="2.2864212"/>
+ <node id="980387234" lat="48.8798307" lon="2.2844811"/>
+ <node id="980391171" lat="48.8805689" lon="2.2843306"/>
+ <node id="980391920" lat="48.8798826" lon="2.2853136"/>
+ <node id="980392056" lat="48.8799126" lon="2.2853616"/>
+ <node id="980395321" lat="48.8800324" lon="2.2840363"/>
+ <node id="980396174" lat="48.8799614" lon="2.2842706"/>
+ <node id="980397410" lat="48.8804814" lon="2.2846057"/>
+ <node id="980401076" lat="48.8799635" lon="2.2842541"/>
+ <node id="980401889" lat="48.8800745" lon="2.2853722"/>
+ <node id="980403297" lat="48.8805787" lon="2.2843294"/>
+ <node id="980405321" lat="48.8795848" lon="2.2856531"/>
+ <node id="980406917" lat="48.8799579" lon="2.2843207"/>
+ <node id="980412056" lat="48.8799653" lon="2.2844546"/>
+ <node id="980414043" lat="48.8799668" lon="2.2844637"/>
+ <node id="980414516" lat="48.8801420" lon="2.2839097"/>
+ <node id="980415257" lat="48.8799641" lon="2.2844464"/>
+ <node id="980415524" lat="48.8801470" lon="2.2839062"/>
+ <node id="980417083" lat="48.8800123" lon="2.2840765"/>
+ <node id="980417277" lat="48.8801077" lon="2.2839376"/>
+ <node id="980418691" lat="48.8790041" lon="2.2857307"/>
+ <node id="980419197" lat="48.8798325" lon="2.2845615"/>
+ <node id="980419413" lat="48.8792159" lon="2.2854696"/>
+ <node id="980420145" lat="48.8801521" lon="2.2839028"/>
+ <node id="980420477" lat="48.8800093" lon="2.2840835"/>
+ <node id="980422889" lat="48.8799671" lon="2.2842293"/>
+ <node id="980435495" lat="48.8805450" lon="2.2843979"/>
+ <node id="980435874" lat="48.8801038" lon="2.2852684"/>
+ <node id="980437324" lat="48.8805050" lon="2.2845385"/>
+ <node id="980437591" lat="48.8800803" lon="2.2839663"/>
+ <node id="980439791" lat="48.8799854" lon="2.2841500"/>
+ <node id="980441474" lat="48.8804364" lon="2.2847330"/>
+ <node id="980443228" lat="48.8799716" lon="2.2842051"/>
+ <node id="980444257" lat="48.8799575" lon="2.2843376"/>
+ <node id="980446129" lat="48.8801573" lon="2.2838996"/>
+ <node id="980447767" lat="48.8792063" lon="2.2854811"/>
+ <node id="980448332" lat="48.8799572" lon="2.2843544"/>
+ <node id="980450848" lat="48.8799587" lon="2.2843039"/>
+ <node id="980450968" lat="48.8800219" lon="2.2840560"/>
+ <node id="980451533" lat="48.8799574" lon="2.2843460"/>
+ <node id="980451689" lat="48.8799606" lon="2.2842788"/>
+ <node id="980452333" lat="48.8804102" lon="2.2848077"/>
+ <node id="980452490" lat="48.8800994" lon="2.2837053"/>
+ <node id="980452983" lat="48.8798867" lon="2.2853643"/>
+ <node id="980453288" lat="48.8801463" lon="2.2836699"/>
+ <node id="980457650" lat="48.8792906" lon="2.2853784"/>
+ <node id="980460301" lat="48.8798309" lon="2.2844823"/>
+ <node id="980460307" lat="48.8799576" lon="2.2843291"/>
+ <node id="980460904" lat="48.8791696" lon="2.2855271"/>
+ <node id="980462839" lat="48.8800504" lon="2.2852107"/>
+ <node id="980463562" lat="48.8798099" lon="2.2861011"/>
+ <node id="980463877" lat="48.8800289" lon="2.2840427"/>
+ <node id="980470184" lat="48.8800762" lon="2.2839717"/>
+ <node id="980470908" lat="48.8798686" lon="2.2860873"/>
+ <node id="980474482" lat="48.8799349" lon="2.2861799"/>
+ <node id="980475273" lat="48.8804979" lon="2.2845324"/>
+ <node id="980478263" lat="48.8804291" lon="2.2847271"/>
+ <node id="980479682" lat="48.8799645" lon="2.2842457"/>
+ <node id="980480258" lat="48.8799809" lon="2.2841653"/>
+ <node id="980480298" lat="48.8799463" lon="2.2861364"/>
+ <node id="980480543" lat="48.8800719" lon="2.2839769"/>
+ <node id="980480588" lat="48.8800512" lon="2.2840052"/>
+ <node id="980481252" lat="48.8791926" lon="2.2860659"/>
+ <node id="980482097" lat="48.8805477" lon="2.2843908"/>
+ <node id="980486251" lat="48.8799924" lon="2.2841272"/>
+ <node id="980488799" lat="48.8799877" lon="2.2841422"/>
+ <node id="980490266" lat="48.8790416" lon="2.2847563"/>
+ <node id="980490663" lat="48.8801004" lon="2.2837087"/>
+ <node id="980491116" lat="48.8799977" lon="2.2841123"/>
+ <node id="980491498" lat="48.8793896" lon="2.2863557"/>
+ <node id="980492467" lat="48.8799158" lon="2.2853994"/>
+ <node id="980493280" lat="48.8795716" lon="2.2856136"/>
+ <node id="980495284" lat="48.8804740" lon="2.2845999"/>
+ <node id="980496353" lat="48.8801677" lon="2.2838936"/>
+ <node id="980497069" lat="48.8805925" lon="2.2842633"/>
+ <node id="980497487" lat="48.8799623" lon="2.2842623"/>
+ <node id="980498836" lat="48.8799599" lon="2.2842872"/>
+ <node id="980500693" lat="48.8799522" lon="2.2861910"/>
+ <node id="980501121" lat="48.8803807" lon="2.2847992"/>
+ <node id="980501670" lat="48.8805076" lon="2.2845311"/>
+ <node id="980501943" lat="48.8804529" lon="2.2846599"/>
+ <node id="980502399" lat="48.8801310" lon="2.2853625"/>
+ <node id="980502501" lat="48.8801031" lon="2.2839420"/>
+ <node id="981836397" lat="48.8553621" lon="2.2808368">
+ <tag k="addr:housenumber" v="47"/>
+ <tag k="addr:street" v="Rue Raynouard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="981836411" lat="48.8812382" lon="2.3336808"/>
+ <node id="981836421" lat="48.8808923" lon="2.3332855">
+ <tag k="addr:housenumber" v="16"/>
+ <tag k="addr:street" v="Rue Chaptal"/>
+ <tag k="survey" v="yes"/>
+ </node>
+ <node id="984844854" lat="48.8461978" lon="2.3409102">
+ <tag k="contact:website" v="http://www.elysa-hotel-paris.com"/>
+ <tag k="name" v="Hôtel Elysa-Luxembourg"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="988247046" lat="48.8505185" lon="2.2705537">
+ <tag k="name" v="Hôtel Ribera"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="990384066" lat="48.8810351" lon="2.3641714">
+ <tag k="name" v="Hôtel La Fayette"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="993828548" lat="48.8414574" lon="2.3172246">
+ <tag k="alt_name" v="L’Adresse Musée de La Poste"/>
+ <tag k="fare" v="3.50–5.00 EUR"/>
+ <tag k="fax" v="+33 1 42 79 24 00"/>
+ <tag k="name" v="Musée de la Poste"/>
+ <tag k="opening_hours" v="Mo-Sa 10:00-18:00"/>
+ <tag k="phone" v="+33 1 42 79 24 24"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.ladressemuseedelaposte.com/"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia:en" v="Musée de La Poste"/>
+ <tag k="wikipedia:fr" v="L'Adresse Musée de La Poste"/>
+ <tag k="wikipedia:ru" v="Музей почты (Париж)"/>
+ </node>
+ <node id="993828560" lat="48.8677629" lon="2.2935696">
+ <tag k="email" v="patrimoine@baccarat.fr"/>
+ <tag k="fare" v="3.50-5.00 EUR"/>
+ <tag k="name" v="galerie-musée Baccarat"/>
+ <tag k="opening_hours" v="Mo 10:00-18:00;We-Sa 10:00-18:00"/>
+ <tag k="phone" v="+33 1 40 22 11 00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.baccarat.fr/fr/univers-baccarat/musees/gallery-opening-hours.htm"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Musée Baccarat (Paris)"/>
+ </node>
+ <node id="993833772" lat="48.8486125" lon="2.2661824">
+ <tag k="name" v="Queen's Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="997919783" lat="48.8848637" lon="2.3606402">
+ <tag k="name" v="Hôtel du Square"/>
+ <tag k="phone" v="+33 (0)1 46 07 69 74"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1004291429" lat="48.8515661" lon="2.2778030">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue de Boulainvilliers"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004291887" lat="48.8516564" lon="2.2776330">
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:street" v="Rue de Boulainvilliers"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004292544" lat="48.8515992" lon="2.2777406">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue de Boulainvilliers"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004347053" lat="48.8515208" lon="2.2773673">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Rue du Pré aux Chevaux"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004347575" lat="48.8514561" lon="2.2775827">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Rue Gros"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004347632" lat="48.8516287" lon="2.2774991">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue du Pré aux Chevaux"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1004347820" lat="48.8515844" lon="2.2774450">
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:street" v="Rue du Pré aux Chevaux"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1011613796" lat="48.8552112" lon="2.2811614">
+ <tag k="addr:housenumber" v="24"/>
+ <tag k="addr:street" v="Rue Berton"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1011706937" lat="48.8591390" lon="2.2675537">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Rue Louis Boilly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </node>
+ <node id="1013337258" lat="48.8269616" lon="2.2914766"/>
+ <node id="1013337262" lat="48.8268821" lon="2.2918154"/>
+ <node id="1013337289" lat="48.8266690" lon="2.2909619"/>
+ <node id="1013337305" lat="48.8266293" lon="2.2907559"/>
+ <node id="1013337334" lat="48.8269037" lon="2.2914617"/>
+ <node id="1013337353" lat="48.8265453" lon="2.2911422"/>
+ <node id="1013337377" lat="48.8266741" lon="2.2908412"/>
+ <node id="1013337396" lat="48.8270966" lon="2.2910491"/>
+ <node id="1013337425" lat="48.8269664" lon="2.2914409"/>
+ <node id="1013337428" lat="48.8265819" lon="2.2913263"/>
+ <node id="1013337448" lat="48.8266425" lon="2.2909341"/>
+ <node id="1013337469" lat="48.8268294" lon="2.2907018"/>
+ <node id="1013337498" lat="48.8269824" lon="2.2912933"/>
+ <node id="1013337501" lat="48.8269756" lon="2.2916156"/>
+ <node id="1013337519" lat="48.8265546" lon="2.2911521"/>
+ <node id="1013337540" lat="48.8266242" lon="2.2907667"/>
+ <node id="1013337560" lat="48.8270924" lon="2.2910252"/>
+ <node id="1013337592" lat="48.8269709" lon="2.2915359"/>
+ <node id="1013337596" lat="48.8267157" lon="2.2914713"/>
+ <node id="1013337625" lat="48.8266605" lon="2.2908712"/>
+ <node id="1013337648" lat="48.8268213" lon="2.2907136"/>
+ <node id="1013337671" lat="48.8269427" lon="2.2914594"/>
+ <node id="1013337673" lat="48.8269474" lon="2.2915844"/>
+ <node id="1013337687" lat="48.8266200" lon="2.2909111"/>
+ <node id="1013337704" lat="48.8266216" lon="2.2907664"/>
+ <node id="1013337725" lat="48.8270091" lon="2.2912365"/>
+ <node id="1013337752" lat="48.8269468" lon="2.2915098"/>
+ <node id="1013337772" lat="48.8265396" lon="2.2911841"/>
+ <node id="1013337811" lat="48.8266953" lon="2.2909068"/>
+ <node id="1013337851" lat="48.8270395" lon="2.2909686"/>
+ <node id="1013337896" lat="48.8269293" lon="2.2914896"/>
+ <node id="1013337899" lat="48.8266637" lon="2.2915816"/>
+ <node id="1013337917" lat="48.8265238" lon="2.2911192"/>
+ <node id="1013337939" lat="48.8267055" lon="2.2905916"/>
+ <node id="1013337986" lat="48.8266121" lon="2.2912625"/>
+ <node id="1013338002" lat="48.8266157" lon="2.2907794"/>
+ <node id="1013338031" lat="48.8270534" lon="2.2909366"/>
+ <node id="1025401504" lat="48.8379511" lon="2.2585104">
+ <tag k="fax" v="+33-1-46510724"/>
+ <tag k="name" v="Holiday Inn Garden Court : Paris-Auteuil"/>
+ <tag k="phone" v="+33-1-46519922"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1028569362" lat="48.8596983" lon="2.3588091"/>
+ <node id="1028572726" lat="48.8598093" lon="2.3585936"/>
+ <node id="1037359856" lat="48.8176472" lon="2.3291230">
+ <tag k="entrance" v="yes"/>
+ </node>
+ <node id="1037359857" lat="48.8179716" lon="2.3294400"/>
+ <node id="1037359859" lat="48.8179929" lon="2.3292394"/>
+ <node id="1041617634" lat="48.8379036" lon="2.2962662">
+ <tag k="name" v="Hôtel Studio"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1044947691" lat="48.8853330" lon="2.3604560">
+ <tag k="name" v="Hôtel Merryl"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1045045763" lat="48.8866633" lon="2.3608930">
+ <tag k="name" v="Hôtel de Bellevue Paris"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1067589714" lat="48.8538117" lon="2.3386948">
+ <tag k="name" v="Hôtel Le Régent"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1079716208" lat="48.8599466" lon="2.3277279">
+ <tag k="amenity" v="clock"/>
+ <tag k="date" v="yes"/>
+ <tag k="display" v="analog"/>
+ <tag k="support" v="wall_mounted"/>
+ <tag k="visibility" v="area"/>
+ </node>
+ <node id="1079716351" lat="48.8603993" lon="2.3262152">
+ <tag k="amenity" v="clock"/>
+ <tag k="date" v="yes"/>
+ <tag k="display" v="analog"/>
+ <tag k="support" v="wall_mounted"/>
+ <tag k="visibility" v="area"/>
+ </node>
+ <node id="1080956696" lat="48.8907109" lon="2.3246455">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1081151262" lat="48.8171116" lon="2.3500417">
+ <tag k="name" v="Hôtel Ibis"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1094366347" lat="48.8480892" lon="2.3719704">
+ <tag k="internet_access" v="yes"/>
+ <tag k="name" v="Jules Cesar"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1108259378" lat="48.8532543" lon="2.3457644">
+ <tag k="name" v="Hôtel Les Rives de Notre-Dame"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1109398565" lat="48.8530193" lon="2.3465416">
+ <tag k="name" v="Hôtel Notre-Dame"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1113454786" lat="48.8757021" lon="2.3582998">
+ <tag k="name" v="Hôtel Amiot"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1113738994" lat="48.8424656" lon="2.3124799">
+ <tag k="name" v="Camélia Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1113739025" lat="48.8423823" lon="2.3125402">
+ <tag k="name" v="Le Méditel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1119291848" lat="48.8476583" lon="2.3515918">
+ <tag k="name" v="Familia Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1119291923" lat="48.8477032" lon="2.3514397">
+ <tag k="name" v="Hôtel Minerve"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1125739569" lat="48.8422510" lon="2.3566614">
+ <tag k="artist_name" v="Eugène Guillaume"/>
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="La Science"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/f/ff/Science_Eug%C3%A8ne_Guillaume_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125739636" lat="48.8420836" lon="2.3567595">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Guy-Crescent Fagon"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/a/ab/Fagon_2_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125739686" lat="48.8422052" lon="2.3566882">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Geoffroy Saint-Hilaire"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/2/20/Geoffroy_st_Hilaire_5_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125739693" lat="48.8424524" lon="2.3565434">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Gay-Lussac"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/1/10/Gay-Lussac_10_m%C3%A9daillon_galerie_%C3%A9volution_MNHM.jpg"/>
+ </node>
+ <node id="1125739737" lat="48.8415818" lon="2.3565800"/>
+ <node id="1125739759" lat="48.8422879" lon="2.3566398">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Lamarck"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/e/e4/Lamarck_6_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125739969" lat="48.8421659" lon="2.3567113">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Georges Cuvier"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/a/a2/Georges_Cuvier_4_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740071" lat="48.8423745" lon="2.3565890">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Jussieu"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/8/89/Jussieu_8_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740122" lat="48.8423314" lon="2.3566143">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Alexandre Brongniart"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://www.mediawiki.org/wiki/File:Alexandre_Brongniart_7_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740179" lat="48.8417247" lon="2.3570097"/>
+ <node id="1125740351" lat="48.8421274" lon="2.3567338">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Buffon"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/c/c4/Buffon_3_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740442" lat="48.8420448" lon="2.3567823">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="Guy de la Brosse"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/d/d6/Guy_de_la_Brosse_1_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740465" lat="48.8424163" lon="2.3565645">
+ <tag k="artwork_type" v="sculpture"/>
+ <tag k="name" v="René-Just Haüy"/>
+ <tag k="note" v="Scupture sur la façade"/>
+ <tag k="sculpture:type" v="marble"/>
+ <tag k="wikipedia:image" v="http://upload.wikimedia.org/wikipedia/commons/3/39/Ren%C3%A9-Just_Ha%C3%BCy_9_m%C3%A9daillon_galerie_%C3%A9volution_MNHN.jpg"/>
+ </node>
+ <node id="1125740485" lat="48.8433144" lon="2.3635599">
+ <tag k="building" v="entrance"/>
+ </node>
+ <node id="1129806494" lat="48.8487209" lon="2.3475835">
+ <tag k="name" v="Hôtel Le Saint-Jacques"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1129806525" lat="48.8486599" lon="2.3478543">
+ <tag k="name" v="Hôtel Moderne Saint-Germain"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1129806765" lat="48.8485999" lon="2.3480789">
+ <tag k="name" v="Hôtel Sully Saint-Germain"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1129978485" lat="48.8491442" lon="2.3571879"/>
+ <node id="1129978487" lat="48.8488890" lon="2.3577151">
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="addr:street" v="Quai Saint-Bernard"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1139993711" lat="48.8456877" lon="2.3450098">
+ <tag k="name" v="Hôtel des Grands Hommes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1142933435" lat="48.8403652" lon="2.3414281">
+ <tag k="name" v="Musée du Service de Santé des Armées"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1159303252" lat="48.8663131" lon="2.3279889">
+ <tag k="name" v="Le Lotti"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1173675828" lat="48.8464515" lon="2.3767359">
+ <tag k="addr:housenumber" v="40"/>
+ <tag k="addr:street" v="Avenue Daumesnil"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1185602629" lat="48.8400740" lon="2.3305797">
+ <tag k="addr:housenumber" v="225"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1188949118" lat="48.8530038" lon="2.2759292">
+ <tag k="name" v="Eiffel Kennedy"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1193609324" lat="48.8614013" lon="2.3198088">
+ <tag k="addr:housenumber" v="121"/>
+ <tag k="addr:street" v="Rue de Lille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1202007942" lat="48.8695661" lon="2.3517456">
+ <tag k="name" v="Hôtel Les Théâtres"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1209893702" lat="48.8705899" lon="2.3500828">
+ <tag k="email" v="info@museeduchocolat.fr"/>
+ <tag k="fax" v="00.33.(0)1.42.29.65.08"/>
+ <tag k="name" v="Choco-Story - Le musée gourmand du chocolat"/>
+ <tag k="opening_hours" v="Mo-Su 10:00-18:00; Jan 1:off; Dec 25:off"/>
+ <tag k="phone" v="00.33.(0)1.42.29.68.60"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museeduchocolat.fr"/>
+ <tag k="wikipedia" v="fr:Musée du Chocolat (Paris)"/>
+ </node>
+ <node id="1211868483" lat="48.8243600" lon="2.2603600"/>
+ <node id="1211868488" lat="48.8242060" lon="2.2605950"/>
+ <node id="1211868494" lat="48.8244490" lon="2.2604220"/>
+ <node id="1211868540" lat="48.8242220" lon="2.2607170"/>
+ <node id="1211868605" lat="48.8242900" lon="2.2608240"/>
+ <node id="1211868644" lat="48.8242030" lon="2.2606100"/>
+ <node id="1211868693" lat="48.8242550" lon="2.2605200"/>
+ <node id="1211868716" lat="48.8243120" lon="2.2604360"/>
+ <node id="1211868732" lat="48.8241840" lon="2.2606390"/>
+ <node id="1211868741" lat="48.8243110" lon="2.2608040"/>
+ <node id="1211868743" lat="48.8244430" lon="2.2604580"/>
+ <node id="1211868750" lat="48.8241970" lon="2.2606580"/>
+ <node id="1211868758" lat="48.8242600" lon="2.2607820"/>
+ <node id="1211868773" lat="48.8241900" lon="2.2606300"/>
+ <node id="1211868784" lat="48.8242630" lon="2.2605090"/>
+ <node id="1211868787" lat="48.8244490" lon="2.2604230"/>
+ <node id="1211868799" lat="48.8242290" lon="2.2605600"/>
+ <node id="1211868826" lat="48.8242950" lon="2.2604530"/>
+ <node id="1211868829" lat="48.8242300" lon="2.2607160"/>
+ <node id="1211868919" lat="48.8242030" lon="2.2605910"/>
+ <node id="1211868963" lat="48.8241920" lon="2.2606790"/>
+ <node id="1211869026" lat="48.8242590" lon="2.2605250"/>
+ <node id="1211869029" lat="48.8243270" lon="2.2604230"/>
+ <node id="1211869033" lat="48.8243380" lon="2.2603970"/>
+ <node id="1211869178" lat="48.8242940" lon="2.2608350"/>
+ <node id="1211869179" lat="48.8244510" lon="2.2604460"/>
+ <node id="1211869228" lat="48.8243680" lon="2.2603430"/>
+ <node id="1211869264" lat="48.8242440" lon="2.2605380"/>
+ <node id="1211869306" lat="48.8242660" lon="2.2607650"/>
+ <node id="1211869377" lat="48.8242440" lon="2.2607320"/>
+ <node id="1211869392" lat="48.8243510" lon="2.2603930"/>
+ <node id="1211869447" lat="48.8244520" lon="2.2604440"/>
+ <node id="1211869455" lat="48.8243590" lon="2.2603580"/>
+ <node id="1211869459" lat="48.8242990" lon="2.2608150"/>
+ <node id="1211869466" lat="48.8242940" lon="2.2608300"/>
+ <node id="1211869499" lat="48.8244500" lon="2.2604470"/>
+ <node id="1211869506" lat="48.8243350" lon="2.2603930"/>
+ <node id="1211869509" lat="48.8244530" lon="2.2604390"/>
+ <node id="1211869533" lat="48.8244510" lon="2.2604250"/>
+ <node id="1211869541" lat="48.8241870" lon="2.2606720"/>
+ <node id="1211869543" lat="48.8244520" lon="2.2604410"/>
+ <node id="1211869551" lat="48.8244090" lon="2.2607660"/>
+ <node id="1211869558" lat="48.8244510" lon="2.2604270"/>
+ <node id="1211869559" lat="48.8244100" lon="2.2607640"/>
+ <node id="1211869569" lat="48.8243280" lon="2.2608870"/>
+ <node id="1211869590" lat="48.8244340" lon="2.2607270"/>
+ <node id="1211869619" lat="48.8243290" lon="2.2608830"/>
+ <node id="1211869626" lat="48.8243150" lon="2.2604410"/>
+ <node id="1211869635" lat="48.8244530" lon="2.2604380"/>
+ <node id="1211869678" lat="48.8242250" lon="2.2607230"/>
+ <node id="1211869682" lat="48.8242270" lon="2.2605560"/>
+ <node id="1211869701" lat="48.8243010" lon="2.2604440"/>
+ <node id="1211869899" lat="48.8244530" lon="2.2604310"/>
+ <node id="1211869940" lat="48.8243270" lon="2.2608810"/>
+ <node id="1211869972" lat="48.8242610" lon="2.2607800"/>
+ <node id="1211869976" lat="48.8244530" lon="2.2604340"/>
+ <node id="1211869995" lat="48.8243980" lon="2.2606710"/>
+ <node id="1211870019" lat="48.8242880" lon="2.2608260"/>
+ <node id="1211870059" lat="48.8243680" lon="2.2603440"/>
+ <node id="1211870106" lat="48.8242470" lon="2.2605430"/>
+ <node id="1211870121" lat="48.8243230" lon="2.2604180"/>
+ <node id="1211870143" lat="48.8243040" lon="2.2604480"/>
+ <node id="1211870179" lat="48.8244500" lon="2.2604480"/>
+ <node id="1211870218" lat="48.8244530" lon="2.2604300"/>
+ <node id="1211870273" lat="48.8244520" lon="2.2604420"/>
+ <node id="1211870293" lat="48.8244530" lon="2.2604360"/>
+ <node id="1211870307" lat="48.8244520" lon="2.2604280"/>
+ <node id="1211870326" lat="48.8244480" lon="2.2604220"/>
+ <node id="1211870359" lat="48.8242700" lon="2.2604990"/>
+ <node id="1211870402" lat="48.8244520" lon="2.2604300"/>
+ <node id="1211870408" lat="48.8244520" lon="2.2604430"/>
+ <node id="1211870420" lat="48.8242340" lon="2.2607170"/>
+ <node id="1211870431" lat="48.8242960" lon="2.2608320"/>
+ <node id="1211870445" lat="48.8244510" lon="2.2604260"/>
+ <node id="1211870463" lat="48.8242970" lon="2.2604570"/>
+ <node id="1211870480" lat="48.8244530" lon="2.2604410"/>
+ <node id="1211870505" lat="48.8242330" lon="2.2605460"/>
+ <node id="1211870511" lat="48.8244910" lon="2.2605310"/>
+ <node id="1211870519" lat="48.8242910" lon="2.2608260"/>
+ <node id="1211870524" lat="48.8244530" lon="2.2604320"/>
+ <node id="1211870565" lat="48.8244500" lon="2.2604240"/>
+ <node id="1211870582" lat="48.8244530" lon="2.2604350"/>
+ <node id="1211870598" lat="48.8243860" lon="2.2603590"/>
+ <node id="1211870604" lat="48.8242610" lon="2.2605050"/>
+ <node id="1211870652" lat="48.8243670" lon="2.2603690"/>
+ <node id="1211870684" lat="48.8243820" lon="2.2603650"/>
+ <node id="1211870702" lat="48.8244530" lon="2.2604370"/>
+ <node id="1211870708" lat="48.8244530" lon="2.2604330"/>
+ <node id="1211870709" lat="48.8243460" lon="2.2608570"/>
+ <node id="1211870747" lat="48.8244500" lon="2.2604250"/>
+ <node id="1211870754" lat="48.8244530" lon="2.2604400"/>
+ <node id="1211870814" lat="48.8242280" lon="2.2607270"/>
+ <node id="1211870824" lat="48.8242250" lon="2.2607310"/>
+ <node id="1211870828" lat="48.8242360" lon="2.2605500"/>
+ <node id="1211870830" lat="48.8243290" lon="2.2604020"/>
+ <node id="1211870833" lat="48.8244480" lon="2.2604210"/>
+ <node id="1211870854" lat="48.8244520" lon="2.2604290"/>
+ <node id="1211870865" lat="48.8244470" lon="2.2604210"/>
+ <node id="1211870868" lat="48.8244510" lon="2.2604450"/>
+ <node id="1211870876" lat="48.8243310" lon="2.2604060"/>
+ <node id="1211870891" lat="48.8243250" lon="2.2608830"/>
+ <node id="1211870892" lat="48.8242350" lon="2.2607460"/>
+ <node id="1211870902" lat="48.8241940" lon="2.2606750"/>
+ <node id="1211870906" lat="48.8242580" lon="2.2607760"/>
+ <node id="1211870952" lat="48.8242190" lon="2.2607210"/>
+ <node id="1211870959" lat="48.8243460" lon="2.2603850"/>
+ <node id="1211870963" lat="48.8242670" lon="2.2604950"/>
+ <node id="1211870965" lat="48.8242440" lon="2.2607330"/>
+ <node id="1211870987" lat="48.8241970" lon="2.2606000"/>
+ <node id="1214588638" lat="48.8797908" lon="2.3207196">
+ <tag k="internet_access" v="yes"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Quality Hotel Opéra - St Lazare"/>
+ <tag k="operator" v="Quality"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1224673086" lat="48.8612404" lon="2.2970542">
+ <tag k="addr:housenumber" v="45"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673118" lat="48.8610929" lon="2.2967514">
+ <tag k="addr:housenumber" v="49"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673265" lat="48.8608661" lon="2.2963144">
+ <tag k="addr:housenumber" v="55"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673333" lat="48.8616860" lon="2.2983095">
+ <tag k="addr:housenumber" v="31"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673422" lat="48.8613751" lon="2.2973810">
+ <tag k="addr:housenumber" v="41"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673486" lat="48.8616376" lon="2.2981362">
+ <tag k="addr:housenumber" v="33"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673653" lat="48.8615082" lon="2.2977385">
+ <tag k="addr:housenumber" v="37"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673677" lat="48.8609571" lon="2.2964819">
+ <tag k="addr:housenumber" v="53"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673715" lat="48.8615616" lon="2.2978907">
+ <tag k="addr:housenumber" v="35"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673736" lat="48.8611622" lon="2.2968936">
+ <tag k="addr:housenumber" v="47"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224673747" lat="48.8617892" lon="2.2986841">
+ <tag k="addr:housenumber" v="27"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1224674043" lat="48.8618357" lon="2.2988656">
+ <tag k="addr:housenumber" v="25"/>
+ <tag k="addr:street" v="Quai Branly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1232995919" lat="48.8763603" lon="2.3353154">
+ <tag k="addr:housenumber" v="73"/>
+ <tag k="addr:street" v="Rue Taitbout"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234174673" lat="48.8825849" lon="2.3279485">
+ <tag k="addr:housenumber" v="76"/>
+ <tag k="addr:street" v="Rue de Clichy"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234174847" lat="48.8814232" lon="2.3283222">
+ <tag k="addr:housenumber" v="61"/>
+ <tag k="addr:street" v="Rue de Clichy"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234196564" lat="48.8813448" lon="2.3282384">
+ <tag k="addr:housenumber" v="2"/>
+ <tag k="addr:street" v="Rue de Parme"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234207262" lat="48.8827928" lon="2.3346741">
+ <tag k="addr:housenumber" v="11"/>
+ <tag k="addr:street" v="Rue Fromentin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234207276" lat="48.8818655" lon="2.3285226">
+ <tag k="addr:housenumber" v="4"/>
+ <tag k="addr:street" v="Rue de Vintimille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1234212793" lat="48.8794613" lon="2.3342407">
+ <tag k="addr:housenumber" v="30"/>
+ <tag k="addr:street" v="Rue La Bruyère"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1235153121" lat="48.8733074" lon="2.3437192">
+ <tag k="name" v="Best Western Hôtel Arcadia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1235153125" lat="48.8733772" lon="2.3438855">
+ <tag k="name" v="Hôtel Lodge du Centre"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1240424639" lat="48.8650637" lon="2.3417127">
+ <tag k="name" v="Hôtel des Victoires"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1242504766" lat="48.8760831" lon="2.3421346">
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="addr:street" v="Rue Buffault"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1244401754" lat="48.8350171" lon="2.4091837">
+ <tag k="entrance" v="yes"/>
+ </node>
+ <node id="1244411691" lat="48.8479558" lon="2.3005672">
+ <tag k="name" v="Les Relais de Paris"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1244411693" lat="48.8465361" lon="2.3054645">
+ <tag k="name" v="Baldi"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1244411699" lat="48.8474966" lon="2.3022867">
+ <tag k="name" v="First Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1244411713" lat="48.8466710" lon="2.3049905">
+ <tag k="name" v="Hôtel Ségur"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1249809153" lat="48.8469542" lon="2.3080133">
+ <tag k="name" v="Bailli de Suffren"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1252383401" lat="48.8390456" lon="2.3925460">
+ <tag k="name" v="Daumesnil Hôtel"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1255346269" lat="48.8441540" lon="2.2472531">
+ <tag k="name" v="Musée-Jardin Paul Landowski"/>
+ <tag k="opening_hours" v="We,Sa,Su 10:00-12:00,14:00-17:00"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1264674869" lat="48.8779440" lon="2.3378300">
+ <tag k="created_by" v="iLOE 1.8"/>
+ <tag k="name" v="Saint-Georges"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1272453678" lat="48.8746819" lon="2.3557025">
+ <tag k="addr:housenumber" v="100"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Denis"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1278464911" lat="48.8796570" lon="2.3549177">
+ <tag k="addr:city" v="paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="12"/>
+ <tag k="addr:postcode" v="75010"/>
+ <tag k="addr:street" v="Boulevard de Denain"/>
+ <tag k="internet_access" v="yes"/>
+ <tag k="name" v="Mercure Paris Terminus Nord"/>
+ <tag k="operator" v="accor hotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1281858379" lat="48.8793580" lon="2.3622336">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue du Château Landon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1281900498" lat="48.8789377" lon="2.3620486">
+ <tag k="addr:housenumber" v="179"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Martin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1281900585" lat="48.8790671" lon="2.3621257">
+ <tag k="addr:housenumber" v="181"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Martin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1281900611" lat="48.8792034" lon="2.3622068">
+ <tag k="addr:housenumber" v="183"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Martin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1281900647" lat="48.8788279" lon="2.3619833">
+ <tag k="addr:housenumber" v="177"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Martin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1282180288" lat="48.8790898" lon="2.3556386">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="31"/>
+ <tag k="addr:postcode" v="75010"/>
+ <tag k="addr:street" v="Rue de Saint-Quentin"/>
+ <tag k="name" v="Quality Hotel Gare Du Nord"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1282625920" lat="48.8956795" lon="2.2620676">
+ <tag k="name" v="Hôtel Ibis"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1282625921" lat="48.8955490" lon="2.2617833">
+ <tag k="name" v="Étap Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1289453765" lat="48.8695983" lon="2.3744775">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Rue de l'Orillon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1289453906" lat="48.8696450" lon="2.3746346">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Rue de l'Orillon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1289454535" lat="48.8696938" lon="2.3747987">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue de l'Orillon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1289533540" lat="48.8783485" lon="2.3572882">
+ <tag k="name" v="Hôtel d'Amiens"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hoteldamiens.com/"/>
+ </node>
+ <node id="1292036898" lat="48.8663652" lon="2.3044054">
+ <tag k="designation" v="Hôtel Plaza Athénée"/>
+ <tag k="name" v="Hôtel Plaza Athénée"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1296703177" lat="48.8652754" lon="2.3282212">
+ <tag k="designation" v="Hotel"/>
+ <tag k="name" v="Le Meurice"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Hôtel Meurice"/>
+ </node>
+ <node id="1296750671" lat="48.8629386" lon="2.2890051">
+ <tag k="designation" v="Museum"/>
+ <tag k="name" v="Cité de l'architecture et du patrimoine"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="limited"/>
+ </node>
+ <node id="1296754169" lat="48.8618163" lon="2.2873421">
+ <tag k="designation" v="Museum"/>
+ <tag k="name" v="Musée de la marine"/>
+ <tag k="phone" v="01.53.65.69.69"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-marine.fr/"/>
+ </node>
+ <node id="1298213998" lat="48.8233030" lon="2.2750610"/>
+ <node id="1298214004" lat="48.8234530" lon="2.2747180"/>
+ <node id="1298214008" lat="48.8236010" lon="2.2747690"/>
+ <node id="1298214265" lat="48.8235360" lon="2.2746350"/>
+ <node id="1298214355" lat="48.8234920" lon="2.2748080"/>
+ <node id="1298214378" lat="48.8235720" lon="2.2746530"/>
+ <node id="1298214530" lat="48.8235140" lon="2.2749250"/>
+ <node id="1298214573" lat="48.8235041" lon="2.2749314"/>
+ <node id="1298214586" lat="48.8235180" lon="2.2749430"/>
+ <node id="1298214746" lat="48.8234860" lon="2.2748140"/>
+ <node id="1298214907" lat="48.8232910" lon="2.2748900"/>
+ <node id="1298214974" lat="48.8232640" lon="2.2749280"/>
+ <node id="1298215032" lat="48.8233529" lon="2.2748243">
+ <tag k="addr:housenumber" v="13"/>
+ <tag k="addr:street" v="Avenue Jean Jaurès"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2011"/>
+ </node>
+ <node id="1298215119" lat="48.8235640" lon="2.2749160"/>
+ <node id="1298215158" lat="48.8234542" lon="2.2749636"/>
+ <node id="1298215184" lat="48.8235360" lon="2.2748050"/>
+ <node id="1298304502" lat="48.8678200" lon="2.3248121">
+ <tag k="designation" v="museo interesante"/>
+ <tag k="name" v="museo louvre"/>
+ <tag k="source" v="www.google.es"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1298907948" lat="48.8643761" lon="2.3308831">
+ <tag k="name" v="Hôtel Saint James &amp; Albany"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1300595272" lat="48.8359882" lon="2.2492059">
+ <tag k="amenity" v="restaurant"/>
+ <tag k="name" v="Le Petit Cap"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="1301073488" lat="48.8586086" lon="2.3822429">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Rue Pache"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1305569699" lat="48.8417997" lon="2.3317623">
+ <tag k="name" v="l’Apostrophe"/>
+ <tag k="stars" v="Tablet Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1307180117" lat="48.8574217" lon="2.3729399">
+ <tag k="addr:housenumber" v="15"/>
+ <tag k="addr:street" v="Rue Bréguet"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1307925969" lat="48.8496524" lon="2.2852415"/>
+ <node id="1307925992" lat="48.8499654" lon="2.2851609"/>
+ <node id="1307926019" lat="48.8497476" lon="2.2838166"/>
+ <node id="1307926078" lat="48.8498783" lon="2.2850656"/>
+ <node id="1307926105" lat="48.8496066" lon="2.2853861"/>
+ <node id="1307926108" lat="48.8497825" lon="2.2855203"/>
+ <node id="1307926124" lat="48.8497052" lon="2.2851422"/>
+ <node id="1307926126" lat="48.8498663" lon="2.2854068"/>
+ <node id="1307926147" lat="48.8496813" lon="2.2851849"/>
+ <node id="1307926264" lat="48.8497593" lon="2.2850729"/>
+ <node id="1307926282" lat="48.8497544" lon="2.2855336"/>
+ <node id="1307926311" lat="48.8498641" lon="2.2853885"/>
+ <node id="1307926358" lat="48.8496843" lon="2.2852140"/>
+ <node id="1307926367" lat="48.8497903" lon="2.2834624"/>
+ <node id="1307926543" lat="48.8496979" lon="2.2854981"/>
+ <node id="1307926582" lat="48.8497566" lon="2.2855602"/>
+ <node id="1307926623" lat="48.8497423" lon="2.2850728"/>
+ <node id="1307926648" lat="48.8498543" lon="2.2850518"/>
+ <node id="1307926654" lat="48.8495687" lon="2.2835935"/>
+ <node id="1307926659" lat="48.8496479" lon="2.2854110"/>
+ <node id="1307926736" lat="48.8498871" lon="2.2853198"/>
+ <node id="1307926754" lat="48.8497370" lon="2.2851139"/>
+ <node id="1307926769" lat="48.8499228" lon="2.2852545"/>
+ <node id="1307926840" lat="48.8498790" lon="2.2850529"/>
+ <node id="1307926853" lat="48.8496843" lon="2.2851808"/>
+ <node id="1307926855" lat="48.8498094" lon="2.2854699"/>
+ <node id="1307926863" lat="48.8498174" lon="2.2849877"/>
+ <node id="1307926865" lat="48.8498947" lon="2.2853065"/>
+ <node id="1307926899" lat="48.8496917" lon="2.2851835"/>
+ <node id="1307926969" lat="48.8498382" lon="2.2854671"/>
+ <node id="1307926982" lat="48.8497876" lon="2.2850162"/>
+ <node id="1307926983" lat="48.8498787" lon="2.2853641"/>
+ <node id="1307927028" lat="48.8496604" lon="2.2854560"/>
+ <node id="1307927043" lat="48.8497020" lon="2.2851483"/>
+ <node id="1307927050" lat="48.8497843" lon="2.2855563"/>
+ <node id="1307927059" lat="48.8499443" lon="2.2851648"/>
+ <node id="1307927067" lat="48.8496159" lon="2.2840329"/>
+ <node id="1307927071" lat="48.8498186" lon="2.2850158"/>
+ <node id="1307927088" lat="48.8497240" lon="2.2851392"/>
+ <node id="1307927102" lat="48.8499209" lon="2.2851378"/>
+ <node id="1307927104" lat="48.8496489" lon="2.2852800"/>
+ <node id="1307927119" lat="48.8497059" lon="2.2851541"/>
+ <node id="1307927121" lat="48.8499461" lon="2.2852118"/>
+ <node id="1307927237" lat="48.8499009" lon="2.2850950"/>
+ <node id="1307927262" lat="48.8496473" lon="2.2852490"/>
+ <node id="1307927263" lat="48.8499235" lon="2.2853060"/>
+ <node id="1307927278" lat="48.8497352" lon="2.2850850"/>
+ <node id="1307927303" lat="48.8499669" lon="2.2852129"/>
+ <node id="1307927306" lat="48.8496194" lon="2.2853354"/>
+ <node id="1307927363" lat="48.8498349" lon="2.2854223"/>
+ <node id="1307927387" lat="48.8498408" lon="2.2854062"/>
+ <node id="1307927435" lat="48.8496772" lon="2.2854566"/>
+ <node id="1307927476" lat="48.8497260" lon="2.2854998"/>
+ <node id="1307927507" lat="48.8496254" lon="2.2853828"/>
+ <node id="1307927516" lat="48.8495269" lon="2.2839423"/>
+ <node id="1307927548" lat="48.8498614" lon="2.2835678"/>
+ <node id="1307927576" lat="48.8497031" lon="2.2833759"/>
+ <node id="1307927589" lat="48.8496979" lon="2.2854815"/>
+ <node id="1307927867" lat="48.8497865" lon="2.2849904"/>
+ <node id="1307927872" lat="48.8496692" lon="2.2852403"/>
+ <node id="1307927924" lat="48.8499142" lon="2.2851298"/>
+ <node id="1307927933" lat="48.8494575" lon="2.2838369"/>
+ <node id="1307927937" lat="48.8496022" lon="2.2853384"/>
+ <node id="1307927991" lat="48.8499140" lon="2.2850906"/>
+ <node id="1307928009" lat="48.8496609" lon="2.2854242"/>
+ <node id="1307928010" lat="48.8498885" lon="2.2853652"/>
+ <node id="1313543587" lat="48.8574910" lon="2.3727659">
+ <tag k="addr:housenumber" v="10"/>
+ <tag k="addr:street" v="Rue Froment"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1313543594" lat="48.8577006" lon="2.3725771">
+ <tag k="addr:housenumber" v="12"/>
+ <tag k="addr:street" v="Rue Froment"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1314161997" lat="48.8246783" lon="2.3009359">
+ <tag k="name" v="B&amp;B Hotel Paris Malakoff"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1324775026" lat="48.8768201" lon="2.3458424">
+ <tag k="name" v="william's opera"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1336873192" lat="48.8749151" lon="2.3431481">
+ <tag k="name" v="Musée de la franc-maçonnerie"/>
+ <tag k="phone" v="01.45.23.74.09"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.museefm.org/"/>
+ </node>
+ <node id="1343714770" lat="48.8834295" lon="2.3251389">
+ <tag k="entrance" v="yes"/>
+ </node>
+ <node id="1348554962" lat="48.8755250" lon="2.3585349">
+ <tag k="name" v="Ibis Paris Gare de l'Est"/>
+ <tag k="operator" v="Accor"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1350641894" lat="48.8466774" lon="2.3698622">
+ <tag k="name" v="Hôtel des Deux Gares"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1352878756" lat="48.8864077" lon="2.2949505">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:housenumber" v="166"/>
+ <tag k="addr:street" v="Boulevard Berthier"/>
+ <tag k="name" v="Hôtel de Banville"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1362787032" lat="48.8226061" lon="2.3587156">
+ <tag k="name" v="Maison-Blanche"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1365424464" lat="48.8603776" lon="2.2978274"/>
+ <node id="1365433411" lat="48.8606022" lon="2.2985829"/>
+ <node id="1367996793" lat="48.8411575" lon="2.3473052">
+ <tag k="designation" v="Espace des Sciences Pierre-Gilles-de-Gennes"/>
+ <tag k="name" v="Espace des Sciences Pierre-Gilles-de-Gennes"/>
+ <tag k="source" v="http://www.espgg.org"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1370205558" lat="48.8513311" lon="2.3755653">
+ <tag k="addr:housenumber" v="92"/>
+ <tag k="addr:street" v="Rue du Faubourg Saint-Antoine"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1372868597" lat="48.8463235" lon="2.3765435">
+ <tag k="addr:housenumber" v="31b"/>
+ <tag k="addr:street" v="Boulevard Diderot"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1372868602" lat="48.8463445" lon="2.3767300">
+ <tag k="addr:housenumber" v="31t"/>
+ <tag k="addr:street" v="Boulevard Diderot"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1372919974" lat="48.8499249" lon="2.3462523">
+ <tag k="name" v="Home Latin"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1372919987" lat="48.8498614" lon="2.3465433">
+ <tag k="name" v="Marignan"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1373609040" lat="48.8498802" lon="2.2884724">
+ <tag k="name" v="Mercure"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1376158927" lat="48.8479302" lon="2.3878050">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Rue Claude Tillier"/>
+ <tag k="internet_access" v="no"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Européen"/>
+ <tag k="smoking" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1376197695" lat="48.8496290" lon="2.3797667">
+ <tag k="addr:housenumber" v="11"/>
+ <tag k="addr:street" v="Passage Brûlon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1376197941" lat="48.8495597" lon="2.3796713">
+ <tag k="addr:housenumber" v="64"/>
+ <tag k="addr:street" v="Rue Crozatier"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1376197967" lat="48.8496083" lon="2.3799652">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Passage Brûlon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1376730432" lat="48.8464521" lon="2.3765801">
+ <tag k="addr:housenumber" v="18"/>
+ <tag k="addr:street" v="Rue Hector Malot"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1381610689" lat="48.8565109" lon="2.3263842">
+ <tag k="name" v="Deyrolle"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1381936927" lat="48.8614344" lon="2.3521787"/>
+ <node id="1390840560" lat="48.8366946" lon="2.3825237">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue Jean Renoir"/>
+ </node>
+ <node id="1390843371" lat="48.8367345" lon="2.3825960">
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:street" v="Rue Jean Renoir"/>
+ </node>
+ <node id="1390843902" lat="48.8370550" lon="2.3829347">
+ <tag k="addr:housenumber" v="43"/>
+ <tag k="addr:street" v="Rue de Bercy"/>
+ </node>
+ <node id="1390843992" lat="48.8371260" lon="2.3828451">
+ <tag k="addr:housenumber" v="45"/>
+ <tag k="addr:street" v="Rue de Bercy"/>
+ </node>
+ <node id="1390844054" lat="48.8371891" lon="2.3827654">
+ <tag k="addr:housenumber" v="47"/>
+ <tag k="addr:street" v="Rue de Bercy"/>
+ </node>
+ <node id="1390844106" lat="48.8372239" lon="2.3827215">
+ <tag k="addr:housenumber" v="49"/>
+ <tag k="addr:street" v="Rue de Bercy"/>
+ </node>
+ <node id="1390844158" lat="48.8367792" lon="2.3826770">
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:street" v="Rue Jean Renoir"/>
+ </node>
+ <node id="1390844212" lat="48.8366928" lon="2.3824795">
+ <tag k="addr:housenumber" v="50"/>
+ <tag k="addr:street" v="Rue Paul Belmondo"/>
+ </node>
+ <node id="1390844239" lat="48.8372672" lon="2.3826668">
+ <tag k="addr:housenumber" v="51"/>
+ <tag k="addr:street" v="Rue de Bercy"/>
+ </node>
+ <node id="1390844272" lat="48.8367544" lon="2.3824014">
+ <tag k="addr:housenumber" v="52"/>
+ <tag k="addr:street" v="Rue Paul Belmondo"/>
+ </node>
+ <node id="1390844367" lat="48.8368027" lon="2.3823402">
+ <tag k="addr:housenumber" v="54"/>
+ <tag k="addr:street" v="Rue Paul Belmondo"/>
+ </node>
+ <node id="1390844876" lat="48.8368494" lon="2.3828041">
+ <tag k="addr:housenumber" v="7"/>
+ <tag k="addr:street" v="Rue Jean Renoir"/>
+ </node>
+ <node id="1390845132" lat="48.8369389" lon="2.3829661">
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:street" v="Rue Jean Renoir"/>
+ </node>
+ <node id="1395307648" lat="48.8373645" lon="2.3729429">
+ <tag k="addr:housenumber" v="6"/>
+ <tag k="addr:street" v="Boulevard Vincent Auriol"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1399910027" lat="48.8519070" lon="2.2652250">
+ <tag k="name" v="Fondation Le Corbusier"/>
+ <tag k="phone" v="01.42.88.41.53"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.fondationlecorbusier.asso.fr"/>
+ </node>
+ <node id="1399929421" lat="48.8703234" lon="2.2765175">
+ <tag k="name" v="Musée de la Contrefaçon"/>
+ <tag k="phone" v="01.56.26.14.03"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.unifab.com"/>
+ </node>
+ <node id="1399940600" lat="48.8716440" lon="2.2881063">
+ <tag k="name" v="Musée Dapper"/>
+ <tag k="phone" v="01.45.00.91.75"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.dapper.com.fr"/>
+ </node>
+ <node id="1400000200" lat="48.8531533" lon="2.3612034">
+ <tag k="name" v="Musée de la Curiositée et de la Magie"/>
+ <tag k="phone" v="01;42.72.13.26"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.museedelamagie.com/"/>
+ </node>
+ <node id="1401461539" lat="48.8844882" lon="2.3679266">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1416514584" lat="48.8720379" lon="2.3446636">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="9"/>
+ <tag k="addr:postcode" v="75009"/>
+ <tag k="addr:street" v="Cité Bergère"/>
+ <tag k="beds" v="45"/>
+ <tag k="name" v="Hôtel d'Espagne"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1419519631" lat="48.8327663" lon="2.3893382">
+ <tag k="name" v="Musée des Arts Forains"/>
+ <tag k="phone" v="01.43.40.16.22"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.pavillons-de-bercy.com/"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Musée des Arts forains"/>
+ </node>
+ <node id="1425940779" lat="48.8302877" lon="2.3141843">
+ <tag k="name" v="Musée Adzak - Espace d'Art International"/>
+ <tag k="phone" v="01.45.43.06.98"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1425974260" lat="48.8557584" lon="2.3320096">
+ <tag k="name" v="Musée d'Anatomie Delmas-Orfila-Rouvière"/>
+ <tag k="phone" v="01.42.86.20.47"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.mairie6.paris.fr"/>
+ </node>
+ <node id="1425982378" lat="48.8716204" lon="2.2814131">
+ <tag k="name" v="Musée Arménien de France"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.le-maf.com/"/>
+ </node>
+ <node id="1426016793" lat="48.8513494" lon="2.3555880">
+ <tag k="name" v="Musée Boleslas Biegas - Musée Adam Mickiewicz"/>
+ <tag k="phone" v="01.43.54.35.61"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.bibliotheque-polonaise-paris-shlp.fr"/>
+ </node>
+ <node id="1426016798" lat="48.8483211" lon="2.3294718">
+ <tag k="name" v="Musée Bible et Terre Sainte"/>
+ <tag k="phone" v="01.45.44.09.55"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.icp.fr"/>
+ </node>
+ <node id="1426025878" lat="48.8677268" lon="2.3223990">
+ <tag k="name" v="Musée Bouilhet-Christofle - Musée d'Orfèvrerie"/>
+ <tag k="note" v="date d'ouverture inconnue"/>
+ <tag k="phone" v="01.49.22.41.15"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.christofle.com/"/>
+ </node>
+ <node id="1426025882" lat="48.8431877" lon="2.3185981">
+ <tag k="name" v="Musée Bourdelle"/>
+ <tag k="phone" v="01.49.54.73.73"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </node>
+ <node id="1426089606" lat="48.8591945" lon="2.2851420">
+ <tag k="name" v="Musée Clemenceau"/>
+ <tag k="phone" v="01.45.20.53.41"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-clemenceau.fr/"/>
+ </node>
+ <node id="1426093837" lat="48.8522269" lon="2.3350050">
+ <tag k="name" v="Musée-Librairie du Compagnonnage"/>
+ <tag k="phone" v="01.43.26.25.03"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.compagnons.org/"/>
+ </node>
+ <node id="1426110613" lat="48.8506815" lon="2.3410772">
+ <tag k="name" v="Musée d'Anatomie Pathologique Dupuytren"/>
+ <tag k="phone" v="01.42.34.68.60"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.upmc.fr/"/>
+ </node>
+ <node id="1426135888" lat="48.8476741" lon="2.3140391">
+ <tag k="name" v="Musée Valentin Haüy"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.avh.asso.fr/"/>
+ </node>
+ <node id="1426135889" lat="48.8829411" lon="2.3077935">
+ <tag k="name" v="Musée Henner"/>
+ <tag k="phone" v="01.47.63.42.73"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-henner.fr/"/>
+ </node>
+ <node id="1426176058" lat="48.8399183" lon="2.3191231">
+ <tag k="layer" v="1"/>
+ <tag k="name" v="Musée du Général Leclerc de Hauteclocque et de la Libération de Paris - Musée Jean Moulin"/>
+ <tag k="phone" v="01.40.64.39.44"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </node>
+ <node id="1426176059" lat="48.8513629" lon="2.3410046">
+ <tag k="name" v="Musée d'histoire de la Médecine"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.bium.univ-paris5.fr/musee/"/>
+ </node>
+ <node id="1426215339" lat="48.8263909" lon="2.3306427">
+ <tag k="historic" v="yes"/>
+ <tag k="name" v="Musée Lénine"/>
+ <tag k="note" v="le musée est actuellement fermé"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1426215340" lat="48.8547304" lon="2.3248616">
+ <tag k="name" v="Musée Maillol"/>
+ <tag k="phone" v="01.42.22.59.58"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museemaillol.com/"/>
+ </node>
+ <node id="1426215341" lat="48.8554427" lon="2.3276941">
+ <tag k="name" v="Musée des Lettres et Manuscrits"/>
+ <tag k="phone" v="01.42.22.48.48"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedeslettres.fr/"/>
+ </node>
+ <node id="1426245243" lat="48.8434645" lon="2.3207843">
+ <tag k="name" v="Musée du Montparnasse"/>
+ <tag k="phone" v="01.42.22.91.96"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedumontparnasse.net/"/>
+ </node>
+ <node id="1426245245" lat="48.8456499" lon="2.3395974">
+ <tag k="name" v="Musée de Mineralogie"/>
+ <tag k="phone" v="01.40.51.91.39"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.mines-paristech.fr/"/>
+ </node>
+ <node id="1426245253" lat="48.8434624" lon="2.3362665">
+ <tag k="name" v="Musée Moissan"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </node>
+ <node id="1426281643" lat="48.8536113" lon="2.3476422">
+ <tag k="fare" v="full:4; discount:3"/>
+ <tag k="name" v="Crypte Archéologique du Parvis Notre-Dame"/>
+ <tag k="phone" v="01.55.42.50.10"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="crypte.paris.fr/"/>
+ <tag k="wikipedia" v="fr:Crypte archéologique du parvis Notre-Dame"/>
+ </node>
+ <node id="1426281644" lat="48.8718820" lon="2.3312120">
+ <tag k="name" v="Bibliothèque-Musée de l'Opéra"/>
+ <tag k="phone" v="01.53.79.37.47"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.bnf.fr/"/>
+ </node>
+ <node id="1426816231" lat="48.8656784" lon="2.3307909">
+ <tag k="name" v="Musée Pierre Marly - Lunettes et Lorgnettes"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1426816232" lat="48.8495079" lon="2.3483856">
+ <tag k="name" v="Musée de la Préfecture de Police"/>
+ <tag k="phone" v="01.44.41.52.50"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="prefecturedepolice.interieur.gouv.fr"/>
+ </node>
+ <node id="1430559114" lat="48.8565865" lon="2.3275569">
+ <tag k="name" v="Hôtel Montalembert"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1432170194" lat="48.8473466" lon="2.3995162">
+ <tag k="name" v="Grand Hôtel du Bel Air"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1432261555" lat="48.8990359" lon="2.2464405">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1432476646" lat="48.8504634" lon="2.2923793">
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:street" v="Rue de Lourmel"/>
+ <tag k="fax" v="01 45753668"/>
+ <tag k="name" v="Hôtel Eiffel Petit Louvre"/>
+ <tag k="phone" v="01 45781712"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotel-paris-petitlouvre.com/"/>
+ </node>
+ <node id="1432483166" lat="48.8413238" lon="2.3028511">
+ <tag k="name" v="Hôtel Delos Vaugirard"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotel-delos-vaugirard-paris.com/"/>
+ </node>
+ <node id="1440131523" lat="48.8508359" lon="2.3436955"/>
+ <node id="1440131535" lat="48.8508692" lon="2.3435684"/>
+ <node id="1440131536" lat="48.8508704" lon="2.3437194"/>
+ <node id="1440131540" lat="48.8509036" lon="2.3435848"/>
+ <node id="1450939224" lat="48.8291690" lon="2.4013121">
+ <tag k="name" v="Citéa"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1457528054" lat="48.8256664" lon="2.3232257">
+ <tag k="name" v="Hôtel Chatillon Paris Montparnasse"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1461394098" lat="48.8811174" lon="2.3514426">
+ <tag k="email" v="resa@avalonparis.com"/>
+ <tag k="fax" v="+33 (0)1 42855001"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="AVALON HOTEL"/>
+ <tag k="phone" v="+33 (0)1 42855000"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="avalonparis.com"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1465052905" lat="48.8687731" lon="2.2829281">
+ <tag k="name" v="Kickers"/>
+ <tag k="shop" v="shoes"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="1471218145" lat="48.8318916" lon="2.3395499">
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="addr:street" v="Boulevard Saint-Jacques"/>
+ <tag k="entrance" v="yes"/>
+ <tag k="name" v="Centre de Conférences"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1471218153" lat="48.8317333" lon="2.3401174">
+ <tag k="entrance" v="yes"/>
+ <tag k="name" v="Entrée Principale"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </node>
+ <node id="1475026114" lat="48.8727937" lon="2.3157855">
+ <tag k="name" v="Hôtellerie Paris Saint-Honoré"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="www.paris-saint-honore.com"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1477656331" lat="48.8636313" lon="2.3690033">
+ <tag k="name" v="La croix de Malte"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1481765830" lat="48.8716438" lon="2.3349837">
+ <tag k="name" v="Grand Hotel Haussmann"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1481765832" lat="48.8714207" lon="2.3349194">
+ <tag k="name" v="Hôtel Helder Opera"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1481765835" lat="48.8713271" lon="2.3351551">
+ <tag k="name" v="Hôtel London"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1481765836" lat="48.8718954" lon="2.3350541">
+ <tag k="name" v="Hôtel Opera Vivaldi"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1483017718" lat="48.8768039" lon="2.3336297">
+ <tag k="fax" v="+33-1-49950443"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="name" v="Hôtel Langlois"/>
+ <tag k="phone" v="+33-1-48747824"/>
+ <tag k="smoking" v="no"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1485934585" lat="48.8748533" lon="2.3537731">
+ <tag k="name" v="Le Manoir"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1486313991" lat="48.8736518" lon="2.3520817">
+ <tag k="name" v="Hôtel des Alpes"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1486313995" lat="48.8711767" lon="2.3499045">
+ <tag k="name" v="Hôtel Chamonix"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1488772093" lat="48.8773396" lon="2.3560770">
+ <tag k="name" v="Hôtel Aris Nord"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1489177430" lat="48.8846667" lon="2.3765525">
+ <tag k="name" v="Etap"/>
+ <tag k="operator" v="Accor hotels"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1489177457" lat="48.8812864" lon="2.3650200">
+ <tag k="name" v="Metropole La Fayette"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1490922327" lat="48.8679824" lon="2.3362288">
+ <tag k="name" v="Baudelaire"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1502802829" lat="48.8172120" lon="2.2489840"/>
+ <node id="1502802832" lat="48.8172240" lon="2.2490600"/>
+ <node id="1502802839" lat="48.8172300" lon="2.2490690"/>
+ <node id="1502802846" lat="48.8172430" lon="2.2490250"/>
+ <node id="1502802854" lat="48.8172650" lon="2.2491190"/>
+ <node id="1502802856" lat="48.8172720" lon="2.2491300"/>
+ <node id="1502802874" lat="48.8173240" lon="2.2487850"/>
+ <node id="1502802899" lat="48.8173420" lon="2.2490060"/>
+ <node id="1502802904" lat="48.8173480" lon="2.2490050"/>
+ <node id="1502802927" lat="48.8174390" lon="2.2490710"/>
+ <node id="1502802928" lat="48.8174420" lon="2.2490600"/>
+ <node id="1502802941" lat="48.8175210" lon="2.2489550"/>
+ <node id="1504098153" lat="48.8710170" lon="2.3202503">
+ <tag k="name" v="Alison"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1504098162" lat="48.8710343" lon="2.3234791">
+ <tag k="name" v="Amarante Beau Manoir"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1504098196" lat="48.8706452" lon="2.3219942">
+ <tag k="name" v="La Sanguine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1504098211" lat="48.8710532" lon="2.3247894">
+ <tag k="name" v="Madeleine Plaza"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1504098313" lat="48.8668697" lon="2.3106944">
+ <tag k="man_made" v="surveillance"/>
+ <tag k="surveillance" v="outdoor"/>
+ </node>
+ <node id="1504098324" lat="48.8705622" lon="2.3263811">
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="limited"/>
+ </node>
+ <node id="1506236223" lat="48.8149680" lon="2.2513800"/>
+ <node id="1506236260" lat="48.8150880" lon="2.2515160"/>
+ <node id="1506236275" lat="48.8151120" lon="2.2510650"/>
+ <node id="1506236277" lat="48.8151130" lon="2.2510510"/>
+ <node id="1506236289" lat="48.8151160" lon="2.2510700"/>
+ <node id="1506236304" lat="48.8151160" lon="2.2510570"/>
+ <node id="1506236310" lat="48.8151470" lon="2.2509820"/>
+ <node id="1506236321" lat="48.8151510" lon="2.2509860"/>
+ <node id="1506236328" lat="48.8151580" lon="2.2509740"/>
+ <node id="1506236330" lat="48.8151630" lon="2.2509810"/>
+ <node id="1506236352" lat="48.8151960" lon="2.2509140"/>
+ <node id="1506236433" lat="48.8153230" lon="2.2510600"/>
+ <node id="1528113319" lat="48.8547412" lon="2.3562503"/>
+ <node id="1541521701" lat="48.8265002" lon="2.4051977">
+ <tag k="name" v="Novotel Paris Charenton"/>
+ <tag k="operator" v="Novotel"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1541591962" lat="48.8695851" lon="2.3744330">
+ <tag k="amenity" v="pub"/>
+ <tag k="name" v="Les Artistes Pub"/>
+ <tag k="source" v="survey"/>
+ </node>
+ <node id="1541939764" lat="48.8290518" lon="2.2632809">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1545720490" lat="48.8285878" lon="2.2628048"/>
+ <node id="1545720498" lat="48.8290729" lon="2.2635106"/>
+ <node id="1545720502" lat="48.8291285" lon="2.2630911"/>
+ <node id="1567274107" lat="48.8959975" lon="2.2802012">
+ <tag k="name" v="Hermes"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1567274132" lat="48.8957614" lon="2.2798258">
+ <tag k="name" v="Hôtel du Parc"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1567274146" lat="48.8958976" lon="2.2800316">
+ <tag k="name" v="La Champagne"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1567274176" lat="48.8955865" lon="2.2800380">
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1579620894" lat="48.8261478" lon="2.3244074">
+ <tag k="name" v="Le Clos d'Alésia"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1596738663" lat="48.8469348" lon="2.4080026">
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Hipotel Paris Nation"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hipotel.fr/hipotel_nation/index.htm"/>
+ </node>
+ <node id="1602584024" lat="48.8853360" lon="2.3350946">
+ <tag k="designation" v="**"/>
+ <tag k="name" v="du Moulin"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1606575931" lat="48.8585526" lon="2.3597161">
+ <tag k="name" v="Centre Culturel Suisse"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1614306685" lat="48.8516043" lon="2.2896851">
+ <tag k="addr:housenumber" v="8"/>
+ <tag k="addr:street" v="Rue Saint-Charles"/>
+ <tag k="fax" v="+33145794084"/>
+ <tag k="name" v="France Eiffel"/>
+ <tag k="phone" v="+33145793335"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1614470597" lat="48.8351446" lon="2.3516125"/>
+ <node id="1615799968" lat="48.8544424" lon="2.3356553">
+ <tag k="addr:housenumber" v="6"/>
+ </node>
+ <node id="1617770462" lat="48.8242784" lon="2.2606419">
+ <tag k="name" v="Etap Hôtel"/>
+ <tag k="phone" v="+33892680713"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.etaphotel.com/fr/hotel-2596-etap-hotel-issy-les-moulineaux"/>
+ </node>
+ <node id="1617770466" lat="48.8223083" lon="2.2577699">
+ <tag k="internet_access" v="wlan"/>
+ <tag k="name" v="Campanile"/>
+ <tag k="phone" v="+33147364200"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.ibishotel.com/fr/hotel-7848-ibis-paris-issy-les-moulineaux-val-de-seine/"/>
+ </node>
+ <node id="1619504633" lat="48.8884364" lon="2.3408665"/>
+ <node id="1623726837" lat="48.8178303" lon="2.4232264"/>
+ <node id="1623726847" lat="48.8178309" lon="2.4232543"/>
+ <node id="1623726855" lat="48.8178318" lon="2.4231221"/>
+ <node id="1623726858" lat="48.8178328" lon="2.4230356"/>
+ <node id="1623726861" lat="48.8178345" lon="2.4228619"/>
+ <node id="1623726868" lat="48.8178354" lon="2.4228185"/>
+ <node id="1623726873" lat="48.8178369" lon="2.4226431"/>
+ <node id="1623726881" lat="48.8178382" lon="2.4225579"/>
+ <node id="1623726890" lat="48.8178397" lon="2.4231217"/>
+ <node id="1623726891" lat="48.8178398" lon="2.4230362"/>
+ <node id="1623726897" lat="48.8178407" lon="2.4223828"/>
+ <node id="1623726908" lat="48.8178425" lon="2.4228616"/>
+ <node id="1623726912" lat="48.8178429" lon="2.4228188"/>
+ <node id="1623726923" lat="48.8178452" lon="2.4226434"/>
+ <node id="1623726930" lat="48.8178453" lon="2.4233858"/>
+ <node id="1623726948" lat="48.8178467" lon="2.4225587"/>
+ <node id="1623726960" lat="48.8178493" lon="2.4223825"/>
+ <node id="1623726978" lat="48.8178495" lon="2.4223310"/>
+ <node id="1623727533" lat="48.8179596" lon="2.4232135"/>
+ <node id="1623727536" lat="48.8179618" lon="2.4230251"/>
+ <node id="1623727543" lat="48.8179640" lon="2.4228222"/>
+ <node id="1623727561" lat="48.8179665" lon="2.4223275"/>
+ <node id="1623727643" lat="48.8179840" lon="2.4228229"/>
+ <node id="1623727651" lat="48.8179862" lon="2.4226635"/>
+ <node id="1623727673" lat="48.8179889" lon="2.4224305"/>
+ <node id="1623727958" lat="48.8180324" lon="2.4223541"/>
+ <node id="1623727961" lat="48.8180325" lon="2.4223853"/>
+ <node id="1623728016" lat="48.8180411" lon="2.4233877"/>
+ <node id="1623728020" lat="48.8180412" lon="2.4232153"/>
+ <node id="1623728035" lat="48.8180432" lon="2.4224322"/>
+ <node id="1623728037" lat="48.8180438" lon="2.4223855"/>
+ <node id="1623728039" lat="48.8180440" lon="2.4223285"/>
+ <node id="1623728040" lat="48.8180440" lon="2.4223554"/>
+ <node id="1625405659" lat="48.8514717" lon="2.3483308">
+ <tag k="name" v="Le Colbert"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1639117243" lat="48.8545675" lon="2.2899559"/>
+ <node id="1639117269" lat="48.8545835" lon="2.2899275"/>
+ <node id="1639117445" lat="48.8546530" lon="2.2896723"/>
+ <node id="1639117506" lat="48.8546661" lon="2.2896236"/>
+ <node id="1639117510" lat="48.8546696" lon="2.2895190"/>
+ <node id="1639117573" lat="48.8546909" lon="2.2895309"/>
+ <node id="1639117604" lat="48.8547832" lon="2.2893127"/>
+ <node id="1639117610" lat="48.8547843" lon="2.2902156"/>
+ <node id="1639117618" lat="48.8547889" lon="2.2895428"/>
+ <node id="1639117624" lat="48.8547942" lon="2.2893300"/>
+ <node id="1639117628" lat="48.8548079" lon="2.2893575"/>
+ <node id="1639117629" lat="48.8548153" lon="2.2894500"/>
+ <node id="1639118068" lat="48.8548188" lon="2.2895621"/>
+ <node id="1639118072" lat="48.8548221" lon="2.2895536"/>
+ <node id="1639118075" lat="48.8548242" lon="2.2895505"/>
+ <node id="1639118078" lat="48.8548247" lon="2.2893959"/>
+ <node id="1639118102" lat="48.8548264" lon="2.2895487"/>
+ <node id="1639118107" lat="48.8548276" lon="2.2894034"/>
+ <node id="1639118109" lat="48.8548300" lon="2.2895467"/>
+ <node id="1639118112" lat="48.8548347" lon="2.2895460"/>
+ <node id="1639118115" lat="48.8548384" lon="2.2895469"/>
+ <node id="1639118118" lat="48.8548430" lon="2.2895498"/>
+ <node id="1639118122" lat="48.8548463" lon="2.2895544"/>
+ <node id="1639118126" lat="48.8548486" lon="2.2895598"/>
+ <node id="1639118129" lat="48.8548493" lon="2.2895807"/>
+ <node id="1639118133" lat="48.8548500" lon="2.2895662"/>
+ <node id="1639118136" lat="48.8548500" lon="2.2895715"/>
+ <node id="1639118150" lat="48.8548630" lon="2.2899299"/>
+ <node id="1639118154" lat="48.8548649" lon="2.2899213"/>
+ <node id="1639118159" lat="48.8548676" lon="2.2899105"/>
+ <node id="1639118163" lat="48.8548705" lon="2.2898991"/>
+ <node id="1639118167" lat="48.8548738" lon="2.2898859"/>
+ <node id="1639118172" lat="48.8548759" lon="2.2898738"/>
+ <node id="1639118177" lat="48.8548782" lon="2.2898610"/>
+ <node id="1639118184" lat="48.8548804" lon="2.2898492"/>
+ <node id="1639118187" lat="48.8548823" lon="2.2898372"/>
+ <node id="1639118191" lat="48.8548842" lon="2.2898232"/>
+ <node id="1639118195" lat="48.8548856" lon="2.2898109"/>
+ <node id="1639118213" lat="48.8548864" lon="2.2896040"/>
+ <node id="1639118216" lat="48.8548870" lon="2.2897978"/>
+ <node id="1639118219" lat="48.8548872" lon="2.2896132"/>
+ <node id="1639118222" lat="48.8548883" lon="2.2897848"/>
+ <node id="1639118225" lat="48.8548886" lon="2.2896259"/>
+ <node id="1639118227" lat="48.8548893" lon="2.2897714"/>
+ <node id="1639118230" lat="48.8548894" lon="2.2896394"/>
+ <node id="1639118233" lat="48.8548902" lon="2.2897577"/>
+ <node id="1639118235" lat="48.8548907" lon="2.2896520"/>
+ <node id="1639118237" lat="48.8548910" lon="2.2896658"/>
+ <node id="1639118240" lat="48.8548914" lon="2.2896779"/>
+ <node id="1639118268" lat="48.8548914" lon="2.2897450"/>
+ <node id="1639118275" lat="48.8548917" lon="2.2897176"/>
+ <node id="1639118278" lat="48.8548917" lon="2.2897318"/>
+ <node id="1639118283" lat="48.8548919" lon="2.2896929"/>
+ <node id="1639118286" lat="48.8548922" lon="2.2897053"/>
+ <node id="1654620488" lat="48.8618661" lon="2.3831677">
+ <tag k="name" v="Modern Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1656250107" lat="48.8533658" lon="2.3493036">
+ <tag k="fare" v="full:8,50; discount:5,50"/>
+ <tag k="name" v="Tour de la Cathédrale"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://notre-dame-de-paris.monuments-nationaux.fr/fr/bdd/page/visites"/>
+ </node>
+ <node id="1664169845" lat="48.8428077" lon="2.3336102"/>
+ <node id="1664169848" lat="48.8429825" lon="2.3339562"/>
+ <node id="1664266634" lat="48.8428560" lon="2.3335506"/>
+ <node id="1664266635" lat="48.8428366" lon="2.3335745">
+ <tag k="addr:housenumber" v="100b"/>
+ <tag k="addr:street" v="Rue d’Assas"/>
+ </node>
+ <node id="1668603098" lat="48.8502622" lon="2.3730838">
+ <tag k="name" v="Luxor Bastille"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1668723307" lat="48.8952730" lon="2.3431920">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="name" v="Le Versigny"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1668780912" lat="48.8929320" lon="2.3433000">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1669021615" lat="48.8937240" lon="2.3418900">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1670119926" lat="48.8700380" lon="2.3601770">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="name" v="Best Western Aïda Marais"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1670123633" lat="48.8698590" lon="2.3605340">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="name" v="Hôtel des 3 nations"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1670126151" lat="48.8697990" lon="2.3610220">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="name" v="Hôtel du Prince Eugène"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1670267633" lat="48.8688100" lon="2.3601130">
+ <tag k="name" v="Hôtel Excelsior"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1670300893" lat="48.8704210" lon="2.3610030">
+ <tag k="name" v="Hôtel Tours Magenta"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1671919956" lat="48.8877198" lon="2.3405290">
+ <tag k="addr:housenumber" v="12"/>
+ <tag k="addr:street" v="Rue Cortot"/>
+ </node>
+ <node id="1672302941" lat="48.8303814" lon="2.3234197">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1673086776" lat="48.8419958" lon="2.3484398">
+ <tag k="name" v="Résidence Universitaire"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1673104011" lat="48.8432579" lon="2.3497680">
+ <tag k="name" v="Résidence Mouffetard"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1678185719" lat="48.8608218" lon="2.3464552">
+ <tag k="amenity" v="drinking_water"/>
+ <tag k="name" v="Novotel Paris Les Halles"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1679237543" lat="48.8693769" lon="2.3310435">
+ <tag k="name" v="Hôtel Westminster"/>
+ <tag k="source" v="www.warwickwestminsteropera.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1682768696" lat="48.8670604" lon="2.3270370">
+ <tag k="designation" v="Luxury Hotel"/>
+ <tag k="name" v="Mandarin Oriental"/>
+ <tag k="source" v="www.mandarinoriental.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1682770299" lat="48.8721592" lon="2.3333671">
+ <tag k="designation" v="Hotel"/>
+ <tag k="name" v="W Paris Opéra"/>
+ <tag k="source" v="www.wparisopera.fr"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1684818338" lat="48.8428196" lon="2.3426105">
+ <tag k="name" v="Comfort Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1685650818" lat="48.8430085" lon="2.3422700">
+ <tag k="name" v="Relais Saint Jacques"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1685932856" lat="48.8566236" lon="2.3744896">
+ <tag k="name" v="Galerie Anatome"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1686633920" lat="48.8736554" lon="2.3360245">
+ <tag k="designation" v="Hôtel"/>
+ <tag k="name" v="Hôtel Banke"/>
+ <tag k="source" v="www.derbyhotels.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1686637672" lat="48.8682851" lon="2.3267606">
+ <tag k="designation" v="Hôtel"/>
+ <tag k="name" v="Castille"/>
+ <tag k="source" v="www.castille.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1692086164" lat="48.8612638" lon="2.3592583"/>
+ <node id="1695625111" lat="48.8595817" lon="2.3086929">
+ <tag k="designation" v="Hôtel"/>
+ <tag k="name" v="Thoumieux"/>
+ <tag k="source" v="www.thoumieux.fr"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1700619745" lat="48.8658012" lon="2.3360846">
+ <tag k="designation" v="Hôtel"/>
+ <tag k="name" v="Hôtel Thérèse"/>
+ <tag k="source" v="www.hoteltherese.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1705420536" lat="48.8389861" lon="2.3455789">
+ <tag k="designation" v="Hôtel"/>
+ <tag k="name" v="Le Seven"/>
+ <tag k="source" v="www.sevenhotelparis.com"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1722685969" lat="48.8201479" lon="2.3951490">
+ <tag k="name" v="Hôtel Apogia Paris"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1722711100" lat="48.8451928" lon="2.3505337">
+ <tag k="name" v="Hôtel des Écoles"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1727866640" lat="48.8452730" lon="2.3250677">
+ <tag k="name" v="Royal Saint Germain"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1728838749" lat="48.8973848" lon="2.2470412">
+ <tag k="addr:housenumber" v="99"/>
+ <tag k="addr:postcode" v="92400"/>
+ <tag k="addr:street" v="Rue du Capitaine Guynemer"/>
+ <tag k="entrance" v="yes"/>
+ <tag k="name" v="Hôtel Central la Défense"/>
+ <tag k="phone" v="+33147892525"/>
+ <tag k="rooms" v="55"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.central-courbevoie-hotel.com"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1731162371" lat="48.8346077" lon="2.3530450"/>
+ <node id="1731162372" lat="48.8346345" lon="2.3530588"/>
+ <node id="1731162376" lat="48.8350182" lon="2.3515313"/>
+ <node id="1731162379" lat="48.8351602" lon="2.3516020"/>
+ <node id="1741258430" lat="48.8846283" lon="2.3381804">
+ <tag k="name" v="Hôtel Regyn's Montmartre"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1765229214" lat="48.8829475" lon="2.3284860">
+ <tag k="name" v="Clichy Hôtel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1767360475" lat="48.8200859" lon="2.2534203"/>
+ <node id="1767360476" lat="48.8199658" lon="2.2534901"/>
+ <node id="1767360477" lat="48.8198633" lon="2.2529805"/>
+ <node id="1767360478" lat="48.8199820" lon="2.2529333"/>
+ <node id="1773503027" lat="48.8610023" lon="2.3358047">
+ <tag k="name" v="Musée du Louvre"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1775401304" lat="48.8237618" lon="2.3239737">
+ <tag k="addr:housenumber" v="185"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ </node>
+ <node id="1775401306" lat="48.8237218" lon="2.3241532">
+ <tag k="addr:housenumber" v="187"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ </node>
+ <node id="1775401312" lat="48.8235859" lon="2.3247637">
+ <tag k="addr:housenumber" v="197"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ </node>
+ <node id="1775401313" lat="48.8235305" lon="2.3250119">
+ <tag k="addr:housenumber" v="201"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ </node>
+ <node id="1781828194" lat="48.8759128" lon="2.3574890">
+ <tag k="name" v="Little Regina"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1785415633" lat="48.8323889" lon="2.3868172">
+ <tag k="addr:city" v="Paris, France "/>
+ <tag k="addr:housenumber" v="19"/>
+ <tag k="addr:postcode" v="75012"/>
+ <tag k="addr:street" v="Place des vins de France "/>
+ <tag k="name" v="Hôtel ibis"/>
+ <tag k="phone" v="(+33)1/49280606"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wheelchair:description" v="Très serviable"/>
+ </node>
+ <node id="1789288576" lat="48.8261588" lon="2.3327200">
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="7 Bis"/>
+ <tag k="addr:postcode" v="75014"/>
+ <tag k="addr:street" v="Villa Seurat"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2012"/>
+ </node>
+ <node id="1789318315" lat="48.8827924" lon="2.3402418">
+ <tag k="name" v="Hôtel André Gille"/>
+ <tag k="phone" v="+33 1 42 62 48 48"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1789900359" lat="48.8661835" lon="2.3673546">
+ <tag k="name" v="Hôtel de Nevers"/>
+ <tag k="source" v="http://www.hoteldenevers.com/"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1791678313" lat="48.8437234" lon="2.2967496">
+ <tag k="name" v="La Soummam"/>
+ <tag k="note" v="hotel and restaurant and bar"/>
+ <tag k="phone" v="0148283979"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1795694037" lat="48.8986522" lon="2.2754207">
+ <tag k="name" v="Maison de la Pêche et de la Nature"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1820760149" lat="48.8340262" lon="2.3462200">
+ <tag k="name" v="Hôtel Belambra Magendie (Touring Hotel)"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1820776957" lat="48.8317795" lon="2.3398059">
+ <tag k="name" v="Marriot Rive Gauche"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1821733156" lat="48.8751482" lon="2.3354544">
+ <tag k="name" v="Hôtel Mogador"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1821967200" lat="48.8715708" lon="2.3436597">
+ <tag k="name" v="Holiday Inn Paris Opéra"/>
+ <tag k="operator" v="Holiday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1823551382" lat="48.8799454" lon="2.3289718">
+ <tag k="name" v="Hôtel du Casino"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1824509123" lat="48.8743571" lon="2.3321512">
+ <tag k="name" v="Hôtel Antin Trinité"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1824509162" lat="48.8742308" lon="2.3320216">
+ <tag k="name" v="Opéra D'Antin"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1827138905" lat="48.8766389" lon="2.3417217">
+ <tag k="email" v="reservation@plazaopera.com"/>
+ <tag k="name" v="Plaza Opera Hotel"/>
+ <tag k="phone" v="+33-1-45269771"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.plaza-opera-paris.com/"/>
+ </node>
+ <node id="1827138912" lat="48.8765596" lon="2.3401099">
+ <tag k="name" v="Villa Lamartine Opéra"/>
+ <tag k="phone" v="+33-1-48787858"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.villaoperalamartineparis.com/"/>
+ </node>
+ <node id="1827357928" lat="48.8515142" lon="2.2778201">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1827537495" lat="48.8600060" lon="2.3518281"/>
+ <node id="1827699346" lat="48.8751153" lon="2.3361132">
+ <tag k="name" v="Hôtel Impérial"/>
+ <tag k="smoking" v="no"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1829425292" lat="48.8400178" lon="2.3810213">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1835791069" lat="48.8331256" lon="2.2892198">
+ <tag k="name" v="Terminus Vaugirard"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1854559107" lat="48.8547115" lon="2.2894429"/>
+ <node id="1865299719" lat="48.8864902" lon="2.3356152">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <way id="17954721">
+ <nd ref="185881594"/>
+ <nd ref="185881595"/>
+ <nd ref="1365424464"/>
+ <nd ref="914052924"/>
+ <nd ref="185881597"/>
+ <nd ref="914052833"/>
+ <nd ref="1365433411"/>
+ <nd ref="914052499"/>
+ <nd ref="914053025"/>
+ <nd ref="185881598"/>
+ <nd ref="185881599"/>
+ <nd ref="1224674043"/>
+ <nd ref="1224673747"/>
+ <nd ref="185881600"/>
+ <nd ref="1224673333"/>
+ <nd ref="1224673486"/>
+ <nd ref="1224673715"/>
+ <nd ref="1224673653"/>
+ <nd ref="185881601"/>
+ <nd ref="1224673422"/>
+ <nd ref="185881603"/>
+ <nd ref="1224673086"/>
+ <nd ref="1224673736"/>
+ <nd ref="1224673118"/>
+ <nd ref="185881604"/>
+ <nd ref="1224673677"/>
+ <nd ref="1224673265"/>
+ <nd ref="828584315"/>
+ <nd ref="828584146"/>
+ <nd ref="828583803"/>
+ <nd ref="185881594"/>
+ <tag k="architect" v="Jean Nouvel"/>
+ <tag k="name" v="Musée du quai Branly"/>
+ <tag k="note" v="musée des arts premiers"/>
+ <tag k="phone" v="01.56.61.70.00"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.quaibranly.fr/"/>
+ <tag k="wikipedia" v="fr:Musée du quai Branly"/>
+ </way>
+ <way id="18592415">
+ <nd ref="191770987"/>
+ <nd ref="191770988"/>
+ <nd ref="191770990"/>
+ <nd ref="191770992"/>
+ <nd ref="191770993"/>
+ <nd ref="191770995"/>
+ <nd ref="191770996"/>
+ <nd ref="191770997"/>
+ <nd ref="191770999"/>
+ <nd ref="191771001"/>
+ <nd ref="191771002"/>
+ <nd ref="191771003"/>
+ <nd ref="191771005"/>
+ <nd ref="191771006"/>
+ <nd ref="191770987"/>
+ <tag k="building:height" v="116"/>
+ <tag k="building:levels" v="30"/>
+ <tag k="name" v="Hôtel Méridien Montparnasse"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="21999357">
+ <nd ref="707237124"/>
+ <nd ref="338547035"/>
+ <nd ref="338547033"/>
+ <nd ref="338546998"/>
+ <nd ref="338547031"/>
+ <nd ref="338546979"/>
+ <nd ref="338546977"/>
+ <nd ref="338546955"/>
+ <nd ref="338546953"/>
+ <nd ref="237016931"/>
+ <nd ref="237016932"/>
+ <nd ref="338546951"/>
+ <nd ref="338546948"/>
+ <nd ref="355349419"/>
+ <nd ref="338546946"/>
+ <nd ref="338546620"/>
+ <nd ref="707237167"/>
+ <nd ref="707237117"/>
+ <nd ref="707237071"/>
+ <nd ref="707236992"/>
+ <nd ref="338546618"/>
+ <nd ref="338546616"/>
+ <nd ref="1125740179"/>
+ <nd ref="338546614"/>
+ <nd ref="338546592"/>
+ <nd ref="1125739737"/>
+ <nd ref="707237124"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Galerie de Minéralogie et de Géologie"/>
+ <tag k="opening_hours" v="Mo-Su off"/>
+ <tag k="phone" v="01.40.79.54.79"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.museum-mineral.fr/"/>
+ <tag k="wikipedia" v="fr:Galerie de minéralogie et de géologie du Muséum national d'histoire naturelle"/>
+ </way>
+ <way id="21999454">
+ <nd ref="237018217"/>
+ <nd ref="237018219"/>
+ <nd ref="549777496"/>
+ <nd ref="549777503"/>
+ <nd ref="549777499"/>
+ <nd ref="549777500"/>
+ <nd ref="549777502"/>
+ <nd ref="549777501"/>
+ <nd ref="549777504"/>
+ <nd ref="549777497"/>
+ <nd ref="237018220"/>
+ <nd ref="549777514"/>
+ <nd ref="549777513"/>
+ <nd ref="1125740485"/>
+ <nd ref="549777511"/>
+ <nd ref="549777509"/>
+ <nd ref="237018222"/>
+ <nd ref="237018223"/>
+ <nd ref="237018224"/>
+ <nd ref="549777508"/>
+ <nd ref="549777507"/>
+ <nd ref="549777506"/>
+ <nd ref="549777505"/>
+ <nd ref="237018225"/>
+ <nd ref="237018226"/>
+ <nd ref="237018217"/>
+ <tag k="building" v="yes"/>
+ <tag k="fee" v="full:7; discount:5; free: under 26, disabled public, press, unemployment, ICOM"/>
+ <tag k="fee:currency" v="euro"/>
+ <tag k="name" v="Galeries de Paléontologie et d'Anatomie comparée"/>
+ <tag k="opening_hours" v="Mo 10:00-17:00; We-Su 10:00-17:00; PH 10:00-17:00; May 1 : off"/>
+ <tag k="phone" v="01.40.79.54.79, 01.40.79.56.01"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Galerie de paléontologie et d'anatomie comparée du Muséum national d'histoire naturelle"/>
+ </way>
+ <way id="22870791">
+ <nd ref="549792487"/>
+ <nd ref="261577998"/>
+ <nd ref="245805297"/>
+ <nd ref="1129978487"/>
+ <nd ref="528462288"/>
+ <nd ref="245805298"/>
+ <nd ref="528462294"/>
+ <nd ref="528462297"/>
+ <nd ref="528462291"/>
+ <nd ref="245805299"/>
+ <nd ref="528462282"/>
+ <nd ref="1129978485"/>
+ <nd ref="528462280"/>
+ <nd ref="245805300"/>
+ <nd ref="261576901"/>
+ <nd ref="261576902"/>
+ <nd ref="261576903"/>
+ <nd ref="549792487"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Institut du Monde Arabe"/>
+ <tag k="phone" v="01.40.51.38.38"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.imarabe.org/"/>
+ </way>
+ <way id="23644147">
+ <nd ref="256148606"/>
+ <nd ref="256148607"/>
+ <nd ref="256148608"/>
+ <nd ref="256147849"/>
+ <nd ref="21662512"/>
+ <nd ref="21662511"/>
+ <nd ref="21662510"/>
+ <nd ref="21662491"/>
+ <nd ref="21662047"/>
+ <nd ref="21662048"/>
+ <nd ref="21662049"/>
+ <nd ref="256148609"/>
+ <nd ref="256148611"/>
+ <nd ref="256148612"/>
+ <nd ref="256148613"/>
+ <nd ref="256148614"/>
+ <nd ref="256148615"/>
+ <nd ref="256148617"/>
+ <nd ref="256148618"/>
+ <nd ref="256148619"/>
+ <nd ref="256148621"/>
+ <nd ref="256148622"/>
+ <nd ref="256148623"/>
+ <nd ref="256148624"/>
+ <nd ref="256148606"/>
+ <tag k="leisure" v="park"/>
+ <tag k="name" v="Jardin Tino Rossi - Musée de la Sculpture en Plein Air"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="equipement.paris.fr/JARDIN_TINO_ROSSI"/>
+ </way>
+ <way id="42863437">
+ <nd ref="536518255"/>
+ <nd ref="237430763"/>
+ <nd ref="242556936"/>
+ <nd ref="920190576"/>
+ <nd ref="536518299"/>
+ <nd ref="920190540"/>
+ <nd ref="920190550"/>
+ <nd ref="536518255"/>
+ <tag k="name" v="Secour populaire"/>
+ <tag k="operator" v="Secour populaire"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="45073393">
+ <nd ref="571518050"/>
+ <nd ref="571518042"/>
+ <nd ref="571518044"/>
+ <nd ref="571518046"/>
+ <nd ref="817974720"/>
+ <nd ref="571518047"/>
+ <nd ref="817976111"/>
+ <nd ref="571518052"/>
+ <nd ref="571518054"/>
+ <nd ref="571518057"/>
+ <nd ref="571518058"/>
+ <nd ref="571518059"/>
+ <nd ref="571518061"/>
+ <nd ref="571518062"/>
+ <nd ref="571518065"/>
+ <nd ref="571518066"/>
+ <nd ref="571518050"/>
+ <tag k="alt_name:es" v="Museo_Art_Naif"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Halle Saint-Pierre"/>
+ <tag k="phone" v="01.42.58.72.89"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2009"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.hallesaintpierre.org/"/>
+ </way>
+ <way id="48433594">
+ <nd ref="615119709"/>
+ <nd ref="615119710"/>
+ <nd ref="615119711"/>
+ <nd ref="615119712"/>
+ <nd ref="615119713"/>
+ <nd ref="615119708"/>
+ <nd ref="615119714"/>
+ <nd ref="615119715"/>
+ <nd ref="615119716"/>
+ <nd ref="615119709"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Novotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="49734503">
+ <nd ref="632026022"/>
+ <nd ref="632026017"/>
+ <nd ref="632026018"/>
+ <nd ref="632026009"/>
+ <nd ref="632026007"/>
+ <nd ref="703870928"/>
+ <nd ref="632026005"/>
+ <nd ref="632026006"/>
+ <nd ref="632026010"/>
+ <nd ref="632026037"/>
+ <nd ref="632026039"/>
+ <nd ref="632026045"/>
+ <nd ref="632026052"/>
+ <nd ref="632026049"/>
+ <nd ref="632026044"/>
+ <nd ref="632026051"/>
+ <nd ref="632026050"/>
+ <nd ref="632026042"/>
+ <nd ref="632026196"/>
+ <nd ref="632026199"/>
+ <nd ref="632026198"/>
+ <nd ref="632026197"/>
+ <nd ref="632026193"/>
+ <nd ref="632026208"/>
+ <nd ref="632026043"/>
+ <nd ref="632026058"/>
+ <nd ref="632026056"/>
+ <nd ref="632026023"/>
+ <nd ref="632026016"/>
+ <nd ref="632026022"/>
+ <tag k="building" v="yes"/>
+ <tag k="heritage" v="2"/>
+ <tag k="heritage:operator" v="mhs"/>
+ <tag k="historic" v="monument"/>
+ <tag k="mhs:inscription_date" v="1953"/>
+ <tag k="name" v="Hôtel de Sully"/>
+ <tag k="ref:mhs" v="PA00086278"/>
+ <tag k="source" v="Direction générales des finances publiques - année 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="fr:Hôtel de Sully"/>
+ </way>
+ <way id="50027241">
+ <nd ref="635373693"/>
+ <nd ref="635373732"/>
+ <nd ref="635373725"/>
+ <nd ref="635373726"/>
+ <nd ref="635373735"/>
+ <nd ref="635373729"/>
+ <nd ref="635373723"/>
+ <nd ref="635373777"/>
+ <nd ref="635373779"/>
+ <nd ref="635373782"/>
+ <nd ref="635373794"/>
+ <nd ref="635373802"/>
+ <nd ref="635373784"/>
+ <nd ref="635373788"/>
+ <nd ref="826995359"/>
+ <nd ref="827019436"/>
+ <nd ref="635373803"/>
+ <nd ref="635373805"/>
+ <nd ref="635373808"/>
+ <nd ref="635373810"/>
+ <nd ref="635373813"/>
+ <nd ref="635373816"/>
+ <nd ref="635373737"/>
+ <nd ref="635373738"/>
+ <nd ref="635373740"/>
+ <nd ref="635373772"/>
+ <nd ref="635373774"/>
+ <nd ref="635373775"/>
+ <nd ref="635373776"/>
+ <nd ref="635373743"/>
+ <nd ref="826997265"/>
+ <nd ref="635373745"/>
+ <nd ref="635373748"/>
+ <nd ref="635373749"/>
+ <nd ref="635373750"/>
+ <nd ref="635373752"/>
+ <nd ref="635373754"/>
+ <nd ref="635373756"/>
+ <nd ref="635373758"/>
+ <nd ref="635373762"/>
+ <nd ref="635373764"/>
+ <nd ref="635373766"/>
+ <nd ref="635373768"/>
+ <nd ref="635373770"/>
+ <nd ref="635373675"/>
+ <nd ref="635373676"/>
+ <nd ref="635373677"/>
+ <nd ref="635373678"/>
+ <nd ref="635373679"/>
+ <nd ref="635373681"/>
+ <nd ref="635373683"/>
+ <nd ref="635373686"/>
+ <nd ref="635373687"/>
+ <nd ref="635373690"/>
+ <nd ref="635373657"/>
+ <nd ref="635373659"/>
+ <nd ref="635373661"/>
+ <nd ref="635373663"/>
+ <nd ref="635373667"/>
+ <nd ref="635373700"/>
+ <nd ref="635373702"/>
+ <nd ref="635373703"/>
+ <nd ref="635373704"/>
+ <nd ref="635373705"/>
+ <nd ref="635373706"/>
+ <nd ref="635373722"/>
+ <nd ref="635373695"/>
+ <nd ref="635373696"/>
+ <nd ref="635373693"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Sofitel Paris La Défense"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="51224026">
+ <nd ref="653735985"/>
+ <nd ref="653735989"/>
+ <nd ref="653735967"/>
+ <nd ref="653735972"/>
+ <nd ref="653735985"/>
+ <tag k="addr:city" v="Issy-les-Moulineaux"/>
+ <tag k="addr:housenumber" v="3"/>
+ <tag k="addr:postcode" v="92130"/>
+ <tag k="addr:street" v="Rue Georges Marie"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Classics Hôtel Paris Porte de Versailles"/>
+ <tag k="operator" v="Classics Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="51229199">
+ <nd ref="653802736"/>
+ <nd ref="676841470"/>
+ <nd ref="653802748"/>
+ <nd ref="653802750"/>
+ <nd ref="653802752"/>
+ <nd ref="653802754"/>
+ <nd ref="653802739"/>
+ <nd ref="676841432"/>
+ <nd ref="653802756"/>
+ <nd ref="653802758"/>
+ <nd ref="653802759"/>
+ <nd ref="653802747"/>
+ <nd ref="653802743"/>
+ <nd ref="653802745"/>
+ <nd ref="653802736"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Oceania Paris Porte De Versailles"/>
+ <tag k="operator" v="Oceania Hotels"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="52130668">
+ <nd ref="664266485"/>
+ <nd ref="664266486"/>
+ <nd ref="664266487"/>
+ <nd ref="664266488"/>
+ <nd ref="664266485"/>
+ <tag k="landuse" v="construction"/>
+ <tag k="name" v="FIAP"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="53567913">
+ <nd ref="676727888"/>
+ <nd ref="676727889"/>
+ <nd ref="676727915"/>
+ <nd ref="676727916"/>
+ <nd ref="676727917"/>
+ <nd ref="676727918"/>
+ <nd ref="676727902"/>
+ <nd ref="676727903"/>
+ <nd ref="676727904"/>
+ <nd ref="676727905"/>
+ <nd ref="676727906"/>
+ <nd ref="676727908"/>
+ <nd ref="676727911"/>
+ <nd ref="676727909"/>
+ <nd ref="676727910"/>
+ <nd ref="676727854"/>
+ <nd ref="676727855"/>
+ <nd ref="676727851"/>
+ <nd ref="676727852"/>
+ <nd ref="676727856"/>
+ <nd ref="676727857"/>
+ <nd ref="676727853"/>
+ <nd ref="676727858"/>
+ <nd ref="676727859"/>
+ <nd ref="676727860"/>
+ <nd ref="676727861"/>
+ <nd ref="676727862"/>
+ <nd ref="676727863"/>
+ <nd ref="676727864"/>
+ <nd ref="676727865"/>
+ <nd ref="676727841"/>
+ <nd ref="676727842"/>
+ <nd ref="676727843"/>
+ <nd ref="676727844"/>
+ <nd ref="676727845"/>
+ <nd ref="676727846"/>
+ <nd ref="676727847"/>
+ <nd ref="676727848"/>
+ <nd ref="676727849"/>
+ <nd ref="676727850"/>
+ <nd ref="676727866"/>
+ <nd ref="676727867"/>
+ <nd ref="676727798"/>
+ <nd ref="676727868"/>
+ <nd ref="676727799"/>
+ <nd ref="676727800"/>
+ <nd ref="676727801"/>
+ <nd ref="676727802"/>
+ <nd ref="676727803"/>
+ <nd ref="676727804"/>
+ <nd ref="676727805"/>
+ <nd ref="676727806"/>
+ <nd ref="676727807"/>
+ <nd ref="676727808"/>
+ <nd ref="676727809"/>
+ <nd ref="676727810"/>
+ <nd ref="676727811"/>
+ <nd ref="676727812"/>
+ <nd ref="676727814"/>
+ <nd ref="676727815"/>
+ <nd ref="676727816"/>
+ <nd ref="676727817"/>
+ <nd ref="676727818"/>
+ <nd ref="676727819"/>
+ <nd ref="676727820"/>
+ <nd ref="676727821"/>
+ <nd ref="676727822"/>
+ <nd ref="676727823"/>
+ <nd ref="676727927"/>
+ <nd ref="676727928"/>
+ <nd ref="676727929"/>
+ <nd ref="676727930"/>
+ <nd ref="676727931"/>
+ <nd ref="676727932"/>
+ <nd ref="676727963"/>
+ <nd ref="676727870"/>
+ <nd ref="676727871"/>
+ <nd ref="676727872"/>
+ <nd ref="676727873"/>
+ <nd ref="676727874"/>
+ <nd ref="676727875"/>
+ <nd ref="676727876"/>
+ <nd ref="676727877"/>
+ <nd ref="676727878"/>
+ <nd ref="676727883"/>
+ <nd ref="676727886"/>
+ <nd ref="676727887"/>
+ <nd ref="676727884"/>
+ <nd ref="676727885"/>
+ <nd ref="676727896"/>
+ <nd ref="676727897"/>
+ <nd ref="676727898"/>
+ <nd ref="676727890"/>
+ <nd ref="676727891"/>
+ <nd ref="676727892"/>
+ <nd ref="676727893"/>
+ <nd ref="676727888"/>
+ <tag k="alt_name" v="Iglesia_Saint_Chapelle"/>
+ <tag k="amenity" v="place_of_worship"/>
+ <tag k="building" v="church"/>
+ <tag k="denomination" v="catholic"/>
+ <tag k="fare" v="full:8,5; discount:5,5; group 6,5"/>
+ <tag k="name" v="Sainte-Chapelle"/>
+ <tag k="opening_hours" v="Mo-Fr 09:30-13:00,14:00-18:00; Sa,Su 09:30-18:00"/>
+ <tag k="operator" v="Centre des monuments nationaux"/>
+ <tag k="phone" v="01.53.40.60.80"/>
+ <tag k="religion" v="christian"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://sainte-chapelle.monuments-nationaux.fr/"/>
+ <tag k="wikipedia" v="fr:Sainte-Chapelle"/>
+ <tag k="wikipedia:fr" v="Sainte-Chapelle"/>
+ </way>
+ <way id="53672217">
+ <nd ref="677805573"/>
+ <nd ref="677805574"/>
+ <nd ref="677805571"/>
+ <nd ref="677805576"/>
+ <nd ref="677805577"/>
+ <nd ref="677805566"/>
+ <nd ref="677805567"/>
+ <nd ref="677805568"/>
+ <nd ref="677805569"/>
+ <nd ref="677805570"/>
+ <nd ref="677805454"/>
+ <nd ref="677805455"/>
+ <nd ref="677805457"/>
+ <nd ref="677805462"/>
+ <nd ref="677805463"/>
+ <nd ref="677805464"/>
+ <nd ref="677805465"/>
+ <nd ref="677805466"/>
+ <nd ref="677805468"/>
+ <nd ref="677805483"/>
+ <nd ref="677805485"/>
+ <nd ref="677805487"/>
+ <nd ref="677805489"/>
+ <nd ref="677967765"/>
+ <nd ref="677805475"/>
+ <nd ref="677805477"/>
+ <nd ref="677805481"/>
+ <nd ref="677805478"/>
+ <nd ref="677805480"/>
+ <nd ref="677805412"/>
+ <nd ref="677805417"/>
+ <nd ref="677805413"/>
+ <nd ref="677805420"/>
+ <nd ref="677805421"/>
+ <nd ref="677805423"/>
+ <nd ref="677805424"/>
+ <nd ref="677805425"/>
+ <nd ref="677805427"/>
+ <nd ref="677805429"/>
+ <nd ref="677805521"/>
+ <nd ref="677805522"/>
+ <nd ref="677805523"/>
+ <nd ref="677805524"/>
+ <nd ref="677805526"/>
+ <nd ref="677805527"/>
+ <nd ref="677805530"/>
+ <nd ref="677805528"/>
+ <nd ref="677805531"/>
+ <nd ref="677805533"/>
+ <nd ref="677805534"/>
+ <nd ref="677805536"/>
+ <nd ref="677805538"/>
+ <nd ref="677805540"/>
+ <nd ref="677805542"/>
+ <nd ref="677805544"/>
+ <nd ref="677805548"/>
+ <nd ref="677805550"/>
+ <nd ref="677805552"/>
+ <nd ref="677805553"/>
+ <nd ref="677805555"/>
+ <nd ref="677805562"/>
+ <nd ref="677805557"/>
+ <nd ref="677805564"/>
+ <nd ref="677805565"/>
+ <nd ref="677805559"/>
+ <nd ref="677805560"/>
+ <nd ref="677805611"/>
+ <nd ref="677805612"/>
+ <nd ref="677805613"/>
+ <nd ref="677805614"/>
+ <nd ref="677805615"/>
+ <nd ref="677805616"/>
+ <nd ref="677805617"/>
+ <nd ref="677805618"/>
+ <nd ref="677805619"/>
+ <nd ref="677805602"/>
+ <nd ref="677805620"/>
+ <nd ref="677805621"/>
+ <nd ref="677805603"/>
+ <nd ref="677805604"/>
+ <nd ref="677805605"/>
+ <nd ref="677805606"/>
+ <nd ref="677805607"/>
+ <nd ref="677805608"/>
+ <nd ref="677805609"/>
+ <nd ref="677805610"/>
+ <nd ref="677805579"/>
+ <nd ref="677805581"/>
+ <nd ref="677805583"/>
+ <nd ref="677805585"/>
+ <nd ref="677805573"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Novotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="novotelparis.com"/>
+ </way>
+ <way id="54031669">
+ <nd ref="681247237"/>
+ <nd ref="681246551"/>
+ <nd ref="681244688"/>
+ <nd ref="681247630"/>
+ <nd ref="681244515"/>
+ <nd ref="681244412"/>
+ <nd ref="681247229"/>
+ <nd ref="681245742"/>
+ <nd ref="681246574"/>
+ <nd ref="681246004"/>
+ <nd ref="681245853"/>
+ <nd ref="681247720"/>
+ <nd ref="681247415"/>
+ <nd ref="681247523"/>
+ <nd ref="681246128"/>
+ <nd ref="681246965"/>
+ <nd ref="681244621"/>
+ <nd ref="681247073"/>
+ <nd ref="681246320"/>
+ <nd ref="681245486"/>
+ <nd ref="681246245"/>
+ <nd ref="681246619"/>
+ <nd ref="681247237"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Mercure"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="54031681">
+ <nd ref="681245256"/>
+ <nd ref="681246601"/>
+ <nd ref="681247437"/>
+ <nd ref="681246052"/>
+ <nd ref="681247592"/>
+ <nd ref="681247354"/>
+ <nd ref="681247571"/>
+ <nd ref="681245462"/>
+ <nd ref="681247478"/>
+ <nd ref="682433279"/>
+ <nd ref="681246626"/>
+ <nd ref="681244345"/>
+ <nd ref="684614123"/>
+ <nd ref="681245807"/>
+ <nd ref="681245256"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Campanile Paris XV - Tour Eiffel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="54058979">
+ <nd ref="681818370"/>
+ <nd ref="681842338"/>
+ <nd ref="681818371"/>
+ <nd ref="681818410"/>
+ <nd ref="681818411"/>
+ <nd ref="681842395"/>
+ <nd ref="681818409"/>
+ <nd ref="681818370"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Washington Opéra"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="54188994">
+ <nd ref="683512836"/>
+ <nd ref="683512834"/>
+ <nd ref="683512839"/>
+ <nd ref="683512838"/>
+ <nd ref="683512844"/>
+ <nd ref="683512843"/>
+ <nd ref="683512848"/>
+ <nd ref="683512846"/>
+ <nd ref="683512831"/>
+ <nd ref="683512865"/>
+ <nd ref="683512833"/>
+ <nd ref="683512866"/>
+ <nd ref="683512869"/>
+ <nd ref="683512868"/>
+ <nd ref="683512872"/>
+ <nd ref="683512871"/>
+ <nd ref="683512860"/>
+ <nd ref="683512862"/>
+ <nd ref="683512857"/>
+ <nd ref="683512859"/>
+ <nd ref="683512863"/>
+ <nd ref="683512812"/>
+ <nd ref="683512809"/>
+ <nd ref="683512810"/>
+ <nd ref="683512804"/>
+ <nd ref="683512806"/>
+ <nd ref="683512801"/>
+ <nd ref="683512803"/>
+ <nd ref="683512807"/>
+ <nd ref="683512828"/>
+ <nd ref="683512818"/>
+ <nd ref="683512827"/>
+ <nd ref="683512817"/>
+ <nd ref="683512815"/>
+ <nd ref="683512813"/>
+ <nd ref="683512793"/>
+ <nd ref="683512799"/>
+ <nd ref="683512798"/>
+ <nd ref="683512796"/>
+ <nd ref="683512795"/>
+ <nd ref="683512792"/>
+ <nd ref="683512791"/>
+ <nd ref="683512786"/>
+ <nd ref="683512789"/>
+ <nd ref="683512951"/>
+ <nd ref="683512787"/>
+ <nd ref="683512950"/>
+ <nd ref="683512948"/>
+ <nd ref="683512959"/>
+ <nd ref="683512960"/>
+ <nd ref="683512962"/>
+ <nd ref="683512963"/>
+ <nd ref="683512953"/>
+ <nd ref="683512954"/>
+ <nd ref="683512956"/>
+ <nd ref="683512957"/>
+ <nd ref="683512935"/>
+ <nd ref="683512936"/>
+ <nd ref="683512937"/>
+ <nd ref="683512939"/>
+ <nd ref="683512923"/>
+ <nd ref="683512930"/>
+ <nd ref="683512932"/>
+ <nd ref="683512933"/>
+ <nd ref="683512944"/>
+ <nd ref="683512942"/>
+ <nd ref="683512947"/>
+ <nd ref="683512945"/>
+ <nd ref="683512725"/>
+ <nd ref="683512724"/>
+ <nd ref="683512729"/>
+ <nd ref="683512727"/>
+ <nd ref="683512711"/>
+ <nd ref="683512710"/>
+ <nd ref="683512715"/>
+ <nd ref="683512713"/>
+ <nd ref="683512705"/>
+ <nd ref="683512703"/>
+ <nd ref="683512708"/>
+ <nd ref="683512706"/>
+ <nd ref="683512988"/>
+ <nd ref="683512989"/>
+ <nd ref="683512986"/>
+ <nd ref="683512987"/>
+ <nd ref="683512977"/>
+ <nd ref="683512984"/>
+ <nd ref="683512985"/>
+ <nd ref="683512982"/>
+ <nd ref="683512983"/>
+ <nd ref="683512980"/>
+ <nd ref="683512981"/>
+ <nd ref="683512978"/>
+ <nd ref="683512979"/>
+ <nd ref="683512941"/>
+ <nd ref="683512976"/>
+ <nd ref="683512974"/>
+ <nd ref="683512975"/>
+ <nd ref="683512973"/>
+ <nd ref="683512972"/>
+ <nd ref="683512971"/>
+ <nd ref="683512970"/>
+ <nd ref="683512969"/>
+ <nd ref="683512968"/>
+ <nd ref="683512967"/>
+ <nd ref="683512966"/>
+ <nd ref="683512965"/>
+ <nd ref="683513014"/>
+ <nd ref="683513012"/>
+ <nd ref="683513010"/>
+ <nd ref="683513000"/>
+ <nd ref="683512999"/>
+ <nd ref="683512998"/>
+ <nd ref="683512997"/>
+ <nd ref="683512992"/>
+ <nd ref="683513015"/>
+ <nd ref="683512991"/>
+ <nd ref="683512990"/>
+ <nd ref="683512996"/>
+ <nd ref="683512995"/>
+ <nd ref="683512994"/>
+ <nd ref="683512993"/>
+ <nd ref="683512830"/>
+ <nd ref="683512877"/>
+ <nd ref="683512875"/>
+ <nd ref="683512874"/>
+ <nd ref="683512883"/>
+ <nd ref="683512881"/>
+ <nd ref="683512880"/>
+ <nd ref="683512878"/>
+ <nd ref="683512887"/>
+ <nd ref="683512889"/>
+ <nd ref="683512884"/>
+ <nd ref="683512886"/>
+ <nd ref="683512891"/>
+ <nd ref="683512916"/>
+ <nd ref="683512913"/>
+ <nd ref="683512914"/>
+ <nd ref="683512918"/>
+ <nd ref="683512899"/>
+ <nd ref="683512896"/>
+ <nd ref="683512897"/>
+ <nd ref="683512904"/>
+ <nd ref="683512905"/>
+ <nd ref="683512900"/>
+ <nd ref="683512902"/>
+ <nd ref="683512894"/>
+ <nd ref="683512893"/>
+ <nd ref="683512907"/>
+ <nd ref="683512908"/>
+ <nd ref="683512910"/>
+ <nd ref="683512911"/>
+ <nd ref="683512851"/>
+ <nd ref="683512853"/>
+ <nd ref="683512854"/>
+ <nd ref="683512856"/>
+ <nd ref="683512836"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Jeu de Paume"/>
+ <tag k="name:ru" v="Жё-де-пом"/>
+ <tag k="phone" v="01.747.03.12.50"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.jeudepaume.org"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia:en" v="Galerie nationale du Jeu de Paume"/>
+ <tag k="wikipedia:fr" v="Galerie nationale du Jeu de Paume"/>
+ <tag k="wikipedia:zh" v="国立网球场现代美术馆"/>
+ </way>
+ <way id="54188996">
+ <nd ref="683512575"/>
+ <nd ref="683512578"/>
+ <nd ref="683512580"/>
+ <nd ref="683512581"/>
+ <nd ref="683512583"/>
+ <nd ref="683512584"/>
+ <nd ref="683512586"/>
+ <nd ref="683512596"/>
+ <nd ref="683512598"/>
+ <nd ref="683512600"/>
+ <nd ref="683512601"/>
+ <nd ref="683512566"/>
+ <nd ref="683512565"/>
+ <nd ref="683512563"/>
+ <nd ref="683512562"/>
+ <nd ref="683512560"/>
+ <nd ref="683512558"/>
+ <nd ref="683512556"/>
+ <nd ref="683512554"/>
+ <nd ref="683512573"/>
+ <nd ref="683512572"/>
+ <nd ref="683512569"/>
+ <nd ref="683512568"/>
+ <nd ref="683512646"/>
+ <nd ref="683512645"/>
+ <nd ref="683512643"/>
+ <nd ref="683512641"/>
+ <nd ref="683512651"/>
+ <nd ref="683512652"/>
+ <nd ref="683512648"/>
+ <nd ref="683512649"/>
+ <nd ref="683512527"/>
+ <nd ref="683512528"/>
+ <nd ref="683512523"/>
+ <nd ref="683512525"/>
+ <nd ref="683512532"/>
+ <nd ref="683512533"/>
+ <nd ref="683512530"/>
+ <nd ref="683512552"/>
+ <nd ref="683512549"/>
+ <nd ref="683512550"/>
+ <nd ref="683512544"/>
+ <nd ref="683512547"/>
+ <nd ref="683512540"/>
+ <nd ref="683512537"/>
+ <nd ref="683512543"/>
+ <nd ref="683512541"/>
+ <nd ref="683512536"/>
+ <nd ref="683512534"/>
+ <nd ref="683512655"/>
+ <nd ref="683512654"/>
+ <nd ref="683512660"/>
+ <nd ref="683512658"/>
+ <nd ref="683512663"/>
+ <nd ref="683512661"/>
+ <nd ref="683512657"/>
+ <nd ref="683512633"/>
+ <nd ref="683512637"/>
+ <nd ref="683512635"/>
+ <nd ref="683512638"/>
+ <nd ref="683512640"/>
+ <nd ref="683512671"/>
+ <nd ref="683512673"/>
+ <nd ref="683512665"/>
+ <nd ref="683512666"/>
+ <nd ref="683512668"/>
+ <nd ref="683512669"/>
+ <nd ref="683512678"/>
+ <nd ref="683512679"/>
+ <nd ref="683512681"/>
+ <nd ref="683512682"/>
+ <nd ref="683512674"/>
+ <nd ref="683512676"/>
+ <nd ref="683512593"/>
+ <nd ref="683512594"/>
+ <nd ref="683512606"/>
+ <nd ref="683512607"/>
+ <nd ref="683512603"/>
+ <nd ref="683512604"/>
+ <nd ref="683512609"/>
+ <nd ref="683512610"/>
+ <nd ref="683512624"/>
+ <nd ref="683512625"/>
+ <nd ref="683512627"/>
+ <nd ref="683512628"/>
+ <nd ref="683512630"/>
+ <nd ref="683512611"/>
+ <nd ref="683512632"/>
+ <nd ref="683512588"/>
+ <nd ref="683512622"/>
+ <nd ref="683512590"/>
+ <nd ref="683512591"/>
+ <nd ref="683512575"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée de l'Orangerie"/>
+ <tag k="name:ru" v="Оранжерея"/>
+ <tag k="phone" v="01.44.50.43.00"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-orangerie.fr/"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="54661744">
+ <nd ref="687994326"/>
+ <nd ref="688006988"/>
+ <nd ref="687994318"/>
+ <nd ref="687993949"/>
+ <nd ref="687993813"/>
+ <nd ref="687994326"/>
+ <tag k="building" v="yes"/>
+ <tag k="fax" v="+33 1 42 60 05 39"/>
+ <tag k="name" v="Timhotel Palais Royal"/>
+ <tag k="operator" v="Timhotel"/>
+ <tag k="phone" v="+33 1 42 61 53 90"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.timhotel.com/"/>
+ </way>
+ <way id="55292128">
+ <nd ref="694681520"/>
+ <nd ref="694681973"/>
+ <nd ref="694681590"/>
+ <nd ref="694681910"/>
+ <nd ref="694682126"/>
+ <nd ref="694681698"/>
+ <nd ref="694681440"/>
+ <nd ref="694681773"/>
+ <nd ref="694682160"/>
+ <nd ref="694682137"/>
+ <nd ref="694681710"/>
+ <nd ref="694681453"/>
+ <nd ref="694681779"/>
+ <nd ref="694681988"/>
+ <nd ref="694681520"/>
+ <tag k="alt_name" v="Hôtel Pimodan"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel de Lauzun"/>
+ <tag k="ref:mhs" v="PA00086297"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="fr:Hôtel de Lauzun"/>
+ </way>
+ <way id="55503397">
+ <nd ref="697454576"/>
+ <nd ref="697454629"/>
+ <nd ref="1827537495"/>
+ <nd ref="855292250"/>
+ <nd ref="855292280"/>
+ <nd ref="855292291"/>
+ <nd ref="697454631"/>
+ <nd ref="697454394"/>
+ <nd ref="697454538"/>
+ <nd ref="697454549"/>
+ <nd ref="697454566"/>
+ <nd ref="697454582"/>
+ <nd ref="697454536"/>
+ <nd ref="697454546"/>
+ <nd ref="243202970"/>
+ <nd ref="697454579"/>
+ <nd ref="697454593"/>
+ <nd ref="697454603"/>
+ <nd ref="697454617"/>
+ <nd ref="697454558"/>
+ <nd ref="697454613"/>
+ <nd ref="697454576"/>
+ <tag k="alt_name:es" v="Centro_Pompidou"/>
+ <tag k="amenity" v="arts_centre"/>
+ <tag k="architect" v="Richard Rogers"/>
+ <tag k="building" v="yes"/>
+ <tag k="building:levelPlan" v="0: Accueil, Information, Billets, Librairie; 2-3: Bibliothèque publique d'information; 4-5: Musée National d'Art Moderne"/>
+ <tag k="image" v="http://upload.wikimedia.org/wikipedia/commons/c/c5/Pompidou-centre-entrance.jpg"/>
+ <tag k="name" v="Centre National d'Art et de Culture Georges Pompidou"/>
+ <tag k="phone" v="+33 1 44781233"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="fr:Centre national d'art et de culture Georges-Pompidou"/>
+ </way>
+ <way id="55503399">
+ <nd ref="697454622"/>
+ <nd ref="697454548"/>
+ <nd ref="697454606"/>
+ <nd ref="697454619"/>
+ <nd ref="1381936927"/>
+ <nd ref="697454622"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Atelier Brancusi"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="56066139">
+ <nd ref="703723243"/>
+ <nd ref="703723337"/>
+ <nd ref="703723320"/>
+ <nd ref="703723303"/>
+ <nd ref="703723283"/>
+ <nd ref="703723256"/>
+ <nd ref="703723234"/>
+ <nd ref="703723197"/>
+ <nd ref="703723169"/>
+ <nd ref="703723146"/>
+ <nd ref="703723123"/>
+ <nd ref="703723340"/>
+ <nd ref="703723243"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Curie"/>
+ <tag k="phone" v="01.56.24.55.33"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.curie.fr/"/>
+ </way>
+ <way id="56185523">
+ <nd ref="705045987"/>
+ <nd ref="705045988"/>
+ <nd ref="705045989"/>
+ <nd ref="705045990"/>
+ <nd ref="705045991"/>
+ <nd ref="705045992"/>
+ <nd ref="705045993"/>
+ <nd ref="705045994"/>
+ <nd ref="705045995"/>
+ <nd ref="705045996"/>
+ <nd ref="705045997"/>
+ <nd ref="705045998"/>
+ <nd ref="705045999"/>
+ <nd ref="705046000"/>
+ <nd ref="705046001"/>
+ <nd ref="705046002"/>
+ <nd ref="705046003"/>
+ <nd ref="705046004"/>
+ <nd ref="705046005"/>
+ <nd ref="705046006"/>
+ <nd ref="705046007"/>
+ <nd ref="705046008"/>
+ <nd ref="705046009"/>
+ <nd ref="705046171"/>
+ <nd ref="705046172"/>
+ <nd ref="705046010"/>
+ <nd ref="705046011"/>
+ <nd ref="705046012"/>
+ <nd ref="705046013"/>
+ <nd ref="705046014"/>
+ <nd ref="705046015"/>
+ <nd ref="705046016"/>
+ <nd ref="705046017"/>
+ <nd ref="705046018"/>
+ <nd ref="705046019"/>
+ <nd ref="705046173"/>
+ <nd ref="705046174"/>
+ <nd ref="705046175"/>
+ <nd ref="705046176"/>
+ <nd ref="705046177"/>
+ <nd ref="705046178"/>
+ <nd ref="705046179"/>
+ <nd ref="705046180"/>
+ <nd ref="705046181"/>
+ <nd ref="705046182"/>
+ <nd ref="705046183"/>
+ <nd ref="705046184"/>
+ <nd ref="705046185"/>
+ <nd ref="705046186"/>
+ <nd ref="705046187"/>
+ <nd ref="705046188"/>
+ <nd ref="705046189"/>
+ <nd ref="705046190"/>
+ <nd ref="705046115"/>
+ <nd ref="705046116"/>
+ <nd ref="705046117"/>
+ <nd ref="705046118"/>
+ <nd ref="705046120"/>
+ <nd ref="705046121"/>
+ <nd ref="705046122"/>
+ <nd ref="705046123"/>
+ <nd ref="705046124"/>
+ <nd ref="705046125"/>
+ <nd ref="705046126"/>
+ <nd ref="705046127"/>
+ <nd ref="705046128"/>
+ <nd ref="705046149"/>
+ <nd ref="705046150"/>
+ <nd ref="705046151"/>
+ <nd ref="705046152"/>
+ <nd ref="705046153"/>
+ <nd ref="705046154"/>
+ <nd ref="705046155"/>
+ <nd ref="705046156"/>
+ <nd ref="705046157"/>
+ <nd ref="705046158"/>
+ <nd ref="705046159"/>
+ <nd ref="705046130"/>
+ <nd ref="705046131"/>
+ <nd ref="705046132"/>
+ <nd ref="705046133"/>
+ <nd ref="705046134"/>
+ <nd ref="705046135"/>
+ <nd ref="705046136"/>
+ <nd ref="705046137"/>
+ <nd ref="705046138"/>
+ <nd ref="809890949"/>
+ <nd ref="705046140"/>
+ <nd ref="705046141"/>
+ <nd ref="705046142"/>
+ <nd ref="705046143"/>
+ <nd ref="705046144"/>
+ <nd ref="705046145"/>
+ <nd ref="705046146"/>
+ <nd ref="705046147"/>
+ <nd ref="705046160"/>
+ <nd ref="705046148"/>
+ <nd ref="705046161"/>
+ <nd ref="705046162"/>
+ <nd ref="705046163"/>
+ <nd ref="705046164"/>
+ <nd ref="705046165"/>
+ <nd ref="705046166"/>
+ <nd ref="705046167"/>
+ <nd ref="705046168"/>
+ <nd ref="705046169"/>
+ <nd ref="705046170"/>
+ <nd ref="705046097"/>
+ <nd ref="705046098"/>
+ <nd ref="705046099"/>
+ <nd ref="705046107"/>
+ <nd ref="705046108"/>
+ <nd ref="705046109"/>
+ <nd ref="705046110"/>
+ <nd ref="705046111"/>
+ <nd ref="705046112"/>
+ <nd ref="705046113"/>
+ <nd ref="705046114"/>
+ <nd ref="705046100"/>
+ <nd ref="705046101"/>
+ <nd ref="705046102"/>
+ <nd ref="705046103"/>
+ <nd ref="705046104"/>
+ <nd ref="705046105"/>
+ <nd ref="705046106"/>
+ <nd ref="705046091"/>
+ <nd ref="705046092"/>
+ <nd ref="705046093"/>
+ <nd ref="705046094"/>
+ <nd ref="705046095"/>
+ <nd ref="705046096"/>
+ <nd ref="705046082"/>
+ <nd ref="705046083"/>
+ <nd ref="705046084"/>
+ <nd ref="705046085"/>
+ <nd ref="705046086"/>
+ <nd ref="705046087"/>
+ <nd ref="705046089"/>
+ <nd ref="705046090"/>
+ <nd ref="705046074"/>
+ <nd ref="705046075"/>
+ <nd ref="705046076"/>
+ <nd ref="705046077"/>
+ <nd ref="705046078"/>
+ <nd ref="705046079"/>
+ <nd ref="705046080"/>
+ <nd ref="705046081"/>
+ <nd ref="705046072"/>
+ <nd ref="705046073"/>
+ <nd ref="705046063"/>
+ <nd ref="705046064"/>
+ <nd ref="705046065"/>
+ <nd ref="705046066"/>
+ <nd ref="705046067"/>
+ <nd ref="705046068"/>
+ <nd ref="705046060"/>
+ <nd ref="705046061"/>
+ <nd ref="705046062"/>
+ <nd ref="705046069"/>
+ <nd ref="705046070"/>
+ <nd ref="705046071"/>
+ <nd ref="705046052"/>
+ <nd ref="705046053"/>
+ <nd ref="705046054"/>
+ <nd ref="705046055"/>
+ <nd ref="705046056"/>
+ <nd ref="705046057"/>
+ <nd ref="705046058"/>
+ <nd ref="809890958"/>
+ <nd ref="705046059"/>
+ <nd ref="705046045"/>
+ <nd ref="705046046"/>
+ <nd ref="705046047"/>
+ <nd ref="705046048"/>
+ <nd ref="705046049"/>
+ <nd ref="705046050"/>
+ <nd ref="705046051"/>
+ <nd ref="705046036"/>
+ <nd ref="705046037"/>
+ <nd ref="705046038"/>
+ <nd ref="705046039"/>
+ <nd ref="705046040"/>
+ <nd ref="705046041"/>
+ <nd ref="705046042"/>
+ <nd ref="705046043"/>
+ <nd ref="705046044"/>
+ <nd ref="705046023"/>
+ <nd ref="705046024"/>
+ <nd ref="705046025"/>
+ <nd ref="705046026"/>
+ <nd ref="705046027"/>
+ <nd ref="705046028"/>
+ <nd ref="705046029"/>
+ <nd ref="705046030"/>
+ <nd ref="705046031"/>
+ <nd ref="705046032"/>
+ <nd ref="705046033"/>
+ <nd ref="705046034"/>
+ <nd ref="705046035"/>
+ <nd ref="705046020"/>
+ <nd ref="705046021"/>
+ <nd ref="705046022"/>
+ <nd ref="705045870"/>
+ <nd ref="705045871"/>
+ <nd ref="705045872"/>
+ <nd ref="705045873"/>
+ <nd ref="705045874"/>
+ <nd ref="705045875"/>
+ <nd ref="705045876"/>
+ <nd ref="705045877"/>
+ <nd ref="705045878"/>
+ <nd ref="705045879"/>
+ <nd ref="705045866"/>
+ <nd ref="705045867"/>
+ <nd ref="705045869"/>
+ <nd ref="705045868"/>
+ <nd ref="705045900"/>
+ <nd ref="705045901"/>
+ <nd ref="705045902"/>
+ <nd ref="705045903"/>
+ <nd ref="705045904"/>
+ <nd ref="705045905"/>
+ <nd ref="705045906"/>
+ <nd ref="705045907"/>
+ <nd ref="705045908"/>
+ <nd ref="705045909"/>
+ <nd ref="705045880"/>
+ <nd ref="705045881"/>
+ <nd ref="705045882"/>
+ <nd ref="705045883"/>
+ <nd ref="705045884"/>
+ <nd ref="705045885"/>
+ <nd ref="705045886"/>
+ <nd ref="705045887"/>
+ <nd ref="705045888"/>
+ <nd ref="705045889"/>
+ <nd ref="705045890"/>
+ <nd ref="705045891"/>
+ <nd ref="705045892"/>
+ <nd ref="705045893"/>
+ <nd ref="705045894"/>
+ <nd ref="705045895"/>
+ <nd ref="705045896"/>
+ <nd ref="705045897"/>
+ <nd ref="705045898"/>
+ <nd ref="705045899"/>
+ <nd ref="705045855"/>
+ <nd ref="705045856"/>
+ <nd ref="705045857"/>
+ <nd ref="705045858"/>
+ <nd ref="705045859"/>
+ <nd ref="705045860"/>
+ <nd ref="705045861"/>
+ <nd ref="705045862"/>
+ <nd ref="705045863"/>
+ <nd ref="705045864"/>
+ <nd ref="705045865"/>
+ <nd ref="705045846"/>
+ <nd ref="705045847"/>
+ <nd ref="705045848"/>
+ <nd ref="705045849"/>
+ <nd ref="705045850"/>
+ <nd ref="705045851"/>
+ <nd ref="705045852"/>
+ <nd ref="705045853"/>
+ <nd ref="705045854"/>
+ <nd ref="705045827"/>
+ <nd ref="705045828"/>
+ <nd ref="705045829"/>
+ <nd ref="705045830"/>
+ <nd ref="705045831"/>
+ <nd ref="705045832"/>
+ <nd ref="705045833"/>
+ <nd ref="705045834"/>
+ <nd ref="705045835"/>
+ <nd ref="705045836"/>
+ <nd ref="705045837"/>
+ <nd ref="705045838"/>
+ <nd ref="705045839"/>
+ <nd ref="705045840"/>
+ <nd ref="705045841"/>
+ <nd ref="705045842"/>
+ <nd ref="705045843"/>
+ <nd ref="705045844"/>
+ <nd ref="705045845"/>
+ <nd ref="705045929"/>
+ <nd ref="705045910"/>
+ <nd ref="705045911"/>
+ <nd ref="705045912"/>
+ <nd ref="705045913"/>
+ <nd ref="705045914"/>
+ <nd ref="705045915"/>
+ <nd ref="705045916"/>
+ <nd ref="705045917"/>
+ <nd ref="705045918"/>
+ <nd ref="810097754"/>
+ <nd ref="705045919"/>
+ <nd ref="705045920"/>
+ <nd ref="705045921"/>
+ <nd ref="705045922"/>
+ <nd ref="705045923"/>
+ <nd ref="705045924"/>
+ <nd ref="705045925"/>
+ <nd ref="705045926"/>
+ <nd ref="705045927"/>
+ <nd ref="705045928"/>
+ <nd ref="705045930"/>
+ <nd ref="705045931"/>
+ <nd ref="705045932"/>
+ <nd ref="705045933"/>
+ <nd ref="705045934"/>
+ <nd ref="705045935"/>
+ <nd ref="705045936"/>
+ <nd ref="705045937"/>
+ <nd ref="705045938"/>
+ <nd ref="705045939"/>
+ <nd ref="705045940"/>
+ <nd ref="705045941"/>
+ <nd ref="705045942"/>
+ <nd ref="705045943"/>
+ <nd ref="705045962"/>
+ <nd ref="705045963"/>
+ <nd ref="705045964"/>
+ <nd ref="1504098313"/>
+ <nd ref="705045965"/>
+ <nd ref="810097657"/>
+ <nd ref="810097732"/>
+ <nd ref="705045966"/>
+ <nd ref="705045967"/>
+ <nd ref="705045968"/>
+ <nd ref="705045969"/>
+ <nd ref="705045970"/>
+ <nd ref="705045958"/>
+ <nd ref="705045959"/>
+ <nd ref="705045960"/>
+ <nd ref="705045961"/>
+ <nd ref="705045944"/>
+ <nd ref="705045945"/>
+ <nd ref="705045946"/>
+ <nd ref="705045947"/>
+ <nd ref="705045948"/>
+ <nd ref="705045949"/>
+ <nd ref="705045950"/>
+ <nd ref="705045951"/>
+ <nd ref="705045952"/>
+ <nd ref="705045953"/>
+ <nd ref="705045954"/>
+ <nd ref="705045955"/>
+ <nd ref="705045956"/>
+ <nd ref="705045957"/>
+ <nd ref="807213078"/>
+ <nd ref="705045971"/>
+ <nd ref="705045972"/>
+ <nd ref="705045973"/>
+ <nd ref="705045974"/>
+ <nd ref="705045975"/>
+ <nd ref="705045976"/>
+ <nd ref="705045977"/>
+ <nd ref="705045978"/>
+ <nd ref="807213658"/>
+ <nd ref="705045979"/>
+ <nd ref="705045980"/>
+ <nd ref="705045981"/>
+ <nd ref="705045982"/>
+ <nd ref="705045983"/>
+ <nd ref="705045984"/>
+ <nd ref="705045985"/>
+ <nd ref="705045986"/>
+ <nd ref="807213009"/>
+ <nd ref="705045987"/>
+ <tag k="alt_name:es" v="Gran_Palacio"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Grand Palais"/>
+ <tag k="name:ru" v="Большой дворец"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.grandpalais.fr/"/>
+ <tag k="wikipedia" v="fr:Grand Palais (Paris)"/>
+ </way>
+ <way id="56186898">
+ <nd ref="705056265"/>
+ <nd ref="705056417"/>
+ <nd ref="705056439"/>
+ <nd ref="705056342"/>
+ <nd ref="705056200"/>
+ <nd ref="705056279"/>
+ <nd ref="705056192"/>
+ <nd ref="705056183"/>
+ <nd ref="705056071"/>
+ <nd ref="705056380"/>
+ <nd ref="705056162"/>
+ <nd ref="705056082"/>
+ <nd ref="705056357"/>
+ <nd ref="705056252"/>
+ <nd ref="705056205"/>
+ <nd ref="705056120"/>
+ <nd ref="705056391"/>
+ <nd ref="705056291"/>
+ <nd ref="705056087"/>
+ <nd ref="705056269"/>
+ <nd ref="705056413"/>
+ <nd ref="705056319"/>
+ <nd ref="705056142"/>
+ <nd ref="705056211"/>
+ <nd ref="705056265"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Pavillon de l'Arsenal"/>
+ <tag k="phone" v="01.42.76.33.97"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.pavillon-arsenal.com/"/>
+ <tag k="wikipedia" v="fr:Pavillon de l'Arsenal"/>
+ </way>
+ <way id="56640163">
+ <nd ref="205271816"/>
+ <nd ref="719020385"/>
+ <nd ref="517939564"/>
+ <nd ref="517939496"/>
+ <nd ref="708412962"/>
+ <nd ref="708412964"/>
+ <nd ref="719020336"/>
+ <nd ref="719020424"/>
+ <nd ref="708412966"/>
+ <nd ref="719020393"/>
+ <nd ref="517939517"/>
+ <nd ref="719020426"/>
+ <nd ref="517939509"/>
+ <nd ref="517939510"/>
+ <nd ref="517939511"/>
+ <nd ref="719020444"/>
+ <nd ref="719020357"/>
+ <nd ref="517939556"/>
+ <nd ref="212546071"/>
+ <nd ref="708412965"/>
+ <nd ref="708412963"/>
+ <nd ref="212545498"/>
+ <nd ref="212545497"/>
+ <nd ref="212545496"/>
+ <nd ref="212545494"/>
+ <nd ref="1440131536"/>
+ <nd ref="1440131523"/>
+ <nd ref="1440131535"/>
+ <nd ref="1440131540"/>
+ <nd ref="205271816"/>
+ <tag k="alt_name:es" v="Museo_Edad_Media"/>
+ <tag k="name" v="Musée National du Moyen Âge"/>
+ <tag k="phone" v="01.53.73.78.13"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2009"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-moyenage.fr/"/>
+ </way>
+ <way id="56687783">
+ <nd ref="708980873"/>
+ <nd ref="708981018"/>
+ <nd ref="708981076"/>
+ <nd ref="708980897"/>
+ <nd ref="708980809"/>
+ <nd ref="708980793"/>
+ <nd ref="708981041"/>
+ <nd ref="708981305"/>
+ <nd ref="708981329"/>
+ <nd ref="708981286"/>
+ <nd ref="708980893"/>
+ <nd ref="708981133"/>
+ <nd ref="708980750"/>
+ <nd ref="708981113"/>
+ <nd ref="708980733"/>
+ <nd ref="708980981"/>
+ <nd ref="708981222"/>
+ <nd ref="708980832"/>
+ <nd ref="708981083"/>
+ <nd ref="708981334"/>
+ <nd ref="708980940"/>
+ <nd ref="708981060"/>
+ <nd ref="708981308"/>
+ <nd ref="708980918"/>
+ <nd ref="708980816"/>
+ <nd ref="708981159"/>
+ <nd ref="708981149"/>
+ <nd ref="708981267"/>
+ <nd ref="708980871"/>
+ <nd ref="708980879"/>
+ <nd ref="708981119"/>
+ <nd ref="708980738"/>
+ <nd ref="708981117"/>
+ <nd ref="708980873"/>
+ <tag k="name" v="Musée d'Art et d'Histoire du Judaïsme"/>
+ <tag k="phone" v="01.53.01.86.53"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.mahj.org"/>
+ </way>
+ <way id="57720409">
+ <nd ref="715636385"/>
+ <nd ref="715636658"/>
+ <nd ref="715637223"/>
+ <nd ref="715636328"/>
+ <nd ref="715636895"/>
+ <nd ref="715637132"/>
+ <nd ref="715636852"/>
+ <nd ref="715636474"/>
+ <nd ref="715635949"/>
+ <nd ref="715637101"/>
+ <nd ref="715636112"/>
+ <nd ref="715636981"/>
+ <nd ref="715636923"/>
+ <nd ref="715636069"/>
+ <nd ref="715636599"/>
+ <nd ref="715637152"/>
+ <nd ref="715636265"/>
+ <nd ref="715636811"/>
+ <nd ref="715635960"/>
+ <nd ref="715637198"/>
+ <nd ref="715636486"/>
+ <nd ref="715636776"/>
+ <nd ref="715637286"/>
+ <nd ref="715636447"/>
+ <nd ref="715637034"/>
+ <nd ref="715636148"/>
+ <nd ref="715636684"/>
+ <nd ref="715637242"/>
+ <nd ref="715636356"/>
+ <nd ref="715636648"/>
+ <nd ref="715637209"/>
+ <nd ref="715636307"/>
+ <nd ref="715636862"/>
+ <nd ref="715636003"/>
+ <nd ref="715636830"/>
+ <nd ref="715637094"/>
+ <nd ref="715636751"/>
+ <nd ref="715637277"/>
+ <nd ref="715636425"/>
+ <nd ref="715637006"/>
+ <nd ref="715636125"/>
+ <nd ref="715636663"/>
+ <nd ref="715637225"/>
+ <nd ref="715636332"/>
+ <nd ref="715636620"/>
+ <nd ref="715637180"/>
+ <nd ref="715636282"/>
+ <nd ref="715636837"/>
+ <nd ref="715635976"/>
+ <nd ref="715636514"/>
+ <nd ref="715637085"/>
+ <nd ref="715636186"/>
+ <nd ref="715636466"/>
+ <nd ref="715637040"/>
+ <nd ref="715636154"/>
+ <nd ref="715636700"/>
+ <nd ref="715637253"/>
+ <nd ref="715636630"/>
+ <nd ref="715636098"/>
+ <nd ref="715637042"/>
+ <nd ref="715636765"/>
+ <nd ref="715636481"/>
+ <nd ref="715637178"/>
+ <nd ref="715636542"/>
+ <nd ref="715635996"/>
+ <nd ref="1028569362"/>
+ <nd ref="1028572726"/>
+ <nd ref="715637017"/>
+ <nd ref="715636494"/>
+ <nd ref="715636597"/>
+ <nd ref="715637190"/>
+ <nd ref="715636067"/>
+ <nd ref="715636921"/>
+ <nd ref="715636693"/>
+ <nd ref="715637136"/>
+ <nd ref="715636774"/>
+ <nd ref="715636210"/>
+ <nd ref="715637103"/>
+ <nd ref="715637285"/>
+ <nd ref="715636446"/>
+ <nd ref="715637031"/>
+ <nd ref="715636339"/>
+ <nd ref="715636913"/>
+ <nd ref="715636051"/>
+ <nd ref="715636584"/>
+ <nd ref="715637139"/>
+ <nd ref="715635991"/>
+ <nd ref="715636527"/>
+ <nd ref="715637093"/>
+ <nd ref="715636201"/>
+ <nd ref="715636768"/>
+ <nd ref="715637281"/>
+ <nd ref="715636438"/>
+ <nd ref="715637013"/>
+ <nd ref="715636659"/>
+ <nd ref="715637224"/>
+ <nd ref="715636330"/>
+ <nd ref="715636898"/>
+ <nd ref="715636039"/>
+ <nd ref="715636575"/>
+ <nd ref="715637130"/>
+ <nd ref="715636240"/>
+ <nd ref="715636511"/>
+ <nd ref="715637082"/>
+ <nd ref="715636184"/>
+ <nd ref="715636748"/>
+ <nd ref="715637256"/>
+ <nd ref="715636385"/>
+ <tag k="name" v="Archives Nationales"/>
+ <tag k="phone" v="01.40.27.60.96"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.archivesnationales.culture.gouv.fr/"/>
+ </way>
+ <way id="57727912">
+ <nd ref="715744237"/>
+ <nd ref="715744451"/>
+ <nd ref="715744341"/>
+ <nd ref="715744232"/>
+ <nd ref="715744390"/>
+ <nd ref="715744449"/>
+ <nd ref="715744284"/>
+ <nd ref="715744378"/>
+ <nd ref="715744490"/>
+ <nd ref="715744274"/>
+ <nd ref="715744382"/>
+ <nd ref="715744219"/>
+ <nd ref="715744434"/>
+ <nd ref="715744289"/>
+ <nd ref="715744277"/>
+ <nd ref="715744410"/>
+ <nd ref="715744461"/>
+ <nd ref="715744305"/>
+ <nd ref="715744246"/>
+ <nd ref="715744370"/>
+ <nd ref="715744260"/>
+ <nd ref="715744237"/>
+ <tag k="name" v="Musée de la Serrure"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="57745741">
+ <nd ref="715963565"/>
+ <nd ref="715963606"/>
+ <nd ref="715963658"/>
+ <nd ref="715963684"/>
+ <nd ref="715963651"/>
+ <nd ref="715963700"/>
+ <nd ref="715963544"/>
+ <nd ref="715963597"/>
+ <nd ref="715963648"/>
+ <nd ref="715963536"/>
+ <nd ref="715963574"/>
+ <nd ref="715963727"/>
+ <nd ref="715963619"/>
+ <nd ref="715963576"/>
+ <nd ref="715963674"/>
+ <nd ref="715963590"/>
+ <nd ref="715963711"/>
+ <nd ref="715963664"/>
+ <nd ref="715963614"/>
+ <nd ref="715963653"/>
+ <nd ref="715963687"/>
+ <nd ref="715963603"/>
+ <nd ref="715963654"/>
+ <nd ref="715963703"/>
+ <nd ref="715963546"/>
+ <nd ref="715963611"/>
+ <nd ref="715963726"/>
+ <nd ref="715963702"/>
+ <nd ref="715963539"/>
+ <nd ref="715963634"/>
+ <nd ref="715963622"/>
+ <nd ref="715963578"/>
+ <nd ref="715963556"/>
+ <nd ref="715963621"/>
+ <nd ref="715963641"/>
+ <nd ref="715963565"/>
+ <tag k="alt_name:es" v="Museo_Picasso"/>
+ <tag k="name" v="Musée Picasso"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="fr:Musée Picasso (Paris)"/>
+ </way>
+ <way id="57781646">
+ <nd ref="716912912"/>
+ <nd ref="716912716"/>
+ <nd ref="716912640"/>
+ <nd ref="716912887"/>
+ <nd ref="716912797"/>
+ <nd ref="716912755"/>
+ <nd ref="716912883"/>
+ <nd ref="716912667"/>
+ <nd ref="716912917"/>
+ <nd ref="716912828"/>
+ <nd ref="716912927"/>
+ <nd ref="716912806"/>
+ <nd ref="716912651"/>
+ <nd ref="716912727"/>
+ <nd ref="716912673"/>
+ <nd ref="716912749"/>
+ <nd ref="716912623"/>
+ <nd ref="716912912"/>
+ <tag k="amenity" v="arts_centre"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Centre Culturel Suédois"/>
+ <tag k="phone" v="01.44.78.80.20"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.si.se/Paris/"/>
+ </way>
+ <way id="57781649">
+ <nd ref="716912671"/>
+ <nd ref="716912877"/>
+ <nd ref="716912684"/>
+ <nd ref="716912912"/>
+ <nd ref="716912623"/>
+ <nd ref="716912787"/>
+ <nd ref="716912706"/>
+ <nd ref="716912600"/>
+ <nd ref="716912879"/>
+ <nd ref="716912821"/>
+ <nd ref="716912922"/>
+ <nd ref="716912868"/>
+ <nd ref="716912671"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Cognacq-Jay"/>
+ <tag k="phone" v="01.40.27.07.21"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </way>
+ <way id="57832950">
+ <nd ref="717510329"/>
+ <nd ref="717510551"/>
+ <nd ref="717510323"/>
+ <nd ref="717510399"/>
+ <nd ref="717510514"/>
+ <nd ref="717510374"/>
+ <nd ref="717510589"/>
+ <nd ref="717510352"/>
+ <nd ref="717510449"/>
+ <nd ref="717510544"/>
+ <nd ref="717510619"/>
+ <nd ref="717510390"/>
+ <nd ref="717510491"/>
+ <nd ref="717510542"/>
+ <nd ref="717510618"/>
+ <nd ref="717510511"/>
+ <nd ref="717510329"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Carnavalet"/>
+ <tag k="old_name" v="Hôtel Carnavalet"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="fr:Musée Carnavalet"/>
+ </way>
+ <way id="58551606">
+ <nd ref="725413099"/>
+ <nd ref="725413084"/>
+ <nd ref="725413085"/>
+ <nd ref="725413069"/>
+ <nd ref="725413070"/>
+ <nd ref="725413071"/>
+ <nd ref="725571165"/>
+ <nd ref="725571150"/>
+ <nd ref="725571167"/>
+ <nd ref="725571169"/>
+ <nd ref="725571171"/>
+ <nd ref="725571173"/>
+ <nd ref="725571175"/>
+ <nd ref="725571180"/>
+ <nd ref="725571182"/>
+ <nd ref="725571194"/>
+ <nd ref="725571196"/>
+ <nd ref="725571191"/>
+ <nd ref="725413099"/>
+ <tag k="building" v="yes"/>
+ <tag k="email" v="hoteldesenlis@wanadoo.fr"/>
+ <tag k="name" v="Hôtel de Senlis"/>
+ <tag k="phone" v="+33 (0)1 43 29 93 10"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.paris-hotel-senlis.com/"/>
+ </way>
+ <way id="60809008">
+ <nd ref="761250062"/>
+ <nd ref="761250093"/>
+ <nd ref="761250050"/>
+ <nd ref="761250080"/>
+ <nd ref="761250065"/>
+ <nd ref="761250097"/>
+ <nd ref="761249982"/>
+ <nd ref="761250042"/>
+ <nd ref="761250018"/>
+ <nd ref="761250039"/>
+ <nd ref="761250063"/>
+ <nd ref="761250094"/>
+ <nd ref="761249978"/>
+ <nd ref="761250014"/>
+ <nd ref="761250109"/>
+ <nd ref="761250062"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel de l'Espérance"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="62288069">
+ <nd ref="778228894"/>
+ <nd ref="778228264"/>
+ <nd ref="806897882"/>
+ <nd ref="778228434"/>
+ <nd ref="778229598"/>
+ <nd ref="778228209"/>
+ <nd ref="778228962"/>
+ <nd ref="778229154"/>
+ <nd ref="778229333"/>
+ <nd ref="778228570"/>
+ <nd ref="778228402"/>
+ <nd ref="778227840"/>
+ <nd ref="778228529"/>
+ <nd ref="778227958"/>
+ <nd ref="778229776"/>
+ <nd ref="1615799968"/>
+ <nd ref="778228894"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée national Eugène Delacroix"/>
+ <tag k="phone" v="01.44.41.86.50"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-delacroix.fr"/>
+ </way>
+ <way id="62819702">
+ <nd ref="782261039"/>
+ <nd ref="782262225"/>
+ <nd ref="782256060"/>
+ <nd ref="782254066"/>
+ <nd ref="782260813"/>
+ <nd ref="782256825"/>
+ <nd ref="782259100"/>
+ <nd ref="782264853"/>
+ <nd ref="782254679"/>
+ <nd ref="782253229"/>
+ <nd ref="782261242"/>
+ <nd ref="782262510"/>
+ <nd ref="782255124"/>
+ <nd ref="782251472"/>
+ <nd ref="782259443"/>
+ <nd ref="782253794"/>
+ <nd ref="782260533"/>
+ <nd ref="782263390"/>
+ <nd ref="782263947"/>
+ <nd ref="782261025"/>
+ <nd ref="782264816"/>
+ <nd ref="782265746"/>
+ <nd ref="782249947"/>
+ <nd ref="782270343"/>
+ <nd ref="782267844"/>
+ <nd ref="782266667"/>
+ <nd ref="782260932"/>
+ <nd ref="782251973"/>
+ <nd ref="782260755"/>
+ <nd ref="782253443"/>
+ <nd ref="1244401754"/>
+ <nd ref="782270170"/>
+ <nd ref="782265019"/>
+ <nd ref="782261039"/>
+ <tag k="alt_name" v="Palais de la Porte Dorée"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Cité nationale de l'histoire de l'immigration"/>
+ <tag k="phone" v="01.53.59.58.60"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.histoire-immigration.fr/"/>
+ </way>
+ <way id="62848404">
+ <nd ref="782602289"/>
+ <nd ref="782603026"/>
+ <nd ref="782601850"/>
+ <nd ref="782602244"/>
+ <nd ref="782601652"/>
+ <nd ref="782602014"/>
+ <nd ref="782603443"/>
+ <nd ref="782601280"/>
+ <nd ref="782603208"/>
+ <nd ref="782601092"/>
+ <nd ref="782602402"/>
+ <nd ref="782602792"/>
+ <nd ref="782602219"/>
+ <nd ref="782602613"/>
+ <nd ref="782601483"/>
+ <nd ref="782601835"/>
+ <nd ref="782601256"/>
+ <nd ref="782601636"/>
+ <nd ref="782602998"/>
+ <nd ref="782600979"/>
+ <nd ref="782602840"/>
+ <nd ref="782603266"/>
+ <nd ref="782602060"/>
+ <nd ref="782602457"/>
+ <nd ref="782602853"/>
+ <nd ref="782603284"/>
+ <nd ref="782602071"/>
+ <nd ref="782602474"/>
+ <nd ref="782601893"/>
+ <nd ref="782602289"/>
+ <tag k="alt_name" v="Orangerie"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Orangerie du Sénat"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="63178753">
+ <nd ref="784437109"/>
+ <nd ref="784437616"/>
+ <nd ref="784437829"/>
+ <nd ref="784437610"/>
+ <nd ref="784437282"/>
+ <nd ref="784437286"/>
+ <nd ref="784437522"/>
+ <nd ref="784437802"/>
+ <nd ref="784437371"/>
+ <nd ref="784437378"/>
+ <nd ref="784437895"/>
+ <nd ref="784437558"/>
+ <nd ref="784437800"/>
+ <nd ref="784437488"/>
+ <nd ref="784437277"/>
+ <nd ref="784437951"/>
+ <nd ref="784437192"/>
+ <nd ref="784437783"/>
+ <nd ref="784437637"/>
+ <nd ref="784437908"/>
+ <nd ref="784437334"/>
+ <nd ref="784437752"/>
+ <nd ref="784437445"/>
+ <nd ref="784437844"/>
+ <nd ref="784437642"/>
+ <nd ref="784437597"/>
+ <nd ref="784437322"/>
+ <nd ref="784437652"/>
+ <nd ref="784437383"/>
+ <nd ref="784437267"/>
+ <nd ref="784437419"/>
+ <nd ref="784437698"/>
+ <nd ref="784437375"/>
+ <nd ref="784437478"/>
+ <nd ref="784437602"/>
+ <nd ref="784437095"/>
+ <nd ref="784437792"/>
+ <nd ref="784437426"/>
+ <nd ref="784437187"/>
+ <nd ref="784437288"/>
+ <nd ref="784437891"/>
+ <nd ref="784437310"/>
+ <nd ref="784437941"/>
+ <nd ref="784437154"/>
+ <nd ref="1079716208"/>
+ <nd ref="784437121"/>
+ <nd ref="784437945"/>
+ <nd ref="784437901"/>
+ <nd ref="784437858"/>
+ <nd ref="784437294"/>
+ <nd ref="784437194"/>
+ <nd ref="784437805"/>
+ <nd ref="784437223"/>
+ <nd ref="784437938"/>
+ <nd ref="784437414"/>
+ <nd ref="784437864"/>
+ <nd ref="784437586"/>
+ <nd ref="784437854"/>
+ <nd ref="784437861"/>
+ <nd ref="784437090"/>
+ <nd ref="784437361"/>
+ <nd ref="784437244"/>
+ <nd ref="784437912"/>
+ <nd ref="784437704"/>
+ <nd ref="784437272"/>
+ <nd ref="784437501"/>
+ <nd ref="784437230"/>
+ <nd ref="784437498"/>
+ <nd ref="784437695"/>
+ <nd ref="784437423"/>
+ <nd ref="784437114"/>
+ <nd ref="784437748"/>
+ <nd ref="784437724"/>
+ <nd ref="784437591"/>
+ <nd ref="784437226"/>
+ <nd ref="784437645"/>
+ <nd ref="784437606"/>
+ <nd ref="784437147"/>
+ <nd ref="784437219"/>
+ <nd ref="784437594"/>
+ <nd ref="784437905"/>
+ <nd ref="784437494"/>
+ <nd ref="784437958"/>
+ <nd ref="784437386"/>
+ <nd ref="784437880"/>
+ <nd ref="784437685"/>
+ <nd ref="784437898"/>
+ <nd ref="784437701"/>
+ <nd ref="784437667"/>
+ <nd ref="784437304"/>
+ <nd ref="784437706"/>
+ <nd ref="784437217"/>
+ <nd ref="784437240"/>
+ <nd ref="1079716351"/>
+ <nd ref="784437084"/>
+ <nd ref="784437269"/>
+ <nd ref="784437834"/>
+ <nd ref="784437930"/>
+ <nd ref="784437550"/>
+ <nd ref="784437732"/>
+ <nd ref="784437812"/>
+ <nd ref="784437475"/>
+ <nd ref="784437358"/>
+ <nd ref="784437234"/>
+ <nd ref="784437109"/>
+ <tag k="alt_name:es" v="Museo_Orsay"/>
+ <tag k="building" v="yes"/>
+ <tag k="importance" v="international"/>
+ <tag k="name" v="Musée d'Orsay"/>
+ <tag k="name:ja" v="オルセー美術館"/>
+ <tag k="name:ru" v="Музей Орсе"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-orsay.fr/"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Musée d'Orsay"/>
+ <tag k="wikipedia:en" v="Musée_d'Orsay"/>
+ <tag k="wikipedia:ru" v="Музей_Орсе"/>
+ </way>
+ <way id="63195932">
+ <nd ref="784380704"/>
+ <nd ref="784461280"/>
+ <nd ref="784364244"/>
+ <nd ref="784316020"/>
+ <nd ref="784382071"/>
+ <nd ref="784354812"/>
+ <nd ref="784385304"/>
+ <nd ref="784350653"/>
+ <nd ref="784346182"/>
+ <nd ref="784474564"/>
+ <nd ref="784317546"/>
+ <nd ref="784318799"/>
+ <nd ref="784444605"/>
+ <nd ref="784320067"/>
+ <nd ref="784339383"/>
+ <nd ref="784428707"/>
+ <nd ref="784357272"/>
+ <nd ref="784354261"/>
+ <nd ref="784457336"/>
+ <nd ref="1281900647"/>
+ <nd ref="264775551"/>
+ <nd ref="1281900498"/>
+ <nd ref="1281900585"/>
+ <nd ref="1281900611"/>
+ <nd ref="784369152"/>
+ <nd ref="1281858379"/>
+ <nd ref="784464761"/>
+ <nd ref="784394160"/>
+ <nd ref="784459957"/>
+ <nd ref="784512707"/>
+ <nd ref="784383731"/>
+ <nd ref="784471155"/>
+ <nd ref="784416890"/>
+ <nd ref="784380704"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel All Seasons"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="63203368">
+ <nd ref="784499599"/>
+ <nd ref="784388476"/>
+ <nd ref="784472188"/>
+ <nd ref="1272453678"/>
+ <nd ref="784363867"/>
+ <nd ref="784358766"/>
+ <nd ref="784444257"/>
+ <nd ref="784499599"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel de Bordeaux"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="63638587">
+ <nd ref="787348825"/>
+ <nd ref="787360855"/>
+ <nd ref="1289454535"/>
+ <nd ref="1289453906"/>
+ <nd ref="787326292"/>
+ <nd ref="787332794"/>
+ <nd ref="787380784"/>
+ <nd ref="787348825"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="63639857">
+ <nd ref="787378181"/>
+ <nd ref="787355717"/>
+ <nd ref="1301073488"/>
+ <nd ref="787334181"/>
+ <nd ref="787352233"/>
+ <nd ref="787322003"/>
+ <nd ref="787404953"/>
+ <nd ref="787407060"/>
+ <nd ref="787378181"/>
+ <tag k="building" v="yes"/>
+ <tag k="phone" v="01.46.59.05.51"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedufumeur.net"/>
+ </way>
+ <way id="63641010">
+ <nd ref="787349691"/>
+ <nd ref="787344051"/>
+ <nd ref="787353236"/>
+ <nd ref="787400281"/>
+ <nd ref="787370855"/>
+ <nd ref="787320602"/>
+ <nd ref="787369958"/>
+ <nd ref="787334959"/>
+ <nd ref="787399483"/>
+ <nd ref="1313543594"/>
+ <nd ref="1313543587"/>
+ <nd ref="787346286"/>
+ <nd ref="787343280"/>
+ <nd ref="787383154"/>
+ <nd ref="787373041"/>
+ <nd ref="787402798"/>
+ <nd ref="787327385"/>
+ <nd ref="787323055"/>
+ <nd ref="787330678"/>
+ <nd ref="787334631"/>
+ <nd ref="1307180117"/>
+ <nd ref="787387141"/>
+ <nd ref="787334903"/>
+ <nd ref="787337169"/>
+ <nd ref="787356054"/>
+ <nd ref="787364151"/>
+ <nd ref="787377199"/>
+ <nd ref="787340694"/>
+ <nd ref="787349691"/>
+ <tag k="building" v="yes"/>
+ <tag k="fax" v="+33149292030"/>
+ <tag k="internet_access" v="yes"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="IBIS"/>
+ <tag k="operator" v="IBIS"/>
+ <tag k="phone" v="+33149292020"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.ibishotel.com/gb/hotel-1399-ibis-paris-bastille-opera-11eme/index.shtml"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="63649008">
+ <nd ref="787371747"/>
+ <nd ref="787338063"/>
+ <nd ref="787355106"/>
+ <nd ref="787390010"/>
+ <nd ref="787319805"/>
+ <nd ref="787318811"/>
+ <nd ref="787332794"/>
+ <nd ref="787326292"/>
+ <nd ref="1289453765"/>
+ <nd ref="1541591962"/>
+ <nd ref="787371747"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="64040950">
+ <nd ref="789985748"/>
+ <nd ref="789975852"/>
+ <nd ref="789983037"/>
+ <nd ref="789989028"/>
+ <nd ref="789984475"/>
+ <nd ref="789981392"/>
+ <nd ref="789993212"/>
+ <nd ref="789982408"/>
+ <nd ref="789980101"/>
+ <nd ref="789982896"/>
+ <nd ref="789995340"/>
+ <nd ref="789984584"/>
+ <nd ref="789991706"/>
+ <nd ref="789984122"/>
+ <nd ref="789977619"/>
+ <nd ref="789986979"/>
+ <nd ref="789979057"/>
+ <nd ref="789987206"/>
+ <nd ref="789994206"/>
+ <nd ref="789994957"/>
+ <nd ref="789988610"/>
+ <nd ref="789979590"/>
+ <nd ref="789977593"/>
+ <nd ref="789988667"/>
+ <nd ref="789992661"/>
+ <nd ref="789992612"/>
+ <nd ref="789982703"/>
+ <nd ref="789982766"/>
+ <nd ref="789994386"/>
+ <nd ref="789986705"/>
+ <nd ref="789982942"/>
+ <nd ref="789992750"/>
+ <nd ref="789980802"/>
+ <nd ref="789992585"/>
+ <nd ref="789982917"/>
+ <nd ref="789994605"/>
+ <nd ref="789979833"/>
+ <nd ref="789992501"/>
+ <nd ref="789977981"/>
+ <nd ref="789979853"/>
+ <nd ref="789979750"/>
+ <nd ref="789985250"/>
+ <nd ref="789994895"/>
+ <nd ref="789992654"/>
+ <nd ref="789980152"/>
+ <nd ref="789982939"/>
+ <nd ref="789981637"/>
+ <nd ref="789985584"/>
+ <nd ref="789980482"/>
+ <nd ref="789974581"/>
+ <nd ref="789976630"/>
+ <nd ref="789981735"/>
+ <nd ref="789993438"/>
+ <nd ref="789994670"/>
+ <nd ref="789982072"/>
+ <nd ref="789995150"/>
+ <nd ref="789978302"/>
+ <nd ref="789992970"/>
+ <nd ref="789976634"/>
+ <nd ref="789982828"/>
+ <nd ref="789980844"/>
+ <nd ref="789990647"/>
+ <nd ref="789979661"/>
+ <nd ref="789979780"/>
+ <nd ref="789975553"/>
+ <nd ref="789979808"/>
+ <nd ref="789980035"/>
+ <nd ref="789978213"/>
+ <nd ref="789977743"/>
+ <nd ref="789984015"/>
+ <nd ref="789976866"/>
+ <nd ref="789981456"/>
+ <nd ref="789981971"/>
+ <nd ref="789981051"/>
+ <nd ref="789992699"/>
+ <nd ref="789977276"/>
+ <nd ref="789988751"/>
+ <nd ref="789989912"/>
+ <nd ref="789985748"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Ibis"/>
+ <tag k="operator" v="ibis"/>
+ <tag k="phone" v="+3340380404"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.ibishotel.com/fr/hotel-1401-ibis-paris-la-villette-cite-des-sciences-19eme/location.shtml"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="64315504">
+ <nd ref="791864575"/>
+ <nd ref="791863982"/>
+ <nd ref="976978222"/>
+ <nd ref="791862842"/>
+ <nd ref="791862979"/>
+ <nd ref="791861911"/>
+ <nd ref="791862523"/>
+ <nd ref="791861522"/>
+ <nd ref="791862635"/>
+ <nd ref="791865615"/>
+ <nd ref="976978257"/>
+ <nd ref="791864575"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Printania"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="64315513">
+ <nd ref="791865670"/>
+ <nd ref="1300595272"/>
+ <nd ref="791863696"/>
+ <nd ref="791861511"/>
+ <nd ref="791865470"/>
+ <nd ref="791862976"/>
+ <nd ref="791863242"/>
+ <nd ref="791864770"/>
+ <nd ref="791862832"/>
+ <nd ref="791864960"/>
+ <nd ref="791863684"/>
+ <nd ref="791864181"/>
+ <nd ref="791865670"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Acropolis"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="65089499">
+ <nd ref="796867052"/>
+ <nd ref="1193609324"/>
+ <nd ref="796867022"/>
+ <nd ref="796866843"/>
+ <nd ref="796866706"/>
+ <nd ref="796866699"/>
+ <nd ref="796866413"/>
+ <nd ref="796866953"/>
+ <nd ref="796866336"/>
+ <nd ref="796867052"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Institut Néerlandais"/>
+ <tag k="phone" v="01.53.59.12.40"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.institutneerlandais.com/"/>
+ </way>
+ <way id="67282955">
+ <nd ref="812637253"/>
+ <nd ref="812634291"/>
+ <nd ref="812627276"/>
+ <nd ref="812632183"/>
+ <nd ref="812633849"/>
+ <nd ref="812610078"/>
+ <nd ref="812621449"/>
+ <nd ref="812633518"/>
+ <nd ref="812635520"/>
+ <nd ref="812618880"/>
+ <nd ref="812608970"/>
+ <nd ref="812634199"/>
+ <nd ref="812612702"/>
+ <nd ref="812612839"/>
+ <nd ref="812630723"/>
+ <nd ref="812632393"/>
+ <nd ref="812634305"/>
+ <nd ref="812620824"/>
+ <nd ref="812637446"/>
+ <nd ref="812607555"/>
+ <nd ref="812637253"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Novotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise �� jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67283244">
+ <nd ref="812606760"/>
+ <nd ref="812634266"/>
+ <nd ref="812627468"/>
+ <nd ref="812638679"/>
+ <nd ref="812613559"/>
+ <nd ref="812627880"/>
+ <nd ref="812622037"/>
+ <nd ref="812631183"/>
+ <nd ref="812606695"/>
+ <nd ref="812607484"/>
+ <nd ref="812619753"/>
+ <nd ref="812632589"/>
+ <nd ref="812605822"/>
+ <nd ref="812621065"/>
+ <nd ref="812622553"/>
+ <nd ref="812620996"/>
+ <nd ref="812634532"/>
+ <nd ref="812621779"/>
+ <nd ref="812637690"/>
+ <nd ref="812606130"/>
+ <nd ref="812629816"/>
+ <nd ref="812608331"/>
+ <nd ref="812620821"/>
+ <nd ref="812610061"/>
+ <nd ref="812615368"/>
+ <nd ref="812629237"/>
+ <nd ref="812629019"/>
+ <nd ref="812609609"/>
+ <nd ref="812635904"/>
+ <nd ref="812619904"/>
+ <nd ref="812617298"/>
+ <nd ref="812635067"/>
+ <nd ref="812615363"/>
+ <nd ref="812606198"/>
+ <nd ref="812606369"/>
+ <nd ref="812629365"/>
+ <nd ref="812638464"/>
+ <nd ref="812614458"/>
+ <nd ref="812631239"/>
+ <nd ref="812608260"/>
+ <nd ref="812634291"/>
+ <nd ref="812637253"/>
+ <nd ref="812606760"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Etap Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise �� jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67353067">
+ <nd ref="813501115"/>
+ <nd ref="813502287"/>
+ <nd ref="813499812"/>
+ <nd ref="813500706"/>
+ <nd ref="813500036"/>
+ <nd ref="813500255"/>
+ <nd ref="813499828"/>
+ <nd ref="841989226"/>
+ <nd ref="813501115"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel d'Albion"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67396417">
+ <nd ref="813927224"/>
+ <nd ref="813926466"/>
+ <nd ref="813929221"/>
+ <nd ref="841989453"/>
+ <nd ref="813926533"/>
+ <nd ref="813927988"/>
+ <nd ref="841988748"/>
+ <nd ref="813927504"/>
+ <nd ref="813927224"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67405809">
+ <nd ref="814052251"/>
+ <nd ref="814052049"/>
+ <nd ref="841988804"/>
+ <nd ref="814051537"/>
+ <nd ref="814051385"/>
+ <nd ref="841988944"/>
+ <nd ref="814051844"/>
+ <nd ref="814051726"/>
+ <nd ref="814052251"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Holiday Inn"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67411565">
+ <nd ref="814098761"/>
+ <nd ref="814099291"/>
+ <nd ref="814099188"/>
+ <nd ref="814099102"/>
+ <nd ref="842075868"/>
+ <nd ref="814098933"/>
+ <nd ref="814099047"/>
+ <nd ref="814098761"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Paix Madeleine"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67543381">
+ <nd ref="815514295"/>
+ <nd ref="815511224"/>
+ <nd ref="815513536"/>
+ <nd ref="815508799"/>
+ <nd ref="815512797"/>
+ <nd ref="815508372"/>
+ <nd ref="815515414"/>
+ <nd ref="815508926"/>
+ <nd ref="815510905"/>
+ <nd ref="815511975"/>
+ <nd ref="815507462"/>
+ <nd ref="815501043"/>
+ <nd ref="947307604"/>
+ <nd ref="815512584"/>
+ <nd ref="815514295"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Paris Neuilly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67543703">
+ <nd ref="815511257"/>
+ <nd ref="815510881"/>
+ <nd ref="815512049"/>
+ <nd ref="815509897"/>
+ <nd ref="815511738"/>
+ <nd ref="815514371"/>
+ <nd ref="815510010"/>
+ <nd ref="815513138"/>
+ <nd ref="815511257"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Le Jardin de Neuilly"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="67561797">
+ <nd ref="815866542"/>
+ <nd ref="842128691"/>
+ <nd ref="815866889"/>
+ <nd ref="815866851"/>
+ <nd ref="842128547"/>
+ <nd ref="815866688"/>
+ <nd ref="815866722"/>
+ <nd ref="815866575"/>
+ <nd ref="815866537"/>
+ <nd ref="815866616"/>
+ <nd ref="815866443"/>
+ <nd ref="815866767"/>
+ <nd ref="815866492"/>
+ <nd ref="815866856"/>
+ <nd ref="815866814"/>
+ <nd ref="815866651"/>
+ <nd ref="815866892"/>
+ <nd ref="815866732"/>
+ <nd ref="815866690"/>
+ <nd ref="815866545"/>
+ <nd ref="815866771"/>
+ <nd ref="815866623"/>
+ <nd ref="815866542"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Pinacothèque de Paris"/>
+ <tag k="phone" v="01.42.68.02.01"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.pinacotheque.com/"/>
+ </way>
+ <way id="67843958">
+ <nd ref="819030723"/>
+ <nd ref="819033782"/>
+ <nd ref="819033214"/>
+ <nd ref="819032613"/>
+ <nd ref="819032083"/>
+ <nd ref="819031524"/>
+ <nd ref="819032949"/>
+ <nd ref="819032381"/>
+ <nd ref="819031859"/>
+ <nd ref="819031342"/>
+ <nd ref="819030787"/>
+ <nd ref="819033834"/>
+ <nd ref="819033276"/>
+ <nd ref="819032685"/>
+ <nd ref="819033801"/>
+ <nd ref="841915376"/>
+ <nd ref="819030723"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Cervantes Paris"/>
+ <tag k="phone" v="33-143-875-577"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="68353844">
+ <nd ref="822953163"/>
+ <nd ref="840978667"/>
+ <nd ref="840978808"/>
+ <nd ref="822953192"/>
+ <nd ref="822953662"/>
+ <nd ref="822952111"/>
+ <nd ref="822952077"/>
+ <nd ref="822766796"/>
+ <nd ref="822767664"/>
+ <nd ref="822767160"/>
+ <nd ref="822766556"/>
+ <nd ref="822767587"/>
+ <nd ref="822767063"/>
+ <nd ref="822766456"/>
+ <nd ref="822767385"/>
+ <nd ref="822766962"/>
+ <nd ref="822766349"/>
+ <nd ref="822953917"/>
+ <nd ref="822953456"/>
+ <nd ref="822951213"/>
+ <nd ref="822952082"/>
+ <nd ref="822953634"/>
+ <nd ref="822953163"/>
+ <tag k="name" v="Musée Nissim de Camondo"/>
+ <tag k="phone" v="01.44.55.57.50"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.lesartsdecoratifs.fr/"/>
+ </way>
+ <way id="68353920">
+ <nd ref="822953165"/>
+ <nd ref="822951213"/>
+ <nd ref="822953456"/>
+ <nd ref="822953917"/>
+ <nd ref="822952929"/>
+ <nd ref="822952288"/>
+ <nd ref="822952402"/>
+ <nd ref="822953933"/>
+ <nd ref="822952087"/>
+ <nd ref="822951627"/>
+ <nd ref="841953241"/>
+ <nd ref="822953165"/>
+ <tag k="name" v="Musée Cernuschi"/>
+ <tag k="phone" v="01.53.96.21.50"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </way>
+ <way id="68568682">
+ <nd ref="824424248"/>
+ <nd ref="824421823"/>
+ <nd ref="824421894"/>
+ <nd ref="824422845"/>
+ <nd ref="824422022"/>
+ <nd ref="824425869"/>
+ <nd ref="824424779"/>
+ <nd ref="824423831"/>
+ <nd ref="824425142"/>
+ <nd ref="824425840"/>
+ <nd ref="824424342"/>
+ <nd ref="824422318"/>
+ <nd ref="824425489"/>
+ <nd ref="824425093"/>
+ <nd ref="824424176"/>
+ <nd ref="824424306"/>
+ <nd ref="824421691"/>
+ <nd ref="824425154"/>
+ <nd ref="824425510"/>
+ <nd ref="824424418"/>
+ <nd ref="824422915"/>
+ <nd ref="824422998"/>
+ <nd ref="824424087"/>
+ <nd ref="824423248"/>
+ <nd ref="824424294"/>
+ <nd ref="824424650"/>
+ <nd ref="824424742"/>
+ <nd ref="824423575"/>
+ <nd ref="824423115"/>
+ <nd ref="824422441"/>
+ <nd ref="824423034"/>
+ <nd ref="824422433"/>
+ <nd ref="824422824"/>
+ <nd ref="824423778"/>
+ <nd ref="824424503"/>
+ <nd ref="824423520"/>
+ <nd ref="824425633"/>
+ <nd ref="824425341"/>
+ <nd ref="824425485"/>
+ <nd ref="824424812"/>
+ <nd ref="824424520"/>
+ <nd ref="824421619"/>
+ <nd ref="824423158"/>
+ <nd ref="824422380"/>
+ <nd ref="824421735"/>
+ <nd ref="824421579"/>
+ <nd ref="824425555"/>
+ <nd ref="824421665"/>
+ <nd ref="824424566"/>
+ <nd ref="824422602"/>
+ <nd ref="824421442"/>
+ <nd ref="824424600"/>
+ <nd ref="824424248"/>
+ <tag k="alt_name:es" v="Museo_Rodin"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Rodin"/>
+ <tag k="phone" v="01.44.18.61.10"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-rodin.fr/"/>
+ </way>
+ <way id="68804368">
+ <nd ref="826681454"/>
+ <nd ref="826682038"/>
+ <nd ref="841045850"/>
+ <nd ref="841045716"/>
+ <nd ref="826680773"/>
+ <nd ref="826681492"/>
+ <nd ref="826682083"/>
+ <nd ref="826680813"/>
+ <nd ref="826681884"/>
+ <nd ref="826680637"/>
+ <nd ref="841000540"/>
+ <nd ref="826681223"/>
+ <nd ref="826681739"/>
+ <nd ref="826681735"/>
+ <nd ref="826680502"/>
+ <nd ref="826681071"/>
+ <nd ref="826681596"/>
+ <nd ref="826682191"/>
+ <nd ref="826681454"/>
+ <tag k="building" v="yes"/>
+ <tag k="ele" v="36.0"/>
+ <tag k="name" v="Musée Jacquemart-André"/>
+ <tag k="phone" v="01.45.42.11.59"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.musee-jacquemart-andre.com/"/>
+ <tag k="wheelchair" v="no"/>
+ </way>
+ <way id="69257260">
+ <nd ref="830142557"/>
+ <nd ref="830142872"/>
+ <nd ref="830142914"/>
+ <nd ref="830150278"/>
+ <nd ref="830143362"/>
+ <nd ref="830149878"/>
+ <nd ref="1234207276"/>
+ <nd ref="830142557"/>
+ <tag k="building" v="yes"/>
+ <tag k="email" v="hotel.rotary@free.fr"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="yes"/>
+ <tag k="name" v="Hôtel Rotary"/>
+ <tag k="phone" v="+33-1-48742639"/>
+ <tag k="smoking" v="no"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotel-rotary.fr/"/>
+ </way>
+ <way id="69257501">
+ <nd ref="830146604"/>
+ <nd ref="830142556"/>
+ <nd ref="1234174673"/>
+ <nd ref="830146210"/>
+ <nd ref="830144202"/>
+ <nd ref="830146604"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Aurore Montmartre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="69257877">
+ <nd ref="830143077"/>
+ <nd ref="830151483"/>
+ <nd ref="830151452"/>
+ <nd ref="830153158"/>
+ <nd ref="1234196564"/>
+ <nd ref="830142580"/>
+ <nd ref="1234174847"/>
+ <nd ref="830147159"/>
+ <nd ref="830143077"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Le Secret de Paris"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="69417517">
+ <nd ref="831440340"/>
+ <nd ref="831433218"/>
+ <nd ref="831452567"/>
+ <nd ref="831452223"/>
+ <nd ref="831452196"/>
+ <nd ref="831440954"/>
+ <nd ref="831452221"/>
+ <nd ref="1242504766"/>
+ <nd ref="831452480"/>
+ <nd ref="831440377"/>
+ <nd ref="831433151"/>
+ <nd ref="831435717"/>
+ <nd ref="831436792"/>
+ <nd ref="831441015"/>
+ <nd ref="831452482"/>
+ <nd ref="831440340"/>
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="21"/>
+ <tag k="addr:postcode" v="75009"/>
+ <tag k="addr:street" v="Rue Buffault"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Touring"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotel-touring.fr/"/>
+ </way>
+ <way id="69549207">
+ <nd ref="832378324"/>
+ <nd ref="832378830"/>
+ <nd ref="832377086"/>
+ <nd ref="832377177"/>
+ <nd ref="832378336"/>
+ <nd ref="832378926"/>
+ <nd ref="832376644"/>
+ <nd ref="832378521"/>
+ <nd ref="832378808"/>
+ <nd ref="832376582"/>
+ <nd ref="832378324"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Hôtel de Chateaudun Opéra"/>
+ <tag k="phone" v="+33-1-57323616"/>
+ <tag k="smoking" v="no"/>
+ <tag k="source" v="survey"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="no"/>
+ </way>
+ <way id="69562890">
+ <nd ref="832527958"/>
+ <nd ref="832528237"/>
+ <nd ref="832530697"/>
+ <nd ref="1234212793"/>
+ <nd ref="832528450"/>
+ <nd ref="832525526"/>
+ <nd ref="832531012"/>
+ <nd ref="832529759"/>
+ <nd ref="832528373"/>
+ <nd ref="832525115"/>
+ <nd ref="832527958"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Monterosa"/>
+ <tag k="operator" v="Astotel Groupe"/>
+ <tag k="phone" v="+33 1 48 74 87 90"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="www.hotel-monterosa-opera.com‎"/>
+ </way>
+ <way id="69562973">
+ <nd ref="832530811"/>
+ <nd ref="832531199"/>
+ <nd ref="832525723"/>
+ <nd ref="832528258"/>
+ <nd ref="832527944"/>
+ <nd ref="832530807"/>
+ <nd ref="832528800"/>
+ <nd ref="832530805"/>
+ <nd ref="1232995919"/>
+ <nd ref="832530811"/>
+ <tag k="building" v="yes"/>
+ <tag k="designation" v="Three star hotel *** Hôtel trois étoiles"/>
+ <tag k="name" v="Hôtel Touraine Opera"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="73119871">
+ <nd ref="867532520"/>
+ <nd ref="867525384"/>
+ <nd ref="867462787"/>
+ <nd ref="867454851"/>
+ <nd ref="867497242"/>
+ <nd ref="867526635"/>
+ <nd ref="867477493"/>
+ <nd ref="867526769"/>
+ <nd ref="867459633"/>
+ <nd ref="867430381"/>
+ <nd ref="867516775"/>
+ <nd ref="867514491"/>
+ <nd ref="867490100"/>
+ <nd ref="867528239"/>
+ <nd ref="867476552"/>
+ <nd ref="867434699"/>
+ <nd ref="867503736"/>
+ <nd ref="867500826"/>
+ <nd ref="867456110"/>
+ <nd ref="867484162"/>
+ <nd ref="867442515"/>
+ <nd ref="867477180"/>
+ <nd ref="867509932"/>
+ <nd ref="867513650"/>
+ <nd ref="867510294"/>
+ <nd ref="867506872"/>
+ <nd ref="867499713"/>
+ <nd ref="867511883"/>
+ <nd ref="867444990"/>
+ <nd ref="867530809"/>
+ <nd ref="867489155"/>
+ <nd ref="867495273"/>
+ <nd ref="867495347"/>
+ <nd ref="867532281"/>
+ <nd ref="867512680"/>
+ <nd ref="867470413"/>
+ <nd ref="867499996"/>
+ <nd ref="867532520"/>
+ <tag k="building" v="yes"/>
+ <tag k="operator" v="Etap hotel"/>
+ <tag k="source" v="extraction vectorielle v1 cadastre-dgi-fr source : Direction Générale des Impôts - Cadas. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="limited"/>
+ </way>
+ <way id="74333026">
+ <nd ref="878712453"/>
+ <nd ref="878714890"/>
+ <nd ref="878709291"/>
+ <nd ref="878708471"/>
+ <nd ref="878713801"/>
+ <nd ref="878711338"/>
+ <nd ref="878702453"/>
+ <nd ref="878701583"/>
+ <nd ref="878707650"/>
+ <nd ref="878704724"/>
+ <nd ref="878710474"/>
+ <nd ref="878712453"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Boulogne Résidence Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="74493934">
+ <nd ref="880480878"/>
+ <nd ref="880475143"/>
+ <nd ref="880470720"/>
+ <nd ref="880479130"/>
+ <nd ref="880476434"/>
+ <nd ref="880471002"/>
+ <nd ref="880479523"/>
+ <nd ref="880473365"/>
+ <nd ref="880481847"/>
+ <nd ref="880471666"/>
+ <nd ref="880480284"/>
+ <nd ref="880471968"/>
+ <nd ref="880480553"/>
+ <nd ref="880474653"/>
+ <nd ref="880470489"/>
+ <nd ref="880478789"/>
+ <nd ref="880472543"/>
+ <nd ref="880481079"/>
+ <nd ref="880476348"/>
+ <nd ref="880472979"/>
+ <nd ref="880481353"/>
+ <nd ref="880476895"/>
+ <nd ref="880471242"/>
+ <nd ref="880479821"/>
+ <nd ref="880473786"/>
+ <nd ref="880470095"/>
+ <nd ref="880477886"/>
+ <nd ref="880481024"/>
+ <nd ref="880472457"/>
+ <nd ref="880478711"/>
+ <nd ref="880480878"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Timhotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="75748357">
+ <nd ref="894250356"/>
+ <nd ref="894246371"/>
+ <nd ref="894252436"/>
+ <nd ref="894265004"/>
+ <nd ref="894233827"/>
+ <nd ref="894251269"/>
+ <nd ref="894260125"/>
+ <nd ref="894258306"/>
+ <nd ref="894272867"/>
+ <nd ref="894242129"/>
+ <nd ref="894242729"/>
+ <nd ref="894241345"/>
+ <nd ref="894250356"/>
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="61"/>
+ <tag k="addr:street" v="Rue des Moines"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Viator"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="1"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="75748877">
+ <nd ref="894245246"/>
+ <nd ref="894254654"/>
+ <nd ref="894264653"/>
+ <nd ref="894240397"/>
+ <nd ref="894239835"/>
+ <nd ref="894259818"/>
+ <nd ref="894245246"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Source Hotel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="75749542">
+ <nd ref="894247632"/>
+ <nd ref="894253879"/>
+ <nd ref="894265727"/>
+ <nd ref="894242500"/>
+ <nd ref="894232821"/>
+ <nd ref="894242231"/>
+ <nd ref="894264636"/>
+ <nd ref="894239984"/>
+ <nd ref="1343714770"/>
+ <nd ref="894247632"/>
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:country" v="FR"/>
+ <tag k="addr:housenumber" v="17"/>
+ <tag k="addr:postcode" v="75017"/>
+ <tag k="addr:street" v="Rue Darcet"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Camélia International"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="76031543">
+ <nd ref="897206067"/>
+ <nd ref="897212895"/>
+ <nd ref="897206054"/>
+ <nd ref="897206158"/>
+ <nd ref="897211079"/>
+ <nd ref="897218548"/>
+ <nd ref="897218493"/>
+ <nd ref="897219557"/>
+ <nd ref="897210180"/>
+ <nd ref="897209894"/>
+ <nd ref="897208655"/>
+ <nd ref="897215398"/>
+ <nd ref="897215081"/>
+ <nd ref="897209289"/>
+ <nd ref="897216511"/>
+ <nd ref="897206760"/>
+ <nd ref="897217633"/>
+ <nd ref="897213208"/>
+ <nd ref="897219619"/>
+ <nd ref="897206366"/>
+ <nd ref="897206048"/>
+ <nd ref="897208577"/>
+ <nd ref="897212547"/>
+ <nd ref="897213245"/>
+ <nd ref="897217882"/>
+ <nd ref="897208518"/>
+ <nd ref="897211529"/>
+ <nd ref="897206067"/>
+ <tag k="addr:full" v="6 impasse de la Défense 75018, Paris, France"/>
+ <tag k="amenity" v="restaurant"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Le BAL"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="77807626">
+ <nd ref="914792680"/>
+ <nd ref="914764541"/>
+ <nd ref="914768581"/>
+ <nd ref="914789374"/>
+ <nd ref="914794899"/>
+ <nd ref="914783309"/>
+ <nd ref="914792680"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Timhotel Montmartre"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="78145240">
+ <nd ref="917992889"/>
+ <nd ref="917991979"/>
+ <nd ref="917993354"/>
+ <nd ref="917997086"/>
+ <nd ref="1376197967"/>
+ <nd ref="1376197695"/>
+ <nd ref="917993514"/>
+ <nd ref="917992064"/>
+ <nd ref="917995597"/>
+ <nd ref="917995717"/>
+ <nd ref="1376197941"/>
+ <nd ref="917992889"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Paname Hotel Bastille"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="78145490">
+ <nd ref="917993954"/>
+ <nd ref="1372868597"/>
+ <nd ref="1372868602"/>
+ <nd ref="917993493"/>
+ <nd ref="917992524"/>
+ <nd ref="1173675828"/>
+ <nd ref="917993675"/>
+ <nd ref="917996850"/>
+ <nd ref="1376730432"/>
+ <nd ref="917996885"/>
+ <nd ref="917993954"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Ibis Gare De Lyon Diderot"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="78148871">
+ <nd ref="918083696"/>
+ <nd ref="918083058"/>
+ <nd ref="918071454"/>
+ <nd ref="918070957"/>
+ <nd ref="918085561"/>
+ <nd ref="1370205558"/>
+ <nd ref="918083696"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="78158774">
+ <nd ref="918150236"/>
+ <nd ref="918149707"/>
+ <nd ref="918149505"/>
+ <nd ref="918152215"/>
+ <nd ref="918150162"/>
+ <nd ref="918150653"/>
+ <nd ref="918151064"/>
+ <nd ref="918150853"/>
+ <nd ref="918151063"/>
+ <nd ref="918151566"/>
+ <nd ref="918149139"/>
+ <nd ref="918149356"/>
+ <nd ref="918151663"/>
+ <nd ref="918153459"/>
+ <nd ref="918152979"/>
+ <nd ref="918152182"/>
+ <nd ref="918152451"/>
+ <nd ref="918151270"/>
+ <nd ref="918150726"/>
+ <nd ref="918149516"/>
+ <nd ref="918150236"/>
+ <tag k="addr:housenumber" v="44"/>
+ <tag k="addr:street" v="Boulevard de Bercy"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Claret"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="78271385">
+ <nd ref="919129132"/>
+ <nd ref="919129569"/>
+ <nd ref="919128777"/>
+ <nd ref="919129113"/>
+ <nd ref="919130842"/>
+ <nd ref="919127514"/>
+ <nd ref="919130226"/>
+ <nd ref="919127624"/>
+ <nd ref="919130967"/>
+ <nd ref="919128837"/>
+ <nd ref="919127303"/>
+ <nd ref="919127499"/>
+ <nd ref="919130545"/>
+ <nd ref="919129930"/>
+ <nd ref="919129655"/>
+ <nd ref="919130958"/>
+ <nd ref="919127275"/>
+ <nd ref="919129389"/>
+ <nd ref="919129750"/>
+ <nd ref="919128926"/>
+ <nd ref="919129751"/>
+ <nd ref="919128922"/>
+ <nd ref="919127497"/>
+ <nd ref="1390844367"/>
+ <nd ref="1390844272"/>
+ <nd ref="1390844212"/>
+ <nd ref="919130963"/>
+ <nd ref="1390840560"/>
+ <nd ref="1390843371"/>
+ <nd ref="1390844158"/>
+ <nd ref="1390844876"/>
+ <nd ref="1390845132"/>
+ <nd ref="919127720"/>
+ <nd ref="1390843902"/>
+ <nd ref="1390843992"/>
+ <nd ref="1390844054"/>
+ <nd ref="1390844106"/>
+ <nd ref="1390844239"/>
+ <nd ref="919130252"/>
+ <nd ref="919129449"/>
+ <nd ref="919127668"/>
+ <nd ref="919129132"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Cinémathèque Française"/>
+ <tag k="phone" v="01.71.19.33.33"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.cinematheque.fr/"/>
+ <tag k="wikipedia" v="fr:Cinémathèque française"/>
+ </way>
+ <way id="78534890">
+ <nd ref="921523793"/>
+ <nd ref="921538138"/>
+ <nd ref="1395307648"/>
+ <nd ref="921528741"/>
+ <nd ref="921545381"/>
+ <nd ref="921526827"/>
+ <nd ref="921526845"/>
+ <nd ref="921535155"/>
+ <nd ref="921510550"/>
+ <nd ref="921532039"/>
+ <nd ref="921523793"/>
+ <tag k="building" v="yes"/>
+ <tag k="email" v="H0934@accor.com"/>
+ <tag k="fax" v="(+33)1/45821916"/>
+ <tag k="name" v="Hôtel Mercure"/>
+ <tag k="operator" v="Mercure"/>
+ <tag k="phone" v="(+33)1/45824800"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.mercure.com/fr/hotel-0934-mercure-paris-austerlitz-bibliotheque/index.shtml"/>
+ </way>
+ <way id="79107112">
+ <nd ref="924405303"/>
+ <nd ref="924402417"/>
+ <nd ref="924402023"/>
+ <nd ref="924400181"/>
+ <nd ref="1234207262"/>
+ <nd ref="924401143"/>
+ <nd ref="924403151"/>
+ <nd ref="924405303"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Royal Fromentin"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadas. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="hotelroyalfromentin.com"/>
+ </way>
+ <way id="79219238">
+ <nd ref="925427738"/>
+ <nd ref="925427539"/>
+ <nd ref="925427323"/>
+ <nd ref="925427370"/>
+ <nd ref="925427693"/>
+ <nd ref="925427213"/>
+ <nd ref="925427160"/>
+ <nd ref="925427264"/>
+ <nd ref="938887895"/>
+ <nd ref="925427435"/>
+ <nd ref="925427645"/>
+ <nd ref="938892950"/>
+ <nd ref="938892935"/>
+ <nd ref="925427738"/>
+ <tag k="addr:housenumber" v="5"/>
+ <tag k="addr:postcode" v="75016"/>
+ <tag k="addr:street" v="Avenue Marceau"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Fondation Pierre Bergé Yves Saint Laurent"/>
+ <tag k="source" v="Cadastre. Mise à jour : 2010; survey"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.fondation-pb-ysl.net"/>
+ <tag k="wikipedia" v="fr:Fondation Pierre Bergé - Yves Saint Laurent"/>
+ </way>
+ <way id="79219308">
+ <nd ref="925427109"/>
+ <nd ref="925427325"/>
+ <nd ref="925427742"/>
+ <nd ref="925427170"/>
+ <nd ref="925427380"/>
+ <nd ref="925427500"/>
+ <nd ref="925427700"/>
+ <nd ref="925427224"/>
+ <nd ref="925427445"/>
+ <nd ref="925427729"/>
+ <nd ref="925427430"/>
+ <nd ref="925427474"/>
+ <nd ref="925427674"/>
+ <nd ref="925427592"/>
+ <nd ref="925427092"/>
+ <nd ref="925427313"/>
+ <nd ref="925427528"/>
+ <nd ref="925427428"/>
+ <nd ref="925427637"/>
+ <nd ref="925427157"/>
+ <nd ref="925427361"/>
+ <nd ref="925427269"/>
+ <nd ref="925427486"/>
+ <nd ref="925427690"/>
+ <nd ref="925427210"/>
+ <nd ref="925427107"/>
+ <nd ref="925427324"/>
+ <nd ref="925427542"/>
+ <nd ref="925427740"/>
+ <nd ref="925427651"/>
+ <nd ref="925427163"/>
+ <nd ref="925427376"/>
+ <nd ref="925427603"/>
+ <nd ref="925427498"/>
+ <nd ref="925427698"/>
+ <nd ref="925427222"/>
+ <nd ref="925427442"/>
+ <nd ref="925427328"/>
+ <nd ref="925427555"/>
+ <nd ref="925427748"/>
+ <nd ref="925427279"/>
+ <nd ref="925427174"/>
+ <nd ref="925427389"/>
+ <nd ref="925427118"/>
+ <nd ref="925427704"/>
+ <nd ref="925427448"/>
+ <nd ref="925427564"/>
+ <nd ref="925427291"/>
+ <nd ref="925427510"/>
+ <nd ref="925427406"/>
+ <nd ref="925427130"/>
+ <nd ref="925427341"/>
+ <nd ref="925427245"/>
+ <nd ref="925427466"/>
+ <nd ref="925427662"/>
+ <nd ref="925427082"/>
+ <nd ref="925427304"/>
+ <nd ref="938892874"/>
+ <nd ref="925427632"/>
+ <nd ref="925427146"/>
+ <nd ref="925427352"/>
+ <nd ref="925427476"/>
+ <nd ref="925427201"/>
+ <nd ref="925427315"/>
+ <nd ref="925427535"/>
+ <nd ref="925427730"/>
+ <nd ref="925427259"/>
+ <nd ref="938892913"/>
+ <nd ref="925427159"/>
+ <nd ref="925427366"/>
+ <nd ref="925427594"/>
+ <nd ref="925427212"/>
+ <nd ref="925427109"/>
+ <tag k="alt_name:es" v="Palacio_Tokio"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée d'Art Moderne de la Ville de Paris"/>
+ <tag k="phone" v="01.53.67.40.00"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.mam.paris.fr/"/>
+ </way>
+ <way id="79219351">
+ <nd ref="925427433"/>
+ <nd ref="925427639"/>
+ <nd ref="925427549"/>
+ <nd ref="925427743"/>
+ <nd ref="925427272"/>
+ <nd ref="938892875"/>
+ <nd ref="925427488"/>
+ <nd ref="925427382"/>
+ <nd ref="925427110"/>
+ <nd ref="925427326"/>
+ <nd ref="925427227"/>
+ <nd ref="925427446"/>
+ <nd ref="925427172"/>
+ <nd ref="925427755"/>
+ <nd ref="925427502"/>
+ <nd ref="925427701"/>
+ <nd ref="925427612"/>
+ <nd ref="925427123"/>
+ <nd ref="925427337"/>
+ <nd ref="925427459"/>
+ <nd ref="925427183"/>
+ <nd ref="925427400"/>
+ <nd ref="925427513"/>
+ <nd ref="925427714"/>
+ <nd ref="925427237"/>
+ <nd ref="925427135"/>
+ <nd ref="925427348"/>
+ <nd ref="925427568"/>
+ <nd ref="925427765"/>
+ <nd ref="925427670"/>
+ <nd ref="925427193"/>
+ <nd ref="925427414"/>
+ <nd ref="925427623"/>
+ <nd ref="925427526"/>
+ <nd ref="925427726"/>
+ <nd ref="925427252"/>
+ <nd ref="925427469"/>
+ <nd ref="925427355"/>
+ <nd ref="925427589"/>
+ <nd ref="925427090"/>
+ <nd ref="925427308"/>
+ <nd ref="925427203"/>
+ <nd ref="925427421"/>
+ <nd ref="925427634"/>
+ <nd ref="925427148"/>
+ <nd ref="925427737"/>
+ <nd ref="925427263"/>
+ <nd ref="925427482"/>
+ <nd ref="925427685"/>
+ <nd ref="925427187"/>
+ <nd ref="925427405"/>
+ <nd ref="925427619"/>
+ <nd ref="925427129"/>
+ <nd ref="925427721"/>
+ <nd ref="925427243"/>
+ <nd ref="925427461"/>
+ <nd ref="925427487"/>
+ <nd ref="925427580"/>
+ <nd ref="925427080"/>
+ <nd ref="925427300"/>
+ <nd ref="925427517"/>
+ <nd ref="925427418"/>
+ <nd ref="925427631"/>
+ <nd ref="925427144"/>
+ <nd ref="925427475"/>
+ <nd ref="925427679"/>
+ <nd ref="925427200"/>
+ <nd ref="925427158"/>
+ <nd ref="925427593"/>
+ <nd ref="925427548"/>
+ <nd ref="925427433"/>
+ <tag k="alt_name:es" v="Palacio_Tokio"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Palais de Tokyo"/>
+ <tag k="phone" v="01.47.23.54.01"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.palaisdetokyo.com/"/>
+ </way>
+ <way id="79232292">
+ <nd ref="925525738"/>
+ <nd ref="925526009"/>
+ <nd ref="925525863"/>
+ <nd ref="925526209"/>
+ <nd ref="925526546"/>
+ <nd ref="925525776"/>
+ <nd ref="925525711"/>
+ <nd ref="925525948"/>
+ <nd ref="925526301"/>
+ <nd ref="925526596"/>
+ <nd ref="925526500"/>
+ <nd ref="925525746"/>
+ <nd ref="925526033"/>
+ <nd ref="925526407"/>
+ <nd ref="925526231"/>
+ <nd ref="925526556"/>
+ <nd ref="925525785"/>
+ <nd ref="925526132"/>
+ <nd ref="925525967"/>
+ <nd ref="925526332"/>
+ <nd ref="925526603"/>
+ <nd ref="925526049"/>
+ <nd ref="925525719"/>
+ <nd ref="925525799"/>
+ <nd ref="925526151"/>
+ <nd ref="925526610"/>
+ <nd ref="925526066"/>
+ <nd ref="925525726"/>
+ <nd ref="925525828"/>
+ <nd ref="925526172"/>
+ <nd ref="925526619"/>
+ <nd ref="925525918"/>
+ <nd ref="925526572"/>
+ <nd ref="925526470"/>
+ <nd ref="925525733"/>
+ <nd ref="925525994"/>
+ <nd ref="925526362"/>
+ <nd ref="925526190"/>
+ <nd ref="925525769"/>
+ <nd ref="925526085"/>
+ <nd ref="925525937"/>
+ <nd ref="925526288"/>
+ <nd ref="925526587"/>
+ <nd ref="925525848"/>
+ <nd ref="925525739"/>
+ <nd ref="925526018"/>
+ <nd ref="925526386"/>
+ <nd ref="925526627"/>
+ <nd ref="925526549"/>
+ <nd ref="925525779"/>
+ <nd ref="925526109"/>
+ <nd ref="925526486"/>
+ <nd ref="925526315"/>
+ <nd ref="925526598"/>
+ <nd ref="925525871"/>
+ <nd ref="925526213"/>
+ <nd ref="925526037"/>
+ <nd ref="925526418"/>
+ <nd ref="925525714"/>
+ <nd ref="925525954"/>
+ <nd ref="925525791"/>
+ <nd ref="925526510"/>
+ <nd ref="925525749"/>
+ <nd ref="925526541"/>
+ <nd ref="925526084"/>
+ <nd ref="925525935"/>
+ <nd ref="925526585"/>
+ <nd ref="925525846"/>
+ <nd ref="925526011"/>
+ <nd ref="925526385"/>
+ <nd ref="925526626"/>
+ <nd ref="925526548"/>
+ <nd ref="925525778"/>
+ <nd ref="925526312"/>
+ <nd ref="925525869"/>
+ <nd ref="925526415"/>
+ <nd ref="925525952"/>
+ <nd ref="925525788"/>
+ <nd ref="925526506"/>
+ <nd ref="925525890"/>
+ <nd ref="925526443"/>
+ <nd ref="925526336"/>
+ <nd ref="925526157"/>
+ <nd ref="925526519"/>
+ <nd ref="925525755"/>
+ <nd ref="925526053"/>
+ <nd ref="925525904"/>
+ <nd ref="925526257"/>
+ <nd ref="925526564"/>
+ <nd ref="925525808"/>
+ <nd ref="925526357"/>
+ <nd ref="925526613"/>
+ <nd ref="925526533"/>
+ <nd ref="925525763"/>
+ <nd ref="925526068"/>
+ <nd ref="925526463"/>
+ <nd ref="925525738"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Galliera"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr/"/>
+ </way>
+ <way id="79616736">
+ <nd ref="929099140"/>
+ <nd ref="929096547"/>
+ <nd ref="929097937"/>
+ <nd ref="929096056"/>
+ <nd ref="929099140"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Fondation Cartier"/>
+ <tag k="phone" v="01.42.18.56.50"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="fondation.cartier.com/"/>
+ </way>
+ <way id="79616745">
+ <nd ref="929096880"/>
+ <nd ref="929099320"/>
+ <nd ref="929095856"/>
+ <nd ref="929100616"/>
+ <nd ref="1185602629"/>
+ <nd ref="929099107"/>
+ <nd ref="929100477"/>
+ <nd ref="929097730"/>
+ <nd ref="929095944"/>
+ <nd ref="929096880"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel de la Paix"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="79626702">
+ <nd ref="929180851"/>
+ <nd ref="929183875"/>
+ <nd ref="929179029"/>
+ <nd ref="929181479"/>
+ <nd ref="929181433"/>
+ <nd ref="929180949"/>
+ <nd ref="929182564"/>
+ <nd ref="1471218153"/>
+ <nd ref="929179851"/>
+ <nd ref="929182088"/>
+ <nd ref="1471218145"/>
+ <nd ref="929184515"/>
+ <nd ref="929180851"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Marriott Rive Gauche"/>
+ <tag k="old_name" v="PLM Saint-Jacques"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="79633603">
+ <nd ref="929241950"/>
+ <nd ref="929241287"/>
+ <nd ref="929241620"/>
+ <nd ref="929242203"/>
+ <nd ref="929241950"/>
+ <tag k="addr:city" v="Paris"/>
+ <tag k="addr:housenumber" v="22"/>
+ <tag k="addr:postcode" v="75014"/>
+ <tag k="addr:street" v="rue Boulard"/>
+ <tag k="building" v="yes"/>
+ <tag k="contact:fax" v="+33-0143210821"/>
+ <tag k="contact:phone" v="+33-0143210820"/>
+ <tag k="name" v="Solar Hôtel"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.solarhotel.fr/"/>
+ </way>
+ <way id="79641993">
+ <nd ref="929367309"/>
+ <nd ref="929366832"/>
+ <nd ref="929366598"/>
+ <nd ref="929367217"/>
+ <nd ref="929366784"/>
+ <nd ref="929366428"/>
+ <nd ref="929367134"/>
+ <nd ref="929366732"/>
+ <nd ref="929367475"/>
+ <nd ref="929366912"/>
+ <nd ref="929366851"/>
+ <nd ref="929366499"/>
+ <nd ref="929367124"/>
+ <nd ref="929366718"/>
+ <nd ref="929366445"/>
+ <nd ref="929367056"/>
+ <nd ref="929366668"/>
+ <nd ref="929367343"/>
+ <nd ref="929366937"/>
+ <nd ref="929366620"/>
+ <nd ref="929367245"/>
+ <nd ref="929366801"/>
+ <nd ref="929366538"/>
+ <nd ref="929367152"/>
+ <nd ref="929366750"/>
+ <nd ref="929367512"/>
+ <nd ref="929367100"/>
+ <nd ref="929366696"/>
+ <nd ref="929367412"/>
+ <nd ref="929366880"/>
+ <nd ref="929366647"/>
+ <nd ref="929367298"/>
+ <nd ref="929366827"/>
+ <nd ref="929366474"/>
+ <nd ref="929367205"/>
+ <nd ref="929366778"/>
+ <nd ref="929366422"/>
+ <nd ref="929367001"/>
+ <nd ref="929366725"/>
+ <nd ref="929367466"/>
+ <nd ref="929366906"/>
+ <nd ref="929366588"/>
+ <nd ref="929367086"/>
+ <nd ref="929366685"/>
+ <nd ref="929367384"/>
+ <nd ref="929366867"/>
+ <nd ref="938888063"/>
+ <nd ref="929366636"/>
+ <nd ref="929367276"/>
+ <nd ref="929366817"/>
+ <nd ref="929366462"/>
+ <nd ref="929442057"/>
+ <nd ref="929367179"/>
+ <nd ref="929366767"/>
+ <nd ref="929366410"/>
+ <nd ref="929366977"/>
+ <nd ref="929366711"/>
+ <nd ref="929367440"/>
+ <nd ref="929366894"/>
+ <nd ref="929366570"/>
+ <nd ref="929367325"/>
+ <nd ref="929366842"/>
+ <nd ref="929366490"/>
+ <nd ref="929367115"/>
+ <nd ref="929366792"/>
+ <nd ref="929366436"/>
+ <nd ref="929367032"/>
+ <nd ref="929366660"/>
+ <nd ref="929367496"/>
+ <nd ref="929366921"/>
+ <nd ref="929366612"/>
+ <nd ref="938872681"/>
+ <nd ref="929367231"/>
+ <nd ref="929366872"/>
+ <nd ref="929366520"/>
+ <nd ref="929367144"/>
+ <nd ref="929366742"/>
+ <nd ref="929367309"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Musée Guimet"/>
+ <tag k="phone" v="01.58.52.53.00"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.guimet.fr/"/>
+ </way>
+ <way id="79687338">
+ <nd ref="929970233"/>
+ <nd ref="929970165"/>
+ <nd ref="929970236"/>
+ <nd ref="929970439"/>
+ <nd ref="929970152"/>
+ <nd ref="929970337"/>
+ <nd ref="929970141"/>
+ <nd ref="929970180"/>
+ <nd ref="929970118"/>
+ <nd ref="929970310"/>
+ <nd ref="929970233"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Mercure Paris XV"/>
+ <tag k="operator" v="Mercure"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="79717550">
+ <nd ref="930336771"/>
+ <nd ref="930319208"/>
+ <nd ref="1775401312"/>
+ <nd ref="930295544"/>
+ <nd ref="930290286"/>
+ <nd ref="930293876"/>
+ <nd ref="930343380"/>
+ <nd ref="930336771"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Terminus Orléans"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="79717561">
+ <nd ref="930294071"/>
+ <nd ref="930314792"/>
+ <nd ref="930325376"/>
+ <nd ref="930342217"/>
+ <nd ref="930309706"/>
+ <nd ref="930319823"/>
+ <nd ref="930307999"/>
+ <nd ref="930291087"/>
+ <nd ref="930311793"/>
+ <nd ref="930305945"/>
+ <nd ref="930310779"/>
+ <nd ref="930330954"/>
+ <nd ref="930334766"/>
+ <nd ref="930316726"/>
+ <nd ref="1775401304"/>
+ <nd ref="1775401306"/>
+ <nd ref="930336067"/>
+ <nd ref="930324966"/>
+ <nd ref="930294071"/>
+ <tag k="addr:housenumber" v="185"/>
+ <tag k="addr:postcode" v="75014"/>
+ <tag k="addr:street" v="Boulevard Brune"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Paris-Orléans"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="79718834">
+ <nd ref="930293876"/>
+ <nd ref="930290286"/>
+ <nd ref="1775401313"/>
+ <nd ref="930341867"/>
+ <nd ref="930307953"/>
+ <nd ref="930342980"/>
+ <nd ref="930327176"/>
+ <nd ref="930293876"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Acropole"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="79805060">
+ <nd ref="930829615"/>
+ <nd ref="930817643"/>
+ <nd ref="930823567"/>
+ <nd ref="931569255"/>
+ <nd ref="930820556"/>
+ <nd ref="931572250"/>
+ <nd ref="931569256"/>
+ <nd ref="930818989"/>
+ <nd ref="1789288576"/>
+ <nd ref="930829615"/>
+ <tag k="architect" v="Auguste Perret"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Maison Chana Orloff"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="80378536">
+ <nd ref="938012165"/>
+ <nd ref="938013482"/>
+ <nd ref="938799611"/>
+ <nd ref="938012717"/>
+ <nd ref="938799113"/>
+ <nd ref="938011490"/>
+ <nd ref="938012165"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Duret"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="80839997">
+ <nd ref="942553243"/>
+ <nd ref="942553967"/>
+ <nd ref="942554606"/>
+ <nd ref="942553081"/>
+ <nd ref="942553801"/>
+ <nd ref="942554423"/>
+ <nd ref="942552913"/>
+ <nd ref="942553602"/>
+ <nd ref="942554266"/>
+ <nd ref="942554874"/>
+ <nd ref="942553382"/>
+ <nd ref="942554098"/>
+ <nd ref="942554734"/>
+ <nd ref="942553209"/>
+ <nd ref="942553931"/>
+ <nd ref="942554577"/>
+ <nd ref="942553042"/>
+ <nd ref="942553769"/>
+ <nd ref="942554384"/>
+ <nd ref="942552878"/>
+ <nd ref="942553553"/>
+ <nd ref="942554227"/>
+ <nd ref="942554849"/>
+ <nd ref="942553341"/>
+ <nd ref="942554064"/>
+ <nd ref="942554692"/>
+ <nd ref="942553183"/>
+ <nd ref="942554026"/>
+ <nd ref="942554663"/>
+ <nd ref="942553138"/>
+ <nd ref="942553243"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Saint-James"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="80848762">
+ <nd ref="942610130"/>
+ <nd ref="942612285"/>
+ <nd ref="942611352"/>
+ <nd ref="942610339"/>
+ <nd ref="942612470"/>
+ <nd ref="942611627"/>
+ <nd ref="942610639"/>
+ <nd ref="942612672"/>
+ <nd ref="942611905"/>
+ <nd ref="942610896"/>
+ <nd ref="942609966"/>
+ <nd ref="942612093"/>
+ <nd ref="942611209"/>
+ <nd ref="942611132"/>
+ <nd ref="942610876"/>
+ <nd ref="942612510"/>
+ <nd ref="942612553"/>
+ <nd ref="942610474"/>
+ <nd ref="959800723"/>
+ <nd ref="942611573"/>
+ <nd ref="942610585"/>
+ <nd ref="942612622"/>
+ <nd ref="942611853"/>
+ <nd ref="942610837"/>
+ <nd ref="942609932"/>
+ <nd ref="942612059"/>
+ <nd ref="942611096"/>
+ <nd ref="942610130"/>
+ <tag k="name" v="Musée d'Ennery"/>
+ <tag k="phone" v="01.45.53.57.96"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.guimet.fr/Musee-d-Ennery"/>
+ </way>
+ <way id="80853592">
+ <nd ref="942636033"/>
+ <nd ref="942636535"/>
+ <nd ref="942635610"/>
+ <nd ref="942635954"/>
+ <nd ref="942636433"/>
+ <nd ref="942635508"/>
+ <nd ref="942635870"/>
+ <nd ref="942636259"/>
+ <nd ref="942635402"/>
+ <nd ref="942635782"/>
+ <nd ref="942636096"/>
+ <nd ref="959856456"/>
+ <nd ref="1465052905"/>
+ <nd ref="942635330"/>
+ <nd ref="942636114"/>
+ <nd ref="942635311"/>
+ <nd ref="942635697"/>
+ <nd ref="942636015"/>
+ <nd ref="942636033"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Alexander"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="81152755">
+ <nd ref="945721620"/>
+ <nd ref="945719734"/>
+ <nd ref="945722979"/>
+ <nd ref="945721514"/>
+ <nd ref="945719563"/>
+ <nd ref="945723344"/>
+ <nd ref="945722000"/>
+ <nd ref="945720159"/>
+ <nd ref="945724014"/>
+ <nd ref="945722375"/>
+ <nd ref="945720003"/>
+ <nd ref="945723865"/>
+ <nd ref="945721620"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel de la Jatte"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="81234511">
+ <nd ref="946416887"/>
+ <nd ref="946415543"/>
+ <nd ref="946414044"/>
+ <nd ref="946415687"/>
+ <nd ref="946414190"/>
+ <nd ref="946412899"/>
+ <nd ref="946411559"/>
+ <nd ref="946412195"/>
+ <nd ref="946412089"/>
+ <nd ref="947307305"/>
+ <nd ref="946412755"/>
+ <nd ref="946411402"/>
+ <nd ref="946412365"/>
+ <nd ref="946411002"/>
+ <nd ref="946418929"/>
+ <nd ref="946417556"/>
+ <nd ref="946413644"/>
+ <nd ref="946415829"/>
+ <nd ref="946414331"/>
+ <nd ref="946414994"/>
+ <nd ref="946416887"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel du Château"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="81234719">
+ <nd ref="946413836"/>
+ <nd ref="946416873"/>
+ <nd ref="946415529"/>
+ <nd ref="946418573"/>
+ <nd ref="946411052"/>
+ <nd ref="946414030"/>
+ <nd ref="946412741"/>
+ <nd ref="946413339"/>
+ <nd ref="946412001"/>
+ <nd ref="946410671"/>
+ <nd ref="946418232"/>
+ <nd ref="946418832"/>
+ <nd ref="946412335"/>
+ <nd ref="946412553"/>
+ <nd ref="946413836"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Charlemagne"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="81297861">
+ <nd ref="947057672"/>
+ <nd ref="947057719"/>
+ <nd ref="947057889"/>
+ <nd ref="947057941"/>
+ <nd ref="947057515"/>
+ <nd ref="947057843"/>
+ <nd ref="947057801"/>
+ <nd ref="959800747"/>
+ <nd ref="947057672"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Villa Glamour"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="83236027">
+ <nd ref="968494985"/>
+ <nd ref="968494098"/>
+ <nd ref="968487448"/>
+ <nd ref="968464044"/>
+ <nd ref="968446083"/>
+ <nd ref="968474261"/>
+ <nd ref="968448471"/>
+ <nd ref="968475885"/>
+ <nd ref="968450270"/>
+ <nd ref="968493377"/>
+ <nd ref="968489800"/>
+ <nd ref="968496794"/>
+ <nd ref="968478824"/>
+ <nd ref="968446510"/>
+ <nd ref="968457131"/>
+ <nd ref="968466725"/>
+ <nd ref="968457373"/>
+ <nd ref="968483990"/>
+ <nd ref="968481355"/>
+ <nd ref="968478228"/>
+ <nd ref="968479558"/>
+ <nd ref="968483469"/>
+ <nd ref="968449959"/>
+ <nd ref="968454694"/>
+ <nd ref="968449923"/>
+ <nd ref="968480189"/>
+ <nd ref="968469853"/>
+ <nd ref="968448717"/>
+ <nd ref="968474124"/>
+ <nd ref="968467295"/>
+ <nd ref="968476124"/>
+ <nd ref="968476804"/>
+ <nd ref="968494985"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Ibis Paris Porte d'Orléans"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="83422695">
+ <nd ref="971088506"/>
+ <nd ref="971088887"/>
+ <nd ref="971088821"/>
+ <nd ref="971088303"/>
+ <nd ref="971088558"/>
+ <nd ref="971088093"/>
+ <nd ref="971088066"/>
+ <nd ref="971088649"/>
+ <nd ref="971088257"/>
+ <nd ref="971088437"/>
+ <nd ref="1011706937"/>
+ <nd ref="971088220"/>
+ <nd ref="971088469"/>
+ <nd ref="971088320"/>
+ <nd ref="971088506"/>
+ <tag k="name" v="Musée Marmottan"/>
+ <tag k="phone" v="01.44.96.50.33"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.marmottan.com"/>
+ </way>
+ <way id="83790233">
+ <nd ref="975592949"/>
+ <nd ref="975592683"/>
+ <nd ref="975567886"/>
+ <nd ref="975580409"/>
+ <nd ref="975599642"/>
+ <nd ref="975603529"/>
+ <nd ref="975603751"/>
+ <nd ref="975564559"/>
+ <nd ref="975555713"/>
+ <nd ref="975568194"/>
+ <nd ref="975600090"/>
+ <nd ref="975562616"/>
+ <nd ref="975557924"/>
+ <nd ref="975545513"/>
+ <nd ref="975583991"/>
+ <nd ref="975592949"/>
+ <tag k="addr:housenumber" v="122"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Parc des Exposisions"/>
+ <tag k="operator" v="Best Western"/>
+ <tag k="smoking" v="no"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="83913793">
+ <nd ref="237015622"/>
+ <nd ref="237015623"/>
+ <nd ref="237015624"/>
+ <nd ref="549777232"/>
+ <nd ref="549777231"/>
+ <nd ref="549777233"/>
+ <nd ref="549777229"/>
+ <nd ref="977194956"/>
+ <nd ref="549777322"/>
+ <nd ref="549777320"/>
+ <nd ref="549777317"/>
+ <nd ref="237015626"/>
+ <nd ref="549777318"/>
+ <nd ref="549777304"/>
+ <nd ref="549777315"/>
+ <nd ref="549777314"/>
+ <nd ref="549777312"/>
+ <nd ref="549777305"/>
+ <nd ref="549777308"/>
+ <nd ref="549777310"/>
+ <nd ref="1125740442"/>
+ <nd ref="1125739636"/>
+ <nd ref="1125740351"/>
+ <nd ref="1125739969"/>
+ <nd ref="1125739686"/>
+ <nd ref="1125739569"/>
+ <nd ref="1125739759"/>
+ <nd ref="1125740122"/>
+ <nd ref="1125740071"/>
+ <nd ref="1125740465"/>
+ <nd ref="1125739693"/>
+ <nd ref="549777237"/>
+ <nd ref="549777246"/>
+ <nd ref="549777241"/>
+ <nd ref="549777244"/>
+ <nd ref="549777248"/>
+ <nd ref="549777238"/>
+ <nd ref="549777242"/>
+ <nd ref="549777247"/>
+ <nd ref="237015628"/>
+ <nd ref="549777252"/>
+ <nd ref="549777253"/>
+ <nd ref="549777251"/>
+ <nd ref="237015631"/>
+ <nd ref="237015622"/>
+ <tag k="building" v="yes"/>
+ <tag k="email" v="valhuber@mnhn.fr"/>
+ <tag k="fax" v="01.40.79.54.48"/>
+ <tag k="fee" v="full:7; discount:5; free: under 26, handicap, press, unemployment"/>
+ <tag k="fee:currency" v="euro"/>
+ <tag k="name" v="Grande Galerie de l'Évolution"/>
+ <tag k="opening_hours" v="Mo 10:00-18:00; We-Su 10:00-18:00; May 1 : off"/>
+ <tag k="phone" v="01.40.79.54.79, 01.40.79.56.01"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia:fr" v="Grande_galerie_de_l'évolution"/>
+ </way>
+ <way id="83948788">
+ <nd ref="976978233"/>
+ <nd ref="976978213"/>
+ <nd ref="976978250"/>
+ <nd ref="875693841"/>
+ <nd ref="875698397"/>
+ <nd ref="875694260"/>
+ <nd ref="976978263"/>
+ <nd ref="976978233"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Radisson BLU"/>
+ <tag k="note" v="building shape to be adjusted"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="84194410">
+ <nd ref="979338205"/>
+ <nd ref="979334717"/>
+ <nd ref="979335255"/>
+ <nd ref="979334707"/>
+ <nd ref="979337562"/>
+ <nd ref="979336509"/>
+ <nd ref="979336202"/>
+ <nd ref="979335596"/>
+ <nd ref="979336458"/>
+ <nd ref="979337080"/>
+ <nd ref="979336852"/>
+ <nd ref="1004347575"/>
+ <nd ref="979335635"/>
+ <nd ref="979335258"/>
+ <nd ref="979335932"/>
+ <nd ref="979334779"/>
+ <nd ref="979338250"/>
+ <nd ref="979334996"/>
+ <nd ref="979336904"/>
+ <nd ref="979335976"/>
+ <nd ref="979334839"/>
+ <nd ref="979334749"/>
+ <nd ref="979337880"/>
+ <nd ref="979337266"/>
+ <nd ref="979337318"/>
+ <nd ref="979338174"/>
+ <nd ref="1004291429"/>
+ <nd ref="1004292544"/>
+ <nd ref="1004291887"/>
+ <nd ref="979335073"/>
+ <nd ref="979338317"/>
+ <nd ref="979337115"/>
+ <nd ref="1004347632"/>
+ <nd ref="1004347820"/>
+ <nd ref="1004347053"/>
+ <nd ref="979338205"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="84321395">
+ <nd ref="980501121"/>
+ <nd ref="980287996"/>
+ <nd ref="980452333"/>
+ <nd ref="980303188"/>
+ <nd ref="980326357"/>
+ <nd ref="980309316"/>
+ <nd ref="980357703"/>
+ <nd ref="980287096"/>
+ <nd ref="980478263"/>
+ <nd ref="980441474"/>
+ <nd ref="980283199"/>
+ <nd ref="980286606"/>
+ <nd ref="980501943"/>
+ <nd ref="980282782"/>
+ <nd ref="980397410"/>
+ <nd ref="980495284"/>
+ <nd ref="980310189"/>
+ <nd ref="980294852"/>
+ <nd ref="980437324"/>
+ <nd ref="980475273"/>
+ <nd ref="980300042"/>
+ <nd ref="980501670"/>
+ <nd ref="980368915"/>
+ <nd ref="980302975"/>
+ <nd ref="980285312"/>
+ <nd ref="980281361"/>
+ <nd ref="980298780"/>
+ <nd ref="980435495"/>
+ <nd ref="980482097"/>
+ <nd ref="980285774"/>
+ <nd ref="980278817"/>
+ <nd ref="980391171"/>
+ <nd ref="980354831"/>
+ <nd ref="980403297"/>
+ <nd ref="980311255"/>
+ <nd ref="980497069"/>
+ <nd ref="980327174"/>
+ <nd ref="980294261"/>
+ <nd ref="980383128"/>
+ <nd ref="980453288"/>
+ <nd ref="980452490"/>
+ <nd ref="980490663"/>
+ <nd ref="980496353"/>
+ <nd ref="980325429"/>
+ <nd ref="980446129"/>
+ <nd ref="980420145"/>
+ <nd ref="980415524"/>
+ <nd ref="980414516"/>
+ <nd ref="980358890"/>
+ <nd ref="980353895"/>
+ <nd ref="980322878"/>
+ <nd ref="980351458"/>
+ <nd ref="980279817"/>
+ <nd ref="980341142"/>
+ <nd ref="980417277"/>
+ <nd ref="980502501"/>
+ <nd ref="980341417"/>
+ <nd ref="980307199"/>
+ <nd ref="980296778"/>
+ <nd ref="980335496"/>
+ <nd ref="980437591"/>
+ <nd ref="980470184"/>
+ <nd ref="980480543"/>
+ <nd ref="980312464"/>
+ <nd ref="980354569"/>
+ <nd ref="980291314"/>
+ <nd ref="980347622"/>
+ <nd ref="980480588"/>
+ <nd ref="980284871"/>
+ <nd ref="980337076"/>
+ <nd ref="980296434"/>
+ <nd ref="980315554"/>
+ <nd ref="980395321"/>
+ <nd ref="980463877"/>
+ <nd ref="980338808"/>
+ <nd ref="980450968"/>
+ <nd ref="980341883"/>
+ <nd ref="980295811"/>
+ <nd ref="980417083"/>
+ <nd ref="980420477"/>
+ <nd ref="980367899"/>
+ <nd ref="980314472"/>
+ <nd ref="980332273"/>
+ <nd ref="980491116"/>
+ <nd ref="980284851"/>
+ <nd ref="980486251"/>
+ <nd ref="980282077"/>
+ <nd ref="980488799"/>
+ <nd ref="980439791"/>
+ <nd ref="980325648"/>
+ <nd ref="980480258"/>
+ <nd ref="980347823"/>
+ <nd ref="980356470"/>
+ <nd ref="980300245"/>
+ <nd ref="980329530"/>
+ <nd ref="980443228"/>
+ <nd ref="980345035"/>
+ <nd ref="980365348"/>
+ <nd ref="980422889"/>
+ <nd ref="980340334"/>
+ <nd ref="980479682"/>
+ <nd ref="980401076"/>
+ <nd ref="980497487"/>
+ <nd ref="980396174"/>
+ <nd ref="980451689"/>
+ <nd ref="980498836"/>
+ <nd ref="980336111"/>
+ <nd ref="980450848"/>
+ <nd ref="980327550"/>
+ <nd ref="980406917"/>
+ <nd ref="980460307"/>
+ <nd ref="980444257"/>
+ <nd ref="980451533"/>
+ <nd ref="980448332"/>
+ <nd ref="980316183"/>
+ <nd ref="980322495"/>
+ <nd ref="980343728"/>
+ <nd ref="980360423"/>
+ <nd ref="980296114"/>
+ <nd ref="980282912"/>
+ <nd ref="980286982"/>
+ <nd ref="980284043"/>
+ <nd ref="980297638"/>
+ <nd ref="980283152"/>
+ <nd ref="980415257"/>
+ <nd ref="980412056"/>
+ <nd ref="980414043"/>
+ <nd ref="980302489"/>
+ <nd ref="980387234"/>
+ <nd ref="980460301"/>
+ <nd ref="980312889"/>
+ <nd ref="980419197"/>
+ <nd ref="980501121"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Concorde Lafayette"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="84325480">
+ <nd ref="980418691"/>
+ <nd ref="980283940"/>
+ <nd ref="980319437"/>
+ <nd ref="980281195"/>
+ <nd ref="980481252"/>
+ <nd ref="980349251"/>
+ <nd ref="980381632"/>
+ <nd ref="980308870"/>
+ <nd ref="980355344"/>
+ <nd ref="980282612"/>
+ <nd ref="980339325"/>
+ <nd ref="980326963"/>
+ <nd ref="980491498"/>
+ <nd ref="980320020"/>
+ <nd ref="980383983"/>
+ <nd ref="980331943"/>
+ <nd ref="980500693"/>
+ <nd ref="980474482"/>
+ <nd ref="980480298"/>
+ <nd ref="980470908"/>
+ <nd ref="980328977"/>
+ <nd ref="980463562"/>
+ <nd ref="980290824"/>
+ <nd ref="980299624"/>
+ <nd ref="980309821"/>
+ <nd ref="980305872"/>
+ <nd ref="980405321"/>
+ <nd ref="980493280"/>
+ <nd ref="980352666"/>
+ <nd ref="980391920"/>
+ <nd ref="980452983"/>
+ <nd ref="980392056"/>
+ <nd ref="980492467"/>
+ <nd ref="980372889"/>
+ <nd ref="980281114"/>
+ <nd ref="980401889"/>
+ <nd ref="980502399"/>
+ <nd ref="980354971"/>
+ <nd ref="980435874"/>
+ <nd ref="980346507"/>
+ <nd ref="980462839"/>
+ <nd ref="980354145"/>
+ <nd ref="980490266"/>
+ <nd ref="980333254"/>
+ <nd ref="980287610"/>
+ <nd ref="980294416"/>
+ <nd ref="980310450"/>
+ <nd ref="980287120"/>
+ <nd ref="980279578"/>
+ <nd ref="980457650"/>
+ <nd ref="980419413"/>
+ <nd ref="980447767"/>
+ <nd ref="980460904"/>
+ <nd ref="980312132"/>
+ <nd ref="980319815"/>
+ <nd ref="980418691"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Méridien"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="source:tourism" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="84511123">
+ <nd ref="924402385"/>
+ <nd ref="924406532"/>
+ <nd ref="924399994"/>
+ <nd ref="924402143"/>
+ <nd ref="924401351"/>
+ <nd ref="924400573"/>
+ <nd ref="924403514"/>
+ <nd ref="924402380"/>
+ <nd ref="924399889"/>
+ <nd ref="924402707"/>
+ <nd ref="924405249"/>
+ <nd ref="924406509"/>
+ <nd ref="924399917"/>
+ <nd ref="924400028"/>
+ <nd ref="924402621"/>
+ <nd ref="924404053"/>
+ <nd ref="924403315"/>
+ <nd ref="981836411"/>
+ <nd ref="924402627"/>
+ <nd ref="924402130"/>
+ <nd ref="924403114"/>
+ <nd ref="924400596"/>
+ <nd ref="924404011"/>
+ <nd ref="981836421"/>
+ <nd ref="924402385"/>
+ <tag k="alt_name" v="Hôtel Scheffer-Renan"/>
+ <tag k="alt_name:es" v="Museo_Via_Romantica"/>
+ <tag k="cost" v="free"/>
+ <tag k="ele" v="50.0"/>
+ <tag k="fax" v="0148.74.28.42"/>
+ <tag k="name" v="Musée de la Vie Romantique"/>
+ <tag k="opening_hours" v="Tu-Su 10:00-18:00, Mo off"/>
+ <tag k="operator" v="Ville de Paris"/>
+ <tag k="phone" v="01.55.31.95.67"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://vie-romantique.paris.fr"/>
+ <tag k="wikipedia" v="fr:Musée de la Vie romantique"/>
+ <tag k="wikipedia:en" v="Musée_de_la_Vie_Romantique"/>
+ <tag k="wikipedia:it" v="Musée_de_la_Vie_romantique"/>
+ </way>
+ <way id="84511129">
+ <nd ref="976165185"/>
+ <nd ref="976163730"/>
+ <nd ref="981836397"/>
+ <nd ref="976163231"/>
+ <nd ref="976164899"/>
+ <nd ref="976165774"/>
+ <nd ref="976164802"/>
+ <nd ref="976165019"/>
+ <nd ref="976164564"/>
+ <nd ref="976164100"/>
+ <nd ref="976164994"/>
+ <nd ref="976165761"/>
+ <nd ref="976164314"/>
+ <nd ref="976164528"/>
+ <nd ref="976164252"/>
+ <nd ref="1011613796"/>
+ <nd ref="976163979"/>
+ <nd ref="976164877"/>
+ <nd ref="976164958"/>
+ <nd ref="976165892"/>
+ <nd ref="976166021"/>
+ <nd ref="976165646"/>
+ <nd ref="976165691"/>
+ <nd ref="976165185"/>
+ <tag k="cost" v="free"/>
+ <tag k="name" v="Musée Balzac"/>
+ <tag k="opening_hours" v="Tu-Su 10:00-18:00, Mo off"/>
+ <tag k="operator" v="Ville de Paris"/>
+ <tag k="phone" v="01.55.74.41.80"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://balzac.paris.fr"/>
+ <tag k="wikipedia:en" v="Maison_de_Balzac"/>
+ <tag k="wikipedia:fr" v="Maison_de_Balzac"/>
+ <tag k="wikipedia:pl" v="Maison_de_Balzac"/>
+ <tag k="wikipedia:ru" v="Дом-музей_Бальзака_(Париж)"/>
+ </way>
+ <way id="87141480">
+ <nd ref="1013337396"/>
+ <nd ref="1013337560"/>
+ <nd ref="1013337851"/>
+ <nd ref="1013338031"/>
+ <nd ref="1013337469"/>
+ <nd ref="1013337648"/>
+ <nd ref="1013337939"/>
+ <nd ref="1013337305"/>
+ <nd ref="1013337540"/>
+ <nd ref="1013337704"/>
+ <nd ref="1013338002"/>
+ <nd ref="1013337377"/>
+ <nd ref="1013337625"/>
+ <nd ref="1013337811"/>
+ <nd ref="1013337289"/>
+ <nd ref="1013337448"/>
+ <nd ref="1013337687"/>
+ <nd ref="1013337917"/>
+ <nd ref="1013337353"/>
+ <nd ref="1013337519"/>
+ <nd ref="1013337772"/>
+ <nd ref="1013337986"/>
+ <nd ref="1013337428"/>
+ <nd ref="1013337596"/>
+ <nd ref="1013337899"/>
+ <nd ref="1013337262"/>
+ <nd ref="1013337501"/>
+ <nd ref="1013337673"/>
+ <nd ref="1013337592"/>
+ <nd ref="1013337752"/>
+ <nd ref="1013337258"/>
+ <nd ref="1013337425"/>
+ <nd ref="1013337671"/>
+ <nd ref="1013337896"/>
+ <nd ref="1013337334"/>
+ <nd ref="1013337498"/>
+ <nd ref="1013337725"/>
+ <nd ref="1013337396"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Hôtel Mercure"/>
+ <tag k="source" v="extraction vectorielle v1 cadastre-dgi-fr source : Direction Générale des Impôts - Cadas. Mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="89439702">
+ <nd ref="968474261"/>
+ <nd ref="968445839"/>
+ <nd ref="968481157"/>
+ <nd ref="968480142"/>
+ <nd ref="968462053"/>
+ <nd ref="968473737"/>
+ <nd ref="968469582"/>
+ <nd ref="968476947"/>
+ <nd ref="968476036"/>
+ <nd ref="968474998"/>
+ <nd ref="968445398"/>
+ <nd ref="1037359857"/>
+ <nd ref="968474356"/>
+ <nd ref="968446180"/>
+ <nd ref="968454923"/>
+ <nd ref="1037359859"/>
+ <nd ref="968467929"/>
+ <nd ref="968478309"/>
+ <nd ref="968458302"/>
+ <nd ref="968494538"/>
+ <nd ref="1037359856"/>
+ <nd ref="968461734"/>
+ <nd ref="968496794"/>
+ <nd ref="968489800"/>
+ <nd ref="968489985"/>
+ <nd ref="968478626"/>
+ <nd ref="968450339"/>
+ <nd ref="968454420"/>
+ <nd ref="968485713"/>
+ <nd ref="968479410"/>
+ <nd ref="968462758"/>
+ <nd ref="968480955"/>
+ <nd ref="968478921"/>
+ <nd ref="968483553"/>
+ <nd ref="968448471"/>
+ <nd ref="968474261"/>
+ <tag k="addr:housenumber" v="13"/>
+ <tag k="addr:postcode" v="92120"/>
+ <tag k="addr:street" v="Rue François Ory"/>
+ <tag k="breakfast" v="7:30-9:00"/>
+ <tag k="building" v="yes"/>
+ <tag k="car_park" v="yes"/>
+ <tag k="contact:phone" v="(+33)1/58071111"/>
+ <tag k="name" v="Hôtel Mercure Porte d'Orléans"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="105152364">
+ <nd ref="1211869228"/>
+ <nd ref="1211870059"/>
+ <nd ref="1211869455"/>
+ <nd ref="1211868483"/>
+ <nd ref="1211870652"/>
+ <nd ref="1211869392"/>
+ <nd ref="1211870959"/>
+ <nd ref="1211869033"/>
+ <nd ref="1211869506"/>
+ <nd ref="1211870830"/>
+ <nd ref="1211870876"/>
+ <nd ref="1211870121"/>
+ <nd ref="1211869029"/>
+ <nd ref="1211869626"/>
+ <nd ref="1211868716"/>
+ <nd ref="1211870143"/>
+ <nd ref="1211869701"/>
+ <nd ref="1211868826"/>
+ <nd ref="1211870463"/>
+ <nd ref="1211870359"/>
+ <nd ref="1211870963"/>
+ <nd ref="1211870604"/>
+ <nd ref="1211868784"/>
+ <nd ref="1211868693"/>
+ <nd ref="1211869026"/>
+ <nd ref="1211870106"/>
+ <nd ref="1211869264"/>
+ <nd ref="1211870828"/>
+ <nd ref="1211870505"/>
+ <nd ref="1211869682"/>
+ <nd ref="1211868799"/>
+ <nd ref="1211868488"/>
+ <nd ref="1211868919"/>
+ <nd ref="1211870987"/>
+ <nd ref="1211868644"/>
+ <nd ref="1211868773"/>
+ <nd ref="1211868732"/>
+ <nd ref="1211868750"/>
+ <nd ref="1211869541"/>
+ <nd ref="1211868963"/>
+ <nd ref="1211870902"/>
+ <nd ref="1211868540"/>
+ <nd ref="1211870952"/>
+ <nd ref="1211870824"/>
+ <nd ref="1211870814"/>
+ <nd ref="1211869678"/>
+ <nd ref="1211868829"/>
+ <nd ref="1211870420"/>
+ <nd ref="1211869377"/>
+ <nd ref="1211870965"/>
+ <nd ref="1211870892"/>
+ <nd ref="1211868758"/>
+ <nd ref="1211869972"/>
+ <nd ref="1211870906"/>
+ <nd ref="1211869306"/>
+ <nd ref="1211869459"/>
+ <nd ref="1211870519"/>
+ <nd ref="1211868605"/>
+ <nd ref="1211870019"/>
+ <nd ref="1211869178"/>
+ <nd ref="1211870431"/>
+ <nd ref="1211869466"/>
+ <nd ref="1211868741"/>
+ <nd ref="1211870709"/>
+ <nd ref="1211869619"/>
+ <nd ref="1211869940"/>
+ <nd ref="1211870891"/>
+ <nd ref="1211869569"/>
+ <nd ref="1211869551"/>
+ <nd ref="1211869559"/>
+ <nd ref="1211869590"/>
+ <nd ref="1211869995"/>
+ <nd ref="1211870511"/>
+ <nd ref="1211868743"/>
+ <nd ref="1211870179"/>
+ <nd ref="1211869499"/>
+ <nd ref="1211869179"/>
+ <nd ref="1211870868"/>
+ <nd ref="1211869447"/>
+ <nd ref="1211870408"/>
+ <nd ref="1211870273"/>
+ <nd ref="1211869543"/>
+ <nd ref="1211870480"/>
+ <nd ref="1211870754"/>
+ <nd ref="1211869509"/>
+ <nd ref="1211869635"/>
+ <nd ref="1211870702"/>
+ <nd ref="1211870293"/>
+ <nd ref="1211870582"/>
+ <nd ref="1211869976"/>
+ <nd ref="1211870708"/>
+ <nd ref="1211870524"/>
+ <nd ref="1211869899"/>
+ <nd ref="1211870218"/>
+ <nd ref="1211870402"/>
+ <nd ref="1211870854"/>
+ <nd ref="1211870307"/>
+ <nd ref="1211869558"/>
+ <nd ref="1211870445"/>
+ <nd ref="1211869533"/>
+ <nd ref="1211870747"/>
+ <nd ref="1211870565"/>
+ <nd ref="1211868787"/>
+ <nd ref="1211868494"/>
+ <nd ref="1211870326"/>
+ <nd ref="1211870833"/>
+ <nd ref="1211870865"/>
+ <nd ref="1211870598"/>
+ <nd ref="1211870684"/>
+ <nd ref="1211869228"/>
+ <tag k="name" v="Ibis Budget"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="114654243">
+ <nd ref="1298214974"/>
+ <nd ref="1298213998"/>
+ <nd ref="1298215158"/>
+ <nd ref="1298214573"/>
+ <nd ref="1298214530"/>
+ <nd ref="1298214746"/>
+ <nd ref="1298214355"/>
+ <nd ref="1298214004"/>
+ <nd ref="1298215032"/>
+ <nd ref="1298214907"/>
+ <nd ref="1298214974"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Ibis"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="114654277">
+ <nd ref="1298214530"/>
+ <nd ref="1298214586"/>
+ <nd ref="1298215119"/>
+ <nd ref="1298215184"/>
+ <nd ref="1298214008"/>
+ <nd ref="1298214378"/>
+ <nd ref="1298214265"/>
+ <nd ref="1298214004"/>
+ <nd ref="1298214355"/>
+ <nd ref="1298214746"/>
+ <nd ref="1298214530"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="115878663">
+ <nd ref="1307927548"/>
+ <nd ref="1307926019"/>
+ <nd ref="1307927067"/>
+ <nd ref="1307927516"/>
+ <nd ref="1307927933"/>
+ <nd ref="1307926654"/>
+ <nd ref="1307927576"/>
+ <nd ref="1307926367"/>
+ <nd ref="1307927548"/>
+ <tag k="architect" v="Julien Penven; Jean-Claude Le Bail"/>
+ <tag k="building" v="yes"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="Hôtel Novotel Paris Tour Eiffel"/>
+ <tag k="old_name" v="Hôtel Nikko"/>
+ <tag k="source" v="opendataparis"/>
+ <tag k="start_date" v="1976"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.accorhotels.com/fr/hotel-3546-novotel-paris-tour-eiffel/"/>
+ <tag k="website:emporis" v="http://www.emporis.com/application/?nav=building&amp;lng=3&amp;id=110342"/>
+ </way>
+ <way id="115878705">
+ <nd ref="1307927102"/>
+ <nd ref="1307927924"/>
+ <nd ref="1307927991"/>
+ <nd ref="1307927237"/>
+ <nd ref="1307926078"/>
+ <nd ref="1307926840"/>
+ <nd ref="1307926648"/>
+ <nd ref="1307927071"/>
+ <nd ref="1307926863"/>
+ <nd ref="1307927867"/>
+ <nd ref="1307926982"/>
+ <nd ref="1307926264"/>
+ <nd ref="1307926623"/>
+ <nd ref="1307927278"/>
+ <nd ref="1307926754"/>
+ <nd ref="1307927088"/>
+ <nd ref="1307926124"/>
+ <nd ref="1307927043"/>
+ <nd ref="1307927119"/>
+ <nd ref="1307926899"/>
+ <nd ref="1307926853"/>
+ <nd ref="1307926147"/>
+ <nd ref="1307926358"/>
+ <nd ref="1307927872"/>
+ <nd ref="1307925969"/>
+ <nd ref="1307927262"/>
+ <nd ref="1307927104"/>
+ <nd ref="1307927306"/>
+ <nd ref="1307927937"/>
+ <nd ref="1307926105"/>
+ <nd ref="1307927507"/>
+ <nd ref="1307926659"/>
+ <nd ref="1307928009"/>
+ <nd ref="1307927028"/>
+ <nd ref="1307927435"/>
+ <nd ref="1307927589"/>
+ <nd ref="1307926543"/>
+ <nd ref="1307927476"/>
+ <nd ref="1307926282"/>
+ <nd ref="1307926582"/>
+ <nd ref="1307927050"/>
+ <nd ref="1307926108"/>
+ <nd ref="1307926855"/>
+ <nd ref="1307926969"/>
+ <nd ref="1307927363"/>
+ <nd ref="1307927387"/>
+ <nd ref="1307926126"/>
+ <nd ref="1307926311"/>
+ <nd ref="1307926983"/>
+ <nd ref="1307928010"/>
+ <nd ref="1307926736"/>
+ <nd ref="1307926865"/>
+ <nd ref="1307927263"/>
+ <nd ref="1307926769"/>
+ <nd ref="1307927121"/>
+ <nd ref="1307927303"/>
+ <nd ref="1307925992"/>
+ <nd ref="1307927059"/>
+ <nd ref="1307927102"/>
+ <tag k="building" v="yes"/>
+ <tag k="building:height" v="98"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="Adagio Paris Tour Eiffel"/>
+ <tag k="source" v="cadastre-dgi-fr Cadastre ; mise à jour : 2011, opendataparis"/>
+ <tag k="start_date" v="1977"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.accorhotels.com/fr/hotel-6790-adagio-paris-tour-eiffel/"/>
+ <tag k="wikipedia:fr" v="Tour Paris Côté Seine"/>
+ </way>
+ <way id="124052479">
+ <nd ref="699046037"/>
+ <nd ref="699045899"/>
+ <nd ref="699045911"/>
+ <nd ref="699045990"/>
+ <nd ref="699045688"/>
+ <nd ref="699046001"/>
+ <nd ref="699045741"/>
+ <nd ref="699046039"/>
+ <nd ref="699045962"/>
+ <nd ref="699045933"/>
+ <nd ref="699045840"/>
+ <nd ref="1528113319"/>
+ <nd ref="699046037"/>
+ <tag k="name" v="Mémorial de la Shoah"/>
+ <tag k="phone" v="01.42.77.44.72"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.memorialdelashoah.org"/>
+ </way>
+ <way id="136991122">
+ <nd ref="1502802941"/>
+ <nd ref="1502802874"/>
+ <nd ref="1502802829"/>
+ <nd ref="1502802846"/>
+ <nd ref="1502802832"/>
+ <nd ref="1502802839"/>
+ <nd ref="1502802854"/>
+ <nd ref="1502802856"/>
+ <nd ref="1502802899"/>
+ <nd ref="1502802904"/>
+ <nd ref="1502802927"/>
+ <nd ref="1502802928"/>
+ <nd ref="1502802941"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Etap Hotel Meudon"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="137311935">
+ <nd ref="1506236433"/>
+ <nd ref="1506236352"/>
+ <nd ref="1506236330"/>
+ <nd ref="1506236328"/>
+ <nd ref="1506236321"/>
+ <nd ref="1506236310"/>
+ <nd ref="1506236277"/>
+ <nd ref="1506236304"/>
+ <nd ref="1506236275"/>
+ <nd ref="1506236289"/>
+ <nd ref="1506236223"/>
+ <nd ref="1506236260"/>
+ <nd ref="1506236433"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Villa des Brillants"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="141199757">
+ <nd ref="1545720502"/>
+ <nd ref="1545720498"/>
+ <nd ref="1545720490"/>
+ <nd ref="1545720502"/>
+ <tag k="note" v="FIXME"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="148332744">
+ <nd ref="717510434"/>
+ <nd ref="717510364"/>
+ <nd ref="717510453"/>
+ <nd ref="717510613"/>
+ <nd ref="717510507"/>
+ <nd ref="717510647"/>
+ <nd ref="717510536"/>
+ <nd ref="717510305"/>
+ <nd ref="717510379"/>
+ <nd ref="717510434"/>
+ <tag k="name" v="Musée Carnavalet"/>
+ <tag k="phone" v="01.44.59.58.58"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.carnavalet.paris.fr/"/>
+ </way>
+ <way id="148573270">
+ <nd ref="683362165"/>
+ <nd ref="683362092"/>
+ <nd ref="683362094"/>
+ <nd ref="683362063"/>
+ <nd ref="683362315"/>
+ <nd ref="683362312"/>
+ <nd ref="683362318"/>
+ <nd ref="683362144"/>
+ <nd ref="683362175"/>
+ <nd ref="683362165"/>
+ <tag k="name" v="Le Ritz"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="149387303">
+ <nd ref="1623726930"/>
+ <nd ref="1623728016"/>
+ <nd ref="1623728020"/>
+ <nd ref="1623727533"/>
+ <nd ref="1623727536"/>
+ <nd ref="1623727543"/>
+ <nd ref="1623727643"/>
+ <nd ref="1623727651"/>
+ <nd ref="1623727673"/>
+ <nd ref="1623728035"/>
+ <nd ref="1623728037"/>
+ <nd ref="1623727961"/>
+ <nd ref="1623727958"/>
+ <nd ref="1623728040"/>
+ <nd ref="1623728039"/>
+ <nd ref="1623727561"/>
+ <nd ref="1623726978"/>
+ <nd ref="1623726960"/>
+ <nd ref="1623726897"/>
+ <nd ref="1623726881"/>
+ <nd ref="1623726948"/>
+ <nd ref="1623726923"/>
+ <nd ref="1623726873"/>
+ <nd ref="1623726868"/>
+ <nd ref="1623726912"/>
+ <nd ref="1623726908"/>
+ <nd ref="1623726861"/>
+ <nd ref="1623726858"/>
+ <nd ref="1623726891"/>
+ <nd ref="1623726890"/>
+ <nd ref="1623726855"/>
+ <nd ref="1623726837"/>
+ <nd ref="1623726847"/>
+ <nd ref="1623726930"/>
+ <tag k="addr:city" v="Saint-Maurice"/>
+ <tag k="addr:housenumber" v="18"/>
+ <tag k="addr:postcode" v="94410"/>
+ <tag k="addr:street" v="rue du Maréchal Leclerc"/>
+ <tag k="alt_name" v="Appart'Hôtel Saint-Maurice"/>
+ <tag k="building" v="yes"/>
+ <tag k="contact:email" v="saint-maurice@appartcity.com"/>
+ <tag k="contact:fax" v="+ 33 (0) 1 49 77 23 41"/>
+ <tag k="contact:phone" v="+ 33 (0) 1 49 77 23 40"/>
+ <tag k="contact:website" v="http://de.appartcity.com/de/s04_residences/s04p03_accueil_residences.php?res=47"/>
+ <tag k="name" v="Appart'City Saint-Maurice"/>
+ <tag k="rooms" v="220"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="151074455">
+ <nd ref="1639117624"/>
+ <nd ref="1639117604"/>
+ <nd ref="1854559107"/>
+ <nd ref="1639117510"/>
+ <nd ref="1639117573"/>
+ <nd ref="1639117506"/>
+ <nd ref="1639117445"/>
+ <nd ref="1639117269"/>
+ <nd ref="1639117243"/>
+ <nd ref="1639117610"/>
+ <nd ref="1639118150"/>
+ <nd ref="1639118154"/>
+ <nd ref="1639118159"/>
+ <nd ref="1639118163"/>
+ <nd ref="1639118167"/>
+ <nd ref="1639118172"/>
+ <nd ref="1639118177"/>
+ <nd ref="1639118184"/>
+ <nd ref="1639118187"/>
+ <nd ref="1639118191"/>
+ <nd ref="1639118195"/>
+ <nd ref="1639118216"/>
+ <nd ref="1639118222"/>
+ <nd ref="1639118227"/>
+ <nd ref="1639118233"/>
+ <nd ref="1639118268"/>
+ <nd ref="1639118278"/>
+ <nd ref="1639118275"/>
+ <nd ref="1639118286"/>
+ <nd ref="1639118283"/>
+ <nd ref="1639118240"/>
+ <nd ref="1639118237"/>
+ <nd ref="1639118235"/>
+ <nd ref="1639118230"/>
+ <nd ref="1639118225"/>
+ <nd ref="1639118219"/>
+ <nd ref="1639118213"/>
+ <nd ref="1639118129"/>
+ <nd ref="1639118136"/>
+ <nd ref="1639118133"/>
+ <nd ref="1639118126"/>
+ <nd ref="1639118122"/>
+ <nd ref="1639118118"/>
+ <nd ref="1639118115"/>
+ <nd ref="1639118112"/>
+ <nd ref="1639118109"/>
+ <nd ref="1639118102"/>
+ <nd ref="1639118075"/>
+ <nd ref="1639118072"/>
+ <nd ref="1639118068"/>
+ <nd ref="1639117618"/>
+ <nd ref="1639117629"/>
+ <nd ref="1639118107"/>
+ <nd ref="1639118078"/>
+ <nd ref="1639117628"/>
+ <nd ref="1639117624"/>
+ <tag k="architect" v="Kenneth Amstrong, Masayuki Yamanaka"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Maison de la Culture du Japon"/>
+ <tag k="opening_hours" v="Tu-Sa 12:00-19:00; Th 12:00-20:00; Aug off"/>
+ <tag k="phone" v="01.44.37.95 .01"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre ; mise à jour : 2012"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.mcjp.fr/"/>
+ <tag k="wikipedia" v="fr:Maison de la culture du Japon à Paris"/>
+ </way>
+ <way id="153776401">
+ <nd ref="790434303"/>
+ <nd ref="790435362"/>
+ <nd ref="790434958"/>
+ <nd ref="1664169848"/>
+ <nd ref="790434905"/>
+ <nd ref="1664169845"/>
+ <nd ref="1664266635"/>
+ <nd ref="1664266634"/>
+ <nd ref="790434668"/>
+ <nd ref="790435507"/>
+ <nd ref="790433164"/>
+ <nd ref="790435296"/>
+ <nd ref="790435569"/>
+ <nd ref="790434679"/>
+ <nd ref="790435749"/>
+ <nd ref="790434303"/>
+ <tag k="name" v="Musée Zadkine"/>
+ <tag k="phone" v="01.55.42.77.20"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.paris.fr"/>
+ <tag k="wikipedia" v="fr:Musée Zadkine"/>
+ <tag k="wikipedia:en" v="Musée Zadkine"/>
+ </way>
+ <way id="154679327">
+ <nd ref="914219257"/>
+ <nd ref="914221259"/>
+ <nd ref="914220376"/>
+ <nd ref="1619504633"/>
+ <nd ref="914753298"/>
+ <nd ref="914224886"/>
+ <nd ref="914222297"/>
+ <nd ref="1671919956"/>
+ <nd ref="914219257"/>
+ <tag k="name" v="Musée de Montmartre"/>
+ <tag k="phone" v="01.49.25.89.39"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.museedemontmartre.fr/"/>
+ </way>
+ <way id="156973373">
+ <nd ref="714137665"/>
+ <nd ref="714137202"/>
+ <nd ref="1692086164"/>
+ <nd ref="714137492"/>
+ <nd ref="714137645"/>
+ <nd ref="714137432"/>
+ <nd ref="714137665"/>
+ <tag k="name" v="Musée de la chasse et de la nature"/>
+ <tag k="phone" v="01.53.01.92.40"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="www.chassenature.org"/>
+ <tag k="wikipedia" v="fr:Musée de la chasse et de la nature"/>
+ </way>
+ <way id="161119956">
+ <nd ref="920178442"/>
+ <nd ref="920168162"/>
+ <nd ref="920183010"/>
+ <nd ref="920168380"/>
+ <nd ref="920176470"/>
+ <nd ref="920179727"/>
+ <nd ref="920184159"/>
+ <nd ref="920184586"/>
+ <nd ref="920182703"/>
+ <nd ref="920182765"/>
+ <nd ref="920169251"/>
+ <nd ref="920172388"/>
+ <nd ref="920175289"/>
+ <nd ref="920181665"/>
+ <nd ref="920173850"/>
+ <nd ref="920171345"/>
+ <nd ref="920177364"/>
+ <nd ref="920182809"/>
+ <nd ref="920182198"/>
+ <nd ref="920171851"/>
+ <nd ref="920178563"/>
+ <nd ref="920182186"/>
+ <nd ref="920183990"/>
+ <nd ref="920184844"/>
+ <nd ref="1731162379"/>
+ <nd ref="1614470597"/>
+ <nd ref="1731162376"/>
+ <nd ref="920184493"/>
+ <nd ref="920169829"/>
+ <nd ref="920176469"/>
+ <nd ref="920177086"/>
+ <nd ref="920172587"/>
+ <nd ref="920168189"/>
+ <nd ref="920181361"/>
+ <nd ref="920184398"/>
+ <nd ref="920185475"/>
+ <nd ref="920170964"/>
+ <nd ref="920183086"/>
+ <nd ref="920182194"/>
+ <nd ref="920176087"/>
+ <nd ref="920172018"/>
+ <nd ref="920171614"/>
+ <nd ref="920169162"/>
+ <nd ref="920168765"/>
+ <nd ref="920176224"/>
+ <nd ref="920170268"/>
+ <nd ref="920181144"/>
+ <nd ref="920177959"/>
+ <nd ref="920176625"/>
+ <nd ref="920177247"/>
+ <nd ref="920177666"/>
+ <nd ref="920179187"/>
+ <nd ref="920178162"/>
+ <nd ref="920177985"/>
+ <nd ref="920184970"/>
+ <nd ref="920183104"/>
+ <nd ref="920176737"/>
+ <nd ref="920176255"/>
+ <nd ref="920179866"/>
+ <nd ref="920178658"/>
+ <nd ref="920176252"/>
+ <nd ref="920174136"/>
+ <nd ref="920180668"/>
+ <nd ref="1731162371"/>
+ <nd ref="1731162372"/>
+ <nd ref="920181200"/>
+ <nd ref="920178442"/>
+ <tag k="alt_name" v="Manufacture Nationale des Gobelins"/>
+ <tag k="name" v="Manufacture des Gobelins"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="165174425">
+ <nd ref="1767360478"/>
+ <nd ref="1767360475"/>
+ <nd ref="1767360476"/>
+ <nd ref="1767360477"/>
+ <nd ref="1767360478"/>
+ <tag k="designation" v="Espace Multimedia Le Cube"/>
+ <tag k="name" v="Le Cube"/>
+ <tag k="source" v="http://www.lecube.com/"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/paris/poi-client.conf b/test/poi-service/script/paris/poi-client.conf
new file mode 100644
index 0000000..12ae679
--- /dev/null
+++ b/test/poi-service/script/paris/poi-client.conf
@@ -0,0 +1,34 @@
+[General]
+InvalidHandle=255
+PoiDisplayTableRows=15
+DefaultTextToSearch=enter text to search
+DefaultTextToBeInitialized=to be initialized
+DefaultRadius=100
+CAMName=org.genivi.poiservice.POIContentAccessModule
+MapWidthInMeter = 5000
+MapHeightInMeter = 5000
+TimerPeriodForPosition = 1000
+
+[Attribute]
+Source = source
+WebSite = website
+Phone = phone
+Stars = stars
+OpeningHours = openingHours
+Number = addrHouseNumber
+Street = addrStreet
+PostCode = addrPostCode
+City = addrCity
+Brand = brand
+Operateur = operateur
+
+[Language]
+language=fra
+country=FRA
+HMI=en
+
+[DefaultLocation]
+latitude=48.85792
+longitude=2.3383145
+altitude=30
+
diff --git a/test/poi-service/script/paris/station.xml b/test/poi-service/script/paris/station.xml
new file mode 100644
index 0000000..770f230
--- /dev/null
+++ b/test/poi-service/script/paris/station.xml
@@ -0,0 +1,2740 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. It has there been collected by a large group of contributors. For individual attribution of each item please refer to http://www.openstreetmap.org/api/0.6/[node|way|relation]/#id/history </note>
+<meta osm_base="2012-08-15T06:40:02Z"/>
+
+ <node id="12388534" lat="48.8153367" lon="2.2970255">
+ <tag k="name" v="Malakoff - Rue Étienne Dolet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="22441"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Malakoff_-_Rue_Étienne_Dolet_(métro_de_Paris)"/>
+ </node>
+ <node id="21310895" lat="48.8205925" lon="2.3390267">
+ <tag k="name" v="Cité Universitaire"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B"/>
+ <tag k="ref:FR:RATP" v="1970"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775864"/>
+ </node>
+ <node id="21310914" lat="48.8330932" lon="2.3331828">
+ <tag k="name" v="Denfert-Rochereau"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B"/>
+ <tag k="ref:FR:RATP" v="1904"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775863"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="26721276" lat="48.8877563" lon="2.3140767">
+ <tag k="name" v="Pont Cardinet"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="26824135" lat="48.8442847" lon="2.3744312">
+ <tag k="name" v="Gare de Lyon SNCF"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:SNCF" v="PLY"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia:fr" v="Gare_de_Lyon"/>
+ </node>
+ <node id="27233126" lat="48.8970985" lon="2.2982001">
+ <tag k="name" v="Clichy-Levallois"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="27332092" lat="48.8882286" lon="2.2493898">
+ <tag k="layer" v="3"/>
+ <tag k="name" v="Esplanade de La Défense"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1913"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Esplanade de la Défense (métro de Paris)"/>
+ </node>
+ <node id="27333361" lat="48.8856101" lon="2.2577697">
+ <tag k="layer" v="3"/>
+ <tag k="name" v="Pont de Neuilly"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1709"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Pont de Neuilly (métro de Paris)"/>
+ </node>
+ <node id="27362238" lat="48.8811205" lon="2.2717733">
+ <tag k="alt_name" v="Les Sablons (Jardin d'acclimatation)"/>
+ <tag k="name" v="Les Sablons"/>
+ <tag k="name:ru" v="Ле-Саблон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1802"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Les Sablons (métro de Paris)"/>
+ </node>
+ <node id="27362239" lat="48.8781189" lon="2.2815392">
+ <tag k="layer" v="3"/>
+ <tag k="name" v="Porte Maillot"/>
+ <tag k="name:ru" v="Порт-Майо"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1716"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte Maillot (métro de Paris)"/>
+ </node>
+ <node id="27362240" lat="48.8757130" lon="2.2891932">
+ <tag k="name" v="Argentine"/>
+ <tag k="name:ru" v="Аржантин"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1986"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Argentine (métro de Paris)"/>
+ </node>
+ <node id="27362249" lat="48.8718025" lon="2.3012613">
+ <tag k="name" v="George V"/>
+ <tag k="name:ru" v="Георг V"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1846"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:George V (métro de Paris)"/>
+ </node>
+ <node id="27362251" lat="48.8694252" lon="2.3086954">
+ <tag k="name" v="Franklin D. Roosevelt"/>
+ <tag k="name:ru" v="Франклин Д. Рузвельт"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1924"/>
+ <tag k="source" v="survey"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Franklin D. Roosevelt (métro de Paris)"/>
+ </node>
+ <node id="27362256" lat="48.8664075" lon="2.3221380">
+ <tag k="name" v="Concorde"/>
+ <tag k="name:ru" v="Конкорд"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Concorde (métro de Paris)"/>
+ </node>
+ <node id="27362258" lat="48.8643585" lon="2.3298436">
+ <tag k="name" v="Tuileries"/>
+ <tag k="name:ru" v="Тюильри"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1640"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Tuileries (métro de Paris)"/>
+ </node>
+ <node id="27362259" lat="48.8623829" lon="2.3361468">
+ <tag k="name" v="Palais Royal — Musée du Louvre"/>
+ <tag k="name:ru" v="Пале-Руаяль — Мюзе-дю-Лувр"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1774"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Palais Royal - Musée du Louvre (métro de Paris)"/>
+ </node>
+ <node id="27362260" lat="48.8607697" lon="2.3409358">
+ <tag k="name" v="Louvre — Rivoli"/>
+ <tag k="name:ru" v="Лувр — Риволи"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1809"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Louvre - Rivoli (métro de Paris)"/>
+ </node>
+ <node id="27371862" lat="48.8583398" lon="2.3467014">
+ <tag k="name" v="Châtelet"/>
+ <tag k="name:ru" v="Шатле"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1964"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Châtelet (métro de Paris)"/>
+ </node>
+ <node id="27371864" lat="48.8572265" lon="2.3521708">
+ <tag k="name" v="Hôtel de Ville"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1855"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Hôtel de Ville (métro de Paris)"/>
+ </node>
+ <node id="27371867" lat="48.8552140" lon="2.3606657">
+ <tag k="alt_name" v="Saint-Paul (Le Marais)"/>
+ <tag k="name" v="Saint-Paul"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1695"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="27371876" lat="48.8520122" lon="2.3686542">
+ <tag k="name" v="Bastille"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2000"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="27371889" lat="48.8457111" lon="2.3727163">
+ <tag k="name" v="Gare de Lyon (métro 1)"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1839"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Gare de Lyon (métro de Paris)"/>
+ </node>
+ <node id="27371892" lat="48.8472696" lon="2.3866995">
+ <tag k="name" v="Reuilly — Diderot"/>
+ <tag k="name:ru" v="Рёйи — Дидро"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1662"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="27371900" lat="48.8474233" lon="2.4072293">
+ <tag k="name" v="Porte de Vincennes"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1733"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Porte de Vincennes"/>
+ </node>
+ <node id="27415772" lat="48.8853826" lon="2.2979895">
+ <tag k="name" v="Pereire-Levallois"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5642"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare de Pereire - Levallois"/>
+ </node>
+ <node id="27415776" lat="48.8778882" lon="2.2843719">
+ <tag k="name" v="Neuilly - Porte Maillot"/>
+ <tag k="note:fr" v="RER C"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5643"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare de Neuilly - Porte Maillot"/>
+ </node>
+ <node id="30248710" lat="48.8183175" lon="2.2920680">
+ <tag k="name" v="Vanves Malakoff"/>
+ <tag k="name:ru" v="Ванв — Малакоф"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia:fr" v="Gare_de_Vanves_-_Malakoff"/>
+ </node>
+ <node id="30738144" lat="48.8391110" lon="2.2704908">
+ <tag k="name" v="Pont du Garigliano - Hôpital européen Georges-Pompidou"/>
+ <tag k="old_name" v="Pont du Garigliano;Boulevard Victor"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5598"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia:fr" v="Pont du Garigliano"/>
+ </node>
+ <node id="30738155" lat="48.8296487" lon="2.2633224">
+ <tag k="name" v="Issy Val-de-Seine"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5597"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare d'Issy - Val de Seine"/>
+ </node>
+ <node id="30739813" lat="48.8197687" lon="2.2589922">
+ <tag k="name" v="Issy"/>
+ <tag k="operator" v="RER C"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5596"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare d'Issy"/>
+ </node>
+ <node id="34909170" lat="48.8487832" lon="2.2988351">
+ <tag k="name" v="La Motte-Picquet - Grenelle"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1705;1874"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia:fr" v="La_Motte-Picquet_-_Grenelle_(métro_de_Paris)"/>
+ </node>
+ <node id="34909171" lat="48.8475338" lon="2.3029524">
+ <tag k="name" v="Cambronne"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1940"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Cambronne_(métro_de_Paris)"/>
+ </node>
+ <node id="34909187" lat="48.8504212" lon="2.2936685">
+ <tag k="name" v="Dupleix"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1907"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Dupleix_(métro_de_Paris)"/>
+ </node>
+ <node id="65331500" lat="48.8404810" lon="2.3196370">
+ <tag k="name" v="Gare Montparnasse 1 - Porte Océane"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="134299001" lat="48.8242325" lon="2.2730847">
+ <tag k="name" v="Mairie d'Issy"/>
+ <tag k="name:ru" v="Мэри-д’Исси"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1814;2803"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Mairie_d'Issy_(métro_de_Paris)"/>
+ </node>
+ <node id="134299013" lat="48.8270162" lon="2.2794048">
+ <tag k="name" v="Corentin Celton"/>
+ <tag k="name:ru" v="Корентен Селтон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1889;2802"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Corentin_Celton_(métro_de_Paris)"/>
+ </node>
+ <node id="134305192" lat="48.8326135" lon="2.2884024">
+ <tag k="name" v="Porte de Versailles"/>
+ <tag k="name:ru" v="Порт-де-Версай"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1732;1606"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Porte_de_Versailles_(métro_de_Paris)"/>
+ </node>
+ <node id="134305198" lat="48.8372483" lon="2.2964937">
+ <tag k="name" v="Convention"/>
+ <tag k="name:ru" v="Конвансьон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1887;1605"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Convention_(métro_de_Paris)"/>
+ </node>
+ <node id="154788912" lat="48.8627572" lon="2.3146743">
+ <tag k="name" v="Invalides"/>
+ <tag k="name:fr" v="Invalides"/>
+ <tag k="name:ru" v="Энвалид"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5602"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare des Invalides"/>
+ </node>
+ <node id="154788920" lat="48.8574537" lon="2.2904598">
+ <tag k="name" v="Champ de Mars - Tour Eiffel"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5600"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="limited"/>
+ </node>
+ <node id="191754163" lat="48.8395783" lon="2.3172588"/>
+ <node id="195192900" lat="48.8391783" lon="2.3181297">
+ <tag k="name" v="Gare Montparnasse 2 - Pasteur"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="202824847" lat="48.8765581" lon="2.3252961">
+ <tag k="name" v="Gare Saint-Lazare"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="uic_ref" v="87384008"/>
+ <tag k="website" v="http://www.gares-en-mouvement.com/fr/frpsl/accueil/"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia" v="fr:Gare de Paris-Saint-Lazare"/>
+ <tag k="wikipedia:be" v="Вакзал_Сен-Лазар"/>
+ <tag k="wikipedia:cs" v="Gare_Saint-Lazare"/>
+ <tag k="wikipedia:de" v="Paris_Gare_Saint-Lazare"/>
+ <tag k="wikipedia:en" v="Gare_Saint-Lazare"/>
+ <tag k="wikipedia:es" v="Estación_de_Paris_Saint-Lazare"/>
+ <tag k="wikipedia:eu" v="Paris-Saint_Lazare_geltokia"/>
+ <tag k="wikipedia:fi" v="Saint_Lazaren_rautatieasema"/>
+ <tag k="wikipedia:he" v="תחנת_סן_לאזאר"/>
+ <tag k="wikipedia:hu" v="Paris_Gare_Saint-Lazare"/>
+ <tag k="wikipedia:id" v="Gare_Saint-Lazare"/>
+ <tag k="wikipedia:it" v="Gare_de_Paris_Saint-Lazare"/>
+ <tag k="wikipedia:ja" v="サン・ラザール駅"/>
+ <tag k="wikipedia:nl" v="Station_Paris_Saint-Lazare"/>
+ <tag k="wikipedia:pl" v="Gare_Saint-Lazare"/>
+ <tag k="wikipedia:pt" v="Gare_Saint-Lazare"/>
+ <tag k="wikipedia:ru" v="Вокзал_Сен-Лазар"/>
+ <tag k="wikipedia:sv" v="Paris_Saint-Lazare_järnvägsstation"/>
+ <tag k="wikipedia:uk" v="Вокзал_Сен-Лазар"/>
+ <tag k="wikipedia:zh" v="巴黎圣拉扎尔车站"/>
+ </node>
+ <node id="220289379" lat="48.8228800" lon="2.3256282">
+ <tag k="alt_name" v="Porte d'Orléans (Général Leclerc)"/>
+ <tag k="name" v="Porte d'Orléans"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1720"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Porte_d'Orléans_(métro_de_Paris)"/>
+ </node>
+ <node id="220289382" lat="48.8280605" lon="2.3269249">
+ <tag k="name" v="Alésia"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1981"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Alésia_(métro_de_Paris)"/>
+ </node>
+ <node id="220289385" lat="48.8313954" lon="2.3301258">
+ <tag k="name" v="Mouton-Duvernet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1753"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia:fr" v="Mouton-Duvernet_(métro_de_Paris)"/>
+ </node>
+ <node id="220289387" lat="48.8340204" lon="2.3325902">
+ <tag k="name" v="Denfert-Rochereau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1902"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia:fr" v="Denfert-Rochereau_(métro_de_Paris)"/>
+ </node>
+ <node id="220289389" lat="48.8389018" lon="2.3308032">
+ <tag k="name" v="Raspail"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1660"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Raspail_(métro_de_Paris)"/>
+ </node>
+ <node id="235369898" lat="48.8330168" lon="2.3366295">
+ <tag k="name" v="Saint-Jacques"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1688"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="235370184" lat="48.8311116" lon="2.3434618">
+ <tag k="name" v="Glacière"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1848"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="235370505" lat="48.8297785" lon="2.3504704">
+ <tag k="name" v="Corvisart"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1890"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="235371392" lat="48.8314217" lon="2.3555589">
+ <tag k="name" v="Place d'Italie"/>
+ <tag k="name:ru" v="Пляс д’Итали"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1789"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="uic_ref" v="8705548"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Place d'Italie (métro de Paris)"/>
+ </node>
+ <node id="235371394" lat="48.8331919" lon="2.3628662">
+ <tag k="name" v="Nationale"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1761"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="235371395" lat="48.8349482" lon="2.3680926">
+ <tag k="name" v="Chevaleret"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1959"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="235374383" lat="48.8370750" lon="2.3729129">
+ <tag k="name" v="Quai de la Gare"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1742"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Quai de la Gare (métro de Paris)"/>
+ </node>
+ <node id="235377792" lat="48.8842870" lon="2.3659442">
+ <tag k="name" v="Stalingrad"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1627"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="241928557" lat="48.8480229" lon="2.3952136">
+ <tag k="alt_name" v="Nation"/>
+ <tag k="name" v="Nation (ligne 1,2,6)"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1758"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Nation (métro de Paris)"/>
+ </node>
+ <node id="241928758" lat="48.8454354" lon="2.4293269">
+ <tag k="name" v="Bérault"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1938"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Bérault (métro de Paris)"/>
+ </node>
+ <node id="243357000" lat="48.8778172" lon="2.3812985">
+ <tag k="name" v="Buttes Chaumont"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1936"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243358029" lat="48.8807734" lon="2.3740760">
+ <tag k="name" v="Bolivar"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2014"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243486950" lat="48.8518166" lon="2.4013757">
+ <tag k="name" v="Buzenval"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1937"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243487863" lat="48.8461657" lon="2.4193071">
+ <tag k="name" v="Saint-Mandé - Tourelle"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1690"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Saint-Mandé (métro de Paris)"/>
+ </node>
+ <node id="243489718" lat="48.8514805" lon="2.3982271">
+ <tag k="name" v="Avron"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1995"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243490761" lat="48.8664900" lon="2.3833323">
+ <tag k="name" v="Ménilmontant"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1754"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Ménilmontant (métro de Paris)"/>
+ </node>
+ <node id="243490762" lat="48.8628581" lon="2.3874149">
+ <tag k="name" v="Père Lachaise"/>
+ <tag k="name:ru" v="Пер-Лашез"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1741"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Père Lachaise (métro de Paris)"/>
+ </node>
+ <node id="243490763" lat="48.8582526" lon="2.3901333">
+ <tag k="name" v="Philippe Auguste"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1784"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Philippe Auguste (métro de Paris)"/>
+ </node>
+ <node id="243490764" lat="48.8562640" lon="2.3945621">
+ <tag k="name" v="Alexandre Dumas"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1978"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="243493845" lat="48.8720463" lon="2.3769849">
+ <tag k="name" v="Belleville"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2004"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243493846" lat="48.8692947" lon="2.3801730">
+ <tag k="name" v="Couronnes"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1893"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Couronnes (métro de Paris)"/>
+ </node>
+ <node id="243493916" lat="48.8774398" lon="2.3708174">
+ <tag k="name" v="Colonel Fabien"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1972"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243494334" lat="48.8824159" lon="2.3702227">
+ <tag k="name" v="Jaurès"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1861"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243494998" lat="48.8829026" lon="2.3443344">
+ <tag k="name" v="Anvers"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1984"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243496024" lat="48.8823612" lon="2.3373703">
+ <tag k="name" v="Pigalle"/>
+ <tag k="name:ru" v="Пигаль"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1787"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Pigalle (métro de Paris)"/>
+ </node>
+ <node id="243496025" lat="48.8836162" lon="2.3330841">
+ <tag k="name" v="Blanche"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2009"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243496027" lat="48.8835165" lon="2.3274515">
+ <tag k="name" v="Place de Clichy"/>
+ <tag k="name:ru" v="Пляс-де-Клиши"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1790"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Place de Clichy (métro de Paris)"/>
+ </node>
+ <node id="243496028" lat="48.8824462" lon="2.3221220">
+ <tag k="name" v="Rome"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1670"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Rome (métro de Paris)"/>
+ </node>
+ <node id="243496029" lat="48.8812626" lon="2.3155318">
+ <tag k="name" v="Villiers"/>
+ <tag k="name:ru" v="Вилье"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1654"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Villiers_(métro_de_Paris)"/>
+ </node>
+ <node id="243496030" lat="48.8805424" lon="2.3094235">
+ <tag k="name" v="Monceau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1749"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Monceau (métro de Paris)"/>
+ </node>
+ <node id="243496031" lat="48.8792716" lon="2.3033776">
+ <tag k="name" v="Courcelles"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1892"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Courcelles (métro de Paris)"/>
+ </node>
+ <node id="243496033" lat="48.8736024" lon="2.2956935">
+ <tag k="name" v="Charles de Gaulle — Étoile (metro)"/>
+ <tag k="name:ru" v="Шарль де Голль — Этуаль"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1953"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia" v="fr:Charles de Gaulle - Étoile (métro de Paris)"/>
+ </node>
+ <node id="243496728" lat="48.8698038" lon="2.2854485">
+ <tag k="name" v="Victor Hugo"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1648"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Victor Hugo (métro de Paris)"/>
+ </node>
+ <node id="243496729" lat="48.8714638" lon="2.2768954">
+ <tag k="alt_name" v="Porte Dauphine (Maréchal de Lattre de Tassigny)"/>
+ <tag k="name" v="Porte Dauphine"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1714"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="243507233" lat="48.8652463" lon="2.4165383">
+ <tag k="alt_name" v="Gallieni (Parc de Bagnolet)"/>
+ <tag k="name" v="Galliéni"/>
+ <tag k="name:ru" v="Гальени"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1928"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243507234" lat="48.8644893" lon="2.4088741">
+ <tag k="name" v="Porte de Bagnolet"/>
+ <tag k="name:ru" v="Порт-де-Баньоле"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1721"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243507235" lat="48.8648600" lon="2.3985306">
+ <tag k="name" v="Gambetta"/>
+ <tag k="name:ru" v="Гамбетта"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1929"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Gambetta (métro de Paris)"/>
+ </node>
+ <node id="243507789" lat="48.8643020" lon="2.3794597">
+ <tag k="name" v="Rue Saint-Maur"/>
+ <tag k="name:ru" v="Рю-Сен-Мор"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1693"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="243507790" lat="48.8652193" lon="2.3747542">
+ <tag k="name" v="Parmentier"/>
+ <tag k="name:ru" v="Пармантье"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1779"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="243507791" lat="48.8673061" lon="2.3645980">
+ <tag k="name" v="République"/>
+ <tag k="name:fr" v="République"/>
+ <tag k="name:ru" v="Репюблик"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1679"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:République (métro de Paris)"/>
+ </node>
+ <node id="243507792" lat="48.8665492" lon="2.3615193">
+ <tag k="name" v="Temple"/>
+ <tag k="name:ru" v="Тампль"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1634"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243507793" lat="48.8654878" lon="2.3563464">
+ <tag k="name" v="Arts et Métiers"/>
+ <tag k="name:ru" v="Ар-э-Метье"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1988"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243507794" lat="48.8663020" lon="2.3524557">
+ <tag k="name" v="Réaumur - Sébastopol"/>
+ <tag k="name:ru" v="Реомюр — Себастополь"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1676"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Réaumur - Sébastopol (métro de Paris)"/>
+ </node>
+ <node id="243507795" lat="48.8676419" lon="2.3463248">
+ <tag k="name" v="Sentier"/>
+ <tag k="name:ru" v="Сантье"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1702"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Sentier (métro de Paris)"/>
+ </node>
+ <node id="243510334" lat="48.8686692" lon="2.3412605">
+ <tag k="name" v="Bourse"/>
+ <tag k="name:ru" v="Бурс"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1930"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Bourse (métro de Paris)"/>
+ </node>
+ <node id="243510335" lat="48.8695654" lon="2.3367072">
+ <tag k="name" v="Quatre Septembre"/>
+ <tag k="name:ru" v="Катр-Септамбр"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1744"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Quatre-Septembre (métro de Paris)"/>
+ </node>
+ <node id="243510336" lat="48.8707693" lon="2.3322643">
+ <tag k="name" v="Opéra"/>
+ <tag k="name:ru" v="Опера"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1771"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Opéra (métro de Paris)"/>
+ </node>
+ <node id="243510337" lat="48.8736019" lon="2.3276269">
+ <tag k="name" v="Havre - Caumartin"/>
+ <tag k="name:fr" v="Havre - Caumartin"/>
+ <tag k="name:ru" v="Гавр — Комартен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1852"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Havre - Caumartin (métro de Paris)"/>
+ </node>
+ <node id="243510338" lat="48.8754744" lon="2.3254192">
+ <tag k="name" v="Saint-Lazare"/>
+ <tag k="name:ru" v="Сен-Лазар"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1689"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="243510339" lat="48.8787437" lon="2.3224519">
+ <tag k="name" v="Europe"/>
+ <tag k="name:ru" v="Эроп"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1915"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Europe (métro de Paris)"/>
+ </node>
+ <node id="243510678" lat="48.8825546" lon="2.3110868">
+ <tag k="name" v="Malesherbes"/>
+ <tag k="name:ru" v="Мальзерб"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1826"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Malesherbes (métro de Paris)"/>
+ </node>
+ <node id="243510679" lat="48.8839908" lon="2.3042907">
+ <tag k="name" v="Wagram"/>
+ <tag k="name:ru" v="Ваграм"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1658"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Wagram (métro de Paris)"/>
+ </node>
+ <node id="243510680" lat="48.8847948" lon="2.2982623">
+ <tag k="name" v="Péreire"/>
+ <tag k="name:ru" v="Перер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1740"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Pereire (métro de Paris)"/>
+ </node>
+ <node id="243510681" lat="48.8856871" lon="2.2926417">
+ <tag k="name" v="Porte de Champerret"/>
+ <tag k="name:ru" v="Порт-де-Шанперре"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1722"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte de Champerret (métro de Paris)"/>
+ </node>
+ <node id="244494486" lat="48.8395785" lon="2.3012923">
+ <tag k="alt_name" v="Vaugirard (Adolphe Chérioux)"/>
+ <tag k="name" v="Vaugirard"/>
+ <tag k="name:ru" v="Вожирар"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1645;1604"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Vaugirard_(métro_de_Paris)"/>
+ </node>
+ <node id="244494489" lat="48.8415118" lon="2.3080120">
+ <tag k="name" v="Volontaires"/>
+ <tag k="name:ru" v="Волонтер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1656;1603"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Volontaires_(métro_de_Paris)"/>
+ </node>
+ <node id="244494496" lat="48.8443954" lon="2.3175634">
+ <tag k="name" v="Falguière"/>
+ <tag k="name:ru" v="Фальгьер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1601;1918"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Falguière_(métro_de_Paris)"/>
+ </node>
+ <node id="245250755" lat="48.8468543" lon="2.3166512">
+ <tag k="name" v="Duroc"/>
+ <tag k="name:fr" v="Duroc"/>
+ <tag k="name:ru" v="Дюрок"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1908"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Duroc_(métro_de_Paris)"/>
+ </node>
+ <node id="245250758" lat="48.8514000" lon="2.3143901">
+ <tag k="name" v="Saint-François-Xavier"/>
+ <tag k="name:ru" v="Сэн-Франсуа-Ксавье"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1685"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Saint-François-Xavier_(métro_de_Paris)"/>
+ </node>
+ <node id="245250759" lat="48.8568058" lon="2.3151577">
+ <tag k="name" v="Varenne"/>
+ <tag k="name:ru" v="Варен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1644"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Varenne (métro de Paris)"/>
+ </node>
+ <node id="245455187" lat="48.8413343" lon="2.4008998">
+ <tag k="name" v="Bel-Air"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2003"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="249335596" lat="48.8905035" lon="2.3598783">
+ <tag k="name" v="Marx Dormoy"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1831"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Marx Dormoy (métro de Paris)"/>
+ </node>
+ <node id="251387813" lat="48.8707855" lon="2.3611531">
+ <tag k="name" v="Jacques Bonsergent"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1859"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="255000799" lat="48.8921077" lon="2.2852229">
+ <tag k="name" v="Anatole France"/>
+ <tag k="name:ru" v="Анатоль Франс"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1982"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Anatole_France_(métro_de_Paris)"/>
+ </node>
+ <node id="255161921" lat="48.8970740" lon="2.2803140">
+ <tag k="alt_name" v="Pont de Levallois-Bécon"/>
+ <tag k="name" v="Pont de Levallois"/>
+ <tag k="name:ru" v="Пон-де-Левалюа — Бекон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1708"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Pont_de_Levallois_-_Bécon_(métro_de_Paris)"/>
+ </node>
+ <node id="255162203" lat="48.8887892" lon="2.2878755">
+ <tag k="name" v="Louise Michel"/>
+ <tag k="name:ru" v="Луиз Мишель"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1807"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Louise Michel (métro de Paris)"/>
+ </node>
+ <node id="256441194" lat="48.8526992" lon="2.4061094">
+ <tag k="name" v="Maraîchers"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="55372"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="256442276" lat="48.8534759" lon="2.4105242">
+ <tag k="name" v="Porte de Montreuil"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1727"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="256442845" lat="48.8558145" lon="2.4237108">
+ <tag k="name" v="Robespierre"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1667"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="256443205" lat="48.8525808" lon="2.3887914">
+ <tag k="name" v="Rue des Boulets"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1673"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="256443438" lat="48.8547441" lon="2.3853565">
+ <tag k="name" v="Charonne"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1955"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="256895321" lat="48.8581580" lon="2.3798044">
+ <tag k="alt_name" v="Voltaire (Léon Blum)"/>
+ <tag k="name" v="Voltaire"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1657"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="256895609" lat="48.8610516" lon="2.3747956">
+ <tag k="name" v="Saint-Ambroise"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1680"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="256896059" lat="48.8641314" lon="2.3695694">
+ <tag k="name" v="Oberkampf"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1769"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="256897077" lat="48.8694199" lon="2.3544678">
+ <tag k="name" v="Strasbourg - Saint-Denis"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1628"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Strasbourg - Saint-Denis (métro de Paris)"/>
+ </node>
+ <node id="256897078" lat="48.8706004" lon="2.3487793">
+ <tag k="name" v="Bonne Nouvelle"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2015"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Bonne Nouvelle (métro de Paris)"/>
+ </node>
+ <node id="256897079" lat="48.8715206" lon="2.3432861">
+ <tag k="name" v="Grands Boulevards"/>
+ <tag k="old_name" v="Montmartre; rue Montmartre"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1671"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Grands Boulevards (métro de Paris)"/>
+ </node>
+ <node id="256897080" lat="48.8720176" lon="2.3395091">
+ <tag k="name" v="Richelieu Drouot"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1665"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Richelieu - Drouot (métro de Paris)"/>
+ </node>
+ <node id="256897458" lat="48.8730612" lon="2.3333207">
+ <tag k="name" v="Chaussée d'Antin (La Fayette)"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1957"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Chaussée d'Antin - La Fayette (métro de Paris)"/>
+ </node>
+ <node id="256897554" lat="48.8747030" lon="2.3197963">
+ <tag k="name" v="Saint-Augustin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1681"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Saint-Augustin (métro de Paris)"/>
+ </node>
+ <node id="258068724" lat="48.8464740" lon="2.3659107">
+ <tag k="name" v="Quai de la Rapée"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1743"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260040829" lat="48.8423263" lon="2.3655037">
+ <tag k="name" v="Gare d'Austerlitz"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5605;1838;226221"/>
+ <tag k="type:RATP" v="metro;rer"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260040968" lat="48.8460116" lon="2.3549579">
+ <tag k="name" v="Jussieu"/>
+ <tag k="name:fr" v="Jussieu"/>
+ <tag k="name:ru" v="Жюссьё"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1866"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Jussieu (métro de Paris)"/>
+ <tag k="wikipedia:ru" v="Жюссьё_(станция_метро)"/>
+ </node>
+ <node id="260078615" lat="48.8465082" lon="2.3517283">
+ <tag k="name" v="Cardinal Lemoine"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1942"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="260078619" lat="48.8499051" lon="2.3487460">
+ <tag k="name" v="Maubert Mutualité"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1834"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Maubert - Mutualité (métro de Paris)"/>
+ </node>
+ <node id="260078622" lat="48.8508926" lon="2.3454617">
+ <tag k="name" v="Cluny - La Sorbonne"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="54244"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260079008" lat="48.8521785" lon="2.3394266">
+ <tag k="name" v="Odéon"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1770"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Odéon (métro de Paris)"/>
+ </node>
+ <node id="260079322" lat="48.8529427" lon="2.3357457">
+ <tag k="name" v="Mabillon"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1812"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260231828" lat="48.8363894" lon="2.2784000">
+ <tag k="name" v="Balard"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1997;1609"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Balard_(métro_de_Paris)"/>
+ </node>
+ <node id="260231831" lat="48.8387450" lon="2.2821427">
+ <tag k="name" v="Lourmel"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1808;1610"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Lourmel_(métro_de_Paris)"/>
+ </node>
+ <node id="260231832" lat="48.8410837" lon="2.2879218">
+ <tag k="name" v="Boucicaut"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2017;1611"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Boucicaut_(métro_de_Paris)"/>
+ </node>
+ <node id="260231833" lat="48.8426906" lon="2.2917758">
+ <tag k="name" v="Félix Faure"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1612;1925"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Félix_Faure_(métro_de_Paris)"/>
+ </node>
+ <node id="260762378" lat="48.8389924" lon="2.3896778">
+ <tag k="name" v="Dugommier"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1906"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="260762379" lat="48.8395253" lon="2.3958919">
+ <tag k="alt_name" v="Daumesnil (Félix Eboué)"/>
+ <tag k="name" v="Daumesnil"/>
+ <tag k="name:ru" v="Домениль"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1901"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260762540" lat="48.8401067" lon="2.3799581">
+ <tag k="name" v="Bercy"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2005"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="260763474" lat="48.8410654" lon="2.3249923">
+ <tag k="name" v="Edgar Quinet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1910"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="260764273" lat="48.8429457" lon="2.3126019">
+ <tag k="name" v="Pasteur"/>
+ <tag k="name:ru" v="Пастер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1602;1781"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Pasteur_(métro_de_Paris)"/>
+ </node>
+ <node id="260765385" lat="48.8713645" lon="2.2935159">
+ <tag k="name" v="Kléber"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1867"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Kléber (métro de Paris)"/>
+ </node>
+ <node id="260765387" lat="48.8669099" lon="2.2902715">
+ <tag k="name" v="Boissière"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2012"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Boissière (métro de Paris)"/>
+ </node>
+ <node id="260765389" lat="48.8630266" lon="2.2870524">
+ <tag k="name" v="Trocadéro"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1639"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Trocadéro (métro de Paris)"/>
+ </node>
+ <node id="260765390" lat="48.8573825" lon="2.2859234">
+ <tag k="name" v="Passy"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1780"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Passy (métro de Paris)"/>
+ </node>
+ <node id="260767422" lat="48.8646725" lon="2.2937783">
+ <tag k="name" v="Iéna"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1858"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Iéna (métro de Paris)"/>
+ </node>
+ <node id="260767423" lat="48.8640063" lon="2.2780859">
+ <tag k="alt_name" v="Rue de la Pompe (Avenue Georges Mandel)"/>
+ <tag k="name" v="Rue de la Pompe"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1672"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Rue de la Pompe (métro de Paris)"/>
+ </node>
+ <node id="260767424" lat="48.8580816" lon="2.2741958">
+ <tag k="name" v="La Muette"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1876"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:La Muette (métro de Paris)"/>
+ </node>
+ <node id="260767425" lat="48.8555764" lon="2.2702166">
+ <tag k="name" v="Ranelagh"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1659"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Ranelagh (métro de Paris)"/>
+ </node>
+ <node id="260767426" lat="48.8525598" lon="2.2681802">
+ <tag k="name" v="Jasmin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1860"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Jasmin (métro de Paris)"/>
+ </node>
+ <node id="260767427" lat="48.8480038" lon="2.2641872">
+ <tag k="name" v="Michel-Ange - Auteuil"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1836"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Michel-Ange_-_Auteuil_(métro_de_Paris)"/>
+ </node>
+ <node id="260767428" lat="48.8452505" lon="2.2618802">
+ <tag k="name" v="Michel-Ange - Molitor"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1837"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Michel-Ange_-_Molitor_(métro_de_Paris)"/>
+ </node>
+ <node id="260767429" lat="48.8430044" lon="2.2600472">
+ <tag k="name" v="Exelmans"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1916"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Exelmans_(métro_de_Paris)"/>
+ </node>
+ <node id="260767430" lat="48.8377707" lon="2.2565741">
+ <tag k="name" v="Porte de Saint-Cloud"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1729"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte de Saint-Cloud (métro de Paris)"/>
+ </node>
+ <node id="260769132" lat="48.8649686" lon="2.3006256">
+ <tag k="name" v="Alma-Marceau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1980"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Alma - Marceau (métro de Paris)"/>
+ </node>
+ <node id="260769651" lat="48.8723362" lon="2.3100827">
+ <tag k="name" v="Saint-Philippe du Roule"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1696"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:/Saint-Philippe du Roule (métro de Paris)"/>
+ </node>
+ <node id="260769652" lat="48.8736768" lon="2.3145456">
+ <tag k="name" v="Miromesnil"/>
+ <tag k="name:fr" v="Miromesnil"/>
+ <tag k="name:ru" v="Миромениль"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1747"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Miromesnil (métro de Paris)"/>
+ </node>
+ <node id="261162833" lat="48.8514587" lon="2.3267159">
+ <tag k="name" v="Sèvres-Babylone"/>
+ <tag k="name:fr" v="Sèvres Babylone"/>
+ <tag k="name:ru" v="Севр — Бабилон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1632"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Sèvres_-_Babylone_(métro_de_Paris)"/>
+ </node>
+ <node id="261611873" lat="48.8939450" lon="2.3144508">
+ <tag k="name" v="Porte de Clichy"/>
+ <tag k="operator" v="Metro-RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1725;5581"/>
+ <tag k="type:RATP" v="metro;rer"/>
+ <tag k="wikipedia" v="fr:Porte de Clichy (métro de Paris)"/>
+ </node>
+ <node id="261611884" lat="48.8905170" lon="2.3201235">
+ <tag k="name" v="Brochant"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1931"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Brochant_(métro_de_Paris)"/>
+ </node>
+ <node id="261612240" lat="48.8874127" lon="2.3256961">
+ <tag k="name" v="La Fourche"/>
+ <tag k="name:ru" v="Ля-Фурш"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1872"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:La Fourche (métro de Paris)"/>
+ </node>
+ <node id="261665825" lat="48.8470802" lon="2.3076354">
+ <tag k="name" v="Ségur"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1631"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="261666122" lat="48.8470463" lon="2.2953101">
+ <tag k="name" v="Avenue Émile Zola"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1994"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="263497271" lat="48.8606970" lon="2.3210551">
+ <tag k="name" v="Assemblée Nationale"/>
+ <tag k="name:ru" v="Ассамбле-Насьональ"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1989"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Assemblée nationale (métro de Paris)"/>
+ </node>
+ <node id="263497272" lat="48.8586775" lon="2.3231168">
+ <tag k="name" v="Solférino"/>
+ <tag k="name:ru" v="Сольферино"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1622"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Solférino (métro de Paris)"/>
+ </node>
+ <node id="263499468" lat="48.8481026" lon="2.3277965">
+ <tag k="name" v="Rennes"/>
+ <tag k="name:ru" v="Рен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1661"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Rennes_(métro_de_Paris)"/>
+ </node>
+ <node id="263499471" lat="48.8452766" lon="2.3286613">
+ <tag k="name" v="Notre-Dame des Champs"/>
+ <tag k="name:ru" v="Нотр-Дам-де-Шан"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1768"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Notre-Dame-des-Champs_(métro_de_Paris)"/>
+ </node>
+ <node id="263917856" lat="48.8659626" lon="2.3230242">
+ <tag k="name" v="Concorde"/>
+ <tag k="name:ru" v="Конкорд"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1885"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Concorde (métro de Paris)"/>
+ </node>
+ <node id="264117312" lat="48.8700644" lon="2.3251637">
+ <tag k="name" v="Madeleine"/>
+ <tag k="name:ru" v="Мадлен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1813"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia" v="fr:Madeleine (métro de Paris)"/>
+ </node>
+ <node id="264469160" lat="48.8446967" lon="2.2937668">
+ <tag k="name" v="Commerce"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1705;1973"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Commerce_(métro_de_Paris)"/>
+ </node>
+ <node id="264469541" lat="48.8546428" lon="2.3061015">
+ <tag k="name" v="École Militaire"/>
+ <tag k="name:fr" v="École Militaire"/>
+ <tag k="name:ru" v="Эколь Милитер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1909;1007"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:École Militaire (métro de Paris)"/>
+ </node>
+ <node id="264473011" lat="48.8575837" lon="2.3102891">
+ <tag k="name" v="La Tour Maubourg"/>
+ <tag k="name:ru" v="Лятур-Мобур"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1008;54166"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:La Tour-Maubourg (métro de Paris)"/>
+ </node>
+ <node id="264473695" lat="48.8611770" lon="2.3148333">
+ <tag k="name" v="Invalides"/>
+ <tag k="name:ru" v="Энвалид"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1857"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Invalides (métro de Paris)"/>
+ </node>
+ <node id="264476971" lat="48.8632968" lon="2.3668726">
+ <tag k="name" v="Filles du Calvaire"/>
+ <tag k="name:ru" v="Фий-дю-Кальвер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1919"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264479724" lat="48.8608519" lon="2.3671644">
+ <tag k="name" v="Saint-Sébastien - Froissart"/>
+ <tag k="name:ru" v="Сен-Себастьен — Фруассар"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1699"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264479775" lat="48.8575371" lon="2.3679970">
+ <tag k="name" v="Chemin Vert"/>
+ <tag k="name:ru" v="Шемен-Вер"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1958"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264480619" lat="48.8531361" lon="2.3686313">
+ <tag k="name" v="Bastille"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264480784" lat="48.8511945" lon="2.3759944">
+ <tag k="name" v="Ledru-Rollin"/>
+ <tag k="name:ru" v="Ледрю-Роллен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1798"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264481019" lat="48.8500259" lon="2.3842705">
+ <tag k="name" v="Faidherbe — Chaligny"/>
+ <tag k="name:ru" v="Федерб — Шалиньи"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1917"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264481854" lat="48.8444003" lon="2.3899525">
+ <tag k="name" v="Montgallet"/>
+ <tag k="name:ru" v="Монгале"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1750"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264482226" lat="48.8371074" lon="2.4024837">
+ <tag k="name" v="Michel Bizot"/>
+ <tag k="name:ru" v="Мишель Бизо"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1835"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264482296" lat="48.8266498" lon="2.4057278">
+ <tag k="name" v="Liberté"/>
+ <tag k="name:ru" v="Либерте"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1803"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264482297" lat="48.8354584" lon="2.4063451">
+ <tag k="name" v="Porte Dorée"/>
+ <tag k="name:ru" v="Порт-Доре"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1715"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264490283" lat="48.8448796" lon="2.4014945">
+ <tag k="name" v="Picpus"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1785"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264491191" lat="48.8333982" lon="2.3858500">
+ <tag k="name" v="Cour Saint-Émilion"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="50055"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Cour Saint-Émilion (métro de Paris)"/>
+ </node>
+ <node id="264491192" lat="48.8298519" lon="2.3756248">
+ <tag k="name" v="Bibliothèque François Mitterrand"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="51020"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Bibliothèque François-Mitterrand (métro de Paris)"/>
+ </node>
+ <node id="264491193" lat="48.8269184" lon="2.3662163">
+ <tag k="name" v="Olympiades"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="171507"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Olympiades (métro de Paris)"/>
+ </node>
+ <node id="264491320" lat="48.8322556" lon="2.3989811">
+ <tag k="name" v="Porte de Charenton"/>
+ <tag k="name:ru" v="Порт-де-Шарантон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1723"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264494507" lat="48.8656737" lon="2.3344599">
+ <tag k="name" v="Pyramides"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1738;50047"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264495077" lat="48.8763705" lon="2.3326310">
+ <tag k="name" v="Trinité d'Estienne d'Orves"/>
+ <tag k="name:ru" v="Трините — д’Эстьен д’Орв"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1638;3108"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Trinité - d'Estienne d'Orves (métro de Paris)"/>
+ </node>
+ <node id="264495078" lat="48.8760654" lon="2.3385532">
+ <tag k="name" v="Notre-Dame de Lorette"/>
+ <tag k="name:ru" v="Нотр-Дам-де-Лорет"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1767;3109"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Notre-Dame-de-Lorette (métro de Paris)"/>
+ </node>
+ <node id="264495553" lat="48.8557241" lon="2.3256659">
+ <tag k="name" v="Rue du Bac"/>
+ <tag k="name:ru" v="Рю-дю-Бак"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1674"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Rue du Bac (métro de Paris)"/>
+ </node>
+ <node id="264504832" lat="48.8784508" lon="2.3374732">
+ <tag k="name" v="Saint-Georges"/>
+ <tag k="name:ru" v="Сен-Жорж"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="3110;1686"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Saint-Georges (métro de Paris)"/>
+ </node>
+ <node id="264505115" lat="48.8844760" lon="2.3384377">
+ <tag k="name" v="Abbesses"/>
+ <tag k="name:ru" v="Аббес"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1975"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Abbesses (métro de Paris)"/>
+ </node>
+ <node id="264505153" lat="48.8898183" lon="2.3386296">
+ <tag k="name" v="Lamarck-Caulaincourt"/>
+ <tag k="name:ru" v="Ламарк — Коленкур"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1879"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Lamarck - Caulaincourt (métro de Paris)"/>
+ </node>
+ <node id="264505450" lat="48.8924166" lon="2.3443983">
+ <tag k="name" v="Jules Joffrin"/>
+ <tag k="name:ru" v="Жюль Жоффрен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1865"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Jules Joffrin (métro de Paris)"/>
+ </node>
+ <node id="264505930" lat="48.8977084" lon="2.3592969">
+ <tag k="name" v="Porte de la Chapelle"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1734"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Porte de la Chapelle (métro de Paris)"/>
+ </node>
+ <node id="264505993" lat="48.8937935" lon="2.3477372">
+ <tag k="name" v="Simplon"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1621"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Simplon (métro de Paris)"/>
+ </node>
+ <node id="264506165" lat="48.8973767" lon="2.3447674">
+ <tag k="name" v="Porte de Clignancourt"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1726"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte de Clignancourt (métro de Paris)"/>
+ </node>
+ <node id="264507100" lat="48.8873214" lon="2.3497042">
+ <tag k="name" v="Château Rouge"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1960"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Château Rouge (métro de Paris)"/>
+ </node>
+ <node id="264508125" lat="48.8800091" lon="2.3548990">
+ <tag k="name" v="Gare du Nord"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1842"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:/Gare du Nord (métro de Paris)"/>
+ </node>
+ <node id="264508548" lat="48.8760380" lon="2.3580551">
+ <tag k="alt_name" v="Gare de l'Est (Verdun)"/>
+ <tag k="name" v="Gare de L'Est"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1841"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Gare de l'Est (métro de Paris)"/>
+ </node>
+ <node id="264509793" lat="48.8638408" lon="2.3487041">
+ <tag k="name" v="Étienne Marcel"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1914"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Étienne Marcel (métro de Paris)"/>
+ </node>
+ <node id="264512252" lat="48.8723097" lon="2.3558518">
+ <tag k="heritage" v="3"/>
+ <tag k="heritage:operator" v="mhs"/>
+ <tag k="mhs:inscription_date" v="1978"/>
+ <tag k="name" v="Château d'Eau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1961"/>
+ <tag k="ref:mhs" v="PA00086508"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Château d'Eau (métro de Paris)"/>
+ </node>
+ <node id="264513655" lat="48.8627762" lon="2.3461709">
+ <tag k="name" v="Les Halles"/>
+ <tag k="operator" v="Metro-RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1801"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Les Halles (métro de Paris)"/>
+ </node>
+ <node id="264514896" lat="48.8551566" lon="2.3471977">
+ <tag k="name" v="Cité"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1969"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Cité (métro de Paris)"/>
+ </node>
+ <node id="264515098" lat="48.8535657" lon="2.3443622">
+ <tag k="name" v="Saint-Michel"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1694"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Saint-Michel_(métro_de_Paris)"/>
+ </node>
+ <node id="264519782" lat="48.8536264" lon="2.3333280">
+ <tag k="name" v="Saint-Germain des Prés"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1687"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Saint-Germain-des-Prés (métro de Paris)"/>
+ </node>
+ <node id="264520061" lat="48.8470711" lon="2.3270822">
+ <tag k="name" v="Saint-Placide"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1697"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Saint-Placide_(métro_de_Paris)"/>
+ </node>
+ <node id="264526095" lat="48.8421852" lon="2.3289966">
+ <tag k="name" v="Vavin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1646"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Vavin_(métro_de_Paris)"/>
+ </node>
+ <node id="264534423" lat="48.8466102" lon="2.2859257">
+ <tag k="name" v="Charles Michels"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1952"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264534424" lat="48.8462613" lon="2.2790398">
+ <tag k="name" v="Javel - André Citroën"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1862"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264534683" lat="48.8473202" lon="2.2686743">
+ <tag k="name" v="Église d'Auteuil"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1911"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264535735" lat="48.8477655" lon="2.2583922">
+ <tag k="name" v="Porte d'Auteuil"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1717"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264537727" lat="48.8452670" lon="2.2672606">
+ <tag k="name" v="Chardon Lagache"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1950"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264538576" lat="48.8470891" lon="2.2728475">
+ <tag k="name" v="Mirabeau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1746"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264591604" lat="48.8700162" lon="2.3710617">
+ <tag k="alt_name" v="Goncourt (Hôpital Saint-Louis)"/>
+ <tag k="name" v="Goncourt"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1849"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264592424" lat="48.8612740" lon="2.3535761">
+ <tag k="name" v="Rambuteau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1745"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264690368" lat="48.8770405" lon="2.4064920">
+ <tag k="name" v="Porte des Lilas"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1736"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Porte des Lilas (métro de Paris)"/>
+ </node>
+ <node id="264690370" lat="48.8755258" lon="2.3990981">
+ <tag k="name" v="Télégraphe"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="55329"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264690371" lat="48.8766403" lon="2.3927856">
+ <tag k="name" v="Place des Fêtes"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1792"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264690372" lat="48.8738078" lon="2.3850847">
+ <tag k="name" v="Pyrénées"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="55330"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264692522" lat="48.8751161" lon="2.3892322">
+ <tag k="name" v="Jourdain"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1864"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264704365" lat="48.8385876" lon="2.3222085">
+ <tag k="name" v="Gaîté"/>
+ <tag k="name:ru" v="Гаите"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1927"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Gaîté_(métro_de_Paris)"/>
+ </node>
+ <node id="264712432" lat="48.8317799" lon="2.3140252">
+ <tag k="name" v="Plaisance"/>
+ <tag k="name:ru" v="Плезанс"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1705"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Plaisance_(métro_de_Paris)"/>
+ </node>
+ <node id="264712433" lat="48.8339551" lon="2.3180764">
+ <tag k="name" v="Pernéty"/>
+ <tag k="name:ru" v="Пернети"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1783"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Pernety_(métro_de_Paris)"/>
+ </node>
+ <node id="264713507" lat="48.8276757" lon="2.3053401">
+ <tag k="name" v="Porte de Vanves"/>
+ <tag k="name:ru" v="Порт-де-Ванв"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1731"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Porte_de_Vanves_(métro_de_Paris)"/>
+ <tag k="wikipedia:ru" v="Порт-де-Ванв_(станция_метро)"/>
+ </node>
+ <node id="264717964" lat="48.8220780" lon="2.2979835">
+ <tag k="name" v="Malakoff - Plateau de Vanves"/>
+ <tag k="name:ru" v="Малакофф — Плато-де-Ванв"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="22442"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Malakoff_-_Plateau_de_Vanves_(métro_de_Paris)"/>
+ <tag k="wikipedia:ru" v="Малакофф_—_Плато-де-Ванв_(станция_метро)"/>
+ </node>
+ <node id="264769296" lat="48.8566177" lon="2.3705298">
+ <tag k="name" v="Bréguet-Sabin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1933"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264769297" lat="48.8602039" lon="2.3721323">
+ <tag k="name" v="Richard Lenoir"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1664"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264772256" lat="48.8850187" lon="2.3795672">
+ <tag k="name" v="Laumière"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1882"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264772371" lat="48.8869632" lon="2.3867135">
+ <tag k="name" v="Ourcq"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1773"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264772861" lat="48.8885434" lon="2.3927045">
+ <tag k="name" v="Porte de Pantin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1728"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264772862" lat="48.8911980" lon="2.4025577">
+ <tag k="name" v="Hoche"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1853"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264775552" lat="48.8814188" lon="2.3654808">
+ <tag k="name" v="Louis Blanc"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1806"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264775805" lat="48.8772835" lon="2.3492720">
+ <tag k="name" v="Poissonnière"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1706"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264776028" lat="48.8885069" lon="2.3740693">
+ <tag k="name" v="Riquet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1666"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264776029" lat="48.8904888" lon="2.3767001">
+ <tag k="name" v="Crimée"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1894"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264776910" lat="48.8945067" lon="2.3821116">
+ <tag k="name" v="Corentin Cariou"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1888"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264778142" lat="48.8974296" lon="2.3854377">
+ <tag k="name" v="Porte de la Villette"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1735"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264780946" lat="48.8749537" lon="2.3402103">
+ <tag k="name" v="Le Peletier"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1795"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264780947" lat="48.8759682" lon="2.3441565">
+ <tag k="name" v="Cadet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1939"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264784170" lat="48.8585901" lon="2.3424101">
+ <tag k="name" v="Pont Neuf"/>
+ <tag k="name:ru" v="Новый мост"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1712"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="264785951" lat="48.8512630" lon="2.3622044">
+ <tag k="name" v="Sully — Morland"/>
+ <tag k="name:ru" v="Сюлли — Морлан"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1630"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264785952" lat="48.8535245" lon="2.3570872">
+ <tag k="alt_name" v="Pont Marie (Cité des Arts)"/>
+ <tag k="name" v="Pont Marie"/>
+ <tag k="name:ru" v="Пон-Мари"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1711"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264786014" lat="48.8429311" lon="2.3521239">
+ <tag k="alt_name" v="Place Monge (Jardin des Plantes)"/>
+ <tag k="name" v="Place Monge"/>
+ <tag k="name:ru" v="Пляс-Монж"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1788"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264789025" lat="48.8406731" lon="2.3517801">
+ <tag k="name" v="Censier — Daubenton"/>
+ <tag k="name:ru" v="Сансье — Добантон"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1944"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264790337" lat="48.8356703" lon="2.3525980">
+ <tag k="name" v="Les Gobelins"/>
+ <tag k="name:ru" v="Гобелен"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1800"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Les Gobelins (métro de Paris)"/>
+ </node>
+ <node id="264794353" lat="48.8800010" lon="2.3989340">
+ <tag k="name" v="Pré Saint-Gervais"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1737"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264794354" lat="48.8819653" lon="2.3935696">
+ <tag k="name" v="Danube"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1900"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264794788" lat="48.8796007" lon="2.3888377">
+ <tag k="name" v="Botzaris"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2016"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264795933" lat="48.8797147" lon="2.4162805">
+ <tag k="name" v="Mairie des Lilas"/>
+ <tag k="public_transport" v="stop_position"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1819"/>
+ <tag k="subway" v="true"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264796181" lat="48.8715165" lon="2.4040581">
+ <tag k="name" v="Saint-Fargeau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1684"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="264796182" lat="48.8680444" lon="2.4014574">
+ <tag k="name" v="Pelleport"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1782"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="265055434" lat="48.8382823" lon="2.3608293">
+ <tag k="name" v="Saint-Marcel"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1691"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="265055750" lat="48.8356584" lon="2.3588519">
+ <tag k="name" v="Campo-Formio"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1941"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="265060052" lat="48.8927063" lon="2.3274728">
+ <tag k="name" v="Guy Môquet"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1851"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Guy Môquet (métro de Paris)"/>
+ </node>
+ <node id="265060832" lat="48.8973729" lon="2.3290349">
+ <tag k="name" v="Porte de Saint-Ouen"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1730"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Porte de Saint-Ouen (métro de Paris)"/>
+ </node>
+ <node id="267619085" lat="48.8565598" lon="2.2751570">
+ <tag k="name" v="Boulainvilliers"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5586"/>
+ <tag k="type:RATP" v="rer"/>
+ </node>
+ <node id="267621966" lat="48.8643145" lon="2.2721396">
+ <tag k="name" v="Avenue Henri-Martin;Avenue Henri Martin"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5585"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare de l'avenue Henri Martin"/>
+ </node>
+ <node id="267621967" lat="48.8708557" lon="2.2755195">
+ <tag k="name" v="Avenue Foch"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5584"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare de l'avenue Foch"/>
+ </node>
+ <node id="268467197" lat="48.8261434" lon="2.3573719">
+ <tag k="name" v="Tolbiac"/>
+ <tag k="name:ru" v="Толбиак"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1636"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Tolbiac (métro de Paris)"/>
+ </node>
+ <node id="268467526" lat="48.8225268" lon="2.3585049">
+ <tag k="name" v="Maison Blanche"/>
+ <tag k="name:ru" v="Мезон-Бланш"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1820"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Maison Blanche (métro de Paris)"/>
+ </node>
+ <node id="268467559" lat="48.8191302" lon="2.3595818">
+ <tag k="name" v="Porte d'Italie"/>
+ <tag k="name:ru" v="Порт-д’Итали"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1718"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Porte d'Italie (métro de Paris)"/>
+ </node>
+ <node id="270191328" lat="48.8625471" lon="2.3010852">
+ <tag k="name" v="Pont de l'Alma"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5601"/>
+ <tag k="type:RATP" v="rer"/>
+ </node>
+ <node id="270191607" lat="48.8605670" lon="2.3260922">
+ <tag k="name" v="Musée d'Orsay"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5603"/>
+ <tag k="type:RATP" v="rer"/>
+ </node>
+ <node id="270191809" lat="48.8534338" lon="2.3455510">
+ <tag k="name" v="Saint-Michel Notre-Dame"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B"/>
+ <tag k="ref:FR:RATP" v="5604"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="9903146"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="270244767" lat="48.8535052" lon="2.2797246">
+ <tag k="name" v="Avenue du Président Kennedy"/>
+ <tag k="old_name" v="Kennedy Radio-France"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5587"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wikipedia" v="fr:Gare de l'avenue du Président Kennedy"/>
+ </node>
+ <node id="282635141" lat="48.8678333" lon="2.3137075">
+ <tag k="name" v="Champs-Elysées-Clémenceau"/>
+ <tag k="name:ru" v="Шанз-Элизе — Клемансо"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1949"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Champs-Élysées - Clemenceau (métro de Paris)"/>
+ </node>
+ <node id="295442702" lat="48.8983316" lon="2.2485284">
+ <tag k="name" v="Courbevoie"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Microsoft Bing satellite 2011"/>
+ </node>
+ <node id="300876896" lat="48.8150770" lon="2.4217740">
+ <tag k="name" v="École Vétérinaire de Maisons-Alfort"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="23674"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="300877457" lat="48.8214689" lon="2.4136458">
+ <tag k="name" v="Charenton — Écoles"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1951"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Charenton - Écoles (métro de Paris)"/>
+ </node>
+ <node id="323860043" lat="48.8386828" lon="2.3190662"/>
+ <node id="323860046" lat="48.8387732" lon="2.3191521"/>
+ <node id="323860047" lat="48.8396658" lon="2.3173840"/>
+ <node id="323888907" lat="48.8856914" lon="2.3424389"/>
+ <node id="323888910" lat="48.8855854" lon="2.3424513"/>
+ <node id="323888911" lat="48.8855941" lon="2.3426218"/>
+ <node id="323888913" lat="48.8857001" lon="2.3426094"/>
+ <node id="323889636" lat="48.8847528" lon="2.3425448"/>
+ <node id="323889640" lat="48.8846117" lon="2.3425595">
+ <tag k="source" v="mise à jour :2008;cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre"/>
+ </node>
+ <node id="323889643" lat="48.8846196" lon="2.3427353">
+ <tag k="source" v="mise à jour :2008;cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre"/>
+ </node>
+ <node id="323889646" lat="48.8847607" lon="2.3427205"/>
+ <node id="324352448" lat="48.8514725" lon="2.3311829">
+ <tag k="name" v="Saint-Sulpice"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1698"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Saint-Sulpice (métro de Paris)"/>
+ </node>
+ <node id="324363999" lat="48.8439710" lon="2.3243262">
+ <tag k="name" v="Montparnasse-Bienvenüe"/>
+ <tag k="name:ru" v="Монпарнас — Бьенвеню"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="0408"/>
+ <tag k="wikipedia:fr" v="Montparnasse_-_Bienvenüe_(métro_de_Paris)"/>
+ </node>
+ <node id="326309672" lat="48.8789208" lon="2.3623079">
+ <tag k="name" v="Château Landon"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1963"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Château-Landon (métro de Paris)"/>
+ </node>
+ <node id="327432580" lat="48.8399322" lon="2.3370615">
+ <tag k="name" v="Port Royal"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B"/>
+ <tag k="ref:FR:RATP" v="1713"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775862"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="327432589" lat="48.8466573" lon="2.3406504">
+ <tag k="name" v="Luxembourg"/>
+ <tag k="operator" v="RATP"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B"/>
+ <tag k="ref:FR:RATP" v="1811"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775861"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="327613695" lat="48.8808040" lon="2.3573389">
+ <tag k="alt_name" v="Paris Nord RER"/>
+ <tag k="layer" v="-2"/>
+ <tag k="name" v="Gare du Nord"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER B,D"/>
+ <tag k="ref:FR:RATP" v="1843"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8727102"/>
+ </node>
+ <node id="328911012" lat="48.8623241" lon="2.3466372">
+ <tag k="name" v="Châtelet-les-Halles"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1967"/>
+ <tag k="start_date" v="1977-12-09"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775860"/>
+ <tag k="wheelchair" v="limited"/>
+ <tag k="wikipedia" v="fr:Gare de Châtelet - Les Halles"/>
+ </node>
+ <node id="329096792" lat="48.8844216" lon="2.3602786">
+ <tag k="name" v="La Chapelle"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1868"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="329974472" lat="48.8799750" lon="2.3580882">
+ <tag k="layer" v="-3"/>
+ <tag k="name" v="Magenta"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER E"/>
+ <tag k="ref:FR:RATP" v="51923"/>
+ <tag k="type:RATP" v="rer"/>
+ </node>
+ <node id="329974475" lat="48.8747218" lon="2.3271274">
+ <tag k="layer" v="-3"/>
+ <tag k="name" v="Haussmann - Saint-Lazare"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER E"/>
+ <tag k="ref:FR:RATP" v="51922"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="330020300" lat="48.8979490" lon="2.4004574">
+ <tag k="name" v="Pantin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="RER E"/>
+ <tag k="ref:FR:RATP" v="51924"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="330026020" lat="48.8932382" lon="2.4133209">
+ <tag k="name" v="Église de Pantin"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1912"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="330026206" lat="48.8956372" lon="2.4252683">
+ <tag k="name" v="Bobigny-Pantin Raymond Queneau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2011"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="330426779" lat="48.8463352" lon="2.2769926">
+ <tag k="name" v="Javel"/>
+ <tag k="operator" v="RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5599"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="331514770" lat="48.8795976" lon="2.3270787">
+ <tag k="name" v="Liège"/>
+ <tag k="name:ru" v="Льеж"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1804"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Liège (métro de Paris)"/>
+ </node>
+ <node id="338930214" lat="48.8538982" lon="2.2893959">
+ <tag k="alt_name" v="Bir-Hakeim (Grenelle)"/>
+ <tag k="name" v="Bir-Hakeim"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2007"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Bir-Hakeim (métro de Paris)"/>
+ </node>
+ <node id="354969611" lat="48.8731477" lon="2.3295277">
+ <tag k="name" v="Auber"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1990"/>
+ <tag k="start_date" v="1971-11-23"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775859"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare Auber"/>
+ </node>
+ <node id="358372136" lat="48.8412636" lon="2.3665838">
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="name" v="Gare d'Austerlitz"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="365930803" lat="48.8281965" lon="2.3784744">
+ <tag k="name" v="Bibliothèque François Mitterrand"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="5606"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="wheelchair" v="limited"/>
+ </node>
+ <node id="472985883" lat="48.8201086" lon="2.3647992">
+ <tag k="name" v="Porte de Choisy"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1724"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte de Choisy (métro de Paris)"/>
+ </node>
+ <node id="472985884" lat="48.8216697" lon="2.3693224">
+ <tag k="name" v="Porte d'Ivry"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1719"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Porte d'Ivry (métro de Paris)"/>
+ </node>
+ <node id="472985885" lat="48.8159011" lon="2.3773455">
+ <tag k="name" v="Pierre et Marie Curie"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1786"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="473070143" lat="48.8491398" lon="2.3218984">
+ <tag k="name" v="Vaneau"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1643"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="573456319" lat="48.8847292" lon="2.3425472">
+ <tag k="source" v="mise à jour :2008;cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre"/>
+ </node>
+ <node id="615107647" lat="48.8853096" lon="2.2980977"/>
+ <node id="615107648" lat="48.8853170" lon="2.2979765"/>
+ <node id="615107652" lat="48.8853938" lon="2.2978811"/>
+ <node id="615107653" lat="48.8854741" lon="2.2978931"/>
+ <node id="634996117" lat="48.8756733" lon="2.3273522">
+ <tag k="name" v="Saint-Lazare"/>
+ <tag k="name:ru" v="Сен-Лазар"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Saint-Lazare (métro de Paris)"/>
+ </node>
+ <node id="635005158" lat="48.8755630" lon="2.3241726">
+ <tag k="name" v="Saint-Lazare"/>
+ <tag k="name:ru" v="Сен-Лазар"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Saint-Lazare (métro de Paris)"/>
+ </node>
+ <node id="765950957" lat="48.8405414" lon="2.3194970">
+ <tag k="name" v="Gare Montparnasse 1 - Francilien"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="795810507" lat="48.8623245" lon="2.3145806"/>
+ <node id="795810575" lat="48.8621923" lon="2.3145237"/>
+ <node id="795810607" lat="48.8621783" lon="2.3145424"/>
+ <node id="795810799" lat="48.8624244" lon="2.3145928"/>
+ <node id="795810850" lat="48.8623245" lon="2.3145722"/>
+ <node id="795810897" lat="48.8622217" lon="2.3142745"/>
+ <node id="795810911" lat="48.8622125" lon="2.3145248"/>
+ <node id="795811028" lat="48.8621756" lon="2.3145638"/>
+ <node id="795811074" lat="48.8621756" lon="2.3145522"/>
+ <node id="795811176" lat="48.8624929" lon="2.3146015"/>
+ <node id="795811479" lat="48.8624249" lon="2.3145865"/>
+ <node id="795811681" lat="48.8625077" lon="2.3143016"/>
+ <node id="795811817" lat="48.8621840" lon="2.3145321"/>
+ <node id="795811920" lat="48.8624965" lon="2.3145284"/>
+ <node id="838533003" lat="48.8780508" lon="2.2982339">
+ <tag k="name" v="Ternes"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1635"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia" v="fr:Ternes (métro de Paris)"/>
+ </node>
+ <node id="942695829" lat="48.8383976" lon="2.3159455">
+ <tag k="name" v="Gare Montparnasse 3 - Vaugirard"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="980292663" lat="48.8855009" lon="2.2979432"/>
+ <node id="980378668" lat="48.8853364" lon="2.2981477"/>
+ <node id="1191666961" lat="48.8625067" lon="2.3143225"/>
+ <node id="1308998006" lat="48.8435226" lon="2.3744523">
+ <tag k="name" v="Gare de Lyon RER D "/>
+ <tag k="operator" v="SNCF "/>
+ <tag k="railway" v="station"/>
+ <tag k="start_date" v="1995-09-24"/>
+ <tag k="uic_ref" v="8768603"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1309031698" lat="48.8437844" lon="2.3740909">
+ <tag k="name" v="Gare de Lyon RER A"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1840;20952"/>
+ <tag k="start_date" v="1977-12-09"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775858"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Paris-Gare_de_Lyon#RER"/>
+ </node>
+ <node id="1333685615" lat="48.8153790" lon="2.3408702">
+ <tag k="name" v="Gentilly"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1845"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775865"/>
+ </node>
+ <node id="1367616097" lat="48.8199080" lon="2.2591900"/>
+ <node id="1367616107" lat="48.8199570" lon="2.2592890"/>
+ <node id="1367616112" lat="48.8199900" lon="2.2592530"/>
+ <node id="1367616113" lat="48.8199940" lon="2.2592610"/>
+ <node id="1367616120" lat="48.8200240" lon="2.2590590"/>
+ <node id="1367616135" lat="48.8200480" lon="2.2591120"/>
+ <node id="1367616140" lat="48.8200760" lon="2.2591710"/>
+ <node id="1439673303" lat="48.8199426" lon="2.2591509"/>
+ <node id="1472201160" lat="48.8699114" lon="2.3072110">
+ <tag k="name" v="Franklin D. Roosevelt"/>
+ <tag k="name:ru" v="Франклин Д. Рузвельт"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="survey"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Franklin D. Roosevelt (métro de Paris)"/>
+ </node>
+ <node id="1480535477" lat="48.8837592" lon="2.3495338">
+ <tag k="name" v="Barbès - Rochechouart"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1999"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Barbès - Rochechouart (métro de Paris)"/>
+ </node>
+ <node id="1481147746" lat="48.8915769" lon="2.3496679">
+ <tag k="name" v="Marcadet - Poissoniers"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1828"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Marcadet - Poissonniers (métro de Paris)"/>
+ </node>
+ <node id="1489806669" lat="48.8663302" lon="2.3215942">
+ <tag k="name" v="Concorde"/>
+ <tag k="name:ru" v="Конкорд"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Concorde (métro de Paris)"/>
+ </node>
+ <node id="1489806675" lat="48.8603937" lon="2.3146892">
+ <tag k="name" v="Invalides"/>
+ <tag k="name:ru" v="Энвалид"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Invalides (métro de Paris)"/>
+ </node>
+ <node id="1507214977" lat="48.8846857" lon="2.3426380">
+ <tag k="alt_name" v="Funiculaire Gare basse"/>
+ <tag k="name" v="Funiculaire Montmartre Station Inférieure"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2021"/>
+ <tag k="source" v="Bing"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="1507214979" lat="48.8856445" lon="2.3425294">
+ <tag k="alt_name" v="Funiculaire Gare haute"/>
+ <tag k="name" v="Funiculaire Montmartre Station Supérieure"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="2022"/>
+ <tag k="source" v="Bing"/>
+ <tag k="type:RATP" v="metro"/>
+ </node>
+ <node id="1522343248" lat="48.8769193" lon="2.3592679">
+ <tag k="alt_name" v="Paris-Est"/>
+ <tag k="name" v="Gare de l'Est"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="uic_ref" v="87113001"/>
+ <tag k="website" v="http://www.gares-en-mouvement.com/fr/frpst/accueil/"/>
+ <tag k="wikipedia" v="fr:Gare de Paris-Est"/>
+ </node>
+ <node id="1522343254" lat="48.8807436" lon="2.3551336">
+ <tag k="name" v="Gare du Nord"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare de Paris-Nord"/>
+ </node>
+ <node id="1543414761" lat="48.8243535" lon="2.3665277">
+ <tag k="disused" v="yes"/>
+ <tag k="name" v="Paris-Gobelins"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Gare_de_Paris-Gobelins"/>
+ </node>
+ <node id="1543466659" lat="48.8246289" lon="2.3255303">
+ <tag k="alt_name" v="Petit-Montrouge"/>
+ <tag k="disused" v="yes"/>
+ <tag k="name" v="Montrouge-Ceinture"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia:fr" v="Gare_de_Montrouge-Ceinture"/>
+ </node>
+ <node id="1584432760" lat="48.8537409" lon="2.3693210">
+ <tag k="name" v="Bastille"/>
+ <tag k="name:ru" v="Бастий"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ </node>
+ <node id="1656938775" lat="48.8434791" lon="2.3741232">
+ <tag k="name" v="Gare de Lyon (métro 14)"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1659843199" lat="48.8456163" lon="2.3095848">
+ <tag k="name" v="Sèvres-Lecourbe"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1633"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2012"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wikipedia:fr" v="Sèvres_-_Lecourbe_(métro_de_Paris)"/>
+ </node>
+ <node id="1731763792" lat="48.8740658" lon="2.2951493">
+ <tag k="name" v="Charles de Gaulle — Étoile (RER)"/>
+ <tag k="name:ru" v="Шарль де Голль — Этуаль"/>
+ <tag k="note" v="Limited to RER"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1954"/>
+ <tag k="start_date" v="1970-01-19"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775800"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare Charles-de-Gaulle - Étoile"/>
+ </node>
+ <node id="1731763794" lat="48.8484204" lon="2.3953679">
+ <tag k="alt_name" v="Nation"/>
+ <tag k="name" v="Nation (RER)"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1759"/>
+ <tag k="start_date" v="1969-12-14"/>
+ <tag k="type:RATP" v="rer"/>
+ <tag k="uic_ref" v="8775810"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="fr:Gare de Nation"/>
+ </node>
+ <node id="1731763796" lat="48.8487580" lon="2.3951731">
+ <tag k="alt_name" v="Nation"/>
+ <tag k="name" v="Nation (ligne 9)"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia" v="fr:Nation (métro de Paris)"/>
+ </node>
+ <node id="1805529567" lat="48.8420310" lon="2.3209504">
+ <tag k="name" v="Montparnasse-Bienvenüe"/>
+ <tag k="name:ru" v="Монпарнас — Бьенвеню"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="1751"/>
+ <tag k="type:RATP" v="metro"/>
+ <tag k="wheelchair" v="no"/>
+ <tag k="wikipedia:fr" v="Montparnasse_-_Bienvenüe_(métro_de_Paris)"/>
+ <tag k="wikipedia:ru" v="Монпарнас_—_Бьенвеню_(станция_метро)"/>
+ </node>
+ <node id="1823210835" lat="48.8391417" lon="2.3827712">
+ <tag k="name" v="Gare de Bercy"/>
+ <tag k="operator" v="SNCF"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="BERCY"/>
+ <tag k="source" v="http://www.gares-en-mouvement.com/fr/frpbe/votre-gare/"/>
+ </node>
+ <node id="1851629060" lat="48.8768396" lon="2.3578563">
+ <tag k="FIXME" v="RER E ?"/>
+ <tag k="name" v="Gare de l'Est"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref:FR:RATP" v="414501"/>
+ <tag k="type:RATP" v="rer"/>
+ </node>
+ <node id="1862264925" lat="48.8793703" lon="2.2868503">
+ <tag k="name" v="RER C Porte Maillot - Palais des Congrès"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <way id="29402542">
+ <nd ref="323860043"/>
+ <nd ref="323860046"/>
+ <nd ref="323860047"/>
+ <nd ref="191754163"/>
+ <nd ref="323860043"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Gare Montparnasse 2 Pasteur"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="29403454">
+ <nd ref="323888907"/>
+ <nd ref="323888910"/>
+ <nd ref="323888911"/>
+ <nd ref="323888913"/>
+ <nd ref="323888907"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="Funiculaire Montmartre Station Supérieure"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing"/>
+ </way>
+ <way id="29403485">
+ <nd ref="323889636"/>
+ <nd ref="573456319"/>
+ <nd ref="323889640"/>
+ <nd ref="323889643"/>
+ <nd ref="323889646"/>
+ <nd ref="323889636"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="Funiculaire Montmartre Station Inférieure"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing"/>
+ </way>
+ <way id="48432724">
+ <nd ref="980378668"/>
+ <nd ref="615107647"/>
+ <nd ref="615107648"/>
+ <nd ref="615107652"/>
+ <nd ref="615107653"/>
+ <nd ref="980292663"/>
+ <nd ref="980378668"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Pereire - Levallois"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </way>
+ <way id="64959896">
+ <nd ref="795811479"/>
+ <nd ref="795810799"/>
+ <nd ref="795811176"/>
+ <nd ref="795811920"/>
+ <nd ref="1191666961"/>
+ <nd ref="795811681"/>
+ <nd ref="795810897"/>
+ <nd ref="795810911"/>
+ <nd ref="795810575"/>
+ <nd ref="795811817"/>
+ <nd ref="795810607"/>
+ <nd ref="795811074"/>
+ <nd ref="795811028"/>
+ <nd ref="795810507"/>
+ <nd ref="795810850"/>
+ <nd ref="795811479"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Gare des Invalides"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2010"/>
+ </way>
+ <way id="122364943">
+ <nd ref="1367616135"/>
+ <nd ref="1367616120"/>
+ <nd ref="1439673303"/>
+ <nd ref="1367616097"/>
+ <nd ref="1367616107"/>
+ <nd ref="1367616112"/>
+ <nd ref="1367616113"/>
+ <nd ref="1367616140"/>
+ <nd ref="1367616135"/>
+ <tag k="building" v="yes"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="cadastre-dgi-fr source : Direction Générale des Impôts - Cadastre. Mise à jour : 2011"/>
+ </way>
+ <relation id="1266299">
+ <member type="node" ref="983537977" role=""/>
+ <member type="node" ref="983538057" role=""/>
+ <member type="node" ref="983538039" role=""/>
+ <member type="way" ref="84669089" role=""/>
+ <member type="node" ref="983538018" role=""/>
+ <member type="way" ref="84669081" role=""/>
+ <member type="node" ref="983538066" role=""/>
+ <member type="node" ref="983537932" role=""/>
+ <member type="node" ref="983537922" role=""/>
+ <member type="way" ref="84669083" role=""/>
+ <member type="way" ref="84669094" role=""/>
+ <member type="way" ref="84669060" role=""/>
+ <member type="way" ref="84669085" role=""/>
+ <member type="node" ref="983538065" role=""/>
+ <member type="node" ref="983537951" role=""/>
+ <member type="way" ref="84669096" role=""/>
+ <member type="way" ref="84669079" role=""/>
+ <member type="node" ref="983538015" role=""/>
+ <member type="node" ref="983538050" role=""/>
+ <member type="way" ref="84669068" role=""/>
+ <member type="way" ref="84669067" role=""/>
+ <member type="node" ref="983538033" role=""/>
+ <member type="node" ref="983538061" role=""/>
+ <member type="way" ref="84669078" role=""/>
+ <member type="way" ref="84669072" role=""/>
+ <member type="node" ref="983538031" role=""/>
+ <member type="node" ref="983537939" role=""/>
+ <member type="way" ref="84669074" role=""/>
+ <member type="node" ref="983537945" role=""/>
+ <member type="node" ref="983537949" role=""/>
+ <member type="way" ref="84669058" role=""/>
+ <member type="way" ref="84669098" role=""/>
+ <member type="way" ref="84669062" role=""/>
+ <member type="node" ref="983537974" role=""/>
+ <member type="node" ref="983538037" role=""/>
+ <member type="way" ref="84669097" role=""/>
+ <member type="node" ref="983538002" role=""/>
+ <member type="node" ref="983537947" role=""/>
+ <member type="way" ref="84669092" role=""/>
+ <member type="node" ref="983537981" role=""/>
+ <member type="node" ref="983537971" role=""/>
+ <member type="way" ref="84669064" role=""/>
+ <member type="node" ref="983538008" role=""/>
+ <member type="way" ref="84669087" role=""/>
+ <member type="node" ref="983538029" role=""/>
+ <member type="node" ref="983538053" role=""/>
+ <member type="way" ref="84669071" role=""/>
+ <member type="way" ref="84669055" role=""/>
+ <member type="node" ref="243510334" role=""/>
+ <tag k="name" v="Bourse"/>
+ <tag k="public_transport" v="stop_area"/>
+ <tag k="railway" v="station"/>
+ <tag k="site" v="subway_station"/>
+ <tag k="station" v="underground"/>
+ <tag k="type" v="public_transport"/>
+ </relation>
+
+</osm>
diff --git a/test/poi-service/script/poi-client.mk b/test/poi-service/script/poi-client.mk
new file mode 100644
index 0000000..4295ead
--- /dev/null
+++ b/test/poi-service/script/poi-client.mk
@@ -0,0 +1,48 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file poi-client.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+POI_CLIENT_SRC_DIR=$(ROOT_DIR)/poi-client
+POI_CLIENT_DEPS=qt4-qmlviewer libqt4-dev libqt4-declarative
+POI_CLIENT_BIN_DIR=$(BIN_DIR)/poi-client-bin
+
+DEPS+=$(POI_CLIENT_DEPS)
+ALL+=poi-client
+CLEAN+=clean-poi-client
+
+help::
+ @echo "poi-client: Build the poi client"
+
+clean-poi-client::
+ rm -rf $(POI_CLIENT_BIN_DIR)
+ rm -rf poi-client
+
+poi-client: $(POI_CLIENT_BIN_DIR)/Makefile-poi-client
+ $(MAKE) -C $(POI_CLIENT_BIN_DIR)
+ mv $(POI_CLIENT_BIN_DIR)/poi-client $(EXE_DIR)
+
+$(POI_CLIENT_BIN_DIR)/Makefile-poi-client: $(POI_CLIENT_SRC_DIR)/poi-client.pro
+ @$(CHK_DIR_EXISTS) $(POI_CLIENT_BIN_DIR) || $(MKDIR) $(POI_CLIENT_BIN_DIR)
+ cd $(POI_CLIENT_BIN_DIR) && $(QMAKE) $(POI_CLIENT_SRC_DIR)/poi-client.pro
+
diff --git a/test/poi-service/script/poi-contentaccess-module.mk b/test/poi-service/script/poi-contentaccess-module.mk
new file mode 100644
index 0000000..b43b0e0
--- /dev/null
+++ b/test/poi-service/script/poi-contentaccess-module.mk
@@ -0,0 +1,48 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file poi-contentaccess-module.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+POI_CONTENTACCESS_MODULE_SRC_DIR=$(ROOT_DIR)/poi-contentaccess-module
+POI_CONTENTACCESS_MODULE_DEPS=qt4-qmlviewer libqt4-dev libqt4-declarative libsqlite3-dev sqlite3
+POI_CONTENTACCESS_MODULE_BIN_DIR=$(BIN_DIR)/poi-contentaccess-module-bin
+
+DEPS+=$(POI_CONTENTACCESS_MODULE_DEPS)
+ALL+=poi-contentaccess-module
+CLEAN+=clean-poi-contentaccess-module
+
+help::
+ @echo "poi-contentaccess-module: Build the poi content access module"
+
+clean-poi-contentaccess-module::
+ rm -rf $(POI_CONTENTACCESS_MODULE_BIN_DIR)
+ rm -rf poi-contentaccess-module
+
+poi-contentaccess-module: $(POI_CONTENTACCESS_MODULE_BIN_DIR)/Makefile-poi-contentaccess-module
+ $(MAKE) -C $(POI_CONTENTACCESS_MODULE_BIN_DIR)
+ mv $(POI_CONTENTACCESS_MODULE_BIN_DIR)/poi-contentaccess-module $(EXE_DIR)
+
+$(POI_CONTENTACCESS_MODULE_BIN_DIR)/Makefile-poi-contentaccess-module: $(POI_CONTENTACCESS_MODULE_SRC_DIR)/poi-contentaccess-module.pro
+ @$(CHK_DIR_EXISTS) $(POI_CONTENTACCESS_MODULE_BIN_DIR) || $(MKDIR) $(POI_CONTENTACCESS_MODULE_BIN_DIR)
+ cd $(POI_CONTENTACCESS_MODULE_BIN_DIR) && $(QMAKE) $(POI_CONTENTACCESS_MODULE_SRC_DIR)/poi-contentaccess-module.pro
+
diff --git a/test/poi-service/script/poi-database-empty b/test/poi-service/script/poi-database-empty
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/poi-service/script/poi-database-empty
diff --git a/test/poi-service/script/poi-supplier.mk b/test/poi-service/script/poi-supplier.mk
new file mode 100644
index 0000000..cabf5a3
--- /dev/null
+++ b/test/poi-service/script/poi-supplier.mk
@@ -0,0 +1,62 @@
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file poi-supplier.mk
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+POI_SUPPLIER_SRC_DIR=$(ROOT_DIR)/poi-supplier
+POI_SUPPLIER_COMMON_DIR=$(ROOT_DIR)/poi-common
+POI_SUPPLIER_BIN_DIR=$(BIN_DIR)/poi-supplier-bin
+POI_SUPPLIER_DEPS=libxml2-dev POI_SUPPLIER_LIBSqlite3-dev sqlite3
+POI_SUPPLIER_INCPATH=-I$(POI_SUPPLIER_COMMON_DIR) -I$(POI_SUPPLIER_SRC_DIR) -I/usr/include/libxml++-2.6 -I/usr/lib/libxml++-2.6/include -I/usr/include/libxml2 -I/usr/include/glibmm-2.4 -I/usr/lib/i386-linux-gnu/glibmm-2.4/include -I/usr/include/glib-2.0 -I/usr/lib/i386-linux-gnu/glib-2.0/include
+POI_SUPPLIER_LIBS=-lxml++-2.6 -lxml2 -lglibmm-2.4 -lglib-2.0 -lgobject-2.0 -lsqlite3
+POI_SUPPLIER_LINK=g++
+POI_SUPPLIER_LFLAGS=-Wl,-O1
+
+DEPS+=$(POI_SUPPLIER_DEPS)
+ALL+=poi-supplier
+CLEAN+=clean-poi-supplier
+
+help::
+ @echo "poi-supplier: Build the poi supplier"
+
+clean-poi-supplier::
+ rm -rf $(POI_SUPPLIER_BIN_DIR)
+ rm -rf poi-supplier
+
+poi-supplier: $(POI_SUPPLIER_BIN_DIR)/main.o $(POI_SUPPLIER_BIN_DIR)/database.o $(POI_SUPPLIER_BIN_DIR)/raw-file-sort.o
+ $(POI_SUPPLIER_LINK) $(POI_SUPPLIER_LFLAGS) $(POI_SUPPLIER_BIN_DIR)/main.o $(POI_SUPPLIER_BIN_DIR)/database.o $(POI_SUPPLIER_BIN_DIR)/raw-file-sort.o $(POI_SUPPLIER_LIBS) -o $(EXE_DIR)/poi-supplier
+
+$(POI_SUPPLIER_BIN_DIR)/main.o: $(POI_SUPPLIER_SRC_DIR)/main.cpp $(POI_SUPPLIER_SRC_DIR)/poi-datamodel.h \
+ $(POI_SUPPLIER_SRC_DIR)/raw-file-sort.h \
+ $(POI_SUPPLIER_SRC_DIR)/database.h
+ @$(CHK_DIR_EXISTS) $(POI_SUPPLIER_BIN_DIR) || $(MKDIR) $(POI_SUPPLIER_BIN_DIR)
+ $(CXX) -c $(CXXFLAGS) $(POI_SUPPLIER_INCPATH) -o $(POI_SUPPLIER_BIN_DIR)/main.o $(POI_SUPPLIER_SRC_DIR)/main.cpp
+
+$(POI_SUPPLIER_BIN_DIR)/database.o: $(POI_SUPPLIER_SRC_DIR)/database.cpp $(POI_SUPPLIER_SRC_DIR)/database.h
+ @$(CHK_DIR_EXISTS) $(POI_SUPPLIER_BIN_DIR) || $(MKDIR) $(POI_SUPPLIER_BIN_DIR)
+ $(CXX) -c $(CXXFLAGS) $(POI_SUPPLIER_INCPATH) -o $(POI_SUPPLIER_BIN_DIR)/database.o $(POI_SUPPLIER_SRC_DIR)/database.cpp
+
+$(POI_SUPPLIER_BIN_DIR)/raw-file-sort.o: $(POI_SUPPLIER_SRC_DIR)/raw-file-sort.cpp $(POI_SUPPLIER_SRC_DIR)/poi-datamodel.h \
+ $(POI_SUPPLIER_SRC_DIR)/raw-file-sort.h
+ $(CXX) -c $(CXXFLAGS) $(POI_SUPPLIER_INCPATH) -o $(POI_SUPPLIER_BIN_DIR)/raw-file-sort.o $(POI_SUPPLIER_SRC_DIR)/raw-file-sort.cpp
+
diff --git a/test/poi-service/script/populate-database-additional.sql b/test/poi-service/script/populate-database-additional.sql
new file mode 100644
index 0000000..c7859f7
--- /dev/null
+++ b/test/poi-service/script/populate-database-additional.sql
@@ -0,0 +1,80 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2011-2012 PCA Peugeot Citroën
+ *
+ * This file is part of GENIVI Project POISearch Proof Of Concept [POIPOCSupplier].
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * \file PopulateDatabaseAdditional.sql
+ * Modifications:
+ * 19-12-2013 Philippe Colliot
+ * update the poi sample to reflect the new amount of columns
+ * update a comment
+ * 6-01-2014 Philippe Colliot
+ * Align the attributes of all categories
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+/* start of the transaction */
+BEGIN TRANSACTION;
+/* create providers */
+INSERT INTO poiprovider VALUES (0,'OpenStreetMap');
+/* create categories */
+INSERT INTO poicategory VALUES (0,'all categories');
+INSERT INTO poicategory VALUES (55,'bicycle');
+/* create attributes */
+INSERT INTO poiattribute VALUES (0, 'source');
+INSERT INTO poiattribute VALUES (1, 'website');
+INSERT INTO poiattribute VALUES (2, 'phone');
+INSERT INTO poiattribute VALUES (3, 'stars');
+INSERT INTO poiattribute VALUES (4, 'openingHours');
+INSERT INTO poiattribute VALUES (5, 'addrHouseNumber');
+INSERT INTO poiattribute VALUES (6, 'addrStreet');
+INSERT INTO poiattribute VALUES (7, 'addrPostCode');
+INSERT INTO poiattribute VALUES (8, 'addrCity');
+INSERT INTO poiattribute VALUES (9, 'brand');
+INSERT INTO poiattribute VALUES (10, 'operateur');
+/* create icons */
+INSERT INTO iconset VALUES (0,32,37,'../resource/bicycle_shop','png');
+INSERT INTO iconset VALUES (1,32,37,'../resource/world','png');
+/* link between categories and attributes */
+INSERT INTO hasattribute VALUES (0,0,2);
+INSERT INTO hasattribute VALUES (1,0,4);
+INSERT INTO hasattribute VALUES (2,55,2);
+INSERT INTO hasattribute VALUES (3,55,4);
+/* link between icons and categories */
+INSERT INTO isdisplayedas VALUES (0,0,1);
+INSERT INTO isdisplayedas VALUES (0,55,0);
+/* create mediaset */
+INSERT INTO mediaset VALUES (0,'audio sample','Helmut Qualtinger - I schupf alles nur mit l amour','mp3');
+INSERT INTO mediaset VALUES (1,'video sample','concert','mp4');
+/* define an area for being used by the server (to be improved, do it during runtime ?) */
+INSERT INTO availablearea VALUES (0,2.246304,48.814551,2.430325,48.901289);
+/* define kinship relations */
+INSERT INTO poicategorykinship VALUES (0,0,0);
+INSERT INTO poicategorykinship VALUES (1,55,0);
+/* define the only poi of all categories, it's necessary for the server (root category) */
+INSERT INTO poi VALUES (0,'NoWherePoi',0,0,0,0,0,'Genivi','www.genivi.org','0',0,'0','0','0',0,'0','0','0');
+INSERT INTO isshownas VALUES (0,0,1);
+INSERT INTO belongsto VALUES (0,0,0,0);
+COMMIT;
+/* to check if database is well populated let's display the database content */
+SELECT * FROM poi;
+SELECT * FROM poiprovider;
+SELECT * FROM poicategory;
+SELECT * FROM availablearea;
+SELECT * FROM poiattribute;
+SELECT * FROM poicategorykinship;
+SELECT * FROM iconset;
+SELECT * FROM mediaset;
+
diff --git a/test/poi-service/script/populate-database.sql b/test/poi-service/script/populate-database.sql
new file mode 100644
index 0000000..085eb15
--- /dev/null
+++ b/test/poi-service/script/populate-database.sql
@@ -0,0 +1,137 @@
+/**
+ * @licence app begin@
+ * Copyright (C) 2011-2012 PCA Peugeot Citroën
+ *
+ * This file is part of GENIVI Project POISearch Proof Of Concept [POIPOCSupplier].
+ *
+ * Contributions are licensed to the GENIVI Alliance under one or more
+ * Contribution License Agreements.
+ *
+ * \copyright
+ * This Source Code Form is subject to the terms of the
+ * Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with
+ * this file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * \author Philippe Colliot <philippe.colliot@mpsa.com
+ *
+ * \file PopulateDatabase.sql
+ * Modifications:
+ * 19-12-2013 Philippe Colliot
+ * change name of a poi category from "gaz station" to "fuel", according to OpenStreetMap amenity:fuel
+ * update the poi sample to reflect the new amount of columns
+ * add several new attributes
+ * 6-01-2014 Philippe Colliot
+ * Align the attributes of all categories
+ *
+ * For further information see http://www.genivi.org/.
+ * @licence end@
+ */
+/* start of the transaction */
+BEGIN TRANSACTION;
+/* create providers */
+INSERT INTO poiprovider VALUES (0,'OpenStreetMap');
+INSERT INTO poiprovider VALUES (1,'TomTom');
+INSERT INTO poiprovider VALUES (2,'Navteq');
+/* create categories */
+INSERT INTO poicategory VALUES (0,'all categories');
+INSERT INTO poicategory VALUES (1,'restaurant');
+INSERT INTO poicategory VALUES (2,'hotel');
+INSERT INTO poicategory VALUES (3,'fuel');
+INSERT INTO poicategory VALUES (4,'car park');
+INSERT INTO poicategory VALUES (5,'museum');
+INSERT INTO poicategory VALUES (6,'station');
+INSERT INTO poicategory VALUES (7,'airport');
+/* create attributes */
+INSERT INTO poiattribute VALUES (0, 'source');
+INSERT INTO poiattribute VALUES (1, 'website');
+INSERT INTO poiattribute VALUES (2, 'phone');
+INSERT INTO poiattribute VALUES (3, 'stars');
+INSERT INTO poiattribute VALUES (4, 'openingHours');
+INSERT INTO poiattribute VALUES (5, 'addrHouseNumber');
+INSERT INTO poiattribute VALUES (6, 'addrStreet');
+INSERT INTO poiattribute VALUES (7, 'addrPostCode');
+INSERT INTO poiattribute VALUES (8, 'addrCity');
+INSERT INTO poiattribute VALUES (9, 'brand');
+INSERT INTO poiattribute VALUES (10, 'operateur');
+/* create icons */
+INSERT INTO iconset VALUES (0,32,37,'../resource/restaurant','png');
+INSERT INTO iconset VALUES (1,32,37,'../resource/hotel_0star','png');
+INSERT INTO iconset VALUES (2,32,37,'../resource/train','png');
+INSERT INTO iconset VALUES (3,32,37,'../resource/museum_art','png');
+INSERT INTO iconset VALUES (4,32,37,'../resource/airport','png');
+INSERT INTO iconset VALUES (5,32,37,'../resource/car','png');
+INSERT INTO iconset VALUES (6,32,37,'../resource/fillingstation','png');
+INSERT INTO iconset VALUES (7,32,37,'../resource/world','png');
+/* link between categories and attributes */
+INSERT INTO hasattribute VALUES (0,0,0);
+INSERT INTO hasattribute VALUES (1,0,1);
+INSERT INTO hasattribute VALUES (2,0,2);
+INSERT INTO hasattribute VALUES (3,0,3);
+INSERT INTO hasattribute VALUES (4,0,4);
+INSERT INTO hasattribute VALUES (5,0,9);
+INSERT INTO hasattribute VALUES (6,0,10);
+INSERT INTO hasattribute VALUES (7,1,0);
+INSERT INTO hasattribute VALUES (8,1,1);
+INSERT INTO hasattribute VALUES (9,1,2);
+INSERT INTO hasattribute VALUES (10,2,0);
+INSERT INTO hasattribute VALUES (11,2,1);
+INSERT INTO hasattribute VALUES (12,2,2);
+INSERT INTO hasattribute VALUES (13,2,3);
+INSERT INTO hasattribute VALUES (14,3,0);
+INSERT INTO hasattribute VALUES (15,3,1);
+INSERT INTO hasattribute VALUES (16,3,2);
+INSERT INTO hasattribute VALUES (17,3,4);
+INSERT INTO hasattribute VALUES (18,3,9);
+INSERT INTO hasattribute VALUES (19,3,10);
+INSERT INTO hasattribute VALUES (20,4,0);
+INSERT INTO hasattribute VALUES (21,4,1);
+INSERT INTO hasattribute VALUES (22,4,2);
+INSERT INTO hasattribute VALUES (23,5,0);
+INSERT INTO hasattribute VALUES (24,5,1);
+INSERT INTO hasattribute VALUES (25,5,2);
+INSERT INTO hasattribute VALUES (26,6,0);
+INSERT INTO hasattribute VALUES (27,6,1);
+INSERT INTO hasattribute VALUES (28,6,2);
+INSERT INTO hasattribute VALUES (29,7,0);
+INSERT INTO hasattribute VALUES (30,7,1);
+INSERT INTO hasattribute VALUES (31,7,2);
+/* link between icons and categories */
+INSERT INTO isdisplayedas VALUES (0,0,7);
+INSERT INTO isdisplayedas VALUES (1,1,0);
+INSERT INTO isdisplayedas VALUES (2,2,1);
+INSERT INTO isdisplayedas VALUES (3,3,6);
+INSERT INTO isdisplayedas VALUES (4,4,5);
+INSERT INTO isdisplayedas VALUES (5,5,3);
+INSERT INTO isdisplayedas VALUES (6,6,2);
+INSERT INTO isdisplayedas VALUES (7,7,0);
+/* create mediaset */
+INSERT INTO mediaset VALUES (0,'audio sample','Helmut Qualtinger - I schupf alles nur mit l amour','mp3');
+INSERT INTO mediaset VALUES (1,'video sample','concert','mp4');
+/* define an area for being used by the server (to be improved, do it during runtime ?) */
+INSERT INTO availablearea VALUES (0,2.246304,48.814551,2.430325,48.901289);
+/* define kinship relations */
+INSERT INTO poicategorykinship VALUES (0,0,0);
+INSERT INTO poicategorykinship VALUES (1,1,0);
+INSERT INTO poicategorykinship VALUES (2,2,0);
+INSERT INTO poicategorykinship VALUES (3,3,0);
+INSERT INTO poicategorykinship VALUES (4,4,0);
+INSERT INTO poicategorykinship VALUES (5,5,0);
+INSERT INTO poicategorykinship VALUES (6,6,0);
+INSERT INTO poicategorykinship VALUES (7,7,0);
+/* define the only poi of all categories, it's necessary for the server (root category) */
+INSERT INTO poi VALUES (0,'NoWherePoi',0,0,0,0,0,'Genivi','www.genivi.org','0',0,'0','0','0',0,'0','0','0');
+INSERT INTO isshownas VALUES (0,0,1);
+INSERT INTO belongsto VALUES (0,0,0,0);
+COMMIT;
+/* to check if database is well populated let's display the database content */
+SELECT * FROM poi;
+SELECT * FROM poiprovider;
+SELECT * FROM poicategory;
+SELECT * FROM availablearea;
+SELECT * FROM poiattribute;
+SELECT * FROM poicategorykinship;
+SELECT * FROM iconset;
+SELECT * FROM mediaset;
+
+
+
diff --git a/test/poi-service/script/prepare b/test/poi-service/script/prepare
new file mode 100755
index 0000000..896f409
--- /dev/null
+++ b/test/poi-service/script/prepare
@@ -0,0 +1,94 @@
+#!/bin/sh
+
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file prepare
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+CURDIR=$PWD
+ROOT_DIR=$CURDIR/..
+BIN_DIR=$ROOT_DIR/bin
+EXE_DIR=$BIN_DIR
+CONFIG_DIR=$HOME"/.config/poi-service"
+CHK_DIR_EXISTS='test -d'
+MKDIR='mkdir -p'
+
+echo '------------------------localize the project and prepare the database------------------------'
+#by default city set to paris
+city="paris"
+language='en'
+
+while getopts c:h opt
+do
+ case $opt in
+ c)
+ case "$OPTARG" in
+ paris)
+ city="paris"
+ language='en'
+ ;;
+ tokyo)
+ city="tokyo"
+ language='jp'
+ ;;
+ san-diego)
+ city="san-diego"
+ language='en'
+ ;;
+ *)
+ echo "Unsupported city $OPTARG" >&2
+ exit 1
+ ;;
+ esac
+ ;;
+ h)
+ echo "Usage:"
+ echo "$0 [-c city]"
+ echo "-c: Set city area (supported values: paris,tokyo,san-diego). Default is paris"
+ echo "-h: Help"
+ exit 1
+ esac
+done
+
+echo 'generate the translation files for the APIs'
+lupdate $ROOT_DIR/poi-client/poi-client.pro
+lupdate $ROOT_DIR/poi-contentaccess-module/poi-contentaccess-module.pro
+lrelease $ROOT_DIR/poi-client/poi-client.pro
+lrelease $ROOT_DIR/poi-contentaccess-module/poi-contentaccess-module.pro
+
+echo 'generate the databases'
+./make-database $city
+
+echo 'set the config file'
+if [ ! -d $CONFIG_DIR ]
+then
+ echo create config directory
+ mkdir -p $CONFIG_DIR
+fi
+CONFIG_FILE=$ROOT_DIR/script/$city/poi-client.conf
+cp $CONFIG_FILE $CONFIG_DIR/poi-client.conf
+
+echo 'set the language for the content access module'
+rm -rf $EXE_DIR/language.txt
+echo "$language" > $EXE_DIR/language.txt
+
diff --git a/test/poi-service/script/run b/test/poi-service/script/run
new file mode 100755
index 0000000..a236a09
--- /dev/null
+++ b/test/poi-service/script/run
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+# @licence app begin@
+# SPDX-License-Identifier: MPL-2.0
+#
+# \copyright Copyright (C) 2013-2014, PCA Peugeot Citroen
+#
+# \file run
+#
+# \brief This file is part of the Build System.
+#
+# \author Philippe Colliot <philippe.colliot@mpsa.com>
+#
+# \version 1.0
+#
+# This Source Code Form is subject to the terms of the
+# Mozilla Public License (MPL), v. 2.0.
+# If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+# For further information see http://www.genivi.org/.
+#
+# List of changes:
+#
+# <date>, <name>, <description of change>
+#
+# @licence end@
+
+echo '------------------------start the proof of concept------------------------'
+CURDIR=$PWD
+ROOT_DIR=$CURDIR/..
+BIN_DIR=$ROOT_DIR/bin
+EXE_DIR=$BIN_DIR
+COMPONENT_EXE_DIR=$ROOT_DIR/../../src/poi-service/bin
+COMPONENT_SCRIPT_DIR=$ROOT_DIR/../../src/poi-service/script
+MAIN_DATABASE=$EXE_DIR/'poi-database.db'
+ADDITIONAL_DATABASE=$EXE_DIR/'poi-database-additional.db'
+
+echo 'kill orphan process if necessary'
+$CURDIR/kill-all
+
+echo 'run'
+#check is poi-server exists, if not make it
+if [ ! -f $COMPONENT_EXE_DIR/poi-server ]
+then
+ echo $COMPONENT_EXE_DIR/poi-server does not exist, so make it first
+ cd $COMPONENT_SCRIPT_DIR
+ make all
+ cd $CURDIR
+fi
+
+
+read language <$EXE_DIR/language.txt
+echo $language
+$EXE_DIR/poi-contentaccess-module -f $ADDITIONAL_DATABASE -i $language &
+$COMPONENT_EXE_DIR/poi-server -f $MAIN_DATABASE &
+
+$EXE_DIR/poi-client &
+
diff --git a/test/poi-service/script/san-diego/bicycle.xml b/test/poi-service/script/san-diego/bicycle.xml
new file mode 100644
index 0000000..0271dd9
--- /dev/null
+++ b/test/poi-service/script/san-diego/bicycle.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-06-24T10:12:06Z"/>
+
+ <node id="356159913" lat="32.8386936" lon="-117.2785742"/>
+ <node id="356170188" lat="32.8385620" lon="-117.2785282"/>
+ <node id="356179270" lat="32.8384844" lon="-117.2789044"/>
+ <node id="356216137" lat="32.8386127" lon="-117.2789523"/>
+ <node id="356216228" lat="32.8386682" lon="-117.2786929"/>
+ <node id="356224569" lat="32.8385284" lon="-117.2786913"/>
+ <node id="356383422" lat="32.8331293" lon="-117.1555671">
+ <tag k="addr:housenumber" v="7638"/>
+ <tag k="addr:postcode" v="92111"/>
+ <tag k="addr:street" v=" Clairemont Mesa Boulevard"/>
+ <tag k="name" v="HTB HI-Tech Bikes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="hi-techbikes.com"/>
+ </node>
+ <node id="356390955" lat="32.8674730" lon="-117.2328245"/>
+ <node id="356475203" lat="32.8673360" lon="-117.2327816"/>
+ <node id="447649469" lat="32.8675018" lon="-117.2326014"/>
+ <node id="447649473" lat="32.8673648" lon="-117.2325585"/>
+ <node id="596908234" lat="32.8293140" lon="-117.1540610">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="7730"/>
+ <tag k="addr:postcode" v="92111"/>
+ <tag k="addr:street" v="Ronson Rd"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="Performance Bicycle"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="Bing"/>
+ </node>
+ <node id="1146834945" lat="32.8770451" lon="-117.2399473">
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1266038024" lat="32.7290760" lon="-117.1297780">
+ <tag k="name" v="Velo Cult"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1808327199" lat="32.7998524" lon="-117.2398363">
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1914939588" lat="32.7701698" lon="-117.2013767">
+ <tag k="name" v="Beach Bikes &amp; Beyond"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="Bing"/>
+ <tag k="website" v="http://beachbikesandbeyond.com/"/>
+ </node>
+ <node id="1935658350" lat="32.7559737" lon="-117.2043394">
+ <tag k="addr:housename" v="B+L Bike &amp; Sport"/>
+ <tag k="addr:housenumber" v="3603"/>
+ <tag k="addr:postcode" v="92110"/>
+ <tag k="addr:street" v="Camino Del Rio West"/>
+ <tag k="name" v="B+L Bike &amp; Sport"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="local knowledge"/>
+ <tag k="website" v="blbikes.com"/>
+ </node>
+ <way id="31817077">
+ <nd ref="356224569"/>
+ <nd ref="356179270"/>
+ <nd ref="356216137"/>
+ <nd ref="356216228"/>
+ <nd ref="356159913"/>
+ <nd ref="356170188"/>
+ <nd ref="356224569"/>
+ <tag k="building" v="yes"/>
+ <tag k="building_type" v="commercial"/>
+ <tag k="name" v="California Bicycle Inc."/>
+ <tag k="sangis:OBJECTID" v="14078"/>
+ <tag k="sangis:TYPE" v="Commercial"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="SanGIS Footprints_Nonresidential_SD public domain (http://www.sangis.org/)"/>
+ <tag k="url" v="http://www.calbike.com/"/>
+ </way>
+ <way id="48654906">
+ <nd ref="447649473"/>
+ <nd ref="447649469"/>
+ <nd ref="356390955"/>
+ <nd ref="356475203"/>
+ <nd ref="447649473"/>
+ <tag k="building" v="yes"/>
+ <tag k="building_type" v="commercial"/>
+ <tag k="name" v="UC Cyclery"/>
+ <tag k="shop" v="bicycle"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/san-diego/museum-and-hotel.xml b/test/poi-service/script/san-diego/museum-and-hotel.xml
new file mode 100644
index 0000000..f34bf0a
--- /dev/null
+++ b/test/poi-service/script/san-diego/museum-and-hotel.xml
@@ -0,0 +1,1453 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-06-24T11:34:05Z"/>
+
+ <node id="31525581" lat="32.7745574" lon="-117.2416162"/>
+ <node id="31525600" lat="32.7771128" lon="-117.2383795"/>
+ <node id="31525714" lat="32.7763321" lon="-117.2370707"/>
+ <node id="31525754" lat="32.7773419" lon="-117.2411006"/>
+ <node id="31526012" lat="32.7736640" lon="-117.2400638"/>
+ <node id="31526039" lat="32.7764671" lon="-117.2385936"/>
+ <node id="31526572" lat="32.7773654" lon="-117.2386745"/>
+ <node id="31526605" lat="32.7742527" lon="-117.2411246"/>
+ <node id="31526608" lat="32.7760160" lon="-117.2378151"/>
+ <node id="31526965" lat="32.7771563" lon="-117.2415016"/>
+ <node id="31527127" lat="32.7733993" lon="-117.2397483"/>
+ <node id="31527311" lat="32.7768502" lon="-117.2386242"/>
+ <node id="31528462" lat="32.7768536" lon="-117.2369963"/>
+ <node id="31528578" lat="32.7768634" lon="-117.2419412"/>
+ <node id="31528719" lat="32.7740849" lon="-117.2413084"/>
+ <node id="31528799" lat="32.7752965" lon="-117.2425087"/>
+ <node id="31529266" lat="32.7759947" lon="-117.2380485"/>
+ <node id="31529845" lat="32.7775148" lon="-117.2392261"/>
+ <node id="31529938" lat="32.7766633" lon="-117.2369457"/>
+ <node id="31529952" lat="32.7775720" lon="-117.2402697"/>
+ <node id="31530025" lat="32.7749605" lon="-117.2421412"/>
+ <node id="31530065" lat="32.7740109" lon="-117.2408951"/>
+ <node id="274187020" lat="32.8707141" lon="-117.2253368">
+ <tag k="name" v="Hyatt Regency La Jolla at Aventine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="274187630" lat="32.8703949" lon="-117.2312999">
+ <tag k="name" v="Sheraton La Jolla"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="281144434" lat="32.7310718" lon="-117.1472555"/>
+ <node id="283183345" lat="32.7159445" lon="-117.1614838">
+ <tag k="created_by" v="Potlatch 0.10b"/>
+ <tag k="name" v="The US Grant"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="293394926" lat="32.7117171" lon="-117.1701352"/>
+ <node id="293394927" lat="32.7124465" lon="-117.1701352"/>
+ <node id="293394928" lat="32.7124537" lon="-117.1707961"/>
+ <node id="293394929" lat="32.7124104" lon="-117.1707961"/>
+ <node id="293394930" lat="32.7124104" lon="-117.1708476"/>
+ <node id="293394931" lat="32.7118471" lon="-117.1708562"/>
+ <node id="293394932" lat="32.7117532" lon="-117.1708390"/>
+ <node id="293394933" lat="32.7116954" lon="-117.1707961"/>
+ <node id="293394934" lat="32.7116449" lon="-117.1707275"/>
+ <node id="293394935" lat="32.7116304" lon="-117.1706502"/>
+ <node id="293394936" lat="32.7116232" lon="-117.1702125"/>
+ <node id="293394937" lat="32.7117171" lon="-117.1702211"/>
+ <node id="297552655" lat="32.7166024" lon="-117.1672600"/>
+ <node id="297552659" lat="32.7164002" lon="-117.1665562"/>
+ <node id="297552663" lat="32.7162485" lon="-117.1666163"/>
+ <node id="297552665" lat="32.7161113" lon="-117.1666163"/>
+ <node id="297552667" lat="32.7160680" lon="-117.1665648"/>
+ <node id="297552669" lat="32.7159597" lon="-117.1665648"/>
+ <node id="297552671" lat="32.7159452" lon="-117.1665991"/>
+ <node id="297552706" lat="32.7158947" lon="-117.1672600"/>
+ <node id="297552708" lat="32.7166168" lon="-117.1666077"/>
+ <node id="297552711" lat="32.7158947" lon="-117.1665991"/>
+ <node id="297553200" lat="32.7166168" lon="-117.1672257"/>
+ <node id="297553201" lat="32.7164291" lon="-117.1666077"/>
+ <node id="297553202" lat="32.7162846" lon="-117.1665562"/>
+ <node id="297553234" lat="32.7162399" lon="-117.1669293">
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="name" v="Wyndham San Diego at Emerald Plaza"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="316911836" lat="32.7310491" lon="-117.1466371"/>
+ <node id="316911837" lat="32.7309119" lon="-117.1466371"/>
+ <node id="316911838" lat="32.7309119" lon="-117.1466200"/>
+ <node id="316911839" lat="32.7305725" lon="-117.1466200"/>
+ <node id="316911840" lat="32.7305725" lon="-117.1467830"/>
+ <node id="316911841" lat="32.7305725" lon="-117.1468946"/>
+ <node id="316911842" lat="32.7305364" lon="-117.1469375"/>
+ <node id="316911843" lat="32.7305364" lon="-117.1470320"/>
+ <node id="316911844" lat="32.7305653" lon="-117.1470749"/>
+ <node id="316911845" lat="32.7305653" lon="-117.1473495"/>
+ <node id="316911846" lat="32.7308397" lon="-117.1473495"/>
+ <node id="316911847" lat="32.7308397" lon="-117.1474439"/>
+ <node id="316911848" lat="32.7309119" lon="-117.1475298"/>
+ <node id="316911849" lat="32.7310130" lon="-117.1475298"/>
+ <node id="316911850" lat="32.7310852" lon="-117.1474525"/>
+ <node id="316911851" lat="32.7310852" lon="-117.1473238"/>
+ <node id="316911852" lat="32.7310836" lon="-117.1466798"/>
+ <node id="316912122" lat="32.7274442" lon="-117.1527569"/>
+ <node id="316912123" lat="32.7275597" lon="-117.1520445"/>
+ <node id="316912124" lat="32.7274947" lon="-117.1520273"/>
+ <node id="316912125" lat="32.7274731" lon="-117.1521389"/>
+ <node id="316912126" lat="32.7270823" lon="-117.1520433"/>
+ <node id="316912127" lat="32.7270037" lon="-117.1525337"/>
+ <node id="316912128" lat="32.7273937" lon="-117.1526281"/>
+ <node id="316912129" lat="32.7273792" lon="-117.1527397"/>
+ <node id="316912134" lat="32.7270569" lon="-117.1522029"/>
+ <node id="316912135" lat="32.7270038" lon="-117.1521912"/>
+ <node id="316912136" lat="32.7269761" lon="-117.1523547"/>
+ <node id="316912137" lat="32.7270296" lon="-117.1523662"/>
+ <node id="343862452" lat="32.7073369" lon="-117.1642951"/>
+ <node id="343862453" lat="32.7081097" lon="-117.1644496"/>
+ <node id="343862790" lat="32.7107818" lon="-117.1686295"/>
+ <node id="343862791" lat="32.7106735" lon="-117.1684407"/>
+ <node id="343862792" lat="32.7103702" lon="-117.1686295"/>
+ <node id="343862793" lat="32.7099369" lon="-117.1678742"/>
+ <node id="343862794" lat="32.7104135" lon="-117.1675051"/>
+ <node id="343862795" lat="32.7099224" lon="-117.1666383"/>
+ <node id="343862796" lat="32.7090847" lon="-117.1672648"/>
+ <node id="343862797" lat="32.7090341" lon="-117.1674279"/>
+ <node id="343862798" lat="32.7090486" lon="-117.1675738"/>
+ <node id="343862799" lat="32.7092869" lon="-117.1680115"/>
+ <node id="343862800" lat="32.7091858" lon="-117.1680974"/>
+ <node id="343862801" lat="32.7093735" lon="-117.1684321"/>
+ <node id="343862802" lat="32.7094674" lon="-117.1685609"/>
+ <node id="343862803" lat="32.7095252" lon="-117.1686810"/>
+ <node id="343862804" lat="32.7095758" lon="-117.1688184"/>
+ <node id="343862805" lat="32.7096769" lon="-117.1689385"/>
+ <node id="343862806" lat="32.7097491" lon="-117.1689814"/>
+ <node id="343862807" lat="32.7098502" lon="-117.1691102"/>
+ <node id="343862808" lat="32.7100380" lon="-117.1691273"/>
+ <node id="343862809" lat="32.7102041" lon="-117.1690758"/>
+ <node id="343866512" lat="32.7082455" lon="-117.1590645"/>
+ <node id="343866513" lat="32.7074728" lon="-117.1590559"/>
+ <node id="343866514" lat="32.7073933" lon="-117.1589701"/>
+ <node id="343866515" lat="32.7073933" lon="-117.1584036"/>
+ <node id="343866516" lat="32.7082455" lon="-117.1584122"/>
+ <node id="344791523" lat="32.7259855" lon="-117.1983606"/>
+ <node id="344791524" lat="32.7256605" lon="-117.1980431"/>
+ <node id="344791525" lat="32.7260505" lon="-117.1975281"/>
+ <node id="344791526" lat="32.7261227" lon="-117.1974852"/>
+ <node id="344791527" lat="32.7262093" lon="-117.1972448"/>
+ <node id="344791528" lat="32.7267653" lon="-117.1972362"/>
+ <node id="344791529" lat="32.7268231" lon="-117.1973822"/>
+ <node id="344791530" lat="32.7268158" lon="-117.1975796"/>
+ <node id="344791531" lat="32.7267725" lon="-117.1976826"/>
+ <node id="344791532" lat="32.7269458" lon="-117.1977941"/>
+ <node id="344791533" lat="32.7269458" lon="-117.1975452"/>
+ <node id="344791534" lat="32.7270830" lon="-117.1975452"/>
+ <node id="344791535" lat="32.7270902" lon="-117.1977341"/>
+ <node id="344791536" lat="32.7271913" lon="-117.1976826"/>
+ <node id="344791537" lat="32.7272780" lon="-117.1977341"/>
+ <node id="344791538" lat="32.7274585" lon="-117.1976568"/>
+ <node id="344791539" lat="32.7280578" lon="-117.1976482"/>
+ <node id="344791540" lat="32.7280578" lon="-117.1979229"/>
+ <node id="344791541" lat="32.7276751" lon="-117.1979229"/>
+ <node id="344791542" lat="32.7276245" lon="-117.1979830"/>
+ <node id="344791543" lat="32.7275235" lon="-117.1980516"/>
+ <node id="344791544" lat="32.7273502" lon="-117.1981460"/>
+ <node id="344791545" lat="32.7271552" lon="-117.1983005"/>
+ <node id="344791546" lat="32.7270686" lon="-117.1983263"/>
+ <node id="344791547" lat="32.7269025" lon="-117.1983263"/>
+ <node id="344791548" lat="32.7268303" lon="-117.1982920"/>
+ <node id="344791549" lat="32.7266859" lon="-117.1983950"/>
+ <node id="344791550" lat="32.7264115" lon="-117.1982834"/>
+ <node id="344791551" lat="32.7264259" lon="-117.1982233"/>
+ <node id="344791552" lat="32.7263609" lon="-117.1981975"/>
+ <node id="344791553" lat="32.7263970" lon="-117.1980945"/>
+ <node id="344791554" lat="32.7262310" lon="-117.1981031"/>
+ <node id="344791555" lat="32.7261443" lon="-117.1981375"/>
+ <node id="347336970" lat="32.7266225" lon="-117.1542216"/>
+ <node id="347336971" lat="32.7266658" lon="-117.1541872"/>
+ <node id="347336972" lat="32.7267092" lon="-117.1541272"/>
+ <node id="347336973" lat="32.7267164" lon="-117.1540156"/>
+ <node id="347336974" lat="32.7267092" lon="-117.1539727"/>
+ <node id="347336975" lat="32.7266497" lon="-117.1539030"/>
+ <node id="347336976" lat="32.7265706" lon="-117.1538780"/>
+ <node id="347336977" lat="32.7264962" lon="-117.1538874"/>
+ <node id="347336978" lat="32.7264347" lon="-117.1539652"/>
+ <node id="347336979" lat="32.7263326" lon="-117.1538976"/>
+ <node id="347336980" lat="32.7262284" lon="-117.1538861"/>
+ <node id="347336982" lat="32.7260885" lon="-117.1539077"/>
+ <node id="347336983" lat="32.7259715" lon="-117.1539747"/>
+ <node id="347336984" lat="32.7258844" lon="-117.1540791"/>
+ <node id="347336985" lat="32.7258397" lon="-117.1541782"/>
+ <node id="347336986" lat="32.7257540" lon="-117.1544011"/>
+ <node id="347337019" lat="32.7257441" lon="-117.1545079"/>
+ <node id="347337020" lat="32.7257629" lon="-117.1545859"/>
+ <node id="347337021" lat="32.7258019" lon="-117.1546880"/>
+ <node id="347337022" lat="32.7258539" lon="-117.1547678"/>
+ <node id="347337023" lat="32.7260987" lon="-117.1549017"/>
+ <node id="347337024" lat="32.7261554" lon="-117.1548570"/>
+ <node id="347337025" lat="32.7262677" lon="-117.1548618"/>
+ <node id="347337026" lat="32.7263583" lon="-117.1548422"/>
+ <node id="347337027" lat="32.7264671" lon="-117.1547766"/>
+ <node id="347337028" lat="32.7265575" lon="-117.1546679"/>
+ <node id="347337029" lat="32.7266081" lon="-117.1545649"/>
+ <node id="347337030" lat="32.7266496" lon="-117.1543819"/>
+ <node id="347337031" lat="32.7266398" lon="-117.1542850"/>
+ <node id="348080361" lat="32.7726544" lon="-117.2400675"/>
+ <node id="348080364" lat="32.7724053" lon="-117.2394706"/>
+ <node id="348080366" lat="32.7737593" lon="-117.2387226"/>
+ <node id="348080368" lat="32.7738280" lon="-117.2365415"/>
+ <node id="348080369" lat="32.7738773" lon="-117.2358372"/>
+ <node id="348080371" lat="32.7748261" lon="-117.2358608"/>
+ <node id="348080372" lat="32.7770182" lon="-117.2359991"/>
+ <node id="349249601" lat="32.7728950" lon="-117.2391960"/>
+ <node id="349249602" lat="32.7731746" lon="-117.2390709"/>
+ <node id="349249603" lat="32.7735346" lon="-117.2390222"/>
+ <node id="349249604" lat="32.7736861" lon="-117.2389097"/>
+ <node id="349250108" lat="32.7724968" lon="-117.2394234"/>
+ <node id="349250119" lat="32.7737791" lon="-117.2361420"/>
+ <node id="350512810" lat="32.7166324" lon="-117.1627610"/>
+ <node id="350512811" lat="32.7158814" lon="-117.1627610"/>
+ <node id="350512812" lat="32.7158814" lon="-117.1621087"/>
+ <node id="350512814" lat="32.7166324" lon="-117.1621087"/>
+ <node id="353117202" lat="32.7081801" lon="-117.1661066"/>
+ <node id="353117203" lat="32.7084329" lon="-117.1664757"/>
+ <node id="353117204" lat="32.7084546" lon="-117.1665959"/>
+ <node id="353117205" lat="32.7085484" lon="-117.1666130"/>
+ <node id="353117206" lat="32.7088662" lon="-117.1670679"/>
+ <node id="353117208" lat="32.7089023" lon="-117.1670250"/>
+ <node id="353117209" lat="32.7086929" lon="-117.1666817"/>
+ <node id="353117210" lat="32.7087723" lon="-117.1656260"/>
+ <node id="353117211" lat="32.7088518" lon="-117.1655487"/>
+ <node id="353117212" lat="32.7091623" lon="-117.1655745"/>
+ <node id="353117213" lat="32.7092129" lon="-117.1655058"/>
+ <node id="353117214" lat="32.7091262" lon="-117.1654200"/>
+ <node id="353117215" lat="32.7090323" lon="-117.1654200"/>
+ <node id="353117216" lat="32.7088229" lon="-117.1654371"/>
+ <node id="353117217" lat="32.7086929" lon="-117.1653942"/>
+ <node id="353117219" lat="32.7085990" lon="-117.1653513"/>
+ <node id="353117220" lat="32.7085557" lon="-117.1652397"/>
+ <node id="353117221" lat="32.7085051" lon="-117.1651453"/>
+ <node id="353117222" lat="32.7084329" lon="-117.1650166"/>
+ <node id="353117223" lat="32.7083535" lon="-117.1649307"/>
+ <node id="353117224" lat="32.7083968" lon="-117.1645703"/>
+ <node id="353117225" lat="32.7081873" lon="-117.1644673"/>
+ <node id="353117227" lat="32.7071185" lon="-117.1645359"/>
+ <node id="353117228" lat="32.7075518" lon="-117.1651282"/>
+ <node id="353117229" lat="32.7076168" lon="-117.1650767"/>
+ <node id="353117230" lat="32.7076890" lon="-117.1650423"/>
+ <node id="353117231" lat="32.7077829" lon="-117.1650080"/>
+ <node id="353117232" lat="32.7078624" lon="-117.1650080"/>
+ <node id="353117233" lat="32.7079707" lon="-117.1650252"/>
+ <node id="353117234" lat="32.7080357" lon="-117.1650509"/>
+ <node id="353117235" lat="32.7081223" lon="-117.1651196"/>
+ <node id="353117236" lat="32.7081585" lon="-117.1651453"/>
+ <node id="353117237" lat="32.7082090" lon="-117.1651024"/>
+ <node id="353117238" lat="32.7082451" lon="-117.1650767"/>
+ <node id="353117239" lat="32.7082668" lon="-117.1651024"/>
+ <node id="353117240" lat="32.7082451" lon="-117.1651453"/>
+ <node id="353117241" lat="32.7082812" lon="-117.1652054"/>
+ <node id="353117242" lat="32.7083390" lon="-117.1652912"/>
+ <node id="353117243" lat="32.7083607" lon="-117.1653771"/>
+ <node id="353117244" lat="32.7082957" lon="-117.1654629"/>
+ <node id="353117245" lat="32.7082307" lon="-117.1656174"/>
+ <node id="353117246" lat="32.7082018" lon="-117.1657204"/>
+ <node id="353117247" lat="32.7081946" lon="-117.1658577"/>
+ <node id="353117248" lat="32.7081873" lon="-117.1659607"/>
+ <node id="368173981" lat="32.8444917" lon="-117.2778153">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="26"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1702485"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="La Jolla Museum of Contemporary Art"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174501" lat="32.7321565" lon="-117.1504311">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="82"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869917"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="San Diego Museum of Art"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174504" lat="32.7172469" lon="-117.1694057">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="9"/>
+ <tag k="name" v="Museum of Contemporary Art"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174507" lat="32.7214401" lon="-117.1678111">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="15"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869944"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="Firehouse Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174511" lat="32.8742136" lon="-117.2325362">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="105"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869283"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="Childrens Museum of San Diego"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174514" lat="32.7528279" lon="-117.1939237">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="16"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869276"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="American Presidents Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174521" lat="32.7316694" lon="-117.1523613">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="79"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869904"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="San Diego Museum of Man"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174635" lat="32.7592166" lon="-117.1939237">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="34"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="244176"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="Juniper Serra Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="368174636" lat="32.7211153" lon="-117.2301376">
+ <tag k="addr:state" v="CA"/>
+ <tag k="ele" v="5"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="2456341"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="Portuguese Historical Center"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="432026078" lat="32.7068972" lon="-117.1586985">
+ <tag k="addr:housenumber" v="675"/>
+ <tag k="addr:street" v="L St"/>
+ <tag k="name" v="The Omni"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="439803001" lat="32.7033060" lon="-117.1586440">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:housenumber" v="1"/>
+ <tag k="addr:state" v="CA"/>
+ <tag k="addr:street" v="Park Boulevard"/>
+ <tag k="name" v="Hilton Bayfront Hotel"/>
+ <tag k="smoking" v="separated"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="490691216" lat="32.7766546" lon="-117.2385996"/>
+ <node id="490691251" lat="32.7762802" lon="-117.2385915"/>
+ <node id="490691283" lat="32.7775429" lon="-117.2396348"/>
+ <node id="490691345" lat="32.7769700" lon="-117.2386336"/>
+ <node id="490691359" lat="32.7771209" lon="-117.2385138"/>
+ <node id="490691387" lat="32.7764707" lon="-117.2369629"/>
+ <node id="490691404" lat="32.7760411" lon="-117.2382964"/>
+ <node id="490691417" lat="32.7760874" lon="-117.2384070"/>
+ <node id="490691447" lat="32.7761449" lon="-117.2374265"/>
+ <node id="490691460" lat="32.7760703" lon="-117.2376030"/>
+ <node id="490691491" lat="32.7763922" lon="-117.2423745"/>
+ <node id="490691529" lat="32.7755742" lon="-117.2424189"/>
+ <node id="490691544" lat="32.7759195" lon="-117.2423875"/>
+ <node id="490691619" lat="32.7775451" lon="-117.2399216"/>
+ <node id="490691630" lat="32.7774808" lon="-117.2406280"/>
+ <node id="490691666" lat="32.7774087" lon="-117.2409014"/>
+ <node id="490691685" lat="32.7770040" lon="-117.2417579"/>
+ <node id="490691700" lat="32.7767135" lon="-117.2421131"/>
+ <node id="490691706" lat="32.7765471" lon="-117.2422543"/>
+ <node id="490691947" lat="32.7732428" lon="-117.2397886"/>
+ <node id="490691958" lat="32.7730961" lon="-117.2398516"/>
+ <node id="490692003" lat="32.7738397" lon="-117.2404530"/>
+ <node id="490692032" lat="32.7729594" lon="-117.2399433"/>
+ <node id="494792879" lat="32.8011312" lon="-117.2586230">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="494792972" lat="32.7995368" lon="-117.2578248">
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="494793085" lat="32.7961577" lon="-117.2573553">
+ <tag k="name" v="Crystal Pier"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://www.crystalpier.com/"/>
+ </node>
+ <node id="559960407" lat="32.8955633" lon="-117.2035862"/>
+ <node id="559960408" lat="32.8953560" lon="-117.2038673"/>
+ <node id="559960413" lat="32.8955633" lon="-117.2034005"/>
+ <node id="559960414" lat="32.8953560" lon="-117.2031813"/>
+ <node id="559960416" lat="32.8961659" lon="-117.2038435"/>
+ <node id="559960418" lat="32.8961635" lon="-117.2035886"/>
+ <node id="559960420" lat="32.8961563" lon="-117.2033886"/>
+ <node id="559960421" lat="32.8961540" lon="-117.2031647"/>
+ <node id="572708642" lat="32.7290814" lon="-117.2160992">
+ <tag k="name" v="Homewood Suites Hilton"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="572708644" lat="32.7302251" lon="-117.2160669">
+ <tag k="name" v="Courtyard Marriott"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="596218267" lat="32.7576830" lon="-117.1811290">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="2089"/>
+ <tag k="addr:postcode" v="92108"/>
+ <tag k="addr:street" v="Hotel Circle South"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="Extend Stay America"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="596549023" lat="32.8969550" lon="-117.1936730">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="5925"/>
+ <tag k="addr:postcode" v="92121"/>
+ <tag k="addr:street" v="Lusk Bl"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="Holiday Inn Express"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="596582863" lat="32.8981160" lon="-117.1924890">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="5975"/>
+ <tag k="addr:postcode" v="92121"/>
+ <tag k="addr:street" v="Lusk Bl"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="Country Inn and Suites by Carlson - San Diego North"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="596808414" lat="32.7561970" lon="-117.2202780">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="3950"/>
+ <tag k="addr:postcode" v="92110"/>
+ <tag k="addr:state" v="CA"/>
+ <tag k="addr:street" v="Jupiter Street"/>
+ <tag k="fax" v="+1 619 226 1409"/>
+ <tag k="internet_access" v="wlan"/>
+ <tag k="name" v="Holiday Inn Express"/>
+ <tag k="phone" v="+1 619 226 8000"/>
+ <tag k="smoking" v="no"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hiexpress.com/hotels/us/en/san-diego/sanex/hoteldetail"/>
+ </node>
+ <node id="597146198" lat="32.7209250" lon="-117.2286640">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="2733"/>
+ <tag k="addr:postcode" v="92106"/>
+ <tag k="addr:street" v="Shelter Island Dr"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="dfgh"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="603688135" lat="32.7534341" lon="-117.1941974"/>
+ <node id="603688137" lat="32.7532432" lon="-117.1938973"/>
+ <node id="603688138" lat="32.7533244" lon="-117.1938276"/>
+ <node id="603688139" lat="32.7533153" lon="-117.1937846"/>
+ <node id="603688140" lat="32.7533735" lon="-117.1937437"/>
+ <node id="603688141" lat="32.7535787" lon="-117.1940564"/>
+ <node id="662733224" lat="32.7214110" lon="-117.1632130">
+ <tag k="name" v="Motel 6"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="675316554" lat="32.8745072" lon="-117.2083393">
+ <tag k="name" v="Embassy Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="712768211" lat="32.8996229" lon="-117.1916284"/>
+ <node id="712768216" lat="32.8993799" lon="-117.1917903"/>
+ <node id="712768217" lat="32.8994952" lon="-117.1919571"/>
+ <node id="712768219" lat="32.8994046" lon="-117.1920209"/>
+ <node id="712768220" lat="32.8992893" lon="-117.1918737"/>
+ <node id="712768221" lat="32.8987579" lon="-117.1922564"/>
+ <node id="712768222" lat="32.8987043" lon="-117.1921288"/>
+ <node id="712768223" lat="32.8987249" lon="-117.1920012"/>
+ <node id="712768224" lat="32.8988979" lon="-117.1918295"/>
+ <node id="712768225" lat="32.8988691" lon="-117.1917559"/>
+ <node id="712768226" lat="32.8987867" lon="-117.1918246"/>
+ <node id="712768227" lat="32.8987208" lon="-117.1917167"/>
+ <node id="712768228" lat="32.8987249" lon="-117.1915891"/>
+ <node id="712768229" lat="32.8992481" lon="-117.1911279"/>
+ <node id="747653242" lat="32.7273401" lon="-117.1542634"/>
+ <node id="747653244" lat="32.7271661" lon="-117.1540119"/>
+ <node id="747653245" lat="32.7276509" lon="-117.1535319"/>
+ <node id="747653246" lat="32.7278278" lon="-117.1538025"/>
+ <node id="747659931" lat="32.7272622" lon="-117.1495385">
+ <tag k="name" v="World Beat Cultural Center"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="747660028" lat="32.7277090" lon="-117.1486158">
+ <tag k="name" v="Centro Cultural de la Raza"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="925958656" lat="32.7323447" lon="-117.1470197"/>
+ <node id="925958657" lat="32.7318257" lon="-117.1470197"/>
+ <node id="925958658" lat="32.7318173" lon="-117.1473792"/>
+ <node id="925958659" lat="32.7318077" lon="-117.1477868"/>
+ <node id="925958660" lat="32.7319927" lon="-117.1477976"/>
+ <node id="925958661" lat="32.7320017" lon="-117.1476957"/>
+ <node id="925958662" lat="32.7323492" lon="-117.1476903"/>
+ <node id="925958663" lat="32.7323470" lon="-117.1473738"/>
+ <node id="930188121" lat="32.7297000" lon="-117.1629150">
+ <tag k="name" v="Keating House"/>
+ <tag k="opening_hours" v="Contact them"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="940357701" lat="32.7664159" lon="-117.2373562"/>
+ <node id="940357702" lat="32.7664136" lon="-117.2373334"/>
+ <node id="940357703" lat="32.7664148" lon="-117.2373093"/>
+ <node id="940357705" lat="32.7664193" lon="-117.2372865"/>
+ <node id="940357706" lat="32.7664272" lon="-117.2372637"/>
+ <node id="940357707" lat="32.7664385" lon="-117.2372449"/>
+ <node id="940357708" lat="32.7664509" lon="-117.2372261"/>
+ <node id="940357709" lat="32.7664723" lon="-117.2372087"/>
+ <node id="940357710" lat="32.7664960" lon="-117.2371993"/>
+ <node id="940357711" lat="32.7665140" lon="-117.2371966"/>
+ <node id="940357712" lat="32.7665501" lon="-117.2372007"/>
+ <node id="940357714" lat="32.7664982" lon="-117.2370826"/>
+ <node id="940357715" lat="32.7662524" lon="-117.2372369"/>
+ <node id="940357716" lat="32.7663336" lon="-117.2374072"/>
+ <node id="940357718" lat="32.7663855" lon="-117.2375172"/>
+ <node id="940357719" lat="32.7665298" lon="-117.2376727"/>
+ <node id="940357720" lat="32.7665614" lon="-117.2376312"/>
+ <node id="940357722" lat="32.7666076" lon="-117.2376821"/>
+ <node id="940357723" lat="32.7666279" lon="-117.2376566"/>
+ <node id="940357724" lat="32.7666663" lon="-117.2376540"/>
+ <node id="940357725" lat="32.7667057" lon="-117.2376446"/>
+ <node id="940357726" lat="32.7667610" lon="-117.2376285"/>
+ <node id="940357727" lat="32.7668016" lon="-117.2376137"/>
+ <node id="940357728" lat="32.7668591" lon="-117.2375815"/>
+ <node id="940357729" lat="32.7668918" lon="-117.2375574"/>
+ <node id="940357731" lat="32.7669177" lon="-117.2375359"/>
+ <node id="940357732" lat="32.7668512" lon="-117.2374582"/>
+ <node id="940357733" lat="32.7668196" lon="-117.2374273"/>
+ <node id="940357734" lat="32.7668016" lon="-117.2374179"/>
+ <node id="940357735" lat="32.7667847" lon="-117.2374152"/>
+ <node id="940357736" lat="32.7667700" lon="-117.2374152"/>
+ <node id="940357737" lat="32.7667452" lon="-117.2374179"/>
+ <node id="940357738" lat="32.7667226" lon="-117.2374313"/>
+ <node id="940357739" lat="32.7666956" lon="-117.2374662"/>
+ <node id="940357740" lat="32.7667046" lon="-117.2374742"/>
+ <node id="940357741" lat="32.7666888" lon="-117.2374917"/>
+ <node id="940357743" lat="32.7665580" lon="-117.2373482"/>
+ <node id="940357744" lat="32.7664836" lon="-117.2374434"/>
+ <node id="940357745" lat="32.7664565" lon="-117.2374246"/>
+ <node id="964486037" lat="32.7416874" lon="-117.1577964">
+ <tag k="alt_name" v="The George and Anna Marston House Museum and Gardens"/>
+ <tag k="name" v="Marston House"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="981269200" lat="32.7231631" lon="-117.1684973">
+ <tag k="addr:street" v="606 West Date Street"/>
+ <tag k="name" v="La Pensione"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1346369199" lat="32.7258399" lon="-117.1487500">
+ <tag k="name" v="Veteran's Museum and Memorial Center"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1458207035" lat="32.7224970" lon="-117.1636668"/>
+ <node id="1458207036" lat="32.7223603" lon="-117.1637417"/>
+ <node id="1458207041" lat="32.7224124" lon="-117.1637365"/>
+ <node id="1458207043" lat="32.7225124" lon="-117.1634927"/>
+ <node id="1458207045" lat="32.7224818" lon="-117.1634384"/>
+ <node id="1458207067" lat="32.7225241" lon="-117.1635785"/>
+ <node id="1458207081" lat="32.7222605" lon="-117.1634461"/>
+ <node id="1458207091" lat="32.7223194" lon="-117.1637302"/>
+ <node id="1458207107" lat="32.7225108" lon="-117.1636385"/>
+ <node id="1458207108" lat="32.7222339" lon="-117.1636286"/>
+ <node id="1458207112" lat="32.7222747" lon="-117.1636979"/>
+ <node id="1458207114" lat="32.7222387" lon="-117.1634852"/>
+ <node id="1458207118" lat="32.7222244" lon="-117.1635449"/>
+ <node id="1458207119" lat="32.7224599" lon="-117.1637105"/>
+ <node id="1458207120" lat="32.7223442" lon="-117.1633881"/>
+ <node id="1458207126" lat="32.7223011" lon="-117.1634070"/>
+ <node id="1458207140" lat="32.7223964" lon="-117.1633865"/>
+ <node id="1458207152" lat="32.7224460" lon="-117.1634063"/>
+ <node id="1458212924" lat="32.7310226" lon="-117.1490093">
+ <tag k="name" v="San Diego Model Railroad Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1458213374" lat="32.7312299" lon="-117.1485804">
+ <tag k="name" v="Museum of Photographic Arts"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1499576359" lat="32.8346039" lon="-117.1732567">
+ <tag k="name" v="Best Western"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1500943741" lat="32.7903921" lon="-117.2548234">
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:housenumber" v="707"/>
+ <tag k="addr:postcode" v="92109"/>
+ <tag k="addr:street" v="Pacific Beach Drive"/>
+ <tag k="leisure" v="beach_resort"/>
+ <tag k="name" v="Best Western Plus Blue Sea Lodge"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://bestwester-bluesea.com"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wheelchair:description" v="Has ADA compliant rooms"/>
+ </node>
+ <node id="1538591976" lat="32.8548717" lon="-117.2579053">
+ <tag k="email" v="info@LJShoresHotel.com"/>
+ <tag k="internet_access" v="yes"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="La Jolla Shores Hotel"/>
+ <tag k="phone" v="+18584598271"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="www.LJShoresHotel.com"/>
+ </node>
+ <node id="1609865872" lat="32.7200125" lon="-117.2327577">
+ <tag k="name" v="123456"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613827879" lat="32.7165410" lon="-117.2273946">
+ <tag k="name" v="Humphrey's Half Moon Inn and Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613829107" lat="32.7172872" lon="-117.2265987">
+ <tag k="name" v="Humphrey's Half Moon Inn &amp; Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613829108" lat="32.7273965" lon="-117.1989613">
+ <tag k="name" v="The Sheraton"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613831379" lat="32.7165650" lon="-117.2274570">
+ <tag k="name" v="Humphrey's Half Moon Inn &amp; Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613831380" lat="32.7285517" lon="-117.1974163">
+ <tag k="name" v="The Sheraton"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1613841819" lat="32.7167459" lon="-117.2277933">
+ <tag k="name" v="Humprhey's Half Moon Inn &amp; Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1710764143" lat="32.7608260" lon="-117.1881672">
+ <tag k="name" v="Comfort Inn and Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1710764145" lat="32.7603292" lon="-117.1844832">
+ <tag k="name" v="Crowne Plaza"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.ichotelsgroup.com/h/d/cp/1/en/hotel/SANCP"/>
+ </node>
+ <node id="1711714463" lat="32.7696421" lon="-117.1603695">
+ <tag k="name" v="Mission Valley Doubletree"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1713143030" lat="32.7310151" lon="-117.1510187">
+ <tag k="name" v="Mingei International Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1713143034" lat="32.7324881" lon="-117.1491991">
+ <tag k="name" v="San Diego Botanical Garden"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1713143048" lat="32.7318238" lon="-117.1495424">
+ <tag k="name" v="Timken Museum of Art"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1803431547" lat="32.7106549" lon="-117.1649802">
+ <tag k="name" v="The New Children's Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1803433258" lat="32.7096167" lon="-117.1680165">
+ <tag k="name" v="Manchester Grand Hyatt"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1803433389" lat="32.7083800" lon="-117.1651626">
+ <tag k="name" v="San Diego Marriott and Marina"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1869994942" lat="32.7518996" lon="-117.2007475">
+ <tag k="name" v="Old Town Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1931041875" lat="32.7739530" lon="-117.2408263"/>
+ <node id="1931041878" lat="32.7740320" lon="-117.2412646"/>
+ <node id="1931041880" lat="32.7740589" lon="-117.2410950"/>
+ <node id="1931041893" lat="32.7756656" lon="-117.2424652"/>
+ <node id="1931041898" lat="32.7772625" lon="-117.2384904"/>
+ <node id="1931116968" lat="32.7751962" lon="-117.2359198"/>
+ <node id="1931116970" lat="32.7757094" lon="-117.2357511"/>
+ <node id="1935698964" lat="32.7743637" lon="-117.2413038"/>
+ <node id="1935699172" lat="32.7768807" lon="-117.2368318"/>
+ <node id="2048012695" lat="32.7193334" lon="-117.1725004">
+ <tag k="name" v="Wyndham San Diego on the Bay"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2048994333" lat="32.7176183" lon="-117.1667002">
+ <tag k="name" v="W Hotel San Diego"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2097842981" lat="32.7198025" lon="-117.1576072"/>
+ <node id="2097842982" lat="32.7194575" lon="-117.1576024"/>
+ <node id="2097842983" lat="32.7193853" lon="-117.1579510"/>
+ <node id="2097842984" lat="32.7194575" lon="-117.1579484"/>
+ <node id="2097842985" lat="32.7197915" lon="-117.1582701"/>
+ <node id="2097842986" lat="32.7193831" lon="-117.1582728"/>
+ <node id="2157494069" lat="32.7628504" lon="-117.0671801">
+ <tag k="designation" v="San Diego Police Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="2170230528" lat="32.7622010" lon="-117.1658288"/>
+ <node id="2170230555" lat="32.7652721" lon="-117.1668823"/>
+ <node id="2170321491" lat="32.7611877" lon="-117.1690399"/>
+ <node id="2170321494" lat="32.7612030" lon="-117.1690744"/>
+ <node id="2170321496" lat="32.7612040" lon="-117.1690405"/>
+ <node id="2170321498" lat="32.7612162" lon="-117.1691077"/>
+ <node id="2170321499" lat="32.7612367" lon="-117.1691296"/>
+ <node id="2170321500" lat="32.7612716" lon="-117.1686716"/>
+ <node id="2170321503" lat="32.7612786" lon="-117.1691505"/>
+ <node id="2170321506" lat="32.7613273" lon="-117.1684186"/>
+ <node id="2170321509" lat="32.7613898" lon="-117.1681940"/>
+ <node id="2170321511" lat="32.7614410" lon="-117.1680434"/>
+ <node id="2170321513" lat="32.7616436" lon="-117.1675232"/>
+ <node id="2170321514" lat="32.7617882" lon="-117.1666497"/>
+ <node id="2170321517" lat="32.7617887" lon="-117.1666202"/>
+ <node id="2170321519" lat="32.7617935" lon="-117.1666760"/>
+ <node id="2170321521" lat="32.7617966" lon="-117.1665938"/>
+ <node id="2170321523" lat="32.7617987" lon="-117.1671266"/>
+ <node id="2170321525" lat="32.7618109" lon="-117.1667237"/>
+ <node id="2170321527" lat="32.7618193" lon="-117.1670682"/>
+ <node id="2170321529" lat="32.7618225" lon="-117.1667608"/>
+ <node id="2170321531" lat="32.7618309" lon="-117.1670224"/>
+ <node id="2170321533" lat="32.7618341" lon="-117.1668072"/>
+ <node id="2170321535" lat="32.7618383" lon="-117.1669672"/>
+ <node id="2170321537" lat="32.7618399" lon="-117.1668480"/>
+ <node id="2170321539" lat="32.7618415" lon="-117.1669038"/>
+ <node id="2170321541" lat="32.7618895" lon="-117.1663755"/>
+ <node id="2170321543" lat="32.7620001" lon="-117.1661079"/>
+ <node id="2170321545" lat="32.7620285" lon="-117.1660396"/>
+ <node id="2170321547" lat="32.7620643" lon="-117.1659739"/>
+ <node id="2170321549" lat="32.7621001" lon="-117.1659153"/>
+ <node id="2170321551" lat="32.7621232" lon="-117.1659180"/>
+ <node id="2170321553" lat="32.7621479" lon="-117.1658887"/>
+ <node id="2170321555" lat="32.7637989" lon="-117.1699732"/>
+ <node id="2170321557" lat="32.7642358" lon="-117.1700674"/>
+ <node id="2170321560" lat="32.7643340" lon="-117.1697774"/>
+ <node id="2170321563" lat="32.7646474" lon="-117.1691148"/>
+ <node id="2170321568" lat="32.7649791" lon="-117.1685700"/>
+ <node id="2170321570" lat="32.7649991" lon="-117.1685190"/>
+ <node id="2170321576" lat="32.7652725" lon="-117.1678245"/>
+ <node id="2170321581" lat="32.7654578" lon="-117.1669513"/>
+ <node id="2214898323" lat="32.7257660" lon="-117.1543756"/>
+ <node id="2214898324" lat="32.7257680" lon="-117.1545021"/>
+ <node id="2214898326" lat="32.7257896" lon="-117.1543621"/>
+ <node id="2214898328" lat="32.7258072" lon="-117.1543621"/>
+ <node id="2214898329" lat="32.7258160" lon="-117.1542789"/>
+ <node id="2214898334" lat="32.7259276" lon="-117.1540193"/>
+ <node id="2214898339" lat="32.7259749" lon="-117.1548597"/>
+ <node id="2214898341" lat="32.7260283" lon="-117.1539348"/>
+ <node id="2214898342" lat="32.7260385" lon="-117.1548902"/>
+ <node id="2214898344" lat="32.7260709" lon="-117.1549010"/>
+ <node id="2214898345" lat="32.7261304" lon="-117.1548868"/>
+ <node id="2214898346" lat="32.7261608" lon="-117.1538881"/>
+ <node id="2214898348" lat="32.7262819" lon="-117.1538868"/>
+ <node id="2214898352" lat="32.7264151" lon="-117.1548131"/>
+ <node id="2214898356" lat="32.7264563" lon="-117.1539206"/>
+ <node id="2214898358" lat="32.7265151" lon="-117.1547252"/>
+ <node id="2214898359" lat="32.7265347" lon="-117.1538766"/>
+ <node id="2214898362" lat="32.7266166" lon="-117.1538854"/>
+ <node id="2214898363" lat="32.7266362" lon="-117.1544818"/>
+ <node id="2214898365" lat="32.7266859" lon="-117.1539331"/>
+ <node id="2214898366" lat="32.7267227" lon="-117.1540741"/>
+ <node id="2214898385" lat="32.7275041" lon="-117.1523876"/>
+ <node id="2230082362" lat="32.7746230" lon="-117.0262099"/>
+ <node id="2230082367" lat="32.7746245" lon="-117.0263267"/>
+ <node id="2230082371" lat="32.7746579" lon="-117.0261737"/>
+ <node id="2230082375" lat="32.7746538" lon="-117.0262099"/>
+ <node id="2230082378" lat="32.7746904" lon="-117.0255872"/>
+ <node id="2230082381" lat="32.7746889" lon="-117.0257882"/>
+ <node id="2230082383" lat="32.7747065" lon="-117.0261123"/>
+ <node id="2230082385" lat="32.7747044" lon="-117.0261734"/>
+ <node id="2230082392" lat="32.7747725" lon="-117.0263354"/>
+ <node id="2230082396" lat="32.7747725" lon="-117.0263216"/>
+ <node id="2230082399" lat="32.7749248" lon="-117.0258457"/>
+ <node id="2230082401" lat="32.7749336" lon="-117.0258056"/>
+ <node id="2230082404" lat="32.7749468" lon="-117.0258230"/>
+ <node id="2230082407" lat="32.7749498" lon="-117.0258788"/>
+ <node id="2230082410" lat="32.7749849" lon="-117.0258492"/>
+ <node id="2230082413" lat="32.7749747" lon="-117.0261298"/>
+ <node id="2230082416" lat="32.7749822" lon="-117.0263051"/>
+ <node id="2230082419" lat="32.7749820" lon="-117.0263337"/>
+ <node id="2230082421" lat="32.7750245" lon="-117.0256017"/>
+ <node id="2230082422" lat="32.7751373" lon="-117.0254727"/>
+ <node id="2230082424" lat="32.7751769" lon="-117.0257551"/>
+ <node id="2230082425" lat="32.7751546" lon="-117.0263061"/>
+ <node id="2230082426" lat="32.7751827" lon="-117.0255425"/>
+ <node id="2230082430" lat="32.7752120" lon="-117.0255163"/>
+ <node id="2230082432" lat="32.7752208" lon="-117.0255930"/>
+ <node id="2230082435" lat="32.7752472" lon="-117.0255581"/>
+ <node id="2230082438" lat="32.7752677" lon="-117.0256505"/>
+ <way id="26748231">
+ <nd ref="293394926"/>
+ <nd ref="293394927"/>
+ <nd ref="293394928"/>
+ <nd ref="293394929"/>
+ <nd ref="293394930"/>
+ <nd ref="293394931"/>
+ <nd ref="293394932"/>
+ <nd ref="293394933"/>
+ <nd ref="293394934"/>
+ <nd ref="293394935"/>
+ <nd ref="293394936"/>
+ <nd ref="293394937"/>
+ <nd ref="293394926"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Embassy Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="27120562">
+ <nd ref="297552706"/>
+ <nd ref="297552655"/>
+ <nd ref="297553200"/>
+ <nd ref="297552708"/>
+ <nd ref="297553201"/>
+ <nd ref="297552659"/>
+ <nd ref="297553202"/>
+ <nd ref="297552663"/>
+ <nd ref="297552665"/>
+ <nd ref="297552667"/>
+ <nd ref="297552669"/>
+ <nd ref="297552671"/>
+ <nd ref="297552711"/>
+ <nd ref="297552706"/>
+ <tag k="building" v="yes"/>
+ <tag k="created_by" v="Potlatch 0.10b"/>
+ <tag k="name" v="Emerald Plaza"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="28824905">
+ <nd ref="316911836"/>
+ <nd ref="316911837"/>
+ <nd ref="316911838"/>
+ <nd ref="316911839"/>
+ <nd ref="316911840"/>
+ <nd ref="316911841"/>
+ <nd ref="316911842"/>
+ <nd ref="316911843"/>
+ <nd ref="316911844"/>
+ <nd ref="316911845"/>
+ <nd ref="316911846"/>
+ <nd ref="316911847"/>
+ <nd ref="316911848"/>
+ <nd ref="316911849"/>
+ <nd ref="316911850"/>
+ <nd ref="316911851"/>
+ <nd ref="281144434"/>
+ <nd ref="316911852"/>
+ <nd ref="316911836"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Reuben H. Fleet Science Center"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="28824920">
+ <nd ref="316912122"/>
+ <nd ref="2214898385"/>
+ <nd ref="316912123"/>
+ <nd ref="316912124"/>
+ <nd ref="316912125"/>
+ <nd ref="316912126"/>
+ <nd ref="316912134"/>
+ <nd ref="316912135"/>
+ <nd ref="316912136"/>
+ <nd ref="316912137"/>
+ <nd ref="316912127"/>
+ <nd ref="316912128"/>
+ <nd ref="316912129"/>
+ <nd ref="316912122"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="San Diego Hall of Champions"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="30929700">
+ <nd ref="343862790"/>
+ <nd ref="343862791"/>
+ <nd ref="343862792"/>
+ <nd ref="343862793"/>
+ <nd ref="343862794"/>
+ <nd ref="343862795"/>
+ <nd ref="343862796"/>
+ <nd ref="343862797"/>
+ <nd ref="343862798"/>
+ <nd ref="343862799"/>
+ <nd ref="343862800"/>
+ <nd ref="343862801"/>
+ <nd ref="343862802"/>
+ <nd ref="343862803"/>
+ <nd ref="343862804"/>
+ <nd ref="343862805"/>
+ <nd ref="343862806"/>
+ <nd ref="343862807"/>
+ <nd ref="343862808"/>
+ <nd ref="343862809"/>
+ <nd ref="343862790"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Manchester Grand Hyatt San Diego"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="30929835">
+ <nd ref="343866512"/>
+ <nd ref="343866513"/>
+ <nd ref="343866514"/>
+ <nd ref="343866515"/>
+ <nd ref="343866516"/>
+ <nd ref="343866512"/>
+ <tag k="addr:housenumber" v="207"/>
+ <tag k="addr:street" v="5th Ave"/>
+ <tag k="building" v="yes"/>
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="31008692">
+ <nd ref="344791523"/>
+ <nd ref="344791524"/>
+ <nd ref="344791525"/>
+ <nd ref="344791526"/>
+ <nd ref="344791527"/>
+ <nd ref="344791528"/>
+ <nd ref="344791529"/>
+ <nd ref="344791530"/>
+ <nd ref="344791531"/>
+ <nd ref="344791532"/>
+ <nd ref="344791533"/>
+ <nd ref="344791534"/>
+ <nd ref="344791535"/>
+ <nd ref="344791536"/>
+ <nd ref="344791537"/>
+ <nd ref="344791538"/>
+ <nd ref="344791539"/>
+ <nd ref="344791540"/>
+ <nd ref="344791541"/>
+ <nd ref="344791542"/>
+ <nd ref="344791543"/>
+ <nd ref="344791544"/>
+ <nd ref="344791545"/>
+ <nd ref="344791546"/>
+ <nd ref="344791547"/>
+ <nd ref="344791548"/>
+ <nd ref="344791549"/>
+ <nd ref="344791550"/>
+ <nd ref="344791551"/>
+ <nd ref="344791552"/>
+ <nd ref="344791553"/>
+ <nd ref="344791554"/>
+ <nd ref="344791555"/>
+ <nd ref="344791523"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Sheraton San Diego"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="31240535">
+ <nd ref="347336970"/>
+ <nd ref="347336971"/>
+ <nd ref="347336972"/>
+ <nd ref="2214898366"/>
+ <nd ref="347336973"/>
+ <nd ref="347336974"/>
+ <nd ref="2214898365"/>
+ <nd ref="347336975"/>
+ <nd ref="2214898362"/>
+ <nd ref="347336976"/>
+ <nd ref="2214898359"/>
+ <nd ref="347336977"/>
+ <nd ref="2214898356"/>
+ <nd ref="347336978"/>
+ <nd ref="347336979"/>
+ <nd ref="2214898348"/>
+ <nd ref="347336980"/>
+ <nd ref="2214898346"/>
+ <nd ref="347336982"/>
+ <nd ref="2214898341"/>
+ <nd ref="347336983"/>
+ <nd ref="2214898334"/>
+ <nd ref="347336984"/>
+ <nd ref="347336985"/>
+ <nd ref="2214898329"/>
+ <nd ref="2214898328"/>
+ <nd ref="2214898326"/>
+ <nd ref="2214898323"/>
+ <nd ref="347336986"/>
+ <nd ref="2214898324"/>
+ <nd ref="347337019"/>
+ <nd ref="347337020"/>
+ <nd ref="347337021"/>
+ <nd ref="347337022"/>
+ <nd ref="2214898339"/>
+ <nd ref="2214898342"/>
+ <nd ref="2214898344"/>
+ <nd ref="347337023"/>
+ <nd ref="2214898345"/>
+ <nd ref="347337024"/>
+ <nd ref="347337025"/>
+ <nd ref="347337026"/>
+ <nd ref="2214898352"/>
+ <nd ref="347337027"/>
+ <nd ref="2214898358"/>
+ <nd ref="347337028"/>
+ <nd ref="347337029"/>
+ <nd ref="2214898363"/>
+ <nd ref="347337030"/>
+ <nd ref="347337031"/>
+ <nd ref="347336970"/>
+ <tag k="addr:state" v="CA"/>
+ <tag k="building" v="yes"/>
+ <tag k="ele" v="69"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869915"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="name" v="San Diego Air &amp; Space Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="31285222">
+ <nd ref="348080361"/>
+ <nd ref="348080364"/>
+ <nd ref="349250108"/>
+ <nd ref="349249601"/>
+ <nd ref="349249602"/>
+ <nd ref="349249603"/>
+ <nd ref="349249604"/>
+ <nd ref="348080366"/>
+ <nd ref="348080368"/>
+ <nd ref="349250119"/>
+ <nd ref="348080369"/>
+ <nd ref="348080371"/>
+ <nd ref="1931116968"/>
+ <nd ref="1931116970"/>
+ <nd ref="348080372"/>
+ <nd ref="1935699172"/>
+ <nd ref="31528462"/>
+ <nd ref="31529938"/>
+ <nd ref="490691387"/>
+ <nd ref="31525714"/>
+ <nd ref="490691447"/>
+ <nd ref="490691460"/>
+ <nd ref="31526608"/>
+ <nd ref="31529266"/>
+ <nd ref="490691404"/>
+ <nd ref="490691417"/>
+ <nd ref="490691251"/>
+ <nd ref="31526039"/>
+ <nd ref="490691216"/>
+ <nd ref="31527311"/>
+ <nd ref="490691345"/>
+ <nd ref="490691359"/>
+ <nd ref="31525600"/>
+ <nd ref="1931041898"/>
+ <nd ref="31526572"/>
+ <nd ref="31529845"/>
+ <nd ref="490691283"/>
+ <nd ref="490691619"/>
+ <nd ref="31529952"/>
+ <nd ref="490691630"/>
+ <nd ref="490691666"/>
+ <nd ref="31525754"/>
+ <nd ref="31526965"/>
+ <nd ref="490691685"/>
+ <nd ref="31528578"/>
+ <nd ref="490691700"/>
+ <nd ref="490691706"/>
+ <nd ref="490691491"/>
+ <nd ref="490691544"/>
+ <nd ref="1931041893"/>
+ <nd ref="490691529"/>
+ <nd ref="31528799"/>
+ <nd ref="31530025"/>
+ <nd ref="31525581"/>
+ <nd ref="1935698964"/>
+ <nd ref="31526605"/>
+ <nd ref="31528719"/>
+ <nd ref="1931041878"/>
+ <nd ref="1931041880"/>
+ <nd ref="31530065"/>
+ <nd ref="1931041875"/>
+ <nd ref="490692003"/>
+ <nd ref="31526012"/>
+ <nd ref="31527127"/>
+ <nd ref="490691947"/>
+ <nd ref="490691958"/>
+ <nd ref="490692032"/>
+ <nd ref="348080361"/>
+ <tag k="area" v="yes"/>
+ <tag k="name" v="Paradise Point Resort and Spa"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="31430008">
+ <nd ref="350512810"/>
+ <nd ref="350512811"/>
+ <nd ref="350512812"/>
+ <nd ref="350512814"/>
+ <nd ref="350512810"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Westgate Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="31557331">
+ <nd ref="353117202"/>
+ <nd ref="353117203"/>
+ <nd ref="353117204"/>
+ <nd ref="353117205"/>
+ <nd ref="353117206"/>
+ <nd ref="353117208"/>
+ <nd ref="353117209"/>
+ <nd ref="353117210"/>
+ <nd ref="353117211"/>
+ <nd ref="353117212"/>
+ <nd ref="353117213"/>
+ <nd ref="353117214"/>
+ <nd ref="353117215"/>
+ <nd ref="353117216"/>
+ <nd ref="353117217"/>
+ <nd ref="353117219"/>
+ <nd ref="353117220"/>
+ <nd ref="353117221"/>
+ <nd ref="353117222"/>
+ <nd ref="353117223"/>
+ <nd ref="353117224"/>
+ <nd ref="353117225"/>
+ <nd ref="343862453"/>
+ <nd ref="343862452"/>
+ <nd ref="353117227"/>
+ <nd ref="353117228"/>
+ <nd ref="353117229"/>
+ <nd ref="353117230"/>
+ <nd ref="353117231"/>
+ <nd ref="353117232"/>
+ <nd ref="353117233"/>
+ <nd ref="353117234"/>
+ <nd ref="353117235"/>
+ <nd ref="353117236"/>
+ <nd ref="353117237"/>
+ <nd ref="353117238"/>
+ <nd ref="353117239"/>
+ <nd ref="353117240"/>
+ <nd ref="353117241"/>
+ <nd ref="353117242"/>
+ <nd ref="353117243"/>
+ <nd ref="353117244"/>
+ <nd ref="353117245"/>
+ <nd ref="353117246"/>
+ <nd ref="353117247"/>
+ <nd ref="353117248"/>
+ <nd ref="353117202"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="San Diego Marriott Marquis &amp; Marina"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="44047147">
+ <nd ref="559960416"/>
+ <nd ref="559960418"/>
+ <nd ref="559960407"/>
+ <nd ref="559960413"/>
+ <nd ref="559960420"/>
+ <nd ref="559960421"/>
+ <nd ref="559960414"/>
+ <nd ref="559960408"/>
+ <nd ref="559960416"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Residence Inn San Diego Sorrento Mesa/Sorrento Valley"/>
+ <tag k="operator" v="mariott"/>
+ <tag k="source" v="yahoo_imagery"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="47430554">
+ <nd ref="603688135"/>
+ <nd ref="603688137"/>
+ <nd ref="603688138"/>
+ <nd ref="603688139"/>
+ <nd ref="603688140"/>
+ <nd ref="603688141"/>
+ <nd ref="603688135"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Best Western Hacienda, Old Town"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="57247516">
+ <nd ref="712768229"/>
+ <nd ref="712768211"/>
+ <nd ref="712768216"/>
+ <nd ref="712768217"/>
+ <nd ref="712768219"/>
+ <nd ref="712768220"/>
+ <nd ref="712768221"/>
+ <nd ref="712768222"/>
+ <nd ref="712768223"/>
+ <nd ref="712768224"/>
+ <nd ref="712768225"/>
+ <nd ref="712768226"/>
+ <nd ref="712768227"/>
+ <nd ref="712768228"/>
+ <nd ref="712768229"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Woodfin Suites"/>
+ <tag k="operator" v="Woodfin"/>
+ <tag k="source" v="yahoo_imagery"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="60194724">
+ <nd ref="747653242"/>
+ <nd ref="747653244"/>
+ <nd ref="747653245"/>
+ <nd ref="747653246"/>
+ <nd ref="747653242"/>
+ <tag k="addr:state" v="CA"/>
+ <tag k="building" v="yes"/>
+ <tag k="ele" v="72"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="2084630"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="gnis:reviewed" v="no"/>
+ <tag k="name" v="San Diego Automotive Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="79288741">
+ <nd ref="925958656"/>
+ <nd ref="925958657"/>
+ <nd ref="925958658"/>
+ <nd ref="925958659"/>
+ <nd ref="925958660"/>
+ <nd ref="925958661"/>
+ <nd ref="925958662"/>
+ <nd ref="925958663"/>
+ <nd ref="925958656"/>
+ <tag k="addr:state" v="CA"/>
+ <tag k="building" v="yes"/>
+ <tag k="ele" v="89"/>
+ <tag k="gnis:county_name" v="San Diego"/>
+ <tag k="gnis:feature_id" v="1869905"/>
+ <tag k="gnis:import_uuid" v="57871b70-0100-4405-bb30-88b2e001a944"/>
+ <tag k="name" v="San Diego Natural History Museum"/>
+ <tag k="source" v="USGS Geonames"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="80619496">
+ <nd ref="940357701"/>
+ <nd ref="940357702"/>
+ <nd ref="940357703"/>
+ <nd ref="940357705"/>
+ <nd ref="940357706"/>
+ <nd ref="940357707"/>
+ <nd ref="940357708"/>
+ <nd ref="940357709"/>
+ <nd ref="940357710"/>
+ <nd ref="940357711"/>
+ <nd ref="940357712"/>
+ <nd ref="940357714"/>
+ <nd ref="940357715"/>
+ <nd ref="940357716"/>
+ <nd ref="940357701"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="The Dana"/>
+ <tag k="source" v="Yahoo"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="80619505">
+ <nd ref="940357718"/>
+ <nd ref="940357719"/>
+ <nd ref="940357720"/>
+ <nd ref="940357722"/>
+ <nd ref="940357723"/>
+ <nd ref="940357724"/>
+ <nd ref="940357725"/>
+ <nd ref="940357726"/>
+ <nd ref="940357727"/>
+ <nd ref="940357728"/>
+ <nd ref="940357729"/>
+ <nd ref="940357731"/>
+ <nd ref="940357732"/>
+ <nd ref="940357733"/>
+ <nd ref="940357734"/>
+ <nd ref="940357735"/>
+ <nd ref="940357736"/>
+ <nd ref="940357737"/>
+ <nd ref="940357738"/>
+ <nd ref="940357739"/>
+ <nd ref="940357740"/>
+ <nd ref="940357741"/>
+ <nd ref="940357743"/>
+ <nd ref="940357744"/>
+ <nd ref="940357745"/>
+ <nd ref="940357718"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="The Dana"/>
+ <tag k="source" v="Yahoo"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="132579338">
+ <nd ref="1458207107"/>
+ <nd ref="1458207067"/>
+ <nd ref="1458207043"/>
+ <nd ref="1458207045"/>
+ <nd ref="1458207152"/>
+ <nd ref="1458207140"/>
+ <nd ref="1458207120"/>
+ <nd ref="1458207126"/>
+ <nd ref="1458207081"/>
+ <nd ref="1458207114"/>
+ <nd ref="1458207118"/>
+ <nd ref="1458207108"/>
+ <nd ref="1458207112"/>
+ <nd ref="1458207091"/>
+ <nd ref="1458207036"/>
+ <nd ref="1458207041"/>
+ <nd ref="1458207119"/>
+ <nd ref="1458207035"/>
+ <nd ref="1458207107"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Holiday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="199790336">
+ <nd ref="2097842985"/>
+ <nd ref="2097842986"/>
+ <nd ref="2097842983"/>
+ <nd ref="2097842984"/>
+ <nd ref="2097842982"/>
+ <nd ref="2097842981"/>
+ <nd ref="2097842985"/>
+ <tag k="name" v="Rodeway Inn &amp; Suites"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="206942936">
+ <nd ref="2170321503"/>
+ <nd ref="2170321555"/>
+ <nd ref="2170321557"/>
+ <nd ref="2170321560"/>
+ <nd ref="2170321563"/>
+ <nd ref="2170321568"/>
+ <nd ref="2170321570"/>
+ <nd ref="2170321576"/>
+ <nd ref="2170321581"/>
+ <nd ref="2170230555"/>
+ <nd ref="2170230528"/>
+ <nd ref="2170321553"/>
+ <nd ref="2170321551"/>
+ <nd ref="2170321549"/>
+ <nd ref="2170321547"/>
+ <nd ref="2170321545"/>
+ <nd ref="2170321543"/>
+ <nd ref="2170321541"/>
+ <nd ref="2170321521"/>
+ <nd ref="2170321517"/>
+ <nd ref="2170321514"/>
+ <nd ref="2170321519"/>
+ <nd ref="2170321525"/>
+ <nd ref="2170321529"/>
+ <nd ref="2170321533"/>
+ <nd ref="2170321537"/>
+ <nd ref="2170321539"/>
+ <nd ref="2170321535"/>
+ <nd ref="2170321531"/>
+ <nd ref="2170321527"/>
+ <nd ref="2170321523"/>
+ <nd ref="2170321513"/>
+ <nd ref="2170321511"/>
+ <nd ref="2170321509"/>
+ <nd ref="2170321506"/>
+ <nd ref="2170321500"/>
+ <nd ref="2170321491"/>
+ <nd ref="2170321496"/>
+ <nd ref="2170321494"/>
+ <nd ref="2170321498"/>
+ <nd ref="2170321499"/>
+ <nd ref="2170321503"/>
+ <tag k="addr:city" v="San Diego"/>
+ <tag k="addr:country" v="US"/>
+ <tag k="addr:housenumber" v="500"/>
+ <tag k="addr:postcode" v="92108"/>
+ <tag k="addr:street" v="Hotel Circle North"/>
+ <tag k="is_in:city" v="San Diego"/>
+ <tag k="is_in:country" v="United States of America"/>
+ <tag k="is_in:country_code" v="US"/>
+ <tag k="is_in:state" v="California"/>
+ <tag k="is_in:state_code" v="CA"/>
+ <tag k="name" v="Town and Country Resort Hotel"/>
+ <tag k="source" v="SanGIS Addresses Public Domain (http://www.sangis.org/)"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.towncountry.com"/>
+ </way>
+ <way id="213277274">
+ <nd ref="2230082367"/>
+ <nd ref="2230082392"/>
+ <nd ref="2230082396"/>
+ <nd ref="2230082419"/>
+ <nd ref="2230082416"/>
+ <nd ref="2230082425"/>
+ <nd ref="2230082424"/>
+ <nd ref="2230082438"/>
+ <nd ref="2230082432"/>
+ <nd ref="2230082435"/>
+ <nd ref="2230082430"/>
+ <nd ref="2230082426"/>
+ <nd ref="2230082422"/>
+ <nd ref="2230082421"/>
+ <nd ref="2230082378"/>
+ <nd ref="2230082381"/>
+ <nd ref="2230082401"/>
+ <nd ref="2230082404"/>
+ <nd ref="2230082399"/>
+ <nd ref="2230082407"/>
+ <nd ref="2230082410"/>
+ <nd ref="2230082413"/>
+ <nd ref="2230082383"/>
+ <nd ref="2230082385"/>
+ <nd ref="2230082371"/>
+ <nd ref="2230082375"/>
+ <nd ref="2230082362"/>
+ <nd ref="2230082367"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Holiday Inn"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/san-diego/poi-client.conf b/test/poi-service/script/san-diego/poi-client.conf
new file mode 100644
index 0000000..63e07b2
--- /dev/null
+++ b/test/poi-service/script/san-diego/poi-client.conf
@@ -0,0 +1,48 @@
+[General]
+InvalidHandle=255
+PoiDisplayTableRows=15
+DefaultTextToSearch=enter text to search
+DefaultTextToBeInitialized=to be initialized
+DefaultRadius=100
+CAMName=org.genivi.poiservice.POIContentAccessModuleWeather
+MapWidthInMeter = 5000
+MapHeightInMeter = 5000
+TimerPeriodForPosition = 1000
+
+[Attribute]
+Source = source
+WebSite = website
+Phone = phone
+Stars = stars
+OpeningHours = openingHours
+Number = addrHouseNumber
+Street = addrStreet
+PostCode = addrPostCode
+City = addrCity
+
+[Weather]
+ZIPCode = ZIPCode
+ResponseText = ResponseText
+State = State
+City = City
+WeatherStationCity = WeatherStationCity
+WeatherID = WeatherID
+Description = Description
+Temperature = Temperature
+RelativeHumidity = RelativeHumidity
+Wind = Wind
+Pressure = Pressure
+Visibility = Visibility
+WindChill = WindChill
+Remarks = Remarks
+
+[Language]
+language=eng
+country=USA
+HMI=en
+
+[DefaultLocation]
+latitude=32.715684
+longitude=-117.15928
+altitude=37
+
diff --git a/test/poi-service/script/san-diego/station.xml b/test/poi-service/script/san-diego/station.xml
new file mode 100644
index 0000000..9442449
--- /dev/null
+++ b/test/poi-service/script/san-diego/station.xml
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-06-24T11:33:05Z"/>
+
+ <node id="48857638" lat="32.7057663" lon="-117.1531713">
+ <tag k="name" v="12th and Imperial Transit Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="48857670" lat="32.7165031" lon="-117.1688155">
+ <tag k="name" v="America Plaza"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="49495453" lat="32.7854328" lon="-117.0017203">
+ <tag k="name" v="Amaya Dr"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="49496693" lat="32.7084287" lon="-117.0950196">
+ <tag k="name" v="47th Street"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="274983237" lat="32.7058765" lon="-117.1245990">
+ <tag k="name" v="32nd/Commercial"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="295782228" lat="32.7804833" lon="-117.0974161">
+ <tag k="name" v="Grantville"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344551938" lat="32.7214941" lon="-117.1699555">
+ <tag k="name" v="County Center/Little Italy"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344552158" lat="32.7167353" lon="-117.1698168">
+ <tag k="name" v="Santa Fe Depot"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344552428" lat="32.7116399" lon="-117.1682697">
+ <tag k="name" v="Seaport Village"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344552548" lat="32.7089573" lon="-117.1634459">
+ <tag k="name" v="Convention Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344552646" lat="32.7069232" lon="-117.1597698">
+ <tag k="name" v="Gaslamp Quarter"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344558607" lat="32.7109806" lon="-117.1537262">
+ <tag k="name" v="Park and Market"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344559107" lat="32.7167467" lon="-117.1625114">
+ <tag k="name" v="Civic Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344559141" lat="32.7167692" lon="-117.1596096">
+ <tag k="name" v="5th Avenue"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344559498" lat="32.7161802" lon="-117.1541374">
+ <tag k="name" v="City College"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344559766" lat="32.7335357" lon="-117.1747015">
+ <tag k="name" v="Middletown"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344559903" lat="32.7415883" lon="-117.1842758">
+ <tag k="name" v="Washington Street"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560031" lat="32.7548849" lon="-117.1994929">
+ <tag k="name" v="Old Town Transit Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560202" lat="32.7635610" lon="-117.1968095">
+ <tag k="name" v="Morena/Linda Vista"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560363" lat="32.7655367" lon="-117.1687970">
+ <tag k="name" v="Fashion Valley Transit Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560561" lat="32.7702833" lon="-117.1581992">
+ <tag k="name" v="Hazard Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560574" lat="32.7711017" lon="-117.1499559">
+ <tag k="name" v="Mission Valley Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560650" lat="32.7783269" lon="-117.1271233">
+ <tag k="name" v="Fenton Parkway"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="344560663" lat="32.7810139" lon="-117.1196207">
+ <tag k="name" v="Qualcomm Stadium"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347410782" lat="32.7808782" lon="-117.1109828">
+ <tag k="name" v="Mission San Diego"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347413904" lat="32.7728439" lon="-117.0709833">
+ <tag k="name" v="SDSU Transit Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347997429" lat="32.7053233" lon="-117.1389945">
+ <tag k="name" v="25th/Commercial"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347998044" lat="32.7095593" lon="-117.0860013">
+ <tag k="name" v="Euclid Avenue"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347998216" lat="32.7101193" lon="-117.0631790">
+ <tag k="name" v="Encanto/62nd St."/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347998925" lat="32.7235227" lon="-117.0395802">
+ <tag k="name" v="Massachusetts Avenue"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347999054" lat="32.7433376" lon="-117.0307354">
+ <tag k="name" v="Lemon Grove Depot"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347999425" lat="32.7568512" lon="-117.0174588">
+ <tag k="name" v="Spring Street"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="347999846" lat="32.7649967" lon="-117.0205454">
+ <tag k="name" v="La Mesa Boulevard"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="348000644" lat="32.7722088" lon="-117.0422998">
+ <tag k="name" v="70th St."/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="348001379" lat="32.7773750" lon="-117.0567651">
+ <tag k="name" v="Alvarado Medical Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="348001749" lat="32.7816944" lon="-117.0112740">
+ <tag k="name" v="Grossmont Transit Center"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="1619736520" lat="32.7346493" lon="-117.1481097"/>
+ <node id="1619736524" lat="32.7346596" lon="-117.1480297"/>
+ <node id="1619736550" lat="32.7347929" lon="-117.1481371"/>
+ <node id="1619736552" lat="32.7348023" lon="-117.1480519"/>
+ <node id="1717500777" lat="32.7736547" lon="-117.1417635">
+ <tag k="name" v="Rio Vista"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <way id="148910128">
+ <nd ref="1619736550"/>
+ <nd ref="1619736552"/>
+ <nd ref="1619736524"/>
+ <nd ref="1619736520"/>
+ <nd ref="1619736550"/>
+ <tag k="name" v="San Diego Zoo Miniature Railroad"/>
+ <tag k="railway" v="station"/>
+ <tag k="tourism" v="attraction"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/tokyo/bicycle.xml b/test/poi-service/script/tokyo/bicycle.xml
new file mode 100644
index 0000000..2c81bf4
--- /dev/null
+++ b/test/poi-service/script/tokyo/bicycle.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-02-04T12:13:01Z"/>
+
+ <node id="822683026" lat="35.6975631" lon="139.6787833"/>
+ <node id="822683167" lat="35.6975483" lon="139.6789087"/>
+ <node id="822683192" lat="35.6977571" lon="139.6789500"/>
+ <node id="822683233" lat="35.6977757" lon="139.6788222"/>
+ <node id="1050803357" lat="35.6720652" lon="139.7122126"/>
+ <node id="1050803359" lat="35.6721908" lon="139.7124713"/>
+ <node id="1050803363" lat="35.6721954" lon="139.7122238"/>
+ <node id="1050803365" lat="35.6719578" lon="139.7125304"/>
+ <node id="1050803366" lat="35.6719623" lon="139.7124010"/>
+ <node id="1050803367" lat="35.6720583" lon="139.7123926"/>
+ <node id="1115426114" lat="35.7090104" lon="139.7089535">
+ <tag k="name" v="オリンピック サイクル"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1352143849" lat="35.7008320" lon="139.8011880">
+ <tag k="description" v="レンタサイクル"/>
+ <tag k="name" v="17Bicycle"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1580614679" lat="35.6709901" lon="139.7414690">
+ <tag k="name" v="Y'sROAD赤坂店"/>
+ <tag k="name:en" v="Y'sRoad Akasaka"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1635104287" lat="35.6942500" lon="139.7645257">
+ <tag k="name" v="Y'sROAD"/>
+ <tag k="service:bicycle:retail" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1763146176" lat="35.6591576" lon="139.7279059">
+ <tag k="name" v="Trekストア六本木"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="1837949124" lat="35.6549540" lon="139.7528220">
+ <tag k="name" v="シミズサイクル"/>
+ <tag k="phone" v="03-3432-6025"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="survey, bing"/>
+ </node>
+ <node id="1933333436" lat="35.7083455" lon="139.7079199">
+ <tag k="name" v="Lipit-Ischtar"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="website" v="http://www.lipit-ischtar.jp/"/>
+ </node>
+ <node id="2037964080" lat="35.6720467" lon="139.7124643">
+ <tag k="name" v="なるしまフレンド神宮店"/>
+ <tag k="name:en" v="Nalsima Frend"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041227773" lat="35.6582250" lon="139.7821385">
+ <tag k="name" v="バイシクルセオ 晴海店"/>
+ <tag k="name:en" v="bicycle seo harumi"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="bing"/>
+ </node>
+ <node id="2041460009" lat="35.6583389" lon="139.7034843">
+ <tag k="name" v="Y'sロード 渋谷レディース館"/>
+ <tag k="name:en" v="Y's Road Shibuya Ladies"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041460012" lat="35.6581504" lon="139.6969464">
+ <tag k="name" v="Y'sロード 渋谷本館"/>
+ <tag k="name:en" v="Y's Road Shibuya"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="bing,web"/>
+ </node>
+ <node id="2041470150" lat="35.6727962" lon="139.7590056">
+ <tag k="name" v="Y's Road 有楽町店"/>
+ <tag k="name:en" v="Y's Road Yuurakuchou"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041807441" lat="35.7059053" lon="139.7734549">
+ <tag k="name" v="Y'sRoad 上野アサゾー"/>
+ <tag k="name:en" v="Y'sRoad UenoAsazo"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041807442" lat="35.7052933" lon="139.7725175">
+ <tag k="name" v="Y'sRoad 上野テック館"/>
+ <tag k="name:en" v="Y'sRoad UenoTech"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041807443" lat="35.7053466" lon="139.7722640">
+ <tag k="name" v="Y'sRoad 上野本館"/>
+ <tag k="name:en" v="Y'sRoad UenoHonkan"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2041807444" lat="35.7058040" lon="139.7725778">
+ <tag k="name" v="Y'sRoad 上野ウェア館"/>
+ <tag k="name:en" v="Y'sRoad UenoWear"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <node id="2046013809" lat="35.6781012" lon="139.7051068">
+ <tag k="name" v="MapSports"/>
+ <tag k="shop" v="bicycle"/>
+ </node>
+ <way id="68327931">
+ <nd ref="822683192"/>
+ <nd ref="822683167"/>
+ <nd ref="822683026"/>
+ <nd ref="822683233"/>
+ <nd ref="822683192"/>
+ <tag k="name" v="東都サイクル"/>
+ <tag k="shop" v="bicycle"/>
+ </way>
+ <way id="90555954">
+ <nd ref="1050803363"/>
+ <nd ref="1050803359"/>
+ <nd ref="1050803365"/>
+ <nd ref="1050803366"/>
+ <nd ref="1050803367"/>
+ <nd ref="1050803357"/>
+ <nd ref="1050803363"/>
+ <tag k="building" v="yes"/>
+ <tag k="shop" v="bicycle"/>
+ <tag k="source" v="Bing"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/tokyo/museum-and-hotel.xml b/test/poi-service/script/tokyo/museum-and-hotel.xml
new file mode 100644
index 0000000..956b540
--- /dev/null
+++ b/test/poi-service/script/tokyo/museum-and-hotel.xml
@@ -0,0 +1,3284 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-02-04T12:10:01Z"/>
+
+ <node id="250668601" lat="35.7174181" lon="139.7737638">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Metropolitan Art Museum"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="250668605" lat="35.7102927" lon="139.7727604">
+ <tag k="name" v="Shitamachi Museum"/>
+ <tag k="name:fr" v="Musée Shitamachi"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="250668606" lat="35.7181531" lon="139.8016802">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Sky Court"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="250668618" lat="35.6788201" lon="139.7719028">
+ <tag k="name" v="Bridgestone Museum of Art"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="251055427" lat="35.6707003" lon="139.7133708">
+ <tag k="name" v="Watari-um Museum of Contemporary Art"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="251055429" lat="35.6614129" lon="139.6928144">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Toguri Museum of Art"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="251055437" lat="35.6855878" lon="139.7792244">
+ <tag k="created_by" v="JOSM"/>
+ <tag k="name" v="Hotel Sumisho"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="259964039" lat="35.6811948" lon="139.7385514"/>
+ <node id="259964048" lat="35.6812218" lon="139.7391966"/>
+ <node id="259964050" lat="35.6809473" lon="139.7392140"/>
+ <node id="259964051" lat="35.6809203" lon="139.7385688"/>
+ <node id="260409522" lat="35.6720877" lon="139.7595207">
+ <tag k="name" v="帝国ホテルタワー (THE IMPERIAL TOWER)"/>
+ <tag k="name:en" v="THE IMPERIAL TOWER"/>
+ <tag k="name:ja" v="帝国ホテルインペリアルタワー"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="260409527" lat="35.6722861" lon="139.7591634">
+ <tag k="created_by" v="Potlatch 0.8b"/>
+ <tag k="name" v="帝国ホテルプラザ"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="260426067" lat="35.6685856" lon="139.7575258">
+ <tag k="name" v="第一ホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="301584380" lat="35.7125281" lon="139.7820268">
+ <tag k="name" v="Chisun Hotel Ueno"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="url" v="http://www.solarehotels.com/english/chisun/hotel-ueno/guestroom/detail.html"/>
+ </node>
+ <node id="304153032" lat="35.6690813" lon="139.7599142">
+ <tag k="name" v="銀座日航ホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="309040735" lat="35.6680742" lon="139.6796751"/>
+ <node id="309040736" lat="35.6676370" lon="139.6795225"/>
+ <node id="309040739" lat="35.6675122" lon="139.6801214"/>
+ <node id="309040740" lat="35.6680320" lon="139.6805090"/>
+ <node id="309129365" lat="35.6624327" lon="139.6799370"/>
+ <node id="309129366" lat="35.6622723" lon="139.6799370"/>
+ <node id="309129367" lat="35.6622723" lon="139.6798855"/>
+ <node id="309129368" lat="35.6621747" lon="139.6798855">
+ <tag k="ele" v="48.1915283"/>
+ <tag k="name" v="037"/>
+ <tag k="wpt_description" v="2008-11-01 12:06:03PM"/>
+ </node>
+ <node id="309129369" lat="35.6621747" lon="139.6799456"/>
+ <node id="309129370" lat="35.6620492" lon="139.6799456">
+ <tag k="ele" v="57.8045654"/>
+ <tag k="name" v="021"/>
+ <tag k="wpt_description" v="2008-11-01 11:36:54AM"/>
+ </node>
+ <node id="309129371" lat="35.6620492" lon="139.6802546"/>
+ <node id="309129372" lat="35.6624327" lon="139.6802546">
+ <tag k="ele" v="56.6029053"/>
+ <tag k="name" v="024"/>
+ <tag k="wpt_description" v="2008-11-01 11:38:51AM"/>
+ </node>
+ <node id="309130630" lat="35.6629703" lon="139.6807370"/>
+ <node id="309130632" lat="35.6626155" lon="139.6807575"/>
+ <node id="309130633" lat="35.6626303" lon="139.6811029"/>
+ <node id="309130634" lat="35.6629853" lon="139.6810861"/>
+ <node id="309133105" lat="35.6624118" lon="139.6806237"/>
+ <node id="309133108" lat="35.6622584" lon="139.6806237"/>
+ <node id="309133109" lat="35.6622584" lon="139.6809326"/>
+ <node id="309133111" lat="35.6624118" lon="139.6809326"/>
+ <node id="336994074" lat="35.6595403" lon="139.7477720"/>
+ <node id="336994076" lat="35.6587872" lon="139.7476089"/>
+ <node id="336994079" lat="35.6588221" lon="139.7473256"/>
+ <node id="336994080" lat="35.6584106" lon="139.7472312"/>
+ <node id="336994083" lat="35.6583130" lon="139.7478235"/>
+ <node id="336994085" lat="35.6582502" lon="139.7483041"/>
+ <node id="336994086" lat="35.6594427" lon="139.7485530"/>
+ <node id="336995311" lat="35.6594776" lon="139.7482955"/>
+ <node id="336995312" lat="35.6596868" lon="139.7483299"/>
+ <node id="336995314" lat="35.6597217" lon="139.7480638"/>
+ <node id="336995316" lat="35.6595194" lon="139.7480209"/>
+ <node id="380527398" lat="35.7169442" lon="139.7767843"/>
+ <node id="380527399" lat="35.7175259" lon="139.7756090"/>
+ <node id="380527400" lat="35.7177489" lon="139.7751541"/>
+ <node id="380527401" lat="35.7186115" lon="139.7734489"/>
+ <node id="380527403" lat="35.7211886" lon="139.7755162"/>
+ <node id="380527404" lat="35.7207654" lon="139.7763247"/>
+ <node id="380527405" lat="35.7204100" lon="139.7764419"/>
+ <node id="380527406" lat="35.7195049" lon="139.7779522"/>
+ <node id="380527407" lat="35.7192340" lon="139.7782199"/>
+ <node id="380527408" lat="35.7180733" lon="139.7774056"/>
+ <node id="380538734" lat="35.7164619" lon="139.7734096"/>
+ <node id="380538736" lat="35.7169159" lon="139.7723482"/>
+ <node id="380538737" lat="35.7178867" lon="139.7726649"/>
+ <node id="380538738" lat="35.7172961" lon="139.7740059"/>
+ <node id="389635163" lat="35.6651396" lon="139.7373146">
+ <tag k="name" v="Hotel Villa Fontaine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="410166105" lat="35.7042958" lon="139.7640475">
+ <tag k="name" v="Japan Football Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="417434076" lat="35.6999399" lon="139.7404848">
+ <tag k="name" v="The AGNES"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="441655237" lat="35.7139665" lon="139.7751762">
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="441655802" lat="35.7123636" lon="139.7746955">
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="475090861" lat="35.6972950" lon="139.7020790">
+ <tag k="name" v="Vintage Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090874" lat="35.6886160" lon="139.6883990">
+ <tag k="name" v="Shinjuku New City Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090893" lat="35.6880000" lon="139.7183990">
+ <tag k="name" v="Jal City Yotsuya Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090896" lat="35.6868320" lon="139.6928560">
+ <tag k="name" v="Shinjuku Washington Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090897" lat="35.6928990" lon="139.7114180">
+ <tag k="name" v="Listel Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090901" lat="35.6943820" lon="139.6897740">
+ <tag k="name" v="Ascent Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090903" lat="35.6864420" lon="139.7003670">
+ <tag k="name" v="Century Southern Tower Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="475090904" lat="35.6947460" lon="139.7001210">
+ <tag k="name" v="Shinjuku Prince Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090905" lat="35.6993220" lon="139.7079320">
+ <tag k="name" v="Sunroute Higashi Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090913" lat="35.6953050" lon="139.7010650">
+ <tag k="name" v="Shinjuku Kent Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090915" lat="35.6860450" lon="139.7029785">
+ <tag k="name" v="Shinjuku Park Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090921" lat="35.6941540" lon="139.7070680">
+ <tag k="name" v="Shinjuku Sunlite Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090929" lat="35.6870907" lon="139.6988811">
+ <tag k="name" v="Sunroute Plaza Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090935" lat="35.6938283" lon="139.6980573">
+ <tag k="name" v="Shinjuku Ibis Hotel"/>
+ <tag k="source" v="survey, bing"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090940" lat="35.6973300" lon="139.6956630">
+ <tag k="name" v="Asuka Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090943" lat="35.6944200" lon="139.6937410">
+ <tag k="name" v="Rose Garden Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="475090954" lat="35.6949810" lon="139.6973420">
+ <tag k="name" v="Nishi Shinjuku Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="506125524" lat="35.7178541" lon="139.7589096">
+ <tag k="name" v="旅館 更新館"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="506214939" lat="35.7210857" lon="139.7649143">
+ <tag k="name" v="旅館 澤の屋"/>
+ <tag k="name:en" v="Ryokan Sawanoya"/>
+ <tag k="note" v="very famous japanese traditional ryokan, where many foreigner stayed"/>
+ <tag k="stars" v="4"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="559359753" lat="35.6681697" lon="139.7650004"/>
+ <node id="559359754" lat="35.6683669" lon="139.7652552"/>
+ <node id="559359755" lat="35.6687248" lon="139.7650022"/>
+ <node id="559359756" lat="35.6684601" lon="139.7646601"/>
+ <node id="567845214" lat="35.7150827" lon="139.7923817"/>
+ <node id="567845215" lat="35.7152723" lon="139.7914179"/>
+ <node id="567845216" lat="35.7158026" lon="139.7915356"/>
+ <node id="567845217" lat="35.7156601" lon="139.7924369"/>
+ <node id="573261208" lat="35.6871690" lon="139.7728800">
+ <tag k="name" v="マンダリンオリエンタル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="582347970" lat="35.6680126" lon="139.7406833">
+ <tag k="name" v="ANA International インターコンチネンタルホテル東京"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="597692326" lat="35.6631863" lon="139.6989863">
+ <tag k="name" v="渋谷東武ホテル (Tobu Hotel)"/>
+ <tag k="name:en" v="Tobu Hotel"/>
+ <tag k="name:ja" v="渋谷東武ホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="618102602" lat="35.6713329" lon="139.7331437">
+ <tag k="name" v="The b' Akasaka"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="654591533" lat="35.6855250" lon="139.7804440">
+ <tag k="name" v="Hotel Saibo"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="686510422" lat="35.6564057" lon="139.6988592"/>
+ <node id="696656255" lat="35.6560011" lon="139.6988620"/>
+ <node id="696656257" lat="35.6563029" lon="139.6987199"/>
+ <node id="696656260" lat="35.6567109" lon="139.6998100"/>
+ <node id="739064479" lat="35.6715601" lon="139.7378726">
+ <tag k="name" v="Avanshell Akasaka"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="742560942" lat="35.6564677" lon="139.6990559"/>
+ <node id="744436432" lat="35.6555096" lon="139.7041129">
+ <tag k="name" v="ホテルメッツ渋谷"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="760552145" lat="35.7109893" lon="139.7778475">
+ <tag k="name" v="Touganeya Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="789378440" lat="35.7131665" lon="139.7582836">
+ <tag k="name" v="フォレスト本郷"/>
+ <tag k="name:en" v="Hotel Forest Hongo"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="810644297" lat="35.6926301" lon="139.6913459">
+ <tag k="name" v="ヒルトンホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="810644323" lat="35.6907122" lon="139.6911633">
+ <tag k="name" v="ハイアットリージェンシー"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="820849494" lat="35.6661292" lon="139.7613463">
+ <tag k="name" v="旧新橋停車場鉄道歴史展示室"/>
+ <tag k="name:en" v="Old Shimbashi Station Railway History Exhibition Hall"/>
+ <tag k="name:ja_rm" v="Kyū Shinbashi Teishajō Tetsudō Rekishi Tenjishitsu"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="824067470" lat="35.6831833" lon="139.7432092"/>
+ <node id="824067471" lat="35.6828113" lon="139.7431474"/>
+ <node id="824067472" lat="35.6828188" lon="139.7435616"/>
+ <node id="824067473" lat="35.6829003" lon="139.7437346"/>
+ <node id="824067474" lat="35.6829363" lon="139.7437872"/>
+ <node id="824067475" lat="35.6829983" lon="139.7438275"/>
+ <node id="824067476" lat="35.6831099" lon="139.7438944"/>
+ <node id="898968882" lat="35.6965668" lon="139.7970381"/>
+ <node id="898968884" lat="35.6959758" lon="139.7968679"/>
+ <node id="898968885" lat="35.6963163" lon="139.7951152"/>
+ <node id="898968886" lat="35.6969131" lon="139.7952853"/>
+ <node id="919282036" lat="35.7114008" lon="139.7846196">
+ <tag k="name" v="Oak Hotel"/>
+ <tag k="operator" v="Oak Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="943714558" lat="35.7055736" lon="139.7550544">
+ <tag k="name" v="Grand Hotel Suidobashi"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="943719809" lat="35.7054280" lon="139.7557597">
+ <tag k="name" v="Hotel Wing International Korakuen"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="988763541" lat="35.6953485" lon="139.7512933">
+ <tag k="name" v="昭和館"/>
+ <tag k="opening_hours" v="火-日 10:00-17:30"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="992359885" lat="35.7047149" lon="139.7688829">
+ <tag k="name" v="Tristan"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="992359887" lat="35.7047541" lon="139.7678207">
+ <tag k="name" v="Linden"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="992384665" lat="35.7034430" lon="139.7675471">
+ <tag k="name" v="湯島御苑"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="992387880" lat="35.7046359" lon="139.7673534">
+ <tag k="name" v="Mari"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1004509113" lat="35.7066413" lon="139.7703478">
+ <tag k="name" v="Ueno First City Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1014529009" lat="35.6632693" lon="139.7008215"/>
+ <node id="1014529123" lat="35.6633497" lon="139.7010736"/>
+ <node id="1014529179" lat="35.6635545" lon="139.7007809"/>
+ <node id="1014529289" lat="35.6634594" lon="139.7011276"/>
+ <node id="1014529570" lat="35.6633168" lon="139.7007404"/>
+ <node id="1014529701" lat="35.6632802" lon="139.7009295"/>
+ <node id="1014529860" lat="35.6633973" lon="139.7010961"/>
+ <node id="1014529979" lat="35.6635253" lon="139.7011456"/>
+ <node id="1016728315" lat="35.6552293" lon="139.7469554"/>
+ <node id="1016728556" lat="35.6556471" lon="139.7469041"/>
+ <node id="1016728789" lat="35.6552017" lon="139.7471326"/>
+ <node id="1016729179" lat="35.6554601" lon="139.7473907"/>
+ <node id="1016729374" lat="35.6555279" lon="139.7468094"/>
+ <node id="1016729549" lat="35.6555936" lon="139.7473255"/>
+ <node id="1033221771" lat="35.7183533" lon="139.7772327"/>
+ <node id="1033221787" lat="35.7182256" lon="139.7773644"/>
+ <node id="1033221789" lat="35.7181997" lon="139.7768785"/>
+ <node id="1033221795" lat="35.7175233" lon="139.7762721"/>
+ <node id="1033221799" lat="35.7183092" lon="139.7772001"/>
+ <node id="1033221811" lat="35.7173323" lon="139.7766645"/>
+ <node id="1033221815" lat="35.7182724" lon="139.7773990"/>
+ <node id="1033221818" lat="35.7182380" lon="139.7767999"/>
+ <node id="1033221830" lat="35.7183954" lon="139.7770230"/>
+ <node id="1033221837" lat="35.7182400" lon="139.7773348"/>
+ <node id="1065897459" lat="35.7199148" lon="139.7746352"/>
+ <node id="1065943671" lat="35.7176744" lon="139.7773055"/>
+ <node id="1083607983" lat="35.6949709" lon="139.7564675">
+ <tag k="name" v="サクラホテル神保町 (Sakura Hotel Jimbocho)"/>
+ <tag k="name:en" v="Sakura Hotel Jimbocho"/>
+ <tag k="name:ja" v="サクラホテル神保町"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1094104240" lat="35.7103129" lon="139.7219645"/>
+ <node id="1094104289" lat="35.7101931" lon="139.7219860"/>
+ <node id="1094104299" lat="35.7101757" lon="139.7222730"/>
+ <node id="1094104308" lat="35.7103238" lon="139.7219082"/>
+ <node id="1094104313" lat="35.7104676" lon="139.7230240"/>
+ <node id="1094104339" lat="35.7098338" lon="139.7227316"/>
+ <node id="1094104342" lat="35.7101757" lon="139.7220021"/>
+ <node id="1094104344" lat="35.7107158" lon="139.7221254"/>
+ <node id="1094104374" lat="35.7101060" lon="139.7223856"/>
+ <node id="1094104419" lat="35.7101452" lon="139.7224419"/>
+ <node id="1094104462" lat="35.7101866" lon="139.7222274"/>
+ <node id="1094104506" lat="35.7100799" lon="139.7219726"/>
+ <node id="1094104531" lat="35.7101474" lon="139.7223025"/>
+ <node id="1094104554" lat="35.7101343" lon="139.7222971"/>
+ <node id="1094104557" lat="35.7101322" lon="139.7224956"/>
+ <node id="1094104583" lat="35.7101626" lon="139.7219779"/>
+ <node id="1094104585" lat="35.7100864" lon="139.7227343"/>
+ <node id="1094104621" lat="35.7102215" lon="139.7220021"/>
+ <node id="1094104622" lat="35.7101126" lon="139.7219887"/>
+ <node id="1094104625" lat="35.7098381" lon="139.7230320"/>
+ <node id="1094104695" lat="35.7102258" lon="139.7222408"/>
+ <node id="1094104703" lat="35.7101213" lon="139.7224366"/>
+ <node id="1094104722" lat="35.7101278" lon="139.7223963"/>
+ <node id="1094104729" lat="35.7101343" lon="139.7218894"/>
+ <node id="1094104755" lat="35.7101561" lon="139.7222622"/>
+ <node id="1094104758" lat="35.7100646" lon="139.7219216"/>
+ <node id="1094104761" lat="35.7101430" lon="139.7219940"/>
+ <node id="1094104793" lat="35.7101038" lon="139.7219618"/>
+ <node id="1094104914" lat="35.7101975" lon="139.7220182"/>
+ <node id="1094104923" lat="35.7102846" lon="139.7220316"/>
+ <node id="1094104945" lat="35.7101539" lon="139.7225144"/>
+ <node id="1094104956" lat="35.7101387" lon="139.7219672"/>
+ <node id="1094104961" lat="35.7104000" lon="139.7230133"/>
+ <node id="1094104987" lat="35.7101496" lon="139.7218465"/>
+ <node id="1116808041" lat="35.6619556" lon="139.7076631"/>
+ <node id="1116808048" lat="35.6620493" lon="139.7071937"/>
+ <node id="1116808050" lat="35.6619708" lon="139.7076416"/>
+ <node id="1116808074" lat="35.6620798" lon="139.7079072"/>
+ <node id="1116808075" lat="35.6619316" lon="139.7080118"/>
+ <node id="1116808084" lat="35.6616941" lon="139.7077194"/>
+ <node id="1116808105" lat="35.6616461" lon="139.7076094"/>
+ <node id="1116808107" lat="35.6624546" lon="139.7071883"/>
+ <node id="1116808109" lat="35.6622367" lon="139.7070864"/>
+ <node id="1116808111" lat="35.6616549" lon="139.7075558"/>
+ <node id="1116808135" lat="35.6617181" lon="139.7077382"/>
+ <node id="1116808171" lat="35.6623370" lon="139.7069952"/>
+ <node id="1116808192" lat="35.6616745" lon="139.7075156"/>
+ <node id="1116808194" lat="35.6621081" lon="139.7071588"/>
+ <node id="1116808282" lat="35.6616679" lon="139.7076792"/>
+ <node id="1116808285" lat="35.6621321" lon="139.7077784"/>
+ <node id="1116808288" lat="35.6622215" lon="139.7078830"/>
+ <node id="1116808305" lat="35.6620994" lon="139.7077355"/>
+ <node id="1116808313" lat="35.6621648" lon="139.7078508"/>
+ <node id="1116808317" lat="35.6621866" lon="139.7078750"/>
+ <node id="1116808348" lat="35.6620035" lon="139.7071400"/>
+ <node id="1116808351" lat="35.6617747" lon="139.7077516"/>
+ <node id="1116808362" lat="35.6617791" lon="139.7073761"/>
+ <node id="1116808382" lat="35.6620428" lon="139.7071025"/>
+ <node id="1116808428" lat="35.6617006" lon="139.7074807"/>
+ <node id="1116808472" lat="35.6618161" lon="139.7073707"/>
+ <node id="1116808507" lat="35.6625265" lon="139.7071374"/>
+ <node id="1116808572" lat="35.6617224" lon="139.7074646"/>
+ <node id="1116808590" lat="35.6617268" lon="139.7074217"/>
+ <node id="1116808597" lat="35.6619578" lon="139.7080386"/>
+ <node id="1116808599" lat="35.6618336" lon="139.7073788"/>
+ <node id="1116808632" lat="35.6620449" lon="139.7079715"/>
+ <node id="1116808639" lat="35.6619926" lon="139.7080332"/>
+ <node id="1116808686" lat="35.6621212" lon="139.7069657"/>
+ <node id="1116808725" lat="35.6626159" lon="139.7074431"/>
+ <node id="1116808733" lat="35.6617529" lon="139.7073922"/>
+ <node id="1116808758" lat="35.6626464" lon="139.7074968"/>
+ <node id="1116808793" lat="35.6620863" lon="139.7079367"/>
+ <node id="1116808840" lat="35.6620101" lon="139.7076845"/>
+ <node id="1116808888" lat="35.6620471" lon="139.7076953"/>
+ <node id="1116808951" lat="35.6620951" lon="139.7078964"/>
+ <node id="1116809007" lat="35.6626791" lon="139.7073922"/>
+ <node id="1116809012" lat="35.6620689" lon="139.7071722"/>
+ <node id="1129461705" lat="35.7118296" lon="139.7782141">
+ <tag k="fax" v="03-3839-1605"/>
+ <tag k="name" v="三井ガーデンホテル上野 (Mitsui Garden Hotel Ueno)"/>
+ <tag k="name:en" v="Mitsui Garden Hotel Ueno"/>
+ <tag k="name:ja" v="三井ガーデンホテル上野"/>
+ <tag k="phone" v="03-3839-1131"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.gardenhotels.co.jp/ueno"/>
+ </node>
+ <node id="1130555411" lat="35.7013020" lon="139.7659810">
+ <tag k="name" v="御茶ノ水 イン"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1138645897" lat="35.6982313" lon="139.7970745">
+ <tag k="name" v="第一ホテル 両国"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1177156749" lat="35.6664205" lon="139.6974467">
+ <tag k="name" v="NHK hall"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1177156758" lat="35.6647731" lon="139.6968566">
+ <tag k="name" v="NHK Studio Park"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1177160380" lat="35.6659065" lon="139.6977256">
+ <tag k="name" v="NHK fureai hall"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1178907123" lat="35.6651151" lon="139.6940483">
+ <tag k="name" v="Hotel New Washington"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1185605122" lat="35.6721908" lon="139.7423292">
+ <tag k="name" v="東横イン 溜池山王駅官邸南"/>
+ <tag k="source" v="bing"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1194227215" lat="35.6647393" lon="139.7277635"/>
+ <node id="1194227222" lat="35.6645299" lon="139.7259148"/>
+ <node id="1194227225" lat="35.6659787" lon="139.7271584"/>
+ <node id="1194227284" lat="35.6659868" lon="139.7257019"/>
+ <node id="1194227305" lat="35.6649032" lon="139.7252193"/>
+ <node id="1248297444" lat="35.6937575" lon="139.7716325">
+ <tag k="layer" v="0"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1253627651" lat="35.6682772" lon="139.7407400">
+ <tag k="name" v="ANA Intercontinental Tokyo"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1253627755" lat="35.6678262" lon="139.7441491">
+ <tag k="name" v="Hotel Okura North Wing"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1253627992" lat="35.6661219" lon="139.7429607">
+ <tag k="name" v="Hotel Okura South Wing"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1253630889" lat="35.6675953" lon="139.7302099">
+ <tag k="name" v="21/21 Art Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1314077026" lat="35.6892968" lon="139.6941595"/>
+ <node id="1314077028" lat="35.6893334" lon="139.6940529"/>
+ <node id="1314077029" lat="35.6893507" lon="139.6941476"/>
+ <node id="1314077032" lat="35.6894373" lon="139.6949579"/>
+ <node id="1314077036" lat="35.6896451" lon="139.6939723"/>
+ <node id="1314077037" lat="35.6896567" lon="139.6940339"/>
+ <node id="1314077038" lat="35.6896641" lon="139.6960780"/>
+ <node id="1314077039" lat="35.6896756" lon="139.6962709"/>
+ <node id="1314077040" lat="35.6897029" lon="139.6940244"/>
+ <node id="1314077042" lat="35.6897048" lon="139.6939936"/>
+ <node id="1314077045" lat="35.6898199" lon="139.6960649"/>
+ <node id="1314077046" lat="35.6898332" lon="139.6962579"/>
+ <node id="1314077053" lat="35.6904687" lon="139.6938231"/>
+ <node id="1314077056" lat="35.6906034" lon="139.6946523"/>
+ <node id="1326424640" lat="35.6684322" lon="139.7651786"/>
+ <node id="1326424644" lat="35.6684411" lon="139.7651902"/>
+ <node id="1326424652" lat="35.6685458" lon="139.7650675"/>
+ <node id="1326424654" lat="35.6686044" lon="139.7651433"/>
+ <node id="1327332410" lat="35.6751977" lon="139.7697299"/>
+ <node id="1327332411" lat="35.6752745" lon="139.7697821"/>
+ <node id="1327332412" lat="35.6753232" lon="139.7696541"/>
+ <node id="1327332413" lat="35.6753312" lon="139.7693923"/>
+ <node id="1327332414" lat="35.6753528" lon="139.7696728"/>
+ <node id="1327332417" lat="35.6754368" lon="139.7694572"/>
+ <node id="1327962100" lat="35.6761848" lon="139.7674068"/>
+ <node id="1327962118" lat="35.6764380" lon="139.7668197"/>
+ <node id="1327962126" lat="35.6764609" lon="139.7675715"/>
+ <node id="1327962127" lat="35.6767152" lon="139.7669915"/>
+ <node id="1350269516" lat="35.6854395" lon="139.7716029">
+ <tag k="name" v="貨幣博物館"/>
+ <tag k="name:en" v="Currency Museum"/>
+ <tag k="name:ja_rm" v="Kahei Hakubutsukan"/>
+ <tag k="operator" v="日本銀行金融研究所"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1363608366" lat="35.6867112" lon="139.7275902">
+ <tag k="name" v="Mitsui Garden Hotel, Yotsuya"/>
+ <tag k="rooms" v="121"/>
+ <tag k="stars" v="3"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1367401517" lat="35.6802373" lon="139.7335367"/>
+ <node id="1367401518" lat="35.6804177" lon="139.7339107"/>
+ <node id="1367401525" lat="35.6803304" lon="139.7339126"/>
+ <node id="1367401527" lat="35.6805790" lon="139.7334197"/>
+ <node id="1367401529" lat="35.6805835" lon="139.7334961"/>
+ <node id="1367401531" lat="35.6811127" lon="139.7338480"/>
+ <node id="1367401533" lat="35.6804319" lon="139.7344309"/>
+ <node id="1367401535" lat="35.6810085" lon="139.7338306"/>
+ <node id="1367401536" lat="35.6815301" lon="139.7344313"/>
+ <node id="1367401537" lat="35.6812283" lon="139.7342348"/>
+ <node id="1367401538" lat="35.6810041" lon="139.7335034"/>
+ <node id="1367401540" lat="35.6812130" lon="139.7339402"/>
+ <node id="1367401541" lat="35.6812405" lon="139.7340018"/>
+ <node id="1367401542" lat="35.6806499" lon="139.7346409"/>
+ <node id="1367401543" lat="35.6816092" lon="139.7342528"/>
+ <node id="1367401545" lat="35.6805801" lon="139.7344261"/>
+ <node id="1367460965" lat="35.6785670" lon="139.7825850">
+ <tag k="name" v="Hotel Villa Fontaine"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1401917496" lat="35.7097641" lon="139.7751715">
+ <tag k="name" v="オリエンタル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1420764123" lat="35.6633140" lon="139.6995260">
+ <tag k="KSJ2:ADS" v="神南1-16-8"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="たばこと塩の博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765070" lat="35.7080560" lon="139.7953150">
+ <tag k="KSJ2:ADS" v="駒形1-8-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="エース世界のバッグ&ラゲージ館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765132" lat="35.6781630" lon="139.7353010">
+ <tag k="KSJ2:ADS" v="元赤坂1-2-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="サントリー美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765213" lat="35.7025130" lon="139.7597660">
+ <tag k="KSJ2:ADS" v="本郷2-2-9"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="センチュリーミュージアム"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765258" lat="35.6810140" lon="139.7341030">
+ <tag k="KSJ2:ADS" v="紀尾井町4-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="ニューオータニ美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765301" lat="35.6785710" lon="139.7715440">
+ <tag k="KSJ2:ADS" v="京橋1-10-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="ブリヂストン美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765367" lat="35.6768730" lon="139.7704970">
+ <tag k="KSJ2:ADS" v="京橋2-6-21"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="ペンステーション"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765422" lat="35.6706980" lon="139.7133710">
+ <tag k="KSJ2:ADS" v="神宮前3-7-6"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="ワタリウム美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765471" lat="35.6869380" lon="139.7730550">
+ <tag k="KSJ2:ADS" v="日本橋室町2-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="三井記念美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420765895" lat="35.7128450" lon="139.7747090">
+ <tag k="KSJ2:ADS" v="上野公園1-2"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="上野の森美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420766180" lat="35.6664620" lon="139.7681310">
+ <tag k="KSJ2:ADS" v="築地4-15-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="中央区立築地社会教育会館・郷土資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420766948" lat="35.6816820" lon="139.7149760">
+ <tag k="KSJ2:ADS" v="大京町31-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="佐藤美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420767886" lat="35.6825530" lon="139.7755990">
+ <tag k="KSJ2:ADS" v="日本橋1-12-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="凧の博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420767888" lat="35.6814885" lon="139.6906746">
+ <tag k="KSJ2:ADS" v="代々木4-25-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="刀剣博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420767889" lat="35.7182320" lon="139.7059370">
+ <tag k="KSJ2:ADS" v="目白1-4-23"/>
+ <tag k="KSJ2:AdminArea" v="東京都豊島区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="切手の博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420770189" lat="35.6894740" lon="139.7397490">
+ <tag k="KSJ2:ADS" v="四番町1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="千代田区立四番町歴史民俗資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420770260" lat="35.6932630" lon="139.7464900">
+ <tag k="KSJ2:ADS" v="九段南2-1-36"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="千秋文庫博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420770935" lat="35.7092240" lon="139.7416070">
+ <tag k="KSJ2:ADS" v="水道1-3-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="印刷博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771079" lat="35.6676979" lon="139.6800138">
+ <tag k="KSJ2:ADS" v="上原3-6-12"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="古賀政男音楽博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771098" lat="35.7171446" lon="139.7900472">
+ <tag k="KSJ2:ADS" v="西浅草3-25-6"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="台東区立一葉記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771099" lat="35.7123930" lon="139.7711900">
+ <tag k="KSJ2:ADS" v="上野公園2-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="台東区立下町風俗資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771165" lat="35.6623440" lon="139.7403780">
+ <tag k="KSJ2:ADS" v="麻布台1-1-12"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="吉田苞竹記念会館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771652" lat="35.6949510" lon="139.7292730">
+ <tag k="KSJ2:ADS" v="市谷本村町9-5"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="国立印刷局博物館(お札と切手の博物館)"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771752" lat="35.6555460" lon="139.7119730">
+ <tag k="KSJ2:ADS" v="東4-10-28"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="國學院大學神道資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420771753" lat="35.6555460" lon="139.7119730">
+ <tag k="KSJ2:ADS" v="東4-10-28"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="國學院大學考古学資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420772919" lat="35.6669330" lon="139.7431020">
+ <tag k="KSJ2:ADS" v="虎ノ門2-10-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="大倉集古館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420772944" lat="35.7212890" lon="139.7661820">
+ <tag k="KSJ2:ADS" v="谷中2-1-27"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="大名時計博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420774624" lat="35.6917760" lon="139.7644180">
+ <tag k="KSJ2:ADS" v="神田錦町1-9"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="天理ギャラリー"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420774658" lat="35.6693982" lon="139.7049049">
+ <tag k="KSJ2:ADS" v="神宮前1-10-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="太田記念美術館 (Ota Memorial Museum of Art)"/>
+ <tag k="name:en" v="Ota Memorial Museum of Art"/>
+ <tag k="name:ja" v="太田記念美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420774661" lat="35.7118150" lon="139.7917790">
+ <tag k="KSJ2:ADS" v="西浅草2-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="太皷館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420774846" lat="35.7201200" lon="139.7090200">
+ <tag k="KSJ2:ADS" v="目白1-5-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都豊島区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="学習院大学史料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420775014" lat="35.6838080" lon="139.7540980">
+ <tag k="KSJ2:ADS" v="千代田1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="国"/>
+ <tag k="name" v="宮内庁 三の丸尚蔵館 (Sannomaru-Shōzōkan)"/>
+ <tag k="name:en" v="Museum of the Imperial Collections"/>
+ <tag k="name:fr" v="Musée des collections impériales"/>
+ <tag k="name:ja_kana" v="さんのまるしょうぞうかん"/>
+ <tag k="name:ja_rm" v="Sannomaru-Shōzōkan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420775065" lat="35.6997580" lon="139.7368450">
+ <tag k="KSJ2:ADS" v="中町35"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="宮城道雄記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420777041" lat="35.6907360" lon="139.7459900">
+ <tag k="KSJ2:ADS" v="三番町2"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="山種美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420779754" lat="35.6912618" lon="139.6925118">
+ <tag k="KSJ2:ADS" v="西新宿2-6-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="平和祈念展示資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780101" lat="35.7150760" lon="139.7632890">
+ <tag k="KSJ2:ADS" v="弥生2-4-3・弥生2-4-2"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="弥生美術館・竹久夢二美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780390" lat="35.6783980" lon="139.7470120">
+ <tag k="KSJ2:ADS" v="永田町1-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="国"/>
+ <tag k="name" v="憲政記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780494" lat="35.6613210" lon="139.6927730">
+ <tag k="KSJ2:ADS" v="松濤1-11-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="戸栗美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780611" lat="35.6927620" lon="139.6961610">
+ <tag k="KSJ2:ADS" v="西新宿1-26-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="損保ジャパン東郷青児美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780641" lat="35.7079840" lon="139.7565820">
+ <tag k="KSJ2:ADS" v="本郷4-9-29"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="文京ふるさと歴史館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780738" lat="35.6863220" lon="139.6950100">
+ <tag k="KSJ2:ADS" v="代々木3-22-7"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="文化学園服飾博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780821" lat="35.6900130" lon="139.7256300">
+ <tag k="KSJ2:ADS" v="三栄町22"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="新宿歴史博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780833" lat="35.6911000" lon="139.7107420">
+ <tag k="KSJ2:ADS" v="新宿1-34-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="新宿美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420780980" lat="35.6858970" lon="139.7423940">
+ <tag k="KSJ2:ADS" v="一番町25"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="日本カメラ博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781050" lat="35.7163160" lon="139.7198800">
+ <tag k="KSJ2:ADS" v="目白台2-8-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="日本女子大学成瀬記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781094" lat="35.6608490" lon="139.6792190">
+ <tag k="KSJ2:ADS" v="駒場4-3-33"/>
+ <tag k="KSJ2:AdminArea" v="東京都目黒区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="日本民藝館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781152" lat="35.6853720" lon="139.7718250">
+ <tag k="KSJ2:ADS" v="日本橋本石町1-3-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="日本銀行金融研究所貨幣博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781297" lat="35.7099831" lon="139.7195469">
+ <tag k="KSJ2:ADS" v="戸塚町1-104"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="早稲田大学坪内博士記念演劇博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781298" lat="35.7085540" lon="139.7203599">
+ <tag k="KSJ2:ADS" v="戸塚町1-104"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="amenity" v="university"/>
+ <tag k="name" v="早稲田大学會津八一記念博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781347" lat="35.6986987" lon="139.7621517">
+ <tag k="KSJ2:ADS" v="神田駿河台1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="layer" v="-1"/>
+ <tag k="name" v="明治大学博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781360" lat="35.6798979" lon="139.6980080">
+ <tag k="KSJ2:ADS" v="代々木神園町1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="明治神宮宝物殿"/>
+ <tag k="name:en" v="Meiji Jingu Treasure Museum"/>
+ <tag k="name:fr" v="Musée des trésors du sanctuaire Meiji"/>
+ <tag k="name:ja_rm" v="Meiji-jingū Hōmotsuden"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420781361" lat="35.6788480" lon="139.7176870">
+ <tag k="KSJ2:ADS" v="霞ケ丘9"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="明治神宮聖徳記念絵画館 (Meiji Memorial Picture Gallery)"/>
+ <tag k="name:en" v="Meiji Memorial Picture Gallery"/>
+ <tag k="name:ja" v="明治神宮聖徳記念絵画館"/>
+ <tag k="name:ja_kana" v="めいじじんぐうせいとくきねんかいがかん"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="ja:聖徳記念絵画館"/>
+ </node>
+ <node id="1420781432" lat="35.6949880" lon="139.7507500">
+ <tag k="KSJ2:ADS" v="九段南1-6-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="国"/>
+ <tag k="name" v="昭和館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420782618" lat="35.6830030" lon="139.6867560">
+ <tag k="KSJ2:ADS" v="西新宿3-20-2"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="東京オペラシティアートギャラリー"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420783223" lat="35.7188170" lon="139.7764030">
+ <tag k="KSJ2:ADS" v="上野公園13-9"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="本館 (Honkan)"/>
+ <tag k="name:de" v="Honkan"/>
+ <tag k="name:en" v="Honkan"/>
+ <tag k="name:et" v="Honkan"/>
+ <tag k="name:fr" v="Honkan"/>
+ <tag k="name:ja" v="本館"/>
+ <tag k="name:ja_kana" v="ほんかん"/>
+ <tag k="name:ja_rm" v="honkan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="ja:東京国立博物館"/>
+ </node>
+ <node id="1420783571" lat="35.6598250" lon="139.6848360">
+ <tag k="KSJ2:ADS" v="駒場3-8-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都目黒区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="東京大学大学院総合文化研究科教養学部美術博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420783585" lat="35.7117690" lon="139.7654830">
+ <tag k="KSJ2:ADS" v="本郷7-3-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="東京大学総合研究博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420783591" lat="35.7213300" lon="139.7410080">
+ <tag k="KSJ2:ADS" v="白山3-7-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="東京大学総合研究博物館・小石川分館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420783718" lat="35.6971880" lon="139.7202900">
+ <tag k="KSJ2:ADS" v="河田町8-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="東京女子医科大学史料室・吉岡彌生記念室"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420784678" lat="35.6881540" lon="139.7198849">
+ <tag k="KSJ2:ADS" v="四谷3-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="都道府県"/>
+ <tag k="addr:postcode" v="160-0004"/>
+ <tag k="fax" v="+81-3-33539925"/>
+ <tag k="name" v="東京消防庁消防防災資料センター消防博物館"/>
+ <tag k="name:ja" v="消防博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="opening_hours" v="Tu-Su 09:30-17:00; Mo off"/>
+ <tag k="phone" v="+81-3-33539119"/>
+ <tag k="source" v="KSJ2; (URL)"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.tfd.metro.tokyo.jp/ts/museum.html"/>
+ <tag k="wikipedia" v="ja:消防博物館"/>
+ </node>
+ <node id="1420785063" lat="35.7199240" lon="139.7718360">
+ <tag k="KSJ2:ADS" v="上野公園12-8"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="東京藝術大学大学美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420785319" lat="35.6543600" lon="139.7616580">
+ <tag k="KSJ2:ADS" v="海岸1-13-17"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="都道府県"/>
+ <tag k="name" v="東京都公文書館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420785371" lat="35.6997950" lon="139.7969030">
+ <tag k="KSJ2:ADS" v="横網2-3-25"/>
+ <tag k="KSJ2:AdminArea" v="東京都墨田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="都道府県"/>
+ <tag k="name" v="東京都復興記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420785386" lat="35.7033139" lon="139.7604984">
+ <tag k="KSJ2:ADS" v="本郷2-7-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="都道府県"/>
+ <tag k="name" v="東京都水道歴史館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420785523" lat="35.6545090" lon="139.6846150">
+ <tag k="KSJ2:ADS" v="大橋2-18-58"/>
+ <tag k="KSJ2:AdminArea" v="東京都目黒区"/>
+ <tag k="KSJ2:PubFacAdmin" v="都道府県"/>
+ <tag k="name" v="東京都立芸術高等学校美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420785567" lat="35.7174010" lon="139.7728200">
+ <tag k="KSJ2:ADS" v="上野公園8-36"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="東京都美術館 (Tokyo Metropolitan Art Museum)"/>
+ <tag k="name:en" v="Tokyo Metropolitan Art Museum"/>
+ <tag k="name:fr" v="Musée d'art de la ville de Tōkyō"/>
+ <tag k="name:ja" v="東京都美術館"/>
+ <tag k="name:ja_kana" v="とうきょうとびじゅつかん"/>
+ <tag k="name:ja_rm" v="Tōkyōto Bijutsukan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:東京都美術館"/>
+ </node>
+ <node id="1420786016" lat="35.6658280" lon="139.7618820">
+ <tag k="KSJ2:ADS" v="東新橋1-5-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="松下電工汐留ミュージアム"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420786226" lat="35.6622100" lon="139.7170210">
+ <tag k="KSJ2:ADS" v="南青山6-5-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="根津美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420786660" lat="35.6604320" lon="139.7292610">
+ <tag k="KSJ2:ADS" v="六本木6-10-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="森美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="1420786672" lat="35.7121790" lon="139.7681820">
+ <tag k="KSJ2:ADS" v="池之端1-4-24"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="横山大観記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787066" lat="35.6825030" lon="139.7192310">
+ <tag k="KSJ2:ADS" v="信濃町8"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="民音音楽博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787285" lat="35.7131770" lon="139.7233520">
+ <tag k="KSJ2:ADS" v="目白台1-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="永青文庫"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787693" lat="35.6851510" lon="139.8021450">
+ <tag k="KSJ2:ADS" v="森下3-12-17"/>
+ <tag k="KSJ2:AdminArea" v="東京都江東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="江東区森下文化センター「田河水泡・のらくろ館」"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787694" lat="35.6810519" lon="139.8005482">
+ <tag k="KSJ2:ADS" v="白河1-3-28"/>
+ <tag k="KSJ2:AdminArea" v="東京都江東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="江東区深川江戸資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787712" lat="35.6861290" lon="139.7940920">
+ <tag k="KSJ2:ADS" v="常盤1-6-3"/>
+ <tag k="KSJ2:AdminArea" v="東京都江東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="江東区芭蕉記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420787831" lat="35.6650330" lon="139.7410680">
+ <tag k="KSJ2:ADS" v="六本木1-5-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="泉屋博古館分館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420789169" lat="35.6586810" lon="139.6918120">
+ <tag k="KSJ2:ADS" v="松濤2-14-14"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="市区町村"/>
+ <tag k="name" v="渋谷区立松濤美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420789600" lat="35.6905370" lon="139.7546180">
+ <tag k="KSJ2:ADS" v="北の丸公園3-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="独立行政法人国立美術館・東京国立近代美術館 (Independent Administrative Institution - The National Museum of Modern Art,Tokyo)"/>
+ <tag k="name:en" v="Independent Administrative Institution - The National Museum of Modern Art,Tokyo"/>
+ <tag k="name:fr" v="Musée national d'art moderne de Tokyo"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.momat.go.jp/"/>
+ </node>
+ <node id="1420789601" lat="35.6756270" lon="139.7705120">
+ <tag k="KSJ2:ADS" v="京橋3-7-6"/>
+ <tag k="KSJ2:AdminArea" v="東京都中央区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="独立行政法人国立美術館・東京国立近代美術館フィルムセンター"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420789610" lat="35.6897070" lon="139.7503840">
+ <tag k="KSJ2:ADS" v="北の丸公園1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="独立行政法人国立美術館・東京国立近代美術館工芸館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420790652" lat="35.6972706" lon="139.7932372">
+ <tag k="KSJ2:ADS" v="横網1-3-28"/>
+ <tag k="KSJ2:AdminArea" v="東京都墨田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="addr:postcode" v="130-0015"/>
+ <tag k="fee" v="no"/>
+ <tag k="level" v="0"/>
+ <tag k="name" v="相撲博物館"/>
+ <tag k="name:en" v="Sumo Museum"/>
+ <tag k="name:ja" v="相撲博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="opening_hours" v="Mo-Fr 10:00-16:00; Sa,Su,PH off"/>
+ <tag k="operator" v="日本相撲協会"/>
+ <tag k="phone" v="+81-3-36220366"/>
+ <tag k="source" v="KSJ2; (URL)"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.sumo.or.jp/museum/"/>
+ <tag k="wikipedia" v="ja:相撲博物館"/>
+ </node>
+ <node id="1420795316" lat="35.6916530" lon="139.7531000">
+ <tag k="KSJ2:ADS" v="北の丸公園2-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="科学技術館 (Science Museum)"/>
+ <tag k="name:en" v="Science Museum"/>
+ <tag k="name:ja" v="科学技術館"/>
+ <tag k="name:ja_kana" v="かがくぎじゅつかん"/>
+ <tag k="name:ja_rm" v="Kagakugijutsu-kan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="ja:科学技術館"/>
+ </node>
+ <node id="1420795318" lat="35.6783320" lon="139.7140760">
+ <tag k="KSJ2:ADS" v="霞ヶ丘町10-2"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="秩父宮記念スポーツ博物館 (Prince Chichibu Memorial Sports Museum)"/>
+ <tag k="name:en" v="Prince Chichibu Memorial Sports Museum"/>
+ <tag k="name:ja" v="秩父宮記念スポーツ博物館"/>
+ <tag k="name:ja_kana" v="ちちぶのみやきねんすぽーつはくぶつかん"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420796437" lat="35.6916418" lon="139.7530944">
+ <tag k="KSJ2:ADS" v="北の丸公園2-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="自転車文化センター (Bicycle culture center)"/>
+ <tag k="name:en" v="Bicycle culture center"/>
+ <tag k="name:ja" v="自転車文化センター"/>
+ <tag k="name:ja_kana" v="じてんしゃぶんかセンター"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420796583" lat="35.6740850" lon="139.7293140">
+ <tag k="KSJ2:ADS" v="赤坂7-2-21"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="草月美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420797074" lat="35.6660410" lon="139.7446050">
+ <tag k="KSJ2:ADS" v="虎ノ門4-1-35"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="菊池寛実記念智美術館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420797402" lat="35.6752420" lon="139.7325920">
+ <tag k="KSJ2:ADS" v="赤坂4-9-22"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="虎屋ギャラリー"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420798047" lat="35.7140180" lon="139.7250330">
+ <tag k="KSJ2:ADS" v="関口2-11-30"/>
+ <tag k="KSJ2:AdminArea" v="東京都文京区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="講談社野間記念館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420798594" lat="35.6869870" lon="139.7667940">
+ <tag k="KSJ2:ADS" v="大手町2-3-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="国"/>
+ <tag k="name" v="逓信総合博物館"/>
+ <tag k="name:en" v="Communications Museum"/>
+ <tag k="name:ja_rm" v="Teishin Sōgō Hakubutsukan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420799298" lat="35.6837530" lon="139.7162890">
+ <tag k="KSJ2:ADS" v="大京町26"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="野口英世記念会館展示室"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420799355" lat="35.6908680" lon="139.7195200">
+ <tag k="KSJ2:ADS" v="愛住町18-7"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="釣り文化資料館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420799807" lat="35.6634387" lon="139.7010350">
+ <tag k="KSJ2:ADS" v="神南1-12-10"/>
+ <tag k="KSJ2:AdminArea" v="東京都渋谷区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="disused" v="yes"/>
+ <tag k="name" v="電力館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420800050" lat="35.6953399" lon="139.7431729">
+ <tag k="KSJ2:ADS" v="九段北3-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都千代田区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="靖國神社遊就館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420800487" lat="35.6984310" lon="139.7037590">
+ <tag k="KSJ2:ADS" v="大久保1-12-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都新宿区"/>
+ <tag k="KSJ2:PubFacAdmin" v="民間"/>
+ <tag k="name" v="高麗博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1420800638" lat="35.6637110" lon="139.7483240">
+ <tag k="KSJ2:ADS" v="愛宕2-1-1"/>
+ <tag k="KSJ2:AdminArea" v="東京都港区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="NHK放送博物館"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1467794586" lat="35.6608465" lon="139.6788868"/>
+ <node id="1467794587" lat="35.6608483" lon="139.6789615"/>
+ <node id="1467794588" lat="35.6609355" lon="139.6787316"/>
+ <node id="1467794589" lat="35.6609393" lon="139.6788832"/>
+ <node id="1467794590" lat="35.6610195" lon="139.6788855"/>
+ <node id="1467794591" lat="35.6610213" lon="139.6789549"/>
+ <node id="1467794592" lat="35.6610370" lon="139.6787277"/>
+ <node id="1467794593" lat="35.6610410" lon="139.6788847"/>
+ <node id="1467808141" lat="35.6607181" lon="139.6791155"/>
+ <node id="1467808142" lat="35.6607267" lon="139.6794537"/>
+ <node id="1467808147" lat="35.6607854" lon="139.6791128"/>
+ <node id="1467808148" lat="35.6607867" lon="139.6791615"/>
+ <node id="1467808150" lat="35.6607941" lon="139.6794511"/>
+ <node id="1467808169" lat="35.6608605" lon="139.6791115"/>
+ <node id="1467808173" lat="35.6608617" lon="139.6791586"/>
+ <node id="1467808201" lat="35.6609328" lon="139.6791087"/>
+ <node id="1467808203" lat="35.6609340" lon="139.6791558"/>
+ <node id="1467808205" lat="35.6609414" lon="139.6794454"/>
+ <node id="1475722975" lat="35.6567729" lon="139.7526240">
+ <tag k="name" v="芝大門ホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1484933111" lat="35.6628788" lon="139.7736397">
+ <tag k="name" v="かちどき 橋の資料館"/>
+ <tag k="opening_hours" v="Tu,Th-Sa 09:30-16:30"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1490205462" lat="35.6764498" lon="139.7377190"/>
+ <node id="1490205466" lat="35.6765681" lon="139.7379456"/>
+ <node id="1490205467" lat="35.6765917" lon="139.7379332"/>
+ <node id="1490205468" lat="35.6766035" lon="139.7379914"/>
+ <node id="1490205472" lat="35.6766947" lon="139.7375901"/>
+ <node id="1490205473" lat="35.6766998" lon="139.7380143"/>
+ <node id="1490205477" lat="35.6768670" lon="139.7377294"/>
+ <node id="1490205478" lat="35.6768890" lon="139.7374945"/>
+ <node id="1490205479" lat="35.6769413" lon="139.7376650"/>
+ <node id="1490205480" lat="35.6769430" lon="139.7376317"/>
+ <node id="1490205481" lat="35.6770106" lon="139.7376088"/>
+ <node id="1490205482" lat="35.6771930" lon="139.7374030"/>
+ <node id="1490205483" lat="35.6772335" lon="139.7375423"/>
+ <node id="1490205484" lat="35.6772386" lon="139.7375860"/>
+ <node id="1490205485" lat="35.6775713" lon="139.7373947"/>
+ <node id="1490205486" lat="35.6775933" lon="139.7374882"/>
+ <node id="1490205487" lat="35.6776287" lon="139.7372762"/>
+ <node id="1490205488" lat="35.6776408" lon="139.7373731"/>
+ <node id="1490205489" lat="35.6776507" lon="139.7374404"/>
+ <node id="1490205490" lat="35.6779378" lon="139.7371784"/>
+ <node id="1490205491" lat="35.6779733" lon="139.7371805"/>
+ <node id="1490205492" lat="35.6780611" lon="139.7371743"/>
+ <node id="1490205493" lat="35.6780729" lon="139.7372367"/>
+ <node id="1490205494" lat="35.6780932" lon="139.7373032"/>
+ <node id="1490205495" lat="35.6781016" lon="139.7372595"/>
+ <node id="1490249692" lat="35.6794735" lon="139.7349345"/>
+ <node id="1490249693" lat="35.6794733" lon="139.7349136"/>
+ <node id="1490249695" lat="35.6794846" lon="139.7349528"/>
+ <node id="1490249698" lat="35.6795421" lon="139.7347653"/>
+ <node id="1490249699" lat="35.6795519" lon="139.7347551"/>
+ <node id="1490249700" lat="35.6795607" lon="139.7347501"/>
+ <node id="1490249701" lat="35.6795733" lon="139.7347488"/>
+ <node id="1490249703" lat="35.6795826" lon="139.7347507"/>
+ <node id="1490249704" lat="35.6796027" lon="139.7350314"/>
+ <node id="1490249706" lat="35.6796787" lon="139.7348148"/>
+ <node id="1490249708" lat="35.6796556" lon="139.7350799"/>
+ <node id="1490249709" lat="35.6796762" lon="139.7351675"/>
+ <node id="1490249713" lat="35.6797101" lon="139.7348306"/>
+ <node id="1490249718" lat="35.6797391" lon="139.7348439"/>
+ <node id="1490249720" lat="35.6797708" lon="139.7348485"/>
+ <node id="1490249731" lat="35.6798263" lon="139.7348363"/>
+ <node id="1490249734" lat="35.6798552" lon="139.7348224"/>
+ <node id="1490249761" lat="35.6799528" lon="139.7347504"/>
+ <node id="1490249763" lat="35.6799745" lon="139.7347374"/>
+ <node id="1490249764" lat="35.6799969" lon="139.7347440"/>
+ <node id="1492967162" lat="35.6648045" lon="139.7266895"/>
+ <node id="1492967163" lat="35.6647653" lon="139.7260457"/>
+ <node id="1492967164" lat="35.6646912" lon="139.7263622"/>
+ <node id="1492967165" lat="35.6650442" lon="139.7254878"/>
+ <node id="1492967167" lat="35.6649527" lon="139.7256273"/>
+ <node id="1492967168" lat="35.6648219" lon="139.7259067"/>
+ <node id="1492967169" lat="35.6647696" lon="139.7259545"/>
+ <node id="1492967170" lat="35.6657459" lon="139.7272098"/>
+ <node id="1492967172" lat="35.6646265" lon="139.7269820"/>
+ <node id="1492967173" lat="35.6647478" lon="139.7262818"/>
+ <node id="1492967174" lat="35.6648001" lon="139.7262067"/>
+ <node id="1492967175" lat="35.6647871" lon="139.7266086"/>
+ <node id="1492967176" lat="35.6648568" lon="139.7269680"/>
+ <node id="1492967179" lat="35.6647958" lon="139.7261101"/>
+ <node id="1492967180" lat="35.6649449" lon="139.7271448"/>
+ <node id="1492967181" lat="35.6649183" lon="139.7256928"/>
+ <node id="1492967182" lat="35.6646868" lon="139.7264427"/>
+ <node id="1492967185" lat="35.6649101" lon="139.7270580"/>
+ <node id="1492967186" lat="35.6650698" lon="139.7272420"/>
+ <node id="1492967187" lat="35.6649481" lon="139.7272420"/>
+ <node id="1492967188" lat="35.6650704" lon="139.7272044"/>
+ <node id="1492967189" lat="35.6648655" lon="139.7258204"/>
+ <node id="1492967190" lat="35.6657546" lon="139.7256702"/>
+ <node id="1492967191" lat="35.6650442" lon="139.7256863"/>
+ <node id="1492967193" lat="35.6648706" lon="139.7257433"/>
+ <node id="1492967194" lat="35.6649598" lon="139.7254860"/>
+ <node id="1492967195" lat="35.6649594" lon="139.7255576"/>
+ <node id="1492967196" lat="35.6647348" lon="139.7265232"/>
+ <node id="1492967197" lat="35.6647874" lon="139.7267939"/>
+ <node id="1492981358" lat="35.6798603" lon="139.7353325"/>
+ <node id="1492981359" lat="35.6798630" lon="139.7351621"/>
+ <node id="1492981375" lat="35.6796756" lon="139.7353333"/>
+ <node id="1492981377" lat="35.6798630" lon="139.7352721"/>
+ <node id="1492981378" lat="35.6798913" lon="139.7350488"/>
+ <node id="1492981379" lat="35.6798346" lon="139.7353579"/>
+ <node id="1492981388" lat="35.6796975" lon="139.7353625"/>
+ <node id="1492981401" lat="35.6798765" lon="139.7350762"/>
+ <node id="1492981403" lat="35.6800580" lon="139.7348790"/>
+ <node id="1492981404" lat="35.6799250" lon="139.7350173"/>
+ <node id="1492981407" lat="35.6800526" lon="139.7349127"/>
+ <node id="1494149076" lat="35.6741016" lon="139.7409221">
+ <tag k="name" v="The Capitol Hotel Tokyu"/>
+ <tag k="name:en" v="The Capitol Hotel Tokuy"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1496039404" lat="35.6539536" lon="139.6914815"/>
+ <node id="1496039406" lat="35.6539638" lon="139.6915171"/>
+ <node id="1496039430" lat="35.6540563" lon="139.6913522"/>
+ <node id="1496039435" lat="35.6540910" lon="139.6914625"/>
+ <node id="1496232768" lat="35.6553363" lon="139.6935261"/>
+ <node id="1496232771" lat="35.6553522" lon="139.6934723"/>
+ <node id="1496232779" lat="35.6553659" lon="139.6934886"/>
+ <node id="1496232802" lat="35.6554148" lon="139.6933929"/>
+ <node id="1496232810" lat="35.6554285" lon="139.6934093"/>
+ <node id="1496232829" lat="35.6554486" lon="139.6933838"/>
+ <node id="1496232836" lat="35.6554577" lon="139.6936712"/>
+ <node id="1496232856" lat="35.6554646" lon="139.6936623"/>
+ <node id="1496232859" lat="35.6554696" lon="139.6934088"/>
+ <node id="1496232880" lat="35.6554989" lon="139.6933716"/>
+ <node id="1496232905" lat="35.6555178" lon="139.6937258"/>
+ <node id="1496233002" lat="35.6556301" lon="139.6935427"/>
+ <node id="1496233007" lat="35.6556360" lon="139.6935353"/>
+ <node id="1496233026" lat="35.6556467" lon="139.6935625"/>
+ <node id="1498097565" lat="35.6597460" lon="139.6953339"/>
+ <node id="1498097571" lat="35.6597637" lon="139.6954736"/>
+ <node id="1498097582" lat="35.6598850" lon="139.6953298"/>
+ <node id="1498097583" lat="35.6599295" lon="139.6954642"/>
+ <node id="1498427666" lat="35.6576139" lon="139.6960807"/>
+ <node id="1498427672" lat="35.6576605" lon="139.6960109"/>
+ <node id="1498427678" lat="35.6576837" lon="139.6961513"/>
+ <node id="1498427687" lat="35.6577303" lon="139.6960814"/>
+ <node id="1509430752" lat="35.7106647" lon="139.7630534"/>
+ <node id="1509430758" lat="35.7107056" lon="139.7635748"/>
+ <node id="1509430782" lat="35.7108967" lon="139.7630258"/>
+ <node id="1509430783" lat="35.7109375" lon="139.7635472"/>
+ <node id="1509875950" lat="35.6638117" lon="139.7314079">
+ <tag k="name" v="IBIS"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1511455452" lat="35.6980889" lon="139.7612366">
+ <tag k="name" v="山の上ホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1539225928" lat="35.6562370" lon="139.6999017"/>
+ <node id="1539225939" lat="35.6564314" lon="139.6998006"/>
+ <node id="1539225940" lat="35.6564742" lon="139.6999207"/>
+ <node id="1540357115" lat="35.6559998" lon="139.6991337"/>
+ <node id="1540357116" lat="35.6560059" lon="139.6992174"/>
+ <node id="1540357117" lat="35.6560742" lon="139.6990991"/>
+ <node id="1555877197" lat="35.6585267" lon="139.7520568"/>
+ <node id="1555877202" lat="35.6585735" lon="139.7517293"/>
+ <node id="1555877252" lat="35.6591516" lon="139.7521922"/>
+ <node id="1555877253" lat="35.6591985" lon="139.7518646"/>
+ <node id="1555877277" lat="35.6558335" lon="139.7513102">
+ <tag k="name" v="メルパルク"/>
+ <tag k="source" v="survey; bing"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1584472133" lat="35.6827911" lon="139.7433796"/>
+ <node id="1584472135" lat="35.6828025" lon="139.7434647"/>
+ <node id="1584472141" lat="35.6828540" lon="139.7436568"/>
+ <node id="1584472149" lat="35.6830522" lon="139.7438638"/>
+ <node id="1586832840" lat="35.6796250" lon="139.7350485"/>
+ <node id="1586832868" lat="35.6796709" lon="139.7351224"/>
+ <node id="1586832879" lat="35.6796833" lon="139.7353522"/>
+ <node id="1586833048" lat="35.6798524" lon="139.7353445"/>
+ <node id="1586833059" lat="35.6798633" lon="139.7353026"/>
+ <node id="1586833064" lat="35.6798663" lon="139.7351135"/>
+ <node id="1586833238" lat="35.6799868" lon="139.7347366"/>
+ <node id="1586833418" lat="35.6800584" lon="139.7348974"/>
+ <node id="1586834100" lat="35.6803998" lon="139.7334545"/>
+ <node id="1586834208" lat="35.6805833" lon="139.7345170"/>
+ <node id="1586834483" lat="35.6810035" lon="139.7343817"/>
+ <node id="1586834519" lat="35.6810344" lon="139.7343811"/>
+ <node id="1586834552" lat="35.6810624" lon="139.7338340"/>
+ <node id="1586834555" lat="35.6810770" lon="139.7343736"/>
+ <node id="1586834635" lat="35.6811179" lon="139.7343607"/>
+ <node id="1586834649" lat="35.6811429" lon="139.7338656"/>
+ <node id="1586834652" lat="35.6811444" lon="139.7343409"/>
+ <node id="1586834661" lat="35.6811708" lon="139.7338879"/>
+ <node id="1586834663" lat="35.6811803" lon="139.7343131"/>
+ <node id="1586834666" lat="35.6811926" lon="139.7339092"/>
+ <node id="1586834739" lat="35.6812090" lon="139.7342750"/>
+ <node id="1587598199" lat="35.7182905" lon="139.7750216">
+ <tag k="building" v="entrance"/>
+ </node>
+ <node id="1587598202" lat="35.7182927" lon="139.7750632"/>
+ <node id="1587598215" lat="35.7183154" lon="139.7750924"/>
+ <node id="1587598216" lat="35.7183195" lon="139.7751444"/>
+ <node id="1587598220" lat="35.7183239" lon="139.7749912"/>
+ <node id="1587598243" lat="35.7183410" lon="139.7750955"/>
+ <node id="1587598247" lat="35.7183533" lon="139.7749867"/>
+ <node id="1587598265" lat="35.7183786" lon="139.7750168"/>
+ <node id="1587598269" lat="35.7183975" lon="139.7749759"/>
+ <node id="1587598271" lat="35.7183996" lon="139.7752007"/>
+ <node id="1587598275" lat="35.7184108" lon="139.7751767"/>
+ <node id="1587598290" lat="35.7184119" lon="139.7742368"/>
+ <node id="1587598317" lat="35.7184717" lon="139.7750634"/>
+ <node id="1587598322" lat="35.7184841" lon="139.7750367"/>
+ <node id="1587598329" lat="35.7184986" lon="139.7753384"/>
+ <node id="1587598349" lat="35.7185232" lon="139.7752569"/>
+ <node id="1587598354" lat="35.7185275" lon="139.7752784"/>
+ <node id="1587598361" lat="35.7185429" lon="139.7753691">
+ <tag k="building" v="entrance"/>
+ </node>
+ <node id="1587598365" lat="35.7185777" lon="139.7751424"/>
+ <node id="1587598386" lat="35.7185965" lon="139.7754068"/>
+ <node id="1587598387" lat="35.7185983" lon="139.7751315"/>
+ <node id="1587598393" lat="35.7186191" lon="139.7753552"/>
+ <node id="1587598395" lat="35.7186211" lon="139.7750796"/>
+ <node id="1587598398" lat="35.7186347" lon="139.7750891"/>
+ <node id="1587598413" lat="35.7186401" lon="139.7753502"/>
+ <node id="1587598414" lat="35.7186495" lon="139.7737413"/>
+ <node id="1587598416" lat="35.7186806" lon="139.7749906"/>
+ <node id="1587598419" lat="35.7186980" lon="139.7752019"/>
+ <node id="1587598421" lat="35.7187009" lon="139.7744471"/>
+ <node id="1587598423" lat="35.7187023" lon="139.7752277"/>
+ <node id="1587598438" lat="35.7187031" lon="139.7749867"/>
+ <node id="1587598440" lat="35.7187078" lon="139.7751404"/>
+ <node id="1587598442" lat="35.7187219" lon="139.7751503"/>
+ <node id="1587598445" lat="35.7187363" lon="139.7754445"/>
+ <node id="1587598447" lat="35.7187449" lon="139.7754260"/>
+ <node id="1587598448" lat="35.7187485" lon="139.7750232"/>
+ <node id="1587598449" lat="35.7187534" lon="139.7750497"/>
+ <node id="1587598465" lat="35.7187682" lon="139.7743067"/>
+ <node id="1587598471" lat="35.7187971" lon="139.7742641"/>
+ <node id="1587598474" lat="35.7188004" lon="139.7752997"/>
+ <node id="1587598477" lat="35.7188079" lon="139.7752836"/>
+ <node id="1587598493" lat="35.7188093" lon="139.7742729"/>
+ <node id="1587598496" lat="35.7188144" lon="139.7742622"/>
+ <node id="1587598503" lat="35.7188226" lon="139.7755051"/>
+ <node id="1587598506" lat="35.7188322" lon="139.7743533"/>
+ <node id="1587598511" lat="35.7188482" lon="139.7754500"/>
+ <node id="1587598527" lat="35.7188584" lon="139.7754893"/>
+ <node id="1587598530" lat="35.7188600" lon="139.7742954"/>
+ <node id="1587598539" lat="35.7188724" lon="139.7753976"/>
+ <node id="1587598542" lat="35.7188964" lon="139.7753457"/>
+ <node id="1587598544" lat="35.7189018" lon="139.7753940"/>
+ <node id="1587598556" lat="35.7189045" lon="139.7754999"/>
+ <node id="1587598558" lat="35.7189284" lon="139.7754725">
+ <tag k="building" v="entrance"/>
+ </node>
+ <node id="1587598562" lat="35.7189351" lon="139.7754235"/>
+ <node id="1587598567" lat="35.7189448" lon="139.7739561"/>
+ <node id="1588142360" lat="35.6744088" lon="139.7608091"/>
+ <node id="1588142370" lat="35.6747818" lon="139.7602312"/>
+ <node id="1588142372" lat="35.6747944" lon="139.7609561"/>
+ <node id="1588142388" lat="35.6749257" lon="139.7603307"/>
+ <node id="1589723018" lat="35.7068085" lon="139.7945162">
+ <tag k="name" v="Chisun Inn Asakusa"/>
+ <tag k="operator" v="Solare Hotels"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.solarehotels.com/english/chisun/inn-asakusa/guestroom/detail.html"/>
+ </node>
+ <node id="1595509669" lat="35.6710741" lon="139.7355311"/>
+ <node id="1595509846" lat="35.6711800" lon="139.7353855"/>
+ <node id="1595509860" lat="35.6711946" lon="139.7356638"/>
+ <node id="1595509966" lat="35.6713004" lon="139.7355182"/>
+ <node id="1599621681" lat="35.6640601" lon="139.7263838"/>
+ <node id="1599621705" lat="35.6641577" lon="139.7265329"/>
+ <node id="1599621734" lat="35.6643508" lon="139.7265343"/>
+ <node id="1599621739" lat="35.6643755" lon="139.7268855"/>
+ <node id="1599621741" lat="35.6643798" lon="139.7271350"/>
+ <node id="1599621749" lat="35.6644195" lon="139.7273238"/>
+ <node id="1599621764" lat="35.6645053" lon="139.7274677"/>
+ <node id="1599621778" lat="35.6645683" lon="139.7275409"/>
+ <node id="1599621794" lat="35.6646214" lon="139.7269346"/>
+ <node id="1599621795" lat="35.6646216" lon="139.7269584"/>
+ <node id="1599621800" lat="35.6646284" lon="139.7269066"/>
+ <node id="1599621802" lat="35.6646408" lon="139.7268814"/>
+ <node id="1599621805" lat="35.6646430" lon="139.7270130"/>
+ <node id="1599621808" lat="35.6646460" lon="139.7275870"/>
+ <node id="1599621816" lat="35.6646602" lon="139.7268603"/>
+ <node id="1599621819" lat="35.6646715" lon="139.7254554"/>
+ <node id="1599621820" lat="35.6646757" lon="139.7270317"/>
+ <node id="1599621821" lat="35.6646779" lon="139.7268468"/>
+ <node id="1599621823" lat="35.6646852" lon="139.7264011"/>
+ <node id="1599621825" lat="35.6646974" lon="139.7268361"/>
+ <node id="1599621827" lat="35.6647027" lon="139.7270382"/>
+ <node id="1599621831" lat="35.6647166" lon="139.7268319"/>
+ <node id="1599621832" lat="35.6647318" lon="139.7270345"/>
+ <node id="1599621835" lat="35.6647454" lon="139.7268291"/>
+ <node id="1599621837" lat="35.6647505" lon="139.7270279"/>
+ <node id="1599621838" lat="35.6647562" lon="139.7260033"/>
+ <node id="1599621840" lat="35.6647689" lon="139.7270154"/>
+ <node id="1599621841" lat="35.6647717" lon="139.7262555"/>
+ <node id="1599621842" lat="35.6647732" lon="139.7268340"/>
+ <node id="1599621845" lat="35.6647963" lon="139.7269803"/>
+ <node id="1599621848" lat="35.6647992" lon="139.7266460"/>
+ <node id="1599621849" lat="35.6648044" lon="139.7261604"/>
+ <node id="1599621850" lat="35.6648066" lon="139.7256438"/>
+ <node id="1599621851" lat="35.6648086" lon="139.7269582"/>
+ <node id="1599621852" lat="35.6648148" lon="139.7269365"/>
+ <node id="1599621855" lat="35.6648470" lon="139.7258697"/>
+ <node id="1599621858" lat="35.6648627" lon="139.7257842"/>
+ <node id="1599621863" lat="35.6648841" lon="139.7270113"/>
+ <node id="1599621866" lat="35.6649285" lon="139.7270981"/>
+ <node id="1599621869" lat="35.6649497" lon="139.7271746"/>
+ <node id="1599621874" lat="35.6650083" lon="139.7254000"/>
+ <node id="1599622202" lat="35.6658354" lon="139.7254266"/>
+ <node id="1628058654" lat="35.6550467" lon="139.7632261"/>
+ <node id="1628058671" lat="35.6551984" lon="139.7629727"/>
+ <node id="1628058705" lat="35.6554559" lon="139.7635990"/>
+ <node id="1628058710" lat="35.6556056" lon="139.7633306"/>
+ <node id="1654277659" lat="35.7035334" lon="139.7538711"/>
+ <node id="1654277665" lat="35.7035593" lon="139.7539394"/>
+ <node id="1654277669" lat="35.7035963" lon="139.7539668"/>
+ <node id="1654277670" lat="35.7036037" lon="139.7531217"/>
+ <node id="1654277671" lat="35.7036259" lon="139.7530647"/>
+ <node id="1654277672" lat="35.7036370" lon="139.7539668"/>
+ <node id="1654277673" lat="35.7036425" lon="139.7530305"/>
+ <node id="1654277674" lat="35.7036684" lon="139.7539577"/>
+ <node id="1654277675" lat="35.7036777" lon="139.7530078"/>
+ <node id="1654277676" lat="35.7036962" lon="139.7539349"/>
+ <node id="1654277677" lat="35.7037091" lon="139.7539144"/>
+ <node id="1654277678" lat="35.7037276" lon="139.7530146"/>
+ <node id="1654277679" lat="35.7037295" lon="139.7538711"/>
+ <node id="1654277680" lat="35.7037591" lon="139.7530396"/>
+ <node id="1654277681" lat="35.7037776" lon="139.7530761"/>
+ <node id="1654277682" lat="35.7037905" lon="139.7531239"/>
+ <node id="1657015145" lat="35.7176094" lon="139.7725173"/>
+ <node id="1661350663" lat="35.6933919" lon="139.7104827">
+ <tag k="contact:phone" v="+81 (0)3-3356-4605"/>
+ <tag k="contact:website" v="http://tbh.co.jp/"/>
+ <tag k="name" v="東京ビジネスホテル"/>
+ <tag k="name:en" v="Tokyo Business Hotel"/>
+ <tag k="name:fr" v="Tokyo Business Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1666008174" lat="35.7185760" lon="139.7743562"/>
+ <node id="1666008177" lat="35.7186113" lon="139.7743819"/>
+ <node id="1666008180" lat="35.7186778" lon="139.7744303"/>
+ <node id="1676618277" lat="35.6622584" lon="139.6807297"/>
+ <node id="1676618278" lat="35.6622584" lon="139.6806734"/>
+ <node id="1676618279" lat="35.6622584" lon="139.6808451"/>
+ <node id="1681422026" lat="35.6601130" lon="139.7021214">
+ <tag k="name" v="Tokyu inn"/>
+ <tag k="source" v="survey 2012/03/18"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1687215349" lat="35.6560324" lon="139.7022221"/>
+ <node id="1687215350" lat="35.6560439" lon="139.7022379"/>
+ <node id="1687215351" lat="35.6561019" lon="139.7020960"/>
+ <node id="1687215352" lat="35.6561419" lon="139.7019940"/>
+ <node id="1687215353" lat="35.6561568" lon="139.7019388"/>
+ <node id="1687215354" lat="35.6561734" lon="139.7018573"/>
+ <node id="1687215355" lat="35.6561791" lon="139.7021451"/>
+ <node id="1687215356" lat="35.6561810" lon="139.7018051"/>
+ <node id="1687215357" lat="35.6562711" lon="139.7018280"/>
+ <node id="1687215358" lat="35.6562882" lon="139.7019064"/>
+ <node id="1687225183" lat="35.6888747" lon="139.7798370">
+ <tag k="email" v="h-villa@crocus.ocn.ne.jp"/>
+ <tag k="internet_access" v="yes"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Horidome Villa"/>
+ <tag k="stars" v="2"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.horidomevilla.jp/"/>
+ </node>
+ <node id="1693368536" lat="35.6570768" lon="139.7544761">
+ <tag k="name" v="カプセルイン浜松町"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1693368709" lat="35.6582131" lon="139.7551969">
+ <tag k="contact:phone" v="03-6689-3939"/>
+ <tag k="name" v="ホテルマイステイズ 浜松町"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1717451039" lat="35.6550812" lon="139.7632574"/>
+ <node id="1717451048" lat="35.6551885" lon="139.7633547"/>
+ <node id="1717451057" lat="35.6553594" lon="139.7635097"/>
+ <node id="1719041297" lat="35.6680265" lon="139.7602737"/>
+ <node id="1719041413" lat="35.6681252" lon="139.7603650"/>
+ <node id="1719041424" lat="35.6681345" lon="139.7599646"/>
+ <node id="1719041448" lat="35.6681562" lon="139.7599458"/>
+ <node id="1719041512" lat="35.6681803" lon="139.7599478"/>
+ <node id="1719041527" lat="35.6682177" lon="139.7601330"/>
+ <node id="1719041683" lat="35.6683337" lon="139.7602657"/>
+ <node id="1719041749" lat="35.6683976" lon="139.7601690"/>
+ <node id="1727248049" lat="35.6568483" lon="139.7522815">
+ <tag k="name" v="ホテル COMSOLOIL"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1734716412" lat="35.6894907" lon="139.7705650">
+ <tag k="designation" v="Hotel"/>
+ <tag k="name" v="神田ステーションホテル (Kanda Station Hotel)"/>
+ <tag k="name:en" v="Kanda Station Hotel"/>
+ <tag k="name:ja" v="神田ステーションホテル"/>
+ <tag k="source" v="http://www.kandasth.com/"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1752050674" lat="35.6596278" lon="139.7543337">
+ <tag k="contact:phone" v="03-5472-2031"/>
+ <tag k="name" v="相鉄フレッサイン 浜松町大門"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://fresa-inn.jp"/>
+ </node>
+ <node id="1760401130" lat="35.6818721" lon="139.6849020"/>
+ <node id="1760401138" lat="35.6819291" lon="139.6850103"/>
+ <node id="1760401145" lat="35.6819629" lon="139.6848332"/>
+ <node id="1760401151" lat="35.6819705" lon="139.6849771"/>
+ <node id="1760401152" lat="35.6819749" lon="139.6849855"/>
+ <node id="1760401166" lat="35.6820230" lon="139.6849469"/>
+ <node id="1797919399" lat="35.6737858" lon="139.7692365">
+ <tag k="name" v="Moterey Lasoeur Ginza"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://www.hotelmonterey.co.jp/"/>
+ </node>
+ <node id="1815494148" lat="35.7072585" lon="139.7687495"/>
+ <node id="1815494156" lat="35.7072665" lon="139.7686611"/>
+ <node id="1815494166" lat="35.7072860" lon="139.7688283"/>
+ <node id="1815494168" lat="35.7072912" lon="139.7687539"/>
+ <node id="1815494170" lat="35.7072974" lon="139.7686653"/>
+ <node id="1815494175" lat="35.7073033" lon="139.7685804"/>
+ <node id="1815494234" lat="35.7074202" lon="139.7688425"/>
+ <node id="1815494246" lat="35.7074375" lon="139.7685946"/>
+ <node id="1823741994" lat="35.6751910" lon="139.7698904">
+ <tag k="name" v="警察博物馆"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1832671045" lat="35.6821979" lon="139.7994187">
+ <tag k="name" v="コンフォートホテル東京清澄白河"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1861953842" lat="35.7123260" lon="139.7960882"/>
+ <node id="1861953846" lat="35.7123443" lon="139.7959380"/>
+ <node id="1861953869" lat="35.7124392" lon="139.7961091"/>
+ <node id="1861953870" lat="35.7124574" lon="139.7959588"/>
+ <node id="1866081983" lat="35.6894574" lon="139.7502319"/>
+ <node id="1866081996" lat="35.6895004" lon="139.7503205"/>
+ <node id="1866082015" lat="35.6895422" lon="139.7502898"/>
+ <node id="1866082039" lat="35.6895871" lon="139.7504443"/>
+ <node id="1866082045" lat="35.6896093" lon="139.7504280"/>
+ <node id="1866082049" lat="35.6896181" lon="139.7505082"/>
+ <node id="1866082053" lat="35.6896283" lon="139.7501062"/>
+ <node id="1866082055" lat="35.6896403" lon="139.7504919"/>
+ <node id="1866082061" lat="35.6896632" lon="139.7506563"/>
+ <node id="1866082062" lat="35.6897051" lon="139.7506255"/>
+ <node id="1866082063" lat="35.6897073" lon="139.7507470"/>
+ <node id="1866082070" lat="35.6897390" lon="139.7503344"/>
+ <node id="1866082076" lat="35.6897627" lon="139.7503831"/>
+ <node id="1866082080" lat="35.6897776" lon="139.7503060"/>
+ <node id="1866082086" lat="35.6898012" lon="139.7503548"/>
+ <node id="1866082097" lat="35.6898782" lon="139.7506214"/>
+ <node id="1880419757" lat="35.7050077" lon="139.7678215">
+ <tag k="name" v="Edoya"/>
+ <tag k="source" v="survey"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1886244821" lat="35.7036501" lon="139.7535830">
+ <tag k="name" v="東京ドームホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1909755972" lat="35.6809392" lon="139.7390221"/>
+ <node id="1918061886" lat="35.6959811" lon="139.7968407"/>
+ <node id="1918061897" lat="35.6961251" lon="139.7969059"/>
+ <node id="1918061898" lat="35.6961326" lon="139.7968593"/>
+ <node id="1918061925" lat="35.6964268" lon="139.7969986"/>
+ <node id="1918061926" lat="35.6964345" lon="139.7969467"/>
+ <node id="1918061934" lat="35.6964561" lon="139.7952120"/>
+ <node id="1918061948" lat="35.6964697" lon="139.7951582"/>
+ <node id="1918062010" lat="35.6967567" lon="139.7953016"/>
+ <node id="1918062025" lat="35.6967691" lon="139.7952455"/>
+ <node id="1920917270" lat="35.6652795" lon="139.7494078">
+ <tag k="name" v="東急イン"/>
+ <tag k="source" v="Bing 2010"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1924771149" lat="35.6797732" lon="139.7350002">
+ <tag k="name" v="ホテルニューオータニ ガーデンタワー"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1931795600" lat="35.7184520" lon="139.7924830">
+ <tag k="created_by" v="iLOE 1.9"/>
+ <tag k="name" v="Toyoko Inn"/>
+ <tag k="name:ja" v="東横イン"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1934478632" lat="35.6910402" lon="139.6867366">
+ <tag k="name" v="東急ステイ"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1956551782" lat="35.7089395" lon="139.7910022">
+ <tag k="name" v="Agora Place Asakusa"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1964113582" lat="35.6599126" lon="139.7179786">
+ <tag k="name" v="伊勢半本店 紅ミュージアム"/>
+ <tag k="opening_hours" v="11:00-19:00"/>
+ <tag k="source" v="image,2012-10-12;Bing"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.isehanhonten.co.jp/museum/index.html"/>
+ </node>
+ <node id="1966230675" lat="35.6633462" lon="139.7596280">
+ <tag k="name" v="Park Hotel Tokyo"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1966249089" lat="35.6612724" lon="139.7155295">
+ <tag k="addr:full" v="東京都港区南青山6丁目1−19 107-0062, Japan"/>
+ <tag k="name" v="Taro Okamoto Memorial Museum"/>
+ <tag k="tourism" v="museum"/>
+ </node>
+ <node id="1968636429" lat="35.7101985" lon="139.7792091">
+ <tag k="name" v=""/>
+ <tag k="stars" v=""/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="1986281360" lat="35.6972457" lon="139.7738270">
+ <tag k="internet_access" v="yes"/>
+ <tag k="name" v="秋葉原ワシントンホテル"/>
+ <tag k="name:en" v="Akihabara Washington Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </node>
+ <node id="2012214872" lat="35.6940109" lon="139.7830177">
+ <tag k="name" v="Comfort Hotel Tokyo Higashi Nihombashi"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2017978537" lat="35.6680665" lon="139.7603197"/>
+ <node id="2017978538" lat="35.6680703" lon="139.7603141"/>
+ <node id="2017978543" lat="35.6681470" lon="139.7599512"/>
+ <node id="2017978545" lat="35.6681558" lon="139.7603240"/>
+ <node id="2017978547" lat="35.6681675" lon="139.7599422"/>
+ <node id="2021389287" lat="35.6976785" lon="139.7738098">
+ <tag k="name:en" v="Remm Akihabara"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2032195431" lat="35.7017200" lon="139.6986285">
+ <tag k="name" v="Tokyo Plaza Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2047918992" lat="35.6608988" lon="139.7393731">
+ <tag k="name" v="外務省外交資料館"/>
+ <tag k="name:en" v="Dipromatic Archives Ministry of Foreign Affairs"/>
+ <tag k="opening_hours" v="10:00-17:30"/>
+ <tag k="source" v="image,2012-11;Bing"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="http://ja.wikipedia.org/wiki/%E5%A4%96%E5%8B%99%E7%9C%81%E5%A4%96%E4%BA%A4%E5%8F%B2%E6%96%99%E9%A4%A8"/>
+ </node>
+ <node id="2059755937" lat="35.6689441" lon="139.7635671">
+ <tag k="name" v="Hotel Gracery Ginza Washington Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2064366381" lat="35.7100420" lon="139.7756810">
+ <tag k="name" v="きぬや本店"/>
+ <tag k="tourism" v="hotel"/>
+ </node>
+ <node id="2139723235" lat="35.7147351" lon="139.7758611"/>
+ <node id="2139723236" lat="35.7149822" lon="139.7766372"/>
+ <node id="2139723237" lat="35.7150412" lon="139.7751614"/>
+ <node id="2139723238" lat="35.7151794" lon="139.7762058"/>
+ <node id="2139723243" lat="35.7157653" lon="139.7765782"/>
+ <node id="2139723244" lat="35.7157669" lon="139.7766008"/>
+ <node id="2139723245" lat="35.7160826" lon="139.7758484"/>
+ <node id="2139723246" lat="35.7160957" lon="139.7758672"/>
+ <node id="2139723247" lat="35.7163057" lon="139.7777189"/>
+ <node id="2139723248" lat="35.7169030" lon="139.7764632"/>
+ <way id="23974980">
+ <nd ref="259964039"/>
+ <nd ref="259964048"/>
+ <nd ref="259964050"/>
+ <nd ref="1909755972"/>
+ <nd ref="259964051"/>
+ <nd ref="259964039"/>
+ <tag k="building" v="yes"/>
+ <tag k="building:levelPlan" v="1-7:office, 8-:guest room"/>
+ <tag k="name" v="Toshi center hotel"/>
+ <tag k="name:ja" v="都市センターホテル"/>
+ <tag k="note" v="estimated"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="28137295">
+ <nd ref="309040735"/>
+ <nd ref="309040736"/>
+ <nd ref="309040739"/>
+ <nd ref="309040740"/>
+ <nd ref="309040735"/>
+ <tag k="area" v="yes"/>
+ <tag k="name" v="古賀政男音楽博物館"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="28144706">
+ <nd ref="309129365"/>
+ <nd ref="309129366"/>
+ <nd ref="309129367"/>
+ <nd ref="309129368"/>
+ <nd ref="309129369"/>
+ <nd ref="309129370"/>
+ <nd ref="309129371"/>
+ <nd ref="309129372"/>
+ <nd ref="309129365"/>
+ <tag k="building" v="yes"/>
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="name" v="旧前田侯爵邸洋館"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="28144849">
+ <nd ref="309130630"/>
+ <nd ref="309130632"/>
+ <nd ref="309130633"/>
+ <nd ref="309130634"/>
+ <nd ref="309130630"/>
+ <tag k="building" v="yes"/>
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="name" v="日本近代文学館"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="28145214">
+ <nd ref="309133105"/>
+ <nd ref="309133108"/>
+ <nd ref="1676618278"/>
+ <nd ref="1676618277"/>
+ <nd ref="1676618279"/>
+ <nd ref="309133109"/>
+ <nd ref="309133111"/>
+ <nd ref="309133105"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="旧前田侯爵邸和館"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="30519438">
+ <nd ref="336994074"/>
+ <nd ref="336994076"/>
+ <nd ref="336994079"/>
+ <nd ref="336994080"/>
+ <nd ref="336994083"/>
+ <nd ref="336994085"/>
+ <nd ref="336994086"/>
+ <nd ref="336995311"/>
+ <nd ref="336995312"/>
+ <nd ref="336995314"/>
+ <nd ref="336995316"/>
+ <nd ref="336994074"/>
+ <tag k="building" v="yes"/>
+ <tag k="created_by" v="Potlatch 0.10f"/>
+ <tag k="name" v="東京プリンスホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="33439660">
+ <nd ref="380527398"/>
+ <nd ref="380527399"/>
+ <nd ref="380527400"/>
+ <nd ref="380527401"/>
+ <nd ref="1065897459"/>
+ <nd ref="380527403"/>
+ <nd ref="380527404"/>
+ <nd ref="380527405"/>
+ <nd ref="380527406"/>
+ <nd ref="380527407"/>
+ <nd ref="380527408"/>
+ <nd ref="1065943671"/>
+ <nd ref="380527398"/>
+ <tag k="name" v="東京国立博物館 (Tokyo National Museum)"/>
+ <tag k="name:de" v="Nationalmuseum Tokio"/>
+ <tag k="name:en" v="Tokyo National Museum"/>
+ <tag k="name:et" v="Tōkyō Rahvusmuuseum"/>
+ <tag k="name:fr" v="Musée national de Tokyo"/>
+ <tag k="name:ja" v="東京国立博物館"/>
+ <tag k="name:ja_kana" v="とうきょうこくりつはくぶつかん"/>
+ <tag k="name:ja_rm" v="Tōkyō Kokuritsu Hakubutsukan"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.tnm.go.jp/jp/servlet/Con?pageId=X00/processId=00"/>
+ <tag k="wikipedia" v="ja:東京国立博物館"/>
+ </way>
+ <way id="33440458">
+ <nd ref="380538734"/>
+ <nd ref="380538736"/>
+ <nd ref="1657015145"/>
+ <nd ref="380538737"/>
+ <nd ref="380538738"/>
+ <nd ref="380538734"/>
+ <tag k="name" v="東京都美術館 (Tokyo Metropolitan Art Museum)"/>
+ <tag k="name:en" v="Tokyo Metropolitan Art Museum"/>
+ <tag k="name:fr" v="Musée d'art de la ville de Tōkyō"/>
+ <tag k="name:ja" v="東京都美術館"/>
+ <tag k="name:ja_kana" v="とうきょうとびじゅつかん"/>
+ <tag k="name:ja_rm" v="Tōkyōto Bijutsukan"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="43988826">
+ <nd ref="559359753"/>
+ <nd ref="559359754"/>
+ <nd ref="1326424640"/>
+ <nd ref="1326424644"/>
+ <nd ref="1326424652"/>
+ <nd ref="1326424654"/>
+ <nd ref="559359755"/>
+ <nd ref="559359756"/>
+ <nd ref="559359753"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="コートヤード・マリオット東武銀座ホテル (courtyard marriott toubu ginza hotel)"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="44776139">
+ <nd ref="567845214"/>
+ <nd ref="567845215"/>
+ <nd ref="567845216"/>
+ <nd ref="567845217"/>
+ <nd ref="567845214"/>
+ <tag k="name" v="浅草ビュー ホテル (Asakusa View Hotel)"/>
+ <tag k="name:ja" v="浅草ビューホテル"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="47688580">
+ <nd ref="1866082097"/>
+ <nd ref="1866082063"/>
+ <nd ref="1866082061"/>
+ <nd ref="1866082062"/>
+ <nd ref="1866082055"/>
+ <nd ref="1866082049"/>
+ <nd ref="1866082039"/>
+ <nd ref="1866082045"/>
+ <nd ref="1866082015"/>
+ <nd ref="1866081996"/>
+ <nd ref="1866081983"/>
+ <nd ref="1866082053"/>
+ <nd ref="1866082070"/>
+ <nd ref="1866082080"/>
+ <nd ref="1866082086"/>
+ <nd ref="1866082076"/>
+ <nd ref="1866082097"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="55441040">
+ <nd ref="696656257"/>
+ <nd ref="696656255"/>
+ <nd ref="1540357117"/>
+ <nd ref="1540357115"/>
+ <nd ref="1540357116"/>
+ <nd ref="1539225928"/>
+ <nd ref="1539225939"/>
+ <nd ref="1539225940"/>
+ <nd ref="696656260"/>
+ <nd ref="742560942"/>
+ <nd ref="686510422"/>
+ <nd ref="696656257"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="セルリアンタワー"/>
+ <tag k="name:en" v="Cerulean Tower Tokyo Hotel"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="68523635">
+ <nd ref="824067470"/>
+ <nd ref="824067471"/>
+ <nd ref="1584472133"/>
+ <nd ref="1584472135"/>
+ <nd ref="824067472"/>
+ <nd ref="1584472141"/>
+ <nd ref="824067473"/>
+ <nd ref="824067474"/>
+ <nd ref="824067475"/>
+ <nd ref="1584472149"/>
+ <nd ref="824067476"/>
+ <nd ref="824067470"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="グランドアーク半蔵門 (Grand Arc Hanzomon)"/>
+ <tag k="name:en" v="Grand Arc Hanzomon"/>
+ <tag k="operator" v="帝国ホテルグループ"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="76187056">
+ <nd ref="898968882"/>
+ <nd ref="1918061925"/>
+ <nd ref="1918061926"/>
+ <nd ref="1918061898"/>
+ <nd ref="1918061897"/>
+ <nd ref="898968884"/>
+ <nd ref="1918061886"/>
+ <nd ref="898968885"/>
+ <nd ref="1918061948"/>
+ <nd ref="1918061934"/>
+ <nd ref="1918062010"/>
+ <nd ref="1918062025"/>
+ <nd ref="898968886"/>
+ <nd ref="898968882"/>
+ <tag k="building" v="yes"/>
+ <tag k="layer" v="3"/>
+ <tag k="name" v="江戸東京博物館 (Edo Tokyo Museum)"/>
+ <tag k="name:en" v="Edo Tokyo Museum"/>
+ <tag k="name:ja" v="江戸東京博物館"/>
+ <tag k="name:ja_rm" v="Edo Tokyo Hakubutsukan"/>
+ <tag k="phone" v="+81 03-3626-9974"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.edo-tokyo-museum.or.jp/"/>
+ </way>
+ <way id="87250237">
+ <nd ref="1014529179"/>
+ <nd ref="1014529570"/>
+ <nd ref="1014529009"/>
+ <nd ref="1014529701"/>
+ <nd ref="1014529123"/>
+ <nd ref="1014529860"/>
+ <nd ref="1014529289"/>
+ <nd ref="1014529979"/>
+ <nd ref="1014529179"/>
+ <tag k="disused" v="yes"/>
+ <tag k="name" v="電力館"/>
+ <tag k="source" v="bing"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="http://ja.wikipedia.org/wiki/%E9%9B%BB%E5%8A%9B%E9%A4%A8"/>
+ </way>
+ <way id="87439168">
+ <nd ref="1016728556"/>
+ <nd ref="1016729374"/>
+ <nd ref="1016728315"/>
+ <nd ref="1016728789"/>
+ <nd ref="1016729179"/>
+ <nd ref="1016729549"/>
+ <nd ref="1016728556"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="The Prince Park Tower Tokyo"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="89041321">
+ <nd ref="1033221795"/>
+ <nd ref="1033221818"/>
+ <nd ref="1033221789"/>
+ <nd ref="1033221830"/>
+ <nd ref="1033221799"/>
+ <nd ref="1033221771"/>
+ <nd ref="1033221815"/>
+ <nd ref="1033221787"/>
+ <nd ref="1033221837"/>
+ <nd ref="1033221811"/>
+ <nd ref="1033221795"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="東洋館 (tōyōkan)"/>
+ <tag k="name:en" v="tōyōkan (Asian gallery)"/>
+ <tag k="name:fr" v="tōyōkan (Galerie asiatique)"/>
+ <tag k="name:ja" v="東洋館"/>
+ <tag k="name:ja_kana" v="とうようかん"/>
+ <tag k="name:ja_rm" v="tōyōkan"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="94123727">
+ <nd ref="1094104625"/>
+ <nd ref="1094104961"/>
+ <nd ref="1094104313"/>
+ <nd ref="1094104344"/>
+ <nd ref="1094104240"/>
+ <nd ref="1094104308"/>
+ <nd ref="1094104987"/>
+ <nd ref="1094104729"/>
+ <nd ref="1094104758"/>
+ <nd ref="1094104506"/>
+ <nd ref="1094104793"/>
+ <nd ref="1094104622"/>
+ <nd ref="1094104956"/>
+ <nd ref="1094104761"/>
+ <nd ref="1094104583"/>
+ <nd ref="1094104342"/>
+ <nd ref="1094104289"/>
+ <nd ref="1094104914"/>
+ <nd ref="1094104621"/>
+ <nd ref="1094104923"/>
+ <nd ref="1094104695"/>
+ <nd ref="1094104462"/>
+ <nd ref="1094104299"/>
+ <nd ref="1094104755"/>
+ <nd ref="1094104531"/>
+ <nd ref="1094104554"/>
+ <nd ref="1094104374"/>
+ <nd ref="1094104722"/>
+ <nd ref="1094104703"/>
+ <nd ref="1094104419"/>
+ <nd ref="1094104557"/>
+ <nd ref="1094104945"/>
+ <nd ref="1094104585"/>
+ <nd ref="1094104339"/>
+ <nd ref="1094104625"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Rihga Royal Hotel"/>
+ <tag k="source" v="survey; Bing, 2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="96368966">
+ <nd ref="1116809007"/>
+ <nd ref="1116808725"/>
+ <nd ref="1116808758"/>
+ <nd ref="1116808288"/>
+ <nd ref="1116808317"/>
+ <nd ref="1116808313"/>
+ <nd ref="1116808285"/>
+ <nd ref="1116808305"/>
+ <nd ref="1116808888"/>
+ <nd ref="1116808840"/>
+ <nd ref="1116808050"/>
+ <nd ref="1116808041"/>
+ <nd ref="1116808951"/>
+ <nd ref="1116808074"/>
+ <nd ref="1116808793"/>
+ <nd ref="1116808632"/>
+ <nd ref="1116808639"/>
+ <nd ref="1116808597"/>
+ <nd ref="1116808075"/>
+ <nd ref="1116808351"/>
+ <nd ref="1116808135"/>
+ <nd ref="1116808084"/>
+ <nd ref="1116808282"/>
+ <nd ref="1116808105"/>
+ <nd ref="1116808111"/>
+ <nd ref="1116808192"/>
+ <nd ref="1116808428"/>
+ <nd ref="1116808572"/>
+ <nd ref="1116808590"/>
+ <nd ref="1116808733"/>
+ <nd ref="1116808362"/>
+ <nd ref="1116808472"/>
+ <nd ref="1116808599"/>
+ <nd ref="1116808348"/>
+ <nd ref="1116808048"/>
+ <nd ref="1116809012"/>
+ <nd ref="1116808194"/>
+ <nd ref="1116808382"/>
+ <nd ref="1116808686"/>
+ <nd ref="1116808109"/>
+ <nd ref="1116808171"/>
+ <nd ref="1116808107"/>
+ <nd ref="1116808507"/>
+ <nd ref="1116809007"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="こどもの城"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="103425086">
+ <nd ref="1194227215"/>
+ <nd ref="1599621808"/>
+ <nd ref="1599621778"/>
+ <nd ref="1599621764"/>
+ <nd ref="1599621749"/>
+ <nd ref="1599621741"/>
+ <nd ref="1599621739"/>
+ <nd ref="1599621734"/>
+ <nd ref="1599621705"/>
+ <nd ref="1599621681"/>
+ <nd ref="1194227222"/>
+ <nd ref="1599621850"/>
+ <nd ref="1599621819"/>
+ <nd ref="1194227305"/>
+ <nd ref="1599621874"/>
+ <nd ref="1599622202"/>
+ <nd ref="1194227284"/>
+ <nd ref="1194227225"/>
+ <nd ref="1194227215"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="116596172">
+ <nd ref="1314077045"/>
+ <nd ref="1314077046"/>
+ <nd ref="1314077039"/>
+ <nd ref="1314077038"/>
+ <nd ref="1314077045"/>
+ <tag k="building" v="yes"/>
+ <tag k="building:levels" v="10"/>
+ <tag k="height" v="35"/>
+ <tag k="name" v="かどやホテル"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="source:height" v="estimated"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="116596175">
+ <nd ref="1314077053"/>
+ <nd ref="1314077056"/>
+ <nd ref="1314077032"/>
+ <nd ref="1314077026"/>
+ <nd ref="1314077029"/>
+ <nd ref="1314077028"/>
+ <nd ref="1314077036"/>
+ <nd ref="1314077037"/>
+ <nd ref="1314077040"/>
+ <nd ref="1314077042"/>
+ <nd ref="1314077053"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="京王プラザホテル (Keio Plaza Hotel)"/>
+ <tag k="name:en" v="Keio Plaza Hotel"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="117928766">
+ <nd ref="1327332417"/>
+ <nd ref="1327332413"/>
+ <nd ref="1327332410"/>
+ <nd ref="1327332411"/>
+ <nd ref="1327332412"/>
+ <nd ref="1327332414"/>
+ <nd ref="1327332417"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="警察博物館"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="http://ja.wikipedia.org/wiki/%E8%AD%A6%E5%AF%9F%E5%8D%9A%E7%89%A9%E9%A4%A8"/>
+ </way>
+ <way id="117980980">
+ <nd ref="1327962126"/>
+ <nd ref="1327962100"/>
+ <nd ref="1327962118"/>
+ <nd ref="1327962127"/>
+ <nd ref="1327962126"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="八重洲富士谷ホテル"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="122343572">
+ <nd ref="1367401538"/>
+ <nd ref="1367401535"/>
+ <nd ref="1586834552"/>
+ <nd ref="1367401531"/>
+ <nd ref="1586834649"/>
+ <nd ref="1586834661"/>
+ <nd ref="1586834666"/>
+ <nd ref="1367401540"/>
+ <nd ref="1367401541"/>
+ <nd ref="1367401543"/>
+ <nd ref="1367401536"/>
+ <nd ref="1367401537"/>
+ <nd ref="1586834739"/>
+ <nd ref="1586834663"/>
+ <nd ref="1586834652"/>
+ <nd ref="1586834635"/>
+ <nd ref="1586834555"/>
+ <nd ref="1586834519"/>
+ <nd ref="1586834483"/>
+ <nd ref="1367401542"/>
+ <nd ref="1586834208"/>
+ <nd ref="1367401545"/>
+ <nd ref="1367401533"/>
+ <nd ref="1367401518"/>
+ <nd ref="1367401525"/>
+ <nd ref="1367401517"/>
+ <nd ref="1586834100"/>
+ <nd ref="1367401527"/>
+ <nd ref="1367401529"/>
+ <nd ref="1367401538"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="ホテルニューオータニ Hotel New Otani"/>
+ <tag k="source" v="Bing, 2007-03"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="133339481">
+ <nd ref="1467794589"/>
+ <nd ref="1467794588"/>
+ <nd ref="1467794592"/>
+ <nd ref="1467794593"/>
+ <nd ref="1467794590"/>
+ <nd ref="1467794591"/>
+ <nd ref="1467794587"/>
+ <nd ref="1467794586"/>
+ <nd ref="1467794589"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="日本民芸館"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="133340564">
+ <nd ref="1467808173"/>
+ <nd ref="1467808169"/>
+ <nd ref="1467808201"/>
+ <nd ref="1467808203"/>
+ <nd ref="1467808205"/>
+ <nd ref="1467808150"/>
+ <nd ref="1467808142"/>
+ <nd ref="1467808141"/>
+ <nd ref="1467808147"/>
+ <nd ref="1467808148"/>
+ <nd ref="1467808173"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="日本民芸館"/>
+ <tag k="name:en" v="Japan Folk Crafts Museum"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="135733581">
+ <nd ref="1490205492"/>
+ <nd ref="1490205493"/>
+ <nd ref="1490205495"/>
+ <nd ref="1490205494"/>
+ <nd ref="1490205489"/>
+ <nd ref="1490205488"/>
+ <nd ref="1490205485"/>
+ <nd ref="1490205486"/>
+ <nd ref="1490205484"/>
+ <nd ref="1490205483"/>
+ <nd ref="1490205481"/>
+ <nd ref="1490205480"/>
+ <nd ref="1490205479"/>
+ <nd ref="1490205477"/>
+ <nd ref="1490205473"/>
+ <nd ref="1490205468"/>
+ <nd ref="1490205467"/>
+ <nd ref="1490205466"/>
+ <nd ref="1490205462"/>
+ <nd ref="1490205472"/>
+ <nd ref="1490205478"/>
+ <nd ref="1490205482"/>
+ <nd ref="1490205487"/>
+ <nd ref="1490205490"/>
+ <nd ref="1490205491"/>
+ <nd ref="1490205492"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="赤坂エクセルホテル東急 (Akasaka Excel Hotel Tokyu)"/>
+ <tag k="name:en" v="Akasaka Excel Hotel Tokyu"/>
+ <tag k="source" v="Bing,2007-03"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="136048451">
+ <nd ref="1492967170"/>
+ <nd ref="1492967188"/>
+ <nd ref="1492967186"/>
+ <nd ref="1492967187"/>
+ <nd ref="1599621869"/>
+ <nd ref="1492967180"/>
+ <nd ref="1599621866"/>
+ <nd ref="1492967185"/>
+ <nd ref="1599621863"/>
+ <nd ref="1492967176"/>
+ <nd ref="1599621852"/>
+ <nd ref="1599621851"/>
+ <nd ref="1599621845"/>
+ <nd ref="1599621840"/>
+ <nd ref="1599621837"/>
+ <nd ref="1599621832"/>
+ <nd ref="1599621827"/>
+ <nd ref="1599621820"/>
+ <nd ref="1599621805"/>
+ <nd ref="1492967172"/>
+ <nd ref="1599621795"/>
+ <nd ref="1599621794"/>
+ <nd ref="1599621800"/>
+ <nd ref="1599621802"/>
+ <nd ref="1599621816"/>
+ <nd ref="1599621821"/>
+ <nd ref="1599621825"/>
+ <nd ref="1599621831"/>
+ <nd ref="1599621835"/>
+ <nd ref="1599621842"/>
+ <nd ref="1492967197"/>
+ <nd ref="1492967162"/>
+ <nd ref="1599621848"/>
+ <nd ref="1492967175"/>
+ <nd ref="1492967196"/>
+ <nd ref="1492967182"/>
+ <nd ref="1599621823"/>
+ <nd ref="1492967164"/>
+ <nd ref="1492967173"/>
+ <nd ref="1599621841"/>
+ <nd ref="1492967174"/>
+ <nd ref="1599621849"/>
+ <nd ref="1492967179"/>
+ <nd ref="1492967163"/>
+ <nd ref="1599621838"/>
+ <nd ref="1492967169"/>
+ <nd ref="1492967168"/>
+ <nd ref="1599621855"/>
+ <nd ref="1492967189"/>
+ <nd ref="1599621858"/>
+ <nd ref="1492967193"/>
+ <nd ref="1492967181"/>
+ <nd ref="1492967167"/>
+ <nd ref="1492967195"/>
+ <nd ref="1492967194"/>
+ <nd ref="1492967165"/>
+ <nd ref="1492967191"/>
+ <nd ref="1492967190"/>
+ <nd ref="1492967170"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="国立新美術館 (The National Art Center, Tokyo)"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.nact.jp/"/>
+ <tag k="wheelchair" v="yes"/>
+ </way>
+ <way id="136050249">
+ <nd ref="1490249764"/>
+ <nd ref="1492981403"/>
+ <nd ref="1586833418"/>
+ <nd ref="1492981407"/>
+ <nd ref="1492981404"/>
+ <nd ref="1492981378"/>
+ <nd ref="1492981401"/>
+ <nd ref="1586833064"/>
+ <nd ref="1492981359"/>
+ <nd ref="1492981377"/>
+ <nd ref="1586833059"/>
+ <nd ref="1492981358"/>
+ <nd ref="1586833048"/>
+ <nd ref="1492981379"/>
+ <nd ref="1492981388"/>
+ <nd ref="1586832879"/>
+ <nd ref="1492981375"/>
+ <nd ref="1490249709"/>
+ <nd ref="1586832868"/>
+ <nd ref="1490249708"/>
+ <nd ref="1586832840"/>
+ <nd ref="1490249704"/>
+ <nd ref="1490249695"/>
+ <nd ref="1490249692"/>
+ <nd ref="1490249693"/>
+ <nd ref="1490249698"/>
+ <nd ref="1490249699"/>
+ <nd ref="1490249700"/>
+ <nd ref="1490249701"/>
+ <nd ref="1490249703"/>
+ <nd ref="1490249706"/>
+ <nd ref="1490249713"/>
+ <nd ref="1490249718"/>
+ <nd ref="1490249720"/>
+ <nd ref="1490249731"/>
+ <nd ref="1490249734"/>
+ <nd ref="1490249761"/>
+ <nd ref="1490249763"/>
+ <nd ref="1586833238"/>
+ <nd ref="1490249764"/>
+ <tag k="name" v="ホテルニューオータニガーデンタワー"/>
+ <tag k="source" v="Bing,2007-03"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="136379450">
+ <nd ref="1496039435"/>
+ <nd ref="1496039406"/>
+ <nd ref="1496039404"/>
+ <nd ref="1496039430"/>
+ <nd ref="1496039435"/>
+ <tag k="building" v="yes"/>
+ <tag k="int_name" v="Fukudaya"/>
+ <tag k="name" v="福田屋"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="136396054">
+ <nd ref="1496232779"/>
+ <nd ref="1496232771"/>
+ <nd ref="1496232802"/>
+ <nd ref="1496232810"/>
+ <nd ref="1496232829"/>
+ <nd ref="1496232859"/>
+ <nd ref="1496232880"/>
+ <nd ref="1496233007"/>
+ <nd ref="1496233002"/>
+ <nd ref="1496233026"/>
+ <nd ref="1496232905"/>
+ <nd ref="1496232856"/>
+ <nd ref="1496232836"/>
+ <nd ref="1496232768"/>
+ <nd ref="1496232779"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="東急ステイ"/>
+ <tag k="name:en" v="Tokyo Stay Shibuya"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="136570578">
+ <nd ref="1498097583"/>
+ <nd ref="1498097571"/>
+ <nd ref="1498097565"/>
+ <nd ref="1498097582"/>
+ <nd ref="1498097583"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Shibuya City hotel"/>
+ <tag k="source" v="Bing,2007-04;survey"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="136587732">
+ <nd ref="1498427672"/>
+ <nd ref="1498427687"/>
+ <nd ref="1498427678"/>
+ <nd ref="1498427666"/>
+ <nd ref="1498427672"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="137625439">
+ <nd ref="1509430782"/>
+ <nd ref="1509430783"/>
+ <nd ref="1509430758"/>
+ <nd ref="1509430752"/>
+ <nd ref="1509430782"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="健康と医学の博物館 (Museum of Health and Medicine)"/>
+ <tag k="opening_hours" v="10:00-17:00; Dec 24-Jan 4 off"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="142156957">
+ <nd ref="1555877252"/>
+ <nd ref="1555877197"/>
+ <nd ref="1555877202"/>
+ <nd ref="1555877253"/>
+ <nd ref="1555877252"/>
+ <tag k="addr:housenumber" v="1-5-10"/>
+ <tag k="addr:street" v="shiba koen"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Shiba Park Hotel"/>
+ <tag k="phone" v="+181334334141"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="145344062">
+ <nd ref="1587598290"/>
+ <nd ref="1587598414"/>
+ <nd ref="1587598567"/>
+ <nd ref="1587598471"/>
+ <nd ref="1587598493"/>
+ <nd ref="1587598496"/>
+ <nd ref="1587598530"/>
+ <nd ref="1587598506"/>
+ <nd ref="1587598465"/>
+ <nd ref="1587598421"/>
+ <nd ref="1666008180"/>
+ <nd ref="1666008177"/>
+ <nd ref="1666008174"/>
+ <nd ref="1587598290"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="法隆寺宝物館 (Hōryūji hōmotsukan)"/>
+ <tag k="name:en" v="Gallery of Hōryū-ji Treasures"/>
+ <tag k="name:fr" v="Galerie des trésors du temple Hōryū-ji"/>
+ <tag k="name:ja" v="法隆寺宝物館"/>
+ <tag k="name:ja_kana" v="ほうりゅうじほうもつかん"/>
+ <tag k="name:ja_rm" v="Hōryūji hōmotsukan"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="145344185">
+ <nd ref="1587598386"/>
+ <nd ref="1587598361"/>
+ <nd ref="1587598329"/>
+ <nd ref="1587598354"/>
+ <nd ref="1587598349"/>
+ <nd ref="1587598275"/>
+ <nd ref="1587598271"/>
+ <nd ref="1587598216"/>
+ <nd ref="1587598243"/>
+ <nd ref="1587598215"/>
+ <nd ref="1587598202"/>
+ <nd ref="1587598199"/>
+ <nd ref="1587598220"/>
+ <nd ref="1587598247"/>
+ <nd ref="1587598265"/>
+ <nd ref="1587598269"/>
+ <nd ref="1587598322"/>
+ <nd ref="1587598317"/>
+ <nd ref="1587598365"/>
+ <nd ref="1587598387"/>
+ <nd ref="1587598395"/>
+ <nd ref="1587598398"/>
+ <nd ref="1587598416"/>
+ <nd ref="1587598438"/>
+ <nd ref="1587598448"/>
+ <nd ref="1587598449"/>
+ <nd ref="1587598440"/>
+ <nd ref="1587598442"/>
+ <nd ref="1587598419"/>
+ <nd ref="1587598423"/>
+ <nd ref="1587598474"/>
+ <nd ref="1587598477"/>
+ <nd ref="1587598542"/>
+ <nd ref="1587598539"/>
+ <nd ref="1587598544"/>
+ <nd ref="1587598562"/>
+ <nd ref="1587598558"/>
+ <nd ref="1587598556"/>
+ <nd ref="1587598527"/>
+ <nd ref="1587598511"/>
+ <nd ref="1587598503"/>
+ <nd ref="1587598445"/>
+ <nd ref="1587598447"/>
+ <nd ref="1587598413"/>
+ <nd ref="1587598393"/>
+ <nd ref="1587598386"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="表慶館 (Hyōkeikan)"/>
+ <tag k="name:en" v="Hyōkeikan"/>
+ <tag k="name:fr" v="Hyōkeikan"/>
+ <tag k="name:ja" v="表慶館"/>
+ <tag k="name:ja_kana" v="ひょうけいかん"/>
+ <tag k="name:ja_rm" v="Hyōkeikan"/>
+ <tag k="tourism" v="museum"/>
+ </way>
+ <way id="145394376">
+ <nd ref="1588142388"/>
+ <nd ref="1588142372"/>
+ <nd ref="1588142360"/>
+ <nd ref="1588142370"/>
+ <nd ref="1588142388"/>
+ <tag k="building" v="yes"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="146277353">
+ <nd ref="1595509846"/>
+ <nd ref="1595509966"/>
+ <nd ref="1595509860"/>
+ <nd ref="1595509669"/>
+ <nd ref="1595509846"/>
+ <tag k="addr:city" v="Minato-ku, Akasaka"/>
+ <tag k="addr:housenumber" v="6-3-17"/>
+ <tag k="addr:postcode" v="107-0052"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Grand Fresa Akasaka"/>
+ <tag k="name:en" v="Grand Fresa Akasaka"/>
+ <tag k="source" v="Bing,2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ <tag k="website" v="http://fresa-inn.jp/akasaka/"/>
+ </way>
+ <way id="149860751">
+ <nd ref="1628058671"/>
+ <nd ref="1628058710"/>
+ <nd ref="1628058705"/>
+ <nd ref="1717451057"/>
+ <nd ref="1717451048"/>
+ <nd ref="1717451039"/>
+ <nd ref="1628058654"/>
+ <nd ref="1628058671"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="アジュール竹芝"/>
+ <tag k="source" v="Bing,2007"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="152621679">
+ <nd ref="1654277679"/>
+ <nd ref="1654277682"/>
+ <nd ref="1654277681"/>
+ <nd ref="1654277680"/>
+ <nd ref="1654277678"/>
+ <nd ref="1654277675"/>
+ <nd ref="1654277673"/>
+ <nd ref="1654277671"/>
+ <nd ref="1654277670"/>
+ <nd ref="1654277659"/>
+ <nd ref="1654277665"/>
+ <nd ref="1654277669"/>
+ <nd ref="1654277672"/>
+ <nd ref="1654277674"/>
+ <nd ref="1654277676"/>
+ <nd ref="1654277677"/>
+ <nd ref="1654277679"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="後楽園ホテル"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="156471338">
+ <nd ref="1687215357"/>
+ <nd ref="1687215356"/>
+ <nd ref="1687215354"/>
+ <nd ref="1687215353"/>
+ <nd ref="1687215352"/>
+ <nd ref="1687215351"/>
+ <nd ref="1687215349"/>
+ <nd ref="1687215350"/>
+ <nd ref="1687215355"/>
+ <nd ref="1687215358"/>
+ <nd ref="1687215357"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="GRANDBEL HOTEL"/>
+ <tag k="source" v="BIng"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="159801887">
+ <nd ref="1719041749"/>
+ <nd ref="1719041683"/>
+ <nd ref="1719041527"/>
+ <nd ref="2017978545"/>
+ <nd ref="1719041413"/>
+ <nd ref="2017978538"/>
+ <nd ref="2017978537"/>
+ <nd ref="1719041297"/>
+ <nd ref="1719041424"/>
+ <nd ref="2017978543"/>
+ <nd ref="1719041448"/>
+ <nd ref="2017978547"/>
+ <nd ref="1719041512"/>
+ <nd ref="1719041749"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="hotel com's"/>
+ <tag k="source" v="Bing, 2007"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="164400382">
+ <nd ref="1760401145"/>
+ <nd ref="1760401166"/>
+ <nd ref="1760401152"/>
+ <nd ref="1760401151"/>
+ <nd ref="1760401138"/>
+ <nd ref="1760401130"/>
+ <nd ref="1760401145"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="旅館 山楽"/>
+ <tag k="source" v="image;Bing,2007-03"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="170407884">
+ <nd ref="1815494246"/>
+ <nd ref="1815494234"/>
+ <nd ref="1815494166"/>
+ <nd ref="1815494168"/>
+ <nd ref="1815494148"/>
+ <nd ref="1815494156"/>
+ <nd ref="1815494170"/>
+ <nd ref="1815494175"/>
+ <nd ref="1815494246"/>
+ <tag k="building" v="yes"/>
+ <tag k="internet_access" v="yes"/>
+ <tag k="internet_access:fee" v="no"/>
+ <tag k="name" v="Elite-Inn Yushima"/>
+ <tag k="source" v="Bing"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="175632178">
+ <nd ref="1861953870"/>
+ <nd ref="1861953846"/>
+ <nd ref="1861953842"/>
+ <nd ref="1861953869"/>
+ <nd ref="1861953870"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="Ryokan Asakusa Shigetsu"/>
+ <tag k="tourism" v="hotel"/>
+ </way>
+ <way id="203960902">
+ <nd ref="2139723248"/>
+ <nd ref="2139723246"/>
+ <nd ref="2139723244"/>
+ <nd ref="2139723238"/>
+ <nd ref="2139723236"/>
+ <nd ref="2139723247"/>
+ <nd ref="2139723248"/>
+ <tag k="KSJ2:ADS" v="上野公園7-20"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="国立科学博物館 (National Museum of Nature and Science)"/>
+ <tag k="name:de" v="Nationalmuseum der Naturwissenschaften"/>
+ <tag k="name:en" v="National Museum of Nature and Science"/>
+ <tag k="name:es" v="Museo Nacional de Ciencia de Japón"/>
+ <tag k="name:fr" v="Musée national de la nature et des sciences de Tokyo"/>
+ <tag k="name:ja" v="国立科学博物館"/>
+ <tag k="name:ja_kana" v="こくりつかがくはくぶつかん"/>
+ <tag k="name:ja_rm" v="Kokuritsu Kagaku Hakubutsukan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2; Bing"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="wikipedia" v="ja:国立科学博物館"/>
+ </way>
+ <way id="203960903">
+ <nd ref="2139723245"/>
+ <nd ref="2139723243"/>
+ <nd ref="2139723235"/>
+ <nd ref="2139723237"/>
+ <nd ref="2139723245"/>
+ <tag k="KSJ2:ADS" v="上野公園7-7"/>
+ <tag k="KSJ2:AdminArea" v="東京都台東区"/>
+ <tag k="KSJ2:PubFacAdmin" v="その他"/>
+ <tag k="name" v="国立西洋美術館 (National Museum of Western Art)"/>
+ <tag k="name:de" v="Nationalmuseum für westliche Kunst"/>
+ <tag k="name:fr" v="Musée national de l'art occidental"/>
+ <tag k="name:it" v="Museo nazionale d'arte occidentale"/>
+ <tag k="name:ja" v="国立西洋美術館"/>
+ <tag k="name:ja_kana" v="こくりつせいようびじゅつかん"/>
+ <tag k="name:ja_rm" v="Kokuritsu seiyō bijutsukan"/>
+ <tag k="note" v="National-Land Numerical Information (Public Facility) 2006, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(公共施設データ)平成19年 国土交通省"/>
+ <tag k="source" v="KSJ2; Bing"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-P02-v2_0.html"/>
+ <tag k="tourism" v="museum"/>
+ <tag k="website" v="http://www.nmwa.go.jp/jp/index.html"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:国立西洋美術館"/>
+ </way>
+
+</osm>
diff --git a/test/poi-service/script/tokyo/poi-client.conf b/test/poi-service/script/tokyo/poi-client.conf
new file mode 100644
index 0000000..17964fc
--- /dev/null
+++ b/test/poi-service/script/tokyo/poi-client.conf
@@ -0,0 +1,32 @@
+[General]
+InvalidHandle=255
+PoiDisplayTableRows=15
+DefaultTextToSearch=enter text to search
+DefaultTextToBeInitialized=to be initialized
+DefaultRadius=100
+CAMName=org.genivi.poiservice.POIContentAccessModule
+MapWidthInMeter = 5000
+MapHeightInMeter = 5000
+TimerPeriodForPosition = 1000
+
+[Attribute]
+Source = source
+WebSite = website
+Phone = phone
+Stars = stars
+OpeningHours = openingHours
+Number = addrHouseNumber
+Street = addrStreet
+PostCode = addrPostCode
+City = addrCity
+
+[Language]
+language=jpn
+country=JPN
+HMI=jp
+
+[DefaultLocation]
+latitude=35.6881075
+longitude=139.740715
+altitude=5
+
diff --git a/test/poi-service/script/tokyo/station.xml b/test/poi-service/script/tokyo/station.xml
new file mode 100644
index 0000000..2986193
--- /dev/null
+++ b/test/poi-service/script/tokyo/station.xml
@@ -0,0 +1,3204 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<osm version="0.6" generator="Overpass API">
+<note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note>
+<meta osm_base="2013-02-04T12:12:01Z"/>
+
+ <node id="31253693" lat="35.6625750" lon="139.7595728">
+ <tag k="name" v="汐留 (Shiodome)"/>
+ <tag k="name:en" v="Shiodome"/>
+ <tag k="name:ja" v="汐留"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:汐留駅"/>
+ </node>
+ <node id="31253872" lat="35.6551037" lon="139.7570353">
+ <tag k="name" v="浜松町 (Hamamatsuchō)"/>
+ <tag k="name:en" v="Hamamatsuchō"/>
+ <tag k="name:fr" v="Hamamatsuchō"/>
+ <tag k="name:ja" v="浜松町"/>
+ <tag k="name:ja_kana" v="はままつちょう"/>
+ <tag k="name:ja_rm" v="Hamamatsuchō"/>
+ <tag k="name:ru" v="Хамамацутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浜松町駅"/>
+ </node>
+ <node id="31253877" lat="35.6660605" lon="139.7579729">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="31253879" lat="35.6661494" lon="139.7584923">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="31253959" lat="35.6540074" lon="139.7619342">
+ <tag k="name" v="竹芝 (Takeshiba)"/>
+ <tag k="name:en" v="Takeshiba"/>
+ <tag k="name:fr" v="Takeshiba"/>
+ <tag k="name:ja" v="竹芝"/>
+ <tag k="name:ja_kana" v="たけしば"/>
+ <tag k="name:ja_rm" v="Takeshiba"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:竹芝駅"/>
+ </node>
+ <node id="31254011" lat="35.6556226" lon="139.7567054">
+ <tag k="name" v="浜松町 (Hamamatsuchō)"/>
+ <tag k="name:en" v="Hamamatsuchō"/>
+ <tag k="name:fr" v="Hamamatsuchō"/>
+ <tag k="name:ja" v="浜松町"/>
+ <tag k="name:ja_kana" v="はままつちょう"/>
+ <tag k="name:ja_rm" v="Hamamatsuchō"/>
+ <tag k="name:ru" v="Хамамацутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浜松町駅"/>
+ </node>
+ <node id="31254032" lat="35.6660731" lon="139.7581042">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="31254107" lat="35.6551117" lon="139.7569004">
+ <tag k="name" v="浜松町 (Hamamatsuchō)"/>
+ <tag k="name:en" v="Hamamatsuchō"/>
+ <tag k="name:fr" v="Hamamatsuchō"/>
+ <tag k="name:ja" v="浜松町"/>
+ <tag k="name:ja_kana" v="はままつちょう"/>
+ <tag k="name:ja_rm" v="Hamamatsuchō"/>
+ <tag k="name:ru" v="Хамамацутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:浜松町駅"/>
+ </node>
+ <node id="31254200" lat="35.6656840" lon="139.7593075">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="operator" v="ゆりかもめ"/>
+ <tag k="railway" v="station"/>
+ <tag k="website" v="http://www.yurikamome.co.jp/"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="31297737" lat="35.6538657" lon="139.7955812">
+ <tag k="name" v="豊洲 (Toyosu)"/>
+ <tag k="name:en" v="Toyosu"/>
+ <tag k="name:ja" v="豊洲"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:豊洲駅"/>
+ </node>
+ <node id="132108993" lat="35.6713425" lon="139.7027109">
+ <tag k="name" v="原宿 (Harajuku)"/>
+ <tag k="name:en" v="Harajuku"/>
+ <tag k="name:fr" v="Harajuku"/>
+ <tag k="name:ja" v="原宿"/>
+ <tag k="name:ja_rm" v="Harajuku"/>
+ <tag k="name:ru" v="Харадзюку"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:原宿駅"/>
+ </node>
+ <node id="132109147" lat="35.6895108" lon="139.7002757">
+ <tag k="name" v="新宿 (Shinjuku)"/>
+ <tag k="name:en" v="Shinjuku"/>
+ <tag k="name:fr" v="Shinjuku"/>
+ <tag k="name:ja" v="新宿"/>
+ <tag k="name:ja_kana" v="しんじゅく"/>
+ <tag k="name:ja_rm" v="Shinjuku"/>
+ <tag k="name:ru" v="Синдзюку"/>
+ <tag k="operator" v="JR東日本"/>
+ <tag k="platforms" v="7"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing 2010"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:新宿駅"/>
+ </node>
+ <node id="196838866" lat="35.7007869" lon="139.6973096">
+ <tag k="name" v="大久保 (Okubo)"/>
+ <tag k="name:en" v="Okubo"/>
+ <tag k="name:ja" v="大久保"/>
+ <tag k="name:ja_rm" v="Ōkubo"/>
+ <tag k="name:ru" v="Окубо"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大久保駅 (東京都)"/>
+ </node>
+ <node id="196838894" lat="35.7063777" lon="139.6851946">
+ <tag k="name" v="東中野 (Higashi-nakano)"/>
+ <tag k="name:en" v="Higashi-nakano"/>
+ <tag k="name:ja" v="東中野"/>
+ <tag k="name:ja_rm" v="Higashi-nakano"/>
+ <tag k="name:ru" v="Хигаси-Накано"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:東中野駅"/>
+ </node>
+ <node id="196845925" lat="35.6813055" lon="139.7114164">
+ <tag k="name" v="千駄ケ谷 (Sendagaya)"/>
+ <tag k="name:en" v="Sendagaya"/>
+ <tag k="name:fr" v="Sendagaya"/>
+ <tag k="name:ja" v="千駄ヶ谷"/>
+ <tag k="name:ru" v="Сэндагая"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="196845979" lat="35.6836899" lon="139.7023216">
+ <tag k="name:en" v="Yoyogi"/>
+ <tag k="name:fr" v="Yoyogi"/>
+ <tag k="name:ja_rm" v="Yoyogi"/>
+ <tag k="name:ru" v="Ёёги"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="199835839" lat="35.6540851" lon="139.7364641">
+ <tag k="name" v="麻布十番 (Azabu-Juban)"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:麻布十番駅"/>
+ </node>
+ <node id="236578265" lat="35.6907641" lon="139.7705532">
+ <tag k="name" v="神田 (Kanda)"/>
+ <tag k="name:en" v="Kanda"/>
+ <tag k="name:ja" v="神田"/>
+ <tag k="name:ja_rm" v="Kanda"/>
+ <tag k="name:ru" v="Канда"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:神田駅 (東京都)"/>
+ </node>
+ <node id="236578383" lat="35.7070022" lon="139.7747137">
+ <tag k="name" v="御徒町 (Okachimachi)"/>
+ <tag k="name:en" v="Okachimachi"/>
+ <tag k="name:ja" v="御徒町"/>
+ <tag k="name:ja_rm" v="Okachimachi"/>
+ <tag k="name:ru" v="Окатимати"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:御徒町駅"/>
+ </node>
+ <node id="236578444" lat="35.7125859" lon="139.7754452">
+ <tag k="name" v="上野 (Ueno)"/>
+ <tag k="name:en" v="Ueno"/>
+ <tag k="name:fr" v="Ueno"/>
+ <tag k="name:ja" v="上野"/>
+ <tag k="name:ja_kana" v="うえのおんしこうえん"/>
+ <tag k="name:ja_rm" v="Ueno"/>
+ <tag k="name:ru" v="Уэно"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:上野駅"/>
+ </node>
+ <node id="236578577" lat="35.7206495" lon="139.7787494">
+ <tag k="name" v="鶯谷 (Uguisudani)"/>
+ <tag k="name:en" v="Uguisudani"/>
+ <tag k="name:ja" v="鶯谷"/>
+ <tag k="name:ja_rm" v="Uguisudani"/>
+ <tag k="name:ru" v="Угуисудани"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:鶯谷駅"/>
+ </node>
+ <node id="236579598" lat="35.7131681" lon="139.7038922">
+ <tag k="name" v="高田馬場 (Takadanobaba)"/>
+ <tag k="name:ja_rm" v="Takadanobaba"/>
+ <tag k="name:ru" v="Такаданобаба"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:高田馬場駅"/>
+ </node>
+ <node id="236579696" lat="35.7013007" lon="139.7002421">
+ <tag k="name:ja_rm" v="Shin-Ōkubo"/>
+ <tag k="name:ru" v="Син-Окубо"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="237409677" lat="35.6800570" lon="139.7205743">
+ <tag k="name" v="信濃町 (Shinanomachi)"/>
+ <tag k="name:en" v="Shinanomachi"/>
+ <tag k="name:fr" v="Shinanomachi"/>
+ <tag k="name:ja" v="信濃町"/>
+ <tag k="name:ru" v="Синаномати"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:信濃町駅"/>
+ </node>
+ <node id="237410362" lat="35.7021473" lon="139.7542337">
+ <tag k="name" v="水道橋 (Suidobashi)"/>
+ <tag k="name:en" v="Suidobashi"/>
+ <tag k="name:ja" v="水道橋"/>
+ <tag k="name:ja_rm" v="Suidōbashi"/>
+ <tag k="name:ru" v="Суйдобаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:水道橋駅"/>
+ </node>
+ <node id="241896099" lat="35.6584620" lon="139.7013294">
+ <tag k="name" v="渋谷 (Shibuya)"/>
+ <tag k="name:en" v="Shibuya"/>
+ <tag k="name:fr" v="Shibuya"/>
+ <tag k="name:ja" v="渋谷"/>
+ <tag k="name:ja_rm" v="Shibuya"/>
+ <tag k="name:ru" v="Сибуя"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:渋谷駅"/>
+ </node>
+ <node id="246961290" lat="35.6575609" lon="139.7021323">
+ <tag k="name" v="渋谷 (Shibuya)"/>
+ <tag k="name:en" v="Shibuya"/>
+ <tag k="name:fr" v="Shibuya"/>
+ <tag k="name:ja" v="渋谷"/>
+ <tag k="name:ja_rm" v="Shibuya"/>
+ <tag k="name:ru" v="Сибуя"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:渋谷駅"/>
+ </node>
+ <node id="264440831" lat="35.7219770" lon="139.7524680">
+ <tag k="name" v="白山 (Hakusan)"/>
+ <tag k="name:en" v="Hakusan"/>
+ <tag k="name:ja" v="白山"/>
+ <tag k="name:ja_rm" v="Hakusan"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="I-13"/>
+ </node>
+ <node id="265036742" lat="35.6809712" lon="139.7674389">
+ <tag k="KSJ2:INT" v="1"/>
+ <tag k="KSJ2:INT_label" v="新幹線"/>
+ <tag k="KSJ2:LIN" v="東北新幹線"/>
+ <tag k="KSJ2:OPC" v="東日本旅客鉄道"/>
+ <tag k="KSJ2:RAC" v="11"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道JR"/>
+ <tag k="KSJ2:STN" v="東京"/>
+ <tag k="KSJ2:coordinate" v="35.680986 139.768109"/>
+ <tag k="KSJ2:lat" v="35.680986"/>
+ <tag k="KSJ2:long" v="139.768109"/>
+ <tag k="name" v="東京 (Tōkyō)"/>
+ <tag k="name:en" v="Tōkyō"/>
+ <tag k="name:ja" v="東京"/>
+ <tag k="name:ru" v="Токио"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:東京駅"/>
+ </node>
+ <node id="265036785" lat="35.7143299" lon="139.7780117">
+ <tag k="KSJ2:INT" v="1"/>
+ <tag k="KSJ2:INT_label" v="新幹線"/>
+ <tag k="KSJ2:LIN" v="東北新幹線"/>
+ <tag k="KSJ2:OPC" v="東日本旅客鉄道"/>
+ <tag k="KSJ2:RAC" v="11"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道JR"/>
+ <tag k="KSJ2:STN" v="上野"/>
+ <tag k="KSJ2:coordinate" v="35.714321 139.778017"/>
+ <tag k="KSJ2:lat" v="35.714321"/>
+ <tag k="KSJ2:long" v="139.778017"/>
+ <tag k="name" v="上野 (Ueno)"/>
+ <tag k="name:en" v="Ueno"/>
+ <tag k="name:fr" v="Ueno"/>
+ <tag k="name:ja" v="上野"/>
+ <tag k="name:ja_kana" v="うえのおんしこうえん"/>
+ <tag k="name:ja_rm" v="Ueno"/>
+ <tag k="name:ru" v="Уэно"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:上野駅"/>
+ </node>
+ <node id="265554028" lat="35.6727780" lon="139.7240280">
+ <tag k="name" v="青山一丁目 (Aoyama-itchōme)"/>
+ <tag k="name:en" v="Aoyama-itchōme"/>
+ <tag k="name:ja" v="青山一丁目"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:青山一丁目駅"/>
+ </node>
+ <node id="265554228" lat="35.6652044" lon="139.7124350">
+ <tag k="name" v="表参道 (Omote-sando)"/>
+ <tag k="name:en" v="Omote-sando"/>
+ <tag k="name:ja" v="表参道"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:表参道駅"/>
+ </node>
+ <node id="266083652" lat="35.6594510" lon="139.7021040">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="田園都市線;11号線半蔵門線"/>
+ <tag k="KSJ2:LOC" v="cv12426_rr"/>
+ <tag k="KSJ2:OPC" v="東京急行電鉄;東京地下鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_6456"/>
+ <tag k="KSJ2:STN" v="渋谷"/>
+ <tag k="KSJ2:coordinate" v="35.659451 139.702104"/>
+ <tag k="KSJ2:lat" v="35.659451"/>
+ <tag k="KSJ2:long" v="139.702104"/>
+ <tag k="KSJ2:segment" v="eb02_13485"/>
+ <tag k="name" v="渋谷 (Shibuya)"/>
+ <tag k="name:en" v="Shibuya"/>
+ <tag k="name:fr" v="Shibuya"/>
+ <tag k="name:ja" v="渋谷"/>
+ <tag k="name:ja_rm" v="Shibuya"/>
+ <tag k="name:ru" v="Сибуя"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="Z-01"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:渋谷駅"/>
+ </node>
+ <node id="270339450" lat="35.7113289" lon="139.7826636">
+ <tag k="name" v="稲荷町 (Inaricho)"/>
+ <tag k="name:en" v="Inaricho"/>
+ <tag k="name:ja" v="稲荷町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:稲荷町駅 (東京都)"/>
+ </node>
+ <node id="281366079" lat="35.6787369" lon="139.6936743">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="小田原線"/>
+ <tag k="KSJ2:LOC" v="cv6070_rr"/>
+ <tag k="KSJ2:OPC" v="小田急電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_3143"/>
+ <tag k="KSJ2:STN" v="参宮橋"/>
+ <tag k="KSJ2:coordinate" v="35.678126 139.693293"/>
+ <tag k="KSJ2:lat" v="35.678126"/>
+ <tag k="KSJ2:long" v="139.693293"/>
+ <tag k="KSJ2:segment" v="eb02_6378"/>
+ <tag k="name" v="参宮橋 (Sangubashi)"/>
+ <tag k="name:en" v="Sangubashi"/>
+ <tag k="name:fr" v="Sangūbashi"/>
+ <tag k="name:ja" v="参宮橋"/>
+ <tag k="name:ru" v="Сангубаси"/>
+ <tag k="name:zh" v="參宮橋站"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:参宮橋駅"/>
+ </node>
+ <node id="281366423" lat="35.6837150" lon="139.6988460">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="小田原線"/>
+ <tag k="KSJ2:LOC" v="cv6062_rr"/>
+ <tag k="KSJ2:OPC" v="小田急電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_3141"/>
+ <tag k="KSJ2:STN" v="南新宿"/>
+ <tag k="KSJ2:coordinate" v="35.683715 139.698846"/>
+ <tag k="KSJ2:lat" v="35.683715"/>
+ <tag k="KSJ2:long" v="139.698846"/>
+ <tag k="KSJ2:segment" v="eb02_6370"/>
+ <tag k="name" v="南新宿 (Minami Shinjuku)"/>
+ <tag k="name:ar" v="مينامي-شينجوكو"/>
+ <tag k="name:en" v="Minami Shinjuku"/>
+ <tag k="name:fr" v="Minami Shinjuku"/>
+ <tag k="name:ja" v="南新宿"/>
+ <tag k="name:ko" v="미나미신주쿠 역"/>
+ <tag k="name:ru" v="Минами-Синдзюку"/>
+ <tag k="name:zh" v="南新宿站"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ru:Минами-Синдзюку (станция)"/>
+ </node>
+ <node id="281366434" lat="35.6915552" lon="139.6996818">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="小田原線"/>
+ <tag k="KSJ2:LOC" v="cv6071_rr"/>
+ <tag k="KSJ2:OPC" v="小田急電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_3146"/>
+ <tag k="KSJ2:STN" v="新宿"/>
+ <tag k="KSJ2:coordinate" v="35.691359 139.699645"/>
+ <tag k="KSJ2:lat" v="35.691359"/>
+ <tag k="KSJ2:long" v="139.699645"/>
+ <tag k="KSJ2:segment" v="eb02_6379"/>
+ <tag k="name" v="新宿 (Shinjuku)"/>
+ <tag k="name:en" v="Shinjuku"/>
+ <tag k="name:fr" v="Shinjuku"/>
+ <tag k="name:ja" v="新宿"/>
+ <tag k="name:ja_kana" v="しんじゅく"/>
+ <tag k="name:ja_rm" v="Shinjuku"/>
+ <tag k="name:ru" v="Синдзюку"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:新宿駅"/>
+ </node>
+ <node id="281366568" lat="35.6697010" lon="139.6890770">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="小田原線"/>
+ <tag k="KSJ2:LOC" v="cv6066_rr"/>
+ <tag k="KSJ2:OPC" v="小田急電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_3137"/>
+ <tag k="KSJ2:STN" v="代々木八幡"/>
+ <tag k="KSJ2:coordinate" v="35.669701 139.689077"/>
+ <tag k="KSJ2:lat" v="35.669701"/>
+ <tag k="KSJ2:long" v="139.689077"/>
+ <tag k="KSJ2:segment" v="eb02_6374"/>
+ <tag k="name" v="代々木八幡 (Yoyogi Hachiman)"/>
+ <tag k="name:en" v="Yoyogi Hachiman"/>
+ <tag k="name:ja" v="代々木八幡"/>
+ <tag k="name:ru" v="Ёёги-Хатиман"/>
+ <tag k="name:zh" v="代代木八幡站"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:代々木八幡駅"/>
+ </node>
+ <node id="281366963" lat="35.6690611" lon="139.6799711">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="小田原線"/>
+ <tag k="KSJ2:LOC" v="cv12856_rr"/>
+ <tag k="KSJ2:OPC" v="小田急電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_3151"/>
+ <tag k="KSJ2:STN" v="代々木上原"/>
+ <tag k="KSJ2:coordinate" v="35.668703 139.679219"/>
+ <tag k="KSJ2:lat" v="35.668703"/>
+ <tag k="KSJ2:long" v="139.679219"/>
+ <tag k="KSJ2:segment" v="eb02_6383"/>
+ <tag k="name" v="代々木上原 (Yoyogi-Uehara)"/>
+ <tag k="name:ar" v="يويوغي-أويهارا"/>
+ <tag k="name:en" v="Yoyogi-Uehara"/>
+ <tag k="name:ja" v="代々木上原"/>
+ <tag k="name:ko" v="요요기우에하라 역"/>
+ <tag k="name:ru" v="Ёёги-Уэхара"/>
+ <tag k="name:zh" v="代代木上原站"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:代々木上原駅"/>
+ </node>
+ <node id="281417661" lat="35.6887050" lon="139.6993170">
+ <tag k="KSJ2:INT" v="3"/>
+ <tag k="KSJ2:INT_label" v="公営鉄道"/>
+ <tag k="KSJ2:LIN" v="10号線新宿線"/>
+ <tag k="KSJ2:LOC" v="cv1138_rr"/>
+ <tag k="KSJ2:OPC" v="東京都"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_648"/>
+ <tag k="KSJ2:STN" v="新宿"/>
+ <tag k="KSJ2:coordinate" v="35.688705 139.699317"/>
+ <tag k="KSJ2:lat" v="35.688705"/>
+ <tag k="KSJ2:long" v="139.699317"/>
+ <tag k="KSJ2:segment" v="eb02_1183"/>
+ <tag k="name" v="新宿 (Shinjuku)"/>
+ <tag k="name:en" v="Shinjuku"/>
+ <tag k="name:fr" v="Shinjuku"/>
+ <tag k="name:ja" v="新宿"/>
+ <tag k="name:ja_kana" v="しんじゅく"/>
+ <tag k="name:ja_rm" v="Shinjuku"/>
+ <tag k="name:ru" v="Синдзюку"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="S-01"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://w3land.mlit.go.jp/ksj2/datalist/N02.html"/>
+ <tag k="wikipedia" v="ja:新宿駅"/>
+ </node>
+ <node id="281417682" lat="35.6816950" lon="139.6886240">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="京王線"/>
+ <tag k="KSJ2:LOC" v="cv1140_rr"/>
+ <tag k="KSJ2:OPC" v="京王電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_646"/>
+ <tag k="KSJ2:STN" v="初台"/>
+ <tag k="KSJ2:coordinate" v="35.681695 139.688624"/>
+ <tag k="KSJ2:lat" v="35.681695"/>
+ <tag k="KSJ2:long" v="139.688624"/>
+ <tag k="KSJ2:segment" v="eb02_1185"/>
+ <tag k="name" v="初台 (Hatsudai)"/>
+ <tag k="name:en" v="Hatsudai"/>
+ <tag k="name:ja" v="初台"/>
+ <tag k="name:ru" v="Хацудай"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:初台駅"/>
+ </node>
+ <node id="281418439" lat="35.6903547" lon="139.6990892">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="京王線"/>
+ <tag k="KSJ2:LOC" v="cv1144_rr"/>
+ <tag k="KSJ2:OPC" v="京王電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_642"/>
+ <tag k="KSJ2:STN" v="新宿"/>
+ <tag k="KSJ2:coordinate" v="35.690467 139.699166"/>
+ <tag k="KSJ2:lat" v="35.690467"/>
+ <tag k="KSJ2:long" v="139.699166"/>
+ <tag k="KSJ2:segment" v="eb02_1189"/>
+ <tag k="name" v="新宿 (Shinjuku)"/>
+ <tag k="name:en" v="Shinjuku"/>
+ <tag k="name:fr" v="Shinjuku"/>
+ <tag k="name:ja" v="新宿"/>
+ <tag k="name:ja_kana" v="しんじゅく"/>
+ <tag k="name:ja_rm" v="Shinjuku"/>
+ <tag k="name:ru" v="Синдзюку"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:新宿駅"/>
+ </node>
+ <node id="286932375" lat="35.6589024" lon="139.6833626">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="井の頭線"/>
+ <tag k="KSJ2:LOC" v="cv1124_rr"/>
+ <tag k="KSJ2:OPC" v="京王電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_621"/>
+ <tag k="KSJ2:STN" v="駒場東大前"/>
+ <tag k="KSJ2:coordinate" v="35.658861 139.683169"/>
+ <tag k="KSJ2:lat" v="35.658861"/>
+ <tag k="KSJ2:long" v="139.683169"/>
+ <tag k="KSJ2:segment" v="eb02_1169"/>
+ <tag k="name" v="駒場東大前 (Komaba-todaimae)"/>
+ <tag k="name:en" v="Komaba-todaimae"/>
+ <tag k="name:ja" v="駒場東大前"/>
+ <tag k="name:ru" v="Комаба-Тодаймаэ"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:駒場東大前駅"/>
+ </node>
+ <node id="286932377" lat="35.6572037" lon="139.6935163">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="井の頭線"/>
+ <tag k="KSJ2:LOC" v="cv1125_rr"/>
+ <tag k="KSJ2:OPC" v="京王電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_622"/>
+ <tag k="KSJ2:STN" v="神泉"/>
+ <tag k="KSJ2:coordinate" v="35.657183 139.693410"/>
+ <tag k="KSJ2:lat" v="35.657183"/>
+ <tag k="KSJ2:long" v="139.693410"/>
+ <tag k="KSJ2:segment" v="eb02_1170"/>
+ <tag k="name" v="神泉 (Shinsen)"/>
+ <tag k="name:en" v="Shinsen"/>
+ <tag k="name:ja" v="神泉"/>
+ <tag k="name:ru" v="Синсэн"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:神泉駅"/>
+ </node>
+ <node id="286932730" lat="35.6587938" lon="139.6996161">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="井の頭線"/>
+ <tag k="KSJ2:LOC" v="cv1123_rr"/>
+ <tag k="KSJ2:OPC" v="京王電鉄"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_624"/>
+ <tag k="KSJ2:STN" v="渋谷"/>
+ <tag k="KSJ2:coordinate" v="35.658716 139.699881"/>
+ <tag k="KSJ2:lat" v="35.658716"/>
+ <tag k="KSJ2:long" v="139.699881"/>
+ <tag k="KSJ2:segment" v="eb02_1168"/>
+ <tag k="name" v="渋谷 (Shibuya)"/>
+ <tag k="name:en" v="Shibuya"/>
+ <tag k="name:fr" v="Shibuya"/>
+ <tag k="name:ja" v="渋谷"/>
+ <tag k="name:ru" v="Сибуя"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:渋谷駅"/>
+ </node>
+ <node id="308841984" lat="35.7117791" lon="139.7982434">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="伊勢崎線"/>
+ <tag k="KSJ2:LOC" v="cv17398_rr"/>
+ <tag k="KSJ2:OPC" v="東武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_8518"/>
+ <tag k="KSJ2:STN" v="浅草"/>
+ <tag k="KSJ2:coordinate" v="35.711571 139.797929"/>
+ <tag k="KSJ2:lat" v="35.711571"/>
+ <tag k="KSJ2:long" v="139.797929"/>
+ <tag k="KSJ2:segment" v="eb02_18217"/>
+ <tag k="name" v="浅草"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="308842577" lat="35.7115024" lon="139.7981273">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="伊勢崎線"/>
+ <tag k="KSJ2:LOC" v="cv17378_rr"/>
+ <tag k="KSJ2:OPC" v="東武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_8533"/>
+ <tag k="KSJ2:STN" v="浅草"/>
+ <tag k="KSJ2:coordinate" v="35.711389 139.797965"/>
+ <tag k="KSJ2:lat" v="35.711389"/>
+ <tag k="KSJ2:long" v="139.797965"/>
+ <tag k="KSJ2:segment" v="eb02_18196"/>
+ <tag k="name" v="浅草 (Asakusa)"/>
+ <tag k="name:en" v="Asakusa"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="name:ru" v="Асакуса"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="315862983" lat="35.6908178" lon="139.7703707">
+ <tag k="name" v="神田 (Kanda)"/>
+ <tag k="name:en" v="Kanda"/>
+ <tag k="name:ja" v="神田"/>
+ <tag k="name:ja_rm" v="Kanda"/>
+ <tag k="name:ru" v="Канда"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:神田駅 (東京都)"/>
+ </node>
+ <node id="315863181" lat="35.7018684" lon="139.7542272">
+ <tag k="name" v="水道橋 (Suidobashi)"/>
+ <tag k="name:en" v="Suidobashi"/>
+ <tag k="name:ja" v="水道橋"/>
+ <tag k="name:ja_rm" v="Suidōbashi"/>
+ <tag k="name:ru" v="Суйдобаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:水道橋駅"/>
+ </node>
+ <node id="315863463" lat="35.6813544" lon="139.7113609">
+ <tag k="name" v="千駄ケ谷 (Sendagaya)"/>
+ <tag k="name:en" v="Sendagaya"/>
+ <tag k="name:fr" v="Sendagaya"/>
+ <tag k="name:ja" v="千駄ケ谷"/>
+ <tag k="name:ja_rm" v="Sendagaya"/>
+ <tag k="name:ru" v="Сэндагая"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:千駄ケ谷駅"/>
+ </node>
+ <node id="315863473" lat="35.6834113" lon="139.7022873">
+ <tag k="name" v="代々木 (Yoyogi)"/>
+ <tag k="name:en" v="Yoyogi"/>
+ <tag k="name:fr" v="Yoyogi"/>
+ <tag k="name:ja" v="代々木"/>
+ <tag k="name:ja_rm" v="Yoyogi"/>
+ <tag k="name:ru" v="Ёёги"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:代々木駅"/>
+ </node>
+ <node id="315863497" lat="35.6800999" lon="139.7205435">
+ <tag k="name" v="信濃町 (Shinanomachi)"/>
+ <tag k="name:en" v="Shinanomachi"/>
+ <tag k="name:fr" v="Shinanomachi"/>
+ <tag k="name:ja" v="信濃町"/>
+ <tag k="name:ru" v="Синаномати"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:信濃町駅"/>
+ </node>
+ <node id="393101097" lat="35.6746521" lon="139.7624592">
+ <tag k="name" v="有楽町 (Yūrakuchō)"/>
+ <tag k="name:en" v="Yūrakuchō"/>
+ <tag k="name:fr" v="Yūrakuchō"/>
+ <tag k="name:ja" v="有楽町"/>
+ <tag k="name:ja_kana" v="ゆうらくちょう"/>
+ <tag k="name:ja_rm" v="Yūrakuchō"/>
+ <tag k="name:ru" v="Юракутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:有楽町駅"/>
+ </node>
+ <node id="393101119" lat="35.6744897" lon="139.7626287">
+ <tag k="name" v="有楽町 (Yūrakuchō)"/>
+ <tag k="name:en" v="Yūrakuchō"/>
+ <tag k="name:fr" v="Yūrakuchō"/>
+ <tag k="name:ja" v="有楽町"/>
+ <tag k="name:ja_kana" v="ゆうらくちょう"/>
+ <tag k="name:ja_rm" v="Yūrakuchō"/>
+ <tag k="name:ru" v="Юракутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:有楽町駅"/>
+ </node>
+ <node id="393101126" lat="35.6745821" lon="139.7625897">
+ <tag k="name" v="有楽町 (Yūrakuchō)"/>
+ <tag k="name:en" v="Yūrakuchō"/>
+ <tag k="name:fr" v="Yūrakuchō"/>
+ <tag k="name:ja" v="有楽町"/>
+ <tag k="name:ja_kana" v="ゆうらくちょう"/>
+ <tag k="name:ja_rm" v="Yūrakuchō"/>
+ <tag k="name:ru" v="Юракутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:有楽町駅"/>
+ </node>
+ <node id="393105021" lat="35.6551278" lon="139.7570787">
+ <tag k="name" v="浜松町 (Hamamatsuchō)"/>
+ <tag k="name:en" v="Hamamatsuchō"/>
+ <tag k="name:fr" v="Hamamatsuchō"/>
+ <tag k="name:ja" v="浜松町"/>
+ <tag k="name:ja_kana" v="はままつちょう"/>
+ <tag k="name:ja_rm" v="Hamamatsuchō"/>
+ <tag k="name:ru" v="Хамамацутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浜松町駅"/>
+ </node>
+ <node id="410589395" lat="35.7151478" lon="139.6873411">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="新宿線"/>
+ <tag k="KSJ2:LOC" v="cv9719_rr"/>
+ <tag k="KSJ2:OPC" v="西武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_4917"/>
+ <tag k="KSJ2:STN" v="中井"/>
+ <tag k="KSJ2:coordinate" v="35.715129 139.687348"/>
+ <tag k="KSJ2:lat" v="35.715129"/>
+ <tag k="KSJ2:long" v="139.687348"/>
+ <tag k="KSJ2:segment" v="eb02_10226"/>
+ <tag k="name" v="中井 (Nakai)"/>
+ <tag k="name:en" v="Nakai"/>
+ <tag k="name:ja" v="中井"/>
+ <tag k="name:ja_kana" v="なかい"/>
+ <tag k="name:ja_rm" v="Nakai"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:中井駅"/>
+ </node>
+ <node id="410589623" lat="35.7126540" lon="139.7038129">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="新宿線"/>
+ <tag k="KSJ2:LOC" v="cv9716_rr"/>
+ <tag k="KSJ2:OPC" v="西武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_4913"/>
+ <tag k="KSJ2:STN" v="高田馬場"/>
+ <tag k="KSJ2:coordinate" v="35.712576 139.704012"/>
+ <tag k="KSJ2:lat" v="35.712576"/>
+ <tag k="KSJ2:long" v="139.704012"/>
+ <tag k="KSJ2:segment" v="eb02_10223"/>
+ <tag k="name" v="高田馬場 (Takadanobaba)"/>
+ <tag k="name:en" v="Takadanobaba"/>
+ <tag k="name:ja" v="高田馬場"/>
+ <tag k="name:ru" v="Такаданобаба"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:高田馬場駅"/>
+ </node>
+ <node id="410589674" lat="35.6960912" lon="139.7000455">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="新宿線"/>
+ <tag k="KSJ2:LOC" v="cv9722_rr"/>
+ <tag k="KSJ2:OPC" v="西武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_4923"/>
+ <tag k="KSJ2:STN" v="西武新宿"/>
+ <tag k="KSJ2:coordinate" v="35.696051 139.700044"/>
+ <tag k="KSJ2:lat" v="35.696051"/>
+ <tag k="KSJ2:long" v="139.700044"/>
+ <tag k="KSJ2:segment" v="eb02_10229"/>
+ <tag k="name" v="西武新宿 (Seibu Shinjuku)"/>
+ <tag k="name:en" v="Seibu Shinjuku"/>
+ <tag k="name:ja" v="西武新宿"/>
+ <tag k="name:ja_kana" v="せいぶしんじゅく"/>
+ <tag k="name:ja_rm" v="Seibu Shinjuku"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:西武新宿駅"/>
+ </node>
+ <node id="410590121" lat="35.7157440" lon="139.6955027">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="新宿線"/>
+ <tag k="KSJ2:LOC" v="cv9718_rr"/>
+ <tag k="KSJ2:OPC" v="西武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_4912"/>
+ <tag k="KSJ2:STN" v="下落合"/>
+ <tag k="KSJ2:coordinate" v="35.715698 139.695497"/>
+ <tag k="KSJ2:lat" v="35.715698"/>
+ <tag k="KSJ2:long" v="139.695497"/>
+ <tag k="KSJ2:segment" v="eb02_10225"/>
+ <tag k="name" v="下落合 (Shimo-Ochiai)"/>
+ <tag k="name:en" v="Shimo-Ochiai"/>
+ <tag k="name:ja" v="下落合"/>
+ <tag k="name:ja_kana" v="しもおちあい"/>
+ <tag k="name:ja_rm" v="Shimo-Ochiai"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:下落合駅"/>
+ </node>
+ <node id="661104587" lat="35.7061910" lon="139.6837019"/>
+ <node id="661104588" lat="35.7061898" lon="139.6838812"/>
+ <node id="661104589" lat="35.7062314" lon="139.6838815"/>
+ <node id="661104590" lat="35.7062276" lon="139.6837022"/>
+ <node id="661104591" lat="35.7064236" lon="139.6838422"/>
+ <node id="661104592" lat="35.7064231" lon="139.6836249"/>
+ <node id="661104593" lat="35.7063609" lon="139.6836304"/>
+ <node id="661104594" lat="35.7062276" lon="139.6835422"/>
+ <node id="661104595" lat="35.7063590" lon="139.6835392"/>
+ <node id="661104596" lat="35.7063513" lon="139.6838440"/>
+ <node id="661104598" lat="35.7062464" lon="139.6859507"/>
+ <node id="661104599" lat="35.7062221" lon="139.6865474"/>
+ <node id="661104600" lat="35.7062209" lon="139.6861622"/>
+ <node id="661104601" lat="35.7061619" lon="139.6861625"/>
+ <node id="661104602" lat="35.7061648" lon="139.6859553"/>
+ <node id="661104603" lat="35.7064172" lon="139.6859858"/>
+ <node id="661104604" lat="35.7064178" lon="139.6860515"/>
+ <node id="661104605" lat="35.7063717" lon="139.6859886"/>
+ <node id="661104606" lat="35.7063682" lon="139.6860502"/>
+ <node id="661104607" lat="35.7063730" lon="139.6865423"/>
+ <node id="712804323" lat="35.7089720" lon="139.7965830">
+ <tag k="name" v="浅草 (Asakusa)"/>
+ <tag k="name:en" v="Asakusa"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="name:ru" v="Асакуса"/>
+ <tag k="railway" v="station"/>
+ <tag k="wheelchair" v="yes"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="748883630" lat="35.6571866" lon="139.6938485"/>
+ <node id="748883688" lat="35.6573150" lon="139.6938397"/>
+ <node id="748883708" lat="35.6571036" lon="139.6935027"/>
+ <node id="748883737" lat="35.6571790" lon="139.6937714">
+ <tag k="barrier" v="entrance"/>
+ <tag k="bicycle" v="no"/>
+ <tag k="foot" v="yes"/>
+ <tag k="name" v="南口"/>
+ </node>
+ <node id="748883763" lat="35.6572662" lon="139.6934403"/>
+ <node id="748883768" lat="35.6572266" lon="139.6934438">
+ <tag k="barrier" v="entrance"/>
+ <tag k="bicycle" v="no"/>
+ <tag k="foot" v="yes"/>
+ <tag k="name" v="西口"/>
+ </node>
+ <node id="789405355" lat="35.7066179" lon="139.7602092">
+ <tag k="name" v="本郷三丁目 (Hongo-sanchome)"/>
+ <tag k="name:en" v="Hongo-sanchome"/>
+ <tag k="name:ja" v="本郷三丁目"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M21"/>
+ <tag k="wikipedia" v="ja:本郷三丁目駅"/>
+ </node>
+ <node id="789412066" lat="35.7105675" lon="139.7530695">
+ <tag k="name" v="春日"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:春日駅 (東京都)"/>
+ </node>
+ <node id="790011743" lat="35.7065031" lon="139.6828723">
+ <tag k="fixme" v="position estimated"/>
+ <tag k="name" v="東中野 (都営大江戸線)"/>
+ <tag k="note" v="estimated"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:東中野駅"/>
+ </node>
+ <node id="832289046" lat="35.7213730" lon="139.7064491">
+ <tag k="int_name" v="Mejiro Station"/>
+ <tag k="name" v="目白 (Mejiro)"/>
+ <tag k="name:en" v="Mejiro"/>
+ <tag k="name:ja" v="目白"/>
+ <tag k="name:ja_rm" v="Mejiro"/>
+ <tag k="name:ru" v="Мэдзиро"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:目白駅"/>
+ </node>
+ <node id="907673367" lat="35.6589786" lon="139.7771860">
+ <tag k="name" v="勝どき (Kachidoki)"/>
+ <tag k="name:en" v="Kachidoki"/>
+ <tag k="name:ja" v="勝どき"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:勝どき駅"/>
+ </node>
+ <node id="955519000" lat="35.6897495" lon="139.6842645">
+ <tag k="name" v="西新宿五丁目(Nishi-shinjuku-gochōme Station)"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:西新宿五丁目駅"/>
+ </node>
+ <node id="1003337762" lat="35.7187678" lon="139.7513601">
+ <tag k="name" v="白山駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:白山駅 (東京都)"/>
+ </node>
+ <node id="1074739698" lat="35.7038890" lon="139.7342220">
+ <tag k="name" v="神楽坂 (Kagurazaka)"/>
+ <tag k="name:en" v="Kagurazaka"/>
+ <tag k="name:ja" v="神楽坂"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T07"/>
+ <tag k="wikipedia" v="ja:神楽坂駅"/>
+ </node>
+ <node id="1093541223" lat="35.7131834" lon="139.7040743"/>
+ <node id="1093541232" lat="35.7121880" lon="139.7034925"/>
+ <node id="1093541235" lat="35.7141620" lon="139.7041715"/>
+ <node id="1093541238" lat="35.7141686" lon="139.7041351"/>
+ <node id="1093541240" lat="35.7124756" lon="139.7037417"/>
+ <node id="1093541242" lat="35.7116203" lon="139.7032946"/>
+ <node id="1093541244" lat="35.7126539" lon="139.7036544"/>
+ <node id="1093541247" lat="35.7140644" lon="139.7041528"/>
+ <node id="1093541250" lat="35.7126804" lon="139.7038132"/>
+ <node id="1093541253" lat="35.7117917" lon="139.7033099"/>
+ <node id="1093541256" lat="35.7129678" lon="139.7041816"/>
+ <node id="1093541259" lat="35.7136886" lon="139.7038865"/>
+ <node id="1093541262" lat="35.7127430" lon="139.7037045"/>
+ <node id="1093541264" lat="35.7131267" lon="139.7042647"/>
+ <node id="1093541270" lat="35.7131311" lon="139.7036934"/>
+ <node id="1093541282" lat="35.7135664" lon="139.7040072"/>
+ <node id="1093541284" lat="35.7124536" lon="139.7035946"/>
+ <node id="1093541287" lat="35.7139260" lon="139.7039912"/>
+ <node id="1093541289" lat="35.7130309" lon="139.7038651"/>
+ <node id="1093541294" lat="35.7127139" lon="139.7036712"/>
+ <node id="1093541299" lat="35.7119877" lon="139.7036103"/>
+ <node id="1093541312" lat="35.7127609" lon="139.7038517"/>
+ <node id="1093541316" lat="35.7120901" lon="139.7033984"/>
+ <node id="1093541318" lat="35.7116285" lon="139.7032625"/>
+ <node id="1093541321" lat="35.7140825" lon="139.7040988"/>
+ <node id="1093541324" lat="35.7139248" lon="139.7040146"/>
+ <node id="1093541326" lat="35.7124734" lon="139.7035164"/>
+ <node id="1093541329" lat="35.7118723" lon="139.7037498"/>
+ <node id="1093541339" lat="35.7133924" lon="139.7037793"/>
+ <node id="1093541341" lat="35.7120073" lon="139.7035888"/>
+ <node id="1093541343" lat="35.7121946" lon="139.7039161"/>
+ <node id="1093541345" lat="35.7127652" lon="139.7041199"/>
+ <node id="1093541347" lat="35.7136837" lon="139.7040329"/>
+ <node id="1093541349" lat="35.7115413" lon="139.7036049"/>
+ <node id="1093541352" lat="35.7112975" lon="139.7035057"/>
+ <node id="1093541364" lat="35.7113345" lon="139.7033877"/>
+ <node id="1093541365" lat="35.7126249" lon="139.7037880"/>
+ <node id="1093541366" lat="35.7118718" lon="139.7033884"/>
+ <node id="1093541367" lat="35.7115369" lon="139.7034574"/>
+ <node id="1093541368" lat="35.7123580" lon="139.7039697"/>
+ <node id="1093541369" lat="35.7140763" lon="139.7040797"/>
+ <node id="1093541371" lat="35.7127287" lon="139.7037571"/>
+ <node id="1116460130" lat="35.7131714" lon="139.7040019"/>
+ <node id="1116460133" lat="35.7131920" lon="139.7040743"/>
+ <node id="1116460134" lat="35.7133271" lon="139.7040354"/>
+ <node id="1116460135" lat="35.7134871" lon="139.7040971"/>
+ <node id="1116460137" lat="35.7136385" lon="139.7041454"/>
+ <node id="1116460140" lat="35.7134959" lon="139.7040756"/>
+ <node id="1116460141" lat="35.7131616" lon="139.7040394"/>
+ <node id="1116460142" lat="35.7131322" lon="139.7042714"/>
+ <node id="1116460143" lat="35.7134980" lon="139.7045114"/>
+ <node id="1116460146" lat="35.7135612" lon="139.7043787"/>
+ <node id="1116460149" lat="35.7135111" lon="139.7044833"/>
+ <node id="1125926432" lat="35.6803864" lon="139.7198540"/>
+ <node id="1125926437" lat="35.6801174" lon="139.7210445"/>
+ <node id="1125926438" lat="35.6803004" lon="139.7195103"/>
+ <node id="1125926440" lat="35.6804638" lon="139.7198134"/>
+ <node id="1125926446" lat="35.6799126" lon="139.7202667"/>
+ <node id="1125926452" lat="35.6798690" lon="139.7205591"/>
+ <node id="1125926455" lat="35.6798232" lon="139.7209775"/>
+ <node id="1125926456" lat="35.6800041" lon="139.7196820"/>
+ <node id="1125926458" lat="35.6803047" lon="139.7198402"/>
+ <node id="1125926459" lat="35.6804943" lon="139.7195559"/>
+ <node id="1127216265" lat="35.6582756" lon="139.7012882"/>
+ <node id="1127216276" lat="35.6584077" lon="139.7012454"/>
+ <node id="1127216277" lat="35.6584711" lon="139.7016206"/>
+ <node id="1127216283" lat="35.6588853" lon="139.7005884"/>
+ <node id="1127216290" lat="35.6579766" lon="139.7012618"/>
+ <node id="1127216297" lat="35.6580248" lon="139.7014140"/>
+ <node id="1127216299" lat="35.6586815" lon="139.7012020"/>
+ <node id="1139431605" lat="35.6912979" lon="139.7356275"/>
+ <node id="1139431606" lat="35.6911428" lon="139.7357292"/>
+ <node id="1139431609" lat="35.6912294" lon="139.7356820"/>
+ <node id="1139431610" lat="35.6910776" lon="139.7356050"/>
+ <node id="1139431612" lat="35.6912213" lon="139.7356667"/>
+ <node id="1139431614" lat="35.6912246" lon="139.7354879"/>
+ <node id="1314077022" lat="35.6892079" lon="139.7000486"/>
+ <node id="1314077031" lat="35.6893781" lon="139.7010637"/>
+ <node id="1314077044" lat="35.6897551" lon="139.6999108"/>
+ <node id="1314077047" lat="35.6899305" lon="139.7009189"/>
+ <node id="1316050986" lat="35.6574840" lon="139.7018709"/>
+ <node id="1316051005" lat="35.6575334" lon="139.7020229"/>
+ <node id="1316051049" lat="35.6578774" lon="139.7014441"/>
+ <node id="1316051068" lat="35.6577100" lon="139.7016426"/>
+ <node id="1316051070" lat="35.6577673" lon="139.7016052"/>
+ <node id="1316051071" lat="35.6578922" lon="139.7017858"/>
+ <node id="1316051077" lat="35.6581978" lon="139.7013217"/>
+ <node id="1316051094" lat="35.6582711" lon="139.7015985"/>
+ <node id="1316051096" lat="35.6583003" lon="139.7017018"/>
+ <node id="1316051099" lat="35.6585235" lon="139.7014875"/>
+ <node id="1316051100" lat="35.6585466" lon="139.7015963"/>
+ <node id="1316051102" lat="35.6588272" lon="139.7013849"/>
+ <node id="1316051103" lat="35.6589282" lon="139.7010623"/>
+ <node id="1316051107" lat="35.6588345" lon="139.7000276"/>
+ <node id="1316051108" lat="35.6590402" lon="139.7012988"/>
+ <node id="1316051109" lat="35.6590442" lon="139.7013295"/>
+ <node id="1316051110" lat="35.6591249" lon="139.7012013"/>
+ <node id="1316051111" lat="35.6591356" lon="139.7012786"/>
+ <node id="1316051112" lat="35.6593273" lon="139.7010186"/>
+ <node id="1316051113" lat="35.6593381" lon="139.7011764"/>
+ <node id="1354438501" lat="35.6572699" lon="139.6934852"/>
+ <node id="1354438502" lat="35.6573638" lon="139.6934801"/>
+ <node id="1354438503" lat="35.6574208" lon="139.6936501"/>
+ <node id="1354438504" lat="35.6573745" lon="139.6937638"/>
+ <node id="1417172219" lat="35.6556008" lon="139.7569995"/>
+ <node id="1417172251" lat="35.6547368" lon="139.7570588"/>
+ <node id="1417172263" lat="35.6555496" lon="139.7572971"/>
+ <node id="1417172290" lat="35.6548772" lon="139.7568306"/>
+ <node id="1456006005" lat="35.7167239" lon="139.7586106">
+ <tag k="name" v="東大前"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:東大前駅"/>
+ </node>
+ <node id="1496842209" lat="35.6571102" lon="139.6935630"/>
+ <node id="1496842212" lat="35.6571302" lon="139.6935937"/>
+ <node id="1496842222" lat="35.6571684" lon="139.6935919"/>
+ <node id="1496842224" lat="35.6571698" lon="139.6934993"/>
+ <node id="1496842229" lat="35.6571855" lon="139.6934439"/>
+ <node id="1496842244" lat="35.6573715" lon="139.6935994"/>
+ <node id="1496842246" lat="35.6573736" lon="139.6937224"/>
+ <node id="1496842254" lat="35.6574057" lon="139.6937207"/>
+ <node id="1496842255" lat="35.6574122" lon="139.6936178"/>
+ <node id="1566526411" lat="35.7002621" lon="139.7437172"/>
+ <node id="1566526414" lat="35.7002924" lon="139.7436546"/>
+ <node id="1566526464" lat="35.7009848" lon="139.7442005"/>
+ <node id="1566526465" lat="35.7009947" lon="139.7441233"/>
+ <node id="1566526467" lat="35.7010027" lon="139.7441167"/>
+ <node id="1566526468" lat="35.7010484" lon="139.7442391"/>
+ <node id="1566526469" lat="35.7011075" lon="139.7442818"/>
+ <node id="1566526470" lat="35.7011109" lon="139.7441877"/>
+ <node id="1566526471" lat="35.7011725" lon="139.7443278"/>
+ <node id="1566526472" lat="35.7012297" lon="139.7443751"/>
+ <node id="1566526473" lat="35.7012515" lon="139.7442905"/>
+ <node id="1566526477" lat="35.7013466" lon="139.7444751"/>
+ <node id="1566526479" lat="35.7013569" lon="139.7443800"/>
+ <node id="1566526482" lat="35.7014592" lon="139.7445857"/>
+ <node id="1566526485" lat="35.7014899" lon="139.7445043"/>
+ <node id="1566526489" lat="35.7015740" lon="139.7447062"/>
+ <node id="1566526490" lat="35.7016225" lon="139.7446432"/>
+ <node id="1566526495" lat="35.7016769" lon="139.7448274"/>
+ <node id="1566526498" lat="35.7017347" lon="139.7448935"/>
+ <node id="1566526499" lat="35.7017501" lon="139.7447900"/>
+ <node id="1566526501" lat="35.7017842" lon="139.7449588"/>
+ <node id="1566526504" lat="35.7018386" lon="139.7450364"/>
+ <node id="1566526507" lat="35.7018775" lon="139.7450965"/>
+ <node id="1566526513" lat="35.7018921" lon="139.7449758"/>
+ <node id="1566526516" lat="35.7019335" lon="139.7451951"/>
+ <node id="1566526517" lat="35.7019385" lon="139.7450725"/>
+ <node id="1566526524" lat="35.7020333" lon="139.7453716"/>
+ <node id="1566526526" lat="35.7020340" lon="139.7452407"/>
+ <node id="1566526535" lat="35.7020958" lon="139.7454951"/>
+ <node id="1566526538" lat="35.7021027" lon="139.7453677"/>
+ <node id="1566526541" lat="35.7021418" lon="139.7455993"/>
+ <node id="1566526550" lat="35.7021702" lon="139.7455084"/>
+ <node id="1566526552" lat="35.7021955" lon="139.7457198"/>
+ <node id="1566526554" lat="35.7022340" lon="139.7456584"/>
+ <node id="1566526555" lat="35.7022428" lon="139.7458473"/>
+ <node id="1566526556" lat="35.7022908" lon="139.7458127"/>
+ <node id="1573806456" lat="35.6994098" lon="139.7651550"/>
+ <node id="1573806457" lat="35.6996364" lon="139.7651474"/>
+ <node id="1573806458" lat="35.6997060" lon="139.7636756"/>
+ <node id="1573806459" lat="35.6993183" lon="139.7651293"/>
+ <node id="1573806460" lat="35.6999107" lon="139.7639331"/>
+ <node id="1573806461" lat="35.6996907" lon="139.7637373"/>
+ <node id="1573806462" lat="35.6997060" lon="139.7638285"/>
+ <node id="1573806463" lat="35.6994250" lon="139.7650917"/>
+ <node id="1573806464" lat="35.6992856" lon="139.7652956"/>
+ <node id="1573806465" lat="35.6997253" lon="139.7637537"/>
+ <node id="1573806466" lat="35.6998562" lon="139.7636531"/>
+ <node id="1573806467" lat="35.6998890" lon="139.7635513"/>
+ <node id="1573806468" lat="35.6997775" lon="139.7637215"/>
+ <node id="1573806469" lat="35.6998171" lon="139.7636274"/>
+ <node id="1573806470" lat="35.6995848" lon="139.7653857"/>
+ <node id="1573806471" lat="35.6993401" lon="139.7653653"/>
+ <node id="1573806472" lat="35.7000131" lon="139.7636220"/>
+ <node id="1573951978" lat="35.7001047" lon="139.7437242"/>
+ <node id="1573952008" lat="35.7002112" lon="139.7438107"/>
+ <node id="1573952030" lat="35.7003167" lon="139.7436047"/>
+ <node id="1573952039" lat="35.7002055" lon="139.7435182"/>
+ <node id="1574055072" lat="35.6858863" lon="139.7309728"/>
+ <node id="1574055076" lat="35.6863198" lon="139.7299455"/>
+ <node id="1574055091" lat="35.6860889" lon="139.7308615"/>
+ <node id="1574055098" lat="35.6860094" lon="139.7303626"/>
+ <node id="1574055102" lat="35.6860769" lon="139.7309326"/>
+ <node id="1574055116" lat="35.6861532" lon="139.7307059"/>
+ <node id="1574055117" lat="35.6861085" lon="139.7308347"/>
+ <node id="1574055122" lat="35.6861172" lon="139.7307864"/>
+ <node id="1574055123" lat="35.6861085" lon="139.7308682"/>
+ <node id="1574055126" lat="35.6859081" lon="139.7308695"/>
+ <node id="1574055132" lat="35.6859687" lon="139.7308901"/>
+ <node id="1574055138" lat="35.6859774" lon="139.7308418"/>
+ <node id="1574055140" lat="35.6859135" lon="139.7308239"/>
+ <node id="1574055145" lat="35.6860399" lon="139.7310157"/>
+ <node id="1574055151" lat="35.6860591" lon="139.7309263"/>
+ <node id="1574055154" lat="35.6861680" lon="139.7307090"/>
+ <node id="1574055178" lat="35.6860933" lon="139.7308360"/>
+ <node id="1574055209" lat="35.6859796" lon="139.7301538"/>
+ <node id="1574055211" lat="35.6860072" lon="139.7301614"/>
+ <node id="1574055221" lat="35.6861375" lon="139.7307922"/>
+ <node id="1574055223" lat="35.6860362" lon="139.7298547"/>
+ <node id="1574055224" lat="35.6859687" lon="139.7303536"/>
+ <node id="1579679822" lat="35.7126494" lon="139.7036751"/>
+ <node id="1580297718" lat="35.7063709" lon="139.6863294"/>
+ <node id="1593485519" lat="35.6574975" lon="139.7019123"/>
+ <node id="1593485596" lat="35.6593374" lon="139.7011657"/>
+ <node id="1666008298" lat="35.7202384" lon="139.7790611"/>
+ <node id="1666008299" lat="35.7203169" lon="139.7791847"/>
+ <node id="1666008301" lat="35.7203675" lon="139.7789367"/>
+ <node id="1666008312" lat="35.7204460" lon="139.7790603"/>
+ <node id="1676538667" lat="35.7011872" lon="139.7000870"/>
+ <node id="1676538668" lat="35.7011918" lon="139.7000037"/>
+ <node id="1676538669" lat="35.7012156" lon="139.7000029"/>
+ <node id="1676538670" lat="35.7012169" lon="139.6999791"/>
+ <node id="1676538671" lat="35.7012175" lon="139.7003051"/>
+ <node id="1676538673" lat="35.7014516" lon="139.6969104"/>
+ <node id="1676538675" lat="35.7012336" lon="139.7000926"/>
+ <node id="1676538676" lat="35.7012381" lon="139.6999815"/>
+ <node id="1676538677" lat="35.7012420" lon="139.6999395"/>
+ <node id="1676538678" lat="35.7014113" lon="139.6968324"/>
+ <node id="1676538679" lat="35.7013715" lon="139.7003218"/>
+ <node id="1676538680" lat="35.7014004" lon="139.6999537"/>
+ <node id="1676538684" lat="35.7016398" lon="139.6967480"/>
+ <node id="1676538685" lat="35.7016522" lon="139.6965851"/>
+ <node id="1676749651" lat="35.6733781" lon="139.7035869"/>
+ <node id="1676749661" lat="35.6733809" lon="139.7035444"/>
+ <node id="1676749663" lat="35.6736956" lon="139.7038467"/>
+ <node id="1676749665" lat="35.6737218" lon="139.7037086"/>
+ <node id="1676749666" lat="35.6738770" lon="139.7041950"/>
+ <node id="1676749667" lat="35.6739621" lon="139.7038999"/>
+ <node id="1676749668" lat="35.6739845" lon="139.7039497"/>
+ <node id="1676749669" lat="35.6739860" lon="139.7038053"/>
+ <node id="1676749670" lat="35.6739920" lon="139.7039085"/>
+ <node id="1676749671" lat="35.6740145" lon="139.7038139"/>
+ <node id="1676749673" lat="35.6740224" lon="139.7037875"/>
+ <node id="1676749675" lat="35.6740245" lon="139.7037737"/>
+ <node id="1676749677" lat="35.6742400" lon="139.7040369"/>
+ <node id="1676749679" lat="35.6742799" lon="139.7038809"/>
+ <node id="1676749681" lat="35.6743498" lon="139.7043610"/>
+ <node id="1676749685" lat="35.6744825" lon="139.7039362"/>
+ <node id="1676749688" lat="35.6746342" lon="139.7044226"/>
+ <node id="1676749689" lat="35.6746864" lon="139.7041490"/>
+ <node id="1676749690" lat="35.6747012" lon="139.7044226"/>
+ <node id="1676749691" lat="35.6747295" lon="139.7040248"/>
+ <node id="1676749695" lat="35.6748367" lon="139.7040604"/>
+ <node id="1676749696" lat="35.6749144" lon="139.7040838"/>
+ <node id="1676749697" lat="35.6750026" lon="139.7042611"/>
+ <node id="1676749699" lat="35.6750329" lon="139.7041195"/>
+ <node id="1676750153" lat="35.6998726" lon="139.6977772"/>
+ <node id="1676750154" lat="35.6999230" lon="139.6979031"/>
+ <node id="1676750155" lat="35.7000399" lon="139.6976797"/>
+ <node id="1676750156" lat="35.7000875" lon="139.6978081"/>
+ <node id="1676750165" lat="35.7015241" lon="139.6966884"/>
+ <node id="1676750167" lat="35.7015425" lon="139.6967218"/>
+ <node id="1677072308" lat="35.7206473" lon="139.7063158"/>
+ <node id="1677072310" lat="35.7206662" lon="139.7062348"/>
+ <node id="1677072313" lat="35.7209084" lon="139.7064109"/>
+ <node id="1677072315" lat="35.7209244" lon="139.7066610"/>
+ <node id="1677072321" lat="35.7209754" lon="139.7064698"/>
+ <node id="1677072323" lat="35.7210122" lon="139.7063677"/>
+ <node id="1677072325" lat="35.7213283" lon="139.7067959"/>
+ <node id="1677072332" lat="35.7214014" lon="139.7065256"/>
+ <node id="1679318952" lat="35.6575873" lon="139.6974022"/>
+ <node id="1679318953" lat="35.6578864" lon="139.6972863"/>
+ <node id="1679318955" lat="35.6579847" lon="139.6987456"/>
+ <node id="1679318957" lat="35.6580128" lon="139.6987344"/>
+ <node id="1679318959" lat="35.6580236" lon="139.6987578"/>
+ <node id="1679318960" lat="35.6581237" lon="139.6987132"/>
+ <node id="1679318962" lat="35.6581370" lon="139.6987203"/>
+ <node id="1679318964" lat="35.6581593" lon="139.6987935"/>
+ <node id="1679318976" lat="35.6581593" lon="139.6988383"/>
+ <node id="1679318978" lat="35.6581659" lon="139.6988820"/>
+ <node id="1679318979" lat="35.6581832" lon="139.6990061"/>
+ <node id="1679318980" lat="35.6581981" lon="139.6989430"/>
+ <node id="1679318982" lat="35.6582163" lon="139.6989634"/>
+ <node id="1679318983" lat="35.6583896" lon="139.6985217"/>
+ <node id="1679318984" lat="35.6584073" lon="139.6985859"/>
+ <node id="1679318985" lat="35.6584399" lon="139.6986840"/>
+ <node id="1679318988" lat="35.6584771" lon="139.6987628"/>
+ <node id="1679318992" lat="35.6585418" lon="139.7000595"/>
+ <node id="1679319000" lat="35.6586942" lon="139.6992077"/>
+ <node id="1679319014" lat="35.6588355" lon="139.6996277"/>
+ <node id="1679319015" lat="35.6589150" lon="139.7000088"/>
+ <node id="1682293969" lat="35.7117981" lon="139.7982003">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="伊勢崎線"/>
+ <tag k="KSJ2:LOC" v="cv17398_rr"/>
+ <tag k="KSJ2:OPC" v="東武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_8518"/>
+ <tag k="KSJ2:STN" v="浅草"/>
+ <tag k="KSJ2:coordinate" v="35.711571 139.797929"/>
+ <tag k="KSJ2:lat" v="35.711571"/>
+ <tag k="KSJ2:long" v="139.797929"/>
+ <tag k="KSJ2:segment" v="eb02_18217"/>
+ <tag k="name" v="浅草"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="1682293990" lat="35.7118493" lon="139.7981095">
+ <tag k="KSJ2:INT" v="4"/>
+ <tag k="KSJ2:INT_label" v="民営鉄道"/>
+ <tag k="KSJ2:LIN" v="伊勢崎線"/>
+ <tag k="KSJ2:LOC" v="cv17398_rr"/>
+ <tag k="KSJ2:OPC" v="東武鉄道"/>
+ <tag k="KSJ2:RAC" v="12"/>
+ <tag k="KSJ2:RAC_label" v="普通鉄道"/>
+ <tag k="KSJ2:RAS" v="eb03_8518"/>
+ <tag k="KSJ2:STN" v="浅草"/>
+ <tag k="KSJ2:coordinate" v="35.711571 139.797929"/>
+ <tag k="KSJ2:lat" v="35.711571"/>
+ <tag k="KSJ2:long" v="139.797929"/>
+ <tag k="KSJ2:segment" v="eb02_18217"/>
+ <tag k="name" v="浅草"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="note" v="National-Land Numerical Information (Railway) 2007, MLIT Japan"/>
+ <tag k="note:ja" v="国土数値情報(鉄道データ)平成19年 国土交通省"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="KSJ2"/>
+ <tag k="source_ref" v="http://nlftp.mlit.go.jp/ksj/jpgis/datalist/KsjTmplt-N02-v1_1.html"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="1692889003" lat="35.6956407" lon="139.7941749"/>
+ <node id="1692889007" lat="35.6956621" lon="139.7938942"/>
+ <node id="1692889009" lat="35.6956990" lon="139.7939022"/>
+ <node id="1692889012" lat="35.6957329" lon="139.7941792"/>
+ <node id="1692889018" lat="35.6957843" lon="139.7922448"/>
+ <node id="1692889033" lat="35.6958032" lon="139.7920114"/>
+ <node id="1692889038" lat="35.6958157" lon="139.7931805"/>
+ <node id="1692889043" lat="35.6958225" lon="139.7922506"/>
+ <node id="1692889058" lat="35.6959303" lon="139.7923857"/>
+ <node id="1692889060" lat="35.6959578" lon="139.7919982"/>
+ <node id="1692889063" lat="35.6959952" lon="139.7931978"/>
+ <node id="1692889064" lat="35.6960091" lon="139.7930333"/>
+ <node id="1692889080" lat="35.6963035" lon="139.7925008"/>
+ <node id="1692889081" lat="35.6963087" lon="139.7924318"/>
+ <node id="1692889082" lat="35.6963219" lon="139.7930637"/>
+ <node id="1692889083" lat="35.6963301" lon="139.7925492"/>
+ <node id="1692889084" lat="35.6963333" lon="139.7925047"/>
+ <node id="1692889085" lat="35.6963530" lon="139.7926395"/>
+ <node id="1692889086" lat="35.6963611" lon="139.7926396"/>
+ <node id="1692889087" lat="35.6963694" lon="139.7925546"/>
+ <node id="1698152597" lat="35.6701382" lon="139.7027699"/>
+ <node id="1698152598" lat="35.6701559" lon="139.7025996"/>
+ <node id="1698152604" lat="35.6702872" lon="139.7027927"/>
+ <node id="1698152606" lat="35.6704385" lon="139.7026416"/>
+ <node id="1698152609" lat="35.6704450" lon="139.7027944"/>
+ <node id="1698152611" lat="35.6705879" lon="139.7027647"/>
+ <node id="1698152612" lat="35.6705960" lon="139.7026812"/>
+ <node id="1730435560" lat="35.6786154" lon="139.6935469"/>
+ <node id="1730435562" lat="35.6786555" lon="139.6937684"/>
+ <node id="1730435564" lat="35.6786608" lon="139.6934752"/>
+ <node id="1730435566" lat="35.6786902" lon="139.6934965">
+ <tag k="amenity" v="vending_machine"/>
+ <tag k="vending" v="public_transport_tickets"/>
+ </node>
+ <node id="1730435569" lat="35.6786924" lon="139.6936946"/>
+ <node id="1730435575" lat="35.6787152" lon="139.6935148">
+ <tag k="access" v="yes"/>
+ <tag k="entrance" v="main"/>
+ </node>
+ <node id="1730435578" lat="35.6789656" lon="139.6938718"/>
+ <node id="1730435580" lat="35.6790020" lon="139.6937972"/>
+ <node id="1730435581" lat="35.6790121" lon="139.6939710"/>
+ <node id="1730435582" lat="35.6790933" lon="139.6937895"/>
+ <node id="1808422475" lat="35.6803914" lon="139.7198243"/>
+ <node id="1808422477" lat="35.6804376" lon="139.7198326"/>
+ <node id="1808422478" lat="35.6804425" lon="139.7198061"/>
+ <node id="1817685075" lat="35.7070564" lon="139.7511990"/>
+ <node id="1817685076" lat="35.7070603" lon="139.7516240"/>
+ <node id="1817685077" lat="35.7070686" lon="139.7508990"/>
+ <node id="1817685080" lat="35.7071275" lon="139.7517037"/>
+ <node id="1817685083" lat="35.7071502" lon="139.7512411"/>
+ <node id="1817685086" lat="35.7071590" lon="139.7508997"/>
+ <node id="1817685089" lat="35.7071987" lon="139.7512377"/>
+ <node id="1817685090" lat="35.7072020" lon="139.7511155"/>
+ <node id="1817685091" lat="35.7072089" lon="139.7506018"/>
+ <node id="1817685093" lat="35.7072312" lon="139.7510538"/>
+ <node id="1817685106" lat="35.7073996" lon="139.7506072"/>
+ <node id="1817685112" lat="35.7074276" lon="139.7510498"/>
+ <node id="1817685119" lat="35.7074768" lon="139.7511103"/>
+ <node id="1817685121" lat="35.7074838" lon="139.7514511"/>
+ <node id="1817685126" lat="35.7075383" lon="139.7514559"/>
+ <node id="1817685128" lat="35.7075438" lon="139.7517037"/>
+ <node id="1817716746" lat="35.7064391" lon="139.7598085"/>
+ <node id="1817716755" lat="35.7064569" lon="139.7599687"/>
+ <node id="1817716756" lat="35.7064584" lon="139.7599811"/>
+ <node id="1817716758" lat="35.7064627" lon="139.7600599"/>
+ <node id="1817716760" lat="35.7064682" lon="139.7599668"/>
+ <node id="1817716761" lat="35.7064683" lon="139.7600958"/>
+ <node id="1817716769" lat="35.7064994" lon="139.7600239"/>
+ <node id="1817716785" lat="35.7065592" lon="139.7600865"/>
+ <node id="1817716791" lat="35.7065718" lon="139.7603339"/>
+ <node id="1817716796" lat="35.7065782" lon="139.7597850"/>
+ <node id="1817716799" lat="35.7065847" lon="139.7598295"/>
+ <node id="1817716805" lat="35.7066287" lon="139.7603274"/>
+ <node id="1817716808" lat="35.7066358" lon="139.7604212"/>
+ <node id="1817716810" lat="35.7066386" lon="139.7598012"/>
+ <node id="1817716814" lat="35.7066770" lon="139.7602040"/>
+ <node id="1817716817" lat="35.7066871" lon="139.7604149"/>
+ <node id="1817716822" lat="35.7067129" lon="139.7600908"/>
+ <node id="1817716823" lat="35.7067160" lon="139.7597733"/>
+ <node id="1817716824" lat="35.7067358" lon="139.7600435"/>
+ <node id="1817716825" lat="35.7067370" lon="139.7601200"/>
+ <node id="1817716826" lat="35.7067402" lon="139.7601934"/>
+ <node id="1817716832" lat="35.7067610" lon="139.7598242"/>
+ <node id="1817716833" lat="35.7067623" lon="139.7599011"/>
+ <node id="1825133008" lat="35.6719440" lon="139.7638890">
+ <tag k="name" v="銀座 (Ginza)"/>
+ <tag k="name:en" v="Ginza"/>
+ <tag k="name:fr" v="Ginza"/>
+ <tag k="name:ja" v="銀座"/>
+ <tag k="name:ja_kana" v="ぎんざ"/>
+ <tag k="name:ja_rm" v="Ginza"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:銀座駅"/>
+ </node>
+ <node id="1825133046" lat="35.7072930" lon="139.7506042"/>
+ <node id="1825133049" lat="35.7073185" lon="139.7506049"/>
+ <node id="1825133052" lat="35.7073305" lon="139.7517037"/>
+ <node id="1825133056" lat="35.7073625" lon="139.7517037"/>
+ <node id="1832344259" lat="35.6884720" lon="139.7881390">
+ <tag k="name" v="浜町 (Hamachō)"/>
+ <tag k="name:en" v="Hamachō"/>
+ <tag k="name:ja" v="浜町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浜町駅"/>
+ </node>
+ <node id="1844517097" lat="35.6750764" lon="139.7596059">
+ <tag k="name" v="日比谷 (Hibiya)"/>
+ <tag k="name:en" v="Hibiya"/>
+ <tag k="name:fr" v="Hibiya"/>
+ <tag k="name:ja" v="日比谷"/>
+ <tag k="name:ja_kana" v="ひびや"/>
+ <tag k="name:ja_rm" v="Hibiya Dōri"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:日比谷駅"/>
+ </node>
+ <node id="1894258026" lat="35.6954720" lon="139.7514170">
+ <tag k="name" v="九段下 (Kudanshita)"/>
+ <tag k="name:en" v="Kudanshita"/>
+ <tag k="name:ja" v="九段下"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:九段下駅"/>
+ </node>
+ <node id="1894258028" lat="35.6950560" lon="139.7666670">
+ <tag k="name" v="小川町 (Ogawamachi)"/>
+ <tag k="name:en" v="Ogawamachi"/>
+ <tag k="name:ja" v="小川町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:小川町駅 (東京都)"/>
+ </node>
+ <node id="1894258029" lat="35.6955560" lon="139.7758610">
+ <tag k="name" v="岩本町 (Iwamotochō)"/>
+ <tag k="name:en" v="Iwamotochō"/>
+ <tag k="name:ja" v="岩本町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:岩本町駅"/>
+ </node>
+ <node id="1894258031" lat="35.6915560" lon="139.7376390">
+ <tag k="name" v="市ヶ谷 (Ichigaya)"/>
+ <tag k="name:en" v="Ichigaya"/>
+ <tag k="name:ja" v="市ヶ谷"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="1894258032" lat="35.6906390" lon="139.7062500">
+ <tag k="name" v="新宿三丁目 (Shinjuku-sanchome)"/>
+ <tag k="name:en" v="Shinjuku-sanchome"/>
+ <tag k="name:ja" v="新宿三丁目"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新宿三丁目駅"/>
+ </node>
+ <node id="1894258034" lat="35.7057738" lon="139.7212830">
+ <tag k="name" v="早稲田 (Waseda)"/>
+ <tag k="name:en" v="Waseda"/>
+ <tag k="name:ja" v="早稲田"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T04"/>
+ <tag k="wikipedia" v="ja:早稲田駅 (東京地下鉄)"/>
+ </node>
+ <node id="1894258037" lat="35.6923890" lon="139.7228610">
+ <tag k="name" v="曙橋 (Akebonobashi)"/>
+ <tag k="name:en" v="Akebonobashi"/>
+ <tag k="name:ja" v="曙橋"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:曙橋駅"/>
+ </node>
+ <node id="1894258038" lat="35.6959170" lon="139.7580560">
+ <tag k="name" v="神保町 (Jimbōchō)"/>
+ <tag k="name:en" v="Jimbōchō"/>
+ <tag k="name:ja" v="神保町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:神保町駅"/>
+ </node>
+ <node id="1894258040" lat="35.6904235" lon="139.7571391">
+ <tag k="name" v="竹橋 (Takebashi)"/>
+ <tag k="name:en" v="Takebashi"/>
+ <tag k="name:ja" v="竹橋"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T08"/>
+ <tag k="wikipedia" v="ja:竹橋駅"/>
+ </node>
+ <node id="1894258041" lat="35.7016670" lon="139.7435560">
+ <tag k="name" v="飯田橋 (Iidabashi)"/>
+ <tag k="name:en" v="Iidabashi"/>
+ <tag k="name:ja" v="飯田橋"/>
+ <tag k="name:ru" v="Иидабаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:飯田橋駅"/>
+ </node>
+ <node id="1894258043" lat="35.6921110" lon="139.7827780">
+ <tag k="name" v="馬喰横山 (Bakuro-yokoyama)"/>
+ <tag k="name:en" v="Bauro-yokoyama"/>
+ <tag k="name:ja" v="馬喰横山"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:馬喰横山駅"/>
+ </node>
+ <node id="1894258044" lat="35.7137473" lon="139.7039816">
+ <tag k="name" v="高田馬場 (Takadanobaba)"/>
+ <tag k="name:en" v="Takadanobaba"/>
+ <tag k="name:ja" v="高田馬場"/>
+ <tag k="name:ru" v="Такаданобаба"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T03"/>
+ <tag k="wikipedia" v="ja:高田馬場駅"/>
+ </node>
+ <node id="1901881582" lat="35.6983685" lon="139.7730318">
+ <tag k="name" v="秋葉原 (Akihabara)"/>
+ <tag k="name:en" v="Akihabara"/>
+ <tag k="name:ja" v="秋葉原駅"/>
+ <tag k="name:ja_kana" v="あきはばら"/>
+ <tag k="name:ja_rm" v="Akihabara"/>
+ <tag k="name:ru" v="Акихабара"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:秋葉原駅"/>
+ </node>
+ <node id="1913640131" lat="35.6571490" lon="139.6935928">
+ <tag k="barrier" v="entrance"/>
+ </node>
+ <node id="1918062080" lat="35.6973936" lon="139.7846863">
+ <tag k="name" v="浅草橋 (Asakusabashi)"/>
+ <tag k="name:ja_rm" v="Asakusabashi"/>
+ <tag k="name:ru" v="Асакусабаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浅草橋駅"/>
+ </node>
+ <node id="1919930807" lat="35.7070921" lon="139.7516617"/>
+ <node id="1923761824" lat="35.6802677" lon="139.7793289">
+ <tag k="name" v="茅場町(Kayabacho)"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T11"/>
+ <tag k="wikipedia" v="ja:茅場町駅"/>
+ </node>
+ <node id="1923761825" lat="35.6824360" lon="139.7739734">
+ <tag k="name" v="日本橋 (Nihombashi)"/>
+ <tag k="name:ja" v="日本橋"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T10"/>
+ <tag k="wikipedia" v="ja:日本橋駅 (東京都)"/>
+ </node>
+ <node id="1923761826" lat="35.6720759" lon="139.7955920">
+ <tag k="name" v="門前仲町(Monzen-nakacho)"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T12"/>
+ <tag k="wikipedia" v="ja:門前仲町駅"/>
+ </node>
+ <node id="1923768928" lat="35.6845755" lon="139.7664660">
+ <tag k="name" v="大手町 (Ōtemachi)"/>
+ <tag k="name:en" v="Ōtemachi"/>
+ <tag k="name:fr" v="Ōtemachi"/>
+ <tag k="name:ja" v="大手町"/>
+ <tag k="name:ja_kana" v="おおてまち"/>
+ <tag k="name:ja_rm" v="Ōtemachi"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T09"/>
+ <tag k="wikipedia" v="ja:大手町駅 (東京都)"/>
+ </node>
+ <node id="1923768929" lat="35.6902897" lon="139.7583415">
+ <tag k="name" v="竹橋 (Takebashi)"/>
+ <tag k="name:en" v="Takebashi"/>
+ <tag k="name:ja" v="竹橋"/>
+ <tag k="operator" v="東京メトロ"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T08"/>
+ <tag k="wikipedia" v="ja:竹橋駅"/>
+ </node>
+ <node id="1924752331" lat="35.7203979" lon="139.7789730"/>
+ <node id="1924752332" lat="35.7206823" lon="139.7786898"/>
+ <node id="1924752333" lat="35.7206910" lon="139.7786001"/>
+ <node id="1924752334" lat="35.7207034" lon="139.7786071"/>
+ <node id="1924752335" lat="35.7207332" lon="139.7786680"/>
+ <node id="1924752337" lat="35.7208248" lon="139.7788976"/>
+ <node id="1924752338" lat="35.7208577" lon="139.7788666"/>
+ <node id="1924752339" lat="35.7208889" lon="139.7784566"/>
+ <node id="1924752340" lat="35.7208889" lon="139.7785292"/>
+ <node id="1924752342" lat="35.7209318" lon="139.7785462"/>
+ <node id="1924752344" lat="35.7209725" lon="139.7784906"/>
+ <node id="1924752345" lat="35.7210300" lon="139.7786940"/>
+ <node id="1924752346" lat="35.7210816" lon="139.7786644"/>
+ <node id="1926189614" lat="35.6853330" lon="139.7743330">
+ <tag k="name" v="三越前 (Mitsukoshimae)"/>
+ <tag k="name:en" v="Mitsukoshimae"/>
+ <tag k="name:fr" v="Mitsukoshimae"/>
+ <tag k="name:ja" v="三越前"/>
+ <tag k="name:ja_kana" v="みつこしまえ"/>
+ <tag k="name:ja_rm" v="Mitsukoshimae"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:三越前駅"/>
+ </node>
+ <node id="1926189615" lat="35.7117500" lon="139.7759720">
+ <tag k="name" v="上野 (Ueno)"/>
+ <tag k="name:en" v="Ueno"/>
+ <tag k="name:fr" v="Ueno"/>
+ <tag k="name:ja" v="上野"/>
+ <tag k="name:ja_kana" v="うえのおんしこうえん"/>
+ <tag k="name:ja_rm" v="Ueno"/>
+ <tag k="name:ru" v="Уэно"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:上野駅"/>
+ </node>
+ <node id="1926189616" lat="35.7076390" lon="139.7729720">
+ <tag k="name" v="上野広小路 (Uenohirokoji)"/>
+ <tag k="name:en" v="Uenohirokoji"/>
+ <tag k="railway" v="station"/>
+ <tag k="uic_ref" v="上野広小路"/>
+ <tag k="wikipedia" v="ja:上野広小路駅"/>
+ </node>
+ <node id="1926189617" lat="35.6768330" lon="139.7701390">
+ <tag k="name" v="京橋 (Kyobashi)"/>
+ <tag k="name:en" v="Kyobashi"/>
+ <tag k="name:ja" v="京橋"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:京橋駅 (東京都)"/>
+ </node>
+ <node id="1926189618" lat="35.6705560" lon="139.7178610">
+ <tag k="name" v="外苑前 (Gaiemmae)"/>
+ <tag k="name:en" v="Gaiemmae"/>
+ <tag k="name:ja" v="外苑前"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:外苑前駅"/>
+ </node>
+ <node id="1926189619" lat="35.6674057" lon="139.7584668">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="1926189620" lat="35.6825280" lon="139.7736940">
+ <tag k="name" v="日本橋 (Nihombashi)"/>
+ <tag k="name:en" v="Nihombashi"/>
+ <tag k="name:ja" v="日本橋"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:日本橋駅 (東京都)"/>
+ </node>
+ <node id="1926189621" lat="35.7029440" lon="139.7716670">
+ <tag k="name" v="末広町 (Suehirocho)"/>
+ <tag k="name:en" v="Suehirocho"/>
+ <tag k="name:ja" v="末広町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:末広町駅 (東京都)"/>
+ </node>
+ <node id="1926189622" lat="35.7108330" lon="139.7978330">
+ <tag k="name" v="浅草 (Asakusa)"/>
+ <tag k="name:en" v="Asakusa"/>
+ <tag k="name:fr" v="Asakusa"/>
+ <tag k="name:ja" v="浅草"/>
+ <tag k="name:ja_kana" v="あさくさ"/>
+ <tag k="name:ja_rm" v="Asakusa"/>
+ <tag k="name:ru" v="Асакуса"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浅草駅"/>
+ </node>
+ <node id="1926189623" lat="35.6719440" lon="139.7413890">
+ <tag k="name" v="溜池山王 (Tameike-sanno)"/>
+ <tag k="name:en" v="Tameike-sanno"/>
+ <tag k="name:ja" v="溜池山王"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:溜池山王駅"/>
+ </node>
+ <node id="1926189624" lat="35.7098610" lon="139.7907780">
+ <tag k="name" v="田原町 (Tawaramachi)"/>
+ <tag k="name:en" v="Tawaramachi"/>
+ <tag k="name:ja" v="田原町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:田原町駅 (東京都)"/>
+ </node>
+ <node id="1926189625" lat="35.6937500" lon="139.7708890">
+ <tag k="name" v="神田 (Kanda)"/>
+ <tag k="name:en" v="Kanda"/>
+ <tag k="name:ja" v="神田"/>
+ <tag k="name:ru" v="Канда"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:神田駅 (東京都)"/>
+ </node>
+ <node id="1926189626" lat="35.6701390" lon="139.7500000">
+ <tag k="name" v="虎ノ門 (Toranomon)"/>
+ <tag k="name:en" v="Toranomon"/>
+ <tag k="name:ja" v="虎ノ門"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:虎ノ門駅"/>
+ </node>
+ <node id="1926239435" lat="35.6666558" lon="139.7264061">
+ <tag k="name" v="乃木坂 (Nogizaka)"/>
+ <tag k="name:en" v="Nogizaka"/>
+ <tag k="name:ja" v="乃木坂"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:乃木坂駅"/>
+ </node>
+ <node id="1926239440" lat="35.6689440" lon="139.6913060">
+ <tag k="name" v="代々木公園 (Yoyogi-kōen)"/>
+ <tag k="name:en" v="Yoyogi-kōen"/>
+ <tag k="name:fr" v="Yoyogi-kōen"/>
+ <tag k="name:ja" v="代々木公園"/>
+ <tag k="name:ja_kana" v="よよぎこうえん"/>
+ <tag k="name:ja_rm" v="Yoyogi-kōen"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:代々木公園駅"/>
+ </node>
+ <node id="1926239456" lat="35.6741670" lon="139.7452780">
+ <tag k="name" v="国会議事堂前 (Kokkai-gijidomae)"/>
+ <tag k="name:en" v="Kokkai-gijidomae"/>
+ <tag k="name:ja" v="国会議事堂前"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M14"/>
+ <tag k="wikipedia" v="ja:国会議事堂前駅"/>
+ </node>
+ <node id="1926239458" lat="35.6980560" lon="139.7660000">
+ <tag k="name" v="新御茶ノ水 (Shin-ochanomizu)"/>
+ <tag k="name:en" v="Shin-ochanomizu"/>
+ <tag k="name:ja" v="新御茶ノ水"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新御茶ノ水駅"/>
+ </node>
+ <node id="1926239461" lat="35.6684720" lon="139.7054170">
+ <tag k="name" v="明治神宮前〈原宿〉 (Meiji-jingumae ‘Harajuku’)"/>
+ <tag k="name:en" v="Meiji-jingumae ‘Harajuku’"/>
+ <tag k="name:ja" v="明治神宮前〈原宿〉"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="1926239464" lat="35.7173991" lon="139.7658160">
+ <tag k="name" v="根津 (Nezu)"/>
+ <tag k="name:en" v="Nezu"/>
+ <tag k="name:fr" v="Nezu"/>
+ <tag k="name:ja" v="根津"/>
+ <tag k="name:ja_kana" v="ねづ"/>
+ <tag k="name:ja_rm" v="Nezu"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:根津駅"/>
+ </node>
+ <node id="1926239465" lat="35.7082217" lon="139.7699302">
+ <tag k="name" v="湯島 (Yushima)"/>
+ <tag k="name:en" v="Yushima"/>
+ <tag k="name:ja" v="湯島"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:湯島駅"/>
+ </node>
+ <node id="1926239474" lat="35.6723483" lon="139.7365722">
+ <tag k="name" v="赤坂 (Akasaka)"/>
+ <tag k="name:en" v="Akasaka"/>
+ <tag k="name:ja" v="赤坂"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:赤坂駅 (東京都)"/>
+ </node>
+ <node id="1926239476" lat="35.6730542" lon="139.7504280">
+ <tag k="name" v="霞ケ関 (Kasumigaseki)"/>
+ <tag k="name:en" v="Kasumigaseki"/>
+ <tag k="name:ja" v="霞ケ関"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:霞ケ関駅 (東京都)"/>
+ </node>
+ <node id="1926277321" lat="35.6970232" lon="139.6825923">
+ <tag k="name" v="中野坂上 (Nakano-sakaue)"/>
+ <tag k="name:en" v="Nakano-sakaue"/>
+ <tag k="name:ja" v="中野坂上"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="4"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M06"/>
+ <tag k="wikipedia" v="ja:中野坂上駅"/>
+ </node>
+ <node id="1926277322" lat="35.6879440" lon="139.7200830">
+ <tag k="name" v="四谷三丁目 (Yotsuya-sanchome)"/>
+ <tag k="name:en" v="Yotsuya-sanchome"/>
+ <tag k="name:ja" v="四谷三丁目"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M11"/>
+ <tag k="wikipedia" v="ja:四谷三丁目駅"/>
+ </node>
+ <node id="1926277330" lat="35.6867764" lon="139.7650360">
+ <tag k="name" v="大手町 (Ōtemachi)"/>
+ <tag k="name:en" v="Ōtemachi"/>
+ <tag k="name:fr" v="Ōtemachi"/>
+ <tag k="name:ja" v="大手町"/>
+ <tag k="name:ja_kana" v="おおてまち"/>
+ <tag k="name:ja_rm" v="Ōtemachi"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大手町駅 (東京都)"/>
+ </node>
+ <node id="1926277334" lat="35.6867945" lon="139.7662001">
+ <tag k="name" v="大手町 (Ōtemachi)"/>
+ <tag k="name:en" v="Ōtemachi"/>
+ <tag k="name:fr" v="Ōtemachi"/>
+ <tag k="name:ja" v="大手町"/>
+ <tag k="name:ja_kana" v="おおてまち"/>
+ <tag k="name:ja_rm" v="Ōtemachi"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大手町駅 (東京都)"/>
+ </node>
+ <node id="1926277338" lat="35.6869804" lon="139.7636796">
+ <tag k="name" v="大手町 (Ōtemachi)"/>
+ <tag k="name:en" v="Ōtemachi"/>
+ <tag k="name:fr" v="Ōtemachi"/>
+ <tag k="name:ja" v="大手町"/>
+ <tag k="name:ja_kana" v="おおてまち"/>
+ <tag k="name:ja_rm" v="Ōtemachi"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大手町駅 (東京都)"/>
+ </node>
+ <node id="1926277342" lat="35.7005448" lon="139.7640222">
+ <tag k="name" v="御茶ノ水 (Ochanomizu)"/>
+ <tag k="name:en" v="Ochanomizu"/>
+ <tag k="name:fr" v="Ochanomizu"/>
+ <tag k="name:ja" v="御茶ノ水"/>
+ <tag k="name:ja_kana" v="おちゃのみず"/>
+ <tag k="name:ja_rm" v="Ochanomizu"/>
+ <tag k="name:ru" v="Отяномидзу"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M20"/>
+ <tag k="wikipedia" v="ja:御茶ノ水駅"/>
+ </node>
+ <node id="1926277346" lat="35.6921561" lon="139.7008287">
+ <tag k="name" v="新宿 (Shinjuku)"/>
+ <tag k="name:en" v="Shinjuku"/>
+ <tag k="name:fr" v="Shinjuku"/>
+ <tag k="name:ja" v="新宿"/>
+ <tag k="name:ja_kana" v="しんじゅく"/>
+ <tag k="name:ja_rm" v="Shinjuku"/>
+ <tag k="name:ru" v="Синдзюку"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M08"/>
+ <tag k="wikipedia" v="ja:新宿駅"/>
+ </node>
+ <node id="1926277347" lat="35.6908519" lon="139.7048772">
+ <tag k="name" v="新宿三丁目 (Shinjuku-sanchome)"/>
+ <tag k="name:en" v="Shinjuku-sanchome"/>
+ <tag k="name:ja" v="新宿三丁目"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="4"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M09,F13"/>
+ <tag k="wikipedia" v="ja:新宿三丁目駅"/>
+ </node>
+ <node id="1926277351" lat="35.6886146" lon="139.7107019">
+ <tag k="name" v="新宿御苑前 (Shinjuku-gyoemmae)"/>
+ <tag k="name:en" v="Shinjuku-gyoemmae"/>
+ <tag k="name:ja" v="新宿御苑前"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M10"/>
+ <tag k="wikipedia" v="ja:新宿御苑前駅"/>
+ </node>
+ <node id="1926277363" lat="35.6954440" lon="139.7674440">
+ <tag k="name" v="淡路町 (Awajicho)"/>
+ <tag k="name:en" v="Awajicho"/>
+ <tag k="name:ja" v="淡路町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:淡路町駅"/>
+ </node>
+ <node id="1926277366" lat="35.6944228" lon="139.6927786">
+ <tag k="name" v="西新宿 (Nishi-shinjuku)"/>
+ <tag k="name:en" v="Nishi-shinjuku"/>
+ <tag k="name:ja" v="西新宿"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M07"/>
+ <tag k="wikipedia" v="ja:西新宿駅"/>
+ </node>
+ <node id="1926355395" lat="35.7113890" lon="139.7771670">
+ <tag k="name" v="上野 (Ueno)"/>
+ <tag k="name:en" v="Ueno"/>
+ <tag k="name:fr" v="Ueno"/>
+ <tag k="name:ja" v="上野"/>
+ <tag k="name:ja_kana" v="うえのおんしこうえん"/>
+ <tag k="name:ja_rm" v="Ueno"/>
+ <tag k="name:ru" v="Уэно"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:上野駅"/>
+ </node>
+ <node id="1926355396" lat="35.6862683" lon="139.7822757">
+ <tag k="name" v="人形町 (Ningyocho)"/>
+ <tag k="name:en" v="Ningyocho"/>
+ <tag k="name:ja" v="人形町"/>
+ <tag k="name:ru" v="Нингётё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:人形町駅"/>
+ </node>
+ <node id="1926355397" lat="35.7065560" lon="139.7761940">
+ <tag k="name" v="仲御徒町 (Naka-okachimachi)"/>
+ <tag k="name:en" v="Naka-okachimachi"/>
+ <tag k="name:ja" v="仲御徒町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:仲御徒町駅"/>
+ </node>
+ <node id="1926355398" lat="35.7207220" lon="139.7845830">
+ <tag k="name" v="入谷 (Iriya)"/>
+ <tag k="name:en" v="Iriya"/>
+ <tag k="name:ja" v="入谷"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:入谷駅 (東京都)"/>
+ </node>
+ <node id="1926355399" lat="35.6750000" lon="139.7770830">
+ <tag k="name" v="八丁堀 (Hatchobori)"/>
+ <tag k="name:en" v="Hatchobori"/>
+ <tag k="name:fr" v="Hatchobori"/>
+ <tag k="name:ja" v="八丁堀"/>
+ <tag k="name:ja_kana" v="はっちょうぼり"/>
+ <tag k="name:ja_rm" v="Hatchobori"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:八丁堀駅 (東京都)"/>
+ </node>
+ <node id="1926355400" lat="35.6627780" lon="139.7313890">
+ <tag k="name" v="六本木 (Roppongi)"/>
+ <tag k="name:en" v="Roppongi"/>
+ <tag k="name:fr" v="Roppongi"/>
+ <tag k="name:ja" v="六本木"/>
+ <tag k="name:ja_kana" v="ろっぽんぎ"/>
+ <tag k="name:ja_rm" v="Roppongi"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="H-04"/>
+ <tag k="wikipedia" v="ja:六本木駅"/>
+ </node>
+ <node id="1926355401" lat="35.6907500" lon="139.7784720">
+ <tag k="name" v="小伝馬町 (Kodenmacho)"/>
+ <tag k="name:en" v="Kodenmacho"/>
+ <tag k="name:ja" v="小伝馬町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:小伝馬町駅"/>
+ </node>
+ <node id="1926355402" lat="35.6696175" lon="139.7670622">
+ <tag k="name" v="東銀座 (Higashi-ginza)"/>
+ <tag k="name:en" v="Higashi-ginza"/>
+ <tag k="name:ja" v="東銀座"/>
+ <tag k="name:ru" v="Хигаси-Гиндза"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:東銀座駅"/>
+ </node>
+ <node id="1926355403" lat="35.6629720" lon="139.7450560">
+ <tag k="name" v="神谷町 (Kamiyacho)"/>
+ <tag k="name:en" v="Kamiyacho"/>
+ <tag k="name:ja" v="神谷町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:神谷町駅"/>
+ </node>
+ <node id="1926355404" lat="35.6986110" lon="139.7755000">
+ <tag k="name" v="秋葉原 (Akihabara)"/>
+ <tag k="name:en" v="Akihabara"/>
+ <tag k="name:ja" v="秋葉原"/>
+ <tag k="name:ru" v="Акихабара"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:秋葉原駅"/>
+ </node>
+ <node id="1926355405" lat="35.6681110" lon="139.7725830">
+ <tag k="name" v="築地 (Tsukiji)"/>
+ <tag k="name:en" v="Tsukiji"/>
+ <tag k="name:ja" v="築地"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:築地駅"/>
+ </node>
+ <node id="1926355406" lat="35.6799440" lon="139.7801390">
+ <tag k="name" v="茅場町 (Kayabacho)"/>
+ <tag k="name:en" v="Kayabacho"/>
+ <tag k="name:ja" v="茅場町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:茅場町駅"/>
+ </node>
+ <node id="1926376077" lat="35.6913890" lon="139.7362500">
+ <tag k="name" v="市ケ谷 (Ichigaya)"/>
+ <tag k="name:en" v="Ichigaya"/>
+ <tag k="name:ja" v="市ケ谷"/>
+ <tag k="name:ru" v="Итигая"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:市ケ谷駅"/>
+ </node>
+ <node id="1926376078" lat="35.6756940" lon="139.7633330">
+ <tag k="name" v="有楽町 (Yūrakuchō)"/>
+ <tag k="name:en" v="Yūrakuchō"/>
+ <tag k="name:fr" v="Yūrakuchō"/>
+ <tag k="name:ja" v="有楽町"/>
+ <tag k="name:ja_kana" v="ゆうらくちょう"/>
+ <tag k="name:ja_rm" v="Yūrakuchō"/>
+ <tag k="name:ru" v="Юракутё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:有楽町駅"/>
+ </node>
+ <node id="1926376080" lat="35.6773610" lon="139.7517500">
+ <tag k="name" v="桜田門 (Sakuradamon)"/>
+ <tag k="name:en" v="Sakuradamon"/>
+ <tag k="name:ja" v="桜田門"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:桜田門駅"/>
+ </node>
+ <node id="1926376081" lat="35.6786110" lon="139.7402780">
+ <tag k="name" v="永田町駅 (Nagatacho)"/>
+ <tag k="name:en" v="Nagatacho"/>
+ <tag k="name:ja" v="永田町駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:永田町駅"/>
+ </node>
+ <node id="1926376082" lat="35.7094440" lon="139.7335280">
+ <tag k="name" v="江戸川橋 (Edogawabashi)"/>
+ <tag k="name:en" v="Edogawabashi"/>
+ <tag k="name:ja" v="江戸川橋"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:江戸川橋駅"/>
+ </node>
+ <node id="1926376085" lat="35.7190280" lon="139.7275000">
+ <tag k="name" v="護国寺 (Gokokuji)"/>
+ <tag k="name:en" v="Gokokuji"/>
+ <tag k="name:ja" v="護国寺"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:護国寺駅"/>
+ </node>
+ <node id="1926376086" lat="35.6743610" lon="139.7670280">
+ <tag k="name" v="銀座一丁目 (Ginza-itchome)"/>
+ <tag k="name:en" v="Ginza-itchome"/>
+ <tag k="name:ja" v="銀座一丁目"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:銀座一丁目駅"/>
+ </node>
+ <node id="1926376087" lat="35.7019440" lon="139.7456110">
+ <tag k="name" v="飯田橋 (Iidabashi)"/>
+ <tag k="name:en" v="Iidabashi"/>
+ <tag k="name:ja" v="飯田橋"/>
+ <tag k="name:ru" v="Иидабаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:飯田橋駅"/>
+ </node>
+ <node id="1926376088" lat="35.6840280" lon="139.7376670">
+ <tag k="name" v="麹町 (Kojimachi)"/>
+ <tag k="name:en" v="Kojimachi"/>
+ <tag k="name:ja" v="麹町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:麹町駅"/>
+ </node>
+ <node id="1926417053" lat="35.6705000" lon="139.7737220">
+ <tag k="name" v="新富町 (Shintomicho)"/>
+ <tag k="name:en" v="Shintomicho"/>
+ <tag k="name:ja" v="新富町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新富町駅 (東京都)"/>
+ </node>
+ <node id="1926417056" lat="35.6648890" lon="139.7842500">
+ <tag k="name" v="月島 (Tsukishima)"/>
+ <tag k="name:en" v="Tsukishima"/>
+ <tag k="name:fr" v="Tsukishima"/>
+ <tag k="name:ja" v="月島"/>
+ <tag k="name:ja_kana" v="つきしま"/>
+ <tag k="name:ja_rm" v="Tsukishima"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:月島駅"/>
+ </node>
+ <node id="1926417058" lat="35.6550000" lon="139.7961110">
+ <tag k="name" v="豊洲 (Toyosu)"/>
+ <tag k="name:en" v="Toyosu"/>
+ <tag k="name:ja" v="豊洲"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:豊洲駅"/>
+ </node>
+ <node id="1926700041" lat="35.7173620" lon="139.7368105">
+ <tag k="name" v="茗荷谷 (Myogadani)"/>
+ <tag k="name:en" v="Myogadani"/>
+ <tag k="name:ja" v="茗荷谷"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M23"/>
+ <tag k="wikipedia" v="ja:茗荷谷駅"/>
+ </node>
+ <node id="1926703932" lat="35.6848890" lon="139.7731670">
+ <tag k="name" v="三越前 (Mitsukoshimae)"/>
+ <tag k="name:en" v="Mitsukoshimae"/>
+ <tag k="name:fr" v="Mitsukoshimae"/>
+ <tag k="name:ja" v="三越前"/>
+ <tag k="name:ja_kana" v="みつこしまえ"/>
+ <tag k="name:ja_rm" v="Mitsukoshimae"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:三越前駅"/>
+ </node>
+ <node id="1926703933" lat="35.6856940" lon="139.7416670">
+ <tag k="name" v="半蔵門 (Hanzomon)"/>
+ <tag k="name:en" v="Hanzomon"/>
+ <tag k="name:ja" v="半蔵門"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:半蔵門駅"/>
+ </node>
+ <node id="1926709957" lat="35.6698060" lon="139.7555560">
+ <tag k="name" v="内幸町 (Uchisaiwaichō)"/>
+ <tag k="name:en" v="Uchisaiwaichō"/>
+ <tag k="name:ja" v="内幸町"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:内幸町駅"/>
+ </node>
+ <node id="1926709961" lat="35.6851113" lon="139.7629149">
+ <tag k="name" v="大手町 (Ōtemachi)"/>
+ <tag k="name:en" v="Ōtemachi"/>
+ <tag k="name:fr" v="Ōtemachi"/>
+ <tag k="name:ja" v="大手町"/>
+ <tag k="name:ja_kana" v="おおてまち"/>
+ <tag k="name:ja_rm" v="Ōtemachi"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大手町駅 (東京都)"/>
+ </node>
+ <node id="1926709965" lat="35.6611940" lon="139.7515560">
+ <tag k="name" v="御成門 (Onarimon)"/>
+ <tag k="name:en" v="Onarimon"/>
+ <tag k="name:ja" v="御成門"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:御成門駅"/>
+ </node>
+ <node id="1926709967" lat="35.7096390" lon="139.7532500">
+ <tag k="name" v="春日 (Kasuga)"/>
+ <tag k="name:en" v="Kasuga"/>
+ <tag k="name:ja" v="春日"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:春日駅 (東京都)"/>
+ </node>
+ <node id="1926709968" lat="35.7036110" lon="139.7550830">
+ <tag k="name" v="水道橋 (Suidōbashi)"/>
+ <tag k="name:en" v="Suidōbashi"/>
+ <tag k="name:ja" v="水道橋"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:水道橋駅"/>
+ </node>
+ <node id="1926709982" lat="35.6540830" lon="139.7498330">
+ <tag k="name" v="芝公園 (Shibakōen)"/>
+ <tag k="name:en" v="Shibakōen"/>
+ <tag k="name:ja" v="芝公園"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:芝公園駅"/>
+ </node>
+ <node id="1926726026" lat="35.6567715" lon="139.7546837">
+ <tag k="name" v="大門 (Daimon)"/>
+ <tag k="name:en" v="Daimon"/>
+ <tag k="name:ja" v="大門"/>
+ <tag k="name:ru" v="Даймон"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:大門駅 (東京都)"/>
+ </node>
+ <node id="1926726027" lat="35.6754302" lon="139.7718803">
+ <tag k="name" v="宝町 (Takarachō)"/>
+ <tag k="name:en" v="Takarachō"/>
+ <tag k="name:ja" v="宝町"/>
+ <tag k="name:ru" v="Такаратё"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:宝町駅 (東京都)"/>
+ </node>
+ <node id="1926726028" lat="35.6652981" lon="139.7592947">
+ <tag k="name" v="新橋 (Shimbashi)"/>
+ <tag k="name:en" v="Shimbashi"/>
+ <tag k="name:fr" v="Shimbashi"/>
+ <tag k="name:ja" v="新橋"/>
+ <tag k="name:ja_kana" v="しんばし"/>
+ <tag k="name:ja_rm" v="Shimbashi"/>
+ <tag k="name:ru" v="Симбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:新橋駅"/>
+ </node>
+ <node id="1926726029" lat="35.6816768" lon="139.7757451">
+ <tag k="name" v="日本橋 (Nihombashi)"/>
+ <tag k="name:ja" v="日本橋"/>
+ <tag k="name:ru" v="Нихонбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:日本橋駅 (東京都)"/>
+ </node>
+ <node id="1926726030" lat="35.6921110" lon="139.7848890">
+ <tag k="name" v="東日本橋 (Higashi-nihombashi)"/>
+ <tag k="name:en" v="Higashi-nihombashi"/>
+ <tag k="name:ja" v="東日本橋"/>
+ <tag k="name:ru" v="Хигаси-Нихонбаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:東日本橋駅"/>
+ </node>
+ <node id="1926726032" lat="35.6973783" lon="139.7863178">
+ <tag k="name" v="浅草橋 (Asakusabashi)"/>
+ <tag k="name:en" v="Asakusabashi"/>
+ <tag k="name:ja" v="浅草橋"/>
+ <tag k="name:ru" v="Асакусабаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:浅草橋駅"/>
+ </node>
+ <node id="1926726033" lat="35.7032220" lon="139.7909440">
+ <tag k="name" v="蔵前 (Kuramae)"/>
+ <tag k="name:en" v="Kuramae"/>
+ <tag k="name:ja" v="蔵前"/>
+ <tag k="name:ru" v="Курамаэ"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:蔵前駅"/>
+ </node>
+ <node id="1931878068" lat="35.7164891" lon="139.7125546">
+ <tag k="name" v="学習院下 (Gakushūinshita)"/>
+ <tag k="name:ja" v="学習院下"/>
+ <tag k="name:ja_kana" v="がくしゅういんした"/>
+ <tag k="name:ja_rm" v="Gakushūinshita"/>
+ <tag k="railway" v="station"/>
+ <tag k="start_date" v="1914-12-25"/>
+ <tag k="wikipedia" v="ja:学習院下駅"/>
+ </node>
+ <node id="1931878074" lat="35.7203132" lon="139.7148934">
+ <tag k="name" v="鬼子母神前 (Kishibojimmae)"/>
+ <tag k="name:ja" v="鬼子母神前"/>
+ <tag k="name:ja_kana" v="きしぼじんまえ"/>
+ <tag k="name:ja_rm" v="Kishibojinmae"/>
+ <tag k="railway" v="station"/>
+ <tag k="start_date" v="1914-12-25"/>
+ <tag k="wikipedia" v="ja:鬼子母神前駅"/>
+ </node>
+ <node id="1931879415" lat="35.7119270" lon="139.7186293">
+ <tag k="name" v="早稲田 (Waseda)"/>
+ <tag k="name:ja" v="早稲田"/>
+ <tag k="name:ja_kana" v="わせだ"/>
+ <tag k="name:ja_rm" v="Waseda"/>
+ <tag k="railway" v="station"/>
+ <tag k="start_date" v="1930-03-30"/>
+ <tag k="wikipedia" v="ja:早稲田駅_(東京都交通局)"/>
+ </node>
+ <node id="1931879420" lat="35.7129212" lon="139.7144478">
+ <tag k="name" v="面影橋 (Omokagebashi)"/>
+ <tag k="name:ja" v="面影橋"/>
+ <tag k="name:ja_kana" v="おもかげばし"/>
+ <tag k="name:ja_rm" v="Omokagebashi"/>
+ <tag k="railway" v="station"/>
+ <tag k="start_date" v="1930-03-30"/>
+ <tag k="wikipedia" v="ja:面影橋駅"/>
+ </node>
+ <node id="1931880080" lat="35.6694118" lon="139.6883809"/>
+ <node id="1931880081" lat="35.6694369" lon="139.6885154"/>
+ <node id="1931880084" lat="35.6694669" lon="139.6887826"/>
+ <node id="1931880086" lat="35.6695036" lon="139.6887561"/>
+ <node id="1931880087" lat="35.6695394" lon="139.6889964"/>
+ <node id="1931880089" lat="35.6695757" lon="139.6888922"/>
+ <node id="1931880090" lat="35.6695784" lon="139.6890950"/>
+ <node id="1931880092" lat="35.6695918" lon="139.6883385"/>
+ <node id="1931880094" lat="35.6696383" lon="139.6884906"/>
+ <node id="1931880095" lat="35.6696437" lon="139.6890597"/>
+ <node id="1931880096" lat="35.6696549" lon="139.6884807"/>
+ <node id="1931880098" lat="35.6696826" lon="139.6888355"/>
+ <node id="1931880099" lat="35.6697032" lon="139.6886421"/>
+ <node id="1931880100" lat="35.6697578" lon="139.6890311"/>
+ <node id="1931880101" lat="35.6697834" lon="139.6889997"/>
+ <node id="1931880102" lat="35.6698120" lon="139.6891451"/>
+ <node id="1931880103" lat="35.6698409" lon="139.6891233"/>
+ <node id="1947633318" lat="35.6968610" lon="139.7974440">
+ <tag k="name" v="両国 (Ryōgoku)"/>
+ <tag k="name:en" v="Ryōgoku"/>
+ <tag k="name:ja" v="両国"/>
+ <tag k="name:ja_kana" v="りょうごく"/>
+ <tag k="name:ja_rm" v="Ryogoku"/>
+ <tag k="name:ru" v="Рёгоку"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:両国駅"/>
+ </node>
+ <node id="1947633320" lat="35.6879720" lon="139.7970280">
+ <tag k="name" v="森下 (Morishita)"/>
+ <tag k="name:en" v="Morishita"/>
+ <tag k="name:ja" v="森下"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:森下駅 (東京都)"/>
+ </node>
+ <node id="1947633321" lat="35.6880560" lon="139.7982500">
+ <tag k="name" v="森下 (Morishita)"/>
+ <tag k="name:en" v="Morishita"/>
+ <tag k="name:ja" v="森下"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:森下駅 (東京都)"/>
+ </node>
+ <node id="1947633322" lat="35.6820560" lon="139.7860280">
+ <tag k="name" v="水天宮前 (Suitengumae)"/>
+ <tag k="name:en" v="Suitengumae"/>
+ <tag k="name:ja" v="水天宮前"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:水天宮前駅"/>
+ </node>
+ <node id="1947633323" lat="35.6820560" lon="139.7988060">
+ <tag k="name" v="清澄白河 (Kiyosumi-shirakawa)"/>
+ <tag k="name:en" v="Kiyosumi-shirakawa"/>
+ <tag k="name:ja" v="清澄白河"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:清澄白河駅"/>
+ </node>
+ <node id="1947633324" lat="35.6649170" lon="139.7669440">
+ <tag k="name" v="築地市場 (Tsukijishijō)"/>
+ <tag k="name:en" v="Tsukijishijō"/>
+ <tag k="name:ja" v="築地市場"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:築地市場駅"/>
+ </node>
+ <node id="1950328487" lat="35.7107261" lon="139.6865289">
+ <tag k="name" v="落合(Ochiai)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="T02"/>
+ <tag k="wikipedia" v="ja:落合駅 (東京都)"/>
+ </node>
+ <node id="1951047949" lat="35.6849310" lon="139.7298931"/>
+ <node id="1951047982" lat="35.6851047" lon="139.7297506"/>
+ <node id="1951047990" lat="35.6851925" lon="139.7300594"/>
+ <node id="1951047994" lat="35.6848450" lon="139.7298368"/>
+ <node id="1951047996" lat="35.6851859" lon="139.7297188"/>
+ <node id="1951048000" lat="35.6852774" lon="139.7297537"/>
+ <node id="1951048001" lat="35.6849496" lon="139.7299843"/>
+ <node id="1951048002" lat="35.6841130" lon="139.7299468"/>
+ <node id="1951048004" lat="35.6852404" lon="139.7296638"/>
+ <node id="1951048006" lat="35.6844169" lon="139.7300246"/>
+ <node id="1951048009" lat="35.6849779" lon="139.7301292"/>
+ <node id="1951048019" lat="35.6846555" lon="139.7300903"/>
+ <node id="1951048024" lat="35.6846729" lon="139.7300098"/>
+ <node id="1951048060" lat="35.6845291" lon="139.7299320"/>
+ <node id="1951048064" lat="35.6845753" lon="139.7298767"/>
+ <node id="1951048069" lat="35.6841145" lon="139.7301140"/>
+ <node id="1951048076" lat="35.6851772" lon="139.7296880"/>
+ <node id="1951048085" lat="35.6847764" lon="139.7299146"/>
+ <node id="1951048088" lat="35.6841152" lon="139.7300380"/>
+ <node id="1951048091" lat="35.6852049" lon="139.7298029"/>
+ <node id="1951048095" lat="35.6843934" lon="139.7301127"/>
+ <node id="1951048097" lat="35.6846003" lon="139.7302629"/>
+ <node id="1951048101" lat="35.6848465" lon="139.7303782"/>
+ <node id="1951048104" lat="35.6843254" lon="139.7299428"/>
+ <node id="1951048107" lat="35.6849147" lon="139.7301439"/>
+ <node id="1951048144" lat="35.6849212" lon="139.7298033"/>
+ <node id="1951048148" lat="35.6852317" lon="139.7299750"/>
+ <node id="1951048158" lat="35.6841130" lon="139.7298985"/>
+ <node id="1951066037" lat="35.6736544" lon="139.7422374">
+ <tag k="name" v="国会議事堂前(Kokkai-gijidomae)"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:国会議事堂前駅"/>
+ </node>
+ <node id="1951081094" lat="35.6744410" lon="139.7521346">
+ <tag k="name" v="霞ヶ関(Kasumigaseki)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M15"/>
+ </node>
+ <node id="1951952367" lat="35.6784894" lon="139.7054577">
+ <tag k="name" v="北参道(Kita-sando)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="F14"/>
+ <tag k="wikipedia" v="ja:北参道駅"/>
+ </node>
+ <node id="1951953898" lat="35.6985139" lon="139.7075605">
+ <tag k="name" v="東新宿(Higashi-shinjuku)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="F12"/>
+ <tag k="wikipedia" v="ja:東新宿駅"/>
+ </node>
+ <node id="1951954570" lat="35.7079254" lon="139.7090596">
+ <tag k="name" v="西早稲田(Nishi-waseda)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="F11"/>
+ <tag k="wikipedia" v="ja:西早稲田駅"/>
+ </node>
+ <node id="1951959623" lat="35.7200383" lon="139.7146574">
+ <tag k="name" v="雑司が谷(Zoshigaya)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="F10"/>
+ <tag k="wikipedia" v="ja:雑司が谷駅"/>
+ </node>
+ <node id="1952094220" lat="35.6772903" lon="139.7370733">
+ <tag k="name" v="赤坂見附 (Akasaka-mitsuke)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="4"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="G05,M13"/>
+ <tag k="wikipedia" v="ja:赤坂見附駅"/>
+ </node>
+ <node id="1976070764" lat="35.6537255" lon="139.7618051"/>
+ <node id="1976070765" lat="35.6537284" lon="139.7618338"/>
+ <node id="1976070766" lat="35.6537292" lon="139.7617731"/>
+ <node id="1976070767" lat="35.6537371" lon="139.7617488"/>
+ <node id="1976070769" lat="35.6537692" lon="139.7616890"/>
+ <node id="1976070770" lat="35.6537877" lon="139.7616746"/>
+ <node id="1976070771" lat="35.6538111" lon="139.7616591"/>
+ <node id="1976070772" lat="35.6538319" lon="139.7616482"/>
+ <node id="1976070776" lat="35.6541281" lon="139.7621714"/>
+ <node id="1976070777" lat="35.6541490" lon="139.7621653"/>
+ <node id="1976070778" lat="35.6541680" lon="139.7621527"/>
+ <node id="1976070779" lat="35.6541870" lon="139.7621336"/>
+ <node id="1976070781" lat="35.6542025" lon="139.7621114"/>
+ <node id="1976070782" lat="35.6542118" lon="139.7620953"/>
+ <node id="1976070783" lat="35.6542254" lon="139.7620659"/>
+ <node id="1976070784" lat="35.6542341" lon="139.7620235"/>
+ <node id="1976070785" lat="35.6542346" lon="139.7619983"/>
+ <node id="2037665109" lat="35.7070361" lon="139.7820390">
+ <tag k="name" v="新御徒町 (Shin-Okachimachi)"/>
+ <tag k="platforms" v="1"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="02"/>
+ </node>
+ <node id="2037665123" lat="35.7129624" lon="139.7922688">
+ <tag k="name" v="浅草 (Asakusa)"/>
+ <tag k="operator" v="首都圏新都市鉄道"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="03"/>
+ </node>
+ <node id="2037665125" lat="35.6985927" lon="139.7742225">
+ <tag k="name" v="秋葉原 (Akihabara)"/>
+ <tag k="operator" v="首都圏新都市鉄道"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="01"/>
+ </node>
+ <node id="2043532984" lat="35.7111493" lon="139.7738963">
+ <tag k="name" v="京成上野 (Keisei Ueno)"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ </node>
+ <node id="2059586209" lat="35.6962729" lon="139.7924274"/>
+ <node id="2070961115" lat="35.6583905" lon="139.7016576"/>
+ <node id="2071017568" lat="35.6581467" lon="139.7020496">
+ <tag k="name" v="渋谷 (Shibuya)"/>
+ <tag k="name:en" v="Shibuya"/>
+ <tag k="name:fr" v="Shibuya"/>
+ <tag k="name:ja" v="渋谷(東横線)"/>
+ <tag k="name:ja_rm" v="Shibuya"/>
+ <tag k="name:ru" v="Сибуя"/>
+ <tag k="railway" v="station"/>
+ <tag k="wikipedia" v="ja:渋谷駅"/>
+ </node>
+ <node id="2084165848" lat="35.6577424" lon="139.7015175"/>
+ <node id="2084165853" lat="35.6578422" lon="139.7013298"/>
+ <node id="2084165863" lat="35.6583439" lon="139.7012618"/>
+ <node id="2103660123" lat="35.6584363" lon="139.7016370"/>
+ <node id="2103660127" lat="35.6584411" lon="139.7016348"/>
+ <way id="51822834">
+ <nd ref="661104590"/>
+ <nd ref="661104587"/>
+ <nd ref="661104588"/>
+ <nd ref="661104589"/>
+ <nd ref="661104598"/>
+ <nd ref="661104602"/>
+ <nd ref="661104601"/>
+ <nd ref="661104600"/>
+ <nd ref="661104599"/>
+ <nd ref="661104607"/>
+ <nd ref="1580297718"/>
+ <nd ref="661104606"/>
+ <nd ref="661104604"/>
+ <nd ref="661104603"/>
+ <nd ref="661104605"/>
+ <nd ref="661104596"/>
+ <nd ref="661104591"/>
+ <nd ref="661104592"/>
+ <nd ref="661104593"/>
+ <nd ref="661104595"/>
+ <nd ref="661104594"/>
+ <nd ref="661104590"/>
+ <tag k="area" v="yes"/>
+ <tag k="name" v="JR東中野駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="NRPB of MLIT Japan"/>
+ <tag k="source:ja" v="国土画像情報(オルソ化空中写真)国土計画局"/>
+ </way>
+ <way id="60264930">
+ <nd ref="748883763"/>
+ <nd ref="748883768"/>
+ <nd ref="1496842229"/>
+ <nd ref="1496842224"/>
+ <nd ref="748883708"/>
+ <nd ref="1496842209"/>
+ <nd ref="1496842212"/>
+ <nd ref="1913640131"/>
+ <nd ref="1496842222"/>
+ <nd ref="748883737"/>
+ <nd ref="748883630"/>
+ <nd ref="748883688"/>
+ <nd ref="1354438504"/>
+ <nd ref="1496842246"/>
+ <nd ref="1496842254"/>
+ <nd ref="1354438503"/>
+ <nd ref="1496842255"/>
+ <nd ref="1496842244"/>
+ <nd ref="1354438502"/>
+ <nd ref="1354438501"/>
+ <nd ref="748883763"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="神泉駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing,2007-04"/>
+ </way>
+ <way id="94061850">
+ <nd ref="1093541347"/>
+ <nd ref="1093541247"/>
+ <nd ref="1093541235"/>
+ <nd ref="1093541238"/>
+ <nd ref="1093541321"/>
+ <nd ref="1093541369"/>
+ <nd ref="1093541324"/>
+ <nd ref="1093541287"/>
+ <nd ref="1093541259"/>
+ <nd ref="1093541339"/>
+ <nd ref="1093541270"/>
+ <nd ref="1093541326"/>
+ <nd ref="1093541316"/>
+ <nd ref="1093541253"/>
+ <nd ref="1093541318"/>
+ <nd ref="1093541242"/>
+ <nd ref="1093541366"/>
+ <nd ref="1093541232"/>
+ <nd ref="1093541284"/>
+ <nd ref="1093541244"/>
+ <nd ref="1579679822"/>
+ <nd ref="1093541365"/>
+ <nd ref="1093541240"/>
+ <nd ref="1093541341"/>
+ <nd ref="1093541299"/>
+ <nd ref="1093541367"/>
+ <nd ref="1093541364"/>
+ <nd ref="1093541352"/>
+ <nd ref="1093541349"/>
+ <nd ref="1093541329"/>
+ <nd ref="1093541343"/>
+ <nd ref="1093541368"/>
+ <nd ref="1093541345"/>
+ <nd ref="1093541256"/>
+ <nd ref="1093541264"/>
+ <nd ref="1093541223"/>
+ <nd ref="1093541312"/>
+ <nd ref="1093541250"/>
+ <nd ref="1093541294"/>
+ <nd ref="1093541262"/>
+ <nd ref="1093541371"/>
+ <nd ref="1093541289"/>
+ <nd ref="1093541282"/>
+ <nd ref="1093541347"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="高田馬場"/>
+ <tag k="name:en" v="Takadanobaba"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ </way>
+ <way id="96328422">
+ <nd ref="1116460146"/>
+ <nd ref="1116460149"/>
+ <nd ref="1116460143"/>
+ <nd ref="1116460142"/>
+ <nd ref="1116460133"/>
+ <nd ref="1116460141"/>
+ <nd ref="1116460130"/>
+ <nd ref="1116460134"/>
+ <nd ref="1116460140"/>
+ <nd ref="1116460135"/>
+ <nd ref="1116460137"/>
+ <nd ref="1116460146"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="高田馬場"/>
+ <tag k="name:en" v="Takadanobaba"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ </way>
+ <way id="97194405">
+ <nd ref="1125926437"/>
+ <nd ref="1125926455"/>
+ <nd ref="1125926452"/>
+ <nd ref="1125926446"/>
+ <nd ref="1125926456"/>
+ <nd ref="1125926438"/>
+ <nd ref="1125926459"/>
+ <nd ref="1125926440"/>
+ <nd ref="1808422478"/>
+ <nd ref="1808422477"/>
+ <nd ref="1808422475"/>
+ <nd ref="1125926432"/>
+ <nd ref="1125926458"/>
+ <nd ref="1125926437"/>
+ <tag k="building" v="yes"/>
+ <tag k="layer" v="1"/>
+ <tag k="name:ru" v="Синаномати"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ </way>
+ <way id="98491742">
+ <nd ref="1139431612"/>
+ <nd ref="1139431606"/>
+ <nd ref="1139431610"/>
+ <nd ref="1139431614"/>
+ <nd ref="1139431605"/>
+ <nd ref="1139431609"/>
+ <nd ref="1139431612"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="市ヶ谷 (Ichigaya)"/>
+ <tag k="name:en" v="Ichigaya"/>
+ <tag k="name:fr" v="Ichigaya"/>
+ <tag k="name:ja" v="市ヶ谷"/>
+ <tag k="name:ru" v="Итигая"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="116596178">
+ <nd ref="1314077044"/>
+ <nd ref="1314077022"/>
+ <nd ref="1314077031"/>
+ <nd ref="1314077047"/>
+ <nd ref="1314077044"/>
+ <tag k="building" v="train_station"/>
+ <tag k="building:levels" v="5"/>
+ <tag k="height" v="17.5"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="新宿駅 (Shinjukueki)"/>
+ <tag k="name:en" v="Shinjuku Station"/>
+ <tag k="name:fr" v="Gare de Shinjuku"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="116811932">
+ <nd ref="1316051112"/>
+ <nd ref="1593485596"/>
+ <nd ref="1316051113"/>
+ <nd ref="1316051110"/>
+ <nd ref="1316051111"/>
+ <nd ref="1316051108"/>
+ <nd ref="1316051109"/>
+ <nd ref="1316051102"/>
+ <nd ref="1316051099"/>
+ <nd ref="1316051100"/>
+ <nd ref="1127216277"/>
+ <nd ref="2103660127"/>
+ <nd ref="2103660123"/>
+ <nd ref="2070961115"/>
+ <nd ref="1316051096"/>
+ <nd ref="1316051094"/>
+ <nd ref="1316051071"/>
+ <nd ref="1316051005"/>
+ <nd ref="1593485519"/>
+ <nd ref="1316050986"/>
+ <nd ref="1316051068"/>
+ <nd ref="1316051070"/>
+ <nd ref="2084165848"/>
+ <nd ref="1316051049"/>
+ <nd ref="2084165853"/>
+ <nd ref="1127216290"/>
+ <nd ref="1127216297"/>
+ <nd ref="1316051077"/>
+ <nd ref="1127216265"/>
+ <nd ref="2084165863"/>
+ <nd ref="1127216276"/>
+ <nd ref="1127216299"/>
+ <nd ref="1679318992"/>
+ <nd ref="1679318979"/>
+ <nd ref="1679318982"/>
+ <nd ref="1679318980"/>
+ <nd ref="1679318978"/>
+ <nd ref="1679318976"/>
+ <nd ref="1679318964"/>
+ <nd ref="1679318962"/>
+ <nd ref="1679318960"/>
+ <nd ref="1679318959"/>
+ <nd ref="1679318957"/>
+ <nd ref="1679318955"/>
+ <nd ref="1679318952"/>
+ <nd ref="1679318953"/>
+ <nd ref="1679318983"/>
+ <nd ref="1679318984"/>
+ <nd ref="1679318985"/>
+ <nd ref="1679318988"/>
+ <nd ref="1679319000"/>
+ <nd ref="1679319014"/>
+ <nd ref="1679319015"/>
+ <nd ref="1316051107"/>
+ <nd ref="1127216283"/>
+ <nd ref="1316051103"/>
+ <nd ref="1316051112"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="JR渋谷駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ </way>
+ <way id="128195825">
+ <nd ref="1417172219"/>
+ <nd ref="1417172263"/>
+ <nd ref="1417172251"/>
+ <nd ref="1417172290"/>
+ <nd ref="1417172219"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="浜松町 (Hamamatsuchō)"/>
+ <tag k="name:en" v="Hamamatsuchō"/>
+ <tag k="name:fr" v="Hamamatsuchō"/>
+ <tag k="name:ja" v="浜松町"/>
+ <tag k="name:ja_kana" v="はままつちょう"/>
+ <tag k="name:ja_rm" v="Hamamatsuchō"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing"/>
+ <tag k="wikipedia" v="ja:浜松町駅"/>
+ </way>
+ <way id="143166708">
+ <nd ref="1566526414"/>
+ <nd ref="1566526465"/>
+ <nd ref="1566526467"/>
+ <nd ref="1566526470"/>
+ <nd ref="1566526473"/>
+ <nd ref="1566526479"/>
+ <nd ref="1566526485"/>
+ <nd ref="1566526490"/>
+ <nd ref="1566526499"/>
+ <nd ref="1566526513"/>
+ <nd ref="1566526517"/>
+ <nd ref="1566526526"/>
+ <nd ref="1566526538"/>
+ <nd ref="1566526550"/>
+ <nd ref="1566526554"/>
+ <nd ref="1566526556"/>
+ <nd ref="1566526555"/>
+ <nd ref="1566526552"/>
+ <nd ref="1566526541"/>
+ <nd ref="1566526535"/>
+ <nd ref="1566526524"/>
+ <nd ref="1566526516"/>
+ <nd ref="1566526507"/>
+ <nd ref="1566526504"/>
+ <nd ref="1566526501"/>
+ <nd ref="1566526498"/>
+ <nd ref="1566526495"/>
+ <nd ref="1566526489"/>
+ <nd ref="1566526482"/>
+ <nd ref="1566526477"/>
+ <nd ref="1566526472"/>
+ <nd ref="1566526471"/>
+ <nd ref="1566526469"/>
+ <nd ref="1566526468"/>
+ <nd ref="1566526464"/>
+ <nd ref="1566526411"/>
+ <nd ref="1573952008"/>
+ <nd ref="1573951978"/>
+ <nd ref="1573952039"/>
+ <nd ref="1573952030"/>
+ <nd ref="1566526414"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="飯田橋 (Iidabashi)駅"/>
+ <tag k="name:ru" v="Иидабаси"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing,2007-04"/>
+ </way>
+ <way id="143820280">
+ <nd ref="1573806472"/>
+ <nd ref="1573806460"/>
+ <nd ref="1573806462"/>
+ <nd ref="1573806465"/>
+ <nd ref="1573806461"/>
+ <nd ref="1573806458"/>
+ <nd ref="1573806468"/>
+ <nd ref="1573806469"/>
+ <nd ref="1573806466"/>
+ <nd ref="1573806467"/>
+ <nd ref="1573806472"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="御茶ノ水 (Ochanomizu)"/>
+ <tag k="name:en" v="Ochanomizu"/>
+ <tag k="name:fr" v="Ochanomizu"/>
+ <tag k="name:ja" v="御茶ノ水"/>
+ <tag k="name:ja_kana" v="おちゃのみず"/>
+ <tag k="name:ja_rm" v="Ochanomizu"/>
+ <tag k="name:ru" v="Отяномидзу"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ <tag k="wikipedia" v="ja:御茶ノ水駅"/>
+ </way>
+ <way id="143820281">
+ <nd ref="1573806464"/>
+ <nd ref="1573806471"/>
+ <nd ref="1573806470"/>
+ <nd ref="1573806457"/>
+ <nd ref="1573806463"/>
+ <nd ref="1573806456"/>
+ <nd ref="1573806459"/>
+ <nd ref="1573806464"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="御茶ノ水 (Ochanomizu)"/>
+ <tag k="name:en" v="Ochanomizu"/>
+ <tag k="name:fr" v="Ochanomizu"/>
+ <tag k="name:ja" v="御茶ノ水"/>
+ <tag k="name:ja_kana" v="おちゃのみず"/>
+ <tag k="name:ja_rm" v="Ochanomizu"/>
+ <tag k="name:ru" v="Отяномидзу"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ <tag k="wikipedia" v="ja:御茶ノ水駅"/>
+ </way>
+ <way id="143839128">
+ <nd ref="1574055076"/>
+ <nd ref="1574055154"/>
+ <nd ref="1574055116"/>
+ <nd ref="1574055221"/>
+ <nd ref="1574055122"/>
+ <nd ref="1574055117"/>
+ <nd ref="1574055178"/>
+ <nd ref="1574055091"/>
+ <nd ref="1574055123"/>
+ <nd ref="1574055102"/>
+ <nd ref="1574055151"/>
+ <nd ref="1574055145"/>
+ <nd ref="1574055072"/>
+ <nd ref="1574055126"/>
+ <nd ref="1574055132"/>
+ <nd ref="1574055138"/>
+ <nd ref="1574055140"/>
+ <nd ref="1574055098"/>
+ <nd ref="1574055224"/>
+ <nd ref="1574055211"/>
+ <nd ref="1574055209"/>
+ <nd ref="1574055223"/>
+ <nd ref="1574055076"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="四ツ谷 (Yotsuya)"/>
+ <tag k="name:en" v="Yotsuya"/>
+ <tag k="name:fr" v="Yotsuya"/>
+ <tag k="name:ru" v="Ёцуя"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing, 2007-04"/>
+ </way>
+ <way id="153990167">
+ <nd ref="1666008312"/>
+ <nd ref="1666008299"/>
+ <nd ref="1666008298"/>
+ <nd ref="1666008301"/>
+ <nd ref="1924752333"/>
+ <nd ref="1924752334"/>
+ <nd ref="1924752339"/>
+ <nd ref="1924752344"/>
+ <nd ref="1924752346"/>
+ <nd ref="1924752345"/>
+ <nd ref="1924752342"/>
+ <nd ref="1924752340"/>
+ <nd ref="1924752335"/>
+ <nd ref="1924752338"/>
+ <nd ref="1924752337"/>
+ <nd ref="1924752332"/>
+ <nd ref="1924752331"/>
+ <nd ref="1666008312"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="3"/>
+ <tag k="name" v="鶯谷 (Uguisudani)"/>
+ <tag k="name:en" v="Uguisudani"/>
+ <tag k="name:ja" v="鶯谷"/>
+ <tag k="name:ja_rm" v="Uguisudani"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="155240583">
+ <nd ref="1676538685"/>
+ <nd ref="1676538684"/>
+ <nd ref="1676538673"/>
+ <nd ref="1676538678"/>
+ <nd ref="1676750167"/>
+ <nd ref="1676750165"/>
+ <nd ref="1676538685"/>
+ <tag k="name" v="大久保駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="155240584">
+ <nd ref="1676538680"/>
+ <nd ref="1676538679"/>
+ <nd ref="1676538671"/>
+ <nd ref="1676538675"/>
+ <nd ref="1676538667"/>
+ <nd ref="1676538668"/>
+ <nd ref="1676538669"/>
+ <nd ref="1676538670"/>
+ <nd ref="1676538676"/>
+ <nd ref="1676538677"/>
+ <nd ref="1676538680"/>
+ <tag k="name" v="新大久保駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="155269677">
+ <nd ref="1676750155"/>
+ <nd ref="1676750156"/>
+ <nd ref="1676750154"/>
+ <nd ref="1676750153"/>
+ <nd ref="1676750155"/>
+ <tag k="name" v="大久保駅"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="155269678">
+ <nd ref="1676749661"/>
+ <nd ref="1676749675"/>
+ <nd ref="1676749685"/>
+ <nd ref="1676749691"/>
+ <nd ref="1676749695"/>
+ <nd ref="1676749696"/>
+ <nd ref="1676749699"/>
+ <nd ref="1676749697"/>
+ <nd ref="1676749689"/>
+ <nd ref="1676749690"/>
+ <nd ref="1676749688"/>
+ <nd ref="1676749681"/>
+ <nd ref="1676749666"/>
+ <nd ref="1676749663"/>
+ <nd ref="1676749665"/>
+ <nd ref="1676749651"/>
+ <nd ref="1676749661"/>
+ <tag k="name" v="宮廷ホーム"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="155269682">
+ <nd ref="1676749679"/>
+ <nd ref="1676749677"/>
+ <nd ref="1676749668"/>
+ <nd ref="1676749670"/>
+ <nd ref="1676749667"/>
+ <nd ref="1676749669"/>
+ <nd ref="1676749671"/>
+ <nd ref="1676749673"/>
+ <nd ref="1676749679"/>
+ <tag k="building" v="train_station"/>
+ <tag k="description" v="皇室用"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="155308888">
+ <nd ref="1677072310"/>
+ <nd ref="1677072323"/>
+ <nd ref="1677072332"/>
+ <nd ref="1677072325"/>
+ <nd ref="1677072315"/>
+ <nd ref="1677072321"/>
+ <nd ref="1677072313"/>
+ <nd ref="1677072308"/>
+ <nd ref="1677072310"/>
+ <tag k="area" v="yes"/>
+ <tag k="layer" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="bing"/>
+ </way>
+ <way id="157050778">
+ <nd ref="1692889081"/>
+ <nd ref="1692889080"/>
+ <nd ref="1692889084"/>
+ <nd ref="1692889083"/>
+ <nd ref="1692889087"/>
+ <nd ref="1692889086"/>
+ <nd ref="1692889085"/>
+ <nd ref="1692889082"/>
+ <nd ref="1692889064"/>
+ <nd ref="1692889063"/>
+ <nd ref="1692889038"/>
+ <nd ref="1692889012"/>
+ <nd ref="1692889003"/>
+ <nd ref="1692889007"/>
+ <nd ref="1692889009"/>
+ <nd ref="1692889043"/>
+ <nd ref="1692889018"/>
+ <nd ref="1692889033"/>
+ <nd ref="1692889060"/>
+ <nd ref="1692889058"/>
+ <nd ref="2059586209"/>
+ <nd ref="1692889081"/>
+ <tag k="building" v="yes"/>
+ <tag k="name" v="両国 (Ryōgoku)"/>
+ <tag k="name:en" v="Ryogoku"/>
+ <tag k="name:ja" v="両国"/>
+ <tag k="name:ja_kana" v="りょうごく"/>
+ <tag k="name:ja_rm" v="Ryōgoku"/>
+ <tag k="name:ru" v="Рёгоку"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="157576292">
+ <nd ref="1698152612"/>
+ <nd ref="1698152606"/>
+ <nd ref="1698152598"/>
+ <nd ref="1698152597"/>
+ <nd ref="1698152604"/>
+ <nd ref="1698152609"/>
+ <nd ref="1698152611"/>
+ <nd ref="1698152612"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="原宿 (Harajuku)"/>
+ <tag k="railway" v="station"/>
+ </way>
+ <way id="161039682">
+ <nd ref="1730435564"/>
+ <nd ref="1730435566"/>
+ <nd ref="1730435575"/>
+ <nd ref="1730435582"/>
+ <nd ref="1730435581"/>
+ <nd ref="1730435562"/>
+ <nd ref="1730435569"/>
+ <nd ref="1730435578"/>
+ <nd ref="1730435580"/>
+ <nd ref="1730435560"/>
+ <nd ref="1730435564"/>
+ <tag k="building" v="yes"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="survey+bing"/>
+ </way>
+ <way id="170598711">
+ <nd ref="1817685106"/>
+ <nd ref="1817685112"/>
+ <nd ref="1817685119"/>
+ <nd ref="1817685121"/>
+ <nd ref="1817685126"/>
+ <nd ref="1817685128"/>
+ <nd ref="1825133056"/>
+ <nd ref="1825133052"/>
+ <nd ref="1817685080"/>
+ <nd ref="1919930807"/>
+ <nd ref="1817685076"/>
+ <nd ref="1817685075"/>
+ <nd ref="1817685077"/>
+ <nd ref="1817685086"/>
+ <nd ref="1817685083"/>
+ <nd ref="1817685089"/>
+ <nd ref="1817685090"/>
+ <nd ref="1817685093"/>
+ <nd ref="1817685091"/>
+ <nd ref="1825133046"/>
+ <nd ref="1825133049"/>
+ <nd ref="1817685106"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="後楽園 (Korakuen)"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M22"/>
+ <tag k="source" v="Bing"/>
+ </way>
+ <way id="170603406">
+ <nd ref="1817716760"/>
+ <nd ref="1817716755"/>
+ <nd ref="1817716746"/>
+ <nd ref="1817716796"/>
+ <nd ref="1817716799"/>
+ <nd ref="1817716810"/>
+ <nd ref="1817716823"/>
+ <nd ref="1817716832"/>
+ <nd ref="1817716833"/>
+ <nd ref="1817716824"/>
+ <nd ref="1817716822"/>
+ <nd ref="1817716825"/>
+ <nd ref="1817716826"/>
+ <nd ref="1817716814"/>
+ <nd ref="1817716817"/>
+ <nd ref="1817716808"/>
+ <nd ref="1817716805"/>
+ <nd ref="1817716791"/>
+ <nd ref="1817716785"/>
+ <nd ref="1817716761"/>
+ <nd ref="1817716758"/>
+ <nd ref="1817716769"/>
+ <nd ref="1817716756"/>
+ <nd ref="1817716760"/>
+ <tag k="building" v="train_station"/>
+ <tag k="layer" v="1"/>
+ <tag k="name" v="本郷三丁目"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing"/>
+ </way>
+ <way id="182821136">
+ <nd ref="1931880103"/>
+ <nd ref="1931880102"/>
+ <nd ref="1931880100"/>
+ <nd ref="1931880098"/>
+ <nd ref="1931880089"/>
+ <nd ref="1931880095"/>
+ <nd ref="1931880090"/>
+ <nd ref="1931880087"/>
+ <nd ref="1931880084"/>
+ <nd ref="1931880086"/>
+ <nd ref="1931880081"/>
+ <nd ref="1931880080"/>
+ <nd ref="1931880092"/>
+ <nd ref="1931880094"/>
+ <nd ref="1931880096"/>
+ <nd ref="1931880099"/>
+ <nd ref="1931880101"/>
+ <nd ref="1931880103"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="代々木八幡 (Yoyogi Hachiman)"/>
+ <tag k="railway" v="station"/>
+ <tag k="source" v="Bing"/>
+ </way>
+ <way id="184607319">
+ <nd ref="1951048004"/>
+ <nd ref="1951048000"/>
+ <nd ref="1951048091"/>
+ <nd ref="1951048148"/>
+ <nd ref="1951047990"/>
+ <nd ref="1951048009"/>
+ <nd ref="1951048107"/>
+ <nd ref="1951048101"/>
+ <nd ref="1951048097"/>
+ <nd ref="1951048019"/>
+ <nd ref="1951048095"/>
+ <nd ref="1951048069"/>
+ <nd ref="1951048088"/>
+ <nd ref="1951048006"/>
+ <nd ref="1951048024"/>
+ <nd ref="1951048001"/>
+ <nd ref="1951047949"/>
+ <nd ref="1951048085"/>
+ <nd ref="1951048060"/>
+ <nd ref="1951048104"/>
+ <nd ref="1951048002"/>
+ <nd ref="1951048158"/>
+ <nd ref="1951048064"/>
+ <nd ref="1951047994"/>
+ <nd ref="1951048144"/>
+ <nd ref="1951047982"/>
+ <nd ref="1951047996"/>
+ <nd ref="1951048076"/>
+ <nd ref="1951048004"/>
+ <tag k="building" v="train_station"/>
+ <tag k="name" v="四ツ谷(Yotsuya)"/>
+ <tag k="name:ru" v="Ёцуя"/>
+ <tag k="operator" v="東京地下鉄"/>
+ <tag k="platforms" v="2"/>
+ <tag k="railway" v="station"/>
+ <tag k="ref" v="M12"/>
+ </way>
+ <way id="186850860">
+ <nd ref="1976070776"/>
+ <nd ref="1976070765"/>
+ <nd ref="1976070764"/>
+ <nd ref="1976070766"/>
+ <nd ref="1976070767"/>
+ <nd ref="1976070769"/>
+ <nd ref="1976070770"/>
+ <nd ref="1976070771"/>
+ <nd ref="1976070772"/>
+ <nd ref="1976070785"/>
+ <nd ref="1976070784"/>
+ <nd ref="1976070783"/>
+ <nd ref="1976070782"/>
+ <nd ref="1976070781"/>
+ <nd ref="1976070779"/>
+ <nd ref="1976070778"/>
+ <nd ref="1976070777"/>
+ <nd ref="1976070776"/>
+ <tag k="building" v="yes"/>
+ <tag k="layer" v="2"/>
+ <tag k="name" v="竹芝 (Takeshiba)"/>
+ <tag k="railway" v="station"/>
+ </way>
+
+</osm>