Tôi thấy rất nhiều câu hỏi đi từ Polygons
đến MultiPolygon
, nhưng có một số cách dễ dàng để đi theo cách khác? Nó cũng sẽ hữu ích để bảo tồn các thuộc tính từ MultiPolygon
để áp dụng cho cái mới Polygons
.
Tôi thấy rất nhiều câu hỏi đi từ Polygons
đến MultiPolygon
, nhưng có một số cách dễ dàng để đi theo cách khác? Nó cũng sẽ hữu ích để bảo tồn các thuộc tính từ MultiPolygon
để áp dụng cho cái mới Polygons
.
Câu trả lời:
Nếu bạn có một Đa giác đơn giản như hình dưới đây,
mp=
{
"type": "MultiPolygon",
"coordinates": [
[
[
[-99.028, 46.985], [-99.028, 50.979],
[-82.062, 50.979], [-82.062, 47.002],
[-99.028, 46.985]
]
],
[
[
[-109.028, 36.985], [-109.028, 40.979],
[-102.062, 40.979], [-102.062, 37.002],
[-109.028, 36.985]
]
]
]
}
sau đó bằng cách sử dụng Javascript / Nodejs, bạn có thể truy cập từng Đa giác cấu thành bằng cách sử dụng forEach và viết ra một Đa giác mới bằng JSON.opesify
mp.coordinates.forEach(function(coords){
var feat={'type':'Polygon','coordinates':coords};
console.log(JSON.stringify(feat));
}
);
Bạn cũng có thể truy cập chúng trực tiếp trong một vòng lặp, nếu bạn thích một cách ít chức năng hơn, được lập chỉ mục trên mp.coordins.length, vd
for (var i=0;i<mp.coordinates.length;i++){
var feat={'type':'Polygon','coordinates':mp.coordinates[i]};
console.log(JSON.stringify(feat));
}
Nếu bạn đang làm việc với FeatureCollection, nơi bạn có thể có một mảng tính năng, mỗi mảng chứa MultiPolygon, ví dụ:
mp = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon",
"coordinates": [
[[
[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0],
[100.0, 0.0]
]],
[[
[0.0, 0.0], [1.0, 0.0], [1.0, 1.0], [0.0, 1.0],
[0.0, 0.0]
]]
]
},
"properties": {
"prop1": {
"this": "that"
},
"prop0": "value0"
}
}
]
}
Sau đó, bạn có thể sử dụng forEach để truy cập từng tính năng và sau đó truy cập từng Đa giác trong mỗi Đa giác chỉ bằng cách lặp qua mảng, như thứ nguyên đầu tiên của mảng tọa độ, là chỉ mục vào mỗi Đa giác. Lưu ý, bạn cũng có thể lưu các thuộc tính và gán chúng cho từng tính năng Đa giác mới.
mp.features.forEach(function(feat){
var geom=feat.geometry;
var props=feat.properties;
if (geom.type === 'MultiPolygon'){
for (var i=0; i < geom.coordinates.length; i++){
var polygon = {
'type':'Polygon',
'coordinates':geom.coordinates[i],
'properties': props};
console.log(JSON.stringify(polygon));
}
}
});
Nếu bạn muốn một cái gì đó tinh vi hơn, bạn có thể xem xét sửa đổi lớp OpenLayers.Format.GeoJSON .