- Introduction
- Ajouter un calque KML
- Effacer un calque KML
- Accéder aux conteneurs KML
- Accéder aux repères KML et aux superpositions au sol KML
- Accéder aux propriétés KML
- Fonctionnalités KML compatibles
Introduction
KML est une extension du format de données XML et représente des données géographiques sur une carte. Cet utilitaire permet de convertir des objets KML en formes géographiques et d'effectuer le rendu sous forme de calque au-dessus d'une carte. Pour ajouter et supprimer vos données KML de la carte, appelez respectivement addLayerToMap()
et removeLayerFromMap()
. Vous pouvez accéder aux propriétés d'un objet KML en appelant getProperties()
sur n'importe quel élément Placemark, GroundOverlay, Document ou Folder.
Ajouter un calque KML à la carte
Pour ajouter un calque de données à la carte, vous devez d'abord créer une instance de la classe KmlLayer
. Il existe deux façons d'instancier un KmlLayer
.
Pour importer et effectuer le rendu d'un jeu de données KML à partir d'une ressource locale, il vous faut :
- Un objet
GoogleMap
dans lequel le calque doit être affiché - Un fichier de ressources local contenant les données KML
- Un objet
Context
nécessaire pour ouvrir un fichier de ressources local.
Kotlin
val layer = KmlLayer(map, R.raw.geojson_file, context)
Java
KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);
Pour importer et effectuer le rendu d'un jeu de données KML à partir d'un flux local, il vous faut :
- Un objet
GoogleMap
dans lequel le calque doit être affiché - Un tableau (
InputStream
) contenant les données KML - Un objet
Context
, nécessaire pour ouvrir les ressources locales.
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Après avoir créé un KmlLayer
, appelez
addLayerToMap()()
pour ajouter les données importées à la carte.
Kotlin
layer.addLayerToMap()
Java
layer.addLayerToMap();
Effacer un calque KML
Supposons que vous avez créé ce KmlLayer
:
Kotlin
val inputStream: InputStream? = // InputStream containing KML data val layer = KmlLayer(map, inputStream, context)
Java
InputStream inputStream = // InputStream containing KML data KmlLayer layer = new KmlLayer(map, inputStream, context);
Pour supprimer le calque de la carte, appelez removeLayerFromMap()
:
Kotlin
layer.removeLayerFromMap()
Java
layer.removeLayerFromMap();
Accéder aux conteneurs KML
Pour accéder aux conteneurs qui ont été ajoutés à votre calque, vous pouvez appeler getContainers()
sur le calque que vous avez créé.
Pour savoir si un conteneur contient des conteneurs imbriqués, vous pouvez appeler hasContainers()
. Pour accéder à ces conteneurs imbriqués, de la même manière que vous pouvez le faire dans votre calque, vous pouvez appeler getContainers()
.
Pour accéder aux conteneurs qui ne sont pas imbriqués dans un KmlLayer
ni un KmlContainer:
Kotlin
for (containers in layer.containers) { // Do something to container }
Java
for (KmlContainer containers : layer.getContainers()) { // Do something to container }
Pour accéder aux conteneurs qui sont imbriqués dans un KmlLayer
ou un KmlContainer
:
Kotlin
fun accessContainers(containers: Iterable<KmlContainer>) { for (container in containers) { if (container.hasContainers()) { accessContainers(container.containers) } }
Java
public void accessContainers(Iterable<KmlContainer> containers) { for (KmlContainer container : containers) { if (container.hasContainers()) { accessContainers(container.getContainers()); } } }
Accéder aux repères KML et aux superpositions au sol KML
Pour accéder à un repère ou à une superposition au sol qui a été ajouté(e) au calque, vous pouvez appeler getPlacemarks()
ou getGroundOverlays()
sur un calque ou un conteneur. Le fait d'appeler l'une ou l'autre de ces méthodes renverra un itérable de KmlPlacemarks
ou KmlGroundOverlays
respectivement.
Par exemple, pour accéder aux objets KmlPlacemark
à partir d'un calque :
Kotlin
for (placemark in layer.placemarks) { // Do something to Placemark }
Java
for (KmlPlacemark placemark : layer.getPlacemarks()) { // Do something to Placemark }
Accéder aux propriétés KML
Pour accéder à n'importe quelle propriété d'un conteneur ou d'un repère, appelez getProperty()
et attribuez-lui une clé de propriété. Vous pouvez également appeler hasProperty()
pour vérifier qu'elle existe. Cet exemple montre comment
extraire la valeur de propriété "name" d'un conteneur, si elle existe.
Kotlin
for (container in layer.containers) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")) } }
Java
for (KmlContainer container : layer.getContainers()) { if (container.hasProperty("name")) { Log.i("KML", container.getProperty("name")); } }
Événements de clic sur la géométrie KML
Vous pouvez utiliser KmlLayer.OnFeatureClickListener()
pour écouter les événements de clic sur les éléments géométriques de la carte. L'exemple suivant enregistre l'ID d'un élément géométrique lorsque l'utilisateur
clique dessus :
Kotlin
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener { feature -> Log.i( "KML", "Feature clicked: " + feature.id ) }
Java
// Set a listener for geometry clicked events. layer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() { @Override public void onFeatureClick(Feature feature) { Log.i("KML", "Feature clicked: " + feature.getId()); } });
Voir l'application de démonstration
Pour savoir comment importer un fichier KML et créer un calque avec ce fichier, consultez KmlDemoActivity
dans l'application de démonstration fournie avec la bibliothèque d'utilitaires. Le guide de configuration vous explique comment exécuter l'application de démonstration.
Fonctionnalités KML compatibles
Élément KML | Pris en charge ? | Commentaire |
---|---|---|
<address> | partiellement | Stocké en tant que valeur de propriété |
<AddressDetails> | non | |
<Alias> | non | |
<altitude> | non | |
<altitudeMode> | non | |
<atom:author> | non | |
<atom:link> | non | |
<atom:name> | non | |
<BalloonStyle> | partiellement | seul <text> pris en charge |
<begin> | N/A | <TimeSpan> non pris en charge |
<bgColor> | non | |
<bottomFov> | N/A | <PhotoOverlay> non pris en charge |
<Camera> | non | |
<Change> | partiellement | seuls les changements de style sont pris en charge |
<color> | partiellement | inclut #AABBGGRR et #BBGGRR ; non pris en charge dans <ScreenOverlay> et <GroundOverlay> |
<colorMode> | oui | |
<cookie> | non | <NetworkLinkControl> non pris en charge |
<coordinates> | oui | |
<Create> | non | |
<Data> | non | |
<Delete> | non | |
<description> | oui | Texte brut uniquement, le contenu HTML n'est pas pris en charge |
<displayMode> | non | |
<DisplayName> | non | |
<Document> | oui | |
<drawOrder> | oui | |
<east> | oui | |
<end> | N/A | <TimeSpan> non pris en charge |
<expires> | non | <NetworkLinkControl> non pris en charge |
<ExtendedData> | partiellement | Éléments <Data> non typés uniquement, pas d'éléments <SimpleData> ou <Schema>, et les remplacements d'entité de form$[dataName] ne sont pas pris en charge. |
<extrude> | non | |
<fill> | oui | |
<flyToView> | non | <NetworkLinkControl> non pris en charge |
<Folder> | oui | |
<gridOrigin> | N/A | <PhotoOverlay> non pris en charge |
<GroundOverlay> | oui | |
<heading> | oui | |
<hotSpot> | oui | |
<href> | oui | |
<httpQuery> | non | |
<Icon> | oui | |
<IconStyle> | oui | |
<ImagePyramid> | N/A | <PhotoOverlay> non pris en charge |
<innerBoundaryIs> | oui | implicitement selon l'ordre <LinearRing> |
<ItemIcon> | N/A | <ListStyle> non pris en charge |
<key> | oui | |
<kml> | oui | |
<LabelStyle> | non | |
<latitude> | oui | |
<LatLonAltBox> | non | |
<LatLonBox> | oui | |
<leftFov> | N/A | <PhotoOverlay> non pris en charge |
<LinearRing> | oui | |
<LineString> | oui | |
<LineStyle> | oui | |
<Link> | non | |
<linkDescription> | N/A | <NetworkLinkControl> non pris en charge |
<linkName> | N/A | <NetworkLinkControl> non pris en charge |
<linkSnippet> | N/A | <NetworkLinkControl> non pris en charge |
<listItemType> | N/A | <ListStyle> non pris en charge |
<ListStyle> | non | |
<Location> | N/A | <Model> non pris en charge |
<Lod> | oui | |
<longitude> | oui | |
<LookAt> | non | |
<maxAltitude> | non | |
<maxFadeExtent> | non | |
<maxHeight> | N/A | <PhotoOverlay> non pris en charge |
<maxLodPixels> | non | |
<maxSessionLength> | non | |
<maxWidth> | N/A | <PhotoOverlay> non pris en charge |
<message> | non | |
<minAltitude> | non | |
<minFadeExtent> | non | |
<minLodPixels>, | non | |
<minRefreshPeriod> | non | <NetworkLink> |
<Model> | non | |
<MultiGeometry> | oui | |
<name> | oui | |
<near> | N/A | <PhotoOverlay> non pris en charge |
<NetworkLink> | non | |
<NetworkLinkControl> | non | |
<north> | oui | |
<open> | oui | Stocké en tant que valeur de propriété |
<Orientation> | N/A | <Model> non pris en charge |
<outerBoundaryIs> | oui | implicitement selon l'ordre <LinearRing> |
<outline> | oui | |
<overlayXY> | non | |
<Pair> | oui | |
<phoneNumber> | partiellement | Stocké en tant que valeur de propriété |
<PhotoOverlay> | non | |
<Placemark> | oui | |
<Point> | oui | |
<Polygon> | oui | |
<PolyStyle> | oui | |
<range> | oui | |
<refreshInterval> | non | |
<refreshMode> | non | |
<refreshVisibility> | non | |
<Region> | oui | |
<ResourceMap> | N/A | <Model> non pris en charge |
<rightFov> | N/A | <PhotoOverlay> non pris en charge |
<roll> | N/A | <Camera> et <Model> non pris en charge |
<rotation> | oui | |
<rotationXY> | non | |
<Scale> | N/A | <Model> non pris en charge |
<scale> | oui | |
<Schema> | non | |
<SchemaData> | non | |
<ScreenOverlay> | non | |
<screenXY> | N/A | <ScreenOverlay> non pris en charge |
<shape> | N/A | <PhotoOverlay> non pris en charge |
<SimpleData> | N/A | <SchemaData> non pris en charge |
<SimpleField> | N/A | <Schema> non pris en charge |
<size> | oui | |
<Snippet> | non | |
<south> | oui | |
<state> | N/A | <ListStyle> non pris en charge |
<Style> | oui | |
<StyleMap> | partiellement | Style en surbrillance non fourni. Inline StyleMaps non pris en charge |
<styleUrl> | oui | |
<targetHref> | non | <Alias> non pris en charge |
<tessellate> | non | |
<text> | oui | |
<textColor> | non | |
<tileSize> | N/A | <PhotoOverlay> non pris en charge |
<tilt> | non | |
<TimeSpan> | non | |
<TimeStamp> | non | |
<topFov> | N/A | <PhotoOverlay> non pris en charge |
<Update> | N/A | <NetworkLinkControl> non pris en charge |
<value> | oui | |
<viewBoundScale> | non | |
<viewFormat> | non | |
<viewRefreshMode> | non | |
<viewRefreshTime> | non | |
<ViewVolume> | N/A | <PhotoOverlay> non pris en charge |
<visibility> | oui | |
<west> | oui | |
<when> | N/A | <TimeStamp> non pris en charge |
<width> | oui |