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şim
  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 bir harita üzerinde coğrafi verileri temsil eder. Bu yardımcı programı kullanarak, KML nesnelerini coğrafi şekillere dönüştürebilir ve haritanın üzerinde 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, GroundOverlay, Doküman veya Klasör'de getProperties() çağrısı yapın.

Haritaya KML katmanı eklemek

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.

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

  • Katmanın oluşturulacağı GoogleMap nesnesi.
  • KML verilerini içeren yerel bir kaynak dosyası.
  • Yerel kaynak dosyasını açmak için gerekli olan bir 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 akıştan içe aktarmak ve oluşturmak için aşağıdakilere ihtiyacınız vardır:

  • Katmanın oluşturulacağı GoogleMap nesnesi.
  • KML verilerini içeren bir InputStream.
  • Yerel kaynakları açmak için gerekli olan bir 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);

      

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

Kotlin



layer.addLayerToMap()

      

Java


layer.addLayerToMap();

      

KML katmanını temizleme

Bu KmlLayer öğesini 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() numaralı telefonu arayın:

Kotlin



layer.removeLayerFromMap()

      

Java


layer.removeLayerFromMap();

      

KML kapsayıcılarına erişim

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 yapabildiğiniz gibi getContainers() komutunu çağırabilirsiniz.

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 zemin bindirmelerine erişme

Katmana eklenmiş herhangi bir yer işaretine veya yer bindirmesine erişmek için bir katman ya da kapsayıcıda getPlacemarks() ya da getGroundOverlays() çağrısı yapabilirsiniz. İkisinden birinin çağrılması, sırasıyla KmlPlacemarks veya KmlGroundOverlays yinelemesini döndürü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 bir 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 (mevcutsa) 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 Geometrisi 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 bu dosyayla katman oluşturma örneği için, demo uygulamasında yardımcı program kitaplığıyla birlikte gelen KmlDemoActivity öğesine göz atın. Kurulum kılavuzu, demo uygulamanın nasıl çalıştırılacağını gösterir.

KML destekli ö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 <PhotoOverlay> desteklenmiyor
<Camera> no
<Değiştir> kısmen yalnızca stil değişiklikleri desteklenir
<color> kısmen #AABBGGRR ve #BBGGRR içerir; <ScreenOverlay> ve <GroundOverlay>'de 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> yoktur ve form$[dataName] formunun varlık değişiklikleri desteklenmez.
<extrude> no
<fill> evet
<flyToView> no <NetworkLinkControl> desteklenmiyor
<Klasör> evet
<gridOrigin> Yok <PhotoOverlay> desteklenmiyor
<GroundOverlay> evet
<heading> evet
<hotSpot> evet
<href> evet
<httpQuery> no
<Icon> evet
<IconStyle> evet
<ImagePyramid> Yok <PhotoOverlay> desteklenmiyor
<innerBoundaryIs> evet dolaylı olarak <DoğrusalRing> sıralamasından
<ItemIcon> Yok <ListStyle> desteklenmiyor
<key> evet
<kml> evet
<LabelStyle> no
<latitude> evet
<LatLonAltBox> no
<LatLonBox> evet
<leftFov> Yok <PhotoOverlay> 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 <PhotoOverlay> desteklenmiyor
<maxLodPixels> no
<maxSessionLength> no
<maxWidth> Yok <PhotoOverlay> desteklenmiyor
<message> no
<minAltitude> no
<minFadeExtent> no
<minLodPixels> no
<minRefreshPeriod> no <NetworkLink>
<Model> no
<MultiGeometry> evet
<name> evet
<near> Yok <PhotoOverlay> desteklenmiyor
<NetworkLink> no
<NetworkLinkControl> no
<north> evet
<open> evet Mülk değeri olarak depolanır
<Orientation> Yok <Model> desteklenmiyor
<outerBoundaryIs> evet dolaylı olarak <DoğrusalRing> 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 <PhotoOverlay> 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 <ScreenOverlay> desteklenmiyor
<shape> Yok <PhotoOverlay> 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 StyleMap'ler desteklenmiyor
<styleUrl> evet
<targetHref> no <Alias> desteklenmiyor
<tessellate> no
<text> evet
<textColor> no
<tileSize> Yok <PhotoOverlay> desteklenmiyor
<tilt> no
<TimeSpan> no
<TimeStamp> no
<topFov> Yok <PhotoOverlay> desteklenmiyor
<Güncelle> Yok <NetworkLinkControl< desteklenmiyor
<value> evet
<viewBoundScale> no
<viewFormat> no
<viewRefreshMode> no
<viewRefreshTime> no
<ViewVolume> Yok <PhotoOverlay> desteklenmiyor
<visibility> evet
<west> evet
<when> Yok <TimeStamp> desteklenmiyor
<width> evet