jlchassaing / ezgeodatagouv
EzGeoDataGouv bundle helps interact with datagouv to import location and search them using geo.data.gouv tool
Installs: 249
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 2
Forks: 0
Open Issues: 9
Type:ezplatform-bundle
Requires
- php: ^7.0
- ezsystems/ezplatform-kernel: ^1.1
- dev-master / 2.x-dev
- v2.0.1
- v2.0.0
- dev-ez2.5 / 1.1.x-dev
- v1.1.4
- v1.1.3
- v1.1.2
- v1.1.1
- v1.1
- v1.0
- dev-ibexa-4
- dev-php8
- dev-develop
- dev-dependabot/npm_and_yarn/src/bundle/Resources/minimist-1.2.8
- dev-dependabot/npm_and_yarn/src/bundle/Resources/json5-1.0.2
- dev-dependabot/npm_and_yarn/src/bundle/Resources/loader-utils-1.4.2
- dev-dependabot/npm_and_yarn/src/bundle/Resources/terser-4.8.1
- dev-dependabot/npm_and_yarn/src/bundle/Resources/ajv-6.12.6
- dev-dependabot/npm_and_yarn/src/bundle/Resources/path-parse-1.0.7
- dev-dependabot/npm_and_yarn/src/bundle/Resources/glob-parent-5.1.2
- dev-dependabot/npm_and_yarn/src/bundle/Resources/browserslist-4.16.6
- dev-dependabot/npm_and_yarn/src/bundle/Resources/lodash-4.17.21
This package is auto-updated.
Last update: 2024-11-09 15:23:46 UTC
README
eZ Geo Data Gouv project
This bundle has two usecases :
- help import a csv location list and give geocoding functionnality based on geo.api.gouv.fr
- give a react search form with auto completion also based on geo data gouv
Contents will be imported in eZ Platform contents indexed by solr to help location proximiy search
installation
This release is ment to be installed on eZ Platform 2.5 and Symfony 3.4
This bundle uses eZ Platform and Code Rhapsodie eZ Dataflow Bundle
composer require jlchassaing/ezgeodatagouv
in AppKernel.php add
<?php // app/AppKernel.php public function registerBundles() { $bundles = [ // ... new Kaliop\eZMigrationBundle\EzMigrationBundle(), new CodeRhapsodie\DataflowBundle\CodeRhapsodieDataflowBundle(), new CodeRhapsodie\EzDataflowBundle\CodeRhapsodieEzDataflowBundle(), new eZGeoDataGouvBundle\EzGeoDataGouvBundle(), // ... ]; }
in routing.yml add the coderhapsody routing parameter
_cr.dataflow: resource: '@CodeRhapsodieEzDataflowBundle/Resources/config/routing.yaml' _ezGeoDataGouv: resource: '@EzGeoDataGouvBundle/Resources/config/rest_routing.yml' prefix: '%ezpublish_rest.path_prefix%'
Create the new location content type
bin/console kaliop:migration:migrate --siteaccess=admin --path=vendor/jlchassaing/ezgeodatagouv/src/bundle/MigrationVersions/20200407105655_create_location_content_type.yml
how to import data
Set a resource
Resouces are set in a config.yml file
ez_geo_data_gouv: resources: resource_key_name: do_geocoding: true|false content_type: content_type_identifier # content type where to import data language: import_language # should be eng-GB or fre-FR or any other language default is eng-GB id_key: csv_uniq_id_key name: csv_field_used_for_name address: longitude: longitude latitude: latitude address: csv_field_used_for_full_address fields: # if using a custom class identifier cet specific fields url: datatype: ezurl value: url geocoding_fields: columns: - commune # csv field to send for geo coding in geo.api.gouv - voie postcode: code_postal citycode: code_commune_insee result_columns: - result_label # set specific fields for result if not set default are longitude and latidue
The settings help set how the csv fields will be used. The ressoure name must be passed in option to the import script
The fields sections helps you add specific content_type fields. The key is the conten_type field identifier. the datatype is te content_type field datatype and value is the csv field name
running import
The import script alias is 'dtgi'
If you do not provide siteaccess parameter the default siteaccess will be used
The options to provide are :
- the parent_location_id where contents will be added
- the csv_source path where the csv source is can be online (for now the file must be semicolon field seperated and quotation marks)
- resource name
bin/console code-rhapsodie:dataflow:execute --siteaccess=<siteaccess> dtgi '{"parent-location-id":<locationId>,"csv-source":"<csvpath>","resource":"<resource_name>"}'
Proximity search
The eZ Rest api has been extended with a query that returns proximity points
there are 4 ways to call the perform the request :
- /ez_geo_data_gouv/search/{longitude}/{latitude}
- /ez_geo_data_gouv/search/{distance}/{longitude}/{latitude}
- /ez_geo_data_gouv/search/{contentType}/{longitude}/{latitude}
- /ez_geo_data_gouv/search/{contentType}/{distance}/{longitude}/{latitude}
The default contentType is "location" and the default distance is 5
Remember to use the ezpublish api request prefix Adding the Accept: application/vnd.ez.api.ContentList+json header to your request will return a json formated response.
The query will return a maximum of 5 answers
Extending to add a custom import manager
The DataGouvImportLocationsDataFlowType class can be extended
This could be necessary to execute some changes on the csv data before creating content.
Create a custom class that extends DataGouvImportLocationsDataFlowType and add methods :
... public function getLabel(): string { return "My DataFlow"; } public function getAliases(): iterable { return ['mydf']; } protected function addFilterTask(DataflowBuilder $builder) { $builder->addStep(function ($data){ /** add here your code and return data or null to invalidate line */ return $data; }); } ...
Once the class is created declare it as a service and add tag coderhapsodie.dataflow.type
AppBundle\DataFlow\MyDataFlowType: tags: - { name: coderhapsodie.dataflow.type }
Todos
- add csv config
- if no location parameters are given (longitude, latitude) the geocode before importing data
- set a mapping configuration interface and only pass a configuration id to import script
- add parameters to conactenate fields to build the adress field