Стиль Openlayers не работает на определенном слое Geoserver WFS (в форме блока) - PullRequest
0 голосов
/ 29 апреля 2020

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

Используя этот код

style: new ol.style.Style({
                image: new ol.style.Circle({
                    stroke: new ol.style.Stroke({
                        color: 'rgba(255, 0, 0, 1.0)',
                        width: 5
                    }),
                    radius: 5
                })
            })

Я могу изменить этот слой (SRID: 4326), чтобы это понравилось

enter image description here

Но стиль не может быть применен к другому слою с SRID: 32663. Независимо от того, что стиль, который я пробую (обводка, заливка, цвет, изображение), он всегда будет отображаться так (форма блока)

enter image description here

Я импортировал эти слои из PostgreSQL базы данных. Если смотреть на геометрическую проекцию, то успешно измененный слой имеет точечную форму, подобную этой

SELECT ST_AsEWKT(geometry) FROM "table1" LIMIT 1;
result : SRID=4326;POINT(126.8865913 37.2598192)

geom sample : "0101000020E6100000C39A6FE9BDB85F40BB6F6BC141A14240"

enter image description here

Между тем неудачно измененный слой имеет блочную форму это

SELECT ST_AsEWKT(geometry) FROM "table2" LIMIT 1;
result : SRID=32663;MULTIPOLYGON(((14240035.8111278 4485667.02788355,14239940.2255882 4485585.20329766,.........

geom sample : "0106000020977F00000100000001030000000100000005000000CDA1878968066B41EE70C72749445141284876F45D066B418F4696B13144514100B1FC4552066B41989893F24644514160E00CDB5C066B415B95DD685E445141CDA1878968066B41EE70C72749445141"

enter image description here

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

Если вы хотите стилизовать маленькие полигоны / мультиполигоны как изображения, вы можете использовать геометрическую функцию в стиле, чтобы вернуть их внутренние точки

style: new ol.style.Style({
                geometry: function(feature) {
                  var geom = feature.getGeometry();
                  if (geom.getType() = 'Polygon') {
                    return geom.getInteriorPoint();
                  }
                  if (geom.getType() = 'MultiPolygon') {
                    return geom.getInteriorPoints();
                  }
                  return geom;
                },
                image: new ol.style.Circle({
                    stroke: new ol.style.Stroke({
                        color: 'rgba(255, 0, 0, 1.0)',
                        width: 5
                    }),
                    radius: 5
                })
            })
0 голосов
/ 29 апреля 2020

Проблема заключается в том, что тип геометрии первого слоя - это Point, поэтому приведенный выше код стиля будет работать.

Однако другой тип geom слоя - многоугольник / многоугольник, поэтому в соответствии с https://embed.plnkr.co/plunk/GvdVNE, для другого типа потребуется другой код. Приведенный ниже код работает для стилизации полигонов.

var polyStyle = new ol.style.Style({
    stroke: new ol.style.Stroke({
        color: 'rgb(0,255,255)',
        width: 3
    }),
    fill: new ol.style.Fill({
        color: 'rgba(0, 255, 255, 0.5)'
    })
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...