Google Haritalar KML İçe Aktarma Yardımcı Programı

Platform seçin: Android iOS JavaScript
  1. Giriş
  2. KML katmanı ekleme
  3. KML katmanını temizleme
  4. KML kapsayıcılarına erişme
  5. KML yer işaretlerine ve KML yer bindirmelerine erişme
  6. KML özelliklerine erişim
  7. KML tarafından desteklenen özellikler

Giriş

KML, XML veri biçiminin bir uzantısıdır ve harita üzerinde coğrafi verileri temsil eder. Bu yardımcı programı kullanarak KML nesnelerini coğrafi şekillere dönüştürebilir ve bunları haritanın üzerinde bir katman olarak oluşturabilirsiniz. KML verilerinizi haritaya eklemek ve haritadan kaldırmak için sırasıyla addLayerToMap() ve removeLayerFromMap() numaralı telefonu arayın. Bir KML nesnesindeki özelliklere erişmek için herhangi bir Yer İşareti, Ground oluşturacak, Belge veya Klasör'de getProperties() komutunu çağırın.

Haritaya KML katmanı eklensin

Haritaya veri katmanı eklemek için önce KmlLayer sınıfının bir örneğini oluşturun. KmlLayer örneğini iki şekilde gösterebilirsiniz.

Yerel bir kaynaktan KML veri kümesini içe aktarmak ve oluşturmak için aşağıdakilere ihtiyacınız vardır:

  • Katmanın oluşturulacağı bir GoogleMap nesnesi.
  • KML verilerini içeren yerel bir kaynak dosyası.
  • Yerel kaynak dosyasını açmak için gerekli olan Context nesnesi.

Kotlin



val layer = KmlLayer(map, R.raw.geojson_file, context)

      

Java


KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

Bir KML veri kümesini yerel bir akıştan içe aktarmak ve oluşturmak için aşağıdakilere ihtiyacınız vardır:

  • Katmanın oluşturulacağı bir GoogleMap nesnesi.
  • KML verilerini içeren bir InputStream.
  • Yerel kaynakları açmak için gerekli olan Context nesnesi.

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);

      

Bir KmlLayer oluşturduktan sonra, içe aktarılan verileri haritaya eklemek için addLayerToMap()() işlevini çağırın.

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

KML katmanını temizleme

KmlLayer adlı dosyayı sizin oluşturduğunuzu varsayalım:

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);

      

Katmanı haritadan kaldırmak için removeLayerFromMap() çağrısı yapın:

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

KML kapsayıcılarına erişme

Katmanınıza eklenen kapsayıcılara erişmek için oluşturduğunuz katmanda getContainers() çağırabilirsiniz. Herhangi bir kapsayıcının iç içe yerleştirilmiş kapsayıcıları olup olmadığını kontrol etmek için hasContainers() yöntemini çağırabilirsiniz. Bu iç içe yerleştirilmiş kapsayıcılara erişmek için katmanınızda yapabileceğiniz gibi getContainers() çağrısı yapabilirsiniz

KmlLayer veya KmlContainer: içine yerleştirilmemiş kapsayıcılara erişmek için

Kotlin



for (containers in layer.containers) {
    // Do something to container
}

      

Java


for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

KmlLayer veya KmlContainer içine yerleştirilmiş kapsayıcılara erişmek için:

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());
        }
    }
}

      

KML yer işaretlerine ve KML yer bindirmelerine erişim

Katmana eklenen herhangi bir yer işaretine veya yer bindirmesine erişmek için bir katman ya da kapsayıcıda getPlacemarks() ya da getGroundOverlays() çağırabilirsiniz. İkisinden birinin çağrılması durumunda, sırasıyla KmlPlacemarks veya KmlGroundOverlays iterasyonlu sonuç döndürülür.

Örneğin, bir katmandan KmlPlacemark nesnesine erişmek için:

Kotlin



for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

Java


for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

KML özelliklerine erişim

Bir kapsayıcıdaki veya yer işaretindeki herhangi bir mülke erişmek için getProperty() yöntemini çağırın ve mülke mülk anahtarı verin. Mevcut olup olmadığını kontrol etmek için hasProperty() numaralı telefonu da arayabilirsiniz. Bu örnekte, "name" özellik değerinin bir kapsayıcıdan (varsa) nasıl alınacağı gösterilmektedir.

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"));
    }
}

      

KML Geometri Tıklama Etkinlikleri

Haritadaki geometri özelliklerinde tıklama etkinliklerini dinlemek için KmlLayer.OnFeatureClickListener() kullanabilirsiniz. Aşağıdaki örnekte, kullanıcı bir özelliği tıkladığında özelliğin kimliği günlüğe kaydedilir:

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());
    }
});

      

Demo uygulamaya göz atın

Bir KML dosyasını içe aktarma ve bununla bir katman oluşturma örneği için demo uygulamasında yardımcı program kitaplığıyla birlikte gönderilen KmlDemoActivity öğesine göz atın. Kurulum kılavuzu, demo uygulamasının nasıl çalıştırılacağını gösterir.

KML tarafından desteklenen özellikler

KML Öğesi Destekleniyor mu? Yorum
<address> kısmen Mülk değeri olarak depolanır
<AddressDetails> no
<Alias> no
<altitude> no
<altitudeMode> no
<atom:author> no
<atom:link> no
<atom:name> no
<BalloonStyle> kısmen yalnızca <text> desteklenir
<begin> Yok <TimeSpan> desteklenmiyor
<bgColor> no
<bottomFov> Yok <Fotoğraf Bindirme> desteklenmiyor
<Camera> no
<Değiştir> kısmen yalnızca stil değişiklikleri desteklenir
<color> kısmen #AABBGGRR ve #BBGGRR'yi içerir; <Screen oluşturacak> ve <GroundKatmanlar>'da desteklenmez
<colorMode> evet
<cookie> no <NetworkLinkControl> desteklenmiyor
<coordinates> evet
<Oluştur> no
<Data> no
<Sil> no
<description> evet Yalnızca düz metin; HTML içeriği desteklenmez
<displayMode> no
<displayName> no
<Document> evet
<drawOrder> evet
<east> evet
<end> Yok <TimeSpan> desteklenmiyor
<expires> no <NetworkLinkControl> desteklenmiyor
<ExtendedData> kısmen Yalnızca yazılmamış <Data> için geçerlidir; < SimpleData> veya <Schema> öğeleri ve$[dataName] formunun varlık değişimleri desteklenmez.
<extrude> no
<fill> evet
<flyToView> no <NetworkLinkControl> desteklenmiyor
<Klasör> evet
<gridOrigin> Yok <Fotoğraf Bindirme> desteklenmiyor
<GroundOverlay> evet
<heading> evet
<hotSpot> evet
<href> evet
<httpQuery> no
<Icon> evet
<IconStyle> evet
<ImagePyramid> Yok <Fotoğraf Bindirme> desteklenmiyor
<innerBoundaryIs> evet dolaylı olarak <LinearRing> sıralamasından
<ItemIcon> Yok <ListStyle> desteklenmiyor
<key> evet
<kml> evet
<LabelStyle> no
<latitude> evet
<LatLonAltBox> no
<LatLonBox> evet
<leftFov> Yok <Fotoğraf Bindirme> desteklenmiyor
<LinearRing> evet
<LineString> evet
<LineStyle> evet
<Link> no
<linkDescription> Yok <NetworkLinkControl> desteklenmiyor
<linkName> Yok <NetworkLinkControl> desteklenmiyor
<linkSnippet> Yok <NetworkLinkControl> desteklenmiyor
<listItemType> Yok <ListStyle> desteklenmiyor
<ListStyle> no
<Konum> Yok <Model> desteklenmiyor
<Lod> evet
<longitude> evet
<LookAt> no
<maxAltitude> no
<maxFadeExtent> no
<maxHeight> Yok <Fotoğraf Bindirme> desteklenmiyor
<maxLodPixels> no
<maxSessionLength> no
<maxWidth> Yok <Fotoğraf Bindirme> desteklenmiyor
<message> no
<minAltitude> no
<minFadeExtent> no
<minLodPixels> no
<minRefreshPeriod> no <NetworkLink>
<Model> no
<MultiGeometry> evet
<name> evet
<yakın> Yok <Fotoğraf Bindirme> desteklenmiyor
<NetworkLink> no
<NetworkLinkControl> no
<north> evet
<open> evet Mülk değeri olarak depolanır
<Orientation> Yok <Model> desteklenmiyor
<outerBoundaryIs> evet dolaylı olarak <LinearRing> sıralamasından
<outline> evet
<overlayXY> no
<Pair> evet
<phoneNumber> kısmen Mülk değeri olarak depolanır
<PhotoOverlay> no
<Placemark> evet
<Point> evet
<Polygon> evet
<PolyStyle> evet
<range> evet
<refreshInterval> no
<refreshMode> no
<refreshVisibility> no
<Region> evet
<ResourceMap> Yok <Model> desteklenmiyor
<rightFov> Yok <Fotoğraf Bindirme> desteklenmiyor
<roll> Yok <Kamera> ve <Model> desteklenmiyor
<rotation> evet
<rotationXY> no
<Ölçek> Yok <Model> desteklenmiyor
<scale> evet
<Schema> no
<SchemaData> no
<ScreenOverlay> no
<screenXY> Yok <ScreenYer paylaşımı> desteklenmiyor
<shape> Yok <Fotoğraf Bindirme> desteklenmiyor
<SimpleData> Yok <SchemaData> desteklenmiyor
<SimpleField> Yok <Schema> desteklenmiyor
<size> evet
<Snippet> no
<south> evet
<state> Yok <ListStyle> desteklenmiyor
<Style> evet
<StyleMap> kısmen Vurgulanan stil sağlanmadı. Satır İçi Stil Haritaları desteklenmez
<styleUrl> evet
<targetHref> no <Alias> desteklenmiyor
<tessellate> no
<text> evet
<textColor> no
<tileSize> Yok <Fotoğraf Bindirme> desteklenmiyor
<tilt> no
<TimeSpan> no
<TimeStamp> no
<topFov> Yok <Fotoğraf Bindirme> desteklenmiyor
<Güncelle> Yok <NetworkLinkControl< desteklenmiyor
<value> evet
<viewBoundScale> no
<viewFormat> no
<viewRefreshMode> no
<viewRefreshTime> no
<ViewVolume> Yok <Fotoğraf Bindirme> desteklenmiyor
<visibility> evet
<west> evet
<when> Yok <Zaman Damgası> desteklenmiyor
<width> evet