Nhãn đa giác lặp lại cho mỗi ô


10

Tôi đang sử dụng GeoWebCache độc ​​lập để phục vụ các lát từ GeoServer từ xa. Vấn đề của tôi là nhãn đa giác được thêm vào từng ô được phục vụ, thay vì chỉ một lần trong trung tâm đa giác.

Tôi tìm thấy một bài viết thảo luận về vấn đề này:
http://osgeo-org.1560.n6.nabble.com/polygon-label-repeat-for-each-tile-td4995203.html

Câu trả lời đầu tiên đề cập đến một giải pháp có thể:

"Nói chung, tôi khuyên bạn nên sử dụng một công cụ kết xuất gạch (GeoWebCache, MapProxy, TileCache), thay vì yêu cầu hình ảnh nhỏ từ GeoServer và sau đó công cụ kết xuất gạch sẽ thực hiện cắt lát gạch. Bạn sẽ gửi ít yêu cầu hơn tới GeoServer ( 1 hình ảnh lớn thay vì nhiều hình ảnh nhỏ), do đó, điều này sẽ tăng tốc thời gian tạo bộ đệm chung. "

Vấn đề là tôi không thể tìm ra cách thực hiện điều đó bằng cách tham khảo tài liệu GeoWebCache và bài đăng được đề cập ở trên không giải thích cách thực hiện điều đó.

Tôi cũng tìm thấy một bài đăng có câu trả lời liên kết đến tài liệu "Tiled" của GeoWebCache , nhưng mã của tôi đã sẵn sàng sử dụng tất cả các thuộc tính cần thiết và nhãn vẫn hiển thị nhiều lần:

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
    }
);

Bất cứ ai cũng có một ý tưởng?


Bạn có thể cho chúng tôi xem tệp SLD mà bạn đang sử dụng không? Điều đó kiểm soát cách các nhãn được hiển thị trên một lớp WMS.
katahdin

Câu trả lời:


16

Dưới đây là một ví dụ về quy tắc SLD đặt nhãn ở giữa hình dạng của đối tượng địa lý. Cái này sử dụng ogc: Function gọi là "centroid" để đặt nhãn. Bạn có thể đọc thêm về các hàm SLD trong tài liệu GeoServer và một số ví dụ được đưa ra ở đây .

<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>

Ngoài ra, SLD Cookbook là một tài liệu tham khảo tuyệt vời. Một điều có thể khiến bạn gặp khó khăn là thứ tự các thẻ trong SLD. Đối với quy tắc TextSymbolizer ở trên, bạn có thể thấy thứ tự được yêu cầu bằng cách tìm trong định nghĩa lược đồ. Đừng lo lắng, nó không quá đáng sợ! Chỉ cần tìm kiếm "textymbolizer" trong tệp .xsd đó, bạn sẽ dễ dàng tìm thấy thẻ "trình tự". Ở đó bạn sẽ thấy rằng các tham chiếu phần tử khớp với thứ tự trong ví dụ của tôi. (Lưu ý: Tôi đã không sử dụng thuộc tính "điền" của biểu tượng văn bản, phần điền của tôi chỉ áp dụng cho quầng sáng.)


1

Tính toán các nhãn có độ phân giải va chạm (di chuyển các nhãn ra khỏi đường hoặc loại bỏ các mức ưu tiên thấp hơn để chúng không trùng nhau) đòi hỏi phải biết về mọi nhãn có thể va chạm với nhãn bạn đang vẽ, mọi nhãn có thể va chạm với chúng, v.v. . Vì vậy, nói chung, bạn cần phải tính toán tất cả các nhãn cùng một lúc bằng cách xem xét mọi tính năng hoặc chia bản đồ thành các khối với các nhãn được tính trong mỗi khối.

Theo mặc định, GeoWebCache sử dụng một khối gạch 4 x 4 được gọi là "siêu biến". Khi bạn yêu cầu một ô không có trong bộ đệm, GWC sẽ yêu cầu toàn bộ siêu dữ liệu dưới dạng một hình ảnh lớn từ phần phụ trợ và sau đó cắt phần mềm đó thành các ô mà nó lưu trữ. Bạn có thể điều chỉnh hệ số biến đổi khi thiết lập một lớp. Các siêu dữ liệu lớn hơn cho các nhãn tìm kiếm tốt hơn, nhưng làm tăng độ trễ của lỗi bộ nhớ cache. Nếu bạn không sử dụng độ phân giải va chạm nhãn ở mặt sau, bạn có thể đặt siêu dữ liệu thành 1x1.

Bạn cũng có thể nói với GWC để thêm một máng xối xung quanh chất biến đổi đó là không gian thừa sẽ bị cắt. Sẽ rất rủi ro khi làm điều này nếu bạn có độ phân giải va chạm nhãn vì nhãn có thể được định vị khác hoặc thậm chí được loại bỏ hoàn toàn ở phía bên kia của ranh giới biến đổi. Nếu bạn có các nhãn hoàn toàn cố định tại vị trí và không bao giờ bị nén để tránh va chạm, bạn có thể sử dụng máng xối rộng để cho phép các nhãn vượt qua ranh giới gạch. Điều này sẽ có chi phí hiệu năng vì GeoServer sẽ phải kết xuất một lát lớn hơn.

Bạn có thể đặt siêu dữ liệu và máng xối trên tab Lớp Ngói của cấu hình lớp hoặc mặc định sẽ được sử dụng cho các lớp mới có thể được đặt trên trang Mặc định bộ đệm.

Để vô hiệu hóa giải quyết xung đột, bạn có thể sử dụng conflictResolutiontùy chọn nhà cung cấp theo kiểu của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.