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.