2016-03-07 5 views
1

У меня есть GeoJSON, полный LineStrings (контуры высоты), который я хотел бы построить на карте MapBox/LeafLet.Могу ли я изменить fillColor GeoJSON LineString с помощью LeafLet

При построении графика все строки LineStrings, как представляется, образуют многоугольники (т. Е. Первая и последняя координаты в массиве эквивалентны).

Возможно ли изменить fillColor LineStrings, если они выглядят как многоугольники?

EDIT

Ниже приведен код, который я в настоящее время:

var elevation950Style = { 
color : "yellow", 
fillColor : "yellow", 
opacity : 0.4, 
weight : 2, 
}; 

$.getJSON('950.geo.json', function(file) { 
    L.geoJson(file , { style: elevation950Style }).addTo(map); 
}); 
+0

Я считаю, вы можете его изменить. Вы читали документы? – 7urkm3n

ответ

0

Это, конечно, возможно.

Хороший подход, вероятно, будет первым, чтобы убедиться, что ваша строка строк действительно представляет собой цикл (как вы говорите, если первая и последняя координаты равны). Затем просто преобразуйте его в многоугольник (создайте новый многоугольник на основе тех же координат, удалите строку строки), и он будет заполнен листом в соответствии с вашим параметром fillColor.


EDIT:

Вы можете обнаружить строки петельных строк после того, как они созданы L.geoJson() завода, создать эквивалентную функцию GeoJSON с polygon geometry и замените строку программы цикла строки по вновь созданному полигону в вашем GeoJSON группа слоев:

var myGeoJsonGroup = L.geoJson(myGeoJsonData), // build your GeoJSON layer group. 
    geo, coords, first, last; 

myGeoJsonGroup.eachLayer(function (layer) { 
    geo = layer.feature.geometry; 
    coords = geo.coordinates; 
    first = coords[0]; 
    last = coords[coords.length - 1]; 

    if (geo.type === "LineString" && first[0] === last[0] && first[1] === last[1]) { 
    myGeoJsonGroup.removeLayer(layer); 
    myGeoJsonGroup.addData({ 
     type: "Feature", 
     properties: layer.feature.properties, 
     geometry: { 
     type: "Polygon", 
     coordinates: [ 
      coords // exterior linear ring 
     ] 
     } 
    }); 
    } 
}); 

myGeoJsonGroup.addTo(map); 

Отказ от ответственности: написан как-есть, не проверен.

Примечание: в вашем случае вы обязательно будете иметь контуры высоты один в другом. Возможно, вы захотите построить многоугольники с отверстиями для встроенных контуров. В противном случае наполнители будут складываться, и вы можете не получить желаемый результат, если они прозрачны.

+0

спасибо. Я проведу каждую строку LineString для проверки. в то же время, можете ли вы подробно остановиться на «просто преобразовать его в многоугольник (создать новый многоугольник на основе тех же координат, удалить строку строки)»? Вы имеете в виду изменение способа загрузки GeoJSON на карту? Или изменить фактический GeoJSON? – Rodrigo

+0

Я отредактирую вышеупомянутый ответ, чтобы быть более конкретным при преобразовании. – ghybs

+0

ghybs. извините за нобе, но я думаю, что приведенный выше код ничего не добавляет к моей переменной «map», верно? также, для чего используются «новыеполигоны»? – Rodrigo

0

Если линия печати является единственным критерием в качестве SVG, пожалуйста, проверьте geojson2svg. Вы можете просто использовать класс CSS в элементе пути SVG или базовом стиле SVG. Для ознакомления с этим небольшим модулем проверьте подробное описание examples here.

Отказ от ответственности: Я автор geojson2svg

+0

Gagan, geojson2svg выглядит очень хорошо! Я ценю усилия, которые вы там вложили. Поскольку я почти закончил проект, я постараюсь закончить его с LeafLet, но сохраните geojson2svg в глубине души на будущее. – Rodrigo

+0

Это правильный выбор. – Gagan

Смежные вопросы