Je dois développer un navigateur et un visualiseur de plan d'étage interactifs pour les immeubles à appartements, qui succéderont à son prédécesseur basé sur Flash.
Je suis actuellement en train d'évaluer les techniques et technologies les mieux adaptées pour l'implémenter en HTML5. Je devrai prendre en charge tous les navigateurs courants (IE commençant par 7).
Exigences:
J'ai réfléchi aux options de mise en œuvre. J'aurai également besoin d'un moyen rapide de sélectionner des polygones pour les étages (aperçu) et les appartements (plan d'étage) pour permettre aux non-développeurs de créer de nouveaux bâtiments.
Les options que j'ai trouvées:
Quelle est la meilleure option pour la compatibilité entre les navigateurs?
Soit SVG ou Canvas conviendra à vos besoins. Vous aurez probablement plus de facilité à développer cela en SVG simplement à cause de ce qui est déjà fait pour vous.
Voici quelques autres considérations:
À ce stade, ils sont assez égaux en termes de compatibilité, à l'exception des anciennes versions d'IE. Vous pouvez les faire fonctionner avec Canvas en utilisant la bibliothèque excanvas, mais ça craint un peu, surtout si quelque chose va bouger.
Je recommanderais SVG uniquement parce que vous pourrez commencer à le développer beaucoup plus rapidement pour une application de type plan d'étage. Tout est déjà un objet DOM. Les événements, la gestion de la souris, etc., sont déjà faits pour vous.
Mais si vous voulez vraiment qu'il fonctionne sur (les plus anciens?) Android téléphones, Canvas est peut-être le meilleur pari pour l'instant.
Je prévois quelque chose de similaire pour la navigation intérieure :)
J'ai fini par utiliser OpenLayers ( http://openlayers.org/ )
En fait, OpenLayers a été inventé pour les trucs SIG (cartes, etc.), mais vous pouvez facilement définir un système de coordonnées métriques X-Y-Z et simplement l'alimenter avec des données vectorielles.
Le gros avantage est qu'il est livré avec de nombreuses fonctionnalités telles que le dessin, différentes superpositions vectorielles, la détection de collision, la mesure de distance, les info-bulles, les marques, etc.:
Pour OpenLayers 2.x (à l'origine), voir:
http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/
http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/draw-feature.html
http://dev.openlayers.org/releases/OpenLayers-2.13.1/examples/transform-feature.html
Pour OpenLayers 3.x, voir:
http://openlayers.org/en/v3.4.0/examples/
http://openlayers.org/en/v3.4.0/examples/draw-features.html
Vous pouvez communiquer via GeoJSON, GML, etc. avec le backend. Nous avons utilisé PostGIS comme backend pour stocker les données vectorielles. Il y a aussi une extension spatiale pour mysql ( http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html ).
Définissez simplement un système de coordonnées X-Y-Z simple avec un point de référence bien choisi :)