Přidání vrstvy symbolů do sady SDK pro iOS (Preview)

V tomto článku se dozvíte, jak vykreslit data bodu ze zdroje dat jako vrstvu symbolů na mapě pomocí sady Azure Mapy iOS SDK. Vrstvy symbolů vykreslují body jako obrázek a text na mapě.

Poznámka:

Vyřazení sady Azure Mapy iOS SDK

Sada Azure Mapy Native SDK pro iOS je teď zastaralá a bude vyřazena 31. 31. 25. Pokud se chcete vyhnout přerušení služeb, proveďte migraci do sady Azure Mapy Web SDK do 31. 31. 25. Další informace najdete v průvodci migrací sady Azure Mapy iOS SDK.

Tip

Vrstvy symbolů ve výchozím nastavení vykreslují souřadnice všech geometrií ve zdroji dat. Chcete-li omezit vrstvu tak, aby vykreslovat pouze funkce geometrie bodu, nastavte filter možnost vrstvy na NSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable). Pokud chcete zahrnout i funkce MultiPointu, použijte NSCompoundPredicate.

Požadavky

Nezapomeňte dokončit kroky v rychlém startu : Vytvoření dokumentu aplikace pro iOS. Bloky kódu v tomto článku lze vložit do viewDidLoad funkce ViewController.

Přidání vrstvy symbolů

Než do mapy přidáte vrstvu symbolů, musíte provést několik kroků. Nejprve vytvořte zdroj dat a přidejte ho do mapy. Vytvořte vrstvu symbolů. Potom předejte zdroj dat do vrstvy symbolů a načtěte data ze zdroje dat. Nakonec přidejte data do zdroje dat, aby se něco vykreslilo.

Následující kód ukazuje, co by se mělo přidat do mapy po načtení. Tato ukázka vykreslí jeden bod na mapě pomocí vrstvy symbolů.

//Create a data source and add it to the map.
let source = DataSource()
map.sources.add(source)

//Create a point and add it to the data source.
source.add(geometry: Point(CLLocationCoordinate2D(latitude: 0, longitude: 0)))

//Create a symbol layer to render icons and/or text at points on the map.
let layer = SymbolLayer(source: source)

//Add the layer to the map.
map.layers.addLayer(layer)

Do mapy se dají přidat tři různé typy dat bodů:

  • Geometrie GeoJSON Point – tento objekt obsahuje pouze souřadnici bodu a nic jiného. Inicializační Point metoda lze použít k snadnému vytvoření těchto objektů.
  • GeoJSON MultiPoint geometry - Tento objekt obsahuje souřadnice více bodů a nic jiného. Předejte pole souřadnic do PointCollection třídy pro vytvoření těchto objektů.
  • Funkce GeoJSON – Tento objekt se skládá z jakékoli geometrie GeoJSON a sady vlastností, které obsahují metadata přidružená k geometrii.

Další informace najdete v dokumentu Vytvoření zdroje dat při vytváření a přidávání dat do mapy.

Následující ukázka kódu vytvoří geometrii GeoJSON Point a předá ji do funkce GeoJSON a má přidanou title hodnotu k jeho vlastnostem. Vlastnost title se zobrazí jako text pod ikonou symbolu na mapě.

// Create a data source and add it to the map.
let source = DataSource()
map.sources.add(source)

// Create a point feature.
let feature = Feature(Point(CLLocationCoordinate2D(latitude: 0, longitude: 0)))

// Add a property to the feature.
feature.addProperty("title", value: "Hello World!")

// Add the feature to the data source.
source.add(feature: feature)

// Create a symbol layer to render icons and/or text at points on the map.
let layer = SymbolLayer(
    source: source,
    options: [
        // Get the title property of the feature and display it on the map.
        .textField(from: NSExpression(forKeyPath: "title")),

        // Place the text below so it doesn't overlap the icon.
        .textAnchor(.top)
    ]
)

// Add the layer to the map.
map.layers.addLayer(layer)

Následující snímek obrazovky ukazuje výše uvedený kód vykreslovací funkci bodu pomocí ikony a textového popisku s vrstvou symbolů.

Snímek obrazovky znázorňující ovládací prvek lupy, který byl přidán do mapy

Tip

Ve výchozím nastavení vrstvy symbolů optimalizují vykreslování symbolů skrytím symbolů, které se překrývají. Při přiblížení se skryté symboly stanou viditelnými. Chcete-li tuto funkci zakázat a vykreslit všechny symboly za všech okolností, nastavte možnost a textAllowOverlap nastavte iconAllowOverlap možnost true.

Přidání vlastní ikony do vrstvy symbolů

Vrstvy symbolů se vykreslují pomocí OpenGL. Jako takové musí být všechny prostředky, jako jsou obrázky ikon, načteny do kontextu OpenGL. Tato ukázka ukazuje, jak do prostředků mapy přidat vlastní ikonu. Tato ikona se pak použije k vykreslení dat bodu pomocí vlastního symbolu na mapě. Vlastnost textField vrstvy symbolů vyžaduje zadání výrazu. V tomto případě chceme vykreslit vlastnost teploty. Kromě toho k němu chceme připojit "°F" . Výraz lze použít k tomuto zřetězení:

NSExpression(
    forAZMFunctionJoin: [
        NSExpression(forKeyPath: "temperature"),
        NSExpression(forConstantValue: "°F")
    ]
)
// Load a custom icon image into the image sprite of the map.
map.images.add(UIImage(named: "showers")!, withID: "my-custom-icon")

// Create a data source and add it to the map.
let source = DataSource()
map.sources.add(source)

// Create a point feature.
let feature = Feature(Point(CLLocationCoordinate2D(latitude: 40.75773, longitude: -73.985708)))

// Add a property to the feature.
feature.addProperty("temperature", value: 64)

// Add the feature to the data source.
source.add(feature: feature)

// Create a symbol layer to render icons and/or text at points on the map.
let layer = SymbolLayer(
    source: source,
    options: [
        .iconImage("my-custom-icon"),
        .iconSize(0.5),
        // Get the title property of the feature and display it on the map.
        .textField(
            from: NSExpression(
                forAZMFunctionJoin: [
                    NSExpression(forKeyPath: "temperature"),
                    NSExpression(forConstantValue: "°F")
                ]
            )
        ),
        .textOffset(CGVector(dx: 0, dy: -1.5))
    ]
)

// Add the layer to the map.
map.layers.addLayer(layer)

Pro tuto ukázku se následující obrázek načte do složky prostředků aplikace.

Snímek obrazovky s ikonou Počasí, která zobrazuje dešťové sprchy
showers.png

Následující snímek obrazovky znázorňuje výše uvedenou funkci vykreslování kódu pomocí vlastní ikony a formátovaného textového popisku s vrstvou symbolů.

Snímek obrazovky znázorňující mapu s body vykreslenými pomocí vrstvy symbolů zobrazující vlastní ikonu a formátovaný textový popisek pro funkci bodu

Tip

Pokud chcete vykreslit pouze text s vrstvou symbolů, můžete ikonu skrýt nastavením iconImage vlastnosti možností ikony na nil.

Předdefinované ikony značek symbolů

Na začátku má mapa integrovanou výchozí ikonu značky, která je již načtena do obrazového spritu mapy. Ve výchozím nastavení se používá, pokud není na tuto možnost nastavená žádná iconImage možnost. V případě, že to potřebujete udělat ručně, nastavte "marker-default" na možnost iconImage .

let layer = SymbolLayer(source: source, options: [.iconImage("marker-default")])

Sada Azure Mapy iOS SDK má také sadu předdefinovaných barevných variant výchozí ikony značky (tmavě modré). Pro přístup k těmto ikonám značek použijte statické proměnné ve UIImage třídě, například: UIImage.azm_markerRed.

Pokud chcete použít jiný než výchozí předdefinovaný obrázek značky, měli byste ho přidat do obrazového spritu mapy.

// Load a non-default predefined icon into the image sprite of the map.
map.images.add(.azm_markerRed, withID: "marker-red")

// Create a symbol layer to render icons and/or text at points on the map.
let layer = SymbolLayer(source: source, options: [.iconImage("marker-red")])

Následující kód uvádí předdefinované obrázky ikon, které jsou k dispozici jako statické proměnné UIImage třídy.

UIImage.azm_markerDefault // Dark blue
UIImage.azm_markerBlack
UIImage.azm_markerBlue
UIImage.azm_markerRed
UIImage.azm_markerYellow

Další informace

Další ukázky kódu pro přidání do map najdete v následujících článcích: