Skip to content

Commit

Permalink
feat: visualisation WMS-Raster #470
Browse files Browse the repository at this point in the history
  • Loading branch information
ocruze committed Oct 22, 2024
1 parent 7f442ea commit ed15320
Show file tree
Hide file tree
Showing 7 changed files with 63 additions and 80 deletions.
6 changes: 5 additions & 1 deletion assets/components/Utils/ZoomRange.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,11 @@ const ZoomRange: FC<ZoomRangeProps> = (props) => {
{mode !== "both" && (
<div className={cx(fr.cx("fr-col", "fr-px-2v"))}>
<div className={cx(classes.falseMapRoot)}>
<img src={mode === "top" ? imgMapZoomBottom : imgMapZoomTop} className={cx(classes.map, classes.falseMapImg)} />
<img
src={mode === "top" ? imgMapZoomBottom : imgMapZoomTop}
className={cx(classes.map, classes.falseMapImg)}
alt="Illustration d'une carte fixe"
/>
<div className={cx(classes.falseMapOverlay)}>
{overlayContent && <div className={cx(fr.cx("fr-m-4v", "fr-p-2v"), classes.falseMapOverlayContent)}>{overlayContent}</div>}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,8 @@ const PyramidRasterListItem: FC<PyramidRasterListItemProps> = ({ datasheetName,
priority="secondary"
disabled={pyramid.status !== StoredDataStatusEnum.GENERATED}
>
{t("publish_tms_service")}
{/* {t("publish_tms_service")} */}
TODO
</Button>
<MenuList
menuOpenButtonProps={{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { fr } from "@codegouvfr/react-dsfr";
import Accordion from "@codegouvfr/react-dsfr/Accordion";
import Alert from "@codegouvfr/react-dsfr/Alert";
import Button from "@codegouvfr/react-dsfr/Button";
import ButtonsGroup from "@codegouvfr/react-dsfr/ButtonsGroup";
Expand Down Expand Up @@ -38,11 +37,13 @@ function bboxToWkt(bbox: BoundingBox) {

const STEPS = {
TECHNICAL_NAME: 1,
TOP_ZOOM_LEVEL: 2,
// TOP_ZOOM_LEVEL: 2,
BOTTOM_ZOOM_LEVEL: 2,
};

type PyramidRasterGenerateFormType = {
technical_name: string;
bottom_zoom_level: number;
};

type PyramidRasterGenerateFormProps = {
Expand All @@ -67,26 +68,29 @@ const PyramidRasterGenerateForm: FC<PyramidRasterGenerateFormProps> = ({ datasto
technical_name: yup.string().typeError(t("technical_name.error.mandatory")).required(t("technical_name.error.mandatory")),
});

schemas[STEPS.TOP_ZOOM_LEVEL] = yup.lazy(() => {
// if (serviceQuery.data === undefined) {
// }
return yup.mixed().nullable().notRequired();
schemas[STEPS.BOTTOM_ZOOM_LEVEL] = yup.object({
bottom_zoom_level: yup.number().required(),
});

const form = useForm<PyramidRasterGenerateFormType>({
resolver: yupResolver(schemas[currentStep]),
mode: "onChange",
// values: defaultValues,
defaultValues: {
technical_name: "test wms raster",
bottom_zoom_level: 10,
},
});

const {
register,
trigger,
getValues: getFormValues,
setValue: setFormValue,
formState: { errors },
watch,
} = form;

// console.log(bboxToWkt((serviceQuery.data?.configuration.type_infos as ConfigurationWmsVectorDetailsContent).bbox));
const bottomLevel = watch("bottom_zoom_level");

const generatePyramidRasterMutation = useMutation<PyramidRaster, CartesApiException>({
mutationFn: () => {
Expand Down Expand Up @@ -129,8 +133,6 @@ const PyramidRasterGenerateForm: FC<PyramidRasterGenerateFormProps> = ({ datasto
}
}, [currentStep, generatePyramidRasterMutation, trigger]);

const [levels, setLevels] = useState([5, 15]);

console.log("errors", errors);

return (
Expand Down Expand Up @@ -160,7 +162,7 @@ const PyramidRasterGenerateForm: FC<PyramidRasterGenerateFormProps> = ({ datasto
<Stepper
currentStep={currentStep}
stepCount={Object.values(STEPS).length}
nextTitle={currentStep < STEPS.TOP_ZOOM_LEVEL && t("step.title", { stepNumber: currentStep + 1 })}
nextTitle={currentStep < STEPS.BOTTOM_ZOOM_LEVEL && t("step.title", { stepNumber: currentStep + 1 })}
title={t("step.title", { stepNumber: currentStep })}
/>

Expand All @@ -183,48 +185,19 @@ const PyramidRasterGenerateForm: FC<PyramidRasterGenerateFormProps> = ({ datasto
/>
</div>

<div className={fr.cx(currentStep !== STEPS.TOP_ZOOM_LEVEL && "fr-hidden")}>
<h3>{t("top_zoom_level.lead_text")}</h3>
<p>{t("top_zoom_level.explanation")}</p>

{currentStep === STEPS.TOP_ZOOM_LEVEL &&
(serviceQuery.data?.configuration.type_infos as ConfigurationWmsVectorDetailsContent).used_data?.[0]?.relations.map((rel) => (
<Accordion key={rel.name} label={rel.name} titleAs="h4" defaultExpanded={true}>
<ZoomRange
min={olDefaults.zoom_levels.TOP}
max={olDefaults.zoom_levels.BOTTOM}
values={levels}
onChange={(values) => {
console.log(values);
setLevels((prevLevels) => [values[0], prevLevels[1]]);
}}
step={1}
mode="top"
overlayContent={t("top_zoom_level.overlay_text")}
/>
{/* <ZoomRange
min={olDefaults.zoom_levels.TOP}
max={olDefaults.zoom_levels.BOTTOM}
values={levels}
onChange={(values) => {
console.log(values);
setLevels((prevLevels) => [prevLevels[0], values[0]]);
}}
step={1}
mode="bottom"
/>
<ZoomRange
min={olDefaults.zoom_levels.TOP}
max={olDefaults.zoom_levels.BOTTOM}
values={levels}
onChange={(values) => {
console.log(values);
setLevels(values);
}}
step={1}
/> */}
</Accordion>
))}
<div className={fr.cx(currentStep !== STEPS.BOTTOM_ZOOM_LEVEL && "fr-hidden")}>
<h3>{t("bottom_zoom_level.lead_text")}</h3>
<p>{t("bottom_zoom_level.explanation")}</p>

<ZoomRange
min={olDefaults.zoom_levels.TOP}
max={olDefaults.zoom_levels.BOTTOM}
values={[bottomLevel]}
onChange={(values) => setFormValue("bottom_zoom_level", values[0])}
step={1}
mode="top"
overlayContent={t("bottom_zoom_level.overlay_text")}
/>
</div>

<ButtonsGroup
Expand Down Expand Up @@ -278,9 +251,9 @@ export const { i18n } = declareComponentKeys<
| "technical_name.label"
| "technical_name.explanation"
| "technical_name.error.mandatory"
| "top_zoom_level.lead_text"
| "top_zoom_level.explanation"
| "top_zoom_level.overlay_text"
| "bottom_zoom_level.lead_text"
| "bottom_zoom_level.explanation"
| "bottom_zoom_level.overlay_text"
| "generate.in_progress"
>()({
PyramidRasterGenerateForm,
Expand All @@ -294,7 +267,7 @@ export const PyramidRasterGenerateFormFrTranslations: Translations<"fr">["Pyrami
case 1:
return "Nom de la pyramide de tuiles raster";
case 2:
return "Niveau de zoom top";
return "Niveau de zoom bottom";
default:
return "";
}
Expand All @@ -307,11 +280,10 @@ export const PyramidRasterGenerateFormFrTranslations: Translations<"fr">["Pyrami
"technical_name.explanation":
"II s'agit du nom technique du service qui apparaitra dans votre espace de travail, il ne sera pas publié en ligne. Si vous le renommez, choisissez un nom explicite.",
"technical_name.error.mandatory": "Le nom technique de la pyramide de tuiles raster est obligatoire",
"top_zoom_level.lead_text": "Choisissez le niveau de zoom top de vos tables",
"top_zoom_level.explanation": `Les niveaux de zoom de la pyramide de tuiles raster sont prédéfinis. Choisissez la borne minimum de votre pyramide de tuiles en vous aidant
de la carte de gauche. Le zoom maximum sur l’image de droite est fixe et ne peut être modifié. Tous les niveaux intermédiaires seront
générés.`,
"top_zoom_level.overlay_text": "Le zoom maximum est déterminé par la résolution des images fournies en entrée",
"bottom_zoom_level.lead_text": "Choisissez le niveau de zoom bottom de votre flux WMS-Vecteur",
"bottom_zoom_level.explanation":
"Les niveaux de zoom de la pyramide de tuiles raster sont prédéfinis. Choisissez la borne minimum de votre pyramide de tuiles en vous aidant de la carte de gauche. Le zoom maximum sur l’image de droite est fixe et ne peut être modifié. Tous les niveaux intermédiaires seront générés.",
"bottom_zoom_level.overlay_text": "Le zoom maximum est déterminé par la résolution des images fournies en entrée",
"generate.in_progress": "Génération de pyramide de tuiles raster en cours",
};

Expand All @@ -325,8 +297,8 @@ export const PyramidRasterGenerateFormEnTranslations: Translations<"en">["Pyrami
"technical_name.lead_text": undefined,
"technical_name.label": undefined,
"technical_name.explanation": undefined,
"top_zoom_level.lead_text": undefined,
"top_zoom_level.explanation": undefined,
"top_zoom_level.overlay_text": undefined,
"bottom_zoom_level.lead_text": undefined,
"bottom_zoom_level.explanation": undefined,
"bottom_zoom_level.overlay_text": undefined,
"generate.in_progress": undefined,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const PyramidRasterTmsServiceForm = () => {
return <div>PyramidRasterTmsServiceForm</div>;
};

export default PyramidRasterTmsServiceForm;
5 changes: 3 additions & 2 deletions assets/modules/WebServices/WebServices.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ const getWebService = (service: Service) => {
case OfferingDetailResponseDtoTypeEnum.WMTSTMS: {
return new TMSService(service);
}
case OfferingDetailResponseDtoTypeEnum.WMSVECTOR: {
case OfferingDetailResponseDtoTypeEnum.WMSVECTOR:
case OfferingDetailResponseDtoTypeEnum.WMSRASTER: {
return new WMSVectorService(service);
}
default:
throw Error(`Service ${service.type} is not implemented`);
throw Error(`L'affichage du flux du type ${service.type} n'est pas encore implémenté`);
}
};

Expand Down
4 changes: 2 additions & 2 deletions src/Controller/Entrepot/PyramidRasterController.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public function add(string $datastoreId, Request $request): JsonResponse
'processing' => $processingId,
'output' => [
'stored_data' => [
'name' => 'aaaaaaaaaaaa', // $data['technical_name'],
'name' => $data['technical_name'],
],
],
'parameters' => [
Expand All @@ -98,7 +98,7 @@ public function add(string $datastoreId, Request $request): JsonResponse
'harvest_format' => 'image/jpeg',
'harvest_url' => $harvestUrl,
'harvest_layers' => $wmsvOffering['layer_name'],
'harvest_area' => $this->bboxToWkt($wmsvConfiguration['type_infos']['bbox']),
'harvest_area' => $data['wmsv_config_bbox'] ?? $this->bboxToWkt($wmsvConfiguration['type_infos']['bbox']),
// 'POLYGON((1.999375 50.25875,5.8734375 50.25875,5.8734375 47.940898437,1.999375 47.940898437,1.999375 50.25875))',
],
];
Expand Down
18 changes: 9 additions & 9 deletions src/Services/EntrepotApi/CartesServiceApiService.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ public function getShareUrl(string $datastoreId, array $offering): ?string
switch ($offering['type']) {
case OfferingTypes::WFS:
case OfferingTypes::WMSVECTOR:
case OfferingTypes::WMSRASTER:
$annexeUrl = $this->params->get('annexes_url');
$shareUrl = join('/', [$annexeUrl, $datastore['technical_name'], $endpoint['endpoint']['technical_name'], 'capabilities.xml']);
break;
Expand Down Expand Up @@ -215,25 +216,24 @@ public function tmsUnpublish(string $datastoreId, array $offering, bool $removeS
}

/**
* Suppression des styles lies à une configuration
*
* Suppression des styles lies à une configuration.
*/
private function removeStyleFiles(string $datastoreId, string $configurationId) : void
private function removeStyleFiles(string $datastoreId, string $configurationId): void
{
$path = "/configuration/$configurationId/styles.json";

$styleAnnexes = $this->annexeApiService->getAll($datastoreId, null, $path);
if (count($styleAnnexes) === 0) {
if (0 === count($styleAnnexes)) {
return;
}

$content = $this->annexeApiService->download($datastoreId, $styleAnnexes[0]['_id']);

$styles = json_decode($content, true);
foreach($styles as $style) {
foreach ($styles as $style) {
if (array_key_exists('layers', $style)) {
foreach($style['layers'] as $layer) {
$this->annexeApiService->remove($datastoreId, $layer['annexe_id']);
foreach ($style['layers'] as $layer) {
$this->annexeApiService->remove($datastoreId, $layer['annexe_id']);
}
}
}
Expand Down

0 comments on commit ed15320

Please sign in to comment.