note11g / flutter_naver_map

Naver Mobile Dynamic Map SDK for Flutter (unofficial)
BSD 3-Clause "New" or "Revised" License
143 stars 69 forks source link

feat: initial overlay min max zoom level #131

Closed Soogyo-In closed 11 months ago

Soogyo-In commented 1 year ago

closes #115

오버레이 객체 생성 시 min, max zoom level 을 설정할 수 없어서 설정 가능하도록 했습니다. NInfoWindow.onMarker 는 네이티브에서 마커에 오버레이를 할당해주는 부분이 구현되어있지 않아 테스트는 못했으나 생성자에 파라미터는 추가해두었습니다.

스크린샷

iOS

https://github.com/note11g/flutter_naver_map/assets/15944970/009290b2-6cf1-4db1-a302-5bcf167bece6

Android

https://github.com/note11g/flutter_naver_map/assets/15944970/cd1fca81-c82e-4ba9-a8c1-e9dd70d9c48c

예제 코드

example/main.dartonMapReady 함수에 아래 코드를 붙여넣습니다.

  void onMapReady(NaverMapController controller) async {
    mapController = controller;
    final position = await controller.getCameraPosition();
    final lat = position.target.latitude;
    final lon = position.target.longitude;
    const minZoom = 13.5;
    const maxZoom = 14.5;

    controller.addOverlayAll({
      NGroundOverlay(
        id: 'ground',
        bounds: NLatLngBounds(
          southWest: NLatLng(lat - 0.004, lon - 0.008),
          northEast: NLatLng(lat + 0.004, lon + 0.008),
        ),
        image: const NOverlayImage.fromAssetImage('assets/ground_img.png'),
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NCircleOverlay(
        id: 'circle',
        center: NLatLng(lat - 0.002, lon - 0.006),
        radius: 100,
        color: Colors.red,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      // onMarker 는 미구현된 상태이므로 테스트 불가능
      // NInfoWindow.onMarker(
      //   id: 'infoOnMarker',
      //   text: 'info',
      //   minZoom: minZoom,
      //   maxZoom: maxZoom,
      // ),
      NInfoWindow.onMap(
        id: 'infoOnMap',
        text: 'info',
        position: NLatLng(lat - 0.002, lon - 0.004),
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NMarker(
        id: 'marker',
        position: NLatLng(lat, lon),
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NArrowheadPathOverlay(
        id: 'arrow',
        coords: [
          NLatLng(lat - 0.002, lon - 0.004),
          NLatLng(lat - 0.002, lon - 0.002),
        ],
        color: Colors.blue,
        headSizeRatio: 4,
        width: 6,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NMultipartPathOverlay(
        id: 'multi',
        paths: [
          NMultipartPath(
            coords: [
              NLatLng(lat - 0.002, lon),
              NLatLng(lat, lon + 0.002),
            ],
            color: Colors.green,
          ),
          NMultipartPath(
            coords: [
              NLatLng(lat, lon + 0.002),
              NLatLng(lat - 0.002, lon + 0.004),
            ],
            color: Colors.green,
          ),
        ],
        width: 6,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NPathOverlay(
        id: 'multi',
        coords: [
          NLatLng(lat - 0.001, lon),
          NLatLng(lat + 0.001, lon + 0.002),
        ],
        color: Colors.yellow,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NPolygonOverlay(
        id: 'polygon',
        coords: [
          NLatLng(lat + 0.004, lon - 0.006),
          NLatLng(lat + 0.004, lon - 0.004),
          NLatLng(lat + 0.002, lon - 0.004),
          NLatLng(lat + 0.002, lon - 0.006),
          NLatLng(lat + 0.004, lon - 0.006),
        ],
        color: Colors.purple,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
      NPolylineOverlay(
        id: 'polyline',
        coords: [
          NLatLng(lat + 0.004, lon - 0.002),
          NLatLng(lat + 0.004, lon),
          NLatLng(lat + 0.002, lon),
          NLatLng(lat + 0.002, lon - 0.002),
          NLatLng(lat + 0.004, lon - 0.002),
        ],
        color: Colors.orange,
        minZoom: minZoom,
        maxZoom: maxZoom,
      ),
    });
  }
note11g commented 1 year ago

https://github.com/note11g/flutter_naver_map/issues/115#issuecomment-1674377964 다음 코멘트에서 언급한 부분에서 min/max뿐만 아니라, 모든 오버레이가 공통으로 가지고 있는 set 메서드에 대해서 overlay initialize때 지정해주지 못하는 부분을 처리하도록 수정해야 할 것 같습니다. ㅠㅠ

이 이슈는 제가 수정안을 작성하는 것이 좋을 것 같습니다. 혹시 지금 빠르게 사용하셔야 하는 부분이실까요?

Soogyo-In commented 1 year ago

@note11g 아닙니다. 요즘 시간이 생겨서 고칠 수 있어보이는 건 고쳐보고있었습니다. 말씀하신 것 처럼 전부 고치는게 맞는데 전부 테스트 해보기 어려워 일단 이슈 스레드에 제보된 내용만 수정했습니다. 수정 계획이 있으시다면 한 번에 하는게 더 좋아보입니다.