알고리즘 : 소스 폴리 라인을 참조 폴리 라인 (완전히 또는 부분적으로)으로 이동


10

시스템에는 일부 소스 라인 (낮은 정밀도)을 참조 라인 (높은 정밀도)으로 이동해야하는 요구 사항이 있습니다. 다음 그림은 일반적인 사용 사례를 보여줍니다. 빨간색은 소스 라인이고 파란색은 참조 라인입니다.

빨간색은 소스 라인이고 파란색은 참조 라인입니다

이 경우 소스 라인이 부분적으로 이동하고 결과는 녹색 라인으로 표시됩니다.

결과 1 이동

소스 라인을 완전히 이동해야하는 상황이 있습니다.

실시 예 2

결과:

결과 2 이동

현재 우리의 솔루션은 소스 라인의 헤드 / 엔드 포인트를 참조 라인에 투영하고 그 반대의 경우 소스와 참조 라인에서 투영 된 포인트를 찾는 것입니다. 이러한 투영 된 점을 사용하여 소스 및 참조 선의 필요한 부분을 추출한 다음 새 점으로 결합 할 수 있습니다.

대부분의 경우 작동하지만이 방법이 작동하지 않는 경우가 있습니다. 특히, 선 중 하나가 "C"모양이거나 헤드 포인트가 끝점에 매우 가까운 경우. 다음 두 그림은 시나리오를 보여줍니다.

모양 선과 같은 C

내 알고리즘을 적용하면 결과가 나타납니다.

결과

현재 알고리즘은 투영 된 점을 찾아 선을 추출하기 때문에 이해할 수 있습니다.

우리가 예상 한 것은 다음과 같습니다.

예상 결과

따라서이 작업을 수행하기 위해보다 강력한 알고리즘이 필요한 것은 이전 사례와 같은 특수 사례를 처리 할 수 ​​있습니다. 나는 한 점에서 다른 점으로 모든 점을 투영하려고 시도하고 투영 된 선의 머리 / 끝점에 가장 가까운 두 개의 투영 점을 찾으려고 노력했지만 운이 없었습니다. 여전히 예기치 않은 결과를 제공하는 사례를 찾을 수 있습니다.

전에 비슷한 문제를 겪은 사람이 있습니까? 소프트웨어 나 라이브러리가 비슷한 작업을 수행 할 수 있다면 좋을 것입니다. 모든 답변을 부탁드립니다.


1
ArcGIS의 토폴로지가 객체가 일치하는지 여부를 확인하는 방법에 도움이 될 수 있습니다. help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//… 단락 "클러스터 처리"
Jens

답변을 보내 주셔서 감사합니다, @Jens. 그러나 나는 그것이 내가 원하는 것이 아니라는 것을 두려워합니다.
mfdev

이 라인은 네트워크를 나타 냅니까? 그들 사이에 위상 관계가 있습니까?
Julien

네트워크 일 필요는 없으며 토폴로지 관계 일 필요도 없습니다.
mfdev

답변:


4

제 예상은 최종 사례가 종종 기계 프로그래밍이 아닌 예외 일 것입니다. 나는 비슷한 문제로 일했고 항상 일정한 양의 수동 편집이 필요했습니다. 조정해야 할 것은 사례에서 생성되는 예외이며 작업 관리 시스템에서 최종 사용자에게 제공됩니다.


이의 다소 유사한 예는 여기에서 볼 수 있습니다 vividsolutions.com/jcs JCS는 형상 융합을 자동화하는 먼 길을 간다, 또한 완전히 병합 할 수있는 형상 수동 QA가 포함되어 있습니다. vividsolutions.com/… 그것에서 만들어지고 QA를 허용하고 어려운 기하학에 대한 이슈 추적을 추가합니다.
DPierce

1
모든 토폴로지 솔루션은 프로그래밍을 통해 자동화 할 수 없으며 대기업에서는 이러한 변경이 예와 유사하게 개발됩니다. 이러한 변화는 규모가 크고 복잡한 변화가 큰 복잡한 운송 구조로 인해주기적인 순환이 가능하기 때문입니다.
lewis

2

이 알고리즘에 대해 스냅 공차와 회전 공차가 필요합니다 (이미 스냅 공차가 있다고 가정).

헤드 라인을 소스 라인에서 참조 라인으로 투영합니다. 이 투영 점에서 참 조선을 끊습니다.

소스 라인을 따라 이동 방향을 얻으려면 헤드 포인트에서 첫 번째 정점으로 소스 라인을 이동합니다. 투영 된 소스 점에서 다음 정점으로 두 개의 참 조선 각각을 통과합니다. 이동 방향이 소스 라인의 헤드 포인트에서 이동 방향의 회전 허용 오차 내에있는 경우 참조 라인의 해당 섹션 만 사용하여 알고리즘을 정상적으로 적용하십시오. 알고리즘이 소스 라인의 끝에 도달하면 완료됩니다. 그렇지 않은 경우 변환 된 조각과 변환되지 않은 조각 (종료점 포함) 사이의 소스 라인을 끊습니다.

이제 변형되지 않은 조각을 가져 와서 끝점을 원래 참 조선에 투영합니다. 이전과 동일한 절차를 수행합니다. 이동 방향을 찾기 위해 끝점에서 첫 번째 정점으로 소스를 이동합니다. 프로젝트 끝점에서 참 조선을 끊고 각각을 통과하여 투영 된 끝점으로부터의 이동 방향이 회전 공차 내에 있는지 확인하십시오. 그렇다면 해당 참조 라인을 사용하여 알고리즘을 정상적으로 적용하십시오.

이 시점에서 변환되지 않은 부분 만 사용하므로 헤드 포인트 변환과 겹치지 않습니다.

마지막으로 필요한 경우 두 개의 결과 선 조각을 병합합니다. 헤드 포인트 변환 된 조각을 투영 된 헤드 포인트에서 변형되지 않은 중단 점으로 변환 한 다음 끝 지점에서 변환되지 않은 브레이크 포인트에서 투영 된 끝점으로 변환 된 조각.

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