QGIS에서 임의의 점 다각형 채우기 기호를 작성합니까?


9

QGIS 2.18.3을 사용하여 다각형 심볼에 임의의 점 패턴을 적용하고 싶습니다. 기본 스타일 관리자에는 Cemetery-25-50k라는 규칙적인 간격 패턴이 있습니다 (아래 이미지 참조). 이것은 좋은 출발점이지만 분명히 무작위는 아닙니다.

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

또는 레이어 속성 (아래) 내 포인트 패턴 채우기 옵션을 검토했지만 임의 패턴을 생성하는 것은 없습니다.

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

다시 생성해야하는 것은 ESRI Arcmap 랜덤 포인트 심볼로지입니다.

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


한 가지 가능성 (임의성에 대한 제어를 강화하고 나무와 같은 임의의 기호를 사용)은 잉크 스케이프를 사용하여 SVG (임의의 타일 복제본 사용)를 만들고 SVG 채우기를 사용하는 것입니다.
Steven Kay

답변:


12

다음 단계를 사용하여 임의의 점 기호를 추가 할 수 있습니다.

  1. '+'버튼을 사용하여 새 심볼 레이어를 추가하십시오.

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

  1. 심볼 레이어 유형을 '포인트 패턴 채우기'로 변경
  2. 왼쪽 트리에서 '포인트 패턴 채우기'를 강조 표시합니다
  3. 수평 및 수직 거리를 적절한 값으로 변경하십시오. 이 예에서는 두 거리에 대해 동일한 값을 선택했습니다.2.0
  4. 수평 변위 및 수직 변위에서 다음 기능을 사용하십시오.

    5.1 수평 변위의 경우 :

    randf(3,5) 

    5.2 수직 변위

    randf(2,4) 
  5. 점 레이어를 복제하고 가로 및 세로 거리를 각각 6과 3으로 변경합니다. 수평 변위 및 수직 변위에서 다음 기능을 사용하십시오.

    6.1 수평 변위의 경우 :

    randf(0,1) 

    6.2 수직 변위

    randf(1,2) 
  6. 심볼 크기를 2로 줄여야합니다 Pixels

다음 이미지에서 출력을 볼 수 있습니다.

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

작곡가에서 전설은 다음과 같습니다.

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


2
내장 아크 기호의 임의성을 복제하지는 않지만 좋은 해결책입니다. 임의성을 높이려면 가로 및 세로 거리에서 randf () 함수를 사용하고 채우기를 여러 번 복제하십시오.
Ed Rollason

1
@EdRollason 귀하의 의견에 감사드립니다. randf () 함수를 사용하여 여러 레이어를 추가하는 것도 좋습니다.
ahmadhanb

1
@ahmadhanb 재미있는 솔루션, 북마크!
mgri

2

또 다른 기술은 InkScape를 사용하여 SVG를 만들고 QGIS에서 SVG 채우기 레이어를 사용하는 것입니다.

기호에 대한 통제력을 강화하고 (예를 들어 점이 아닌 무작위로 흩어진 나무를 그릴 수 있음) 간격을보다 효과적으로 제어 할 수 있습니다.

  • Inkscape에서 원 / 트리를 그리고 개체를 선택하십시오
  • 편집> 복제> 타일 복제
  • 5 x 5 또는 10x10 타일 복제본을 만듭니다 (예 :). 심볼이 너무 많으면 QGIS가 어려움을 겪기 때문에 그리드 크기를 작게 유지하는 것이 좋습니다.
  • Shift 탭에서 다음과 같이 선택하십시오. 기본 설정은 괜찮지 만 Randomise 설정을 변경하여 'jitter'를 추가하십시오.

설정을 시험해보고 Remove결과가 좋지 않으면 언제든지 클릭 할 수 있습니다 .

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

  • 를 클릭하십시오 Create.
  • 를 사용하여 모든 타일 복제를 선택하십시오 CtrlA
  • CtrlShiftD 문서 속성을 불러 오려면
  • 드로잉 또는 선택하려면 페이지 크기 조정을 선택하십시오.
  • SVG로 저장하지만 단순 SVG 형식 을 사용해야 합니다.
  • 이제 SVG 기호 채우기로 QGIS를 가져옵니다.

다음은 QGIS 내장 트리 중 하나의 5 x 5 복사본의 무작위 그리드를 만든 곳입니다. 간격과 지터를 실험함으로써 다른 모양을 얻을 수 있습니다. QGIS의 수평 변위를 실험 할 수도 있습니다 . 수평 거리의 절반으로 설정하면 "바둑판 식"모양이 깨집니다 (벽에 벽돌과 같은 패턴이 나타남).

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


0

qgis 3.5.x에서 일부 조정이 가능한 온라인 스크립트를 찾았습니다.

원래 게시물을 잃어 버렸기 때문에 저자를 인정할 수 없습니다.

당신이하는 일은 :

  • 채우기 레이어 만들기 "형상 생성기"로 변경
  • "형상 유형"을 포인트로 변경
  • 표현식의 경우 텍스트 필드 오른쪽에있는 "시그마"버튼을 클릭하십시오.
  • "표현식 대화 상자"창 변경 탭에서 "함수 편집기"로 아래 코드를 붙여 넣기
  • 이제 "표현식 대화 상자"로 돌아가서 다음과 같이 함수 호출을 붙여 넣습니다. fillGrid (0.001,0.001,1) (처음 두 값은 임의의 크기입니다)
  • 변경 사항을 저장하고보기를 업데이트하십시오.
  • 멋진 임의의 포인트가 있습니다.

스크립트의 원래 작성자 덕분입니다.

from qgis.core import *
from qgis.gui import *
import math
import random

"""
Define a grid based on the interval and the bounding box of
the feature. Grid will minimally cover the feature and be centre aligned

Create a multi-point geometry at the grid intersections where
the grid is enclosed by the feature - i.e. apply a clipping mask

Random value determines amount of randomness in X/Y within its
grid square a particular feature is allowed to have
"""
@qgsfunction(args='auto', group='Custom')
def fillGrid(xInterval, yInterval, rand, feature, parent):
  box = feature.geometry().boundingBox()

  #Create a grid that minimally covers the boundary
  #using the supplied intervals and centre it
  countX = math.ceil(box.width() / xInterval)
  countY = math.ceil(box.height() / yInterval)

  #Align the grid
  gridX = countX * xInterval
  gridY = countY * yInterval
  dX= gridX - box.width()
  dY= gridY - box.height()
  xMin = box.xMinimum() - (dX/2)
  yMin = box.yMinimum() - (dY/2)

  points = []
  #+1 to draw a symbol on the n+1th grid element
  for xOff in range(countX+1):
    for yOff in range(countY+1):

      ptX = xMin + xOff*(xInterval) + rand * random.uniform(0,xInterval)
      ptY = yMin + yOff*(yInterval) + rand * random.uniform(0,xInterval)

      pt = QgsPointXY(ptX,ptY)
      point = QgsGeometry.fromPointXY(pt)
      if feature.geometry().contains(point):
        points.append(pt)

  return QgsGeometry.fromMultiPointXY(points)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.