ป้ายรูปหลายเหลี่ยมซ้ำกันสำหรับแต่ละกระเบื้อง


10

ฉันใช้ GeoWebCache แบบสแตนด์อโลนเพื่อให้บริการกระเบื้องจาก GeoServer ระยะไกล ปัญหาของฉันคือฉลากรูปหลายเหลี่ยมถูกเพิ่มลงในแผ่นกระเบื้องแต่ละแผ่นที่ให้บริการแทนที่จะแสดงเพียงครั้งเดียวในรูปหลายเหลี่ยม centroid

ฉันพบโพสต์ที่กล่าวถึงปัญหา:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeated-for-each-tile-td4995203.html

คำตอบแรกที่กล่าวถึงวิธีแก้ปัญหาที่เป็นไปได้:

"โดยรวมแล้วฉันแนะนำให้ใช้เครื่องมือการแสดงผลแบบเรียงต่อกัน (GeoWebCache, MapProxy, TileCache) ต่อไปแทนที่จะขอภาพขนาดเล็กจาก GeoServer และให้เอ็นจิ้นการแสดงผลแบบเรียงต่อกันมีการแบ่งกระเบื้องน้อยลงหลังจากนั้นคุณจะส่งคำขอน้อยลง 1 ภาพใหญ่แทนที่จะเป็นภาพเล็กหลายภาพ) ดังนั้นความเร็วในการสร้างไทล์แคชโดยรวมจะเพิ่มขึ้น "

ปัญหาคือฉันไม่สามารถหาวิธีทำได้โดยอ้างถึงเอกสาร GeoWebCache และการโพสต์ดังกล่าวไม่ได้อธิบายวิธีการใช้งาน

ฉันยังพบโพสต์พร้อมคำตอบที่เชื่อมโยงไปยังเอกสาร "GeoWebCache" Tiled "ของ GeoWebCacheแต่โค้ดของฉันใช้คุณสมบัติที่จำเป็นทั้งหมดแล้วและป้ายกำกับยังปรากฏขึ้นหลายครั้ง:

var Layer_1874 = new OpenLayers.Layer.WMS(
    'Grundkort',
    '/wms10.ashx'
    , {
        format: 'image/png',
        srs: 'EPSG:25832',
        layers: 'ballerupkommune_grundkort_bk',
        tiled: true,
        tilesOrigin: '698804,6173460'
    }
    , {
        displayInLayerSwitcher: true,
        isBaseLayer: true,
        transitionEffect: 'resize',
        displayOutsideMaxExtent: true,
        visibility: false
    }
);

ใครมีความคิด?


คุณช่วยแสดงไฟล์ SLD ที่คุณใช้ให้เราได้ไหม ที่ควบคุมวิธีการแสดงป้ายกำกับบนเลเยอร์ WMS
katahdin

คำตอบ:


16

ด้านล่างเป็นตัวอย่างของกฎ SLD ที่วางเลเบลที่กึ่งกลางของรูปทรงเรขาคณิตของสถานที่ ใช้ ogc: ฟังก์ชั่นที่เรียกว่า "centroid" เพื่อวางฉลาก คุณสามารถอ่านเพิ่มเติมเกี่ยวกับฟังก์ชั่นใน SLD GeoServer เอกสารและตัวอย่างบางส่วนจะได้รับที่นี่

<sld:Rule>
      <MaxScaleDenominator>5000</MaxScaleDenominator>
      <sld:TextSymbolizer>
        <sld:Geometry>
          <ogc:Function name="centroid">
            <ogc:PropertyName>the_geom</ogc:PropertyName>
          </ogc:Function>
        </sld:Geometry>
        <sld:Label>
          <ogc:PropertyName>LOT_NAME</ogc:PropertyName>
        </sld:Label>
        <sld:Font>
          <sld:CssParameter name="font-family">Arial</sld:CssParameter>
          <sld:CssParameter name="font-size">11</sld:CssParameter>
          <sld:CssParameter name="font-style">normal</sld:CssParameter>
          <sld:CssParameter name="font-weight">bold</sld:CssParameter>
        </sld:Font>
        <sld:LabelPlacement>
          <sld:PointPlacement>
            <sld:AnchorPoint>
              <sld:AnchorPointX>
                <ogc:Literal>0.0</ogc:Literal>
              </sld:AnchorPointX>
              <sld:AnchorPointY>
                <ogc:Literal>0.5</ogc:Literal>
              </sld:AnchorPointY>
            </sld:AnchorPoint>
            <sld:Rotation>
              <ogc:Literal>0</ogc:Literal>
            </sld:Rotation>
          </sld:PointPlacement>
        </sld:LabelPlacement>
        <sld:Halo>
          <sld:Radius>
            <ogc:Literal>1.0</ogc:Literal>
          </sld:Radius>
          <sld:Fill>
            <sld:CssParameter name="fill">#FFFFFF</sld:CssParameter>
          </sld:Fill>
        </sld:Halo>
        <sld:VendorOption name="conflictResolution">true</sld:VendorOption>
        <sld:VendorOption name="goodnessOfFit">0</sld:VendorOption>
        <sld:VendorOption name="autoWrap">60</sld:VendorOption>
      </sld:TextSymbolizer>
    </sld:Rule>

นอกจากนี้ตำรา SLDเป็นข้อมูลอ้างอิงที่ดี สิ่งหนึ่งที่ทำให้คุณเดินทางได้คือการสั่งซื้อแท็กใน SLD สำหรับกฎ TextSymbolizer ด้านบนคุณสามารถดูลำดับที่ต้องการได้โดยดูจากคำจำกัดความของสคีมา ไม่ต้องกังวลมันไม่น่ากลัวเกินไป! เพียงค้นหา "ตำราymbolizer" ในไฟล์. xsd คุณควรหาแท็ก "sequence" คุณจะพบว่าการอ้างอิงองค์ประกอบตรงกับคำสั่งซื้อในตัวอย่างของฉัน (หมายเหตุ: ฉันไม่ได้ใช้คุณลักษณะ "เติม" ของเครื่องทำสัญลักษณ์ข้อความสัญลักษณ์การเติมของฉันใช้กับรัศมีเท่านั้น)


1

การคำนวณป้ายผนึกที่มีการชนกันของข้อมูล (การย้ายป้ายกำกับออกนอกเส้นทางหรือลบลำดับความสำคัญที่ต่ำกว่าดังนั้นจึงไม่ทับซ้อนกัน) จำเป็นต้องรู้เกี่ยวกับป้ายกำกับทุกรายการที่อาจชนกับป้ายกำกับที่คุณกำลังวาด . ดังนั้นโดยทั่วไปคุณต้องคำนวณฉลากทั้งหมดในครั้งเดียวโดยดูจากทุกคุณลักษณะหรือแบ่งแผนที่เป็นบล็อกที่มีป้ายกำกับคำนวณภายในแต่ละบล็อก

โดยค่าเริ่มต้น GeoWebCache จะใช้แผ่น 4x4 ที่เรียกว่า "metitive" เมื่อคุณร้องขอไทล์ที่ไม่ได้อยู่ในแคช GWC จะร้องขอทั้งตัวกรองเป็นภาพขนาดใหญ่หนึ่งภาพจากแบ็กเอนด์จากนั้นก็แบ่งส่วนที่เปราะบางออกเป็นไทล์ที่แคช คุณสามารถปรับปัจจัยการเปลี่ยนแปลงได้เมื่อตั้งค่าเลเยอร์ metatiles ที่มีขนาดใหญ่ขึ้นจะทำให้ฉลากดูดีขึ้น แต่เพิ่มความล่าช้าในการพลาดแคช หากคุณไม่ได้ใช้การแก้ปัญหาการชนกันของฉลากที่ส่วนหลังคุณสามารถตั้งค่า metatiling เป็น 1x1

นอกจากนี้คุณยังสามารถบอก GWC ให้เพิ่มรางน้ำรอบ metitive ซึ่งเป็นพื้นที่พิเศษที่จะถูกตัดออก มีความเสี่ยงที่จะทำเช่นนี้หากคุณมีการแก้ไขปัญหาการชนกันของฉลากเนื่องจากอาจมีการวางตำแหน่งฉลากที่แตกต่างกันหรือแม้กระทั่งลบออกทั้งหมดในด้านอื่น ๆ ของขอบเขตที่เปลี่ยนแปลงได้ หากคุณมีป้ายกำกับที่ติดอยู่ในตำแหน่งโดยสมบูรณ์และไม่เคยถูกกดทับเพื่อหลีกเลี่ยงการชนกันคุณสามารถใช้รางน้ำขนาดใหญ่เพื่อให้ป้ายผนึกข้ามเขตแดนของกระเบื้อง สิ่งนี้จะมีค่าใช้จ่ายด้านประสิทธิภาพเนื่องจาก GeoServer จะต้องเรนเดอร์ขนาดใหญ่ขึ้น

คุณสามารถตั้งค่า metatiling และ gutter บนแท็บ Tile Layer ของการกำหนดค่าเลเยอร์หรือค่าเริ่มต้นที่จะใช้สำหรับเลเยอร์ใหม่สามารถตั้งค่าได้ในหน้า Caching Defaults

หากต้องการปิดใช้งานการแก้ไขข้อขัดแย้งคุณสามารถใช้conflictResolutionตัวเลือกผู้ขายในสไตล์ของคุณ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.