MapServer를 사용하여 완전히 투명한 채우기로 다각형을 색칠하는 방법은 무엇입니까?


11

MapServer에서 완전히 투명하도록 다각형을 채울 수 있습니까? 나는 약간 불투명 한 검정색 배경을 원하고 다각형이있는 곳이라면 채우기없이 완전히 깨끗하게하고 싶습니다. 나는 다음과 같은 방식으로 배경을 설정했다.

   IMAGECOLOR     0 0 0
   TRANSPARENT OFF

다각형을 채우기 위해 흰색 인 클래스를 만들려고했지만 TRANSPARENCY0-100의 값을 사용하여 불투명도를 실험 했지만 명확한 다각형이되지는 않습니다.

CLASS
      NAME "light"  
      EXPRESSION ([max_cost] == 2000)     
      STYLE       
        OUTLINECOLOR 255 255 255
        COLOR 255 255 255
        SIZE       1
        WIDTH      2.0        
      END
END 

다음과 같은 유형의 이미지가 생성됩니다.

여기에 이미지 설명을 입력하십시오

흰색으로 채워진 다각형 대신; 색상이없는 채우기를 원합니다. 다음과 같이 색상을 정의하기 위해 온라인에서 한 가지 제안을 찾았습니다.

COLOR -1 -1 -1

그러나 그것은 또한 작동하지 않았습니다. 이 문서 부분 에서는 다음에 대해 설명합니다.

“PALETTE = / path / to / palette.txt”는 팔레트 색상을 찾을 수있는 절대 경로를 정의하는 데 사용됩니다. 이 파일에는 RGB 이미지 모드의 경우 256 개 항목의 r, g, b 삼중 항 또는 RGBA 이미지 모드의 경우 4 배의 r, g, b가 포함되어야합니다. 예상되는 형식은 라인 당 하나의 삼중 항 (또는 사중)이며, 각 값은 쉼표로 구분되며 각 삼중 항 / 사중은 단일 행에 있습니다. 팔레트에서 투명도를 사용하려면 팔레트 파일에 0,0,0,0 및 255,255,255,255의 두 가지 색상을 사용해야합니다.

이것을 읽은 후에도 사용하려고 시도 COLOR 0 0 0 0했지만 오류가 발생합니다.

알 수없는 식별자 (0) 근처의 구문 분석 오류 :( 행 71)

정의 색상을 참조하는 방법을 이해하지 PALETTE=/path/to/palette.txt못하지만 이것을 달성하는 한 가지 가능한 방법처럼 보입니다.


두통을 피하는 한 가지 방법은 다각형을 선으로 변환하는 것입니다.
— nadya

그런 식으로 다각형을 채우지 않으려면 어떻게해야합니까?
— djq

2
즉, GIS 소프트웨어를 사용하여 다각형 외곽선을 나타내는 선 모양 파일을 만들고 다각형 대신 Mapserver에이 선을 추가합니다. 줄을 전혀 채울 수 없습니다.
— nadya

선이 나타나는지 신경 쓰지 않습니다. 나는 명확한 다각형 채우기를 원합니다.
— djq

1
라인에 다각형을 변환 할 필요가 없습니다 - 당신은 또한 다각형 형상에 대한 MAP 파일에 레이어 'TYPE 라인'을 정의 할 수 있습니다
— user1702401

답변:


4

Mapserver는 최근 마스크 레이어 개념을 도입했습니다 (마스크는 적용되는 레이어와 혼합하여 Photoshop에서 마스크와 매우 유사하게 동작 함).

RFC는 그들이 그들이 어떻게 이용 될 수 있는지에 대해 설명합니다. 답을 읽으면 마스크 레이어를 사용하여 찾고있는 '키홀'효과를 얻을 수있는 것처럼 보입니다.

이 기능이 몇 주 전에 릴리스 된 6.2에 적용되었는지 확실하지 않습니다.


4

따라서 투명한 다각형으로 검은 색 배경을 "투과"하여 아래쪽 배경을 보려고합니다. MapServer에서 가능한지 확실하지 않지만 다른 트릭을 제안 할 수 있습니다.

모든 GIS 소프트웨어를 사용하여 모든 영역을 덮고 더 확장 된 매우 큰 다각형을 만들 수 있습니다. 그런 다음이 영역 다각형에서 다각형을 지운 다음이 구멍이있는 다각형을 검은 색 대신 검은 색으로 만들 수 있습니다. 다각형에 해당하는 구멍은 "투명"합니다.


1

내 .map 파일 에이 줄이 있었고 100보다 낮은 투명도 가 작동했습니다.

  LAYER 
    NAME         core_areas
    DATA         core_areas.shp
    STATUS       ON
    TYPE         POLYGON
    TRANSPARENCY 100
    SIZEUNITS pixels
    PROJECTION
       "init=epsg:32629"
    END # projection
    CLASS
      STYLE
        COLOR        20 150 90
        OUTLINECOLOR 7 56 41
        WIDTH        1
      END # STYLE
    NAME "Core areas"
    END # CLASS
  END # Layer

도움이 되길 바랍니다.


이로 인해 완전히 투명한 다각형이 만들어 졌습니까? TRANSPARENCY0에서 100 사이의 값으로 실험을 시도했지만 불투명도를 조정하는 것처럼 보였습니다. 나는 이것이 처음에 내 질문에서 명확하지 않다는 것을 알고 있습니다.
— djq

다각형의 외곽선과 모든 것을 투명하게 만들고 싶습니까? 나는 아마 오해하고 일반적인 투명성을 제안했다.
— nadya

이중 혼란에 대해 죄송합니다. 그냥 다각형 채우기를 지우십시오. 라인은 중요하지 않습니다.
— djq

1
@djq TRANSPARENCY는 버전 5.0에서 사용되지 않습니다. Layer OPACITY는 올바른 속성입니다.
— DavidF

1

아래는 투명 마스크 레이어를 보여주는 샘플 이미지입니다. 마스크를 훨씬 더 크게 만들면 사용자는 바깥 쪽 가장자리를 알 수 없습니다. @nadya가 제안한 것과 유사하게 다음을 수행 할 수 있습니다.

  1. 큰 직사각형 다각형 만들기
  2. 각 "컷 아웃"에 대한 다각형을 만듭니다.
  3. 더 큰 다각형에서 작은 다각형을 빼십시오 (QGIS의 차이 도구가이를 위해 잘 작동합니다)

투명 마스크

이 시점에서 마스크가 완성됩니다. 그러나 컷 아웃 공간에 레이블을 추가하려면 더 작은 다각형을 마스크에 다시 추가해야합니다 (연합 도구 사용). 그런 다음 Mapserver의 SLD 파일을 사용하여 마스크를 투명 회색으로 스타일링하고 컷 아웃을 완전히 투명하게 스타일링하고 레이블을 적용 할 수 있습니다. 다음은 샘플 SLD 파일입니다 (이 파일은 Geoserver 용으로 제작되었습니다).

<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor xmlns="http://www.opengis.net/sld" xmlns:sld="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml" version="1.0.0">
  <NamedLayer>
    <Name>yards</Name>
    <UserStyle>
      <Name>yards</Name>
      <Title>Polygon Style</Title>
      <FeatureTypeStyle>
        <Name>name</Name>
        
        <Rule>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>TYPE</ogc:PropertyName>
              <ogc:Literal>outer</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
          <PolygonSymbolizer>
            <Fill>
              <CssParameter name="fill">#555555</CssParameter>
              <CssParameter name="fill-opacity">0.5</CssParameter>
            </Fill>
            <Stroke>
              <CssParameter name="stroke-width">0</CssParameter>
            </Stroke>
          </PolygonSymbolizer>  
        </Rule>
        
        <Rule>
          <ogc:Filter>
            <ogc:PropertyIsEqualTo>
              <ogc:PropertyName>TYPE</ogc:PropertyName>
              <ogc:Literal>inner</ogc:Literal>
            </ogc:PropertyIsEqualTo>
          </ogc:Filter>
          <PolygonSymbolizer>
            <Fill>
              <CssParameter name="fill">#555555</CssParameter>
              <CssParameter name="fill-opacity">0</CssParameter>
            </Fill>
            <Stroke>
              <CssParameter name="stroke">#000000</CssParameter>
              <CssParameter name="stroke-opacity">0</CssParameter>
              <CssParameter name="stroke-width">0</CssParameter>
            </Stroke>
          </PolygonSymbolizer>  
        </Rule>
        
        <Rule>
          <MinScaleDenominator>10000</MinScaleDenominator>
          <TextSymbolizer>
            <Geometry>
              <ogc:Function name="centroid">
                <ogc:PropertyName>the_geom</ogc:PropertyName>
              </ogc:Function>
            </Geometry>
            <Label>
              <ogc:PropertyName>SITE</ogc:PropertyName>
            </Label>
            <Font>
              <CssParameter name="font-family">Arial</CssParameter>
              <CssParameter name="font-size">11</CssParameter>
              <CssParameter name="font-style">normal</CssParameter>
              <CssParameter name="font-weight">bold</CssParameter>
            </Font>
            <LabelPlacement>
              <PointPlacement>
                <AnchorPoint>
                  <AnchorPointX>
                    <ogc:Literal>0.0</ogc:Literal>
                  </AnchorPointX>
                  <AnchorPointY>
                    <ogc:Literal>0.5</ogc:Literal>
                  </AnchorPointY>
                </AnchorPoint>
                <Rotation>
                  <ogc:Literal>0</ogc:Literal>
                </Rotation>
              </PointPlacement>
            </LabelPlacement>
            <Halo>
              <Radius>
                <ogc:Literal>1</ogc:Literal>
              </Radius>
              <Fill>
                <CssParameter name="fill">#FFFFFF</CssParameter>
              </Fill>
            </Halo>
            <VendorOption name="conflictResolution">true</VendorOption>
            <VendorOption name="goodnessOfFit">0</VendorOption>
          </TextSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

다각형이 제대로 작동하려면 "inner"또는 "outer"값을 가진 "TYPE"속성이 있어야합니다.


귀하의 답변에 감사드립니다-지오 서버의 SLD는 전혀 관련이 있습니까? 나는 그것과 MapServer 사이의 유사성을 보지 못한다.
— djq

맵 서버도 SLD를 사용할 수 있습니다. 다음 은 예 입니다. Mapserver에 대한 SLD의 문서는 다음 과 같습니다 . SLD는 OGC 표준이지만 아쉽게도 Geoserver와 Mapserver에서 정확히 동일한 방식으로 구현되지는 않습니다. 그러나 위의 예는 필터 조차 작동 할 것으로 예상 됩니다.
— katahdin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.