Frappe Framework
Personnaliser le champ Geolocation / carte
La carte par défaut est une rue centrée sur Mumbai. On change ce défaut pour tout le système, ou le rendu d’une seule carte.
Le champ
Un champ de type Geolocation affiche une carte sur le formulaire. Par défaut, c’est un plan de rues centré sur Mumbai. Ce défaut ne se règle pas encore dans l’interface.
Défauts globaux
À retenir
Ces changements exigent une application personnalisée et s’appliquent à toutes les cartes du système.
Créez $MY_APP/$MY_APP/public/js/map_defaults.js et ajoutez-le au hook app_include_js. Frappe charge ce fichier pour toutes les vues du bureau, donc pour les utilisateurs connectés.
const map_settings = frappe.provide("frappe.utils.map_defaults");
map_settings.center = [51.57, 9.866];
map_settings.zoom = 6;
map_settings.tiles = "https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}";
map_settings.attribution = "Tiles © Esri — Source: Esri, i-cubed, USDA, USGS, AEX, GeoEye, Getmapping, Aerogrid, IGN, IGP, UPR-EGP, and the GIS User Community";L’exemple recentre au milieu de l’Allemagne, zoome pour voir le pays, et passe à une imagerie satellite. Centre et zoom se recopient depuis l’URL d’une vue sur openstreetmap.org. D’autres tuiles sont listées sur le preview leaflet-providers. Redémarrez le bench et rechargez le navigateur.
Une carte précise
Un script client, ou un hook d’application, remplace les méthodes du contrôleur du champ. Par défaut, tout ce qui est dessiné est bleu. on_each_feature peut peindre les polygones en rouge :
frappe.ui.form.on("My Doctype", {
setup(frm) {
frm.fields_dict.MY_MAP_FIELD.on_each_feature = function (feature, layer) {
if (feature.geometry.type == "Polygon") {
layer.setStyle({ color: "red" });
}
};
},
});point_to_layer et set_style se remplacent aussi. La source renvoie à la documentation Leaflet sur GeoJSON.
Point d’attention
map_defaults change toutes les cartes. Le style d’un seul champ se pose sur fields_dict de ce champ, dans setup. L’attribution Esri de l’exemple doit rester si ces tuiles sont utilisées : la source la fournit avec l’URL.
