Cách áp dụng kiểu cho đường viền và màu nền cho các đa giác ranh giới trong một lớp đối tượng:
Tạo một hàm nhà máy kiểu triển khai giao diện
FeatureLayer.StyleFactory. Hàm này xác định logic tạo kiểu cho một lớp đối tượng.Gọi
FeatureLayer.setFeatureStyle()để áp dụng hàm nhà máy kiểu cho lớp đối tượng.
Bản đồ ví dụ sau đây minh hoạ cách làm nổi bật đa giác ranh giới cho một khu vực trong lớp đối tượng Địa phương.
Tạo một hàm nhà máy kiểu
Hàm nhà máy kiểu được áp dụng cho mọi đa giác trong lớp đối tượng bị ảnh hưởng tại thời điểm bạn đặt hàm trên lớp đối tượng. Hàm này phải
trả về một FeatureStyle
đối tượng chỉ định cách tạo kiểu cho đa giác.
Maps SDK cho Android sẽ truyền một
Feature
thực thể đến hàm nhà máy kiểu. Thực thể Feature đại diện cho siêu dữ liệu của đối tượng, cho phép bạn truy cập vào siêu dữ liệu trong hàm nhà máy kiểu.
Hàm nhà máy kiểu phải luôn trả về kết quả nhất quán khi được áp dụng. Ví dụ: nếu bạn muốn tô màu ngẫu nhiên một nhóm đối tượng, thì phần ngẫu nhiên không được diễn ra trong hàm kiểu đối tượng, vì điều đó sẽ gây ra kết quả không mong muốn.
Vì hàm này chạy trên mọi đối tượng trong một lớp, nên việc tối ưu hoá là rất quan trọng. Cách tránh ảnh hưởng đến thời gian kết xuất:
Chỉ bật các lớp đối tượng bạn cần.
Gọi
FeatureLayer.setFeatureStyle(null)khi một lớp đối tượng không còn được sử dụng nữa.
Đặt đường viền và màu nền cho đa giác
Khi tạo kiểu cho một đa giác ranh giới trong hàm nhà máy kiểu, bạn có thể đặt:
Màu đường viền và độ mờ của đường viền đa giác ở định dạng màu ARGB, như được xác định bởi lớp
Color. Giá trị mặc định là trong suốt (0x00000000).Chiều rộng đường viền của đường viền đa giác tính bằng pixel trên màn hình. Giá trị mặc định là 2.
Màu nền và độ mờ của đa giác ở định dạng màu ARGB, như được xác định bởi
Colorlớp. Giá trị mặc định là trong suốt (0x00000000).
Tra cứu mã địa điểm để nhắm mục tiêu đối tượng
Nhiều ứng dụng áp dụng kiểu cho một đối tượng dựa trên vị trí của đối tượng đó. Ví dụ: bạn có thể muốn áp dụng kiểu cho nhiều quốc gia, lãnh thổ hoặc khu vực. Vị trí của đối tượng được biểu thị bằng a mã địa điểm.
Mã địa điểm giúp xác định riêng một địa điểm trong cơ sở dữ liệu của Google Địa điểm và trên Google Maps. Cách lấy mã địa điểm:
- Sử dụng Places API và Dịch mã địa lý để tìm kiếm khu vực theo tên và lấy mã địa điểm cho các khu vực trong phạm vi đã chỉ định.
- Lấy dữ liệu từ các sự kiện nhấp. Thao tác này sẽ trả về Đối tượng tương ứng với một khu vực được nhấp, cung cấp quyền truy cập vào mã địa điểm và danh mục loại đối tượng của khu vực đó.
Phạm vi cung cấp sẽ khác nhau tuỳ theo khu vực. Xem bài viết Phạm vi cung cấp ranh giới của Google để biết thông tin chi tiết.
Tên địa lý có trong nhiều nguồn, chẳng hạn như Uỷ ban tên địa lý của Cục Khảo sát Địa chất Hoa Kỳ (USGS), và Tệp danh bạ địa lý của Hoa Kỳ.
Sử dụng PlaceFeature để lấy mã địa điểm
Lớp PlaceFeature
là một lớp con của lớp Feature.
Lớp này đại diện cho một đối tượng địa điểm (đối tượng có mã địa điểm), bao gồm các đối tượng thuộc loại ADMINISTRATIVE_AREA_LEVEL_1, ADMINISTRATIVE_AREA_LEVEL_2, COUNTRY, LOCALITY, POSTAL_CODE và SCHOOL_DISTRICT.
Khi có mã địa điểm, Maps SDK cho Android sẽ truyền một thực thể của PlaceFeature đến hàm nhà máy kiểu để bạn có thể xác định vị trí của đối tượng.
Ví dụ về nhà máy kiểu
Ví dụ này áp dụng một hàm nhà máy kiểu cho một đa giác trong lớp đối tượng Địa phương. Hàm nhà máy kiểu xác định mã địa điểm của đối tượng bằng cách sử dụng thực thể PlaceFeature. Nếu mã địa điểm là của Hana, Hawaii thì hàm sẽ áp dụng kiểu đường viền và màu nền tuỳ chỉnh cho đa giác:
Nếu bạn chưa làm như vậy, hãy làm theo các bước trong bài viết Bắt đầu để tạo mã bản đồ và kiểu bản đồ mới. Hãy nhớ bật lớp đối tượng Địa phương.
Lấy tham chiếu đến lớp đối tượng Địa phương khi bản đồ khởi chạy.
Java
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() }Tạo một hàm nhà máy kiểu và áp dụng hàm đó cho lớp đối tượng Địa phương.
Ví dụ sau đây chỉ áp dụng hàm nếu mã địa điểm của đối tượng là của Hana, Hawaii ("ChIJ0zQtYiWsVHkRk8lRoB1RNPo"). Nếu mã địa điểm đã chỉ định không phải là của Hana, Hawaii thì kiểu sẽ không được áp dụng.
Java
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) }
Xoá kiểu khỏi một lớp
Để xoá kiểu khỏi một lớp, hãy gọi FeatureLayer.setFeatureStyle(null).