Skip to content

Commit fe150f5

Browse files
committed
레이어 그룹 설정 기능 추가
setLayerGroupEnabled 함수 추가 android 는 command 로 동작할 수 있도록 추가했습니다.
1 parent 9fe5ecc commit fe150f5

File tree

9 files changed

+97
-3
lines changed

9 files changed

+97
-3
lines changed

README.md

+13
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,7 @@ animateToCoordinates: (coords: Coord[], bounds?: {
187187
}) => void;
188188
animateToRegion: (region: Region) => void;
189189
setLocationTrackingMode: (mode: number) => void;
190+
setLayerGroupEnabled: (group: LayerGroup, enabled: boolean) => void;
190191
showsMyLocationButton: (show: boolean) => void;
191192
handleOnCameraChange: (event: React.SyntheticEvent<{}, {
192193
latitude: number;
@@ -313,6 +314,18 @@ export interface PolygonProps {
313314
}
314315
```
315316

317+
### `LayerGroup`
318+
```ts
319+
export declare enum LayerGroup {
320+
LAYER_GROUP_BUILDING = "building",
321+
LAYER_GROUP_TRANSIT = "transit",
322+
LAYER_GROUP_BICYCLE = "bike",
323+
LAYER_GROUP_TRAFFIC = "ctt",
324+
LAYER_GROUP_CADASTRAL = "landparcel",
325+
LAYER_GROUP_MOUNTAIN = "mountain"
326+
}
327+
```
328+
316329
## 참고
317330

318331
- *react-navigation*의 스택 스크린 사용시 안드로이드에서 맵뷰가 겹쳐 보이는 현상이 있을 경우 `useTextureView` 옵션을 추가해 주세요. [#27](https://github.com/QuadFlask/react-native-naver-map/issues/27)

android/src/main/java/com/github/quadflask/react/navermap/RNNaverMapViewManager.java

+28
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class RNNaverMapViewManager extends ViewGroupManager<RNNaverMapViewContai
3838
private static final int ANIMATE_TO_TWO_COORDINATES = 3;
3939
private static final int SET_LOCATION_TRACKING_MODE = 4;
4040
private static final int ANIMATE_TO_COORDINATES = 6;
41+
private static final int SET_LAYER_GROUP_ENABLED = 7;
4142
private static final List<String> LAYER_GROUPS = Collections.unmodifiableList(Arrays.asList(
4243
NaverMap.LAYER_GROUP_BUILDING,
4344
NaverMap.LAYER_GROUP_TRANSIT,
@@ -294,6 +295,32 @@ public void receiveCommand(@NonNull RNNaverMapViewContainer mapView, int command
294295
case SET_LOCATION_TRACKING_MODE:
295296
mapView.setLocationTrackingMode(args.getInt(0));
296297
break;
298+
299+
case SET_LAYER_GROUP_ENABLED:
300+
String group = args.getString(0);
301+
Boolean enable = args.getBoolean(1);
302+
303+
switch (group) {
304+
case "building":
305+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_BUILDING, enable);
306+
break;
307+
case "transit":
308+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_TRANSIT, enable);
309+
break;
310+
case "bike":
311+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_BICYCLE, enable);
312+
break;
313+
case "ctt":
314+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_TRAFFIC, enable);
315+
break;
316+
case "landparcel":
317+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_CADASTRAL, enable);
318+
break;
319+
case "mountain":
320+
mapView.setLayerGroupEnabled(NaverMap.LAYER_GROUP_MOUNTAIN, enable);
321+
break;
322+
}
323+
break;
297324
}
298325
}
299326

@@ -305,6 +332,7 @@ public java.util.Map<String, Integer> getCommandsMap() {
305332
.put("animateToTwoCoordinates", ANIMATE_TO_TWO_COORDINATES)
306333
.put("setLocationTrackingMode", SET_LOCATION_TRACKING_MODE)
307334
.put("animateToCoordinates", ANIMATE_TO_COORDINATES)
335+
.put("setLayerGroupEnabled", SET_LAYER_GROUP_ENABLED)
308336
.build();
309337
}
310338

example/App.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import 'react-native-gesture-handler';
2-
import React, {useEffect} from 'react';
2+
import React, {useEffect, useRef, useState} from 'react';
33
import NaverMapView, {Align, Circle, Marker, Path, Polygon, Polyline} from "./map";
44
import {Image, ImageBackground, PermissionsAndroid, Platform, ScrollView, Text, TouchableOpacity, View} from "react-native";
55
import {NavigationContainer} from '@react-navigation/native';
66
import {createBottomTabNavigator} from "@react-navigation/bottom-tabs";
77
import {createStackNavigator} from "@react-navigation/stack";
8+
import { LayerGroup } from './map/index';
89

910
const P0 = {latitude: 37.564362, longitude: 126.977011};
1011
const P1 = {latitude: 37.565051, longitude: 126.978567};
@@ -35,19 +36,32 @@ const TextScreen = () => {
3536
}
3637

3738
const MapViewScreen = ({navigation}) => {
39+
const mapView = useRef(null);
40+
3841
useEffect(() => {
3942
requestLocationPermission();
4043
}, []);
4144

45+
const [enableLayerGroup, setEnableLayerGroup] = useState(true);
46+
4247
return <>
43-
<NaverMapView style={{width: '100%', height: '100%'}}
48+
<NaverMapView ref={mapView}
49+
style={{width: '100%', height: '100%'}}
4450
showsMyLocationButton={true}
4551
center={{...P0, zoom: 16}}
4652
onTouch={e => console.warn('onTouch', JSON.stringify(e.nativeEvent))}
4753
onCameraChange={e => console.warn('onCameraChange', JSON.stringify(e))}
4854
onMapClick={e => console.warn('onMapClick', JSON.stringify(e))}
4955
useTextureView>
50-
<Marker coordinate={P0} onClick={() => console.warn('onClick! p0')} caption={{text: "test caption", align: Align.Left}}/>
56+
<Marker coordinate={P0}
57+
onClick={() => {
58+
console.warn('onClick! p0')
59+
mapView.current.setLayerGroupEnabled(LayerGroup.LAYER_GROUP_BICYCLE, enableLayerGroup);
60+
mapView.current.setLayerGroupEnabled(LayerGroup.LAYER_GROUP_TRANSIT, enableLayerGroup);
61+
setEnableLayerGroup(!enableLayerGroup)
62+
}}
63+
caption={{ text: "test caption", align: Align.Left }}
64+
/>
5165
<Marker coordinate={P1} pinColor="blue" zIndex={1000} onClick={() => console.warn('onClick! p1')}/>
5266
<Marker coordinate={P2} pinColor="red" zIndex={100} alpha={0.5} onClick={() => console.warn('onClick! p2')}/>
5367
<Marker coordinate={P4} onClick={() => console.warn('onClick! p4')} image={require("./marker.png")} width={48} height={48}/>

example/map/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export default class NaverMapView extends Component<NaverMapViewProps> {
116116
}) => void;
117117
animateToRegion: (region: Region) => void;
118118
setLocationTrackingMode: (mode: number) => void;
119+
setLayerGroupEnabled: (group: LayerGroup, enabled: boolean) => void;
119120
showsMyLocationButton: (show: boolean) => void;
120121
private dispatchViewManagerCommand;
121122
handleOnCameraChange: (event: React.SyntheticEvent<{}, {

example/map/index.js

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ export default class NaverMapView extends Component {
8383
this.setLocationTrackingMode = (mode) => {
8484
this.dispatchViewManagerCommand('setLocationTrackingMode', [mode]);
8585
};
86+
this.setLayerGroupEnabled = (group, enabled) => {
87+
this.dispatchViewManagerCommand('setLayerGroupEnabled', [group, enabled]);
88+
};
8689
this.showsMyLocationButton = (show) => {
8790
this.dispatchViewManagerCommand('showsMyLocationButton', [show]);
8891
};

index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ export default class NaverMapView extends Component<NaverMapViewProps, {}> {
117117
}) => void;
118118
animateToRegion: (region: Region) => void;
119119
setLocationTrackingMode: (mode: number) => void;
120+
setLayerGroupEnabled: (group: LayerGroup, enabled: boolean) => void;
120121
showsMyLocationButton: (show: boolean) => void;
121122
private dispatchViewManagerCommand;
122123
handleOnCameraChange: (event: React.SyntheticEvent<{}, {

index.js

+3
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,9 @@ export default class NaverMapView extends Component {
8383
this.setLocationTrackingMode = (mode) => {
8484
this.dispatchViewManagerCommand('setLocationTrackingMode', [mode]);
8585
};
86+
this.setLayerGroupEnabled = (group, enabled) => {
87+
this.dispatchViewManagerCommand('setLayerGroupEnabled', [group, enabled]);
88+
};
8689
this.showsMyLocationButton = (show) => {
8790
this.dispatchViewManagerCommand('showsMyLocationButton', [show]);
8891
};

index.tsx

+4
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,10 @@ export default class NaverMapView extends Component<NaverMapViewProps, {}> {
148148
this.dispatchViewManagerCommand('setLocationTrackingMode', [mode]);
149149
};
150150

151+
setLayerGroupEnabled = (group: LayerGroup, enabled: boolean) => {
152+
this.dispatchViewManagerCommand('setLayerGroupEnabled', [group, enabled]);
153+
};
154+
151155
showsMyLocationButton = (show: boolean) => {
152156
this.dispatchViewManagerCommand('showsMyLocationButton', [show]);
153157
};

ios/reactNativeNMap/RNNaverMapViewManager.m

+27
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,33 @@ -(UIView *)view
172172
}];
173173
}
174174

175+
RCT_EXPORT_METHOD(setLayerGroupEnabled:(nonnull NSNumber *)reactTag
176+
withGroup: (NSString *) group
177+
withEnabled: (BOOL) enabled
178+
)
179+
{
180+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) {
181+
id view = viewRegistry[reactTag];
182+
if (![view isKindOfClass:[RNNaverMapView class]]) {
183+
RCTLogError(@"Invalid view returned from registry, expecting NMFMapView, got: %@", view);
184+
} else {
185+
if ([group isEqualToString:@"building"]) {
186+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_BUILDING isEnabled:enabled];
187+
} else if ([group isEqualToString:@"ctt"]) {
188+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_TRAFFIC isEnabled:enabled];
189+
} else if ([group isEqualToString:@"transit"]) {
190+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_TRANSIT isEnabled:enabled];
191+
} else if ([group isEqualToString:@"bike"]) {
192+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_BICYCLE isEnabled:enabled];
193+
} else if ([group isEqualToString:@"mountain"]) {
194+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_MOUNTAIN isEnabled:enabled];
195+
} else if ([group isEqualToString:@"landparcel"]) {
196+
[((RNNaverMapView *)view).mapView setLayerGroup:NMF_LAYER_GROUP_CADASTRAL isEnabled:enabled];
197+
}
198+
}
199+
}];
200+
}
201+
175202
RCT_EXPORT_METHOD(animateToCoordinate:(nonnull NSNumber *)reactTag
176203
withCoord: (NMGLatLng *) coord
177204
)

0 commit comments

Comments
 (0)