J'ai un code JavaScript qui utilise OpenLayer3. Je dois mettre en œuvre ce code dans un projet Angular2, dans Typescript. P>
Quelqu'un sait comment utiliser OpenLayer avec Angular2 / Typescript s'il vous plaît? p>
Merci beaucoup, P>
Jean p>
3 Réponses :
Comme pour les dactylographies, vous pouvez être intéressé par PROJET DE PRODUITYTYPED - Vous pouvez trouver des offices OpenLayers / Openlouilles. D.TS - Vous devez probablement comprendre le Quant aux angularjs 2 Considérant qu'il est toujours en version bêta, l'expérience vous dit que vous êtes surtout. Toujours googling peut vous indiquer à IE https://gist.github.com/borchsenius/5a1ec0b48b283ba65021 . p>
L'approche habituelle est d'abord à comprendre l'angularjs 2 méthode selon des exemples déjà existants. Vous devriez bientôt remarquer beaucoup de bon sens dans la manière dont différentes intégrations cherchent. Ensuite, essayez d'adapter ce que vous voulez de manière appropriée. Ensuite, il y a la grande partie à donner plus loin et à partager les connaissances :) p>
Savoir également des solutions angularjs angularjs existantes telles que Cet article peut aider. P> TSD code>, les convétions de dossier, etc. p>
Une note latérale à ceci est que les typages OpenLayers sont incomplètes. J'ai un peu contribué à cela, mais c'est loin d'être complet. Assurez-vous de vérifier la documentation. Ne comptez pas sur l'intellisense. Si vous trouvez une méthode ou une propriété que vous devez utiliser non dans le fichier de définition, assurez-vous de l'ajouter et de soumettre une demande de traction!
Bon avis et bon à savoir. En fait, c'est la façon dont les typages évoluent pour le monde de la JS non typée. J'essaie de faire de même lorsque vous utilisez d'autres dactylographies incomplètes.
Ajouter OpenLayers3 dans votre .angular-cli.json strong> (situé à votre racine de votre projet): p> import { AfterViewInit, Component, ElementRef, ViewChild } from "@angular/core";
// This is necessary to access ol3!
declare var ol: any;
@Component({
selector: 'my-app',
template: `
<h3> The map </h3>
<div #mapElement id="map" class="map"> </div>
`
// The "#" (template reference variable) matters to access the map element with the ViewChild decorator!
})
export class AppComponent implements AfterViewInit {
// This is necessary to access the html element to set the map target (after view init)!
@ViewChild("mapElement") mapElement: ElementRef;
public map: any;
constructor(){
var osm_layer: any = new ol.layer.Tile({
source: new ol.source.OSM()
});
// note that the target cannot be set here!
this.map = new ol.Map({
layers: [osm_layer],
view: new ol.View({
center: ol.proj.transform([0,0], 'EPSG:4326', 'EPSG:3857'),
zoom: 2
})
});
}
// After view init the map target can be set!
ngAfterViewInit() {
this.map.setTarget(this.mapElement.nativeElement.id);
}
}
Cela fonctionne bien, cependant, référencer les URL pour charger des données KML, à partir de sources n'est pas directe. Angular prend l'URL comme URL de navigation, et non l'URL du système de fichiers.
Je reçois RéférenceError: OL n'est pas défini code> dans Openalayers 5. a
OL code> Utilisation modifiée?
Vous pouvez utiliser Angular2-OpenLayers, disponible en tant que package NPM ou ici: HTTPS: // github.com/quentin-ol/angular2-openlouilles p>
J'ai considéré cela, mais la dernière validation de src code> était il y a environ 11 mois. Donc, je ne suis pas sûr que ce soit une bonne option