برای اعمال سبکهای خط و پر کردن به چندضلعیهای مرزی در لایه عارضه:
تابع کارخانه سبکی ایجاد کنید که میانای
FeatureLayer.StyleFactoryرا پیادهسازی کند. این تابع منطق سبکبندی را برای لایه عارضه تعریف میکند.FeatureLayer.setFeatureStyle()را فراخوانی کنید تا تابع کارخانه سبک را روی لایه عارضه اعمال کنید.
نقشه نمونه زیر برجسته کردن چندضلعی مرزی را برای یک منطقه در لایه عارضه «محل» نشان میدهد.
ساختن تابع کارخانه سبک
تابع کارخانه سبک به هر چندضلعی در لایه عارضه تحتتأثیر قرارگرفته در زمانی که تابع را روی لایه عارضه تنظیم میکنید اعمال میشود. این تابع باید
یک شیء FeatureStyle
برگرداند که نحوه سبکدهی به چندضلعی را مشخص میکند.
کیت توسعه نرمافزار Google Maps برای Android یک نمونه
Feature
را به تابع کارخانه سبک ارسال میکند. نمونه Feature نشاندهنده فراداده ویژگی است و به شما امکان میدهد در تابع کارخانه سبک به فراداده دسترسی داشته باشید.
تابع کارخانه سبک باید همیشه نتایج ثابتی را هنگام اعمال شدن برگرداند. برای مثال، اگر میخواهید مجموعهای از عارضهها را بهطور تصادفی رنگآمیزی کنید، بخش تصادفی نباید در تابع سبک عارضه انجام شود، زیرا این کار باعث نتایج ناخواسته میشود.
چون این تابع روی همه عارضههای یک لایه اجرا میشود، بهینهسازی مهم است. برای جلوگیری از تأثیر بر زمان پرداز زدن:
فقط لایههای عارضه موردنیازتان را فعال کنید.
وقتی لایه عارضه دیگر استفاده نمیشود،
FeatureLayer.setFeatureStyle(null)را فراخوانی کنید.
تنظیم کردن خط و پر کردن چندضلعی
هنگام سبکدهی به چندضلعی مرزی در تابع کارخانه سبک، میتوانید موارد زیر را تنظیم کنید:
رنگ و ماتی ضربقلم حاشیه چندضلعی در قالب رنگ ARGB، همانطور که توسط کلاس
Colorتعریف شده است. مقدار پیشفرض شفاف است (0x00000000).عرض خط مرز چندضلعی در پیکسلهای صفحهنمایش. مقدار پیشفرض ۲ است.
رنگ پرکننده و ماتی چندضلعی در قالب رنگ ARGB، همانطور که توسط کلاس
Colorتعریف شده است. مقدار پیشفرض شفاف است (0x00000000).
جستجوی شناسه مکانها برای هدفیابی ویژگیها
بسیاری از برنامهها سبکها را براساس مکان عارضه روی آن اعمال میکنند. برای مثال، ممکن است بخواهید سبکبندی را برای کشورها، قلمروها، یا مناطق مختلف اعمال کنید. مکان ویژگی با شناسه مکان نشان داده میشود.
«شناسه مکان» بهطور منحصربهفرد مکانی را در پایگاه داده «مکانهای Google» و در Google Maps شناسایی میکند. برای دریافت شناسه مکان:
- از Places APIs و Geocoding استفاده کنید تا مناطق را براساس نام جستجو کنید و شناسههای مکان را برای مناطق در محدوده مشخصشده دریافت کنید.
- دریافت داده از رویدادهای کلیک. این کار «ویژگی» مربوط به منطقه کلیکشده را برمیگرداند که دسترسی به شناسه مکان و دسته نوع ویژگی آن را فراهم میکند.
پوشش بسته به منطقه متفاوت است. برای جزئیات، پوشش مرزهای Google را ببینید.
نامهای جغرافیایی از منابع زیادی دردسترس هستند، مانند هیئت USGS در نامهای جغرافیایی، و فایلهای واژهنامه جغرافیایی ایالات متحده.
استفاده از PlaceFeature برای دریافت شناسه مکان
کلاس PlaceFeature زیرکلاسی از کلاس Feature است.
این نوع نشاندهنده عوارض مکان (عوارضی با شناسه مکان) است که شامل
عوارض نوع ADMINISTRATIVE_AREA_LEVEL_1، ADMINISTRATIVE_AREA_LEVEL_2،
COUNTRY، LOCALITY، POSTAL_CODE، و SCHOOL_DISTRICT میشود.
وقتی شناسه مکان دردسترس باشد،
«کیت توسعه نرمافزار Maps ویژه Android» نمونهای از PlaceFeature را به تابع کارخانه سبک
ارسال میکند تا بتوانید مکان عارضه را تعیین کنید.
نمونه کارخانه سبک
این مثال تابع کارخانه سبک را برای چندضلعی در لایه عارضه «محل» اعمال میکند. تابع کارخانه سبک، شناسه مکان عارضه را بااستفاده از نمونه 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) را فراخوانی کنید.