لتطبيق أنماط الحدود والتعبئة على مضلّعات الحدود في طبقة عناصر:
أنشِئ دالة مصنع للأنماط تنفّذ واجهة
FeatureLayer.StyleFactory. تحدّد هذه الدالة منطق الأنماط لطبقة عناصر.استدعِ
FeatureLayer.setFeatureStyle()لتطبيق دالة إنشاء الأنماط على طبقة العناصر.
توضّح الخريطة في المثال التالي كيفية تمييز المضلّع الحدودي لمنطقة واحدة في طبقة عناصر "المنطقة".
إنشاء دالة لإنشاء الأنماط
يتم تطبيق دالة إنشاء الأنماط على كل مضلّع في طبقة العناصر المتأثرة في وقت ضبط الدالة على طبقة العناصر. يجب أن تعرض هذه الدالة كائن FeatureStyle يحدّد كيفية تصميم المضلّع.
تمرّر حزمة تطوير البرامج بالاستناد إلى بيانات "خرائط Google" للتطبيقات المتوافقة مع Android مثيل Feature إلى دالة إنشاء الأنماط. يمثّل مثيل Feature البيانات الوصفية للميزة، ما يتيح لك الوصول إلى البيانات الوصفية في دالة style factory.
يجب أن تعرض دالة إنشاء الأنماط دائمًا نتائج متسقة عند تطبيقها. على سبيل المثال، إذا أردت تلوين مجموعة من المعالم بشكل عشوائي، يجب ألا يتم تنفيذ الجزء العشوائي في دالة نمط المعلم، لأنّ ذلك قد يؤدي إلى نتائج غير مقصودة.
بما أنّ هذه الدالة تعمل على كل عنصر في طبقة، من المهم تحسينها. لتجنُّب التأثير في الوقت المستغرَق للعرض:
فعِّل طبقات العناصر التي تحتاج إليها فقط.
يمكنك استدعاء
FeatureLayer.setFeatureStyle(null)عندما لا تكون طبقة العناصر قيد الاستخدام.
ضبط حدود المضلّع وتعبئته
عند تصميم مضلّع حدودي في دالة مصنع الأنماط، يمكنك ضبط ما يلي:
لون الخط ودرجة تعتيمه لحدود المضلّع بتنسيق ARGB، كما هو محدّد في الفئة
Color. القيمة التلقائية هي شفاف (0x00000000).عرض الحرف لحدود المضلّع بوحدات بكسل الشاشة القيمة التلقائية هي 2.
لون التعبئة ودرجة التعتيم للمضلّع بتنسيق ألوان ARGB، كما هو محدّد في الفئة
Color. القيمة التلقائية هي شفاف (0x00000000).
البحث عن أرقام تعريف الأماكن لاستهداف الميزات
تطبّق العديد من التطبيقات أنماطًا على عنصر معيّن استنادًا إلى موقعه الجغرافي. على سبيل المثال، قد ترغب في تطبيق التصميم على بلدان أو أقاليم أو مناطق مختلفة. يتم تمثيل موقع الميزة من خلال رقم تعريف المكان.
تحدِّد أرقام تعريف الأماكن مكانًا بشكلٍ فريد في قاعدة بيانات "أماكن Google" وعلى "خرائط Google". للحصول على رقم تعريف المكان:
- استخدِم Places API والترميز الجغرافي للبحث عن المناطق حسب الاسم، والحصول على أرقام تعريف الأماكن للمناطق ضمن حدود معيّنة.
- الحصول على بيانات من الأحداث الناتجة عن النقر يؤدي ذلك إلى عرض العنصر المقابل للمنطقة التي تم النقر عليها، ما يتيح الوصول إلى رقم تعريف المكان وفئة نوع العنصر.
تختلف التغطية حسب المنطقة. لمزيد من التفاصيل، يُرجى الاطّلاع على تغطية الحدود في Google.
تتوفّر الأسماء الجغرافية من مصادر متعدّدة، مثل مجلس الأسماء الجغرافية التابع لهيئة المسح الجيولوجي الأمريكية وملفات الدليل الجغرافي في الولايات المتحدة.
استخدام PlaceFeature للحصول على رقم تعريف المكان
الفئة PlaceFeature هي فئة فرعية من الفئة Feature.
وتمثّل ميزة مكان (ميزة تتضمّن رقم تعريف مكان) تشمل ميزات من النوع ADMINISTRATIVE_AREA_LEVEL_1 وADMINISTRATIVE_AREA_LEVEL_2 وCOUNTRY وLOCALITY وPOSTAL_CODE وSCHOOL_DISTRICT.
عندما يتوفّر رقم تعريف المكان، تمرِّر حزمة تطوير البرامج بالاستناد إلى بيانات خرائط Google للتطبيقات المتوافقة مع Android مثيلاً من PlaceFeature إلى دالة مصنع الأنماط لكي تتمكّن من تحديد الموقع الجغرافي للعنصر.
مثال على مصنع الأنماط
يطبّق هذا المثال دالة نمط على مضلّع في طبقة عناصر "المنطقة". تحدّد دالة Style Factory رقم تعريف المكان الخاص بالعنصر باستخدام مثيل PlaceFeature. إذا كان رقم تعريف المكان يشير إلى هانا في هاواي،
تطبّق الدالة نمط تعبئة وحدود مخصّص على المضلّع:
إذا لم يسبق لك إجراء ذلك، اتّبِع الخطوات الواردة في مقالة البدء لإنشاء معرّف خريطة ونمط خريطة جديدَين. تأكَّد من تفعيل طبقة عناصر المنطقة.
احصل على مرجع لطبقة عناصر "المنطقة" عند بدء الخريطة.
جافا
private FeatureLayer localityLayer;
@Override public void onMapReady(GoogleMap map) { // Get the LOCALITY feature layer. localityLayer = map.getFeatureLayer(new FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build());
// Apply style factory function to LOCALITY layer. styleLocalityLayer(); }Kotlin
private var localityLayer: FeatureLayer? = null
override fun onMapReady(googleMap: GoogleMap) { // Get the LOCALITY feature layer. localityLayer = googleMap.getFeatureLayer(FeatureLayerOptions.Builder() .featureType(FeatureType.LOCALITY) .build())
// Apply style factory function to LOCALITY layer. styleLocalityLayer() }أنشئ دالة لإنشاء الأنماط وطبِّقها على طبقة عناصر "المنطقة".
لا يطبّق المثال التالي الدالة إلا إذا كان رقم تعريف المكان الخاص بالميزة هو "هانا" في هاواي ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). إذا لم يكن رقم تعريف المكان المحدّد يشير إلى هانا في هاواي، لن يتم تطبيق النمط.
جافا
private void styleLocalityLayer() {
// Create the style factory function. FeatureLayer.StyleFactory styleFactory = (Feature feature) -> {
// Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature instanceof PlaceFeature) { PlaceFeature placeFeature = (PlaceFeature) feature;
// Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
// Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return new FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and solid purple border. .fillColor(0x80810FCB) .strokeColor(0xFF810FCB) .build(); } } return null; };
// Apply the style factory function to the feature layer. localityLayer.setFeatureStyle(styleFactory); }Kotlin
private fun styleLocalityLayer() {
// Create the style factory function. val styleFactory = FeatureLayer.StyleFactory { feature: Feature ->
// Check if the feature is an instance of PlaceFeature, // which contains a place ID. if (feature is PlaceFeature) { val placeFeature: PlaceFeature = feature as PlaceFeature
// Determine if the place ID is for Hana, HI. if (placeFeature.getPlaceId().equals("ChIJ0zQtYiWsVHkRk8lRoB1RNPo")) {
// Use FeatureStyle.Builder to configure the FeatureStyle object // returned by the style factory function. return@StyleFactory FeatureStyle.Builder() // Define a style with purple fill at 50% opacity and // solid purple border. .fillColor(0x80810FCB.toInt()) .strokeColor(0xFF810FCB.toInt()) .build() } } return@StyleFactory null }
// Apply the style factory function to the feature layer. localityLayer?.setFeatureStyle(styleFactory) }
إزالة الأنماط من طبقة
لإزالة النمط من طبقة، استخدِم الدالة FeatureLayer.setFeatureStyle(null).