README.md 6.39 KB
Newer Older
Christine Plumejeaud's avatar
Christine Plumejeaud committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17


# 1. Portic gazetteer : get description of maritime places

Web API above the postgres database developped with Flask to get maritime places description, stored in schema ports

http://gaz.portic.fr/places?uhgs_id=


## 1.1. Installation

Neep Python 3 to be installed

Clone or download this git repo, then

pip3 install -r requirements.txt

18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Also, the lib difflib for python with npm: 
`npm install difflib`


At database level, the SGBD must have a base geonames. And you should provide a link through a materialized view with, and grant access to api_user for that.

```sql
create extension dblink;

drop  view ports.myremote_geonamesplaces;
create materialized VIEW ports.myremote_geonamesplaces AS
  SELECT *
    FROM dblink('dbname=geonames port=5433 user=postgres password=postgres options=-csearch_path=',
                'select geonameid::int, name, (feature_class||''.''||feature_code) as feature_code, alternatenames, country_code,  latitude::float, longitude::float , point3857
					from geonames.geonames_nov2019.allcountries a 
					where feature_class||''.''||feature_code in (select code from geonames.geonames_nov2019.feature_code where keep = ''x'')')
    AS t1(geonameid int, name text, feature_code text, alternatenames text , country_code text, latitude float, longitude float, point3857 geometry);
--- 34 s, 5 012 322 lignes
-- 37 s, 5 012 322 lignes

grant select on  ports.myremote_geonamesplaces to api_user;
grant select on  ports.matching_port to api_user;
grant select on  ports.limites_amirautes to api_user;
```

Christine Plumejeaud's avatar
Christine Plumejeaud committed
43
44
### 1.1.1. Running without Apache

45
python porticgaz.py
Christine Plumejeaud's avatar
Christine Plumejeaud committed
46
47
48

(or create a virtualenv, then activate it and pip install -r requirements && python apidata.py)

49
Backend is running and serve the data on http://localhost:80 (change the PORT variable at the top level of porticgaz.py)
50
51
52

### 1.1.2. Running with Apache

53
54
The gazetteer is served by Apache2 running WSGI module.

55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
```bash

cd /home/plumegeo/navigo/Viz/gazetteer
git fetch origin master
git reset --hard origin/master
cd ..
cp gazetteer/porticgaz.py gazetteer/__init__.py

sudo chown :www-data /home/plumegeo/navigo/Viz/gazetteer/ -R
sudo chmod 755 /home/plumegeo/navigo/Viz/gazetteer/ -R
for fic in $(find /home/plumegeo/navigo/Viz/gazetteer/ -type f -name "*.py"); do sudo dos2unix $fic; done

sudo  service apache2 reload
```

## 1.2. List of possible requests

### 1.2.1. Principes

Les données exposées sont une extraction des points d'escales géolocalisés de navigocorpus pour 1787, composé à partir du registre de la santé de Marseille et des congés du G5, ainsi que les cahiers du petit cabotage sur Marseille. Ces localisations sont récupérées depuis la [base navigocorpus](http://navigocorpus.org/) (logiciel Filemaker) en ligne et téléchargées dans postgres avec le code d'un [ETL disponible dans le gitlab d'humanum](https://gitlab.huma-num.fr/portic/navigocorpus/-/tree/master/ETL). 

URL du gazetteer : **http://gaz.portic.fr/places/**


Trois requêtes : 
- **[ports](http://gaz.portic.fr/ports)** : un fichier geojson listant tous les ports disponibles dans ce gazetteer
- **[places](http://gaz.portic.fr/places?)** : la description en json_ld d'une place particulière définie par son Uhgs_id (identifiant unique) ou bien par son nom si Amirauté ou Province
- **[fieldnames](http://gaz.portic.fr/fieldnames)** : récupère des métadonnées sur les ports, avec la liste des attributs, avec leur nom court et long, leur type et leur signification. 

### 1.2.2. ports

Export list of ports_points (in 900013 projection or what is specified by user) in json format, 
    with all required attributes for visualisations (selection of parameters is not possible for the moment)
    
    List of attributes : 
    **ogc_fid, uhgs_id, total, toponym, belonging_states, status, geonameid, admiralty, province, shiparea , point**
    point is the geometry of the port.
    User can get a description of the attributes by using /fieldnames?api=ports

    Default srid is 900913
    You get another by specifying a srid param

    Will be extracted from postgres, schema ports, table port_points (see navigocorpus/ETL)
    Tested alone in a browser:  
    - http://gaz.portic.fr/ports?srid=4326 
    - http://gaz.portic.fr/ports?
    and by using explorex.portic.fr application (code alphaportic for visualisation) as client : it works

Liste des paramètres et valeur par défaut en gras:
- srid : **900013** 
- format : csv | **json**
- shortenfields : true | **false**

**srid** is the projection used to deliver the geometries. Provide a valid EPSG (present in spatial_ref_sys table with postgis 2.5)

**format** permet de télécharger soit au format CSV soit au format JSON les données. 
Par exemple : 
- <http://gaz.portic.fr/ports/?format=csv>
Le séparateur dans le fichier CSV est le point-virgule (;)

Pour avoir les mêmes données en JSON : 
- <http://gaz.portic.fr/ports/?format=json>


**shortenfields** permet de raccourcir les noms des attributs et donc d'alléger la taille du JSON téléchargé. L'API permet de récupérer le mapping entre ces noms courts et longs avec <http://gaz.portic.fr/fieldnames/?format=json>
Exemple : 
<http://gaz.portic.fr/ports?format=json&shortenfields=true>

Un exemplaire de ce qui peut être téléchargé est dans le GIT dans samples/ports.json

### 1.2.3. places


Return the places using linked places model as specified in 
    https://github.com/LinkedPasts/linked-places
    See : http://linkedpasts.org/ontology/lpo_latest.ttl

    Will be extracted from postgres, schema navigoviz, table ports.port_points (see navigocorpus/ETL)

You can get a province description : 
    http://127.0.0.1:80/places/?Flandre
You can get a amiraute description : 
    http://127.0.0.1:80/places/?Dunkerque
You can get a port description (only by its UHGS id): 
    http://127.0.0.1:80/places/?A0198999

You can go on http://explorex.portic.fr to find the UHGS id of a port present in the database, through a search form with a map to locate it. 

### 1.2.4. fielnames

    Récupère des métadonnées sur l'API, avec la liste des attributs, avec leur nom court et long, leur type et leur signification. 
146
147
148
    Get metadata about the gazetteer with short and long name, type and definition
    
    Api is 'ports' by default.
149
150
151
152
153

    http://127.0.0.1:80/fieldnames/?format=json
    http://127.0.0.1/fieldnames/?format=json&shortenfields=true
    http://127.0.0.1/fieldnames/?format=json&shortenfields=true&api=ports
    http://127.0.0.1/fieldnames/?format=csv&shortenfields=true&api=ports