إضافة طبقة رمز في iOS SDK (إصدار أولي)

تقدم لك هذه المقالة كيفية عرض بيانات النقطة من مصدر بيانات كطبقة رمز على خريطة باستخدام خرائط Azure iOS SDK. تعرض الطبقات الخاصة بالرموز النقاط كصورة ونص على الخريطة.

إشعار

خرائط Azure إيقاف iOS SDK

تم الآن إهمال خرائط Azure Native SDK لنظام التشغيل iOS وسيتم إيقافه في 3/31/25. لتجنب انقطاع الخدمة، قم بالترحيل إلى خرائط Azure Web SDK بحلول 3/31/25. لمزيد من المعلومات، راجع دليل ترحيل خرائط Azure iOS SDK.

تلميح

ستعرض طبقات الرموز بشكل افتراضي إحداثيات جميع الأشكال الهندسية في مصدر بيانات. لتقييد الطبقة بحيث تعرض فقط معالم هندسة النقاط، اضبط خيار filterللطبقة علىNSPredicate(format: "%@ == \"Point\"", NSExpression.geometryTypeAZMVariable). في حالة كنت تريد تضمين ميزات MultiPoint أيضًا، فاستخدم NSCompoundPredicate.

المتطلبات الأساسية

تأكد من إكمال الخطوات الواردة في تشغيل سريع: أنشئ تطبيق مستند iOS. يمكن إدراج كتل التعليمة البرمجية في هذه المقالة في وظيفة viewDidLoad الخاصة بـ ViewController.

إضافة طبقة رمز

قبل أن تتمكن من إضافة طبقة رمز إلى الخريطة، تحتاج إلى اتخاذ بعض الخطوات. أولًا، أنشئ مصدر خاص بالبيانات وأضفه إلى الخريطة. أنشئ طبقة رمز. بعد ذلك، مرّر مصدر البيانات إلى طبقة الرمز، لاسترداد البيانات من مصدر البيانات. أخيرًا، أضف البيانات إلى مصدر البيانات، حتى يكون هناك شيء يعرض.

توضح التعليمات البرمجية التالية ما يجب إضافته إلى الخريطة بعد تحميلها. تعرض هذه العينة نقطة واحدة على الخريطة باستخدام طبقة رمز.

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

يوجد ثلاثة أنواع مختلفة من بيانات النقاط التي يمكن إضافتها إلى الخريطة:

  • هندسة نقطة GeoJSON - يحتوي هذا الكائن فقط على إحداثيات نقطة ولا يحتوي على أي شيء آخر. يمكن Point استخدام طريقة init لإنشاء هذه العناصر بسهولة.
  • هندسة GeoJSON MultiPoint - يحتوي هذا العنصر على إحداثيات نقاط متعددة ولا شيء آخر. مرر صفيفًا من الإحداثيات إلى PointCollection الفئة لإنشاء هذه العناصر.
  • ميزة GeoJSON - يتكون هذا الكائن من أي هندسة GeoJSON ومجموعة من الخصائص التي تحتوي على بيانات تعريف مرتبطة بالهندسة.

للمزيد من المعلومات، راجع مستند إنشاء مصدر بيانات بشأن إنشاء البيانات وإضافتها إلى الخريطة.

ينشئ نموذج التعليمات البرمجية التالي هندسة GeoJSON Point ويمررها إلى GeoJSON Feature ولها قيمة title مضافة إلى خصائصها. تُعرض الخاصية title كنص أسفل أيقونة الرمز على الخريطة.

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

تُظهر لقطة الشاشة الموضحة أدناه التعليمة البرمجية السابقة التي تعرض ميزة النقطة باستخدام رمز وتسمية نصية مع طبقة رمز.

لقطة شاشة تعرض عنصر التحكم في التكبير/التصغير الذي أُضيف إلى الخريطة.

تلميح

بشكل افتراضي، تعمل طبقات الرموز على تحسين عرض الرموز عن طريق إخفاء الرموز التي تتداخل. أثناء التكبير، تصبح الرموز المخفية مرئية. لتعطيل هذه الميزة وعرض جميع الرموز في جميع الأوقات، عيّن خيارات iconAllowOverlap وtextAllowOverlap إلى true.

أضف رمزًا مخصصًا إلى طبقة الرموز

تُعرض طبقات الرموز باستخدام OpenGL. على هذا النحو، يلزم تحميل جميع الموارد، مثل صور الرموز، في سياق OpenGL. يبين هذا النموذج كيفية إضافة رمز مخصص إلى موارد الخريطة. ثم يتم استخدام هذه الأيقونة لعرض بيانات النقطة مع رمز مخصص على الخريطة. تتطلب خاصية textField لطبقة الرمز تحديد تعبير. في هذه الحالة، نريد عرض خاصية درجة الحرارة. بالإضافة إلى ذلك نريد إلحاق "°F" إليها. يمكن استخدام تعبير للقيام بهذا التسلسل:

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)

بالنسبة لهذه العينة، تُحمل الصورة الموضحة أدناه في مجلد الأصول للتطبيق.

لقطة شاشة تظهر أيقونة الطقس التي تظهر زخات المطر.
showers.png

تظهر لقطة الشاشة التالية التعليمات البرمجية أعلاه التي تعرض ميزة نقطة باستخدام أيقونة مخصصة وتسمية نصية منسقة مع طبقة رمز.

لقطة شاشة تعرض خريطة مع عرض نقاط، باستخدام طبقة رمز تعرض رمزًا مخصصًا وتسمية نصية منسقة لميزة النقطة.

تلميح

عندما تريد عرض نص مع طبقة رمز فقط، يمكنك إخفاء الأيقونة عن طريق تعيين الخاصية iconImage لخيارات الأيقونة إلى nil.

رموز علامة محددة مسبقًا

في البداية، تحتوي الخريطة على أيقونة علامة افتراضية مرفقة محملة بالفعل في عنصر الصورة على الخريطة. يتم استخدامه بشكل افتراضي إذا لم يتم تعيين أي شيء إلى iconImage الخيار. في حالة كنت بحاجة إلى القيام بذلك يدويًا، عيّن "marker-default" إلى الخيار iconImage.

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

تأتي حزمة خرائط Azure iOS SDK أيضًا، مع مجموعة من اختلافات الألوان المحددة مسبقًا لرمز العلامة الافتراضي (الأزرق الداكن). للوصول إلى رموز العلامة هذه، استخدم المتغيرات الثابتة على UIImageالفئة، على سبيل المثال: UIImage.azm_markerRed.

لاستخدام صورة علامة غير افتراضية معرفة مسبقًا، ينبغي إضافتها إلى قالب الصورة للخريطة.

// 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")])

تسرد التعليمات البرمجية أدناه صور الأيقونة المضمنة المتوفرة كمتغيرات ثابتة للفئة UIImage .

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

معلومات إضافية

راجع المقالات التالية للحصول على المزيد من نماذج التعليمات البرمجية لإضافتها إلى الخرائط الخاصة بك: