선을 자동으로 포인트에 맞추시겠습니까?


19

두 개의 벡터 shapefile이 있습니다. 하나의 파일은 맨홀을 나타내는 점이고 다른 하나는 맨홀로 이어지는 파이프를 나타내는 폴리 라인 파일입니다. 지정된 거리 내에서 가장 가까운 맨홀까지 선을 스냅해야합니다.

수동으로하지 않고 쉽게 수행 할 수 있습니까?

라인-> 포인트

최신 정보

Alexandre에 따르면, shapefile을 공간 형식으로 내보냈습니다. 다음에 무엇을 해야할지 모르겠습니다.

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

업데이트 # 2patialite-gui를 사용하여 새 db 파일을 만들고 shapefile을 새 db로 가져 왔는데 SQL 쿼리를 조정했지만 "no such column : f.geom"오류가 표시됩니다.

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


Spatialite 공간 테이블 (계층)에서 피쳐 형상은 속성에 저장됩니다. 이름이 다를 수 있습니다. "pipe"테이블에서이 속성은 Geometry라고합니다. mh도 Geometry 속성이라고 가정하여 대답을 업데이트합니다.
— Alexandre Neto 2019

"이러한 기능이 없습니다 : ST_Snap"오류가 발생했습니다. Windows 7 64 비트에서 QGIS 1.8을 사용하고 있습니다.
— GreyHippo

어떤 Spatialite가 있습니까? QGIS> 도움말> 정보
— Alexandre Neto

"f.geom 그런 칼럼 없다" f.Geometry와 시도 -
— 빈 아얀

내 Spatialite 버전은 3.0.1이다
— GreyHippo

답변:


26

당신이 당신의 데이터를 입력하고자하는 경우 PostGIS와 (또는 Spatialite ), 당신은 사용할 수 ST_Snap을 당신이 원하는 것을 할 수 있습니다.

선 레이어 \ 테이블을 입력으로 사용하고 점 레이어를 참조로 사용하고 공차를 설정하십시오. 이 같은:

SELECT
    f.gid as gid,
    ST_Snap(f.Geometry, g.Geometry, 2) as geom
FROM
    pipe as f,
    (SELECT ST_Collect(Geometry) as Geometry
     FROM mh) as g

결과는 다음과 같습니다.

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

그런 다음 기능 식별자를 사용하여 형상을 업데이트 할 수 있습니다.


"Select ... From ..."코드를 어디에 넣을까요? "기능 식별자 사용"은 무엇을 의미합니까?
— GreyHippo

데이터베이스 (postgis 또는 공간 라이트)에서 파일을 가져온 후 DB 관리자를 사용하여 데이터베이스 테이블을보고 SQL 창에서 SQL 쿼리 (코드)를 실행 한 다음 캔버스에로드 할 수 있습니다. 그것이 당신에게 효과가 있는지 말하면 우리는 업데이트 부분을 할 것입니다.
— Alexandre Neto 2013

알렉상드르, 위의 업데이트를 참조하십시오. 파일을 2 개의 공간 라이트 파일로 내보냈습니다.
— GreyHippo

두 파일을 모두 동일한 Spatialite 데이터베이스에 두어야합니다. "pipe"를 "mh.sqlite"데이터베이스로 드래그하십시오. 그런 다음 SQL 코드를 업데이트하여 "points"를 "mh"로, "lines"를 "pipe"로 변경하십시오. 또한 "gid"를 "pipe"id에 적용하십시오. 그 후 결과를 실행하고로드 할 수 있습니다.
— Alexandre Neto

3

QGIS 또는 GRASS에 대해 잘 모르지만 GRASS에서 빠른 Googling이 v.clean 을 생성 하여 트릭을 수행해야합니다.

한 번 봐 가지고 이 게시물 과 이 하나 .

QGIS 및 GRASS의 대안 :

ArcGIS에서이 작업을 수행하려면 데이터를 파일 지오 데이터베이스의 피처 데이터 셋에 저장 하고 포인트 레이어가 선의 끝점에없는 영역을 식별하기 위해 토폴로지 를 생성합니다 . 그런 다음 Error Inspector를 사용하여 오류 를 수정할 수 있습니다 .

그러나 아마도 가장 빠르고 쉬운 해결책은 FME 일 것입니다. Snapper Tool 또는 AnchoredSnapper Tool을 사용해보십시오 . AnchoredSnapper를 사용하는 경우 스냅 유형이 엔드 포인트 스냅인지 확인하십시오. 물론 FME 라이센스가 필요합니다. 그러나 14 일 평가판이없는 경우 다운로드 할 수 있습니다.


v.clean을 보았지만 한 레이어 만 사용하므로 한 레이어를 다른 레이어와 비교해야합니다. 또한 QGIS / 오픈 소스 옵션을 더 찾고있었습니다.
— GreyHippo

1
@GreyHippo, GRASS는 오픈 소스입니다
— artwork21

1
GRASS는 오픈 소스이지만 다른 옵션은 그렇지 않습니다.
— GreyHippo


-1

수동 방법

Qgis-> 설정-> 스냅 옵션 (확실하지는 않지만 CadTools 확장이 필요할 수 있음) 및 토폴로지 편집을 활성화하십시오.

자동 방법

QGIS의 SEXTANTE 툴박스에있는 GRASS 툴에있는 v.clean. PostGIS 2.0을 가지고 있다면 ST_Snap과 ST_SnapToGrid ()를 사용할 수 있습니다 (그리고 그것을 사용할 수없는 이유는 없습니다. 매우 훌륭한 공간 도구입니다)

상업적인 방법

FME 및 MRF 도구 (상업 확장, 나는 증발 버전을 가지고 있습니다. 그것은 매우 좋습니다).

또한 오픈 소스 도구를 사용하여 수도관 / 하수도 관리에 관심이 있습니다. 힌트가 있습니까?


그것이 "수동으로"GreyHippo가 의미하는 바라고 생각합니다. 스냅 옵션을 사용하면 스냅을 활성화하기 위해 모든 매달려있는 노드를 손으로 움직여야합니다. 아니면 뭔가 빠졌습니까?
— Jake

아니. 나는 장님이었다.
— simplexio

Simplexio, 수동으로하고 싶지 않습니다. 내가 모르는 플러그인이나 프로세스를 원했습니다.
— GreyHippo

GRASS v.clean을 두 레이어에서 사용할 수 있다고 생각하지 않았습니까?
— GreyHippo

1
내가 정확하게 기억하면 너무 짧은 줄을 고칠 수 있습니다. 아시다시피, 문제는 맨홀이 올바른 장소에 있지 않은 것이 아니라 하수구 네트워크가 위상 적으로 올바르지 않다는 것입니다. 그리고 그것은 파이프 레이어 만 필요합니다. 내가 본 모든 유틸리티 네트워크 시스템은 모든 하수구 교차로에 맨홀이 있다고 가정합니다. 이 오프 사이트는 올바른 토폴로지를 원한다고 가정합니다.
— simplexio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.