Làm cách nào để gắn nhãn đa giác GeoJSON?


9

Tôi đang sử dụng Tờ rơi kết hợp với các tính năng của GeoJSON. Có cách nào để gắn nhãn các tính năng GeoJSON (trong trường hợp này - đa giác) không? Nó sẽ nhận được nhãn từ

feature.properties.name 

Đây là mã của tôi, nơi tôi nghĩ rằng tôi có thể chèn nhãn:

function style(feature) {
            return {
                weight: 2,
                opacity: 1,
                color: 'white',
                dashArray: '3',
                fillOpacity: 0.7,
                fillColor: getColor(feature.properties.coloring)
            };
        }

1
Bạn có phiền khi đăng giải pháp bạn đã sử dụng để dán nhãn cho đa giác, nếu vẫn còn trong tay?
a1an

Câu trả lời:


5

Bạn cần biết tờ rơi định dạng dự kiến ​​sẽ sử dụng. RFM. Ví dụ: OpenLayers hy vọng định dạng GeoJSON này sẽ tạo một điểm và đưa ra một số thuộc tính tùy chỉnh:

{"type":"FeatureCollection",
    "features":[
        {"type":"Feature",
            "properties":{
                "name":"TRON-02",
                "serial":"TRON002",
                "bearing":0,
                "color":"green",
                "size":15,
                "image":"img/unit_map3.png",
            },
            "geometry":{
                "type":"Point",
                "coordinates":[-50.06542968749966,-23.749149728383717]
            }
        }
    ]
}

Như bạn có thể thấy, tôi đã tạo Hình học (Điểm) và nối các thuộc tính của mình với nó. Khi tôi gửi cái này đến OpenLayers, kết quả sẽ phù hợp với ví dụ của @ Aragon, sử dụng "màu" và "tên" (dưới dạng nhãn) để tùy chỉnh điểm trong bản đồ.

Vui lòng sao chép và dán ví dụ GeoJSON này trong http://json.parser.online.fr/ hoặc sử dụng trang web để thử và xác thực chính bạn.


Không phải là câu hỏi về đa giác? Làm thế nào một câu trả lời về hình học điểm đã giải quyết câu hỏi?
a1an

Và đa giác là gì? Bạn sẽ đặt tên giống nhau. Điều duy nhất sẽ thay đổi là phần "hình học". Không chỉ giải quyết câu hỏi mà nhận được 5 up cho đến bây giờ.
Magno C

Sau đó, hãy để tôi đặt lại cụm từ: Tôi có cùng một câu hỏi và việc đặt nhãn trên đa giác khá khác so với đặt nó tại một điểm, vì vậy đa giác có nghĩa với tôi một đối tượng đóng hai chiều với nhiều cạnh, trong ngữ cảnh này. Đó là lý do tại sao tôi quan tâm đến việc nhận được một số chi tiết, từ đó nhận xét đầu tiên của tôi. Câu trả lời "nó đã giải quyết được" không hữu ích lắm nhưng dù sao cũng cảm ơn :-)
a1an

1
Chỉ cần thêm các công cụ "tài sản" và tất cả sẽ ổn. Xem câu trả lời @Aragon return feature.properties.color;Như bạn có thể thấy, propertieslà một featurethuộc tính và có colormột trong các thuộc tính của nó. Bạn có thể đặt bất cứ thứ gì bạn muốn vào đối tượng này theo cách này.
Magno C

2
RFMlà hoàn toàn chưa được khám phá Và sự khác biệt giữa một điểm và đa giác là rất đáng kể, vì biết sử dụng hình học nào chính xác là vấn đề ở đây
Stephen Lead

5

Đây là cách tôi giải quyết nó với Đa giác và Nhãn Lá, để bạn có được một nhãn nổi trên đa giác với thuộc tính tên của nó.

Giả sử:

  • bạn nhận được phản hồi json được phân tích cú pháp vào biến json
  • chỉ có các đa giác đơn giản không có lỗ trong json
  • polygon_style giữ các tùy chọn kiểu được trả về bởi hàm kiểu của bạn
  • nhãn_layer là một Layergroup tờ rơi (hoặc trực tiếp bản đồ của bạn)

Sau đó:

for ( var i=0; i < json.features.length; i++ ) {
    feat = json.features[i];
    coords = [];
    for ( var j = 0 ; j < feat.geometry.coordinates[0].length - 1; j++ ) {
        coord = feat.geometry.coordinates[0][j];
        point = [];
        point.push( coord[1], coord[0]);
        coords.push( point );
    }
    labels_layer.addLayer(L.polygon( coords, polygon_style ).bindLabel(feat.properties.name))  ;
}

Đáng chú ý là đủ kỳ lạ, GeoJson (thực tế là EPSG: 4326) và tọa độ Tờ rơi được hoán đổi theo thứ tự.


1
Đối với những người sử dụng Leaflet 1.0+, L.Label đã được chuyển vào lõi Leaflet dưới dạng L.Tooltip và plugin không được dùng nữa. Bạn sẽ sử dụng bindTooltip () thay vì bindLabel (). github.com/Leaflet/Leaflet.label
aethergy

1

Tôi nghĩ rằng câu hỏi này là về openlayers.if vì vậy, bạn có thể sử dụng để ghi nhãn;

var style = new OpenLayers.Style({
    weight: 2,
    opacity: 1,
    color: 'white',
    dashArray: '3',
    fillOpacity: 0.7,
    fillColor: "${getColor}",  
    label: "${getLabel}"
  } , {
    context: {
      getColor: function(feature) {
        return feature.properties.color;
      },
      getLabel: function(feature) {
        return feature.properties.name;
      }
    }
  );

Tôi hy vọng nó sẽ giúp bạn...


1
Nó không phải là OpenLayers. Tôi đang sử dụng Tờ rơi kết hợp với các tính năng của GeoJSON. Vì vậy, điều này không làm việc. Nhưng cảm ơn bạn đã cố gắng.
ngược dòng

Tại sao bạn không fillColor: "${color}"thay vì tạo một chức năng?
Magno C

1
@Magno C không có sự khác biệt giữa point.both của chúng giống nhau. Tôi đã viết điều này nếu bạn muốn thêm chức năng phức tạp hơn như màu ngẫu nhiên hoặc bất cứ điều gì khác. vẫn cảm ơn bạn cho quan điểm của bạn.
Aragon

Hiểu Aragon. Cảm ơn phương pháp mới. Có thể hữu ích trong tương lai. Thumbs UP!
Magno C

Tôi nghĩ rằng không có cách nào @againstflow chạy ra khỏi định dạng mà tôi đã hiển thị, vì có một đặc tả thống trị GeoJSON ở đây: link
Magno C
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.