MapBox를 사용하는 프로젝트를 진행하고 있는 도중 맵박스 위에 점선을 표현하는 기능이 있어 개발했었습니다.
개발 이후 현재까지 잘 사용하고 있었는데 ios 버전 업그레이드 이후 맵 초기화 부분에서 알수 없는 오류로 인해 문제가 발생했지만 관련된 그 어떤 글도 확인할 수 없어 난감했었네요.
문제가 발생하는 코드를 하나씩 확인해 나가면서 MapBox의 초기화 과정에서 문제가 발생한것을 확인하고 원인을 찾던과정에서 아래와 같이 두가지 문제가 있는것을 확인했습니다.
1. line-dasharray의 Parsing 오류
mapController?.addLayer( MAP_LINE_SOURCE_DASH, MAP_LINE_LAYER_DASH, LineLayerProperties( lineColor: Colors.white.toHexStringRGB(), lineCap: "round", lineJoin: "round", lineWidth: 2, lineDasharray: [Expressions.literal, [3, 3]], // << 문제 발생 ), );
2. line-gradient Parsing 오류 (수정됨)
-> 해당 오류는 ' <<와 " << 를 혼용해서 사용하는 바람에 발생된 문제로 보이네요. 'linear'와 '#FF00FF' 를 "linear"와 "#FF00FF"로 변경해서 문제 해결했습니다 :)
await mapController?.addLayer( MAP_LINE_SOURCE, MAP_LINE_LAYER, LineLayerProperties( lineColor: const Color(0xFFFF00FF).toHexStringRGB(), lineCap: "round", lineJoin: "round", lineWidth: 9, lineGradient: [ // << 문제발생 Expressions.interpolate, ['linear'], [Expressions.lineProgress], 0, '#FF00FF', 1, "#FFFF00", ], ), );
그러는 중에 line-dasharray에 대해서 좀 더 알게된 내용이 있어 정리해보려고 합니다.
line-dasharray(mapbox) 와 stroke-dasharray(css) 는 점선을 표현하는 방식이죠.
지금까지는 막연히 사용만 했는데 규칙이 별거 없더라고요.
* stroke-dasharray 예제와 결과 이미지
case1. dash와 gap이 없는 선
case2. "4" 홀수로 선언되어 있음 - dash4 gap4 반복
case3. "4 1" 짝수로 선언되어 있음 - dash4 gap1 반복
case4. "4 1 2" 홀수로 선언되어 있음 - dash4 gap1 dash2 gap4 dash2 gap1 반복
case5. "4 1 2 3" 짝수로 선언되어 있음 - dash4 gap1 dash2 gap3 반복
case6. "0 4 0" 홀수로 선언되어 있음 - gap으로 시작되는 "4"
case7. "0 4 2 0" 짝수로 선언되어 있음 - gap으로 시작되는 "4 2"
<svg viewBox="0 0 30 12" xmlns="http://www.w3.org/2000/svg"> <style> line { stroke: black; } </style> <!-- case1. No dashes nor gaps --> <line x1="0" y1="1" x2="30" y2="1" /> <!-- case2. Dashes and gaps of the same size --> <line x1="0" y1="3" x2="30" y2="3" stroke-dasharray="4" /> <!-- case3. Dashes and gaps of different sizes --> <line x1="0" y1="5" x2="30" y2="5" stroke-dasharray="4 1" /> <!-- case4. Dashes and gaps of various sizes with an odd number of values --> <line x1="0" y1="7" x2="30" y2="7" stroke-dasharray="4 1 2" /> <!-- case5. Dashes and gaps of various sizes with an even number of values --> <line x1="0" y1="9" x2="30" y2="9" stroke-dasharray="4 1 2 3" /> <!-- case6. Dashes starting with a gap --> <line x1="0" y1="11" x2="30" y2="11" stroke-dasharray="0 4 0" /> <!-- case7. Dashes and gaps of various sizes with an even number of values starting with a gap --> <line x1="0" y1="13" x2="30" y2="13" stroke-dasharray="0 4 2 0" /> </svg>

# 위의 예제를 보면 알겠지만 홀수로 선언되어 있는 부분은 한번더 추가해서 짝수와 같이 선언된 결과와 같습니다. #
이 내용만 알면 html, css, mapbox 모두 점선을 표현하는데 있어서 문제 없겠죠?
아래 링크에서 직접 테스트 해보면서 원하는 모양의 점선을 만들어봐요.
* 직접 테스트 해보기: 링크
* 참고 사이트
- SVG stroke-dasharray : https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray
'Development > ETC' 카테고리의 다른 글
[해결방법] Git repository간 이동시 Git mirror 오류 (0) | 2023.04.11 |
---|---|
[해결방법] 앱 이전시 개발자 계정 못찾는 문제 (입력한 개발자 계정을 찾을수 없습니다) (0) | 2023.02.28 |