diff --git a/.github/workflows/pull_request_test.yml b/.github/workflows/pull_request_test.yml index 351c85a4..596769ec 100644 --- a/.github/workflows/pull_request_test.yml +++ b/.github/workflows/pull_request_test.yml @@ -3,25 +3,33 @@ name: PullRequestTest on: pull_request: branches: - - release + - dev + jobs: build_test: - runs-on: macos-latest + runs-on: macos-13 steps: - uses: actions/checkout@v2 - - name: Setup Xcode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: "14.2.0" - - name: Bring ignored files uses: actions/checkout@v3 with: - repository: Pepsi-Club/BusComing-ignored + repository: Pepsi-Club/WhereMyBus-ignored path: XCConfig/ token: ${{ secrets.ACTION_TOKEN }} - + + - name: Setup Xcode version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: "14.3" + + - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf + with: + swift-version: "5.8.0" + + - name: Get swift version + run: swift --version + - name: Install Tuist run: curl -Ls https://install.tuist.io|bash diff --git a/.github/workflows/upload_testflight.yml b/.github/workflows/upload_testflight.yml index 30a7dc48..2a6bcd03 100644 --- a/.github/workflows/upload_testflight.yml +++ b/.github/workflows/upload_testflight.yml @@ -1,12 +1,13 @@ name: UploadTestflight on: - push: + pull_request: branches: - - release + - main + jobs: upload_testflight: - runs-on: macos-latest + runs-on: macos-13 steps: - uses: actions/checkout@v2 @@ -15,18 +16,26 @@ jobs: key: ${{ secrets.SSH_KEY }} known_hosts: ${{ secrets.KNOWN_HOSTS }} - - name: Setup Xcode version - uses: maxim-lobanov/setup-xcode@v1 - with: - xcode-version: "14.2.0" - - name: Bring ignored files uses: actions/checkout@v3 with: - repository: Pepsi-Club/BusComing-ignored + repository: Pepsi-Club/WhereMyBus-ignored path: XCConfig/ token: ${{ secrets.ACTION_TOKEN }} + - name: Move GoogleService Plist + run: | + mv XCConfig/GoogleService-Info.plist Projects/App/Resources/ + + - name: Setup Xcode version + uses: maxim-lobanov/setup-xcode@v1 + with: + xcode-version: "14.3" + + - uses: swift-actions/setup-swift@65540b95f51493d65f5e59e97dcef9629ddf11bf + with: + swift-version: "5.8.0" + - name: Install Tuist run: curl -Ls https://install.tuist.io|bash @@ -47,7 +56,8 @@ jobs: env: KEYCHAIN_NAME: ${{ secrets.KEYCHAIN_NAME }} KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} APP_STORE_KEY_ID: ${{ secrets.APP_STORE_KEY_ID }} APP_STORE_ISSUER_ID: ${{ secrets.APP_STORE_ISSUER_ID }} APP_STORE_PRIVATE_KEY: ${{ secrets.APP_STORE_PRIVATE_KEY }} + MATCH_URL: ${{ secrets.MATCH_URL }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} diff --git a/.gitignore b/.gitignore index bbd4005f..110a6866 100644 --- a/.gitignore +++ b/.gitignore @@ -143,7 +143,7 @@ Derived/ Tuist/Dependencies # PList -**/*.plist +Projects/**/*.plist # XCConfig XCConfig/ @@ -157,4 +157,7 @@ XCConfig/ # Package.resolved # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata # hence it is not needed unless you have added a package configuration file to your project -# .swiftpm \ No newline at end of file +# .swiftpm + +# CocoaPods +Pods/ \ No newline at end of file diff --git a/.swiftlint.yml b/.swiftlint.yml index d9a15cf9..9b0bd349 100644 --- a/.swiftlint.yml +++ b/.swiftlint.yml @@ -1,9 +1,11 @@ -included: - - Projects excluded: # 린트 과정에서 무시할 파일 경로. `included`보다 우선순위 높음 - Projects/App/Sources/AppDelegate.swift - Projects/App/Sources/SceneDelegate.swift + - Projects/App/Tests/** + - Projects/Core/Sources/Extension/String+.swift - Projects/Feature/**/AppDelegate.swift + - Projects/Feature/**/SceneDelegate.swift + - Projects/FeatureDependency/Sources/Mock/** - Tuist - Derived - Plugins @@ -14,11 +16,14 @@ identifier_name: error: 3 excluded: # 제외할 문자열 목록 - f + - vc + - vm + - o function_body_length: warning: 150 error: 300 type_body_length: - warning: 300 + warning: 400 error: 500 file_length: warning: 1000 @@ -30,5 +35,6 @@ disabled_rules: # 제외하고 싶은 룰 - trailing_whitespace - type_name # 타입명에 _가 들어가면 경고 - trailing_comma # 배열 마지막 아이템에 ,가 붙으면 경고 + - nesting # 중첩타입 opt_in_rules: - empty_string diff --git a/.tuist-version b/.tuist-version index 1c92f6b1..0f414fd3 100644 --- a/.tuist-version +++ b/.tuist-version @@ -1 +1 @@ -3.26.0 \ No newline at end of file +3.28.0 \ No newline at end of file diff --git a/Document/DependencyGraph/graph.png b/Document/DependencyGraph/graph.png new file mode 100644 index 00000000..b199ee21 Binary files /dev/null and b/Document/DependencyGraph/graph.png differ diff --git a/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png b/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png new file mode 100644 index 00000000..3b586698 Binary files /dev/null and b/Document/ko/iPhone 15 Pro-0_EmptyFavorites.png differ diff --git a/Document/ko/iPhone 15 Pro-1_Favorites.png b/Document/ko/iPhone 15 Pro-1_Favorites.png new file mode 100644 index 00000000..89230c91 Binary files /dev/null and b/Document/ko/iPhone 15 Pro-1_Favorites.png differ diff --git a/Document/ko/iPhone 15 Pro-2_RecentSearch.png b/Document/ko/iPhone 15 Pro-2_RecentSearch.png new file mode 100644 index 00000000..f907eb86 Binary files /dev/null and b/Document/ko/iPhone 15 Pro-2_RecentSearch.png differ diff --git a/Document/ko/iPhone 15 Pro-3_Search.png b/Document/ko/iPhone 15 Pro-3_Search.png new file mode 100644 index 00000000..3a1e03b6 Binary files /dev/null and b/Document/ko/iPhone 15 Pro-3_Search.png differ diff --git a/Document/ko/iPhone 15 Pro-4_BusStop.png b/Document/ko/iPhone 15 Pro-4_BusStop.png new file mode 100644 index 00000000..3118609b Binary files /dev/null and b/Document/ko/iPhone 15 Pro-4_BusStop.png differ diff --git a/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png b/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png new file mode 100644 index 00000000..7ff46bed Binary files /dev/null and b/Document/ko/iPhone 8 Plus-0_EmptyFavorites.png differ diff --git a/Document/ko/iPhone 8 Plus-1_Favorites.png b/Document/ko/iPhone 8 Plus-1_Favorites.png new file mode 100644 index 00000000..71da7bcc Binary files /dev/null and b/Document/ko/iPhone 8 Plus-1_Favorites.png differ diff --git a/Document/ko/iPhone 8 Plus-2_RecentSearch.png b/Document/ko/iPhone 8 Plus-2_RecentSearch.png new file mode 100644 index 00000000..cb448ed4 Binary files /dev/null and b/Document/ko/iPhone 8 Plus-2_RecentSearch.png differ diff --git a/Document/ko/iPhone 8 Plus-3_Search.png b/Document/ko/iPhone 8 Plus-3_Search.png new file mode 100644 index 00000000..429be754 Binary files /dev/null and b/Document/ko/iPhone 8 Plus-3_Search.png differ diff --git a/Document/ko/iPhone 8 Plus-4_BusStop.png b/Document/ko/iPhone 8 Plus-4_BusStop.png new file mode 100644 index 00000000..b24c29ae Binary files /dev/null and b/Document/ko/iPhone 8 Plus-4_BusStop.png differ diff --git a/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png b/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png new file mode 100644 index 00000000..7b1eb9a7 Binary files /dev/null and b/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png differ diff --git a/Document/ko/iPhone_15_Pro-1_Favorites.png b/Document/ko/iPhone_15_Pro-1_Favorites.png new file mode 100644 index 00000000..b623a076 Binary files /dev/null and b/Document/ko/iPhone_15_Pro-1_Favorites.png differ diff --git a/Document/ko/iPhone_15_Pro-2_RecentSearch.png b/Document/ko/iPhone_15_Pro-2_RecentSearch.png new file mode 100644 index 00000000..5a38951a Binary files /dev/null and b/Document/ko/iPhone_15_Pro-2_RecentSearch.png differ diff --git a/Document/ko/iPhone_15_Pro-3_Search.png b/Document/ko/iPhone_15_Pro-3_Search.png new file mode 100644 index 00000000..be3d35e5 Binary files /dev/null and b/Document/ko/iPhone_15_Pro-3_Search.png differ diff --git a/Document/ko/iPhone_15_Pro-4_BusStop.png b/Document/ko/iPhone_15_Pro-4_BusStop.png new file mode 100644 index 00000000..e936a9ca Binary files /dev/null and b/Document/ko/iPhone_15_Pro-4_BusStop.png differ diff --git a/Document/ko/iPhone_15_Pro-5_NearMap.png b/Document/ko/iPhone_15_Pro-5_NearMap.png new file mode 100644 index 00000000..e55a048b Binary files /dev/null and b/Document/ko/iPhone_15_Pro-5_NearMap.png differ diff --git a/Document/ko/iPhone_15_Pro-6_RegularAlarm.png b/Document/ko/iPhone_15_Pro-6_RegularAlarm.png new file mode 100644 index 00000000..b1c4aeb0 Binary files /dev/null and b/Document/ko/iPhone_15_Pro-6_RegularAlarm.png differ diff --git a/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png b/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png new file mode 100644 index 00000000..d7d406df Binary files /dev/null and b/Document/ko/iPhone_8_Plus-0_EmptyFavorites.png differ diff --git a/Document/ko/iPhone_8_Plus-1_Favorites.png b/Document/ko/iPhone_8_Plus-1_Favorites.png new file mode 100644 index 00000000..e034e094 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-1_Favorites.png differ diff --git a/Document/ko/iPhone_8_Plus-2_RecentSearch.png b/Document/ko/iPhone_8_Plus-2_RecentSearch.png new file mode 100644 index 00000000..0c2622b1 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-2_RecentSearch.png differ diff --git a/Document/ko/iPhone_8_Plus-3_Search.png b/Document/ko/iPhone_8_Plus-3_Search.png new file mode 100644 index 00000000..412313c0 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-3_Search.png differ diff --git a/Document/ko/iPhone_8_Plus-4_BusStop.png b/Document/ko/iPhone_8_Plus-4_BusStop.png new file mode 100644 index 00000000..278a13c7 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-4_BusStop.png differ diff --git a/Document/ko/iPhone_8_Plus-5_NearMap.png b/Document/ko/iPhone_8_Plus-5_NearMap.png new file mode 100644 index 00000000..a3ee71d4 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-5_NearMap.png differ diff --git a/Document/ko/iPhone_8_Plus-6_RegularAlarm.png b/Document/ko/iPhone_8_Plus-6_RegularAlarm.png new file mode 100644 index 00000000..f8f37bb0 Binary files /dev/null and b/Document/ko/iPhone_8_Plus-6_RegularAlarm.png differ diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist new file mode 100644 index 00000000..3088f7c9 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/Info.plist @@ -0,0 +1,42 @@ + + + + + AvailableLibraries + + + LibraryIdentifier + ios-arm64_i386_x86_64-simulator + LibraryPath + NMapsGeometry.framework + SupportedArchitectures + + arm64 + i386 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + LibraryIdentifier + ios-arm64_armv7 + LibraryPath + NMapsGeometry.framework + SupportedArchitectures + + arm64 + armv7 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h new file mode 100644 index 00000000..93f99b1a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGBounds.h @@ -0,0 +1,48 @@ +// +// NMGBounds.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPoint; + +/** + 지도에 보여지는 사각형 영역을 정의한 Bounds. + NMGBounds는 평면직교 좌표계에 대한 클래스입니다. + */ +NMG_EXPORT +@interface NMGBounds : NSObject + +@property (nonatomic, nonnull) NMGPoint *min; +@property (nonatomic, nonnull) NMGPoint *max; + +@property (nonatomic, readonly, nonnull) NMGPoint *center; +@property (nonatomic, readonly) double width; +@property (nonatomic, readonly) double height; + +@property (nonatomic, readonly) double minX; +@property (nonatomic, readonly) double minY; +@property (nonatomic, readonly) double maxX; +@property (nonatomic, readonly) double maxY; + ++ (nonnull instancetype)bounds; ++ (nonnull instancetype)boundsWithMinX:(double)minX minY:(double)minY maxX:(double)maxX maxY:(double)maxY; ++ (nonnull instancetype)boundsWithMinX:(double)x minY:(double)y width:(double)width height:(double)height; ++ (nonnull instancetype)boundsWithMin:(nonnull NMGPoint *)min max:(nonnull NMGPoint *)max; + +- (BOOL)hasPoint:(nonnull NMGPoint *)point; +- (BOOL)hasBounds:(nonnull NMGBounds *)bounds; +- (BOOL)isIntersect:(nonnull NMGBounds *)bounds; +- (nullable NMGBounds *)intersectionWithBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result)); +- (nonnull NMGBounds *)expandToPoint:(nonnull NMGPoint *)point __attribute__((warn_unused_result)); +- (nonnull NMGBounds *)unionBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result)); + +@end + +static inline NMGBounds * _Nonnull NMGBoundsMake(double minX, double minY, double maxX, double maxY) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGBounds boundsWithMinX:minX minY:minY maxX:maxX maxY:maxY]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h new file mode 100644 index 00000000..1457de86 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGConstants.h @@ -0,0 +1,16 @@ +#import "NMGGeometry.h" + +#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI)) +#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) + +static const double NaN = 0.0 / 0.0; +static const double POSITIVE_INFINITY = 1.0 / 0.0; +static const double NEGATIVE_INFINITY = -1.0 / 0.0; + +static const double HALFPI = M_PI / 2; +static const double TWOPI = M_PI * 2; + +/** + 지구의 적도 반경. 미터 단위. + */ +const static double NMG_EARTH_RADIUS = 6378137; diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h new file mode 100644 index 00000000..3276cd62 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGGeometry.h @@ -0,0 +1,66 @@ +// +// NMGGeometry +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import + +#define NMG_EXPORT __attribute__((visibility ("default"))) + +#pragma mark NMGGeometry Protocol + +@class NMGLatLng; +@protocol NMGBoundable; + +@protocol NMGGeometry + +@property (nonatomic, readonly) BOOL isEmpty; +@property (nonatomic, readonly) BOOL isValid; +@property (nonatomic, readonly, nonnull, copy) NSString *description; + +@optional +@property (nonatomic, readonly, nonnull) id bounds; +@end + +@protocol NMGPointable +@optional +- (nonnull NMGLatLng *)toLatLng; +- (BOOL)isWithinCoverage; + +@end + +#pragma mark - NMGMultiPointable Protocol + +@protocol NMGMultiPointable + +@required +@property (nonatomic, readonly, nonnull) NSArray *points; +@property (nonatomic, readonly) NSUInteger count; +- (void)addPoint:(nonnull id)point; +- (nullable id)pointAtIndex:(NSUInteger)index; + +@optional +- (void)insertPoint:(nonnull id)point atIndex:(NSUInteger)index; +- (void)removePointAtIndex:(NSUInteger)index; +- (void)removePoint:(nonnull id)point; + +- (void)addCoordinate:(CLLocationCoordinate2D)coordinate; +- (void)insertCoordinate:(CLLocationCoordinate2D)coordinate atIndex:(NSUInteger)index; + +@end + +#pragma mark - NMGBoundable Protocol + +@protocol NMGBoundable + +- (BOOL)hasPoint:(nonnull id)point; +- (BOOL)hasBounds:(nonnull id)bounds; +- (BOOL)isIntersect:(nonnull id)bounds; +- (nullable id)intersectionWithBounds:(nonnull id)bounds __attribute__((warn_unused_result)); +- (nonnull id)expandToPoint:(nonnull id)point __attribute__((warn_unused_result)); +- (nonnull id)unionBounds:(nonnull id)bounds __attribute__((warn_unused_result)); + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h new file mode 100644 index 00000000..d149b97a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLng.h @@ -0,0 +1,132 @@ +// +// NMGLatLng.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLatLngBounds; +@class NMGXyz; + +/** + 최소 위도. 도 단위. + */ +const static double NMG_LAT_LNG_MINIMUM_LATITUDE = -90; + +/** + 최대 위도. 도 단위. + */ +const static double NMG_LAT_LNG_MAXIMUM_LATITUDE = 90; + +/** + 최소 경도. 도 단위. + */ +const static double NMG_LAT_LNG_MINIMUM_LONGITUDE = -180; + +/** + 최대 경도. 도 단위. + */ +const static double NMG_LAT_LNG_MAXIMUM_LONGITUDE = 180; + +/** + 위경도 좌표를 나타내는 클래스. + + `CLLocationCoordinate2D`과 달리 위도와 경도를 `double`형으로 표현합니다. + */ +NMG_EXPORT +@interface NMGLatLng : NSObject + +/** + 위도. 도 단위. + */ +@property (nonatomic) double lat; + +/** + 경도. 도 단위. + */ +@property (nonatomic) double lng; + +/** + 위경도 좌표로 나타낼 수 있는 커버리지 영역. 전 세계 + + @return `NMGLatLngBounds` 객체. + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + * 유효하지 않은(`isValid`가 `NO`인) 좌표를 나타내는 상수. + */ ++ (nonnull NMGLatLng *)invalid; + +/** + 위도와 경도가 `DBL_MAX`인 객체를 생성합니다. + + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLng; + +/** + 위도와 경도로 객체를 생성합니다. + + @param lat 위도. + @param lng 경도. + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLngWithLat:(double)lat lng:(double)lng; + +/** + `CLLocationCoordinate2D`로부터 객체를 생성합니다. + + @param coordinate CLLocationCoordinate2D 객체. + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLngFromCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + @return self. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +/** + 이 좌표의 `lng`를 [`NMG_LAT_LNG_MINIMUM_LONGITUDE`, `NMG_LAT_LNG_MAXIMUM_LONGITUDE`] 범위로 래핑한 좌표를 + 반환합니다. `lng` 이미 해당 범위에 속해 있을 경우 새로운 객체가 만들어지지 않고 이 객체가 + 반환됩니다. + + @return 경도가 래핑된 좌표 객체. + */ +- (nonnull NMGLatLng *)wrap; + +/** + 다른 좌표와의 거리를 반환합니다. + + @param other 거리를 잴 다른 좌표. + @return 좌표 간의 거리. 미터 단위. + */ +- (double)distanceTo:(nonnull NMGLatLng *)other __attribute__((warn_unused_result)); + +/** + 이 좌표로부터 북쪽으로 `northMeter`미터, 동쪽으로 `eastMeter`미터만큼 떨어진 좌표를 + 반환합니다. + + @param northMeter 북쪽 방향 거리. 미터 단위. + @param eastMeter 동쪽 방향 거리. 미터 단위. + @return 좌표. + */ +- (nonnull NMGLatLng *)offset:(double)northMeter withEastMeter:(double)eastMeter __attribute__((warn_unused_result)); + +@end + +static inline NMGLatLng * _Nonnull NMGLatLngMake(double lat, double lng) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGLatLng latLngWithLat:lat lng:lng]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h new file mode 100644 index 00000000..f79bfad2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLatLngBounds.h @@ -0,0 +1,157 @@ +// +// NMGLatLngBounds.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLatLng; + +/** + 남서쪽과 북동쪽 두 위경도 좌표로 이루어진 + 최소 경계 사각형 + 영역을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGLatLngBounds : NSObject + +/** + 남서쪽 좌표. + */ +@property (nonatomic, nonnull) NMGLatLng *southWest; + +/** + 북동쪽 좌표. + */ +@property (nonatomic, nonnull) NMGLatLng *northEast; + +/** + 영역의 중심점 좌표. + */ +@property (nonatomic, readonly, nonnull) NMGLatLng *center; + +/** + 영역의 위도(세로) 폭. 도 단위. + */ +@property (nonatomic, readonly) double latSpan; + +/** + 영역의 경도(가로) 폭. 도 단위. + */ +@property (nonatomic, readonly) double lngSpan; + +/** + 최남단의 위도. + */ +@property (nonatomic, readonly) double southWestLat; + +/** + 최서단의 경도. + */ +@property (nonatomic, readonly) double southWestLng; + +/** + 최북단의 위도. + */ +@property (nonatomic, readonly) double northEastLat; + +/** + 최동단의 위도. + */ +@property (nonatomic, readonly) double northEastLng; + +/** + 영역을 배열로 변환합니다. 배열의 크기는 `2`이며, 각 원소는 순서대로 영역의 남서쪽, 북동쪽 좌표를 + 나타냅니다. + */ +@property (nonatomic, readonly, nonnull) NSArray *boundsLatLngs; + ++ (nonnull instancetype)bounds; + +/** + `latLngs`의 좌표를 모두 포함하는 최소한의 `NMGLatLngBounds` 객체를 생성합니다. + + @param latLngs 포함할 좌표들 + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsWithLatLngs:(nonnull NSArray *)latLngs; + +/** +* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다. + + @param southWest 남서쪽 좌표. + @param northEast 북동쪽 좌표. + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsSouthWest:(nonnull NMGLatLng *)southWest northEast:(nonnull NMGLatLng *)northEast; + +/** +* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다. + + @param southWestLat 남서쪽 좌표의 위도 + @param southWestLng 남서쪽 좌표의 경도 + @param northEastLat 북동쪽 좌표의 위도 + @param northEastLng 북동쪽 좌표의 경도 + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsWithSouthWestLat:(double)southWestLat southWestLng:(double)southWestLng northEastLat:(double)northEastLat northEastLng:(double)northEastLng; + +/** + 영역이 좌표를 포함하는지 여부를 반환합니다. + + @param point 포함되는지 확인할 좌표. + @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)hasPoint:(nonnull NMGLatLng *)point; + +/** + 영역이 다른 영역을 포함하는지 여부를 반환합니다. + + @param bounds 포함되는지 확인할 영역. + @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)hasBounds:(nonnull NMGLatLngBounds *)bounds; + +/** + 영역이 다른 영역과 교차하는지 여부를 반환합니다. + + @param bounds 교차하는지 확인할 영역. + @return 교차할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isIntersect:(nonnull NMGLatLngBounds *)bounds; + +/** + 영역과 다른 영역 간의 교차 영역을 반환합니다. + + @param bounds 다른 영역. + @return 교차 영역. 두 영역이 교차하지 않을 경우 `nil`. + */ +- (nullable NMGLatLngBounds *)intersectionWithBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result)); + +/** + `point`를 포함하도록 확장한 영역을 반환합니다. 영역이 이미 `point`를 포함하고 있을 경우 + 새로운 객체가 만들어지지 않고 이 객체가 반환됩니다. + + @param point 포함할 좌표. + @return 좌표가 포함된 영역. + */ +- (nonnull NMGLatLngBounds *)expandToPoint:(nonnull NMGLatLng *)point __attribute__((warn_unused_result)); + +/** + 현재 영역과 다른 영역을 모두 포함하는 최소한의 영역을 구합니다. + + @param bounds 다른 영역. + @return 두 영역을 모두 포함하는 영역. + */ +- (nonnull NMGLatLngBounds *)unionBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result)); + +@end + +static inline NMGLatLngBounds * _Nonnull NMGLatLngBoundsMake(double southWestLat, double southWestLng, double northEastLat, double northEastLng) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGLatLngBounds latLngBoundsWithSouthWestLat:southWestLat southWestLng:southWestLng northEastLat:northEastLat northEastLng:northEastLng]; +} + + diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h new file mode 100644 index 00000000..066bacf3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGLineString.h @@ -0,0 +1,50 @@ +// +// NMGLineString.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 3.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGSegment; + +/** + 라인스트링을 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGLineString<__covariant PointType> : NSObject + +/** + 라인스트링을 구성하는 점의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *points; + +/** + 라인스트링을 구성하는 NMGSegment의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *segments; + +/** + 라인스트링이 리니어 링의 특성을 만족하는지 여부. + + 첫 번째 점과 마지막 점이 같을 경우 `YES`입니다. + */ +@property (nonatomic, readonly) BOOL isRing; + ++ (nonnull instancetype)lineString; ++ (nonnull instancetype)lineStringWithPoints:(nonnull NSArray *)points; +- (nonnull instancetype)initWithPoints:(nonnull NSArray *)points; + +- (nullable PointType)pointAtIndex:(NSUInteger)index; +- (nullable NMGSegment *)segmentAtIndex:(NSUInteger)index; + +- (void)addPoint:(nonnull PointType)point; +- (void)insertPoint:(nonnull PointType)point atIndex:(NSUInteger)index; +- (void)removePointAtIndex:(NSUInteger)index; +- (void)removePoint:(nonnull PointType)point; + +- (void)convertRing; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h new file mode 100644 index 00000000..328a375a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGMultiPolygon.h @@ -0,0 +1,29 @@ +// +// NMGMultiPolygon.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 3. 9.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPolygon<__covariant PointType>; + +/** + 지도상의 면을 표현하는 Polygon의 집합체. + */ +NMG_EXPORT +@interface NMGMultiPolygon<__covariant PointType> : NSObject + +@property (nonatomic, readonly, nonnull) NSArray *> *polygons; + ++ (nonnull NMGMultiPolygon *)multiPolygon; ++ (nonnull NMGMultiPolygon *)multiPolygonWithPolygons:(nonnull NSArray *> *)polygons; + +- (nonnull instancetype)initWithPolygons:(nonnull NSArray *> *)polygons; +- (void)addPolygon:(nonnull NMGPolygon *)polygon; +- (void)insertPolygon:(nonnull NMGPolygon *)polygon AtIndex:(NSInteger)index; +- (void)removePolygonAtIndex:(NSInteger)index; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h new file mode 100644 index 00000000..8ce52251 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPoint.h @@ -0,0 +1,37 @@ +// +// NMGPoint.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 1. 11.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +/** + 평면 직교 좌표계상의 한 점을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGPoint : NSObject + +@property (nonatomic) double x; +@property (nonatomic) double y; + ++ (nonnull instancetype)point; ++ (nonnull instancetype)pointWithX:(double)x y:(double)y; + +- (nonnull instancetype)initWithX:(double)x y:(double)y; + +/** + 다른 좌표와의 거리를 구합니다. + + @param other 다른 좌표. + @return 거리. 미터 단위. + */ +- (double)distanceTo:(nonnull NMGPoint *)other; + +@end + +static inline NMGPoint * _Nonnull NMGPointMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGPoint pointWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h new file mode 100644 index 00000000..d0fe7f0a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGPolygon.h @@ -0,0 +1,44 @@ +// +// NMGPolygon.h +// NMGeometryFramework +// +// Created by Kali on 2016. 10. 13.. +// Copyright © 2016년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLineString<__covariant PointType>; + +/** + 폴리곤을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGPolygon<__covariant PointType> : NSObject + +/** + 외곽선. + */ +@property (nonatomic, nonnull) NMGLineString *exteriorRing; + +/** + 내부 홀의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *> *interiorRings; + +/** + 내부 홀의 개수. + */ +@property (nonatomic, readonly) NSUInteger interiorRingCount; + ++ (nonnull NMGPolygon *)polygon; ++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing; ++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings; + +- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing; +- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings; +- (void)addInteriorRing:(nonnull NMGLineString *)ring; +- (void)removeInteriorRingAtIndex:(NSUInteger)index; + +@end + diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h new file mode 100644 index 00000000..36fddd52 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGSegment.h @@ -0,0 +1,32 @@ +// +// NMGSegment.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import +#import "NMGGeometry.h" + +/** + 두 점의 집합. + PointType에 따라 Point, LatLng로 동작합니다. + */ +NMG_EXPORT +@interface NMGSegment<__covariant PointType> : NSObject + +/** + 시작점. + */ +@property (nonatomic, nullable) PointType from; +/** + 끝점. + */ +@property (nonatomic, nullable) PointType to; + ++ (nonnull instancetype)segment; ++ (nonnull instancetype)segmentFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint; +- (nonnull instancetype)initWithFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h new file mode 100644 index 00000000..5a95fc1f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGTm128.h @@ -0,0 +1,94 @@ +#import "NMGGeometry.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x`의 최솟값. + */ +const static double NMG_TM128_MINIMUM_X = 30408.747066328477; + +/** + 커버리지 내 `y`의 최솟값. + */ +const static double NMG_TM128_MINIMUM_Y = 158674.67403835512; + +/** + 커버리지 내 `x`의 최댓값. + */ +const static double NMG_TM128_MAXIMUM_X = 749976.0946343569; + +/** + 커버리지 내 `y`의 최댓값. + */ +const static double NMG_TM128_MAXIMUM_Y = 643904.8888573726; + +/** + TM-128 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGTm128 : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다. + southWest(33.96, 124.0) + northEast(38.33, 132.0) + + @return NMGLatLngBounds 객체 + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)tm128; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표 + @param y 좌표 + @return NMGTm128 객체 + */ ++ (nonnull instancetype)tm128WithX:(double)x y:(double)y; + +/** + 위경도 좌표를 UTM-K 좌표로 변환합니다. + + @param latLng 위경도 좌표 + @return NMGTm128 객체 + */ ++ (nonnull instancetype)tm128FromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 좌표를 위경도 좌표로 변환합니다. + + @return 변환된 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +@end + +static inline NMGTm128 * _Nonnull NMGTm128Make(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGTm128 tm128WithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h new file mode 100644 index 00000000..59d6f459 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtils.h @@ -0,0 +1,69 @@ +// +// NMGUtils.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPoint; +@class NMGLatLng; +@class NMGLineString; + +/** + 지오메트리와 관련된 유틸리티 기능을 제공하는 클래스. + */ +NMG_EXPORT +@interface NMGUtils : NSObject + +/** + `line`에 `point`가 포함되어 있는지 여부를 반환합니다. + + @param point 확인할 점. + @param line 확인할 라인스트링. + @return 라인스트링이 점을 포함하고 있는지 여부. + */ ++ (BOOL)isContainPoint:(nonnull NMGPoint *)point inLineString:(nonnull NMGLineString *)line; + +/** + 라인스트링 안에 위경도 좌표가 포함되어 있는지 확인합니다. + + @param latLng 확인할 위경도 좌표. + @param line 확인할 라인스트링. + @return 라인스트링이 위경도 좌표을 포함하고 있는지 여부. + */ ++ (BOOL)isContainLatLng:(nonnull NMGLatLng *)latLng inLineString:(nonnull NMGLineString *)line; + +/** + 라인스트링의 길이를 계산합니다. + + @param line 라인스트링. + @return 라인스트링 길이. + */ ++ (double)lengthForLineString:(nonnull NMGLineString *)line; + +/** + `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나 + `max`보다 클 경우 값이 순환된다. + + @param value 래핑할 값. + @param min 최솟값. + @param max 최댓값. + @return 래핑된 값. + */ ++ (double)wrap:(double)value min:(double)min max:(double)max; + +/** + `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나 + `max`보다 클 경우 값이 순환된다. + + @param value 래핑할 값. + @param min 최솟값. + @param max 최댓값. + @return 래핑된 값. + */ ++ (int)wrapi:(int)value min:(int)min max:(int)max; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h new file mode 100644 index 00000000..7b96f86c --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGUtmk.h @@ -0,0 +1,94 @@ +#import "NMGGeometry.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x`의 최솟값. + */ +const static double NMG_UTMK_MINIMUM_X = 283038.5; + +/** + 커버리지 내 `y`의 최솟값. + */ +const static double NMG_UTMK_MINIMUM_Y = 1248041.6; + +/** + 커버리지 내 `x`의 최댓값. + */ +const static double NMG_UTMK_MAXIMUM_X = 1937760.8; + +/** + 커버리지 내 `y`의 최댓값. + */ +const static double NMG_UTMK_MAXIMUM_Y = 2619635; + +/** + UTMK 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGUtmk : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다. + southWest(31.0, 120.0) + northEast(43.0, 139.0) + + @return NMGLatLngBounds 객체 + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmk; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표 + @param y 좌표 + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmkWithX:(double)x y:(double)y; + +/** + 위경도 좌표를 UTM-K 좌표로 변환합니다. + + @param latLng 위경도 좌표 + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmkFromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 좌표를 위경도 좌표로 변환합니다. + + @return 변환된 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +@end + +static inline NMGUtmk * _Nonnull NMGUtmkMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGUtmk utmkWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h new file mode 100644 index 00000000..b5acc81b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h @@ -0,0 +1,121 @@ +#import "NMGGeometry.h" +#import "NMGConstants.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x` 및 `y`의 최솟값. + */ +const static double NMG_WEB_MERCATOR_MINIMUM_XY = -M_PI * NMG_EARTH_RADIUS; + +/** + 커버리지 내 `x` 및 `y`의 최댓값. + */ +const static double NMG_WEB_MERCATOR_MAXIMUM_XY = M_PI * NMG_EARTH_RADIUS; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 최소 위도. + */ +const static double NMG_WEB_MERCATOR_MINIMUM_LATITUDE = -85.05112877980659; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 최대 위도. + */ +const static double NMG_WEB_MERCATOR_MAXIMUM_LATITUDE = 85.05112877980659; + +/** + 웹 메르카토르 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGWebMercatorCoord : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 커버리지 영역. + + @return `NMGLatLngBounds` 객체. + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)webMercatorCoord; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표. + @param y 좌표. + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)coordWithX:(double)x y:(double)y; + +/** + 위경도 좌표를 웹 메르카토르 좌표로 변환합니다. + + @param latLng 위경도 좌표. + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)coordFromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 웹 메르카토르 좌표를 위경도 좌표로 변환합니다. + + @return 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +/** + 다른 좌표와의 거리를 구합니다. `NMGWebMercatorCoord` 좌표는 메르카토르 도법을 사용하므로 오차가 클 수 + 있습니다. 지리적으로 보다 정밀한 값이 필요한 경우 `LatLng#distanceTo(LatLng)`를 사용하십시오. + + @param other 다른 좌표. + @return 거리. 미터 단위. + @see `NMGLatLng` `-distanceTo:(NMGLatLng *)` + */ +- (double)distanceTo:(nonnull NMGWebMercatorCoord *)other; + +/** + 다른 좌표와의 거리의 제곱을 구합니다. 거리 비교의 목적으로 + `-distanceTo:(NMGWebMercatorCoord *)`에서 제곱근까지 구할 필요가 없을 때 사용하면 좋습니다. + + @param other 다른 좌표. + @return 거리. 미터 단위. + */ +- (double)squareDistanceTo:(nonnull NMGWebMercatorCoord *)other; + +/** + 다른 좌표와의 각도를 구합니다. 다른 좌표가 현재 좌표의 정북 방향에 있을 경우 0도이며, 시계 방향으로 + 각도가 증가합니다. + + @param other 다른 좌표. + @return 각도. 도 단위. + */ +- (double)bearingTo:(nonnull NMGWebMercatorCoord *)other; + +@end + +static inline NMGWebMercatorCoord * _Nonnull NMGWebMercatorCoordMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGWebMercatorCoord coordWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h new file mode 100644 index 00000000..745ae894 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Headers/NMapsGeometry.h @@ -0,0 +1,32 @@ +// +// NMapsGeometry.h +// NMapsGeometry +// +// Created by Kali on 2016. 10. 13.. +// Copyright © 2016년 NAVER. All rights reserved. +// + +#import + +//! Project version number for NMapsGeometryFramework. +FOUNDATION_EXPORT double NMapsGeometryVersionNumber; + +//! Project version string for NMapsGeometryFramework. +FOUNDATION_EXPORT const unsigned char NMapsGeometryVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + +#import "NMGGeometry.h" +#import "NMGSegment.h" +#import "NMGBounds.h" +#import "NMGLatLngBounds.h" +#import "NMGPoint.h" +#import "NMGLatLng.h" +#import "NMGLineString.h" +#import "NMGPolygon.h" +#import "NMGMultiPolygon.h" +#import "NMGUtils.h" +#import "NMGUtmk.h" +#import "NMGTm128.h" +#import "NMGWebMercatorCoord.h" diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist new file mode 100644 index 00000000..e5c3700e Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Info.plist differ diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap new file mode 100644 index 00000000..96a5eb33 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module NMapsGeometry { + umbrella header "NMapsGeometry.h" + + export * + module * { export * } +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry new file mode 100755 index 00000000..316621b5 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_armv7/NMapsGeometry.framework/NMapsGeometry differ diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h new file mode 100644 index 00000000..93f99b1a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGBounds.h @@ -0,0 +1,48 @@ +// +// NMGBounds.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPoint; + +/** + 지도에 보여지는 사각형 영역을 정의한 Bounds. + NMGBounds는 평면직교 좌표계에 대한 클래스입니다. + */ +NMG_EXPORT +@interface NMGBounds : NSObject + +@property (nonatomic, nonnull) NMGPoint *min; +@property (nonatomic, nonnull) NMGPoint *max; + +@property (nonatomic, readonly, nonnull) NMGPoint *center; +@property (nonatomic, readonly) double width; +@property (nonatomic, readonly) double height; + +@property (nonatomic, readonly) double minX; +@property (nonatomic, readonly) double minY; +@property (nonatomic, readonly) double maxX; +@property (nonatomic, readonly) double maxY; + ++ (nonnull instancetype)bounds; ++ (nonnull instancetype)boundsWithMinX:(double)minX minY:(double)minY maxX:(double)maxX maxY:(double)maxY; ++ (nonnull instancetype)boundsWithMinX:(double)x minY:(double)y width:(double)width height:(double)height; ++ (nonnull instancetype)boundsWithMin:(nonnull NMGPoint *)min max:(nonnull NMGPoint *)max; + +- (BOOL)hasPoint:(nonnull NMGPoint *)point; +- (BOOL)hasBounds:(nonnull NMGBounds *)bounds; +- (BOOL)isIntersect:(nonnull NMGBounds *)bounds; +- (nullable NMGBounds *)intersectionWithBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result)); +- (nonnull NMGBounds *)expandToPoint:(nonnull NMGPoint *)point __attribute__((warn_unused_result)); +- (nonnull NMGBounds *)unionBounds:(nonnull NMGBounds *)bounds __attribute__((warn_unused_result)); + +@end + +static inline NMGBounds * _Nonnull NMGBoundsMake(double minX, double minY, double maxX, double maxY) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGBounds boundsWithMinX:minX minY:minY maxX:maxX maxY:maxY]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h new file mode 100644 index 00000000..1457de86 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGConstants.h @@ -0,0 +1,16 @@ +#import "NMGGeometry.h" + +#define RADIANS_TO_DEGREES(radians) ((radians) * (180.0 / M_PI)) +#define DEGREES_TO_RADIANS(angle) ((angle) / 180.0 * M_PI) + +static const double NaN = 0.0 / 0.0; +static const double POSITIVE_INFINITY = 1.0 / 0.0; +static const double NEGATIVE_INFINITY = -1.0 / 0.0; + +static const double HALFPI = M_PI / 2; +static const double TWOPI = M_PI * 2; + +/** + 지구의 적도 반경. 미터 단위. + */ +const static double NMG_EARTH_RADIUS = 6378137; diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h new file mode 100644 index 00000000..3276cd62 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGGeometry.h @@ -0,0 +1,66 @@ +// +// NMGGeometry +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import + +#define NMG_EXPORT __attribute__((visibility ("default"))) + +#pragma mark NMGGeometry Protocol + +@class NMGLatLng; +@protocol NMGBoundable; + +@protocol NMGGeometry + +@property (nonatomic, readonly) BOOL isEmpty; +@property (nonatomic, readonly) BOOL isValid; +@property (nonatomic, readonly, nonnull, copy) NSString *description; + +@optional +@property (nonatomic, readonly, nonnull) id bounds; +@end + +@protocol NMGPointable +@optional +- (nonnull NMGLatLng *)toLatLng; +- (BOOL)isWithinCoverage; + +@end + +#pragma mark - NMGMultiPointable Protocol + +@protocol NMGMultiPointable + +@required +@property (nonatomic, readonly, nonnull) NSArray *points; +@property (nonatomic, readonly) NSUInteger count; +- (void)addPoint:(nonnull id)point; +- (nullable id)pointAtIndex:(NSUInteger)index; + +@optional +- (void)insertPoint:(nonnull id)point atIndex:(NSUInteger)index; +- (void)removePointAtIndex:(NSUInteger)index; +- (void)removePoint:(nonnull id)point; + +- (void)addCoordinate:(CLLocationCoordinate2D)coordinate; +- (void)insertCoordinate:(CLLocationCoordinate2D)coordinate atIndex:(NSUInteger)index; + +@end + +#pragma mark - NMGBoundable Protocol + +@protocol NMGBoundable + +- (BOOL)hasPoint:(nonnull id)point; +- (BOOL)hasBounds:(nonnull id)bounds; +- (BOOL)isIntersect:(nonnull id)bounds; +- (nullable id)intersectionWithBounds:(nonnull id)bounds __attribute__((warn_unused_result)); +- (nonnull id)expandToPoint:(nonnull id)point __attribute__((warn_unused_result)); +- (nonnull id)unionBounds:(nonnull id)bounds __attribute__((warn_unused_result)); + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h new file mode 100644 index 00000000..d149b97a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLng.h @@ -0,0 +1,132 @@ +// +// NMGLatLng.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLatLngBounds; +@class NMGXyz; + +/** + 최소 위도. 도 단위. + */ +const static double NMG_LAT_LNG_MINIMUM_LATITUDE = -90; + +/** + 최대 위도. 도 단위. + */ +const static double NMG_LAT_LNG_MAXIMUM_LATITUDE = 90; + +/** + 최소 경도. 도 단위. + */ +const static double NMG_LAT_LNG_MINIMUM_LONGITUDE = -180; + +/** + 최대 경도. 도 단위. + */ +const static double NMG_LAT_LNG_MAXIMUM_LONGITUDE = 180; + +/** + 위경도 좌표를 나타내는 클래스. + + `CLLocationCoordinate2D`과 달리 위도와 경도를 `double`형으로 표현합니다. + */ +NMG_EXPORT +@interface NMGLatLng : NSObject + +/** + 위도. 도 단위. + */ +@property (nonatomic) double lat; + +/** + 경도. 도 단위. + */ +@property (nonatomic) double lng; + +/** + 위경도 좌표로 나타낼 수 있는 커버리지 영역. 전 세계 + + @return `NMGLatLngBounds` 객체. + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + * 유효하지 않은(`isValid`가 `NO`인) 좌표를 나타내는 상수. + */ ++ (nonnull NMGLatLng *)invalid; + +/** + 위도와 경도가 `DBL_MAX`인 객체를 생성합니다. + + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLng; + +/** + 위도와 경도로 객체를 생성합니다. + + @param lat 위도. + @param lng 경도. + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLngWithLat:(double)lat lng:(double)lng; + +/** + `CLLocationCoordinate2D`로부터 객체를 생성합니다. + + @param coordinate CLLocationCoordinate2D 객체. + @return NMGLatLng 객체. + */ ++ (nonnull instancetype)latLngFromCoordinate:(CLLocationCoordinate2D)coordinate; + +/** + @return self. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +/** + 이 좌표의 `lng`를 [`NMG_LAT_LNG_MINIMUM_LONGITUDE`, `NMG_LAT_LNG_MAXIMUM_LONGITUDE`] 범위로 래핑한 좌표를 + 반환합니다. `lng` 이미 해당 범위에 속해 있을 경우 새로운 객체가 만들어지지 않고 이 객체가 + 반환됩니다. + + @return 경도가 래핑된 좌표 객체. + */ +- (nonnull NMGLatLng *)wrap; + +/** + 다른 좌표와의 거리를 반환합니다. + + @param other 거리를 잴 다른 좌표. + @return 좌표 간의 거리. 미터 단위. + */ +- (double)distanceTo:(nonnull NMGLatLng *)other __attribute__((warn_unused_result)); + +/** + 이 좌표로부터 북쪽으로 `northMeter`미터, 동쪽으로 `eastMeter`미터만큼 떨어진 좌표를 + 반환합니다. + + @param northMeter 북쪽 방향 거리. 미터 단위. + @param eastMeter 동쪽 방향 거리. 미터 단위. + @return 좌표. + */ +- (nonnull NMGLatLng *)offset:(double)northMeter withEastMeter:(double)eastMeter __attribute__((warn_unused_result)); + +@end + +static inline NMGLatLng * _Nonnull NMGLatLngMake(double lat, double lng) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGLatLng latLngWithLat:lat lng:lng]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h new file mode 100644 index 00000000..f79bfad2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLatLngBounds.h @@ -0,0 +1,157 @@ +// +// NMGLatLngBounds.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLatLng; + +/** + 남서쪽과 북동쪽 두 위경도 좌표로 이루어진 + 최소 경계 사각형 + 영역을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGLatLngBounds : NSObject + +/** + 남서쪽 좌표. + */ +@property (nonatomic, nonnull) NMGLatLng *southWest; + +/** + 북동쪽 좌표. + */ +@property (nonatomic, nonnull) NMGLatLng *northEast; + +/** + 영역의 중심점 좌표. + */ +@property (nonatomic, readonly, nonnull) NMGLatLng *center; + +/** + 영역의 위도(세로) 폭. 도 단위. + */ +@property (nonatomic, readonly) double latSpan; + +/** + 영역의 경도(가로) 폭. 도 단위. + */ +@property (nonatomic, readonly) double lngSpan; + +/** + 최남단의 위도. + */ +@property (nonatomic, readonly) double southWestLat; + +/** + 최서단의 경도. + */ +@property (nonatomic, readonly) double southWestLng; + +/** + 최북단의 위도. + */ +@property (nonatomic, readonly) double northEastLat; + +/** + 최동단의 위도. + */ +@property (nonatomic, readonly) double northEastLng; + +/** + 영역을 배열로 변환합니다. 배열의 크기는 `2`이며, 각 원소는 순서대로 영역의 남서쪽, 북동쪽 좌표를 + 나타냅니다. + */ +@property (nonatomic, readonly, nonnull) NSArray *boundsLatLngs; + ++ (nonnull instancetype)bounds; + +/** + `latLngs`의 좌표를 모두 포함하는 최소한의 `NMGLatLngBounds` 객체를 생성합니다. + + @param latLngs 포함할 좌표들 + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsWithLatLngs:(nonnull NSArray *)latLngs; + +/** +* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다. + + @param southWest 남서쪽 좌표. + @param northEast 북동쪽 좌표. + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsSouthWest:(nonnull NMGLatLng *)southWest northEast:(nonnull NMGLatLng *)northEast; + +/** +* 남서쪽과 북동쪽 좌표로부터 객체를 생성합니다. + + @param southWestLat 남서쪽 좌표의 위도 + @param southWestLng 남서쪽 좌표의 경도 + @param northEastLat 북동쪽 좌표의 위도 + @param northEastLng 북동쪽 좌표의 경도 + @return `NMGLatLngBounds` 객체 +*/ ++ (nonnull instancetype)latLngBoundsWithSouthWestLat:(double)southWestLat southWestLng:(double)southWestLng northEastLat:(double)northEastLat northEastLng:(double)northEastLng; + +/** + 영역이 좌표를 포함하는지 여부를 반환합니다. + + @param point 포함되는지 확인할 좌표. + @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)hasPoint:(nonnull NMGLatLng *)point; + +/** + 영역이 다른 영역을 포함하는지 여부를 반환합니다. + + @param bounds 포함되는지 확인할 영역. + @return 포함할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)hasBounds:(nonnull NMGLatLngBounds *)bounds; + +/** + 영역이 다른 영역과 교차하는지 여부를 반환합니다. + + @param bounds 교차하는지 확인할 영역. + @return 교차할 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isIntersect:(nonnull NMGLatLngBounds *)bounds; + +/** + 영역과 다른 영역 간의 교차 영역을 반환합니다. + + @param bounds 다른 영역. + @return 교차 영역. 두 영역이 교차하지 않을 경우 `nil`. + */ +- (nullable NMGLatLngBounds *)intersectionWithBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result)); + +/** + `point`를 포함하도록 확장한 영역을 반환합니다. 영역이 이미 `point`를 포함하고 있을 경우 + 새로운 객체가 만들어지지 않고 이 객체가 반환됩니다. + + @param point 포함할 좌표. + @return 좌표가 포함된 영역. + */ +- (nonnull NMGLatLngBounds *)expandToPoint:(nonnull NMGLatLng *)point __attribute__((warn_unused_result)); + +/** + 현재 영역과 다른 영역을 모두 포함하는 최소한의 영역을 구합니다. + + @param bounds 다른 영역. + @return 두 영역을 모두 포함하는 영역. + */ +- (nonnull NMGLatLngBounds *)unionBounds:(nonnull NMGLatLngBounds *)bounds __attribute__((warn_unused_result)); + +@end + +static inline NMGLatLngBounds * _Nonnull NMGLatLngBoundsMake(double southWestLat, double southWestLng, double northEastLat, double northEastLng) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGLatLngBounds latLngBoundsWithSouthWestLat:southWestLat southWestLng:southWestLng northEastLat:northEastLat northEastLng:northEastLng]; +} + + diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h new file mode 100644 index 00000000..066bacf3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGLineString.h @@ -0,0 +1,50 @@ +// +// NMGLineString.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 3.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGSegment; + +/** + 라인스트링을 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGLineString<__covariant PointType> : NSObject + +/** + 라인스트링을 구성하는 점의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *points; + +/** + 라인스트링을 구성하는 NMGSegment의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *segments; + +/** + 라인스트링이 리니어 링의 특성을 만족하는지 여부. + + 첫 번째 점과 마지막 점이 같을 경우 `YES`입니다. + */ +@property (nonatomic, readonly) BOOL isRing; + ++ (nonnull instancetype)lineString; ++ (nonnull instancetype)lineStringWithPoints:(nonnull NSArray *)points; +- (nonnull instancetype)initWithPoints:(nonnull NSArray *)points; + +- (nullable PointType)pointAtIndex:(NSUInteger)index; +- (nullable NMGSegment *)segmentAtIndex:(NSUInteger)index; + +- (void)addPoint:(nonnull PointType)point; +- (void)insertPoint:(nonnull PointType)point atIndex:(NSUInteger)index; +- (void)removePointAtIndex:(NSUInteger)index; +- (void)removePoint:(nonnull PointType)point; + +- (void)convertRing; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h new file mode 100644 index 00000000..328a375a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGMultiPolygon.h @@ -0,0 +1,29 @@ +// +// NMGMultiPolygon.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 3. 9.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPolygon<__covariant PointType>; + +/** + 지도상의 면을 표현하는 Polygon의 집합체. + */ +NMG_EXPORT +@interface NMGMultiPolygon<__covariant PointType> : NSObject + +@property (nonatomic, readonly, nonnull) NSArray *> *polygons; + ++ (nonnull NMGMultiPolygon *)multiPolygon; ++ (nonnull NMGMultiPolygon *)multiPolygonWithPolygons:(nonnull NSArray *> *)polygons; + +- (nonnull instancetype)initWithPolygons:(nonnull NSArray *> *)polygons; +- (void)addPolygon:(nonnull NMGPolygon *)polygon; +- (void)insertPolygon:(nonnull NMGPolygon *)polygon AtIndex:(NSInteger)index; +- (void)removePolygonAtIndex:(NSInteger)index; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h new file mode 100644 index 00000000..8ce52251 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPoint.h @@ -0,0 +1,37 @@ +// +// NMGPoint.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 1. 11.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +/** + 평면 직교 좌표계상의 한 점을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGPoint : NSObject + +@property (nonatomic) double x; +@property (nonatomic) double y; + ++ (nonnull instancetype)point; ++ (nonnull instancetype)pointWithX:(double)x y:(double)y; + +- (nonnull instancetype)initWithX:(double)x y:(double)y; + +/** + 다른 좌표와의 거리를 구합니다. + + @param other 다른 좌표. + @return 거리. 미터 단위. + */ +- (double)distanceTo:(nonnull NMGPoint *)other; + +@end + +static inline NMGPoint * _Nonnull NMGPointMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGPoint pointWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h new file mode 100644 index 00000000..d0fe7f0a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGPolygon.h @@ -0,0 +1,44 @@ +// +// NMGPolygon.h +// NMGeometryFramework +// +// Created by Kali on 2016. 10. 13.. +// Copyright © 2016년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGLineString<__covariant PointType>; + +/** + 폴리곤을 나타내는 클래스. + */ +NMG_EXPORT +@interface NMGPolygon<__covariant PointType> : NSObject + +/** + 외곽선. + */ +@property (nonatomic, nonnull) NMGLineString *exteriorRing; + +/** + 내부 홀의 배열. + */ +@property (nonatomic, readonly, nonnull) NSArray *> *interiorRings; + +/** + 내부 홀의 개수. + */ +@property (nonatomic, readonly) NSUInteger interiorRingCount; + ++ (nonnull NMGPolygon *)polygon; ++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing; ++ (nonnull NMGPolygon *)polygonWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings; + +- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing; +- (nonnull instancetype)initWithRing:(nonnull NMGLineString *)exteriorRing interiorRings:(nonnull NSArray *> *)interiorRings; +- (void)addInteriorRing:(nonnull NMGLineString *)ring; +- (void)removeInteriorRingAtIndex:(NSUInteger)index; + +@end + diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h new file mode 100644 index 00000000..36fddd52 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGSegment.h @@ -0,0 +1,32 @@ +// +// NMGSegment.h +// NMGeometryFramework +// +// Created by mrtajo on 2017. 2. 6.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import +#import "NMGGeometry.h" + +/** + 두 점의 집합. + PointType에 따라 Point, LatLng로 동작합니다. + */ +NMG_EXPORT +@interface NMGSegment<__covariant PointType> : NSObject + +/** + 시작점. + */ +@property (nonatomic, nullable) PointType from; +/** + 끝점. + */ +@property (nonatomic, nullable) PointType to; + ++ (nonnull instancetype)segment; ++ (nonnull instancetype)segmentFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint; +- (nonnull instancetype)initWithFrom:(nonnull PointType)fromPoint to:(nonnull PointType)toPoint; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h new file mode 100644 index 00000000..5a95fc1f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGTm128.h @@ -0,0 +1,94 @@ +#import "NMGGeometry.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x`의 최솟값. + */ +const static double NMG_TM128_MINIMUM_X = 30408.747066328477; + +/** + 커버리지 내 `y`의 최솟값. + */ +const static double NMG_TM128_MINIMUM_Y = 158674.67403835512; + +/** + 커버리지 내 `x`의 최댓값. + */ +const static double NMG_TM128_MAXIMUM_X = 749976.0946343569; + +/** + 커버리지 내 `y`의 최댓값. + */ +const static double NMG_TM128_MAXIMUM_Y = 643904.8888573726; + +/** + TM-128 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGTm128 : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다. + southWest(33.96, 124.0) + northEast(38.33, 132.0) + + @return NMGLatLngBounds 객체 + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)tm128; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표 + @param y 좌표 + @return NMGTm128 객체 + */ ++ (nonnull instancetype)tm128WithX:(double)x y:(double)y; + +/** + 위경도 좌표를 UTM-K 좌표로 변환합니다. + + @param latLng 위경도 좌표 + @return NMGTm128 객체 + */ ++ (nonnull instancetype)tm128FromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 좌표를 위경도 좌표로 변환합니다. + + @return 변환된 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +@end + +static inline NMGTm128 * _Nonnull NMGTm128Make(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGTm128 tm128WithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h new file mode 100644 index 00000000..59d6f459 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtils.h @@ -0,0 +1,69 @@ +// +// NMGUtils.h +// NMGeometryFramework +// +// Created by Won-Young Son on 2017. 1. 10.. +// Copyright © 2017년 NAVER. All rights reserved. +// + +#import "NMGGeometry.h" + +@class NMGPoint; +@class NMGLatLng; +@class NMGLineString; + +/** + 지오메트리와 관련된 유틸리티 기능을 제공하는 클래스. + */ +NMG_EXPORT +@interface NMGUtils : NSObject + +/** + `line`에 `point`가 포함되어 있는지 여부를 반환합니다. + + @param point 확인할 점. + @param line 확인할 라인스트링. + @return 라인스트링이 점을 포함하고 있는지 여부. + */ ++ (BOOL)isContainPoint:(nonnull NMGPoint *)point inLineString:(nonnull NMGLineString *)line; + +/** + 라인스트링 안에 위경도 좌표가 포함되어 있는지 확인합니다. + + @param latLng 확인할 위경도 좌표. + @param line 확인할 라인스트링. + @return 라인스트링이 위경도 좌표을 포함하고 있는지 여부. + */ ++ (BOOL)isContainLatLng:(nonnull NMGLatLng *)latLng inLineString:(nonnull NMGLineString *)line; + +/** + 라인스트링의 길이를 계산합니다. + + @param line 라인스트링. + @return 라인스트링 길이. + */ ++ (double)lengthForLineString:(nonnull NMGLineString *)line; + +/** + `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나 + `max`보다 클 경우 값이 순환된다. + + @param value 래핑할 값. + @param min 최솟값. + @param max 최댓값. + @return 래핑된 값. + */ ++ (double)wrap:(double)value min:(double)min max:(double)max; + +/** + `value`를 `[min, max]` 범위로 래핑한다. `value`가 `min`보다 작거나 + `max`보다 클 경우 값이 순환된다. + + @param value 래핑할 값. + @param min 최솟값. + @param max 최댓값. + @return 래핑된 값. + */ ++ (int)wrapi:(int)value min:(int)min max:(int)max; + +@end diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h new file mode 100644 index 00000000..7b96f86c --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGUtmk.h @@ -0,0 +1,94 @@ +#import "NMGGeometry.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x`의 최솟값. + */ +const static double NMG_UTMK_MINIMUM_X = 283038.5; + +/** + 커버리지 내 `y`의 최솟값. + */ +const static double NMG_UTMK_MINIMUM_Y = 1248041.6; + +/** + 커버리지 내 `x`의 최댓값. + */ +const static double NMG_UTMK_MAXIMUM_X = 1937760.8; + +/** + 커버리지 내 `y`의 최댓값. + */ +const static double NMG_UTMK_MAXIMUM_Y = 2619635; + +/** + UTMK 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGUtmk : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + UTM-K 좌표로 나타낼 수 있는 범위를 리턴합니다. + southWest(31.0, 120.0) + northEast(43.0, 139.0) + + @return NMGLatLngBounds 객체 + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmk; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표 + @param y 좌표 + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmkWithX:(double)x y:(double)y; + +/** + 위경도 좌표를 UTM-K 좌표로 변환합니다. + + @param latLng 위경도 좌표 + @return NMGUtmk 객체 + */ ++ (nonnull instancetype)utmkFromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 좌표를 위경도 좌표로 변환합니다. + + @return 변환된 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +@end + +static inline NMGUtmk * _Nonnull NMGUtmkMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGUtmk utmkWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h new file mode 100644 index 00000000..b5acc81b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMGWebMercatorCoord.h @@ -0,0 +1,121 @@ +#import "NMGGeometry.h" +#import "NMGConstants.h" + +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 커버리지 내 `x` 및 `y`의 최솟값. + */ +const static double NMG_WEB_MERCATOR_MINIMUM_XY = -M_PI * NMG_EARTH_RADIUS; + +/** + 커버리지 내 `x` 및 `y`의 최댓값. + */ +const static double NMG_WEB_MERCATOR_MAXIMUM_XY = M_PI * NMG_EARTH_RADIUS; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 최소 위도. + */ +const static double NMG_WEB_MERCATOR_MINIMUM_LATITUDE = -85.05112877980659; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 최대 위도. + */ +const static double NMG_WEB_MERCATOR_MAXIMUM_LATITUDE = 85.05112877980659; + +/** + 웹 메르카토르 좌표를 표현하는 클래스. + */ +NMG_EXPORT +@interface NMGWebMercatorCoord : NSObject + +/** + x 좌표. + */ +@property (nonatomic, readonly) double x; + +/** + y 좌표. + */ +@property (nonatomic, readonly) double y; + +/** + 웹 메르카토르 좌표로 나타낼 수 있는 커버리지 영역. + + @return `NMGLatLngBounds` 객체. + */ ++ (nonnull NMGLatLngBounds *)coverage; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)webMercatorCoord; + +/** + 지정한 위치에 대한 좌표를 생성합니다. + + @param x 좌표. + @param y 좌표. + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)coordWithX:(double)x y:(double)y; + +/** + 위경도 좌표를 웹 메르카토르 좌표로 변환합니다. + + @param latLng 위경도 좌표. + @return 웹 메르카토르 좌표. + */ ++ (nonnull instancetype)coordFromLatLng:(nonnull NMGLatLng *)latLng; + +/** + 웹 메르카토르 좌표를 위경도 좌표로 변환합니다. + + @return 위경도 좌표. + */ +- (nonnull NMGLatLng *)toLatLng; + +/** + 좌표가 좌표계의 커버리지 내에 포함되는지 여부를 반환합니다. 커버리지를 벗어날 경우 좌표 연산의 정확도가 보장되지 + 않습니다. + + @return 커버리지 내일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isWithinCoverage; + +/** + 다른 좌표와의 거리를 구합니다. `NMGWebMercatorCoord` 좌표는 메르카토르 도법을 사용하므로 오차가 클 수 + 있습니다. 지리적으로 보다 정밀한 값이 필요한 경우 `LatLng#distanceTo(LatLng)`를 사용하십시오. + + @param other 다른 좌표. + @return 거리. 미터 단위. + @see `NMGLatLng` `-distanceTo:(NMGLatLng *)` + */ +- (double)distanceTo:(nonnull NMGWebMercatorCoord *)other; + +/** + 다른 좌표와의 거리의 제곱을 구합니다. 거리 비교의 목적으로 + `-distanceTo:(NMGWebMercatorCoord *)`에서 제곱근까지 구할 필요가 없을 때 사용하면 좋습니다. + + @param other 다른 좌표. + @return 거리. 미터 단위. + */ +- (double)squareDistanceTo:(nonnull NMGWebMercatorCoord *)other; + +/** + 다른 좌표와의 각도를 구합니다. 다른 좌표가 현재 좌표의 정북 방향에 있을 경우 0도이며, 시계 방향으로 + 각도가 증가합니다. + + @param other 다른 좌표. + @return 각도. 도 단위. + */ +- (double)bearingTo:(nonnull NMGWebMercatorCoord *)other; + +@end + +static inline NMGWebMercatorCoord * _Nonnull NMGWebMercatorCoordMake(double x, double y) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [NMGWebMercatorCoord coordWithX:x y:y]; +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h new file mode 100644 index 00000000..745ae894 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Headers/NMapsGeometry.h @@ -0,0 +1,32 @@ +// +// NMapsGeometry.h +// NMapsGeometry +// +// Created by Kali on 2016. 10. 13.. +// Copyright © 2016년 NAVER. All rights reserved. +// + +#import + +//! Project version number for NMapsGeometryFramework. +FOUNDATION_EXPORT double NMapsGeometryVersionNumber; + +//! Project version string for NMapsGeometryFramework. +FOUNDATION_EXPORT const unsigned char NMapsGeometryVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + +#import "NMGGeometry.h" +#import "NMGSegment.h" +#import "NMGBounds.h" +#import "NMGLatLngBounds.h" +#import "NMGPoint.h" +#import "NMGLatLng.h" +#import "NMGLineString.h" +#import "NMGPolygon.h" +#import "NMGMultiPolygon.h" +#import "NMGUtils.h" +#import "NMGUtmk.h" +#import "NMGTm128.h" +#import "NMGWebMercatorCoord.h" diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist new file mode 100644 index 00000000..7b2da924 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Info.plist differ diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap new file mode 100644 index 00000000..96a5eb33 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module NMapsGeometry { + umbrella header "NMapsGeometry.h" + + export * + module * { export * } +} diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry new file mode 100755 index 00000000..f85fa9c9 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/NMapsGeometry differ diff --git a/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources new file mode 100644 index 00000000..b299f902 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsGeometry.xcframework/ios-arm64_i386_x86_64-simulator/NMapsGeometry.framework/_CodeSignature/CodeResources @@ -0,0 +1,342 @@ + + + + + files + + Headers/NMGBounds.h + + MAEqEYoPW7WDQ5vZypJ64jEfEz0= + + Headers/NMGConstants.h + + KtO7mulC+p0zvDlxujwyc1rxPOY= + + Headers/NMGGeometry.h + + C3N7SI2L1lmUzIXPydYs58/v8Dk= + + Headers/NMGLatLng.h + + U++Yq0Cyq8OuceraJbhBJf+qje4= + + Headers/NMGLatLngBounds.h + + UdcC3iaWS+DIeS6zCrpCVWGDkmQ= + + Headers/NMGLineString.h + + HgIjm//jJma+arWa98nQt+YFYRU= + + Headers/NMGMultiPolygon.h + + 38p0XaC8qumTRHEFr5BY9qCYTWA= + + Headers/NMGPoint.h + + ll3MvHhuuOu7ZzXRb9RIIAUZ9Es= + + Headers/NMGPolygon.h + + uKP/+yQgJvxC4auFCTRYB/SHQW8= + + Headers/NMGSegment.h + + FO0UBIEDEe+GHPOkqfwemeCovdk= + + Headers/NMGTm128.h + + M+mGhF5kW/CYzMZ72LSUh57llw4= + + Headers/NMGUtils.h + + 1rerJrO3yS795yz3veeb+KPUrKU= + + Headers/NMGUtmk.h + + GUDo3psJeZNg5qcZRB9cReyABLY= + + Headers/NMGWebMercatorCoord.h + + Ih/WDvdEwiwiKBTP+pwgDtzL0/0= + + Headers/NMapsGeometry.h + + vKEoyoa3PoDXOhmPgAbgAYw2W/U= + + Info.plist + + qidTtwO/IWWZXkXxN/OtenPSXE8= + + Modules/module.modulemap + + hL2p0qf0W2W9ZCFpUFyhKF8oIFg= + + + files2 + + Headers/NMGBounds.h + + hash + + MAEqEYoPW7WDQ5vZypJ64jEfEz0= + + hash2 + + u3LcEh0kjeTIkVhliPwJDWpD5hoqzansPObatSnqQM8= + + + Headers/NMGConstants.h + + hash + + KtO7mulC+p0zvDlxujwyc1rxPOY= + + hash2 + + MqZNayZLmh/QMSFnX/TC2/delzrsZ6e1nJhgfBDIG9w= + + + Headers/NMGGeometry.h + + hash + + C3N7SI2L1lmUzIXPydYs58/v8Dk= + + hash2 + + 7gQhyIsHbMyoEt5QZD7Hnk6YR8YW4GXvodE2hS5ExU8= + + + Headers/NMGLatLng.h + + hash + + U++Yq0Cyq8OuceraJbhBJf+qje4= + + hash2 + + 6tc1IkunsZPnNhjS7I3SfE7D0uI5TriSyCKYVe3dtSg= + + + Headers/NMGLatLngBounds.h + + hash + + UdcC3iaWS+DIeS6zCrpCVWGDkmQ= + + hash2 + + IAUBiwoo/qBX5EDZnt2WRbvQNIoAcF/rlpyLO2kT0yE= + + + Headers/NMGLineString.h + + hash + + HgIjm//jJma+arWa98nQt+YFYRU= + + hash2 + + p9cgk8S9O9RbNUUt+nGmAn0+dpiyNd/kYziFLpeOGoI= + + + Headers/NMGMultiPolygon.h + + hash + + 38p0XaC8qumTRHEFr5BY9qCYTWA= + + hash2 + + QM71eIhptraC//JsjA4lG22HkFfzauH3EShpc1P13hs= + + + Headers/NMGPoint.h + + hash + + ll3MvHhuuOu7ZzXRb9RIIAUZ9Es= + + hash2 + + 3Ru/BYFY9zmbfm7F10DK5ZZuNChJuGG0ZOEEskp1O2g= + + + Headers/NMGPolygon.h + + hash + + uKP/+yQgJvxC4auFCTRYB/SHQW8= + + hash2 + + QyKSA3iwnSLP5XH1PELGH7S/rK7xM3xTjAwXU8uuBLQ= + + + Headers/NMGSegment.h + + hash + + FO0UBIEDEe+GHPOkqfwemeCovdk= + + hash2 + + In6x7xVLeA/pTvLv20H93s2Arktlfn6twv6TTj6biAU= + + + Headers/NMGTm128.h + + hash + + M+mGhF5kW/CYzMZ72LSUh57llw4= + + hash2 + + ySHIIFgM9oP5zUDUulpMh4Ut5TUt6CXK5iJ4bCVFRsI= + + + Headers/NMGUtils.h + + hash + + 1rerJrO3yS795yz3veeb+KPUrKU= + + hash2 + + LZlmy0L67qCFCBbvGPmO+1bJdJqBSftYoWA+hNqGA9w= + + + Headers/NMGUtmk.h + + hash + + GUDo3psJeZNg5qcZRB9cReyABLY= + + hash2 + + v4H6fxxXR60T3jqNkKZPZ0/4/F6ZfMX8j5SDCgdidBM= + + + Headers/NMGWebMercatorCoord.h + + hash + + Ih/WDvdEwiwiKBTP+pwgDtzL0/0= + + hash2 + + AUnqRhahKU1dkzEPnUZxT6gMp0xa5Dqk0ObZAb+bTNo= + + + Headers/NMapsGeometry.h + + hash + + vKEoyoa3PoDXOhmPgAbgAYw2W/U= + + hash2 + + m9yCSRA2d7F6WMZr58O7vYPvjRASF6a6RRugxUF9QfE= + + + Modules/module.modulemap + + hash + + hL2p0qf0W2W9ZCFpUFyhKF8oIFg= + + hash2 + + 2XbZXLQy7ciILbhi6e8AdtbZ9Kj0oHo/PUujlJ2+kEk= + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist b/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist new file mode 100644 index 00000000..103205e2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/Info.plist @@ -0,0 +1,44 @@ + + + + + AvailableLibraries + + + BinaryPath + NMapsMap.framework/NMapsMap + LibraryIdentifier + ios-arm64_x86_64-simulator + LibraryPath + NMapsMap.framework + SupportedArchitectures + + arm64 + x86_64 + + SupportedPlatform + ios + SupportedPlatformVariant + simulator + + + BinaryPath + NMapsMap.framework/NMapsMap + LibraryIdentifier + ios-arm64 + LibraryPath + NMapsMap.framework + SupportedArchitectures + + arm64 + + SupportedPlatform + ios + + + CFBundlePackageType + XFWK + XCFrameworkFormatVersion + 1.0 + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car new file mode 100644 index 00000000..a3da96d3 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Assets.car differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings new file mode 100644 index 00000000..9cbcebb1 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Base.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h new file mode 100644 index 00000000..68cbd2fe --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCBuilder.h @@ -0,0 +1,76 @@ +#import "NMFFoundation.h" + +@protocol NMCClusteringKey; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; +@class NMCClusterer<__covariant KeyType : NSObject *>; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`를 생성하는 빌더 클래스. 클러스터링할 거리, 최소/최대 줌 레벨, 애니메이션 여부, 클러스터/단말 + 클러스터/단말 마커 커스터미이징 등 기본적인 기능을 제공합니다. 복잡한 전략과 기능이 필요하다면 + `NMCComplexBuilder`를 사용해야 합니다. + */ +NMF_EXPORT +@interface NMCBuilder<__covariant KeyType : NSObject *> : NSObject + +/** + 클러스터링할 기준 거리. 클러스터에 추가된 두 데이터의 화면상 거리가 기준 거리보다 가깝다면 + 클러스터링되어 하나의 마커로 나타납니다. + + 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다. + */ +@property (nonatomic, assign) double screenDistance; + +/** + 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의 + 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minZoom; + +/** + 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면, + 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서 + 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부 + 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger maxZoom; + +/** + 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션을 적용할지 여부. + + 기본값은 `YES`입니다. + */ +@property (nonatomic, assign) bool animate; + +/** + 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id clusterMarkerUpdater; + +/** + 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id leafMarkerUpdater; + +/** + `NMCClusterer` 객체를 생성합니다. + + @return `NMCClusterer` 객체. + */ +- (NMCClusterer * _Nonnull)build; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h new file mode 100644 index 00000000..6b0cb3a2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCCluster.h @@ -0,0 +1,39 @@ +#import "NMCNode.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터 노드를 의미하는 클래스. + */ +NMF_EXPORT +@interface NMCCluster : NMCNode + +/** + 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 자식 `NMCNode`의 목록. + */ +@property (nonatomic, nonnull, readonly) NSArray *children; + +/** + 전체 `NMCLeaf`의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를 + `NMGLatLng`으로 변환한 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h new file mode 100644 index 00000000..2c1d7be0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h @@ -0,0 +1,31 @@ +#import "NMCMarkerInfo.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 노출되어야 하는 클러스터 마커의 속성을 나타내는 클래스. + */ +NMF_EXPORT +@interface NMCClusterMarkerInfo : NMCMarkerInfo + +/** + 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를 + `NMGLatLng`으로 변환한 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +/** + 전체 자식 단말 마커의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h new file mode 100644 index 00000000..46eadfc5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCClusterMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트. + + 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateClusterMarker::` 메서드가 호출되며, + 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCClusterMarkerInfo`의 + 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의 + `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로 + 반영할 필요가 없습니다. + + @see `NMCBuilder.clusterMarkerUpdater` + @see `NMCComplexBuilder.clusterMarkerUpdater` + */ +NMF_EXPORT +@protocol NMCClusterMarkerUpdater + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 클러스터 마커의 정보. + @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h new file mode 100644 index 00000000..e849743e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusterer.h @@ -0,0 +1,150 @@ +#import "NMFFoundation.h" +#import "NMCClustererUpdateCallback.h" + +@protocol NMCClusteringKey; +@class NMFMapView; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; + +/** + 두 마커가 인접했을 때 클러스터링될 기본 화면상 거리. pt 단위. + */ +const static double NMC_DEFAULT_SCREEN_DISTANCE = 70; + +/** + 클러스터가 펼쳐지는/합쳐지는 애니메이션의 기본 지속 시간. 초 단위. + */ +const static double NMC_DEFAULT_ANIMATION_DURATION = 0.3; + +NS_ASSUME_NONNULL_BEGIN + +/** + 겹치는 여러 마커를 클러스터링해서 하나의 마커로 보여주는 기능을 제공하는 클래스. 이 클래스의 인스턴스는 직접 생성할 + 수 없고 `NMCBuilder` 또는 `NMCComplexBuilder` 빌더 클래스를 이용해 생성해야 합니다. 여러 마커가 시각적으로 + 겹치는 상황을 방지하는 기본적인 기능만 필요하다면 `NMCBuilder`를, 복잡한 전략과 기능이 필요하다면 + `NMCComplexBuilder`를 사용하는 것을 권장합니다. + + `NMCClusterer`를 사용하려면 먼저 데이터의 키를 의미하는 `NMCClusteringKey` 프로토콜을 구현한 클래스를 + 정의해야 합니다. 이 클래스를 타입 파라메터로 지정해 `NMCClusterer` 인스턴스를 만들고, + `add:Tag:` 또는 `addAll:`을 호출해 데이터를 추가한 후 `mapView`를 + 이용해 지도 객체를 지정하면 지정한 데이터가 클러스터링되어 나타납니다. + */ +NMF_EXPORT +@interface NMCClusterer<__covariant KeyType : NSObject *> : NSObject + +/** + 클러스터를 `mapView`에 추가하거나, 클러스터가 추가된 지도 객체를 반환합니다. + 지도에 추가된 상태가 아닐 경우 `nil`을 반환합니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 데이터가 비어있는지 여부. + */ +@property (nonatomic, assign, readonly) BOOL empty; + +- (instancetype)initWithThresholdStrategy:(id _Nonnull)thresholdStrategy + DistanceStrategy:(id _Nonnull)distanceStrategy + PositioningStrategy:(id _Nonnull)positioningStrategy + TagMergeStrategy:(id _Nonnull)tagMergeStrategy + MarkerManager:(id _Nonnull)markerManager + ClusterMarkerUpdater:(id _Nonnull)clusterMarkerUpdater + LeafMarkerUpdater:(id _Nonnull)leafMarkerUpdater + MinClusteringZoom:(NSInteger)minClusteringZoom + MaxClusteringZoom:(NSInteger)maxClusteringZoom + MinIndexingZoom:(NSInteger)minIndexingZoom + MaxIndexingZoom:(NSInteger)maxIndexingZoom + MaxScreenDistance:(double)maxScreenDistance + AnimationDuration:(double)animationDuration + UpdateOnChange:(BOOL)updateOnChange; + +/** + 데이터에 `key`가 포함되어있는지 여부. + + @param key 포함 여부를 확인할 키. + @return 포함되어있을 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)contains:(KeyType _Nonnull)key; + +/** + 모든 데이터를 제거합니다. + */ +- (void)clear; + +/** + 모든 데이터를 제거합니다. + + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)clearWithCallback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다. + + @param key 데이터의 키. + @param tag 데이터의 태그. + */ +- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag; + +/** + 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다. + + @param key 데이터의 키. + @param tag 데이터의 태그. + @param callback 데이터 추가가 완료되면 호출될 콜백. + */ +- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다. + + @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`. + */ +- (void)addAll:(NSDictionary * _Nonnull)keyTagMap; + +/** + 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다. + + @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`. + @param callback 데이터 추가가 완료되면 호출될 콜백. + */ +- (void)addAll:(NSDictionary * _Nonnull)keyTagMap + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다. + */ +- (void)remove:(KeyType _Nonnull)key; + +/** + 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다. + + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)remove:(KeyType _Nonnull)key + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다. + + @param keys 제거할 키의 목록. + */ +- (void)removeAll:(NSArray * _Nonnull)keys; + +/** + 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다. + + @param keys 제거할 키의 목록. + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)removeAll:(NSArray * _Nonnull)keys + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h new file mode 100644 index 00000000..6f28dfba --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h @@ -0,0 +1,6 @@ +#import "NMFFoundation.h" + +/** + 클러스터러의 데이터 갱신이 완료되면 호출되는 콜백 타입. + */ +typedef void (^NMCClustererUpdateCallback)(void); diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h new file mode 100644 index 00000000..dbb0b553 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCClusteringKey.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터링될 데이터의 키를 의미하는 인터페이스. + + 클러스터러를 사용하고자 할 경우 이 인터페이스를 구현하는 클래스를 만들고, 그 타입을 `NMCClusterer`의 타입 + 파라미터로 지정해야 합니다. + + `NMCClusterer`는 두 `NMCClusteringKey` 인스턴스가 동일하다면(equality) 동일한 데이터로 간주합니다. + 즉, 두 인스턴스의 좌표가 동일하더라도, `NSObject.isEqual:`가 `NO`라면 다른 데이터로 간주합니다. + + 이 특성을 이용해 동일한 좌표에 위치하는 여러 데이터를 중복해서 클러스터링할 수 있으므로 이 언터페이스를 구현하는 + 클래스는 `NSObject.isEqual:`와 `NSObject.hash:`도 구현하는 것이 권장됩니다. + */ +NMF_EXPORT +@protocol NMCClusteringKey + +/** + 데이터의 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h new file mode 100644 index 00000000..b45a1a21 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCComplexBuilder.h @@ -0,0 +1,148 @@ +#import "NMFFoundation.h" + +@protocol NMCClusteringKey; +@protocol NMCThresholdStrategy; +@protocol NMCDistanceStrategy; +@protocol NMCPositioningStrategy; +@protocol NMCTagMergeStrategy; +@protocol NMCMarkerManager; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; +@class NMCClusterer<__covariant KeyType : NSObject *>; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`를 생성하는 빌더 클래스. 복잡한 전략과 기능을 제공합니다. 간단한 기능만 필요하다면 + `NMCBuilder`를 사용하는 것을 권장합니다. + */ +NMF_EXPORT +@interface NMCComplexBuilder<__covariant KeyType : NSObject *> : NSObject + +/** + 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략. + */ +@property (nonatomic, nonnull) id thresholdStrategy; + +/** + 두 `NMCNode`간의 거리를 측정하는 전략. + */ +@property (nonatomic, nonnull) id distanceStrategy; + +/** + 두 `NMCCluster`의 좌표를 정하는 전략. + */ +@property (nonatomic, nonnull) id positioningStrategy; + +/** + 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략. + */ +@property (nonatomic, nonnull) id tagMergeStrategy; + +/** + `NMCClusterer`에서 노출하는 마커를 관리하는 매니저. + */ +@property (nonatomic, nonnull) id markerManager; + +/** + 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id clusterMarkerUpdater; + +/** + 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id leafMarkerUpdater; + +/** + 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의 + 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minClusteringZoom; + +/** + 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면, + 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서 + 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부 + 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM` - `1`입니다. + */ +@property (nonatomic, assign) NSInteger maxClusteringZoom; + +/** + 인덱싱할 최소 줌 레벨. 클러스터링할 최소 줌 레벨보다 작거나 같아야 합니다. + + `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이 + 소모됩니다. 따라서 인덱싱할 최소 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게 + 제한하면 인덱싱할 줌 레벨 미만의 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최소 줌 + 레벨과 동일하게 지정할 때 가장 좋은 효율을 낼 수 있습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minIndexingZoom; + +/** + 인덱싱할 최대 줌 레벨을 반환합니다. 클러스터링할 최대 줌 레벨보다 크거나 같아야 합니다. + + `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이 + 소모됩니다. 따라서 인덱싱할 최대 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게 + 제한하면 인덱싱할 줌 레벨을 초과하는 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최대 줌 + 레벨보다 `1` 작게 지정할 때 가장 좋은 효율을 낼 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM` - `1`입니다. + */ +@property (nonatomic, assign) NSInteger maxIndexingZoom; + +/** + 클러스터링할 최대 화면 거리. 두 마커의 화면상 거리가 이 값보다 작을 경우에만 클러스터링 후보가 + 됩니다. 즉, 두 마커의 화면상 거리가 이 값보다 크다면, + `NMCDistanceStrategy.getDistance:Node1:Node2:`가 반환한 둘 간의 거리가 + `NMCThresholdStrategy.getThreshold:`보다 크더라도 클러스터링되지 않습니다. 한편 최대 화면 거리는 탐색 + 공간을 제한하는 역할을 하므로 값을 크게 지정할수록 성능이 저하됩니다. + + 따라서 `NMCDistanceStrategy`와 `NMCThresholdStrategy`를 별도로 지정했다면 전략을 고려해 적절한 값을 + 지정해야 합니다. 예를 들어 `NMCDefaultDistanceStrategy`와 `NMCDefaultThresholdStrategy`를 사용한다면 + `NMCDefaultThresholdStrategy`의 생성자 파라메터로 지정한 거리와 동일한 값을 지정했을 때 가장 좋은 효율을 + 낼 수 있습니다. + + 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다. + */ +@property (nonatomic, assign) double maxScreenDistance; + +/** + 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션의 지속 시간.`0`일 경우 + 애니메이션이 적용되지 않습니다. + + 기본값은 `NMC_DEFAULT_ANIMATION_DURATION`입니다. + */ +@property (nonatomic, assign) double animationDuration; + +/** + 화면상 마커를 갱신할 때 `NMFMapViewCameraDelegate.mapViewCameraIdle:`대신 + `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용할지 여부. + `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용하면 + 더 빠르게 갱신되지만 성능이 하락합니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, assign) BOOL updateOnChange; + +/** + `NMCClusterer` 객체를 생성합니다. + + @return `NMCClusterer` 객체. + */ +- (NMCClusterer * _Nonnull)build; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h new file mode 100644 index 00000000..b11b36e2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h @@ -0,0 +1,41 @@ +#import "NMCClusterMarkerUpdater.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터 마커의 기본 앵커. 가운데를 가리킵니다. + */ +extern const NMF_EXPORT CGPoint NMF_CLUSTER_ANCHOR_DEFAULT; + +/** + 기본 `NMCClusterMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다. +
    +
  • + 아이콘(`NMFMarker.iconImage`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)에 따라 + `NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY`, `NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY`, + `NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY` 중 하나로 지정됩니다. +
  • +
  • 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 0.5)`로 지정됩니다.
  • +
  • 캡션 텍스트(`NMFMarker.captionText`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)로 지정됩니다.
  • +
  • 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.center`로 지정됩니다.
  • +
  • 캡션 색상(`NMFMarker.captionColor`): `UIColor.whiteColor`로 지정됩니다.
  • +
  • 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.clearColor`로 지정됩니다.
  • +
  • + 마커 클릭 시 동작(`NMFMarker.touchHandler`): 클러스터가 펼쳐지는 최소 줌 레벨로 카메라를 확대하는 동작으로 지정됩니다. +
  • +
+ */ +NMF_EXPORT +@interface NMCDefaultClusterMarkerUpdater : NSObject + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 클러스터 마커의 정보. + @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h new file mode 100644 index 00000000..3e6e383a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h @@ -0,0 +1,23 @@ +#import "NMCDistanceStrategy.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCDistanceStrategy` 구현체. 두 `NMCNode`간의 화면상 거리를 측정합니다. + */ +NMF_EXPORT +@interface NMCDefaultDistanceStrategy : NSObject + +/** + 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다. + + @param zoom 거리를 측정할 줌 레벨. + @param node1 거리를 측정할 첫 번째 `NMCNode` 객체. + @param node2 거리를 측정할 두 번째 `NMCNode` 객체. + @return `node1`과 `node2`간의 화면상 거리. + */ +- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h new file mode 100644 index 00000000..c391ee61 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h @@ -0,0 +1,30 @@ +#import "NMCLeafMarkerUpdater.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCLeafMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다. +
    +
  • 아이콘(`NMFMarker.iconImage`): `NMF_MARKER_IMAGE_DEFAULT`로 지정됩니다.
  • +
  • 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 1.0)`로 지정됩니다.
  • +
  • 캡션 텍스트(`NMFMarker.captionText`): 빈 문자열(`""`)로 지정됩니다.
  • +
  • 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.bottom`로 지정됩니다.
  • +
  • 캡션 색상(`NMFMarker.captionColor`): `UIColor.blackColor`로 지정됩니다.
  • +
  • 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.whiteColor`로 지정됩니다.
  • +
  • 마커 클릭 시 동작(`NMFMarker.touchHandler`): `nil`로 지정되어 아무런 동작도 하지 않습니다.
  • +
+ */ +NMF_EXPORT +@interface NMCDefaultLeafMarkerUpdater : NSObject + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 단말 마커의 정보. + @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h new file mode 100644 index 00000000..d27cd83a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" +#import "NMCMarkerManager.h" + +/** + 기본 재사용 풀 크기. + */ +const static double NMC_DEFAULT_MAX_POOL_SIZE = 200; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCMarkerManager` 구현체. 이 클래스를 이용하면 `NMFMarker` 객체가 재사용되어 성능이 향상됩니다. 대신 한 + 번 사용되었던 `NMFMarker` 객체의 속성이 초기화되지 않고 계속 남으므로 `NMCClusterMarkerUpdater`와 + `NMCLeafMarkerUpdater`에서 매번 `NMFMarker`의 속성을 지정해야 합니다. 단, 변하지 않는 속성이 있다면 + `createMarker:`를 오버라이드해 `NMFMarker`의 속성을 생성 직후 한 번만 지정하도록 최적화할 수 있습니다. + */ +@interface NMCDefaultMarkerManager : NSObject + +/** + 기본 생성자. 재사용 풀의 크기는 `NMC_DEFAULT_MAX_POOL_SIZE`로 지정됩니다. + */ +- (instancetype)init; + +/** + 재사용 풀의 크기를 지정하는 생성자. + + @param maxPoolSize 재사용 풀의 크기. + */ +- (instancetype)initWithMaxPoolSize:(NSInteger)maxPoolSize; + +/** + 풀로부터 `NMCMarker` 객체를 가져와 반환합니다. 풀이 비어있다면 `createMarker:`를 호출해 새로운 마커 + 객체를 생성합니다. + */ +- (NMFMarker * _Nonnull)retainMarker:(NMCMarkerInfo * _Nonnull)info; + +/** + `NMFMarker` 객체를 다시 사용할 수 있도록 풀로 반환합니다. + */ +- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +/** + 새로운 마커 객체를 생성합니다. + */ +- (NMFMarker * _Nonnull)createMarker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h new file mode 100644 index 00000000..6c0d3415 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h @@ -0,0 +1,24 @@ +#import "NMCPositioningStrategy.h" + +@class NMCCluster; +@class NMGWebMercatorCoord; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCDefaultPositioningStrategy` 구현체. 자식 노드의 좌표의 무게 중심을 구합니다. + */ +NMF_EXPORT +@interface NMCDefaultPositioningStrategy : NSObject + +/** + `cluster`에 속한 자식 `NMCNode`의 무게 중심 좌표를 반환합니다. + + @param cluster 좌표를 구해야 하는 `cluster` 객체. + @return 웹 메르카토르 좌표. + */ +- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h new file mode 100644 index 00000000..aa4aaf4d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h @@ -0,0 +1,23 @@ +#import "NMCTagMergeStrategy.h" + +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCDefaultTagMergeStrategy` 구현체. 태그를 병합하지 않고 버립니다. + */ +NMF_EXPORT +@interface NMCDefaultTagMergeStrategy : NSObject + +/** + `cluster`에 속한 자식 `NMCNode`의 태그를 사용하지 않고 항상 `nil`을 반환합니다. + + @param cluster 태그를 병합할 `cluster` 객체. + @return 병합된 `cluster`의 태그. + */ +- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h new file mode 100644 index 00000000..67393613 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h @@ -0,0 +1,28 @@ +#import "NMCThresholdStrategy.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * 기본 `NMCThresholdStrategy` 구현체. 고정된 기준 거리를 사용합니다. + */ +NMF_EXPORT +@interface NMCDefaultThresholdStrategy : NSObject + +/** + 생성자. + + @param threshold 기준 거리. + */ +- (instancetype)initWithThreshold:(double)threshold; + +/** + 생성자로 지정된 `threshold`를 반환합니다. + + @param zoom 기준 거리를 구할 줌 레벨. + @return 클러스터링할 기준 거리. + */ +- (double)getThreshold:(NSInteger)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h new file mode 100644 index 00000000..9baf5b24 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCDistanceStrategy.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCNode; + +NS_ASSUME_NONNULL_BEGIN + +/** + 각 `NMCNode`간의 거리를 측정하는 전략에 대한 인터페이스. + + 이 전략은 `NMCThresholdStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가 + 있을 때, `getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `NMCThresholdStrategy.getThreshold`가 + 반환한 기준값보다 작거나 같으면 두 노드는 zoom 레벨에서 클러스터링됩니다. + + @see `NMCComplexBuilder.distanceStrategy` + @see `NMCComplexBuilder.thresholdStrategy` + @see `NMCThresholdStrategy.getThreshold:` + */ +NMF_EXPORT +@protocol NMCDistanceStrategy + +/** + 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다. + + @param zoom 거리를 측정할 줌 레벨. + @param node1 거리를 측정할 첫 번째 `NMCNode` 객체. + @param node2 거리를 측정할 두 번째 `NMCNode` 객체. + @return `node1`과 `node2`간의 거리. + */ +- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h new file mode 100644 index 00000000..789402bb --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeaf.h @@ -0,0 +1,38 @@ +#import "NMCNode.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 노드를 의미하는 클래스. + */ +NMF_EXPORT +@interface NMCLeaf : NMCNode + +/** + 키. `NMCClusterer.add:Tag:`로 지정한 `key`가 반환됩니다. + */ +@property (nonatomic, nonnull, readonly) NSObject *key; + +/** + 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`가 반환됩니다. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 자식 노드의 개수. 항상 `1`이 반환됩니다. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`이 반환됩니다. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h new file mode 100644 index 00000000..4273f7e4 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h @@ -0,0 +1,30 @@ +#import "NMCMarkerInfo.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol NMCClusteringKey; + +/** + 지도에 노출되어야 하는 단말 마커의 속성을 나타내는 클래스. + */ +NMF_EXPORT +@interface NMCLeafMarkerInfo : NMCMarkerInfo + +/** + 키. `NMCClusterer.add:Tag:`로 지정한 `key`. + */ +@property (nonatomic, nonnull, readonly) id key; + +/** + 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h new file mode 100644 index 00000000..746caa70 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCLeafMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트. + + 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateLeafMarker::` 메서드가 호출되며, + 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCLeafMarkerInfo`의 + 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의 + `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로 + 반영할 필요가 없습니다. + + @see `NMCBuilder.leafMarkerUpdater` + @see `NMCComplexBuilder.leafMarkerUpdater` + */ +NMF_EXPORT +@protocol NMCLeafMarkerUpdater + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 단말 마커의 정보. + @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h new file mode 100644 index 00000000..08238504 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerInfo.h @@ -0,0 +1,36 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMGLatLng; + +/** + 지도에 노출되어야 하는 마커의 속성을 나타내는 클래스. + 이 클래스의 인스턴스는 불변이며 모든 스레드에서 안전하게 접근할 수 있습니다. + */ +NMF_EXPORT +@interface NMCMarkerInfo : NSObject + +/** + 태그. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +/** + 마커가 노출되는 최소 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger minZoom; + +/** + 마커가 노출되는 최대 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger maxZoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h new file mode 100644 index 00000000..b979a743 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCMarkerManager.h @@ -0,0 +1,37 @@ +#import "NMFFoundation.h" + +@class NMCMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`에서 노출하는 마커 객체를 관리하는 인터페이스. + + 마커가 지도에 처음 노출되면 `retainMarker:` 메서드가 호출되며, 더 이상 노출되지 않으면 + `releaseMarker:` 메서드가 호출됩니다. + + @see `NMCComplexBuilder.markerManager` + */ +NMF_EXPORT +@protocol NMCMarkerManager + +/** + `info`를 노출할 마커 객체를 반환합니다. + + @param info 노출이 필요한 `NMCMarkerInfo` 객체. + @return 노출할 `NMFMarker` 객체 + */ +- (NMFMarker * _Nullable)retainMarker:(NMCMarkerInfo * _Nonnull)info; + +/** + 더 이상 노출되지 않는 `info`의 `marker`를 정리합니다. + + @param info 더 이상 노출되지 않는 `NMCMarkerInfo` 객체. + @param marker 더 이상 노출되지 않는 `NMFMarker` 객체. + */ +- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h new file mode 100644 index 00000000..4ea1e943 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCNode.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" + +@class NMGLatLng; +@class NMGWebMercatorCoord; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`가 관리하는 트리 구조의 노드를 의미하는 클래스. + + 이 클래스의 인스턴스는 모든 스레드에서 접근 가능하고 불변인 `NMCMarkerInfo`와 달리 백그라운드 스레드에서만 접근 + 가능하며 데이터가 변경되면 객체의 속성도 변경되므로 사용에 주의해야 합니다. + */ +NMF_EXPORT +@interface NMCNode : NSObject + +/** + 태그. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 노드가 노출되어야 하는 최소 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger minZoom; + +/** + 노드가 노출되어야 하는 최대 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger maxZoom; + +/** + 자식 `NMCNode`의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h new file mode 100644 index 00000000..c62447b1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCPositioningStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMGWebMercatorCoord; +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 한 `cluster`의 좌표를 정하는 전략에 대한 인터페이스. + + `NMCNode`가 하나의 `NMCCluster`를 이루거나, 한 `NMCCluster`의 자식 노드가 변경되면 + `getPosition:` 메서드가 호출되며, 이 메서드에서 반환한 값이 이 `NMCCluster`의 좌표가 됩니다. + 따라서 이 메서드 내에서 `NMCCluster.tag` 또는 `NMCCluster.children`을 호출해 태그나 자식 노드의 + 좌표 등 정보를 가져와 적절한 좌표를 반환하도록 구현해야 합니다. + */ +NMF_EXPORT +@protocol NMCPositioningStrategy + +/** + `cluster`의 좌표를 반환합니다. + + @param cluster 좌표를 구해야 하는 `cluster` 객체. + @return 웹 메르카토르 좌표. + */ +- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h new file mode 100644 index 00000000..d9f086d1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCTagMergeStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략에 대한 인터페이스. + + 여러 `NMCNode`가 하나의 `NMCCluster`로 합쳐지면 `mergeTag:` 메서드가 호출되며, 이 메서드에서 + 반환한 값이 부모 `NMCCluster`의 태그가 됩니다. 따라서 이 메서드 내에서 `NMCCluster.children`을 호출해 + 자식 `NMCNode`의 태그를 순회하고 병합해 반환하도록 구현해야 합니다. + + @see `NMCComplexBuilder.tagMergeStrategy` + */ +NMF_EXPORT +@protocol NMCTagMergeStrategy + +/** + `NMCCluster`에 속한 `NMCNode`의 태그를 병합해 반환합니다. + + @param cluster 태그를 병합할 `cluster` 객체. + @return 병합된 `cluster`의 태그. + */ +- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h new file mode 100644 index 00000000..0e9cb13f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMCThresholdStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략에 대한 인터페이스. + + 이 전략은`NMCDistanceStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가 + 있을 때, `NMCDistanceStrategy.getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `getThreshold:`가 + 반환한 기준 거리보다 작거나 같으면 두 노드는`zoom` 레벨에서 클러스터링됩니다. + + @see `NMCComplexBuilder.distanceStrategy` + @see `NMCComplexBuilder.thresholdStrategy` + @see `NMCThresholdStrategy.getThreshold:` + */ +NMF_EXPORT +@protocol NMCThresholdStrategy + +/** + 줌 레벨이 `zoom`일 때 두 `NMCNode`를 클러스터링할 기준 거리를 반환합니다. + + @param zoom 기준 거리를 구할 줌 레벨. + @return 클러스터링할 기준 거리. + */ +- (double)getThreshold:(NSInteger)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h new file mode 100644 index 00000000..be637757 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFArrowheadPath.h @@ -0,0 +1,79 @@ +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 화살표 경로 오버레이 전역 Z 인덱스 + */ +const static int NMF_ARROWHEAD_PATH_OVERLAY_GLOBAL_Z_INDEX = 100000; + +@class NMGLatLng; + +/** + 화살표 형태로 방향 또는 회전 지점을 나타내는 오버레이. 경로선 오버레이와 마찬가지로 좌표열을 나타내지만 진척률을 + 지정할 수 없고, 끝 지점에 삼각형 모양의 머리가 추가됩니다. + */ +NMF_EXPORT +@interface NMFArrowheadPath : NMFOverlay + +/** + 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property(nonatomic, strong) UIColor *color; + +/** + 외곽선의 색상. 외곽선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property(nonatomic, strong) UIColor *outlineColor; + +/** + 좌표열. `points`의 크기는 `2` 이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *points; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 외곽선의 두께. pt 단위. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat outlineWidth; + +/** + 머리 크기의 배율을 반환합니다. 두께에 배율을 곱한 값이 머리의 크기가 됩니다. + + 기본값은 `2.5`입니다. + */ +@property(nonatomic) CGFloat headSizeRatio; + +/** + 높이. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat elevation; + +/** + 좌표열을 지정하여 화살표 오버레이를 생성합니다. `points`의 크기는 `2` 이상이어야 합니다. + + @param points 좌표열. + @return `NMFArrowheadPath` 객체. + */ ++ (nullable instancetype)arrowheadPathWith:(NSArray*)points; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h new file mode 100644 index 00000000..b144c19a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFAuthManager.h @@ -0,0 +1,72 @@ + +#import + +/** + 네이버 클라우드 플랫폼 지도 API 인증 상태. + */ +typedef NS_ENUM(NSInteger, NMFAuthState) { + /** 인증되지 않음. */ + NMFAuthStateUnauthorized = 0, + /** 인증 진행 중. */ + NMFAuthStateAuthorizing, + /** 인증 대기 중. */ + NMFAuthStatePending, + /** 인증 완료. */ + NMFAuthStateAuthorized +}; + +/** + 인증 결과를 받는 델리게이트 프로토콜. + */ +@protocol NMFAuthManagerDelegate + +/** + 인증이 성공했을 때 호출되는 콜백 메서드. + + @param state 인증 결과. 인증 결과는 `NMFAuthManager`에 저장됩니다. + @param error 인증 결과가 실패일 때만 `NSError`가 지정됩니다. + */ +- (void)authorized:(NMFAuthState)state error:(nullable NSError *)error; + +@end + +/** + 인증 관리 기능을 담당하는 클래스. 이 클래스는 싱글턴으로, `shared`를 + 이용해 인스턴스를 가져올 수 있습니다. + + 네이버 지도 SDK를 사용하려면 반드시 클라이언트를 설정하고 인증 및 초기화를 수행해야 합니다. 클라이언트를 + 설정하는 방법에는 두 가지가 있습니다. + + - 앱의 info.plist에 `NMFClientId`를 String으로 지정합니다. + - 싱글턴 객체인 `shared`에서 `clientId`를 명시적으로 지정합니다. + */ +NMF_EXPORT +@interface NMFAuthManager : NSObject + +/** + NMFMapView를 사용하기 위한 API 인증 매니저 싱글턴. + */ ++ (nonnull instancetype)shared; + +/** + 인증 결과를 받는 델리게이트 속성. + */ +@property(nonatomic, nullable, weak) id delegate; + +/** + 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID. + */ +@property(nonatomic, nullable) NSString *clientId; + +/** + 공공기관용 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID. + */ +@property(nonatomic, nullable) NSString *govClientId; + +/** + API 인증 상태. + */ +@property(nonatomic, readonly) NMFAuthState authState; + + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h new file mode 100644 index 00000000..a350a2bf --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraCommon.h @@ -0,0 +1,56 @@ +#ifndef NMFCameraCommon_h +#define NMFCameraCommon_h + +#import +#import +#import +#import "NMFGeometry.h" + +/** + 지도에서 표현할 수 있는 최소 줌 레벨. + */ +const static double NMF_MIN_ZOOM = 0.0; + +/** + 지도에서 표현할 수 있는 최대 줌 레벨. + */ +const static double NMF_MAX_ZOOM = 21.0; + +/** + 지도에서 표현할 수 있는 최소 기울기 각도. + */ +const static double NMF_MINIMUM_TILT = 0.0; + +/** + 지도에서 표현할 수 있는 최대 기울기 각도. + */ +const static double NMF_MAXIMUM_TILT = 63.0; + +/** + 기본 최대 기울기 각도. + */ +const static double NMF_DEFAULT_MAXIMUM_TILT = 60.0; + +/** + 기본 애니메이션 시간을 의미하는 상수. 애니메이션 시간이 이 값으로 지정되었을 경우 + `NMFMapView.animationDuration`으로 지정된 시간이 적용됩니다. + */ +const static NSTimeInterval NMF_DEFAULT_ANIMATION_DURATION = -1; + +#define DEFAULT_INVALID_HEADING -1 +#define DEFAULT_INVALID_ZOOM -1 +#define DEFAULT_INVALID_TILT -1 + +#define CLAMP(x, low, high) ({\ +__typeof__(x) __x = (x); \ +__typeof__(low) __low = (low);\ +__typeof__(high) __high = (high);\ +__x > __high ? __high : (__x < __low ? __low : __x);\ +}) + +#define WRAP(value, min, max) \ +(fmod((fmod((value - min), (max - min)) + (max - min)), (max - min)) + min) + +#endif /* NMFCameraCommon_h */ + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h new file mode 100644 index 00000000..0e7a43b3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraPosition.h @@ -0,0 +1,66 @@ +#import + +#import "NMFFoundation.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 카메라의 위치 관련 정보를 나타내는 불변 클래스. 카메라의 위치는 좌표, 줌 레벨, 기울기 각도, 헤딩 각도로 구성됩니다. + */ +NMF_EXPORT +@interface NMFCameraPosition : NSObject + +/** + 카메라의 좌표. + */ +@property (nonatomic, strong, readonly) NMGLatLng *target; + +/** + 줌 레벨. 이 값이 증가할수록 축척이 증가합니다. + */ +@property (nonatomic, readonly) double zoom; + +/** + 기울기 각도. 도 단위. 카메라가 지면을 내려다보는 각도를 나타냅니다. 천정에서 지면을 수직으로 내려다보는 경우 `0`도이며, 비스듬해질수록 값이 증가합니다. + */ +@property (nonatomic, readonly) double tilt; + +/** + 헤딩 각도. 도 단위. 카메라가 바라보는 방위를 나타냅니다. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다. + */ +@property (nonatomic, readonly) double heading; + +/** + 카메라 위치에 관한 모든 요소를 지정해 객체를 생성합니다. + + @param target 카메라의 좌표. + @param zoom 카메라의 줌 레벨. + @param tilt 카메라의 기울기 각도. + @param heading 카메라의 베어링 각도. + + @return `NMFCameraPosition` 객체. + */ ++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom tilt:(double)tilt heading:(double)heading; + +/** + 좌표와 줌 레벨로부터 객체를 생성합니다. `tilt`와 `heading`은 `0`으로 지정됩니다. + + @param target 카메라의 좌표. + @param zoom 카메라의 줌 레벨. + + @return `NMFCameraPosition` 객체. + */ ++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom; + +/** + 카메라의 위치가 유효한지 여부를 반환합니다. + + @return 카메라의 위치가 유효한지 여부. + */ +- (BOOL)isValid; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h new file mode 100644 index 00000000..8cf8e15e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdate.h @@ -0,0 +1,222 @@ +#import +#import +#import + +#import "NMFFoundation.h" + +@class NMFCameraUpdateParams; +@class NMFCameraPosition; +@class NMFMapView; + + +NS_ASSUME_NONNULL_BEGIN + +/** + 개발자가 API를 호출해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByDeveloper = 0; + +/** + 사용자의 제스처로 인해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByGesture = -1; + +/** + 사용자의 버튼 선택으로 인해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByControl = -2; + +/** + 위치 정보 갱신으로 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByLocation = -3; + +/** + * 카메라 이동 애니메이션 유형을 정의하는 열거형. `NMFCameraUpdate`에서 사용합니다. + */ +typedef NS_ENUM(NSUInteger, NMFCameraUpdateAnimation) { + /** + 애니메이션 없음. + */ + NMFCameraUpdateAnimationNone, + + /** + 선형 애니메이션. + */ + NMFCameraUpdateAnimationLinear, + + /** + 부드럽게 가속되는 애니메이션. + */ + NMFCameraUpdateAnimationEaseIn, + + /** + 부드럽게 감속되는 애니메이션. + */ + NMFCameraUpdateAnimationEaseOut, + + /** + 플라잉 애니메이션. 가속과 함께 축소됐다가 감속과 함께 확대됩니다. + */ + NMFCameraUpdateAnimationFly, +}; + +/** + 지도를 바라보는 카메라의 이동을 정의하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고, 팩토리 메서드를 이용해서 + 생성할 수 있습니다. 생성한 인스턴스를 파라미터로 삼아 `NMFMapView`의 `-moveCamera:`를 호출하면 지도를 + 이동할 수 있습니다. + + 카메라의 이동은 다음과 같은 네 가지 요소로 구성됩니다. + - 카메라의 위치: 카메라를 이동할 위치. `CameraUpdate`를 생성하는 팩토리 메서드의 파라미터로 지정합니다. + - 피봇 지점: 카메라 이동의 기준점이 되는 지점. 피봇 지점을 지정하면 이동, 줌 레벨 변경, 회전의 기준점이 해당 지점이 됩니다. `pivot`으로 지정합니다. + - 애니메이션: 카메라 이동 시 적용될 애니메이션. 애니메이션의 유형과 시간을 지정할 수 있습니다. `animation`과 `animationDuration`으로 지정합니다. + - 이동 원인: 카메라 이동의 원인. 이 값을 지정하면 `NMFMapViewCameraDelegate`의 메서드에 `reason` 파라미터로 전달됩니다. `reason`으로 지정합니다. + @see `NMFMapView` `-moveCamera:` + */ +NMF_EXPORT +@interface NMFCameraUpdate : NSObject + +/** + 피봇 지점. `0, 0`일 경우 왼쪽 위, `1, 1`일 경우 오른쪽 아래 지점을 의미합니다. + `-cameraUpdateWithFitBounds:`를 이용해 객체를 생성한 경우에는 무시됩니다. + */ +@property (nonatomic) CGPoint pivot; + +/** + 카메라 이동 시 적용할 애니메이션. 애니메이션의 시간은 `DEFAULT_ANIMATION_DURATION`으로 지정됩니다. + `animation`이 `NMFCameraUpdateAnimationNone`일 경우 지도가 애니메이션 없이 즉시 이동됩니다. + @see `NMFCameraUpdateAnimation` + */ +@property (nonatomic) NMFCameraUpdateAnimation animation; + +/** + 카메라 이동 시 적용할 애니메이션의 시간. + + 기본값은 `NMFMapView.animationDuration`입니다. + */ +@property (nonatomic) NSTimeInterval animationDuration; + +/** + 카메라 이동의 원인. + + 기본값은 `NMFMapChangedByDeveloper`입니다. + @see `NMFMapChangedByControl` `NMFMapChangedByGesture` `NMFMapChangedByDeveloper` + */ +@property (nonatomic) int reason; + +/** + `params`를 이용해 카메라를 이동하는 `NMFCameraUpdate` 객체를 생성합니다. + + @param params 카메라 이동에 사용할 파라미터. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithParams:(NMFCameraUpdateParams *)params; + +/** + 카메라를 `position` 위치로 이동하는 `NMFCameraUpdate` 객체를 생성합니다. + + @param position 새로운 카메라 위치. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithPosition:(NMFCameraPosition *)position; + +/** + 카메라의 좌표를 `target`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다. + + @param target 새로운 카메라 좌표. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target; + +/** + 카메라의 좌표를 `target`으로, 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도, 헤딩 각도 등 좌표와 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @param target 새로운 카메라 좌표. + @param zoom 새로운 카메라 줌 레벨. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target zoomTo:(double)zoom; + +/** + 카메라를 현재 위치에서 `delta` 포인트만큼 이동하도록 지정하는 `NMFCameraUpdate` 객체를 생성합니다. + 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다. + + @param delta 이동할 거리. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollBy:(CGPoint)delta; + +/** + 카메라의 줌 레벨을 `1`만큼 증가하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomIn; + +/** + 카메라의 줌 레벨을 `1`만큼 감소하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomOut; + +/** + 카메라의 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @param zoom 새로운 카메라 줌 레벨. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomTo:(double)zoom; + +/** + 카메라의 헤딩 각도를 `heading`로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 줌 레벨 등 헤딩 각도 외의 다른 속성은 변하지 않습니다. + + @param heading 새로운 카메라 헤딩 각도. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithHeading:(double)heading; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @param padding 카메라가 변경된 후 영역과 지도 화면 간 확보할 최소 여백. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds padding:(CGFloat)padding; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @param paddingInsets 카메라가 변경된 후 영역과 지도 화면 간 확보할 인셋 여백. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds paddingInsets:(UIEdgeInsets)paddingInsets; + +@end + + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h new file mode 100644 index 00000000..e03728d6 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCameraUpdateParams.h @@ -0,0 +1,106 @@ + +#import + +@class NMFCameraPosition; +@class NMFMapView; +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 카메라를 이동할 지점에 관한 다양한 정보를 나타내는 클래스. 주로 `NMFCameraUpdate`를 만들기 위한 파라미터로 사용됩니다. + `target`, `zoom`, `tilt`, `heading` 등 카메라 위치에 대한 네 가지 속성을 나타내는 것은 `NMFCameraPosition`과 유사하지만, + `NMFCameraPosition`은 하나의 절대적인 카메라 위치를 나타내는 데 반해 `NMFCameraUpdateParams`는 상대적인 변화를 줄 수 있습니다. + 이를 위해서 하나의 속성에 각각 두 종류의 메서드를 제공합니다. + + - `xxxTo:`: 속성을 절대적인 값으로 지정합니다. + - `xxxBy:`: 속성을 현재 지도의 `cameraPosition`의 상대적인 값으로 지정합니다. + + 동일한 속성에 대해 `xxxTo:` 계열의 메서드와 `xxxBy:` 계열의 메서드를 모두 호출하면 앞선 호출은 무시됩니다. + + @see `NMFCameraUpdate.cameraUpdateWithParams:` + */ +NMF_EXPORT +@interface NMFCameraUpdateParams : NSObject + +@property(nonatomic, readonly) bool isScrolled; + +/** + 기본 생성자. + */ ++ (instancetype)cameraUpdateParams; + +- (NMFCameraPosition *)cameraPositionWithMap:(NMFMapView *)mapView pivot:(CGPoint)pivot; + + +/** + 카메라의 좌표를 `target`으로 변경하도록 지정합니다. + + @param target 지정할 좌표. + */ +- (void)scrollTo:(NMGLatLng *)target; + +/** + 카메라를 현재 위치에서 `delta` pt만큼 이동하도록 지정합니다. + + @param delta 이동할 거리. pt 단위. + */ +- (void)scrollBy:(CGPoint)delta; + +/** + 카메라의 줌 레벨을 `zoom`으로 변경하도록 지정합니다. + + @param zoom 지정할 줌 레벨. + */ +- (void)zoomTo:(double)zoom; + +/** + 카메라의 즘 레벨을 `delta`만큼 변경하도록 지정합니다. 양수로 지정할 경우 확대, 음수로 지정할 경우 축소됩니다. + + @param delta 줌 레벨의 변화량. + */ +- (void)zoomBy:(double)delta; + +/** + 카메라의 줌 레벨을 `1`만큼 증가하도록 지정합니다. + */ +- (void)zoomIn; + +/** + 카메라의 줌 레벨을 `1`만큼 감소하도록 지정합니다. + */ +- (void)zoomOut; + +/** + 카메라의 기울기 각도를 `tilt`로 변경하도록 지정합니다. + + @param tilt 기울기 각도. 도 단위. + */ +- (void)tiltTo:(double)tilt; + +/** + 카메라의 기울기 각도를 `delta`만큼 변경하도록 지정합니다. 양수로 지정하면 지도가 기울어지고 음수로 지정하면 수직에 가까워집니다. + + @param delta 기울기 각도의 변화량. 도 단위. + */ +- (void)tiltBy:(double)delta; + +/** + 카메라의 헤딩 각도를 `heading`으로 변경하도록 지정합니다. + + @param heading 헤딩 각도. 도 단위. + */ +- (void)rotateTo:(double)heading; + +/** + 카메라의 헤딩 각도를 `delta`만큼 변경하도록 지정합니다. + + @param delta 헤딩 각도의 변화량. 도 단위. + */ +- (void)rotateBy:(double)delta; + +@end + + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h new file mode 100644 index 00000000..daef1a0f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCircleOverlay.h @@ -0,0 +1,83 @@ +#import +#import + +#import "NMFOverlay.h" + +@class NMGLatLng; + +/** + 기본 원 오버레이 전역 Z 인덱스 + */ +const static int NMF_CIRCLE_OVERLAY_GLOBAL_Z_INDEX = -200000; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 원을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFCircleOverlay : NMFOverlay + +/** + 중심점. 원을 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다. + */ +@property(nonatomic) NMGLatLng *center; + +/** + 반경. 미터 단위. 반경이 `0`일 경우 오버레이가 그려지지 않습니다. + + 기본값은 `1000`입니다. + */ +@property(nonatomic) double radius; + +/** + 오버레이가 차지하는 영역. + + 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다. +*/ +@property(nonatomic, readonly) NMGLatLngBounds *bounds; + +/** + 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property(nonatomic, copy) UIColor *fillColor; + +/** + 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) double outlineWidth; + +/** + 테두리의 색상. + + 기본값은 `UIColor.blackColor`입니다. +*/ +@property(nonatomic, copy) UIColor *outlineColor; + +/** + 중심점과 반경을 지정해서 원 오버레이를 생성합니다. + + @param center 중심점. + @param radius 원의 반경. 미터 단위. + @return `NMFCircleOverlay` 객체. + */ ++ (instancetype)circleOverlay:(NMGLatLng *)center radius:(double)radius; + +/** + 중심점, 반경, 색상을 지정해서 원 오버레이를 생성합니다. + + @param center 중심점. + @param radius 반경. 미터 단위. + @param fillColor 색상. + @return `NMFCircleOverlay` 객체. + */ ++ (instancetype)circleOverlay:(NMGLatLng *)center + radius:(double)radius + fillColor:(UIColor *)fillColor; +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h new file mode 100644 index 00000000..561aa0f7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFCompassView.h @@ -0,0 +1,28 @@ +#import + +#import "NMFFoundation.h" + +#define COMPASSVIEW_DEFAULT_SIZE 50 +#define COMPASSVIEW_DEFAULT_HEADING 0.0 +#define COMPASSVIEW_DEFAULT_TILTING 0.0 + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 나침반 컨트롤. + */ +NMF_EXPORT +@interface NMFCompassView : UIImageView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h new file mode 100644 index 00000000..c2a02a80 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFFoundation.h @@ -0,0 +1,5 @@ +#pragma once + +#import + +#define NMF_EXPORT __attribute__((visibility ("default"))) diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h new file mode 100644 index 00000000..2700012d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGeometry.h @@ -0,0 +1,149 @@ +#import +#import +#import +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** Defines the area spanned by an `NMFCoordinateBounds`. */ +typedef struct __attribute__((objc_boxable)) NMFCoordinateSpan { + /** Latitudes spanned by an `NMFCoordinateBounds`. */ + CLLocationDegrees latitudeDelta; + /** Longitudes spanned by an `NMFCoordinateBounds`. */ + CLLocationDegrees longitudeDelta; +} NMFCoordinateSpan; + +/* Defines a point on the map in Mercator projection for a specific zoom level. */ +typedef struct __attribute__((objc_boxable)) NMFMapPoint { + /** X coordinate representing a longitude in Mercator projection. */ + CGFloat x; + /** Y coordinate representing a latitide in Mercator projection. */ + CGFloat y; + /** Zoom level at which the X and Y coordinates are valid. */ + CGFloat zoomLevel; +} NMFMapPoint; + +/* Defines a 4x4 matrix. */ +typedef struct NMFMatrix4 { + double m00, m01, m02, m03; + double m10, m11, m12, m13; + double m20, m21, m22, m23; + double m30, m31, m32, m33; +} NMFMatrix4; + + +/** + Creates a new `NMFCoordinateSpan` from the given latitudinal and longitudinal + deltas. + */ +NS_INLINE NMFCoordinateSpan NMFCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) { + NMFCoordinateSpan span; + span.latitudeDelta = latitudeDelta; + span.longitudeDelta = longitudeDelta; + return span; +} + +/** + Creates a new `NMFMapPoint` from the given X and Y coordinates, and zoom level. + */ +NS_INLINE NMFMapPoint NMFMapPointMake(CGFloat x, CGFloat y, CGFloat zoomLevel) { + NMFMapPoint point; + point.x = x; + point.y = y; + point.zoomLevel = zoomLevel; + return point; +} + +/** + Returns `YES` if the two coordinate spans represent the same latitudinal change + and the same longitudinal change. + */ +NS_INLINE BOOL NMFCoordinateSpanEqualToCoordinateSpan(NMFCoordinateSpan span1, NMFCoordinateSpan span2) { + return (span1.latitudeDelta == span2.latitudeDelta && + span1.longitudeDelta == span2.longitudeDelta); +} + +/** An area of zero width and zero height. */ +extern NMF_EXPORT const NMFCoordinateSpan NMFCoordinateSpanZero; + +/** + A quadrilateral area as measured on a two-dimensional map projection. + `NMFCoordinateQuad` differs from `NMFCoordinateBounds` in that it allows + representation of non-axis aligned bounds and non-rectangular quadrilaterals. + The coordinates are described in counter clockwise order from top left. + */ +@interface NMFCoordinateQuad : NSObject +/** Coordinate at the top left corner. */ +@property(nonatomic) NMGLatLng *topLeft; +/** Coordinate at the bottom left corner. */ +@property(nonatomic) NMGLatLng *bottomLeft; +/** Coordinate at the bottom right corner. */ +@property(nonatomic) NMGLatLng *bottomRight; +/** Coordinate at the top right corner. */ +@property(nonatomic) NMGLatLng *topRight; + +/** + Creates a new `NMFCoordinateQuad` structure from the given top left, + bottom left, bottom right, and top right coordinates. + */ ++ (nonnull instancetype)coordinateQuadWithtopLeft:(NMGLatLng *)topLeft bottomLeftlng:(NMGLatLng *)bottomLeftlng bottomRight:(NMGLatLng *)bottomRight topRight:(NMGLatLng *)topRight; + +/** + Creates a new `NMFCoordinateQuad` structure from the given `NMFCoordinateBounds`. + The returned quad uses the bounds' northeast coordinate as the top right, and the + southwest coordinate at the bottom left. + */ +static inline NMFCoordinateQuad * _Nonnull NMFCoordinateQuadMakeFromLatLngBounds(NMGLatLngBounds *bounds); + +@end + +/** Returns the area spanned by the coordinate bounds. */ +NS_INLINE NMFCoordinateSpan NMFCoordinateBoundsGetCoordinateSpan(NMGLatLngBounds *bounds) { + return NMFCoordinateSpanMake(bounds.latSpan, bounds.lngSpan); +} + +/** + Returns a coordinate bounds with southwest and northeast coordinates that are + offset from those of the source bounds. + */ +NS_INLINE NMGLatLngBounds* NMFCoordinateBoundsOffset(NMGLatLngBounds *bounds, NMFCoordinateSpan offset) { + NMGLatLngBounds *offsetBounds = NMGLatLngBoundsMake(bounds.southWestLat, bounds.southWestLng, bounds.northEastLat, bounds.northEastLng); + offsetBounds.southWest.lat += offset.latitudeDelta; + offsetBounds.southWest.lng += offset.longitudeDelta; + offsetBounds.northEast.lat += offset.latitudeDelta; + offsetBounds.northEast.lng += offset.longitudeDelta; + return offsetBounds; +} + +/** Returns a formatted string for the given coordinate bounds. */ +NS_INLINE NSString *NMFStringFromCoordinateBounds(NMGLatLngBounds *bounds) { + return [NSString stringWithFormat:@"{ sw = {%.1f, %.1f}, ne = {%.1f, %.1f}}", + bounds.southWestLat, bounds.southWestLng, + bounds.northEastLat, bounds.northEastLng]; +} + +/** Returns a formatted string for the given coordinate quad. */ +NS_INLINE NSString *NMFStringFromCoordinateQuad(NMFCoordinateQuad *quad) { + return [NSString stringWithFormat:@"{ topleft = {%.1f, %.1f}, bottomleft = {%.1f, %.1f}}, bottomright = {%.1f, %.1f}, topright = {%.1f, %.1f}", + quad.topLeft.lat, quad.topLeft.lng, + quad.bottomLeft.lat, quad.bottomLeft.lng, + quad.bottomRight.lat, quad.bottomRight.lng, + quad.topRight.lat, quad.topRight.lng]; +} + +/** Returns radians, converted from degrees. */ +NS_INLINE CGFloat NMFRadiansFromDegrees(CLLocationDegrees degrees) { + return (CGFloat)(degrees * M_PI) / 180; +} + +/** Returns degrees, converted from radians. */ +NS_INLINE CLLocationDegrees NMFDegreesFromRadians(CGFloat radians) { + return radians * 180 / M_PI; +} + +/** Returns Mercator projection of a WGS84 coordinate at the specified zoom level. */ +extern NMF_EXPORT NMFMapPoint NMFMapPointForLatLng(NMGLatLng *coordinate, double zoomLevel); + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h new file mode 100644 index 00000000..6575e0a0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFGroundOverlay.h @@ -0,0 +1,54 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 지상 오버레이 전역 Z 인덱스 + */ +const static int NMF_GROUND_OVERLAY_GLOBAL_Z_INDEX = -300000; + +@class NMFOverlayImage; +@class NMGLatLngBounds; + +/** + 지도에서 특정 영역을 나타내는 오버레이. 지도에 추가하기 전에 반드시 `bounds` 및 + `overlayImage`를 지정해야 합니다. + */ +NMF_EXPORT +@interface NMFGroundOverlay : NMFOverlay + +/** + 영역. 지상 오버레이가 지도에 추가되기 전에 반드시 이 속성을 지정해야 합니다. + + 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다. + */ +@property(nonatomic, strong) NMGLatLngBounds *bounds; + +/** + 이미지. + */ +@property(nonatomic, strong) NMFOverlayImage *overlayImage; + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat alpha; + +/** + 영역과 이미지를 지정하여 지상 오버레이를 생성합니다. + + @param bounds 영역. + @param overlayImage 이미지. + @return `NMFGroundOverlay` 객체. + */ ++ (instancetype)groundOverlayWithBounds:(NMGLatLngBounds *)bounds image:(NMFOverlayImage *)overlayImage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h new file mode 100644 index 00000000..e421cef2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevel.h @@ -0,0 +1,51 @@ +#import "NMFIndoorView.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도 층을 나타내는 불변 클래스. 하나의 실내지도 층은 다른 층과 연결될 수 있습니다. 이 클래스의 인스턴스는 + 직접 생성할 수 없고 `NMFIndoorZone`을 이용해서 가져올 수 있습니다. + + @see `NMFIndoorZone` + */ +NMF_EXPORT +@interface NMFIndoorLevel : NSObject + +/** + 층에 해당하는 실내지도 뷰. + */ +@property(nonatomic, readonly) NMFIndoorView *_Nonnull indoorView; + +/** + 층의 명칭. + */ +@property(nonatomic, readonly) NSString *_Nonnull name; + +/** + 연결된 층의 실내지도 뷰 목록. + */ +@property(nonatomic, readonly) NSArray *_Nonnull connections; + ++ (NMFIndoorLevel *_Nonnull)indoorLevel:(NSString *_Nonnull)zoneId + LevelId:(NSString *_Nonnull)levelId + Name:(NSString *_Nonnull)name + Connections:(NSArray *_Nonnull)connections; + +/** + 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰의 인덱스를 반환합니다. + + @param zoneId 구역 ID. + @return 실내지도 뷰의 인덱스. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `-1`. + */ +- (NSInteger)getConnectionIndex:(NSString *_Nonnull)zoneId; + +/** + 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰를 반환합니다. + + @param zoneId 구역 ID. + @return 실내지도 뷰. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `nil`. + */ +- (NMFIndoorView *_Nullable)getConnection:(NSString *_Nonnull)zoneId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h new file mode 100644 index 00000000..2cc13f9e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h @@ -0,0 +1,29 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorSelection; +@class NMFMapView; + +/** + 실내지도 층 피커 컨트롤. + */ +NMF_EXPORT +@interface NMFIndoorLevelPickerView : UIView +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 실내지도 층 피커의 높이에 대한 NSLayoutConstraint 객체. +*/ +@property (nonatomic, weak) IBOutlet NSLayoutConstraint *viewHeightConstraint; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h new file mode 100644 index 00000000..38018166 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorRegion.h @@ -0,0 +1,38 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorZone; + +/** + 실내지도가 존재하는 영역을 나타내는 불변 클래스. 하나의 실내지도 영역은 서로 겹쳐진 한 개 이상의 구역으로 이루어집니다. + 이 클래스의 인스턴스는 직접 생성할 수 없습니다. + */ +NMF_EXPORT +@interface NMFIndoorRegion : NSObject + +/** + 영역에 속해 있는 구역 목록 + */ +@property(nonatomic, readonly) NSArray *zones; + ++ (NMFIndoorRegion *)indoorRegion:(NSArray *)zones; + +/** + 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역의 인덱스를 반환합니다. + + @param zoneId 구역 ID. + @return 구역의 인덱스. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `-1`. + */ +- (NSInteger)getZoneIndex:(NSString *)zoneId; + +/** + 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역을 반환합니다. + + @param zoneId 구역 ID. + @return 구역 객체. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `nil`. + */ +- (NMFIndoorZone *_Nullable)getZone:(NSString *)zoneId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h new file mode 100644 index 00000000..c6f41521 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelection.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" + +@class NMFIndoorRegion; +@class NMFIndoorZone; +@class NMFIndoorLevel; + +/** + 하나의 실내지도 영역 내에서 선택된 구역 및 층을 나타내는 불변 클래스. + */ +NMF_EXPORT +@interface NMFIndoorSelection : NSObject + +/** + 선택된 구역의 영역. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorRegion *region; + +/** + 선택된 구역의 인덱스. + */ +@property(nonatomic, readonly) NSInteger zoneIndex; + +/** + 선택된 구역. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorZone *zone; + +/** + 선택된 층의 인덱스. + */ +@property(nonatomic, readonly) NSInteger levelIndex; + +/** + 선택된 층. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorLevel *level; + +/** + 실내지도 영역 객체와 선택된 구역의 인덱스 및 층의 인덱스를 사용하는 생성자. + + @param region 실내지도 영역. + @param zoneIndex 선택된 구역의 인덱스. + @param levelIndex 선택된 층의 인덱스. + */ ++(instancetype _Nonnull)indoorSelectionWithRegion:(NMFIndoorRegion * _Nonnull)region + ZoneIndex:(NSInteger)zoneIndex + LevelIndex:(NSInteger)levelIndex; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h new file mode 100644 index 00000000..abec0f55 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h @@ -0,0 +1,21 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorSelection; + +/** + 실내 지도 구역 및 층 선택에 대한 콜백 프로토콜. + */ +@protocol NMFIndoorSelectionDelegate + +/** + 선택된 실내지도 구역 및 층이 변경될 경우 호출됩니다. + + @param indoorSelection 선택된 실내지도에 대한 `NMFIndoorSelection` 객체. 실내지도가 보이지 않을 경우 `nil`. + */ +- (void)indoorSelectionDidChanged:(NMFIndoorSelection * _Nullable)indoorSelection; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h new file mode 100644 index 00000000..4852ab4e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorView.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도를 나타내는 불변 클래스. + */ +NMF_EXPORT +@interface NMFIndoorView : NSObject + +/** + 구역 ID. + */ +@property(nonatomic, readonly) NSString *zoneId; + +/** + 층 ID. + */ +@property(nonatomic, readonly) NSString *levelId; + +@property(nonatomic, readonly) NSUInteger hash; + +/** + 구역 ID와 층 ID로 객체를 생성하는 생성자. + + @param zoneId 구역 ID. + @param levelId 층 ID. + */ ++ (NMFIndoorView *)indoorView:(NSString *)zoneId + WithLevelId:(NSString *)levelId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h new file mode 100644 index 00000000..d205229b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFIndoorZone.h @@ -0,0 +1,61 @@ +#import "NMFFoundation.h" + +@class NMFIndoorLevel; + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도 구역을 나타내는 불변 클래스. 하나의 실내지도 구역에는 한 개 이상의 층이 있습니다. 이 클래스의 + 인스턴스는 직접 생성할 수 없고 `NMFIndoorRegion`을 이용해서 가져올 수 있습니다. + + @see `NMFIndoorRegion` + */ +NMF_EXPORT +@interface NMFIndoorZone : NSObject + +/** + 구역 ID. + */ +@property(nonatomic, readonly) NSString *zoneId; + +/** + 대표 층의 인덱스. + */ +@property(nonatomic, readonly) NSInteger defaultLevelIndex; + +/** + 층 목록. + */ +@property(nonatomic, readonly) NSArray *levels; + +@property(nonatomic, readonly) NSUInteger hash; + ++ (NMFIndoorZone *)indoorZone:(NSString *)zoneId + defaultLevelIndex:(NSInteger)defaultLevelIndex + Levels:(NSArray *)levels; + +/** + 구역에 속한 층 중 ID가 `levelId`인 층의 인덱스를 반환합니다. + + @param levelId 층 ID. + @return 층의 인덱스. 구역 내에 ID가 `levelId`인 층이 없을 경우 `-1`. + */ +- (NSInteger)getLevelIndex:(NSString *)levelId; + +/** + 구역에 속한 층 중 ID가 `levelId`인 층을 반환합니다. + + @param levelId 층 ID. + @return 층 객체. 구역 내에 ID가 `levelId`인 층이 없을 경우 `nil`. + */ +- (NMFIndoorLevel *_Nullable)getLevel:(NSString *)levelId; + +/** + 대표 층을 반환합니다. + + @return 대표 층. + */ +- (NMFIndoorLevel *_Nonnull)getDefaultLevel; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h new file mode 100644 index 00000000..06e69df5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindow.h @@ -0,0 +1,139 @@ +#import +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 정보창 전역 Z 인덱스 + */ +const static int NMF_INFO_WINDOW_GLOBAL_Z_INDEX = 400000; + +@class NMGLatLng; +@class NMFMarker; +@protocol NMFOverlayImageDataSource; + +/** + 지도의 특정 지점 또는 마커 위에 열 수 있는 정보 창. 정보 창은 이미지로 특정 지점을 표시한다는 점에서 마커와 유사하나, + 다음과 같은 차이가 있습니다. + - 마커처럼 특정 좌표에 열 수 있을 뿐만 아니라 다른 마커 위에도 열 수 있습니다. + - 고정된 이미지를 지정하는 마커와 달리 이미지를 반환하는 어댑터를 지정할 수 있으므로, 객체/상황별로 다른 이미지를 + 노출할 수 있습니다. + */ +NMF_EXPORT +@interface NMFInfoWindow : NMFOverlay + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 + 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat alpha; + +/** + 정보 창에서 사용할 이미지를 제공해 줄 수 있는 이미지 데이터 소스. + */ +@property(nonatomic) id dataSource; + +/** + 정보 창이 열려 있는 마커. + */ +@property(nonatomic, nullable, readonly) NMFMarker *marker; + +/** + 좌표. 좌표는 `-openWithMapView:`를 이용해 정보 창을 여는 경우 사용되며, `-openWithMarker:`를 + 이용해 여는 경우에는 마커의 위치에 정보 창이 열리므로 무시됩니다. + + 기본값은 유효하지 않은(`isValid`가 `NO`인) 좌표입니다. + */ +@property(nonatomic) NMGLatLng *position; + +/** + 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에 + 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위, + `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property(nonatomic) CGPoint anchor; + +/** + 정보 창과 좌표 또는 마커 간의 X축 방향 여백. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger offsetX; + +/** + 정보 창과 좌표 또는 마커 간의 Y축 방향 여백. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger offsetY; + +/** + 정보 창을 생성합니다. + + @return `NMFInfoWindow` 객체. + */ ++ (instancetype)infoWindow; + +/** + 정보 창을 `marker`의 위에 엽니다. `-openWithMarker:marker alignType:NMFAlignType.top`과 동일합니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + */ +- (void)openWithMarker:(NMFMarker *)marker; + +/** + 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우 + 무시됩니다. `align`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + @param align 정보 창을 열 방향. + + @warning Deprecated. `openWithMarker:alignType:`을 사용하세요. + */ +- (void)openWithMarker:(NMFMarker *)marker align:(NMFAlign)align __deprecated_msg("Use `openWithMarker:alignType:` instead."); + +/** + 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우 + 무시됩니다. `alignType`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + @param alignType 정보 창을 열 방향. + + @see `NMFAlignType` + */ +- (void)openWithMarker:(NMFMarker *)marker alignType:(NMFAlignType *)alignType; + +/** + 정보 창을 `position` 지점에 엽니다. + + 정보 창을 특정 지점에 열기 전에는 반드시 `position`과 `dataSource`를 지정해야 합니다. + + @param mapView 정보 창을 열 지도 객체. + */ +- (void)openWithMapView:(NMFMapView *)mapView; + +/** + 정보 창을 닫습니다. 정보 창이 열려 있지 않은 경우 무시됩니다. + */ +- (void)close; + +/** + 이미지를 다시 그립니다. + */ +- (void)invalidate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h new file mode 100644 index 00000000..e26a1a21 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h @@ -0,0 +1,20 @@ +#import "NMFOverlayImage.h" + +#import + +#import "NMFFoundation.h" + +@protocol NMFOverlayImageDataSource; + +NS_ASSUME_NONNULL_BEGIN + +NMF_EXPORT +@interface NMFInfoWindowDefaultTextSource : NSObject + ++ (instancetype)dataSource; + +@property(nonatomic, readwrite) NSString *title; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h new file mode 100644 index 00000000..8ef8d7b2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationButton.h @@ -0,0 +1,23 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 현위치 버튼 컨트롤. + */ +NMF_EXPORT +@interface NMFLocationButton : UIButton +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h new file mode 100644 index 00000000..1f937fe3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationManager.h @@ -0,0 +1,52 @@ +#import + +#import "NMFFoundation.h" + +@class NMGLatLng; +@protocol NMFLocationManagerDelegate; + +NMF_EXPORT +@interface NMFLocationManager : NSObject + +@property (nonatomic, getter=isUpdatingLocation) BOOL updatingLocation; +@property (nonatomic, getter=isUpdatingHeading) BOOL updatingHeading; + ++ (NMFLocationManager *)sharedInstance; + +- (void)addDelegate:(id)delegate; +- (void)removeDelegate:(id)delegate; + +- (CLAuthorizationStatus)locationUpdateAuthorization; + +- (void)startUpdatingLocation; +- (void)stopUpdatingLocation; + +- (void)startUpdatingHeading; +- (void)stopUpdatingHeading; + +- (NMGLatLng *)currentLatLng; + +@end + +@protocol NMFLocationManagerDelegate + +@optional + +// Responding to Location Events +- (void)locationManager:(NMFLocationManager *)locationManager didUpdateLocations:(NSArray *)locations; +- (void)locationManager:(NMFLocationManager *)locationManager didFailWithError:(NSError *)error; + +// Responding to Heading Events +- (void)locationManager:(NMFLocationManager *)locationManager didUpdateHeading:(CLHeading *)newHeading; +// Authorization Status Change +- (void)locationManager:(NMFLocationManager *)locationManager didChangeAuthStatus:(CLAuthorizationStatus)status; + +- (void)locationManagerDidStartLocationUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStartHeadingUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerBackgroundLocationUpdatesDidTimeout:(NMFLocationManager *)locationManager; +- (void)locationManagerBackgroundLocationUpdatesDidAutomaticallyPause:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStopLocationUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStopHeadingUpdates:(NMFLocationManager *)locationManager; + + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h new file mode 100644 index 00000000..9ca3dee9 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFLocationOverlay.h @@ -0,0 +1,142 @@ +#import +#import +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + + +/** + 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다. + */ +const static int NMF_LOCATION_OVERLAY_SIZE_AUTO = 0; + +/** + 위치 오버레이 기본 색상. + */ +extern UIColor *const NMF_LOCATION_OVERLAY_DEFAULT_COLOR; + +/** + 기본 위치 오버레이 Z 인덱스 + */ +const static int NMF_LOCATION_OVERLAY_GLOBAL_Z_INDEX = 300000; + +@class NMGLatLng; +@class NMFOverlayImage; + +/** + 사용자의 현재 위치를 나타내는 오버레이. 이 오버레이는 지도에 단 하나만 존재하며, 인스턴스를 직접 생성할 수 없고 + `NMFMapView.locationOverlay`를 이용해서 가져올 수 있습니다. + 위치 오버레이는 주 아이콘과 보조 아이콘, 원으로 구성됩니다. + - 주 아이콘: 반드시 필요합니다. 이벤트를 받을 수 있습니다. + - 보조 아이콘: 생략할 수 있습니다. 주 아이콘보다 약간 아래에 그려집니다. 이벤트를 받을 수 없습니다. + - 원: 생략할 수 있습니다. 강조 효과를 위해 사용되며, 보조 아이콘 아래에 그려집니다. 이벤트를 받을 수 없습니다. + */ +NMF_EXPORT +@interface NMFLocationOverlay : NMFOverlay + +/** + 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat iconWidth; + +/** + 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat iconHeight; + +/** + 보조 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat subIconWidth; + +/** + 보조 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat subIconHeight; + +/** + 오버레이의 좌표. + */ +@property(nonatomic, copy) NMGLatLng *location; + +/** + 방위. 도 단위. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat heading; +/** + 아이콘. + */ +@property(nonatomic, strong) NMFOverlayImage *icon; +/** + 보조 아이콘. + */ +@property(nonatomic, strong, nullable) NMFOverlayImage *subIcon; + +/** + 아이콘의 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 + 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 + 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 0.5)`입니다. + */ +@property(nonatomic) CGPoint anchor; + +/** + 보조 아이콘의 앵커. 앵커는 보조 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 + 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 + 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property(nonatomic) CGPoint subAnchor; + +/** + 원의 색상. + + 기본값은 `NMF_LOCATION_OVERLAY_DEFAULT_COLOR`입니다. + */ +@property(nonatomic, strong) UIColor *circleColor; + +/** + 원의 테두리 색상. + + 기본값은 `UIColor.clearColor`입니다. + */ +@property(nonatomic, strong) UIColor *circleOutlineColor; + +/** + 원의 외곽선 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat circleOutlineWidth; + +/** + 원의 반경. pt 단위. `0`일 경우 원이 그려지지 않습니다. + + 기본값은 `18`입니다. + */ +@property(nonatomic) CGFloat circleRadius; + +/** + 유효한 현 위치의 기본 아이콘 이미지를 반환합니다. + + @return `NMFOverlayImage` 객체. + */ ++ (NMFOverlayImage *)defaultIconImage; +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h new file mode 100644 index 00000000..e65af89e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h @@ -0,0 +1,47 @@ +#import + +@class NMFMapView; + +NS_ASSUME_NONNULL_BEGIN + +@interface NMFMapView (IBAdditions) + +// Core properties that can be manipulated in the Attributes inspector in +// Interface Builder. These redeclarations merely add the IBInspectable keyword. +// They appear here to ensure that they appear above the convenience properties; +// inspectables declared in NMFMapView.h are always sorted before those in +// NMFMapView+IBAdditions.h, due to ASCII sort order. + +#if TARGET_INTERFACE_BUILDER + +// HACK: We want this property to look like a URL bar in the Attributes +// inspector, but just calling it styleURL would violate Cocoa naming +// conventions and conflict with the existing NSURL property. Fortunately, IB +// strips out the two underscores for display. +@property (nonatomic, nullable) IBInspectable NSString *styleURL__; + +#endif // TARGET_INTERFACE_BUILDER + +// Convenience properties related to the initial viewport. These properties +// are not meant to be used outside of Interface Builder. latitude and longitude +// are backed by properties of type CLLocationDegrees, but these declarations +// must use the type double because Interface Builder is unaware that +// CLLocationDegrees is a typedef for double. + +@property (nonatomic) IBInspectable double latitude; +@property (nonatomic) IBInspectable double longitude; +@property (nonatomic) IBInspectable double zoomLevel; +@property (nonatomic) IBInspectable double pitch; + +// Renamed properties. Interface Builder derives the display name of each +// inspectable from the runtime name, but runtime names don’t always make sense +// in UI. + +@property (nonatomic) IBInspectable BOOL allowsZooming; +@property (nonatomic) IBInspectable BOOL allowsScrolling; +@property (nonatomic) IBInspectable BOOL allowsRotating; +@property (nonatomic) IBInspectable BOOL allowsTilting; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h new file mode 100644 index 00000000..117b0439 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapView.h @@ -0,0 +1,647 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFMyPositionMode.h" +#import "NMFFoundation.h" +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFLocationOverlay; +@class NMFCameraPosition; +@class NMFCameraUpdate; +@class NMFProjection; +@class NMFIndoorView; + +@protocol NMFMapViewDelegate; +@protocol NMFMapViewTouchDelegate; +@protocol NMFMapViewCameraDelegate; +@protocol NMFMapViewOptionDelegate; +@protocol NMFIndoorSelectionDelegate; +@protocol NMFPickable; + +/** + 기본 밝은 배경색. + */ +extern NMF_EXPORT UIColor *const NMFDefaultBackgroundLightColor; + +/** + 기본 어두운 배경색. + */ +extern NMF_EXPORT UIColor *const NMFDefaultBackgroundDarkColor; + +/** + 기본 밝은 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다. + + 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundLightImage`를 사용하세요. + */ +extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundLightImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundLightImage instead"))); + +/** + 기본 어두운 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다. + + 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundDarkImage`를 사용하세요. + */ +extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundDarkImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundDarkImage instead"))); + +/** + 건물 레이어 그룹. 기본적으로 활성화됩니다. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BUILDING; + +/** + 대중교통 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRANSIT; + +/** + 자전거도로 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BICYCLE; + +/** + 실시간 교통정보 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRAFFIC; + +/** + 지적편집도 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_CADASTRAL; + +/** + 등산로 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_MOUNTAIN; + +/** + 지도 유형을 나타내는 열거형. + @see `NMFMapView.mapType` + */ +typedef NS_ENUM(NSInteger, NMFMapType) { + /** 일반 지도. */ + NMFMapTypeBasic = 0, + /** 내비게이션 지도. */ + NMFMapTypeNavi, + /** 위성 지도. */ + NMFMapTypeSatellite, + /** 위성 지도(겹쳐보기). */ + NMFMapTypeHybrid, + /** 지형도. */ + NMFMapTypeTerrain, + /** 없음. 지도는 나타나지 않고 오버레이만이 나타납니다. */ + NMFMapTypeNone, + /** 내비게이션용 위성 지도(겹쳐보기). */ + NMFMapTypeNaviHybrid +}; + +/** + 지도 뷰 클래스. + */ +NMF_EXPORT IB_DESIGNABLE +@interface NMFMapView : UIView + +/** + 기본 밝은 배경 이미지. + */ +@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundLightImage; + +/** + 기본 어두운 배경 이미지. + */ +@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundDarkImage; + +/** + 지도 인증 요청. 네트워크 오류 등의 이유로 인증을 재시도할 때 호출합니다. + @see `NMFAuthManager` + */ +- (void)authorize; + +#pragma mark Creating Instances + +/** + 프레임 크기로 지도 뷰의 인스턴스를 생성합니다. + + @param frame 뷰의 프레임. + @return `NMFMapView` 인스턴스. + */ +- (instancetype)initWithFrame:(CGRect)frame; + +#pragma mark Accessing the Delegate + +/** + `NMFMapView`의 위임자. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요. + + 만약 `delegate`와 `touchDelegate`가 모두 지정되면 `delegate`는 무시되고 `touchDelegate`만이 동작합니다. + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use touchDelegate, addCameraDelegate/removeCameraDelegate or addOptionDelegate/removeOptionDelegate"))); + +/** + 지도 터치에 대한 위임자. 지도 탭, 심벌 탭 등 지도와 관련된 터치 이벤트가 전달됩니다. + */ +@property(nonatomic, weak, nullable) IBOutlet id touchDelegate; + +/** + 카메라의 움직임에 대한 위임자를 등록합니다. + + @param delegate `NMFMapViewCameraDelegate` 객체. + */ +- (void)addCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addCameraDelegate(delegate:)); + +/** + 카메라의 움직임에 대한 위임자를 해제합니다. + + @param delegate `NMFMapViewCameraDelegate` 객체. + */ +- (void)removeCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeCameraDelegate(delegate:)); + +/** + 지도 옵션 변경에 대한 위임자를 등록합니다. + + @param delegate `NMFMapViewOptionDelegate` 객체. + */ +- (void)addOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addOptionDelegate(delegate:)); + +/** + 지도 옵션 변경에 대한 위임자를 해제합니다. + + @param delegate `NMFMapViewOptionDelegate` 객체. + */ +- (void)removeOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeOptionDelegate(delegate:)); + +#pragma mark Configuring the Map’s Appearance + +/** + 라이트 모드를 활성화할지 여부를 지정합니다. 라이트 모드가 활성화되면 지도의 로딩이 빨라지고 메모리 소모가 + 감소합니다. 그러나 다음과 같은 제약이 생깁니다. +
    +
  • 지도의 전반적인 화질이 하락합니다.
  • +
  • 카메라가 회전하거나 기울어지면 지도 심벌도 함께 회전하거나 기울어집니다.
  • +
  • 줌 레벨이 커지거나 작아지면 지도 심벌도 일정 정도 함께 커지거나 작아집니다.
  • +
  • `mapType` 지도 유형을 사용할 수 없습니다.
  • +
  • `setLayerGroup:isEnabled:`, `getLayerGroupEnabled:`, `indoorMapEnabled`, `nightModeEnabled`, `lightness`, `buildingHeight`, `symbolScale`, `symbolPerspectiveRatio`가 동작하지 않습니다.
  • +
  • `NMFMapViewTouchDelegate.mapView:didTapSymbol:`이 호출되지 않습니다.
  • +
  • `NMFMarker.isHideCollidedSymbols`가 동작하지 않습니다.
  • +
+ 기본값은 `NO`입니다. + */ +@property(nonatomic) BOOL liteModeEnabled; + +/** + 지도의 배경색. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다. + */ +@property (nonatomic) UIColor *backgroundColor; + +/** + 지도의 배경 이미지. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다. + */ +@property (nonatomic, nullable) UIImage *backgroundImage; + +/** + 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다. + 이 속성을 변경하여 패딩을 지정하면 카메라의 좌표가 변경됩니다. 즉, `setContentInset:contentInset keepCamera:NO`와 동일합니다. +*/ +@property (nonatomic, assign) UIEdgeInsets contentInset; + +/** + 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다. + + `keepCamera`에 따라 카메라의 좌표 또는 지도의 영역이 유지됩니다. + - `YES`인 경우: 카메라의 좌표를 유지하며 콘텐츠 영역을 변경합니다. 따라서 화면에 나타나는 지도의 전체 영역이 변경됩니다. + 카메라에 변화가 없으므로 `NMFMapViewCameraDelegate`의 메서드가 호출되지 않습니다. + - `NO`인 경우: 화면에 나타나는 지도의 전체 영역을 유지하며 콘텐츠 영역을 변경합니다. + 카메라의 좌표는 새로운 콘텐츠 영역의 중심을 가리키도록 변경되며, `NMFMapViewCameraDelegate`의 메서드가 호출됩니다. + + @param contentInset 패딩. + @param keepCamera 카메라의 좌표를 유지할지 여부. 유지할 경우 `YES`, 그렇지 않을 경우 `NO`. +*/ +- (void)setContentInset:(UIEdgeInsets)contentInset keepCamera:(BOOL)keepCamera; + +/** + 지도 뷰의 화면상 너비. pt 단위. + */ +@property (nonatomic, readonly) double mapWidth; + +/** + 지도 뷰의 화면상 높이. pt 단위. + */ +@property (nonatomic, readonly) double mapHeight; + +/** + 지도 유형. + + 기본값은 `NMFMapTypeBasic`입니다. + */ +@property(nonatomic) NMFMapType mapType; + +/** + 지도가 어두운지 여부를 반환합니다. 야간 모드가 활성화되어 있거나 지도의 유형이 `NMFMapTypeSatellite` + 또는 `NMFMapTypeHybrid`일 경우 어두운 것으로 간주됩니다. + + @return 어두울 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isDark; + +/** + 레이어 그룹을 활성화할지 여부를 지정합니다. + + @param group 레이어 그룹의 이름. + @param enabled 활성화할 경우 `YES`, 그렇지 않을 경우 `NO`입니다. + */ +- (void)setLayerGroup:(NSString *)group isEnabled:(BOOL)enabled; + +/** + 레이어 그룹이 활성화되어 있는지 여부를 반환합니다. + + @param group 레이어 그룹의 이름. + @return 활성화된 경우 `YES`, 그렇지 않을 경우 `NO` + */ +- (BOOL)getLayerGroupEnabled:(NSString *)group; + +/** + 배경의 명도 계수. 값의 범위는 `-1`~`1`. + 계수가 `-1`일 경우 명도 최소치인 검정색으로, `1`일 경우 명도 최대치인 흰색으로 표시됩니다. 오버레이에는 적용되지 않습니다. + + 기본값 `0`입니다. + */ +@property(nonatomic) CGFloat lightness; + +/** + 건물의 3D 높이 배율. 값의 범위는 `0`~`1`. 배율이 `0`일 경우 지도를 기울이더라도 건물이 2D로 나타납니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) float buildingHeight; + +/** + 야간 모드를 활성화할지 여부. 야간 모드가 활성화되면 지도 스타일이 어둡게 바뀝니다. 지도 유형이 야간 + 모드를 지원하지 않으면 활성화하더라도 아무 변화가 일어나지 않습니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, getter=isNightModeEnabled) BOOL nightModeEnabled; + +/** + 이 지도의 `NMFLocationOverlay` 객체. 항상 같은 객체를 가리킵니다. + */ +@property (nonatomic, strong, readonly) NMFLocationOverlay *locationOverlay; + +/** + 지도의 로캘. + + 기본값은 시스템 로캘을 의미하는 `nil`입니다. + */ +@property (nonatomic, readwrite, nullable) NSString *locale; + + +/** + 네이버 로고의 위치를 지정하는 열거형. + @see `NMFMapView.logoAlign` + */ +typedef NS_ENUM(NSInteger, NMFLogoAlign) { + /** 지도의 좌하단. */ + NMFLogoAlignLeftBottom = 0, + /** 지도의 우하단. */ + NMFLogoAlignRightBottom, + /** 지도의 좌상단. */ + NMFLogoAlignLeftTop, + /** 지도의 우상단. */ + NMFLogoAlignRightTop +}; + +/** + 네이버 로고의 위치를 지정합니다. + + 기본값은 NMFLogoAlignLeftBottom. + */ +@property (nonatomic) NMFLogoAlign logoAlign; + +/** + 네이버 로고의 마진을 지정합니다. + */ +@property (nonatomic) UIEdgeInsets logoMargin; + +/** + 네이버 로고 클릭을 활성화할지 여부를 지정합니다. 활성화하면 네이버 로고 클릭시 범례, 법적 공지, 오픈소스 + 라이선스를 보여주는 알림창이 열립니다. + + 이 옵션을 `NO`로 지정하는 앱은 반드시 앱 내에 네이버 지도 SDK의 법적 공지 + (`-showLegalNotice`) 및 오픈소스 라이선스(`-showOpenSourceLicense`)뷰 컨트롤러를 호출하는 + 메뉴를 만들어야 합니다. + + 기본값은 `YES`입니다. + */ +@property (nonatomic) BOOL logoInteractionEnabled; + +/** + 법적 공지를 보여주는 뷰컨트롤러를 호출합니다. + */ +- (void)showLegalNotice; + +/** + 오픈소스 라이선스를 보여주는 뷰컨트롤러를 호출합니다. + */ +- (void)showOpenSourceLicense; + +/** + 지도 화면을 강제로 새로고침합니다. 실시간 교통정보 등 지도 화면에 나타나는 실시간성 데이터는 적시에 자동으로 + 새로고침되므로 이 메서드를 별도로 호출할 필요가 없습니다. + */ +- (void)forceRefresh; + +/** + 지도가 렌더링되는 속도(fps, frames per second)를 설정합니다. + + 기본값은 `60`입니다. + @see `CADisplayLink.preferredFramesPerSecond` + */ +@property (nonatomic, assign) double preferredFramesPerSecond; + + +#pragma mark Configuring How the User Interacts with the Map + +/** + 카메라 이동 애니메이션의 기본 지속 시간. 초 단위. + + 기본값은 `0.2`입니다. + */ +@property(nonatomic) NSTimeInterval animationDuration; + +/** + 줌 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화하면 지도를 더블 탭, 두 손가락 탭, 핀치해 카메라의 줌 레벨을 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isZoomGestureEnabled) BOOL zoomGestureEnabled; + +/** + 스크롤 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화하면 지도를 스와이프해 카메라의 좌표를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isScrollGestureEnabled) BOOL scrollGestureEnabled; + +/** + 로테이트 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 두 손가락으로 지도를 돌려 카메라의 베어링 각도를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isRotateGestureEnabled) BOOL rotateGestureEnabled; + +/** + 틸트 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 지도를 두 손가락으로 세로 스와이프해 카메라의 틸트 각도를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isTiltGestureEnabled) BOOL tiltGestureEnabled; + +/** + 스톱 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 지도 애니메이션 진행 중 탭으로 지도 애니메이션을 중지할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isStopGestureEnabled) BOOL stopGestureEnabled; + +/** + 스크롤 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.088`입니다. + */ +@property(nonatomic) CGFloat scrollFriction; + +/** + 줌 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.12375`입니다. + */ +@property(nonatomic) CGFloat zoomFriction; + +/** + 회전 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.19333`입니다. + */ +@property(nonatomic) CGFloat rotateFriction; + +/** + 지도 클릭 시 피킹되는 `NMFPickable`의 클릭 허용 반경. pt 단위. 사용자가 지도를 클릭했을 때, 클릭된 지점이 `NMFPickable`의 + 영역 내에 존재하지 않더라도 허용 반경 내에 있다면 해당 요소가 클릭된 것으로 간주됩니다. + + 기본값은 `2`입니다. + */ +@property(nonatomic) NSInteger pickTolerance; + + +#pragma mark Indoor + + +/** + 실내지도 활성화 여부. 활성화하면 카메라가 일정 크기 이상 확대되고 실내지도가 있는 영역에 포커스될 경우 자동으로 해당 영역의 실내지도가 나타납니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, getter=isIndoorMapEnabled) BOOL indoorMapEnabled; + +/** + 실내지도 영역의 포커스 유지 반경. pt 단위. 지정할 경우 카메라의 위치가 포커스 유지 반경을 완전히 벗어날 때까지 영역에 대한 포커스가 유지됩니다. + + 기본값은 `20`입니다. + */ +@property(nonatomic) double indoorFocusRadius; + +/** + 실내 지도에 대한 위임자를 등록합니다. + + @param delegate `NMFIndoorSelectionDelegate` 객체. + */ +- (void)addIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addIndoorSelectionDelegate(delegate:)); + +/** + 실내 지도에 대한 위임자를 해제합니다. + + @param delegate `NMFIndoorSelectionDelegate` 객체. + */ +- (void)removeIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeIndoorSelectionDelegate(delegate:)); + +/** + 실내지도 뷰를 나타내도록 요청합니다. 이 메서드를 호출하더라도 실내지도 뷰가 즉시 나타나는 것이 보장되지 않으며, + 요청된 실내지도 뷰를 포함하는 영역이 포커스되어야 그 뷰가 나타납니다. 단, 요청된 실내지도 뷰를 포함하는 영역이 + 이미 포커스되어 있을 경우 즉시 그 뷰가 나타납니다. + + @param indoorView 실내지도 뷰. 요청을 취소할 경우 `nil`. + */ +- (void)requestIndoorView:(NMFIndoorView * _Nullable)indoorView; + + + +#pragma mark Manipulating the Viewpoint + +/** + 지도의 최소 줌 레벨. + + 기본값은 `0`입니다. + */ +@property (nonatomic) double minZoomLevel; + +/** + 지도의 최대 줌 레벨. + + 기본값은 `20`입니다. + */ +@property (nonatomic) double maxZoomLevel; + +/** + 지도의 최대 기울기 각도. + + 기본값은 `60`입니다. + */ +@property (nonatomic) double maxTilt; + + +/** + 지도의 제한 영역. + + 기본값은 제한이 없음을 의미하는 `nil`입니다. + */ +@property (nonatomic, nullable) NMGLatLngBounds *extent; + +/** + 지도의 콘텐츠 영역 중심에 대한 카메라 위치. + */ +@property (nonatomic, copy, readonly) NMFCameraPosition *cameraPosition; + +/** + 지도의 콘텐츠 영역에 대한 `NMGLatLngBounds`. 콘텐츠 패딩이 모두 `0`이면 `coveringBounds`와 동일한 영역이, + 콘텐츠 패딩이 지정되어 있으면 `coveringBounds`에서 콘텐츠 패딩을 제외한 영역이 반환됩니다. + */ +@property (nonatomic, readonly, copy) NMGLatLngBounds *contentBounds; + +/** + 지도의 콘텐츠 영역에 대한 폴리곤 객체. 콘텐츠 패딩이 모두 `0`이면 `coveringRegion`과 동일한 폴리곤이, + 콘텐츠 패딩이 지정되어 있으면 `coveringRegion`에서 콘텐츠 패딩을 제외한 폴리곤이 반환됩니다. + */ +@property (nonatomic, copy, readonly) NMGPolygon *contentRegion; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 `NMGLatLngBounds`. + */ +@property (nonatomic, readonly, copy) NMGLatLngBounds *coveringBounds; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 폴리곤 객체. + */ +@property (nonatomic, copy, readonly) NMGPolygon *coveringRegion; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 타일 ID의 목록을 반환합니다. + + @return 타일 ID의 목록. + @see NMFTileId + */ +- (NSArray *)getCoveringTileIds; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 `zoom` 레벨 타일 ID의 목록을 반환합니다. + + @param zoom 줌 레벨. + @return 타일 ID의 목록. + @see NMFTileId + */ +- (NSArray *)getCoveringTileIdsAtZoom:(NSInteger)zoom; + +/** + 이 지도에 대한 `NMFProjection` 객체. 항상 같은 객체가 반환됩니다. + */ +@property (nonatomic, readonly) NMFProjection *projection; + +/** + 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다. + + @param cameraUpdate `NMFCameraUpdate` 객체. + */ +- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate; + +/** + 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다. + 카메라 이동이 완료되거나 취소되었을 경우 `completion` 블록이 호출됩니다. + + @param cameraUpdate `NMFCameraUpdate` 객체. + @param completion 카메라 이동이 완료되었을 때 호출되는 콜백 블록. 애니메이션이 있으면 완전히 끝난 후에 호출됩니다. + `isCancelled`는 카메라 이동이 완료되기 전에 다른 카메라 이동이 호출되거나 사용자가 제스처로 지도를 조작한 경우 `YES`입니다. + */ +- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate completion:(nullable void (^)(bool isCancelled))completion; + +/** + 현재 진행 중인 지도 이동 애니메이션을 취소합니다. + */ +- (void)cancelTransitions; + +/** + 현재 진행 중인 지도 이동 애니메이션을 취소합니다. + + @param reason 취소의 원인. + */ +- (void)cancelTransitions:(NSInteger)reason; + +/** + 위치 추적 모드. + + `NMFMyPositionMode` 객체. + */ +@property(nonatomic) NMFMyPositionMode positionMode; + +#pragma mark Symbol + +/** + 지도를 기울일 때 적용되는 심벌의 원근 계수. 계수가 `1`일 경우 배경 지도와 동일한 비율로 멀리 있는 + 심벌은 작아지고 가까이 있는 심벌은 커지며, `0`에 가까울수록 원근 효과가 감소합니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat symbolPerspectiveRatio; + +/** + 심벌의 크기 배율. 배율이 `0.5`일 경우 절반, `2`일 경우 두 배의 크기로 표시됩니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat symbolScale; + + +#pragma mark Pickable Query + +/** + 특정 화면 좌표 주변 `tolerance` 내에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에 + 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다. + + @param point 화면 좌표. + @param tolerance point를 기준으로 한 반경. pt 단위. + @return 오버레이 및 심벌의 목록. point 주변 tolerance pt 내에 존재하는 오버레이 또는 심벌이 없을 경우 빈 목록. + */ +- (NSArray> *)pickAll:(CGPoint)point withTolerance:(NSInteger)tolerance; + +/** + 특정 화면 좌표에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다. + `pickAll(point, 0)`과 동일합니다. + + @param point 화면 좌표. + @return 오버레이 또는 심벌. point에 존재하는 오버레이 또는 심벌이 없을 경우 nil. + */ +- (nullable id)pick:(CGPoint)point; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h new file mode 100644 index 00000000..eb9ab792 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h @@ -0,0 +1,53 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; + +/** + 카메라의 움직임에 대한 콜백 프로토콜. +*/ +@protocol NMFMapViewCameraDelegate + +@optional +/** + 카메라의 움직임이 시작될 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (void)mapView:(NMFMapView *)mapView cameraWillChangeByReason:(NSInteger)reason animated:(BOOL)animated; + +/** + 카메라가 움직이고 있을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView cameraIsChangingByReason:(NSInteger)reason; + +/** + 카메라의 움직임이 끝났을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`. + */ +- (void)mapView:(NMFMapView *)mapView cameraDidChangeByReason:(NSInteger)reason animated:(BOOL)animated; + +/** + 카메라의 움직임이 끝나면 호출되는 콜백 메서드. 이 메서드는 다음과 같은 경우에 호출됩니다. + 카메라가 애니메이션 없이 움직일 때. 단, 사용자가 제스처로 지도를 움직이는 경우 제스처가 완전히 끝날 때까지(터치가 끝날 때까지) 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다. + 카메라 애니메이션이 완료될 때. 단, 카메라 애니메이션이 진행 중일 때 새로운 애니메이션이 발생하거나, 기존 `NMFMapView.moveCamera:completion:`의 콜백 내에서 카메라 이동이 일어날 경우 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다. + `NMFMapView.cancelTransitions()`가 호출되어 카메라 애니메이션이 명시적으로 취소될 때. + 해당 시점의 카메라 위치는 콜백 내에서 `mapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + */ +- (void)mapViewCameraIdle:(NMFMapView *)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h new file mode 100644 index 00000000..60972f00 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewDelegate.h @@ -0,0 +1,83 @@ +#import + +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; +@class NMFIndoorRegion; + +/** + `NMFMapView`에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 콜백 메서드가 정의된 프로토콜. 이 프로토콜은 더이상 사용이 권장되지 않습니다. `NMFMapViewTouchDelegate`, `NMFMapViewCameraDelegate`, `NMFMapViewOptionDelegate`를 사용하세요. + */ +__attribute__((deprecated("Use NMFMapViewTouchDelegate, NMFMapViewCameraDelegate or NMFMapViewOptionDelegate"))) +@protocol NMFMapViewDelegate + +@optional + +#pragma mark Responding to Map Position Changes + +/** + 지도가 표시하는 영역이 변경될 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경될 `NMFMapView` 객체. + @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView regionWillChangeAnimated:(BOOL)animated byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경되고 있을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경되고 있는 `NMFMapView` 객체. + @param reason 움직임의 원인. + */ +- (void)mapViewRegionIsChanging:(NMFMapView *)mapView byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경되었을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경된 `NMFMapView` 객체. + @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView regionDidChangeAnimated:(BOOL)animated byReason:(NSInteger)reason; + +/** + 현재 진행 중인 지도 이동 애니메이션이 취소되었을때 호출되는 콜백 메서드. + + @param mapView 영역이 변경되고 있었던 `NMFMapView` 객체. + @param reason 취소된 원인. + */ +- (void)mapViewCameraUpdateCancel:(NMFMapView *)mapView byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경된 후 진행 중인 터치 이벤트가 없을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경된 `NMFMapView` 객체. + */ +- (void)mapViewIdle:(NMFMapView *)mapView; + +#pragma mark Responding to Map TouchEvent + +/** + 사용자가 지도의 심벌을 탭하면 호출됩니다. + + @param mapView `NMFMapView` 객체. + @param symbol 탭한 지도 심벌 객체. + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewDelegate`의 `didTapMapView`가 호출됩니다. + */ +- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol; + +/** + 사용자가 지도를 탭하면 호출됩니다. + + @param point 탭한 화면 좌표. + @param latlng 탭한 위경도 좌표. + */ +- (void)didTapMapView:(CGPoint)point LatLng:(NMGLatLng*)latlng; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h new file mode 100644 index 00000000..a28bd5e0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h @@ -0,0 +1,22 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 지도 옵션 변경에 대한 콜백 프로토콜. + */ +@protocol NMFMapViewOptionDelegate + +@optional +/** + 지도의 옵션이 변경되면 호출되는 콜백 메서드. + + @param mapView `NMFMapView` 객체. + */ +- (void)mapViewOptionChanged:(NMFMapView *)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h new file mode 100644 index 00000000..af16533d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h @@ -0,0 +1,34 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; + +/** + 지도 터치에 대한 콜백 프로토콜. +*/ +@protocol NMFMapViewTouchDelegate + +@optional + +/** + 지도 심벌이 탭되면 호출되는 콜백 메서드. + + @param mapView 지도 객체. + @param symbol 탭된 심벌. + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 이벤트가 지도로 전달되어 `mapView:didTapMap:point:`가 호출됩니다. + */ +- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol; + +/** + 지도가 탭되면 호출되는 콜백 메서드. + + @param latlng 탭된 지점의 지도 좌표. + @param point 탭된 지점의 화면 좌표. + */ +- (void)mapView:(NMFMapView *)mapView didTapMap:(NMGLatLng*)latlng point: (CGPoint)point; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h new file mode 100644 index 00000000..4b5331cf --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarker.h @@ -0,0 +1,363 @@ +#import +#import +#import + +#import "NMFOverlay.h" +#import "NMFMarkerConstants.h" +#import "NMFInfoWindow.h" + +@class NMGLatLng; +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다. + */ +const static int NMF_MARKER_SIZE_AUTO = 0; + +/** + 기본 마커 전역 Z 인덱스 + */ +const static int NMF_MARKER_GLOBAL_Z_INDEX = 200000; + +/** + 파란색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLUE; +/** + 회색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GRAY; +/** + 녹색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GREEN; +/** + 하늘색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_LIGHTBLUE; +/** + 분홍색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_PINK; +/** + 빨간색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_RED; +/** + 노란색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_YELLOW; +/** + 검은색 마커 이미지. 색상을 덧입히기에 적합합니다. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLACK; +/** + 기본 마커 이미지. `NMF_MARKER_IMAGE_GREEN`과 동일합니다. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_DEFAULT; + +/** + 저밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY; +/** + 중밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY; +/** + 고밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY; + +/** + 기본 앵커. 가운데 아래를 가리킵니다. + + @see `NMFMarker.anchor` + */ +extern const NMF_EXPORT CGPoint NMF_MARKER_ANCHOR_DEFAULT; + +/** + 아이콘과 캡션을 이용해 지도 위의 한 지점을 표시하는 오버레이. + */ +NMF_EXPORT +@interface NMFMarker : NMFOverlay + +/** + 사용자가 임의로 지정할 수 있는 태그. 마커를 그루핑하거나 구분하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NSUInteger tag; + +/** + 아이콘. + */ +@property (nonatomic, strong) NMFOverlayImage *iconImage; + +/** + 아이콘에 덧입힐 색상. 덧입힐 색상을 지정하면 덧입힐 색상이 아이콘 이미지의 색상과 가산 혼합됩니다. 단, 덧입힐 색상의 + 알파는 무시됩니다. + + 기본값은 `UIColor.clearColor`입니다. + */ +@property (nonatomic, strong) UIColor *iconTintColor; + +/** + 아이콘의 너비. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_MARKER_SIZE_AUTO`입니다. + */ +@property (nonatomic) CGFloat width; + +/** + 아이콘의 높이. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 높이를 따릅니다. + + 기본값은 `NMF_MARKER_SIZE_AUTO`입니다. + */ +@property (nonatomic) CGFloat height; + +/** + 아이콘에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 아이콘은 크게, 먼 아이콘은 작게 표시됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL iconPerspectiveEnabled; + +/** + 캡션에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 캡션은 크게, 먼 캡션은 작게 표시됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL captionPerspectiveEnabled; + +/** + 마커를 평평하게 설정할지 여부. 마커가 평평할 경우 지도가 회전하거나 기울어지면 마커 이미지도 함께 회전하거나 + 기울어집니다. 단, 마커가 평평하더라도 이미지의 크기는 항상 동일하게 유지됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, getter=isFlat) BOOL flat; + + /** + 마커와 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 마커와 다른 마커가 겹칠 경우 다른 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 마커와 다른 마커의 캡션이 겹칠 경우 다른 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 마커가 `isHideCollidedMarkers`이 `YES`인 다른 마커와 겹치더라도 아이콘을 무조건 표시할지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isForceShowIcon; + +/** + 마커가 `isHideCollidedCaptions`이 `YES`인 다른 마커와 겹치더라도 캡션을 무조건 표시할지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isForceShowCaption; + +/** + 좌표. 마커를 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다. + */ +@property (nonatomic, strong) NMGLatLng *position; + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 + 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat alpha; + +/** + 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에 + 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위, + `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property (nonatomic) CGPoint anchor; + +/** + 아이콘의 각도. 도 단위. 각도를 지정하면 아이콘이 해당 각도만큼 시계 방향으로 회전합니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) CGFloat angle; + +/** + 캡션 텍스트. 빈 문자열일 경우 캡션이 표시되지 않습니다. + + 기본값은 빈 문자열입니다. + */ +@property (nonatomic, copy) NSString *captionText; + +/** + 캡션의 텍스트 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *captionColor; + +/** + 캡션의 외곽 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *captionHaloColor; + +/** + 캡션의 텍스트 크기. pt 단위. + + 기본값은 `12`입니다. + */ +@property(nonatomic) CGFloat captionTextSize; + +/** + 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다. + 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다. + `0`일 경우 너비를 제한하지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat captionRequestedWidth; + +/** + 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 캡션의 최소 줌 레벨보다 작을 경우 아이콘만 나타나고 + 주 캡션 및 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double captionMinZoom; + +/** + 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 캡션의 최대 줌 레벨보다 클 경우 아이콘만 나타나고 + 주 캡션 및 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double captionMaxZoom; + +/** + 보조 캡션의 텍스트. 보조 캡션은 주 캡션의 아래에 나타납니다. 빈 문자열일 경우 보조 캡션이 표시되지 않습니다. + + 기본값은 빈 문자열입니다. + */ +@property (nonatomic, copy) NSString *subCaptionText; + +/** + 보조 캡션의 텍스트 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *subCaptionColor; + +/** + 보조 캡션의 외곽 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *subCaptionHaloColor; + +/** + 보조 캡션의 텍스트 크기. pt 단위. + + 기본값은 `12`입니다. + */ +@property(nonatomic) CGFloat subCaptionTextSize; + +/** + 보조 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다. + 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다. + `0`일 경우 너비를 제한하지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat subCaptionRequestedWidth; + +/** + 보조 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최소 줌 레벨보다 작을 경우 아이콘 및 + 주 캡션만 나타나고 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double subCaptionMinZoom; + +/** + 보조 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최대 줌 레벨보다 클 경우 아이콘 및 주 + 캡션만 나타나고 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double subCaptionMaxZoom; + +/** + 캡션 아이콘의 정렬 방향. + + 기본값은 `NMFAlignBottom`입니다. + + @warning Deprecated. `captionAligns` 속성을 사용하세요. + */ +@property(nonatomic) NMFAlign captionAlign __deprecated_msg("Use `captionAligns` instead."); + +/** + 캡션을 아이콘의 어느 방향에 위치시킬지를 지정합니다. 캡션은 `captionAligns` 배열에 지정된 순서대로 우선적으로 + 위치합니다. 만약 캡션이 다른 마커와 겹치지 않거나 겹치더라도 해당 마커의 `isHideCollidedCaptions`가 + `NO`라면 캡션은 반드시 `captionAligns[0]`에 위치합니다. 그렇지 않을 경우 겹치지 않은 다음 + 방향에 위치하며, 어느 방향으로 위치시켜도 다른 마커와 겹칠 경우 캡션이 숨겨집니다. + + 기본값은 `NMFAlignType.bottom`입니다. + + @see `NMFAlignType` + */ +@property(nonatomic) NSArray *captionAligns; + +/** + 아이콘과 캡션 간의 여백. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat captionOffset; + +/** + 마커에 열려 있는 정보 창. +*/ +@property (nonatomic, strong, nullable, readonly) NMFInfoWindow *infoWindow; + +/** + 위치를 지정하여 마커를 생성합니다. + + @param position 좌표. + @return `NMFMarker` 객체. + */ ++(instancetype)markerWithPosition:(NMGLatLng *)position; + +/** + 위치와 아이콘을 지정하여 마커를 생성합니다. + + @param position 좌표. + @param iconImage 아이콘. + @return `NMFMarker` 객체. + */ ++(instancetype)markerWithPosition:(NMGLatLng *)position iconImage:(NMFOverlayImage *)iconImage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h new file mode 100644 index 00000000..6fae1624 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMarkerConstants.h @@ -0,0 +1,3 @@ +#import + +const static NSString *INFOWINDOW_TITLE_KEY = @"NMF_MARKER_TITLE"; diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h new file mode 100644 index 00000000..f3d0f541 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMultipartPath.h @@ -0,0 +1,131 @@ +#import +#import + +#import "NMFOverlay.h" +#import "NMFPathColor.h" + +@class NMGLineString; +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 멀티 파트 경로선 전역 Z 인덱스 + */ +const static int NMF_MULTI_PART_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000; + +/** + 경로선을 여러 파트로 나누어 각각 다른 색상을 부여할 수 있는 특수한 `NMFPath`. 다양한 색상으로 구성된 + 경로선을 나타내려면 여러 개의 `NMFPath`를 사용하는 것보다 이 클래스를 사용하는 것이 효율적입니다. + `MultipartPathOverlay`는 좌표열 파트의 목록와 색상 파트의 목록으로 구성되며, `0`번째 좌표열 파트에 + `0`번째 색상 파트의 색상이 적용됩니다. 따라서 좌표열 파트와 색상 파트의 크기가 동일해야 합니다. + */ +NMF_EXPORT +@interface NMFMultipartPath : NMFOverlay + +/** + 좌표열 파트의 목록. 목록의 크기가 `1`이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *lineParts; + +/** + 색상 파트의 목록. 목록의 크기가 `1` 이상, 각 파트의 크기가 `2` 이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *colorParts; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 테두리 두께. pt 단위. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat outlineWidth; + +/** + 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는 + `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다. + + - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) double progress; + +/** + 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `25`입니다. + */ +@property(nonatomic) NSUInteger patternInterval; + +/** + 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다. + `nil`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property(nonatomic, strong, nullable) NMFOverlayImage *patternIcon; + +/** + 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 경로선과 마커가 겹칠 경우 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 좌표열 파트의 목록을 지정하여 NMFMultipartPath 객체를 생성합니다. + 각 파트의 크기는 `2`이상이어야 합니다. + + ``` + NMFMultipartPath *mPath = [NMFMultipartPath multipartPathWithCoordParts:@[ + @[NMGLatLngMake(37.20, 127.051), + NMGLatLngMake(37.21, 127.052), + NMGLatLngMake(37.22, 127.053)], + @[NMGLatLngMake(37.23, 127.054), + NMGLatLngMake(37.24, 127.055), + NMGLatLngMake(37.25, 127.056)] + ]]; + mPath.mapView = mapView; + ``` + + @param coordParts 좌표열 파트의 목록. + @return `NMFMultipartPath` 객체. + */ ++ (nullable instancetype)multipartPathWith:(NSArray *> *)coordParts; + +/** + `NMGLineString`배열을 지정하여 NMFMultipartPath 객체를 생성합니다. + 배열내 `NMGLineString`객체의 `isValid` 속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param lineParts `NMGLineString`파트의 목록. + @return `NMFMultipartPath` 객체. + */ ++ (nullable instancetype)multipartPath:(NSArray *)lineParts; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h new file mode 100644 index 00000000..69b1c448 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFMyPositionMode.h @@ -0,0 +1,30 @@ +#import + +/** + 위치 추적 모드를 나타내는 열거형. + */ +typedef NS_ENUM(NSUInteger, NMFMyPositionMode) { + /** + 위치 추적을 사용하지 않는 모드. `NMFLocationOverlay`는 움직이지 않습니다. + */ + NMFMyPositionDisabled = 0, + + /** + 위치는 추적하지만 지도는 움직이지 않는 모드. `NMFLocationOverlay`가 사용자의 위치를 따라 움직이나 지도는 + 움직이지 않습니다. + */ + NMFMyPositionNormal = 1, + + /** + 위치를 추적하면서 카메라도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표가 사용자의 위치를 따라 + 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일 경우 모드가 `NMFMyPositionNormal`로 바뀝니다. + */ + NMFMyPositionDirection = 2, + + /** + 위치를 추적하면서 카메라의 좌표와 헤딩도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표, + 헤딩이 사용자의 위치, 사용자가 바라보고 있는 방향을 따라 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일 + 경우 모드가 `NMFMyPositionNormal`로 바뀝니다. + */ + NMFMyPositionCompass = 3 +}; diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h new file mode 100644 index 00000000..7ca516e1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFNaverMapView.h @@ -0,0 +1,88 @@ +#import + +#import "NMFFoundation.h" +#import "NMFMyPositionMode.h" + +@class NMFMapView; + +@protocol NMFMapViewDelegate; + +/** + 지도의 컨트롤을 내장한 지도 뷰 클래스. + */ +NMF_EXPORT +@interface NMFNaverMapView : UIView + +/** + 지도 뷰 객체. + + @see `NMFMapView` + */ +@property(nonatomic, readonly, nonnull) NMFMapView *mapView; + +/** + 지도 뷰에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 델리게이트. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요. + + @see `NMFMapViewDelegate` + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use delegates of NMFMapView"))); + +/** + 나침반 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showCompass; + +/** + 축척 바 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showScaleBar; + +/** + 줌 컨트롤 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showZoomControls; + +/** + 실내지도 층 피커 활성화 여부. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showIndoorLevelPicker; + +/** + 현 위치 버튼이 활성화되어 있는지 여부. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showLocationButton; + +/** + 위치 추적 모드. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `positionMode`를 사용하세요. + + @see `NMFMyPositionMode` + */ +@property(nonatomic) NMFMyPositionMode positionMode __attribute__((deprecated("Use NMFMapView.positionMode"))); + +/** + 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다. + `takeSnapShot:YES complete:complete` 와 동일합니다. + + @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드. + */ +- (void)takeSnapShot:(void (^_Nullable)(UIImage * _Nonnull))complete; + +/** + 컨트롤을 포함한 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다. + + @param showControls 컨트롤 노출 여부. 노출할 경우 `YES`, 그렇지 않을 경우 `NO`. + @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드. + */ +- (void)takeSnapshotWithShowControls:(BOOL)showControls complete:(void (^_Nullable)(UIImage * _Nonnull))complete; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h new file mode 100644 index 00000000..97be8596 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflinePack.h @@ -0,0 +1,199 @@ +#import + +#import "NMFFoundation.h" +#import "NMFOfflineRegion.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + The state an offline pack is currently in. + */ +typedef NS_ENUM (NSInteger, NMFOfflinePackState) { + /** + It is unknown whether the pack is inactive, active, or complete. + + This is the initial state of a pack. The state of a pack becomes known by + the time the shared `NMFOfflineStorage` object sends the first + `NMFOfflinePackProgressChangedNotification` about the pack. For inactive + packs, you must explicitly request a progress update using the + `-[NMFOfflinePack requestProgress]` method. + + An invalid pack always has a state of `NMFOfflinePackStateInvalid`, never + `NMFOfflinePackStateUnknown`. + */ + NMFOfflinePackStateUnknown = 0, + /** + The pack is incomplete and is not currently downloading. + + This is the initial state of a pack that is created using the + `-[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]` + method, as well as after the `-[NMFOfflinePack suspend]` method is + called. + */ + NMFOfflinePackStateInactive = 1, + /** + The pack is incomplete and is currently downloading. + + This is the state of a pack after the `-[NMFOfflinePack resume]` method is + called. + */ + NMFOfflinePackStateActive = 2, + /** + The pack has downloaded to completion. + */ + NMFOfflinePackStateComplete = 3, + /** + The pack has been removed using the + `-[NMFOfflineStorage removePack:withCompletionHandler:]` method. Sending + any message to the pack will raise an exception. + */ + NMFOfflinePackStateInvalid = 4, +}; + +/** + A structure containing information about an offline pack’s current download + progress. + */ +typedef struct __attribute__((objc_boxable)) NMFOfflinePackProgress { + /** + The number of resources, including tiles, that have been completely + downloaded and are ready to use offline. + */ + uint64_t countOfResourcesCompleted; + /** + The cumulative size of the downloaded resources on disk, including tiles, + measured in bytes. + */ + uint64_t countOfBytesCompleted; + /** + The number of tiles that have been completely downloaded and are ready + to use offline. + */ + uint64_t countOfTilesCompleted; + /** + The cumulative size of the downloaded tiles on disk, measured in bytes. + */ + uint64_t countOfTileBytesCompleted; + /** + The minimum number of resources that must be downloaded in order to view + the pack’s full region without any omissions. + + At the beginning of a download, this count is a lower bound; the number of + expected resources may increase as the download progresses. + */ + uint64_t countOfResourcesExpected; + /** + The maximum number of resources that must be downloaded in order to view + the pack’s full region without any omissions. + + At the beginning of a download, when the exact number of required resources + is unknown, this field is set to `UINT64_MAX`. Thus this count is always an + upper bound. + */ + uint64_t maximumResourcesExpected; +} NMFOfflinePackProgress; + +/** + An `NMFOfflinePack` represents a collection of resources necessary for viewing + a region offline to a local database. + + To create an instance of `NMFOfflinePack`, use the + `+[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]` method. + A pack created using `-[NMFOfflinePack init]` is immediately invalid. + + ### Example + ```swift + NMFOfflineStorage.shared.addPack(for: region, withContext: context) { (pack, error) in + guard let pack = pack else { + // If adding the pack fails, log an error to console. + print("Error:", error?.localizedDescription ?? "unknown error adding pack at \(#file)(\(#line)) in \(#function)") + return + } + + // Start an NMFOfflinePack download + pack.resume() + ``` + */ +NMF_EXPORT +@interface NMFOfflinePack : NSObject + +/** + The region for which the pack manages resources. + */ +@property (nonatomic, readonly) id region; + +/** + Arbitrary data stored alongside the downloaded resources. + + The context typically holds application-specific information for identifying + the pack, such as a user-selected name. + */ +@property (nonatomic, readonly) NSData *context; + +/** + The pack’s current state. + + The state of an inactive or completed pack is computed lazily and is set to + `NMFOfflinePackStateUnknown` by default. To request the pack’s status, use the + `-requestProgress` method. To get notified when the state becomes known and + when it changes, observe KVO change notifications on this pack’s `state` key + path. Alternatively, you can add an observer for + `NMFOfflinePackProgressChangedNotification`s about this pack that come from the + default notification center. + */ +@property (nonatomic, readonly) NMFOfflinePackState state; + +/** + The pack’s current progress. + + The progress of an inactive or completed pack is computed lazily, and all its + fields are set to 0 by default. To request the pack’s progress, use the + `-requestProgress` method. To get notified when the progress becomes + known and when it changes, observe KVO change notifications on this pack’s + `state` key path. Alternatively, you can add an observer for + `NMFOfflinePackProgressChangedNotification`s about this pack that come from the + default notification center. + */ +@property (nonatomic, readonly) NMFOfflinePackProgress progress; + +/** + Resumes downloading if the pack is inactive. + + When a pack resumes after being suspended, it may begin by iterating over the + already downloaded resources. As a result, the `progress` structure’s + `countOfResourcesCompleted` field may revert to 0 before rapidly returning to + the level of progress at the time the pack was suspended. + + To temporarily suspend downloading, call the `-suspend` method. + */ +- (void)resume; + +/** + Temporarily stops downloading if the pack is active. + + A pack suspends asynchronously, so some network requests may be sent after this + method is called. Regardless, the `progress` property will not be updated until + `-resume` is called. + + If the pack previously reached a higher level of progress before being + suspended, it may wait to suspend until it returns to that level. + + To resume downloading, call the `-resume` method. + */ +- (void)suspend; + +/** + Request an asynchronous update to the pack’s `state` and `progress` properties. + + The state and progress of an inactive or completed pack are computed lazily. If + you need the state or progress of a pack whose `state` property is currently + set to `NMFOfflinePackStateUnknown`, observe KVO change notifications on this + pack’s `state` key path, then call this method. Alternatively, you can add an + observer for `NMFOfflinePackProgressChangedNotification` about this pack that + come from the default notification center. + */ +- (void)requestProgress; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h new file mode 100644 index 00000000..6d459234 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineRegion.h @@ -0,0 +1,23 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + An object conforming to the `NMFOfflineRegion` protocol determines which + resources are required by an `NMFOfflinePack` object. + */ +@protocol NMFOfflineRegion + +/** + URL of the style whose resources are required for offline viewing. + + In addition to the JSON stylesheet, different styles may require different font + glyphs, sprite sheets, and other resources. + + The URL may be a full HTTP or HTTPS URL. + */ +@property (nonatomic, readonly) NSURL *styleURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h new file mode 100644 index 00000000..8e0bc01b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOfflineStorage.h @@ -0,0 +1,481 @@ +#import + +#import "NMFFoundation.h" +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFOfflinePack; +@class NMGLatLngBounds; +@protocol NMFOfflineRegion; +@protocol NMFOfflineStorageDelegate; + +/** + Posted by the shared `NMFOfflineStorage` object when an `NMFOfflinePack` + object’s progress changes. The progress may change due to a resource being + downloaded or because the pack discovers during the download that more + resources are required for offline viewing. This notification is posted + whenever any field in the `progress` property changes. + + The `object` is the `NMFOfflinePack` object whose progress changed. The + `NMFOfflinePackUserInfoKeyState` key and details about the pack’s current + progress in the `NMFOfflinePackUserInfoKeyProgress` key. You may also consult + progress in the `NMFOfflinePackProgressUserInfoKey` key. You may also consult + the `NMFOfflinePack.state` and `NMFOfflinePack.progress` properties, which + provide the same values. + + If you only need to observe changes in a particular pack’s progress, you can + alternatively observe KVO change notifications to the pack’s `progress` key + path. + + #### Related examples + See the + Download an offline map example to learn how to calculate the progress + of an offline download. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackProgressChangedNotification; + +/** + Posted by the shared `NMFOfflineStorage` object whenever an `NMFOfflinePack` + object encounters an error while downloading. The error may be recoverable and + may not warrant the user’s attention. For example, the pack’s implementation + may attempt to re-request failed resources based on an exponential backoff + strategy or upon the restoration of network access. + + The `object` is the `NMFOfflinePack` object that encountered the error. The + `userInfo` dictionary contains the error object in the + `NMFOfflinePackUserInfoKeyError` key. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackErrorNotification; + +/** + Posted by the shared `NMFOfflineStorage` object when the maximum number of + Mapbox-hosted tiles has been downloaded and stored on the current device. + + The `object` is the `NMFOfflinePack` object that reached the tile limit in the + course of downloading. The `userInfo` dictionary contains the tile limit in the + `NMFOfflinePackUserInfoKeyMaximumCount` key. + + Once this limit is reached, no instance of `NMFOfflinePack` can download + additional tiles from Mapbox APIs until already downloaded tiles are removed by + calling the `-[NMFOfflineStorage removePack:withCompletionHandler:]` method. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackMaximumTilesReachedNotification; + +/** + A key in the `userInfo` property of a notification posted by `NMFOfflinePack`. + */ +typedef NSString *NMFOfflinePackUserInfoKey NS_EXTENSIBLE_STRING_ENUM; + +/** + The key for an `NSNumber` object that indicates an offline pack’s current + state. This key is used in the `userInfo` dictionary of an + `NMFOfflinePackProgressChangedNotification` notification. Call `-integerValue` + on the object to receive the `NMFOfflinePackState`-typed state. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyState; + +/** + The key for an `NSValue` object that indicates an offline pack’s current + progress. This key is used in the `userInfo` dictionary of an + `NMFOfflinePackProgressChangedNotification` notification. Call + `-NMFOfflinePackProgressValue` on the object to receive the + `NMFOfflinePackProgress`-typed progress. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyProgress; + +/** + The key for an `NSError` object that is encountered in the course of + downloading an offline pack. This key is used in the `userInfo` dictionary of + an `NMFOfflinePackErrorNotification` notification. The error’s domain is + `NMFErrorDomain`. See `NMFErrorCode` for possible error codes. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyError; + +/** + The key for an `NSNumber` object that indicates the maximum number of + Mapbox-hosted tiles that may be downloaded and stored on the current device. + This key is used in the `userInfo` dictionary of an + `NMFOfflinePackMaximumTilesReachedNotification` notification. Call + `-unsignedLongLongValue` on the object to receive the `uint64_t`-typed tile + limit. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyMaximumCount; + +extern NMF_EXPORT NSString * const NMFOfflinePackMaximumCountUserInfoKey __attribute__((deprecated("Use NMFOfflinePackUserInfoKeyMaximumCount"))); + +extern NMF_EXPORT NMFExceptionName const NMFUnsupportedRegionTypeException; + +/** + A block to be called once an offline pack has been completely created and + added. + + An application typically calls the `-resume` method on the pack inside this + completion handler to begin the download. + + @param pack Contains a pointer to the newly added pack, or `nil` if there was + an error creating or adding the pack. + @param error Contains a pointer to an error object (if any) indicating why the + pack could not be created or added. + */ +typedef void (^NMFOfflinePackAdditionCompletionHandler)(NMFOfflinePack * _Nullable pack, NSError * _Nullable error); + +/** + A block to be called once an offline pack has been completely invalidated and + removed. + + Avoid any references to the pack inside this completion handler: by the time + this completion handler is executed, the pack has become invalid, and any + messages passed to it will raise an exception. + + @param error Contains a pointer to an error object (if any) indicating why the + pack could not be invalidated or removed. + */ +typedef void (^NMFOfflinePackRemovalCompletionHandler)(NSError * _Nullable error); + +typedef void (^NMFOfflinePackCompletionHandler)(void); + +/** + A block to be called once the contents of a file are copied into the current packs. + + @param fileURL The file URL of the offline database containing the offline packs + that were copied. + @param packs An array of all known offline packs, or `nil` if there was an error + creating or adding the pack. + @param error A pointer to an error object (if any) indicating why the pack could + not be created or added. + */ +typedef void (^NMFBatchedOfflinePackAdditionCompletionHandler)(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error); + +/** + The type of resource that is requested. + */ +typedef NS_ENUM(NSUInteger, NMFResourceKind) { + /** Unknown type */ + NMFResourceKindUnknown, + /** Style sheet JSON file */ + NMFResourceKindStyle, + /** TileJSON file as specified in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sources */ + NMFResourceKindSource, + /** A vector or raster tile as described in the style sheet at + https://www.mapbox.com/mapbox-gl-js/style-spec/#sources */ + NMFResourceKindTile, + /** Signed distance field glyphs for text rendering. These are the URLs specified in the style + in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-glyphs */ + NMFResourceKindGlyphs, + /** Image part of a sprite sheet. It is constructed of the prefix in + https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a PNG file extension. */ + NMFResourceKindSpriteImage, + /** JSON part of a sprite sheet. It is constructed of the prefix in + https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a JSON file extension. */ + NMFResourceKindSpriteJSON, + /** Image data for a georeferenced image source. **/ + NMFResourceKindImage, +}; + +/** + NMFOfflineStorage implements a singleton (shared object) that manages offline + packs and ambient caching. All of this class’s instance methods are asynchronous, + reflecting the fact that offline resources are stored in a database. The shared + object maintains a canonical collection of offline packs in its `packs` property. + + #### Related examples + See the + Download an offline map example to learn how to create and register an + offline pack for a defined region. + */ +NMF_EXPORT +@interface NMFOfflineStorage : NSObject + +/** + Returns the shared offline storage object. + */ +@property (class, nonatomic, readonly) NMFOfflineStorage *sharedOfflineStorage; + +#pragma mark - Adding Contents of File + +/** + Adds the offline packs located at the given file path to offline storage. + + The file must be a valid offline region database bundled with the application + or downloaded separately. + + The resulting packs are added or updated to the shared offline storage object’s `packs` + property, then the `completion` block is executed. + + @param filePath A string representation of the file path. The file path must be + writable as schema updates may be perfomed. + @param completion The completion handler to call once the contents of the given + file has been added to offline storage. This handler is executed asynchronously + on the main queue. + */ +- (void)addContentsOfFile:(NSString *)filePath withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion; + +/** + Adds the offline packs located at the given URL to offline storage. + + The file must be a valid offline region database bundled with the application + or downloaded separately. + + The resulting packs are added or updated to the shared offline storage object’s `packs` + property, then the `completion` block is executed. + + @param fileURL A file URL specifying the file to add. URL should be a valid system path. + The file URL must be writable as schema updates may be performed. + @param completion The completion handler to call once the contents of the given + file has been added to offline storage. This handler is executed asynchronously + on the main queue. + */ +- (void)addContentsOfURL:(NSURL *)fileURL withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion; + +#pragma mark - Accessing the Delegate + +/** + The receiver’s delegate. + + An offline storage object sends messages to its delegate to allow it to + transform URLs before they are requested from the internet. This can be used + add or remove custom parameters, or reroute certain requests to other servers + or endpoints. + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate; + +#pragma mark - Managing Offline Packs + +/** + An array of all known offline packs, in the order in which they were created. + + This property is set to `nil`, indicating that the receiver does not yet know + the existing packs, for an undefined amount of time starting from the moment + the shared offline storage object is initialized until the packs are fetched + from the database. After that point, this property is always non-nil, but it + may be empty to indicate that no packs are present. + + To detect when the shared offline storage object has finished loading its + `packs` property, observe KVO change notifications on the `packs` key path. + The initial load results in an `NSKeyValueChangeSetting` change. + */ +@property (nonatomic, strong, readonly, nullable) NSArray *packs; + +/** + Creates and registers an offline pack that downloads the resources needed to + use the given region offline. + + The resulting pack is added to the shared offline storage object’s `packs` + property, then the `completion` block is executed with that pack passed in. + + The pack has an initial state of `NMFOfflinePackStateInactive`. To begin + downloading resources, call `-[NMFOfflinePack resume]` on the pack from within + the completion handler. To monitor download progress, add an observer for + `NMFOfflinePackProgressChangedNotification`s about that pack. + + To detect when any call to this method results in a new pack, observe KVO + change notifications on the shared offline storage object’s `packs` key path. + Additions to that array result in an `NSKeyValueChangeInsertion` change. + + @param region A region to download. + @param context Arbitrary data to store alongside the downloaded resources. + @param completion The completion handler to call once the pack has been added. + This handler is executed asynchronously on the main queue. + */ +- (void)addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(nullable NMFOfflinePackAdditionCompletionHandler)completion; + +/** + Unregisters the given offline pack and allows resources that are no longer + required by any remaining packs to be potentially freed. + + As soon as this method is called on a pack, the pack becomes invalid; any + attempt to send it a message will result in an exception being thrown. If an + error occurs and the pack cannot be removed, do not attempt to reuse the pack + object. Instead, if you need continued access to the pack, suspend all packs + and use the `-reloadPacks` method to obtain valid pointers to all the packs. + + To detect when any call to this method results in a pack being removed, observe + KVO change notifications on the shared offline storage object’s `packs` key + path. Removals from that array result in an `NSKeyValueChangeRemoval` change. + + When you remove an offline pack, any resources that are required by that pack, + but not other packs, become eligible for deletion from offline storage. Because + the backing store used for offline storage is also used as a general purpose + cache for map resources, such resources may not be immediately removed if the + implementation determines that they remain useful for general performance of + the map. + + @param pack The offline pack to remove. + @param completion The completion handler to call once the pack has been + removed. This handler is executed asynchronously on the main queue. + */ +- (void)removePack:(NMFOfflinePack *)pack withCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion; + +/** + Invalidates the specified offline pack. This method checks that the tiles + in the specified offline pack match those from the server. Local tiles that + do not match the latest version on the server are updated. + + This is more efficient than deleting the offline pack and downloading it + again. If the data stored locally matches that on the server, new data will + not be downloaded. + + @param pack The offline pack to be invalidated. + @param completion The completion handler to call once the pack has been + removed. This handler is executed asynchronously on the main queue. + */ +- (void)invalidatePack:(NMFOfflinePack *)pack withCompletionHandler:(void (^)(NSError * _Nullable))completion; +/** + Forcibly, asynchronously reloads the `packs` property. At some point after this + method is called, the pointer values of the `NMFOfflinePack` objects in the + `packs` property change, even if the underlying data for these packs has not + changed. If this method is called while a pack is actively downloading, the + behavior is undefined. + + You typically do not need to call this method. + + To detect when the shared offline storage object has finished reloading its + `packs` property, observe KVO change notifications on the `packs` key path. + A reload results in an `NSKeyValueChangeSetting` change. + */ +- (void)reloadPacks; + +/** + 파일 캐시 초기화 + */ +- (void)flushCacheWithCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion; + +#pragma mark Preload Database + +- (void)addPreloadTile:(NSString *)filePath + sourceId:(NSString *)sourceId + tileUrlPrefix:(NSString *)tileUrlPrefix + tileVersion:(NSString *)tileVersion + minZoom:(NSInteger)minzoom + maxZoom:(NSInteger)maxZoom + bounds:(NMGLatLngBounds *)bounds + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +- (void)removePreloadTile:(NSString *)filePath + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +- (void)setPreloadFallbackToStreaming:(BOOL)preloadFallbackToStreaming + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +/** + The cumulative size, measured in bytes, of all downloaded resources on disk. + + The returned value includes all resources, including tiles, whether downloaded + as part of an offline pack or due to caching during normal use of `NMFMapView`. + */ +@property (nonatomic, readonly) unsigned long long countOfBytesCompleted; + +#pragma mark - Managing Ambient Cache + +/** + Sets the maximum ambient cache size in bytes. The default maximum cache + size is 50 MB. To disable ambient caching, set the maximum ambient cache size + to `0`. Setting the maximum ambient cache size does not impact the maximum size + of offline packs. + + While this method does not limit the space available to offline packs, + data in offline packs count towards this limit. If the maximum ambient + cache size is set to 30 MB and 20 MB of offline packs are downloaded, + there may be only 10 MB reserved for the ambient cache. + + This method should be called before the map and map style have been loaded. + + This method is potentially expensive, as the database will trim cached data + in order to prevent the ambient cache from being larger than the + specified amount. + + @param cacheSize The maximum size in bytes for the ambient cache. + @param completion The completion handler to call once the maximum ambient cache size + has been set. This handler is executed synchronously on the main queue. + */ + +- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Invalidates the ambient cache. This method checks that the tiles in the + ambient cache match those from the server. If the local tiles do not match + those on the server, they are re-downloaded. + + This is recommended over clearing the cache or resetting the database + because valid local tiles will not be downloaded again. + + Resources shared with offline packs will not be affected by this method. + + @param completion The completion handler to call once the ambient cache has + been revalidated. This handler is executed asynchronously on the main queue. + */ + +- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Clears the ambient cache by deleting resources. This method does not + affect resources shared with offline regions. + + @param completion The completion handler to call once resources from + the ambient cache have been cleared. This handler is executed + asynchronously on the main queue. + */ + +- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Deletes the existing database, which includes both the ambient cache and offline packs, + then reinitializes it. + + You typically do not need to call this method. + + @param completion The completion handler to call once the pack has database has + been reset. This handler is executed asynchronously on the main queue. + */ + +- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/* + Inserts the provided resource into the ambient cache. + + This method mimics the caching that would take place if the equivalent resource + were requested in the process of map rendering. Use this method to pre-warm the + cache with resources you know will be requested. + + This method is asynchronous; the data may not be immediately available for + in-progress requests, though subsequent requests should have access to the + cached data. + + @param data Response data to store for this resource. The data is expected to + be uncompressed; internally, the cache will compress data as necessary. + @param url The URL at which the data can normally be found. + @param modified The date the resource was last modified. + @param expires The date after which the resource is no longer valid. + @param eTag An HTTP entity tag. + @param mustRevalidate A Boolean value indicating whether the data is still + usable past the expiration date. + */ +- (void)preloadData:(NSData *)data forURL:(NSURL *)url modificationDate:(nullable NSDate *)modified expirationDate:(nullable NSDate *)expires eTag:(nullable NSString *)eTag mustRevalidate:(BOOL)mustRevalidate NS_SWIFT_NAME(preload(_:for:modifiedOn:expiresOn:eTag:mustRevalidate:)); + +- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate __attribute__((deprecated("", "-preloadData:forURL:modificationDate:expirationDate:eTag:mustRevalidate:"))); + +@end + +/** + The `NMFOfflineStorageDelegate` protocol defines methods that a delegate of an + `NMFOfflineStorage` object can optionally implement to transform various types + of URLs before downloading them via the internet. + */ +@protocol NMFOfflineStorageDelegate + +/** + Sent whenever a URL needs to be transformed. + + @param storage The storage object processing the download. + @param kind The kind of URL to be transformed. + @param url The original URL to be transformed. + @return A URL that will now be downloaded. + */ +- (NSURL *)offlineStorage:(NMFOfflineStorage *)storage + URLForResourceOfKind:(NMFResourceKind)kind + withURL:(NSURL *)url; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h new file mode 100644 index 00000000..d9a76a3b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlay.h @@ -0,0 +1,262 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFPickable.h" + +@class NMFMapView; +@class NMFOverlay; + +NS_ASSUME_NONNULL_BEGIN + +/** + 오버레이를 어느 방향으로 정렬할지 나타내는 열거형. + + @warning Deprecated. `NMFAlignType`을 사용하세요. + */ +typedef NS_ENUM(NSInteger, NMFAlign) { + /** + 가운데. + */ + NMFAlignCenter, + + /** + 왼쪽. + */ + NMFAlignLeft, + + /** + 오른쪽. + */ + NMFAlignRight, + + /** + 위. + */ + NMFAlignTop, + + /** + 아래. + */ + NMFAlignBottom, + + /** + 왼쪽 위. + */ + NMFAlignTopLeft, + + /** + 오른쪽 위. + */ + NMFAlignTopRight, + + /** + 오른쪽 아래. + */ + NMFAlignBottomRight, + + /** + 왼쪽 아래. + */ + NMFAlignBottomLeft +} __deprecated_msg("Use `NMFAlignType` instead."); + +/** + 오버레이를 어느 방향으로 정렬할지 나타내는 객체. + 속성 객체로만 사용해야 합니다. + */ +NMF_EXPORT +@interface NMFAlignType : NSObject + +/** + 가운데. + */ +@property(class, nonatomic, readonly) NMFAlignType *center; + +/** + 왼쪽. + */ +@property(class, nonatomic, readonly) NMFAlignType *left; + +/** + 오른쪽. + */ +@property(class, nonatomic, readonly) NMFAlignType *right; + +/** + 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *top; + +/** + 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottom; + +/** + 왼쪽 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *topLeft; + +/** + 오른쪽 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *topRight; + +/** + 오른쪽 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottomRight; + +/** + 왼쪽 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottomLeft; + ++ (NMFAlignType *)center; ++ (NMFAlignType *)left; ++ (NMFAlignType *)right; ++ (NMFAlignType *)top; ++ (NMFAlignType *)bottom; ++ (NMFAlignType *)topLeft; ++ (NMFAlignType *)topRight; ++ (NMFAlignType *)bottomRight; ++ (NMFAlignType *)bottomLeft; + +@end + +/** + 끝 지점의 모양 + */ +typedef NS_ENUM(NSUInteger, NMFOverlayLineCap) { + /** + 평면. 끝 지점이 좌표에 딱 맞게 잘립니다. + */ + NMFOverlayLineCapButt, + /** + 원형. 끝 지점에 지름이 두께만 한 원이 그려집니다. + */ + NMFOverlayLineCapRound, + /** + 사각형. 끝 지점에 두께의 반만큼의 직사각형이 추가됩니다. + */ + NMFOverlayLineCapSquare, +}; + +/** + 연결점의 모양. + */ +typedef NS_ENUM(NSUInteger, NMFOverlayLineJoin) { + /** + 사면. 연결점에서 뾰족하게 튀어나온 부분이 잘려 나갑니다. + */ + NMFOverlayLineJoinBevel, + /** + 원형. 연결점이 둥글게 그려집니다. + */ + NMFOverlayLineJoinRound, + /** + 미터. 연결점이 뾰족하게 그려집니다. + */ + NMFOverlayLineJoinMiter, +}; + +/** + 오버레이 터치에 대한 이벤트 핸들러 블록 타입 선언. + + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewTouchDelegate`의 `mapView:didTapMap:point:`가 호출됩니다. + */ +typedef BOOL (^NMFOverlayTouchHandler)(NMFOverlay * __weak); + + +/** + 지도에 오버레이되는 요소를 나타내는 최상위 클래스. 대부분의 오버레이는 `mapView`를 사용해 동적으로 지도에 추가하거나 지도로부터 제거할 수 있습니다. + */ +NMF_EXPORT +@interface NMFOverlay : NSObject + +/** + 오버레이의 고유 ID. + */ +@property(nonatomic, copy, readonly) NSString *overlayID; + +/** + 사용자 임의 속성. 필요에 따라서 부가적인 정보를 저장할 수 있습니다. + */ +@property(nonatomic, strong) NSDictionary *userInfo; + +/** + 오버레이를 추가할 지도 객체. `nil`을 지정하면 지도에서 제거됩니다. + */ +@property(nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 숨김 속성. `YES`일 경우 오버레이는 화면에 나타나지 않으며 이벤트도 받지 못합니다. + 숨김 속성은 명시적으로 지정하지 않는 한 변하지 않습니다. 즉, 오버레이가 현재 보이는 지도 영역의 바깥쪽으로 + 나가더라도 숨김 속성이 `YES`로 변하지는 않습니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic) BOOL hidden; + +/** + 보조 Z 인덱스. 전역 Z 인덱스가 동일한 여러 오버레이가 화면에서 겹쳐지면 보조 Z 인덱스가 큰 + 오버레이가 작은 오버레이를 덮습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger zIndex; + +/** + 전역 Z 인덱스. 여러 오버레이가 화면에서 겹쳐지면 전역 Z 인덱스가 큰 오버레이가 작은 오버레이를 + 덮습니다. 또한 값이 `0` 이상이면 오버레이가 심벌 위에, `0` 미만이면 심벌 아래에 그려집니다. + */ +@property(nonatomic) NSInteger globalZIndex; + +/** + 오버레이가 보이는 최소 줌 레벨. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double minZoom; + +/** + 오버레이가 보이는 최대 줌 레벨. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double maxZoom; + +/** + 지도의 줌 레벨과 오버레이의 최소 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다. + 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, setter=setMinZoomInclusive:) BOOL isMinZoomInclusive; + +/** + 지도의 줌 레벨과 오버레이의 최대 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다. + 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, setter=setMaxZoomInclusive:) BOOL isMaxZoomInclusive; + +/** + 오버레이가 터치될 경우 호출되는 콜백 블록. + */ +@property(nonatomic, nullable) NMFOverlayTouchHandler touchHandler; + +/** + 오버레이가 유효하여 지도에 추가될 수 있는지 여부를 반환합니다. `NMFOverlay`를 상속받는 오버레이들은 이 메서드를 재정의할 수 있습니다. + + 기본값은 `NO`입니다. + + @return 지도에 추가될 수 있다면 `YES`, 아니면 `NO`. + */ +- (BOOL)shouldAddOverlayToMap; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h new file mode 100644 index 00000000..04347ee7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFOverlayImage.h @@ -0,0 +1,119 @@ +#import +#import "NMFFoundation.h" + +@class NMFOverlay; + +NS_ASSUME_NONNULL_BEGIN + +/** + 오버레이에서 사용하는 비트맵 이미지를 나타내는 불변 클래스. 팩토리 메서드를 이용해 + asset, `UIImage`, `NSBundle` 등으로부터 인스턴스를 생성할 수 있습니다. + */ +NMF_EXPORT +@interface NMFOverlayImage : NSObject + +/** + 재사용 식별자. + */ +@property(nonatomic, readonly, copy) NSString *reuseIdentifier; +/** + 이미지의 너비. + */ +@property(nonatomic, readonly) CGFloat imageWidth; +/** + 이미지의 높이. + */ +@property(nonatomic, readonly) CGFloat imageHeight; +/** + 이미지의 스케일. + */ +@property(nonatomic, readonly) CGFloat imageScale; +/** + 이미지. + */ +@property(nonatomic, readonly) UIImage *image; + +/** + `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param image 비트맵을 생성할 이미지 객체. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithImage:(UIImage *)image; + +/** + `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param image 비트맵을 생성할 이미지 객체. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithImage:(UIImage *)image reuseIdentifier:(nullable NSString *)identifier; + +/** + 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName; + +/** + 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName reuseIdentifier:(nullable NSString *)identifier; + +/** + 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param bundle 이미지를 찾을 번들. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle; + +/** + 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param bundle 이미지를 찾을 번들. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle reuseIdentifier:(nullable NSString *)identifier; + +- (void)invalidate; + +@end + + +/** + 지도에서 사용할 수 있는 이미지 리소스를 만들기 위한 `UIView`를 반환할 수 있는 프로토콜. + 이 프로토콜을 구현할 경우, 오버레이의 상태에 따라서 `UIView`를 반환하게 하여 그 스냅숏을 + `NMFOverlay` 클래스에서 이미지 형태로 사용할 수 있습니다. + */ +@protocol NMFOverlayImageDataSource +@required + +/** + 스냅숏을 생성하게 될 `UIView`를 반환할 수 있도록 구현해야 합니다. `nil`을 반환하면 이미지를 그리지 않습니다. + + @param overlay 이미지를 사용하게 될 `NMFOverlay` 객체. + @return 스냅숏을 생성할 `UIView` 객체. + */ +- (UIView *)viewWithOverlay:(NMFOverlay *)overlay; + +@end + + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h new file mode 100644 index 00000000..3d99de26 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPath.h @@ -0,0 +1,157 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 경로선 전역 Z 인덱스 + */ +const static int NMF_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000; + +/** + 지도에 경로선을 나타내는 오버레이. 하나의 선을 나타낸다는 측면에서는 `NMFPolylineOverlay`와 유사하나, 다음과 + 같이 경로선에 특화된 특징이 있습니다. + - 테두리와 패턴 이미지를 적용할 수 있습니다. + - 지도를 기울이더라도 두께가 일정하게 유지됩니다. + - 자기교차(self-intersection)가 일어나더라도 테두리, 패턴 이미지가 자연스럽게 나타납니다. + - 진척률을 지정할 수 있으며, 지나온/지나갈 경로에 각각 다른 색상과 테두리를을 지정할 수 있습니다. + - 점선 패턴, 끝 지점/연결점의 모양은 지정할 수 없습니다. + */ +NMF_EXPORT +@interface NMFPath : NMFOverlay + +/** + 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *color; + +/** + 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *outlineColor; + +/** + 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 + 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedColor; + +/** + 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 + 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 + 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedOutlineColor; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property (nonatomic) CGFloat width; + +/** + 테두리 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat outlineWidth; + +/** + 경로선 오버레이를 나타내는 `NMGLineString`객체. + 경로선 오버레이를 생성한 이후 경로선을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NMGLineString *path; + +/** + 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는 + `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다. + + - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) double progress; + +/** + 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `25`입니다. + */ +@property (nonatomic) NSUInteger patternInterval; + +/** + 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다. + `nil`일 경우 패턴을 표시하지 않습니다. + */ +@property (nonatomic, strong, nullable) NMFOverlayImage *patternIcon; + +/** + 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 경로선과 마커가 겹칠 경우 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 좌표열을 지정하여 경로선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다. + + 사용 예시 + ``` + NMFLatLng *p1 = [[NMFLatLng alloc]initWithLat:37.20 lng:127.051]]; + NMFLatLng *p2 = [[NMFLatLng alloc]initWithLat:37.21 lng:127.052]]; + NMFLatLng *p3 = [[NMFLatLng alloc]initWithLat:37.22 lng:127.053]]; + NMFPath *route = [NMFPath pathWithPoints:@[p1, p2, p3]]; + route.mapView = mapView; + ``` + + @param coords 좌표열. + @return `NMFPath` 객체. + */ ++ (nullable instancetype)pathWithPoints:(NSArray *)coords; + +/** + `NMGLineString`을 지정하여 경로선 오버레이를 생성합니다. + `NMGLineString`객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param path `NMGLineString` 객체. + @return `NMFPath` 객체. + */ ++ (nullable instancetype)pathWithLineString:(NMGLineString *)path; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h new file mode 100644 index 00000000..ff64d78b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPathColor.h @@ -0,0 +1,58 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + NMFPath, NMFMultipartPath의 색상을 지정하는 클래스. + */ +NMF_EXPORT +@interface NMFPathColor : NSObject + +/** + 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *color; + +/** + 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *outlineColor; + +/** + 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 + 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedColor; + +/** + 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 + 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 + 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedOutlineColor; + ++ (instancetype)pathColorWithColor:(UIColor *)color; + ++ (instancetype)pathColorWithColor:(UIColor *)color + outlineColor:(UIColor *)outlineColor; + ++ (instancetype)pathColorWithColor:(UIColor *)color + outlineColor:(UIColor *)outlineColor + passedColor:(UIColor *)passedColor + passedOutlineColor:(UIColor *)passedOutlineColor; +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h new file mode 100644 index 00000000..36e3d3ef --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPickable.h @@ -0,0 +1,9 @@ +#import + +#import "NMFFoundation.h" + +/** + 피킹이 가능한 지도 요소를 정의한 프로토콜. + */ +@protocol NMFPickable +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h new file mode 100644 index 00000000..cdb0f4a9 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolygonOverlay.h @@ -0,0 +1,79 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 폴리곤 오버레이 전역 Z 인덱스 + */ +const static int NMF_POLYGON_OVERLAY_GLOBAL_Z_INDEX = -200000; + +@class NMGPolygon; + +/** + 지도에 도형을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFPolygonOverlay : NMFOverlay + +/** + 폴리곤 오버레이의 모양을 결정하는 폴리곤 객체. + 폴리곤 오버레이를 생성한 이후 폴리곤을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NMGPolygon *polygon; + +/** + 면의 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, copy) UIColor *fillColor; + +/** + 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) NSUInteger outlineWidth; + +/** + 테두리의 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, copy) UIColor *outlineColor; + +/** + 폴리곤 객체와 색상을 지정하여 폴리곤 오버레이를 생성합니다. + 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polygon 폴리곤 객체. + @param fillColor 폴리곤을 채울 색상. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon fillColor:(UIColor *)fillColor; + +/** + 폴리곤 객체를 지정하여 폴리곤 오버레이를 생성합니다. + 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polygon 폴리곤 객체. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon; + +/** + 외곽선 정점 배열을 지정하여 폴리곤 오버레이를 생성합니다. + `coords`의 크기는 `2` 이상이어야 합니다. + + @param coords `NMGLatLng` 배열. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlayWith:(NSArray *)coords; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h new file mode 100644 index 00000000..477af23f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFPolylineOverlay.h @@ -0,0 +1,91 @@ +#import +#import + +#import "NMFOverlay.h" + +/** + 기본 폴리라인 오버레이 전역 Z 인덱스 + */ +const static int NMF_POLYLINE_OVERLAY_GLOBAL_Z_INDEX = -200000; + +@class NMGLineString; + +#define NMFDefaultLinePattern @[@2,@1]; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 선을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFPolylineOverlay : NMFOverlay + +/** + 두께. pt 단위. + + 기본값은 `2.5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property(nonatomic, copy) UIColor *color; + +/** + 끝 지점의 모양. + + 기본값은 `NMFOverlayLineCapButt`입니다. + */ +@property(nonatomic) NMFOverlayLineCap capType; + +/** + 연결점의 모양. + + 기본값은 `NMFOverlayLineJoinMiter`입니다. + */ +@property(nonatomic) NMFOverlayLineJoin joinType; + +/** + 점선 패턴. 패턴은 pt 단위의 배열로 표현되며, 각각 `2n`번째 요소는 실선의 길이, + `2n + 1`번째 요소는 공백의 길이를 의미하며 빈 리스트를 입력할 경우 실선을 의미합니다. + */ +@property(nonatomic) NSArray *pattern; + +/** + 선 오버레이를 나타내는 `NMGLineString`객체. + 선 오버레이를 생성한 이후 폴리라인을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property(nonatomic) NMGLineString *line; + +/** + 좌표열을 지정하여 선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다. + + 사용 예시 + ``` + NMGLatLng *p1 = [[NMGLatLng alloc]initWithLat:37.20 lng:127.051]]; + NMGLatLng *p2 = [[NMGLatLng alloc]initWithLat:37.21 lng:127.052]]; + NMGLatLng *p3 = [[NMGLatLng alloc]initWithLat:37.22 lng:127.053]]; + NMFPolylineOverlay *line = [NMFPolylineOverlay polylineOverlayWithPoints:@[p1, p2, p3]]; + [mapView addOverlay:line]; + ``` + + @param coords 좌표열. + @return `NMFPolylineOverlay` 객체. + */ ++ (nullable instancetype)polylineOverlayWith:(NSArray *)coords; + +/** + 폴리라인 객체를 지정하여 선 오버레이를 생성합니다. + 폴리라인 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polyline 폴리라인 객체. + @return `NMFPolylineOverlay` 객체. + */ ++ (nullable instancetype)polylineOverlay:(NMGLineString *)polyline; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h new file mode 100644 index 00000000..48474ea7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFProjection.h @@ -0,0 +1,94 @@ +#import +#import + +#import "NMFFoundation.h" + +@class NMFMapView; +@class NMGLatLng; +@class NMGLatLngBounds; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지리적 좌표와 화면 좌표 간의 변환을 담당하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고 + `NMFMapView.projection`을 이용해서 가져올 수 있습니다. + */ +NMF_EXPORT +@interface NMFProjection : NSObject + +/** + 화면 좌표를 위경도 좌표로 변환합니다. + + @param point 화면 좌표. + @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다. + */ +- (NMGLatLng *)latlngFromPoint:(CGPoint)point; + +/** + 화면 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 위경도 좌표로 변환합니다. 일반적인 상황에는 `-latlngFromPoint:point:`를 사용하세요. + + @param point 화면 좌표. + @param zoom 줌 레벨. + @param tilt 틸트 각도. + @param heading 헤딩 각도. + @param wrap 좌표를 랩핑할지 여부. + @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다. + */ +- (NMGLatLng *)latlngFromPoint:(CGPoint)point atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withWrap:(BOOL)wrap; + +/** + 위경도 좌표를 화면 좌표로 변환합니다. + + @param coord 위경도 좌표. + @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다. + */ +- (CGPoint)pointFromLatLng:(NMGLatLng *)coord; + +/** + 위경도 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 화면 좌표로 변환합니다. 일반적인 상황에는 `-pointFromLatLng:coord:`를 사용하세요. + + @param coord 위경도 좌표. + @param zoom 줌 레벨. + @param tilt 틸트 각도. + @param heading 헤딩 각도. + @param shortestPath 가까운 좌표를 사용할지 여부. + @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다. + */ +- (CGPoint)pointFromLatLng:(NMGLatLng *)coord atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withShortestPath:(BOOL)shortestPath; + +/** + 화면의 영역을 위경도 영역으로 변환합니다. + + @param viewBounds 화면 영역. + @return 위경도 영역. + */ +- (NMGLatLngBounds *)latlngBoundsFromViewBounds:(CGRect)viewBounds; + +/** + 위경도 영역을 화면 영역으로 변환합니다. + + @param latlngBounds 위경도 영역. + @return 화면 영역. + */ +- (CGRect)viewBoundsFromLatLngBounds:(NMGLatLngBounds *)latlngBounds; + +/** + 현재 지도의 축척을 반환합니다. + + @return 축척. 미터/픽셀 단위. + */ +- (CLLocationDistance)metersPerPixel; + +/** + 카메라의 위도가 `latitude`, 줌 레벨이 `zoom`일 때의 축적을 반환합니다. + + @param latitude 위도. + @param zoom 줌 레벨. + @return 축척. 미터/픽셀 단위. + */ +- (CLLocationDistance)metersPerPixelAtLatitude:(double)latitude zoom:(double)zoom; + +@end +NS_ASSUME_NONNULL_END + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h new file mode 100644 index 00000000..66bfedd2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFRendererOptions.h @@ -0,0 +1,48 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 렌더러 유형. + */ +typedef NS_ENUM(NSInteger, NMFRendererType) { + /** + OpenGL ES 2.0. + */ + NMFRendererTypeOpenGL, + + /** + Metal. + */ + NMFRendererTypeMetal +}; + +/** + 지도의 렌더링 관련 옵션을 지정하는 클래스. 지도 객체가 생성된 후에는 속성을 변경해도 지도에 적용되지 않습니다. + 이 클래스는 싱글턴 클래스로, `shared`를 이용해 인스턴스를 가져올 수 있습니다. + */ +NMF_EXPORT +@interface NMFRendererOptions : NSObject + +/** + 싱글턴 인스턴스. + */ +@property (class, nonatomic, readonly, nonnull) NMFRendererOptions *shared; + +/** + 지도 렌더러 유형을 지정하거나 반환합니다. 디바이스가 `NMFRendererTypeMetal`을 지원하지 않으면 `NMFRendererTypeOpenGL`이 지정됩니다. + + 시뮬레이터에서 구동하는 경우의 기본값은 `NMFRendererTypeMetal`, 디바이스에서 구동하는 경우의 기본값은 `NMFRendererTypeOpenGL` 입니다. + */ +@property (nonatomic, assign) NMFRendererType rendererType; + +/** + 4x MSAA를 적용할지 여부를 지정하거나 반환합니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, assign) BOOL msaa4x; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h new file mode 100644 index 00000000..a5e027e5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFScaleView.h @@ -0,0 +1,29 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 축척 바 컨트롤. + */ +NMF_EXPORT +@interface NMFScaleView : UIView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 축척 바의 너비에 대한 `NSLayoutConstraint` 객체. + */ +@property (nonatomic, weak, nullable) IBOutlet NSLayoutConstraint *scaleBarWidthConstraint; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h new file mode 100644 index 00000000..0be65254 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFSymbol.h @@ -0,0 +1,28 @@ +#import + +#import "NMFPickable.h" + +@class NMGLatLng; + +/** + 지도 위의 아이콘, 텍스트 등 피킹 가능한 심벌을 나타내는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없으며, 두 가지 + 방법으로 얻을 수 있습니다. + - `NMFMapViewTouchDelegate`의 `-mapView:didTapSymbol:`을 이용해 사용자가 클릭한 심벌 수신 + - `NMFMapView`의 `-pickAll:withTolerance:`를 이용해 특정 화면 좌표 주변의 심벌을 쿼리 + + - SeeAlso: `NMFPickable` + */ +NMF_EXPORT +@interface NMFSymbol : NSObject + +/** + 심벌의 좌표. + */ +@property(nonatomic, readonly) NMGLatLng *position; + +/** + 캡션 문자열. 캡션이 없는 심벌일 경우 빈 문자열을 반환합니다. + */ +@property(nonatomic, readonly) NSString *caption; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h new file mode 100644 index 00000000..fb13d5ed --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileCoverHelper.h @@ -0,0 +1,73 @@ +#import "NMFFoundation.h" + +@class NMFMapView; + +NS_ASSUME_NONNULL_BEGIN + +/** + 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트. + */ + +@protocol NMFTileCoverHelperDelegate + +/** + 타일 목록에 변경이 일어나면 호출되는 콜백 메서드. + + @param addedTileIds 화면에 추가된 타일 ID의 목록. + @param removedTileIds 화면에서 제거된 타일 ID의 목록. + */ +- (void)onTileChanged:(NSArray * _Nullable)addedTileIds RemovedTileIds:(NSArray * _Nullable)removedTileIds; + +@end + +/** + 지도 화면을 커버하는 타일의 목록을 관리하며 변경이 일어나면 이벤트를 발생시키는 유틸리티 클래스. + + `NMFTileCoverHelperDelegate`로 델리게이트를 지정하고 `mapView` 속성에 대상 지도 객체를 지정하면 지도 + 화면을 커버하는 타일의 목록이 변경될 때마다 `-onTileChanged::`가 호출됩니다. 화면에 추가된 + 타일 영역에 대해서 데이터를 가져오고 제거된 타일 영역의 데이터는 제거하는 등의 작업을 할 경우, 이 클래스를 사용하면 + 전체 타일 대신 변경사항이 있는 타일만을 처리하면 되므로 `-getCoveringTileIds`를 직접 사용하는 것에 + 비해 효율적입니다. + */ +NMF_EXPORT +@interface NMFTileCoverHelper : NSObject + +/** + 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트 객체. + */ +@property(nonatomic, weak) id delegate; + +/** + 이벤트를 받아올 지도 객체. + */ +@property(nonatomic, weak) NMFMapView *mapView; + +/** + 타일 목록을 갱신할 때 `-mapViewCameraIdle:` 대신 `-mapView:cameraIsChangingByReason:`을 사용할지 여부를 설정합니다. + `-mapView:cameraIsChangingByReason:`을 사용하면 목록이 더 빠르게 갱신되지만 성능이 하락합니다. + 기본값 `NO`. + */ +@property(nonatomic) BOOL isUpdateOnChange; + +/** + 최소 줌 레벨을 지정 합니다. + 기본값 `NMF_MIN_ZOOM`. + */ +@property(nonatomic) NSInteger minZoom; + +/** + 최대 줌 레벨을 지정 합니다. + 기본값 `NMF_MAX_ZOOM`. + */ +@property(nonatomic) NSInteger maxZoom; + +/** + 지도 객체를 지정하여 타일 커버 헬퍼를 생성합니다. + + @param mapView 지도 객체. + */ ++ (instancetype)tileCoverHelperWith:(NMFMapView * _Nonnull)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h new file mode 100644 index 00000000..383e374a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTileId.h @@ -0,0 +1,86 @@ +#import "NMFFoundation.h" + +@class NMGWebMercatorCoord; +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 타일 ID를 다루는 클래스. 타일 ID는 정수 단위의 줌 레벨을 의미하는 `z` 성분, `x`축 인덱스를 + 의미하는 `x` 성분, `y`축 인덱스를 의미하는 `y` 성분으로 구성되며, 각 성분을 조합한 + `long` 타입으로 표현됩니다. 이 클래스의 메서드를 사용해 `long` 타입의 타일 ID로부터 각 성분을 + 추출하거나 각 성분으로부터 타일 ID를 조합할 수 있습니다. + */ +NMF_EXPORT +@interface NMFTileId : NSObject + +/** + `tileId`의 `z` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `z` 성분. + */ ++ (NSUInteger)z:(long)tileId; + +/** + `tileId`의 `x` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `x` 성분. + */ ++ (NSUInteger)x:(long)tileId; + +/** + `tileId`의 `y` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `y` 성분. + */ ++ (NSUInteger)y:(long)tileId; + +/** + `z`, `x`, `y` 성분을 조합한 타일 ID를 반환합니다. + + @param z `z` 성분. + @param x `x` 성분. + @param y `y` 성분. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y; + +/** + `coord` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다. + + @param z 줌 레벨. + @param coord 좌표. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z WithCoord:(NMGWebMercatorCoord * _Nonnull)coord; + +/** + `latLng` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다. + + @param z 줌 레벨. + @param latLng 좌표. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z WithLatLng:(NMGLatLng * _Nonnull)latLng; + +/** + `tileId` 타일의 영역을 반환합니다. + + @param tileId 타일 ID. + @return 영역. + */ ++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromTileId:(long)tileId; + +/** + `z`, `x`, `y` 성분을 조합한 타일의 영역을 반환합니다. + + @param z `z` 성분. + @param x `x` 성분. + @param y `y` 성분. + @return 영역. + */ ++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h new file mode 100644 index 00000000..6b0f2d11 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFTypes.h @@ -0,0 +1,112 @@ +#import +#import + +#import "NMFFoundation.h" + +#pragma once + +NS_ASSUME_NONNULL_BEGIN + +typedef NSString *NMFExceptionName NS_TYPED_EXTENSIBLE_ENUM; + +/** + :nodoc: Generic exceptions used across multiple disparate classes. Exceptions + that are unique to a class or class-cluster should be defined in those headers. + */ +extern NMF_EXPORT NMFExceptionName const NMFAbstractClassException; + +/** Indicates an error occurred in the Mapbox SDK. */ +extern NMF_EXPORT NSErrorDomain const NMFErrorDomain; + +/** Error constants for the Mapbox SDK. */ +typedef NS_ENUM(NSInteger, NMFErrorCode) { + /** An unknown error occurred. */ + NMFErrorCodeUnknown = -1, + /** The resource could not be found. */ + NMFErrorCodeNotFound = 1, + /** The connection received an invalid server response. */ + NMFErrorCodeBadServerResponse = 2, + /** An attempt to establish a connection failed. */ + NMFErrorCodeConnectionFailed = 3, + /** A style parse error occurred while attempting to load the map. */ + NMFErrorCodeParseStyleFailed = 4, + /** An attempt to load the style failed. */ + NMFErrorCodeLoadStyleFailed = 5, + /** An error occurred while snapshotting the map. */ + NMFErrorCodeSnapshotFailed = 6, + /** Source is in use and cannot be removed */ + NMFErrorCodeSourceIsInUseCannotRemove = 7, + /** Source is in use and cannot be removed */ + NMFErrorCodeSourceIdentifierMismatch = 8, + /** An error occurred while modifying the offline storage database */ + NMFErrorCodeModifyingOfflineStorageFailed = 9, + /** Source is invalid and cannot be removed from the style (e.g. after a style change) */ + NMFErrorCodeSourceCannotBeRemovedFromStyle = 10, + /** An error occurred while rendering */ + NMFErrorCodeRenderingError = 11, +}; + +/** Options for enabling debugging features in an `NMFMapView` instance. */ +typedef NS_OPTIONS(NSUInteger, NMFMapDebugMaskOptions) { + /** Edges of tile boundaries are shown as thick, red lines to help diagnose + tile clipping issues. */ + NMFMapDebugTileBoundariesMask = 1 << 1, + /** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */ + NMFMapDebugTileInfoMask = 1 << 2, + /** Each tile shows a timestamp indicating when it was loaded. */ + NMFMapDebugTimestampsMask = 1 << 3, + /** Edges of glyphs and symbols are shown as faint, green lines to help + diagnose collision and label placement issues. */ + NMFMapDebugCollisionBoxesMask = 1 << 4, + /** Each drawing operation is replaced by a translucent fill. Overlapping + drawing operations appear more prominent to help diagnose overdrawing. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugOverdrawVisualizationMask = 1 << 5, +#if !TARGET_OS_IPHONE + /** The stencil buffer is shown instead of the color buffer. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugStencilBufferMask = 1 << 6, + /** The depth buffer is shown instead of the color buffer. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugDepthBufferMask = 1 << 7, +#endif +}; + +/** + A structure containing information about a transition. + */ +typedef struct __attribute__((objc_boxable)) NMFTransition { + /** + The amount of time the animation should take, not including the delay. + */ + NSTimeInterval duration; + + /** + The amount of time in seconds to wait before beginning the animation. + */ + NSTimeInterval delay; +} NMFTransition; + +NS_INLINE NSString *NMFStringFromNMFTransition(NMFTransition transition) { + return [NSString stringWithFormat:@"transition { duration: %f, delay: %f }", transition.duration, transition.delay]; +} + +/** + Creates a new `NMFTransition` from the given duration and delay. + + @param duration The amount of time the animation should take, not including + the delay. + @param delay The amount of time in seconds to wait before beginning the + animation. + + @return Returns a `NMFTransition` struct containing the transition attributes. + */ +NS_INLINE NMFTransition NMFTransitionMake(NSTimeInterval duration, NSTimeInterval delay) { + NMFTransition transition; + transition.duration = duration; + transition.delay = delay; + + return transition; +} + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h new file mode 100644 index 00000000..640139b6 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFUtils.h @@ -0,0 +1,61 @@ +#import +#import +#import + +#import "NMFMapView.h" + +NS_INLINE CGFloat ScreenScaleFactor() { + static dispatch_once_t onceToken; + static CGFloat screenFactor; + + dispatch_once(&onceToken, ^{ + screenFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? + [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale]; + }); + + return screenFactor; +}; + +/** + 지오메트리 관련 유틸리티를 제공하는 클래스. + */ +NMF_EXPORT +@interface NMFGeometryUtils : NSObject + +/** + `NMGLatLng` 배열로 구성된 경로선에서 대상 좌표에 가장 근접한 지점의 진척률을 반환합니다. + + @param latLngs `NMGLatLng` 배열로 구성된 경로선. + @param targetLatLng 대상 좌표. + @return 진척률. + */ ++(double)progressWithLatLngs:(NSArray * _Nonnull)latLngs targetLatLng:(NMGLatLng * _Nonnull)targetLatLng; + +/** + `NMGLineString` 배열로 구성된 경로선에서 대상 좌표에 가장 근접한 지점의 진척률을 반환합니다. + + @param lineStrings `NMGLineString` 배열로 구성된 경로선. + @param targetLatLng 대상 좌표. + @return 진척률. + */ ++(double)progressWithLineStrings:(NSArray * _Nonnull)lineStrings targetLatLng:(NMGLatLng * _Nonnull)targetLatLng; + +@end + + +/** + 카메라 관련 유틸리티를 제공하는 클래스. + */ +NMF_EXPORT +@interface NMFCameraUtils : NSObject + +/** + `bounds`가 화면에 온전히 보이는 최대 줌 레벨을 반환합니다. + + @param bounds 영역. + @param insets 영역과 지도 화면 간 확보할 인셋 여백. pt 단위. + @param mapView `NMFMapView` 객체. + @return `bounds`가 `map`에서 화면에 온전히 보이는 최대 줌 레벨. + */ ++ (double)getFittableZoomLevelWith:(NMGLatLngBounds * _Nonnull)bounds insets:(UIEdgeInsets)insets mapView:(NMFMapView * _Nonnull)mapView; +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFZoomControlView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFZoomControlView.h new file mode 100644 index 00000000..c8efbad5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMFZoomControlView.h @@ -0,0 +1,24 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 줌 버튼 컨트롤. + */ +NMF_EXPORT +@interface NMFZoomControlView : UIView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMapsMap.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMapsMap.h new file mode 100644 index 00000000..575d95a8 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NMapsMap.h @@ -0,0 +1,88 @@ +#import "NMFFoundation.h" + +// Project version number for NaverMap Framework. +FOUNDATION_EXPORT NMF_EXPORT double NaverMapFrameworkVersionNumber; + +// Project version string for NaverMap Framework. +FOUNDATION_EXPORT NMF_EXPORT const unsigned char NaverMapFrameworVersionString[]; + +#import "NMFUtils.h" + +#import "NMFAuthManager.h" +#import "NMFNaverMapView.h" + +#import "NMFPickable.h" +#import "NMFLocationManager.h" +#import "NMFRendererOptions.h" +#import "NMFMapView.h" +#import "NMFMapView+IBAdditions.h" +#import "NMFMapViewDelegate.h" +#import "NMFMapViewTouchDelegate.h" +#import "NMFMapViewCameraDelegate.h" +#import "NMFMapViewOptionDelegate.h" + +#import "NMFOfflinePack.h" +#import "NMFOfflineRegion.h" +#import "NMFOfflineStorage.h" + +#import "NMFCameraCommon.h" +#import "NMFCameraUpdate.h" +#import "NMFCameraPosition.h" +#import "NMFCameraUpdateParams.h" + +#import "NMFOverlay.h" +#import "NMFSymbol.h" +#import "NMFTileId.h" +#import "NMFTileCoverHelper.h" +#import "NMFOverlayImage.h" +#import "NMFGroundOverlay.h" +#import "NMFLocationOverlay.h" +#import "NMFMarker.h" +#import "NMFInfoWindow.h" +#import "NMFInfoWindowDefaultTextSource.h" +#import "NMFPath.h" +#import "NMFMultipartPath.h" +#import "NMFArrowheadPath.h" +#import "NMFPolygonOverlay.h" +#import "NMFPolylineOverlay.h" +#import "NMFCircleOverlay.h" + +#import "NMFCompassView.h" +#import "NMFScaleView.h" +#import "NMFZoomControlView.h" +#import "NMFLocationButton.h" +#import "NSBundle+NMFAdditions.h" +#import "NMFProjection.h" + +#import "NMFIndoorLevelPickerView.h" +#import "NMFIndoorView.h" +#import "NMFIndoorLevel.h" +#import "NMFIndoorZone.h" +#import "NMFIndoorRegion.h" +#import "NMFIndoorSelection.h" +#import "NMFIndoorSelectionDelegate.h" + +#import "NMCBuilder.h" +#import "NMCCluster.h" +#import "NMCClusterer.h" +#import "NMCClusteringKey.h" +#import "NMCClusterMarkerInfo.h" +#import "NMCClusterMarkerUpdater.h" +#import "NMCClustererUpdateCallback.h" +#import "NMCComplexBuilder.h" +#import "NMCDefaultClusterMarkerUpdater.h" +#import "NMCDefaultDistanceStrategy.h" +#import "NMCDefaultLeafMarkerUpdater.h" +#import "NMCDefaultMarkerManager.h" +#import "NMCDefaultPositioningStrategy.h" +#import "NMCDefaultTagMergeStrategy.h" +#import "NMCDefaultThresholdStrategy.h" +#import "NMCDistanceStrategy.h" +#import "NMCLeaf.h" +#import "NMCLeafMarkerInfo.h" +#import "NMCLeafMarkerUpdater.h" +#import "NMCMarkerInfo.h" +#import "NMCNode.h" +#import "NMCPositioningStrategy.h" +#import "NMCTagMergeStrategy.h" +#import "NMCThresholdStrategy.h" diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h new file mode 100644 index 00000000..2256e3a1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h @@ -0,0 +1,48 @@ +#import + +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +// Strings in the SDK targets must be retrieved from the framework bundle rather +// than the main bundle, which is usually the application bundle. Redefining +// these macros ensures that the framework bundle’s string tables are used at +// runtime yet tools like genstrings and Xcode can still find the localizable +// string identifiers. (genstrings has an -s option that would allow us to +// define our own macros, but Xcode’s Export Localization feature lacks support +// for it.) +// +// As a consequence of this approach, this header must be included in all SDK +// files that include localizable strings. + + +@interface NSBundle (NMFAdditions) + +/// Returns the bundle containing the SDK’s classes and Info.plist file. ++ (instancetype)naverMapFrameworkBundle; + ++ (nonnull NSString *)naverMapFrameworkVersion; + ++ (nullable NSString *)naverMapFrameworkBundleIdentifier; + ++ (nullable NSDictionary *)naverMapFrameworkInfoDictionary; + ++ (nullable NSString *)naverMapApplicationBundleIdentifier; + +@property (readonly, copy, nullable) NSString *naverMapFrameworkResourcesDirectory; + +@end + +static inline NSString* NMFLocalizedString(NSString *key, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:@"" table:nil]; +} + +static inline NSString* NMFLocalizedStringFromTable(NSString *key, NSString *tbl, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:@"" table:(tbl)]; +} + +static inline NSString* NMFLocalizedStringWithDefaultValue(NSString *key, NSString * _Nullable tbl, NSBundle * _Nullable bundle, NSString *val, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:(val) table:(tbl)]; +} + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Info.plist b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Info.plist new file mode 100644 index 00000000..339490a0 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Info.plist differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/LICENSE b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/LICENSE new file mode 100644 index 00000000..dbbbe4ce --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/LICENSE @@ -0,0 +1,2 @@ +Copyright © 2018-2021 NAVER Corp. +All rights reserved. diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Modules/module.modulemap new file mode 100644 index 00000000..384594f0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module NMapsMap { + umbrella header "NMapsMap.h" + export * + + module * { export * } +} diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib new file mode 100644 index 00000000..30275c72 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib new file mode 100644 index 00000000..6d7ac4ba Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib new file mode 100644 index 00000000..57a2976e Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib new file mode 100644 index 00000000..d0c6277c Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib new file mode 100644 index 00000000..03c1d45b Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib new file mode 100644 index 00000000..0e4f2e6d Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib new file mode 100644 index 00000000..0aa8e2e9 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFScaleView.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFScaleView.nib new file mode 100644 index 00000000..073b3b87 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFScaleView.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFZoomControlView.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFZoomControlView.nib new file mode 100644 index 00000000..bf1b4dfa Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMFZoomControlView.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMapsMap b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMapsMap new file mode 100755 index 00000000..7662af8a Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NMapsMap differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NOTICE b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NOTICE new file mode 100644 index 00000000..0896e535 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/NOTICE @@ -0,0 +1,2628 @@ +THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY BE CONTAINED IN THIS APPLICATION. + +We thank the open source community for all of their efforts. If you have any questions about these notices please email us at opensource@navercorp.com. + +===== + +mapbox/cheap-ruler-cpp +https://github.com/mapbox/cheap-ruler-cpp + + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/mapbox-gl-native +https://github.com/mapbox/mapbox-gl-native + + +mapbox-gl-native copyright (c) 2014-2019 Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of Boost. + +Distributed under the Boost Software License, Version 1.0. + +http://www.boost.org/LICENSE_1_0.txt + +=========================================================================== + +Mapbox GL uses portions of Clipper. + +Author : Angus Johnson +Version : 6.1.3a +Date : 22 January 2014 +Website : http://www.angusj.com +Copyright : Angus Johnson 2010-2014 + +License: +Use, modification & distribution is subject to Boost Software License Ver 1. +http://www.boost.org/LICENSE_1_0.txt + +Attributions: +The code in this library is an extension of Bala Vatti's clipping algorithm: +"A generic solution to polygon clipping" +Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. +http://portal.acm.org/citation.cfm?id=129906 + +Computer graphics and geometric modeling: implementation and algorithms +By Max K. Agoston +Springer; 1 edition (January 4, 2005) +http://books.google.com/books?q=vatti+clipping+agoston + +See also: +"Polygon Offsetting by Computing Winding Numbers" +Paper no. DETC2005-85513 pp. 565-575 +ASME 2005 International Design Engineering Technical Conferences +and Computers and Information in Engineering Conference (IDETC/CIE2005) +September 24-28, 2005 , Long Beach, California, USA +http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf + +=========================================================================== + +Mapbox GL uses portions of BugshotKit. + +The MIT License (MIT) + +Copyright (c) 2014 marcoarment + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of CSS Color Parser. + +(c) Dean McNamee , 2012. +C++ port by Konstantin Käfer , 2014. + +https://github.com/deanm/css-color-parser-js +https://github.com/kkaefer/css-color-parser-cpp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of GLFW. + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2010 Camilla Berglund + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. + +=========================================================================== + +Mapbox GL uses portions of libc++. + +The libc++ library is dual licensed under both the University of Illinois +"BSD-Like" license and the MIT license. As a user of this code you may choose +to use it under either license. As a contributor, you agree to allow your code +to be used under both. + +Full text of the relevant licenses is included below. + +==== + +University of Illinois/NCSA +Open Source License + +Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + +* Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +==== + +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of libcurl. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2015, Daniel Stenberg, . + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +=========================================================================== + +Mapbox GL uses portions of libjpeg-turbo. + +This software is based in part on the work of the Independent JPEG Group. + +Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +TurboJPEG/LJT: this implements the TurboJPEG API using libjpeg or libjpeg-turbo + +=========================================================================== + +Mapbox GL uses portions of libpng. + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are +Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, and are distributed according +to the same disclaimer and license as libpng-0.96, with the following +individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, and are +distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + +=========================================================================== + +Mapbox GL uses portions of libuv. + +libuv is part of the Node project: http://nodejs.org/ +libuv may be distributed alone under Node's license: + +==== + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +==== + +This license applies to all parts of libuv that are not externally +maintained libraries. + +The externally maintained libraries used by libuv are: + +- tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + +- inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + +- stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + +- pthread-fixes.h, pthread-fixes.c, copyright Google Inc. and Sony Mobile + Communications AB. Three clause BSD license. + +- android-ifaddrs.h, android-ifaddrs.c, copyright Berkeley Software Design + Inc, Kenneth MacKay and Emergya (Cloud4all, FP7/2007-2013, grant agreement + n° 289016). Three clause BSD license. + +=========================================================================== + +Mapbox GL uses portions of libzip. + +Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner + +The authors can be contacted at + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of the Mapbox iOS SDK, which was derived from the +Route-Me open source project, including the Alpstein fork of it. + +The Route-Me license appears below. + +Copyright (c) 2008-2013, Route-Me Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of nunicode. + +Copyright (c) 2013 Aleksey Tulinov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of OpenSSL. + +LICENSE ISSUES +============== + +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of +the OpenSSL License and the original SSLeay license apply to the toolkit. +See below for the actual license texts. Actually both licenses are BSD-style +Open Source licenses. In case of any license issues related to OpenSSL +please contact openssl-core@openssl.org. + +OpenSSL License +--------------- + +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +Original SSLeay License +----------------------- + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +The following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + +=========================================================================== + +Mapbox GL uses portions of RapidJSON. + +Tencent is pleased to support the open source community by making RapidJSON +available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights +reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note +that the RapidJSON binary is licensed under the MIT License. If you have +downloaded a copy of the RapidJSON source code from Tencent, please note that +RapidJSON source code is licensed under the MIT License, except for the third- +party components listed below which are subject to different license terms. +Your integration of RapidJSON into your own projects may require compliance with +the MIT License, as well as the other licenses applicable to the third-party +components included within RapidJSON. To avoid the problematic JSON license in +your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as +it's the only code under the JSON license. A copy of the MIT License is included +in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of Reachability. + +Copyright (c) 2011, Tony Million. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of SQLite. + +2001 September 15 + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +=========================================================================== + +Mapbox GL uses portions of SVPulsingAnnotationView. + +Copyright (c) 2013, Sam Vermette + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of zlib. + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + +Copyright notice: + +(C) 1995-2013 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +=========================================================================== + +Mapbox GL uses portions of Realm Objective-C. + +Copyright 2015 Realm Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=========================================================================== + +Mapbox GL uses portions of SMCalloutView. + +Copyright 2016 Nick Farina. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License: +https://github.com/nfarina/calloutview/blob/master/LICENSE + +=========================================================================== + +Mapbox GL uses portions of software listed in [platform/android/LICENSE.md](https://github.com/mapbox/mapbox-gl-native/blob/master/platform/android/LICENSE.md). + +Mapbox GL uses portions of software listed in [platform/ios/vendor/mapbox-events-ios/LICENSE.md](https://github.com/mapbox/mobile-events-ios/blob/master/LICENSE.md). + +===== + +mapbox/earcut +https://github.com/mapbox/earcut + + +ISC License + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/eternal +https://github.com/mapbox/eternal + + +ISC License + +Copyright (c) 2018, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +martinmoene/expected-lite +https://github.com/martinmoene/expected-lite + + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/geojson-cpp +https://github.com/mapbox/geojson-cpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/geojson-vt +https://github.com/mapbox/geojson-vt + + +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/geometry.hpp +https://github.com/mapbox/geometry.hpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +unicode-org/icu +http://site.icu-project.org + + +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2019 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyright (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +6. Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===== + +mourner/kdbush.hpp +https://github.com/mourner/kdbush.hpp + + +Copyright (c) 2016, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/pixelmatch +https://github.com/mapbox/pixelmatch + + +ISC License + +Copyright (c) 2019, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/polylabel +https://github.com/mapbox/polylabel + + +ISC License +Copyright (c) 2016 Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +===== + +mapbox/protozero +https://github.com/mapbox/protozero + + +protozero copyright (c) Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===== + +Tencent/rapidjson +http://rapidjson.org + + +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. +If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license. +A copy of the MIT License is included in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +===== + +mapbox/shelf-pack-cpp +https://github.com/mapbox/shelf-pack-cpp + + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +SQLite +https://www.sqlite.org + + +SQLite Is Public Domain + +All of the code and documentation in SQLite has been dedicated to the public domain by the authors. All code authors, and representatives of the companies they work for, have signed affidavits dedicating their contributions to the public domain and originals of those signed affidavits are stored in a firesafe at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original SQLite code, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +--- + +2001 September 15 + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +===== + +mapbox/supercluster.hpp +https://github.com/mapbox/supercluster.hpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +okdshin/unique_resource +https://github.com/okdshin/unique_resource + + +Copyright (c) 2015 okdshin +Distributed under the Boost Software License, Version 1.0. + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/variant +https://github.com/mapbox/variant + + +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/vector-tile +https://github.com/mapbox/vector-tile + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/wagyu +https://github.com/mapbox/wagyu + + +Parts of the code in the Wagyu Library are derived from the version of the +Clipper Library by Angus Johnson listed below. + +Author : Angus Johnson +Version : 6.4.0 +Date : 2 July 2015 +Website : http://www.angusj.com + +Copyright for portions of the derived code in the Wagyu library are held +by Angus Johnson, 2010-2015. Copyright for the "include/mapbox/geometry/wagyu/almost_equal.hpp" +file is held by Google Inc and its license is listed at the top of that file. + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// + + +All other copyright for the Wagyu Library are held by Mapbox, 2016. This code +is published in accordance with, and retains the same license as the Clipper +Library by Angus Johnson. + +Copyright (c) 2010-2015, Angus Johnson +Copyright (c) 2016-2020, Mapbox + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +Bly7/OBJ-Loader +https://github.com/Bly7/OBJ-Loader + + +MIT License + +Copyright (c) 2016 Robert Smith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +===== + +maplibre/maplibre-native +https://github.com/maplibre/maplibre-native + + +BSD 2-Clause License + +Copyright (c) 2021 MapLibre contributors + +Copyright (c) 2018-2021 MapTiler.com + +Copyright (c) 2014-2020 Mapbox + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +### [Mapbox GL Native](https://github.com/mapbox/mapbox-gl-native) by Mapbox + +``` +mapbox-gl-native Copyright (c) 2014-2020 Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR +PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +``` + +--- + +### [kdbush.hpp](https://github.com/mourner/kdbush.hpp) by Vladimir Agafonkin + +``` +Copyright (c) 2016, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [supercluster.hpp](https://github.com/mapbox/supercluster.hpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [shelf-pack-cpp](https://github.com/mapbox/shelf-pack-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [geojson-vt-cpp](https://github.com/mapbox/geojson-vt-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [cheap-ruler-cpp](https://github.com/mapbox/cheap-ruler-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [Boost C++ Libraries](https://www.boost.org) by Boost authors + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [csscolorparser](https://github.com/mapbox/css-color-parser-cpp) by Dean McNamee and Konstantin Käfer + +``` +(c) Dean McNamee , 2012. +(c) Konstantin Käfer , 2014. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +``` + +--- + +### [earcut.hpp](https://github.com/mapbox/earcut.hpp) by Mapbox + +``` +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [eternal](https://github.com/mapbox/eternal) by Mapbox + +``` +ISC License + +Copyright (c) 2018, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [parsedate](https://curl.haxx.se) by Daniel Stenberg and others + +``` +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2020, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +``` + +--- + +### [polylabel](https://github.com/mapbox/polylabel) by Mapbox + +``` +ISC License +Copyright (c) 2016 Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +``` + +--- + +### [protozero](https://github.com/mapbox/protozero) by Mapbox + +``` +protozero copyright (c) Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR +PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +``` + +--- + +### [unique_resource](https://github.com/okdshin/unique_resource) by Shintarou Okada + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [vector-tile](https://github.com/mapbox/vector-tile) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [wagyu](https://github.com/mapbox/wagyu.git) by Angus Johnson and Mapbox + +``` +Parts of the code in the Wagyu Library are derived from the version of the +Clipper Library by Angus Johnson listed below. + +Author : Angus Johnson +Version : 6.4.0 +Date : 2 July 2015 +Website : http://www.angusj.com + +Copyright for portions of the derived code in the Wagyu library are held +by Angus Johnson, 2010-2015. All other copyright for the Wagyu Library are held by +Mapbox, 2016. This code is published in accordance with, and retains the same license +as the Clipper Library by Angus Johnson. + +Copyright (c) 2010-2015, Angus Johnson +Copyright (c) 2016, Mapbox + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [mapbox-base](https://github.com/mapbox/mapbox-base) by Mapbox + +``` +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES +LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +--- + +### [expected-lite](https://github.com/martinmoene/expected-lite) by Martin Moene + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [RapidJSON](https://rapidjson.org) by THL A29 Limited, a Tencent company, and Milo Yip + +``` +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. +If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license. +A copy of the MIT License is included in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [geojson.hpp](https://github.com/mapbox/geojson-cpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [geometry.hpp](https://github.com/mapbox/geometry.hpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +``` + +--- + +### [Optional](https://github.com/akrzemi1/Optional) by Andrzej Krzemienski + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [variant](https://github.com/mapbox/variant) by Mapbox + +``` +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES +LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +--- + +===== + +mapbox/webgl-wind +https://github.com/mapbox/webgl-wind + + +ISC License + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +tonymillion/Reachability +https://github.com/tonymillion/Reachability + + +Copyright (c) 2011-2013, Tony Million. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +===== diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/default.metallib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/default.metallib new file mode 100644 index 00000000..1b2274f1 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/default.metallib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Foundation.strings new file mode 100644 index 00000000..9cbcebb1 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Localizable.strings new file mode 100644 index 00000000..f14ddd0a Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/en.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Foundation.strings new file mode 100644 index 00000000..3b372bd8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Localizable.strings new file mode 100644 index 00000000..1600f824 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ja.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.strings new file mode 100644 index 00000000..f8850ef8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.stringsdict b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.stringsdict new file mode 100644 index 00000000..bf13a004 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Foundation.stringsdict differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Localizable.strings new file mode 100644 index 00000000..8d7050e8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/ko.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Foundation.strings new file mode 100644 index 00000000..6962f5e2 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Localizable.strings new file mode 100644 index 00000000..552a35d5 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64/NMapsMap.framework/zh-Hans.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Assets.car b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Assets.car new file mode 100644 index 00000000..a3da96d3 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Assets.car differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Base.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Base.lproj/Foundation.strings new file mode 100644 index 00000000..9cbcebb1 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Base.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCBuilder.h new file mode 100644 index 00000000..68cbd2fe --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCBuilder.h @@ -0,0 +1,76 @@ +#import "NMFFoundation.h" + +@protocol NMCClusteringKey; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; +@class NMCClusterer<__covariant KeyType : NSObject *>; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`를 생성하는 빌더 클래스. 클러스터링할 거리, 최소/최대 줌 레벨, 애니메이션 여부, 클러스터/단말 + 클러스터/단말 마커 커스터미이징 등 기본적인 기능을 제공합니다. 복잡한 전략과 기능이 필요하다면 + `NMCComplexBuilder`를 사용해야 합니다. + */ +NMF_EXPORT +@interface NMCBuilder<__covariant KeyType : NSObject *> : NSObject + +/** + 클러스터링할 기준 거리. 클러스터에 추가된 두 데이터의 화면상 거리가 기준 거리보다 가깝다면 + 클러스터링되어 하나의 마커로 나타납니다. + + 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다. + */ +@property (nonatomic, assign) double screenDistance; + +/** + 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의 + 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minZoom; + +/** + 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면, + 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서 + 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부 + 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger maxZoom; + +/** + 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션을 적용할지 여부. + + 기본값은 `YES`입니다. + */ +@property (nonatomic, assign) bool animate; + +/** + 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id clusterMarkerUpdater; + +/** + 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id leafMarkerUpdater; + +/** + `NMCClusterer` 객체를 생성합니다. + + @return `NMCClusterer` 객체. + */ +- (NMCClusterer * _Nonnull)build; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCCluster.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCCluster.h new file mode 100644 index 00000000..6b0cb3a2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCCluster.h @@ -0,0 +1,39 @@ +#import "NMCNode.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터 노드를 의미하는 클래스. + */ +NMF_EXPORT +@interface NMCCluster : NMCNode + +/** + 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 자식 `NMCNode`의 목록. + */ +@property (nonatomic, nonnull, readonly) NSArray *children; + +/** + 전체 `NMCLeaf`의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를 + `NMGLatLng`으로 변환한 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h new file mode 100644 index 00000000..2c1d7be0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerInfo.h @@ -0,0 +1,31 @@ +#import "NMCMarkerInfo.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 노출되어야 하는 클러스터 마커의 속성을 나타내는 클래스. + */ +NMF_EXPORT +@interface NMCClusterMarkerInfo : NMCMarkerInfo + +/** + 태그. `NMCTagMergeStrategy.mergeTag:`로 병합한 객체. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. `NMCPositioningStrategy.getPosition:`으로 구한 웹 메르카토르 좌표를 + `NMGLatLng`으로 변환한 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +/** + 전체 자식 단말 마커의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h new file mode 100644 index 00000000..46eadfc5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterMarkerUpdater.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCClusterMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트. + + 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateClusterMarker::` 메서드가 호출되며, + 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCClusterMarkerInfo`의 + 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의 + `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로 + 반영할 필요가 없습니다. + + @see `NMCBuilder.clusterMarkerUpdater` + @see `NMCComplexBuilder.clusterMarkerUpdater` + */ +NMF_EXPORT +@protocol NMCClusterMarkerUpdater + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 클러스터 마커의 정보. + @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterer.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterer.h new file mode 100644 index 00000000..e849743e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusterer.h @@ -0,0 +1,150 @@ +#import "NMFFoundation.h" +#import "NMCClustererUpdateCallback.h" + +@protocol NMCClusteringKey; +@class NMFMapView; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; + +/** + 두 마커가 인접했을 때 클러스터링될 기본 화면상 거리. pt 단위. + */ +const static double NMC_DEFAULT_SCREEN_DISTANCE = 70; + +/** + 클러스터가 펼쳐지는/합쳐지는 애니메이션의 기본 지속 시간. 초 단위. + */ +const static double NMC_DEFAULT_ANIMATION_DURATION = 0.3; + +NS_ASSUME_NONNULL_BEGIN + +/** + 겹치는 여러 마커를 클러스터링해서 하나의 마커로 보여주는 기능을 제공하는 클래스. 이 클래스의 인스턴스는 직접 생성할 + 수 없고 `NMCBuilder` 또는 `NMCComplexBuilder` 빌더 클래스를 이용해 생성해야 합니다. 여러 마커가 시각적으로 + 겹치는 상황을 방지하는 기본적인 기능만 필요하다면 `NMCBuilder`를, 복잡한 전략과 기능이 필요하다면 + `NMCComplexBuilder`를 사용하는 것을 권장합니다. + + `NMCClusterer`를 사용하려면 먼저 데이터의 키를 의미하는 `NMCClusteringKey` 프로토콜을 구현한 클래스를 + 정의해야 합니다. 이 클래스를 타입 파라메터로 지정해 `NMCClusterer` 인스턴스를 만들고, + `add:Tag:` 또는 `addAll:`을 호출해 데이터를 추가한 후 `mapView`를 + 이용해 지도 객체를 지정하면 지정한 데이터가 클러스터링되어 나타납니다. + */ +NMF_EXPORT +@interface NMCClusterer<__covariant KeyType : NSObject *> : NSObject + +/** + 클러스터를 `mapView`에 추가하거나, 클러스터가 추가된 지도 객체를 반환합니다. + 지도에 추가된 상태가 아닐 경우 `nil`을 반환합니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 데이터가 비어있는지 여부. + */ +@property (nonatomic, assign, readonly) BOOL empty; + +- (instancetype)initWithThresholdStrategy:(id _Nonnull)thresholdStrategy + DistanceStrategy:(id _Nonnull)distanceStrategy + PositioningStrategy:(id _Nonnull)positioningStrategy + TagMergeStrategy:(id _Nonnull)tagMergeStrategy + MarkerManager:(id _Nonnull)markerManager + ClusterMarkerUpdater:(id _Nonnull)clusterMarkerUpdater + LeafMarkerUpdater:(id _Nonnull)leafMarkerUpdater + MinClusteringZoom:(NSInteger)minClusteringZoom + MaxClusteringZoom:(NSInteger)maxClusteringZoom + MinIndexingZoom:(NSInteger)minIndexingZoom + MaxIndexingZoom:(NSInteger)maxIndexingZoom + MaxScreenDistance:(double)maxScreenDistance + AnimationDuration:(double)animationDuration + UpdateOnChange:(BOOL)updateOnChange; + +/** + 데이터에 `key`가 포함되어있는지 여부. + + @param key 포함 여부를 확인할 키. + @return 포함되어있을 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)contains:(KeyType _Nonnull)key; + +/** + 모든 데이터를 제거합니다. + */ +- (void)clear; + +/** + 모든 데이터를 제거합니다. + + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)clearWithCallback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다. + + @param key 데이터의 키. + @param tag 데이터의 태그. + */ +- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag; + +/** + 데이터를 추가합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 추가하고자 할 경우 `addAll:`을 사용하면 성능이 향상됩니다. + + @param key 데이터의 키. + @param tag 데이터의 태그. + @param callback 데이터 추가가 완료되면 호출될 콜백. + */ +- (void)add:(KeyType _Nonnull)key :(NSObject * _Nullable)tag + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다. + + @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`. + */ +- (void)addAll:(NSDictionary * _Nonnull)keyTagMap; + +/** + 여러 데이터를 한 번에 추가합니다. 데이터를 한 번에 추가할 경우 지도에도 한 번에 반영됩니다. + + @param keyTagMap 키가 데이터의 키, 값이 데이터의 태그인 `NSDictionary`. + @param callback 데이터 추가가 완료되면 호출될 콜백. + */ +- (void)addAll:(NSDictionary * _Nonnull)keyTagMap + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다. + */ +- (void)remove:(KeyType _Nonnull)key; + +/** + 데이터를 제거합니다. 이 메서드를 여러 번 호출하면 지도에도 호출한 횟수만큼 나누어 반영됩니다. 따라서 여러 + 데이터를 한 번에 제거하고자 할 경우 `removeAll:`을 사용하면 성능이 향상됩니다. + + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)remove:(KeyType _Nonnull)key + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +/** + 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다. + + @param keys 제거할 키의 목록. + */ +- (void)removeAll:(NSArray * _Nonnull)keys; + +/** + 여러 데이터를 한 번에 제거합니다. 데이터를 한 번에 제거할 경우 지도에도 한 번에 반영됩니다. + + @param keys 제거할 키의 목록. + @param callback 데이터 제거가 완료되면 호출될 콜백. + */ +- (void)removeAll:(NSArray * _Nonnull)keys + Callback:(NMCClustererUpdateCallback _Nullable)callback; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h new file mode 100644 index 00000000..6f28dfba --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClustererUpdateCallback.h @@ -0,0 +1,6 @@ +#import "NMFFoundation.h" + +/** + 클러스터러의 데이터 갱신이 완료되면 호출되는 콜백 타입. + */ +typedef void (^NMCClustererUpdateCallback)(void); diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusteringKey.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusteringKey.h new file mode 100644 index 00000000..dbb0b553 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCClusteringKey.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터링될 데이터의 키를 의미하는 인터페이스. + + 클러스터러를 사용하고자 할 경우 이 인터페이스를 구현하는 클래스를 만들고, 그 타입을 `NMCClusterer`의 타입 + 파라미터로 지정해야 합니다. + + `NMCClusterer`는 두 `NMCClusteringKey` 인스턴스가 동일하다면(equality) 동일한 데이터로 간주합니다. + 즉, 두 인스턴스의 좌표가 동일하더라도, `NSObject.isEqual:`가 `NO`라면 다른 데이터로 간주합니다. + + 이 특성을 이용해 동일한 좌표에 위치하는 여러 데이터를 중복해서 클러스터링할 수 있으므로 이 언터페이스를 구현하는 + 클래스는 `NSObject.isEqual:`와 `NSObject.hash:`도 구현하는 것이 권장됩니다. + */ +NMF_EXPORT +@protocol NMCClusteringKey + +/** + 데이터의 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCComplexBuilder.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCComplexBuilder.h new file mode 100644 index 00000000..b45a1a21 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCComplexBuilder.h @@ -0,0 +1,148 @@ +#import "NMFFoundation.h" + +@protocol NMCClusteringKey; +@protocol NMCThresholdStrategy; +@protocol NMCDistanceStrategy; +@protocol NMCPositioningStrategy; +@protocol NMCTagMergeStrategy; +@protocol NMCMarkerManager; +@protocol NMCClusterMarkerUpdater; +@protocol NMCLeafMarkerUpdater; +@class NMCClusterer<__covariant KeyType : NSObject *>; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`를 생성하는 빌더 클래스. 복잡한 전략과 기능을 제공합니다. 간단한 기능만 필요하다면 + `NMCBuilder`를 사용하는 것을 권장합니다. + */ +NMF_EXPORT +@interface NMCComplexBuilder<__covariant KeyType : NSObject *> : NSObject + +/** + 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략. + */ +@property (nonatomic, nonnull) id thresholdStrategy; + +/** + 두 `NMCNode`간의 거리를 측정하는 전략. + */ +@property (nonatomic, nonnull) id distanceStrategy; + +/** + 두 `NMCCluster`의 좌표를 정하는 전략. + */ +@property (nonatomic, nonnull) id positioningStrategy; + +/** + 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략. + */ +@property (nonatomic, nonnull) id tagMergeStrategy; + +/** + `NMCClusterer`에서 노출하는 마커를 관리하는 매니저. + */ +@property (nonatomic, nonnull) id markerManager; + +/** + 클러스터 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultClusterMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id clusterMarkerUpdater; + +/** + 단말 마커의 정보를 `NMFMarker` 객체에 반영하는 업데이터. + + 기본값은 `NMCDefaultLeafMarkerUpdater` 인스턴스입니다. + */ +@property (nonatomic, nonnull) id leafMarkerUpdater; + +/** + 클러스터링할 최소 줌 레벨. 카메라의 줌 레벨이 최소 줌 레벨보다 낮다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최소 줌 레벨이 4라면, 카메라의 + 줌 레벨을 3레벨 이하로 축소하더라도 4레벨의 클러스터가 더 이상 클러스터링되지 않고 그대로 유지됩니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minClusteringZoom; + +/** + 클러스터링할 최대 줌 레벨. 카메라의 줌 레벨이 최대 줌 레벨보다 높다면 두 데이터가 화면상 기준 + 거리보다 가깝더라도 더 이상 클러스터링되지 않습니다. 예를 들어, 클러스터링할 최대 줌 레벨이 16이라면, + 카메라의 줌 레벨을 17레벨 이상으로 확대하면 모든 데이터가 클러스터링되지 않고 낱개로 나타납니다. 따라서 + 클러스터링할 최대 줌 레벨이 지도의 최대 줌 레벨보다 크거나 같다면 카메라를 최대 줌 레벨로 확대하더라도 일부 + 데이터는 여전히 클러스터링된 채 더 이상 펼쳐지지 않을 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM` - `1`입니다. + */ +@property (nonatomic, assign) NSInteger maxClusteringZoom; + +/** + 인덱싱할 최소 줌 레벨. 클러스터링할 최소 줌 레벨보다 작거나 같아야 합니다. + + `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이 + 소모됩니다. 따라서 인덱싱할 최소 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게 + 제한하면 인덱싱할 줌 레벨 미만의 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최소 줌 + 레벨과 동일하게 지정할 때 가장 좋은 효율을 낼 수 있습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property (nonatomic, assign) NSInteger minIndexingZoom; + +/** + 인덱싱할 최대 줌 레벨을 반환합니다. 클러스터링할 최대 줌 레벨보다 크거나 같아야 합니다. + + `NMCClusterer`는 효율적인 클러스터링을 위해 공간 인덱스를 사용하는데 인덱스를 구축하는 데 자원이 + 소모됩니다. 따라서 인덱싱할 최대 줌 레벨을 적절하게 제한하면 성능이 향상될 수 있습니다. 반면 과도하게 + 제한하면 인덱싱할 줌 레벨을 초과하는 줌 레벨에서 렌더링 성능이 저하될 수 있습니다. 일반적으로 지도의 최대 줌 + 레벨보다 `1` 작게 지정할 때 가장 좋은 효율을 낼 수 있습니다. + + 기본값은 `NMF_MAX_ZOOM` - `1`입니다. + */ +@property (nonatomic, assign) NSInteger maxIndexingZoom; + +/** + 클러스터링할 최대 화면 거리. 두 마커의 화면상 거리가 이 값보다 작을 경우에만 클러스터링 후보가 + 됩니다. 즉, 두 마커의 화면상 거리가 이 값보다 크다면, + `NMCDistanceStrategy.getDistance:Node1:Node2:`가 반환한 둘 간의 거리가 + `NMCThresholdStrategy.getThreshold:`보다 크더라도 클러스터링되지 않습니다. 한편 최대 화면 거리는 탐색 + 공간을 제한하는 역할을 하므로 값을 크게 지정할수록 성능이 저하됩니다. + + 따라서 `NMCDistanceStrategy`와 `NMCThresholdStrategy`를 별도로 지정했다면 전략을 고려해 적절한 값을 + 지정해야 합니다. 예를 들어 `NMCDefaultDistanceStrategy`와 `NMCDefaultThresholdStrategy`를 사용한다면 + `NMCDefaultThresholdStrategy`의 생성자 파라메터로 지정한 거리와 동일한 값을 지정했을 때 가장 좋은 효율을 + 낼 수 있습니다. + + 기본값은 `NMC_DEFAULT_SCREEN_DISTANCE`입니다. + */ +@property (nonatomic, assign) double maxScreenDistance; + +/** + 카메라 확대/축소시 클러스터가 펼쳐지는/합쳐지는 애니메이션의 지속 시간.`0`일 경우 + 애니메이션이 적용되지 않습니다. + + 기본값은 `NMC_DEFAULT_ANIMATION_DURATION`입니다. + */ +@property (nonatomic, assign) double animationDuration; + +/** + 화면상 마커를 갱신할 때 `NMFMapViewCameraDelegate.mapViewCameraIdle:`대신 + `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용할지 여부. + `NMFMapViewCameraDelegate.mapView:cameraIsChangingByReason:`를 사용하면 + 더 빠르게 갱신되지만 성능이 하락합니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, assign) BOOL updateOnChange; + +/** + `NMCClusterer` 객체를 생성합니다. + + @return `NMCClusterer` 객체. + */ +- (NMCClusterer * _Nonnull)build; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h new file mode 100644 index 00000000..b11b36e2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultClusterMarkerUpdater.h @@ -0,0 +1,41 @@ +#import "NMCClusterMarkerUpdater.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 클러스터 마커의 기본 앵커. 가운데를 가리킵니다. + */ +extern const NMF_EXPORT CGPoint NMF_CLUSTER_ANCHOR_DEFAULT; + +/** + 기본 `NMCClusterMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다. +
    +
  • + 아이콘(`NMFMarker.iconImage`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)에 따라 + `NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY`, `NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY`, + `NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY` 중 하나로 지정됩니다. +
  • +
  • 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 0.5)`로 지정됩니다.
  • +
  • 캡션 텍스트(`NMFMarker.captionText`): 클러스터의 크기(`NMCClusterMarkerInfo.size`)로 지정됩니다.
  • +
  • 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.center`로 지정됩니다.
  • +
  • 캡션 색상(`NMFMarker.captionColor`): `UIColor.whiteColor`로 지정됩니다.
  • +
  • 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.clearColor`로 지정됩니다.
  • +
  • + 마커 클릭 시 동작(`NMFMarker.touchHandler`): 클러스터가 펼쳐지는 최소 줌 레벨로 카메라를 확대하는 동작으로 지정됩니다. +
  • +
+ */ +NMF_EXPORT +@interface NMCDefaultClusterMarkerUpdater : NSObject + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 클러스터 마커의 정보. + @param marker 클러스터 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateClusterMarker:(NMCClusterMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h new file mode 100644 index 00000000..3e6e383a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultDistanceStrategy.h @@ -0,0 +1,23 @@ +#import "NMCDistanceStrategy.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCDistanceStrategy` 구현체. 두 `NMCNode`간의 화면상 거리를 측정합니다. + */ +NMF_EXPORT +@interface NMCDefaultDistanceStrategy : NSObject + +/** + 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다. + + @param zoom 거리를 측정할 줌 레벨. + @param node1 거리를 측정할 첫 번째 `NMCNode` 객체. + @param node2 거리를 측정할 두 번째 `NMCNode` 객체. + @return `node1`과 `node2`간의 화면상 거리. + */ +- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h new file mode 100644 index 00000000..c391ee61 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultLeafMarkerUpdater.h @@ -0,0 +1,30 @@ +#import "NMCLeafMarkerUpdater.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCLeafMarkerUpdater` 구현체. `NMFMarker`의 다음과 같은 속성을 지정합니다. +
    +
  • 아이콘(`NMFMarker.iconImage`): `NMF_MARKER_IMAGE_DEFAULT`로 지정됩니다.
  • +
  • 앵커(`NMFMarker.anchor`): `CGPointMake(0.5, 1.0)`로 지정됩니다.
  • +
  • 캡션 텍스트(`NMFMarker.captionText`): 빈 문자열(`""`)로 지정됩니다.
  • +
  • 캡션 정렬 방향(`NMFMarker.captionAligns`): `NMFAlignType.bottom`로 지정됩니다.
  • +
  • 캡션 색상(`NMFMarker.captionColor`): `UIColor.blackColor`로 지정됩니다.
  • +
  • 캡션 외곽 색상(`NMFMarker.captionHaloColor`): `UIColor.whiteColor`로 지정됩니다.
  • +
  • 마커 클릭 시 동작(`NMFMarker.touchHandler`): `nil`로 지정되어 아무런 동작도 하지 않습니다.
  • +
+ */ +NMF_EXPORT +@interface NMCDefaultLeafMarkerUpdater : NSObject + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 단말 마커의 정보. + @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h new file mode 100644 index 00000000..d27cd83a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultMarkerManager.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" +#import "NMCMarkerManager.h" + +/** + 기본 재사용 풀 크기. + */ +const static double NMC_DEFAULT_MAX_POOL_SIZE = 200; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCMarkerManager` 구현체. 이 클래스를 이용하면 `NMFMarker` 객체가 재사용되어 성능이 향상됩니다. 대신 한 + 번 사용되었던 `NMFMarker` 객체의 속성이 초기화되지 않고 계속 남으므로 `NMCClusterMarkerUpdater`와 + `NMCLeafMarkerUpdater`에서 매번 `NMFMarker`의 속성을 지정해야 합니다. 단, 변하지 않는 속성이 있다면 + `createMarker:`를 오버라이드해 `NMFMarker`의 속성을 생성 직후 한 번만 지정하도록 최적화할 수 있습니다. + */ +@interface NMCDefaultMarkerManager : NSObject + +/** + 기본 생성자. 재사용 풀의 크기는 `NMC_DEFAULT_MAX_POOL_SIZE`로 지정됩니다. + */ +- (instancetype)init; + +/** + 재사용 풀의 크기를 지정하는 생성자. + + @param maxPoolSize 재사용 풀의 크기. + */ +- (instancetype)initWithMaxPoolSize:(NSInteger)maxPoolSize; + +/** + 풀로부터 `NMCMarker` 객체를 가져와 반환합니다. 풀이 비어있다면 `createMarker:`를 호출해 새로운 마커 + 객체를 생성합니다. + */ +- (NMFMarker * _Nonnull)retainMarker:(NMCMarkerInfo * _Nonnull)info; + +/** + `NMFMarker` 객체를 다시 사용할 수 있도록 풀로 반환합니다. + */ +- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +/** + 새로운 마커 객체를 생성합니다. + */ +- (NMFMarker * _Nonnull)createMarker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h new file mode 100644 index 00000000..6c0d3415 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultPositioningStrategy.h @@ -0,0 +1,24 @@ +#import "NMCPositioningStrategy.h" + +@class NMCCluster; +@class NMGWebMercatorCoord; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCDefaultPositioningStrategy` 구현체. 자식 노드의 좌표의 무게 중심을 구합니다. + */ +NMF_EXPORT +@interface NMCDefaultPositioningStrategy : NSObject + +/** + `cluster`에 속한 자식 `NMCNode`의 무게 중심 좌표를 반환합니다. + + @param cluster 좌표를 구해야 하는 `cluster` 객체. + @return 웹 메르카토르 좌표. + */ +- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h new file mode 100644 index 00000000..aa4aaf4d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultTagMergeStrategy.h @@ -0,0 +1,23 @@ +#import "NMCTagMergeStrategy.h" + +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 `NMCDefaultTagMergeStrategy` 구현체. 태그를 병합하지 않고 버립니다. + */ +NMF_EXPORT +@interface NMCDefaultTagMergeStrategy : NSObject + +/** + `cluster`에 속한 자식 `NMCNode`의 태그를 사용하지 않고 항상 `nil`을 반환합니다. + + @param cluster 태그를 병합할 `cluster` 객체. + @return 병합된 `cluster`의 태그. + */ +- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h new file mode 100644 index 00000000..67393613 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDefaultThresholdStrategy.h @@ -0,0 +1,28 @@ +#import "NMCThresholdStrategy.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + * 기본 `NMCThresholdStrategy` 구현체. 고정된 기준 거리를 사용합니다. + */ +NMF_EXPORT +@interface NMCDefaultThresholdStrategy : NSObject + +/** + 생성자. + + @param threshold 기준 거리. + */ +- (instancetype)initWithThreshold:(double)threshold; + +/** + 생성자로 지정된 `threshold`를 반환합니다. + + @param zoom 기준 거리를 구할 줌 레벨. + @return 클러스터링할 기준 거리. + */ +- (double)getThreshold:(NSInteger)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDistanceStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDistanceStrategy.h new file mode 100644 index 00000000..9baf5b24 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCDistanceStrategy.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCNode; + +NS_ASSUME_NONNULL_BEGIN + +/** + 각 `NMCNode`간의 거리를 측정하는 전략에 대한 인터페이스. + + 이 전략은 `NMCThresholdStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가 + 있을 때, `getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `NMCThresholdStrategy.getThreshold`가 + 반환한 기준값보다 작거나 같으면 두 노드는 zoom 레벨에서 클러스터링됩니다. + + @see `NMCComplexBuilder.distanceStrategy` + @see `NMCComplexBuilder.thresholdStrategy` + @see `NMCThresholdStrategy.getThreshold:` + */ +NMF_EXPORT +@protocol NMCDistanceStrategy + +/** + 줌 레벨이 `zoom`일 때 `node1`과 `node2`간의 거리를 반환합니다. + + @param zoom 거리를 측정할 줌 레벨. + @param node1 거리를 측정할 첫 번째 `NMCNode` 객체. + @param node2 거리를 측정할 두 번째 `NMCNode` 객체. + @return `node1`과 `node2`간의 거리. + */ +- (double)getDistance:(NSInteger)zoom Node1:(NMCNode * _Nonnull)node1 Node2:(NMCNode * _Nonnull)node2; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeaf.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeaf.h new file mode 100644 index 00000000..789402bb --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeaf.h @@ -0,0 +1,38 @@ +#import "NMCNode.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 노드를 의미하는 클래스. + */ +NMF_EXPORT +@interface NMCLeaf : NMCNode + +/** + 키. `NMCClusterer.add:Tag:`로 지정한 `key`가 반환됩니다. + */ +@property (nonatomic, nonnull, readonly) NSObject *key; + +/** + 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`가 반환됩니다. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 자식 노드의 개수. 항상 `1`이 반환됩니다. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`이 반환됩니다. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h new file mode 100644 index 00000000..4273f7e4 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerInfo.h @@ -0,0 +1,30 @@ +#import "NMCMarkerInfo.h" + +NS_ASSUME_NONNULL_BEGIN + +@protocol NMCClusteringKey; + +/** + 지도에 노출되어야 하는 단말 마커의 속성을 나타내는 클래스. + */ +NMF_EXPORT +@interface NMCLeafMarkerInfo : NMCMarkerInfo + +/** + 키. `NMCClusterer.add:Tag:`로 지정한 `key`. + */ +@property (nonatomic, nonnull, readonly) id key; + +/** + 태그. `NMCClusterer.add:Tag:`로 지정한 `tag`. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. `NMCClusterer.add:Tag:`로 지정한 `NMCClusteringKey.position`. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h new file mode 100644 index 00000000..746caa70 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCLeafMarkerUpdater.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +@class NMCLeafMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + 단말 마커의 정보를 `NMFMarker`의 속성에 반영해 갱신하는 델리게이트. + + 단말 마커가 지도에 처음 노출되거나 정보가 변경되면 `updateLeafMarker::` 메서드가 호출되며, + 이 메서드로 전달되는 `NMFMarker`가 화면에 노출됩니다. 따라서 이 메서드 내에서 `NMCLeafMarkerInfo`의 + 정보를 가져와 `NMFMarker`의 속성에 적절하게 반영하도록 구현해야 합니다. 단, `NMFMarker`의 + `NMFMarker.position` 및 `NMFMarker.mapView` 속성은 자동으로 관리되므로 별도로 + 반영할 필요가 없습니다. + + @see `NMCBuilder.leafMarkerUpdater` + @see `NMCComplexBuilder.leafMarkerUpdater` + */ +NMF_EXPORT +@protocol NMCLeafMarkerUpdater + +/** + `info`의 정보를 `marker`의 속성에 반영합니다. + + @param info 단말 마커의 정보. + @param marker 단말 마커의 정보를 포현할 `NMFMarker` 객체. + */ +- (void)updateLeafMarker:(NMCLeafMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerInfo.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerInfo.h new file mode 100644 index 00000000..08238504 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerInfo.h @@ -0,0 +1,36 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMGLatLng; + +/** + 지도에 노출되어야 하는 마커의 속성을 나타내는 클래스. + 이 클래스의 인스턴스는 불변이며 모든 스레드에서 안전하게 접근할 수 있습니다. + */ +NMF_EXPORT +@interface NMCMarkerInfo : NSObject + +/** + 태그. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +/** + 마커가 노출되는 최소 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger minZoom; + +/** + 마커가 노출되는 최대 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger maxZoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerManager.h new file mode 100644 index 00000000..b979a743 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCMarkerManager.h @@ -0,0 +1,37 @@ +#import "NMFFoundation.h" + +@class NMCMarkerInfo; +@class NMFMarker; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`에서 노출하는 마커 객체를 관리하는 인터페이스. + + 마커가 지도에 처음 노출되면 `retainMarker:` 메서드가 호출되며, 더 이상 노출되지 않으면 + `releaseMarker:` 메서드가 호출됩니다. + + @see `NMCComplexBuilder.markerManager` + */ +NMF_EXPORT +@protocol NMCMarkerManager + +/** + `info`를 노출할 마커 객체를 반환합니다. + + @param info 노출이 필요한 `NMCMarkerInfo` 객체. + @return 노출할 `NMFMarker` 객체 + */ +- (NMFMarker * _Nullable)retainMarker:(NMCMarkerInfo * _Nonnull)info; + +/** + 더 이상 노출되지 않는 `info`의 `marker`를 정리합니다. + + @param info 더 이상 노출되지 않는 `NMCMarkerInfo` 객체. + @param marker 더 이상 노출되지 않는 `NMFMarker` 객체. + */ +- (void)releaseMarker:(NMCMarkerInfo * _Nonnull)info :(NMFMarker * _Nonnull)marker; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCNode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCNode.h new file mode 100644 index 00000000..4ea1e943 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCNode.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" + +@class NMGLatLng; +@class NMGWebMercatorCoord; + +NS_ASSUME_NONNULL_BEGIN + +/** + `NMCClusterer`가 관리하는 트리 구조의 노드를 의미하는 클래스. + + 이 클래스의 인스턴스는 모든 스레드에서 접근 가능하고 불변인 `NMCMarkerInfo`와 달리 백그라운드 스레드에서만 접근 + 가능하며 데이터가 변경되면 객체의 속성도 변경되므로 사용에 주의해야 합니다. + */ +NMF_EXPORT +@interface NMCNode : NSObject + +/** + 태그. + */ +@property (nonatomic, nullable, readonly) NSObject *tag; + +/** + 노드가 노출되어야 하는 최소 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger minZoom; + +/** + 노드가 노출되어야 하는 최대 줌 레벨. + */ +@property (nonatomic, assign, readonly) NSInteger maxZoom; + +/** + 자식 `NMCNode`의 개수. + */ +@property (nonatomic, assign, readonly) NSInteger size; + +/** + 웹 메르카토르 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGWebMercatorCoord *coord; + +/** + 좌표. + */ +@property (nonatomic, nonnull, readonly) NMGLatLng *position; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCPositioningStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCPositioningStrategy.h new file mode 100644 index 00000000..c62447b1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCPositioningStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMGWebMercatorCoord; +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 한 `cluster`의 좌표를 정하는 전략에 대한 인터페이스. + + `NMCNode`가 하나의 `NMCCluster`를 이루거나, 한 `NMCCluster`의 자식 노드가 변경되면 + `getPosition:` 메서드가 호출되며, 이 메서드에서 반환한 값이 이 `NMCCluster`의 좌표가 됩니다. + 따라서 이 메서드 내에서 `NMCCluster.tag` 또는 `NMCCluster.children`을 호출해 태그나 자식 노드의 + 좌표 등 정보를 가져와 적절한 좌표를 반환하도록 구현해야 합니다. + */ +NMF_EXPORT +@protocol NMCPositioningStrategy + +/** + `cluster`의 좌표를 반환합니다. + + @param cluster 좌표를 구해야 하는 `cluster` 객체. + @return 웹 메르카토르 좌표. + */ +- (NMGWebMercatorCoord * _Nonnull)getPosition:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCTagMergeStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCTagMergeStrategy.h new file mode 100644 index 00000000..d9f086d1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCTagMergeStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +@class NMCCluster; + +NS_ASSUME_NONNULL_BEGIN + +/** + 부모 `NMCCluster`의 자식 `NMCNode`들의 태그를 병합하는 전략에 대한 인터페이스. + + 여러 `NMCNode`가 하나의 `NMCCluster`로 합쳐지면 `mergeTag:` 메서드가 호출되며, 이 메서드에서 + 반환한 값이 부모 `NMCCluster`의 태그가 됩니다. 따라서 이 메서드 내에서 `NMCCluster.children`을 호출해 + 자식 `NMCNode`의 태그를 순회하고 병합해 반환하도록 구현해야 합니다. + + @see `NMCComplexBuilder.tagMergeStrategy` + */ +NMF_EXPORT +@protocol NMCTagMergeStrategy + +/** + `NMCCluster`에 속한 `NMCNode`의 태그를 병합해 반환합니다. + + @param cluster 태그를 병합할 `cluster` 객체. + @return 병합된 `cluster`의 태그. + */ +- (NSObject * _Nullable)mergeTag:(NMCCluster * _Nonnull)cluster; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCThresholdStrategy.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCThresholdStrategy.h new file mode 100644 index 00000000..0e9cb13f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMCThresholdStrategy.h @@ -0,0 +1,29 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 두 `NMCNode`를 클러스터링할 기준 거리를 구하는 전략에 대한 인터페이스. + + 이 전략은`NMCDistanceStrategy`와 밀접하게 연관되어 있습니다. 두 노드 `node1`, `node2`가 + 있을 때, `NMCDistanceStrategy.getDistance:Node1:Node2`가 반환한 둘 간의 거리가 `getThreshold:`가 + 반환한 기준 거리보다 작거나 같으면 두 노드는`zoom` 레벨에서 클러스터링됩니다. + + @see `NMCComplexBuilder.distanceStrategy` + @see `NMCComplexBuilder.thresholdStrategy` + @see `NMCThresholdStrategy.getThreshold:` + */ +NMF_EXPORT +@protocol NMCThresholdStrategy + +/** + 줌 레벨이 `zoom`일 때 두 `NMCNode`를 클러스터링할 기준 거리를 반환합니다. + + @param zoom 기준 거리를 구할 줌 레벨. + @return 클러스터링할 기준 거리. + */ +- (double)getThreshold:(NSInteger)zoom; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFArrowheadPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFArrowheadPath.h new file mode 100644 index 00000000..be637757 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFArrowheadPath.h @@ -0,0 +1,79 @@ +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 화살표 경로 오버레이 전역 Z 인덱스 + */ +const static int NMF_ARROWHEAD_PATH_OVERLAY_GLOBAL_Z_INDEX = 100000; + +@class NMGLatLng; + +/** + 화살표 형태로 방향 또는 회전 지점을 나타내는 오버레이. 경로선 오버레이와 마찬가지로 좌표열을 나타내지만 진척률을 + 지정할 수 없고, 끝 지점에 삼각형 모양의 머리가 추가됩니다. + */ +NMF_EXPORT +@interface NMFArrowheadPath : NMFOverlay + +/** + 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property(nonatomic, strong) UIColor *color; + +/** + 외곽선의 색상. 외곽선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property(nonatomic, strong) UIColor *outlineColor; + +/** + 좌표열. `points`의 크기는 `2` 이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *points; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 외곽선의 두께. pt 단위. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat outlineWidth; + +/** + 머리 크기의 배율을 반환합니다. 두께에 배율을 곱한 값이 머리의 크기가 됩니다. + + 기본값은 `2.5`입니다. + */ +@property(nonatomic) CGFloat headSizeRatio; + +/** + 높이. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat elevation; + +/** + 좌표열을 지정하여 화살표 오버레이를 생성합니다. `points`의 크기는 `2` 이상이어야 합니다. + + @param points 좌표열. + @return `NMFArrowheadPath` 객체. + */ ++ (nullable instancetype)arrowheadPathWith:(NSArray*)points; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFAuthManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFAuthManager.h new file mode 100644 index 00000000..b144c19a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFAuthManager.h @@ -0,0 +1,72 @@ + +#import + +/** + 네이버 클라우드 플랫폼 지도 API 인증 상태. + */ +typedef NS_ENUM(NSInteger, NMFAuthState) { + /** 인증되지 않음. */ + NMFAuthStateUnauthorized = 0, + /** 인증 진행 중. */ + NMFAuthStateAuthorizing, + /** 인증 대기 중. */ + NMFAuthStatePending, + /** 인증 완료. */ + NMFAuthStateAuthorized +}; + +/** + 인증 결과를 받는 델리게이트 프로토콜. + */ +@protocol NMFAuthManagerDelegate + +/** + 인증이 성공했을 때 호출되는 콜백 메서드. + + @param state 인증 결과. 인증 결과는 `NMFAuthManager`에 저장됩니다. + @param error 인증 결과가 실패일 때만 `NSError`가 지정됩니다. + */ +- (void)authorized:(NMFAuthState)state error:(nullable NSError *)error; + +@end + +/** + 인증 관리 기능을 담당하는 클래스. 이 클래스는 싱글턴으로, `shared`를 + 이용해 인스턴스를 가져올 수 있습니다. + + 네이버 지도 SDK를 사용하려면 반드시 클라이언트를 설정하고 인증 및 초기화를 수행해야 합니다. 클라이언트를 + 설정하는 방법에는 두 가지가 있습니다. + + - 앱의 info.plist에 `NMFClientId`를 String으로 지정합니다. + - 싱글턴 객체인 `shared`에서 `clientId`를 명시적으로 지정합니다. + */ +NMF_EXPORT +@interface NMFAuthManager : NSObject + +/** + NMFMapView를 사용하기 위한 API 인증 매니저 싱글턴. + */ ++ (nonnull instancetype)shared; + +/** + 인증 결과를 받는 델리게이트 속성. + */ +@property(nonatomic, nullable, weak) id delegate; + +/** + 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID. + */ +@property(nonatomic, nullable) NSString *clientId; + +/** + 공공기관용 네이버 클라우드 플랫폼 인증을 위한 클라이언트 ID. + */ +@property(nonatomic, nullable) NSString *govClientId; + +/** + API 인증 상태. + */ +@property(nonatomic, readonly) NMFAuthState authState; + + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraCommon.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraCommon.h new file mode 100644 index 00000000..a350a2bf --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraCommon.h @@ -0,0 +1,56 @@ +#ifndef NMFCameraCommon_h +#define NMFCameraCommon_h + +#import +#import +#import +#import "NMFGeometry.h" + +/** + 지도에서 표현할 수 있는 최소 줌 레벨. + */ +const static double NMF_MIN_ZOOM = 0.0; + +/** + 지도에서 표현할 수 있는 최대 줌 레벨. + */ +const static double NMF_MAX_ZOOM = 21.0; + +/** + 지도에서 표현할 수 있는 최소 기울기 각도. + */ +const static double NMF_MINIMUM_TILT = 0.0; + +/** + 지도에서 표현할 수 있는 최대 기울기 각도. + */ +const static double NMF_MAXIMUM_TILT = 63.0; + +/** + 기본 최대 기울기 각도. + */ +const static double NMF_DEFAULT_MAXIMUM_TILT = 60.0; + +/** + 기본 애니메이션 시간을 의미하는 상수. 애니메이션 시간이 이 값으로 지정되었을 경우 + `NMFMapView.animationDuration`으로 지정된 시간이 적용됩니다. + */ +const static NSTimeInterval NMF_DEFAULT_ANIMATION_DURATION = -1; + +#define DEFAULT_INVALID_HEADING -1 +#define DEFAULT_INVALID_ZOOM -1 +#define DEFAULT_INVALID_TILT -1 + +#define CLAMP(x, low, high) ({\ +__typeof__(x) __x = (x); \ +__typeof__(low) __low = (low);\ +__typeof__(high) __high = (high);\ +__x > __high ? __high : (__x < __low ? __low : __x);\ +}) + +#define WRAP(value, min, max) \ +(fmod((fmod((value - min), (max - min)) + (max - min)), (max - min)) + min) + +#endif /* NMFCameraCommon_h */ + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraPosition.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraPosition.h new file mode 100644 index 00000000..0e7a43b3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraPosition.h @@ -0,0 +1,66 @@ +#import + +#import "NMFFoundation.h" + +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 카메라의 위치 관련 정보를 나타내는 불변 클래스. 카메라의 위치는 좌표, 줌 레벨, 기울기 각도, 헤딩 각도로 구성됩니다. + */ +NMF_EXPORT +@interface NMFCameraPosition : NSObject + +/** + 카메라의 좌표. + */ +@property (nonatomic, strong, readonly) NMGLatLng *target; + +/** + 줌 레벨. 이 값이 증가할수록 축척이 증가합니다. + */ +@property (nonatomic, readonly) double zoom; + +/** + 기울기 각도. 도 단위. 카메라가 지면을 내려다보는 각도를 나타냅니다. 천정에서 지면을 수직으로 내려다보는 경우 `0`도이며, 비스듬해질수록 값이 증가합니다. + */ +@property (nonatomic, readonly) double tilt; + +/** + 헤딩 각도. 도 단위. 카메라가 바라보는 방위를 나타냅니다. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다. + */ +@property (nonatomic, readonly) double heading; + +/** + 카메라 위치에 관한 모든 요소를 지정해 객체를 생성합니다. + + @param target 카메라의 좌표. + @param zoom 카메라의 줌 레벨. + @param tilt 카메라의 기울기 각도. + @param heading 카메라의 베어링 각도. + + @return `NMFCameraPosition` 객체. + */ ++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom tilt:(double)tilt heading:(double)heading; + +/** + 좌표와 줌 레벨로부터 객체를 생성합니다. `tilt`와 `heading`은 `0`으로 지정됩니다. + + @param target 카메라의 좌표. + @param zoom 카메라의 줌 레벨. + + @return `NMFCameraPosition` 객체. + */ ++ (instancetype)cameraPosition:(NMGLatLng *)target zoom:(double)zoom; + +/** + 카메라의 위치가 유효한지 여부를 반환합니다. + + @return 카메라의 위치가 유효한지 여부. + */ +- (BOOL)isValid; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdate.h new file mode 100644 index 00000000..8cf8e15e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdate.h @@ -0,0 +1,222 @@ +#import +#import +#import + +#import "NMFFoundation.h" + +@class NMFCameraUpdateParams; +@class NMFCameraPosition; +@class NMFMapView; + + +NS_ASSUME_NONNULL_BEGIN + +/** + 개발자가 API를 호출해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByDeveloper = 0; + +/** + 사용자의 제스처로 인해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByGesture = -1; + +/** + 사용자의 버튼 선택으로 인해 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByControl = -2; + +/** + 위치 정보 갱신으로 카메라가 움직였음을 나타내는 값. + @see `NMFCameraUpdate.reason` + */ +const static NSInteger NMFMapChangedByLocation = -3; + +/** + * 카메라 이동 애니메이션 유형을 정의하는 열거형. `NMFCameraUpdate`에서 사용합니다. + */ +typedef NS_ENUM(NSUInteger, NMFCameraUpdateAnimation) { + /** + 애니메이션 없음. + */ + NMFCameraUpdateAnimationNone, + + /** + 선형 애니메이션. + */ + NMFCameraUpdateAnimationLinear, + + /** + 부드럽게 가속되는 애니메이션. + */ + NMFCameraUpdateAnimationEaseIn, + + /** + 부드럽게 감속되는 애니메이션. + */ + NMFCameraUpdateAnimationEaseOut, + + /** + 플라잉 애니메이션. 가속과 함께 축소됐다가 감속과 함께 확대됩니다. + */ + NMFCameraUpdateAnimationFly, +}; + +/** + 지도를 바라보는 카메라의 이동을 정의하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고, 팩토리 메서드를 이용해서 + 생성할 수 있습니다. 생성한 인스턴스를 파라미터로 삼아 `NMFMapView`의 `-moveCamera:`를 호출하면 지도를 + 이동할 수 있습니다. + + 카메라의 이동은 다음과 같은 네 가지 요소로 구성됩니다. + - 카메라의 위치: 카메라를 이동할 위치. `CameraUpdate`를 생성하는 팩토리 메서드의 파라미터로 지정합니다. + - 피봇 지점: 카메라 이동의 기준점이 되는 지점. 피봇 지점을 지정하면 이동, 줌 레벨 변경, 회전의 기준점이 해당 지점이 됩니다. `pivot`으로 지정합니다. + - 애니메이션: 카메라 이동 시 적용될 애니메이션. 애니메이션의 유형과 시간을 지정할 수 있습니다. `animation`과 `animationDuration`으로 지정합니다. + - 이동 원인: 카메라 이동의 원인. 이 값을 지정하면 `NMFMapViewCameraDelegate`의 메서드에 `reason` 파라미터로 전달됩니다. `reason`으로 지정합니다. + @see `NMFMapView` `-moveCamera:` + */ +NMF_EXPORT +@interface NMFCameraUpdate : NSObject + +/** + 피봇 지점. `0, 0`일 경우 왼쪽 위, `1, 1`일 경우 오른쪽 아래 지점을 의미합니다. + `-cameraUpdateWithFitBounds:`를 이용해 객체를 생성한 경우에는 무시됩니다. + */ +@property (nonatomic) CGPoint pivot; + +/** + 카메라 이동 시 적용할 애니메이션. 애니메이션의 시간은 `DEFAULT_ANIMATION_DURATION`으로 지정됩니다. + `animation`이 `NMFCameraUpdateAnimationNone`일 경우 지도가 애니메이션 없이 즉시 이동됩니다. + @see `NMFCameraUpdateAnimation` + */ +@property (nonatomic) NMFCameraUpdateAnimation animation; + +/** + 카메라 이동 시 적용할 애니메이션의 시간. + + 기본값은 `NMFMapView.animationDuration`입니다. + */ +@property (nonatomic) NSTimeInterval animationDuration; + +/** + 카메라 이동의 원인. + + 기본값은 `NMFMapChangedByDeveloper`입니다. + @see `NMFMapChangedByControl` `NMFMapChangedByGesture` `NMFMapChangedByDeveloper` + */ +@property (nonatomic) int reason; + +/** + `params`를 이용해 카메라를 이동하는 `NMFCameraUpdate` 객체를 생성합니다. + + @param params 카메라 이동에 사용할 파라미터. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithParams:(NMFCameraUpdateParams *)params; + +/** + 카메라를 `position` 위치로 이동하는 `NMFCameraUpdate` 객체를 생성합니다. + + @param position 새로운 카메라 위치. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithPosition:(NMFCameraPosition *)position; + +/** + 카메라의 좌표를 `target`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다. + + @param target 새로운 카메라 좌표. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target; + +/** + 카메라의 좌표를 `target`으로, 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도, 헤딩 각도 등 좌표와 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @param target 새로운 카메라 좌표. + @param zoom 새로운 카메라 줌 레벨. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollTo:(NMGLatLng *)target zoomTo:(double)zoom; + +/** + 카메라를 현재 위치에서 `delta` 포인트만큼 이동하도록 지정하는 `NMFCameraUpdate` 객체를 생성합니다. + 줌 레벨, 기울기 각도, 헤딩 각도 등 좌표 외의 다른 속성은 변하지 않습니다. + + @param delta 이동할 거리. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithScrollBy:(CGPoint)delta; + +/** + 카메라의 줌 레벨을 `1`만큼 증가하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomIn; + +/** + 카메라의 줌 레벨을 `1`만큼 감소하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomOut; + +/** + 카메라의 줌 레벨을 `zoom`으로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 헤딩 각도 등 줌 레벨 외의 다른 속성은 변하지 않습니다. + + @param zoom 새로운 카메라 줌 레벨. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithZoomTo:(double)zoom; + +/** + 카메라의 헤딩 각도를 `heading`로 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 좌표, 기울기 각도, 줌 레벨 등 헤딩 각도 외의 다른 속성은 변하지 않습니다. + + @param heading 새로운 카메라 헤딩 각도. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithHeading:(double)heading; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @param padding 카메라가 변경된 후 영역과 지도 화면 간 확보할 최소 여백. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds padding:(CGFloat)padding; + +/** + `bounds`가 화면에 온전히 보이는 좌표와 최대 줌 레벨로 카메라의 위치를 변경하는 `NMFCameraUpdate` 객체를 생성합니다. + 기울기 각도와 베어링 각도는 `0`으로 변경되며, 피봇 지점은 무시됩니다. + + @param bounds 카메라로 볼 영역. + @param paddingInsets 카메라가 변경된 후 영역과 지도 화면 간 확보할 인셋 여백. pt 단위. + @return `NMFCameraUpdate` 객체. + */ ++ (instancetype)cameraUpdateWithFitBounds:(NMGLatLngBounds *)bounds paddingInsets:(UIEdgeInsets)paddingInsets; + +@end + + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdateParams.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdateParams.h new file mode 100644 index 00000000..e03728d6 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCameraUpdateParams.h @@ -0,0 +1,106 @@ + +#import + +@class NMFCameraPosition; +@class NMFMapView; +@class NMGLatLng; + +NS_ASSUME_NONNULL_BEGIN + +/** + 카메라를 이동할 지점에 관한 다양한 정보를 나타내는 클래스. 주로 `NMFCameraUpdate`를 만들기 위한 파라미터로 사용됩니다. + `target`, `zoom`, `tilt`, `heading` 등 카메라 위치에 대한 네 가지 속성을 나타내는 것은 `NMFCameraPosition`과 유사하지만, + `NMFCameraPosition`은 하나의 절대적인 카메라 위치를 나타내는 데 반해 `NMFCameraUpdateParams`는 상대적인 변화를 줄 수 있습니다. + 이를 위해서 하나의 속성에 각각 두 종류의 메서드를 제공합니다. + + - `xxxTo:`: 속성을 절대적인 값으로 지정합니다. + - `xxxBy:`: 속성을 현재 지도의 `cameraPosition`의 상대적인 값으로 지정합니다. + + 동일한 속성에 대해 `xxxTo:` 계열의 메서드와 `xxxBy:` 계열의 메서드를 모두 호출하면 앞선 호출은 무시됩니다. + + @see `NMFCameraUpdate.cameraUpdateWithParams:` + */ +NMF_EXPORT +@interface NMFCameraUpdateParams : NSObject + +@property(nonatomic, readonly) bool isScrolled; + +/** + 기본 생성자. + */ ++ (instancetype)cameraUpdateParams; + +- (NMFCameraPosition *)cameraPositionWithMap:(NMFMapView *)mapView pivot:(CGPoint)pivot; + + +/** + 카메라의 좌표를 `target`으로 변경하도록 지정합니다. + + @param target 지정할 좌표. + */ +- (void)scrollTo:(NMGLatLng *)target; + +/** + 카메라를 현재 위치에서 `delta` pt만큼 이동하도록 지정합니다. + + @param delta 이동할 거리. pt 단위. + */ +- (void)scrollBy:(CGPoint)delta; + +/** + 카메라의 줌 레벨을 `zoom`으로 변경하도록 지정합니다. + + @param zoom 지정할 줌 레벨. + */ +- (void)zoomTo:(double)zoom; + +/** + 카메라의 즘 레벨을 `delta`만큼 변경하도록 지정합니다. 양수로 지정할 경우 확대, 음수로 지정할 경우 축소됩니다. + + @param delta 줌 레벨의 변화량. + */ +- (void)zoomBy:(double)delta; + +/** + 카메라의 줌 레벨을 `1`만큼 증가하도록 지정합니다. + */ +- (void)zoomIn; + +/** + 카메라의 줌 레벨을 `1`만큼 감소하도록 지정합니다. + */ +- (void)zoomOut; + +/** + 카메라의 기울기 각도를 `tilt`로 변경하도록 지정합니다. + + @param tilt 기울기 각도. 도 단위. + */ +- (void)tiltTo:(double)tilt; + +/** + 카메라의 기울기 각도를 `delta`만큼 변경하도록 지정합니다. 양수로 지정하면 지도가 기울어지고 음수로 지정하면 수직에 가까워집니다. + + @param delta 기울기 각도의 변화량. 도 단위. + */ +- (void)tiltBy:(double)delta; + +/** + 카메라의 헤딩 각도를 `heading`으로 변경하도록 지정합니다. + + @param heading 헤딩 각도. 도 단위. + */ +- (void)rotateTo:(double)heading; + +/** + 카메라의 헤딩 각도를 `delta`만큼 변경하도록 지정합니다. + + @param delta 헤딩 각도의 변화량. 도 단위. + */ +- (void)rotateBy:(double)delta; + +@end + + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCircleOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCircleOverlay.h new file mode 100644 index 00000000..daef1a0f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCircleOverlay.h @@ -0,0 +1,83 @@ +#import +#import + +#import "NMFOverlay.h" + +@class NMGLatLng; + +/** + 기본 원 오버레이 전역 Z 인덱스 + */ +const static int NMF_CIRCLE_OVERLAY_GLOBAL_Z_INDEX = -200000; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 원을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFCircleOverlay : NMFOverlay + +/** + 중심점. 원을 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다. + */ +@property(nonatomic) NMGLatLng *center; + +/** + 반경. 미터 단위. 반경이 `0`일 경우 오버레이가 그려지지 않습니다. + + 기본값은 `1000`입니다. + */ +@property(nonatomic) double radius; + +/** + 오버레이가 차지하는 영역. + + 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다. +*/ +@property(nonatomic, readonly) NMGLatLngBounds *bounds; + +/** + 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property(nonatomic, copy) UIColor *fillColor; + +/** + 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) double outlineWidth; + +/** + 테두리의 색상. + + 기본값은 `UIColor.blackColor`입니다. +*/ +@property(nonatomic, copy) UIColor *outlineColor; + +/** + 중심점과 반경을 지정해서 원 오버레이를 생성합니다. + + @param center 중심점. + @param radius 원의 반경. 미터 단위. + @return `NMFCircleOverlay` 객체. + */ ++ (instancetype)circleOverlay:(NMGLatLng *)center radius:(double)radius; + +/** + 중심점, 반경, 색상을 지정해서 원 오버레이를 생성합니다. + + @param center 중심점. + @param radius 반경. 미터 단위. + @param fillColor 색상. + @return `NMFCircleOverlay` 객체. + */ ++ (instancetype)circleOverlay:(NMGLatLng *)center + radius:(double)radius + fillColor:(UIColor *)fillColor; +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCompassView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCompassView.h new file mode 100644 index 00000000..561aa0f7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFCompassView.h @@ -0,0 +1,28 @@ +#import + +#import "NMFFoundation.h" + +#define COMPASSVIEW_DEFAULT_SIZE 50 +#define COMPASSVIEW_DEFAULT_HEADING 0.0 +#define COMPASSVIEW_DEFAULT_TILTING 0.0 + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 나침반 컨트롤. + */ +NMF_EXPORT +@interface NMFCompassView : UIImageView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFFoundation.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFFoundation.h new file mode 100644 index 00000000..c2a02a80 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFFoundation.h @@ -0,0 +1,5 @@ +#pragma once + +#import + +#define NMF_EXPORT __attribute__((visibility ("default"))) diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGeometry.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGeometry.h new file mode 100644 index 00000000..2700012d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGeometry.h @@ -0,0 +1,149 @@ +#import +#import +#import +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** Defines the area spanned by an `NMFCoordinateBounds`. */ +typedef struct __attribute__((objc_boxable)) NMFCoordinateSpan { + /** Latitudes spanned by an `NMFCoordinateBounds`. */ + CLLocationDegrees latitudeDelta; + /** Longitudes spanned by an `NMFCoordinateBounds`. */ + CLLocationDegrees longitudeDelta; +} NMFCoordinateSpan; + +/* Defines a point on the map in Mercator projection for a specific zoom level. */ +typedef struct __attribute__((objc_boxable)) NMFMapPoint { + /** X coordinate representing a longitude in Mercator projection. */ + CGFloat x; + /** Y coordinate representing a latitide in Mercator projection. */ + CGFloat y; + /** Zoom level at which the X and Y coordinates are valid. */ + CGFloat zoomLevel; +} NMFMapPoint; + +/* Defines a 4x4 matrix. */ +typedef struct NMFMatrix4 { + double m00, m01, m02, m03; + double m10, m11, m12, m13; + double m20, m21, m22, m23; + double m30, m31, m32, m33; +} NMFMatrix4; + + +/** + Creates a new `NMFCoordinateSpan` from the given latitudinal and longitudinal + deltas. + */ +NS_INLINE NMFCoordinateSpan NMFCoordinateSpanMake(CLLocationDegrees latitudeDelta, CLLocationDegrees longitudeDelta) { + NMFCoordinateSpan span; + span.latitudeDelta = latitudeDelta; + span.longitudeDelta = longitudeDelta; + return span; +} + +/** + Creates a new `NMFMapPoint` from the given X and Y coordinates, and zoom level. + */ +NS_INLINE NMFMapPoint NMFMapPointMake(CGFloat x, CGFloat y, CGFloat zoomLevel) { + NMFMapPoint point; + point.x = x; + point.y = y; + point.zoomLevel = zoomLevel; + return point; +} + +/** + Returns `YES` if the two coordinate spans represent the same latitudinal change + and the same longitudinal change. + */ +NS_INLINE BOOL NMFCoordinateSpanEqualToCoordinateSpan(NMFCoordinateSpan span1, NMFCoordinateSpan span2) { + return (span1.latitudeDelta == span2.latitudeDelta && + span1.longitudeDelta == span2.longitudeDelta); +} + +/** An area of zero width and zero height. */ +extern NMF_EXPORT const NMFCoordinateSpan NMFCoordinateSpanZero; + +/** + A quadrilateral area as measured on a two-dimensional map projection. + `NMFCoordinateQuad` differs from `NMFCoordinateBounds` in that it allows + representation of non-axis aligned bounds and non-rectangular quadrilaterals. + The coordinates are described in counter clockwise order from top left. + */ +@interface NMFCoordinateQuad : NSObject +/** Coordinate at the top left corner. */ +@property(nonatomic) NMGLatLng *topLeft; +/** Coordinate at the bottom left corner. */ +@property(nonatomic) NMGLatLng *bottomLeft; +/** Coordinate at the bottom right corner. */ +@property(nonatomic) NMGLatLng *bottomRight; +/** Coordinate at the top right corner. */ +@property(nonatomic) NMGLatLng *topRight; + +/** + Creates a new `NMFCoordinateQuad` structure from the given top left, + bottom left, bottom right, and top right coordinates. + */ ++ (nonnull instancetype)coordinateQuadWithtopLeft:(NMGLatLng *)topLeft bottomLeftlng:(NMGLatLng *)bottomLeftlng bottomRight:(NMGLatLng *)bottomRight topRight:(NMGLatLng *)topRight; + +/** + Creates a new `NMFCoordinateQuad` structure from the given `NMFCoordinateBounds`. + The returned quad uses the bounds' northeast coordinate as the top right, and the + southwest coordinate at the bottom left. + */ +static inline NMFCoordinateQuad * _Nonnull NMFCoordinateQuadMakeFromLatLngBounds(NMGLatLngBounds *bounds); + +@end + +/** Returns the area spanned by the coordinate bounds. */ +NS_INLINE NMFCoordinateSpan NMFCoordinateBoundsGetCoordinateSpan(NMGLatLngBounds *bounds) { + return NMFCoordinateSpanMake(bounds.latSpan, bounds.lngSpan); +} + +/** + Returns a coordinate bounds with southwest and northeast coordinates that are + offset from those of the source bounds. + */ +NS_INLINE NMGLatLngBounds* NMFCoordinateBoundsOffset(NMGLatLngBounds *bounds, NMFCoordinateSpan offset) { + NMGLatLngBounds *offsetBounds = NMGLatLngBoundsMake(bounds.southWestLat, bounds.southWestLng, bounds.northEastLat, bounds.northEastLng); + offsetBounds.southWest.lat += offset.latitudeDelta; + offsetBounds.southWest.lng += offset.longitudeDelta; + offsetBounds.northEast.lat += offset.latitudeDelta; + offsetBounds.northEast.lng += offset.longitudeDelta; + return offsetBounds; +} + +/** Returns a formatted string for the given coordinate bounds. */ +NS_INLINE NSString *NMFStringFromCoordinateBounds(NMGLatLngBounds *bounds) { + return [NSString stringWithFormat:@"{ sw = {%.1f, %.1f}, ne = {%.1f, %.1f}}", + bounds.southWestLat, bounds.southWestLng, + bounds.northEastLat, bounds.northEastLng]; +} + +/** Returns a formatted string for the given coordinate quad. */ +NS_INLINE NSString *NMFStringFromCoordinateQuad(NMFCoordinateQuad *quad) { + return [NSString stringWithFormat:@"{ topleft = {%.1f, %.1f}, bottomleft = {%.1f, %.1f}}, bottomright = {%.1f, %.1f}, topright = {%.1f, %.1f}", + quad.topLeft.lat, quad.topLeft.lng, + quad.bottomLeft.lat, quad.bottomLeft.lng, + quad.bottomRight.lat, quad.bottomRight.lng, + quad.topRight.lat, quad.topRight.lng]; +} + +/** Returns radians, converted from degrees. */ +NS_INLINE CGFloat NMFRadiansFromDegrees(CLLocationDegrees degrees) { + return (CGFloat)(degrees * M_PI) / 180; +} + +/** Returns degrees, converted from radians. */ +NS_INLINE CLLocationDegrees NMFDegreesFromRadians(CGFloat radians) { + return radians * 180 / M_PI; +} + +/** Returns Mercator projection of a WGS84 coordinate at the specified zoom level. */ +extern NMF_EXPORT NMFMapPoint NMFMapPointForLatLng(NMGLatLng *coordinate, double zoomLevel); + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGroundOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGroundOverlay.h new file mode 100644 index 00000000..6575e0a0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFGroundOverlay.h @@ -0,0 +1,54 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 지상 오버레이 전역 Z 인덱스 + */ +const static int NMF_GROUND_OVERLAY_GLOBAL_Z_INDEX = -300000; + +@class NMFOverlayImage; +@class NMGLatLngBounds; + +/** + 지도에서 특정 영역을 나타내는 오버레이. 지도에 추가하기 전에 반드시 `bounds` 및 + `overlayImage`를 지정해야 합니다. + */ +NMF_EXPORT +@interface NMFGroundOverlay : NMFOverlay + +/** + 영역. 지상 오버레이가 지도에 추가되기 전에 반드시 이 속성을 지정해야 합니다. + + 기본값은 빈(`isEmpty`가 `YES`인) 영역입니다. + */ +@property(nonatomic, strong) NMGLatLngBounds *bounds; + +/** + 이미지. + */ +@property(nonatomic, strong) NMFOverlayImage *overlayImage; + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat alpha; + +/** + 영역과 이미지를 지정하여 지상 오버레이를 생성합니다. + + @param bounds 영역. + @param overlayImage 이미지. + @return `NMFGroundOverlay` 객체. + */ ++ (instancetype)groundOverlayWithBounds:(NMGLatLngBounds *)bounds image:(NMFOverlayImage *)overlayImage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevel.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevel.h new file mode 100644 index 00000000..e421cef2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevel.h @@ -0,0 +1,51 @@ +#import "NMFIndoorView.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도 층을 나타내는 불변 클래스. 하나의 실내지도 층은 다른 층과 연결될 수 있습니다. 이 클래스의 인스턴스는 + 직접 생성할 수 없고 `NMFIndoorZone`을 이용해서 가져올 수 있습니다. + + @see `NMFIndoorZone` + */ +NMF_EXPORT +@interface NMFIndoorLevel : NSObject + +/** + 층에 해당하는 실내지도 뷰. + */ +@property(nonatomic, readonly) NMFIndoorView *_Nonnull indoorView; + +/** + 층의 명칭. + */ +@property(nonatomic, readonly) NSString *_Nonnull name; + +/** + 연결된 층의 실내지도 뷰 목록. + */ +@property(nonatomic, readonly) NSArray *_Nonnull connections; + ++ (NMFIndoorLevel *_Nonnull)indoorLevel:(NSString *_Nonnull)zoneId + LevelId:(NSString *_Nonnull)levelId + Name:(NSString *_Nonnull)name + Connections:(NSArray *_Nonnull)connections; + +/** + 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰의 인덱스를 반환합니다. + + @param zoneId 구역 ID. + @return 실내지도 뷰의 인덱스. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `-1`. + */ +- (NSInteger)getConnectionIndex:(NSString *_Nonnull)zoneId; + +/** + 연결된 층 중 구역 ID가 `zoneId`인 실내지도 뷰를 반환합니다. + + @param zoneId 구역 ID. + @return 실내지도 뷰. 연결된 층 중에 ID가 `zoneId`인 층이 없을 경우 `nil`. + */ +- (NMFIndoorView *_Nullable)getConnection:(NSString *_Nonnull)zoneId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h new file mode 100644 index 00000000..2cc13f9e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorLevelPickerView.h @@ -0,0 +1,29 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorSelection; +@class NMFMapView; + +/** + 실내지도 층 피커 컨트롤. + */ +NMF_EXPORT +@interface NMFIndoorLevelPickerView : UIView +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 실내지도 층 피커의 높이에 대한 NSLayoutConstraint 객체. +*/ +@property (nonatomic, weak) IBOutlet NSLayoutConstraint *viewHeightConstraint; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorRegion.h new file mode 100644 index 00000000..38018166 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorRegion.h @@ -0,0 +1,38 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorZone; + +/** + 실내지도가 존재하는 영역을 나타내는 불변 클래스. 하나의 실내지도 영역은 서로 겹쳐진 한 개 이상의 구역으로 이루어집니다. + 이 클래스의 인스턴스는 직접 생성할 수 없습니다. + */ +NMF_EXPORT +@interface NMFIndoorRegion : NSObject + +/** + 영역에 속해 있는 구역 목록 + */ +@property(nonatomic, readonly) NSArray *zones; + ++ (NMFIndoorRegion *)indoorRegion:(NSArray *)zones; + +/** + 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역의 인덱스를 반환합니다. + + @param zoneId 구역 ID. + @return 구역의 인덱스. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `-1`. + */ +- (NSInteger)getZoneIndex:(NSString *)zoneId; + +/** + 영역에 속해 있는 구역 중 ID가 `zoneId`인 구역을 반환합니다. + + @param zoneId 구역 ID. + @return 구역 객체. 영역 내에 ID가 `zoneId`인 구역이 없을 경우 `nil`. + */ +- (NMFIndoorZone *_Nullable)getZone:(NSString *)zoneId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelection.h new file mode 100644 index 00000000..c6f41521 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelection.h @@ -0,0 +1,49 @@ +#import "NMFFoundation.h" + +@class NMFIndoorRegion; +@class NMFIndoorZone; +@class NMFIndoorLevel; + +/** + 하나의 실내지도 영역 내에서 선택된 구역 및 층을 나타내는 불변 클래스. + */ +NMF_EXPORT +@interface NMFIndoorSelection : NSObject + +/** + 선택된 구역의 영역. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorRegion *region; + +/** + 선택된 구역의 인덱스. + */ +@property(nonatomic, readonly) NSInteger zoneIndex; + +/** + 선택된 구역. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorZone *zone; + +/** + 선택된 층의 인덱스. + */ +@property(nonatomic, readonly) NSInteger levelIndex; + +/** + 선택된 층. + */ +@property(nonatomic, readonly, nonnull) NMFIndoorLevel *level; + +/** + 실내지도 영역 객체와 선택된 구역의 인덱스 및 층의 인덱스를 사용하는 생성자. + + @param region 실내지도 영역. + @param zoneIndex 선택된 구역의 인덱스. + @param levelIndex 선택된 층의 인덱스. + */ ++(instancetype _Nonnull)indoorSelectionWithRegion:(NMFIndoorRegion * _Nonnull)region + ZoneIndex:(NSInteger)zoneIndex + LevelIndex:(NSInteger)levelIndex; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h new file mode 100644 index 00000000..abec0f55 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorSelectionDelegate.h @@ -0,0 +1,21 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFIndoorSelection; + +/** + 실내 지도 구역 및 층 선택에 대한 콜백 프로토콜. + */ +@protocol NMFIndoorSelectionDelegate + +/** + 선택된 실내지도 구역 및 층이 변경될 경우 호출됩니다. + + @param indoorSelection 선택된 실내지도에 대한 `NMFIndoorSelection` 객체. 실내지도가 보이지 않을 경우 `nil`. + */ +- (void)indoorSelectionDidChanged:(NMFIndoorSelection * _Nullable)indoorSelection; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorView.h new file mode 100644 index 00000000..4852ab4e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorView.h @@ -0,0 +1,33 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도를 나타내는 불변 클래스. + */ +NMF_EXPORT +@interface NMFIndoorView : NSObject + +/** + 구역 ID. + */ +@property(nonatomic, readonly) NSString *zoneId; + +/** + 층 ID. + */ +@property(nonatomic, readonly) NSString *levelId; + +@property(nonatomic, readonly) NSUInteger hash; + +/** + 구역 ID와 층 ID로 객체를 생성하는 생성자. + + @param zoneId 구역 ID. + @param levelId 층 ID. + */ ++ (NMFIndoorView *)indoorView:(NSString *)zoneId + WithLevelId:(NSString *)levelId; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorZone.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorZone.h new file mode 100644 index 00000000..d205229b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFIndoorZone.h @@ -0,0 +1,61 @@ +#import "NMFFoundation.h" + +@class NMFIndoorLevel; + +NS_ASSUME_NONNULL_BEGIN + +/** + 하나의 실내지도 구역을 나타내는 불변 클래스. 하나의 실내지도 구역에는 한 개 이상의 층이 있습니다. 이 클래스의 + 인스턴스는 직접 생성할 수 없고 `NMFIndoorRegion`을 이용해서 가져올 수 있습니다. + + @see `NMFIndoorRegion` + */ +NMF_EXPORT +@interface NMFIndoorZone : NSObject + +/** + 구역 ID. + */ +@property(nonatomic, readonly) NSString *zoneId; + +/** + 대표 층의 인덱스. + */ +@property(nonatomic, readonly) NSInteger defaultLevelIndex; + +/** + 층 목록. + */ +@property(nonatomic, readonly) NSArray *levels; + +@property(nonatomic, readonly) NSUInteger hash; + ++ (NMFIndoorZone *)indoorZone:(NSString *)zoneId + defaultLevelIndex:(NSInteger)defaultLevelIndex + Levels:(NSArray *)levels; + +/** + 구역에 속한 층 중 ID가 `levelId`인 층의 인덱스를 반환합니다. + + @param levelId 층 ID. + @return 층의 인덱스. 구역 내에 ID가 `levelId`인 층이 없을 경우 `-1`. + */ +- (NSInteger)getLevelIndex:(NSString *)levelId; + +/** + 구역에 속한 층 중 ID가 `levelId`인 층을 반환합니다. + + @param levelId 층 ID. + @return 층 객체. 구역 내에 ID가 `levelId`인 층이 없을 경우 `nil`. + */ +- (NMFIndoorLevel *_Nullable)getLevel:(NSString *)levelId; + +/** + 대표 층을 반환합니다. + + @return 대표 층. + */ +- (NMFIndoorLevel *_Nonnull)getDefaultLevel; + +@end +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindow.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindow.h new file mode 100644 index 00000000..06e69df5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindow.h @@ -0,0 +1,139 @@ +#import +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 정보창 전역 Z 인덱스 + */ +const static int NMF_INFO_WINDOW_GLOBAL_Z_INDEX = 400000; + +@class NMGLatLng; +@class NMFMarker; +@protocol NMFOverlayImageDataSource; + +/** + 지도의 특정 지점 또는 마커 위에 열 수 있는 정보 창. 정보 창은 이미지로 특정 지점을 표시한다는 점에서 마커와 유사하나, + 다음과 같은 차이가 있습니다. + - 마커처럼 특정 좌표에 열 수 있을 뿐만 아니라 다른 마커 위에도 열 수 있습니다. + - 고정된 이미지를 지정하는 마커와 달리 이미지를 반환하는 어댑터를 지정할 수 있으므로, 객체/상황별로 다른 이미지를 + 노출할 수 있습니다. + */ +NMF_EXPORT +@interface NMFInfoWindow : NMFOverlay + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 + 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat alpha; + +/** + 정보 창에서 사용할 이미지를 제공해 줄 수 있는 이미지 데이터 소스. + */ +@property(nonatomic) id dataSource; + +/** + 정보 창이 열려 있는 마커. + */ +@property(nonatomic, nullable, readonly) NMFMarker *marker; + +/** + 좌표. 좌표는 `-openWithMapView:`를 이용해 정보 창을 여는 경우 사용되며, `-openWithMarker:`를 + 이용해 여는 경우에는 마커의 위치에 정보 창이 열리므로 무시됩니다. + + 기본값은 유효하지 않은(`isValid`가 `NO`인) 좌표입니다. + */ +@property(nonatomic) NMGLatLng *position; + +/** + 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에 + 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위, + `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property(nonatomic) CGPoint anchor; + +/** + 정보 창과 좌표 또는 마커 간의 X축 방향 여백. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger offsetX; + +/** + 정보 창과 좌표 또는 마커 간의 Y축 방향 여백. pt 단위. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger offsetY; + +/** + 정보 창을 생성합니다. + + @return `NMFInfoWindow` 객체. + */ ++ (instancetype)infoWindow; + +/** + 정보 창을 `marker`의 위에 엽니다. `-openWithMarker:marker alignType:NMFAlignType.top`과 동일합니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + */ +- (void)openWithMarker:(NMFMarker *)marker; + +/** + 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우 + 무시됩니다. `align`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + @param align 정보 창을 열 방향. + + @warning Deprecated. `openWithMarker:alignType:`을 사용하세요. + */ +- (void)openWithMarker:(NMFMarker *)marker align:(NMFAlign)align __deprecated_msg("Use `openWithMarker:alignType:` instead."); + +/** + 정보 창을 `marker`에 엽니다. 정보 창을 열 마커는 반드시 지도에 추가된 상태여야 하며, 그렇지 않을 경우 + 무시됩니다. `alignType`을 이용하면 마커의 어느 방향에 정보 창의 앵커를 위치시킬지 지정할 수 있습니다. + + 정보 창을 마커 위에 열기 전에는 반드시 `dataSource`를 지정해야 합니다. + + @param marker 정보 창을 열 마커. + @param alignType 정보 창을 열 방향. + + @see `NMFAlignType` + */ +- (void)openWithMarker:(NMFMarker *)marker alignType:(NMFAlignType *)alignType; + +/** + 정보 창을 `position` 지점에 엽니다. + + 정보 창을 특정 지점에 열기 전에는 반드시 `position`과 `dataSource`를 지정해야 합니다. + + @param mapView 정보 창을 열 지도 객체. + */ +- (void)openWithMapView:(NMFMapView *)mapView; + +/** + 정보 창을 닫습니다. 정보 창이 열려 있지 않은 경우 무시됩니다. + */ +- (void)close; + +/** + 이미지를 다시 그립니다. + */ +- (void)invalidate; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h new file mode 100644 index 00000000..e26a1a21 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFInfoWindowDefaultTextSource.h @@ -0,0 +1,20 @@ +#import "NMFOverlayImage.h" + +#import + +#import "NMFFoundation.h" + +@protocol NMFOverlayImageDataSource; + +NS_ASSUME_NONNULL_BEGIN + +NMF_EXPORT +@interface NMFInfoWindowDefaultTextSource : NSObject + ++ (instancetype)dataSource; + +@property(nonatomic, readwrite) NSString *title; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationButton.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationButton.h new file mode 100644 index 00000000..8ef8d7b2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationButton.h @@ -0,0 +1,23 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 현위치 버튼 컨트롤. + */ +NMF_EXPORT +@interface NMFLocationButton : UIButton +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationManager.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationManager.h new file mode 100644 index 00000000..1f937fe3 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationManager.h @@ -0,0 +1,52 @@ +#import + +#import "NMFFoundation.h" + +@class NMGLatLng; +@protocol NMFLocationManagerDelegate; + +NMF_EXPORT +@interface NMFLocationManager : NSObject + +@property (nonatomic, getter=isUpdatingLocation) BOOL updatingLocation; +@property (nonatomic, getter=isUpdatingHeading) BOOL updatingHeading; + ++ (NMFLocationManager *)sharedInstance; + +- (void)addDelegate:(id)delegate; +- (void)removeDelegate:(id)delegate; + +- (CLAuthorizationStatus)locationUpdateAuthorization; + +- (void)startUpdatingLocation; +- (void)stopUpdatingLocation; + +- (void)startUpdatingHeading; +- (void)stopUpdatingHeading; + +- (NMGLatLng *)currentLatLng; + +@end + +@protocol NMFLocationManagerDelegate + +@optional + +// Responding to Location Events +- (void)locationManager:(NMFLocationManager *)locationManager didUpdateLocations:(NSArray *)locations; +- (void)locationManager:(NMFLocationManager *)locationManager didFailWithError:(NSError *)error; + +// Responding to Heading Events +- (void)locationManager:(NMFLocationManager *)locationManager didUpdateHeading:(CLHeading *)newHeading; +// Authorization Status Change +- (void)locationManager:(NMFLocationManager *)locationManager didChangeAuthStatus:(CLAuthorizationStatus)status; + +- (void)locationManagerDidStartLocationUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStartHeadingUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerBackgroundLocationUpdatesDidTimeout:(NMFLocationManager *)locationManager; +- (void)locationManagerBackgroundLocationUpdatesDidAutomaticallyPause:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStopLocationUpdates:(NMFLocationManager *)locationManager; +- (void)locationManagerDidStopHeadingUpdates:(NMFLocationManager *)locationManager; + + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationOverlay.h new file mode 100644 index 00000000..9ca3dee9 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFLocationOverlay.h @@ -0,0 +1,142 @@ +#import +#import +#import + +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + + +/** + 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다. + */ +const static int NMF_LOCATION_OVERLAY_SIZE_AUTO = 0; + +/** + 위치 오버레이 기본 색상. + */ +extern UIColor *const NMF_LOCATION_OVERLAY_DEFAULT_COLOR; + +/** + 기본 위치 오버레이 Z 인덱스 + */ +const static int NMF_LOCATION_OVERLAY_GLOBAL_Z_INDEX = 300000; + +@class NMGLatLng; +@class NMFOverlayImage; + +/** + 사용자의 현재 위치를 나타내는 오버레이. 이 오버레이는 지도에 단 하나만 존재하며, 인스턴스를 직접 생성할 수 없고 + `NMFMapView.locationOverlay`를 이용해서 가져올 수 있습니다. + 위치 오버레이는 주 아이콘과 보조 아이콘, 원으로 구성됩니다. + - 주 아이콘: 반드시 필요합니다. 이벤트를 받을 수 있습니다. + - 보조 아이콘: 생략할 수 있습니다. 주 아이콘보다 약간 아래에 그려집니다. 이벤트를 받을 수 없습니다. + - 원: 생략할 수 있습니다. 강조 효과를 위해 사용되며, 보조 아이콘 아래에 그려집니다. 이벤트를 받을 수 없습니다. + */ +NMF_EXPORT +@interface NMFLocationOverlay : NMFOverlay + +/** + 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat iconWidth; + +/** + 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat iconHeight; + +/** + 보조 아이콘의 너비. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat subIconWidth; + +/** + 보조 이미지의 높이. pt 단위. `NMF_LOCATION_OVERLAY_SIZE_AUTO`일 경우 이미지의 눂이를 따릅니다. + + 기본값은 `NMF_LOCATION_OVERLAY_SIZE_AUTO`입니다. + */ +@property(nonatomic) CGFloat subIconHeight; + +/** + 오버레이의 좌표. + */ +@property(nonatomic, copy) NMGLatLng *location; + +/** + 방위. 도 단위. 방위가 북쪽일 경우 `0`도이며, 시계 방향으로 값이 증가합니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat heading; +/** + 아이콘. + */ +@property(nonatomic, strong) NMFOverlayImage *icon; +/** + 보조 아이콘. + */ +@property(nonatomic, strong, nullable) NMFOverlayImage *subIcon; + +/** + 아이콘의 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 + 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 + 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 0.5)`입니다. + */ +@property(nonatomic) CGPoint anchor; + +/** + 보조 아이콘의 앵커. 앵커는 보조 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 + 오버레이의 좌표에 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 + 이미지의 왼쪽 위, `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property(nonatomic) CGPoint subAnchor; + +/** + 원의 색상. + + 기본값은 `NMF_LOCATION_OVERLAY_DEFAULT_COLOR`입니다. + */ +@property(nonatomic, strong) UIColor *circleColor; + +/** + 원의 테두리 색상. + + 기본값은 `UIColor.clearColor`입니다. + */ +@property(nonatomic, strong) UIColor *circleOutlineColor; + +/** + 원의 외곽선 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat circleOutlineWidth; + +/** + 원의 반경. pt 단위. `0`일 경우 원이 그려지지 않습니다. + + 기본값은 `18`입니다. + */ +@property(nonatomic) CGFloat circleRadius; + +/** + 유효한 현 위치의 기본 아이콘 이미지를 반환합니다. + + @return `NMFOverlayImage` 객체. + */ ++ (NMFOverlayImage *)defaultIconImage; +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h new file mode 100644 index 00000000..e65af89e --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView+IBAdditions.h @@ -0,0 +1,47 @@ +#import + +@class NMFMapView; + +NS_ASSUME_NONNULL_BEGIN + +@interface NMFMapView (IBAdditions) + +// Core properties that can be manipulated in the Attributes inspector in +// Interface Builder. These redeclarations merely add the IBInspectable keyword. +// They appear here to ensure that they appear above the convenience properties; +// inspectables declared in NMFMapView.h are always sorted before those in +// NMFMapView+IBAdditions.h, due to ASCII sort order. + +#if TARGET_INTERFACE_BUILDER + +// HACK: We want this property to look like a URL bar in the Attributes +// inspector, but just calling it styleURL would violate Cocoa naming +// conventions and conflict with the existing NSURL property. Fortunately, IB +// strips out the two underscores for display. +@property (nonatomic, nullable) IBInspectable NSString *styleURL__; + +#endif // TARGET_INTERFACE_BUILDER + +// Convenience properties related to the initial viewport. These properties +// are not meant to be used outside of Interface Builder. latitude and longitude +// are backed by properties of type CLLocationDegrees, but these declarations +// must use the type double because Interface Builder is unaware that +// CLLocationDegrees is a typedef for double. + +@property (nonatomic) IBInspectable double latitude; +@property (nonatomic) IBInspectable double longitude; +@property (nonatomic) IBInspectable double zoomLevel; +@property (nonatomic) IBInspectable double pitch; + +// Renamed properties. Interface Builder derives the display name of each +// inspectable from the runtime name, but runtime names don’t always make sense +// in UI. + +@property (nonatomic) IBInspectable BOOL allowsZooming; +@property (nonatomic) IBInspectable BOOL allowsScrolling; +@property (nonatomic) IBInspectable BOOL allowsRotating; +@property (nonatomic) IBInspectable BOOL allowsTilting; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView.h new file mode 100644 index 00000000..117b0439 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapView.h @@ -0,0 +1,647 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFMyPositionMode.h" +#import "NMFFoundation.h" +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFLocationOverlay; +@class NMFCameraPosition; +@class NMFCameraUpdate; +@class NMFProjection; +@class NMFIndoorView; + +@protocol NMFMapViewDelegate; +@protocol NMFMapViewTouchDelegate; +@protocol NMFMapViewCameraDelegate; +@protocol NMFMapViewOptionDelegate; +@protocol NMFIndoorSelectionDelegate; +@protocol NMFPickable; + +/** + 기본 밝은 배경색. + */ +extern NMF_EXPORT UIColor *const NMFDefaultBackgroundLightColor; + +/** + 기본 어두운 배경색. + */ +extern NMF_EXPORT UIColor *const NMFDefaultBackgroundDarkColor; + +/** + 기본 밝은 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다. + + 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundLightImage`를 사용하세요. + */ +extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundLightImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundLightImage instead"))); + +/** + 기본 어두운 배경 이미지. 지도 로딩 전에는 `nil`일 수 있습니다. + + 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView.defaultBackgroundDarkImage`를 사용하세요. + */ +extern NMF_EXPORT UIImage * _Nullable NMFDefaultBackgroundDarkImage __attribute__((deprecated("Use NMFMapView.defaultBackgroundDarkImage instead"))); + +/** + 건물 레이어 그룹. 기본적으로 활성화됩니다. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BUILDING; + +/** + 대중교통 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRANSIT; + +/** + 자전거도로 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_BICYCLE; + +/** + 실시간 교통정보 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_TRAFFIC; + +/** + 지적편집도 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_CADASTRAL; + +/** + 등산로 레이어 그룹. + @see `NMFMapView.setLayerGroup(:isEnabled:)` + */ +extern NMF_EXPORT NSString *const NMF_LAYER_GROUP_MOUNTAIN; + +/** + 지도 유형을 나타내는 열거형. + @see `NMFMapView.mapType` + */ +typedef NS_ENUM(NSInteger, NMFMapType) { + /** 일반 지도. */ + NMFMapTypeBasic = 0, + /** 내비게이션 지도. */ + NMFMapTypeNavi, + /** 위성 지도. */ + NMFMapTypeSatellite, + /** 위성 지도(겹쳐보기). */ + NMFMapTypeHybrid, + /** 지형도. */ + NMFMapTypeTerrain, + /** 없음. 지도는 나타나지 않고 오버레이만이 나타납니다. */ + NMFMapTypeNone, + /** 내비게이션용 위성 지도(겹쳐보기). */ + NMFMapTypeNaviHybrid +}; + +/** + 지도 뷰 클래스. + */ +NMF_EXPORT IB_DESIGNABLE +@interface NMFMapView : UIView + +/** + 기본 밝은 배경 이미지. + */ +@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundLightImage; + +/** + 기본 어두운 배경 이미지. + */ +@property (class, nonatomic, readonly, nullable) UIImage *defaultBackgroundDarkImage; + +/** + 지도 인증 요청. 네트워크 오류 등의 이유로 인증을 재시도할 때 호출합니다. + @see `NMFAuthManager` + */ +- (void)authorize; + +#pragma mark Creating Instances + +/** + 프레임 크기로 지도 뷰의 인스턴스를 생성합니다. + + @param frame 뷰의 프레임. + @return `NMFMapView` 인스턴스. + */ +- (instancetype)initWithFrame:(CGRect)frame; + +#pragma mark Accessing the Delegate + +/** + `NMFMapView`의 위임자. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요. + + 만약 `delegate`와 `touchDelegate`가 모두 지정되면 `delegate`는 무시되고 `touchDelegate`만이 동작합니다. + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use touchDelegate, addCameraDelegate/removeCameraDelegate or addOptionDelegate/removeOptionDelegate"))); + +/** + 지도 터치에 대한 위임자. 지도 탭, 심벌 탭 등 지도와 관련된 터치 이벤트가 전달됩니다. + */ +@property(nonatomic, weak, nullable) IBOutlet id touchDelegate; + +/** + 카메라의 움직임에 대한 위임자를 등록합니다. + + @param delegate `NMFMapViewCameraDelegate` 객체. + */ +- (void)addCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addCameraDelegate(delegate:)); + +/** + 카메라의 움직임에 대한 위임자를 해제합니다. + + @param delegate `NMFMapViewCameraDelegate` 객체. + */ +- (void)removeCameraDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeCameraDelegate(delegate:)); + +/** + 지도 옵션 변경에 대한 위임자를 등록합니다. + + @param delegate `NMFMapViewOptionDelegate` 객체. + */ +- (void)addOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addOptionDelegate(delegate:)); + +/** + 지도 옵션 변경에 대한 위임자를 해제합니다. + + @param delegate `NMFMapViewOptionDelegate` 객체. + */ +- (void)removeOptionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeOptionDelegate(delegate:)); + +#pragma mark Configuring the Map’s Appearance + +/** + 라이트 모드를 활성화할지 여부를 지정합니다. 라이트 모드가 활성화되면 지도의 로딩이 빨라지고 메모리 소모가 + 감소합니다. 그러나 다음과 같은 제약이 생깁니다. +
    +
  • 지도의 전반적인 화질이 하락합니다.
  • +
  • 카메라가 회전하거나 기울어지면 지도 심벌도 함께 회전하거나 기울어집니다.
  • +
  • 줌 레벨이 커지거나 작아지면 지도 심벌도 일정 정도 함께 커지거나 작아집니다.
  • +
  • `mapType` 지도 유형을 사용할 수 없습니다.
  • +
  • `setLayerGroup:isEnabled:`, `getLayerGroupEnabled:`, `indoorMapEnabled`, `nightModeEnabled`, `lightness`, `buildingHeight`, `symbolScale`, `symbolPerspectiveRatio`가 동작하지 않습니다.
  • +
  • `NMFMapViewTouchDelegate.mapView:didTapSymbol:`이 호출되지 않습니다.
  • +
  • `NMFMarker.isHideCollidedSymbols`가 동작하지 않습니다.
  • +
+ 기본값은 `NO`입니다. + */ +@property(nonatomic) BOOL liteModeEnabled; + +/** + 지도의 배경색. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다. + */ +@property (nonatomic) UIColor *backgroundColor; + +/** + 지도의 배경 이미지. 배경은 해당 지역의 지도 데이터가 없거나 로딩 중일 때 나타납니다. + */ +@property (nonatomic, nullable) UIImage *backgroundImage; + +/** + 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다. + 이 속성을 변경하여 패딩을 지정하면 카메라의 좌표가 변경됩니다. 즉, `setContentInset:contentInset keepCamera:NO`와 동일합니다. +*/ +@property (nonatomic, assign) UIEdgeInsets contentInset; + +/** + 지도의 패딩. 패딩에 해당하는 부분은 지도의 콘텐츠 영역에서 제외됩니다. + + `keepCamera`에 따라 카메라의 좌표 또는 지도의 영역이 유지됩니다. + - `YES`인 경우: 카메라의 좌표를 유지하며 콘텐츠 영역을 변경합니다. 따라서 화면에 나타나는 지도의 전체 영역이 변경됩니다. + 카메라에 변화가 없으므로 `NMFMapViewCameraDelegate`의 메서드가 호출되지 않습니다. + - `NO`인 경우: 화면에 나타나는 지도의 전체 영역을 유지하며 콘텐츠 영역을 변경합니다. + 카메라의 좌표는 새로운 콘텐츠 영역의 중심을 가리키도록 변경되며, `NMFMapViewCameraDelegate`의 메서드가 호출됩니다. + + @param contentInset 패딩. + @param keepCamera 카메라의 좌표를 유지할지 여부. 유지할 경우 `YES`, 그렇지 않을 경우 `NO`. +*/ +- (void)setContentInset:(UIEdgeInsets)contentInset keepCamera:(BOOL)keepCamera; + +/** + 지도 뷰의 화면상 너비. pt 단위. + */ +@property (nonatomic, readonly) double mapWidth; + +/** + 지도 뷰의 화면상 높이. pt 단위. + */ +@property (nonatomic, readonly) double mapHeight; + +/** + 지도 유형. + + 기본값은 `NMFMapTypeBasic`입니다. + */ +@property(nonatomic) NMFMapType mapType; + +/** + 지도가 어두운지 여부를 반환합니다. 야간 모드가 활성화되어 있거나 지도의 유형이 `NMFMapTypeSatellite` + 또는 `NMFMapTypeHybrid`일 경우 어두운 것으로 간주됩니다. + + @return 어두울 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (BOOL)isDark; + +/** + 레이어 그룹을 활성화할지 여부를 지정합니다. + + @param group 레이어 그룹의 이름. + @param enabled 활성화할 경우 `YES`, 그렇지 않을 경우 `NO`입니다. + */ +- (void)setLayerGroup:(NSString *)group isEnabled:(BOOL)enabled; + +/** + 레이어 그룹이 활성화되어 있는지 여부를 반환합니다. + + @param group 레이어 그룹의 이름. + @return 활성화된 경우 `YES`, 그렇지 않을 경우 `NO` + */ +- (BOOL)getLayerGroupEnabled:(NSString *)group; + +/** + 배경의 명도 계수. 값의 범위는 `-1`~`1`. + 계수가 `-1`일 경우 명도 최소치인 검정색으로, `1`일 경우 명도 최대치인 흰색으로 표시됩니다. 오버레이에는 적용되지 않습니다. + + 기본값 `0`입니다. + */ +@property(nonatomic) CGFloat lightness; + +/** + 건물의 3D 높이 배율. 값의 범위는 `0`~`1`. 배율이 `0`일 경우 지도를 기울이더라도 건물이 2D로 나타납니다. + + 기본값은 `1`입니다. + */ +@property(nonatomic) float buildingHeight; + +/** + 야간 모드를 활성화할지 여부. 야간 모드가 활성화되면 지도 스타일이 어둡게 바뀝니다. 지도 유형이 야간 + 모드를 지원하지 않으면 활성화하더라도 아무 변화가 일어나지 않습니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, getter=isNightModeEnabled) BOOL nightModeEnabled; + +/** + 이 지도의 `NMFLocationOverlay` 객체. 항상 같은 객체를 가리킵니다. + */ +@property (nonatomic, strong, readonly) NMFLocationOverlay *locationOverlay; + +/** + 지도의 로캘. + + 기본값은 시스템 로캘을 의미하는 `nil`입니다. + */ +@property (nonatomic, readwrite, nullable) NSString *locale; + + +/** + 네이버 로고의 위치를 지정하는 열거형. + @see `NMFMapView.logoAlign` + */ +typedef NS_ENUM(NSInteger, NMFLogoAlign) { + /** 지도의 좌하단. */ + NMFLogoAlignLeftBottom = 0, + /** 지도의 우하단. */ + NMFLogoAlignRightBottom, + /** 지도의 좌상단. */ + NMFLogoAlignLeftTop, + /** 지도의 우상단. */ + NMFLogoAlignRightTop +}; + +/** + 네이버 로고의 위치를 지정합니다. + + 기본값은 NMFLogoAlignLeftBottom. + */ +@property (nonatomic) NMFLogoAlign logoAlign; + +/** + 네이버 로고의 마진을 지정합니다. + */ +@property (nonatomic) UIEdgeInsets logoMargin; + +/** + 네이버 로고 클릭을 활성화할지 여부를 지정합니다. 활성화하면 네이버 로고 클릭시 범례, 법적 공지, 오픈소스 + 라이선스를 보여주는 알림창이 열립니다. + + 이 옵션을 `NO`로 지정하는 앱은 반드시 앱 내에 네이버 지도 SDK의 법적 공지 + (`-showLegalNotice`) 및 오픈소스 라이선스(`-showOpenSourceLicense`)뷰 컨트롤러를 호출하는 + 메뉴를 만들어야 합니다. + + 기본값은 `YES`입니다. + */ +@property (nonatomic) BOOL logoInteractionEnabled; + +/** + 법적 공지를 보여주는 뷰컨트롤러를 호출합니다. + */ +- (void)showLegalNotice; + +/** + 오픈소스 라이선스를 보여주는 뷰컨트롤러를 호출합니다. + */ +- (void)showOpenSourceLicense; + +/** + 지도 화면을 강제로 새로고침합니다. 실시간 교통정보 등 지도 화면에 나타나는 실시간성 데이터는 적시에 자동으로 + 새로고침되므로 이 메서드를 별도로 호출할 필요가 없습니다. + */ +- (void)forceRefresh; + +/** + 지도가 렌더링되는 속도(fps, frames per second)를 설정합니다. + + 기본값은 `60`입니다. + @see `CADisplayLink.preferredFramesPerSecond` + */ +@property (nonatomic, assign) double preferredFramesPerSecond; + + +#pragma mark Configuring How the User Interacts with the Map + +/** + 카메라 이동 애니메이션의 기본 지속 시간. 초 단위. + + 기본값은 `0.2`입니다. + */ +@property(nonatomic) NSTimeInterval animationDuration; + +/** + 줌 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화하면 지도를 더블 탭, 두 손가락 탭, 핀치해 카메라의 줌 레벨을 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isZoomGestureEnabled) BOOL zoomGestureEnabled; + +/** + 스크롤 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화하면 지도를 스와이프해 카메라의 좌표를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isScrollGestureEnabled) BOOL scrollGestureEnabled; + +/** + 로테이트 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 두 손가락으로 지도를 돌려 카메라의 베어링 각도를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isRotateGestureEnabled) BOOL rotateGestureEnabled; + +/** + 틸트 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 지도를 두 손가락으로 세로 스와이프해 카메라의 틸트 각도를 변경할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isTiltGestureEnabled) BOOL tiltGestureEnabled; + +/** + 스톱 제스처가 활성화되어 있는지 여부를 나타내는 속성. + 활성화되면 지도 애니메이션 진행 중 탭으로 지도 애니메이션을 중지할 수 있습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, getter=isStopGestureEnabled) BOOL stopGestureEnabled; + +/** + 스크롤 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.088`입니다. + */ +@property(nonatomic) CGFloat scrollFriction; + +/** + 줌 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.12375`입니다. + */ +@property(nonatomic) CGFloat zoomFriction; + +/** + 회전 제스처 마찰 계수. 값의 범위는 0~1이며, 계수가 클수록 마찰이 강해집니다. + + 기본값은 `0.19333`입니다. + */ +@property(nonatomic) CGFloat rotateFriction; + +/** + 지도 클릭 시 피킹되는 `NMFPickable`의 클릭 허용 반경. pt 단위. 사용자가 지도를 클릭했을 때, 클릭된 지점이 `NMFPickable`의 + 영역 내에 존재하지 않더라도 허용 반경 내에 있다면 해당 요소가 클릭된 것으로 간주됩니다. + + 기본값은 `2`입니다. + */ +@property(nonatomic) NSInteger pickTolerance; + + +#pragma mark Indoor + + +/** + 실내지도 활성화 여부. 활성화하면 카메라가 일정 크기 이상 확대되고 실내지도가 있는 영역에 포커스될 경우 자동으로 해당 영역의 실내지도가 나타납니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, getter=isIndoorMapEnabled) BOOL indoorMapEnabled; + +/** + 실내지도 영역의 포커스 유지 반경. pt 단위. 지정할 경우 카메라의 위치가 포커스 유지 반경을 완전히 벗어날 때까지 영역에 대한 포커스가 유지됩니다. + + 기본값은 `20`입니다. + */ +@property(nonatomic) double indoorFocusRadius; + +/** + 실내 지도에 대한 위임자를 등록합니다. + + @param delegate `NMFIndoorSelectionDelegate` 객체. + */ +- (void)addIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(addIndoorSelectionDelegate(delegate:)); + +/** + 실내 지도에 대한 위임자를 해제합니다. + + @param delegate `NMFIndoorSelectionDelegate` 객체. + */ +- (void)removeIndoorSelectionDelegate:(id _Nonnull)delegate NS_SWIFT_NAME(removeIndoorSelectionDelegate(delegate:)); + +/** + 실내지도 뷰를 나타내도록 요청합니다. 이 메서드를 호출하더라도 실내지도 뷰가 즉시 나타나는 것이 보장되지 않으며, + 요청된 실내지도 뷰를 포함하는 영역이 포커스되어야 그 뷰가 나타납니다. 단, 요청된 실내지도 뷰를 포함하는 영역이 + 이미 포커스되어 있을 경우 즉시 그 뷰가 나타납니다. + + @param indoorView 실내지도 뷰. 요청을 취소할 경우 `nil`. + */ +- (void)requestIndoorView:(NMFIndoorView * _Nullable)indoorView; + + + +#pragma mark Manipulating the Viewpoint + +/** + 지도의 최소 줌 레벨. + + 기본값은 `0`입니다. + */ +@property (nonatomic) double minZoomLevel; + +/** + 지도의 최대 줌 레벨. + + 기본값은 `20`입니다. + */ +@property (nonatomic) double maxZoomLevel; + +/** + 지도의 최대 기울기 각도. + + 기본값은 `60`입니다. + */ +@property (nonatomic) double maxTilt; + + +/** + 지도의 제한 영역. + + 기본값은 제한이 없음을 의미하는 `nil`입니다. + */ +@property (nonatomic, nullable) NMGLatLngBounds *extent; + +/** + 지도의 콘텐츠 영역 중심에 대한 카메라 위치. + */ +@property (nonatomic, copy, readonly) NMFCameraPosition *cameraPosition; + +/** + 지도의 콘텐츠 영역에 대한 `NMGLatLngBounds`. 콘텐츠 패딩이 모두 `0`이면 `coveringBounds`와 동일한 영역이, + 콘텐츠 패딩이 지정되어 있으면 `coveringBounds`에서 콘텐츠 패딩을 제외한 영역이 반환됩니다. + */ +@property (nonatomic, readonly, copy) NMGLatLngBounds *contentBounds; + +/** + 지도의 콘텐츠 영역에 대한 폴리곤 객체. 콘텐츠 패딩이 모두 `0`이면 `coveringRegion`과 동일한 폴리곤이, + 콘텐츠 패딩이 지정되어 있으면 `coveringRegion`에서 콘텐츠 패딩을 제외한 폴리곤이 반환됩니다. + */ +@property (nonatomic, copy, readonly) NMGPolygon *contentRegion; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 `NMGLatLngBounds`. + */ +@property (nonatomic, readonly, copy) NMGLatLngBounds *coveringBounds; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체 영역에 대한 폴리곤 객체. + */ +@property (nonatomic, copy, readonly) NMGPolygon *coveringRegion; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 타일 ID의 목록을 반환합니다. + + @return 타일 ID의 목록. + @see NMFTileId + */ +- (NSArray *)getCoveringTileIds; + +/** + 콘텐츠 패딩을 포함한 지도의 뷰 전체를 완전히 덮는 `zoom` 레벨 타일 ID의 목록을 반환합니다. + + @param zoom 줌 레벨. + @return 타일 ID의 목록. + @see NMFTileId + */ +- (NSArray *)getCoveringTileIdsAtZoom:(NSInteger)zoom; + +/** + 이 지도에 대한 `NMFProjection` 객체. 항상 같은 객체가 반환됩니다. + */ +@property (nonatomic, readonly) NMFProjection *projection; + +/** + 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다. + + @param cameraUpdate `NMFCameraUpdate` 객체. + */ +- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate; + +/** + 카메라를 이동합니다. 만약 지도 이동 애니메이션이 진행 중이었다면 취소되고, 진행 중인 `NMFCameraUpdate`의 취소 콜백 블록이 호출됩니다. + 카메라 이동이 완료되거나 취소되었을 경우 `completion` 블록이 호출됩니다. + + @param cameraUpdate `NMFCameraUpdate` 객체. + @param completion 카메라 이동이 완료되었을 때 호출되는 콜백 블록. 애니메이션이 있으면 완전히 끝난 후에 호출됩니다. + `isCancelled`는 카메라 이동이 완료되기 전에 다른 카메라 이동이 호출되거나 사용자가 제스처로 지도를 조작한 경우 `YES`입니다. + */ +- (void)moveCamera:(NMFCameraUpdate *)cameraUpdate completion:(nullable void (^)(bool isCancelled))completion; + +/** + 현재 진행 중인 지도 이동 애니메이션을 취소합니다. + */ +- (void)cancelTransitions; + +/** + 현재 진행 중인 지도 이동 애니메이션을 취소합니다. + + @param reason 취소의 원인. + */ +- (void)cancelTransitions:(NSInteger)reason; + +/** + 위치 추적 모드. + + `NMFMyPositionMode` 객체. + */ +@property(nonatomic) NMFMyPositionMode positionMode; + +#pragma mark Symbol + +/** + 지도를 기울일 때 적용되는 심벌의 원근 계수. 계수가 `1`일 경우 배경 지도와 동일한 비율로 멀리 있는 + 심벌은 작아지고 가까이 있는 심벌은 커지며, `0`에 가까울수록 원근 효과가 감소합니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat symbolPerspectiveRatio; + +/** + 심벌의 크기 배율. 배율이 `0.5`일 경우 절반, `2`일 경우 두 배의 크기로 표시됩니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat symbolScale; + + +#pragma mark Pickable Query + +/** + 특정 화면 좌표 주변 `tolerance` 내에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에 + 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다. + + @param point 화면 좌표. + @param tolerance point를 기준으로 한 반경. pt 단위. + @return 오버레이 및 심벌의 목록. point 주변 tolerance pt 내에 존재하는 오버레이 또는 심벌이 없을 경우 빈 목록. + */ +- (NSArray> *)pickAll:(CGPoint)point withTolerance:(NSInteger)tolerance; + +/** + 특정 화면 좌표에 나타난 모든 오버레이 및 심벌을 가져옵니다. 목록은 가장 위에 그려진 요소부터 가장 아래에 그려진 요소의 순으로 정렬됩니다. + `pickAll(point, 0)`과 동일합니다. + + @param point 화면 좌표. + @return 오버레이 또는 심벌. point에 존재하는 오버레이 또는 심벌이 없을 경우 nil. + */ +- (nullable id)pick:(CGPoint)point; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h new file mode 100644 index 00000000..eb9ab792 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewCameraDelegate.h @@ -0,0 +1,53 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; + +/** + 카메라의 움직임에 대한 콜백 프로토콜. +*/ +@protocol NMFMapViewCameraDelegate + +@optional +/** + 카메라의 움직임이 시작될 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`. + */ +- (void)mapView:(NMFMapView *)mapView cameraWillChangeByReason:(NSInteger)reason animated:(BOOL)animated; + +/** + 카메라가 움직이고 있을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView cameraIsChangingByReason:(NSInteger)reason; + +/** + 카메라의 움직임이 끝났을 때 호출되는 콜백 메서드. 해당 시점의 카메라 위치는 콜백 내에서 `NMFMapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + @param reason 움직임의 원인. + @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`. + */ +- (void)mapView:(NMFMapView *)mapView cameraDidChangeByReason:(NSInteger)reason animated:(BOOL)animated; + +/** + 카메라의 움직임이 끝나면 호출되는 콜백 메서드. 이 메서드는 다음과 같은 경우에 호출됩니다. + 카메라가 애니메이션 없이 움직일 때. 단, 사용자가 제스처로 지도를 움직이는 경우 제스처가 완전히 끝날 때까지(터치가 끝날 때까지) 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다. + 카메라 애니메이션이 완료될 때. 단, 카메라 애니메이션이 진행 중일 때 새로운 애니메이션이 발생하거나, 기존 `NMFMapView.moveCamera:completion:`의 콜백 내에서 카메라 이동이 일어날 경우 연속적인 이동으로 간주되어 이벤트가 발생하지 않습니다. + `NMFMapView.cancelTransitions()`가 호출되어 카메라 애니메이션이 명시적으로 취소될 때. + 해당 시점의 카메라 위치는 콜백 내에서 `mapView.cameraPosition`으로 얻을 수 있습니다. + + @param mapView `NMFMapView` 객체. + */ +- (void)mapViewCameraIdle:(NMFMapView *)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewDelegate.h new file mode 100644 index 00000000..60972f00 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewDelegate.h @@ -0,0 +1,83 @@ +#import + +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; +@class NMFIndoorRegion; + +/** + `NMFMapView`에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 콜백 메서드가 정의된 프로토콜. 이 프로토콜은 더이상 사용이 권장되지 않습니다. `NMFMapViewTouchDelegate`, `NMFMapViewCameraDelegate`, `NMFMapViewOptionDelegate`를 사용하세요. + */ +__attribute__((deprecated("Use NMFMapViewTouchDelegate, NMFMapViewCameraDelegate or NMFMapViewOptionDelegate"))) +@protocol NMFMapViewDelegate + +@optional + +#pragma mark Responding to Map Position Changes + +/** + 지도가 표시하는 영역이 변경될 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경될 `NMFMapView` 객체. + @param animated 애니메이션 효과가 적용돼 움직일 경우 `YES`, 그렇지 않을 경우 `NO`. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView regionWillChangeAnimated:(BOOL)animated byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경되고 있을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경되고 있는 `NMFMapView` 객체. + @param reason 움직임의 원인. + */ +- (void)mapViewRegionIsChanging:(NMFMapView *)mapView byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경되었을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경된 `NMFMapView` 객체. + @param animated 애니메이션 효과가 적용돼 움직인 경우 `YES`, 그렇지 않은 경우 `NO`. + @param reason 움직임의 원인. + */ +- (void)mapView:(NMFMapView *)mapView regionDidChangeAnimated:(BOOL)animated byReason:(NSInteger)reason; + +/** + 현재 진행 중인 지도 이동 애니메이션이 취소되었을때 호출되는 콜백 메서드. + + @param mapView 영역이 변경되고 있었던 `NMFMapView` 객체. + @param reason 취소된 원인. + */ +- (void)mapViewCameraUpdateCancel:(NMFMapView *)mapView byReason:(NSInteger)reason; + +/** + 지도가 표시하고 있는 영역이 변경된 후 진행 중인 터치 이벤트가 없을 때 호출되는 콜백 메서드. + + @param mapView 영역이 변경된 `NMFMapView` 객체. + */ +- (void)mapViewIdle:(NMFMapView *)mapView; + +#pragma mark Responding to Map TouchEvent + +/** + 사용자가 지도의 심벌을 탭하면 호출됩니다. + + @param mapView `NMFMapView` 객체. + @param symbol 탭한 지도 심벌 객체. + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewDelegate`의 `didTapMapView`가 호출됩니다. + */ +- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol; + +/** + 사용자가 지도를 탭하면 호출됩니다. + + @param point 탭한 화면 좌표. + @param latlng 탭한 위경도 좌표. + */ +- (void)didTapMapView:(CGPoint)point LatLng:(NMGLatLng*)latlng; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h new file mode 100644 index 00000000..a28bd5e0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewOptionDelegate.h @@ -0,0 +1,22 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 지도 옵션 변경에 대한 콜백 프로토콜. + */ +@protocol NMFMapViewOptionDelegate + +@optional +/** + 지도의 옵션이 변경되면 호출되는 콜백 메서드. + + @param mapView `NMFMapView` 객체. + */ +- (void)mapViewOptionChanged:(NMFMapView *)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h new file mode 100644 index 00000000..af16533d --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMapViewTouchDelegate.h @@ -0,0 +1,34 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; +@class NMFSymbol; + +/** + 지도 터치에 대한 콜백 프로토콜. +*/ +@protocol NMFMapViewTouchDelegate + +@optional + +/** + 지도 심벌이 탭되면 호출되는 콜백 메서드. + + @param mapView 지도 객체. + @param symbol 탭된 심벌. + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 이벤트가 지도로 전달되어 `mapView:didTapMap:point:`가 호출됩니다. + */ +- (BOOL)mapView:(NMFMapView *)mapView didTapSymbol:(NMFSymbol *)symbol; + +/** + 지도가 탭되면 호출되는 콜백 메서드. + + @param latlng 탭된 지점의 지도 좌표. + @param point 탭된 지점의 화면 좌표. + */ +- (void)mapView:(NMFMapView *)mapView didTapMap:(NMGLatLng*)latlng point: (CGPoint)point; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarker.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarker.h new file mode 100644 index 00000000..4b5331cf --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarker.h @@ -0,0 +1,363 @@ +#import +#import +#import + +#import "NMFOverlay.h" +#import "NMFMarkerConstants.h" +#import "NMFInfoWindow.h" + +@class NMGLatLng; +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 너비 또는 높이가 자동임을 나타내는 상수. 너비 또는 높이가 자동일 경우 아이콘 이미지의 크기에 맞춰집니다. + */ +const static int NMF_MARKER_SIZE_AUTO = 0; + +/** + 기본 마커 전역 Z 인덱스 + */ +const static int NMF_MARKER_GLOBAL_Z_INDEX = 200000; + +/** + 파란색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLUE; +/** + 회색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GRAY; +/** + 녹색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_GREEN; +/** + 하늘색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_LIGHTBLUE; +/** + 분홍색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_PINK; +/** + 빨간색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_RED; +/** + 노란색 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_YELLOW; +/** + 검은색 마커 이미지. 색상을 덧입히기에 적합합니다. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_BLACK; +/** + 기본 마커 이미지. `NMF_MARKER_IMAGE_GREEN`과 동일합니다. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_DEFAULT; + +/** + 저밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_LOW_DENSITY; +/** + 중밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_MEDIUM_DENSITY; +/** + 고밀도 클러스터 마커 이미지. + */ +extern NMF_EXPORT NMFOverlayImage *NMF_MARKER_IMAGE_CLUSTER_HIGH_DENSITY; + +/** + 기본 앵커. 가운데 아래를 가리킵니다. + + @see `NMFMarker.anchor` + */ +extern const NMF_EXPORT CGPoint NMF_MARKER_ANCHOR_DEFAULT; + +/** + 아이콘과 캡션을 이용해 지도 위의 한 지점을 표시하는 오버레이. + */ +NMF_EXPORT +@interface NMFMarker : NMFOverlay + +/** + 사용자가 임의로 지정할 수 있는 태그. 마커를 그루핑하거나 구분하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NSUInteger tag; + +/** + 아이콘. + */ +@property (nonatomic, strong) NMFOverlayImage *iconImage; + +/** + 아이콘에 덧입힐 색상. 덧입힐 색상을 지정하면 덧입힐 색상이 아이콘 이미지의 색상과 가산 혼합됩니다. 단, 덧입힐 색상의 + 알파는 무시됩니다. + + 기본값은 `UIColor.clearColor`입니다. + */ +@property (nonatomic, strong) UIColor *iconTintColor; + +/** + 아이콘의 너비. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 너비를 따릅니다. + + 기본값은 `NMF_MARKER_SIZE_AUTO`입니다. + */ +@property (nonatomic) CGFloat width; + +/** + 아이콘의 높이. pt 단위. `NMF_MARKER_SIZE_AUTO`일 경우 이미지의 높이를 따릅니다. + + 기본값은 `NMF_MARKER_SIZE_AUTO`입니다. + */ +@property (nonatomic) CGFloat height; + +/** + 아이콘에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 아이콘은 크게, 먼 아이콘은 작게 표시됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL iconPerspectiveEnabled; + +/** + 캡션에 원근 효과를 적용할지 여부. 원근 효과를 적용할 경우 가까운 캡션은 크게, 먼 캡션은 작게 표시됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL captionPerspectiveEnabled; + +/** + 마커를 평평하게 설정할지 여부. 마커가 평평할 경우 지도가 회전하거나 기울어지면 마커 이미지도 함께 회전하거나 + 기울어집니다. 단, 마커가 평평하더라도 이미지의 크기는 항상 동일하게 유지됩니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, getter=isFlat) BOOL flat; + + /** + 마커와 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 마커와 다른 마커가 겹칠 경우 다른 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 마커와 다른 마커의 캡션이 겹칠 경우 다른 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 마커가 `isHideCollidedMarkers`이 `YES`인 다른 마커와 겹치더라도 아이콘을 무조건 표시할지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isForceShowIcon; + +/** + 마커가 `isHideCollidedCaptions`이 `YES`인 다른 마커와 겹치더라도 캡션을 무조건 표시할지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isForceShowCaption; + +/** + 좌표. 마커를 지도에 추가하기 전에 반드시 이 속성에 값을 지정해야 합니다. + */ +@property (nonatomic, strong) NMGLatLng *position; + +/** + 불투명도. `0`일 경우 완전히 투명, `1`일 경우 + 완전히 불투명함을 의미합니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat alpha; + +/** + 앵커. 앵커는 아이콘 이미지에서 기준이 되는 지점을 의미합니다. 앵커로 지정된 지점이 정보 창의 좌표에 + 위치합니다. 값의 범위는 `(0, 0)`~`(1, 1)`이며, `(0, 0)`일 경우 이미지의 왼쪽 위, + `(1, 1)`일 경우 이미지의 오른쪽 아래를 의미합니다. + + 기본값은 `(0.5, 1)`입니다. + */ +@property (nonatomic) CGPoint anchor; + +/** + 아이콘의 각도. 도 단위. 각도를 지정하면 아이콘이 해당 각도만큼 시계 방향으로 회전합니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) CGFloat angle; + +/** + 캡션 텍스트. 빈 문자열일 경우 캡션이 표시되지 않습니다. + + 기본값은 빈 문자열입니다. + */ +@property (nonatomic, copy) NSString *captionText; + +/** + 캡션의 텍스트 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *captionColor; + +/** + 캡션의 외곽 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *captionHaloColor; + +/** + 캡션의 텍스트 크기. pt 단위. + + 기본값은 `12`입니다. + */ +@property(nonatomic) CGFloat captionTextSize; + +/** + 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다. + 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다. + `0`일 경우 너비를 제한하지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat captionRequestedWidth; + +/** + 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 캡션의 최소 줌 레벨보다 작을 경우 아이콘만 나타나고 + 주 캡션 및 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double captionMinZoom; + +/** + 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 캡션의 최대 줌 레벨보다 클 경우 아이콘만 나타나고 + 주 캡션 및 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double captionMaxZoom; + +/** + 보조 캡션의 텍스트. 보조 캡션은 주 캡션의 아래에 나타납니다. 빈 문자열일 경우 보조 캡션이 표시되지 않습니다. + + 기본값은 빈 문자열입니다. + */ +@property (nonatomic, copy) NSString *subCaptionText; + +/** + 보조 캡션의 텍스트 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *subCaptionColor; + +/** + 보조 캡션의 외곽 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *subCaptionHaloColor; + +/** + 보조 캡션의 텍스트 크기. pt 단위. + + 기본값은 `12`입니다. + */ +@property(nonatomic) CGFloat subCaptionTextSize; + +/** + 보조 캡션의 너비. pt 단위. 지정할 경우 한 줄의 너비가 희망 너비를 초과하는 캡션 텍스트가 자동으로 개행됩니다. + 자동 개행은 어절 단위로 이루어지므로, 하나의 어절이 길 경우 캡션의 너비가 희망 너비를 초과할 수 있습니다. + `0`일 경우 너비를 제한하지 않습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat subCaptionRequestedWidth; + +/** + 보조 캡션이 보이는 최소 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최소 줌 레벨보다 작을 경우 아이콘 및 + 주 캡션만 나타나고 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double subCaptionMinZoom; + +/** + 보조 캡션이 보이는 최대 줌 레벨. 지도의 줌 레벨이 보조 캡션의 최대 줌 레벨보다 클 경우 아이콘 및 주 + 캡션만 나타나고 보조 캡션은 나타나지 않습니다. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double subCaptionMaxZoom; + +/** + 캡션 아이콘의 정렬 방향. + + 기본값은 `NMFAlignBottom`입니다. + + @warning Deprecated. `captionAligns` 속성을 사용하세요. + */ +@property(nonatomic) NMFAlign captionAlign __deprecated_msg("Use `captionAligns` instead."); + +/** + 캡션을 아이콘의 어느 방향에 위치시킬지를 지정합니다. 캡션은 `captionAligns` 배열에 지정된 순서대로 우선적으로 + 위치합니다. 만약 캡션이 다른 마커와 겹치지 않거나 겹치더라도 해당 마커의 `isHideCollidedCaptions`가 + `NO`라면 캡션은 반드시 `captionAligns[0]`에 위치합니다. 그렇지 않을 경우 겹치지 않은 다음 + 방향에 위치하며, 어느 방향으로 위치시켜도 다른 마커와 겹칠 경우 캡션이 숨겨집니다. + + 기본값은 `NMFAlignType.bottom`입니다. + + @see `NMFAlignType` + */ +@property(nonatomic) NSArray *captionAligns; + +/** + 아이콘과 캡션 간의 여백. + + 기본값은 `0`입니다. + */ +@property(nonatomic) CGFloat captionOffset; + +/** + 마커에 열려 있는 정보 창. +*/ +@property (nonatomic, strong, nullable, readonly) NMFInfoWindow *infoWindow; + +/** + 위치를 지정하여 마커를 생성합니다. + + @param position 좌표. + @return `NMFMarker` 객체. + */ ++(instancetype)markerWithPosition:(NMGLatLng *)position; + +/** + 위치와 아이콘을 지정하여 마커를 생성합니다. + + @param position 좌표. + @param iconImage 아이콘. + @return `NMFMarker` 객체. + */ ++(instancetype)markerWithPosition:(NMGLatLng *)position iconImage:(NMFOverlayImage *)iconImage; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarkerConstants.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarkerConstants.h new file mode 100644 index 00000000..6fae1624 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMarkerConstants.h @@ -0,0 +1,3 @@ +#import + +const static NSString *INFOWINDOW_TITLE_KEY = @"NMF_MARKER_TITLE"; diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMultipartPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMultipartPath.h new file mode 100644 index 00000000..f3d0f541 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMultipartPath.h @@ -0,0 +1,131 @@ +#import +#import + +#import "NMFOverlay.h" +#import "NMFPathColor.h" + +@class NMGLineString; +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 멀티 파트 경로선 전역 Z 인덱스 + */ +const static int NMF_MULTI_PART_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000; + +/** + 경로선을 여러 파트로 나누어 각각 다른 색상을 부여할 수 있는 특수한 `NMFPath`. 다양한 색상으로 구성된 + 경로선을 나타내려면 여러 개의 `NMFPath`를 사용하는 것보다 이 클래스를 사용하는 것이 효율적입니다. + `MultipartPathOverlay`는 좌표열 파트의 목록와 색상 파트의 목록으로 구성되며, `0`번째 좌표열 파트에 + `0`번째 색상 파트의 색상이 적용됩니다. 따라서 좌표열 파트와 색상 파트의 크기가 동일해야 합니다. + */ +NMF_EXPORT +@interface NMFMultipartPath : NMFOverlay + +/** + 좌표열 파트의 목록. 목록의 크기가 `1`이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *lineParts; + +/** + 색상 파트의 목록. 목록의 크기가 `1` 이상, 각 파트의 크기가 `2` 이상이어야 합니다. + */ +@property(nonatomic, strong) NSArray *colorParts; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 테두리 두께. pt 단위. + + 기본값은 `1`입니다. + */ +@property(nonatomic) CGFloat outlineWidth; + +/** + 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는 + `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다. + + - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) double progress; + +/** + 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `25`입니다. + */ +@property(nonatomic) NSUInteger patternInterval; + +/** + 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다. + `nil`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property(nonatomic, strong, nullable) NMFOverlayImage *patternIcon; + +/** + 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 경로선과 마커가 겹칠 경우 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 좌표열 파트의 목록을 지정하여 NMFMultipartPath 객체를 생성합니다. + 각 파트의 크기는 `2`이상이어야 합니다. + + ``` + NMFMultipartPath *mPath = [NMFMultipartPath multipartPathWithCoordParts:@[ + @[NMGLatLngMake(37.20, 127.051), + NMGLatLngMake(37.21, 127.052), + NMGLatLngMake(37.22, 127.053)], + @[NMGLatLngMake(37.23, 127.054), + NMGLatLngMake(37.24, 127.055), + NMGLatLngMake(37.25, 127.056)] + ]]; + mPath.mapView = mapView; + ``` + + @param coordParts 좌표열 파트의 목록. + @return `NMFMultipartPath` 객체. + */ ++ (nullable instancetype)multipartPathWith:(NSArray *> *)coordParts; + +/** + `NMGLineString`배열을 지정하여 NMFMultipartPath 객체를 생성합니다. + 배열내 `NMGLineString`객체의 `isValid` 속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param lineParts `NMGLineString`파트의 목록. + @return `NMFMultipartPath` 객체. + */ ++ (nullable instancetype)multipartPath:(NSArray *)lineParts; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMyPositionMode.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMyPositionMode.h new file mode 100644 index 00000000..69b1c448 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFMyPositionMode.h @@ -0,0 +1,30 @@ +#import + +/** + 위치 추적 모드를 나타내는 열거형. + */ +typedef NS_ENUM(NSUInteger, NMFMyPositionMode) { + /** + 위치 추적을 사용하지 않는 모드. `NMFLocationOverlay`는 움직이지 않습니다. + */ + NMFMyPositionDisabled = 0, + + /** + 위치는 추적하지만 지도는 움직이지 않는 모드. `NMFLocationOverlay`가 사용자의 위치를 따라 움직이나 지도는 + 움직이지 않습니다. + */ + NMFMyPositionNormal = 1, + + /** + 위치를 추적하면서 카메라도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표가 사용자의 위치를 따라 + 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일 경우 모드가 `NMFMyPositionNormal`로 바뀝니다. + */ + NMFMyPositionDirection = 2, + + /** + 위치를 추적하면서 카메라의 좌표와 헤딩도 따라 움직이는 모드. `NMFLocationOverlay`와 카메라의 좌표, + 헤딩이 사용자의 위치, 사용자가 바라보고 있는 방향을 따라 움직입니다. API나 제스처를 사용해 지도를 임의로 움직일 + 경우 모드가 `NMFMyPositionNormal`로 바뀝니다. + */ + NMFMyPositionCompass = 3 +}; diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFNaverMapView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFNaverMapView.h new file mode 100644 index 00000000..7ca516e1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFNaverMapView.h @@ -0,0 +1,88 @@ +#import + +#import "NMFFoundation.h" +#import "NMFMyPositionMode.h" + +@class NMFMapView; + +@protocol NMFMapViewDelegate; + +/** + 지도의 컨트롤을 내장한 지도 뷰 클래스. + */ +NMF_EXPORT +@interface NMFNaverMapView : UIView + +/** + 지도 뷰 객체. + + @see `NMFMapView` + */ +@property(nonatomic, readonly, nonnull) NMFMapView *mapView; + +/** + 지도 뷰에 관련된 업데이트 및 비동기 작업의 결과를 알려주는 델리게이트. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `touchDelegate`, `addCameraDelegate`/`removeCameraDelegate`, `addOptionDelegate`/`removeOptionDelegate`를 사용하세요. + + @see `NMFMapViewDelegate` + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate __attribute__((deprecated("Use delegates of NMFMapView"))); + +/** + 나침반 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showCompass; + +/** + 축척 바 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showScaleBar; + +/** + 줌 컨트롤 활성화 여부. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showZoomControls; + +/** + 실내지도 층 피커 활성화 여부. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showIndoorLevelPicker; + +/** + 현 위치 버튼이 활성화되어 있는지 여부. + + 기본값은 `NO`입니다. + */ +@property(nonatomic, assign) IBInspectable BOOL showLocationButton; + +/** + 위치 추적 모드. 이 속성은 더이상 사용이 권장되지 않습니다. 대신 `NMFMapView`의 `positionMode`를 사용하세요. + + @see `NMFMyPositionMode` + */ +@property(nonatomic) NMFMyPositionMode positionMode __attribute__((deprecated("Use NMFMapView.positionMode"))); + +/** + 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다. + `takeSnapShot:YES complete:complete` 와 동일합니다. + + @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드. + */ +- (void)takeSnapShot:(void (^_Nullable)(UIImage * _Nonnull))complete; + +/** + 컨트롤을 포함한 현재 지도의 스냅숏을 촬영합니다. 스냅숏이 촬영되면 `complete` 가 호출됩니다. + + @param showControls 컨트롤 노출 여부. 노출할 경우 `YES`, 그렇지 않을 경우 `NO`. + @param complete 지도 스냅숏이 촬영되면 실행되는 블록 메서드. + */ +- (void)takeSnapshotWithShowControls:(BOOL)showControls complete:(void (^_Nullable)(UIImage * _Nonnull))complete; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflinePack.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflinePack.h new file mode 100644 index 00000000..97be8596 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflinePack.h @@ -0,0 +1,199 @@ +#import + +#import "NMFFoundation.h" +#import "NMFOfflineRegion.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + The state an offline pack is currently in. + */ +typedef NS_ENUM (NSInteger, NMFOfflinePackState) { + /** + It is unknown whether the pack is inactive, active, or complete. + + This is the initial state of a pack. The state of a pack becomes known by + the time the shared `NMFOfflineStorage` object sends the first + `NMFOfflinePackProgressChangedNotification` about the pack. For inactive + packs, you must explicitly request a progress update using the + `-[NMFOfflinePack requestProgress]` method. + + An invalid pack always has a state of `NMFOfflinePackStateInvalid`, never + `NMFOfflinePackStateUnknown`. + */ + NMFOfflinePackStateUnknown = 0, + /** + The pack is incomplete and is not currently downloading. + + This is the initial state of a pack that is created using the + `-[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]` + method, as well as after the `-[NMFOfflinePack suspend]` method is + called. + */ + NMFOfflinePackStateInactive = 1, + /** + The pack is incomplete and is currently downloading. + + This is the state of a pack after the `-[NMFOfflinePack resume]` method is + called. + */ + NMFOfflinePackStateActive = 2, + /** + The pack has downloaded to completion. + */ + NMFOfflinePackStateComplete = 3, + /** + The pack has been removed using the + `-[NMFOfflineStorage removePack:withCompletionHandler:]` method. Sending + any message to the pack will raise an exception. + */ + NMFOfflinePackStateInvalid = 4, +}; + +/** + A structure containing information about an offline pack’s current download + progress. + */ +typedef struct __attribute__((objc_boxable)) NMFOfflinePackProgress { + /** + The number of resources, including tiles, that have been completely + downloaded and are ready to use offline. + */ + uint64_t countOfResourcesCompleted; + /** + The cumulative size of the downloaded resources on disk, including tiles, + measured in bytes. + */ + uint64_t countOfBytesCompleted; + /** + The number of tiles that have been completely downloaded and are ready + to use offline. + */ + uint64_t countOfTilesCompleted; + /** + The cumulative size of the downloaded tiles on disk, measured in bytes. + */ + uint64_t countOfTileBytesCompleted; + /** + The minimum number of resources that must be downloaded in order to view + the pack’s full region without any omissions. + + At the beginning of a download, this count is a lower bound; the number of + expected resources may increase as the download progresses. + */ + uint64_t countOfResourcesExpected; + /** + The maximum number of resources that must be downloaded in order to view + the pack’s full region without any omissions. + + At the beginning of a download, when the exact number of required resources + is unknown, this field is set to `UINT64_MAX`. Thus this count is always an + upper bound. + */ + uint64_t maximumResourcesExpected; +} NMFOfflinePackProgress; + +/** + An `NMFOfflinePack` represents a collection of resources necessary for viewing + a region offline to a local database. + + To create an instance of `NMFOfflinePack`, use the + `+[NMFOfflineStorage addPackForRegion:withContext:completionHandler:]` method. + A pack created using `-[NMFOfflinePack init]` is immediately invalid. + + ### Example + ```swift + NMFOfflineStorage.shared.addPack(for: region, withContext: context) { (pack, error) in + guard let pack = pack else { + // If adding the pack fails, log an error to console. + print("Error:", error?.localizedDescription ?? "unknown error adding pack at \(#file)(\(#line)) in \(#function)") + return + } + + // Start an NMFOfflinePack download + pack.resume() + ``` + */ +NMF_EXPORT +@interface NMFOfflinePack : NSObject + +/** + The region for which the pack manages resources. + */ +@property (nonatomic, readonly) id region; + +/** + Arbitrary data stored alongside the downloaded resources. + + The context typically holds application-specific information for identifying + the pack, such as a user-selected name. + */ +@property (nonatomic, readonly) NSData *context; + +/** + The pack’s current state. + + The state of an inactive or completed pack is computed lazily and is set to + `NMFOfflinePackStateUnknown` by default. To request the pack’s status, use the + `-requestProgress` method. To get notified when the state becomes known and + when it changes, observe KVO change notifications on this pack’s `state` key + path. Alternatively, you can add an observer for + `NMFOfflinePackProgressChangedNotification`s about this pack that come from the + default notification center. + */ +@property (nonatomic, readonly) NMFOfflinePackState state; + +/** + The pack’s current progress. + + The progress of an inactive or completed pack is computed lazily, and all its + fields are set to 0 by default. To request the pack’s progress, use the + `-requestProgress` method. To get notified when the progress becomes + known and when it changes, observe KVO change notifications on this pack’s + `state` key path. Alternatively, you can add an observer for + `NMFOfflinePackProgressChangedNotification`s about this pack that come from the + default notification center. + */ +@property (nonatomic, readonly) NMFOfflinePackProgress progress; + +/** + Resumes downloading if the pack is inactive. + + When a pack resumes after being suspended, it may begin by iterating over the + already downloaded resources. As a result, the `progress` structure’s + `countOfResourcesCompleted` field may revert to 0 before rapidly returning to + the level of progress at the time the pack was suspended. + + To temporarily suspend downloading, call the `-suspend` method. + */ +- (void)resume; + +/** + Temporarily stops downloading if the pack is active. + + A pack suspends asynchronously, so some network requests may be sent after this + method is called. Regardless, the `progress` property will not be updated until + `-resume` is called. + + If the pack previously reached a higher level of progress before being + suspended, it may wait to suspend until it returns to that level. + + To resume downloading, call the `-resume` method. + */ +- (void)suspend; + +/** + Request an asynchronous update to the pack’s `state` and `progress` properties. + + The state and progress of an inactive or completed pack are computed lazily. If + you need the state or progress of a pack whose `state` property is currently + set to `NMFOfflinePackStateUnknown`, observe KVO change notifications on this + pack’s `state` key path, then call this method. Alternatively, you can add an + observer for `NMFOfflinePackProgressChangedNotification` about this pack that + come from the default notification center. + */ +- (void)requestProgress; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineRegion.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineRegion.h new file mode 100644 index 00000000..6d459234 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineRegion.h @@ -0,0 +1,23 @@ +#import + +NS_ASSUME_NONNULL_BEGIN + +/** + An object conforming to the `NMFOfflineRegion` protocol determines which + resources are required by an `NMFOfflinePack` object. + */ +@protocol NMFOfflineRegion + +/** + URL of the style whose resources are required for offline viewing. + + In addition to the JSON stylesheet, different styles may require different font + glyphs, sprite sheets, and other resources. + + The URL may be a full HTTP or HTTPS URL. + */ +@property (nonatomic, readonly) NSURL *styleURL; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineStorage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineStorage.h new file mode 100644 index 00000000..8e0bc01b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOfflineStorage.h @@ -0,0 +1,481 @@ +#import + +#import "NMFFoundation.h" +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFOfflinePack; +@class NMGLatLngBounds; +@protocol NMFOfflineRegion; +@protocol NMFOfflineStorageDelegate; + +/** + Posted by the shared `NMFOfflineStorage` object when an `NMFOfflinePack` + object’s progress changes. The progress may change due to a resource being + downloaded or because the pack discovers during the download that more + resources are required for offline viewing. This notification is posted + whenever any field in the `progress` property changes. + + The `object` is the `NMFOfflinePack` object whose progress changed. The + `NMFOfflinePackUserInfoKeyState` key and details about the pack’s current + progress in the `NMFOfflinePackUserInfoKeyProgress` key. You may also consult + progress in the `NMFOfflinePackProgressUserInfoKey` key. You may also consult + the `NMFOfflinePack.state` and `NMFOfflinePack.progress` properties, which + provide the same values. + + If you only need to observe changes in a particular pack’s progress, you can + alternatively observe KVO change notifications to the pack’s `progress` key + path. + + #### Related examples + See the + Download an offline map example to learn how to calculate the progress + of an offline download. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackProgressChangedNotification; + +/** + Posted by the shared `NMFOfflineStorage` object whenever an `NMFOfflinePack` + object encounters an error while downloading. The error may be recoverable and + may not warrant the user’s attention. For example, the pack’s implementation + may attempt to re-request failed resources based on an exponential backoff + strategy or upon the restoration of network access. + + The `object` is the `NMFOfflinePack` object that encountered the error. The + `userInfo` dictionary contains the error object in the + `NMFOfflinePackUserInfoKeyError` key. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackErrorNotification; + +/** + Posted by the shared `NMFOfflineStorage` object when the maximum number of + Mapbox-hosted tiles has been downloaded and stored on the current device. + + The `object` is the `NMFOfflinePack` object that reached the tile limit in the + course of downloading. The `userInfo` dictionary contains the tile limit in the + `NMFOfflinePackUserInfoKeyMaximumCount` key. + + Once this limit is reached, no instance of `NMFOfflinePack` can download + additional tiles from Mapbox APIs until already downloaded tiles are removed by + calling the `-[NMFOfflineStorage removePack:withCompletionHandler:]` method. + */ +extern NMF_EXPORT const NSNotificationName NMFOfflinePackMaximumTilesReachedNotification; + +/** + A key in the `userInfo` property of a notification posted by `NMFOfflinePack`. + */ +typedef NSString *NMFOfflinePackUserInfoKey NS_EXTENSIBLE_STRING_ENUM; + +/** + The key for an `NSNumber` object that indicates an offline pack’s current + state. This key is used in the `userInfo` dictionary of an + `NMFOfflinePackProgressChangedNotification` notification. Call `-integerValue` + on the object to receive the `NMFOfflinePackState`-typed state. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyState; + +/** + The key for an `NSValue` object that indicates an offline pack’s current + progress. This key is used in the `userInfo` dictionary of an + `NMFOfflinePackProgressChangedNotification` notification. Call + `-NMFOfflinePackProgressValue` on the object to receive the + `NMFOfflinePackProgress`-typed progress. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyProgress; + +/** + The key for an `NSError` object that is encountered in the course of + downloading an offline pack. This key is used in the `userInfo` dictionary of + an `NMFOfflinePackErrorNotification` notification. The error’s domain is + `NMFErrorDomain`. See `NMFErrorCode` for possible error codes. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyError; + +/** + The key for an `NSNumber` object that indicates the maximum number of + Mapbox-hosted tiles that may be downloaded and stored on the current device. + This key is used in the `userInfo` dictionary of an + `NMFOfflinePackMaximumTilesReachedNotification` notification. Call + `-unsignedLongLongValue` on the object to receive the `uint64_t`-typed tile + limit. + */ +extern NMF_EXPORT const NMFOfflinePackUserInfoKey NMFOfflinePackUserInfoKeyMaximumCount; + +extern NMF_EXPORT NSString * const NMFOfflinePackMaximumCountUserInfoKey __attribute__((deprecated("Use NMFOfflinePackUserInfoKeyMaximumCount"))); + +extern NMF_EXPORT NMFExceptionName const NMFUnsupportedRegionTypeException; + +/** + A block to be called once an offline pack has been completely created and + added. + + An application typically calls the `-resume` method on the pack inside this + completion handler to begin the download. + + @param pack Contains a pointer to the newly added pack, or `nil` if there was + an error creating or adding the pack. + @param error Contains a pointer to an error object (if any) indicating why the + pack could not be created or added. + */ +typedef void (^NMFOfflinePackAdditionCompletionHandler)(NMFOfflinePack * _Nullable pack, NSError * _Nullable error); + +/** + A block to be called once an offline pack has been completely invalidated and + removed. + + Avoid any references to the pack inside this completion handler: by the time + this completion handler is executed, the pack has become invalid, and any + messages passed to it will raise an exception. + + @param error Contains a pointer to an error object (if any) indicating why the + pack could not be invalidated or removed. + */ +typedef void (^NMFOfflinePackRemovalCompletionHandler)(NSError * _Nullable error); + +typedef void (^NMFOfflinePackCompletionHandler)(void); + +/** + A block to be called once the contents of a file are copied into the current packs. + + @param fileURL The file URL of the offline database containing the offline packs + that were copied. + @param packs An array of all known offline packs, or `nil` if there was an error + creating or adding the pack. + @param error A pointer to an error object (if any) indicating why the pack could + not be created or added. + */ +typedef void (^NMFBatchedOfflinePackAdditionCompletionHandler)(NSURL *fileURL, NSArray * _Nullable packs, NSError * _Nullable error); + +/** + The type of resource that is requested. + */ +typedef NS_ENUM(NSUInteger, NMFResourceKind) { + /** Unknown type */ + NMFResourceKindUnknown, + /** Style sheet JSON file */ + NMFResourceKindStyle, + /** TileJSON file as specified in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sources */ + NMFResourceKindSource, + /** A vector or raster tile as described in the style sheet at + https://www.mapbox.com/mapbox-gl-js/style-spec/#sources */ + NMFResourceKindTile, + /** Signed distance field glyphs for text rendering. These are the URLs specified in the style + in https://www.mapbox.com/mapbox-gl-js/style-spec/#root-glyphs */ + NMFResourceKindGlyphs, + /** Image part of a sprite sheet. It is constructed of the prefix in + https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a PNG file extension. */ + NMFResourceKindSpriteImage, + /** JSON part of a sprite sheet. It is constructed of the prefix in + https://www.mapbox.com/mapbox-gl-js/style-spec/#root-sprite and a JSON file extension. */ + NMFResourceKindSpriteJSON, + /** Image data for a georeferenced image source. **/ + NMFResourceKindImage, +}; + +/** + NMFOfflineStorage implements a singleton (shared object) that manages offline + packs and ambient caching. All of this class’s instance methods are asynchronous, + reflecting the fact that offline resources are stored in a database. The shared + object maintains a canonical collection of offline packs in its `packs` property. + + #### Related examples + See the + Download an offline map example to learn how to create and register an + offline pack for a defined region. + */ +NMF_EXPORT +@interface NMFOfflineStorage : NSObject + +/** + Returns the shared offline storage object. + */ +@property (class, nonatomic, readonly) NMFOfflineStorage *sharedOfflineStorage; + +#pragma mark - Adding Contents of File + +/** + Adds the offline packs located at the given file path to offline storage. + + The file must be a valid offline region database bundled with the application + or downloaded separately. + + The resulting packs are added or updated to the shared offline storage object’s `packs` + property, then the `completion` block is executed. + + @param filePath A string representation of the file path. The file path must be + writable as schema updates may be perfomed. + @param completion The completion handler to call once the contents of the given + file has been added to offline storage. This handler is executed asynchronously + on the main queue. + */ +- (void)addContentsOfFile:(NSString *)filePath withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion; + +/** + Adds the offline packs located at the given URL to offline storage. + + The file must be a valid offline region database bundled with the application + or downloaded separately. + + The resulting packs are added or updated to the shared offline storage object’s `packs` + property, then the `completion` block is executed. + + @param fileURL A file URL specifying the file to add. URL should be a valid system path. + The file URL must be writable as schema updates may be performed. + @param completion The completion handler to call once the contents of the given + file has been added to offline storage. This handler is executed asynchronously + on the main queue. + */ +- (void)addContentsOfURL:(NSURL *)fileURL withCompletionHandler:(nullable NMFBatchedOfflinePackAdditionCompletionHandler)completion; + +#pragma mark - Accessing the Delegate + +/** + The receiver’s delegate. + + An offline storage object sends messages to its delegate to allow it to + transform URLs before they are requested from the internet. This can be used + add or remove custom parameters, or reroute certain requests to other servers + or endpoints. + */ +@property(nonatomic, weak, nullable) IBOutlet id delegate; + +#pragma mark - Managing Offline Packs + +/** + An array of all known offline packs, in the order in which they were created. + + This property is set to `nil`, indicating that the receiver does not yet know + the existing packs, for an undefined amount of time starting from the moment + the shared offline storage object is initialized until the packs are fetched + from the database. After that point, this property is always non-nil, but it + may be empty to indicate that no packs are present. + + To detect when the shared offline storage object has finished loading its + `packs` property, observe KVO change notifications on the `packs` key path. + The initial load results in an `NSKeyValueChangeSetting` change. + */ +@property (nonatomic, strong, readonly, nullable) NSArray *packs; + +/** + Creates and registers an offline pack that downloads the resources needed to + use the given region offline. + + The resulting pack is added to the shared offline storage object’s `packs` + property, then the `completion` block is executed with that pack passed in. + + The pack has an initial state of `NMFOfflinePackStateInactive`. To begin + downloading resources, call `-[NMFOfflinePack resume]` on the pack from within + the completion handler. To monitor download progress, add an observer for + `NMFOfflinePackProgressChangedNotification`s about that pack. + + To detect when any call to this method results in a new pack, observe KVO + change notifications on the shared offline storage object’s `packs` key path. + Additions to that array result in an `NSKeyValueChangeInsertion` change. + + @param region A region to download. + @param context Arbitrary data to store alongside the downloaded resources. + @param completion The completion handler to call once the pack has been added. + This handler is executed asynchronously on the main queue. + */ +- (void)addPackForRegion:(id )region withContext:(NSData *)context completionHandler:(nullable NMFOfflinePackAdditionCompletionHandler)completion; + +/** + Unregisters the given offline pack and allows resources that are no longer + required by any remaining packs to be potentially freed. + + As soon as this method is called on a pack, the pack becomes invalid; any + attempt to send it a message will result in an exception being thrown. If an + error occurs and the pack cannot be removed, do not attempt to reuse the pack + object. Instead, if you need continued access to the pack, suspend all packs + and use the `-reloadPacks` method to obtain valid pointers to all the packs. + + To detect when any call to this method results in a pack being removed, observe + KVO change notifications on the shared offline storage object’s `packs` key + path. Removals from that array result in an `NSKeyValueChangeRemoval` change. + + When you remove an offline pack, any resources that are required by that pack, + but not other packs, become eligible for deletion from offline storage. Because + the backing store used for offline storage is also used as a general purpose + cache for map resources, such resources may not be immediately removed if the + implementation determines that they remain useful for general performance of + the map. + + @param pack The offline pack to remove. + @param completion The completion handler to call once the pack has been + removed. This handler is executed asynchronously on the main queue. + */ +- (void)removePack:(NMFOfflinePack *)pack withCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion; + +/** + Invalidates the specified offline pack. This method checks that the tiles + in the specified offline pack match those from the server. Local tiles that + do not match the latest version on the server are updated. + + This is more efficient than deleting the offline pack and downloading it + again. If the data stored locally matches that on the server, new data will + not be downloaded. + + @param pack The offline pack to be invalidated. + @param completion The completion handler to call once the pack has been + removed. This handler is executed asynchronously on the main queue. + */ +- (void)invalidatePack:(NMFOfflinePack *)pack withCompletionHandler:(void (^)(NSError * _Nullable))completion; +/** + Forcibly, asynchronously reloads the `packs` property. At some point after this + method is called, the pointer values of the `NMFOfflinePack` objects in the + `packs` property change, even if the underlying data for these packs has not + changed. If this method is called while a pack is actively downloading, the + behavior is undefined. + + You typically do not need to call this method. + + To detect when the shared offline storage object has finished reloading its + `packs` property, observe KVO change notifications on the `packs` key path. + A reload results in an `NSKeyValueChangeSetting` change. + */ +- (void)reloadPacks; + +/** + 파일 캐시 초기화 + */ +- (void)flushCacheWithCompletionHandler:(nullable NMFOfflinePackRemovalCompletionHandler)completion; + +#pragma mark Preload Database + +- (void)addPreloadTile:(NSString *)filePath + sourceId:(NSString *)sourceId + tileUrlPrefix:(NSString *)tileUrlPrefix + tileVersion:(NSString *)tileVersion + minZoom:(NSInteger)minzoom + maxZoom:(NSInteger)maxZoom + bounds:(NMGLatLngBounds *)bounds + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +- (void)removePreloadTile:(NSString *)filePath + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +- (void)setPreloadFallbackToStreaming:(BOOL)preloadFallbackToStreaming + completion:(nullable NMFOfflinePackCompletionHandler)completion; + +/** + The cumulative size, measured in bytes, of all downloaded resources on disk. + + The returned value includes all resources, including tiles, whether downloaded + as part of an offline pack or due to caching during normal use of `NMFMapView`. + */ +@property (nonatomic, readonly) unsigned long long countOfBytesCompleted; + +#pragma mark - Managing Ambient Cache + +/** + Sets the maximum ambient cache size in bytes. The default maximum cache + size is 50 MB. To disable ambient caching, set the maximum ambient cache size + to `0`. Setting the maximum ambient cache size does not impact the maximum size + of offline packs. + + While this method does not limit the space available to offline packs, + data in offline packs count towards this limit. If the maximum ambient + cache size is set to 30 MB and 20 MB of offline packs are downloaded, + there may be only 10 MB reserved for the ambient cache. + + This method should be called before the map and map style have been loaded. + + This method is potentially expensive, as the database will trim cached data + in order to prevent the ambient cache from being larger than the + specified amount. + + @param cacheSize The maximum size in bytes for the ambient cache. + @param completion The completion handler to call once the maximum ambient cache size + has been set. This handler is executed synchronously on the main queue. + */ + +- (void)setMaximumAmbientCacheSize:(NSUInteger)cacheSize withCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Invalidates the ambient cache. This method checks that the tiles in the + ambient cache match those from the server. If the local tiles do not match + those on the server, they are re-downloaded. + + This is recommended over clearing the cache or resetting the database + because valid local tiles will not be downloaded again. + + Resources shared with offline packs will not be affected by this method. + + @param completion The completion handler to call once the ambient cache has + been revalidated. This handler is executed asynchronously on the main queue. + */ + +- (void)invalidateAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Clears the ambient cache by deleting resources. This method does not + affect resources shared with offline regions. + + @param completion The completion handler to call once resources from + the ambient cache have been cleared. This handler is executed + asynchronously on the main queue. + */ + +- (void)clearAmbientCacheWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/** + Deletes the existing database, which includes both the ambient cache and offline packs, + then reinitializes it. + + You typically do not need to call this method. + + @param completion The completion handler to call once the pack has database has + been reset. This handler is executed asynchronously on the main queue. + */ + +- (void)resetDatabaseWithCompletionHandler:(void (^)(NSError *_Nullable error))completion; + +/* + Inserts the provided resource into the ambient cache. + + This method mimics the caching that would take place if the equivalent resource + were requested in the process of map rendering. Use this method to pre-warm the + cache with resources you know will be requested. + + This method is asynchronous; the data may not be immediately available for + in-progress requests, though subsequent requests should have access to the + cached data. + + @param data Response data to store for this resource. The data is expected to + be uncompressed; internally, the cache will compress data as necessary. + @param url The URL at which the data can normally be found. + @param modified The date the resource was last modified. + @param expires The date after which the resource is no longer valid. + @param eTag An HTTP entity tag. + @param mustRevalidate A Boolean value indicating whether the data is still + usable past the expiration date. + */ +- (void)preloadData:(NSData *)data forURL:(NSURL *)url modificationDate:(nullable NSDate *)modified expirationDate:(nullable NSDate *)expires eTag:(nullable NSString *)eTag mustRevalidate:(BOOL)mustRevalidate NS_SWIFT_NAME(preload(_:for:modifiedOn:expiresOn:eTag:mustRevalidate:)); + +- (void)putResourceWithUrl:(NSURL *)url data:(NSData *)data modified:(nullable NSDate *)modified expires:(nullable NSDate *)expires etag:(nullable NSString *)etag mustRevalidate:(BOOL)mustRevalidate __attribute__((deprecated("", "-preloadData:forURL:modificationDate:expirationDate:eTag:mustRevalidate:"))); + +@end + +/** + The `NMFOfflineStorageDelegate` protocol defines methods that a delegate of an + `NMFOfflineStorage` object can optionally implement to transform various types + of URLs before downloading them via the internet. + */ +@protocol NMFOfflineStorageDelegate + +/** + Sent whenever a URL needs to be transformed. + + @param storage The storage object processing the download. + @param kind The kind of URL to be transformed. + @param url The original URL to be transformed. + @return A URL that will now be downloaded. + */ +- (NSURL *)offlineStorage:(NMFOfflineStorage *)storage + URLForResourceOfKind:(NMFResourceKind)kind + withURL:(NSURL *)url; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlay.h new file mode 100644 index 00000000..d9a76a3b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlay.h @@ -0,0 +1,262 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFPickable.h" + +@class NMFMapView; +@class NMFOverlay; + +NS_ASSUME_NONNULL_BEGIN + +/** + 오버레이를 어느 방향으로 정렬할지 나타내는 열거형. + + @warning Deprecated. `NMFAlignType`을 사용하세요. + */ +typedef NS_ENUM(NSInteger, NMFAlign) { + /** + 가운데. + */ + NMFAlignCenter, + + /** + 왼쪽. + */ + NMFAlignLeft, + + /** + 오른쪽. + */ + NMFAlignRight, + + /** + 위. + */ + NMFAlignTop, + + /** + 아래. + */ + NMFAlignBottom, + + /** + 왼쪽 위. + */ + NMFAlignTopLeft, + + /** + 오른쪽 위. + */ + NMFAlignTopRight, + + /** + 오른쪽 아래. + */ + NMFAlignBottomRight, + + /** + 왼쪽 아래. + */ + NMFAlignBottomLeft +} __deprecated_msg("Use `NMFAlignType` instead."); + +/** + 오버레이를 어느 방향으로 정렬할지 나타내는 객체. + 속성 객체로만 사용해야 합니다. + */ +NMF_EXPORT +@interface NMFAlignType : NSObject + +/** + 가운데. + */ +@property(class, nonatomic, readonly) NMFAlignType *center; + +/** + 왼쪽. + */ +@property(class, nonatomic, readonly) NMFAlignType *left; + +/** + 오른쪽. + */ +@property(class, nonatomic, readonly) NMFAlignType *right; + +/** + 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *top; + +/** + 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottom; + +/** + 왼쪽 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *topLeft; + +/** + 오른쪽 위. + */ +@property(class, nonatomic, readonly) NMFAlignType *topRight; + +/** + 오른쪽 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottomRight; + +/** + 왼쪽 아래. + */ +@property(class, nonatomic, readonly) NMFAlignType *bottomLeft; + ++ (NMFAlignType *)center; ++ (NMFAlignType *)left; ++ (NMFAlignType *)right; ++ (NMFAlignType *)top; ++ (NMFAlignType *)bottom; ++ (NMFAlignType *)topLeft; ++ (NMFAlignType *)topRight; ++ (NMFAlignType *)bottomRight; ++ (NMFAlignType *)bottomLeft; + +@end + +/** + 끝 지점의 모양 + */ +typedef NS_ENUM(NSUInteger, NMFOverlayLineCap) { + /** + 평면. 끝 지점이 좌표에 딱 맞게 잘립니다. + */ + NMFOverlayLineCapButt, + /** + 원형. 끝 지점에 지름이 두께만 한 원이 그려집니다. + */ + NMFOverlayLineCapRound, + /** + 사각형. 끝 지점에 두께의 반만큼의 직사각형이 추가됩니다. + */ + NMFOverlayLineCapSquare, +}; + +/** + 연결점의 모양. + */ +typedef NS_ENUM(NSUInteger, NMFOverlayLineJoin) { + /** + 사면. 연결점에서 뾰족하게 튀어나온 부분이 잘려 나갑니다. + */ + NMFOverlayLineJoinBevel, + /** + 원형. 연결점이 둥글게 그려집니다. + */ + NMFOverlayLineJoinRound, + /** + 미터. 연결점이 뾰족하게 그려집니다. + */ + NMFOverlayLineJoinMiter, +}; + +/** + 오버레이 터치에 대한 이벤트 핸들러 블록 타입 선언. + + @return `YES`일 경우 이벤트를 소비합니다. 그렇지 않을 경우 `NMFMapView`까지 이벤트가 전달되어 `NMFMapViewTouchDelegate`의 `mapView:didTapMap:point:`가 호출됩니다. + */ +typedef BOOL (^NMFOverlayTouchHandler)(NMFOverlay * __weak); + + +/** + 지도에 오버레이되는 요소를 나타내는 최상위 클래스. 대부분의 오버레이는 `mapView`를 사용해 동적으로 지도에 추가하거나 지도로부터 제거할 수 있습니다. + */ +NMF_EXPORT +@interface NMFOverlay : NSObject + +/** + 오버레이의 고유 ID. + */ +@property(nonatomic, copy, readonly) NSString *overlayID; + +/** + 사용자 임의 속성. 필요에 따라서 부가적인 정보를 저장할 수 있습니다. + */ +@property(nonatomic, strong) NSDictionary *userInfo; + +/** + 오버레이를 추가할 지도 객체. `nil`을 지정하면 지도에서 제거됩니다. + */ +@property(nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 숨김 속성. `YES`일 경우 오버레이는 화면에 나타나지 않으며 이벤트도 받지 못합니다. + 숨김 속성은 명시적으로 지정하지 않는 한 변하지 않습니다. 즉, 오버레이가 현재 보이는 지도 영역의 바깥쪽으로 + 나가더라도 숨김 속성이 `YES`로 변하지는 않습니다. + + 기본값은 `NO`입니다. + */ +@property(nonatomic) BOOL hidden; + +/** + 보조 Z 인덱스. 전역 Z 인덱스가 동일한 여러 오버레이가 화면에서 겹쳐지면 보조 Z 인덱스가 큰 + 오버레이가 작은 오버레이를 덮습니다. + + 기본값은 `0`입니다. + */ +@property(nonatomic) NSInteger zIndex; + +/** + 전역 Z 인덱스. 여러 오버레이가 화면에서 겹쳐지면 전역 Z 인덱스가 큰 오버레이가 작은 오버레이를 + 덮습니다. 또한 값이 `0` 이상이면 오버레이가 심벌 위에, `0` 미만이면 심벌 아래에 그려집니다. + */ +@property(nonatomic) NSInteger globalZIndex; + +/** + 오버레이가 보이는 최소 줌 레벨. + + 기본값은 `NMF_MIN_ZOOM`입니다. + */ +@property(nonatomic) double minZoom; + +/** + 오버레이가 보이는 최대 줌 레벨. + + 기본값은 `NMF_MAX_ZOOM`입니다. + */ +@property(nonatomic) double maxZoom; + +/** + 지도의 줌 레벨과 오버레이의 최소 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다. + 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, setter=setMinZoomInclusive:) BOOL isMinZoomInclusive; + +/** + 지도의 줌 레벨과 오버레이의 최대 줌 레벨이 동일할 때 오버레이를 보일지 여부를 반환합니다. + 만약 `YES`이면 오버레이가 나타나고 `NO`이면 나타나지 않습니다. + + 기본값은 `YES`입니다. + */ +@property(nonatomic, setter=setMaxZoomInclusive:) BOOL isMaxZoomInclusive; + +/** + 오버레이가 터치될 경우 호출되는 콜백 블록. + */ +@property(nonatomic, nullable) NMFOverlayTouchHandler touchHandler; + +/** + 오버레이가 유효하여 지도에 추가될 수 있는지 여부를 반환합니다. `NMFOverlay`를 상속받는 오버레이들은 이 메서드를 재정의할 수 있습니다. + + 기본값은 `NO`입니다. + + @return 지도에 추가될 수 있다면 `YES`, 아니면 `NO`. + */ +- (BOOL)shouldAddOverlayToMap; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlayImage.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlayImage.h new file mode 100644 index 00000000..04347ee7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFOverlayImage.h @@ -0,0 +1,119 @@ +#import +#import "NMFFoundation.h" + +@class NMFOverlay; + +NS_ASSUME_NONNULL_BEGIN + +/** + 오버레이에서 사용하는 비트맵 이미지를 나타내는 불변 클래스. 팩토리 메서드를 이용해 + asset, `UIImage`, `NSBundle` 등으로부터 인스턴스를 생성할 수 있습니다. + */ +NMF_EXPORT +@interface NMFOverlayImage : NSObject + +/** + 재사용 식별자. + */ +@property(nonatomic, readonly, copy) NSString *reuseIdentifier; +/** + 이미지의 너비. + */ +@property(nonatomic, readonly) CGFloat imageWidth; +/** + 이미지의 높이. + */ +@property(nonatomic, readonly) CGFloat imageHeight; +/** + 이미지의 스케일. + */ +@property(nonatomic, readonly) CGFloat imageScale; +/** + 이미지. + */ +@property(nonatomic, readonly) UIImage *image; + +/** + `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param image 비트맵을 생성할 이미지 객체. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithImage:(UIImage *)image; + +/** + `UIImage`로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param image 비트맵을 생성할 이미지 객체. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithImage:(UIImage *)image reuseIdentifier:(nullable NSString *)identifier; + +/** + 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName; + +/** + 앱의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName reuseIdentifier:(nullable NSString *)identifier; + +/** + 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 이미지 객체의 `description`으로 자동 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param bundle 이미지를 찾을 번들. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle; + +/** + 지정한 bundle의 asset에 존재하는 이미지로부터 `NMFOverlayImage` 객체를 생성합니다. + `reuseIdentifier`는 `identifier`로 지정됩니다. + + @param imageName 비트맵을 생성할 이미지 asset 이름. + @param bundle 이미지를 찾을 번들. + @param identifier 재사용 식별자. + @return `NMFOverlayImage` 객체. + */ ++ (instancetype)overlayImageWithName:(NSString *)imageName inBundle:(nullable NSBundle *)bundle reuseIdentifier:(nullable NSString *)identifier; + +- (void)invalidate; + +@end + + +/** + 지도에서 사용할 수 있는 이미지 리소스를 만들기 위한 `UIView`를 반환할 수 있는 프로토콜. + 이 프로토콜을 구현할 경우, 오버레이의 상태에 따라서 `UIView`를 반환하게 하여 그 스냅숏을 + `NMFOverlay` 클래스에서 이미지 형태로 사용할 수 있습니다. + */ +@protocol NMFOverlayImageDataSource +@required + +/** + 스냅숏을 생성하게 될 `UIView`를 반환할 수 있도록 구현해야 합니다. `nil`을 반환하면 이미지를 그리지 않습니다. + + @param overlay 이미지를 사용하게 될 `NMFOverlay` 객체. + @return 스냅숏을 생성할 `UIView` 객체. + */ +- (UIView *)viewWithOverlay:(NMFOverlay *)overlay; + +@end + + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPath.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPath.h new file mode 100644 index 00000000..3d99de26 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPath.h @@ -0,0 +1,157 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +@class NMFOverlayImage; + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 경로선 전역 Z 인덱스 + */ +const static int NMF_PATH_OVERLAY_GLOBAL_Z_INDEX = -100000; + +/** + 지도에 경로선을 나타내는 오버레이. 하나의 선을 나타낸다는 측면에서는 `NMFPolylineOverlay`와 유사하나, 다음과 + 같이 경로선에 특화된 특징이 있습니다. + - 테두리와 패턴 이미지를 적용할 수 있습니다. + - 지도를 기울이더라도 두께가 일정하게 유지됩니다. + - 자기교차(self-intersection)가 일어나더라도 테두리, 패턴 이미지가 자연스럽게 나타납니다. + - 진척률을 지정할 수 있으며, 지나온/지나갈 경로에 각각 다른 색상과 테두리를을 지정할 수 있습니다. + - 점선 패턴, 끝 지점/연결점의 모양은 지정할 수 없습니다. + */ +NMF_EXPORT +@interface NMFPath : NMFOverlay + +/** + 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *color; + +/** + 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *outlineColor; + +/** + 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 + 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedColor; + +/** + 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 + 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 + 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedOutlineColor; + +/** + 두께. pt 단위. + + 기본값은 `5`입니다. + */ +@property (nonatomic) CGFloat width; + +/** + 테두리 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `1`입니다. + */ +@property (nonatomic) CGFloat outlineWidth; + +/** + 경로선 오버레이를 나타내는 `NMGLineString`객체. + 경로선 오버레이를 생성한 이후 경로선을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NMGLineString *path; + +/** + 진척률. 값의 범위는 `-1`~`1`입니다. 경로는 진척률을 기준으로 지나온 경로와 지나갈 경로로 구분됩니다. 지나온 경로에는 + `passedColor`와 `passedOutlineColor`가 사용되고 지나갈 경로에는 `color`와 `outlineColor`가 사용됩니다. + + - 진척률을 양수로 지정하면 첫 좌표부터 진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 음수로 지정하면 마지막 좌표부터 -진척률만큼 떨어진 지점까지의 선형은 지나온 경로로, 나머지는 지나갈 경로로 간주됩니다. + - 진척률을 `0`으로 지정하면 모든 선형이 지나갈 경로로 간주됩니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) double progress; + +/** + 패턴 이미지의 간격. pt 단위. `0`일 경우 패턴을 표시하지 않습니다. + + 기본값은 `25`입니다. + */ +@property (nonatomic) NSUInteger patternInterval; + +/** + 패턴 이미지. 패턴 이미지의 크기가 경로선의 두께보다 클 경우 경로선의 두께에 맞게 축소됩니다. + `nil`일 경우 패턴을 표시하지 않습니다. + */ +@property (nonatomic, strong, nullable) NMFOverlayImage *patternIcon; + +/** + 경로선과 지도 심벌이 겹칠 경우 지도 심벌을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedSymbols; + +/** + 경로선과 마커가 겹칠 경우 마커를 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedMarkers; + +/** + 경로선과 마커의 캡션이 겹칠 경우 마커의 캡션을 숨길지 여부. + + 기본값은 `NO`입니다. + */ +@property (nonatomic) BOOL isHideCollidedCaptions; + +/** + 좌표열을 지정하여 경로선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다. + + 사용 예시 + ``` + NMFLatLng *p1 = [[NMFLatLng alloc]initWithLat:37.20 lng:127.051]]; + NMFLatLng *p2 = [[NMFLatLng alloc]initWithLat:37.21 lng:127.052]]; + NMFLatLng *p3 = [[NMFLatLng alloc]initWithLat:37.22 lng:127.053]]; + NMFPath *route = [NMFPath pathWithPoints:@[p1, p2, p3]]; + route.mapView = mapView; + ``` + + @param coords 좌표열. + @return `NMFPath` 객체. + */ ++ (nullable instancetype)pathWithPoints:(NSArray *)coords; + +/** + `NMGLineString`을 지정하여 경로선 오버레이를 생성합니다. + `NMGLineString`객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param path `NMGLineString` 객체. + @return `NMFPath` 객체. + */ ++ (nullable instancetype)pathWithLineString:(NMGLineString *)path; + +@end + +NS_ASSUME_NONNULL_END + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPathColor.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPathColor.h new file mode 100644 index 00000000..ff64d78b --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPathColor.h @@ -0,0 +1,58 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + NMFPath, NMFMultipartPath의 색상을 지정하는 클래스. + */ +NMF_EXPORT +@interface NMFPathColor : NSObject + +/** + 경로선의 색상. 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 합니다. 색상의 + 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *color; + +/** + 경로선의 테두리 색상. 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *outlineColor; + +/** + 지나온 경로선의 색상. 지나온 경로선의 색상은 반투명일 수 없으며, 완전히 투명하거나 완전히 불투명해야 + 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 경우 테두리도 + 그려지지 않습니다. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedColor; + +/** + 지나온 경로선의 테두리 색상. 지나온 경로선의 테두리 색상은 반투명일 수 없으며, 완전히 투명하거나 + 완전히 불투명해야 합니다. 색상의 알파가 `0`이 아닌 경우 완전히 불투명한 것으로 간주됩니다. 색상이 투명할 + 경우 테두리도 그려지지 않습니다. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, strong) UIColor *passedOutlineColor; + ++ (instancetype)pathColorWithColor:(UIColor *)color; + ++ (instancetype)pathColorWithColor:(UIColor *)color + outlineColor:(UIColor *)outlineColor; + ++ (instancetype)pathColorWithColor:(UIColor *)color + outlineColor:(UIColor *)outlineColor + passedColor:(UIColor *)passedColor + passedOutlineColor:(UIColor *)passedOutlineColor; +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPickable.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPickable.h new file mode 100644 index 00000000..36e3d3ef --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPickable.h @@ -0,0 +1,9 @@ +#import + +#import "NMFFoundation.h" + +/** + 피킹이 가능한 지도 요소를 정의한 프로토콜. + */ +@protocol NMFPickable +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolygonOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolygonOverlay.h new file mode 100644 index 00000000..cdb0f4a9 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolygonOverlay.h @@ -0,0 +1,79 @@ +#import +#import + +#import "NMFGeometry.h" +#import "NMFOverlay.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 기본 폴리곤 오버레이 전역 Z 인덱스 + */ +const static int NMF_POLYGON_OVERLAY_GLOBAL_Z_INDEX = -200000; + +@class NMGPolygon; + +/** + 지도에 도형을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFPolygonOverlay : NMFOverlay + +/** + 폴리곤 오버레이의 모양을 결정하는 폴리곤 객체. + 폴리곤 오버레이를 생성한 이후 폴리곤을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property (nonatomic) NMGPolygon *polygon; + +/** + 면의 색상. + + 기본값은 `UIColor.whiteColor`입니다. + */ +@property (nonatomic, copy) UIColor *fillColor; + +/** + 테두리의 두께. pt 단위. `0`일 경우 테두리가 그려지지 않습니다. + + 기본값은 `0`입니다. + */ +@property (nonatomic) NSUInteger outlineWidth; + +/** + 테두리의 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property (nonatomic, copy) UIColor *outlineColor; + +/** + 폴리곤 객체와 색상을 지정하여 폴리곤 오버레이를 생성합니다. + 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polygon 폴리곤 객체. + @param fillColor 폴리곤을 채울 색상. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon fillColor:(UIColor *)fillColor; + +/** + 폴리곤 객체를 지정하여 폴리곤 오버레이를 생성합니다. + 폴리곤 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polygon 폴리곤 객체. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlay:(NMGPolygon *)polygon; + +/** + 외곽선 정점 배열을 지정하여 폴리곤 오버레이를 생성합니다. + `coords`의 크기는 `2` 이상이어야 합니다. + + @param coords `NMGLatLng` 배열. + @return `NMFPolygonOverlay` 객체. + */ ++ (nullable instancetype)polygonOverlayWith:(NSArray *)coords; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolylineOverlay.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolylineOverlay.h new file mode 100644 index 00000000..477af23f --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFPolylineOverlay.h @@ -0,0 +1,91 @@ +#import +#import + +#import "NMFOverlay.h" + +/** + 기본 폴리라인 오버레이 전역 Z 인덱스 + */ +const static int NMF_POLYLINE_OVERLAY_GLOBAL_Z_INDEX = -200000; + +@class NMGLineString; + +#define NMFDefaultLinePattern @[@2,@1]; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지도에 선을 나타내는 오버레이. + */ +NMF_EXPORT +@interface NMFPolylineOverlay : NMFOverlay + +/** + 두께. pt 단위. + + 기본값은 `2.5`입니다. + */ +@property(nonatomic) CGFloat width; + +/** + 색상. + + 기본값은 `UIColor.blackColor`입니다. + */ +@property(nonatomic, copy) UIColor *color; + +/** + 끝 지점의 모양. + + 기본값은 `NMFOverlayLineCapButt`입니다. + */ +@property(nonatomic) NMFOverlayLineCap capType; + +/** + 연결점의 모양. + + 기본값은 `NMFOverlayLineJoinMiter`입니다. + */ +@property(nonatomic) NMFOverlayLineJoin joinType; + +/** + 점선 패턴. 패턴은 pt 단위의 배열로 표현되며, 각각 `2n`번째 요소는 실선의 길이, + `2n + 1`번째 요소는 공백의 길이를 의미하며 빈 리스트를 입력할 경우 실선을 의미합니다. + */ +@property(nonatomic) NSArray *pattern; + +/** + 선 오버레이를 나타내는 `NMGLineString`객체. + 선 오버레이를 생성한 이후 폴리라인을 갱신하기 위한 목적으로 사용할 수 있습니다. + */ +@property(nonatomic) NMGLineString *line; + +/** + 좌표열을 지정하여 선 오버레이를 생성합니다. `coords`의 크기는 `2` 이상이어야 합니다. + + 사용 예시 + ``` + NMGLatLng *p1 = [[NMGLatLng alloc]initWithLat:37.20 lng:127.051]]; + NMGLatLng *p2 = [[NMGLatLng alloc]initWithLat:37.21 lng:127.052]]; + NMGLatLng *p3 = [[NMGLatLng alloc]initWithLat:37.22 lng:127.053]]; + NMFPolylineOverlay *line = [NMFPolylineOverlay polylineOverlayWithPoints:@[p1, p2, p3]]; + [mapView addOverlay:line]; + ``` + + @param coords 좌표열. + @return `NMFPolylineOverlay` 객체. + */ ++ (nullable instancetype)polylineOverlayWith:(NSArray *)coords; + +/** + 폴리라인 객체를 지정하여 선 오버레이를 생성합니다. + 폴리라인 객체의 `isValid`속성이 `NO`일 경우 `nil`을 리턴합니다. + + @param polyline 폴리라인 객체. + @return `NMFPolylineOverlay` 객체. + */ ++ (nullable instancetype)polylineOverlay:(NMGLineString *)polyline; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFProjection.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFProjection.h new file mode 100644 index 00000000..48474ea7 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFProjection.h @@ -0,0 +1,94 @@ +#import +#import + +#import "NMFFoundation.h" + +@class NMFMapView; +@class NMGLatLng; +@class NMGLatLngBounds; + +NS_ASSUME_NONNULL_BEGIN + +/** + 지리적 좌표와 화면 좌표 간의 변환을 담당하는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없고 + `NMFMapView.projection`을 이용해서 가져올 수 있습니다. + */ +NMF_EXPORT +@interface NMFProjection : NSObject + +/** + 화면 좌표를 위경도 좌표로 변환합니다. + + @param point 화면 좌표. + @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다. + */ +- (NMGLatLng *)latlngFromPoint:(CGPoint)point; + +/** + 화면 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 위경도 좌표로 변환합니다. 일반적인 상황에는 `-latlngFromPoint:point:`를 사용하세요. + + @param point 화면 좌표. + @param zoom 줌 레벨. + @param tilt 틸트 각도. + @param heading 헤딩 각도. + @param wrap 좌표를 랩핑할지 여부. + @return 위경도 좌표. `point`가 `nil`이거나 화면 좌표의 범위가 위경도 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`NMGLatLng.isValid()`가 `NO`인) 좌표가 반환됩니다. + */ +- (NMGLatLng *)latlngFromPoint:(CGPoint)point atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withWrap:(BOOL)wrap; + +/** + 위경도 좌표를 화면 좌표로 변환합니다. + + @param coord 위경도 좌표. + @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다. + */ +- (CGPoint)pointFromLatLng:(NMGLatLng *)coord; + +/** + 위경도 좌표를 카메라가 지정된 줌 레벨, 틸트/베어링 각도일 때의 화면 좌표로 변환합니다. 일반적인 상황에는 `-pointFromLatLng:coord:`를 사용하세요. + + @param coord 위경도 좌표. + @param zoom 줌 레벨. + @param tilt 틸트 각도. + @param heading 헤딩 각도. + @param shortestPath 가까운 좌표를 사용할지 여부. + @return 화면 좌표. `coord`가 `nil`이거나, 위경도 좌표의 범위가 화면 좌표로 표현할 수 있는 범위를 벗어난 경우 유효하지 않은(`CGPoint.x` 또는 `CGPoint.y`가 무한대인) 좌표가 반환됩니다. + */ +- (CGPoint)pointFromLatLng:(NMGLatLng *)coord atZoom:(double)zoom atTilt:(double)tilt atHeading:(double)heading withShortestPath:(BOOL)shortestPath; + +/** + 화면의 영역을 위경도 영역으로 변환합니다. + + @param viewBounds 화면 영역. + @return 위경도 영역. + */ +- (NMGLatLngBounds *)latlngBoundsFromViewBounds:(CGRect)viewBounds; + +/** + 위경도 영역을 화면 영역으로 변환합니다. + + @param latlngBounds 위경도 영역. + @return 화면 영역. + */ +- (CGRect)viewBoundsFromLatLngBounds:(NMGLatLngBounds *)latlngBounds; + +/** + 현재 지도의 축척을 반환합니다. + + @return 축척. 미터/픽셀 단위. + */ +- (CLLocationDistance)metersPerPixel; + +/** + 카메라의 위도가 `latitude`, 줌 레벨이 `zoom`일 때의 축적을 반환합니다. + + @param latitude 위도. + @param zoom 줌 레벨. + @return 축척. 미터/픽셀 단위. + */ +- (CLLocationDistance)metersPerPixelAtLatitude:(double)latitude zoom:(double)zoom; + +@end +NS_ASSUME_NONNULL_END + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFRendererOptions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFRendererOptions.h new file mode 100644 index 00000000..66bfedd2 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFRendererOptions.h @@ -0,0 +1,48 @@ +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +/** + 렌더러 유형. + */ +typedef NS_ENUM(NSInteger, NMFRendererType) { + /** + OpenGL ES 2.0. + */ + NMFRendererTypeOpenGL, + + /** + Metal. + */ + NMFRendererTypeMetal +}; + +/** + 지도의 렌더링 관련 옵션을 지정하는 클래스. 지도 객체가 생성된 후에는 속성을 변경해도 지도에 적용되지 않습니다. + 이 클래스는 싱글턴 클래스로, `shared`를 이용해 인스턴스를 가져올 수 있습니다. + */ +NMF_EXPORT +@interface NMFRendererOptions : NSObject + +/** + 싱글턴 인스턴스. + */ +@property (class, nonatomic, readonly, nonnull) NMFRendererOptions *shared; + +/** + 지도 렌더러 유형을 지정하거나 반환합니다. 디바이스가 `NMFRendererTypeMetal`을 지원하지 않으면 `NMFRendererTypeOpenGL`이 지정됩니다. + + 시뮬레이터에서 구동하는 경우의 기본값은 `NMFRendererTypeMetal`, 디바이스에서 구동하는 경우의 기본값은 `NMFRendererTypeOpenGL` 입니다. + */ +@property (nonatomic, assign) NMFRendererType rendererType; + +/** + 4x MSAA를 적용할지 여부를 지정하거나 반환합니다. + + 기본값은 `NO`입니다. + */ +@property (nonatomic, assign) BOOL msaa4x; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFScaleView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFScaleView.h new file mode 100644 index 00000000..a5e027e5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFScaleView.h @@ -0,0 +1,29 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 축척 바 컨트롤. + */ +NMF_EXPORT +@interface NMFScaleView : UIView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +/** + 축척 바의 너비에 대한 `NSLayoutConstraint` 객체. + */ +@property (nonatomic, weak, nullable) IBOutlet NSLayoutConstraint *scaleBarWidthConstraint; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFSymbol.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFSymbol.h new file mode 100644 index 00000000..0be65254 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFSymbol.h @@ -0,0 +1,28 @@ +#import + +#import "NMFPickable.h" + +@class NMGLatLng; + +/** + 지도 위의 아이콘, 텍스트 등 피킹 가능한 심벌을 나타내는 클래스. 이 클래스의 인스턴스는 직접 생성할 수 없으며, 두 가지 + 방법으로 얻을 수 있습니다. + - `NMFMapViewTouchDelegate`의 `-mapView:didTapSymbol:`을 이용해 사용자가 클릭한 심벌 수신 + - `NMFMapView`의 `-pickAll:withTolerance:`를 이용해 특정 화면 좌표 주변의 심벌을 쿼리 + + - SeeAlso: `NMFPickable` + */ +NMF_EXPORT +@interface NMFSymbol : NSObject + +/** + 심벌의 좌표. + */ +@property(nonatomic, readonly) NMGLatLng *position; + +/** + 캡션 문자열. 캡션이 없는 심벌일 경우 빈 문자열을 반환합니다. + */ +@property(nonatomic, readonly) NSString *caption; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileCoverHelper.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileCoverHelper.h new file mode 100644 index 00000000..fb13d5ed --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileCoverHelper.h @@ -0,0 +1,73 @@ +#import "NMFFoundation.h" + +@class NMFMapView; + +NS_ASSUME_NONNULL_BEGIN + +/** + 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트. + */ + +@protocol NMFTileCoverHelperDelegate + +/** + 타일 목록에 변경이 일어나면 호출되는 콜백 메서드. + + @param addedTileIds 화면에 추가된 타일 ID의 목록. + @param removedTileIds 화면에서 제거된 타일 ID의 목록. + */ +- (void)onTileChanged:(NSArray * _Nullable)addedTileIds RemovedTileIds:(NSArray * _Nullable)removedTileIds; + +@end + +/** + 지도 화면을 커버하는 타일의 목록을 관리하며 변경이 일어나면 이벤트를 발생시키는 유틸리티 클래스. + + `NMFTileCoverHelperDelegate`로 델리게이트를 지정하고 `mapView` 속성에 대상 지도 객체를 지정하면 지도 + 화면을 커버하는 타일의 목록이 변경될 때마다 `-onTileChanged::`가 호출됩니다. 화면에 추가된 + 타일 영역에 대해서 데이터를 가져오고 제거된 타일 영역의 데이터는 제거하는 등의 작업을 할 경우, 이 클래스를 사용하면 + 전체 타일 대신 변경사항이 있는 타일만을 처리하면 되므로 `-getCoveringTileIds`를 직접 사용하는 것에 + 비해 효율적입니다. + */ +NMF_EXPORT +@interface NMFTileCoverHelper : NSObject + +/** + 타일 목록에 변경이 일어남에 대한 이벤트를 받을 델리게이트 객체. + */ +@property(nonatomic, weak) id delegate; + +/** + 이벤트를 받아올 지도 객체. + */ +@property(nonatomic, weak) NMFMapView *mapView; + +/** + 타일 목록을 갱신할 때 `-mapViewCameraIdle:` 대신 `-mapView:cameraIsChangingByReason:`을 사용할지 여부를 설정합니다. + `-mapView:cameraIsChangingByReason:`을 사용하면 목록이 더 빠르게 갱신되지만 성능이 하락합니다. + 기본값 `NO`. + */ +@property(nonatomic) BOOL isUpdateOnChange; + +/** + 최소 줌 레벨을 지정 합니다. + 기본값 `NMF_MIN_ZOOM`. + */ +@property(nonatomic) NSInteger minZoom; + +/** + 최대 줌 레벨을 지정 합니다. + 기본값 `NMF_MAX_ZOOM`. + */ +@property(nonatomic) NSInteger maxZoom; + +/** + 지도 객체를 지정하여 타일 커버 헬퍼를 생성합니다. + + @param mapView 지도 객체. + */ ++ (instancetype)tileCoverHelperWith:(NMFMapView * _Nonnull)mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileId.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileId.h new file mode 100644 index 00000000..383e374a --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTileId.h @@ -0,0 +1,86 @@ +#import "NMFFoundation.h" + +@class NMGWebMercatorCoord; +@class NMGLatLng; +@class NMGLatLngBounds; + +/** + 타일 ID를 다루는 클래스. 타일 ID는 정수 단위의 줌 레벨을 의미하는 `z` 성분, `x`축 인덱스를 + 의미하는 `x` 성분, `y`축 인덱스를 의미하는 `y` 성분으로 구성되며, 각 성분을 조합한 + `long` 타입으로 표현됩니다. 이 클래스의 메서드를 사용해 `long` 타입의 타일 ID로부터 각 성분을 + 추출하거나 각 성분으로부터 타일 ID를 조합할 수 있습니다. + */ +NMF_EXPORT +@interface NMFTileId : NSObject + +/** + `tileId`의 `z` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `z` 성분. + */ ++ (NSUInteger)z:(long)tileId; + +/** + `tileId`의 `x` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `x` 성분. + */ ++ (NSUInteger)x:(long)tileId; + +/** + `tileId`의 `y` 성분을 반환합니다. + + @param tileId 타일 ID. + @return `y` 성분. + */ ++ (NSUInteger)y:(long)tileId; + +/** + `z`, `x`, `y` 성분을 조합한 타일 ID를 반환합니다. + + @param z `z` 성분. + @param x `x` 성분. + @param y `y` 성분. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y; + +/** + `coord` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다. + + @param z 줌 레벨. + @param coord 좌표. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z WithCoord:(NMGWebMercatorCoord * _Nonnull)coord; + +/** + `latLng` 좌표가 위치한 곳의 `z` 레벨 타일 ID를 반환합니다. + + @param z 줌 레벨. + @param latLng 좌표. + @return 타일 ID. + */ ++ (long)tileIdFromZ:(NSUInteger)z WithLatLng:(NMGLatLng * _Nonnull)latLng; + +/** + `tileId` 타일의 영역을 반환합니다. + + @param tileId 타일 ID. + @return 영역. + */ ++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromTileId:(long)tileId; + +/** + `z`, `x`, `y` 성분을 조합한 타일의 영역을 반환합니다. + + @param z `z` 성분. + @param x `x` 성분. + @param y `y` 성분. + @return 영역. + */ ++ (NMGLatLngBounds * _Nonnull)toLatLngBoundsFromZ:(NSUInteger)z X:(NSUInteger)x Y:(NSUInteger)y; + +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTypes.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTypes.h new file mode 100644 index 00000000..6b0f2d11 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFTypes.h @@ -0,0 +1,112 @@ +#import +#import + +#import "NMFFoundation.h" + +#pragma once + +NS_ASSUME_NONNULL_BEGIN + +typedef NSString *NMFExceptionName NS_TYPED_EXTENSIBLE_ENUM; + +/** + :nodoc: Generic exceptions used across multiple disparate classes. Exceptions + that are unique to a class or class-cluster should be defined in those headers. + */ +extern NMF_EXPORT NMFExceptionName const NMFAbstractClassException; + +/** Indicates an error occurred in the Mapbox SDK. */ +extern NMF_EXPORT NSErrorDomain const NMFErrorDomain; + +/** Error constants for the Mapbox SDK. */ +typedef NS_ENUM(NSInteger, NMFErrorCode) { + /** An unknown error occurred. */ + NMFErrorCodeUnknown = -1, + /** The resource could not be found. */ + NMFErrorCodeNotFound = 1, + /** The connection received an invalid server response. */ + NMFErrorCodeBadServerResponse = 2, + /** An attempt to establish a connection failed. */ + NMFErrorCodeConnectionFailed = 3, + /** A style parse error occurred while attempting to load the map. */ + NMFErrorCodeParseStyleFailed = 4, + /** An attempt to load the style failed. */ + NMFErrorCodeLoadStyleFailed = 5, + /** An error occurred while snapshotting the map. */ + NMFErrorCodeSnapshotFailed = 6, + /** Source is in use and cannot be removed */ + NMFErrorCodeSourceIsInUseCannotRemove = 7, + /** Source is in use and cannot be removed */ + NMFErrorCodeSourceIdentifierMismatch = 8, + /** An error occurred while modifying the offline storage database */ + NMFErrorCodeModifyingOfflineStorageFailed = 9, + /** Source is invalid and cannot be removed from the style (e.g. after a style change) */ + NMFErrorCodeSourceCannotBeRemovedFromStyle = 10, + /** An error occurred while rendering */ + NMFErrorCodeRenderingError = 11, +}; + +/** Options for enabling debugging features in an `NMFMapView` instance. */ +typedef NS_OPTIONS(NSUInteger, NMFMapDebugMaskOptions) { + /** Edges of tile boundaries are shown as thick, red lines to help diagnose + tile clipping issues. */ + NMFMapDebugTileBoundariesMask = 1 << 1, + /** Each tile shows its tile coordinate (x/y/z) in the upper-left corner. */ + NMFMapDebugTileInfoMask = 1 << 2, + /** Each tile shows a timestamp indicating when it was loaded. */ + NMFMapDebugTimestampsMask = 1 << 3, + /** Edges of glyphs and symbols are shown as faint, green lines to help + diagnose collision and label placement issues. */ + NMFMapDebugCollisionBoxesMask = 1 << 4, + /** Each drawing operation is replaced by a translucent fill. Overlapping + drawing operations appear more prominent to help diagnose overdrawing. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugOverdrawVisualizationMask = 1 << 5, +#if !TARGET_OS_IPHONE + /** The stencil buffer is shown instead of the color buffer. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugStencilBufferMask = 1 << 6, + /** The depth buffer is shown instead of the color buffer. + @note This option does nothing in Release builds of the SDK. */ + NMFMapDebugDepthBufferMask = 1 << 7, +#endif +}; + +/** + A structure containing information about a transition. + */ +typedef struct __attribute__((objc_boxable)) NMFTransition { + /** + The amount of time the animation should take, not including the delay. + */ + NSTimeInterval duration; + + /** + The amount of time in seconds to wait before beginning the animation. + */ + NSTimeInterval delay; +} NMFTransition; + +NS_INLINE NSString *NMFStringFromNMFTransition(NMFTransition transition) { + return [NSString stringWithFormat:@"transition { duration: %f, delay: %f }", transition.duration, transition.delay]; +} + +/** + Creates a new `NMFTransition` from the given duration and delay. + + @param duration The amount of time the animation should take, not including + the delay. + @param delay The amount of time in seconds to wait before beginning the + animation. + + @return Returns a `NMFTransition` struct containing the transition attributes. + */ +NS_INLINE NMFTransition NMFTransitionMake(NSTimeInterval duration, NSTimeInterval delay) { + NMFTransition transition; + transition.duration = duration; + transition.delay = delay; + + return transition; +} + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFUtils.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFUtils.h new file mode 100644 index 00000000..640139b6 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFUtils.h @@ -0,0 +1,61 @@ +#import +#import +#import + +#import "NMFMapView.h" + +NS_INLINE CGFloat ScreenScaleFactor() { + static dispatch_once_t onceToken; + static CGFloat screenFactor; + + dispatch_once(&onceToken, ^{ + screenFactor = [UIScreen instancesRespondToSelector:@selector(nativeScale)] ? + [[UIScreen mainScreen] nativeScale] : [[UIScreen mainScreen] scale]; + }); + + return screenFactor; +}; + +/** + 지오메트리 관련 유틸리티를 제공하는 클래스. + */ +NMF_EXPORT +@interface NMFGeometryUtils : NSObject + +/** + `NMGLatLng` 배열로 구성된 경로선에서 대상 좌표에 가장 근접한 지점의 진척률을 반환합니다. + + @param latLngs `NMGLatLng` 배열로 구성된 경로선. + @param targetLatLng 대상 좌표. + @return 진척률. + */ ++(double)progressWithLatLngs:(NSArray * _Nonnull)latLngs targetLatLng:(NMGLatLng * _Nonnull)targetLatLng; + +/** + `NMGLineString` 배열로 구성된 경로선에서 대상 좌표에 가장 근접한 지점의 진척률을 반환합니다. + + @param lineStrings `NMGLineString` 배열로 구성된 경로선. + @param targetLatLng 대상 좌표. + @return 진척률. + */ ++(double)progressWithLineStrings:(NSArray * _Nonnull)lineStrings targetLatLng:(NMGLatLng * _Nonnull)targetLatLng; + +@end + + +/** + 카메라 관련 유틸리티를 제공하는 클래스. + */ +NMF_EXPORT +@interface NMFCameraUtils : NSObject + +/** + `bounds`가 화면에 온전히 보이는 최대 줌 레벨을 반환합니다. + + @param bounds 영역. + @param insets 영역과 지도 화면 간 확보할 인셋 여백. pt 단위. + @param mapView `NMFMapView` 객체. + @return `bounds`가 `map`에서 화면에 온전히 보이는 최대 줌 레벨. + */ ++ (double)getFittableZoomLevelWith:(NMGLatLngBounds * _Nonnull)bounds insets:(UIEdgeInsets)insets mapView:(NMFMapView * _Nonnull)mapView; +@end diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFZoomControlView.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFZoomControlView.h new file mode 100644 index 00000000..c8efbad5 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMFZoomControlView.h @@ -0,0 +1,24 @@ +#import + +#import "NMFFoundation.h" + +NS_ASSUME_NONNULL_BEGIN + +@class NMFMapView; + +/** + 줌 버튼 컨트롤. + */ +NMF_EXPORT +@interface NMFZoomControlView : UIView + +/** + 이 컨트롤과 연결할 지도 객체. `nil`일 경우 컨트롤이 동작하지 않습니다. + + 기본값은 `nil`입니다. + */ +@property (nonatomic, weak, nullable) NMFMapView *mapView; + +@end + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMapsMap.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMapsMap.h new file mode 100644 index 00000000..575d95a8 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NMapsMap.h @@ -0,0 +1,88 @@ +#import "NMFFoundation.h" + +// Project version number for NaverMap Framework. +FOUNDATION_EXPORT NMF_EXPORT double NaverMapFrameworkVersionNumber; + +// Project version string for NaverMap Framework. +FOUNDATION_EXPORT NMF_EXPORT const unsigned char NaverMapFrameworVersionString[]; + +#import "NMFUtils.h" + +#import "NMFAuthManager.h" +#import "NMFNaverMapView.h" + +#import "NMFPickable.h" +#import "NMFLocationManager.h" +#import "NMFRendererOptions.h" +#import "NMFMapView.h" +#import "NMFMapView+IBAdditions.h" +#import "NMFMapViewDelegate.h" +#import "NMFMapViewTouchDelegate.h" +#import "NMFMapViewCameraDelegate.h" +#import "NMFMapViewOptionDelegate.h" + +#import "NMFOfflinePack.h" +#import "NMFOfflineRegion.h" +#import "NMFOfflineStorage.h" + +#import "NMFCameraCommon.h" +#import "NMFCameraUpdate.h" +#import "NMFCameraPosition.h" +#import "NMFCameraUpdateParams.h" + +#import "NMFOverlay.h" +#import "NMFSymbol.h" +#import "NMFTileId.h" +#import "NMFTileCoverHelper.h" +#import "NMFOverlayImage.h" +#import "NMFGroundOverlay.h" +#import "NMFLocationOverlay.h" +#import "NMFMarker.h" +#import "NMFInfoWindow.h" +#import "NMFInfoWindowDefaultTextSource.h" +#import "NMFPath.h" +#import "NMFMultipartPath.h" +#import "NMFArrowheadPath.h" +#import "NMFPolygonOverlay.h" +#import "NMFPolylineOverlay.h" +#import "NMFCircleOverlay.h" + +#import "NMFCompassView.h" +#import "NMFScaleView.h" +#import "NMFZoomControlView.h" +#import "NMFLocationButton.h" +#import "NSBundle+NMFAdditions.h" +#import "NMFProjection.h" + +#import "NMFIndoorLevelPickerView.h" +#import "NMFIndoorView.h" +#import "NMFIndoorLevel.h" +#import "NMFIndoorZone.h" +#import "NMFIndoorRegion.h" +#import "NMFIndoorSelection.h" +#import "NMFIndoorSelectionDelegate.h" + +#import "NMCBuilder.h" +#import "NMCCluster.h" +#import "NMCClusterer.h" +#import "NMCClusteringKey.h" +#import "NMCClusterMarkerInfo.h" +#import "NMCClusterMarkerUpdater.h" +#import "NMCClustererUpdateCallback.h" +#import "NMCComplexBuilder.h" +#import "NMCDefaultClusterMarkerUpdater.h" +#import "NMCDefaultDistanceStrategy.h" +#import "NMCDefaultLeafMarkerUpdater.h" +#import "NMCDefaultMarkerManager.h" +#import "NMCDefaultPositioningStrategy.h" +#import "NMCDefaultTagMergeStrategy.h" +#import "NMCDefaultThresholdStrategy.h" +#import "NMCDistanceStrategy.h" +#import "NMCLeaf.h" +#import "NMCLeafMarkerInfo.h" +#import "NMCLeafMarkerUpdater.h" +#import "NMCMarkerInfo.h" +#import "NMCNode.h" +#import "NMCPositioningStrategy.h" +#import "NMCTagMergeStrategy.h" +#import "NMCThresholdStrategy.h" diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h new file mode 100644 index 00000000..2256e3a1 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Headers/NSBundle+NMFAdditions.h @@ -0,0 +1,48 @@ +#import + +#import "NMFTypes.h" + +NS_ASSUME_NONNULL_BEGIN + +// Strings in the SDK targets must be retrieved from the framework bundle rather +// than the main bundle, which is usually the application bundle. Redefining +// these macros ensures that the framework bundle’s string tables are used at +// runtime yet tools like genstrings and Xcode can still find the localizable +// string identifiers. (genstrings has an -s option that would allow us to +// define our own macros, but Xcode’s Export Localization feature lacks support +// for it.) +// +// As a consequence of this approach, this header must be included in all SDK +// files that include localizable strings. + + +@interface NSBundle (NMFAdditions) + +/// Returns the bundle containing the SDK’s classes and Info.plist file. ++ (instancetype)naverMapFrameworkBundle; + ++ (nonnull NSString *)naverMapFrameworkVersion; + ++ (nullable NSString *)naverMapFrameworkBundleIdentifier; + ++ (nullable NSDictionary *)naverMapFrameworkInfoDictionary; + ++ (nullable NSString *)naverMapApplicationBundleIdentifier; + +@property (readonly, copy, nullable) NSString *naverMapFrameworkResourcesDirectory; + +@end + +static inline NSString* NMFLocalizedString(NSString *key, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:@"" table:nil]; +} + +static inline NSString* NMFLocalizedStringFromTable(NSString *key, NSString *tbl, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:@"" table:(tbl)]; +} + +static inline NSString* NMFLocalizedStringWithDefaultValue(NSString *key, NSString * _Nullable tbl, NSBundle * _Nullable bundle, NSString *val, NSString * _Nullable comment) NS_SWIFT_UNAVAILABLE("Not use in swift.") { + return [[NSBundle naverMapFrameworkBundle] localizedStringForKey:(key) value:(val) table:(tbl)]; +} + +NS_ASSUME_NONNULL_END diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Info.plist b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Info.plist new file mode 100644 index 00000000..d0ba14f7 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Info.plist differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/LICENSE b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/LICENSE new file mode 100644 index 00000000..dbbbe4ce --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/LICENSE @@ -0,0 +1,2 @@ +Copyright © 2018-2021 NAVER Corp. +All rights reserved. diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Modules/module.modulemap b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Modules/module.modulemap new file mode 100644 index 00000000..384594f0 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module NMapsMap { + umbrella header "NMapsMap.h" + export * + + module * { export * } +} diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib new file mode 100644 index 00000000..30275c72 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib new file mode 100644 index 00000000..6d7ac4ba Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerCell.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib new file mode 100644 index 00000000..57a2976e Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib new file mode 100644 index 00000000..d0c6277c Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFIndoorLevelPickerView.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib new file mode 100644 index 00000000..03c1d45b Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFInfoWindowDefaultTextSource.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib new file mode 100644 index 00000000..0e4f2e6d Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/objects-11.0+.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib new file mode 100644 index 00000000..0aa8e2e9 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFNaverMapView.nib/runtime.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFScaleView.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFScaleView.nib new file mode 100644 index 00000000..073b3b87 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFScaleView.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFZoomControlView.nib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFZoomControlView.nib new file mode 100644 index 00000000..bf1b4dfa Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMFZoomControlView.nib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMapsMap b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMapsMap new file mode 100755 index 00000000..1ef6d1cf Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NMapsMap differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NOTICE b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NOTICE new file mode 100644 index 00000000..0896e535 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/NOTICE @@ -0,0 +1,2628 @@ +THE FOLLOWING SETS FORTH ATTRIBUTION NOTICES FOR THIRD PARTY SOFTWARE THAT MAY BE CONTAINED IN THIS APPLICATION. + +We thank the open source community for all of their efforts. If you have any questions about these notices please email us at opensource@navercorp.com. + +===== + +mapbox/cheap-ruler-cpp +https://github.com/mapbox/cheap-ruler-cpp + + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/mapbox-gl-native +https://github.com/mapbox/mapbox-gl-native + + +mapbox-gl-native copyright (c) 2014-2019 Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of Boost. + +Distributed under the Boost Software License, Version 1.0. + +http://www.boost.org/LICENSE_1_0.txt + +=========================================================================== + +Mapbox GL uses portions of Clipper. + +Author : Angus Johnson +Version : 6.1.3a +Date : 22 January 2014 +Website : http://www.angusj.com +Copyright : Angus Johnson 2010-2014 + +License: +Use, modification & distribution is subject to Boost Software License Ver 1. +http://www.boost.org/LICENSE_1_0.txt + +Attributions: +The code in this library is an extension of Bala Vatti's clipping algorithm: +"A generic solution to polygon clipping" +Communications of the ACM, Vol 35, Issue 7 (July 1992) pp 56-63. +http://portal.acm.org/citation.cfm?id=129906 + +Computer graphics and geometric modeling: implementation and algorithms +By Max K. Agoston +Springer; 1 edition (January 4, 2005) +http://books.google.com/books?q=vatti+clipping+agoston + +See also: +"Polygon Offsetting by Computing Winding Numbers" +Paper no. DETC2005-85513 pp. 565-575 +ASME 2005 International Design Engineering Technical Conferences +and Computers and Information in Engineering Conference (IDETC/CIE2005) +September 24-28, 2005 , Long Beach, California, USA +http://www.me.berkeley.edu/~mcmains/pubs/DAC05OffsetPolygon.pdf + +=========================================================================== + +Mapbox GL uses portions of BugshotKit. + +The MIT License (MIT) + +Copyright (c) 2014 marcoarment + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of CSS Color Parser. + +(c) Dean McNamee , 2012. +C++ port by Konstantin Käfer , 2014. + +https://github.com/deanm/css-color-parser-js +https://github.com/kkaefer/css-color-parser-cpp + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of GLFW. + +Copyright (c) 2002-2006 Marcus Geelnard +Copyright (c) 2006-2010 Camilla Berglund + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would + be appreciated but is not required. + +2. Altered source versions must be plainly marked as such, and must not + be misrepresented as being the original software. + +3. This notice may not be removed or altered from any source + distribution. + +=========================================================================== + +Mapbox GL uses portions of libc++. + +The libc++ library is dual licensed under both the University of Illinois +"BSD-Like" license and the MIT license. As a user of this code you may choose +to use it under either license. As a contributor, you agree to allow your code +to be used under both. + +Full text of the relevant licenses is included below. + +==== + +University of Illinois/NCSA +Open Source License + +Copyright (c) 2009-2015 by the contributors listed in CREDITS.TXT + +All rights reserved. + +Developed by: + + LLVM Team + + University of Illinois at Urbana-Champaign + + http://llvm.org + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal with +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimers. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimers in the + documentation and/or other materials provided with the distribution. + +* Neither the names of the LLVM Team, University of Illinois at + Urbana-Champaign, nor the names of its contributors may be used to + endorse or promote products derived from this Software without specific + prior written permission. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +SOFTWARE. + +==== + +Copyright (c) 2009-2014 by the contributors listed in CREDITS.TXT + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of libcurl. + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2015, Daniel Stenberg, . + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +=========================================================================== + +Mapbox GL uses portions of libjpeg-turbo. + +This software is based in part on the work of the Independent JPEG Group. + +Copyright (C)2009-2015 D. R. Commander. All Rights Reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +- Neither the name of the libjpeg-turbo Project nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS", +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +TurboJPEG/LJT: this implements the TurboJPEG API using libjpeg or libjpeg-turbo + +=========================================================================== + +Mapbox GL uses portions of libpng. + +This copy of the libpng notices is provided for your convenience. In case of +any discrepancy between this copy and the notices in the file png.h that is +included in the libpng distribution, the latter shall prevail. + +COPYRIGHT NOTICE, DISCLAIMER, and LICENSE: + +If you modify libpng you may insert additional notices immediately following +this sentence. + +This code is released under the libpng license. + +libpng versions 1.0.7, July 1, 2000, through 1.6.18, July 23, 2015, are +Copyright (c) 2000-2002, 2004, 2006-2015 Glenn Randers-Pehrson, and are +distributed according to the same disclaimer and license as libpng-1.0.6 +with the following individuals added to the list of Contributing Authors: + + Simon-Pierre Cadieux + Eric S. Raymond + Mans Rullgard + Cosmin Truta + Gilles Vollant + James Yu + +and with the following additions to the disclaimer: + + There is no warranty against interference with your enjoyment of the + library or against infringement. There is no warranty that our + efforts or the library will fulfill any of your particular purposes + or needs. This library is provided with all faults, and the entire + risk of satisfactory quality, performance, accuracy, and effort is with + the user. + +libpng versions 0.97, January 1998, through 1.0.6, March 20, 2000, are +Copyright (c) 1998-2000 Glenn Randers-Pehrson, and are distributed according +to the same disclaimer and license as libpng-0.96, with the following +individuals added to the list of Contributing Authors: + + Tom Lane + Glenn Randers-Pehrson + Willem van Schaik + +libpng versions 0.89, June 1996, through 0.96, May 1997, are +Copyright (c) 1996-1997 Andreas Dilger, and are +distributed according to the same disclaimer and license as libpng-0.88, +with the following individuals added to the list of Contributing Authors: + + John Bowler + Kevin Bracey + Sam Bushell + Magnus Holmgren + Greg Roelofs + Tom Tanner + +libpng versions 0.5, May 1995, through 0.88, January 1996, are +Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc. + +For the purposes of this copyright and license, "Contributing Authors" +is defined as the following set of individuals: + + Andreas Dilger + Dave Martindale + Guy Eric Schalnat + Paul Schmidt + Tim Wegner + +The PNG Reference Library is supplied "AS IS". The Contributing Authors +and Group 42, Inc. disclaim all warranties, expressed or implied, +including, without limitation, the warranties of merchantability and of +fitness for any purpose. The Contributing Authors and Group 42, Inc. +assume no liability for direct, indirect, incidental, special, exemplary, +or consequential damages, which may result from the use of the PNG +Reference Library, even if advised of the possibility of such damage. + +Permission is hereby granted to use, copy, modify, and distribute this +source code, or portions hereof, for any purpose, without fee, subject +to the following restrictions: + +1. The origin of this source code must not be misrepresented. + +2. Altered versions must be plainly marked as such and must not + be misrepresented as being the original source. + +3. This Copyright notice may not be removed or altered from any + source or altered source distribution. + +The Contributing Authors and Group 42, Inc. specifically permit, without +fee, and encourage the use of this source code as a component to +supporting the PNG file format in commercial products. If you use this +source code in a product, acknowledgment is not required but would be +appreciated. + +=========================================================================== + +Mapbox GL uses portions of libuv. + +libuv is part of the Node project: http://nodejs.org/ +libuv may be distributed alone under Node's license: + +==== + +Copyright Joyent, Inc. and other Node contributors. All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +==== + +This license applies to all parts of libuv that are not externally +maintained libraries. + +The externally maintained libraries used by libuv are: + +- tree.h (from FreeBSD), copyright Niels Provos. Two clause BSD license. + +- inet_pton and inet_ntop implementations, contained in src/inet.c, are + copyright the Internet Systems Consortium, Inc., and licensed under the ISC + license. + +- stdint-msvc2008.h (from msinttypes), copyright Alexander Chemeris. Three + clause BSD license. + +- pthread-fixes.h, pthread-fixes.c, copyright Google Inc. and Sony Mobile + Communications AB. Three clause BSD license. + +- android-ifaddrs.h, android-ifaddrs.c, copyright Berkeley Software Design + Inc, Kenneth MacKay and Emergya (Cloud4all, FP7/2007-2013, grant agreement + n° 289016). Three clause BSD license. + +=========================================================================== + +Mapbox GL uses portions of libzip. + +Copyright (C) 1999-2014 Dieter Baron and Thomas Klausner + +The authors can be contacted at + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of the Mapbox iOS SDK, which was derived from the +Route-Me open source project, including the Alpstein fork of it. + +The Route-Me license appears below. + +Copyright (c) 2008-2013, Route-Me Contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of nunicode. + +Copyright (c) 2013 Aleksey Tulinov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of OpenSSL. + +LICENSE ISSUES +============== + +The OpenSSL toolkit stays under a dual license, i.e. both the conditions of +the OpenSSL License and the original SSLeay license apply to the toolkit. +See below for the actual license texts. Actually both licenses are BSD-style +Open Source licenses. In case of any license issues related to OpenSSL +please contact openssl-core@openssl.org. + +OpenSSL License +--------------- + +Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +3. All advertising materials mentioning features or use of this + software must display the following acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + +4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + endorse or promote products derived from this software without + prior written permission. For written permission, please contact + openssl-core@openssl.org. + +5. Products derived from this software may not be called "OpenSSL" + nor may "OpenSSL" appear in their names without prior written + permission of the OpenSSL Project. + +6. Redistributions of any form whatsoever must retain the following + acknowledgment: + "This product includes software developed by the OpenSSL Project + for use in the OpenSSL Toolkit (http://www.openssl.org/)" + +THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY +EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR +ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED +OF THE POSSIBILITY OF SUCH DAMAGE. + +This product includes cryptographic software written by Eric Young +(eay@cryptsoft.com). This product includes software written by Tim +Hudson (tjh@cryptsoft.com). + +Original SSLeay License +----------------------- + +Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) +All rights reserved. + +This package is an SSL implementation written +by Eric Young (eay@cryptsoft.com). +The implementation was written so as to conform with Netscapes SSL. + +This library is free for commercial and non-commercial use as long as +The following conditions are aheared to. The following conditions +apply to all code found in this distribution, be it the RC4, RSA, +lhash, DES, etc., code; not just the SSL code. The SSL documentation +included with this distribution is covered by the same copyright terms +except that the holder is Tim Hudson (tjh@cryptsoft.com). + +Copyright remains Eric Young's, and as such any Copyright notices in +the code are not to be removed. +If this package is used in a product, Eric Young should be given attribution +as the author of the parts of the library used. +This can be in the form of a textual message at program startup or +in documentation (online or textual) provided with the package. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. All advertising materials mentioning features or use of this software + must display the following acknowledgement: + "This product includes cryptographic software written by + Eric Young (eay@cryptsoft.com)" + The word 'cryptographic' can be left out if the rouines from the library + being used are not cryptographic related :-). +4. If you include any Windows specific code (or a derivative thereof) from + the apps directory (application code) you must include an acknowledgement: + "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" + +THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. + +The licence and distribution terms for any publically available version or +derivative of this code cannot be changed. i.e. this code cannot simply be +copied and put under another distribution licence +[including the GNU Public Licence.] + +=========================================================================== + +Mapbox GL uses portions of RapidJSON. + +Tencent is pleased to support the open source community by making RapidJSON +available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights +reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note +that the RapidJSON binary is licensed under the MIT License. If you have +downloaded a copy of the RapidJSON source code from Tencent, please note that +RapidJSON source code is licensed under the MIT License, except for the third- +party components listed below which are subject to different license terms. +Your integration of RapidJSON into your own projects may require compliance with +the MIT License, as well as the other licenses applicable to the third-party +components included within RapidJSON. To avoid the problematic JSON license in +your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as +it's the only code under the JSON license. A copy of the MIT License is included +in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of Reachability. + +Copyright (c) 2011, Tony Million. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +=========================================================================== + +Mapbox GL uses portions of SQLite. + +2001 September 15 + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +=========================================================================== + +Mapbox GL uses portions of SVPulsingAnnotationView. + +Copyright (c) 2013, Sam Vermette + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +=========================================================================== + +Mapbox GL uses portions of zlib. + +Acknowledgments: + +The deflate format used by zlib was defined by Phil Katz. The deflate and +zlib specifications were written by L. Peter Deutsch. Thanks to all the +people who reported problems and suggested various improvements in zlib; they +are too numerous to cite here. + +Copyright notice: + +(C) 1995-2013 Jean-loup Gailly and Mark Adler + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +=========================================================================== + +Mapbox GL uses portions of Realm Objective-C. + +Copyright 2015 Realm Inc. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +=========================================================================== + +Mapbox GL uses portions of SMCalloutView. + +Copyright 2016 Nick Farina. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License: +https://github.com/nfarina/calloutview/blob/master/LICENSE + +=========================================================================== + +Mapbox GL uses portions of software listed in [platform/android/LICENSE.md](https://github.com/mapbox/mapbox-gl-native/blob/master/platform/android/LICENSE.md). + +Mapbox GL uses portions of software listed in [platform/ios/vendor/mapbox-events-ios/LICENSE.md](https://github.com/mapbox/mobile-events-ios/blob/master/LICENSE.md). + +===== + +mapbox/earcut +https://github.com/mapbox/earcut + + +ISC License + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/eternal +https://github.com/mapbox/eternal + + +ISC License + +Copyright (c) 2018, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +martinmoene/expected-lite +https://github.com/martinmoene/expected-lite + + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/geojson-cpp +https://github.com/mapbox/geojson-cpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/geojson-vt +https://github.com/mapbox/geojson-vt + + +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/geometry.hpp +https://github.com/mapbox/geometry.hpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +unicode-org/icu +http://site.icu-project.org + + +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2019 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in https://www.unicode.org/copyright.html. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode software and any associated documentation +(the "Software") to deal in the Data Files or Software +without restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, and/or sell copies of +the Data Files or Software, and to permit persons to whom the Data Files +or Software are furnished to do so, provided that either +(a) this copyright and permission notice appear with all copies +of the Data Files or Software, or +(b) this copyright and permission notice appear in associated +Documentation. + +THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF +ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT OF THIRD PARTY RIGHTS. +IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS +NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL +DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THE DATA FILES OR SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, +use or other dealings in these Data Files or Software without prior +written authorization of the copyright holder. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 + +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1995-2016 International Business Machines Corporation and others +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, and/or sell copies of the Software, and to permit persons +to whom the Software is furnished to do so, provided that the above +copyright notice(s) and this permission notice appear in all copies of +the Software and that both the above copyright notice(s) and this +permission notice appear in supporting documentation. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY +SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER +RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF +CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN +CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +Except as contained in this notice, the name of a copyright holder +shall not be used in advertising or otherwise to promote the sale, use +or other dealings in this Software without prior written authorization +of the copyright holder. + +All trademarks and registered trademarks mentioned herein are the +property of their respective owners. + +2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) + + # The Google Chrome software developed by Google is licensed under + # the BSD license. Other software included in this distribution is + # provided under other licenses, as set forth below. + # + # The BSD License + # http://opensource.org/licenses/bsd-license.php + # Copyright (C) 2006-2008, Google Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions are met: + # + # Redistributions of source code must retain the above copyright notice, + # this list of conditions and the following disclaimer. + # Redistributions in binary form must reproduce the above + # copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided with + # the distribution. + # Neither the name of Google Inc. nor the names of its + # contributors may be used to endorse or promote products derived from + # this software without specific prior written permission. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + # LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + # NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + # + # + # The word list in cjdict.txt are generated by combining three word lists + # listed below with further processing for compound word breaking. The + # frequency is generated with an iterative training against Google web + # corpora. + # + # * Libtabe (Chinese) + # - https://sourceforge.net/project/?group_id=1519 + # - Its license terms and conditions are shown below. + # + # * IPADIC (Japanese) + # - http://chasen.aist-nara.ac.jp/chasen/distribution.html + # - Its license terms and conditions are shown below. + # + # ---------COPYING.libtabe ---- BEGIN-------------------- + # + # /* + # * Copyright (c) 1999 TaBE Project. + # * Copyright (c) 1999 Pai-Hsiang Hsiao. + # * All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the TaBE Project nor the names of its + # * contributors may be used to endorse or promote products derived + # * from this software without specific prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # /* + # * Copyright (c) 1999 Computer Systems and Communication Lab, + # * Institute of Information Science, Academia + # * Sinica. All rights reserved. + # * + # * Redistribution and use in source and binary forms, with or without + # * modification, are permitted provided that the following conditions + # * are met: + # * + # * . Redistributions of source code must retain the above copyright + # * notice, this list of conditions and the following disclaimer. + # * . Redistributions in binary form must reproduce the above copyright + # * notice, this list of conditions and the following disclaimer in + # * the documentation and/or other materials provided with the + # * distribution. + # * . Neither the name of the Computer Systems and Communication Lab + # * nor the names of its contributors may be used to endorse or + # * promote products derived from this software without specific + # * prior written permission. + # * + # * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + # * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # * OF THE POSSIBILITY OF SUCH DAMAGE. + # */ + # + # Copyright 1996 Chih-Hao Tsai @ Beckman Institute, + # University of Illinois + # c-tsai4@uiuc.edu http://casper.beckman.uiuc.edu/~c-tsai4 + # + # ---------------COPYING.libtabe-----END-------------------------------- + # + # + # ---------------COPYING.ipadic-----BEGIN------------------------------- + # + # Copyright 2000, 2001, 2002, 2003 Nara Institute of Science + # and Technology. All Rights Reserved. + # + # Use, reproduction, and distribution of this software is permitted. + # Any copy of this software, whether in its original form or modified, + # must include both the above copyright notice and the following + # paragraphs. + # + # Nara Institute of Science and Technology (NAIST), + # the copyright holders, disclaims all warranties with regard to this + # software, including all implied warranties of merchantability and + # fitness, in no event shall NAIST be liable for + # any special, indirect or consequential damages or any damages + # whatsoever resulting from loss of use, data or profits, whether in an + # action of contract, negligence or other tortuous action, arising out + # of or in connection with the use or performance of this software. + # + # A large portion of the dictionary entries + # originate from ICOT Free Software. The following conditions for ICOT + # Free Software applies to the current dictionary as well. + # + # Each User may also freely distribute the Program, whether in its + # original form or modified, to any third party or parties, PROVIDED + # that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear + # on, or be attached to, the Program, which is distributed substantially + # in the same form as set out herein and that such intended + # distribution, if actually made, will neither violate or otherwise + # contravene any of the laws and regulations of the countries having + # jurisdiction over the User or the intended distribution itself. + # + # NO WARRANTY + # + # The program was produced on an experimental basis in the course of the + # research and development conducted during the project and is provided + # to users as so produced on an experimental basis. Accordingly, the + # program is provided without any warranty whatsoever, whether express, + # implied, statutory or otherwise. The term "warranty" used herein + # includes, but is not limited to, any warranty of the quality, + # performance, merchantability and fitness for a particular purpose of + # the program and the nonexistence of any infringement or violation of + # any right of any third party. + # + # Each user of the program will agree and understand, and be deemed to + # have agreed and understood, that there is no warranty whatsoever for + # the program and, accordingly, the entire risk arising from or + # otherwise connected with the program is assumed by the user. + # + # Therefore, neither ICOT, the copyright holder, or any other + # organization that participated in or was otherwise related to the + # development of the program and their respective officials, directors, + # officers and other employees shall be held liable for any and all + # damages, including, without limitation, general, special, incidental + # and consequential damages, arising out of or otherwise in connection + # with the use or inability to use the program or any product, material + # or result produced or otherwise obtained by using the program, + # regardless of whether they have been advised of, or otherwise had + # knowledge of, the possibility of such damages at any time during the + # project or thereafter. Each user will be deemed to have agreed to the + # foregoing by his or her commencement of use of the program. The term + # "use" as used herein includes, but is not limited to, the use, + # modification, copying and distribution of the program and the + # production of secondary products from the program. + # + # In the case where the program, whether in its original form or + # modified, was distributed or delivered to or received by a user from + # any person, organization or entity other than ICOT, unless it makes or + # grants independently of ICOT any specific warranty to the user in + # writing, such person, organization or entity, will also be exempted + # from and not be held liable to the user for any such damages as noted + # above as far as the program is concerned. + # + # ---------------COPYING.ipadic-----END---------------------------------- + +3. Lao Word Break Dictionary Data (laodict.txt) + + # Copyright (c) 2013 International Business Machines Corporation + # and others. All Rights Reserved. + # + # Project: http://code.google.com/p/lao-dictionary/ + # Dictionary: http://lao-dictionary.googlecode.com/git/Lao-Dictionary.txt + # License: http://lao-dictionary.googlecode.com/git/Lao-Dictionary-LICENSE.txt + # (copied below) + # + # This file is derived from the above dictionary, with slight + # modifications. + # ---------------------------------------------------------------------- + # Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell. + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, + # are permitted provided that the following conditions are met: + # + # + # Redistributions of source code must retain the above copyright notice, this + # list of conditions and the following disclaimer. Redistributions in + # binary form must reproduce the above copyright notice, this list of + # conditions and the following disclaimer in the documentation and/or + # other materials provided with the distribution. + # + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + # COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + # INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + # STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + # OF THE POSSIBILITY OF SUCH DAMAGE. + # -------------------------------------------------------------------------- + +4. Burmese Word Break Dictionary Data (burmesedict.txt) + + # Copyright (c) 2014 International Business Machines Corporation + # and others. All Rights Reserved. + # + # This list is part of a project hosted at: + # github.com/kanyawtech/myanmar-karen-word-lists + # + # -------------------------------------------------------------------------- + # Copyright (c) 2013, LeRoy Benjamin Sharon + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted provided that the following conditions + # are met: Redistributions of source code must retain the above + # copyright notice, this list of conditions and the following + # disclaimer. Redistributions in binary form must reproduce the + # above copyright notice, this list of conditions and the following + # disclaimer in the documentation and/or other materials provided + # with the distribution. + # + # Neither the name Myanmar Karen Word Lists, nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + # CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS + # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + # ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR + # TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF + # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + # SUCH DAMAGE. + # -------------------------------------------------------------------------- + +5. Time Zone Database + + ICU uses the public domain data and code derived from Time Zone +Database for its time zone support. The ownership of the TZ database +is explained in BCP 175: Procedure for Maintaining the Time Zone +Database section 7. + + # 7. Database Ownership + # + # The TZ database itself is not an IETF Contribution or an IETF + # document. Rather it is a pre-existing and regularly updated work + # that is in the public domain, and is intended to remain in the + # public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do + # not apply to the TZ Database or contributions that individuals make + # to it. Should any claims be made and substantiated against the TZ + # Database, the organization that is providing the IANA + # Considerations defined in this RFC, under the memorandum of + # understanding with the IETF, currently ICANN, may act in accordance + # with all competent court orders. No ownership claims will be made + # by ICANN or the IETF Trust on the database or the code. Any person + # making a contribution to the database or code waives all rights to + # future claims in that contribution or in the TZ Database. + +6. Google double-conversion + +Copyright 2006-2011, the V8 project authors. All rights reserved. +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===== + +mourner/kdbush.hpp +https://github.com/mourner/kdbush.hpp + + +Copyright (c) 2016, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/pixelmatch +https://github.com/mapbox/pixelmatch + + +ISC License + +Copyright (c) 2019, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +mapbox/polylabel +https://github.com/mapbox/polylabel + + +ISC License +Copyright (c) 2016 Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +===== + +mapbox/protozero +https://github.com/mapbox/protozero + + +protozero copyright (c) Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +===== + +Tencent/rapidjson +http://rapidjson.org + + +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. +If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license. +A copy of the MIT License is included in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +===== + +mapbox/shelf-pack-cpp +https://github.com/mapbox/shelf-pack-cpp + + +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +SQLite +https://www.sqlite.org + + +SQLite Is Public Domain + +All of the code and documentation in SQLite has been dedicated to the public domain by the authors. All code authors, and representatives of the companies they work for, have signed affidavits dedicating their contributions to the public domain and originals of those signed affidavits are stored in a firesafe at the main offices of Hwaci. Anyone is free to copy, modify, publish, use, compile, sell, or distribute the original SQLite code, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. + +--- + +2001 September 15 + +The author disclaims copyright to this source code. In place of +a legal notice, here is a blessing: + + May you do good and not evil. + May you find forgiveness for yourself and forgive others. + May you share freely, never taking more than you give. + +===== + +mapbox/supercluster.hpp +https://github.com/mapbox/supercluster.hpp + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +okdshin/unique_resource +https://github.com/okdshin/unique_resource + + +Copyright (c) 2015 okdshin +Distributed under the Boost Software License, Version 1.0. + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/variant +https://github.com/mapbox/variant + + +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +--- + +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +mapbox/vector-tile +https://github.com/mapbox/vector-tile + + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +===== + +mapbox/wagyu +https://github.com/mapbox/wagyu + + +Parts of the code in the Wagyu Library are derived from the version of the +Clipper Library by Angus Johnson listed below. + +Author : Angus Johnson +Version : 6.4.0 +Date : 2 July 2015 +Website : http://www.angusj.com + +Copyright for portions of the derived code in the Wagyu library are held +by Angus Johnson, 2010-2015. Copyright for the "include/mapbox/geometry/wagyu/almost_equal.hpp" +file is held by Google Inc and its license is listed at the top of that file. + +// Copyright 2005, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +// +// Authors: wan@google.com (Zhanyong Wan), eefacm@gmail.com (Sean Mcafee) +// + + +All other copyright for the Wagyu Library are held by Mapbox, 2016. This code +is published in accordance with, and retains the same license as the Clipper +Library by Angus Johnson. + +Copyright (c) 2010-2015, Angus Johnson +Copyright (c) 2016-2020, Mapbox + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +===== + +Bly7/OBJ-Loader +https://github.com/Bly7/OBJ-Loader + + +MIT License + +Copyright (c) 2016 Robert Smith + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +===== + +maplibre/maplibre-native +https://github.com/maplibre/maplibre-native + + +BSD 2-Clause License + +Copyright (c) 2021 MapLibre contributors + +Copyright (c) 2018-2021 MapTiler.com + +Copyright (c) 2014-2020 Mapbox + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +### [Mapbox GL Native](https://github.com/mapbox/mapbox-gl-native) by Mapbox + +``` +mapbox-gl-native Copyright (c) 2014-2020 Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR +PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +``` + +--- + +### [kdbush.hpp](https://github.com/mourner/kdbush.hpp) by Vladimir Agafonkin + +``` +Copyright (c) 2016, Vladimir Agafonkin + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [supercluster.hpp](https://github.com/mapbox/supercluster.hpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [shelf-pack-cpp](https://github.com/mapbox/shelf-pack-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [geojson-vt-cpp](https://github.com/mapbox/geojson-vt-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [cheap-ruler-cpp](https://github.com/mapbox/cheap-ruler-cpp) by Mapbox + +``` +ISC License + +Copyright (c) 2017, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [Boost C++ Libraries](https://www.boost.org) by Boost authors + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [csscolorparser](https://github.com/mapbox/css-color-parser-cpp) by Dean McNamee and Konstantin Käfer + +``` +(c) Dean McNamee , 2012. +(c) Konstantin Käfer , 2014. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +``` + +--- + +### [earcut.hpp](https://github.com/mapbox/earcut.hpp) by Mapbox + +``` +ISC License + +Copyright (c) 2015, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [eternal](https://github.com/mapbox/eternal) by Mapbox + +``` +ISC License + +Copyright (c) 2018, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +``` + +--- + +### [parsedate](https://curl.haxx.se) by Daniel Stenberg and others + +``` +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2020, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. + +``` + +--- + +### [polylabel](https://github.com/mapbox/polylabel) by Mapbox + +``` +ISC License +Copyright (c) 2016 Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. +IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA +OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS +ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS +SOFTWARE. + +``` + +--- + +### [protozero](https://github.com/mapbox/protozero) by Mapbox + +``` +protozero copyright (c) Mapbox. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR +PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +``` + +--- + +### [unique_resource](https://github.com/okdshin/unique_resource) by Shintarou Okada + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [vector-tile](https://github.com/mapbox/vector-tile) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [wagyu](https://github.com/mapbox/wagyu.git) by Angus Johnson and Mapbox + +``` +Parts of the code in the Wagyu Library are derived from the version of the +Clipper Library by Angus Johnson listed below. + +Author : Angus Johnson +Version : 6.4.0 +Date : 2 July 2015 +Website : http://www.angusj.com + +Copyright for portions of the derived code in the Wagyu library are held +by Angus Johnson, 2010-2015. All other copyright for the Wagyu Library are held by +Mapbox, 2016. This code is published in accordance with, and retains the same license +as the Clipper Library by Angus Johnson. + +Copyright (c) 2010-2015, Angus Johnson +Copyright (c) 2016, Mapbox + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [mapbox-base](https://github.com/mapbox/mapbox-base) by Mapbox + +``` +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES +LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +--- + +### [expected-lite](https://github.com/martinmoene/expected-lite) by Martin Moene + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [RapidJSON](https://rapidjson.org) by THL A29 Limited, a Tencent company, and Milo Yip + +``` +Tencent is pleased to support the open source community by making RapidJSON available. + +Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved. + +If you have downloaded a copy of the RapidJSON binary from Tencent, please note that the RapidJSON binary is licensed under the MIT License. +If you have downloaded a copy of the RapidJSON source code from Tencent, please note that RapidJSON source code is licensed under the MIT License, except for the third-party components listed below which are subject to different license terms. Your integration of RapidJSON into your own projects may require compliance with the MIT License, as well as the other licenses applicable to the third-party components included within RapidJSON. To avoid the problematic JSON license in your own projects, it's sufficient to exclude the bin/jsonchecker/ directory, as it's the only code under the JSON license. +A copy of the MIT License is included in this file. + +Other dependencies and licenses: + +Open Source Software Licensed Under the BSD License: +-------------------------------------------------------------------- + +The msinttypes r29 +Copyright (c) 2006-2013 Alexander Chemeris +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +* Neither the name of copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Open Source Software Licensed Under the JSON License: +-------------------------------------------------------------------- + +json.org +Copyright (c) 2002 JSON.org +All Rights Reserved. + +JSON_checker +Copyright (c) 2002 JSON.org +All Rights Reserved. + + +Terms of the JSON License: +--------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +The Software shall be used for Good, not Evil. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Terms of the MIT License: +-------------------------------------------------------------------- + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [geojson.hpp](https://github.com/mapbox/geojson-cpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +``` + +--- + +### [geometry.hpp](https://github.com/mapbox/geometry.hpp) by Mapbox + +``` +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +``` + +--- + +### [Optional](https://github.com/akrzemi1/Optional) by Andrzej Krzemienski + +``` +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + +``` + +--- + +### [variant](https://github.com/mapbox/variant) by Mapbox + +``` +Copyright (c) MapBox +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +- Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. +- Redistributions in binary form must reproduce the above copyright notice, this + list of conditions and the following disclaimer in the documentation and/or + other materials provided with the distribution. +- Neither the name "MapBox" nor the names of its contributors may be + used to endorse or promote products derived from this software without + specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES +LOSS OF USE, DATA, OR PROFITS OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` + +--- + +===== + +mapbox/webgl-wind +https://github.com/mapbox/webgl-wind + + +ISC License + +Copyright (c) 2016, Mapbox + +Permission to use, copy, modify, and/or distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright notice +and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +THIS SOFTWARE. + +===== + +tonymillion/Reachability +https://github.com/tonymillion/Reachability + + +Copyright (c) 2011-2013, Tony Million. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + + +===== diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/_CodeSignature/CodeResources b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/_CodeSignature/CodeResources new file mode 100644 index 00000000..c999fd30 --- /dev/null +++ b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/_CodeSignature/CodeResources @@ -0,0 +1,1725 @@ + + + + + files + + Assets.car + + Vy6u648pCzfeXKGogb3BjH/BK6E= + + Base.lproj/Foundation.strings + + +N9505KrWDvzRoDmPQcmIcc8N04= + + Headers/NMCBuilder.h + + KViKUC1aNh8JA4EGdfM5eeTH8tU= + + Headers/NMCCluster.h + + MlbYQv80DYz1iVRjx68lMAqq9nQ= + + Headers/NMCClusterMarkerInfo.h + + v+CB1f8Yp9fONgs+XLZW8dOuFoQ= + + Headers/NMCClusterMarkerUpdater.h + + ijeIfZ4UvXk3SBPali7iuHTMEdk= + + Headers/NMCClusterer.h + + 8SXVB1xBHL153dmg6ECHlpFfW78= + + Headers/NMCClustererUpdateCallback.h + + bm6WuPD+1a45e86xqikVNGU7m5o= + + Headers/NMCClusteringKey.h + + eFoZUptL7xO1Ii25Hgy4g/HK7EQ= + + Headers/NMCComplexBuilder.h + + yBTeLovUPsduegc6YAi3vI/kDo4= + + Headers/NMCDefaultClusterMarkerUpdater.h + + ZLvoM5QsSOR9KwVav+T1dq7qJ6Y= + + Headers/NMCDefaultDistanceStrategy.h + + kdxX7c3iXGJ0Fa5Ep6IJ+iFeNpE= + + Headers/NMCDefaultLeafMarkerUpdater.h + + uaUQ0gGNeLsKQkg2mz2NCoS+P1c= + + Headers/NMCDefaultMarkerManager.h + + EkEdunlh9laOljcLt/+qbjfuMMY= + + Headers/NMCDefaultPositioningStrategy.h + + h0kmjPxWPKnx+ISab3AOOSUsOmY= + + Headers/NMCDefaultTagMergeStrategy.h + + pAd8UYxlSL9QzZy6/HAbCf8MtLE= + + Headers/NMCDefaultThresholdStrategy.h + + V3CbqJLVdnzpkKe50Ow/kksO0JI= + + Headers/NMCDistanceStrategy.h + + IDBiHK4lal4V8o0/J/VwSh/JgC8= + + Headers/NMCLeaf.h + + 4Jjaeo9J0hXJBUdZcmcVQ44R0vI= + + Headers/NMCLeafMarkerInfo.h + + jkX5fntd4Qu7i1kqfi8fzDaafNU= + + Headers/NMCLeafMarkerUpdater.h + + ZhUNFtPQ4H3rNjOT0Yi1Z0j/4g8= + + Headers/NMCMarkerInfo.h + + V0IV1OnE1iZd1KqU7aMkuWp3geQ= + + Headers/NMCMarkerManager.h + + BmTqdq96LKW5IgYa4ezcsq78cw8= + + Headers/NMCNode.h + + 4LDWLvTzZ4OrHgPo7aFGQ22dJvY= + + Headers/NMCPositioningStrategy.h + + TdPwTZXFlwpMzhjwiE1L8ggDfWY= + + Headers/NMCTagMergeStrategy.h + + OIq+28mHeeqN7305zzvwB99rgvY= + + Headers/NMCThresholdStrategy.h + + lC5CQ/3FCny2Vr70HNA36t1o7OY= + + Headers/NMFArrowheadPath.h + + OjxrRKl3s2cikxn4B92Ab4yNUXU= + + Headers/NMFAuthManager.h + + l5uR1eC2jzE6BFAD/3YmrhSH1bY= + + Headers/NMFCameraCommon.h + + h/Fdz9JAgNn31hpex1XmEoHv0z0= + + Headers/NMFCameraPosition.h + + a+vvs1zVM8aUBFWLOYqc95vbC5s= + + Headers/NMFCameraUpdate.h + + xdTYwZAqw7UOAquZAAhZG2OGmjY= + + Headers/NMFCameraUpdateParams.h + + 77PQJye04Gd7DGbo1JshVR6G+O8= + + Headers/NMFCircleOverlay.h + + ZIuWtG5EKdZ/UQgxm6VaYP+qg7U= + + Headers/NMFCompassView.h + + lwmvT+tox8D08tPMiM2WheDXR5M= + + Headers/NMFFoundation.h + + cA5WZvYi1R6+iLpiB6CPQsZhC4Q= + + Headers/NMFGeometry.h + + s/vUNd4ez5+n4k4Z9GRxwwQI6W8= + + Headers/NMFGroundOverlay.h + + aj4RiLPJ5O6WhfNdEcCtLbJySzE= + + Headers/NMFIndoorLevel.h + + 22dC2uis40CYBb9T6zOPty8p8Kg= + + Headers/NMFIndoorLevelPickerView.h + + veMk4EFX/CtD1HFpNy+/aLYyjNk= + + Headers/NMFIndoorRegion.h + + V5oDF9anzp7bfiLDJ7GWELh2Wsw= + + Headers/NMFIndoorSelection.h + + o9L5YDXbuvNZ8LVm4u/CJmDdBMA= + + Headers/NMFIndoorSelectionDelegate.h + + LfqtjNK5XuRnRudBfEXie5jntaM= + + Headers/NMFIndoorView.h + + tqX0xhE+gE8/BQhLyseUlT4/m4w= + + Headers/NMFIndoorZone.h + + dIdB8vkTJIevMglL+Y6SqhKsnqQ= + + Headers/NMFInfoWindow.h + + dDBIMDhqquE28U3sQxOrqSZTJBg= + + Headers/NMFInfoWindowDefaultTextSource.h + + zDULkCqsDWMYuK7ogdVrzn+9wZw= + + Headers/NMFLocationButton.h + + KYapW0BcSwb4gjaTaHK8cz8OIA0= + + Headers/NMFLocationManager.h + + BMwppcyCzd0aYWbk5W7pMxSMkeU= + + Headers/NMFLocationOverlay.h + + 94TFCkQN/uBLJTPRmVdAzYbb0EI= + + Headers/NMFMapView+IBAdditions.h + + ilosiKCkHvDBzsn/bniEFqjLFd0= + + Headers/NMFMapView.h + + avPv9QcanT9xTtffWy3s84ggnl0= + + Headers/NMFMapViewCameraDelegate.h + + VlaX4O06W18a52CM33fiRWuJSZo= + + Headers/NMFMapViewDelegate.h + + uUQhHqlevszbM0L+wun97dPImog= + + Headers/NMFMapViewOptionDelegate.h + + JZMVNfYO++SgkttWQ43lHAkLzpE= + + Headers/NMFMapViewTouchDelegate.h + + WQqPdnksVe79e1jreDbg7gXRs4U= + + Headers/NMFMarker.h + + QEgVNMdQ3SxY6LjgMhTOqo+JJkI= + + Headers/NMFMarkerConstants.h + + I3OBbmPNF6cPL1GeOf+wKL+UG80= + + Headers/NMFMultipartPath.h + + 8v5YnXL0pYH5X3q1i4x791gJ7K4= + + Headers/NMFMyPositionMode.h + + mdMYIPai45r9jSKrAxJmUCtu4Cs= + + Headers/NMFNaverMapView.h + + fzfYUUGqssEVRXNEuW7u9e5bkyU= + + Headers/NMFOfflinePack.h + + 5IB0WgygKWLSzebs4ERzWHFJ2VE= + + Headers/NMFOfflineRegion.h + + yiYOgsLeMyi3RIzu+IvpOEiHZoc= + + Headers/NMFOfflineStorage.h + + TxYkPwy027fNM988XXqVw3leLdc= + + Headers/NMFOverlay.h + + WjHqmbFEbAMrtJKi9Z9bTwANAX8= + + Headers/NMFOverlayImage.h + + n7QtPm4jRX5nXx40Q/EXWXHhwyw= + + Headers/NMFPath.h + + gw3qqsSEt//g/2yv3zqlt3ZCre8= + + Headers/NMFPathColor.h + + p6oIi2eYnE5ryw4JQMWlE6zCY+4= + + Headers/NMFPickable.h + + aoj/Q64cJiEJcUeebv/4NFkY40U= + + Headers/NMFPolygonOverlay.h + + 8FL6W8gmnWWBQS0q1yZneygIe2U= + + Headers/NMFPolylineOverlay.h + + a2rGkocauJvD33Q8k8Q7qzNPVZI= + + Headers/NMFProjection.h + + 484wdTrlMIGqk79533FQJQ2yheI= + + Headers/NMFRendererOptions.h + + 4QLUKLFJYV1MN/rVLu9sZ71zOE8= + + Headers/NMFScaleView.h + + 241J5NSGXGMfRqvFNKITyySZT7Q= + + Headers/NMFSymbol.h + + fb3Ttv9/MAZz3p187droDtbQzBg= + + Headers/NMFTileCoverHelper.h + + jOVgEYUjBRxi0JJTv1fsO86s4Jk= + + Headers/NMFTileId.h + + Bjzjq1ma2kNA6JgoXx4xMvFV/1c= + + Headers/NMFTypes.h + + n2a2EnAAlwS82695fZEQQd8jQc0= + + Headers/NMFUtils.h + + I/Kg9AEjCmnMFx55Qse2Br/Vqjc= + + Headers/NMFZoomControlView.h + + vdqZudPr9X3wo2/D34BQRbbGBOo= + + Headers/NMapsMap.h + + 7u1e4KXBAAMKAlAassdK9v/ynzg= + + Headers/NSBundle+NMFAdditions.h + + rW4WLpQueQiezb2mFu5dHnSPe9I= + + Info.plist + + U26Jd2sPElME5E1iTAEyGni8g5Y= + + LICENSE + + jnGN2PEzR1ZNiRvq5bisGIHbcPo= + + Modules/module.modulemap + + DvXhyRK6kp+oM6v6BeKyGZkOHHw= + + NMFIndoorLevelPickerCell.nib/objects-11.0+.nib + + SrTMbvf1mvm11ddvrJzCUmhNK0Y= + + NMFIndoorLevelPickerCell.nib/runtime.nib + + 0NZuudb4LtAmfLr25l+MQXpIgCI= + + NMFIndoorLevelPickerView.nib/objects-11.0+.nib + + uMHOiY9oEC7DErZxsbDwovBgLpw= + + NMFIndoorLevelPickerView.nib/runtime.nib + + l3L46GT/uexRzq1yS1lUGqQ0eaQ= + + NMFInfoWindowDefaultTextSource.nib + + OfWQqft22YXYSZpgNMAiqJIN5Ps= + + NMFNaverMapView.nib/objects-11.0+.nib + + O10hqjXqbyAu3/dfEPpgkt2hVoQ= + + NMFNaverMapView.nib/runtime.nib + + ZXPaU8IdhaUI4IyR+W1RsOU1TKM= + + NMFScaleView.nib + + 9HunQmUYX0FTJlk6srq/xFB6kmE= + + NMFZoomControlView.nib + + /B2wGytywSadRIIGXRcoZcLlHck= + + NOTICE + + 67sFJW1LDxsofqcP6Y5E9gv93SA= + + default.metallib + + Pw0Glja/I2lIcQkBM5AP49ML/IM= + + en.lproj/Foundation.strings + + hash + + +N9505KrWDvzRoDmPQcmIcc8N04= + + optional + + + en.lproj/Localizable.strings + + hash + + MCjlaVGPeu0i4YwsfGJfRB0FIIc= + + optional + + + ja.lproj/Foundation.strings + + hash + + f0SiPjh+MxX6j486ADwCgQHqEPE= + + optional + + + ja.lproj/Localizable.strings + + hash + + nFmbWjsniUELRbtuZfCgHiuUS0U= + + optional + + + ko.lproj/Foundation.strings + + hash + + YeqtAEbw2EB4vVVNlqOT7f8XkyQ= + + optional + + + ko.lproj/Foundation.stringsdict + + hash + + UggkBZ0M9SvLZK8JaIKfDbeAU0Y= + + optional + + + ko.lproj/Localizable.strings + + hash + + jjvpI8J+qrHeqfcVa9apXu6RmlI= + + optional + + + zh-Hans.lproj/Foundation.strings + + hash + + WG18WdfGD90Qu8sYxTivPlWQQiQ= + + optional + + + zh-Hans.lproj/Localizable.strings + + hash + + UvjQcRFlpFvPQxiCKUvIXQT/Ud4= + + optional + + + + files2 + + Assets.car + + hash + + Vy6u648pCzfeXKGogb3BjH/BK6E= + + hash2 + + bwtlMKQPXi/87mKjxhGbjdsTqzmJTlby9NB1bB0A8tE= + + + Base.lproj/Foundation.strings + + hash + + +N9505KrWDvzRoDmPQcmIcc8N04= + + hash2 + + koLb/rTb5D9PMAuGs10dUC7u6dmNwOCfbHnr3us+m7U= + + + Headers/NMCBuilder.h + + hash + + KViKUC1aNh8JA4EGdfM5eeTH8tU= + + hash2 + + uO4jZo29j8pSWUKrDXpd3S9sMGViCB0HtPkYfeDRT4U= + + + Headers/NMCCluster.h + + hash + + MlbYQv80DYz1iVRjx68lMAqq9nQ= + + hash2 + + 9heN+muZ8iCNzVY97qZnPAAJG6ehJd8tDs1iMq7db50= + + + Headers/NMCClusterMarkerInfo.h + + hash + + v+CB1f8Yp9fONgs+XLZW8dOuFoQ= + + hash2 + + 2ExKmmWrq73EIQxfhJJOJr4/ko+u0WNW6sNMGYe2CJk= + + + Headers/NMCClusterMarkerUpdater.h + + hash + + ijeIfZ4UvXk3SBPali7iuHTMEdk= + + hash2 + + Va0RXLDopUMzr1jVTKcHE7SGwkieY3ZPiu9iSwcne5M= + + + Headers/NMCClusterer.h + + hash + + 8SXVB1xBHL153dmg6ECHlpFfW78= + + hash2 + + pgbIBOl5wVADeN8nsoAQb7ubBcrKGM1TGrzIIVrR8ic= + + + Headers/NMCClustererUpdateCallback.h + + hash + + bm6WuPD+1a45e86xqikVNGU7m5o= + + hash2 + + ixEunvn01Z7srp/r0olNQdwV/h+ZAo0DoER4G6PvOE4= + + + Headers/NMCClusteringKey.h + + hash + + eFoZUptL7xO1Ii25Hgy4g/HK7EQ= + + hash2 + + 638bGSbr3s6g1v4MRaC74XjUJU+0Ht3jJ7r7+x+6jBc= + + + Headers/NMCComplexBuilder.h + + hash + + yBTeLovUPsduegc6YAi3vI/kDo4= + + hash2 + + oU054c+OjVS24VD4ffS/GKRm242m2KPRJvoLWFShf6g= + + + Headers/NMCDefaultClusterMarkerUpdater.h + + hash + + ZLvoM5QsSOR9KwVav+T1dq7qJ6Y= + + hash2 + + /mKEe7yOe4KUdpSBT59jmMMJcnqcC/AI3+Bb5XF5mNs= + + + Headers/NMCDefaultDistanceStrategy.h + + hash + + kdxX7c3iXGJ0Fa5Ep6IJ+iFeNpE= + + hash2 + + VhDAIwn44sLGFs7Hwk8yyXrsL+mabiYDCUvMYFHrp7g= + + + Headers/NMCDefaultLeafMarkerUpdater.h + + hash + + uaUQ0gGNeLsKQkg2mz2NCoS+P1c= + + hash2 + + WEqaLrGGGOhfDeVcldx3WBAUa3crvT9Z4T2dGw8Zk1Y= + + + Headers/NMCDefaultMarkerManager.h + + hash + + EkEdunlh9laOljcLt/+qbjfuMMY= + + hash2 + + 0OM8MH3ugqwKaF8zeba2/RVQaOv0WlavF73Av5qGClw= + + + Headers/NMCDefaultPositioningStrategy.h + + hash + + h0kmjPxWPKnx+ISab3AOOSUsOmY= + + hash2 + + nixk+9FeblCjCaw+allH9LEqk8k2l/GPhhUmNMMO/HA= + + + Headers/NMCDefaultTagMergeStrategy.h + + hash + + pAd8UYxlSL9QzZy6/HAbCf8MtLE= + + hash2 + + L52qPs8isduZqYknvw1XUAQ64S/zcTvees7ZI/EMiS8= + + + Headers/NMCDefaultThresholdStrategy.h + + hash + + V3CbqJLVdnzpkKe50Ow/kksO0JI= + + hash2 + + 8QeM8Nao0wBw1OrvcmVShNYndy0G3MJFs/N5n0kHZZc= + + + Headers/NMCDistanceStrategy.h + + hash + + IDBiHK4lal4V8o0/J/VwSh/JgC8= + + hash2 + + TN0TrGppRutJwLfKzzDpuIj2sKCLCDA/2psJfXDfqbw= + + + Headers/NMCLeaf.h + + hash + + 4Jjaeo9J0hXJBUdZcmcVQ44R0vI= + + hash2 + + hMb22j+WsWuRaXwTiq5na1TrY+21B6QgWDJj1QP4hmM= + + + Headers/NMCLeafMarkerInfo.h + + hash + + jkX5fntd4Qu7i1kqfi8fzDaafNU= + + hash2 + + xsUIoGZNFzEswZKT9+XtC/3Pi2BC8PSdDbcsLpKOl6k= + + + Headers/NMCLeafMarkerUpdater.h + + hash + + ZhUNFtPQ4H3rNjOT0Yi1Z0j/4g8= + + hash2 + + dR3gSuikxKyxE4E79uGtxHuEaMb0uDIR2uB32W95x8o= + + + Headers/NMCMarkerInfo.h + + hash + + V0IV1OnE1iZd1KqU7aMkuWp3geQ= + + hash2 + + jzC3xwQQlmxTPpk9geU2meyAEyzCSBEtE4zI32vvhDw= + + + Headers/NMCMarkerManager.h + + hash + + BmTqdq96LKW5IgYa4ezcsq78cw8= + + hash2 + + IS/3nPHevrUNjlmvLpknmJn62PfH+4RpiAWsC0V3y+o= + + + Headers/NMCNode.h + + hash + + 4LDWLvTzZ4OrHgPo7aFGQ22dJvY= + + hash2 + + DbH0od6FB/fKUkO5sL6utCLRodKPQnMcyc781oXIZTY= + + + Headers/NMCPositioningStrategy.h + + hash + + TdPwTZXFlwpMzhjwiE1L8ggDfWY= + + hash2 + + DYxwhIA2DgOn6ZlYrw5REnY+9l4L7D2KljbHRdVNMBc= + + + Headers/NMCTagMergeStrategy.h + + hash + + OIq+28mHeeqN7305zzvwB99rgvY= + + hash2 + + FdZ//DVkOLZEf4xIBhHrlzMsDBXjyoho0cLbj8U756E= + + + Headers/NMCThresholdStrategy.h + + hash + + lC5CQ/3FCny2Vr70HNA36t1o7OY= + + hash2 + + mEq8C8LpmTy/dlAvzKYxZZCaq1J8M2Rzo4LFIciP4fY= + + + Headers/NMFArrowheadPath.h + + hash + + OjxrRKl3s2cikxn4B92Ab4yNUXU= + + hash2 + + 4dguIrkAFwy9B4YzPtYziscWGuL8x/pw8wj+pLhJ9Vg= + + + Headers/NMFAuthManager.h + + hash + + l5uR1eC2jzE6BFAD/3YmrhSH1bY= + + hash2 + + JlZ3xeKR8iOZUl00vGrk3YWYKuXZcdFgv2YxXG7aB04= + + + Headers/NMFCameraCommon.h + + hash + + h/Fdz9JAgNn31hpex1XmEoHv0z0= + + hash2 + + 41iDrKD1VHIQzkPsJLywgvpQIYc1fYPNNzKSUBDrWPU= + + + Headers/NMFCameraPosition.h + + hash + + a+vvs1zVM8aUBFWLOYqc95vbC5s= + + hash2 + + FAkkEZB4dZ5PxEpjqZq7x9Ib/FBTCqlnq2/3UKkkI/g= + + + Headers/NMFCameraUpdate.h + + hash + + xdTYwZAqw7UOAquZAAhZG2OGmjY= + + hash2 + + QSYB0/qg5xn8Uq2VuVUqp6HOTXl49KvnnXa97iifIvY= + + + Headers/NMFCameraUpdateParams.h + + hash + + 77PQJye04Gd7DGbo1JshVR6G+O8= + + hash2 + + Ta1bsaulu7tzzIlIBJSbSCeUt7+8TKQwRIgBO8F1Bzk= + + + Headers/NMFCircleOverlay.h + + hash + + ZIuWtG5EKdZ/UQgxm6VaYP+qg7U= + + hash2 + + /CiLiTUL1I2kVr0dPTdVxEtIgjkVYMNF26GiAZS9J6E= + + + Headers/NMFCompassView.h + + hash + + lwmvT+tox8D08tPMiM2WheDXR5M= + + hash2 + + KE+GrgeSK81WiR1eQrP4/X25Z7je/nlqX+EaDCmFqg0= + + + Headers/NMFFoundation.h + + hash + + cA5WZvYi1R6+iLpiB6CPQsZhC4Q= + + hash2 + + ZWDewJ82LOec8pSH4nfivaDqJLS6ZUg+oYLsb1sMDew= + + + Headers/NMFGeometry.h + + hash + + s/vUNd4ez5+n4k4Z9GRxwwQI6W8= + + hash2 + + TpKhHj3OoNWkgMrxMY6GgUBnhUSkjnCC2y2bTXpn84s= + + + Headers/NMFGroundOverlay.h + + hash + + aj4RiLPJ5O6WhfNdEcCtLbJySzE= + + hash2 + + 6xkIlPY5E1+mFX9K8dn1AWiBXmjhjsS4s6P358JuEqM= + + + Headers/NMFIndoorLevel.h + + hash + + 22dC2uis40CYBb9T6zOPty8p8Kg= + + hash2 + + /f2ygFTahQ5oVkNumK+kn8/8njiqISrspHClw73Tfss= + + + Headers/NMFIndoorLevelPickerView.h + + hash + + veMk4EFX/CtD1HFpNy+/aLYyjNk= + + hash2 + + N3PtW4zE3SKqs8NZ+lhFa39P7s94uw3RDwVH6RE7ILU= + + + Headers/NMFIndoorRegion.h + + hash + + V5oDF9anzp7bfiLDJ7GWELh2Wsw= + + hash2 + + Mf0gzONyUItJe5lcMCWDpAORbDfrsxxv9+MuQ9i3fP8= + + + Headers/NMFIndoorSelection.h + + hash + + o9L5YDXbuvNZ8LVm4u/CJmDdBMA= + + hash2 + + vMQ3whcO/5Uuck3yTmM3qVbBVrtd9h6JGpLRV7oK9qo= + + + Headers/NMFIndoorSelectionDelegate.h + + hash + + LfqtjNK5XuRnRudBfEXie5jntaM= + + hash2 + + MT22WTvxHCs1BQwcuF6jx+IJpCJYBm5IAJD9tU4u0hY= + + + Headers/NMFIndoorView.h + + hash + + tqX0xhE+gE8/BQhLyseUlT4/m4w= + + hash2 + + aE6VTVzxK9O8X41FfodgEh0pF0Q4nXtWcrofZCrioLY= + + + Headers/NMFIndoorZone.h + + hash + + dIdB8vkTJIevMglL+Y6SqhKsnqQ= + + hash2 + + 6u326KQPz+IaUQICdSx6hUtFvljw9p7zKIzRBNpcIb4= + + + Headers/NMFInfoWindow.h + + hash + + dDBIMDhqquE28U3sQxOrqSZTJBg= + + hash2 + + 9qdWry3ILPnBjBHF1SwpHSXgWQXqCHQl5nYxNccK8S4= + + + Headers/NMFInfoWindowDefaultTextSource.h + + hash + + zDULkCqsDWMYuK7ogdVrzn+9wZw= + + hash2 + + ro2BRbukMfauS68t/XIM9yvtEFwboJ9qGeQ+9tuOiFI= + + + Headers/NMFLocationButton.h + + hash + + KYapW0BcSwb4gjaTaHK8cz8OIA0= + + hash2 + + G/whhtDA05BGI9g/kMpF15TDQKusUYpbDQfO+u5QyeI= + + + Headers/NMFLocationManager.h + + hash + + BMwppcyCzd0aYWbk5W7pMxSMkeU= + + hash2 + + GhkWZmOzwRitc+bWPfMLaVi8iweyn4ymUGWeVThnXxk= + + + Headers/NMFLocationOverlay.h + + hash + + 94TFCkQN/uBLJTPRmVdAzYbb0EI= + + hash2 + + 7tblZIt50lswPG/FBkKFZjZ7S4EGdeyEsWlLGR+9Ob4= + + + Headers/NMFMapView+IBAdditions.h + + hash + + ilosiKCkHvDBzsn/bniEFqjLFd0= + + hash2 + + +7RymmEi7yUMGKYc+g+3bRn9/U2+8q/BwhYzhn0ncGU= + + + Headers/NMFMapView.h + + hash + + avPv9QcanT9xTtffWy3s84ggnl0= + + hash2 + + Y6Jyzp005uRrjiPczjVpWgYeGW/LjVVanbEPaN7VO+o= + + + Headers/NMFMapViewCameraDelegate.h + + hash + + VlaX4O06W18a52CM33fiRWuJSZo= + + hash2 + + tLhvXTSAMIuERAX0PZAZUuh/FES/6X2pdjXP3tz8MRo= + + + Headers/NMFMapViewDelegate.h + + hash + + uUQhHqlevszbM0L+wun97dPImog= + + hash2 + + dTpTjS9d4o98kR10oGcKdd92ty99+GujOdRN/6rV8RI= + + + Headers/NMFMapViewOptionDelegate.h + + hash + + JZMVNfYO++SgkttWQ43lHAkLzpE= + + hash2 + + QA6GGPnRxA3rY0wAMP7YN+oxmtPKZwjaJLwX5YO/FdY= + + + Headers/NMFMapViewTouchDelegate.h + + hash + + WQqPdnksVe79e1jreDbg7gXRs4U= + + hash2 + + MElHVPERfFGdHqMZ3Mxs/1gsO1ulHAi0etOcyMpsrlw= + + + Headers/NMFMarker.h + + hash + + QEgVNMdQ3SxY6LjgMhTOqo+JJkI= + + hash2 + + bDm4p65432GwKz5bMWtX/yJGsGqaLubIpmIOEAE78dk= + + + Headers/NMFMarkerConstants.h + + hash + + I3OBbmPNF6cPL1GeOf+wKL+UG80= + + hash2 + + KUaiFvwr9SUMXU+ugQ5c2sxYJJjGGe030XSj2mKMbEM= + + + Headers/NMFMultipartPath.h + + hash + + 8v5YnXL0pYH5X3q1i4x791gJ7K4= + + hash2 + + v2rn5ofU+bWhPJSDjro/mWpyVqIFZTn02eunVX6Jm+I= + + + Headers/NMFMyPositionMode.h + + hash + + mdMYIPai45r9jSKrAxJmUCtu4Cs= + + hash2 + + heKQmk6ex6XvOlkM26GkqZ7sZ8fdBo3qpTcBhm115x0= + + + Headers/NMFNaverMapView.h + + hash + + fzfYUUGqssEVRXNEuW7u9e5bkyU= + + hash2 + + BTuD1PJOGZh/I1kbozFKAgzxd1T9S30EMwy6GUaEndA= + + + Headers/NMFOfflinePack.h + + hash + + 5IB0WgygKWLSzebs4ERzWHFJ2VE= + + hash2 + + CvHllQFb8GvV1YW+gMyakuVB8cGPKX0YrLpqZtbXECg= + + + Headers/NMFOfflineRegion.h + + hash + + yiYOgsLeMyi3RIzu+IvpOEiHZoc= + + hash2 + + slvWDyNgRwcM5w7oXa98jcSR6hXJzj4ILcMv+Wou8z4= + + + Headers/NMFOfflineStorage.h + + hash + + TxYkPwy027fNM988XXqVw3leLdc= + + hash2 + + n6y48P2mTxkiBwC8PAFA20ok4O/GxGBy9EdLMF6WnXk= + + + Headers/NMFOverlay.h + + hash + + WjHqmbFEbAMrtJKi9Z9bTwANAX8= + + hash2 + + QaYvK8/30V0gIXcM9DQ8GM3YgK57Bx0XgPoUUd4iMec= + + + Headers/NMFOverlayImage.h + + hash + + n7QtPm4jRX5nXx40Q/EXWXHhwyw= + + hash2 + + OuNqzFvSkHdftpX6nFBhJrLNIE7oA+ES6D1wEc91RM8= + + + Headers/NMFPath.h + + hash + + gw3qqsSEt//g/2yv3zqlt3ZCre8= + + hash2 + + 6XqgOYEUVvDmDwypfqxdsZ8ruwrs5ZRXBrKNVy30Jxs= + + + Headers/NMFPathColor.h + + hash + + p6oIi2eYnE5ryw4JQMWlE6zCY+4= + + hash2 + + qpIn3+jgoNi3PTd+heDMLGw/mG5q+WGVP+9ENv+gPUo= + + + Headers/NMFPickable.h + + hash + + aoj/Q64cJiEJcUeebv/4NFkY40U= + + hash2 + + jkEI6AZFeAX++J2VQj920WSZd5qL8rn5lTj6CZ83+wg= + + + Headers/NMFPolygonOverlay.h + + hash + + 8FL6W8gmnWWBQS0q1yZneygIe2U= + + hash2 + + gwmlUsmrpU0l9I84gZjJRulqBBaEeMKkPAXRg4rPxN0= + + + Headers/NMFPolylineOverlay.h + + hash + + a2rGkocauJvD33Q8k8Q7qzNPVZI= + + hash2 + + 41LVeTAf23IKLadPmE6bZ5rsXB43ZSYakfg/eBjZomw= + + + Headers/NMFProjection.h + + hash + + 484wdTrlMIGqk79533FQJQ2yheI= + + hash2 + + 8wNDBZ6YqyzbMOaApqWzPSzP8H+Ic2eXzxRj5/vR9t4= + + + Headers/NMFRendererOptions.h + + hash + + 4QLUKLFJYV1MN/rVLu9sZ71zOE8= + + hash2 + + 1f3hK3AWAuhaHv/jOqVlWwzx+7jCXvfu+MGGSPeOp9Y= + + + Headers/NMFScaleView.h + + hash + + 241J5NSGXGMfRqvFNKITyySZT7Q= + + hash2 + + c9iFwG50FHm7L+F8/Ce3EHWnUt7Ojx5AvZKjlRFueyM= + + + Headers/NMFSymbol.h + + hash + + fb3Ttv9/MAZz3p187droDtbQzBg= + + hash2 + + fkWM+qRUfQLi+l97ARs9TvtWZu0UoGALbnkys7Rq1M8= + + + Headers/NMFTileCoverHelper.h + + hash + + jOVgEYUjBRxi0JJTv1fsO86s4Jk= + + hash2 + + McWj1a6DzlvsbnqlucvN3jyFMcFg6g+zKYjtPRKUrP0= + + + Headers/NMFTileId.h + + hash + + Bjzjq1ma2kNA6JgoXx4xMvFV/1c= + + hash2 + + k9gSgE640AZcQw9R/AUbCKGwS+iILrF6So3fhXyQPqU= + + + Headers/NMFTypes.h + + hash + + n2a2EnAAlwS82695fZEQQd8jQc0= + + hash2 + + gbm5T2Q6SQTYRMP/T+guiSjCIDt7e6HW7IW1E3I4ahg= + + + Headers/NMFUtils.h + + hash + + I/Kg9AEjCmnMFx55Qse2Br/Vqjc= + + hash2 + + gsnlbKnuxlK4805Bcg3mTb8nvQTaCVdJfSXHKV9E30k= + + + Headers/NMFZoomControlView.h + + hash + + vdqZudPr9X3wo2/D34BQRbbGBOo= + + hash2 + + 9JJpxjILlXFapxmH9x+RJKUZpiOm/0lpMRNiBrHS7dI= + + + Headers/NMapsMap.h + + hash + + 7u1e4KXBAAMKAlAassdK9v/ynzg= + + hash2 + + wsTFQZc63GI+eTZcI6TE1DHkgz/rk8jlvDRur5dF6bQ= + + + Headers/NSBundle+NMFAdditions.h + + hash + + rW4WLpQueQiezb2mFu5dHnSPe9I= + + hash2 + + K1PnjGWMZA8hT4dsprQl50iXo96atS4TDZV49bp4/PI= + + + LICENSE + + hash + + jnGN2PEzR1ZNiRvq5bisGIHbcPo= + + hash2 + + 4MtWhIm+V1uRs5di0HEGAQFgnxKcDU4Cp08BnpaDkmM= + + + Modules/module.modulemap + + hash + + DvXhyRK6kp+oM6v6BeKyGZkOHHw= + + hash2 + + 6n5usJ4xU1rrOnPymfNm8DApTIWHDAFzXsqrh8ShtnE= + + + NMFIndoorLevelPickerCell.nib/objects-11.0+.nib + + hash + + SrTMbvf1mvm11ddvrJzCUmhNK0Y= + + hash2 + + vu5SIJmYtFdJhIoYN9Fyo1PE/t7PVeT6EGCTrmfq5dQ= + + + NMFIndoorLevelPickerCell.nib/runtime.nib + + hash + + 0NZuudb4LtAmfLr25l+MQXpIgCI= + + hash2 + + O9dsJ8BDgmEuoZPGN5oy11RxfSb4b5i1Qw7dB9l1mLo= + + + NMFIndoorLevelPickerView.nib/objects-11.0+.nib + + hash + + uMHOiY9oEC7DErZxsbDwovBgLpw= + + hash2 + + B7T8KtoSYpCXyb6DgOz8DjZ227zHOo3YiIuWNdUYgbo= + + + NMFIndoorLevelPickerView.nib/runtime.nib + + hash + + l3L46GT/uexRzq1yS1lUGqQ0eaQ= + + hash2 + + g6BaKNp+qQWXpCM2YlL+yr7q6ZIba3d1o3mZgzWqBS8= + + + NMFInfoWindowDefaultTextSource.nib + + hash + + OfWQqft22YXYSZpgNMAiqJIN5Ps= + + hash2 + + U2He/sJJ+j7JV+qFnP+zYzficZ2NJ/IwhYTP6fqyIcU= + + + NMFNaverMapView.nib/objects-11.0+.nib + + hash + + O10hqjXqbyAu3/dfEPpgkt2hVoQ= + + hash2 + + pUZ7sBWlk4Ps7FLz8wygRyWJDsrOQwrph1ULI09XBMM= + + + NMFNaverMapView.nib/runtime.nib + + hash + + ZXPaU8IdhaUI4IyR+W1RsOU1TKM= + + hash2 + + sDzE2YSlnn5zGS+rD0aWLK3ceVWtCifjNCobhqQtCKM= + + + NMFScaleView.nib + + hash + + 9HunQmUYX0FTJlk6srq/xFB6kmE= + + hash2 + + l904OL1dhgCuqTF6NaS9I6CMvLf1Wrjmc6Amd+F5FWc= + + + NMFZoomControlView.nib + + hash + + /B2wGytywSadRIIGXRcoZcLlHck= + + hash2 + + MsaTtWfLgxM8AKM7506elbyWWhj8eN4BbB9QepA8CeM= + + + NOTICE + + hash + + 67sFJW1LDxsofqcP6Y5E9gv93SA= + + hash2 + + KuQaxf6soaLfEq4hJMQnVC+2cdIDRndA3mi1KALLmLA= + + + default.metallib + + hash + + Pw0Glja/I2lIcQkBM5AP49ML/IM= + + hash2 + + UCns2FNUACLCjGCL9bYF6vkAFx+KLmc3MGr5Fj9rQ4k= + + + en.lproj/Foundation.strings + + hash + + +N9505KrWDvzRoDmPQcmIcc8N04= + + hash2 + + koLb/rTb5D9PMAuGs10dUC7u6dmNwOCfbHnr3us+m7U= + + optional + + + en.lproj/Localizable.strings + + hash + + MCjlaVGPeu0i4YwsfGJfRB0FIIc= + + hash2 + + cvTkhsotq03TN6I9tJza2N43xrcxuQJWJ/5IH3S/HCA= + + optional + + + ja.lproj/Foundation.strings + + hash + + f0SiPjh+MxX6j486ADwCgQHqEPE= + + hash2 + + 1nqt292485MUtBsKb7YLZpCsV9kxacCj93HTOUcIKTE= + + optional + + + ja.lproj/Localizable.strings + + hash + + nFmbWjsniUELRbtuZfCgHiuUS0U= + + hash2 + + +z4zSYHSmS0jpA9Y0gOXvwe+7Cvqzt/ZsBGiy/HTj4M= + + optional + + + ko.lproj/Foundation.strings + + hash + + YeqtAEbw2EB4vVVNlqOT7f8XkyQ= + + hash2 + + Y1PFDaXiS5rWO/I5yamsxxMs02WsbM4HpyE06oQuvKI= + + optional + + + ko.lproj/Foundation.stringsdict + + hash + + UggkBZ0M9SvLZK8JaIKfDbeAU0Y= + + hash2 + + 7y0jdwBYhTGLy+ibkiXhm/cbsz7tHDxc0NPpAfpPHfQ= + + optional + + + ko.lproj/Localizable.strings + + hash + + jjvpI8J+qrHeqfcVa9apXu6RmlI= + + hash2 + + UxXfAk76OoTgacN290yFDujM7SlfvM/DGEchbh/oVBw= + + optional + + + zh-Hans.lproj/Foundation.strings + + hash + + WG18WdfGD90Qu8sYxTivPlWQQiQ= + + hash2 + + cOo/VxQrVe99v4m9yDq59bE4S8zGP6gLBtxHZQMCtRM= + + optional + + + zh-Hans.lproj/Localizable.strings + + hash + + UvjQcRFlpFvPQxiCKUvIXQT/Ud4= + + hash2 + + IyxJbLMSQXUl5X2Mw8AtznytqkDVIAQGHiSi3d7pmRg= + + optional + + + + rules + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Base\.lproj/ + + weight + 1010 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/default.metallib b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/default.metallib new file mode 100644 index 00000000..22860b99 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/default.metallib differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Foundation.strings new file mode 100644 index 00000000..9cbcebb1 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Localizable.strings new file mode 100644 index 00000000..f14ddd0a Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/en.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Foundation.strings new file mode 100644 index 00000000..3b372bd8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Localizable.strings new file mode 100644 index 00000000..1600f824 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ja.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.strings new file mode 100644 index 00000000..f8850ef8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.stringsdict b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.stringsdict new file mode 100644 index 00000000..bf13a004 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Foundation.stringsdict differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Localizable.strings new file mode 100644 index 00000000..8d7050e8 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/ko.lproj/Localizable.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Foundation.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Foundation.strings new file mode 100644 index 00000000..6962f5e2 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Foundation.strings differ diff --git a/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Localizable.strings b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Localizable.strings new file mode 100644 index 00000000..552a35d5 Binary files /dev/null and b/Frameworks/NMapsMap/NMapsMap.xcframework/ios-arm64_x86_64-simulator/NMapsMap.framework/zh-Hans.lproj/Localizable.strings differ diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..e925cbc7 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Pepsi-Club + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Makefile b/Makefile index d13818cf..1fe9497e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,12 @@ -generate: - tuist fetch - tuist generate +open_plist: + open -a Xcode Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/InfoPlist.swift +open_config: + open -a Xcode Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/XCConfig.swift + +clean_xcode: + rm -rf ~/Library/Developer/Xcode/DerivedData/* + clean: rm -rf **/**/**/*.xcodeproj rm -rf **/**/*.xcodeproj @@ -11,22 +16,12 @@ clean: rm -rf **/**/Derived/ rm -rf **/Derived/ rm -rf Derived/ + +clean_all: + make clean + make clean_xcode -reset: - tuist clean - rm -rf **/**/**/*.xcodeproj - rm -rf **/**/*.xcodeproj - rm -rf **/*.xcodeproj - rm -rf *.xcworkspace - -regenerate: - rm -rf **/**/**/*.xcodeproj - rm -rf **/**/*.xcodeproj - rm -rf **/*.xcodeproj - rm -rf *.xcworkspace - tuist generate - -BASE_URL = https://raw.githubusercontent.com/Pepsi-Club/BusComing-ignored/main +BASE_URL = https://raw.githubusercontent.com/Pepsi-Club/WhereMyBus-ignored/main define download_file @echo "Downloading $(3) to $(1) using token: $(2)" @@ -36,11 +31,19 @@ endef .PHONY: download-privates -download-privates: download-xcconfigs download-env +download-privates: download-xcconfigs download-env download-googleinfo download-xcconfigs: - $(call download_file, XCConfig, $(token),Debug.xcconfig) - $(call download_file, XCConfig, $(token),Release.xcconfig) + $(call download_file, XCConfig, $(token),Secrets_Debug.xcconfig) + $(call download_file, XCConfig, $(token),Secrets_Release.xcconfig) + $(call download_file, XCConfig, $(token),App_Debug.xcconfig) + $(call download_file, XCConfig, $(token),App_Release.xcconfig) + $(call download_file, XCConfig, $(token),App_Common.xcconfig) + $(call download_file, XCConfig, $(token),Widget_Debug.xcconfig) + $(call download_file, XCConfig, $(token),Widget_Release.xcconfig) download-env: - $(call download_file, fastlane, $(token),.env) \ No newline at end of file + $(call download_file, fastlane, $(token),.env) + +download-googleinfo: + $(call download_file, Projects/App/Resources, $(token),GoogleService-Info.plist) diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+Module.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+Module.swift index b8669a39..a97141f1 100644 --- a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+Module.swift +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+Module.swift @@ -14,7 +14,8 @@ public extension TargetDependency { static let core: Self = .module(name: "Core") static let data: Self = .module(name: "Data") static let domain: Self = .module(name: "Domain") - static let networks: Self = .module(name: "Networks") + static let networkService: Self = .module(name: "NetworkService") + static let coreDataService: Self = .module(name: "CoreDataService") static let designSystem: Self = .module(name: "DesignSystem") static let thirdPartyLibs: Self = .module(name: "ThirdPartyLibs") diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyExternal.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyExternal.swift index 0ba40635..ef044fa6 100644 --- a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyExternal.swift +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyExternal.swift @@ -8,16 +8,19 @@ import ProjectDescription public extension Array { - enum ThirdPartyExternal: CaseIterable { - case rxCocoa, kakaoMap + static let thirdPartyExternal = ThirdPartyExternal.allCases + .map { + Element.external(name: $0.name) + } + + enum ThirdPartyExternal: String, CaseIterable { + case rxCocoa public var name: String { - switch self { - case .rxCocoa: - return "RxCocoa" - case .kakaoMap: - return "KakaoMapsSDK_SPM" - } + var name = rawValue.map { $0 } + name.removeFirst() + name.insert(Character(rawValue.first!.uppercased()), at: 0) + return "\(String(name))" } } } diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyRemote.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyRemote.swift index ad5a18f2..e3707fe9 100644 --- a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyRemote.swift +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Dependency+ThirdPartyRemote.swift @@ -14,14 +14,12 @@ public extension Array { public extension Array.ThirdPartyRemote { enum SPM: CaseIterable { - case rxSwift, kakaoMap + case rxSwift public var url: String { switch self { case .rxSwift: return "https://github.com/ReactiveX/RxSwift" - case .kakaoMap: - return "https://github.com/kakao-mapsSDK/KakaoMapsSDK-SPM" } } @@ -29,8 +27,6 @@ public extension Array.ThirdPartyRemote { switch self { case .rxSwift: return "6.0.0" - case .kakaoMap: - return "2.6.3" } } } diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Depondency+ThirdPartyXCFramework.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Depondency+ThirdPartyXCFramework.swift new file mode 100644 index 00000000..171987e3 --- /dev/null +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/Depondency+ThirdPartyXCFramework.swift @@ -0,0 +1,36 @@ +// +// Depondency+ThirdPartyXCFramework.swift +// DependencyPlugin +// +// Created by gnksbm on 3/30/24. +// + +import Foundation +import ProjectDescription + +public extension Array { + static let thirdPartyXCFramework = ThirdPartyXCFramework.allCases + .map { + $0.toXcFramework() + } + + enum ThirdPartyXCFramework: String, CaseIterable { + case nMapsGeometry = "NMapsGeometry" + case nMapsMap = "NMapsMap" + + var additionalPath: String { + switch self { + case .nMapsMap, .nMapsGeometry: + return "NMapsMap/" + } + } + + public func toXcFramework() -> Element { + .xcframework( + path: .relativeToRoot( + "Frameworks/\(additionalPath)\(rawValue).xcframework" + ) + ) + } + } +} diff --git a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Environment.swift b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Environment.swift index 8294db80..334bbbb2 100644 --- a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Environment.swift +++ b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Environment.swift @@ -9,24 +9,27 @@ import Foundation import ProjectDescription public extension String { - static let appName: Self = "BusComing" + static let appName: Self = "WhereMyBus" static let displayName: Self = "버스어디" static let organizationName = "Pepsi-Club" + static let teamId = "T4W7695R5C" /// 앱스토어에 게시할 때마다 증가해줘야 하는 버전 - static let marketingVersion: Self = "1" + static let marketingVersion: Self = "1.2.0" /// 개발자가 내부적으로 확인하기 위한 용도 (날짜를 사용하기도 함 - 2023.12.8.1 ) static var buildVersion: Self { - "1.0" + let date = Date() + let formatter = DateFormatter() + formatter.dateFormat = "yyyy.MM.dd.HH.mm" + return formatter.string(from: date) } } - public extension String { static let bundleID: Self = "com.\(organizationName).\(appName)" static let targetVersion: Self = "16.0" } -extension InfoPlist.Value { +extension Plist.Value { static let bundleDisplayName: Self = .string(.displayName) static let bundleShortVersionString: Self = .string(.marketingVersion) static let bundleVersion: Self = .string(.buildVersion) diff --git a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/InfoPlist.swift b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/InfoPlist.swift index f9a8c7a9..d82177a8 100644 --- a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/InfoPlist.swift +++ b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/InfoPlist.swift @@ -18,6 +18,24 @@ public extension InfoPlist { newValue } ) + + static func demoAppInfoPlist(name: String) -> Self { + .extendingDefault( + with: .baseInfoPlist + .merging(.additionalInfoPlist) { oldValue, newValue in + newValue + } + .merging(.secrets) { oldValue, newValue in + newValue + } + .merging([ + "CFBundleDisplayName": "\(name)" + ]) { oldValue, newValue in + newValue + } + ) + } + static let frameworkInfoPlist: Self = .extendingDefault( with: .framework .merging(.secrets) { oldValue, newValue in @@ -26,12 +44,17 @@ public extension InfoPlist { ) } -public extension [String: InfoPlist.Value] { +public extension [String: Plist.Value] { static let secrets: Self = [ - "SERVER_KEY": "$(SERVER_KEY)" + "DATA_GO_KR_API_KEY": "$(DATA_GO_KR_API_KEY)", + "NMFClientId": "$(NAVERMAP_CLIENT_ID)", + "TERMS_OF_PRIVACY_URL": "$(TERMS_OF_PRIVACY_URL)", + "LOCATION_PRIVACY_URL": "$(LOCATION_PRIVACY_URL)", + "INQURY_URL": "$(INQURY_URL)" ] static let additionalInfoPlist: Self = [ + "FirebaseAppDelegateProxyEnabled": false, "ITSAppUsesNonExemptEncryption": "NO", "NSAppTransportSecurity": [ "NSExceptionDomains": [ @@ -40,7 +63,15 @@ public extension [String: InfoPlist.Value] { "NSExceptionAllowsInsecureHTTPLoads": true, ] ] - ] + ], + "UIBackgroundModes": [ + "fetch", + "processing", + "remote-notification" + ], + "BGTaskSchedulerPermittedIdentifiers" : [.string(.bundleID)], + "NSLocationWhenInUseUsageDescription" : "주변 정류장을 찾기 위해 권한이 필요합니다.", + "NSLocationAlwaysAndWhenInUseUsageDescription" : "주변 정류장을 찾기 위해 권한이 필요합니다." ] static let baseInfoPlist: Self = [ @@ -59,6 +90,45 @@ public extension [String: InfoPlist.Value] { ] ] ], + "UISupportedInterfaceOrientations": ["UIInterfaceOrientationPortrait"], + ] + + static let notificationInfoPlist: Self = [ + "DATA_GO_KR_API_KEY": "$(DATA_GO_KR_API_KEY)", + "CFBundleShortVersionString": .bundleShortVersionString, + "CFBundleVersion": .bundleVersion, + "CFBundleDisplayName": .bundleDisplayName, + "NSExtension": [ + "NSExtensionPointIdentifier": "com.apple.usernotifications.service", + "NSExtensionPrincipalClass": "$(PRODUCT_MODULE_NAME).NotificationService" + ], + "NSAppTransportSecurity": [ + "NSExceptionDomains": [ + "ws.bus.go.kr": [ + "NSIncludesSubdomains": true, + "NSExceptionAllowsInsecureHTTPLoads": true, + ] + ] + ], + ] + + static let widgetInfoPlist: Self = [ + "DATA_GO_KR_API_KEY": "$(DATA_GO_KR_API_KEY)", + "CFBundleShortVersionString": .bundleShortVersionString, + "CFBundleVersion": .bundleVersion, + "CFBundleDisplayName": .bundleDisplayName, + "CFBundlePackageType": "$(PRODUCT_BUNDLE_PACKAGE_TYPE)", + "NSExtension": [ + "NSExtensionPointIdentifier": "com.apple.widgetkit-extension", + ], + "NSAppTransportSecurity": [ + "NSExceptionDomains": [ + "ws.bus.go.kr": [ + "NSIncludesSubdomains": true, + "NSExceptionAllowsInsecureHTTPLoads": true, + ] + ] + ], ] static let framework: Self = [ @@ -68,7 +138,7 @@ public extension [String: InfoPlist.Value] { "CFBundleInfoDictionaryVersion": "6.0", "CFBundleName": "$(PRODUCT_NAME)", "CFBundlePackageType": "FMWK", - "CFBundleShortVersionString": "1.0", - "CFBundleVersion": "1", + "CFBundleShortVersionString": .bundleShortVersionString, + "CFBundleVersion": .bundleVersion, ] } diff --git a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Scheme.swift b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Scheme.swift index b1753280..35e501d7 100644 --- a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Scheme.swift +++ b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/Scheme.swift @@ -15,16 +15,32 @@ public extension Scheme { buildAction: .buildAction(targets: ["\(name)"]), testAction: .targets( ["\(name)Tests"], - configuration: "Debug", + configuration: .debug, options: .options( coverage: true, codeCoverageTargets: ["\(name)"] ) ), - runAction: .runAction(configuration: "Debug"), - archiveAction: .archiveAction(configuration: "Debug"), - profileAction: .profileAction(configuration: "Debug"), - analyzeAction: .analyzeAction(configuration: "Debug") + runAction: .runAction(configuration: .debug), + archiveAction: .archiveAction(configuration: .release) + ) + } + + static func uiTestsScheme(name: String) -> Self { + Scheme( + name: "\(name)UITests", + shared: true, + buildAction: .buildAction(targets: ["\(name)"]), + testAction: .targets( + ["\(name)UITests"], + configuration: .debug, + options: .options( + coverage: true, + codeCoverageTargets: ["\(name)UITests"] + ) + ), + runAction: .runAction(configuration: .debug), + archiveAction: .archiveAction(configuration: .release) ) } } diff --git a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/XCConfig.swift b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/XCConfig.swift index b9be8f46..d3614258 100644 --- a/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/XCConfig.swift +++ b/Plugins/EnvironmentPlugin/ProjectDescriptionHelpers/XCConfig.swift @@ -9,33 +9,37 @@ import ProjectDescription public extension Settings { static let appDebug: Self = .settings( - base: .allLoadSetting + base: .baseSetting .setVersion() .setCodeSignManual() - .setProvisioning(), + .setProvisioning() + .setUserScriptSandboxing() + .setClangModuleDebugging(), configurations: [ .debug( name: .debug, - xcconfig: .relativeToRoot("XCConfig/Debug.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Debug.xcconfig") ), .release( name: .release, - xcconfig: .relativeToRoot("XCConfig/Release.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Release.xcconfig") ), ], defaultSettings: .recommended ) static let frameworkDebug: Self = .settings( - base: .baseSetting, + base: .baseSetting + .setUserScriptSandboxing() + .setClangModuleDebugging(), configurations: [ .debug( name: .debug, - xcconfig: .relativeToRoot("XCConfig/Debug.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Debug.xcconfig") ), .release( name: .release, - xcconfig: .relativeToRoot("XCConfig/Release.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Release.xcconfig") ), ], defaultSettings: .recommended @@ -50,11 +54,11 @@ public extension Settings { configurations: [ .debug( name: .debug, - xcconfig: .relativeToRoot("XCConfig/Debug.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Debug.xcconfig") ), .release( name: .release, - xcconfig: .relativeToRoot("XCConfig/Release.xcconfig") + xcconfig: .relativeToRoot("XCConfig/App_Release.xcconfig") ), ], defaultSettings: .recommended @@ -64,15 +68,7 @@ public extension Settings { public extension SettingsDictionary { static let baseSetting: Self = [ "OTHER_LDFLAGS" : [ - "$(inherited)", - "-ObjC" - ] - ] - - static let allLoadSetting: Self = [ - "OTHER_LDFLAGS" : [ - "$(inherited) -all_load", - "-Xlinker -interposable" + "$(inherited) -ObjC", ] ] @@ -107,9 +103,25 @@ public extension SettingsDictionary { merging( [ "CODE_SIGN_STYLE": .string("Manual"), - "DEVELOPMENT_TEAM": .string("ASU4PNB5MG"), + "DEVELOPMENT_TEAM": .string(.teamId), "CODE_SIGN_IDENTITY": .string("$(CODE_SIGN_IDENTITY)") ] ) } + + func setUserScriptSandboxing() -> SettingsDictionary { + merging( + [ + "ENABLE_USER_SCRIPT_SANDBOXING": .string("NO"), + ] + ) + } + + func setClangModuleDebugging() -> SettingsDictionary { + merging( + [ + "CLANG_ENABLE_MODULE_DEBUGGING": .string("YES"), + ] + ) + } } diff --git a/Projects/App/App.entitlements b/Projects/App/App.entitlements new file mode 100644 index 00000000..665f431f --- /dev/null +++ b/Projects/App/App.entitlements @@ -0,0 +1,20 @@ + + + + + aps-environment + development + com.apple.developer.icloud-container-identifiers + + iCloud.Pepsi-Club.WhereMyBus + + com.apple.developer.icloud-services + + CloudKit + + com.apple.security.application-groups + + group.Pepsi-Club.WhereMyBus + + + diff --git a/Projects/App/NotificationExtension/NotificationService.swift b/Projects/App/NotificationExtension/NotificationService.swift new file mode 100644 index 00000000..d8f7a5cf --- /dev/null +++ b/Projects/App/NotificationExtension/NotificationService.swift @@ -0,0 +1,99 @@ +// +// NotificationService.swift +// NotificationExtension +// +// Created by gnksbm on 3/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UserNotifications + +import Data +import Domain +import NetworkService + +import RxSwift + +class NotificationService: UNNotificationServiceExtension { + var contentHandler: ((UNNotificationContent) -> Void)? + var bestAttemptContent: UNMutableNotificationContent? + + private let repository = DefaultBusStopArrivalInfoRepository( + networkService: DefaultNetworkService() + ) + private let disposeBag = DisposeBag() + + override func didReceive( + _ request: UNNotificationRequest, + withContentHandler contentHandler + : @escaping (UNNotificationContent) -> Void + ) { + self.contentHandler = contentHandler + bestAttemptContent = ( + request.content.mutableCopy() as? UNMutableNotificationContent + ) + guard let userInfo = bestAttemptContent?.userInfo, + let busStopId = userInfo["busStopId"] as? String, + let busId = userInfo["busId"] as? String, + let bestAttemptContent + else { return } + repository.fetchArrivalList(busStopId: busStopId) + .subscribe( + onNext: { response in + guard let bus = response.buses.first( + where: { busResponse in + busResponse.busId == busId + } + ) + else { return } + let busStopName = response.busStopName + let firstArrivalTime = bus.firstArrivalState.toString + let secondArrivalTime = bus.secondArrivalState.toString + let routeMessage: String + let remainingMessage: String + let firstLine: String + var secondLine: String + switch secondArrivalTime { + case "곧 도착": + secondLine = "다음 버스는 곧 도착해요." + case "운행종료": + secondLine = "다음 버스는 운행이 종료되었어요." + case "출발대기": + secondLine = "다음 버스는 출발 대기 중이에요." + default: + secondLine = "다음 버스는 \(secondArrivalTime)에 도착해요." + } + switch bus.firstArrivalState.toString { + case "곧 도착": + routeMessage = "\(bus.busName)번 버스가 \(busStopName)에" + remainingMessage = "곧 도착해요." + case "운행종료": + routeMessage = "\(bus.busName)번 버스는" + remainingMessage = "운행이 종료 되었어요." + secondLine = "" + case "출발대기": + routeMessage = "\(bus.busName)번 버스는" + remainingMessage = "출발 대기 중 이에요." + secondLine = "" + default: + routeMessage = "\(bus.busName)번 버스가 \(busStopName)에" + remainingMessage = "\(firstArrivalTime)에 도착해요." + } + firstLine = "\(routeMessage) \(remainingMessage)" + let body = [firstLine, secondLine].joined(separator: " ") + if let appName = Bundle.main.object( + forInfoDictionaryKey: "CFBundleDisplayName" + ) as? String { + bestAttemptContent.title = appName + } + bestAttemptContent.subtitle = "" + bestAttemptContent.body = body + contentHandler(bestAttemptContent) + } + ) + .disposed(by: disposeBag) + } + + override func serviceExtensionTimeWillExpire() { + } +} diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift index 07ec31d5..6c5680b8 100644 --- a/Projects/App/Project.swift +++ b/Projects/App/Project.swift @@ -5,9 +5,39 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "App", moduleType: .app, + entitlementsPath: .relativeToManifest("App.entitlements"), hasResource: true, + appExtensionTarget: [ +// Project.appExtensionTarget( +// name: "Widget", +// plist: .extendingDefault( +// with: .widgetInfoPlist +// ), +// resources: [ +// "Resources/Model.xcdatamodeld", +// "Resources/total_stationList.json", +// "Widget/Resources/**", +// ], +// entitlements: .file( +// path: .relativeToRoot( +// "Projects/App/Widget.entitlements" +// ) +// ), +// dependencies: [ +// .mainFeature, +// .data, +// ] +// ) + ], + packages: [ + .remote( + url: "https://github.com/firebase/firebase-ios-sdk", + requirement: .exact("10.23.1") + ) + ], dependencies: [ .mainFeature, .data, + .package(product: "FirebaseMessaging"), ] ) diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 00000000..f0d1f720 Binary files /dev/null and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index 1ca356f7..cff1680b 100644 --- a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,7 +1,7 @@ { "images" : [ { - "filename" : "yamyampick_icon.jpg", + "filename" : "1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/yamyampick_icon.jpg b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/yamyampick_icon.jpg deleted file mode 100644 index a8531a2a..00000000 Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/yamyampick_icon.jpg and /dev/null differ diff --git a/Projects/App/Resources/Base.lproj/LaunchScreen.storyboard b/Projects/App/Resources/Base.lproj/LaunchScreen.storyboard index d3deef6f..3b3b468e 100644 --- a/Projects/App/Resources/Base.lproj/LaunchScreen.storyboard +++ b/Projects/App/Resources/Base.lproj/LaunchScreen.storyboard @@ -4,7 +4,6 @@ - @@ -17,13 +16,16 @@ - - - + + - + + + + + @@ -33,8 +35,5 @@ - - - diff --git a/Projects/App/Resources/Model.xcdatamodeld/Model.xcdatamodel/contents b/Projects/App/Resources/Model.xcdatamodeld/Model.xcdatamodel/contents new file mode 100644 index 00000000..fde66b7a --- /dev/null +++ b/Projects/App/Resources/Model.xcdatamodeld/Model.xcdatamodel/contents @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Projects/App/Resources/total_stationList.json b/Projects/App/Resources/total_stationList.json new file mode 100644 index 00000000..a2dbeb07 --- /dev/null +++ b/Projects/App/Resources/total_stationList.json @@ -0,0 +1,101624 @@ +{ + "DESCRIPTION": { + "STOP_TYPE": "정류소 타입", + "YCODE": "Y좌표", + "STOP_NM": "정류소명", + "NODE_ID": "노드 ID", + "STOP_NO": "정류소번호", + "XCODE": "X좌표", + "NXT_STN": "다음 정류장 방면" + }, + "REGION": "서울", + "DATA": [ + { + "stop_nm": "종로2가사거리", + "ycode": "37.569808", + "stop_no": "01001", + "xcode": "126.987752", + "stop_type": "중앙차로", + "node_id": "100000001", + "nxtStn": "종로2가" + }, + { + "stop_nm": "창경궁.서울대학교병원", + "ycode": "37.579433", + "stop_no": "01002", + "xcode": "126.996522", + "stop_type": "중앙차로", + "node_id": "100000002", + "nxtStn": "창덕궁" + }, + { + "stop_nm": "명륜3가.성대입구", + "ycode": "37.582581", + "stop_no": "01003", + "xcode": "126.998251", + "stop_type": "중앙차로", + "node_id": "100000003", + "nxtStn": "창경궁.서울대학교병원" + }, + { + "stop_nm": "종로2가.삼일교", + "ycode": "37.5685792736", + "stop_no": "01004", + "xcode": "126.9876130976", + "stop_type": "중앙차로", + "node_id": "100000004", + "nxtStn": "남대문세무서" + }, + { + "stop_nm": "혜화동로터리.여운형활동터", + "ycode": "37.586243", + "stop_no": "01005", + "xcode": "127.001744", + "stop_type": "중앙차로", + "node_id": "100000005", + "nxtStn": "명륜3가.성대입구" + }, + { + "stop_nm": "서대문역사거리", + "ycode": "37.566137", + "stop_no": "01006", + "xcode": "126.966893", + "stop_type": "중앙차로", + "node_id": "101000305", + "nxtStn": "충정로역" + }, + { + "stop_nm": "서울역사박물관.경희궁앞", + "ycode": "37.569135", + "stop_no": "01007", + "xcode": "126.97038", + "stop_type": "중앙차로", + "node_id": "100000380", + "nxtStn": "광화문" + }, + { + "stop_nm": "서울역사박물관.경희궁앞", + "ycode": "37.569515", + "stop_no": "01008", + "xcode": "126.97076", + "stop_type": "중앙차로", + "node_id": "100000379", + "nxtStn": "서대문역사거리" + }, + { + "stop_nm": "광화문", + "ycode": "37.570142", + "stop_no": "01009", + "xcode": "126.976357", + "stop_type": "중앙차로", + "node_id": "100000384", + "nxtStn": "종로1가" + }, + { + "stop_nm": "광화문", + "ycode": "37.570267935", + "stop_no": "01010", + "xcode": "126.9778894864", + "stop_type": "중앙차로", + "node_id": "100000385", + "nxtStn": "서울역사박물관.경교장.강북삼성병원" + }, + { + "stop_nm": "종로1가", + "ycode": "37.5701482455", + "stop_no": "01011", + "xcode": "126.9810660928", + "stop_type": "중앙차로", + "node_id": "100000386", + "nxtStn": "종로2가" + }, + { + "stop_nm": "종로1가", + "ycode": "37.570271", + "stop_no": "01012", + "xcode": "126.98163", + "stop_type": "중앙차로", + "node_id": "100000387", + "nxtStn": "광화문" + }, + { + "stop_nm": "종로2가", + "ycode": "37.57017", + "stop_no": "01013", + "xcode": "126.984991", + "stop_type": "중앙차로", + "node_id": "100000388", + "nxtStn": "종로3가.탑골공원" + }, + { + "stop_nm": "종로2가", + "ycode": "37.570238", + "stop_no": "01014", + "xcode": "126.986536", + "stop_type": "중앙차로", + "node_id": "100000389", + "nxtStn": "종로1가" + }, + { + "stop_nm": "종로3가.탑골공원", + "ycode": "37.5702567706", + "stop_no": "01015", + "xcode": "126.9892689914", + "stop_type": "중앙차로", + "node_id": "100000390", + "nxtStn": "종로4가.종묘" + }, + { + "stop_nm": "종로3가.탑골공원", + "ycode": "37.5703605443", + "stop_no": "01016", + "xcode": "126.9899877751", + "stop_type": "중앙차로", + "node_id": "100000391", + "nxtStn": "종로2가" + }, + { + "stop_nm": "종로4가.종묘", + "ycode": "37.5705069968", + "stop_no": "01017", + "xcode": "126.9947218896", + "stop_type": "중앙차로", + "node_id": "100000392", + "nxtStn": "종로5가.광장시장" + }, + { + "stop_nm": "종로4가.종묘", + "ycode": "37.570637", + "stop_no": "01018", + "xcode": "126.995396", + "stop_type": "중앙차로", + "node_id": "100000393", + "nxtStn": "종로3가.탑골공원" + }, + { + "stop_nm": "종로5가.광장시장", + "ycode": "37.570787", + "stop_no": "01019", + "xcode": "126.999061", + "stop_type": "중앙차로", + "node_id": "100000394", + "nxtStn": "종로6가.동대문종합시장" + }, + { + "stop_nm": "종로5가.광장시장", + "ycode": "37.570931", + "stop_no": "01020", + "xcode": "126.999606", + "stop_type": "중앙차로", + "node_id": "100000395", + "nxtStn": "종로4가.종묘" + }, + { + "stop_nm": "종로6가.동대문종합시장", + "ycode": "37.57101", + "stop_no": "01021", + "xcode": "127.004464", + "stop_type": "중앙차로", + "node_id": "100000396", + "nxtStn": "동대문역.흥인지문" + }, + { + "stop_nm": "종로6가.동대문종합시장", + "ycode": "37.5711272339", + "stop_no": "01022", + "xcode": "127.0057137364", + "stop_type": "중앙차로", + "node_id": "100000397", + "nxtStn": "종로5가.광장시장" + }, + { + "stop_nm": "동대문역.흥인지문", + "ycode": "37.572449", + "stop_no": "01023", + "xcode": "127.013813", + "stop_type": "중앙차로", + "node_id": "100000398", + "nxtStn": "동묘앞" + }, + { + "stop_nm": "동대문(흥인지문)", + "ycode": "37.572102", + "stop_no": "01037", + "xcode": "127.012453", + "stop_type": "중앙차로", + "node_id": "100000365", + "nxtStn": "동대문종합시장" + }, + { + "stop_nm": "동묘앞", + "ycode": "37.5738521758", + "stop_no": "01041", + "xcode": "127.018589326", + "stop_type": "중앙차로", + "node_id": "100000366", + "nxtStn": "신설동역" + }, + { + "stop_nm": "동묘앞", + "ycode": "37.574281529", + "stop_no": "01044", + "xcode": "127.0195285734", + "stop_type": "중앙차로", + "node_id": "100000367", + "nxtStn": "동대문역.흥인지문" + }, + { + "stop_nm": "경기상고", + "ycode": "37.5875502159", + "stop_no": "01101", + "xcode": "126.9693634554", + "stop_type": "일반차로", + "node_id": "100000006", + "nxtStn": "신교동" + }, + { + "stop_nm": "신교동", + "ycode": "37.5832955233", + "stop_no": "01102", + "xcode": "126.9702626865", + "stop_type": "일반차로", + "node_id": "100000007", + "nxtStn": "통인시장종로구보건소" + }, + { + "stop_nm": "경기상고", + "ycode": "37.5871907861", + "stop_no": "01103", + "xcode": "126.9697701102", + "stop_type": "일반차로", + "node_id": "100000008", + "nxtStn": "자하문터널입구.석파정" + }, + { + "stop_nm": "경복고교", + "ycode": "37.58516", + "stop_no": "01104", + "xcode": "126.970884", + "stop_type": "일반차로", + "node_id": "100000009", + "nxtStn": "신교동" + }, + { + "stop_nm": "청운중학교", + "ycode": "37.587809", + "stop_no": "01105", + "xcode": "126.972673", + "stop_type": "일반차로", + "node_id": "100000010", + "nxtStn": "경복고교" + }, + { + "stop_nm": "자하문고개.윤동주문학관", + "ycode": "37.5921866176", + "stop_no": "01106", + "xcode": "126.9671261805", + "stop_type": "일반차로", + "node_id": "100000011", + "nxtStn": "청운중학교" + }, + { + "stop_nm": "자하문고개.윤동주문학관", + "ycode": "37.5923353152", + "stop_no": "01107", + "xcode": "126.9671906625", + "stop_type": "일반차로", + "node_id": "100000012", + "nxtStn": "부암동주민센터.무계원" + }, + { + "stop_nm": "청운중학교", + "ycode": "37.588421", + "stop_no": "01108", + "xcode": "126.972266", + "stop_type": "일반차로", + "node_id": "100000013", + "nxtStn": "자하문고개.윤동주문학관" + }, + { + "stop_nm": "경복고교", + "ycode": "37.585067", + "stop_no": "01109", + "xcode": "126.971404", + "stop_type": "일반차로", + "node_id": "100000014", + "nxtStn": "청운중학교" + }, + { + "stop_nm": "통인시장종로구보건소", + "ycode": "37.5803257033", + "stop_no": "01110", + "xcode": "126.9710500404", + "stop_type": "일반차로", + "node_id": "100000015", + "nxtStn": "경복궁역" + }, + { + "stop_nm": "통인시장종로구보건소", + "ycode": "37.5805132118", + "stop_no": "01111", + "xcode": "126.9713851083", + "stop_type": "일반차로", + "node_id": "100000016", + "nxtStn": "효자동" + }, + { + "stop_nm": "효자동", + "ycode": "37.583091043", + "stop_no": "01112", + "xcode": "126.9706209712", + "stop_type": "일반차로", + "node_id": "100000017", + "nxtStn": "경복고교" + }, + { + "stop_nm": "사직단.어린이도서관", + "ycode": "37.5751355316", + "stop_no": "01113", + "xcode": "126.9679907155", + "stop_type": "일반차로", + "node_id": "100000018", + "nxtStn": "카센터.터널앞" + }, + { + "stop_nm": "경복궁역1번출구", + "ycode": "37.576162", + "stop_no": "01114", + "xcode": "126.971415", + "stop_type": "일반차로", + "node_id": "100000019", + "nxtStn": "사직단.어린이도서관" + }, + { + "stop_nm": "경복궁역", + "ycode": "37.577038", + "stop_no": "01115", + "xcode": "126.972198", + "stop_type": "일반차로", + "node_id": "100000020", + "nxtStn": "세종문화회관" + }, + { + "stop_nm": "경복궁역", + "ycode": "37.5776713863", + "stop_no": "01116", + "xcode": "126.9722828893", + "stop_type": "일반차로", + "node_id": "100000021", + "nxtStn": "통인시장종로구보건소" + }, + { + "stop_nm": "경복궁", + "ycode": "37.5755767894", + "stop_no": "01117", + "xcode": "126.9787471496", + "stop_type": "일반차로", + "node_id": "100000022", + "nxtStn": "안국역.인사동" + }, + { + "stop_nm": "KT광화문지사", + "ycode": "37.572209741", + "stop_no": "01118", + "xcode": "126.9774187393", + "stop_type": "일반차로", + "node_id": "100000023", + "nxtStn": "경복궁역" + }, + { + "stop_nm": "국립고궁박물관", + "ycode": "37.578928", + "stop_no": "01119", + "xcode": "126.973979", + "stop_type": "일반차로", + "node_id": "100000415", + "nxtStn": "청와대" + }, + { + "stop_nm": "광화문", + "ycode": "37.570045", + "stop_no": "01120", + "xcode": "126.976408", + "stop_type": "일반차로", + "node_id": "100000025", + "nxtStn": "시청.서소문청사" + }, + { + "stop_nm": "서울역사박물관.경교장.강북삼성병원", + "ycode": "37.570023", + "stop_no": "01123", + "xcode": "126.971248", + "stop_type": "일반차로", + "node_id": "100000028", + "nxtStn": "강북삼성병원" + }, + { + "stop_nm": "광화문.금호아시아나본관앞", + "ycode": "37.570332", + "stop_no": "01124", + "xcode": "126.972839", + "stop_type": "일반차로", + "node_id": "100000029", + "nxtStn": "서울역사박물관.경교장.강북삼성병원" + }, + { + "stop_nm": "광화문", + "ycode": "37.570365", + "stop_no": "01125", + "xcode": "126.975837", + "stop_type": "일반차로", + "node_id": "100000030", + "nxtStn": "서울역사박물관.경교장.강북삼성병원" + }, + { + "stop_nm": "세종문화회관", + "ycode": "37.573648", + "stop_no": "01126", + "xcode": "126.976997", + "stop_type": "일반차로", + "node_id": "100000031", + "nxtStn": "조선일보" + }, + { + "stop_nm": "서울경찰청.경복궁역", + "ycode": "37.5757446636", + "stop_no": "01127", + "xcode": "126.9714842989", + "stop_type": "일반차로", + "node_id": "100000032", + "nxtStn": "경복궁" + }, + { + "stop_nm": "사직단", + "ycode": "37.5748553458", + "stop_no": "01128", + "xcode": "126.968188961", + "stop_type": "일반차로", + "node_id": "100000033", + "nxtStn": "서울경찰청.경복궁역" + }, + { + "stop_nm": "광화문.광화문빌딩", + "ycode": "37.569495", + "stop_no": "01129", + "xcode": "126.976545", + "stop_type": "일반차로", + "node_id": "100000034", + "nxtStn": "삼성본관앞" + }, + { + "stop_nm": "덕성여중고", + "ycode": "37.575768", + "stop_no": "01130", + "xcode": "126.981972", + "stop_type": "일반차로", + "node_id": "100000035", + "nxtStn": "경복궁역1번출구" + }, + { + "stop_nm": "안국역.서울공예박물관", + "ycode": "37.5760695565", + "stop_no": "01131", + "xcode": "126.9839957858", + "stop_type": "일반차로", + "node_id": "100000036", + "nxtStn": "덕성여중고" + }, + { + "stop_nm": "국민은행세검정지점", + "ycode": "37.6046629766", + "stop_no": "01132", + "xcode": "126.9608880061", + "stop_type": "일반차로", + "node_id": "100000037", + "nxtStn": "정릉2동주민센터" + }, + { + "stop_nm": "세검정초등학교", + "ycode": "37.6025022799", + "stop_no": "01133", + "xcode": "126.9612198463", + "stop_type": "일반차로", + "node_id": "100000038", + "nxtStn": "세검정.상명대" + }, + { + "stop_nm": "세검정.상명대", + "ycode": "37.600477", + "stop_no": "01134", + "xcode": "126.958292", + "stop_type": "일반차로", + "node_id": "100000039", + "nxtStn": "홍지문" + }, + { + "stop_nm": "상명대입구.석파랑", + "ycode": "37.5994133537", + "stop_no": "01135", + "xcode": "126.958570225", + "stop_type": "일반차로", + "node_id": "100000040", + "nxtStn": "하림각" + }, + { + "stop_nm": "하림각", + "ycode": "37.5981330665", + "stop_no": "01136", + "xcode": "126.9617068235", + "stop_type": "일반차로", + "node_id": "100000041", + "nxtStn": "부암동주민센터.무계원" + }, + { + "stop_nm": "자하문터널입구.석파정", + "ycode": "37.5955935123", + "stop_no": "01137", + "xcode": "126.9636434993", + "stop_type": "일반차로", + "node_id": "100000042", + "nxtStn": "부암동주민센터.무계원" + }, + { + "stop_nm": "부암동주민센터.무계원", + "ycode": "37.592766", + "stop_no": "01138", + "xcode": "126.96422", + "stop_type": "일반차로", + "node_id": "100000043", + "nxtStn": "자하문고개.윤동주문학관" + }, + { + "stop_nm": "부암동주민센터.무계원", + "ycode": "37.5927861733", + "stop_no": "01139", + "xcode": "126.9651419211", + "stop_type": "일반차로", + "node_id": "100000044", + "nxtStn": "자하문터널입구.석파정" + }, + { + "stop_nm": "자하문터널입구.석파정", + "ycode": "37.5955575712", + "stop_no": "01140", + "xcode": "126.9639775924", + "stop_type": "일반차로", + "node_id": "100000045", + "nxtStn": "하림각" + }, + { + "stop_nm": "하림각", + "ycode": "37.5981476478", + "stop_no": "01141", + "xcode": "126.962215308", + "stop_type": "일반차로", + "node_id": "100000046", + "nxtStn": "상명대입구.세검정교회" + }, + { + "stop_nm": "상명대입구.세검정교회", + "ycode": "37.5996163318", + "stop_no": "01142", + "xcode": "126.9592405649", + "stop_type": "일반차로", + "node_id": "100000047", + "nxtStn": "세검정.상명대" + }, + { + "stop_nm": "세검정.상명대", + "ycode": "37.600648", + "stop_no": "01143", + "xcode": "126.959155", + "stop_type": "일반차로", + "node_id": "100000048", + "nxtStn": "세검정초등학교" + }, + { + "stop_nm": "세검정초등학교", + "ycode": "37.6022680671", + "stop_no": "01144", + "xcode": "126.9614328894", + "stop_type": "일반차로", + "node_id": "100000049", + "nxtStn": "화정박물관" + }, + { + "stop_nm": "국민은행세검정지점", + "ycode": "37.604846", + "stop_no": "01146", + "xcode": "126.961195", + "stop_type": "일반차로", + "node_id": "100000051", + "nxtStn": "불광역1번출구" + }, + { + "stop_nm": "승가사입구", + "ycode": "37.6115844138", + "stop_no": "01148", + "xcode": "126.9563059978", + "stop_type": "일반차로", + "node_id": "100000053", + "nxtStn": "구기동현대빌라" + }, + { + "stop_nm": "구기동현대빌라", + "ycode": "37.6100355035", + "stop_no": "01149", + "xcode": "126.9564575503", + "stop_type": "일반차로", + "node_id": "100000054", + "nxtStn": "구기동" + }, + { + "stop_nm": "구기터널.삼성출판박물관", + "ycode": "37.6086098941", + "stop_no": "01150", + "xcode": "126.9562103294", + "stop_type": "일반차로", + "node_id": "100000055", + "nxtStn": "구기터널입구" + }, + { + "stop_nm": "구기터널.삼성출판박물관", + "ycode": "37.6083054034", + "stop_no": "01151", + "xcode": "126.9564166508", + "stop_type": "일반차로", + "node_id": "100000056", + "nxtStn": "구기동" + }, + { + "stop_nm": "구기동", + "ycode": "37.6069644475", + "stop_no": "01152", + "xcode": "126.9585297928", + "stop_type": "일반차로", + "node_id": "100000057", + "nxtStn": "구기빌라" + }, + { + "stop_nm": "구기동", + "ycode": "37.6070088003", + "stop_no": "01153", + "xcode": "126.9591017479", + "stop_type": "일반차로", + "node_id": "100000058", + "nxtStn": "인왕빌딩" + }, + { + "stop_nm": "승가사입구", + "ycode": "37.61148", + "stop_no": "01154", + "xcode": "126.956482", + "stop_type": "일반차로", + "node_id": "100000059", + "nxtStn": "이북오도청" + }, + { + "stop_nm": "갑을씨티텔앞", + "ycode": "37.6043709709", + "stop_no": "01155", + "xcode": "126.9635350292", + "stop_type": "일반차로", + "node_id": "100000060", + "nxtStn": "세검정초등학교" + }, + { + "stop_nm": "평창파출소", + "ycode": "37.6053223656", + "stop_no": "01156", + "xcode": "126.9660432906", + "stop_type": "일반차로", + "node_id": "100000061", + "nxtStn": "갑을씨티텔앞" + }, + { + "stop_nm": "평창동주민센터", + "ycode": "37.6066073749", + "stop_no": "01157", + "xcode": "126.9695663093", + "stop_type": "일반차로", + "node_id": "100000062", + "nxtStn": "평창파출소" + }, + { + "stop_nm": "일성아파트", + "ycode": "37.608873", + "stop_no": "01158", + "xcode": "126.972925", + "stop_type": "일반차로", + "node_id": "100000063", + "nxtStn": "평창동주민센터" + }, + { + "stop_nm": "롯데아파트", + "ycode": "37.61039", + "stop_no": "01159", + "xcode": "126.976317", + "stop_type": "일반차로", + "node_id": "100000064", + "nxtStn": "일성아파트" + }, + { + "stop_nm": "롯데아파트", + "ycode": "37.610248", + "stop_no": "01160", + "xcode": "126.976652", + "stop_type": "일반차로", + "node_id": "100000065", + "nxtStn": "평창동삼성아파트" + }, + { + "stop_nm": "벽산평창힐스아파트", + "ycode": "37.60819", + "stop_no": "01161", + "xcode": "126.972797", + "stop_type": "일반차로", + "node_id": "100000066", + "nxtStn": "롯데아파트" + }, + { + "stop_nm": "예능교회", + "ycode": "37.606517", + "stop_no": "01162", + "xcode": "126.97", + "stop_type": "일반차로", + "node_id": "100000067", + "nxtStn": "벽산평창힐스아파트" + }, + { + "stop_nm": "서울예술고등학교.평창동주민센터", + "ycode": "37.6057787606", + "stop_no": "01163", + "xcode": "126.9676276108", + "stop_type": "일반차로", + "node_id": "100000068", + "nxtStn": "예능교회" + }, + { + "stop_nm": "화정박물관", + "ycode": "37.6045038178", + "stop_no": "01164", + "xcode": "126.9648102665", + "stop_type": "일반차로", + "node_id": "100000069", + "nxtStn": "서울예술고등학교.평창동주민센터" + }, + { + "stop_nm": "강북삼성병원", + "ycode": "37.568145927", + "stop_no": "01165", + "xcode": "126.9686004828", + "stop_type": "일반차로", + "node_id": "100000376", + "nxtStn": "서대문경찰서" + }, + { + "stop_nm": "독립문역.서대문형무소역사관", + "ycode": "37.573395", + "stop_no": "01167", + "xcode": "126.959322", + "stop_type": "일반차로", + "node_id": "100000072", + "nxtStn": "독립문역.한성과학고" + }, + { + "stop_nm": "서대문.서울시교육청", + "ycode": "37.5682538056", + "stop_no": "01168", + "xcode": "126.9645273358", + "stop_type": "일반차로", + "node_id": "100000073", + "nxtStn": "독립문" + }, + { + "stop_nm": "서대문역사거리.적십자병원", + "ycode": "37.5671081521", + "stop_no": "01169", + "xcode": "126.9675878497", + "stop_type": "일반차로", + "node_id": "100000368", + "nxtStn": "서대문.서울시교육청" + }, + { + "stop_nm": "독립문", + "ycode": "37.571342", + "stop_no": "01171", + "xcode": "126.96143", + "stop_type": "일반차로", + "node_id": "100000075", + "nxtStn": "사직단" + }, + { + "stop_nm": "창덕궁.서울돈화문국악당", + "ycode": "37.5775405746", + "stop_no": "01172", + "xcode": "126.9885394479", + "stop_type": "일반차로", + "node_id": "100000076", + "nxtStn": "안국역.서울공예박물관" + }, + { + "stop_nm": "서린동.SK서린빌딩", + "ycode": "37.569263", + "stop_no": "01173", + "xcode": "126.980095", + "stop_type": "일반차로", + "node_id": "100000077", + "nxtStn": "KT광화문지사" + }, + { + "stop_nm": "청계1가.광교", + "ycode": "37.568684389", + "stop_no": "01174", + "xcode": "126.9849267193", + "stop_type": "일반차로", + "node_id": "100000078", + "nxtStn": "을지로입구역.광교" + }, + { + "stop_nm": "청계2가.수표교", + "ycode": "37.568442", + "stop_no": "01175", + "xcode": "126.99082", + "stop_type": "일반차로", + "node_id": "100000079", + "nxtStn": "청계2가.삼일교" + }, + { + "stop_nm": "청계4가.세운교", + "ycode": "37.568927", + "stop_no": "01176", + "xcode": "126.996555", + "stop_type": "일반차로", + "node_id": "100000080", + "nxtStn": "청계3가.관수교" + }, + { + "stop_nm": "청계5가.광장시장", + "ycode": "37.5694512793", + "stop_no": "01177", + "xcode": "126.9997973605", + "stop_type": "일반차로", + "node_id": "100000081", + "nxtStn": "청계4가.세운교" + }, + { + "stop_nm": "원남동", + "ycode": "37.5745325055", + "stop_no": "01198", + "xcode": "126.9973383362", + "stop_type": "가로변시간", + "node_id": "100000102", + "nxtStn": "혜화경찰서" + }, + { + "stop_nm": "창덕궁.우리소리박물관", + "ycode": "37.577272", + "stop_no": "01199", + "xcode": "126.988954", + "stop_type": "일반차로", + "node_id": "100000103", + "nxtStn": "창덕궁.돈화문국악당" + }, + { + "stop_nm": "안국역.인사동", + "ycode": "37.575798", + "stop_no": "01200", + "xcode": "126.984133", + "stop_type": "일반차로", + "node_id": "100000104", + "nxtStn": "안국역2번출구앞" + }, + { + "stop_nm": "조계사.종로경찰서", + "ycode": "37.5725223095", + "stop_no": "01201", + "xcode": "126.9831555803", + "stop_type": "일반차로", + "node_id": "100000105", + "nxtStn": "안국역.인사동" + }, + { + "stop_nm": "조계사.종로경찰서", + "ycode": "37.5724858087", + "stop_no": "01202", + "xcode": "126.9828258888", + "stop_type": "일반차로", + "node_id": "100000106", + "nxtStn": "종로1가" + }, + { + "stop_nm": "안국동", + "ycode": "37.5746105669", + "stop_no": "01203", + "xcode": "126.9827201116", + "stop_type": "일반차로", + "node_id": "100000107", + "nxtStn": "조계사.종로경찰서" + }, + { + "stop_nm": "종로5가.효제동.김상옥의거터", + "ycode": "37.5745", + "stop_no": "01204", + "xcode": "127.00223", + "stop_type": "가로변시간", + "node_id": "100000108", + "nxtStn": "방송통신대.이화장" + }, + { + "stop_nm": "종로5가.효제초등학교", + "ycode": "37.5728790133", + "stop_no": "01205", + "xcode": "127.0021442279", + "stop_type": "가로변시간", + "node_id": "100000109", + "nxtStn": "종로5가.효제동.김상옥의거터" + }, + { + "stop_nm": "창덕궁.돈화문국악당", + "ycode": "37.577431", + "stop_no": "01209", + "xcode": "126.991233", + "stop_type": "일반차로", + "node_id": "100000414", + "nxtStn": "원남동사거리" + }, + { + "stop_nm": "종로5가", + "ycode": "37.5705596025", + "stop_no": "01212", + "xcode": "127.0021826522", + "stop_type": "일반차로", + "node_id": "100000116", + "nxtStn": "종로5가.효제초등학교" + }, + { + "stop_nm": "청계6가.동대문시장", + "ycode": "37.5698351103", + "stop_no": "01213", + "xcode": "127.0028494203", + "stop_type": "일반차로", + "node_id": "100000117", + "nxtStn": "청계5가.광장시장" + }, + { + "stop_nm": "동대문", + "ycode": "37.5717262368", + "stop_no": "01214", + "xcode": "127.0084126252", + "stop_type": "일반차로", + "node_id": "100000118", + "nxtStn": "종로5가.효제초등학교" + }, + { + "stop_nm": "충신동", + "ycode": "37.5740223509", + "stop_no": "01215", + "xcode": "127.006278812", + "stop_type": "일반차로", + "node_id": "100000119", + "nxtStn": "동대문" + }, + { + "stop_nm": "충신동", + "ycode": "37.5744602778", + "stop_no": "01217", + "xcode": "127.0063433807", + "stop_type": "일반차로", + "node_id": "100000121", + "nxtStn": "이화동(이화장)" + }, + { + "stop_nm": "현대그룹빌딩", + "ycode": "37.575912", + "stop_no": "01218", + "xcode": "127.000807", + "stop_type": "일반차로", + "node_id": "100000122", + "nxtStn": "이화동(이화장)" + }, + { + "stop_nm": "방송통신대.이화장", + "ycode": "37.578043", + "stop_no": "01219", + "xcode": "127.002437", + "stop_type": "가로변전일", + "node_id": "100000123", + "nxtStn": "혜화역.마로니에공원" + }, + { + "stop_nm": "혜화역.마로니에공원", + "ycode": "37.5811194873", + "stop_no": "01220", + "xcode": "127.0022769364", + "stop_type": "가로변전일", + "node_id": "100000124", + "nxtStn": "혜화역1번출구" + }, + { + "stop_nm": "혜화역.서울대병원입구", + "ycode": "37.580957", + "stop_no": "01221", + "xcode": "127.00185", + "stop_type": "가로변전일", + "node_id": "100000125", + "nxtStn": "방송통신대앞" + }, + { + "stop_nm": "방송통신대.이화장", + "ycode": "37.577788", + "stop_no": "01222", + "xcode": "127.001977", + "stop_type": "일반차로", + "node_id": "100000126", + "nxtStn": "이화동(이화장)" + }, + { + "stop_nm": "이화동(이화장)", + "ycode": "37.576119355", + "stop_no": "01223", + "xcode": "127.0006951494", + "stop_type": "일반차로", + "node_id": "100000127", + "nxtStn": "원남동" + }, + { + "stop_nm": "창경궁.서울대학교병원", + "ycode": "37.5788279947", + "stop_no": "01224", + "xcode": "126.9968717143", + "stop_type": "일반차로", + "node_id": "100000128", + "nxtStn": "명륜동2가.성균관대입구" + }, + { + "stop_nm": "이화동(이화장)", + "ycode": "37.5759372914", + "stop_no": "01225", + "xcode": "127.0032708172", + "stop_type": "일반차로", + "node_id": "100000129", + "nxtStn": "충신동" + }, + { + "stop_nm": "혜화동로터리", + "ycode": "37.58558", + "stop_no": "01226", + "xcode": "127.000687", + "stop_type": "일반차로", + "node_id": "100000130", + "nxtStn": "성대입구" + }, + { + "stop_nm": "명륜동2가.성균관대입구", + "ycode": "37.5833334862", + "stop_no": "01227", + "xcode": "126.9993987623", + "stop_type": "일반차로", + "node_id": "100000131", + "nxtStn": "삼선교.한성대학교.조소앙활동터" + }, + { + "stop_nm": "혜화역.서울연극센터(장면총리가옥)", + "ycode": "37.584022814", + "stop_no": "01228", + "xcode": "127.0013281701", + "stop_type": "일반차로", + "node_id": "100000132", + "nxtStn": "혜화역.서울대병원입구" + }, + { + "stop_nm": "혜화역.동성중고(장면총리가옥)", + "ycode": "37.5845697705", + "stop_no": "01229", + "xcode": "127.0017176887", + "stop_type": "가로변시간", + "node_id": "100000133", + "nxtStn": "삼선교.한성대학교.조소앙활동터" + }, + { + "stop_nm": "종로구민회관.창신동두산아파트", + "ycode": "37.5740926792", + "stop_no": "01231", + "xcode": "127.0155555279", + "stop_type": "일반차로", + "node_id": "100000135", + "nxtStn": "동묘역" + }, + { + "stop_nm": "동묘역앞", + "ycode": "37.5716849566", + "stop_no": "01235", + "xcode": "127.0156014431", + "stop_type": "일반차로", + "node_id": "100000139", + "nxtStn": "성동공업고등학교(무궁화회관)" + }, + { + "stop_nm": "동묘역앞", + "ycode": "37.5719221488", + "stop_no": "01236", + "xcode": "127.0159450485", + "stop_type": "일반차로", + "node_id": "100000140", + "nxtStn": "동묘역.롯데캐슬천지인" + }, + { + "stop_nm": "청계2가교차로", + "ycode": "37.5684809008", + "stop_no": "01237", + "xcode": "126.9878778705", + "stop_type": "일반차로", + "node_id": "101000307", + "nxtStn": "조계사" + }, + { + "stop_nm": "창신3동주민센터", + "ycode": "37.578413", + "stop_no": "01238", + "xcode": "127.015178", + "stop_type": "일반차로", + "node_id": "100000142", + "nxtStn": "창신초등학교" + }, + { + "stop_nm": "숭인1동주민센터.창신역4번출구", + "ycode": "37.578625", + "stop_no": "01239", + "xcode": "127.015462", + "stop_type": "일반차로", + "node_id": "100000143", + "nxtStn": "창신쌍용1단지.종로센트레빌아파트" + }, + { + "stop_nm": "동묘역.롯데캐슬천지인", + "ycode": "37.5741800523", + "stop_no": "01240", + "xcode": "127.0158023517", + "stop_type": "일반차로", + "node_id": "100000144", + "nxtStn": "창신초교" + }, + { + "stop_nm": "신설동로터리", + "ycode": "37.575695", + "stop_no": "01243", + "xcode": "127.022841", + "stop_type": "일반차로", + "node_id": "100000147", + "nxtStn": "동묘앞" + }, + { + "stop_nm": "동묘앞", + "ycode": "37.573643", + "stop_no": "01245", + "xcode": "127.017524", + "stop_type": "일반차로", + "node_id": "100000364", + "nxtStn": "동묘역.롯데캐슬천지인" + }, + { + "stop_nm": "구기동현대빌라", + "ycode": "37.609682", + "stop_no": "01246", + "xcode": "126.956622", + "stop_type": "일반차로", + "node_id": "100000150", + "nxtStn": "승가사입구" + }, + { + "stop_nm": "광장시장", + "ycode": "37.569470801", + "stop_no": "01247", + "xcode": "126.9977437946", + "stop_type": "일반차로", + "node_id": "100000151", + "nxtStn": "을지로4가" + }, + { + "stop_nm": "혜화경찰서", + "ycode": "37.5725807445", + "stop_no": "01249", + "xcode": "126.9974787875", + "stop_type": "가로변시간", + "node_id": "100000153", + "nxtStn": "종로5가역.광장시장" + }, + { + "stop_nm": "서울역사박물관.김구집무실(경교장)", + "ycode": "37.5699003386", + "stop_no": "01250", + "xcode": "126.9721318077", + "stop_type": "가로변시간", + "node_id": "100000154", + "nxtStn": "광화문" + }, + { + "stop_nm": "청계3가.관수교", + "ycode": "37.5686887917", + "stop_no": "01251", + "xcode": "126.9937793705", + "stop_type": "일반차로", + "node_id": "100000155", + "nxtStn": "청계2가.수표교" + }, + { + "stop_nm": "청계6가.버들다리", + "ycode": "37.5699303868", + "stop_no": "01252", + "xcode": "127.0080377075", + "stop_type": "일반차로", + "node_id": "100000156", + "nxtStn": "청계6가.동대문시장" + }, + { + "stop_nm": "청계7가.맑은내다리", + "ycode": "37.57004", + "stop_no": "01253", + "xcode": "127.013093", + "stop_type": "일반차로", + "node_id": "100000157", + "nxtStn": "청계6가.버들다리" + }, + { + "stop_nm": "청계8가.영도교", + "ycode": "37.570895", + "stop_no": "01254", + "xcode": "127.018128", + "stop_type": "일반차로", + "node_id": "100000158", + "nxtStn": "청계7가.맑은내다리" + }, + { + "stop_nm": "원남동사거리", + "ycode": "37.575761", + "stop_no": "01256", + "xcode": "126.998113", + "stop_type": "일반차로", + "node_id": "100000159", + "nxtStn": "현대그룹빌딩" + }, + { + "stop_nm": "숭인동", + "ycode": "37.5742721533", + "stop_no": "01262", + "xcode": "127.0204373408", + "stop_type": "일반차로", + "node_id": "100000165", + "nxtStn": "동대문우체국.서울풍물시장" + }, + { + "stop_nm": "조계사", + "ycode": "37.572800338", + "stop_no": "01267", + "xcode": "126.9831609226", + "stop_type": "일반차로", + "node_id": "100000169", + "nxtStn": "세종문화회관" + }, + { + "stop_nm": "세종문화회관", + "ycode": "37.573222", + "stop_no": "01272", + "xcode": "126.977009", + "stop_type": "일반차로", + "node_id": "100000174", + "nxtStn": "광화문.광화문빌딩" + }, + { + "stop_nm": "이화동(이화장)", + "ycode": "37.576257", + "stop_no": "01277", + "xcode": "127.002955", + "stop_type": "일반차로", + "node_id": "100000179", + "nxtStn": "방송통신대.이화장" + }, + { + "stop_nm": "상명대정문", + "ycode": "37.6016197182", + "stop_no": "01278", + "xcode": "126.9550207178", + "stop_type": "일반차로", + "node_id": "100000180", + "nxtStn": "홍지문35통" + }, + { + "stop_nm": "이북오도청", + "ycode": "37.612723", + "stop_no": "01279", + "xcode": "126.955973", + "stop_type": "일반차로", + "node_id": "100000181", + "nxtStn": "승가사입구" + }, + { + "stop_nm": "경복궁역(효자로입구)", + "ycode": "37.576715", + "stop_no": "01280", + "xcode": "126.974305", + "stop_type": "일반차로", + "node_id": "100000419", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "상명대입구.세검정교회", + "ycode": "37.5994435122", + "stop_no": "01286", + "xcode": "126.9597921957", + "stop_type": "일반차로", + "node_id": "100000188", + "nxtStn": "상명대정문" + }, + { + "stop_nm": "상명대입구.석파랑", + "ycode": "37.5995718125", + "stop_no": "01287", + "xcode": "126.9581941404", + "stop_type": "일반차로", + "node_id": "100000189", + "nxtStn": "하림각" + }, + { + "stop_nm": "종로중부새마을금고", + "ycode": "37.5724174899", + "stop_no": "01288", + "xcode": "127.0065911394", + "stop_type": "일반차로", + "node_id": "100000190", + "nxtStn": "동대문역사문화공원" + }, + { + "stop_nm": "신설동로터리.신한은행앞.서울풍물시장", + "ycode": "37.574258", + "stop_no": "01289", + "xcode": "127.023192", + "stop_type": "일반차로", + "node_id": "100000191", + "nxtStn": "청계8가.황학교" + }, + { + "stop_nm": "청계2가.삼일교", + "ycode": "37.568344", + "stop_no": "01291", + "xcode": "126.986988", + "stop_type": "일반차로", + "node_id": "100000192", + "nxtStn": "청계1가.광교" + }, + { + "stop_nm": "청계8가.황학교", + "ycode": "37.5721307298", + "stop_no": "01292", + "xcode": "127.0227870051", + "stop_type": "일반차로", + "node_id": "100000193", + "nxtStn": "청계8가.영도교" + }, + { + "stop_nm": "평창동삼성아파트", + "ycode": "37.611179", + "stop_no": "01293", + "xcode": "126.978799", + "stop_type": "일반차로", + "node_id": "100000355", + "nxtStn": "국민대앞" + }, + { + "stop_nm": "안국역.인사동", + "ycode": "37.5763329308", + "stop_no": "01294", + "xcode": "126.9855365486", + "stop_type": "일반차로", + "node_id": "100000370", + "nxtStn": "창덕궁.우리소리박물관" + }, + { + "stop_nm": "안국역.서울공예박물관", + "ycode": "37.576413", + "stop_no": "01295", + "xcode": "126.984888", + "stop_type": "일반차로", + "node_id": "100000369", + "nxtStn": "조계사.종로경찰서" + }, + { + "stop_nm": "창덕궁", + "ycode": "37.5772280879", + "stop_no": "01296", + "xcode": "126.9890031166", + "stop_type": "일반차로", + "node_id": "100000371", + "nxtStn": "창경궁.고궁호텔.메이플레이스호텔" + }, + { + "stop_nm": "남인사마당", + "ycode": "37.5713191723", + "stop_no": "01297", + "xcode": "126.9874286375", + "stop_type": "일반차로", + "node_id": "100000413", + "nxtStn": "종로2가.삼일교" + }, + { + "stop_nm": "평창파출소", + "ycode": "37.605681218", + "stop_no": "01500", + "xcode": "126.9668167021", + "stop_type": "마을버스", + "node_id": "100900047", + "nxtStn": "화정박물관" + }, + { + "stop_nm": "삼청공원", + "ycode": "37.5882276807", + "stop_no": "01501", + "xcode": "126.9816468946", + "stop_type": "마을버스", + "node_id": "100900178", + "nxtStn": "금융연수원" + }, + { + "stop_nm": "수성동계곡", + "ycode": "37.582082", + "stop_no": "01502", + "xcode": "126.964469", + "stop_type": "마을버스", + "node_id": "100900041", + "nxtStn": "박노수미술관" + }, + { + "stop_nm": "명륜3가종점", + "ycode": "37.5909483783", + "stop_no": "01503", + "xcode": "126.9928636796", + "stop_type": "마을버스", + "node_id": "100900040", + "nxtStn": "샘미용실" + }, + { + "stop_nm": "명륜새마을금고", + "ycode": "37.587785", + "stop_no": "01504", + "xcode": "126.996798", + "stop_type": "마을버스", + "node_id": "100900197", + "nxtStn": "서울국제고등학교" + }, + { + "stop_nm": "서대문3번출구", + "ycode": "37.566336", + "stop_no": "01505", + "xcode": "126.966397", + "stop_type": "마을버스", + "node_id": "100900044", + "nxtStn": "적십자병원후문앞" + }, + { + "stop_nm": "낙산공원", + "ycode": "37.5804037213", + "stop_no": "01506", + "xcode": "127.0087215681", + "stop_type": "마을버스", + "node_id": "100900039", + "nxtStn": "낙산삼거리" + }, + { + "stop_nm": "인사미술공간.세탁소", + "ycode": "37.5814109836", + "stop_no": "01507", + "xcode": "126.9893670844", + "stop_type": "마을버스", + "node_id": "100900037", + "nxtStn": "빨래터.고희동미술관" + }, + { + "stop_nm": "화정박물관", + "ycode": "37.6048011982", + "stop_no": "01508", + "xcode": "126.9648837454", + "stop_type": "마을버스", + "node_id": "100900036", + "nxtStn": "세검초등학교" + }, + { + "stop_nm": "금융연수원", + "ycode": "37.586641", + "stop_no": "01509", + "xcode": "126.981657", + "stop_type": "마을버스", + "node_id": "100900035", + "nxtStn": "삼청동주민센터" + }, + { + "stop_nm": "박노수미술관", + "ycode": "37.5809967425", + "stop_no": "01510", + "xcode": "126.966603478", + "stop_type": "마을버스", + "node_id": "100900034", + "nxtStn": "통인시장" + }, + { + "stop_nm": "샘미용실", + "ycode": "37.5903095275", + "stop_no": "01511", + "xcode": "126.9932227051", + "stop_type": "마을버스", + "node_id": "100900032", + "nxtStn": "양현관" + }, + { + "stop_nm": "서울국제고등학교", + "ycode": "37.5890715947", + "stop_no": "01512", + "xcode": "126.9972902593", + "stop_type": "마을버스", + "node_id": "100900031", + "nxtStn": "국민생활관" + }, + { + "stop_nm": "화정박물관", + "ycode": "37.6049806084", + "stop_no": "01513", + "xcode": "126.9652007897", + "stop_type": "마을버스", + "node_id": "100900029", + "nxtStn": "오거리" + }, + { + "stop_nm": "적십자병원후문앞", + "ycode": "37.5675295356", + "stop_no": "01514", + "xcode": "126.9652272769", + "stop_type": "마을버스", + "node_id": "100900188", + "nxtStn": "경희궁자이2.3단지" + }, + { + "stop_nm": "서울성곽.성대후문", + "ycode": "37.5892576959", + "stop_no": "01515", + "xcode": "126.9896320737", + "stop_type": "마을버스", + "node_id": "100900202", + "nxtStn": "통일부" + }, + { + "stop_nm": "빨래터.고희동미술관", + "ycode": "37.58299", + "stop_no": "01516", + "xcode": "126.989067", + "stop_type": "마을버스", + "node_id": "100900026", + "nxtStn": "원서고개" + }, + { + "stop_nm": "세검초등학교", + "ycode": "37.6042522792", + "stop_no": "01517", + "xcode": "126.9614907597", + "stop_type": "마을버스", + "node_id": "100900025", + "nxtStn": "구기동" + }, + { + "stop_nm": "삼청동주민센터", + "ycode": "37.5842638281", + "stop_no": "01518", + "xcode": "126.9819071619", + "stop_type": "마을버스", + "node_id": "100900024", + "nxtStn": "삼청파출소" + }, + { + "stop_nm": "통인시장", + "ycode": "37.580468", + "stop_no": "01519", + "xcode": "126.968753", + "stop_type": "마을버스", + "node_id": "100900020", + "nxtStn": "오거리.한옥마을입구" + }, + { + "stop_nm": "양현관", + "ycode": "37.5897914226", + "stop_no": "01520", + "xcode": "126.9936043615", + "stop_type": "마을버스", + "node_id": "100900021", + "nxtStn": "명륜시장.성대후문" + }, + { + "stop_nm": "국민생활관", + "ycode": "37.5897456349", + "stop_no": "01521", + "xcode": "126.9988619666", + "stop_type": "마을버스", + "node_id": "100900017", + "nxtStn": "혜화초등학교" + }, + { + "stop_nm": "오거리", + "ycode": "37.6070621164", + "stop_no": "01522", + "xcode": "126.9622629001", + "stop_type": "마을버스", + "node_id": "100900016", + "nxtStn": "청련사입구" + }, + { + "stop_nm": "경희궁자이2.3단지", + "ycode": "37.5687871134", + "stop_no": "01523", + "xcode": "126.9640686009", + "stop_type": "마을버스", + "node_id": "100900015", + "nxtStn": "영천시장" + }, + { + "stop_nm": "창신쌍용2단지.한성대후문", + "ycode": "37.5812647965", + "stop_no": "01524", + "xcode": "127.0127581151", + "stop_type": "마을버스", + "node_id": "100900013", + "nxtStn": "명신초.삼선푸르지오.힐스테이트" + }, + { + "stop_nm": "통일부", + "ycode": "37.5875948053", + "stop_no": "01525", + "xcode": "126.9859476734", + "stop_type": "마을버스", + "node_id": "100900045", + "nxtStn": "감사원" + }, + { + "stop_nm": "원서고개", + "ycode": "37.583080553", + "stop_no": "01526", + "xcode": "126.9878088426", + "stop_type": "마을버스", + "node_id": "100900011", + "nxtStn": "중앙중고" + }, + { + "stop_nm": "종로5가입구.혜화경찰서", + "ycode": "37.571797", + "stop_no": "01528", + "xcode": "126.997681", + "stop_type": "마을버스", + "node_id": "100900009", + "nxtStn": "종로4가.종묘공원" + }, + { + "stop_nm": "삼청파출소", + "ycode": "37.581813662", + "stop_no": "01529", + "xcode": "126.9812510491", + "stop_type": "마을버스", + "node_id": "100900007", + "nxtStn": "국립민속박물관" + }, + { + "stop_nm": "오거리.한옥마을입구", + "ycode": "37.579537", + "stop_no": "01530", + "xcode": "126.969561", + "stop_type": "마을버스", + "node_id": "100900005", + "nxtStn": "광화문새마을금고" + }, + { + "stop_nm": "명륜시장.성대후문", + "ycode": "37.5885110529", + "stop_no": "01531", + "xcode": "126.9952543092", + "stop_type": "마을버스", + "node_id": "100900046", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "혜화초등학교", + "ycode": "37.5872532276", + "stop_no": "01532", + "xcode": "126.9998516643", + "stop_type": "마을버스", + "node_id": "100900003", + "nxtStn": "혜화우체국" + }, + { + "stop_nm": "청련사입구", + "ycode": "37.6079803769", + "stop_no": "01533", + "xcode": "126.9624312007", + "stop_type": "마을버스", + "node_id": "100900072", + "nxtStn": "언덕앞" + }, + { + "stop_nm": "영천시장", + "ycode": "37.570084", + "stop_no": "01534", + "xcode": "126.962735", + "stop_type": "마을버스", + "node_id": "100900071", + "nxtStn": "경희궁자이4단지" + }, + { + "stop_nm": "명신초.삼선푸르지오.힐스테이트", + "ycode": "37.5821062067", + "stop_no": "01535", + "xcode": "127.014556281", + "stop_type": "마을버스", + "node_id": "100900070", + "nxtStn": "종로센트레빌후문.e편한세상보문아파트" + }, + { + "stop_nm": "감사원", + "ycode": "37.5862106518", + "stop_no": "01536", + "xcode": "126.9852900569", + "stop_type": "마을버스", + "node_id": "100900069", + "nxtStn": "사우디대사관앞.경남빌라" + }, + { + "stop_nm": "중앙중고", + "ycode": "37.583092177", + "stop_no": "01537", + "xcode": "126.986965299", + "stop_type": "마을버스", + "node_id": "100900068", + "nxtStn": "안국선원.삼거리" + }, + { + "stop_nm": "인왕빌딩", + "ycode": "37.6079283311", + "stop_no": "01538", + "xcode": "126.9577443332", + "stop_type": "마을버스", + "node_id": "100900067", + "nxtStn": "구기터널입구" + }, + { + "stop_nm": "종로4가.종묘공원", + "ycode": "37.570689", + "stop_no": "01539", + "xcode": "126.994624", + "stop_type": "마을버스", + "node_id": "100900066", + "nxtStn": "종로3가.1.3.5호선" + }, + { + "stop_nm": "국립민속박물관", + "ycode": "37.5792551846", + "stop_no": "01540", + "xcode": "126.9795533717", + "stop_type": "마을버스", + "node_id": "100900174", + "nxtStn": "경복궁" + }, + { + "stop_nm": "광화문새마을금고", + "ycode": "37.5793687689", + "stop_no": "01541", + "xcode": "126.9711466491", + "stop_type": "마을버스", + "node_id": "100900065", + "nxtStn": "경복궁역" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5877370613", + "stop_no": "01542", + "xcode": "126.996518051", + "stop_type": "마을버스", + "node_id": "100900064", + "nxtStn": "서울국제고등학교" + }, + { + "stop_nm": "혜화우체국", + "ycode": "37.5860376565", + "stop_no": "01543", + "xcode": "127.0006137149", + "stop_type": "마을버스", + "node_id": "100900063", + "nxtStn": "혜화역4번출구" + }, + { + "stop_nm": "언덕앞", + "ycode": "37.6089539753", + "stop_no": "01544", + "xcode": "126.9637921715", + "stop_type": "마을버스", + "node_id": "100900062", + "nxtStn": "소나무집" + }, + { + "stop_nm": "경희궁자이4단지", + "ycode": "37.57136", + "stop_no": "01545", + "xcode": "126.961358", + "stop_type": "마을버스", + "node_id": "100900061", + "nxtStn": "독립문역3번출구" + }, + { + "stop_nm": "종로센트레빌후문.e편한세상보문아파트", + "ycode": "37.5817743934", + "stop_no": "01546", + "xcode": "127.0161855253", + "stop_type": "마을버스", + "node_id": "100900060", + "nxtStn": "청룡사.보문파크뷰자이아파트" + }, + { + "stop_nm": "사우디대사관앞.경남빌라", + "ycode": "37.5841056738", + "stop_no": "01547", + "xcode": "126.9850311776", + "stop_type": "마을버스", + "node_id": "100900059", + "nxtStn": "안국선원.삼거리" + }, + { + "stop_nm": "안국선원.삼거리", + "ycode": "37.5827909789", + "stop_no": "01548", + "xcode": "126.984994076", + "stop_type": "마을버스", + "node_id": "100900058", + "nxtStn": "북촌한옥마을입구.정세권활동터" + }, + { + "stop_nm": "구기터널입구", + "ycode": "37.6082046142", + "stop_no": "01549", + "xcode": "126.9567768927", + "stop_type": "마을버스", + "node_id": "100900182", + "nxtStn": "구기동" + }, + { + "stop_nm": "종로3가.1.3.5호선", + "ycode": "37.57158", + "stop_no": "01550", + "xcode": "126.991965", + "stop_type": "마을버스", + "node_id": "100900057", + "nxtStn": "종로1.2.3.4가동주민센터" + }, + { + "stop_nm": "경복궁", + "ycode": "37.576950157", + "stop_no": "01551", + "xcode": "126.9793377561", + "stop_type": "마을버스", + "node_id": "100900056", + "nxtStn": "세종문화회관" + }, + { + "stop_nm": "소나무집", + "ycode": "37.6112770717", + "stop_no": "01553", + "xcode": "126.964110466", + "stop_type": "마을버스", + "node_id": "100900054", + "nxtStn": "아름다운실버" + }, + { + "stop_nm": "독립문역3번출구", + "ycode": "37.5728784775", + "stop_no": "01554", + "xcode": "126.9597453483", + "stop_type": "마을버스", + "node_id": "100900186", + "nxtStn": "독립문초등학교" + }, + { + "stop_nm": "청룡사.보문파크뷰자이아파트", + "ycode": "37.5800189539", + "stop_no": "01555", + "xcode": "127.01700714", + "stop_type": "마을버스", + "node_id": "100900053", + "nxtStn": "종로센트레빌아파트" + }, + { + "stop_nm": "북촌한옥마을입구.정세권활동터", + "ycode": "37.5815997311", + "stop_no": "01556", + "xcode": "126.9849422317", + "stop_type": "마을버스", + "node_id": "100900052", + "nxtStn": "가회동주민센터" + }, + { + "stop_nm": "종로1.2.3.4가동주민센터", + "ycode": "37.5743837122", + "stop_no": "01557", + "xcode": "126.9911314256", + "stop_type": "마을버스", + "node_id": "100900217", + "nxtStn": "창덕궁" + }, + { + "stop_nm": "창덕궁", + "ycode": "37.57676", + "stop_no": "01558", + "xcode": "126.990385", + "stop_type": "마을버스", + "node_id": "100900051", + "nxtStn": "원남로터리" + }, + { + "stop_nm": "아름다운실버", + "ycode": "37.6120100581", + "stop_no": "01561", + "xcode": "126.965463701", + "stop_type": "마을버스", + "node_id": "100900050", + "nxtStn": "보현산신각" + }, + { + "stop_nm": "독립문초등학교", + "ycode": "37.5738474794", + "stop_no": "01562", + "xcode": "126.9607207234", + "stop_type": "마을버스", + "node_id": "100900049", + "nxtStn": "린덴바움숲유치원" + }, + { + "stop_nm": "종로센트레빌아파트", + "ycode": "37.5803534405", + "stop_no": "01563", + "xcode": "127.0156926979", + "stop_type": "마을버스", + "node_id": "100900206", + "nxtStn": "쌍용아파트입구.창신역" + }, + { + "stop_nm": "가회동주민센터", + "ycode": "37.579973", + "stop_no": "01564", + "xcode": "126.984957", + "stop_type": "마을버스", + "node_id": "100900048", + "nxtStn": "아름다운가게.정독도서관" + }, + { + "stop_nm": "구기빌라", + "ycode": "37.6062686142", + "stop_no": "01565", + "xcode": "126.9579797248", + "stop_type": "마을버스", + "node_id": "100900097", + "nxtStn": "산정빌라" + }, + { + "stop_nm": "원남로터리", + "ycode": "37.5762373738", + "stop_no": "01566", + "xcode": "126.997511497", + "stop_type": "마을버스", + "node_id": "100900096", + "nxtStn": "서울대치과대학" + }, + { + "stop_nm": "보현산신각", + "ycode": "37.6134825236", + "stop_no": "01567", + "xcode": "126.9657790521", + "stop_type": "마을버스", + "node_id": "100900095", + "nxtStn": "박종화고택입구" + }, + { + "stop_nm": "천사유치원", + "ycode": "37.5746480221", + "stop_no": "01568", + "xcode": "126.9618603707", + "stop_type": "마을버스", + "node_id": "100900094", + "nxtStn": "무악현대아파트후문" + }, + { + "stop_nm": "쌍용아파트입구.창신역", + "ycode": "37.580511226", + "stop_no": "01569", + "xcode": "127.0149635738", + "stop_type": "마을버스", + "node_id": "100900093", + "nxtStn": "창신3동주민센터" + }, + { + "stop_nm": "아름다운가게.정독도서관", + "ycode": "37.57895", + "stop_no": "01570", + "xcode": "126.985123", + "stop_type": "마을버스", + "node_id": "100900092", + "nxtStn": "헌법재판소.안국역" + }, + { + "stop_nm": "산정빌라", + "ycode": "37.6051519935", + "stop_no": "01571", + "xcode": "126.9574922002", + "stop_type": "마을버스", + "node_id": "100900091", + "nxtStn": "청구빌라" + }, + { + "stop_nm": "이화사거리", + "ycode": "37.576513", + "stop_no": "01572", + "xcode": "127.002101", + "stop_type": "마을버스", + "node_id": "100900090", + "nxtStn": "이화동(이화장)" + }, + { + "stop_nm": "박종화고택입구", + "ycode": "37.6143102577", + "stop_no": "01573", + "xcode": "126.9676873462", + "stop_type": "마을버스", + "node_id": "100900089", + "nxtStn": "화인빌라" + }, + { + "stop_nm": "무악현대아파트후문", + "ycode": "37.5763060751", + "stop_no": "01574", + "xcode": "126.962001046", + "stop_type": "마을버스", + "node_id": "100900088", + "nxtStn": "넓은마당" + }, + { + "stop_nm": "헌법재판소.안국역", + "ycode": "37.577387", + "stop_no": "01576", + "xcode": "126.985816", + "stop_type": "마을버스", + "node_id": "100900086", + "nxtStn": "수운회관" + }, + { + "stop_nm": "청구빌라", + "ycode": "37.6046102563", + "stop_no": "01577", + "xcode": "126.9569839726", + "stop_type": "마을버스", + "node_id": "100900184", + "nxtStn": "상명대후문" + }, + { + "stop_nm": "서울대어린이병원응급실.갑상선센터", + "ycode": "37.578686", + "stop_no": "01578", + "xcode": "126.99984", + "stop_type": "마을버스", + "node_id": "100900085", + "nxtStn": "서울대학교병원현관.암병원현관" + }, + { + "stop_nm": "화인빌라", + "ycode": "37.6129345305", + "stop_no": "01580", + "xcode": "126.9685386165", + "stop_type": "마을버스", + "node_id": "100900083", + "nxtStn": "힐탑" + }, + { + "stop_nm": "넓은마당", + "ycode": "37.5752728058", + "stop_no": "01581", + "xcode": "126.9628880463", + "stop_type": "마을버스", + "node_id": "100900082", + "nxtStn": "신학대학교총회본부" + }, + { + "stop_nm": "창신초등학교", + "ycode": "37.5769032044", + "stop_no": "01582", + "xcode": "127.0153885503", + "stop_type": "마을버스", + "node_id": "100900207", + "nxtStn": "종로구민회관.창신동두산아파트" + }, + { + "stop_nm": "수운회관", + "ycode": "37.575219", + "stop_no": "01583", + "xcode": "126.986671", + "stop_type": "마을버스", + "node_id": "100900081", + "nxtStn": "낙원상가" + }, + { + "stop_nm": "상명대후문", + "ycode": "37.6040255786", + "stop_no": "01584", + "xcode": "126.9573354115", + "stop_type": "마을버스", + "node_id": "100900080", + "nxtStn": "완성빌라" + }, + { + "stop_nm": "힐탑", + "ycode": "37.6116055569", + "stop_no": "01586", + "xcode": "126.9690205751", + "stop_type": "마을버스", + "node_id": "100900079", + "nxtStn": "감나무골공원" + }, + { + "stop_nm": "신학대학교총회본부", + "ycode": "37.5739763092", + "stop_no": "01587", + "xcode": "126.9634445669", + "stop_type": "마을버스", + "node_id": "100900187", + "nxtStn": "한국사회과학자료원" + }, + { + "stop_nm": "낙원상가", + "ycode": "37.57376", + "stop_no": "01589", + "xcode": "126.987417", + "stop_type": "마을버스", + "node_id": "100900078", + "nxtStn": "금강제화" + }, + { + "stop_nm": "완성빌라", + "ycode": "37.6034020863", + "stop_no": "01590", + "xcode": "126.9575011241", + "stop_type": "마을버스", + "node_id": "100900077", + "nxtStn": "경진빌라" + }, + { + "stop_nm": "서울대병원장례식장", + "ycode": "37.5805553988", + "stop_no": "01591", + "xcode": "126.9974309648", + "stop_type": "마을버스", + "node_id": "100900076", + "nxtStn": "성대입구" + }, + { + "stop_nm": "혜화역1번출구", + "ycode": "37.583485", + "stop_no": "01592", + "xcode": "127.001843", + "stop_type": "마을버스", + "node_id": "100900075", + "nxtStn": "혜화동로터리" + }, + { + "stop_nm": "감나무골공원", + "ycode": "37.6124059606", + "stop_no": "01593", + "xcode": "126.9699479367", + "stop_type": "마을버스", + "node_id": "100900074", + "nxtStn": "EN갤러리" + }, + { + "stop_nm": "한국사회과학자료원", + "ycode": "37.5736332076", + "stop_no": "01594", + "xcode": "126.9641432573", + "stop_type": "마을버스", + "node_id": "100900073", + "nxtStn": "종로문화센터" + }, + { + "stop_nm": "동묘역", + "ycode": "37.5726943506", + "stop_no": "01595", + "xcode": "127.0142453819", + "stop_type": "마을버스", + "node_id": "100900205", + "nxtStn": "동대문역.2번출구" + }, + { + "stop_nm": "금강제화", + "ycode": "37.57057", + "stop_no": "01596", + "xcode": "126.98756", + "stop_type": "마을버스", + "node_id": "100900121", + "nxtStn": "종각역YMCA" + }, + { + "stop_nm": "경진빌라", + "ycode": "37.6020037175", + "stop_no": "01597", + "xcode": "126.9578303612", + "stop_type": "마을버스", + "node_id": "100900120", + "nxtStn": "서교빌라" + }, + { + "stop_nm": "성균관대학교앞", + "ycode": "37.5832597848", + "stop_no": "01598", + "xcode": "126.9993359079", + "stop_type": "마을버스", + "node_id": "100900198", + "nxtStn": "혜화역4번출구" + }, + { + "stop_nm": "청와대", + "ycode": "37.582971", + "stop_no": "01601", + "xcode": "126.973762", + "stop_type": "일반차로", + "node_id": "100000416", + "nxtStn": "춘추문" + }, + { + "stop_nm": "춘추문", + "ycode": "37.583126", + "stop_no": "01602", + "xcode": "126.979657", + "stop_type": "일반차로", + "node_id": "100000417", + "nxtStn": "경복궁.국립민속박물관" + }, + { + "stop_nm": "경복궁.국립민속박물관", + "ycode": "37.579407", + "stop_no": "01603", + "xcode": "126.97959", + "stop_type": "일반차로", + "node_id": "100000418", + "nxtStn": "안국역.인사동" + }, + { + "stop_nm": "효자로입구(가상)", + "ycode": "37.5762647419", + "stop_no": "01604", + "xcode": "126.9744334032", + "stop_type": "가상정류장", + "node_id": "100000420", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "EN갤러리", + "ycode": "37.613411", + "stop_no": "01607", + "xcode": "126.970607", + "stop_type": "마을버스", + "node_id": "100900119", + "nxtStn": "무애사" + }, + { + "stop_nm": "성균관대정문", + "ycode": "37.584957", + "stop_no": "01615", + "xcode": "126.99662", + "stop_type": "마을버스", + "node_id": "100900218", + "nxtStn": "600주년기념관" + }, + { + "stop_nm": "600주년기념관", + "ycode": "37.587329", + "stop_no": "01616", + "xcode": "126.993942", + "stop_type": "마을버스", + "node_id": "100900219", + "nxtStn": "성균관대운동장" + }, + { + "stop_nm": "성균관대운동장", + "ycode": "37.587863", + "stop_no": "01617", + "xcode": "126.99237", + "stop_type": "마을버스", + "node_id": "100900220", + "nxtStn": "학생회관" + }, + { + "stop_nm": "학생회관", + "ycode": "37.587445", + "stop_no": "01618", + "xcode": "126.993738", + "stop_type": "마을버스", + "node_id": "100900221", + "nxtStn": "성균관대학교" + }, + { + "stop_nm": "종로문화센터", + "ycode": "37.5746470811", + "stop_no": "01667", + "xcode": "126.9646261961", + "stop_type": "마을버스", + "node_id": "100900118", + "nxtStn": "단군성전앞" + }, + { + "stop_nm": "동대문역.2번출구", + "ycode": "37.5720494465", + "stop_no": "01682", + "xcode": "127.0117218002", + "stop_type": "마을버스", + "node_id": "100900117", + "nxtStn": "동대문종합시장" + }, + { + "stop_nm": "종각역YMCA", + "ycode": "37.570379", + "stop_no": "01683", + "xcode": "126.985096", + "stop_type": "마을버스", + "node_id": "100900116", + "nxtStn": "종로1가" + }, + { + "stop_nm": "서교빌라", + "ycode": "37.601989057", + "stop_no": "01684", + "xcode": "126.9571553655", + "stop_type": "마을버스", + "node_id": "100900115", + "nxtStn": "상명초등학교" + }, + { + "stop_nm": "경복궁역", + "ycode": "37.5770722054", + "stop_no": "01685", + "xcode": "126.9724733176", + "stop_type": "마을버스", + "node_id": "100900177", + "nxtStn": "광화문새마을금고" + }, + { + "stop_nm": "성대입구", + "ycode": "37.5832668015", + "stop_no": "01697", + "xcode": "126.998853007", + "stop_type": "마을버스", + "node_id": "100900199", + "nxtStn": "성균관대정문" + }, + { + "stop_nm": "무애사", + "ycode": "37.6139004282", + "stop_no": "01698", + "xcode": "126.9718458037", + "stop_type": "마을버스", + "node_id": "100900114", + "nxtStn": "참샘골공원" + }, + { + "stop_nm": "단군성전앞", + "ycode": "37.5755600915", + "stop_no": "01699", + "xcode": "126.9653175119", + "stop_type": "마을버스", + "node_id": "100900113", + "nxtStn": "활터앞" + }, + { + "stop_nm": "동대문종합시장", + "ycode": "37.571212", + "stop_no": "01702", + "xcode": "127.00496", + "stop_type": "마을버스", + "node_id": "100900192", + "nxtStn": "종로3가" + }, + { + "stop_nm": "상명초등학교", + "ycode": "37.6009238115", + "stop_no": "01714", + "xcode": "126.956715418", + "stop_type": "마을버스", + "node_id": "100900112", + "nxtStn": "상명대정문" + }, + { + "stop_nm": "법련사", + "ycode": "37.5765879752", + "stop_no": "01720", + "xcode": "126.9796650539", + "stop_type": "마을버스", + "node_id": "100900179", + "nxtStn": "정독도서관" + }, + { + "stop_nm": "광화문새마을금고", + "ycode": "37.5794930902", + "stop_no": "01721", + "xcode": "126.9710277184", + "stop_type": "마을버스", + "node_id": "100900111", + "nxtStn": "오거리.한옥마을입구" + }, + { + "stop_nm": "성균관대학교", + "ycode": "37.586047", + "stop_no": "01722", + "xcode": "126.996857", + "stop_type": "마을버스", + "node_id": "100900110", + "nxtStn": "종점" + }, + { + "stop_nm": "참샘골공원", + "ycode": "37.614612", + "stop_no": "01723", + "xcode": "126.974255", + "stop_type": "마을버스", + "node_id": "100900109", + "nxtStn": "평창공원지킴터입구" + }, + { + "stop_nm": "활터앞", + "ycode": "37.5768126115", + "stop_no": "01724", + "xcode": "126.9653293849", + "stop_type": "마을버스", + "node_id": "100900108", + "nxtStn": "종로도서관" + }, + { + "stop_nm": "종로5가.3번출구", + "ycode": "37.5714192458", + "stop_no": "01725", + "xcode": "127.0020898456", + "stop_type": "마을버스", + "node_id": "100900107", + "nxtStn": "효제초교.연동교회.김마리아활동터" + }, + { + "stop_nm": "인사동들머리.3.1독립선언터", + "ycode": "37.5719470235", + "stop_no": "01727", + "xcode": "126.983296967", + "stop_type": "마을버스", + "node_id": "100900106", + "nxtStn": "종로사우나" + }, + { + "stop_nm": "정독도서관", + "ycode": "37.580262", + "stop_no": "01728", + "xcode": "126.980074", + "stop_type": "마을버스", + "node_id": "100900105", + "nxtStn": "삼청파출소" + }, + { + "stop_nm": "오거리.한옥마을입구", + "ycode": "37.5794684375", + "stop_no": "01729", + "xcode": "126.9697392663", + "stop_type": "마을버스", + "node_id": "100900104", + "nxtStn": "통인시장.종로구보건소" + }, + { + "stop_nm": "평창공원지킴터입구", + "ycode": "37.6163963984", + "stop_no": "01732", + "xcode": "126.9757438761", + "stop_type": "마을버스", + "node_id": "100900103", + "nxtStn": "평창동산림제3초소" + }, + { + "stop_nm": "창경궁.고궁호텔.메이플레이스호텔", + "ycode": "37.5765581609", + "stop_no": "01733", + "xcode": "126.9974492169", + "stop_type": "일반차로", + "node_id": "100000360", + "nxtStn": "성대입구" + }, + { + "stop_nm": "광화문", + "ycode": "37.570337", + "stop_no": "01762", + "xcode": "126.975569", + "stop_type": "가로변시간", + "node_id": "100000329", + "nxtStn": "서울역사박물관.경희궁앞" + }, + { + "stop_nm": "종로1가", + "ycode": "37.57037", + "stop_no": "01763", + "xcode": "126.980129", + "stop_type": "가로변시간", + "node_id": "100000330", + "nxtStn": "광화문" + }, + { + "stop_nm": "종로2가", + "ycode": "37.570083", + "stop_no": "01766", + "xcode": "126.986463", + "stop_type": "가로변시간", + "node_id": "100000333", + "nxtStn": "종로3가" + }, + { + "stop_nm": "종로3가", + "ycode": "37.570635", + "stop_no": "01767", + "xcode": "126.99321", + "stop_type": "일반차로", + "node_id": "100000334", + "nxtStn": "종각역YMCA" + }, + { + "stop_nm": "종로3가", + "ycode": "37.5701024255", + "stop_no": "01768", + "xcode": "126.9909932186", + "stop_type": "가로변전일", + "node_id": "100000335", + "nxtStn": "종로4가" + }, + { + "stop_nm": "종로4가", + "ycode": "37.57047", + "stop_no": "01769", + "xcode": "126.996252", + "stop_type": "가로변시간", + "node_id": "100000336", + "nxtStn": "동대문종합시장종로6가" + }, + { + "stop_nm": "동대문종합시장종로6가", + "ycode": "37.570862", + "stop_no": "01771", + "xcode": "127.003292", + "stop_type": "가로변시간", + "node_id": "100000338", + "nxtStn": "동대문역.흥인지문" + }, + { + "stop_nm": "종로도서관", + "ycode": "37.5764842271", + "stop_no": "01776", + "xcode": "126.9671251598", + "stop_type": "마을버스", + "node_id": "100900102", + "nxtStn": "배화여중고" + }, + { + "stop_nm": "경복궁역", + "ycode": "37.5761780936", + "stop_no": "01777", + "xcode": "126.9715056448", + "stop_type": "일반차로", + "node_id": "100000343", + "nxtStn": "이대후문" + }, + { + "stop_nm": "경복궁역", + "ycode": "37.575816", + "stop_no": "01778", + "xcode": "126.97168", + "stop_type": "일반차로", + "node_id": "100000344", + "nxtStn": "안국역" + }, + { + "stop_nm": "안국역", + "ycode": "37.5766137515", + "stop_no": "01779", + "xcode": "126.985229602", + "stop_type": "일반차로", + "node_id": "100000345", + "nxtStn": "경복궁역" + }, + { + "stop_nm": "안국역", + "ycode": "37.5763185096", + "stop_no": "01780", + "xcode": "126.9855059829", + "stop_type": "일반차로", + "node_id": "100000346", + "nxtStn": "창덕궁" + }, + { + "stop_nm": "창덕궁", + "ycode": "37.577519", + "stop_no": "01781", + "xcode": "126.988901", + "stop_type": "일반차로", + "node_id": "100000347", + "nxtStn": "안국역" + }, + { + "stop_nm": "성대입구", + "ycode": "37.583283", + "stop_no": "01782", + "xcode": "126.999229", + "stop_type": "일반차로", + "node_id": "100000348", + "nxtStn": "삼선교.한성대학교.조소앙활동터" + }, + { + "stop_nm": "종로사우나", + "ycode": "37.5738011149", + "stop_no": "01790", + "xcode": "126.9877503526", + "stop_type": "마을버스", + "node_id": "100900101", + "nxtStn": "운현궁" + }, + { + "stop_nm": "엄마분식", + "ycode": "37.6012424257", + "stop_no": "01791", + "xcode": "126.9557163281", + "stop_type": "마을버스", + "node_id": "100900180", + "nxtStn": "상명대입구" + }, + { + "stop_nm": "삼청파출소", + "ycode": "37.58164517", + "stop_no": "01792", + "xcode": "126.9813258198", + "stop_type": "마을버스", + "node_id": "100900100", + "nxtStn": "삼청동주민센터" + }, + { + "stop_nm": "통인시장.종로구보건소", + "ycode": "37.5803350289", + "stop_no": "01793", + "xcode": "126.9687504797", + "stop_type": "마을버스", + "node_id": "100900099", + "nxtStn": "박노수미술관" + }, + { + "stop_nm": "종로5가역", + "ycode": "37.570671358", + "stop_no": "01794", + "xcode": "127.0000249058", + "stop_type": "마을버스", + "node_id": "100900191", + "nxtStn": "종로5가역.중부교육지원청" + }, + { + "stop_nm": "평창동산림제3초소", + "ycode": "37.617356", + "stop_no": "01795", + "xcode": "126.977104", + "stop_type": "마을버스", + "node_id": "100900098", + "nxtStn": "김창열.윤명로화실" + }, + { + "stop_nm": "배화여중고", + "ycode": "37.5767556306", + "stop_no": "01796", + "xcode": "126.9678156705", + "stop_type": "마을버스", + "node_id": "100900145", + "nxtStn": "사직공원.경복궁역입구" + }, + { + "stop_nm": "대학로입구.이화사거리", + "ycode": "37.5759841652", + "stop_no": "01797", + "xcode": "127.0025801998", + "stop_type": "마을버스", + "node_id": "100900143", + "nxtStn": "충신시장" + }, + { + "stop_nm": "운현궁", + "ycode": "37.5752716136", + "stop_no": "01798", + "xcode": "126.9869813803", + "stop_type": "마을버스", + "node_id": "100900144", + "nxtStn": "안국역2번출구앞" + }, + { + "stop_nm": "상명대입구", + "ycode": "37.6000210109", + "stop_no": "01799", + "xcode": "126.9569583018", + "stop_type": "마을버스", + "node_id": "100900142", + "nxtStn": "상명대입구.석파랑" + }, + { + "stop_nm": "삼청동주민센터", + "ycode": "37.5846846831", + "stop_no": "01800", + "xcode": "126.9822105151", + "stop_type": "마을버스", + "node_id": "100900141", + "nxtStn": "금융연수원" + }, + { + "stop_nm": "박노수미술관", + "ycode": "37.5810265604", + "stop_no": "01801", + "xcode": "126.9668944502", + "stop_type": "마을버스", + "node_id": "100900140", + "nxtStn": "종점" + }, + { + "stop_nm": "김창열.윤명로화실", + "ycode": "37.616304998", + "stop_no": "01802", + "xcode": "126.9783685436", + "stop_type": "마을버스", + "node_id": "100900139", + "nxtStn": "감람산기도원" + }, + { + "stop_nm": "사직공원.경복궁역입구", + "ycode": "37.5762206893", + "stop_no": "01803", + "xcode": "126.9689039095", + "stop_type": "마을버스", + "node_id": "100900138", + "nxtStn": "사직단.어린이도서관" + }, + { + "stop_nm": "충신시장", + "ycode": "37.5749766498", + "stop_no": "01804", + "xcode": "127.005404874", + "stop_type": "마을버스", + "node_id": "100900137", + "nxtStn": "동대문역.흥인지문" + }, + { + "stop_nm": "안국역2번출구앞", + "ycode": "37.5771728174", + "stop_no": "01805", + "xcode": "126.9861183272", + "stop_type": "마을버스", + "node_id": "100900189", + "nxtStn": "재동초등학교" + }, + { + "stop_nm": "금융연수원", + "ycode": "37.5858776706", + "stop_no": "01807", + "xcode": "126.981847891", + "stop_type": "마을버스", + "node_id": "100900135", + "nxtStn": "삼청공원삼거리.옥호정터" + }, + { + "stop_nm": "감람산기도원", + "ycode": "37.6159439291", + "stop_no": "01809", + "xcode": "126.9798729651", + "stop_type": "마을버스", + "node_id": "100900134", + "nxtStn": "연화정사" + }, + { + "stop_nm": "카센터.터널앞", + "ycode": "37.5741644592", + "stop_no": "01810", + "xcode": "126.96585932", + "stop_type": "마을버스", + "node_id": "100900133", + "nxtStn": "대신중고" + }, + { + "stop_nm": "재동초등학교", + "ycode": "37.578791085", + "stop_no": "01812", + "xcode": "126.9853617134", + "stop_type": "마을버스", + "node_id": "100900131", + "nxtStn": "현대사거리" + }, + { + "stop_nm": "삼청공원삼거리.옥호정터", + "ycode": "37.5874185176", + "stop_no": "01814", + "xcode": "126.9817444742", + "stop_type": "마을버스", + "node_id": "100900129", + "nxtStn": "종점" + }, + { + "stop_nm": "이화사거리", + "ycode": "37.5753200672", + "stop_no": "01815", + "xcode": "127.0022812884", + "stop_type": "마을버스", + "node_id": "100900128", + "nxtStn": "방송통신대.이화장" + }, + { + "stop_nm": "연화정사", + "ycode": "37.6146490046", + "stop_no": "01816", + "xcode": "126.9794938432", + "stop_type": "마을버스", + "node_id": "100900127", + "nxtStn": "형제봉입구" + }, + { + "stop_nm": "대신중고", + "ycode": "37.5726178078", + "stop_no": "01817", + "xcode": "126.9616893251", + "stop_type": "마을버스", + "node_id": "100900126", + "nxtStn": "교남동주민센터" + }, + { + "stop_nm": "현대사거리", + "ycode": "37.579306", + "stop_no": "01819", + "xcode": "126.987", + "stop_type": "마을버스", + "node_id": "100900125", + "nxtStn": "볼링장" + }, + { + "stop_nm": "교남동주민센터", + "ycode": "37.5721522968", + "stop_no": "01820", + "xcode": "126.9612800199", + "stop_type": "마을버스", + "node_id": "100900215", + "nxtStn": "교남동새마을금고" + }, + { + "stop_nm": "부암동주민센터.무계원", + "ycode": "37.5929353403", + "stop_no": "01821", + "xcode": "126.9637682263", + "stop_type": "마을버스", + "node_id": "100900181", + "nxtStn": "석파정.서울미술관" + }, + { + "stop_nm": "형제봉입구", + "ycode": "37.6128643152", + "stop_no": "01823", + "xcode": "126.9816861503", + "stop_type": "마을버스", + "node_id": "100900124", + "nxtStn": "지구촌교회" + }, + { + "stop_nm": "교남동새마을금고", + "ycode": "37.5714943551", + "stop_no": "01824", + "xcode": "126.962337459", + "stop_type": "마을버스", + "node_id": "100900123", + "nxtStn": "월암공원" + }, + { + "stop_nm": "창신초교", + "ycode": "37.5760372123", + "stop_no": "01825", + "xcode": "127.0157200961", + "stop_type": "마을버스", + "node_id": "100900122", + "nxtStn": "숭인1동주민센터" + }, + { + "stop_nm": "가회동주민센터", + "ycode": "37.5799426497", + "stop_no": "01826", + "xcode": "126.9851293823", + "stop_type": "마을버스", + "node_id": "100900168", + "nxtStn": "북촌한옥마을입구.정세권활동터" + }, + { + "stop_nm": "볼링장", + "ycode": "37.579317", + "stop_no": "01827", + "xcode": "126.98817", + "stop_type": "마을버스", + "node_id": "100900167", + "nxtStn": "인사미술공간.세탁소" + }, + { + "stop_nm": "부암슈퍼", + "ycode": "37.5947600723", + "stop_no": "01829", + "xcode": "126.9638602023", + "stop_type": "마을버스", + "node_id": "100900166", + "nxtStn": "하림각" + }, + { + "stop_nm": "지구촌교회", + "ycode": "37.613106", + "stop_no": "01830", + "xcode": "126.979238", + "stop_type": "마을버스", + "node_id": "100900165", + "nxtStn": "보현빌라" + }, + { + "stop_nm": "월암공원", + "ycode": "37.571226", + "stop_no": "01831", + "xcode": "126.964693", + "stop_type": "마을버스", + "node_id": "100900164", + "nxtStn": "스위스대사관" + }, + { + "stop_nm": "숭인1동주민센터", + "ycode": "37.5774150014", + "stop_no": "01832", + "xcode": "127.0155607478", + "stop_type": "마을버스", + "node_id": "100900163", + "nxtStn": "숭인1동주민센터.창신역4번출구" + }, + { + "stop_nm": "북촌한옥마을입구.정세권활동터", + "ycode": "37.5812807738", + "stop_no": "01833", + "xcode": "126.9851687446", + "stop_type": "마을버스", + "node_id": "100900162", + "nxtStn": "안국선원.삼거리" + }, + { + "stop_nm": "하림각", + "ycode": "37.5976847268", + "stop_no": "01835", + "xcode": "126.9629663842", + "stop_type": "마을버스", + "node_id": "100900161", + "nxtStn": "세검정교회" + }, + { + "stop_nm": "보현빌라", + "ycode": "37.615382", + "stop_no": "01836", + "xcode": "126.978421", + "stop_type": "마을버스", + "node_id": "100900160", + "nxtStn": "김종영미술관" + }, + { + "stop_nm": "스위스대사관", + "ycode": "37.570137", + "stop_no": "01837", + "xcode": "126.965696", + "stop_type": "마을버스", + "node_id": "100900159", + "nxtStn": "서울시교육청" + }, + { + "stop_nm": "안국선원.삼거리", + "ycode": "37.5827432497", + "stop_no": "01839", + "xcode": "126.9852205387", + "stop_type": "마을버스", + "node_id": "100900157", + "nxtStn": "사우디대사관" + }, + { + "stop_nm": "세검정교회", + "ycode": "37.599386", + "stop_no": "01840", + "xcode": "126.960029", + "stop_type": "마을버스", + "node_id": "100900156", + "nxtStn": "상명대입구" + }, + { + "stop_nm": "혜화동로터리", + "ycode": "37.5859196111", + "stop_no": "01841", + "xcode": "127.0010032298", + "stop_type": "마을버스", + "node_id": "100900200", + "nxtStn": "혜화초등학교" + }, + { + "stop_nm": "김종영미술관", + "ycode": "37.6132637884", + "stop_no": "01842", + "xcode": "126.9781122953", + "stop_type": "마을버스", + "node_id": "100900155", + "nxtStn": "롯데아파트" + }, + { + "stop_nm": "서울시교육청", + "ycode": "37.569383", + "stop_no": "01843", + "xcode": "126.966702", + "stop_type": "마을버스", + "node_id": "100900154", + "nxtStn": "강북삼성병원" + }, + { + "stop_nm": "창신쌍용1단지.종로센트레빌아파트", + "ycode": "37.5803228198", + "stop_no": "01844", + "xcode": "127.0155692785", + "stop_type": "마을버스", + "node_id": "100900210", + "nxtStn": "청룡사.보문파크뷰자이아파트" + }, + { + "stop_nm": "사우디대사관", + "ycode": "37.583863308", + "stop_no": "01845", + "xcode": "126.9852486243", + "stop_type": "마을버스", + "node_id": "100900153", + "nxtStn": "감사원" + }, + { + "stop_nm": "상명대입구", + "ycode": "37.5998544708", + "stop_no": "01846", + "xcode": "126.9574023475", + "stop_type": "마을버스", + "node_id": "100900152", + "nxtStn": "상명대정문" + }, + { + "stop_nm": "혜화초등학교", + "ycode": "37.5873892922", + "stop_no": "01847", + "xcode": "126.9999909413", + "stop_type": "마을버스", + "node_id": "100900151", + "nxtStn": "국민생활관" + }, + { + "stop_nm": "강북삼성병원", + "ycode": "37.5685315243", + "stop_no": "01849", + "xcode": "126.9683376852", + "stop_type": "마을버스", + "node_id": "100900149", + "nxtStn": "종점" + }, + { + "stop_nm": "청룡사.보문파크뷰자이아파트", + "ycode": "37.5797846496", + "stop_no": "01850", + "xcode": "127.0171508787", + "stop_type": "마을버스", + "node_id": "100900148", + "nxtStn": "종로센트레빌후문.e편한세상보문아파트" + }, + { + "stop_nm": "감사원", + "ycode": "37.5862656518", + "stop_no": "01851", + "xcode": "126.9855618026", + "stop_type": "마을버스", + "node_id": "100900147", + "nxtStn": "통일부" + }, + { + "stop_nm": "국민생활관", + "ycode": "37.5896275957", + "stop_no": "01852", + "xcode": "126.9993137839", + "stop_type": "마을버스", + "node_id": "100900201", + "nxtStn": "서울국제고등학교" + }, + { + "stop_nm": "종로센트레빌후문.e편한세상보문아파트", + "ycode": "37.581911", + "stop_no": "01855", + "xcode": "127.015935", + "stop_type": "마을버스", + "node_id": "100900173", + "nxtStn": "명신초.삼선푸르지오.힐스테이트" + }, + { + "stop_nm": "통일부", + "ycode": "37.5875308468", + "stop_no": "01856", + "xcode": "126.9861073451", + "stop_type": "마을버스", + "node_id": "100900172", + "nxtStn": "성대후문.와룡공원" + }, + { + "stop_nm": "서울국제고등학교", + "ycode": "37.5890742944", + "stop_no": "01858", + "xcode": "126.9971407875", + "stop_type": "마을버스", + "node_id": "100900171", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "성대후문.와룡공원", + "ycode": "37.5891522774", + "stop_no": "01860", + "xcode": "126.989734001", + "stop_type": "마을버스", + "node_id": "100900203", + "nxtStn": "종점" + }, + { + "stop_nm": "상명초등학교", + "ycode": "37.600904926", + "stop_no": "01861", + "xcode": "126.9568173576", + "stop_type": "마을버스", + "node_id": "100900170", + "nxtStn": "경진빌라" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5878406881", + "stop_no": "01862", + "xcode": "126.9965690016", + "stop_type": "마을버스", + "node_id": "100900169", + "nxtStn": "명륜시장.성대후문" + }, + { + "stop_nm": "경진빌라", + "ycode": "37.6018640911", + "stop_no": "01863", + "xcode": "126.9579482257", + "stop_type": "마을버스", + "node_id": "100900002", + "nxtStn": "완성빌라" + }, + { + "stop_nm": "명륜시장.성대후문", + "ycode": "37.5887246101", + "stop_no": "01864", + "xcode": "126.9952305162", + "stop_type": "마을버스", + "node_id": "100900004", + "nxtStn": "양현관" + }, + { + "stop_nm": "완성빌라", + "ycode": "37.6033399708", + "stop_no": "01865", + "xcode": "126.9576665157", + "stop_type": "마을버스", + "node_id": "100900006", + "nxtStn": "상명대후문" + }, + { + "stop_nm": "양현관", + "ycode": "37.5897680031", + "stop_no": "01866", + "xcode": "126.9937685575", + "stop_type": "마을버스", + "node_id": "100900008", + "nxtStn": "샘미용실" + }, + { + "stop_nm": "상명대후문", + "ycode": "37.6040715802", + "stop_no": "01868", + "xcode": "126.9574633677", + "stop_type": "마을버스", + "node_id": "100900010", + "nxtStn": "산정빌라" + }, + { + "stop_nm": "샘미용실", + "ycode": "37.5902545716", + "stop_no": "01869", + "xcode": "126.9934084203", + "stop_type": "마을버스", + "node_id": "100900012", + "nxtStn": "종점" + }, + { + "stop_nm": "산정빌라", + "ycode": "37.6052835831", + "stop_no": "01870", + "xcode": "126.9575782035", + "stop_type": "마을버스", + "node_id": "100900014", + "nxtStn": "구기빌라" + }, + { + "stop_nm": "구기빌라", + "ycode": "37.6061334517", + "stop_no": "01872", + "xcode": "126.9579809335", + "stop_type": "마을버스", + "node_id": "100900018", + "nxtStn": "마트앞" + }, + { + "stop_nm": "마트앞", + "ycode": "37.6066987064", + "stop_no": "01873", + "xcode": "126.958756466", + "stop_type": "마을버스", + "node_id": "100900019", + "nxtStn": "국민은행.세검정지점" + }, + { + "stop_nm": "국민은행.세검정지점", + "ycode": "37.604952", + "stop_no": "01874", + "xcode": "126.960876", + "stop_type": "마을버스", + "node_id": "100900022", + "nxtStn": "화정박물관" + }, + { + "stop_nm": "혜화역4번출구", + "ycode": "37.583509", + "stop_no": "01876", + "xcode": "127.001555", + "stop_type": "마을버스", + "node_id": "100900027", + "nxtStn": "혜화역.서울대병원입구" + }, + { + "stop_nm": "방송통신대앞", + "ycode": "37.5786973612", + "stop_no": "01877", + "xcode": "127.0019926794", + "stop_type": "마을버스", + "node_id": "100900028", + "nxtStn": "이화사거리" + }, + { + "stop_nm": "서울대치과대학", + "ycode": "37.577411", + "stop_no": "01878", + "xcode": "126.997802", + "stop_type": "마을버스", + "node_id": "100900030", + "nxtStn": "서울대어린이병원응급실.갑상선센터" + }, + { + "stop_nm": "효제초교.연동교회.김마리아활동터", + "ycode": "37.5736413355", + "stop_no": "01879", + "xcode": "127.0022087811", + "stop_type": "마을버스", + "node_id": "100900033", + "nxtStn": "대학로입구.이화사거리" + }, + { + "stop_nm": "성균관대학교", + "ycode": "37.5884638684", + "stop_no": "01881", + "xcode": "126.9900035953", + "stop_type": "마을버스", + "node_id": "100900204", + "nxtStn": "서울성곽.성대후문" + }, + { + "stop_nm": "독립문역", + "ycode": "37.5732838531", + "stop_no": "01882", + "xcode": "126.9594077577", + "stop_type": "마을버스", + "node_id": "100900214", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "서울대치과대학", + "ycode": "37.577572", + "stop_no": "01883", + "xcode": "126.99787", + "stop_type": "마을버스", + "node_id": "100900038", + "nxtStn": "원남동" + }, + { + "stop_nm": "이화사거리", + "ycode": "37.5769483437", + "stop_no": "01886", + "xcode": "127.0020084833", + "stop_type": "마을버스", + "node_id": "100900043", + "nxtStn": "방송통신대.이화장" + }, + { + "stop_nm": "서울대학교병원현관.암병원현관", + "ycode": "37.5789514712", + "stop_no": "01887", + "xcode": "126.9981567653", + "stop_type": "마을버스", + "node_id": "100900042", + "nxtStn": "서울대치과대학" + }, + { + "stop_nm": "종각.공평유적전시관", + "ycode": "37.5715937879", + "stop_no": "01888", + "xcode": "126.9832427053", + "stop_type": "마을버스", + "node_id": "100900211", + "nxtStn": "인사동들머리.3.1독립선언터" + }, + { + "stop_nm": "조계사", + "ycode": "37.5736021088", + "stop_no": "01889", + "xcode": "126.9831364101", + "stop_type": "마을버스", + "node_id": "100900213", + "nxtStn": "안국역.인사동" + }, + { + "stop_nm": "동대문역JW메리어트동대문호텔", + "ycode": "37.570859", + "stop_no": "01901", + "xcode": "127.009186", + "stop_type": "일반차로", + "node_id": "100000399", + "nxtStn": "동대문역사문화공원" + }, + { + "stop_nm": "대학로", + "ycode": "37.58189612", + "stop_no": "01902", + "xcode": "127.0021204164", + "stop_type": "일반차로", + "node_id": "100000407", + "nxtStn": "창경궁" + }, + { + "stop_nm": "창경궁", + "ycode": "37.5791596347", + "stop_no": "01903", + "xcode": "126.9964163097", + "stop_type": "일반차로", + "node_id": "100000408", + "nxtStn": "창덕궁" + }, + { + "stop_nm": "창덕궁", + "ycode": "37.5775301708", + "stop_no": "01904", + "xcode": "126.9901776043", + "stop_type": "일반차로", + "node_id": "100000409", + "nxtStn": "인사동.북촌" + }, + { + "stop_nm": "인사동.북촌", + "ycode": "37.5758950223", + "stop_no": "01905", + "xcode": "126.9837977873", + "stop_type": "일반차로", + "node_id": "100000410", + "nxtStn": "청와대" + }, + { + "stop_nm": "경복궁.국립민속박물관", + "ycode": "37.5794473961", + "stop_no": "01906", + "xcode": "126.979446549", + "stop_type": "일반차로", + "node_id": "100000411", + "nxtStn": "세종문화회관" + }, + { + "stop_nm": "세종문화회관", + "ycode": "37.573219", + "stop_no": "01907", + "xcode": "126.977004", + "stop_type": "일반차로", + "node_id": "100000412", + "nxtStn": "종점" + }, + { + "stop_nm": "통인시장", + "ycode": "37.5791187605", + "stop_no": "01910", + "xcode": "126.9713315727", + "stop_type": "일반차로", + "node_id": "100000401", + "nxtStn": "세종문화회관" + }, + { + "stop_nm": "세종문화회관", + "ycode": "37.573219", + "stop_no": "01911", + "xcode": "126.977017", + "stop_type": "일반차로", + "node_id": "100000402", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "종각역", + "ycode": "37.5693799579", + "stop_no": "01912", + "xcode": "126.9828944171", + "stop_type": "일반차로", + "node_id": "101000313", + "nxtStn": "인사동.탑골공원" + }, + { + "stop_nm": "인사동.탑골공원", + "ycode": "37.5701155367", + "stop_no": "01913", + "xcode": "126.9888006413", + "stop_type": "일반차로", + "node_id": "100000403", + "nxtStn": "종묘.세운상가" + }, + { + "stop_nm": "종묘.세운상가", + "ycode": "37.5703548529", + "stop_no": "01914", + "xcode": "126.9935556798", + "stop_type": "일반차로", + "node_id": "100000404", + "nxtStn": "광장시장" + }, + { + "stop_nm": "광장시장", + "ycode": "37.5706237295", + "stop_no": "01915", + "xcode": "126.9996734151", + "stop_type": "일반차로", + "node_id": "100000405", + "nxtStn": "동묘.숭인동도깨비시장" + }, + { + "stop_nm": "동묘.숭인동도깨비시장", + "ycode": "37.5734766013", + "stop_no": "01916", + "xcode": "127.0180439092", + "stop_type": "일반차로", + "node_id": "100000406", + "nxtStn": "서울풍물시장" + }, + { + "stop_nm": "서울풍물시장", + "ycode": "37.5733400255", + "stop_no": "01917", + "xcode": "127.0231780999", + "stop_type": "일반차로", + "node_id": "105000553", + "nxtStn": "신당동중앙시장" + }, + { + "stop_nm": "청와대", + "ycode": "37.582684814", + "stop_no": "01918", + "xcode": "126.9737600308", + "stop_type": "일반차로", + "node_id": "100000400", + "nxtStn": "경복궁.국립민속박물관" + }, + { + "stop_nm": "남대문세무서.서울백병원", + "ycode": "37.5649848069", + "stop_no": "02001", + "xcode": "126.9875299251", + "stop_type": "중앙차로", + "node_id": "101000001", + "nxtStn": "남산1호터널" + }, + { + "stop_nm": "서울백병원.국가인권위.안중근활동터", + "ycode": "37.5643504711", + "stop_no": "02002", + "xcode": "126.9878515151", + "stop_type": "중앙차로", + "node_id": "101000002", + "nxtStn": "종로3가.탑골공원" + }, + { + "stop_nm": "서울역버스환승센터", + "ycode": "37.5551460158", + "stop_no": "02003", + "xcode": "126.9722570849", + "stop_type": "중앙차로", + "node_id": "101000003", + "nxtStn": "갈월동" + }, + { + "stop_nm": "서울역버스환승센터", + "ycode": "37.5553889891", + "stop_no": "02004", + "xcode": "126.9725950761", + "stop_type": "중앙차로", + "node_id": "101000004", + "nxtStn": "갈월동" + }, + { + "stop_nm": "서울역버스환승센터", + "ycode": "37.5553876977", + "stop_no": "02005", + "xcode": "126.9727617448", + "stop_type": "중앙차로", + "node_id": "101000005", + "nxtStn": "남대문시장.회현역" + }, + { + "stop_nm": "서울역버스환승센터", + "ycode": "37.5554794133", + "stop_no": "02006", + "xcode": "126.9728547738", + "stop_type": "중앙차로", + "node_id": "101000006", + "nxtStn": "숭례문" + }, + { + "stop_nm": "서울역버스환승센터.강우규의거터", + "ycode": "37.555411", + "stop_no": "02007", + "xcode": "126.972926", + "stop_type": "중앙차로", + "node_id": "101000007", + "nxtStn": "남대문시장앞.이회영활동터" + }, + { + "stop_nm": "숭례문", + "ycode": "37.5586388574", + "stop_no": "02008", + "xcode": "126.9737783904", + "stop_type": "중앙차로", + "node_id": "101000008", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "숭례문(가상)", + "ycode": "37.5597967723", + "stop_no": "02099", + "xcode": "126.9743556496", + "stop_type": "가상정류장", + "node_id": "101000329", + "nxtStn": "숭례문" + }, + { + "stop_nm": "서울시청", + "ycode": "37.5661382638", + "stop_no": "02100", + "xcode": "126.9806320857", + "stop_type": "일반차로", + "node_id": "101000303", + "nxtStn": "시청교차로(경유)" + }, + { + "stop_nm": "만리동고개", + "ycode": "37.551787064", + "stop_no": "02101", + "xcode": "126.9626582054", + "stop_type": "일반차로", + "node_id": "101000009", + "nxtStn": "한겨레신문사" + }, + { + "stop_nm": "손기정체육공원입구", + "ycode": "37.5544459527", + "stop_no": "02102", + "xcode": "126.9662339013", + "stop_type": "일반차로", + "node_id": "101000010", + "nxtStn": "만리시장입구" + }, + { + "stop_nm": "서울의료보건고등학교.서울역서부", + "ycode": "37.555848", + "stop_no": "02103", + "xcode": "126.968902", + "stop_type": "일반차로", + "node_id": "101000011", + "nxtStn": "손기정체육공원입구" + }, + { + "stop_nm": "서울역서부", + "ycode": "37.556235", + "stop_no": "02104", + "xcode": "126.969153", + "stop_type": "일반차로", + "node_id": "101000012", + "nxtStn": "서울의료보건고등학교.서울역서부" + }, + { + "stop_nm": "서울역서부", + "ycode": "37.557133", + "stop_no": "02105", + "xcode": "126.969212", + "stop_type": "일반차로", + "node_id": "101000013", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "중림동교차로", + "ycode": "37.5583836266", + "stop_no": "02106", + "xcode": "126.9691354395", + "stop_type": "일반차로", + "node_id": "101000014", + "nxtStn": "서울역공항철도15번출구.국립극단" + }, + { + "stop_nm": "종근당.충정로역", + "ycode": "37.559648", + "stop_no": "02107", + "xcode": "126.964543", + "stop_type": "일반차로", + "node_id": "101000015", + "nxtStn": "서소문" + }, + { + "stop_nm": "한국경제신문사.서소문역사공원", + "ycode": "37.5602111497", + "stop_no": "02108", + "xcode": "126.9678680149", + "stop_type": "일반차로", + "node_id": "101000016", + "nxtStn": "남대문시장" + }, + { + "stop_nm": "한국경제신문사.서소문역사공원", + "ycode": "37.5606234736", + "stop_no": "02109", + "xcode": "126.9681135141", + "stop_type": "일반차로", + "node_id": "101000017", + "nxtStn": "충정로역2호선" + }, + { + "stop_nm": "경찰청.동북아역사재단", + "ycode": "37.5630494858", + "stop_no": "02110", + "xcode": "126.9691267228", + "stop_type": "일반차로", + "node_id": "101000018", + "nxtStn": "미동초등학교" + }, + { + "stop_nm": "장충동써미트호텔", + "ycode": "37.562273", + "stop_no": "02111", + "xcode": "127.00667", + "stop_type": "일반차로", + "node_id": "101000300", + "nxtStn": "광희동더스프라지르서울동대문" + }, + { + "stop_nm": "서대문경찰서.농협은행.유관순활동터", + "ycode": "37.5649062803", + "stop_no": "02113", + "xcode": "126.9677868059", + "stop_type": "일반차로", + "node_id": "101000020", + "nxtStn": "영천시장" + }, + { + "stop_nm": "염천교", + "ycode": "37.559869", + "stop_no": "02116", + "xcode": "126.973113", + "stop_type": "일반차로", + "node_id": "101000021", + "nxtStn": "중림동교차로" + }, + { + "stop_nm": "숭례문", + "ycode": "37.558401", + "stop_no": "02117", + "xcode": "126.973359", + "stop_type": "일반차로", + "node_id": "101000022", + "nxtStn": "경찰청.동북아역사재단" + }, + { + "stop_nm": "숭례문.한국일보", + "ycode": "37.5587713091", + "stop_no": "02118", + "xcode": "126.9737375955", + "stop_type": "일반차로", + "node_id": "101000023", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "후암삼거리", + "ycode": "37.553408", + "stop_no": "02120", + "xcode": "126.975993", + "stop_type": "일반차로", + "node_id": "101000025", + "nxtStn": "남대문경찰서" + }, + { + "stop_nm": "숭례문", + "ycode": "37.5587633765", + "stop_no": "02121", + "xcode": "126.974362745", + "stop_type": "일반차로", + "node_id": "101000026", + "nxtStn": "롯데영프라자" + }, + { + "stop_nm": "숭례문", + "ycode": "37.5584195299", + "stop_no": "02122", + "xcode": "126.9740436876", + "stop_type": "일반차로", + "node_id": "101000027", + "nxtStn": "남대문시장앞.이회영활동터" + }, + { + "stop_nm": "숭례문", + "ycode": "37.5580006528", + "stop_no": "02123", + "xcode": "126.9736279452", + "stop_type": "일반차로", + "node_id": "101000028", + "nxtStn": "을지로입구역롯데호텔" + }, + { + "stop_nm": "남대문시장악세사리전문상가", + "ycode": "37.558873", + "stop_no": "02124", + "xcode": "126.976", + "stop_type": "일반차로", + "node_id": "101000029", + "nxtStn": "시청앞" + }, + { + "stop_nm": "숭례문남산방향", + "ycode": "37.5585581643", + "stop_no": "02125", + "xcode": "126.9756720863", + "stop_type": "일반차로", + "node_id": "101000030", + "nxtStn": "힐튼호텔" + }, + { + "stop_nm": "남대문시장", + "ycode": "37.561191081", + "stop_no": "02126", + "xcode": "126.9800597585", + "stop_type": "일반차로", + "node_id": "101000031", + "nxtStn": "남산3호터널" + }, + { + "stop_nm": "북창동.남대문시장", + "ycode": "37.56123", + "stop_no": "02127", + "xcode": "126.978282", + "stop_type": "가로변시간", + "node_id": "101000032", + "nxtStn": "숭례문(가상)" + }, + { + "stop_nm": "시청앞", + "ycode": "37.562197", + "stop_no": "02128", + "xcode": "126.976443", + "stop_type": "일반차로", + "node_id": "101000033", + "nxtStn": "서울신문사" + }, + { + "stop_nm": "삼성본관앞", + "ycode": "37.5620517519", + "stop_no": "02131", + "xcode": "126.9759075283", + "stop_type": "일반차로", + "node_id": "101000034", + "nxtStn": "숭례문앞" + }, + { + "stop_nm": "시청앞", + "ycode": "37.562764205", + "stop_no": "02132", + "xcode": "126.976148714", + "stop_type": "일반차로", + "node_id": "101000035", + "nxtStn": "숭례문.한국일보" + }, + { + "stop_nm": "서소문", + "ycode": "37.563191", + "stop_no": "02133", + "xcode": "126.974652", + "stop_type": "일반차로", + "node_id": "101000036", + "nxtStn": "서울신문사" + }, + { + "stop_nm": "시청.서소문청사", + "ycode": "37.5635248407", + "stop_no": "02135", + "xcode": "126.9749539314", + "stop_type": "일반차로", + "node_id": "101000038", + "nxtStn": "충정로역2호선" + }, + { + "stop_nm": "서울신문사", + "ycode": "37.5683632936", + "stop_no": "02137", + "xcode": "126.9773647051", + "stop_type": "일반차로", + "node_id": "101000039", + "nxtStn": "종로1가" + }, + { + "stop_nm": "우리은행종로지점", + "ycode": "37.5675190047", + "stop_no": "02139", + "xcode": "126.9829289124", + "stop_type": "가로변시간", + "node_id": "101000040", + "nxtStn": "종로2가" + }, + { + "stop_nm": "롯데백화점", + "ycode": "37.56451", + "stop_no": "02140", + "xcode": "126.982205", + "stop_type": "가로변전일", + "node_id": "101000041", + "nxtStn": "북창동.남대문시장" + }, + { + "stop_nm": "해운센터.롯데영프라자", + "ycode": "37.5628907847", + "stop_no": "02141", + "xcode": "126.9815478394", + "stop_type": "가로변시간", + "node_id": "101000042", + "nxtStn": "프레스센터" + }, + { + "stop_nm": "롯데영프라자", + "ycode": "37.562885", + "stop_no": "02142", + "xcode": "126.982008", + "stop_type": "가로변전일", + "node_id": "101000043", + "nxtStn": "을지로입구.로얄호텔" + }, + { + "stop_nm": "신세계백화점", + "ycode": "37.561128", + "stop_no": "02144", + "xcode": "126.981432", + "stop_type": "일반차로", + "node_id": "101000045", + "nxtStn": "남산3호터널" + }, + { + "stop_nm": "남대문시장.회현역", + "ycode": "37.5582675237", + "stop_no": "02145", + "xcode": "126.9777650546", + "stop_type": "일반차로", + "node_id": "101000046", + "nxtStn": "한국경제신문사.서소문역사공원" + }, + { + "stop_nm": "남대문시장.회현역", + "ycode": "37.5584920257", + "stop_no": "02146", + "xcode": "126.9784645011", + "stop_type": "일반차로", + "node_id": "101000047", + "nxtStn": "명동역4번출구" + }, + { + "stop_nm": "남산3호터널", + "ycode": "37.558312", + "stop_no": "02147", + "xcode": "126.98274", + "stop_type": "일반차로", + "node_id": "101000048", + "nxtStn": "용산한신아파트" + }, + { + "stop_nm": "남산3호터널.서울애니메이션센터", + "ycode": "37.5595260891", + "stop_no": "02148", + "xcode": "126.9826359346", + "stop_type": "일반차로", + "node_id": "101000049", + "nxtStn": "롯데영프라자" + }, + { + "stop_nm": "명동역4번출구", + "ycode": "37.560657", + "stop_no": "02149", + "xcode": "126.984917", + "stop_type": "일반차로", + "node_id": "101000050", + "nxtStn": "퇴계로3가.한옥마을.한국의집" + }, + { + "stop_nm": "퇴계로2가.명동역5번출구", + "ycode": "37.56093", + "stop_no": "02150", + "xcode": "126.984362", + "stop_type": "일반차로", + "node_id": "101000051", + "nxtStn": "남대문시장.회현역" + }, + { + "stop_nm": "퇴계로3가.한옥마을.한국의집", + "ycode": "37.5612508237", + "stop_no": "02151", + "xcode": "126.9917771969", + "stop_type": "가로변전일", + "node_id": "101000052", + "nxtStn": "명동역.세종호텔" + }, + { + "stop_nm": "퇴계로3가.한옥마을.한국의집", + "ycode": "37.560902", + "stop_no": "02152", + "xcode": "126.99241", + "stop_type": "가로변시간", + "node_id": "101000053", + "nxtStn": "충무로역2번출구.대한극장앞" + }, + { + "stop_nm": "충무로역2번출구.대한극장앞", + "ycode": "37.561238", + "stop_no": "02153", + "xcode": "126.994728", + "stop_type": "가로변전일", + "node_id": "101000054", + "nxtStn": "베이튼호텔" + }, + { + "stop_nm": "충무로역8번출구.대한극장앞", + "ycode": "37.5620371603", + "stop_no": "02154", + "xcode": "126.9964921507", + "stop_type": "가로변전일", + "node_id": "101000055", + "nxtStn": "퇴계로3가.한옥마을.한국의집" + }, + { + "stop_nm": "초동", + "ycode": "37.5633461766", + "stop_no": "02155", + "xcode": "126.9931119513", + "stop_type": "일반차로", + "node_id": "101000056", + "nxtStn": "을지로4가.베스트웨스턴국도" + }, + { + "stop_nm": "을지로입구.로얄호텔", + "ycode": "37.5658757422", + "stop_no": "02156", + "xcode": "126.9853902774", + "stop_type": "일반차로", + "node_id": "101000057", + "nxtStn": "을지로2가.파인에비뉴" + }, + { + "stop_nm": "을지로입구.시청입구", + "ycode": "37.5661382638", + "stop_no": "02157", + "xcode": "126.9811712097", + "stop_type": "일반차로", + "node_id": "101000058", + "nxtStn": "시청.서소문청사" + }, + { + "stop_nm": "을지로2가.기업은행본점.서울노동청", + "ycode": "37.566246226", + "stop_no": "02158", + "xcode": "126.9865233528", + "stop_type": "일반차로", + "node_id": "101000059", + "nxtStn": "롯데백화점" + }, + { + "stop_nm": "을지로2가.파인에비뉴", + "ycode": "37.566072", + "stop_no": "02159", + "xcode": "126.98867", + "stop_type": "일반차로", + "node_id": "101000060", + "nxtStn": "을지로4가.베스트웨스턴국도" + }, + { + "stop_nm": "을지로3가", + "ycode": "37.566375", + "stop_no": "02160", + "xcode": "126.990263", + "stop_type": "일반차로", + "node_id": "101000061", + "nxtStn": "을지로2가.기업은행본점.서울노동청" + }, + { + "stop_nm": "을지로3가", + "ycode": "37.5661205237", + "stop_no": "02161", + "xcode": "126.9913276421", + "stop_type": "일반차로", + "node_id": "101000062", + "nxtStn": "을지로4가.베스트웨스턴국도" + }, + { + "stop_nm": "을지로4가", + "ycode": "37.566687", + "stop_no": "02162", + "xcode": "126.995933", + "stop_type": "일반차로", + "node_id": "101000063", + "nxtStn": "을지로3가" + }, + { + "stop_nm": "을지로4가.베스트웨스턴국도", + "ycode": "37.5664010399", + "stop_no": "02163", + "xcode": "126.9968473297", + "stop_type": "일반차로", + "node_id": "101000064", + "nxtStn": "중구청앞.덕수중학교" + }, + { + "stop_nm": "중구청앞.덕수중학교", + "ycode": "37.5647745951", + "stop_no": "02164", + "xcode": "126.9981401348", + "stop_type": "일반차로", + "node_id": "101000065", + "nxtStn": "충무로역.호텔피제이" + }, + { + "stop_nm": "방산시장.을지로4가역6번출구", + "ycode": "37.5668182855", + "stop_no": "02165", + "xcode": "126.999258524", + "stop_type": "일반차로", + "node_id": "101000066", + "nxtStn": "을지로4가" + }, + { + "stop_nm": "을지로5가.중부시장", + "ycode": "37.5666200422", + "stop_no": "02166", + "xcode": "127.0011150411", + "stop_type": "일반차로", + "node_id": "101000067", + "nxtStn": "을지로6가.국립중앙의료원" + }, + { + "stop_nm": "방산시장.훈련원종합체육관", + "ycode": "37.5679608485", + "stop_no": "02167", + "xcode": "127.0024044565", + "stop_type": "일반차로", + "node_id": "101000068", + "nxtStn": "종로5가" + }, + { + "stop_nm": "을지로5가.훈련원종합체육관", + "ycode": "37.5658243542", + "stop_no": "02168", + "xcode": "127.0025945654", + "stop_type": "일반차로", + "node_id": "101000069", + "nxtStn": "방산시장.훈련원종합체육관" + }, + { + "stop_nm": "을지로6가.국립중앙의료원", + "ycode": "37.566173", + "stop_no": "02169", + "xcode": "127.006233", + "stop_type": "일반차로", + "node_id": "101000070", + "nxtStn": "광희동" + }, + { + "stop_nm": "광희동", + "ycode": "37.5650528273", + "stop_no": "02170", + "xcode": "127.0072096931", + "stop_type": "일반차로", + "node_id": "101000071", + "nxtStn": "퇴계로6가" + }, + { + "stop_nm": "광희동", + "ycode": "37.565171", + "stop_no": "02171", + "xcode": "127.00772", + "stop_type": "일반차로", + "node_id": "101000072", + "nxtStn": "동대문역사문화공원" + }, + { + "stop_nm": "을지로6가.국립중앙의료원", + "ycode": "37.5664631128", + "stop_no": "02172", + "xcode": "127.0058434821", + "stop_type": "일반차로", + "node_id": "101000073", + "nxtStn": "방산시장.을지로4가역6번출구" + }, + { + "stop_nm": "동대문역사문화공원", + "ycode": "37.5673541422", + "stop_no": "02173", + "xcode": "127.0083555318", + "stop_type": "일반차로", + "node_id": "101000074", + "nxtStn": "동국대입구앰배서더호텔" + }, + { + "stop_nm": "동대문역사문화공원", + "ycode": "37.567483", + "stop_no": "02174", + "xcode": "127.00917", + "stop_type": "일반차로", + "node_id": "101000075", + "nxtStn": "동대문역.흥인지문" + }, + { + "stop_nm": "충무아트센터.스포츠센터.중부소방서", + "ycode": "37.565168", + "stop_no": "02177", + "xcode": "127.013527", + "stop_type": "가로변전일", + "node_id": "101000077", + "nxtStn": "을지로6가.국립중앙의료원" + }, + { + "stop_nm": "충무아트센터.스포츠센터.중부소방서", + "ycode": "37.5650178857", + "stop_no": "02178", + "xcode": "127.0147408667", + "stop_type": "가로변시간", + "node_id": "101000078", + "nxtStn": "신당역.중앙시장앞" + }, + { + "stop_nm": "성동공업고등학교(무궁화회관)", + "ycode": "37.5683481924", + "stop_no": "02179", + "xcode": "127.0157558376", + "stop_type": "일반차로", + "node_id": "101000079", + "nxtStn": "신당동떡볶이타운.중구여성플라자" + }, + { + "stop_nm": "성동공업고등학교앞", + "ycode": "37.5686950625", + "stop_no": "02180", + "xcode": "127.0161294881", + "stop_type": "일반차로", + "node_id": "101000080", + "nxtStn": "동묘앞역5번출구" + }, + { + "stop_nm": "신당역.중앙시장앞", + "ycode": "37.5657282804", + "stop_no": "02181", + "xcode": "127.0187426545", + "stop_type": "가로변시간", + "node_id": "101000081", + "nxtStn": "충무아트센터.스포츠센터.중부소방서" + }, + { + "stop_nm": "신당역.중앙시장앞", + "ycode": "37.5654920748", + "stop_no": "02182", + "xcode": "127.0194795301", + "stop_type": "가로변전일", + "node_id": "101000082", + "nxtStn": "성동고등학교" + }, + { + "stop_nm": "성동고등학교", + "ycode": "37.565595", + "stop_no": "02183", + "xcode": "127.022183", + "stop_type": "가로변시간", + "node_id": "101000083", + "nxtStn": "신당동떡볶이타운.중구여성플라자" + }, + { + "stop_nm": "성동고등학교", + "ycode": "37.56524", + "stop_no": "02184", + "xcode": "127.022398", + "stop_type": "가로변시간", + "node_id": "101000084", + "nxtStn": "신당파인힐하나유보라" + }, + { + "stop_nm": "신당동떡볶이타운.중구여성플라자", + "ycode": "37.562798", + "stop_no": "02187", + "xcode": "127.015095", + "stop_type": "일반차로", + "node_id": "101000085", + "nxtStn": "신당동.청구역" + }, + { + "stop_nm": "신당동떡볶이타운.중구여성플라자", + "ycode": "37.5623100443", + "stop_no": "02188", + "xcode": "127.0151908517", + "stop_type": "일반차로", + "node_id": "101000086", + "nxtStn": "성동공업고등학교앞" + }, + { + "stop_nm": "신당동.청구역", + "ycode": "37.5589483023", + "stop_no": "02189", + "xcode": "127.0132161263", + "stop_type": "일반차로", + "node_id": "101000087", + "nxtStn": "신당동떡볶이타운.중구여성플라자" + }, + { + "stop_nm": "신당동.청구역", + "ycode": "37.559257398", + "stop_no": "02190", + "xcode": "127.0130316796", + "stop_type": "일반차로", + "node_id": "101000088", + "nxtStn": "약수역2번출구.가온도서관" + }, + { + "stop_nm": "약수역2번출구.가온도서관", + "ycode": "37.555794", + "stop_no": "02191", + "xcode": "127.011043", + "stop_type": "일반차로", + "node_id": "101000089", + "nxtStn": "약수역8번출구.신당사회복지관" + }, + { + "stop_nm": "약수역3번출구.약수하이츠", + "ycode": "37.5557496102", + "stop_no": "02192", + "xcode": "127.0113796895", + "stop_type": "일반차로", + "node_id": "101000090", + "nxtStn": "신당동.청구역" + }, + { + "stop_nm": "약수역4번출구.금호터널입구", + "ycode": "37.553399", + "stop_no": "02193", + "xcode": "127.012012", + "stop_type": "일반차로", + "node_id": "101000091", + "nxtStn": "약수역3번출구.약수하이츠" + }, + { + "stop_nm": "약수역5번출구.금호터널입구", + "ycode": "37.55292373", + "stop_no": "02194", + "xcode": "127.0118693353", + "stop_type": "일반차로", + "node_id": "101000092", + "nxtStn": "금호역" + }, + { + "stop_nm": "약수역8번출구.신당사회복지관", + "ycode": "37.5538646495", + "stop_no": "02195", + "xcode": "127.0099566945", + "stop_type": "일반차로", + "node_id": "101000093", + "nxtStn": "송도병원앞" + }, + { + "stop_nm": "약수역7번출구.약수동주민센터", + "ycode": "37.5528509718", + "stop_no": "02196", + "xcode": "127.0092978444", + "stop_type": "일반차로", + "node_id": "101000094", + "nxtStn": "장충체육관앞" + }, + { + "stop_nm": "송도병원앞", + "ycode": "37.5502676468", + "stop_no": "02197", + "xcode": "127.0077186988", + "stop_type": "일반차로", + "node_id": "101000095", + "nxtStn": "약수역7번출구.약수동주민센터" + }, + { + "stop_nm": "송도병원앞", + "ycode": "37.550227118", + "stop_no": "02198", + "xcode": "127.0073984027", + "stop_type": "일반차로", + "node_id": "101000096", + "nxtStn": "버티고개" + }, + { + "stop_nm": "약수역1번출구", + "ycode": "37.556253", + "stop_no": "02199", + "xcode": "127.009758", + "stop_type": "일반차로", + "node_id": "101000294", + "nxtStn": "장충체육관앞" + }, + { + "stop_nm": "장충체육관앞", + "ycode": "37.558336", + "stop_no": "02201", + "xcode": "127.008065", + "stop_type": "일반차로", + "node_id": "101000097", + "nxtStn": "장충동써미트호텔" + }, + { + "stop_nm": "장충체육관앞", + "ycode": "37.5580017329", + "stop_no": "02202", + "xcode": "127.0078281581", + "stop_type": "일반차로", + "node_id": "101000098", + "nxtStn": "약수역" + }, + { + "stop_nm": "장충동.동국대입구", + "ycode": "37.5605809257", + "stop_no": "02203", + "xcode": "127.0058212968", + "stop_type": "일반차로", + "node_id": "101000099", + "nxtStn": "광희동" + }, + { + "stop_nm": "장충동.동국대입구", + "ycode": "37.5606663921", + "stop_no": "02204", + "xcode": "127.0056290943", + "stop_type": "일반차로", + "node_id": "101000100", + "nxtStn": "장충체육관앞" + }, + { + "stop_nm": "퇴계로6가", + "ycode": "37.5634011312", + "stop_no": "02205", + "xcode": "127.0039011095", + "stop_type": "일반차로", + "node_id": "101000101", + "nxtStn": "광희문.광희동사거리" + }, + { + "stop_nm": "퇴계로6가", + "ycode": "37.56353", + "stop_no": "02206", + "xcode": "127.003375", + "stop_type": "일반차로", + "node_id": "101000102", + "nxtStn": "충무로역.호텔피제이" + }, + { + "stop_nm": "퇴계로5가", + "ycode": "37.5623804057", + "stop_no": "02207", + "xcode": "126.9999660413", + "stop_type": "가로변전일", + "node_id": "101000103", + "nxtStn": "을지로5가.훈련원종합체육관" + }, + { + "stop_nm": "퇴계로5가", + "ycode": "37.5627804223", + "stop_no": "02208", + "xcode": "126.9997252277", + "stop_type": "가로변전일", + "node_id": "101000104", + "nxtStn": "충무로역8번출구.대한극장앞" + }, + { + "stop_nm": "국립극장.반얀트리호텔", + "ycode": "37.551481823", + "stop_no": "02209", + "xcode": "127.001094708", + "stop_type": "일반차로", + "node_id": "101000105", + "nxtStn": "장충동.동국대입구" + }, + { + "stop_nm": "국립극장.반얀트리호텔", + "ycode": "37.551535", + "stop_no": "02210", + "xcode": "127.000752", + "stop_type": "일반차로", + "node_id": "101000106", + "nxtStn": "장충단로입구" + }, + { + "stop_nm": "청구역", + "ycode": "37.5599600605", + "stop_no": "02211", + "xcode": "127.014656108", + "stop_type": "일반차로", + "node_id": "101000107", + "nxtStn": "신당동떡볶이타운.중구여성플라자" + }, + { + "stop_nm": "청구역", + "ycode": "37.5599303778", + "stop_no": "02212", + "xcode": "127.014219181", + "stop_type": "일반차로", + "node_id": "101000108", + "nxtStn": "동화동" + }, + { + "stop_nm": "동화동", + "ycode": "37.560025", + "stop_no": "02213", + "xcode": "127.018124", + "stop_type": "일반차로", + "node_id": "101000109", + "nxtStn": "청구역" + }, + { + "stop_nm": "동화동", + "ycode": "37.5598126778", + "stop_no": "02214", + "xcode": "127.0182736903", + "stop_type": "일반차로", + "node_id": "101000110", + "nxtStn": "신당동삼성아파트.금호여중" + }, + { + "stop_nm": "백범광장", + "ycode": "37.555737", + "stop_no": "02215", + "xcode": "126.980093", + "stop_type": "일반차로", + "node_id": "101000111", + "nxtStn": "힐튼호텔" + }, + { + "stop_nm": "남대문경찰서", + "ycode": "37.554127", + "stop_no": "02218", + "xcode": "126.973838", + "stop_type": "일반차로", + "node_id": "101000113", + "nxtStn": "숭례문" + }, + { + "stop_nm": "남대문시장앞.이회영활동터", + "ycode": "37.5609394169", + "stop_no": "02219", + "xcode": "126.978580386", + "stop_type": "가로변시간", + "node_id": "101000114", + "nxtStn": "롯데영프라자" + }, + { + "stop_nm": "남산케이블카.남산산책로입구", + "ycode": "37.5552651842", + "stop_no": "02220", + "xcode": "126.9839798009", + "stop_type": "일반차로", + "node_id": "101000115", + "nxtStn": "남산예장버스환승주차장" + }, + { + "stop_nm": "동대입구역.장충동", + "ycode": "37.558362", + "stop_no": "02222", + "xcode": "127.005445", + "stop_type": "일반차로", + "node_id": "101000117", + "nxtStn": "국립극장.반얀트리호텔" + }, + { + "stop_nm": "약수역10번출구", + "ycode": "37.556256", + "stop_no": "02223", + "xcode": "127.009322", + "stop_type": "일반차로", + "node_id": "101000295", + "nxtStn": "약수역8번출구.신당사회복지관" + }, + { + "stop_nm": "청계1가.광교", + "ycode": "37.568572", + "stop_no": "02224", + "xcode": "126.983392", + "stop_type": "일반차로", + "node_id": "101000119", + "nxtStn": "청계2가.삼일교" + }, + { + "stop_nm": "청계2가.삼일교", + "ycode": "37.5678404706", + "stop_no": "02225", + "xcode": "126.9885301722", + "stop_type": "일반차로", + "node_id": "101000120", + "nxtStn": "청계3가.관수교" + }, + { + "stop_nm": "청계4가.배오개다리", + "ycode": "37.5684843738", + "stop_no": "02226", + "xcode": "126.9971755363", + "stop_type": "일반차로", + "node_id": "101000121", + "nxtStn": "청계5가.방산시장" + }, + { + "stop_nm": "청계5가.방산시장", + "ycode": "37.569215", + "stop_no": "02227", + "xcode": "127.000827", + "stop_type": "일반차로", + "node_id": "101000122", + "nxtStn": "청계6가.평화시장" + }, + { + "stop_nm": "청계6가.평화시장", + "ycode": "37.569443", + "stop_no": "02228", + "xcode": "127.004387", + "stop_type": "일반차로", + "node_id": "101000123", + "nxtStn": "청계6가.오간수교" + }, + { + "stop_nm": "청계7가.동평화.청평화시장", + "ycode": "37.5695135434", + "stop_no": "02229", + "xcode": "127.0138508174", + "stop_type": "일반차로", + "node_id": "101000124", + "nxtStn": "청계8가.영도교" + }, + { + "stop_nm": "청계8가.영도교", + "ycode": "37.570725", + "stop_no": "02230", + "xcode": "127.019", + "stop_type": "일반차로", + "node_id": "101000125", + "nxtStn": "황학동롯데캐슬" + }, + { + "stop_nm": "신한은행본점", + "ycode": "37.5611965482", + "stop_no": "02233", + "xcode": "126.975585201", + "stop_type": "일반차로", + "node_id": "101000128", + "nxtStn": "숭례문" + }, + { + "stop_nm": "동대문역사문화공원", + "ycode": "37.5654113309", + "stop_no": "02235", + "xcode": "127.0091092289", + "stop_type": "일반차로", + "node_id": "101000130", + "nxtStn": "충무아트센터.스포츠센터.중부소방서" + }, + { + "stop_nm": "버티고개", + "ycode": "37.5478041512", + "stop_no": "02236", + "xcode": "127.0060242348", + "stop_type": "일반차로", + "node_id": "101000131", + "nxtStn": "남산그랜드하얏트호텔" + }, + { + "stop_nm": "버티고개", + "ycode": "37.547652", + "stop_no": "02237", + "xcode": "127.006189", + "stop_type": "일반차로", + "node_id": "101000132", + "nxtStn": "약수역7번출구.약수동주민센터" + }, + { + "stop_nm": "청계3가.관수교", + "ycode": "37.568214", + "stop_no": "02240", + "xcode": "126.992961", + "stop_type": "일반차로", + "node_id": "101000135", + "nxtStn": "청계4가.배오개다리" + }, + { + "stop_nm": "청계6가.오간수교", + "ycode": "37.5694851752", + "stop_no": "02241", + "xcode": "127.0090361408", + "stop_type": "일반차로", + "node_id": "101000136", + "nxtStn": "청계7가.동평화.청평화시장" + }, + { + "stop_nm": "충무로역.매일경제", + "ycode": "37.561690572", + "stop_no": "02242", + "xcode": "126.9933889105", + "stop_type": "일반차로", + "node_id": "101000137", + "nxtStn": "초동" + }, + { + "stop_nm": "을지로입구역.광교", + "ycode": "37.56765", + "stop_no": "02246", + "xcode": "126.982562", + "stop_type": "일반차로", + "node_id": "101000141", + "nxtStn": "롯데백화점" + }, + { + "stop_nm": "신당파인힐하나유보라", + "ycode": "37.564982", + "stop_no": "02252", + "xcode": "127.024858", + "stop_type": "가로변전일", + "node_id": "101000147", + "nxtStn": "뉴타운아파트" + }, + { + "stop_nm": "명동입구", + "ycode": "37.564545", + "stop_no": "02253", + "xcode": "126.982588", + "stop_type": "가로변전일", + "node_id": "101000148", + "nxtStn": "우리은행종로지점" + }, + { + "stop_nm": "남산북측순환로입구", + "ycode": "37.5506986166", + "stop_no": "02254", + "xcode": "126.9988218165", + "stop_type": "일반차로", + "node_id": "101000149", + "nxtStn": "남산서울타워" + }, + { + "stop_nm": "신당동삼성아파트.금호여중", + "ycode": "37.5585545048", + "stop_no": "02255", + "xcode": "127.0187298806", + "stop_type": "일반차로", + "node_id": "101000150", + "nxtStn": "신금호역" + }, + { + "stop_nm": "신당동대우푸르지오.금호여중", + "ycode": "37.557805", + "stop_no": "02256", + "xcode": "127.019292", + "stop_type": "일반차로", + "node_id": "101000151", + "nxtStn": "동화동" + }, + { + "stop_nm": "황학동주민센터", + "ycode": "37.5668556166", + "stop_no": "02257", + "xcode": "127.0234023516", + "stop_type": "일반차로", + "node_id": "101000152", + "nxtStn": "신당초등학교앞" + }, + { + "stop_nm": "신당초등학교앞", + "ycode": "37.564662", + "stop_no": "02258", + "xcode": "127.023723", + "stop_type": "일반차로", + "node_id": "101000153", + "nxtStn": "금호베스트빌.래미안하이베르" + }, + { + "stop_nm": "금호베스트빌.래미안하이베르", + "ycode": "37.561643", + "stop_no": "02259", + "xcode": "127.024067", + "stop_type": "일반차로", + "node_id": "101000154", + "nxtStn": "왕십리자이.신당현대아파트" + }, + { + "stop_nm": "금호베스트빌.래미안하이베르", + "ycode": "37.5622544456", + "stop_no": "02260", + "xcode": "127.0243472269", + "stop_type": "일반차로", + "node_id": "101000155", + "nxtStn": "신당초등학교" + }, + { + "stop_nm": "신당초등학교", + "ycode": "37.5645028357", + "stop_no": "02261", + "xcode": "127.024240415", + "stop_type": "일반차로", + "node_id": "101000156", + "nxtStn": "신당역하나은행" + }, + { + "stop_nm": "서대문경찰서.농협은행.유관순활동터", + "ycode": "37.565132", + "stop_no": "02262", + "xcode": "126.967647", + "stop_type": "일반차로", + "node_id": "101000157", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "방산종합시장", + "ycode": "37.5678058693", + "stop_no": "02272", + "xcode": "127.0019301271", + "stop_type": "일반차로", + "node_id": "101000163", + "nxtStn": "방산시장.을지로4가역6번출구" + }, + { + "stop_nm": "황학동롯데캐슬", + "ycode": "37.571662", + "stop_no": "02273", + "xcode": "127.022033", + "stop_type": "일반차로", + "node_id": "101000164", + "nxtStn": "신설동로터리.서울풍물시장" + }, + { + "stop_nm": "광희문.광희동사거리", + "ycode": "37.5645499236", + "stop_no": "02274", + "xcode": "127.0086110484", + "stop_type": "일반차로", + "node_id": "101000165", + "nxtStn": "퇴계로6가" + }, + { + "stop_nm": "광희문.광희동사거리", + "ycode": "37.564402", + "stop_no": "02275", + "xcode": "127.009677", + "stop_type": "일반차로", + "node_id": "101000166", + "nxtStn": "충무아트센터.스포츠센터.중부소방서" + }, + { + "stop_nm": "황학동롯데캐슬", + "ycode": "37.57082", + "stop_no": "02277", + "xcode": "127.023297", + "stop_type": "일반차로", + "node_id": "101000168", + "nxtStn": "황학동주민센터" + }, + { + "stop_nm": "한국은행.신세계앞", + "ycode": "37.561408112", + "stop_no": "02278", + "xcode": "126.9792899798", + "stop_type": "가로변시간", + "node_id": "101000254", + "nxtStn": "숭례문(가상)" + }, + { + "stop_nm": "서울기동대.광희초등학교", + "ycode": "37.567922", + "stop_no": "02279", + "xcode": "127.014485", + "stop_type": "일반차로", + "node_id": "101000258", + "nxtStn": "신당역.중앙시장앞" + }, + { + "stop_nm": "동대문디자인플라자", + "ycode": "37.567700749", + "stop_no": "02280", + "xcode": "127.0119962039", + "stop_type": "일반차로", + "node_id": "101000261", + "nxtStn": "서울기동대.광희초등학교" + }, + { + "stop_nm": "서대문역사거리.농협중앙회", + "ycode": "37.5669222408", + "stop_no": "02281", + "xcode": "126.9678855112", + "stop_type": "일반차로", + "node_id": "101000262", + "nxtStn": "서울역사박물관.경희궁앞" + }, + { + "stop_nm": "서울스퀘어앞", + "ycode": "37.555341632", + "stop_no": "02282", + "xcode": "126.97323173", + "stop_type": "일반차로", + "node_id": "101000263", + "nxtStn": "남대문시장.회현역" + }, + { + "stop_nm": "북창동.남대문시장", + "ycode": "37.5608462911", + "stop_no": "02283", + "xcode": "126.9769187336", + "stop_type": "일반차로", + "node_id": "101000264", + "nxtStn": "숭례문(가상)" + }, + { + "stop_nm": "힐튼호텔", + "ycode": "37.556367", + "stop_no": "02284", + "xcode": "126.976562", + "stop_type": "일반차로", + "node_id": "101000266", + "nxtStn": "남산도서관.용산도서관" + }, + { + "stop_nm": "힐튼호텔", + "ycode": "37.5566267411", + "stop_no": "02285", + "xcode": "126.9767113404", + "stop_type": "일반차로", + "node_id": "101000265", + "nxtStn": "남대문시장악세사리전문상가" + }, + { + "stop_nm": "시청앞.덕수궁", + "ycode": "37.5662122834", + "stop_no": "02286", + "xcode": "126.9768355729", + "stop_type": "일반차로", + "node_id": "101000290", + "nxtStn": "시청앞" + }, + { + "stop_nm": "남대문세무서.국가인권위원회", + "ycode": "37.5650839621", + "stop_no": "02287", + "xcode": "126.987866112", + "stop_type": "일반차로", + "node_id": "101000292", + "nxtStn": "종로2가사거리" + }, + { + "stop_nm": "장충문화체육센터.권기옥활동터", + "ycode": "37.5601745008", + "stop_no": "02288", + "xcode": "127.0025921056", + "stop_type": "일반차로", + "node_id": "101000293", + "nxtStn": "동대입구역.장충동" + }, + { + "stop_nm": "남산1호터널", + "ycode": "37.5574051765", + "stop_no": "02289", + "xcode": "126.9921666231", + "stop_type": "일반차로", + "node_id": "101000328", + "nxtStn": "순천향대학병원.한남오거리" + }, + { + "stop_nm": "남산예장버스환승주차장", + "ycode": "37.560033", + "stop_no": "02291", + "xcode": "126.989029", + "stop_type": "일반차로", + "node_id": "101000331", + "nxtStn": "퇴계로3가.한옥마을.한국의집" + }, + { + "stop_nm": "약수역.3.6호선", + "ycode": "37.553305", + "stop_no": "02501", + "xcode": "127.011707", + "stop_type": "마을버스", + "node_id": "101900010", + "nxtStn": "금호역.3호선" + }, + { + "stop_nm": "조선일보", + "ycode": "37.568735", + "stop_no": "02502", + "xcode": "126.976885", + "stop_type": "마을버스", + "node_id": "101900009", + "nxtStn": "시청역" + }, + { + "stop_nm": "시청역", + "ycode": "37.565673", + "stop_no": "02503", + "xcode": "126.977006", + "stop_type": "마을버스", + "node_id": "101900011", + "nxtStn": "삼성본관앞" + }, + { + "stop_nm": "서울역", + "ycode": "37.5582012576", + "stop_no": "02505", + "xcode": "126.9713291252", + "stop_type": "마을버스", + "node_id": "101900012", + "nxtStn": "남산밀레니엄힐튼호텔" + }, + { + "stop_nm": "숭례문앞", + "ycode": "37.561517", + "stop_no": "02506", + "xcode": "126.976236", + "stop_type": "마을버스", + "node_id": "101900007", + "nxtStn": "프레스센터" + }, + { + "stop_nm": "프레스센터", + "ycode": "37.567396", + "stop_no": "02507", + "xcode": "126.97734", + "stop_type": "마을버스", + "node_id": "101900006", + "nxtStn": "광화문코리아나호텔" + }, + { + "stop_nm": "신당역하나은행", + "ycode": "37.565422", + "stop_no": "02510", + "xcode": "127.021586", + "stop_type": "마을버스", + "node_id": "101900005", + "nxtStn": "신당초등학교앞" + }, + { + "stop_nm": "염천교", + "ycode": "37.559798", + "stop_no": "02513", + "xcode": "126.971117", + "stop_type": "마을버스", + "node_id": "101900004", + "nxtStn": "중림동교차로" + }, + { + "stop_nm": "서울역서부", + "ycode": "37.5559789686", + "stop_no": "02515", + "xcode": "126.9692312733", + "stop_type": "마을버스", + "node_id": "101900013", + "nxtStn": "한국경제신문사" + }, + { + "stop_nm": "한국경제신문사", + "ycode": "37.5609334062", + "stop_no": "02516", + "xcode": "126.9679526472", + "stop_type": "마을버스", + "node_id": "101900003", + "nxtStn": "종근당후문" + }, + { + "stop_nm": "응봉근린공원.금호산", + "ycode": "37.553522", + "stop_no": "02518", + "xcode": "127.016922", + "stop_type": "마을버스", + "node_id": "101900001", + "nxtStn": "대경생활과학고등학교" + }, + { + "stop_nm": "서울방송고등학교.남산타운아파트", + "ycode": "37.5495860191", + "stop_no": "02519", + "xcode": "127.012409789", + "stop_type": "마을버스", + "node_id": "101900023", + "nxtStn": "중구청소년센터.남산타운2상가" + }, + { + "stop_nm": "서울방송고등학교.남산타운아파트", + "ycode": "37.549618", + "stop_no": "02520", + "xcode": "127.012293", + "stop_type": "마을버스", + "node_id": "101900022", + "nxtStn": "옥수파크힐스아파트앞" + }, + { + "stop_nm": "중구청소년센터.남산타운2상가", + "ycode": "37.551656", + "stop_no": "02521", + "xcode": "127.012751", + "stop_type": "마을버스", + "node_id": "101900021", + "nxtStn": "약수시장.남산타운동문" + }, + { + "stop_nm": "중구청소년센터.남산타운2상가", + "ycode": "37.551906", + "stop_no": "02522", + "xcode": "127.012175", + "stop_type": "마을버스", + "node_id": "101900020", + "nxtStn": "서울방송고등학교.남산타운아파트" + }, + { + "stop_nm": "약수시장.남산타운동문", + "ycode": "37.5516046313", + "stop_no": "02523", + "xcode": "127.010785999", + "stop_type": "마을버스", + "node_id": "101900019", + "nxtStn": "약수지구대" + }, + { + "stop_nm": "약수지구대", + "ycode": "37.5527928302", + "stop_no": "02524", + "xcode": "127.0121072041", + "stop_type": "마을버스", + "node_id": "101900018", + "nxtStn": "종점" + }, + { + "stop_nm": "남대문시장", + "ycode": "37.5613834641", + "stop_no": "02605", + "xcode": "126.9793240064", + "stop_type": "가로변시간", + "node_id": "101000173", + "nxtStn": "서울역" + }, + { + "stop_nm": "을지로입구역롯데호텔", + "ycode": "37.5658047183", + "stop_no": "02639", + "xcode": "126.9803053067", + "stop_type": "일반차로", + "node_id": "101000277", + "nxtStn": "해운센터.롯데영프라자" + }, + { + "stop_nm": "소공동웨스틴조선호텔", + "ycode": "37.564518", + "stop_no": "02640", + "xcode": "126.979645", + "stop_type": "일반차로", + "node_id": "101000298", + "nxtStn": "을지로입구역롯데호텔" + }, + { + "stop_nm": "서울광장", + "ycode": "37.565352", + "stop_no": "02641", + "xcode": "126.978885", + "stop_type": "일반차로", + "node_id": "101000301", + "nxtStn": "우리은행종로지점" + }, + { + "stop_nm": "광화문코리아나호텔", + "ycode": "37.5684226513", + "stop_no": "02643", + "xcode": "126.9767760218", + "stop_type": "일반차로", + "node_id": "101000275", + "nxtStn": "시청역더플라자호텔" + }, + { + "stop_nm": "서소문KAL빌딩", + "ycode": "37.563334", + "stop_no": "02649", + "xcode": "126.974319", + "stop_type": "일반차로", + "node_id": "101000276", + "nxtStn": "공덕역" + }, + { + "stop_nm": "동국대입구앰배서더호텔", + "ycode": "37.5597717116", + "stop_no": "02652", + "xcode": "127.0026102024", + "stop_type": "일반차로", + "node_id": "101000273", + "nxtStn": "장충체육관앞" + }, + { + "stop_nm": "광화문", + "ycode": "37.568758756", + "stop_no": "02661", + "xcode": "126.9767623328", + "stop_type": "일반차로", + "node_id": "101000226", + "nxtStn": "시청덕수궁" + }, + { + "stop_nm": "시청덕수궁", + "ycode": "37.565471574", + "stop_no": "02662", + "xcode": "126.97677807", + "stop_type": "일반차로", + "node_id": "101000227", + "nxtStn": "프레이저플레이스남대문" + }, + { + "stop_nm": "바비엥스위트", + "ycode": "37.5651089852", + "stop_no": "02664", + "xcode": "126.9676372948", + "stop_type": "일반차로", + "node_id": "101000229", + "nxtStn": "영천시장" + }, + { + "stop_nm": "서울역", + "ycode": "37.5578195556", + "stop_no": "02665", + "xcode": "126.9728595843", + "stop_type": "일반차로", + "node_id": "101000230", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "명동역.세종호텔", + "ycode": "37.561088", + "stop_no": "02669", + "xcode": "126.986449", + "stop_type": "일반차로", + "node_id": "101000234", + "nxtStn": "남대문시장" + }, + { + "stop_nm": "충무로역.호텔피제이", + "ycode": "37.5617180187", + "stop_no": "02679", + "xcode": "126.9955605031", + "stop_type": "가로변시간", + "node_id": "101000244", + "nxtStn": "퇴계로3가.한옥마을.한국의집" + }, + { + "stop_nm": "남대문시장", + "ycode": "37.560967378", + "stop_no": "02680", + "xcode": "126.9787309255", + "stop_type": "가로변시간", + "node_id": "101000245", + "nxtStn": "이비스엠버서더호텔" + }, + { + "stop_nm": "이비스엠버서더호텔", + "ycode": "37.5646093306", + "stop_no": "02681", + "xcode": "126.982612619", + "stop_type": "가로변전일", + "node_id": "101000246", + "nxtStn": "을지로입구.로얄호텔" + }, + { + "stop_nm": "프레이저플레이스", + "ycode": "37.5628476779", + "stop_no": "02682", + "xcode": "126.9692683016", + "stop_type": "일반차로", + "node_id": "101000247", + "nxtStn": "바비엥스위트" + }, + { + "stop_nm": "서울역", + "ycode": "37.55816", + "stop_no": "02685", + "xcode": "126.971336", + "stop_type": "일반차로", + "node_id": "101000250", + "nxtStn": "충정로역2호선" + }, + { + "stop_nm": "아카시아호텔.웨스턴코업레지던스", + "ycode": "37.5665506121", + "stop_no": "02686", + "xcode": "127.0034786985", + "stop_type": "일반차로", + "node_id": "101000257", + "nxtStn": "을지로코업레지던스" + }, + { + "stop_nm": "을지로코업레지던스", + "ycode": "37.5662333554", + "stop_no": "02687", + "xcode": "127.0053974501", + "stop_type": "일반차로", + "node_id": "101000256", + "nxtStn": "동대문역사문화공원" + }, + { + "stop_nm": "토요코인호텔.이비스버젯호텔", + "ycode": "37.5645913489", + "stop_no": "02688", + "xcode": "127.0089472544", + "stop_type": "일반차로", + "node_id": "101000255", + "nxtStn": "퇴계로6가" + }, + { + "stop_nm": "약수역", + "ycode": "37.5537889625", + "stop_no": "02692", + "xcode": "127.0098978294", + "stop_type": "일반차로", + "node_id": "101000271", + "nxtStn": "버티고개" + }, + { + "stop_nm": "남산밀레니엄힐튼호텔", + "ycode": "37.5554665731", + "stop_no": "02693", + "xcode": "126.9759752961", + "stop_type": "일반차로", + "node_id": "101000270", + "nxtStn": "서울역" + }, + { + "stop_nm": "서울역", + "ycode": "37.5580158041", + "stop_no": "02694", + "xcode": "126.9720456834", + "stop_type": "일반차로", + "node_id": "101000269", + "nxtStn": "숭례문라마다&스위트호텔" + }, + { + "stop_nm": "숭례문라마다&스위트호텔", + "ycode": "37.5606109591", + "stop_no": "02695", + "xcode": "126.9720684843", + "stop_type": "일반차로", + "node_id": "101000268", + "nxtStn": "서울역" + }, + { + "stop_nm": "시청역더플라자호텔", + "ycode": "37.564156195", + "stop_no": "02699", + "xcode": "126.9779059345", + "stop_type": "일반차로", + "node_id": "101000279", + "nxtStn": "소공동웨스틴조선호텔" + }, + { + "stop_nm": "시청.서울신문사", + "ycode": "37.568299316", + "stop_no": "02706", + "xcode": "126.9773647244", + "stop_type": "일반차로", + "node_id": "101000286", + "nxtStn": "광화문" + }, + { + "stop_nm": "프레이저플레이스남대문", + "ycode": "37.5613760047", + "stop_no": "02707", + "xcode": "126.9762665716", + "stop_type": "일반차로", + "node_id": "101000288", + "nxtStn": "시청.서울신문사" + }, + { + "stop_nm": "프레이저플레이스남대문", + "ycode": "37.5610667807", + "stop_no": "02708", + "xcode": "126.9755365701", + "stop_type": "일반차로", + "node_id": "101000287", + "nxtStn": "프레이저플레이스" + }, + { + "stop_nm": "동대문역사문화공원", + "ycode": "37.5653851887", + "stop_no": "02709", + "xcode": "127.009245066", + "stop_type": "일반차로", + "node_id": "101000289", + "nxtStn": "토요코인호텔.이비스버젯호텔" + }, + { + "stop_nm": "광희동더스프라지르서울동대문", + "ycode": "37.564536", + "stop_no": "02710", + "xcode": "127.007526", + "stop_type": "일반차로", + "node_id": "101000297", + "nxtStn": "동대문디자인플라자DDP" + }, + { + "stop_nm": "동대문디자인플라자DDP", + "ycode": "37.567853", + "stop_no": "02711", + "xcode": "127.009213", + "stop_type": "일반차로", + "node_id": "101000296", + "nxtStn": "동대문역JW메리어트동대문호텔" + }, + { + "stop_nm": "베이튼호텔", + "ycode": "37.5649993215", + "stop_no": "02712", + "xcode": "127.0026364414", + "stop_type": "일반차로", + "node_id": "101000299", + "nxtStn": "아카시아호텔.웨스턴코업레지던스" + }, + { + "stop_nm": "광화문", + "ycode": "37.5689378963", + "stop_no": "02901", + "xcode": "126.9767086457", + "stop_type": "일반차로", + "node_id": "101000316", + "nxtStn": "덕수궁" + }, + { + "stop_nm": "덕수궁", + "ycode": "37.5655845504", + "stop_no": "02902", + "xcode": "126.976726812", + "stop_type": "일반차로", + "node_id": "101000317", + "nxtStn": "남대문시장" + }, + { + "stop_nm": "남대문시장", + "ycode": "37.5609231539", + "stop_no": "02903", + "xcode": "126.9753967375", + "stop_type": "일반차로", + "node_id": "101000318", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "명동", + "ycode": "37.5607583289", + "stop_no": "02904", + "xcode": "126.9856194882", + "stop_type": "일반차로", + "node_id": "101000319", + "nxtStn": "남산골한옥마을" + }, + { + "stop_nm": "남산골한옥마을", + "ycode": "37.5609950561", + "stop_no": "02905", + "xcode": "126.9924383581", + "stop_type": "일반차로", + "node_id": "101000320", + "nxtStn": "앰버서더호텔" + }, + { + "stop_nm": "앰버서더호텔", + "ycode": "37.5604635042", + "stop_no": "02906", + "xcode": "127.0026253879", + "stop_type": "일반차로", + "node_id": "101000321", + "nxtStn": "신라호텔" + }, + { + "stop_nm": "신라호텔", + "ycode": "37.5583034007", + "stop_no": "02907", + "xcode": "127.0054272005", + "stop_type": "일반차로", + "node_id": "101000322", + "nxtStn": "남산서울타워" + }, + { + "stop_nm": "동대문디자인플라자.동대문시장", + "ycode": "37.5668754028", + "stop_no": "02908", + "xcode": "127.0085549376", + "stop_type": "일반차로", + "node_id": "101000324", + "nxtStn": "대학로" + }, + { + "stop_nm": "서울애니메이션센터", + "ycode": "37.5585130207", + "stop_no": "02909", + "xcode": "126.9872529535", + "stop_type": "일반차로", + "node_id": "101000325", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "남산케이블카", + "ycode": "37.5551172888", + "stop_no": "02919", + "xcode": "126.9836038081", + "stop_type": "일반차로", + "node_id": "101000326", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "동대문디자인프라자", + "ycode": "37.5677625606", + "stop_no": "02920", + "xcode": "127.0091304267", + "stop_type": "일반차로", + "node_id": "101000308", + "nxtStn": "방산.중부시장" + }, + { + "stop_nm": "방산.중부시장", + "ycode": "37.5668568761", + "stop_no": "02921", + "xcode": "126.9994422877", + "stop_type": "일반차로", + "node_id": "101000309", + "nxtStn": "을지로3가" + }, + { + "stop_nm": "을지로3가", + "ycode": "37.5665349097", + "stop_no": "02922", + "xcode": "126.9923255915", + "stop_type": "일반차로", + "node_id": "101000310", + "nxtStn": "을지로입구" + }, + { + "stop_nm": "을지로입구", + "ycode": "37.5661309607", + "stop_no": "02923", + "xcode": "126.981001305", + "stop_type": "일반차로", + "node_id": "101000311", + "nxtStn": "청와대" + }, + { + "stop_nm": "명동입구", + "ycode": "37.5641874332", + "stop_no": "02925", + "xcode": "126.9823773959", + "stop_type": "일반차로", + "node_id": "101000312", + "nxtStn": "종각역" + }, + { + "stop_nm": "신당동중앙시장", + "ycode": "37.5657553187", + "stop_no": "02926", + "xcode": "127.0194166277", + "stop_type": "일반차로", + "node_id": "101000314", + "nxtStn": "종점" + }, + { + "stop_nm": "남산오르미", + "ycode": "37.5581940477", + "stop_no": "02927", + "xcode": "126.9831348601", + "stop_type": "일반차로", + "node_id": "101000315", + "nxtStn": "명동입구" + }, + { + "stop_nm": "한강대교북단.LG유플러스", + "ycode": "37.524049", + "stop_no": "03001", + "xcode": "126.963121", + "stop_type": "중앙차로", + "node_id": "102000001", + "nxtStn": "신용산역" + }, + { + "stop_nm": "한강대교북단.LG유플러스", + "ycode": "37.5243060629", + "stop_no": "03002", + "xcode": "126.9631848403", + "stop_type": "중앙차로", + "node_id": "102000002", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "신용산역", + "ycode": "37.527293", + "stop_no": "03003", + "xcode": "126.966207", + "stop_type": "중앙차로", + "node_id": "102000003", + "nxtStn": "용산우체국" + }, + { + "stop_nm": "신용산역", + "ycode": "37.527920489", + "stop_no": "03004", + "xcode": "126.9666192358", + "stop_type": "중앙차로", + "node_id": "102000004", + "nxtStn": "한강대교북단.LG유플러스" + }, + { + "stop_nm": "용산우체국", + "ycode": "37.5314970129", + "stop_no": "03005", + "xcode": "126.9702350163", + "stop_type": "중앙차로", + "node_id": "102000005", + "nxtStn": "삼각지역" + }, + { + "stop_nm": "용산우체국", + "ycode": "37.5320503694", + "stop_no": "03006", + "xcode": "126.9705640624", + "stop_type": "중앙차로", + "node_id": "102000006", + "nxtStn": "신용산역" + }, + { + "stop_nm": "삼각지역", + "ycode": "37.535181", + "stop_no": "03007", + "xcode": "126.973683", + "stop_type": "중앙차로", + "node_id": "102000007", + "nxtStn": "숙대입구역" + }, + { + "stop_nm": "삼각지역", + "ycode": "37.5359845015", + "stop_no": "03008", + "xcode": "126.9741608708", + "stop_type": "중앙차로", + "node_id": "102000008", + "nxtStn": "용산우체국" + }, + { + "stop_nm": "숙대입구역", + "ycode": "37.543295633", + "stop_no": "03009", + "xcode": "126.9725377982", + "stop_type": "중앙차로", + "node_id": "102000009", + "nxtStn": "갈월동" + }, + { + "stop_nm": "숙대입구역", + "ycode": "37.5437560216", + "stop_no": "03010", + "xcode": "126.9722320769", + "stop_type": "중앙차로", + "node_id": "102000010", + "nxtStn": "삼각지역" + }, + { + "stop_nm": "갈월동", + "ycode": "37.5509755993", + "stop_no": "03011", + "xcode": "126.9722373211", + "stop_type": "중앙차로", + "node_id": "102000011", + "nxtStn": "서울스퀘어앞" + }, + { + "stop_nm": "갈월동", + "ycode": "37.5495337218", + "stop_no": "03012", + "xcode": "126.9717081909", + "stop_type": "중앙차로", + "node_id": "102000012", + "nxtStn": "숙대입구역" + }, + { + "stop_nm": "남영역", + "ycode": "37.542006922", + "stop_no": "03110", + "xcode": "126.9719271804", + "stop_type": "일반차로", + "node_id": "102000018", + "nxtStn": "문배동이안아파트앞" + }, + { + "stop_nm": "남영역", + "ycode": "37.541823", + "stop_no": "03111", + "xcode": "126.972069", + "stop_type": "일반차로", + "node_id": "102000019", + "nxtStn": "숙대역5번출구" + }, + { + "stop_nm": "신용산역3번출구", + "ycode": "37.528889", + "stop_no": "03119", + "xcode": "126.967351", + "stop_type": "일반차로", + "node_id": "102000026", + "nxtStn": "용산푸르지오써밋" + }, + { + "stop_nm": "서울드래곤시티", + "ycode": "37.53216", + "stop_no": "03120", + "xcode": "126.96306", + "stop_type": "일반차로", + "node_id": "102000317", + "nxtStn": "용산전자상가.전자랜드" + }, + { + "stop_nm": "용산역3번출구.용산차고지", + "ycode": "37.531808", + "stop_no": "03121", + "xcode": "126.964215", + "stop_type": "일반차로", + "node_id": "102000318", + "nxtStn": "종점" + }, + { + "stop_nm": "한강대교북단", + "ycode": "37.524968", + "stop_no": "03122", + "xcode": "126.96357", + "stop_type": "일반차로", + "node_id": "102000029", + "nxtStn": "서부이촌동입구" + }, + { + "stop_nm": "서계동", + "ycode": "37.5524743044", + "stop_no": "03124", + "xcode": "126.9693404702", + "stop_type": "일반차로", + "node_id": "102000030", + "nxtStn": "서울역서부" + }, + { + "stop_nm": "서계동", + "ycode": "37.5516704971", + "stop_no": "03125", + "xcode": "126.969221961", + "stop_type": "일반차로", + "node_id": "102000031", + "nxtStn": "청파시장" + }, + { + "stop_nm": "청파동", + "ycode": "37.548992", + "stop_no": "03126", + "xcode": "126.970122", + "stop_type": "일반차로", + "node_id": "102000032", + "nxtStn": "서계동" + }, + { + "stop_nm": "청파시장", + "ycode": "37.548679027", + "stop_no": "03127", + "xcode": "126.9698626298", + "stop_type": "일반차로", + "node_id": "102000033", + "nxtStn": "청파동" + }, + { + "stop_nm": "숙대입구역.청파동주민센터", + "ycode": "37.5453812474", + "stop_no": "03128", + "xcode": "126.9707772395", + "stop_type": "일반차로", + "node_id": "102000034", + "nxtStn": "청파동" + }, + { + "stop_nm": "숙대입구역.청파동주민센터", + "ycode": "37.545486", + "stop_no": "03129", + "xcode": "126.970416", + "stop_type": "일반차로", + "node_id": "102000035", + "nxtStn": "숙명여대도서관앞" + }, + { + "stop_nm": "남영역", + "ycode": "37.540813", + "stop_no": "03130", + "xcode": "126.971032", + "stop_type": "일반차로", + "node_id": "102000036", + "nxtStn": "숙대입구역" + }, + { + "stop_nm": "남영역", + "ycode": "37.5405702704", + "stop_no": "03131", + "xcode": "126.9706761392", + "stop_type": "일반차로", + "node_id": "102000037", + "nxtStn": "문배동이안아파트앞" + }, + { + "stop_nm": "용산전자상가17동", + "ycode": "37.5337792589", + "stop_no": "03132", + "xcode": "126.9660271002", + "stop_type": "일반차로", + "node_id": "102000038", + "nxtStn": "신용산.지하차도" + }, + { + "stop_nm": "용산전자상가19동", + "ycode": "37.533513", + "stop_no": "03133", + "xcode": "126.965707", + "stop_type": "일반차로", + "node_id": "102000039", + "nxtStn": "문배동이안아파트앞" + }, + { + "stop_nm": "용산전자상가10동", + "ycode": "37.5332725045", + "stop_no": "03134", + "xcode": "126.9619640523", + "stop_type": "일반차로", + "node_id": "102000040", + "nxtStn": "용산전자상가.전자랜드" + }, + { + "stop_nm": "용산전자상가12동", + "ycode": "37.533052", + "stop_no": "03135", + "xcode": "126.962168", + "stop_type": "일반차로", + "node_id": "102000041", + "nxtStn": "용산전자상가19동" + }, + { + "stop_nm": "용산전자상가.전자랜드", + "ycode": "37.532778", + "stop_no": "03136", + "xcode": "126.958328", + "stop_type": "일반차로", + "node_id": "102000042", + "nxtStn": "용산전자상가12동" + }, + { + "stop_nm": "용산전자상가.전자랜드", + "ycode": "37.533058", + "stop_no": "03137", + "xcode": "126.958339", + "stop_type": "일반차로", + "node_id": "102000043", + "nxtStn": "원효대교북단" + }, + { + "stop_nm": "원효대교북단", + "ycode": "37.531985", + "stop_no": "03138", + "xcode": "126.956112", + "stop_type": "일반차로", + "node_id": "102000044", + "nxtStn": "용산전자상가.전자랜드" + }, + { + "stop_nm": "용산경찰서", + "ycode": "37.5405032098", + "stop_no": "03139", + "xcode": "126.9691858135", + "stop_type": "가로변시간", + "node_id": "102000045", + "nxtStn": "용산꿈나무종합타운.원효로우체국" + }, + { + "stop_nm": "용산경찰서", + "ycode": "37.5399994643", + "stop_no": "03140", + "xcode": "126.9690615428", + "stop_type": "가로변시간", + "node_id": "102000046", + "nxtStn": "남영역" + }, + { + "stop_nm": "용산꿈나무종합타운.원효로우체국", + "ycode": "37.5386139009", + "stop_no": "03141", + "xcode": "126.9669290534", + "stop_type": "가로변시간", + "node_id": "102000047", + "nxtStn": "원효로2가" + }, + { + "stop_nm": "용산e편한세상", + "ycode": "37.53746", + "stop_no": "03142", + "xcode": "126.965469", + "stop_type": "가로변전일", + "node_id": "102000048", + "nxtStn": "용산꿈나무종합타운" + }, + { + "stop_nm": "남정초등학교", + "ycode": "37.5363187485", + "stop_no": "03143", + "xcode": "126.9636632444", + "stop_type": "가로변시간", + "node_id": "102000049", + "nxtStn": "용산e편한세상" + }, + { + "stop_nm": "원효로2가", + "ycode": "37.536237441", + "stop_no": "03144", + "xcode": "126.9629911361", + "stop_type": "가로변전일", + "node_id": "102000050", + "nxtStn": "원효로3가" + }, + { + "stop_nm": "원효로2가사거리", + "ycode": "37.5349338369", + "stop_no": "03145", + "xcode": "126.9610704217", + "stop_type": "가로변시간", + "node_id": "102000051", + "nxtStn": "남정초등학교" + }, + { + "stop_nm": "원효로3가", + "ycode": "37.5340407624", + "stop_no": "03146", + "xcode": "126.9581798302", + "stop_type": "가로변시간", + "node_id": "102000052", + "nxtStn": "시범아파트.대교아파트" + }, + { + "stop_nm": "원효로3가", + "ycode": "37.5337957151", + "stop_no": "03147", + "xcode": "126.9583248022", + "stop_type": "일반차로", + "node_id": "102000053", + "nxtStn": "원효로2가사거리" + }, + { + "stop_nm": "용암초등학교입구.이태원주공아파트", + "ycode": "37.544109", + "stop_no": "03148", + "xcode": "126.988666", + "stop_type": "일반차로", + "node_id": "102000054", + "nxtStn": "남산3호터널.서울애니메이션센터" + }, + { + "stop_nm": "이태원동남산대림아파트.용산동아파트", + "ycode": "37.539873", + "stop_no": "03149", + "xcode": "126.987478", + "stop_type": "가로변시간", + "node_id": "102000055", + "nxtStn": "용암초등학교입구.이태원주공아파트" + }, + { + "stop_nm": "용산한신아파트", + "ycode": "37.5398054732", + "stop_no": "03150", + "xcode": "126.9871086322", + "stop_type": "일반차로", + "node_id": "102000056", + "nxtStn": "해방촌" + }, + { + "stop_nm": "해방촌", + "ycode": "37.537816", + "stop_no": "03151", + "xcode": "126.986605", + "stop_type": "일반차로", + "node_id": "102000057", + "nxtStn": "녹사평역" + }, + { + "stop_nm": "국군재정관리단", + "ycode": "37.537318", + "stop_no": "03152", + "xcode": "126.986848", + "stop_type": "일반차로", + "node_id": "102000058", + "nxtStn": "대성교회" + }, + { + "stop_nm": "용산구청", + "ycode": "37.5302839538", + "stop_no": "03153", + "xcode": "126.9912039368", + "stop_type": "일반차로", + "node_id": "102000059", + "nxtStn": "용산구청" + }, + { + "stop_nm": "용산구청", + "ycode": "37.529405", + "stop_no": "03154", + "xcode": "126.99116", + "stop_type": "일반차로", + "node_id": "102000060", + "nxtStn": "한강중학교" + }, + { + "stop_nm": "한강중학교", + "ycode": "37.52545", + "stop_no": "03155", + "xcode": "126.992155", + "stop_type": "일반차로", + "node_id": "102000061", + "nxtStn": "용산구청" + }, + { + "stop_nm": "한강중학교앞", + "ycode": "37.5245025908", + "stop_no": "03156", + "xcode": "126.9924287738", + "stop_type": "일반차로", + "node_id": "102000062", + "nxtStn": "반포대교남단.한강시민공원입구" + }, + { + "stop_nm": "서빙고역1번출구", + "ycode": "37.520046", + "stop_no": "03157", + "xcode": "126.989955", + "stop_type": "일반차로", + "node_id": "102000063", + "nxtStn": "한강중학교" + }, + { + "stop_nm": "장충단로입구", + "ycode": "37.545795", + "stop_no": "03158", + "xcode": "127.002202", + "stop_type": "일반차로", + "node_id": "102000064", + "nxtStn": "서울시중부기술교육원.블루스퀘어" + }, + { + "stop_nm": "남산예술원", + "ycode": "37.544437", + "stop_no": "03159", + "xcode": "127.00204", + "stop_type": "일반차로", + "node_id": "102000065", + "nxtStn": "하얏트호텔" + }, + { + "stop_nm": "서울중부기술교육원.블루스퀘어", + "ycode": "37.5415776794", + "stop_no": "03160", + "xcode": "127.0035397782", + "stop_type": "일반차로", + "node_id": "102000066", + "nxtStn": "버티고개" + }, + { + "stop_nm": "서울시중부기술교육원.블루스퀘어", + "ycode": "37.5411748997", + "stop_no": "03161", + "xcode": "127.0031776354", + "stop_type": "일반차로", + "node_id": "102000067", + "nxtStn": "순천향대학병원.한남오거리" + }, + { + "stop_nm": "순천향대학병원", + "ycode": "37.5364422432", + "stop_no": "03162", + "xcode": "127.0057302453", + "stop_type": "가로변시간", + "node_id": "102000068", + "nxtStn": "한강진역.블루스퀘어" + }, + { + "stop_nm": "순천향대학병원", + "ycode": "37.5356114027", + "stop_no": "03163", + "xcode": "127.0062993526", + "stop_type": "가로변전일", + "node_id": "102000069", + "nxtStn": "국가인권위.안중근활동터" + }, + { + "stop_nm": "순천향대학병원", + "ycode": "37.5357934643", + "stop_no": "03164", + "xcode": "127.0054993584", + "stop_type": "일반차로", + "node_id": "102000070", + "nxtStn": "한남대교(가상)" + }, + { + "stop_nm": "순천향대학병원.한남오거리", + "ycode": "37.5354906847", + "stop_no": "03165", + "xcode": "127.0057290409", + "stop_type": "일반차로", + "node_id": "102000071", + "nxtStn": "한남동" + }, + { + "stop_nm": "한남5거리", + "ycode": "37.5328656324", + "stop_no": "03166", + "xcode": "127.0083381045", + "stop_type": "일반차로", + "node_id": "102000072", + "nxtStn": "순천향대학병원" + }, + { + "stop_nm": "남산도서관.용산도서관", + "ycode": "37.552282", + "stop_no": "03167", + "xcode": "126.980835", + "stop_type": "일반차로", + "node_id": "102000073", + "nxtStn": "백범광장" + }, + { + "stop_nm": "남산도서관.용산도서관", + "ycode": "37.5520442521", + "stop_no": "03168", + "xcode": "126.9811340112", + "stop_type": "일반차로", + "node_id": "102000074", + "nxtStn": "후암약수터" + }, + { + "stop_nm": "후암약수터", + "ycode": "37.54869", + "stop_no": "03169", + "xcode": "126.98432", + "stop_type": "일반차로", + "node_id": "102000075", + "nxtStn": "남산도서관.용산도서관" + }, + { + "stop_nm": "후암약수터", + "ycode": "37.548395263", + "stop_no": "03170", + "xcode": "126.9841668777", + "stop_type": "일반차로", + "node_id": "102000076", + "nxtStn": "보성여중고입구" + }, + { + "stop_nm": "보성여중고입구", + "ycode": "37.5463968458", + "stop_no": "03171", + "xcode": "126.9858399758", + "stop_type": "일반차로", + "node_id": "102000077", + "nxtStn": "남산밀레니엄힐튼호텔" + }, + { + "stop_nm": "보성여중고입구", + "ycode": "37.5462598541", + "stop_no": "03172", + "xcode": "126.9856317665", + "stop_type": "일반차로", + "node_id": "102000078", + "nxtStn": "용암초등학교.이태원2동주민센터" + }, + { + "stop_nm": "남산체육관", + "ycode": "37.5427038827", + "stop_no": "03173", + "xcode": "126.9927901963", + "stop_type": "일반차로", + "node_id": "102000079", + "nxtStn": "용암초등학교.이태원2동주민센터" + }, + { + "stop_nm": "남산체육관", + "ycode": "37.5425047481", + "stop_no": "03174", + "xcode": "126.992916961", + "stop_type": "일반차로", + "node_id": "102000080", + "nxtStn": "하얏트호텔" + }, + { + "stop_nm": "하얏트호텔", + "ycode": "37.541753", + "stop_no": "03175", + "xcode": "126.996128", + "stop_type": "일반차로", + "node_id": "102000081", + "nxtStn": "남산체육관" + }, + { + "stop_nm": "하얏트호텔", + "ycode": "37.540867", + "stop_no": "03176", + "xcode": "126.997422", + "stop_type": "일반차로", + "node_id": "102000082", + "nxtStn": "서울시중부기술교육원.블루스퀘어" + }, + { + "stop_nm": "용마루고개(서울자동차고등학교)", + "ycode": "37.5406368923", + "stop_no": "03177", + "xcode": "126.9584647114", + "stop_type": "일반차로", + "node_id": "102000083", + "nxtStn": "용마루고개.신공덕삼성아파트" + }, + { + "stop_nm": "용마루고개.효창파크푸르지오아파트", + "ycode": "37.5402999129", + "stop_no": "03178", + "xcode": "126.9585520334", + "stop_type": "일반차로", + "node_id": "102000084", + "nxtStn": "효창공원앞역.이봉창역사울림관" + }, + { + "stop_nm": "효창공원앞역.이봉창역사울림관", + "ycode": "37.539267", + "stop_no": "03179", + "xcode": "126.9619", + "stop_type": "일반차로", + "node_id": "102000085", + "nxtStn": "용마루고개(서울자동차고등학교)" + }, + { + "stop_nm": "효창공원앞역.이봉창역사울림관", + "ycode": "37.538826", + "stop_no": "03180", + "xcode": "126.962698", + "stop_type": "일반차로", + "node_id": "102000086", + "nxtStn": "용산꿈나무종합타운.보건분소" + }, + { + "stop_nm": "용산꿈나무종합타운.보건분소", + "ycode": "37.5384268178", + "stop_no": "03181", + "xcode": "126.9649997667", + "stop_type": "일반차로", + "node_id": "102000087", + "nxtStn": "효창공원앞역.이봉창역사울림관" + }, + { + "stop_nm": "용산꿈나무종합타운.보건분소", + "ycode": "37.538295", + "stop_no": "03182", + "xcode": "126.964648", + "stop_type": "일반차로", + "node_id": "102000088", + "nxtStn": "원효로제1동주민센터" + }, + { + "stop_nm": "원효로제1동주민센터", + "ycode": "37.53766", + "stop_no": "03183", + "xcode": "126.966993", + "stop_type": "일반차로", + "node_id": "102000089", + "nxtStn": "문배어린이공원" + }, + { + "stop_nm": "전쟁기념관", + "ycode": "37.5347586674", + "stop_no": "03184", + "xcode": "126.9768577525", + "stop_type": "일반차로", + "node_id": "102000090", + "nxtStn": "삼각지역11번출구" + }, + { + "stop_nm": "전쟁기념관", + "ycode": "37.534652", + "stop_no": "03185", + "xcode": "126.975382", + "stop_type": "일반차로", + "node_id": "102000091", + "nxtStn": "녹사평역" + }, + { + "stop_nm": "녹사평역", + "ycode": "37.5351069553", + "stop_no": "03186", + "xcode": "126.9851183494", + "stop_type": "일반차로", + "node_id": "102000092", + "nxtStn": "전쟁기념관" + }, + { + "stop_nm": "녹사평역", + "ycode": "37.5347582183", + "stop_no": "03187", + "xcode": "126.9853046955", + "stop_type": "일반차로", + "node_id": "102000093", + "nxtStn": "국군재정관리단" + }, + { + "stop_nm": "용산구청.이태원시장", + "ycode": "37.534375", + "stop_no": "03188", + "xcode": "126.99046", + "stop_type": "일반차로", + "node_id": "102000094", + "nxtStn": "녹사평역" + }, + { + "stop_nm": "용산구청.이태원시장", + "ycode": "37.534113", + "stop_no": "03189", + "xcode": "126.990007", + "stop_type": "일반차로", + "node_id": "102000095", + "nxtStn": "이태원역4번출구.해밀턴호텔" + }, + { + "stop_nm": "이태원역1번출구.해밀턴호텔", + "ycode": "37.5345183319", + "stop_no": "03190", + "xcode": "126.9929957924", + "stop_type": "일반차로", + "node_id": "102000096", + "nxtStn": "용산구청.이태원시장" + }, + { + "stop_nm": "이태원역4번출구.해밀턴호텔", + "ycode": "37.534355", + "stop_no": "03191", + "xcode": "126.993431", + "stop_type": "일반차로", + "node_id": "102000097", + "nxtStn": "이태원119안전센터" + }, + { + "stop_nm": "이태원119안전센터", + "ycode": "37.53479", + "stop_no": "03192", + "xcode": "126.996387", + "stop_type": "일반차로", + "node_id": "102000098", + "nxtStn": "이태원역1번출구.해밀턴호텔" + }, + { + "stop_nm": "이태원119안전센터", + "ycode": "37.534605", + "stop_no": "03193", + "xcode": "126.997181", + "stop_type": "일반차로", + "node_id": "102000099", + "nxtStn": "제일기획" + }, + { + "stop_nm": "한남동주민센터", + "ycode": "37.537047", + "stop_no": "03194", + "xcode": "127.000468", + "stop_type": "일반차로", + "node_id": "102000100", + "nxtStn": "이태원119안전센터" + }, + { + "stop_nm": "한남동주민센터", + "ycode": "37.537013", + "stop_no": "03195", + "xcode": "127.000807", + "stop_type": "일반차로", + "node_id": "102000101", + "nxtStn": "한강진역.블루스퀘어" + }, + { + "stop_nm": "한강진역.블루스퀘어", + "ycode": "37.5407264564", + "stop_no": "03196", + "xcode": "127.001669577", + "stop_type": "일반차로", + "node_id": "102000102", + "nxtStn": "한남동주민센터" + }, + { + "stop_nm": "한강진역.블루스퀘어", + "ycode": "37.54093", + "stop_no": "03197", + "xcode": "127.002023", + "stop_type": "일반차로", + "node_id": "102000103", + "nxtStn": "서울시중부기술교육원.블루스퀘어" + }, + { + "stop_nm": "서울역", + "ycode": "37.553622", + "stop_no": "03198", + "xcode": "126.973897", + "stop_type": "일반차로", + "node_id": "102000104", + "nxtStn": "후암3거리" + }, + { + "stop_nm": "후암3거리", + "ycode": "37.5525408404", + "stop_no": "03199", + "xcode": "126.9765772255", + "stop_type": "일반차로", + "node_id": "102000105", + "nxtStn": "후암시장" + }, + { + "stop_nm": "후암시장", + "ycode": "37.5506891863", + "stop_no": "03200", + "xcode": "126.9770644706", + "stop_type": "일반차로", + "node_id": "102000106", + "nxtStn": "용산중고" + }, + { + "stop_nm": "후암시장", + "ycode": "37.5497467332", + "stop_no": "03201", + "xcode": "126.9775446282", + "stop_type": "일반차로", + "node_id": "102000107", + "nxtStn": "후암삼거리" + }, + { + "stop_nm": "용산중고", + "ycode": "37.54666", + "stop_no": "03202", + "xcode": "126.978182", + "stop_type": "일반차로", + "node_id": "102000108", + "nxtStn": "남영동주민센터" + }, + { + "stop_nm": "용산중고", + "ycode": "37.54679039", + "stop_no": "03203", + "xcode": "126.978350169", + "stop_type": "일반차로", + "node_id": "102000109", + "nxtStn": "후암시장" + }, + { + "stop_nm": "후암동종점", + "ycode": "37.5466989277", + "stop_no": "03204", + "xcode": "126.9809588102", + "stop_type": "일반차로", + "node_id": "102000110", + "nxtStn": "용산중고" + }, + { + "stop_nm": "용산중고", + "ycode": "37.54574", + "stop_no": "03205", + "xcode": "126.977563", + "stop_type": "일반차로", + "node_id": "102000111", + "nxtStn": "후암동종점" + }, + { + "stop_nm": "남영동주민센터", + "ycode": "37.545815", + "stop_no": "03206", + "xcode": "126.976872", + "stop_type": "일반차로", + "node_id": "102000112", + "nxtStn": "남영우체국" + }, + { + "stop_nm": "남영동주민센터", + "ycode": "37.5453624049", + "stop_no": "03207", + "xcode": "126.9750573355", + "stop_type": "일반차로", + "node_id": "102000113", + "nxtStn": "용산중고" + }, + { + "stop_nm": "남영우체국", + "ycode": "37.5451241168", + "stop_no": "03208", + "xcode": "126.973235384", + "stop_type": "일반차로", + "node_id": "102000114", + "nxtStn": "용산중고" + }, + { + "stop_nm": "남영우체국", + "ycode": "37.54537", + "stop_no": "03209", + "xcode": "126.973482", + "stop_type": "일반차로", + "node_id": "102000115", + "nxtStn": "숙명여대입구" + }, + { + "stop_nm": "한남시범아파트", + "ycode": "37.5379429734", + "stop_no": "03210", + "xcode": "127.0122607528", + "stop_type": "일반차로", + "node_id": "102000116", + "nxtStn": "한남동" + }, + { + "stop_nm": "한남시범아파트", + "ycode": "37.5377041394", + "stop_no": "03211", + "xcode": "127.0126714787", + "stop_type": "일반차로", + "node_id": "102000117", + "nxtStn": "옥정중학교입구" + }, + { + "stop_nm": "한남동", + "ycode": "37.5339127002", + "stop_no": "03212", + "xcode": "127.0084445845", + "stop_type": "일반차로", + "node_id": "102000118", + "nxtStn": "순천향대학병원" + }, + { + "stop_nm": "한남동", + "ycode": "37.5337549896", + "stop_no": "03213", + "xcode": "127.0087002913", + "stop_type": "일반차로", + "node_id": "102000119", + "nxtStn": "한남시범아파트" + }, + { + "stop_nm": "이촌동동부센트레빌", + "ycode": "37.521567", + "stop_no": "03214", + "xcode": "126.966008", + "stop_type": "일반차로", + "node_id": "102000120", + "nxtStn": "이촌1동충신교회앞" + }, + { + "stop_nm": "이촌동두산위브트레지움.한강대우아파트", + "ycode": "37.521573", + "stop_no": "03215", + "xcode": "126.967528", + "stop_type": "일반차로", + "node_id": "102000121", + "nxtStn": "한강대교북단.LG유플러스" + }, + { + "stop_nm": "이촌1동충신교회앞", + "ycode": "37.521285", + "stop_no": "03216", + "xcode": "126.96848", + "stop_type": "일반차로", + "node_id": "102000122", + "nxtStn": "이촌동한강맨션.이촌역" + }, + { + "stop_nm": "이촌동한가람아파트.이촌역", + "ycode": "37.520656299", + "stop_no": "03217", + "xcode": "126.9718842721", + "stop_type": "일반차로", + "node_id": "102000123", + "nxtStn": "이촌동두산위브트레지움.한강대우아파트" + }, + { + "stop_nm": "이촌동한강맨션.이촌역", + "ycode": "37.52018", + "stop_no": "03218", + "xcode": "126.97271", + "stop_type": "일반차로", + "node_id": "102000124", + "nxtStn": "신용산초등학교.중경고등학교" + }, + { + "stop_nm": "신용산초등학교", + "ycode": "37.519848", + "stop_no": "03219", + "xcode": "126.974505", + "stop_type": "일반차로", + "node_id": "102000125", + "nxtStn": "이촌동한가람아파트.이촌역" + }, + { + "stop_nm": "신용산초등학교.중경고등학교", + "ycode": "37.51908", + "stop_no": "03220", + "xcode": "126.976238", + "stop_type": "일반차로", + "node_id": "102000126", + "nxtStn": "이촌동점보아파트" + }, + { + "stop_nm": "중경고등학교.이촌동강촌아파트", + "ycode": "37.518917", + "stop_no": "03221", + "xcode": "126.977522", + "stop_type": "일반차로", + "node_id": "102000127", + "nxtStn": "신용산초등학교" + }, + { + "stop_nm": "이촌동점보아파트", + "ycode": "37.5183400338", + "stop_no": "03222", + "xcode": "126.9783561291", + "stop_type": "일반차로", + "node_id": "102000128", + "nxtStn": "금강병원.반도아파트" + }, + { + "stop_nm": "이촌동현대아파트", + "ycode": "37.5185336834", + "stop_no": "03223", + "xcode": "126.9787120007", + "stop_type": "일반차로", + "node_id": "102000129", + "nxtStn": "중경고등학교.이촌동강촌아파트" + }, + { + "stop_nm": "금강병원.반도아파트", + "ycode": "37.517704332", + "stop_no": "03224", + "xcode": "126.9811234284", + "stop_type": "일반차로", + "node_id": "102000130", + "nxtStn": "서빙고신동아아파트" + }, + { + "stop_nm": "서빙고신동아아파트", + "ycode": "37.517927", + "stop_no": "03225", + "xcode": "126.985098", + "stop_type": "일반차로", + "node_id": "102000131", + "nxtStn": "이촌동현대아파트" + }, + { + "stop_nm": "서빙고신동아아파트", + "ycode": "37.5174859672", + "stop_no": "03226", + "xcode": "126.985371435", + "stop_type": "일반차로", + "node_id": "102000132", + "nxtStn": "서빙고역1번출구" + }, + { + "stop_nm": "만리동고개", + "ycode": "37.55167", + "stop_no": "03227", + "xcode": "126.962825", + "stop_type": "일반차로", + "node_id": "102000133", + "nxtStn": "손기정체육공원" + }, + { + "stop_nm": "손기정체육공원", + "ycode": "37.5542153265", + "stop_no": "03228", + "xcode": "126.9664230215", + "stop_type": "일반차로", + "node_id": "102000134", + "nxtStn": "서울역서부" + }, + { + "stop_nm": "숙대입구역", + "ycode": "37.5444252003", + "stop_no": "03229", + "xcode": "126.9708398554", + "stop_type": "일반차로", + "node_id": "102000135", + "nxtStn": "숙대입구역.청파동주민센터" + }, + { + "stop_nm": "남영역", + "ycode": "37.5422202391", + "stop_no": "03230", + "xcode": "126.9709244565", + "stop_type": "일반차로", + "node_id": "102000136", + "nxtStn": "숙대입구역" + }, + { + "stop_nm": "숙명여대도서관앞", + "ycode": "37.5448468654", + "stop_no": "03231", + "xcode": "126.9672216718", + "stop_type": "일반차로", + "node_id": "102000137", + "nxtStn": "숙명여대정문" + }, + { + "stop_nm": "숙명여대도서관앞", + "ycode": "37.5448412411", + "stop_no": "03232", + "xcode": "126.9664464653", + "stop_type": "일반차로", + "node_id": "102000138", + "nxtStn": "숙대입구역" + }, + { + "stop_nm": "숙명여대정문", + "ycode": "37.5449594985", + "stop_no": "03233", + "xcode": "126.9641094647", + "stop_type": "일반차로", + "node_id": "102000139", + "nxtStn": "숙명여대도서관앞" + }, + { + "stop_nm": "숙명여대정문", + "ycode": "37.5451307674", + "stop_no": "03234", + "xcode": "126.9643096929", + "stop_type": "일반차로", + "node_id": "102000140", + "nxtStn": "숙명여대후문.이봉창활동터" + }, + { + "stop_nm": "숙명여대후문.이봉창활동터", + "ycode": "37.546091", + "stop_no": "03235", + "xcode": "126.963307", + "stop_type": "일반차로", + "node_id": "102000141", + "nxtStn": "청파초등학교" + }, + { + "stop_nm": "효창공원후문", + "ycode": "37.546794", + "stop_no": "03236", + "xcode": "126.962579", + "stop_type": "일반차로", + "node_id": "102000142", + "nxtStn": "한겨레신문사입구" + }, + { + "stop_nm": "한겨레신문사입구", + "ycode": "37.5458806239", + "stop_no": "03237", + "xcode": "126.9591928852", + "stop_type": "일반차로", + "node_id": "102000143", + "nxtStn": "대한노인회" + }, + { + "stop_nm": "대한노인회", + "ycode": "37.5438", + "stop_no": "03238", + "xcode": "126.957683", + "stop_type": "일반차로", + "node_id": "102000144", + "nxtStn": "효창운동장.효창동주민센터" + }, + { + "stop_nm": "효창운동장.효창동주민센터", + "ycode": "37.5422095196", + "stop_no": "03239", + "xcode": "126.9617671315", + "stop_type": "일반차로", + "node_id": "102000145", + "nxtStn": "금양초등학교" + }, + { + "stop_nm": "효창동주민센터.금양초등학교", + "ycode": "37.5416239572", + "stop_no": "03240", + "xcode": "126.9622336676", + "stop_type": "일반차로", + "node_id": "102000146", + "nxtStn": "숙명여대정문" + }, + { + "stop_nm": "금양초등학교", + "ycode": "37.541299", + "stop_no": "03241", + "xcode": "126.962009", + "stop_type": "일반차로", + "node_id": "102000147", + "nxtStn": "효창공원앞역.이봉창역사울림관" + }, + { + "stop_nm": "효창공원역", + "ycode": "37.5387860159", + "stop_no": "03242", + "xcode": "126.9610378658", + "stop_type": "일반차로", + "node_id": "102000148", + "nxtStn": "용문시장" + }, + { + "stop_nm": "도원삼성래미안아파트", + "ycode": "37.539776803", + "stop_no": "03243", + "xcode": "126.9574338661", + "stop_type": "일반차로", + "node_id": "102000149", + "nxtStn": "도화동현대아파트" + }, + { + "stop_nm": "도원삼성래미안아파트", + "ycode": "37.5396254142", + "stop_no": "03244", + "xcode": "126.9572103137", + "stop_type": "일반차로", + "node_id": "102000150", + "nxtStn": "중앙하이츠빌라" + }, + { + "stop_nm": "중앙하이츠빌라앞", + "ycode": "37.538013", + "stop_no": "03245", + "xcode": "126.960035", + "stop_type": "일반차로", + "node_id": "102000151", + "nxtStn": "도원삼성래미안아파트" + }, + { + "stop_nm": "중앙하이츠빌라앞", + "ycode": "37.537972", + "stop_no": "03246", + "xcode": "126.959878", + "stop_type": "일반차로", + "node_id": "102000152", + "nxtStn": "용문시장" + }, + { + "stop_nm": "용문시장", + "ycode": "37.536348", + "stop_no": "03247", + "xcode": "126.960969", + "stop_type": "일반차로", + "node_id": "102000153", + "nxtStn": "남정초등학교" + }, + { + "stop_nm": "용문시장", + "ycode": "37.5359792047", + "stop_no": "03248", + "xcode": "126.9613595571", + "stop_type": "일반차로", + "node_id": "102000154", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "용산전자상가입구", + "ycode": "37.5345701678", + "stop_no": "03249", + "xcode": "126.9622225151", + "stop_type": "일반차로", + "node_id": "102000155", + "nxtStn": "남정초등학교" + }, + { + "stop_nm": "용산전자상가입구", + "ycode": "37.534658", + "stop_no": "03250", + "xcode": "126.961938", + "stop_type": "일반차로", + "node_id": "102000156", + "nxtStn": "신용산.지하차도" + }, + { + "stop_nm": "신용산.지하차도", + "ycode": "37.532835", + "stop_no": "03251", + "xcode": "126.963667", + "stop_type": "일반차로", + "node_id": "102000157", + "nxtStn": "용산전자상가입구" + }, + { + "stop_nm": "신용산.지하차도", + "ycode": "37.5325504129", + "stop_no": "03252", + "xcode": "126.9638381932", + "stop_type": "일반차로", + "node_id": "102000158", + "nxtStn": "신용산역" + }, + { + "stop_nm": "신용산역", + "ycode": "37.5300338589", + "stop_no": "03253", + "xcode": "126.9676784797", + "stop_type": "일반차로", + "node_id": "102000159", + "nxtStn": "신용산.지하차도" + }, + { + "stop_nm": "용산역", + "ycode": "37.528869", + "stop_no": "03255", + "xcode": "126.965822", + "stop_type": "일반차로", + "node_id": "102000161", + "nxtStn": "용산푸르지오써밋" + }, + { + "stop_nm": "용산푸르지오써밋", + "ycode": "37.527574", + "stop_no": "03256", + "xcode": "126.964759", + "stop_type": "일반차로", + "node_id": "102000162", + "nxtStn": "용산역사박물관.용산철도고등학교" + }, + { + "stop_nm": "용산푸르지오써밋", + "ycode": "37.527237", + "stop_no": "03257", + "xcode": "126.964573", + "stop_type": "일반차로", + "node_id": "102000163", + "nxtStn": "용산역광장앞" + }, + { + "stop_nm": "용산역광장앞", + "ycode": "37.5282680291", + "stop_no": "03258", + "xcode": "126.9655853263", + "stop_type": "일반차로", + "node_id": "102000164", + "nxtStn": "신용산.지하차도" + }, + { + "stop_nm": "용산역사박물관.용산철도고등학교", + "ycode": "37.5255972846", + "stop_no": "03259", + "xcode": "126.9660149714", + "stop_type": "일반차로", + "node_id": "102000165", + "nxtStn": "용산세무서" + }, + { + "stop_nm": "용산역사박물관.용산철도고등학교", + "ycode": "37.525305", + "stop_no": "03260", + "xcode": "126.967123", + "stop_type": "일반차로", + "node_id": "102000166", + "nxtStn": "용산푸르지오써밋" + }, + { + "stop_nm": "용산세무서", + "ycode": "37.523735", + "stop_no": "03261", + "xcode": "126.969243", + "stop_type": "일반차로", + "node_id": "102000167", + "nxtStn": "이촌역" + }, + { + "stop_nm": "용산세무서", + "ycode": "37.5236213922", + "stop_no": "03262", + "xcode": "126.970154424", + "stop_type": "일반차로", + "node_id": "102000168", + "nxtStn": "용산역사박물관.용산철도고등학교" + }, + { + "stop_nm": "이촌역", + "ycode": "37.5226689183", + "stop_no": "03263", + "xcode": "126.9739086458", + "stop_type": "일반차로", + "node_id": "102000169", + "nxtStn": "용산세무서" + }, + { + "stop_nm": "이촌역", + "ycode": "37.522364", + "stop_no": "03264", + "xcode": "126.974028", + "stop_type": "일반차로", + "node_id": "102000170", + "nxtStn": "국립중앙박물관용산가족공원" + }, + { + "stop_nm": "국립중앙박물관용산가족공원", + "ycode": "37.520898", + "stop_no": "03265", + "xcode": "126.97865", + "stop_type": "일반차로", + "node_id": "102000171", + "nxtStn": "서빙고역1번출구" + }, + { + "stop_nm": "국립중앙박물관용산가족공원", + "ycode": "37.520873", + "stop_no": "03266", + "xcode": "126.979955", + "stop_type": "일반차로", + "node_id": "102000172", + "nxtStn": "이촌역" + }, + { + "stop_nm": "서빙고역교차로", + "ycode": "37.520427", + "stop_no": "03267", + "xcode": "126.9899", + "stop_type": "일반차로", + "node_id": "102000173", + "nxtStn": "서빙고역1번출구" + }, + { + "stop_nm": "서빙고초등학교", + "ycode": "37.5211711184", + "stop_no": "03268", + "xcode": "126.9908893645", + "stop_type": "일반차로", + "node_id": "102000174", + "nxtStn": "서빙고동금호베스트빌" + }, + { + "stop_nm": "한강중학교", + "ycode": "37.525117", + "stop_no": "03269", + "xcode": "126.991363", + "stop_type": "일반차로", + "node_id": "102000175", + "nxtStn": "금호베스트빌앞" + }, + { + "stop_nm": "금호베스트빌앞", + "ycode": "37.522638", + "stop_no": "03270", + "xcode": "126.990717", + "stop_type": "일반차로", + "node_id": "102000176", + "nxtStn": "서빙고초등학교" + }, + { + "stop_nm": "서빙고동", + "ycode": "37.5198043185", + "stop_no": "03272", + "xcode": "126.9934202794", + "stop_type": "일반차로", + "node_id": "102000178", + "nxtStn": "동빙고동" + }, + { + "stop_nm": "서빙고동주민센터", + "ycode": "37.520382", + "stop_no": "03273", + "xcode": "126.994885", + "stop_type": "일반차로", + "node_id": "102000179", + "nxtStn": "서빙고역교차로" + }, + { + "stop_nm": "동빙고동", + "ycode": "37.520817", + "stop_no": "03274", + "xcode": "126.996692", + "stop_type": "일반차로", + "node_id": "102000180", + "nxtStn": "한남역" + }, + { + "stop_nm": "동빙고동", + "ycode": "37.521265", + "stop_no": "03275", + "xcode": "126.997038", + "stop_type": "일반차로", + "node_id": "102000181", + "nxtStn": "서빙고동주민센터" + }, + { + "stop_nm": "보광신동아아파트삼성리버빌아파트", + "ycode": "37.5247380028", + "stop_no": "03276", + "xcode": "127.0020297105", + "stop_type": "일반차로", + "node_id": "102000182", + "nxtStn": "동빙고동" + }, + { + "stop_nm": "보광동신동아아파트", + "ycode": "37.5256237907", + "stop_no": "03277", + "xcode": "127.0015149467", + "stop_type": "일반차로", + "node_id": "102000183", + "nxtStn": "보광동주민센터" + }, + { + "stop_nm": "보광동주민센터", + "ycode": "37.5264591178", + "stop_no": "03278", + "xcode": "127.0005046107", + "stop_type": "일반차로", + "node_id": "102000184", + "nxtStn": "보광신동아아파트삼성리버빌아파트" + }, + { + "stop_nm": "기업은행보광동지점", + "ycode": "37.528008", + "stop_no": "03279", + "xcode": "126.999303", + "stop_type": "일반차로", + "node_id": "102000185", + "nxtStn": "한국폴리텍1대학" + }, + { + "stop_nm": "기업은행보광동지점", + "ycode": "37.5281820141", + "stop_no": "03280", + "xcode": "126.9988968458", + "stop_type": "일반차로", + "node_id": "102000186", + "nxtStn": "보광동주민센터" + }, + { + "stop_nm": "한국폴리텍1대학", + "ycode": "37.530195", + "stop_no": "03281", + "xcode": "126.996792", + "stop_type": "일반차로", + "node_id": "102000187", + "nxtStn": "기업은행보광동지점" + }, + { + "stop_nm": "한국폴리텍1대학", + "ycode": "37.530532", + "stop_no": "03282", + "xcode": "126.996572", + "stop_type": "일반차로", + "node_id": "102000188", + "nxtStn": "이태원역.보광동입구" + }, + { + "stop_nm": "이태원역.보광동입구", + "ycode": "37.533478", + "stop_no": "03283", + "xcode": "126.994165", + "stop_type": "일반차로", + "node_id": "102000189", + "nxtStn": "한국폴리텍1대학" + }, + { + "stop_nm": "이태원역.보광동입구", + "ycode": "37.53382", + "stop_no": "03284", + "xcode": "126.994222", + "stop_type": "일반차로", + "node_id": "102000190", + "nxtStn": "이태원119안전센터" + }, + { + "stop_nm": "한남역.용산노인종합복지관", + "ycode": "37.5312239311", + "stop_no": "03285", + "xcode": "127.006795706", + "stop_type": "일반차로", + "node_id": "102000191", + "nxtStn": "한남동하이페리온" + }, + { + "stop_nm": "한남역.용산노인종합복지관", + "ycode": "37.5306687947", + "stop_no": "03286", + "xcode": "127.007769858", + "stop_type": "일반차로", + "node_id": "102000192", + "nxtStn": "순천향병원입구" + }, + { + "stop_nm": "이촌119안전센터.성촌공원", + "ycode": "37.530082", + "stop_no": "03287", + "xcode": "126.952943", + "stop_type": "일반차로", + "node_id": "102000193", + "nxtStn": "원효2동산호아파트후문" + }, + { + "stop_nm": "성촌공원.포르쉐센터용산", + "ycode": "37.5301710306", + "stop_no": "03288", + "xcode": "126.9546065451", + "stop_type": "일반차로", + "node_id": "102000194", + "nxtStn": "이촌119안전센터.성촌공원" + }, + { + "stop_nm": "성촌공원.포르쉐센터용산", + "ycode": "37.529747416", + "stop_no": "03289", + "xcode": "126.954351091", + "stop_type": "일반차로", + "node_id": "102000195", + "nxtStn": "이촌2동주민센터" + }, + { + "stop_nm": "이촌2동주민센터", + "ycode": "37.5277364382", + "stop_no": "03290", + "xcode": "126.9550639882", + "stop_type": "일반차로", + "node_id": "102000196", + "nxtStn": "성촌공원.포르쉐센터용산" + }, + { + "stop_nm": "이촌2동주민센터", + "ycode": "37.527703", + "stop_no": "03291", + "xcode": "126.954862", + "stop_type": "일반차로", + "node_id": "102000197", + "nxtStn": "이촌2동대림아파트.새남터성지" + }, + { + "stop_nm": "이촌2동대림아파트.새남터성지", + "ycode": "37.5261753068", + "stop_no": "03292", + "xcode": "126.9563230524", + "stop_type": "일반차로", + "node_id": "102000198", + "nxtStn": "이촌2동주민센터" + }, + { + "stop_nm": "이촌2동대림아파트.새남터성지", + "ycode": "37.5260292706", + "stop_no": "03293", + "xcode": "126.9561658719", + "stop_type": "일반차로", + "node_id": "102000199", + "nxtStn": "이촌2동강변아파트" + }, + { + "stop_nm": "서부이촌동입구", + "ycode": "37.523863", + "stop_no": "03294", + "xcode": "126.959497", + "stop_type": "일반차로", + "node_id": "102000200", + "nxtStn": "이촌2동대림아파트.새남터성지" + }, + { + "stop_nm": "이촌2동강변아파트", + "ycode": "37.5234462055", + "stop_no": "03295", + "xcode": "126.9597809746", + "stop_type": "일반차로", + "node_id": "102000201", + "nxtStn": "한강대교북단.LG유플러스" + }, + { + "stop_nm": "원효2동산호아파트후문", + "ycode": "37.53226", + "stop_no": "03296", + "xcode": "126.950016", + "stop_type": "일반차로", + "node_id": "102000202", + "nxtStn": "청암동강변삼성아파트" + }, + { + "stop_nm": "청암동강변삼성아파트", + "ycode": "37.5346144292", + "stop_no": "03297", + "xcode": "126.9482434807", + "stop_type": "일반차로", + "node_id": "102000203", + "nxtStn": "삼부아파트" + }, + { + "stop_nm": "청암동강변삼성아파트", + "ycode": "37.5339679073", + "stop_no": "03298", + "xcode": "126.9493177472", + "stop_type": "일반차로", + "node_id": "102000204", + "nxtStn": "원효2동산호아파트" + }, + { + "stop_nm": "원효2동산호아파트", + "ycode": "37.5330177683", + "stop_no": "03299", + "xcode": "126.9505415559", + "stop_type": "일반차로", + "node_id": "102000205", + "nxtStn": "원효로풍전아파트" + }, + { + "stop_nm": "원효2동산호아파트", + "ycode": "37.5331088986", + "stop_no": "03300", + "xcode": "126.9508277689", + "stop_type": "일반차로", + "node_id": "102000206", + "nxtStn": "청암동강변삼성아파트" + }, + { + "stop_nm": "원효로풍전아파트", + "ycode": "37.5321286462", + "stop_no": "03301", + "xcode": "126.9535225314", + "stop_type": "일반차로", + "node_id": "102000207", + "nxtStn": "원효로3가" + }, + { + "stop_nm": "원효로풍전아파트", + "ycode": "37.5323687724", + "stop_no": "03302", + "xcode": "126.9545135613", + "stop_type": "일반차로", + "node_id": "102000208", + "nxtStn": "원효2동산호아파트" + }, + { + "stop_nm": "원효풍전아파트", + "ycode": "37.532743", + "stop_no": "03303", + "xcode": "126.955917", + "stop_type": "일반차로", + "node_id": "102000209", + "nxtStn": "성촌공원.포르쉐센터용산" + }, + { + "stop_nm": "원효2동주민센터", + "ycode": "37.534494", + "stop_no": "03304", + "xcode": "126.951395", + "stop_type": "일반차로", + "node_id": "102000210", + "nxtStn": "산천동" + }, + { + "stop_nm": "산천동리버힐삼성아파트", + "ycode": "37.5345003443", + "stop_no": "03305", + "xcode": "126.9511923413", + "stop_type": "일반차로", + "node_id": "102000211", + "nxtStn": "리버힐삼성아파트후문" + }, + { + "stop_nm": "산천동", + "ycode": "37.535322", + "stop_no": "03306", + "xcode": "126.953643", + "stop_type": "일반차로", + "node_id": "102000212", + "nxtStn": "신창동세방아파트" + }, + { + "stop_nm": "산천동", + "ycode": "37.535408", + "stop_no": "03307", + "xcode": "126.953382", + "stop_type": "일반차로", + "node_id": "102000213", + "nxtStn": "산천동리버힐삼성아파트" + }, + { + "stop_nm": "신창동세방아파트", + "ycode": "37.535708", + "stop_no": "03308", + "xcode": "126.954955", + "stop_type": "일반차로", + "node_id": "102000214", + "nxtStn": "남이장군사당" + }, + { + "stop_nm": "신창동세방아파트", + "ycode": "37.5358300537", + "stop_no": "03309", + "xcode": "126.9549471079", + "stop_type": "일반차로", + "node_id": "102000215", + "nxtStn": "산천동" + }, + { + "stop_nm": "남이장군사당", + "ycode": "37.5366080232", + "stop_no": "03310", + "xcode": "126.9578221125", + "stop_type": "일반차로", + "node_id": "102000216", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "남이장군사당", + "ycode": "37.5368238567", + "stop_no": "03311", + "xcode": "126.9577034507", + "stop_type": "일반차로", + "node_id": "102000217", + "nxtStn": "신창동세방아파트" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5370716239", + "stop_no": "03312", + "xcode": "126.9595337638", + "stop_type": "일반차로", + "node_id": "102000218", + "nxtStn": "용문시장" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.537149", + "stop_no": "03313", + "xcode": "126.959197", + "stop_type": "일반차로", + "node_id": "102000219", + "nxtStn": "남이장군사당" + }, + { + "stop_nm": "순천향병원입구", + "ycode": "37.5326305473", + "stop_no": "03319", + "xcode": "127.0067505734", + "stop_type": "일반차로", + "node_id": "102000225", + "nxtStn": "한남역.용산노인종합복지관" + }, + { + "stop_nm": "남산서울타워", + "ycode": "37.551016", + "stop_no": "03320", + "xcode": "126.991197", + "stop_type": "일반차로", + "node_id": "102000226", + "nxtStn": "남산도서관" + }, + { + "stop_nm": "청심경로당", + "ycode": "37.533887", + "stop_no": "03321", + "xcode": "126.950688", + "stop_type": "일반차로", + "node_id": "102000227", + "nxtStn": "원효2동주민센터" + }, + { + "stop_nm": "삼성테마트", + "ycode": "37.5337466904", + "stop_no": "03322", + "xcode": "126.9503849242", + "stop_type": "일반차로", + "node_id": "102000228", + "nxtStn": "청암동강변삼성아파트" + }, + { + "stop_nm": "서빙고동금호베스트빌", + "ycode": "37.5226137862", + "stop_no": "03323", + "xcode": "126.9909910111", + "stop_type": "일반차로", + "node_id": "102000229", + "nxtStn": "한강중학교앞" + }, + { + "stop_nm": "한남동하이페리온", + "ycode": "37.5278439771", + "stop_no": "03324", + "xcode": "127.0055474264", + "stop_type": "일반차로", + "node_id": "102000230", + "nxtStn": "신동아APT" + }, + { + "stop_nm": "서빙고역1번출구", + "ycode": "37.520036", + "stop_no": "03325", + "xcode": "126.989482", + "stop_type": "일반차로", + "node_id": "102000231", + "nxtStn": "서빙고신동아아파트" + }, + { + "stop_nm": "문배동이안아파트앞", + "ycode": "37.5388699959", + "stop_no": "03326", + "xcode": "126.971060418", + "stop_type": "일반차로", + "node_id": "102000232", + "nxtStn": "남영역" + }, + { + "stop_nm": "갈월동4호선숙대입구", + "ycode": "37.546385", + "stop_no": "03327", + "xcode": "126.971658", + "stop_type": "일반차로", + "node_id": "102000233", + "nxtStn": "남영역" + }, + { + "stop_nm": "삼각지역11번출구", + "ycode": "37.536204", + "stop_no": "03328", + "xcode": "126.974548", + "stop_type": "일반차로", + "node_id": "102000234", + "nxtStn": "남영역" + }, + { + "stop_nm": "숙대입구", + "ycode": "37.5445305498", + "stop_no": "03330", + "xcode": "126.9705229419", + "stop_type": "일반차로", + "node_id": "102000236", + "nxtStn": "남영역" + }, + { + "stop_nm": "원효대교북단", + "ycode": "37.532135", + "stop_no": "03331", + "xcode": "126.955607", + "stop_type": "일반차로", + "node_id": "102000237", + "nxtStn": "시범아파트.대교아파트" + }, + { + "stop_nm": "문배동이안아파트앞", + "ycode": "37.538363", + "stop_no": "03332", + "xcode": "126.970803", + "stop_type": "일반차로", + "node_id": "102000238", + "nxtStn": "문배어린이공원" + }, + { + "stop_nm": "순천향병원입구", + "ycode": "37.532694511", + "stop_no": "03334", + "xcode": "127.0069961164", + "stop_type": "일반차로", + "node_id": "102000240", + "nxtStn": "신사역.푸른저축은행" + }, + { + "stop_nm": "숙명여대입구", + "ycode": "37.5448844577", + "stop_no": "03335", + "xcode": "126.9696434774", + "stop_type": "일반차로", + "node_id": "102000241", + "nxtStn": "숙명여대도서관앞" + }, + { + "stop_nm": "서빙고초등학교", + "ycode": "37.5208412941", + "stop_no": "03336", + "xcode": "126.9906099662", + "stop_type": "일반차로", + "node_id": "102000243", + "nxtStn": "서빙고역교차로" + }, + { + "stop_nm": "한강대교전망카페", + "ycode": "37.5213307725", + "stop_no": "03338", + "xcode": "126.9608161519", + "stop_type": "일반차로", + "node_id": "102000245", + "nxtStn": "노들섬" + }, + { + "stop_nm": "한강대교전망카페", + "ycode": "37.521235", + "stop_no": "03339", + "xcode": "126.961342", + "stop_type": "일반차로", + "node_id": "102000246", + "nxtStn": "이촌동동부센트레빌" + }, + { + "stop_nm": "노들섬", + "ycode": "37.517515", + "stop_no": "03340", + "xcode": "126.95861", + "stop_type": "일반차로", + "node_id": "102000247", + "nxtStn": "노들역" + }, + { + "stop_nm": "노들섬", + "ycode": "37.5173638437", + "stop_no": "03341", + "xcode": "126.959037665", + "stop_type": "일반차로", + "node_id": "102000248", + "nxtStn": "한강대교북단.LG유플러스" + }, + { + "stop_nm": "용암초등학교.이태원2동주민센터", + "ycode": "37.544673", + "stop_no": "03342", + "xcode": "126.990733", + "stop_type": "일반차로", + "node_id": "102000249", + "nxtStn": "남산그랜드하얏트호텔" + }, + { + "stop_nm": "용암초등학교.이태원2동주민센터", + "ycode": "37.5448496669", + "stop_no": "03343", + "xcode": "126.9909320571", + "stop_type": "일반차로", + "node_id": "102000250", + "nxtStn": "보성여중고입구" + }, + { + "stop_nm": "효창공원삼거리.윤봉길의사등묘역", + "ycode": "37.5446070869", + "stop_no": "03344", + "xcode": "126.9638368968", + "stop_type": "일반차로", + "node_id": "102000266", + "nxtStn": "숙명여대후문.이봉창활동터" + }, + { + "stop_nm": "서울역공항철도15번출구.국립극단", + "ycode": "37.5530779085", + "stop_no": "03345", + "xcode": "126.9688467509", + "stop_type": "일반차로", + "node_id": "102000286", + "nxtStn": "서계동" + }, + { + "stop_nm": "용산꿈나무종합타운", + "ycode": "37.538486933", + "stop_no": "03346", + "xcode": "126.9672402984", + "stop_type": "일반차로", + "node_id": "102000297", + "nxtStn": "용산경찰서" + }, + { + "stop_nm": "남산도서관", + "ycode": "37.552343667", + "stop_no": "03347", + "xcode": "126.9818461928", + "stop_type": "일반차로", + "node_id": "102000316", + "nxtStn": "백범광장" + }, + { + "stop_nm": "하얏트호텔", + "ycode": "37.5406603781", + "stop_no": "03500", + "xcode": "126.9969932623", + "stop_type": "마을버스", + "node_id": "102900010", + "nxtStn": "필리핀대사관" + }, + { + "stop_nm": "한신아파트", + "ycode": "37.5389827262", + "stop_no": "03501", + "xcode": "126.9866957386", + "stop_type": "마을버스", + "node_id": "102900065", + "nxtStn": "용암경로당입구" + }, + { + "stop_nm": "순천향병원", + "ycode": "37.533377", + "stop_no": "03502", + "xcode": "127.003953", + "stop_type": "마을버스", + "node_id": "102900009", + "nxtStn": "한남오거리" + }, + { + "stop_nm": "용암경로당입구", + "ycode": "37.541035", + "stop_no": "03503", + "xcode": "126.987047", + "stop_type": "마을버스", + "node_id": "102900066", + "nxtStn": "용암한신아파트" + }, + { + "stop_nm": "한남오거리", + "ycode": "37.5330901125", + "stop_no": "03504", + "xcode": "127.0066566991", + "stop_type": "마을버스", + "node_id": "102900083", + "nxtStn": "한남역.용산노인종합복지관" + }, + { + "stop_nm": "가야랑앞", + "ycode": "37.5401952774", + "stop_no": "03505", + "xcode": "126.9936040739", + "stop_type": "마을버스", + "node_id": "102900079", + "nxtStn": "디지텍고등학교앞" + }, + { + "stop_nm": "용암한신아파트", + "ycode": "37.542602", + "stop_no": "03506", + "xcode": "126.987563", + "stop_type": "마을버스", + "node_id": "102900008", + "nxtStn": "우리들가정의원" + }, + { + "stop_nm": "효창공원후문", + "ycode": "37.5470688427", + "stop_no": "03508", + "xcode": "126.9608920893", + "stop_type": "마을버스", + "node_id": "102900070", + "nxtStn": "하나님의교회" + }, + { + "stop_nm": "디지텍고등학교앞", + "ycode": "37.5398031767", + "stop_no": "03509", + "xcode": "126.9916260429", + "stop_type": "마을버스", + "node_id": "102900007", + "nxtStn": "성도약국" + }, + { + "stop_nm": "우리들가정의원", + "ycode": "37.5432315144", + "stop_no": "03510", + "xcode": "126.9877949646", + "stop_type": "마을버스", + "node_id": "102900006", + "nxtStn": "남산교회입구" + }, + { + "stop_nm": "도원삼성래미안아파트101동앞", + "ycode": "37.53907", + "stop_no": "03511", + "xcode": "126.956232", + "stop_type": "마을버스", + "node_id": "102900097", + "nxtStn": "도원삼성래미안아파트단지내" + }, + { + "stop_nm": "성도약국", + "ycode": "37.5394506828", + "stop_no": "03512", + "xcode": "126.9895541036", + "stop_type": "마을버스", + "node_id": "102900080", + "nxtStn": "시장" + }, + { + "stop_nm": "남산교회입구", + "ycode": "37.5446713415", + "stop_no": "03513", + "xcode": "126.9866471968", + "stop_type": "마을버스", + "node_id": "102900005", + "nxtStn": "해방촌오거리" + }, + { + "stop_nm": "신애교회", + "ycode": "37.5455190385", + "stop_no": "03515", + "xcode": "126.9584869002", + "stop_type": "마을버스", + "node_id": "102900003", + "nxtStn": "대한노인회중앙회" + }, + { + "stop_nm": "시장", + "ycode": "37.539016", + "stop_no": "03516", + "xcode": "126.98876", + "stop_type": "마을버스", + "node_id": "102900002", + "nxtStn": "해방촌" + }, + { + "stop_nm": "해방촌오거리", + "ycode": "37.54572995", + "stop_no": "03517", + "xcode": "126.9851474983", + "stop_type": "마을버스", + "node_id": "102900001", + "nxtStn": "신흥교회앞" + }, + { + "stop_nm": "보광동주민센터", + "ycode": "37.5261473387", + "stop_no": "03518", + "xcode": "127.0000973012", + "stop_type": "마을버스", + "node_id": "102900085", + "nxtStn": "군인아파트" + }, + { + "stop_nm": "대한노인회중앙회", + "ycode": "37.544035", + "stop_no": "03519", + "xcode": "126.957635", + "stop_type": "마을버스", + "node_id": "102900035", + "nxtStn": "원효사.백범김구기념관" + }, + { + "stop_nm": "도원삼성래미안아파트101동앞", + "ycode": "37.539022", + "stop_no": "03520", + "xcode": "126.956297", + "stop_type": "마을버스", + "node_id": "102900096", + "nxtStn": "도원삼성래미안아파트" + }, + { + "stop_nm": "신흥교회앞", + "ycode": "37.544864", + "stop_no": "03521", + "xcode": "126.982858", + "stop_type": "마을버스", + "node_id": "102900034", + "nxtStn": "큰빛의집앞" + }, + { + "stop_nm": "군인아파트", + "ycode": "37.526004", + "stop_no": "03522", + "xcode": "126.996318", + "stop_type": "마을버스", + "node_id": "102900033", + "nxtStn": "몬드리안서울이태원" + }, + { + "stop_nm": "원효사.백범김구기념관", + "ycode": "37.5431401733", + "stop_no": "03523", + "xcode": "126.9585663043", + "stop_type": "마을버스", + "node_id": "102900032", + "nxtStn": "효창운동장.효창동주민센터" + }, + { + "stop_nm": "녹사평역", + "ycode": "37.535021", + "stop_no": "03524", + "xcode": "126.98586", + "stop_type": "마을버스", + "node_id": "102900064", + "nxtStn": "전쟁기념관" + }, + { + "stop_nm": "큰빛의집앞", + "ycode": "37.5445481753", + "stop_no": "03525", + "xcode": "126.9819982464", + "stop_type": "마을버스", + "node_id": "102900031", + "nxtStn": "후암동종점" + }, + { + "stop_nm": "몬드리안서울이태원", + "ycode": "37.5285305142", + "stop_no": "03526", + "xcode": "126.9926263697", + "stop_type": "마을버스", + "node_id": "102900075", + "nxtStn": "용산구청" + }, + { + "stop_nm": "도원삼성래미안아파트", + "ycode": "37.539689", + "stop_no": "03527", + "xcode": "126.957686", + "stop_type": "마을버스", + "node_id": "102900098", + "nxtStn": "도원삼성래미안아파트101동앞" + }, + { + "stop_nm": "후암동종점", + "ycode": "37.5467007949", + "stop_no": "03529", + "xcode": "126.9813662289", + "stop_type": "마을버스", + "node_id": "102900063", + "nxtStn": "용산고등학교" + }, + { + "stop_nm": "용산구청", + "ycode": "37.5303191147", + "stop_no": "03530", + "xcode": "126.9914494622", + "stop_type": "마을버스", + "node_id": "102900076", + "nxtStn": "외빈차고" + }, + { + "stop_nm": "용산고등학교", + "ycode": "37.5461364014", + "stop_no": "03532", + "xcode": "126.9795092308", + "stop_type": "마을버스", + "node_id": "102900030", + "nxtStn": "갈월동사회복지회관" + }, + { + "stop_nm": "외빈차고", + "ycode": "37.531729383", + "stop_no": "03533", + "xcode": "126.9921711943", + "stop_type": "마을버스", + "node_id": "102900077", + "nxtStn": "청화아파트" + }, + { + "stop_nm": "효창공원앞역.이봉창역사울림관", + "ycode": "37.5396710223", + "stop_no": "03534", + "xcode": "126.9614323385", + "stop_type": "마을버스", + "node_id": "102900029", + "nxtStn": "용마루고개(서울자동차고등학교)" + }, + { + "stop_nm": "갈월동사회복지회관", + "ycode": "37.5453901296", + "stop_no": "03536", + "xcode": "126.9740851958", + "stop_type": "마을버스", + "node_id": "102900028", + "nxtStn": "숙대역7번출구" + }, + { + "stop_nm": "청화아파트", + "ycode": "37.531422", + "stop_no": "03537", + "xcode": "126.995136", + "stop_type": "마을버스", + "node_id": "102900078", + "nxtStn": "보광동삼거리" + }, + { + "stop_nm": "동작대로(가상)", + "ycode": "37.5159085841", + "stop_no": "03538", + "xcode": "126.9829602272", + "stop_type": "가상정류장", + "node_id": "102000303", + "nxtStn": "반포대교(가상)" + }, + { + "stop_nm": "용산경찰서", + "ycode": "37.5410233025", + "stop_no": "03540", + "xcode": "126.969805735", + "stop_type": "마을버스", + "node_id": "102900027", + "nxtStn": "원효우체국" + }, + { + "stop_nm": "숙대역7번출구", + "ycode": "37.543486", + "stop_no": "03541", + "xcode": "126.972309", + "stop_type": "마을버스", + "node_id": "102900026", + "nxtStn": "남영역" + }, + { + "stop_nm": "보광동삼거리", + "ycode": "37.5307329855", + "stop_no": "03542", + "xcode": "126.9968250706", + "stop_type": "마을버스", + "node_id": "102900025", + "nxtStn": "보광초등학교" + }, + { + "stop_nm": "중앙하이츠빌라", + "ycode": "37.5385683269", + "stop_no": "03543", + "xcode": "126.9594786383", + "stop_type": "마을버스", + "node_id": "102900072", + "nxtStn": "용문동시장.새마을금고" + }, + { + "stop_nm": "원효우체국", + "ycode": "37.539285", + "stop_no": "03544", + "xcode": "126.967738", + "stop_type": "마을버스", + "node_id": "102900024", + "nxtStn": "원효로제1동주민센터" + }, + { + "stop_nm": "보광초등학교", + "ycode": "37.5313430275", + "stop_no": "03545", + "xcode": "126.9967763907", + "stop_type": "마을버스", + "node_id": "102900023", + "nxtStn": "수미용실" + }, + { + "stop_nm": "용문동시장.새마을금고", + "ycode": "37.5373482951", + "stop_no": "03546", + "xcode": "126.9596343248", + "stop_type": "마을버스", + "node_id": "102900022", + "nxtStn": "용문동주민센터" + }, + { + "stop_nm": "수미용실", + "ycode": "37.531468", + "stop_no": "03549", + "xcode": "126.997906", + "stop_type": "마을버스", + "node_id": "102900021", + "nxtStn": "영동김밥" + }, + { + "stop_nm": "용문동주민센터", + "ycode": "37.5381473907", + "stop_no": "03550", + "xcode": "126.9591190202", + "stop_type": "마을버스", + "node_id": "102900073", + "nxtStn": "도원삼성래미안아파트" + }, + { + "stop_nm": "문배어린이공원", + "ycode": "37.536941", + "stop_no": "03551", + "xcode": "126.969723", + "stop_type": "마을버스", + "node_id": "102900020", + "nxtStn": "용산CJ나인파크" + }, + { + "stop_nm": "문배어린이공원", + "ycode": "37.5371431249", + "stop_no": "03552", + "xcode": "126.9695900372", + "stop_type": "마을버스", + "node_id": "102900019", + "nxtStn": "용산꿈나무종합타운" + }, + { + "stop_nm": "영동김밥", + "ycode": "37.5310357946", + "stop_no": "03553", + "xcode": "127.0007739346", + "stop_type": "마을버스", + "node_id": "102900018", + "nxtStn": "도깨비시장" + }, + { + "stop_nm": "한강대교(가상)", + "ycode": "37.5217277175", + "stop_no": "03554", + "xcode": "126.9606611648", + "stop_type": "가상정류장", + "node_id": "102000301", + "nxtStn": "동작대로(가상)" + }, + { + "stop_nm": "도깨비시장", + "ycode": "37.5308546551", + "stop_no": "03557", + "xcode": "127.002245989", + "stop_type": "마을버스", + "node_id": "102900017", + "nxtStn": "리버힐빌라앞" + }, + { + "stop_nm": "리버힐빌라앞", + "ycode": "37.5317260348", + "stop_no": "03560", + "xcode": "127.0008836966", + "stop_type": "마을버스", + "node_id": "102900016", + "nxtStn": "보광교회" + }, + { + "stop_nm": "신용산역", + "ycode": "37.5299166547", + "stop_no": "03561", + "xcode": "126.9674544999", + "stop_type": "마을버스", + "node_id": "102900015", + "nxtStn": "용산우체국" + }, + { + "stop_nm": "보광교회", + "ycode": "37.5322730017", + "stop_no": "03563", + "xcode": "126.99918645", + "stop_type": "마을버스", + "node_id": "102900013", + "nxtStn": "이슬람사원" + }, + { + "stop_nm": "용산우체국", + "ycode": "37.531376286", + "stop_no": "03564", + "xcode": "126.9703153999", + "stop_type": "마을버스", + "node_id": "102900012", + "nxtStn": "삼각지역" + }, + { + "stop_nm": "숙대역5번출구", + "ycode": "37.54403813", + "stop_no": "03565", + "xcode": "126.9725114972", + "stop_type": "마을버스", + "node_id": "102900011", + "nxtStn": "갈월동" + }, + { + "stop_nm": "이슬람사원", + "ycode": "37.5329884585", + "stop_no": "03566", + "xcode": "126.9979655399", + "stop_type": "마을버스", + "node_id": "102900059", + "nxtStn": "보광초등학교후문앞" + }, + { + "stop_nm": "삼각지역", + "ycode": "37.534513", + "stop_no": "03567", + "xcode": "126.973264", + "stop_type": "마을버스", + "node_id": "102900058", + "nxtStn": "전쟁기념관" + }, + { + "stop_nm": "갈월동", + "ycode": "37.5463241118", + "stop_no": "03568", + "xcode": "126.9720930552", + "stop_type": "마을버스", + "node_id": "102900068", + "nxtStn": "갑을빌딩" + }, + { + "stop_nm": "보광초등학교후문앞", + "ycode": "37.5330902217", + "stop_no": "03569", + "xcode": "126.9956979823", + "stop_type": "마을버스", + "node_id": "102900057", + "nxtStn": "이태원역앞" + }, + { + "stop_nm": "반포대교(가상)", + "ycode": "37.5188784955", + "stop_no": "03570", + "xcode": "126.9940055639", + "stop_type": "가상정류장", + "node_id": "102000305", + "nxtStn": "한남대교(가상)" + }, + { + "stop_nm": "동자경로당", + "ycode": "37.5502867059", + "stop_no": "03571", + "xcode": "126.9741955461", + "stop_type": "마을버스", + "node_id": "102900056", + "nxtStn": "후암시장" + }, + { + "stop_nm": "이태원역앞", + "ycode": "37.5341805498", + "stop_no": "03572", + "xcode": "126.9957001828", + "stop_type": "마을버스", + "node_id": "102900055", + "nxtStn": "이태원119안전센터" + }, + { + "stop_nm": "녹사평역.용산구청", + "ycode": "37.535133", + "stop_no": "03573", + "xcode": "126.987177", + "stop_type": "마을버스", + "node_id": "102900054", + "nxtStn": "종점" + }, + { + "stop_nm": "후암시장", + "ycode": "37.550118", + "stop_no": "03574", + "xcode": "126.976548", + "stop_type": "마을버스", + "node_id": "102900053", + "nxtStn": "후암동주민센터앞" + }, + { + "stop_nm": "후암동주민센터앞", + "ycode": "37.5483644838", + "stop_no": "03577", + "xcode": "126.9777057507", + "stop_type": "마을버스", + "node_id": "102900051", + "nxtStn": "용산고" + }, + { + "stop_nm": "제일기획", + "ycode": "37.5348708584", + "stop_no": "03578", + "xcode": "126.9984396046", + "stop_type": "마을버스", + "node_id": "102900084", + "nxtStn": "한남동주민센터" + }, + { + "stop_nm": "대성교회", + "ycode": "37.538891", + "stop_no": "03579", + "xcode": "126.988712", + "stop_type": "마을버스", + "node_id": "102900081", + "nxtStn": "성도약국" + }, + { + "stop_nm": "용산고", + "ycode": "37.5459083263", + "stop_no": "03580", + "xcode": "126.9789524928", + "stop_type": "마을버스", + "node_id": "102900050", + "nxtStn": "후암동종점" + }, + { + "stop_nm": "성도약국", + "ycode": "37.5392776612", + "stop_no": "03581", + "xcode": "126.9894307824", + "stop_type": "마을버스", + "node_id": "102900049", + "nxtStn": "디지텍고등학교앞" + }, + { + "stop_nm": "후암동종점", + "ycode": "37.5465016517", + "stop_no": "03582", + "xcode": "126.9813594882", + "stop_type": "마을버스", + "node_id": "102900048", + "nxtStn": "큰빛의집앞" + }, + { + "stop_nm": "디지텍고등학교앞", + "ycode": "37.539731", + "stop_no": "03583", + "xcode": "126.991572", + "stop_type": "마을버스", + "node_id": "102900047", + "nxtStn": "가야랑앞" + }, + { + "stop_nm": "큰빛의집앞", + "ycode": "37.5444832826", + "stop_no": "03584", + "xcode": "126.9819077271", + "stop_type": "마을버스", + "node_id": "102900046", + "nxtStn": "신흥교회앞" + }, + { + "stop_nm": "가야랑앞", + "ycode": "37.5400889559", + "stop_no": "03585", + "xcode": "126.9937523252", + "stop_type": "마을버스", + "node_id": "102900082", + "nxtStn": "필리핀대사관" + }, + { + "stop_nm": "신흥교회앞", + "ycode": "37.5446231699", + "stop_no": "03586", + "xcode": "126.983387942", + "stop_type": "마을버스", + "node_id": "102900045", + "nxtStn": "해방촌오거리" + }, + { + "stop_nm": "해방촌오거리", + "ycode": "37.5457029481", + "stop_no": "03588", + "xcode": "126.9853964787", + "stop_type": "마을버스", + "node_id": "102900044", + "nxtStn": "남산교회입구" + }, + { + "stop_nm": "남산교회입구", + "ycode": "37.5445505919", + "stop_no": "03589", + "xcode": "126.9866223212", + "stop_type": "마을버스", + "node_id": "102900043", + "nxtStn": "우리들가정의원" + }, + { + "stop_nm": "우리들가정의원", + "ycode": "37.5432423134", + "stop_no": "03590", + "xcode": "126.9876591627", + "stop_type": "마을버스", + "node_id": "102900042", + "nxtStn": "용암한신아파트" + }, + { + "stop_nm": "용암한신아파트", + "ycode": "37.5423880484", + "stop_no": "03591", + "xcode": "126.9874137344", + "stop_type": "마을버스", + "node_id": "102900041", + "nxtStn": "용암경로당입구" + }, + { + "stop_nm": "용암경로당입구", + "ycode": "37.5410985304", + "stop_no": "03592", + "xcode": "126.9869601654", + "stop_type": "마을버스", + "node_id": "102900040", + "nxtStn": "한신아파트" + }, + { + "stop_nm": "한신아파트", + "ycode": "37.5389881171", + "stop_no": "03593", + "xcode": "126.986557682", + "stop_type": "마을버스", + "node_id": "102900039", + "nxtStn": "녹사평역.용산구청" + }, + { + "stop_nm": "갑을빌딩", + "ycode": "37.5490958683", + "stop_no": "03594", + "xcode": "126.9720388292", + "stop_type": "마을버스", + "node_id": "102900089", + "nxtStn": "동자경로당" + }, + { + "stop_nm": "리버힐삼성아파트후문", + "ycode": "37.5349462412", + "stop_no": "03595", + "xcode": "126.9487207623", + "stop_type": "마을버스", + "node_id": "102900091", + "nxtStn": "청암대" + }, + { + "stop_nm": "만리시장입구", + "ycode": "37.5515678017", + "stop_no": "03596", + "xcode": "126.9630412782", + "stop_type": "마을버스", + "node_id": "102900038", + "nxtStn": "배문중고등학교" + }, + { + "stop_nm": "배문중고등학교", + "ycode": "37.5503749309", + "stop_no": "03597", + "xcode": "126.9636168092", + "stop_type": "마을버스", + "node_id": "102900037", + "nxtStn": "청파초등학교" + }, + { + "stop_nm": "청파초등학교", + "ycode": "37.5485834792", + "stop_no": "03598", + "xcode": "126.9633754859", + "stop_type": "마을버스", + "node_id": "102900036", + "nxtStn": "효창공원후문" + }, + { + "stop_nm": "동부이촌동", + "ycode": "37.520139253", + "stop_no": "03648", + "xcode": "126.9726729953", + "stop_type": "일반차로", + "node_id": "102000263", + "nxtStn": "강촌APT" + }, + { + "stop_nm": "강촌APT", + "ycode": "37.5191", + "stop_no": "03649", + "xcode": "126.976196", + "stop_type": "일반차로", + "node_id": "102000262", + "nxtStn": "이촌현대아파트.금강병원" + }, + { + "stop_nm": "남산그랜드하얏트호텔", + "ycode": "37.5398259716", + "stop_no": "03680", + "xcode": "126.9973678608", + "stop_type": "일반차로", + "node_id": "102000272", + "nxtStn": "용암초등학교.이태원2동주민센터" + }, + { + "stop_nm": "청파초등학교", + "ycode": "37.5484699816", + "stop_no": "03688", + "xcode": "126.9635056923", + "stop_type": "마을버스", + "node_id": "102900062", + "nxtStn": "배문중고교" + }, + { + "stop_nm": "청암자이아파트", + "ycode": "37.534535", + "stop_no": "03689", + "xcode": "126.947027", + "stop_type": "일반차로", + "node_id": "102000271", + "nxtStn": "청암동강변삼성아파트" + }, + { + "stop_nm": "배문중고교", + "ycode": "37.550381273", + "stop_no": "03699", + "xcode": "126.963728852", + "stop_type": "마을버스", + "node_id": "102900061", + "nxtStn": "만리시장입구" + }, + { + "stop_nm": "만리시장입구", + "ycode": "37.5517759871", + "stop_no": "03700", + "xcode": "126.9631453007", + "stop_type": "마을버스", + "node_id": "102900060", + "nxtStn": "손기정체육공원" + }, + { + "stop_nm": "청암자이아파트", + "ycode": "37.5348119266", + "stop_no": "03709", + "xcode": "126.948603174", + "stop_type": "마을버스", + "node_id": "102900090", + "nxtStn": "원효2동주민센터" + }, + { + "stop_nm": "신동아APT", + "ycode": "37.5175986035", + "stop_no": "03710", + "xcode": "126.9853623627", + "stop_type": "일반차로", + "node_id": "102000273", + "nxtStn": "동빙고동" + }, + { + "stop_nm": "신동아APT", + "ycode": "37.5179220911", + "stop_no": "03728", + "xcode": "126.9853034727", + "stop_type": "일반차로", + "node_id": "102000257", + "nxtStn": "이촌현대아파트.금강병원" + }, + { + "stop_nm": "강촌APT", + "ycode": "37.5189057287", + "stop_no": "03729", + "xcode": "126.9773129069", + "stop_type": "일반차로", + "node_id": "102000256", + "nxtStn": "동부이촌동" + }, + { + "stop_nm": "동부이촌동", + "ycode": "37.5206779095", + "stop_no": "03730", + "xcode": "126.9718175157", + "stop_type": "일반차로", + "node_id": "102000255", + "nxtStn": "이촌동두산위브트레지움" + }, + { + "stop_nm": "이촌동두산위브트레지움", + "ycode": "37.521493673", + "stop_no": "03732", + "xcode": "126.9659919434", + "stop_type": "일반차로", + "node_id": "102000274", + "nxtStn": "동부이촌동" + }, + { + "stop_nm": "이촌동두산위브트레지움", + "ycode": "37.5215283595", + "stop_no": "03733", + "xcode": "126.9675735406", + "stop_type": "일반차로", + "node_id": "102000275", + "nxtStn": "원효대교북단(가상)" + }, + { + "stop_nm": "이촌현대아파트.금강병원", + "ycode": "37.5177187363", + "stop_no": "03734", + "xcode": "126.9810408412", + "stop_type": "일반차로", + "node_id": "102000276", + "nxtStn": "신동아APT" + }, + { + "stop_nm": "이촌현대아파트.금강병원", + "ycode": "37.51851", + "stop_no": "03735", + "xcode": "126.978747", + "stop_type": "일반차로", + "node_id": "102000277", + "nxtStn": "강촌APT" + }, + { + "stop_nm": "한남역", + "ycode": "37.5312068138", + "stop_no": "03736", + "xcode": "127.0067323413", + "stop_type": "일반차로", + "node_id": "102000278", + "nxtStn": "한남동하이페리온" + }, + { + "stop_nm": "도원삼성래미안아파트단지내", + "ycode": "37.5381983039", + "stop_no": "03737", + "xcode": "126.9553881353", + "stop_type": "마을버스", + "node_id": "102900092", + "nxtStn": "도원삼성래미안아파트101동앞" + }, + { + "stop_nm": "한남동주민센터", + "ycode": "37.534115", + "stop_no": "03742", + "xcode": "127.000606", + "stop_type": "마을버스", + "node_id": "102900086", + "nxtStn": "종점" + }, + { + "stop_nm": "용산CJ나인파크", + "ycode": "37.535873", + "stop_no": "03743", + "xcode": "126.969554", + "stop_type": "마을버스", + "node_id": "102900088", + "nxtStn": "용산e편한세상" + }, + { + "stop_nm": "용산e편한세상", + "ycode": "37.5343418882", + "stop_no": "03744", + "xcode": "126.9672466378", + "stop_type": "마을버스", + "node_id": "102900087", + "nxtStn": "용산전자상가17동" + }, + { + "stop_nm": "이집트대사관.한남더힐아파트", + "ycode": "37.535259", + "stop_no": "03748", + "xcode": "127.011276", + "stop_type": "일반차로", + "node_id": "102000282", + "nxtStn": "옥정중학교" + }, + { + "stop_nm": "이집트대사관.한남더힐아파트", + "ycode": "37.5362408844", + "stop_no": "03749", + "xcode": "127.0114310392", + "stop_type": "일반차로", + "node_id": "102000281", + "nxtStn": "한남동" + }, + { + "stop_nm": "한남역", + "ycode": "37.5305849943", + "stop_no": "03750", + "xcode": "127.0077438254", + "stop_type": "일반차로", + "node_id": "102000283", + "nxtStn": "한남동" + }, + { + "stop_nm": "한남동", + "ycode": "37.533755", + "stop_no": "03751", + "xcode": "127.008572", + "stop_type": "일반차로", + "node_id": "102000285", + "nxtStn": "이집트대사관.한남더힐아파트" + }, + { + "stop_nm": "한남동", + "ycode": "37.533963153", + "stop_no": "03752", + "xcode": "127.0085656637", + "stop_type": "일반차로", + "node_id": "102000284", + "nxtStn": "한남역" + }, + { + "stop_nm": "필리핀대사관", + "ycode": "37.5406999627", + "stop_no": "03753", + "xcode": "126.995093255", + "stop_type": "마을버스", + "node_id": "102900095", + "nxtStn": "가야랑앞" + }, + { + "stop_nm": "필리핀대사관", + "ycode": "37.5405702075", + "stop_no": "03754", + "xcode": "126.9951600296", + "stop_type": "마을버스", + "node_id": "102900094", + "nxtStn": "종점" + }, + { + "stop_nm": "전쟁기념관", + "ycode": "37.5384014653", + "stop_no": "03900", + "xcode": "126.9734851953", + "stop_type": "일반차로", + "node_id": "102000310", + "nxtStn": "용산역" + }, + { + "stop_nm": "용산역", + "ycode": "37.5290767593", + "stop_no": "03901", + "xcode": "126.9658972377", + "stop_type": "일반차로", + "node_id": "102000311", + "nxtStn": "국립중앙박물관" + }, + { + "stop_nm": "국립중앙박물관", + "ycode": "37.5208476177", + "stop_no": "03902", + "xcode": "126.9785496415", + "stop_type": "일반차로", + "node_id": "102000312", + "nxtStn": "이태원" + }, + { + "stop_nm": "이태원", + "ycode": "37.5343385918", + "stop_no": "03903", + "xcode": "126.9904416929", + "stop_type": "일반차로", + "node_id": "102000313", + "nxtStn": "명동" + }, + { + "stop_nm": "남산서울타워", + "ycode": "37.5511419911", + "stop_no": "03904", + "xcode": "126.9909861872", + "stop_type": "일반차로", + "node_id": "101000323", + "nxtStn": "하얏트호텔" + }, + { + "stop_nm": "하얏트호텔", + "ycode": "37.5408918783", + "stop_no": "03905", + "xcode": "126.9972013482", + "stop_type": "일반차로", + "node_id": "102000314", + "nxtStn": "동대문디자인플라자.동대문시장" + }, + { + "stop_nm": "힐튼호텔", + "ycode": "37.5547770692", + "stop_no": "03906", + "xcode": "126.9772255151", + "stop_type": "일반차로", + "node_id": "101000327", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "남산도서관", + "ycode": "37.5520885865", + "stop_no": "03907", + "xcode": "126.9815510765", + "stop_type": "일반차로", + "node_id": "102000315", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "답십리역사거리", + "ycode": "37.5654496127", + "stop_no": "04001", + "xcode": "127.0543961703", + "stop_type": "중앙차로", + "node_id": "103000001", + "nxtStn": "청년회의소.서울새활용플라자" + }, + { + "stop_nm": "청년회의소.서울새활용플라자", + "ycode": "37.562035", + "stop_no": "04002", + "xcode": "127.060482", + "stop_type": "중앙차로", + "node_id": "103000002", + "nxtStn": "장한평역" + }, + { + "stop_nm": "장한평역", + "ycode": "37.561188", + "stop_no": "04003", + "xcode": "127.066093", + "stop_type": "중앙차로", + "node_id": "103000003", + "nxtStn": "군자교입구" + }, + { + "stop_nm": "상왕십리역", + "ycode": "37.564338", + "stop_no": "04101", + "xcode": "127.029075", + "stop_type": "일반차로", + "node_id": "103000004", + "nxtStn": "왕십리2동주민센터" + }, + { + "stop_nm": "상왕십리역", + "ycode": "37.5646936321", + "stop_no": "04102", + "xcode": "127.0286812869", + "stop_type": "가로변전일", + "node_id": "103000005", + "nxtStn": "왕십리센트라스아파트" + }, + { + "stop_nm": "왕십리센트라스아파트", + "ycode": "37.565215", + "stop_no": "04103", + "xcode": "127.024807", + "stop_type": "가로변시간", + "node_id": "103000006", + "nxtStn": "성동고등학교" + }, + { + "stop_nm": "왕십리교회", + "ycode": "37.56663", + "stop_no": "04104", + "xcode": "127.023678", + "stop_type": "일반차로", + "node_id": "103000007", + "nxtStn": "왕십리도선동주민센터" + }, + { + "stop_nm": "뉴타운아파트", + "ycode": "37.564877", + "stop_no": "04105", + "xcode": "127.026968", + "stop_type": "일반차로", + "node_id": "103000509", + "nxtStn": "상왕십리역" + }, + { + "stop_nm": "청계벽산아파트.텐즈힐아파트", + "ycode": "37.568863", + "stop_no": "04106", + "xcode": "127.030377", + "stop_type": "일반차로", + "node_id": "103000008", + "nxtStn": "동아제약앞" + }, + { + "stop_nm": "청계벽산아파트.텐즈힐아파트", + "ycode": "37.567955", + "stop_no": "04107", + "xcode": "127.03004", + "stop_type": "일반차로", + "node_id": "103000009", + "nxtStn": "상왕십리역.센트라스아파트" + }, + { + "stop_nm": "왕십리도선동주민센터", + "ycode": "37.567617", + "stop_no": "04108", + "xcode": "127.024642", + "stop_type": "일반차로", + "node_id": "103000010", + "nxtStn": "도선고등학교.꽃재교회" + }, + { + "stop_nm": "왕십리2동주민센터", + "ycode": "37.56244961", + "stop_no": "04109", + "xcode": "127.0332625935", + "stop_type": "가로변시간", + "node_id": "103000011", + "nxtStn": "왕십리역" + }, + { + "stop_nm": "코스모타워.서울신용보증재단성동지점", + "ycode": "37.5629822568", + "stop_no": "04110", + "xcode": "127.032902865", + "stop_type": "일반차로", + "node_id": "103000012", + "nxtStn": "상왕십리역" + }, + { + "stop_nm": "성동구청", + "ycode": "37.563127", + "stop_no": "04112", + "xcode": "127.035915", + "stop_type": "가로변시간", + "node_id": "103000014", + "nxtStn": "무학여고" + }, + { + "stop_nm": "상왕십리역", + "ycode": "37.5648716583", + "stop_no": "04113", + "xcode": "127.0302446401", + "stop_type": "일반차로", + "node_id": "103000015", + "nxtStn": "청계벽산아파트.텐즈힐아파트" + }, + { + "stop_nm": "상왕십리역.센트라스아파트", + "ycode": "37.565859", + "stop_no": "04114", + "xcode": "127.029978", + "stop_type": "일반차로", + "node_id": "103000016", + "nxtStn": "상왕십리역" + }, + { + "stop_nm": "신금호역4번출구", + "ycode": "37.554143", + "stop_no": "04115", + "xcode": "127.02053", + "stop_type": "일반차로", + "node_id": "103000515", + "nxtStn": "금호고등학교.금호자이1차아파트입구" + }, + { + "stop_nm": "마장동주민센터", + "ycode": "37.5673234964", + "stop_no": "04116", + "xcode": "127.04457376", + "stop_type": "일반차로", + "node_id": "103000017", + "nxtStn": "마장역" + }, + { + "stop_nm": "마장역", + "ycode": "37.5655825128", + "stop_no": "04117", + "xcode": "127.0423251779", + "stop_type": "일반차로", + "node_id": "103000018", + "nxtStn": "마장동주민센터" + }, + { + "stop_nm": "성동노인복지관", + "ycode": "37.5649375925", + "stop_no": "04118", + "xcode": "127.0415861333", + "stop_type": "일반차로", + "node_id": "103000019", + "nxtStn": "마장동금호아파트" + }, + { + "stop_nm": "마장축산물시장", + "ycode": "37.5709505267", + "stop_no": "04119", + "xcode": "127.0380207293", + "stop_type": "가로변전일", + "node_id": "103000020", + "nxtStn": "동대문구청.용두역3번출구" + }, + { + "stop_nm": "마장축산물시장", + "ycode": "37.5702590064", + "stop_no": "04120", + "xcode": "127.0375113528", + "stop_type": "가로변전일", + "node_id": "103000021", + "nxtStn": "도선동사거리" + }, + { + "stop_nm": "도선사거리", + "ycode": "37.567023", + "stop_no": "04121", + "xcode": "127.036955", + "stop_type": "일반차로", + "node_id": "103000022", + "nxtStn": "마장축산물시장" + }, + { + "stop_nm": "도선사거리", + "ycode": "37.566648", + "stop_no": "04122", + "xcode": "127.036487", + "stop_type": "일반차로", + "node_id": "103000023", + "nxtStn": "성동구청" + }, + { + "stop_nm": "마장동금호아파트", + "ycode": "37.5630713327", + "stop_no": "04123", + "xcode": "127.041859032", + "stop_type": "일반차로", + "node_id": "103000024", + "nxtStn": "마장역" + }, + { + "stop_nm": "마장동금호아파트", + "ycode": "37.5621577226", + "stop_no": "04124", + "xcode": "127.0415811922", + "stop_type": "일반차로", + "node_id": "103000025", + "nxtStn": "한양대부속고등학교" + }, + { + "stop_nm": "한양대부속고등학교", + "ycode": "37.560925", + "stop_no": "04125", + "xcode": "127.041413", + "stop_type": "일반차로", + "node_id": "103000026", + "nxtStn": "마장동금호아파트" + }, + { + "stop_nm": "한양대부속고등학교", + "ycode": "37.5603881249", + "stop_no": "04126", + "xcode": "127.0411546041", + "stop_type": "일반차로", + "node_id": "103000027", + "nxtStn": "한양대정문" + }, + { + "stop_nm": "한양대앞.한양시장", + "ycode": "37.5585823987", + "stop_no": "04127", + "xcode": "127.0409668475", + "stop_type": "일반차로", + "node_id": "103000028", + "nxtStn": "한양대부속고등학교" + }, + { + "stop_nm": "한양대앞", + "ycode": "37.558525", + "stop_no": "04128", + "xcode": "127.040647", + "stop_type": "일반차로", + "node_id": "103000029", + "nxtStn": "서울숲삼부아파트" + }, + { + "stop_nm": "한양대정문", + "ycode": "37.5563883665", + "stop_no": "04129", + "xcode": "127.0431286432", + "stop_type": "일반차로", + "node_id": "103000030", + "nxtStn": "성동교남단" + }, + { + "stop_nm": "한양대정문앞", + "ycode": "37.556996", + "stop_no": "04130", + "xcode": "127.043138", + "stop_type": "가로변전일", + "node_id": "103000031", + "nxtStn": "한양대앞.한양시장" + }, + { + "stop_nm": "무학여고앞", + "ycode": "37.557855", + "stop_no": "04131", + "xcode": "127.034232", + "stop_type": "일반차로", + "node_id": "103000032", + "nxtStn": "성동구청" + }, + { + "stop_nm": "무학여고", + "ycode": "37.5578953118", + "stop_no": "04132", + "xcode": "127.0338672615", + "stop_type": "일반차로", + "node_id": "103000033", + "nxtStn": "응봉동주민센터" + }, + { + "stop_nm": "왕십리역", + "ycode": "37.5599473134", + "stop_no": "04133", + "xcode": "127.0361920228", + "stop_type": "일반차로", + "node_id": "103000034", + "nxtStn": "행당1동주민센터.성동소방서" + }, + { + "stop_nm": "왕십리역", + "ycode": "37.5603365628", + "stop_no": "04134", + "xcode": "127.0362669183", + "stop_type": "가로변시간", + "node_id": "103000035", + "nxtStn": "코스모타워.서울신용보증재단성동지점" + }, + { + "stop_nm": "왕십리역", + "ycode": "37.560723", + "stop_no": "04135", + "xcode": "127.034688", + "stop_type": "일반차로", + "node_id": "103000036", + "nxtStn": "무학여고" + }, + { + "stop_nm": "행당1동주민센터.성동소방서", + "ycode": "37.558268", + "stop_no": "04136", + "xcode": "127.038407", + "stop_type": "일반차로", + "node_id": "103000037", + "nxtStn": "한양대정문" + }, + { + "stop_nm": "서울숲삼부아파트", + "ycode": "37.5587230766", + "stop_no": "04137", + "xcode": "127.0379492742", + "stop_type": "일반차로", + "node_id": "103000038", + "nxtStn": "왕십리역" + }, + { + "stop_nm": "응봉동주민센터", + "ycode": "37.5533989566", + "stop_no": "04138", + "xcode": "127.0335007802", + "stop_type": "일반차로", + "node_id": "103000039", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "응봉동주민센터", + "ycode": "37.5537612141", + "stop_no": "04139", + "xcode": "127.0334386918", + "stop_type": "일반차로", + "node_id": "103000040", + "nxtStn": "응봉동현대아파트" + }, + { + "stop_nm": "응봉사거리", + "ycode": "37.5552918803", + "stop_no": "04140", + "xcode": "127.0344580408", + "stop_type": "일반차로", + "node_id": "103000041", + "nxtStn": "무학여고앞" + }, + { + "stop_nm": "응봉동현대아파트", + "ycode": "37.549732", + "stop_no": "04141", + "xcode": "127.030578", + "stop_type": "일반차로", + "node_id": "103000042", + "nxtStn": "응봉동주민센터" + }, + { + "stop_nm": "응봉동현대아파트", + "ycode": "37.550222", + "stop_no": "04142", + "xcode": "127.0309", + "stop_type": "일반차로", + "node_id": "103000043", + "nxtStn": "삼성래미안아파트앞" + }, + { + "stop_nm": "대현산배수지공원입구", + "ycode": "37.5562783783", + "stop_no": "04143", + "xcode": "127.0200973882", + "stop_type": "일반차로", + "node_id": "103000044", + "nxtStn": "금호어린이집" + }, + { + "stop_nm": "신금호역", + "ycode": "37.5556051708", + "stop_no": "04145", + "xcode": "127.020117586", + "stop_type": "일반차로", + "node_id": "103000046", + "nxtStn": "대현산배수지공원입구" + }, + { + "stop_nm": "신금호역", + "ycode": "37.555678", + "stop_no": "04146", + "xcode": "127.019922", + "stop_type": "일반차로", + "node_id": "103000047", + "nxtStn": "신금호역" + }, + { + "stop_nm": "금호고등학교", + "ycode": "37.553475", + "stop_no": "04147", + "xcode": "127.021945", + "stop_type": "일반차로", + "node_id": "103000048", + "nxtStn": "신금호역" + }, + { + "stop_nm": "금호고등학교.금호자이1차아파트입구", + "ycode": "37.5531077251", + "stop_no": "04148", + "xcode": "127.0229328751", + "stop_type": "일반차로", + "node_id": "103000049", + "nxtStn": "래미안하이리버아파트" + }, + { + "stop_nm": "금호동벽산아파트", + "ycode": "37.5511643996", + "stop_no": "04149", + "xcode": "127.0256791281", + "stop_type": "일반차로", + "node_id": "103000050", + "nxtStn": "벽산아파트정문" + }, + { + "stop_nm": "래미안하이리버아파트", + "ycode": "37.5514582119", + "stop_no": "04150", + "xcode": "127.0254234439", + "stop_type": "일반차로", + "node_id": "103000051", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.5488791385", + "stop_no": "04151", + "xcode": "127.02606314", + "stop_type": "일반차로", + "node_id": "103000052", + "nxtStn": "금호동벽산아파트" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.5494639682", + "stop_no": "04152", + "xcode": "127.0259773298", + "stop_type": "일반차로", + "node_id": "103000053", + "nxtStn": "GS주유소" + }, + { + "stop_nm": "금남시장앞.백범학원터", + "ycode": "37.5480852238", + "stop_no": "04153", + "xcode": "127.0218686315", + "stop_type": "일반차로", + "node_id": "103000054", + "nxtStn": "힐스테이트서울숲리버아파트" + }, + { + "stop_nm": "금남시장앞.백범학원터", + "ycode": "37.5482887551", + "stop_no": "04154", + "xcode": "127.022487755", + "stop_type": "일반차로", + "node_id": "103000055", + "nxtStn": "금옥초등학교앞" + }, + { + "stop_nm": "금호역", + "ycode": "37.547728", + "stop_no": "04155", + "xcode": "127.016267", + "stop_type": "일반차로", + "node_id": "103000056", + "nxtStn": "약수역4번출구.금호터널입구" + }, + { + "stop_nm": "금호역", + "ycode": "37.548503108", + "stop_no": "04156", + "xcode": "127.0155079421", + "stop_type": "일반차로", + "node_id": "103000057", + "nxtStn": "압구정역4번출구" + }, + { + "stop_nm": "금옥초등학교앞", + "ycode": "37.5469673139", + "stop_no": "04157", + "xcode": "127.0198923146", + "stop_type": "일반차로", + "node_id": "103000058", + "nxtStn": "화단삼거리" + }, + { + "stop_nm": "금옥초등학교앞", + "ycode": "37.546254", + "stop_no": "04158", + "xcode": "127.018237", + "stop_type": "일반차로", + "node_id": "103000059", + "nxtStn": "옥수삼성아파트.래미안옥수리버젠" + }, + { + "stop_nm": "힐스테이트서울숲리버아파트", + "ycode": "37.5478877101", + "stop_no": "04159", + "xcode": "127.0270575925", + "stop_type": "일반차로", + "node_id": "103000060", + "nxtStn": "응봉동현대아파트" + }, + { + "stop_nm": "삼성래미안아파트앞", + "ycode": "37.5483498668", + "stop_no": "04160", + "xcode": "127.0275127211", + "stop_type": "일반차로", + "node_id": "103000061", + "nxtStn": "금남시장앞.백범학원터" + }, + { + "stop_nm": "옥수삼성아파트.래미안옥수리버젠", + "ycode": "37.5436204852", + "stop_no": "04161", + "xcode": "127.0148475565", + "stop_type": "일반차로", + "node_id": "103000062", + "nxtStn": "미타사입구" + }, + { + "stop_nm": "옥수삼성아파트.래미안옥수리버젠", + "ycode": "37.5438034317", + "stop_no": "04162", + "xcode": "127.0146552078", + "stop_type": "일반차로", + "node_id": "103000063", + "nxtStn": "옥정중학교입구" + }, + { + "stop_nm": "미타사입구", + "ycode": "37.5448556208", + "stop_no": "04163", + "xcode": "127.0168373163", + "stop_type": "일반차로", + "node_id": "103000064", + "nxtStn": "금옥초등학교앞" + }, + { + "stop_nm": "래미안옥수리버젠.옥수중앙교회", + "ycode": "37.5459155767", + "stop_no": "04164", + "xcode": "127.0148446166", + "stop_type": "일반차로", + "node_id": "103000065", + "nxtStn": "옥수파크힐스아파트앞" + }, + { + "stop_nm": "래미안옥수리버젠.옥수중앙교회", + "ycode": "37.545782", + "stop_no": "04165", + "xcode": "127.014698", + "stop_type": "가로변전일", + "node_id": "103000066", + "nxtStn": "래미안옥수리버젠아파트상가" + }, + { + "stop_nm": "옥수파크힐스아파트앞", + "ycode": "37.547113", + "stop_no": "04166", + "xcode": "127.013038", + "stop_type": "일반차로", + "node_id": "103000506", + "nxtStn": "서울방송고등학교.남산타운아파트" + }, + { + "stop_nm": "옥수파크힐스아파트앞", + "ycode": "37.547018", + "stop_no": "04167", + "xcode": "127.013019", + "stop_type": "일반차로", + "node_id": "103000507", + "nxtStn": "래미안옥수리버젠.옥수중앙교회" + }, + { + "stop_nm": "옥수동종점", + "ycode": "37.549335", + "stop_no": "04168", + "xcode": "127.012585", + "stop_type": "일반차로", + "node_id": "103000069", + "nxtStn": "옥수파크힐스아파트앞" + }, + { + "stop_nm": "옥정중학교입구", + "ycode": "37.5409040726", + "stop_no": "04169", + "xcode": "127.011302745", + "stop_type": "일반차로", + "node_id": "103000070", + "nxtStn": "옥수종합사회복지관" + }, + { + "stop_nm": "옥정중학교입구", + "ycode": "37.5408770683", + "stop_no": "04170", + "xcode": "127.0109994635", + "stop_type": "일반차로", + "node_id": "103000071", + "nxtStn": "한남하이츠아파트" + }, + { + "stop_nm": "성수1가1동새마을금고", + "ycode": "37.53822", + "stop_no": "04171", + "xcode": "127.04955", + "stop_type": "일반차로", + "node_id": "103000072", + "nxtStn": "서울숲지구대앞" + }, + { + "stop_nm": "성수1가새마을금고", + "ycode": "37.53833", + "stop_no": "04172", + "xcode": "127.04951", + "stop_type": "일반차로", + "node_id": "103000073", + "nxtStn": "천주교성수동성당앞" + }, + { + "stop_nm": "천주교성수동성당앞", + "ycode": "37.53937", + "stop_no": "04173", + "xcode": "127.046139", + "stop_type": "일반차로", + "node_id": "103000074", + "nxtStn": "뚝도아리수정수센터수도박물관" + }, + { + "stop_nm": "천주교성수동성당앞", + "ycode": "37.539305526", + "stop_no": "04174", + "xcode": "127.0460740289", + "stop_type": "일반차로", + "node_id": "103000075", + "nxtStn": "성수1가1동새마을금고" + }, + { + "stop_nm": "뚝도아리수정수센터수도박물관", + "ycode": "37.540977", + "stop_no": "04175", + "xcode": "127.0442", + "stop_type": "일반차로", + "node_id": "103000076", + "nxtStn": "서울숲역2번출구" + }, + { + "stop_nm": "뚝도아리수정수센터수도박물관", + "ycode": "37.541407", + "stop_no": "04176", + "xcode": "127.04399", + "stop_type": "일반차로", + "node_id": "103000077", + "nxtStn": "천주교성수동성당앞" + }, + { + "stop_nm": "서울숲역2번출구", + "ycode": "37.5429317268", + "stop_no": "04177", + "xcode": "127.0447086131", + "stop_type": "일반차로", + "node_id": "103000078", + "nxtStn": "성동구민종합체육센터" + }, + { + "stop_nm": "서울숲역3번출구", + "ycode": "37.543064", + "stop_no": "04178", + "xcode": "127.044501", + "stop_type": "일반차로", + "node_id": "103000079", + "nxtStn": "서울숲1번출입구" + }, + { + "stop_nm": "성동구민종합체육센터", + "ycode": "37.5460719745", + "stop_no": "04179", + "xcode": "127.0448960891", + "stop_type": "일반차로", + "node_id": "103000080", + "nxtStn": "성동교남단" + }, + { + "stop_nm": "성동구민종합체육센터", + "ycode": "37.546493", + "stop_no": "04180", + "xcode": "127.044533", + "stop_type": "일반차로", + "node_id": "103000081", + "nxtStn": "서울숲역3번출구" + }, + { + "stop_nm": "성수공고앞", + "ycode": "37.539973", + "stop_no": "04181", + "xcode": "127.050314", + "stop_type": "일반차로", + "node_id": "103000082", + "nxtStn": "이마트.서울숲힐스테이트아파트" + }, + { + "stop_nm": "성수공고앞", + "ycode": "37.540039", + "stop_no": "04182", + "xcode": "127.050759", + "stop_type": "일반차로", + "node_id": "103000083", + "nxtStn": "현대그린아파트" + }, + { + "stop_nm": "경일초등학교입구", + "ycode": "37.541079", + "stop_no": "04183", + "xcode": "127.046372", + "stop_type": "일반차로", + "node_id": "103000084", + "nxtStn": "성원중성수동이마트앞" + }, + { + "stop_nm": "경일초등학교입구", + "ycode": "37.541382", + "stop_no": "04184", + "xcode": "127.046014", + "stop_type": "일반차로", + "node_id": "103000085", + "nxtStn": "동호대교(가상)" + }, + { + "stop_nm": "성동교남단", + "ycode": "37.549515", + "stop_no": "04185", + "xcode": "127.044457", + "stop_type": "일반차로", + "node_id": "103000086", + "nxtStn": "한양대정문앞" + }, + { + "stop_nm": "성동교남단", + "ycode": "37.5505075164", + "stop_no": "04186", + "xcode": "127.0439627696", + "stop_type": "일반차로", + "node_id": "103000087", + "nxtStn": "성동구민종합체육센터" + }, + { + "stop_nm": "상원", + "ycode": "37.55144", + "stop_no": "04187", + "xcode": "127.04605", + "stop_type": "일반차로", + "node_id": "103000088", + "nxtStn": "리버하우스" + }, + { + "stop_nm": "상원", + "ycode": "37.551748", + "stop_no": "04188", + "xcode": "127.046662", + "stop_type": "일반차로", + "node_id": "103000089", + "nxtStn": "한양대정문앞" + }, + { + "stop_nm": "영동대교북단", + "ycode": "37.536945", + "stop_no": "04189", + "xcode": "127.060742", + "stop_type": "일반차로", + "node_id": "103000090", + "nxtStn": "영동교입구" + }, + { + "stop_nm": "경수중학교", + "ycode": "37.5396998621", + "stop_no": "04190", + "xcode": "127.0622986037", + "stop_type": "일반차로", + "node_id": "103000091", + "nxtStn": "영동대교북단" + }, + { + "stop_nm": "성수119안전센터", + "ycode": "37.5373416869", + "stop_no": "04191", + "xcode": "127.060132085", + "stop_type": "일반차로", + "node_id": "103000092", + "nxtStn": "자양동" + }, + { + "stop_nm": "성수119안전센터", + "ycode": "37.537532", + "stop_no": "04192", + "xcode": "127.059997", + "stop_type": "일반차로", + "node_id": "103000093", + "nxtStn": "성원중성수동이마트앞" + }, + { + "stop_nm": "경수중학교", + "ycode": "37.5381650347", + "stop_no": "04193", + "xcode": "127.0570118184", + "stop_type": "일반차로", + "node_id": "103000094", + "nxtStn": "성수119안전센터" + }, + { + "stop_nm": "경수중학교", + "ycode": "37.5382865442", + "stop_no": "04194", + "xcode": "127.0572982039", + "stop_type": "일반차로", + "node_id": "103000095", + "nxtStn": "뚝도시장" + }, + { + "stop_nm": "뚝도시장", + "ycode": "37.5385866142", + "stop_no": "04195", + "xcode": "127.0553996133", + "stop_type": "일반차로", + "node_id": "103000096", + "nxtStn": "경수중학교" + }, + { + "stop_nm": "뚝도시장", + "ycode": "37.53885", + "stop_no": "04196", + "xcode": "127.05526", + "stop_type": "일반차로", + "node_id": "103000097", + "nxtStn": "성원중성수동이마트앞" + }, + { + "stop_nm": "성원중성수동이마트앞", + "ycode": "37.5390939396", + "stop_no": "04197", + "xcode": "127.0534264696", + "stop_type": "일반차로", + "node_id": "103000098", + "nxtStn": "성수119안전센터" + }, + { + "stop_nm": "성원중성수동이마트앞", + "ycode": "37.53936", + "stop_no": "04198", + "xcode": "127.0533", + "stop_type": "일반차로", + "node_id": "103000099", + "nxtStn": "경일초등학교입구" + }, + { + "stop_nm": "서울숲지구대앞", + "ycode": "37.537868", + "stop_no": "04199", + "xcode": "127.052342", + "stop_type": "일반차로", + "node_id": "103000100", + "nxtStn": "뚝도시장구길" + }, + { + "stop_nm": "서울숲지구대앞", + "ycode": "37.5380509168", + "stop_no": "04200", + "xcode": "127.0522588868", + "stop_type": "일반차로", + "node_id": "103000101", + "nxtStn": "성수1가새마을금고" + }, + { + "stop_nm": "뚝도시장구길", + "ycode": "37.537192", + "stop_no": "04201", + "xcode": "127.05527", + "stop_type": "일반차로", + "node_id": "103000102", + "nxtStn": "성수동진주타운" + }, + { + "stop_nm": "뚝도시장구길", + "ycode": "37.5375520694", + "stop_no": "04202", + "xcode": "127.0549267531", + "stop_type": "일반차로", + "node_id": "103000103", + "nxtStn": "서울숲지구대앞" + }, + { + "stop_nm": "성수동진주타운", + "ycode": "37.536623", + "stop_no": "04203", + "xcode": "127.057488", + "stop_type": "일반차로", + "node_id": "103000104", + "nxtStn": "제민약국" + }, + { + "stop_nm": "성수동진주타운", + "ycode": "37.536759089", + "stop_no": "04204", + "xcode": "127.0574923078", + "stop_type": "일반차로", + "node_id": "103000105", + "nxtStn": "뚝도시장구길" + }, + { + "stop_nm": "영동대교", + "ycode": "37.536356", + "stop_no": "04205", + "xcode": "127.059982", + "stop_type": "일반차로", + "node_id": "103000106", + "nxtStn": "영동대교북단" + }, + { + "stop_nm": "영동대교", + "ycode": "37.536435", + "stop_no": "04206", + "xcode": "127.060066", + "stop_type": "일반차로", + "node_id": "103000107", + "nxtStn": "제민약국" + }, + { + "stop_nm": "화양사거리", + "ycode": "37.547187", + "stop_no": "04207", + "xcode": "127.066622", + "stop_type": "일반차로", + "node_id": "103000108", + "nxtStn": "성수SKV1센터1동" + }, + { + "stop_nm": "성수사거리.성수초등학교", + "ycode": "37.542825", + "stop_no": "04208", + "xcode": "127.064153", + "stop_type": "일반차로", + "node_id": "103000109", + "nxtStn": "서울효사랑병원" + }, + { + "stop_nm": "서울효사랑병원", + "ycode": "37.541263", + "stop_no": "04209", + "xcode": "127.063275", + "stop_type": "일반차로", + "node_id": "103000110", + "nxtStn": "경수중학교" + }, + { + "stop_nm": "성수2가3동주민센터", + "ycode": "37.549622", + "stop_no": "04210", + "xcode": "127.055392", + "stop_type": "일반차로", + "node_id": "103000111", + "nxtStn": "성동세무서앞" + }, + { + "stop_nm": "제인병원", + "ycode": "37.549348", + "stop_no": "04211", + "xcode": "127.056837", + "stop_type": "일반차로", + "node_id": "103000112", + "nxtStn": "성수2가3동주민센터" + }, + { + "stop_nm": "성동세무서앞", + "ycode": "37.547995", + "stop_no": "04212", + "xcode": "127.062185", + "stop_type": "일반차로", + "node_id": "103000113", + "nxtStn": "우리은행화양동지점" + }, + { + "stop_nm": "성동세무서", + "ycode": "37.548239128", + "stop_no": "04213", + "xcode": "127.064337342", + "stop_type": "일반차로", + "node_id": "103000114", + "nxtStn": "제인병원" + }, + { + "stop_nm": "송정동서울숲아이파크", + "ycode": "37.55182", + "stop_no": "04214", + "xcode": "127.069252", + "stop_type": "일반차로", + "node_id": "103000115", + "nxtStn": "화양사거리" + }, + { + "stop_nm": "송정동건영아파트", + "ycode": "37.555205", + "stop_no": "04215", + "xcode": "127.07115", + "stop_type": "일반차로", + "node_id": "103000116", + "nxtStn": "송정동서울숲아이파크" + }, + { + "stop_nm": "군자교남단", + "ycode": "37.557542", + "stop_no": "04216", + "xcode": "127.072438", + "stop_type": "일반차로", + "node_id": "103000117", + "nxtStn": "송정동건영아파트" + }, + { + "stop_nm": "신답역", + "ycode": "37.570207", + "stop_no": "04217", + "xcode": "127.047505", + "stop_type": "일반차로", + "node_id": "103000118", + "nxtStn": "용답동.로데오거리.답십리역" + }, + { + "stop_nm": "용답동.로데오거리.답십리역", + "ycode": "37.565703", + "stop_no": "04218", + "xcode": "127.053945", + "stop_type": "일반차로", + "node_id": "103000119", + "nxtStn": "서울교통공사.서울새활용플라자" + }, + { + "stop_nm": "서울교통공사.서울새활용플라자", + "ycode": "37.5620495039", + "stop_no": "04221", + "xcode": "127.0569134234", + "stop_type": "일반차로", + "node_id": "103000120", + "nxtStn": "하나은행장안동지점" + }, + { + "stop_nm": "뚝섬서울숲", + "ycode": "37.544618041", + "stop_no": "04222", + "xcode": "127.036601198", + "stop_type": "일반차로", + "node_id": "103000121", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "뚝섬서울숲", + "ycode": "37.545672", + "stop_no": "04223", + "xcode": "127.036397", + "stop_type": "일반차로", + "node_id": "103000122", + "nxtStn": "뚝섬서울숲" + }, + { + "stop_nm": "사근동하이츠아파트앞", + "ycode": "37.561201", + "stop_no": "04226", + "xcode": "127.048603", + "stop_type": "일반차로", + "node_id": "103000125", + "nxtStn": "사근동벽산아파트" + }, + { + "stop_nm": "사근동하이츠아파트앞", + "ycode": "37.561306176", + "stop_no": "04227", + "xcode": "127.0486881757", + "stop_type": "일반차로", + "node_id": "103000126", + "nxtStn": "성동제일새마을금고" + }, + { + "stop_nm": "사근동주민센터", + "ycode": "37.560815", + "stop_no": "04228", + "xcode": "127.04565", + "stop_type": "일반차로", + "node_id": "103000127", + "nxtStn": "성동제일새마을금고" + }, + { + "stop_nm": "사근동주민센터", + "ycode": "37.560933", + "stop_no": "04229", + "xcode": "127.045712", + "stop_type": "일반차로", + "node_id": "103000128", + "nxtStn": "사근고개" + }, + { + "stop_nm": "사근고개", + "ycode": "37.561162", + "stop_no": "04230", + "xcode": "127.0446", + "stop_type": "일반차로", + "node_id": "103000129", + "nxtStn": "사근동주민센터" + }, + { + "stop_nm": "사근고개", + "ycode": "37.5612555615", + "stop_no": "04231", + "xcode": "127.0445101518", + "stop_type": "일반차로", + "node_id": "103000130", + "nxtStn": "한양지구대" + }, + { + "stop_nm": "한양지구대", + "ycode": "37.560218", + "stop_no": "04232", + "xcode": "127.042025", + "stop_type": "일반차로", + "node_id": "103000131", + "nxtStn": "사근고개" + }, + { + "stop_nm": "한양지구대", + "ycode": "37.5602445802", + "stop_no": "04233", + "xcode": "127.0419242341", + "stop_type": "일반차로", + "node_id": "103000132", + "nxtStn": "한양대앞" + }, + { + "stop_nm": "사근동벽산아파트", + "ycode": "37.5601892041", + "stop_no": "04234", + "xcode": "127.0499269056", + "stop_type": "일반차로", + "node_id": "103000133", + "nxtStn": "한양여대앞" + }, + { + "stop_nm": "뚝섬역8번출구", + "ycode": "37.547696", + "stop_no": "04236", + "xcode": "127.045506", + "stop_type": "일반차로", + "node_id": "103000134", + "nxtStn": "뚝섬역5번출구" + }, + { + "stop_nm": "뚝섬역2번출구", + "ycode": "37.547575", + "stop_no": "04237", + "xcode": "127.046846", + "stop_type": "일반차로", + "node_id": "103000135", + "nxtStn": "성동교남단" + }, + { + "stop_nm": "뚝섬역5번출구", + "ycode": "37.546482", + "stop_no": "04238", + "xcode": "127.049272", + "stop_type": "일반차로", + "node_id": "103000136", + "nxtStn": "성수역4번출구" + }, + { + "stop_nm": "뚝섬역4번출구", + "ycode": "37.5468", + "stop_no": "04239", + "xcode": "127.04927", + "stop_type": "일반차로", + "node_id": "103000137", + "nxtStn": "뚝섬역2번출구" + }, + { + "stop_nm": "성수역1번출구", + "ycode": "37.54542", + "stop_no": "04240", + "xcode": "127.05383", + "stop_type": "일반차로", + "node_id": "103000138", + "nxtStn": "뚝섬역4번출구" + }, + { + "stop_nm": "SK테크노빌딩앞", + "ycode": "37.545888", + "stop_no": "04241", + "xcode": "127.050228", + "stop_type": "일반차로", + "node_id": "103000139", + "nxtStn": "성수역1번출구" + }, + { + "stop_nm": "SK테크노빌딩앞", + "ycode": "37.545769848", + "stop_no": "04242", + "xcode": "127.0500259308", + "stop_type": "일반차로", + "node_id": "103000140", + "nxtStn": "경동초등학교입구" + }, + { + "stop_nm": "경동초등학교입구", + "ycode": "37.54377", + "stop_no": "04243", + "xcode": "127.04948", + "stop_type": "일반차로", + "node_id": "103000141", + "nxtStn": "SK테크노빌딩앞" + }, + { + "stop_nm": "경동초등학교입구", + "ycode": "37.5433912967", + "stop_no": "04244", + "xcode": "127.049212934", + "stop_type": "일반차로", + "node_id": "103000142", + "nxtStn": "경일초등학교앞" + }, + { + "stop_nm": "경일초등학교앞", + "ycode": "37.540772", + "stop_no": "04245", + "xcode": "127.048207", + "stop_type": "일반차로", + "node_id": "103000143", + "nxtStn": "경동초등학교입구" + }, + { + "stop_nm": "경일초등학교앞", + "ycode": "37.540917", + "stop_no": "04246", + "xcode": "127.048175", + "stop_type": "일반차로", + "node_id": "103000144", + "nxtStn": "성수공고앞" + }, + { + "stop_nm": "한양여대앞", + "ycode": "37.55951", + "stop_no": "04247", + "xcode": "127.0503", + "stop_type": "일반차로", + "node_id": "103000145", + "nxtStn": "한양대동문앞" + }, + { + "stop_nm": "도선고등학교.꽃재교회", + "ycode": "37.567093", + "stop_no": "04252", + "xcode": "127.027782", + "stop_type": "일반차로", + "node_id": "103000150", + "nxtStn": "상왕십리역.센트라스아파트" + }, + { + "stop_nm": "성수역4번출구", + "ycode": "37.544788", + "stop_no": "04253", + "xcode": "127.054582", + "stop_type": "일반차로", + "node_id": "103900215", + "nxtStn": "성수사거리" + }, + { + "stop_nm": "리버하우스", + "ycode": "37.5509002648", + "stop_no": "04254", + "xcode": "127.0510060889", + "stop_type": "일반차로", + "node_id": "103000152", + "nxtStn": "성수2가3동주민센터" + }, + { + "stop_nm": "리버하우스", + "ycode": "37.5512302013", + "stop_no": "04255", + "xcode": "127.0506905447", + "stop_type": "일반차로", + "node_id": "103000153", + "nxtStn": "상원" + }, + { + "stop_nm": "성수사거리", + "ycode": "37.542562", + "stop_no": "04256", + "xcode": "127.062352", + "stop_type": "일반차로", + "node_id": "103900213", + "nxtStn": "건대입구역6번출구" + }, + { + "stop_nm": "성수사거리", + "ycode": "37.542795", + "stop_no": "04257", + "xcode": "127.062362", + "stop_type": "일반차로", + "node_id": "103900214", + "nxtStn": "성수역1번출구" + }, + { + "stop_nm": "성동제일새마을금고", + "ycode": "37.56081", + "stop_no": "04258", + "xcode": "127.0471", + "stop_type": "일반차로", + "node_id": "103000156", + "nxtStn": "사근동하이츠아파트앞" + }, + { + "stop_nm": "성동제일새마을금고", + "ycode": "37.560884127", + "stop_no": "04259", + "xcode": "127.0473012813", + "stop_type": "일반차로", + "node_id": "103000157", + "nxtStn": "사근동주민센터" + }, + { + "stop_nm": "청계9가.텐즈힐2단지 정문앞", + "ycode": "37.57075", + "stop_no": "04261", + "xcode": "127.025565", + "stop_type": "일반차로", + "node_id": "103000159", + "nxtStn": "청계벽산아파트.텐즈힐아파트" + }, + { + "stop_nm": "뚝섬서울숲", + "ycode": "37.543457", + "stop_no": "04264", + "xcode": "127.037565", + "stop_type": "일반차로", + "node_id": "103000162", + "nxtStn": "언더스탠드에비뉴" + }, + { + "stop_nm": "서울숲1번출입구", + "ycode": "37.542222", + "stop_no": "04265", + "xcode": "127.042695", + "stop_type": "일반차로", + "node_id": "103000163", + "nxtStn": "뚝섬서울숲" + }, + { + "stop_nm": "서울숲1번출입구", + "ycode": "37.5419781098", + "stop_no": "04266", + "xcode": "127.042974358", + "stop_type": "일반차로", + "node_id": "103000164", + "nxtStn": "서울숲역2번출구" + }, + { + "stop_nm": "용답휴식공원", + "ycode": "37.569314", + "stop_no": "04267", + "xcode": "127.048053", + "stop_type": "일반차로", + "node_id": "103000165", + "nxtStn": "답십리1동주민센터.래미안위브" + }, + { + "stop_nm": "용답휴식공원", + "ycode": "37.5695541839", + "stop_no": "04268", + "xcode": "127.0479373245", + "stop_type": "일반차로", + "node_id": "103000166", + "nxtStn": "마장동주민센터" + }, + { + "stop_nm": "성수2가3동주민센터", + "ycode": "37.5502374154", + "stop_no": "04269", + "xcode": "127.0547820062", + "stop_type": "일반차로", + "node_id": "103000167", + "nxtStn": "리버하우스" + }, + { + "stop_nm": "극동그린아파트앞", + "ycode": "37.542003", + "stop_no": "04270", + "xcode": "127.011393", + "stop_type": "일반차로", + "node_id": "103000168", + "nxtStn": "극동그린아파트" + }, + { + "stop_nm": "마장역", + "ycode": "37.566346", + "stop_no": "04271", + "xcode": "127.043037", + "stop_type": "일반차로", + "node_id": "103000169", + "nxtStn": "성동노인복지관" + }, + { + "stop_nm": "행당신동아.행당푸르지오아파트", + "ycode": "37.5561408382", + "stop_no": "04272", + "xcode": "127.0340192689", + "stop_type": "일반차로", + "node_id": "103000170", + "nxtStn": "뚝섬서울숲" + }, + { + "stop_nm": "숭신초등학교", + "ycode": "37.56717", + "stop_no": "04273", + "xcode": "127.028196", + "stop_type": "일반차로", + "node_id": "103000171", + "nxtStn": "왕십리도선동주민센터" + }, + { + "stop_nm": "극동아파트", + "ycode": "37.558095", + "stop_no": "04275", + "xcode": "127.023935", + "stop_type": "일반차로", + "node_id": "103000172", + "nxtStn": "논골.금호벽산아파트.성동공유센터" + }, + { + "stop_nm": "풍림아파트", + "ycode": "37.559145", + "stop_no": "04276", + "xcode": "127.023905", + "stop_type": "일반차로", + "node_id": "103000173", + "nxtStn": "왕십리자이.신당현대아파트" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.555602288", + "stop_no": "04277", + "xcode": "127.0256885739", + "stop_type": "일반차로", + "node_id": "103000174", + "nxtStn": "행당역" + }, + { + "stop_nm": "대림아파트", + "ycode": "37.5565738309", + "stop_no": "04278", + "xcode": "127.0249260274", + "stop_type": "일반차로", + "node_id": "103000175", + "nxtStn": "풍림아파트" + }, + { + "stop_nm": "행당역", + "ycode": "37.557000896", + "stop_no": "04279", + "xcode": "127.0290982639", + "stop_type": "일반차로", + "node_id": "103000176", + "nxtStn": "행당2동주민센터" + }, + { + "stop_nm": "행당역", + "ycode": "37.557079373", + "stop_no": "04280", + "xcode": "127.0287643907", + "stop_type": "일반차로", + "node_id": "103000177", + "nxtStn": "대림아파트후문" + }, + { + "stop_nm": "무학여고", + "ycode": "37.5583911544", + "stop_no": "04281", + "xcode": "127.0330162995", + "stop_type": "일반차로", + "node_id": "103000178", + "nxtStn": "행당역" + }, + { + "stop_nm": "극동그린아파트", + "ycode": "37.5420646255", + "stop_no": "04282", + "xcode": "127.011904958", + "stop_type": "일반차로", + "node_id": "103000179", + "nxtStn": "옥수삼성아파트.래미안옥수리버젠" + }, + { + "stop_nm": "성수동차고지", + "ycode": "37.535793", + "stop_no": "04286", + "xcode": "127.055682", + "stop_type": "일반차로", + "node_id": "103000183", + "nxtStn": "성수동진주타운" + }, + { + "stop_nm": "제민약국", + "ycode": "37.536593", + "stop_no": "04288", + "xcode": "127.058517", + "stop_type": "일반차로", + "node_id": "103000185", + "nxtStn": "성수동진주타운" + }, + { + "stop_nm": "왕십리자이.신당현대아파트", + "ycode": "37.560847", + "stop_no": "04289", + "xcode": "127.02363", + "stop_type": "일반차로", + "node_id": "103000186", + "nxtStn": "극동아파트" + }, + { + "stop_nm": "왕십리자이.신당현대아파트", + "ycode": "37.561152", + "stop_no": "04290", + "xcode": "127.024101", + "stop_type": "일반차로", + "node_id": "103000187", + "nxtStn": "금호베스트빌.래미안하이베르" + }, + { + "stop_nm": "제민약국", + "ycode": "37.536507", + "stop_no": "04291", + "xcode": "127.058488", + "stop_type": "일반차로", + "node_id": "103000188", + "nxtStn": "영동대교" + }, + { + "stop_nm": "우리은행화양동지점", + "ycode": "37.548118", + "stop_no": "04293", + "xcode": "127.066129", + "stop_type": "일반차로", + "node_id": "103000189", + "nxtStn": "서울화양동우체국" + }, + { + "stop_nm": "황학교.텐즈힐몰", + "ycode": "37.5700517505", + "stop_no": "04295", + "xcode": "127.0236037286", + "stop_type": "일반차로", + "node_id": "103000191", + "nxtStn": "신설동로터리.서울풍물시장" + }, + { + "stop_nm": "마장동주민센터", + "ycode": "37.567063", + "stop_no": "04298", + "xcode": "127.04464", + "stop_type": "일반차로", + "node_id": "105000455", + "nxtStn": "용답휴식공원" + }, + { + "stop_nm": "왕십리광장.왕십리역7번출구", + "ycode": "37.561133", + "stop_no": "04301", + "xcode": "127.036895", + "stop_type": "일반차로", + "node_id": "103000293", + "nxtStn": "왕십리민자역사" + }, + { + "stop_nm": "왕십리광장.왕십리역4번출구", + "ycode": "37.561364441", + "stop_no": "04302", + "xcode": "127.037133352", + "stop_type": "일반차로", + "node_id": "103000292", + "nxtStn": "무학여고" + }, + { + "stop_nm": "한양대동문앞", + "ycode": "37.5556432919", + "stop_no": "04303", + "xcode": "127.0496759962", + "stop_type": "일반차로", + "node_id": "103000297", + "nxtStn": "행당중학교" + }, + { + "stop_nm": "왕십리도선동주민센터", + "ycode": "37.567817", + "stop_no": "04304", + "xcode": "127.024413", + "stop_type": "일반차로", + "node_id": "103000295", + "nxtStn": "황학동주민센터" + }, + { + "stop_nm": "한양여대앞", + "ycode": "37.559227", + "stop_no": "04305", + "xcode": "127.050625", + "stop_type": "일반차로", + "node_id": "103000296", + "nxtStn": "사근동하이츠아파트앞" + }, + { + "stop_nm": "행당중학교", + "ycode": "37.553781", + "stop_no": "04306", + "xcode": "127.043024", + "stop_type": "일반차로", + "node_id": "103000505", + "nxtStn": "살곶이체육공원앞" + }, + { + "stop_nm": "살곶이체육공원앞", + "ycode": "37.5563179062", + "stop_no": "04307", + "xcode": "127.0509355171", + "stop_type": "일반차로", + "node_id": "103000516", + "nxtStn": "한양여대앞" + }, + { + "stop_nm": "송정동현대아이파크아파트", + "ycode": "37.5521871167", + "stop_no": "04500", + "xcode": "127.0686200823", + "stop_type": "마을버스", + "node_id": "103900152", + "nxtStn": "송정동자치회관" + }, + { + "stop_nm": "극동아파트5동", + "ycode": "37.5431595377", + "stop_no": "04501", + "xcode": "127.0110790155", + "stop_type": "마을버스", + "node_id": "103900149", + "nxtStn": "극동아파트4동" + }, + { + "stop_nm": "대우아파트관리실", + "ycode": "37.546215", + "stop_no": "04502", + "xcode": "127.019985", + "stop_type": "마을버스", + "node_id": "103900142", + "nxtStn": "대우아파트후문" + }, + { + "stop_nm": "신금호역", + "ycode": "37.5545931778", + "stop_no": "04504", + "xcode": "127.0204908209", + "stop_type": "마을버스", + "node_id": "103900022", + "nxtStn": "금호1가동주민센터" + }, + { + "stop_nm": "옥수역", + "ycode": "37.5414827461", + "stop_no": "04505", + "xcode": "127.016816639", + "stop_type": "마을버스", + "node_id": "103900150", + "nxtStn": "옥수삼성아파트" + }, + { + "stop_nm": "송정동자치회관", + "ycode": "37.550884", + "stop_no": "04506", + "xcode": "127.068764", + "stop_type": "마을버스", + "node_id": "104900130", + "nxtStn": "송정어린이집" + }, + { + "stop_nm": "대우아파트후문", + "ycode": "37.5469390691", + "stop_no": "04507", + "xcode": "127.0216589278", + "stop_type": "마을버스", + "node_id": "103900143", + "nxtStn": "금옥초등학교앞" + }, + { + "stop_nm": "금호1가동주민센터", + "ycode": "37.5551290207", + "stop_no": "04509", + "xcode": "127.02219553", + "stop_type": "마을버스", + "node_id": "103900025", + "nxtStn": "금북초등학교.e편한세상금호105동" + }, + { + "stop_nm": "왕십리민자역사", + "ycode": "37.5618426928", + "stop_no": "04510", + "xcode": "127.0378535089", + "stop_type": "마을버스", + "node_id": "103900116", + "nxtStn": "민자역사후문" + }, + { + "stop_nm": "무쇠막", + "ycode": "37.545277754", + "stop_no": "04511", + "xcode": "127.0246947943", + "stop_type": "마을버스", + "node_id": "103900024", + "nxtStn": "힐스테이트서울숲리버" + }, + { + "stop_nm": "송정어린이집", + "ycode": "37.5490025833", + "stop_no": "04512", + "xcode": "127.0677474298", + "stop_type": "마을버스", + "node_id": "103900295", + "nxtStn": "화양사거리" + }, + { + "stop_nm": "대경생활과학고등학교", + "ycode": "37.5559714265", + "stop_no": "04514", + "xcode": "127.017537043", + "stop_type": "마을버스", + "node_id": "103900026", + "nxtStn": "금호어린이집" + }, + { + "stop_nm": "금북초등학교.e편한세상금호105동", + "ycode": "37.5555378179", + "stop_no": "04515", + "xcode": "127.0237361041", + "stop_type": "마을버스", + "node_id": "103900120", + "nxtStn": "논골.금호벽산아파트.성동공유센터" + }, + { + "stop_nm": "무학여고", + "ycode": "37.5574916088", + "stop_no": "04516", + "xcode": "127.0339123541", + "stop_type": "마을버스", + "node_id": "103900065", + "nxtStn": "행당서울숲푸르지오상가앞" + }, + { + "stop_nm": "힐스테이트서울숲리버", + "ycode": "37.5467445912", + "stop_no": "04517", + "xcode": "127.0253856278", + "stop_type": "마을버스", + "node_id": "103900145", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "성수SKV1센터1동", + "ycode": "37.545818", + "stop_no": "04518", + "xcode": "127.065585", + "stop_type": "마을버스", + "node_id": "104900131", + "nxtStn": "성수이비즈센터" + }, + { + "stop_nm": "극동아파트상가", + "ycode": "37.5429197459", + "stop_no": "04519", + "xcode": "127.0121008716", + "stop_type": "마을버스", + "node_id": "103900067", + "nxtStn": "옥정중학교입구" + }, + { + "stop_nm": "금호4가동주민센터.대도빌딩", + "ycode": "37.5480526537", + "stop_no": "04520", + "xcode": "127.0225635106", + "stop_type": "마을버스", + "node_id": "103900027", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "화단삼거리", + "ycode": "37.5483198616", + "stop_no": "04521", + "xcode": "127.0198711709", + "stop_type": "마을버스", + "node_id": "103900028", + "nxtStn": "금호역" + }, + { + "stop_nm": "금호어린이집", + "ycode": "37.556734", + "stop_no": "04522", + "xcode": "127.01862", + "stop_type": "마을버스", + "node_id": "103900068", + "nxtStn": "금호산입구" + }, + { + "stop_nm": "논골.금호벽산아파트.성동공유센터", + "ycode": "37.5555491969", + "stop_no": "04523", + "xcode": "127.0253489995", + "stop_type": "마을버스", + "node_id": "103900029", + "nxtStn": "천은교회.성동청소년상담복지센터" + }, + { + "stop_nm": "행당서울숲푸르지오상가앞", + "ycode": "37.555614", + "stop_no": "04524", + "xcode": "127.033891", + "stop_type": "마을버스", + "node_id": "103900117", + "nxtStn": "신동아아파트후문" + }, + { + "stop_nm": "법학학술정보관", + "ycode": "37.55704", + "stop_no": "04525", + "xcode": "127.048574", + "stop_type": "마을버스", + "node_id": "103900300", + "nxtStn": "올림픽체육관맞은편" + }, + { + "stop_nm": "성수이비즈센터", + "ycode": "37.546576", + "stop_no": "04526", + "xcode": "127.063058", + "stop_type": "마을버스", + "node_id": "103900296", + "nxtStn": "경수중학교입구" + }, + { + "stop_nm": "한남하이츠아파트", + "ycode": "37.5400543105", + "stop_no": "04527", + "xcode": "127.0115923113", + "stop_type": "마을버스", + "node_id": "103900069", + "nxtStn": "옥정중학교입구" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.548008", + "stop_no": "04528", + "xcode": "127.025272", + "stop_type": "마을버스", + "node_id": "103900070", + "nxtStn": "제일감리교회" + }, + { + "stop_nm": "금호산입구", + "ycode": "37.556722", + "stop_no": "04529", + "xcode": "127.019575", + "stop_type": "마을버스", + "node_id": "103900031", + "nxtStn": "신금호역" + }, + { + "stop_nm": "한진아파트후문", + "ycode": "37.5560183016", + "stop_no": "04530", + "xcode": "127.0269971479", + "stop_type": "마을버스", + "node_id": "103900032", + "nxtStn": "행당역" + }, + { + "stop_nm": "신동아아파트후문", + "ycode": "37.554894681", + "stop_no": "04531", + "xcode": "127.032693675", + "stop_type": "마을버스", + "node_id": "103900071", + "nxtStn": "행당서울숲푸르지오109동앞" + }, + { + "stop_nm": "올림픽체육관맞은편", + "ycode": "37.556934", + "stop_no": "04532", + "xcode": "127.049294", + "stop_type": "마을버스", + "node_id": "103900301", + "nxtStn": "제3법학관" + }, + { + "stop_nm": "경수중학교입구", + "ycode": "37.543514", + "stop_no": "04533", + "xcode": "127.060089", + "stop_type": "마을버스", + "node_id": "103900297", + "nxtStn": "성수역2번출구" + }, + { + "stop_nm": "제일감리교회", + "ycode": "37.547866119", + "stop_no": "04535", + "xcode": "127.0269036684", + "stop_type": "마을버스", + "node_id": "103900146", + "nxtStn": "응봉동현대아파트" + }, + { + "stop_nm": "신금호역", + "ycode": "37.554381", + "stop_no": "04536", + "xcode": "127.019638", + "stop_type": "마을버스", + "node_id": "103900133", + "nxtStn": "중앙병원" + }, + { + "stop_nm": "제3법학관", + "ycode": "37.556233", + "stop_no": "04537", + "xcode": "127.048637", + "stop_type": "마을버스", + "node_id": "103900302", + "nxtStn": "올림픽체육관앞" + }, + { + "stop_nm": "행당서울숲푸르지오109동앞", + "ycode": "37.554456", + "stop_no": "04538", + "xcode": "127.031711", + "stop_type": "마을버스", + "node_id": "103900034", + "nxtStn": "응봉경로당앞" + }, + { + "stop_nm": "벽산아파트정문", + "ycode": "37.552658", + "stop_no": "04539", + "xcode": "127.02528", + "stop_type": "마을버스", + "node_id": "103900035", + "nxtStn": "금호119안전센터" + }, + { + "stop_nm": "성수역2번출구", + "ycode": "37.544268", + "stop_no": "04540", + "xcode": "127.057638", + "stop_type": "마을버스", + "node_id": "103900298", + "nxtStn": "성수역1번출구" + }, + { + "stop_nm": "옥수종합사회복지관", + "ycode": "37.5408804856", + "stop_no": "04541", + "xcode": "127.0128519457", + "stop_type": "마을버스", + "node_id": "103900037", + "nxtStn": "옥수삼성아파트" + }, + { + "stop_nm": "응봉동현대아파트", + "ycode": "37.5498025299", + "stop_no": "04542", + "xcode": "127.0307682168", + "stop_type": "마을버스", + "node_id": "103900126", + "nxtStn": "현대공업사앞" + }, + { + "stop_nm": "행당2동주민센터", + "ycode": "37.5577375973", + "stop_no": "04544", + "xcode": "127.0306537631", + "stop_type": "마을버스", + "node_id": "103900038", + "nxtStn": "무학중학교.무학여고" + }, + { + "stop_nm": "응봉경로당앞", + "ycode": "37.5526279318", + "stop_no": "04545", + "xcode": "127.031642249", + "stop_type": "마을버스", + "node_id": "103900072", + "nxtStn": "만물상회앞" + }, + { + "stop_nm": "금호119안전센터", + "ycode": "37.554187", + "stop_no": "04546", + "xcode": "127.024731", + "stop_type": "마을버스", + "node_id": "103900040", + "nxtStn": "논골사거리" + }, + { + "stop_nm": "경동초등학교입구", + "ycode": "37.545895", + "stop_no": "04547", + "xcode": "127.051155", + "stop_type": "마을버스", + "node_id": "103900299", + "nxtStn": "지하철2호선성수역" + }, + { + "stop_nm": "옥수삼성아파트", + "ycode": "37.540635263", + "stop_no": "04548", + "xcode": "127.0139484516", + "stop_type": "마을버스", + "node_id": "103900041", + "nxtStn": "옥정초등학교" + }, + { + "stop_nm": "현대공업사앞", + "ycode": "37.549950728", + "stop_no": "04549", + "xcode": "127.0325677907", + "stop_type": "마을버스", + "node_id": "103900074", + "nxtStn": "응봉초등학교.대림아파트" + }, + { + "stop_nm": "두산상가후문.106동", + "ycode": "37.5491853986", + "stop_no": "04550", + "xcode": "127.0167386956", + "stop_type": "마을버스", + "node_id": "103900134", + "nxtStn": "금호역.두산상가경비실" + }, + { + "stop_nm": "중앙병원", + "ycode": "37.5519612784", + "stop_no": "04551", + "xcode": "127.0193175559", + "stop_type": "마을버스", + "node_id": "103900075", + "nxtStn": "한신아파트" + }, + { + "stop_nm": "무학중학교.무학여고", + "ycode": "37.5582100032", + "stop_no": "04552", + "xcode": "127.0331282771", + "stop_type": "마을버스", + "node_id": "103900019", + "nxtStn": "왕십리광장.왕십리역7번출구" + }, + { + "stop_nm": "만물상회앞", + "ycode": "37.552829", + "stop_no": "04553", + "xcode": "127.031224", + "stop_type": "마을버스", + "node_id": "103900039", + "nxtStn": "상봉노인정앞" + }, + { + "stop_nm": "논골사거리", + "ycode": "37.5553150263", + "stop_no": "04554", + "xcode": "127.0248124231", + "stop_type": "마을버스", + "node_id": "103900076", + "nxtStn": "논골신협.대림아파트후문" + }, + { + "stop_nm": "응봉초등학교.대림아파트", + "ycode": "37.5510678445", + "stop_no": "04556", + "xcode": "127.0334306978", + "stop_type": "마을버스", + "node_id": "103900078", + "nxtStn": "응봉역.광희중" + }, + { + "stop_nm": "한신아파트", + "ycode": "37.5507538149", + "stop_no": "04557", + "xcode": "127.0192957404", + "stop_type": "마을버스", + "node_id": "103900043", + "nxtStn": "금호공원" + }, + { + "stop_nm": "올림픽체육관앞", + "ycode": "37.557015", + "stop_no": "04558", + "xcode": "127.049632", + "stop_type": "마을버스", + "node_id": "103900303", + "nxtStn": "한양대학교경영대학" + }, + { + "stop_nm": "상봉노인정앞", + "ycode": "37.5528739435", + "stop_no": "04559", + "xcode": "127.030283193", + "stop_type": "마을버스", + "node_id": "103900042", + "nxtStn": "대현산체육관입구" + }, + { + "stop_nm": "논골신협.대림아파트후문", + "ycode": "37.5577029753", + "stop_no": "04560", + "xcode": "127.0245743869", + "stop_type": "일반차로", + "node_id": "105000454", + "nxtStn": "풍림아파트" + }, + { + "stop_nm": "옥수삼성아파트", + "ycode": "37.5407532621", + "stop_no": "04562", + "xcode": "127.0143207799", + "stop_type": "마을버스", + "node_id": "103900079", + "nxtStn": "옥수종합사회복지관" + }, + { + "stop_nm": "응봉역.광희중", + "ycode": "37.5520425408", + "stop_no": "04563", + "xcode": "127.0344339086", + "stop_type": "마을버스", + "node_id": "103900045", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "우리은행.백범학원터", + "ycode": "37.548008", + "stop_no": "04564", + "xcode": "127.021174", + "stop_type": "마을버스", + "node_id": "103900080", + "nxtStn": "대우아파트입구" + }, + { + "stop_nm": "금호공원", + "ycode": "37.5496769604", + "stop_no": "04566", + "xcode": "127.0195750088", + "stop_type": "마을버스", + "node_id": "103900082", + "nxtStn": "원형화단" + }, + { + "stop_nm": "대현산체육관입구", + "ycode": "37.55308", + "stop_no": "04567", + "xcode": "127.029853", + "stop_type": "마을버스", + "node_id": "103900122", + "nxtStn": "금봉어린이집.또또와마트" + }, + { + "stop_nm": "한양대학교경영대학", + "ycode": "37.557084", + "stop_no": "04568", + "xcode": "127.04853", + "stop_type": "마을버스", + "node_id": "103900304", + "nxtStn": "한양종합기술연구원.생활과학대학" + }, + { + "stop_nm": "지하철2호선성수역", + "ycode": "37.5447702802", + "stop_no": "04569", + "xcode": "127.0546617999", + "stop_type": "마을버스", + "node_id": "103900083", + "nxtStn": "경수중학교입구" + }, + { + "stop_nm": "옥수종합사회복지관", + "ycode": "37.5408867518", + "stop_no": "04570", + "xcode": "127.0132276487", + "stop_type": "마을버스", + "node_id": "103900084", + "nxtStn": "옥정중학교" + }, + { + "stop_nm": "대우아파트입구", + "ycode": "37.5459834381", + "stop_no": "04572", + "xcode": "127.0191632324", + "stop_type": "마을버스", + "node_id": "103900144", + "nxtStn": "종점" + }, + { + "stop_nm": "원형화단", + "ycode": "37.548592957", + "stop_no": "04573", + "xcode": "127.0194898441", + "stop_type": "마을버스", + "node_id": "103900020", + "nxtStn": "금호역" + }, + { + "stop_nm": "성동구청", + "ycode": "37.564136", + "stop_no": "04574", + "xcode": "127.036403", + "stop_type": "마을버스", + "node_id": "103900085", + "nxtStn": "한전입구" + }, + { + "stop_nm": "금봉어린이집.또또와마트", + "ycode": "37.5529061904", + "stop_no": "04575", + "xcode": "127.0288090654", + "stop_type": "마을버스", + "node_id": "103900047", + "nxtStn": "천은교회.성동청소년상담복지센터" + }, + { + "stop_nm": "한양대병원후문", + "ycode": "37.560011", + "stop_no": "04576", + "xcode": "127.041957", + "stop_type": "마을버스", + "node_id": "103900305", + "nxtStn": "행당동서울숲더샵" + }, + { + "stop_nm": "경수중학교입구", + "ycode": "37.543363", + "stop_no": "04577", + "xcode": "127.059621", + "stop_type": "마을버스", + "node_id": "103900048", + "nxtStn": "영동대교입구.성수사거리" + }, + { + "stop_nm": "옥정중학교", + "ycode": "37.5413329917", + "stop_no": "04578", + "xcode": "127.0113322323", + "stop_type": "마을버스", + "node_id": "103900049", + "nxtStn": "극동아파트상가" + }, + { + "stop_nm": "응봉사거리", + "ycode": "37.5548674402", + "stop_no": "04579", + "xcode": "127.0345427336", + "stop_type": "마을버스", + "node_id": "103900086", + "nxtStn": "무학여고" + }, + { + "stop_nm": "천은교회.성동청소년상담복지센터", + "ycode": "37.554691", + "stop_no": "04582", + "xcode": "127.026797", + "stop_type": "마을버스", + "node_id": "103900051", + "nxtStn": "논골입구.성동공유센터" + }, + { + "stop_nm": "극동아파트상가", + "ycode": "37.5429116083", + "stop_no": "04583", + "xcode": "127.0123679427", + "stop_type": "마을버스", + "node_id": "103900151", + "nxtStn": "극동아파트7동" + }, + { + "stop_nm": "무학여고", + "ycode": "37.5577185854", + "stop_no": "04584", + "xcode": "127.0342554186", + "stop_type": "마을버스", + "node_id": "103900088", + "nxtStn": "왕십리광장.왕십리역7번출구" + }, + { + "stop_nm": "한전입구", + "ycode": "37.5662652006", + "stop_no": "04585", + "xcode": "127.0351185322", + "stop_type": "마을버스", + "node_id": "103900089", + "nxtStn": "성동보건소" + }, + { + "stop_nm": "논골입구.성동공유센터", + "ycode": "37.55554", + "stop_no": "04586", + "xcode": "127.02557", + "stop_type": "마을버스", + "node_id": "103900050", + "nxtStn": "행당역.대림아파트정문" + }, + { + "stop_nm": "극동아파트7동", + "ycode": "37.5436189277", + "stop_no": "04587", + "xcode": "127.0127539602", + "stop_type": "마을버스", + "node_id": "103900090", + "nxtStn": "극동아파트4동" + }, + { + "stop_nm": "성동보건소", + "ycode": "37.566494637", + "stop_no": "04588", + "xcode": "127.0331862828", + "stop_type": "마을버스", + "node_id": "103900112", + "nxtStn": "선영약국" + }, + { + "stop_nm": "행당역.대림아파트정문", + "ycode": "37.5570496595", + "stop_no": "04589", + "xcode": "127.0286715654", + "stop_type": "마을버스", + "node_id": "103900123", + "nxtStn": "벽산아파트501동앞" + }, + { + "stop_nm": "청계벽산아파트", + "ycode": "37.568262437", + "stop_no": "04590", + "xcode": "127.0303705362", + "stop_type": "마을버스", + "node_id": "103900052", + "nxtStn": "성동사회복지관.청계천박물관" + }, + { + "stop_nm": "논골.e편한세상금호114동", + "ycode": "37.55519162", + "stop_no": "04591", + "xcode": "127.0246041221", + "stop_type": "마을버스", + "node_id": "103900124", + "nxtStn": "금호119안전센터" + }, + { + "stop_nm": "코스모타워", + "ycode": "37.562788", + "stop_no": "04593", + "xcode": "127.033286", + "stop_type": "마을버스", + "node_id": "103900113", + "nxtStn": "상왕십리역" + }, + { + "stop_nm": "화단앞", + "ycode": "37.5486244682", + "stop_no": "04594", + "xcode": "127.019653956", + "stop_type": "마을버스", + "node_id": "103900091", + "nxtStn": "금호공원" + }, + { + "stop_nm": "성동사회복지관.청계천박물관", + "ycode": "37.5703034715", + "stop_no": "04595", + "xcode": "127.0334777845", + "stop_type": "마을버스", + "node_id": "103900092", + "nxtStn": "성동구도시관리공단.서울시시설관리공단" + }, + { + "stop_nm": "금호119안전센터", + "ycode": "37.554264", + "stop_no": "04596", + "xcode": "127.024578", + "stop_type": "마을버스", + "node_id": "103900125", + "nxtStn": "성동중앙교회.벽산아파트정문" + }, + { + "stop_nm": "왕약국", + "ycode": "37.5483411874", + "stop_no": "04597", + "xcode": "127.0655472648", + "stop_type": "마을버스", + "node_id": "103900093", + "nxtStn": "중앙슈퍼" + }, + { + "stop_nm": "상왕십리역", + "ycode": "37.5647437014", + "stop_no": "04598", + "xcode": "127.0302513803", + "stop_type": "마을버스", + "node_id": "103900114", + "nxtStn": "청계벽산아파트" + }, + { + "stop_nm": "금호공원", + "ycode": "37.5496507955", + "stop_no": "04599", + "xcode": "127.0197741925", + "stop_type": "마을버스", + "node_id": "103900094", + "nxtStn": "한신아파트" + }, + { + "stop_nm": "성동구도시관리공단.서울시시설관리공단", + "ycode": "37.5718289131", + "stop_no": "04600", + "xcode": "127.0368611826", + "stop_type": "마을버스", + "node_id": "103900095", + "nxtStn": "마장축산물시장" + }, + { + "stop_nm": "e편한세상금호117동", + "ycode": "37.552657", + "stop_no": "04602", + "xcode": "127.024679", + "stop_type": "마을버스", + "node_id": "103900131", + "nxtStn": "금호고등학교" + }, + { + "stop_nm": "왕십리자이.신당현대아파트", + "ycode": "37.5608470716", + "stop_no": "04603", + "xcode": "127.0236902472", + "stop_type": "마을버스", + "node_id": "103900053", + "nxtStn": "극동.풍림아파트" + }, + { + "stop_nm": "중앙슈퍼", + "ycode": "37.5495156648", + "stop_no": "04615", + "xcode": "127.0665317949", + "stop_type": "마을버스", + "node_id": "103900096", + "nxtStn": "GS25" + }, + { + "stop_nm": "한신아파트", + "ycode": "37.550758302", + "stop_no": "04648", + "xcode": "127.0194077879", + "stop_type": "마을버스", + "node_id": "103900054", + "nxtStn": "중앙병원앞" + }, + { + "stop_nm": "금호고등학교", + "ycode": "37.553096", + "stop_no": "04651", + "xcode": "127.023552", + "stop_type": "마을버스", + "node_id": "103900056", + "nxtStn": "e편한세상금호109동" + }, + { + "stop_nm": "극동.풍림아파트", + "ycode": "37.5590448945", + "stop_no": "04658", + "xcode": "127.0236410045", + "stop_type": "마을버스", + "node_id": "103900111", + "nxtStn": "논골신협.대림아파트후문" + }, + { + "stop_nm": "GS25", + "ycode": "37.5503046673", + "stop_no": "04659", + "xcode": "127.0671617628", + "stop_type": "마을버스", + "node_id": "103900057", + "nxtStn": "송정동자치회관입구" + }, + { + "stop_nm": "중앙병원앞", + "ycode": "37.5521279557", + "stop_no": "04667", + "xcode": "127.019471524", + "stop_type": "마을버스", + "node_id": "103900097", + "nxtStn": "금호초등학교" + }, + { + "stop_nm": "도선동사거리", + "ycode": "37.5667675811", + "stop_no": "04668", + "xcode": "127.0365326655", + "stop_type": "마을버스", + "node_id": "103900098", + "nxtStn": "성동구청" + }, + { + "stop_nm": "논골신협.대림아파트후문", + "ycode": "37.5575119549", + "stop_no": "04669", + "xcode": "127.0245188619", + "stop_type": "마을버스", + "node_id": "103900058", + "nxtStn": "논골사거리" + }, + { + "stop_nm": "송정동자치회관입구", + "ycode": "37.5511350971", + "stop_no": "04670", + "xcode": "127.0678257351", + "stop_type": "마을버스", + "node_id": "103900099", + "nxtStn": "송정동현대아이파크아파트" + }, + { + "stop_nm": "성동구청", + "ycode": "37.563354", + "stop_no": "04671", + "xcode": "127.036042", + "stop_type": "마을버스", + "node_id": "103900115", + "nxtStn": "왕십리광장.왕십리역7번출구" + }, + { + "stop_nm": "논골사거리", + "ycode": "37.5561260191", + "stop_no": "04672", + "xcode": "127.0247742087", + "stop_type": "마을버스", + "node_id": "103900100", + "nxtStn": "금호119안전센터" + }, + { + "stop_nm": "신금호역", + "ycode": "37.5543355851", + "stop_no": "04674", + "xcode": "127.0197856168", + "stop_type": "마을버스", + "node_id": "103900101", + "nxtStn": "대현산배수지공원입구" + }, + { + "stop_nm": "성동중앙교회.벽산아파트정문", + "ycode": "37.553011", + "stop_no": "04677", + "xcode": "127.024877", + "stop_type": "마을버스", + "node_id": "103900017", + "nxtStn": "래미안하이리버아파트" + }, + { + "stop_nm": "무학중학교.무학여고", + "ycode": "37.5584226161", + "stop_no": "04679", + "xcode": "127.0332891007", + "stop_type": "마을버스", + "node_id": "103900018", + "nxtStn": "행당2동주민센터" + }, + { + "stop_nm": "천은교회.성동청소년상담복지센터", + "ycode": "37.5545919447", + "stop_no": "04680", + "xcode": "127.0266661363", + "stop_type": "마을버스", + "node_id": "103900104", + "nxtStn": "금봉어린이집.또또와마트" + }, + { + "stop_nm": "금호어린이집", + "ycode": "37.556743", + "stop_no": "04684", + "xcode": "127.018232", + "stop_type": "마을버스", + "node_id": "103900059", + "nxtStn": "대경생활과학고등학교" + }, + { + "stop_nm": "행당2동주민센터", + "ycode": "37.5578295691", + "stop_no": "04685", + "xcode": "127.0304206318", + "stop_type": "마을버스", + "node_id": "103900105", + "nxtStn": "행당역.대림아파트정문" + }, + { + "stop_nm": "금봉어린이집.또또와마트", + "ycode": "37.5526423775", + "stop_no": "04686", + "xcode": "127.028794376", + "stop_type": "마을버스", + "node_id": "103900060", + "nxtStn": "대현산체육관입구" + }, + { + "stop_nm": "대경생활과학고등학교", + "ycode": "37.5560687475", + "stop_no": "04691", + "xcode": "127.0175178242", + "stop_type": "마을버스", + "node_id": "103900106", + "nxtStn": "종점" + }, + { + "stop_nm": "대현산체육관입구", + "ycode": "37.5529629395", + "stop_no": "04696", + "xcode": "127.0297135329", + "stop_type": "마을버스", + "node_id": "103900107", + "nxtStn": "상봉노인정앞" + }, + { + "stop_nm": "GS주유소", + "ycode": "37.546811328", + "stop_no": "04697", + "xcode": "127.0251253545", + "stop_type": "마을버스", + "node_id": "103900147", + "nxtStn": "서울숲푸르지오아파트정문" + }, + { + "stop_nm": "대림아파트후문", + "ycode": "37.5561715023", + "stop_no": "04698", + "xcode": "127.026932687", + "stop_type": "마을버스", + "node_id": "103900108", + "nxtStn": "논골.e편한세상금호114동" + }, + { + "stop_nm": "상봉노인정앞", + "ycode": "37.552674", + "stop_no": "04699", + "xcode": "127.03022", + "stop_type": "마을버스", + "node_id": "103900109", + "nxtStn": "충북상회" + }, + { + "stop_nm": "서울숲푸르지오아파트정문", + "ycode": "37.5452561903", + "stop_no": "04700", + "xcode": "127.0243937555", + "stop_type": "마을버스", + "node_id": "103900110", + "nxtStn": "서울숲푸르지오아파트후문" + }, + { + "stop_nm": "대림상가", + "ycode": "37.55388", + "stop_no": "04701", + "xcode": "127.034468", + "stop_type": "마을버스", + "node_id": "103900127", + "nxtStn": "광희중학교.응봉역" + }, + { + "stop_nm": "충북상회", + "ycode": "37.5527922994", + "stop_no": "04702", + "xcode": "127.0310093901", + "stop_type": "마을버스", + "node_id": "103900061", + "nxtStn": "응봉경로당앞" + }, + { + "stop_nm": "서울숲푸르지오아파트후문", + "ycode": "37.543544", + "stop_no": "04706", + "xcode": "127.022805", + "stop_type": "마을버스", + "node_id": "103900062", + "nxtStn": "옥수역4번출구" + }, + { + "stop_nm": "무학여고", + "ycode": "37.558122", + "stop_no": "04721", + "xcode": "127.033877", + "stop_type": "일반차로", + "node_id": "103000278", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "무학여고", + "ycode": "37.5581", + "stop_no": "04722", + "xcode": "127.034245", + "stop_type": "일반차로", + "node_id": "103000279", + "nxtStn": "종점" + }, + { + "stop_nm": "응봉사거리", + "ycode": "37.5553018991", + "stop_no": "04723", + "xcode": "127.0340901941", + "stop_type": "일반차로", + "node_id": "103000280", + "nxtStn": "응봉주민센터" + }, + { + "stop_nm": "응봉사거리", + "ycode": "37.5550801133", + "stop_no": "04724", + "xcode": "127.0344918986", + "stop_type": "일반차로", + "node_id": "103000281", + "nxtStn": "무학여고" + }, + { + "stop_nm": "응봉역.광희중", + "ycode": "37.5522011423", + "stop_no": "04739", + "xcode": "127.0344034229", + "stop_type": "마을버스", + "node_id": "103900016", + "nxtStn": "응봉초등학교.대림아파트" + }, + { + "stop_nm": "응봉경로당앞", + "ycode": "37.5523884273", + "stop_no": "04740", + "xcode": "127.0316939654", + "stop_type": "마을버스", + "node_id": "103900015", + "nxtStn": "행당서울숲푸르지오109동앞" + }, + { + "stop_nm": "금호초등학교", + "ycode": "37.5526884328", + "stop_no": "04741", + "xcode": "127.0194943061", + "stop_type": "마을버스", + "node_id": "103900163", + "nxtStn": "신금호역" + }, + { + "stop_nm": "응봉초등학교.대림아파트", + "ycode": "37.5508020956", + "stop_no": "04742", + "xcode": "127.0331680056", + "stop_type": "마을버스", + "node_id": "103900128", + "nxtStn": "현대공업사앞" + }, + { + "stop_nm": "행당서울숲푸르지오109동앞", + "ycode": "37.5543861249", + "stop_no": "04743", + "xcode": "127.031801204", + "stop_type": "마을버스", + "node_id": "103900014", + "nxtStn": "신동아아파트후문" + }, + { + "stop_nm": "현대공업사앞", + "ycode": "37.550105", + "stop_no": "04744", + "xcode": "127.032439", + "stop_type": "마을버스", + "node_id": "103900013", + "nxtStn": "응봉동현대아파트" + }, + { + "stop_nm": "신동아아파트후문", + "ycode": "37.5546877083", + "stop_no": "04745", + "xcode": "127.0328358347", + "stop_type": "마을버스", + "node_id": "103900012", + "nxtStn": "행당서울숲푸르지오상가앞" + }, + { + "stop_nm": "신동아아파트", + "ycode": "37.5497675599", + "stop_no": "04746", + "xcode": "127.0300981967", + "stop_type": "마을버스", + "node_id": "103900011", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "행당서울숲푸르지오상가앞", + "ycode": "37.5555729913", + "stop_no": "04748", + "xcode": "127.0340186862", + "stop_type": "마을버스", + "node_id": "103900119", + "nxtStn": "대림상가" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.5483750866", + "stop_no": "04749", + "xcode": "127.0275591319", + "stop_type": "마을버스", + "node_id": "103900148", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.5481765011", + "stop_no": "04750", + "xcode": "127.0250613034", + "stop_type": "마을버스", + "node_id": "103900010", + "nxtStn": "금남시장앞.백범학원터" + }, + { + "stop_nm": "금남시장앞.백범학원터", + "ycode": "37.5482744945", + "stop_no": "04751", + "xcode": "127.0216479967", + "stop_type": "마을버스", + "node_id": "103900009", + "nxtStn": "화단삼거리" + }, + { + "stop_nm": "왕십리광장.왕십리역7번출구", + "ycode": "37.5610465475", + "stop_no": "04753", + "xcode": "127.0365162885", + "stop_type": "마을버스", + "node_id": "103900154", + "nxtStn": "왕십리민자역사" + }, + { + "stop_nm": "두산상가후문.106동", + "ycode": "37.5492520827", + "stop_no": "04754", + "xcode": "127.0167172071", + "stop_type": "마을버스", + "node_id": "103900135", + "nxtStn": "두산아파트109동" + }, + { + "stop_nm": "극동아파트7동", + "ycode": "37.543720761", + "stop_no": "04755", + "xcode": "127.0126657069", + "stop_type": "마을버스", + "node_id": "103900008", + "nxtStn": "극동아파트상가" + }, + { + "stop_nm": "두산아파트113동", + "ycode": "37.5505884957", + "stop_no": "04756", + "xcode": "127.016075787", + "stop_type": "마을버스", + "node_id": "103900007", + "nxtStn": "두산아파트109동" + }, + { + "stop_nm": "두산아파트109동", + "ycode": "37.5498179638", + "stop_no": "04757", + "xcode": "127.0167637359", + "stop_type": "마을버스", + "node_id": "103900006", + "nxtStn": "두산상가후문.106동" + }, + { + "stop_nm": "극동아파트4동", + "ycode": "37.5435316415", + "stop_no": "04758", + "xcode": "127.011588323", + "stop_type": "마을버스", + "node_id": "103900005", + "nxtStn": "종점" + }, + { + "stop_nm": "극동아파트4동", + "ycode": "37.5435055002", + "stop_no": "04759", + "xcode": "127.0116845111", + "stop_type": "마을버스", + "node_id": "103900004", + "nxtStn": "극동아파트7동" + }, + { + "stop_nm": "두산아파트109동", + "ycode": "37.5498566987", + "stop_no": "04760", + "xcode": "127.0168497589", + "stop_type": "마을버스", + "node_id": "103900137", + "nxtStn": "두산아파트113동" + }, + { + "stop_nm": "두산아파트115동", + "ycode": "37.5509579397", + "stop_no": "04761", + "xcode": "127.0161120834", + "stop_type": "마을버스", + "node_id": "103900138", + "nxtStn": "두산아파트113동" + }, + { + "stop_nm": "금호역", + "ycode": "37.5484545943", + "stop_no": "04762", + "xcode": "127.0168517068", + "stop_type": "마을버스", + "node_id": "103900139", + "nxtStn": "약수역.3.6호선" + }, + { + "stop_nm": "금호역.두산상가경비실", + "ycode": "37.5485140923", + "stop_no": "04763", + "xcode": "127.0166706406", + "stop_type": "마을버스", + "node_id": "103900140", + "nxtStn": "화단삼거리" + }, + { + "stop_nm": "금호역", + "ycode": "37.5484240169", + "stop_no": "04764", + "xcode": "127.0164272951", + "stop_type": "마을버스", + "node_id": "103900003", + "nxtStn": "화단삼거리" + }, + { + "stop_nm": "금호역.3호선", + "ycode": "37.5482942315", + "stop_no": "04765", + "xcode": "127.0166253219", + "stop_type": "마을버스", + "node_id": "103900002", + "nxtStn": "화단앞" + }, + { + "stop_nm": "화단삼거리", + "ycode": "37.5482189796", + "stop_no": "04766", + "xcode": "127.0196278194", + "stop_type": "마을버스", + "node_id": "103900141", + "nxtStn": "우리은행.백범학원터" + }, + { + "stop_nm": "두산아파트113동", + "ycode": "37.5506803927", + "stop_no": "04767", + "xcode": "127.0161833258", + "stop_type": "마을버스", + "node_id": "103900001", + "nxtStn": "두산아파트115동" + }, + { + "stop_nm": "벽산아파트501동앞", + "ycode": "37.5548382055", + "stop_no": "04770", + "xcode": "127.0254789206", + "stop_type": "마을버스", + "node_id": "103900155", + "nxtStn": "벽산아파트505동앞" + }, + { + "stop_nm": "벽산아파트505동앞", + "ycode": "37.5544010055", + "stop_no": "04771", + "xcode": "127.0262518161", + "stop_type": "마을버스", + "node_id": "103900156", + "nxtStn": "벽산아파트111동앞" + }, + { + "stop_nm": "벽산아파트111동앞", + "ycode": "37.553193", + "stop_no": "04772", + "xcode": "127.026992", + "stop_type": "마을버스", + "node_id": "103900157", + "nxtStn": "벽산아파트206동앞" + }, + { + "stop_nm": "벽산아파트206동앞", + "ycode": "37.5521525445", + "stop_no": "04773", + "xcode": "127.027267386", + "stop_type": "마을버스", + "node_id": "103900158", + "nxtStn": "벽산아파트202동앞" + }, + { + "stop_nm": "벽산아파트202동앞", + "ycode": "37.551491", + "stop_no": "04774", + "xcode": "127.027356", + "stop_type": "마을버스", + "node_id": "103900159", + "nxtStn": "벽산하이피아상가앞" + }, + { + "stop_nm": "벽산하이피아상가앞", + "ycode": "37.5521961609", + "stop_no": "04775", + "xcode": "127.0256432644", + "stop_type": "마을버스", + "node_id": "103900160", + "nxtStn": "금북초등학교입구" + }, + { + "stop_nm": "우리은행.백범학원터", + "ycode": "37.548263", + "stop_no": "04776", + "xcode": "127.021122", + "stop_type": "마을버스", + "node_id": "103900161", + "nxtStn": "금호4가동주민센터.대도빌딩" + }, + { + "stop_nm": "행당푸르지오아파트", + "ycode": "37.556239062", + "stop_no": "04780", + "xcode": "127.0340034675", + "stop_type": "마을버스", + "node_id": "103900162", + "nxtStn": "대림상가" + }, + { + "stop_nm": "왕십리역", + "ycode": "37.5610536111", + "stop_no": "04781", + "xcode": "127.0369826501", + "stop_type": "일반차로", + "node_id": "105000472", + "nxtStn": "무학여고" + }, + { + "stop_nm": "옥정중학교", + "ycode": "37.5412473905", + "stop_no": "04782", + "xcode": "127.0113005335", + "stop_type": "일반차로", + "node_id": "105000471", + "nxtStn": "옥수삼성아파트" + }, + { + "stop_nm": "옥정중학교", + "ycode": "37.5409744546", + "stop_no": "04783", + "xcode": "127.0109934781", + "stop_type": "일반차로", + "node_id": "105000470", + "nxtStn": "이집트대사관.한남더힐아파트" + }, + { + "stop_nm": "옥수삼성아파트", + "ycode": "37.5436087758", + "stop_no": "04784", + "xcode": "127.0148090773", + "stop_type": "일반차로", + "node_id": "105000469", + "nxtStn": "금옥초등학교.금호대우아파트" + }, + { + "stop_nm": "옥수삼성아파트", + "ycode": "37.5437908214", + "stop_no": "04785", + "xcode": "127.014614465", + "stop_type": "일반차로", + "node_id": "105000468", + "nxtStn": "옥정중학교" + }, + { + "stop_nm": "금옥초등학교.금호대우아파트", + "ycode": "37.546474573", + "stop_no": "04786", + "xcode": "127.0189290928", + "stop_type": "일반차로", + "node_id": "105000467", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "금옥초등학교.금호대우아파트", + "ycode": "37.5465899573", + "stop_no": "04787", + "xcode": "127.018651851", + "stop_type": "일반차로", + "node_id": "105000466", + "nxtStn": "옥수삼성아파트" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.5479784428", + "stop_no": "04788", + "xcode": "127.0241852708", + "stop_type": "일반차로", + "node_id": "105000465", + "nxtStn": "금호삼성래미안" + }, + { + "stop_nm": "금호사거리", + "ycode": "37.5481765136", + "stop_no": "04789", + "xcode": "127.0250024528", + "stop_type": "일반차로", + "node_id": "105000464", + "nxtStn": "금옥초등학교.금호대우아파트" + }, + { + "stop_nm": "금호삼성래미안", + "ycode": "37.5478769143", + "stop_no": "04790", + "xcode": "127.0269817622", + "stop_type": "일반차로", + "node_id": "105000463", + "nxtStn": "응봉현대아파트" + }, + { + "stop_nm": "금호삼성래미안", + "ycode": "37.5483615758", + "stop_no": "04791", + "xcode": "127.0275353603", + "stop_type": "일반차로", + "node_id": "105000462", + "nxtStn": "금호사거리" + }, + { + "stop_nm": "응봉현대아파트", + "ycode": "37.5497628991", + "stop_no": "04792", + "xcode": "127.0307014263", + "stop_type": "일반차로", + "node_id": "105000461", + "nxtStn": "응봉주민센터" + }, + { + "stop_nm": "응봉현대아파트", + "ycode": "37.5501304936", + "stop_no": "04793", + "xcode": "127.0309019007", + "stop_type": "일반차로", + "node_id": "105000460", + "nxtStn": "금호삼성래미안" + }, + { + "stop_nm": "응봉주민센터", + "ycode": "37.5534440055", + "stop_no": "04794", + "xcode": "127.0335211731", + "stop_type": "일반차로", + "node_id": "105000459", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "응봉주민센터", + "ycode": "37.5539990568", + "stop_no": "04795", + "xcode": "127.0336017817", + "stop_type": "일반차로", + "node_id": "105000458", + "nxtStn": "응봉현대아파트" + }, + { + "stop_nm": "래미안옥수리버젠아파트상가", + "ycode": "37.5443727865", + "stop_no": "04800", + "xcode": "127.0157270249", + "stop_type": "마을버스", + "node_id": "103900167", + "nxtStn": "옥수동주민센터.옥수동성당" + }, + { + "stop_nm": "옥수동주민센터.옥수동성당", + "ycode": "37.5436061689", + "stop_no": "04801", + "xcode": "127.0140191688", + "stop_type": "마을버스", + "node_id": "103900169", + "nxtStn": "국민은행" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5426971627", + "stop_no": "04802", + "xcode": "127.0122219232", + "stop_type": "마을버스", + "node_id": "103900190", + "nxtStn": "옥수종합사회복지관" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5427782048", + "stop_no": "04803", + "xcode": "127.0127560803", + "stop_type": "마을버스", + "node_id": "103900191", + "nxtStn": "옥수동주민센터.옥수동성당" + }, + { + "stop_nm": "옥수동주민센터.옥수동성당", + "ycode": "37.5432376614", + "stop_no": "04804", + "xcode": "127.0136716778", + "stop_type": "마을버스", + "node_id": "103900192", + "nxtStn": "삼성아파트정문" + }, + { + "stop_nm": "삼성아파트정문", + "ycode": "37.5438267793", + "stop_no": "04805", + "xcode": "127.015293478", + "stop_type": "마을버스", + "node_id": "103900193", + "nxtStn": "옥수교회" + }, + { + "stop_nm": "성동노인종합복지관", + "ycode": "37.5652097737", + "stop_no": "04807", + "xcode": "127.0414402566", + "stop_type": "마을버스", + "node_id": "103900189", + "nxtStn": "중앙하이츠아파트" + }, + { + "stop_nm": "중앙하이츠아파트", + "ycode": "37.5652526914", + "stop_no": "04808", + "xcode": "127.0389001215", + "stop_type": "마을버스", + "node_id": "103900188", + "nxtStn": "민자역사후문" + }, + { + "stop_nm": "민자역사후문", + "ycode": "37.563549", + "stop_no": "04809", + "xcode": "127.038365", + "stop_type": "마을버스", + "node_id": "103900187", + "nxtStn": "왕십리광장.왕십리역4번출구" + }, + { + "stop_nm": "금호1가동주민센터", + "ycode": "37.5547282857", + "stop_no": "04811", + "xcode": "127.0208123009", + "stop_type": "마을버스", + "node_id": "103900185", + "nxtStn": "금호정형외과" + }, + { + "stop_nm": "금호정형외과", + "ycode": "37.5540867685", + "stop_no": "04812", + "xcode": "127.0204578591", + "stop_type": "마을버스", + "node_id": "103900184", + "nxtStn": "금호고등학교앞" + }, + { + "stop_nm": "금호고등학교앞", + "ycode": "37.5529799549", + "stop_no": "04814", + "xcode": "127.0233929107", + "stop_type": "마을버스", + "node_id": "103900182", + "nxtStn": "벽산하이피아상가" + }, + { + "stop_nm": "벽산하이피아상가", + "ycode": "37.5519500961", + "stop_no": "04815", + "xcode": "127.0259453705", + "stop_type": "마을버스", + "node_id": "103900181", + "nxtStn": "벽산노인정" + }, + { + "stop_nm": "벽산노인정", + "ycode": "37.551058711", + "stop_no": "04816", + "xcode": "127.0268504902", + "stop_type": "마을버스", + "node_id": "103900180", + "nxtStn": "벽산아파트107동" + }, + { + "stop_nm": "벽산아파트107동", + "ycode": "37.5516875417", + "stop_no": "04817", + "xcode": "127.0274313269", + "stop_type": "마을버스", + "node_id": "103900179", + "nxtStn": "벽산아파트109동" + }, + { + "stop_nm": "벽산아파트109동", + "ycode": "37.5526138811", + "stop_no": "04818", + "xcode": "127.0273705487", + "stop_type": "마을버스", + "node_id": "103900178", + "nxtStn": "벽산아파트505동" + }, + { + "stop_nm": "벽산아파트505동", + "ycode": "37.5543216827", + "stop_no": "04819", + "xcode": "127.0263706309", + "stop_type": "마을버스", + "node_id": "103900177", + "nxtStn": "벽산아파트501동" + }, + { + "stop_nm": "벽산아파트501동", + "ycode": "37.5549553427", + "stop_no": "04820", + "xcode": "127.0255027292", + "stop_type": "마을버스", + "node_id": "103900176", + "nxtStn": "논골.금호벽산아파트.성동공유센터" + }, + { + "stop_nm": "광희중학교.응봉역", + "ycode": "37.5519110306", + "stop_no": "04821", + "xcode": "127.035058499", + "stop_type": "마을버스", + "node_id": "103900175", + "nxtStn": "한신아파트후문" + }, + { + "stop_nm": "한신아파트후문", + "ycode": "37.5537403049", + "stop_no": "04822", + "xcode": "127.0370729773", + "stop_type": "마을버스", + "node_id": "103900174", + "nxtStn": "한신아파트정문" + }, + { + "stop_nm": "한신아파트정문", + "ycode": "37.5548347521", + "stop_no": "04823", + "xcode": "127.035382546", + "stop_type": "마을버스", + "node_id": "103900173", + "nxtStn": "응봉사거리" + }, + { + "stop_nm": "민자역사후문", + "ycode": "37.56358", + "stop_no": "04824", + "xcode": "127.038505", + "stop_type": "마을버스", + "node_id": "103900172", + "nxtStn": "중앙하이츠아파트" + }, + { + "stop_nm": "중앙하이츠아파트", + "ycode": "37.565054", + "stop_no": "04825", + "xcode": "127.03845", + "stop_type": "마을버스", + "node_id": "103900171", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.565494021", + "stop_no": "04826", + "xcode": "127.0402755817", + "stop_type": "마을버스", + "node_id": "103900170", + "nxtStn": "마장역" + }, + { + "stop_nm": "금북초등학교입구", + "ycode": "37.5556558853", + "stop_no": "04827", + "xcode": "127.0236161649", + "stop_type": "마을버스", + "node_id": "103900196", + "nxtStn": "대현산배수지공원앞" + }, + { + "stop_nm": "대현산배수지공원앞", + "ycode": "37.5551777057", + "stop_no": "04828", + "xcode": "127.0220574589", + "stop_type": "마을버스", + "node_id": "103900195", + "nxtStn": "금호1가동주민센터" + }, + { + "stop_nm": "선영약국", + "ycode": "37.566775", + "stop_no": "04829", + "xcode": "127.030619", + "stop_type": "마을버스", + "node_id": "103900198", + "nxtStn": "텐즈힐아파트101동.115동" + }, + { + "stop_nm": "텐즈힐아파트101동.115동", + "ycode": "37.56698", + "stop_no": "04830", + "xcode": "127.029276", + "stop_type": "마을버스", + "node_id": "103900197", + "nxtStn": "숭신초등학교.도선고등학교앞" + }, + { + "stop_nm": "숭신초등학교.도선고등학교앞", + "ycode": "37.5673296859", + "stop_no": "04831", + "xcode": "127.0271676387", + "stop_type": "마을버스", + "node_id": "103900202", + "nxtStn": "왕십리도선동주민센터" + }, + { + "stop_nm": "왕십리도선동주민센터", + "ycode": "37.5677084261", + "stop_no": "04832", + "xcode": "127.0259157424", + "stop_type": "마을버스", + "node_id": "103900201", + "nxtStn": "텐즈힐아파트120동.213동앞" + }, + { + "stop_nm": "텐즈힐아파트120동.213동앞", + "ycode": "37.569125", + "stop_no": "04833", + "xcode": "127.026001", + "stop_type": "마을버스", + "node_id": "103900200", + "nxtStn": "왕십리중앙교회" + }, + { + "stop_nm": "왕십리중앙교회", + "ycode": "37.5701547474", + "stop_no": "04834", + "xcode": "127.0265630048", + "stop_type": "마을버스", + "node_id": "103900199", + "nxtStn": "텐즈힐아파트107동앞" + }, + { + "stop_nm": "마장동현대아파트", + "ycode": "37.570169", + "stop_no": "04836", + "xcode": "127.043027", + "stop_type": "마을버스", + "node_id": "103900211", + "nxtStn": "청계장원아파트" + }, + { + "stop_nm": "청계장원아파트", + "ycode": "37.569336", + "stop_no": "04837", + "xcode": "127.044743", + "stop_type": "마을버스", + "node_id": "103900208", + "nxtStn": "마장2교사거리" + }, + { + "stop_nm": "마장2교사거리", + "ycode": "37.567977", + "stop_no": "04839", + "xcode": "127.045459", + "stop_type": "마을버스", + "node_id": "103900203", + "nxtStn": "마장역" + }, + { + "stop_nm": "마장2교사거리", + "ycode": "37.5681827453", + "stop_no": "04840", + "xcode": "127.0456033009", + "stop_type": "마을버스", + "node_id": "103900204", + "nxtStn": "청계장원아파트" + }, + { + "stop_nm": "청계장원아파트", + "ycode": "37.5693427411", + "stop_no": "04842", + "xcode": "127.0448455263", + "stop_type": "마을버스", + "node_id": "103900207", + "nxtStn": "종점" + }, + { + "stop_nm": "옥수교회", + "ycode": "37.54524", + "stop_no": "04843", + "xcode": "127.016005", + "stop_type": "마을버스", + "node_id": "103900209", + "nxtStn": "래미안옥수리버젠.옥수중앙교회" + }, + { + "stop_nm": "텐즈힐아파트107동앞", + "ycode": "37.5695685824", + "stop_no": "04844", + "xcode": "127.0285144783", + "stop_type": "마을버스", + "node_id": "103900210", + "nxtStn": "성동사회복지관.청계천박물관" + }, + { + "stop_nm": "응봉동현대아파트", + "ycode": "37.5498619578", + "stop_no": "04845", + "xcode": "127.0309380064", + "stop_type": "마을버스", + "node_id": "103900212", + "nxtStn": "신동아아파트" + }, + { + "stop_nm": "논골.대림아파트107동.금호동벽산아파트", + "ycode": "37.5558963995", + "stop_no": "04846", + "xcode": "127.0249544273", + "stop_type": "마을버스", + "node_id": "103900216", + "nxtStn": "논골신협.대림아파트후문" + }, + { + "stop_nm": "옥수역5.6번출구", + "ycode": "37.541854", + "stop_no": "04847", + "xcode": "127.017002", + "stop_type": "마을버스", + "node_id": "103900217", + "nxtStn": "서울숲푸르지오아파트" + }, + { + "stop_nm": "서울숲푸르지오아파트", + "ycode": "37.545015", + "stop_no": "04848", + "xcode": "127.023747", + "stop_type": "마을버스", + "node_id": "103900219", + "nxtStn": "서울숲푸르지오아파트후문" + }, + { + "stop_nm": "언더스탠드에비뉴", + "ycode": "37.543572", + "stop_no": "04849", + "xcode": "127.042776", + "stop_type": "마을버스", + "node_id": "103900248", + "nxtStn": "성동구민체육센터" + }, + { + "stop_nm": "성동구민체육센터", + "ycode": "37.545138", + "stop_no": "04850", + "xcode": "127.044474", + "stop_type": "마을버스", + "node_id": "103900249", + "nxtStn": "경일중고등학교" + }, + { + "stop_nm": "경일중고등학교", + "ycode": "37.542316", + "stop_no": "04852", + "xcode": "127.049131", + "stop_type": "마을버스", + "node_id": "103900251", + "nxtStn": "성수공고앞" + }, + { + "stop_nm": "이마트.서울숲힐스테이트아파트", + "ycode": "37.540475", + "stop_no": "04854", + "xcode": "127.052766", + "stop_type": "마을버스", + "node_id": "103900253", + "nxtStn": "서울숲코오롱디지털타워2차" + }, + { + "stop_nm": "서울숲코오롱디지털타워2차", + "ycode": "37.541411", + "stop_no": "04855", + "xcode": "127.05399", + "stop_type": "마을버스", + "node_id": "103900254", + "nxtStn": "서울경찰청제6기동단" + }, + { + "stop_nm": "서울경찰청제6기동단", + "ycode": "37.540076", + "stop_no": "04856", + "xcode": "127.054739", + "stop_type": "마을버스", + "node_id": "103900255", + "nxtStn": "한라시그마밸리앞" + }, + { + "stop_nm": "한라시그마밸리앞", + "ycode": "37.539647", + "stop_no": "04857", + "xcode": "127.05532", + "stop_type": "마을버스", + "node_id": "103900256", + "nxtStn": "성수역3번출구" + }, + { + "stop_nm": "성수역3번출구", + "ycode": "37.543944", + "stop_no": "04858", + "xcode": "127.057104", + "stop_type": "마을버스", + "node_id": "103900257", + "nxtStn": "성수역3번출구" + }, + { + "stop_nm": "서울숲코오롱디지털타워2차", + "ycode": "37.541461", + "stop_no": "04859", + "xcode": "127.053848", + "stop_type": "마을버스", + "node_id": "103900258", + "nxtStn": "이마트.서울숲힐스테이트아파트" + }, + { + "stop_nm": "이마트.서울숲힐스테이트아파트", + "ycode": "37.540528", + "stop_no": "04860", + "xcode": "127.05257", + "stop_type": "마을버스", + "node_id": "103900259", + "nxtStn": "성수공고앞" + }, + { + "stop_nm": "현대그린아파트", + "ycode": "37.540523", + "stop_no": "04861", + "xcode": "127.049622", + "stop_type": "마을버스", + "node_id": "103900261", + "nxtStn": "경일중고등학교" + }, + { + "stop_nm": "성수역3번출구", + "ycode": "37.5435598293", + "stop_no": "04862", + "xcode": "127.0566906693", + "stop_type": "마을버스", + "node_id": "103900233", + "nxtStn": "한라시그마밸리" + }, + { + "stop_nm": "경일중고등학교", + "ycode": "37.542503", + "stop_no": "04863", + "xcode": "127.04921", + "stop_type": "마을버스", + "node_id": "103900262", + "nxtStn": "서울숲역" + }, + { + "stop_nm": "한라시그마밸리", + "ycode": "37.5399060735", + "stop_no": "04864", + "xcode": "127.0551786364", + "stop_type": "마을버스", + "node_id": "103900235", + "nxtStn": "서울경찰청제6기동단" + }, + { + "stop_nm": "서울경찰청제6기동단", + "ycode": "37.540228", + "stop_no": "04865", + "xcode": "127.054772", + "stop_type": "마을버스", + "node_id": "103900236", + "nxtStn": "서울숲코오롱디지털타워2차" + }, + { + "stop_nm": "서울숲역", + "ycode": "37.543869", + "stop_no": "04866", + "xcode": "127.045146", + "stop_type": "마을버스", + "node_id": "103900263", + "nxtStn": "성동구민종합체육센터" + }, + { + "stop_nm": "성동구민종합체육센터", + "ycode": "37.54527", + "stop_no": "04867", + "xcode": "127.044515", + "stop_type": "마을버스", + "node_id": "103900264", + "nxtStn": "서울숲2번출입구" + }, + { + "stop_nm": "서울숲2번출입구", + "ycode": "37.543527", + "stop_no": "04868", + "xcode": "127.04255", + "stop_type": "마을버스", + "node_id": "103900265", + "nxtStn": "서울숲9번출입구" + }, + { + "stop_nm": "서울숲9번출입구", + "ycode": "37.543638", + "stop_no": "04871", + "xcode": "127.037555", + "stop_type": "마을버스", + "node_id": "103900242", + "nxtStn": "성수대교북단교차로" + }, + { + "stop_nm": "옥수역4번출구", + "ycode": "37.5418118508", + "stop_no": "04872", + "xcode": "127.0176124993", + "stop_type": "마을버스", + "node_id": "103900218", + "nxtStn": "무쇠막" + }, + { + "stop_nm": "성수대교북단교차로", + "ycode": "37.544291", + "stop_no": "04873", + "xcode": "127.035516", + "stop_type": "마을버스", + "node_id": "103900243", + "nxtStn": "서울숲푸르지오아파트" + }, + { + "stop_nm": "마장역", + "ycode": "37.5661140833", + "stop_no": "04876", + "xcode": "127.0426522462", + "stop_type": "마을버스", + "node_id": "103900246", + "nxtStn": "성동노인종합복지관" + }, + { + "stop_nm": "마장역", + "ycode": "37.5656474129", + "stop_no": "04877", + "xcode": "127.0423947542", + "stop_type": "마을버스", + "node_id": "103900247", + "nxtStn": "마장2교사거리" + }, + { + "stop_nm": "옥정초등학교", + "ycode": "37.5408892401", + "stop_no": "04878", + "xcode": "127.015419565", + "stop_type": "마을버스", + "node_id": "103900266", + "nxtStn": "옥수역" + }, + { + "stop_nm": "e편한세상금호109동", + "ycode": "37.553483", + "stop_no": "04879", + "xcode": "127.021876", + "stop_type": "마을버스", + "node_id": "103900267", + "nxtStn": "종점" + }, + { + "stop_nm": "왕십리자이아파트107동", + "ycode": "37.5597128375", + "stop_no": "04883", + "xcode": "127.0259692914", + "stop_type": "마을버스", + "node_id": "103900268", + "nxtStn": "풍림아이원아파트후문" + }, + { + "stop_nm": "왕십리KCC스위첸아파트", + "ycode": "37.560369", + "stop_no": "04884", + "xcode": "127.026824", + "stop_type": "마을버스", + "node_id": "103900269", + "nxtStn": "금호베스트빌아파트노인정앞" + }, + { + "stop_nm": "금호베스트빌아파트노인정앞", + "ycode": "37.5618733218", + "stop_no": "04885", + "xcode": "127.025069533", + "stop_type": "마을버스", + "node_id": "103900270", + "nxtStn": "금호베스트빌.래미안하이베르" + }, + { + "stop_nm": "풍림아이원아파트후문", + "ycode": "37.5601942456", + "stop_no": "04886", + "xcode": "127.0268499549", + "stop_type": "마을버스", + "node_id": "103900271", + "nxtStn": "종점" + }, + { + "stop_nm": "응봉역.광희중학교", + "ycode": "37.551878", + "stop_no": "04887", + "xcode": "127.035298", + "stop_type": "마을버스", + "node_id": "103900272", + "nxtStn": "대림강변타운아파트A상가" + }, + { + "stop_nm": "대림강변타운아파트A상가", + "ycode": "37.55479", + "stop_no": "04888", + "xcode": "127.035718", + "stop_type": "마을버스", + "node_id": "103900273", + "nxtStn": "리버그린동아아파트정문" + }, + { + "stop_nm": "리버그린동아아파트정문", + "ycode": "37.5534932401", + "stop_no": "04889", + "xcode": "127.0375237372", + "stop_type": "마을버스", + "node_id": "103900274", + "nxtStn": "서울숲리버뷰자이아파트제1주차장" + }, + { + "stop_nm": "서울숲리버뷰자이아파트제2주차장", + "ycode": "37.556168", + "stop_no": "04890", + "xcode": "127.039405", + "stop_type": "마을버스", + "node_id": "103900275", + "nxtStn": "왕십리로교차로" + }, + { + "stop_nm": "서울숲리버뷰자이아파트제2주차장", + "ycode": "37.555721", + "stop_no": "04891", + "xcode": "127.039281", + "stop_type": "마을버스", + "node_id": "103900276", + "nxtStn": "서울숲리버뷰자이아파트제1주차장" + }, + { + "stop_nm": "서울숲리버뷰자이아파트제1주차장", + "ycode": "37.5541970798", + "stop_no": "04892", + "xcode": "127.0388889816", + "stop_type": "마을버스", + "node_id": "103900277", + "nxtStn": "리버그린동아아파트" + }, + { + "stop_nm": "왕십리로교차로", + "ycode": "37.557719765", + "stop_no": "04893", + "xcode": "127.0389354428", + "stop_type": "마을버스", + "node_id": "103900278", + "nxtStn": "서울숲리버뷰자이아파트제2주차장" + }, + { + "stop_nm": "왕십리로교차로", + "ycode": "37.5577676066", + "stop_no": "04894", + "xcode": "127.0391339263", + "stop_type": "마을버스", + "node_id": "103900279", + "nxtStn": "왕십리민자역사" + }, + { + "stop_nm": "리버그린동아아파트", + "ycode": "37.553344391", + "stop_no": "04895", + "xcode": "127.0382720735", + "stop_type": "마을버스", + "node_id": "103900280", + "nxtStn": "종점" + }, + { + "stop_nm": "서울숲리버뷰자이아파트제1주차장", + "ycode": "37.554509", + "stop_no": "04896", + "xcode": "127.03924", + "stop_type": "일반차로", + "node_id": "103000514", + "nxtStn": "서울숲리버뷰자이아파트제2주차장" + }, + { + "stop_nm": "왕십리역6-1번출구", + "ycode": "37.560793", + "stop_no": "04897", + "xcode": "127.037912", + "stop_type": "마을버스", + "node_id": "103900281", + "nxtStn": "행당동서울숲더샵" + }, + { + "stop_nm": "행당동서울숲더샵", + "ycode": "37.557808", + "stop_no": "04898", + "xcode": "127.039717", + "stop_type": "마을버스", + "node_id": "103900282", + "nxtStn": "한양대학교정문" + }, + { + "stop_nm": "행당동서울숲더샵", + "ycode": "37.558001", + "stop_no": "04899", + "xcode": "127.039904", + "stop_type": "마을버스", + "node_id": "103900294", + "nxtStn": "왕십리민자역사" + }, + { + "stop_nm": "서울숲공원", + "ycode": "37.5420905951", + "stop_no": "04900", + "xcode": "127.042573685", + "stop_type": "일반차로", + "node_id": "103000511", + "nxtStn": "뚝섬유원지" + }, + { + "stop_nm": "성수역수제화거리", + "ycode": "37.545157", + "stop_no": "04901", + "xcode": "127.054619", + "stop_type": "일반차로", + "node_id": "103000512", + "nxtStn": "한양대역" + }, + { + "stop_nm": "한양대역", + "ycode": "37.5568651503", + "stop_no": "04902", + "xcode": "127.0432470892", + "stop_type": "일반차로", + "node_id": "103000513", + "nxtStn": "종점" + }, + { + "stop_nm": "한양대학교병원본관1층", + "ycode": "37.559459871", + "stop_no": "04904", + "xcode": "127.0438016174", + "stop_type": "마을버스", + "node_id": "103900285", + "nxtStn": "한양대학교병원응급실" + }, + { + "stop_nm": "한양대학교병원본관1층", + "ycode": "37.5594516108", + "stop_no": "04905", + "xcode": "127.0435712108", + "stop_type": "마을버스", + "node_id": "103900291", + "nxtStn": "한양대병원후문" + }, + { + "stop_nm": "한양대학교병원응급실", + "ycode": "37.559812", + "stop_no": "04906", + "xcode": "127.0446", + "stop_type": "마을버스", + "node_id": "103900286", + "nxtStn": "한양대학교백남학술정보관" + }, + { + "stop_nm": "한양대학교류마티스병원동관", + "ycode": "37.559973", + "stop_no": "04907", + "xcode": "127.044651", + "stop_type": "마을버스", + "node_id": "103900290", + "nxtStn": "한양대학교병원본관1층" + }, + { + "stop_nm": "한양대학교백남학술정보관", + "ycode": "37.5577342161", + "stop_no": "04908", + "xcode": "127.0458450446", + "stop_type": "마을버스", + "node_id": "103900287", + "nxtStn": "한양대학교생활과학대학" + }, + { + "stop_nm": "한양종합기술연구원.생활과학대학", + "ycode": "37.5576910991", + "stop_no": "04909", + "xcode": "127.0460705765", + "stop_type": "마을버스", + "node_id": "103900289", + "nxtStn": "한양대학교류마티스병원동관" + }, + { + "stop_nm": "한양대학교생활과학대학", + "ycode": "37.5568034886", + "stop_no": "04910", + "xcode": "127.0465028779", + "stop_type": "마을버스", + "node_id": "103900288", + "nxtStn": "법학학술정보관" + }, + { + "stop_nm": "한양대학교제2의학관", + "ycode": "37.559328", + "stop_no": "04912", + "xcode": "127.042132", + "stop_type": "마을버스", + "node_id": "103900284", + "nxtStn": "한양대학교병원본관1층" + }, + { + "stop_nm": "한양대학교정문", + "ycode": "37.5577761117", + "stop_no": "04914", + "xcode": "127.0421228179", + "stop_type": "마을버스", + "node_id": "103900283", + "nxtStn": "한양대학교제2의학관" + }, + { + "stop_nm": "군자교입구", + "ycode": "37.5587409868", + "stop_no": "05001", + "xcode": "127.0756461481", + "stop_type": "중앙차로", + "node_id": "104000001", + "nxtStn": "장한평역" + }, + { + "stop_nm": "군자교입구", + "ycode": "37.5587937258", + "stop_no": "05002", + "xcode": "127.0749002776", + "stop_type": "중앙차로", + "node_id": "104000002", + "nxtStn": "군자역" + }, + { + "stop_nm": "군자역.용마초등학교", + "ycode": "37.5560989145", + "stop_no": "05003", + "xcode": "127.082473132", + "stop_type": "중앙차로", + "node_id": "104000003", + "nxtStn": "군자교입구" + }, + { + "stop_nm": "군자역.용마초등학교", + "ycode": "37.556267", + "stop_no": "05004", + "xcode": "127.081557", + "stop_type": "중앙차로", + "node_id": "104000004", + "nxtStn": "중곡동입구삼거리" + }, + { + "stop_nm": "중곡동입구삼거리", + "ycode": "37.5544965543", + "stop_no": "05005", + "xcode": "127.086550509", + "stop_type": "중앙차로", + "node_id": "104000005", + "nxtStn": "군자역.용마초등학교" + }, + { + "stop_nm": "어린이대공원후문아차산역", + "ycode": "37.5512084718", + "stop_no": "05006", + "xcode": "127.0901491873", + "stop_type": "중앙차로", + "node_id": "104000006", + "nxtStn": "중곡동입구삼거리" + }, + { + "stop_nm": "어린이대공원후문아차산역", + "ycode": "37.5527337409", + "stop_no": "05007", + "xcode": "127.0891816821", + "stop_type": "중앙차로", + "node_id": "104000007", + "nxtStn": "선화예고앞" + }, + { + "stop_nm": "중곡동입구삼거리", + "ycode": "37.554926", + "stop_no": "05008", + "xcode": "127.085229", + "stop_type": "중앙차로", + "node_id": "104000299", + "nxtStn": "어린이대공원후문아차산역" + }, + { + "stop_nm": "새밭교회", + "ycode": "37.548983", + "stop_no": "05009", + "xcode": "127.093185", + "stop_type": "중앙차로", + "node_id": "104000296", + "nxtStn": "어린이대공원후문아차산역" + }, + { + "stop_nm": "새밭교회", + "ycode": "37.5490935801", + "stop_no": "05010", + "xcode": "127.0926378294", + "stop_type": "중앙차로", + "node_id": "104000295", + "nxtStn": "광나루역" + }, + { + "stop_nm": "광나루역", + "ycode": "37.545741", + "stop_no": "05011", + "xcode": "127.102649", + "stop_type": "중앙차로", + "node_id": "104000298", + "nxtStn": "새밭교회" + }, + { + "stop_nm": "광나루역", + "ycode": "37.545156", + "stop_no": "05012", + "xcode": "127.103764", + "stop_type": "중앙차로", + "node_id": "104000297", + "nxtStn": "천호역" + }, + { + "stop_nm": "군자교", + "ycode": "37.561532857", + "stop_no": "05101", + "xcode": "127.0752029849", + "stop_type": "일반차로", + "node_id": "104000008", + "nxtStn": "중곡아파트" + }, + { + "stop_nm": "군자교", + "ycode": "37.5623861756", + "stop_no": "05102", + "xcode": "127.0752287457", + "stop_type": "일반차로", + "node_id": "104000009", + "nxtStn": "군자교남단" + }, + { + "stop_nm": "메리놀외방선교회", + "ycode": "37.55895", + "stop_no": "05103", + "xcode": "127.077338", + "stop_type": "일반차로", + "node_id": "104000010", + "nxtStn": "KEB.하나은행.군자동.지점" + }, + { + "stop_nm": "메리놀외방선교회", + "ycode": "37.559086619", + "stop_no": "05104", + "xcode": "127.0776318627", + "stop_type": "일반차로", + "node_id": "104000011", + "nxtStn": "중곡1동주민센터입구" + }, + { + "stop_nm": "중곡1동주민센터입구", + "ycode": "37.560522", + "stop_no": "05105", + "xcode": "127.078383", + "stop_type": "일반차로", + "node_id": "104000012", + "nxtStn": "중곡1동사거리" + }, + { + "stop_nm": "중곡1동주민센터입구", + "ycode": "37.560877", + "stop_no": "05106", + "xcode": "127.078402", + "stop_type": "일반차로", + "node_id": "104000013", + "nxtStn": "메리놀외방선교회" + }, + { + "stop_nm": "중곡1동사거리", + "ycode": "37.5624536807", + "stop_no": "05107", + "xcode": "127.0794725244", + "stop_type": "일반차로", + "node_id": "104000014", + "nxtStn": "중마초등학교.중곡제일골목시장앞" + }, + { + "stop_nm": "중곡1동사거리", + "ycode": "37.562482", + "stop_no": "05108", + "xcode": "127.079283", + "stop_type": "일반차로", + "node_id": "104000015", + "nxtStn": "중곡1동주민센터입구" + }, + { + "stop_nm": "중마초등학교.중곡제일골목시장앞", + "ycode": "37.56498", + "stop_no": "05109", + "xcode": "127.080843", + "stop_type": "일반차로", + "node_id": "104000016", + "nxtStn": "중곡역입구" + }, + { + "stop_nm": "용마사거리", + "ycode": "37.5622907455", + "stop_no": "05111", + "xcode": "127.0818720972", + "stop_type": "일반차로", + "node_id": "104000018", + "nxtStn": "중곡2동주민센터앞" + }, + { + "stop_nm": "중곡2동주민센터앞", + "ycode": "37.5598837254", + "stop_no": "05112", + "xcode": "127.0808552636", + "stop_type": "일반차로", + "node_id": "104000019", + "nxtStn": "능동사거리.군자역" + }, + { + "stop_nm": "중곡2동주민센터앞", + "ycode": "37.5598402672", + "stop_no": "05113", + "xcode": "127.0811551751", + "stop_type": "일반차로", + "node_id": "104000020", + "nxtStn": "용마사거리" + }, + { + "stop_nm": "중곡동성당앞", + "ycode": "37.563169", + "stop_no": "05114", + "xcode": "127.082935", + "stop_type": "일반차로", + "node_id": "104000021", + "nxtStn": "종합의료복합단지" + }, + { + "stop_nm": "종합의료복합단지", + "ycode": "37.5638882429", + "stop_no": "05115", + "xcode": "127.0833601348", + "stop_type": "일반차로", + "node_id": "104000022", + "nxtStn": "중곡역.국립정신건강센터" + }, + { + "stop_nm": "중곡동종점", + "ycode": "37.5620725727", + "stop_no": "05116", + "xcode": "127.0870618595", + "stop_type": "일반차로", + "node_id": "104000023", + "nxtStn": "신성시장앞" + }, + { + "stop_nm": "중곡보건지소", + "ycode": "37.55992", + "stop_no": "05117", + "xcode": "127.086988", + "stop_type": "일반차로", + "node_id": "104000024", + "nxtStn": "중곡우체국앞" + }, + { + "stop_nm": "신성시장앞", + "ycode": "37.5583163621", + "stop_no": "05118", + "xcode": "127.0876755037", + "stop_type": "일반차로", + "node_id": "101000252", + "nxtStn": "중곡동입구" + }, + { + "stop_nm": "중곡우체국앞", + "ycode": "37.561577", + "stop_no": "05119", + "xcode": "127.083883", + "stop_type": "일반차로", + "node_id": "104000026", + "nxtStn": "용마사거리" + }, + { + "stop_nm": "면곡시장", + "ycode": "37.569746048", + "stop_no": "05120", + "xcode": "127.0797293274", + "stop_type": "일반차로", + "node_id": "104000027", + "nxtStn": "면곡시장" + }, + { + "stop_nm": "면곡시장", + "ycode": "37.570028", + "stop_no": "05121", + "xcode": "127.079442", + "stop_type": "일반차로", + "node_id": "104000028", + "nxtStn": "중곡아파트" + }, + { + "stop_nm": "중곡아파트", + "ycode": "37.5664012264", + "stop_no": "05122", + "xcode": "127.0778996992", + "stop_type": "일반차로", + "node_id": "104000029", + "nxtStn": "면곡시장" + }, + { + "stop_nm": "중곡아파트", + "ycode": "37.5657955541", + "stop_no": "05123", + "xcode": "127.0771769652", + "stop_type": "일반차로", + "node_id": "104000030", + "nxtStn": "군자교" + }, + { + "stop_nm": "중마초등학교.중곡제일골목시장앞", + "ycode": "37.565232", + "stop_no": "05124", + "xcode": "127.080851", + "stop_type": "일반차로", + "node_id": "104000031", + "nxtStn": "기업은행.용마사거리" + }, + { + "stop_nm": "중곡역입구", + "ycode": "37.5663404337", + "stop_no": "05125", + "xcode": "127.0816150335", + "stop_type": "일반차로", + "node_id": "104000032", + "nxtStn": "중곡3동주민센터앞" + }, + { + "stop_nm": "중곡역입구", + "ycode": "37.56666", + "stop_no": "05126", + "xcode": "127.081645", + "stop_type": "일반차로", + "node_id": "104000033", + "nxtStn": "중마초등학교.중곡제일골목시장앞" + }, + { + "stop_nm": "중곡3동주민센터앞", + "ycode": "37.568537", + "stop_no": "05127", + "xcode": "127.082792", + "stop_type": "일반차로", + "node_id": "104000034", + "nxtStn": "면곡시장앞" + }, + { + "stop_nm": "중곡3동주민센터앞", + "ycode": "37.5684915275", + "stop_no": "05128", + "xcode": "127.0826418853", + "stop_type": "일반차로", + "node_id": "104000035", + "nxtStn": "중곡역입구" + }, + { + "stop_nm": "면곡시장앞", + "ycode": "37.570795", + "stop_no": "05129", + "xcode": "127.083282", + "stop_type": "일반차로", + "node_id": "104000036", + "nxtStn": "중곡3동주민센터앞" + }, + { + "stop_nm": "면곡시장앞", + "ycode": "37.57108", + "stop_no": "05130", + "xcode": "127.083445", + "stop_type": "일반차로", + "node_id": "104000037", + "nxtStn": "중곡초등학교" + }, + { + "stop_nm": "용암사입구", + "ycode": "37.5679159934", + "stop_no": "05131", + "xcode": "127.0860566161", + "stop_type": "일반차로", + "node_id": "104000038", + "nxtStn": "대원고교앞" + }, + { + "stop_nm": "용곡삼거리", + "ycode": "37.5679334531", + "stop_no": "05132", + "xcode": "127.0855902354", + "stop_type": "일반차로", + "node_id": "104000039", + "nxtStn": "용마산하늘채아파트" + }, + { + "stop_nm": "중곡역.국립정신건강센터", + "ycode": "37.5660464177", + "stop_no": "05133", + "xcode": "127.0845454928", + "stop_type": "일반차로", + "node_id": "104000040", + "nxtStn": "용곡삼거리" + }, + { + "stop_nm": "대원고교앞", + "ycode": "37.5639660286", + "stop_no": "05134", + "xcode": "127.086708621", + "stop_type": "일반차로", + "node_id": "104000041", + "nxtStn": "구.새마을금고앞" + }, + { + "stop_nm": "용암사입구", + "ycode": "37.5678680041", + "stop_no": "05135", + "xcode": "127.0863735321", + "stop_type": "일반차로", + "node_id": "104000042", + "nxtStn": "용마산하늘채아파트" + }, + { + "stop_nm": "대원고교앞", + "ycode": "37.5641992207", + "stop_no": "05136", + "xcode": "127.0869681157", + "stop_type": "일반차로", + "node_id": "104000043", + "nxtStn": "용암사입구" + }, + { + "stop_nm": "중곡동종점", + "ycode": "37.5626950451", + "stop_no": "05137", + "xcode": "127.0873093515", + "stop_type": "일반차로", + "node_id": "104000044", + "nxtStn": "대원고교앞" + }, + { + "stop_nm": "신성시장", + "ycode": "37.5583189468", + "stop_no": "05138", + "xcode": "127.0879297616", + "stop_type": "일반차로", + "node_id": "104000045", + "nxtStn": "중곡동종점" + }, + { + "stop_nm": "중곡동입구", + "ycode": "37.5541967204", + "stop_no": "05139", + "xcode": "127.0886689538", + "stop_type": "일반차로", + "node_id": "104000046", + "nxtStn": "종로약국앞" + }, + { + "stop_nm": "어린이대공원앞", + "ycode": "37.5520458638", + "stop_no": "05140", + "xcode": "127.0770314953", + "stop_type": "일반차로", + "node_id": "104000047", + "nxtStn": "능동사거리.군자역" + }, + { + "stop_nm": "능동사거리.군자역", + "ycode": "37.5551766839", + "stop_no": "05141", + "xcode": "127.0786346746", + "stop_type": "일반차로", + "node_id": "104000048", + "nxtStn": "군자교입구" + }, + { + "stop_nm": "구의사거리.광진소방서앞", + "ycode": "37.545249575", + "stop_no": "05142", + "xcode": "127.083977653", + "stop_type": "가로변시간", + "node_id": "104000049", + "nxtStn": "어린이회관" + }, + { + "stop_nm": "어린이회관", + "ycode": "37.546155", + "stop_no": "05143", + "xcode": "127.077067", + "stop_type": "가로변시간", + "node_id": "104000050", + "nxtStn": "광진광장" + }, + { + "stop_nm": "구의사거리.광진소방서앞", + "ycode": "37.544998", + "stop_no": "05144", + "xcode": "127.084305", + "stop_type": "가로변시간", + "node_id": "104000051", + "nxtStn": "래미안구의파크스위트" + }, + { + "stop_nm": "광진경찰서", + "ycode": "37.5415336614", + "stop_no": "05145", + "xcode": "127.0836883111", + "stop_type": "일반차로", + "node_id": "104000052", + "nxtStn": "광진구청" + }, + { + "stop_nm": "광진경찰서", + "ycode": "37.5430873683", + "stop_no": "05146", + "xcode": "127.0846474366", + "stop_type": "일반차로", + "node_id": "104000053", + "nxtStn": "구의사거리" + }, + { + "stop_nm": "광진경찰서", + "ycode": "37.54221", + "stop_no": "05147", + "xcode": "127.08424", + "stop_type": "일반차로", + "node_id": "104000054", + "nxtStn": "구의사거리.광진소방서앞" + }, + { + "stop_nm": "광진구청", + "ycode": "37.538964", + "stop_no": "05148", + "xcode": "127.083407", + "stop_type": "일반차로", + "node_id": "104000055", + "nxtStn": "광진경찰서앞" + }, + { + "stop_nm": "구의역2번출구", + "ycode": "37.5377026867", + "stop_no": "05149", + "xcode": "127.0879772581", + "stop_type": "일반차로", + "node_id": "104000056", + "nxtStn": "구의역1번출구" + }, + { + "stop_nm": "래미안구의파크스위트", + "ycode": "37.544713", + "stop_no": "05150", + "xcode": "127.089012", + "stop_type": "일반차로", + "node_id": "104000057", + "nxtStn": "올림픽대교북단사거리" + }, + { + "stop_nm": "구의2동주민센터입구", + "ycode": "37.5492515718", + "stop_no": "05151", + "xcode": "127.0897846677", + "stop_type": "일반차로", + "node_id": "104000058", + "nxtStn": "구의사거리" + }, + { + "stop_nm": "구의2동주민센터입구", + "ycode": "37.5486416815", + "stop_no": "05152", + "xcode": "127.08958588", + "stop_type": "일반차로", + "node_id": "104000059", + "nxtStn": "아차산역사거리" + }, + { + "stop_nm": "구의사거리", + "ycode": "37.5456510932", + "stop_no": "05153", + "xcode": "127.0857469566", + "stop_type": "일반차로", + "node_id": "104000060", + "nxtStn": "광진경찰서" + }, + { + "stop_nm": "구의사거리", + "ycode": "37.5458173579", + "stop_no": "05154", + "xcode": "127.0863480831", + "stop_type": "일반차로", + "node_id": "104000061", + "nxtStn": "서울서광교회앞" + }, + { + "stop_nm": "래미안구의파크스위트", + "ycode": "37.5449638155", + "stop_no": "05155", + "xcode": "127.0890507143", + "stop_type": "일반차로", + "node_id": "104000062", + "nxtStn": "구의사거리.광진소방서앞" + }, + { + "stop_nm": "현대아파트앞", + "ycode": "37.5395524961", + "stop_no": "05156", + "xcode": "127.0940086584", + "stop_type": "일반차로", + "node_id": "104000063", + "nxtStn": "강변역B" + }, + { + "stop_nm": "현대아파트앞", + "ycode": "37.539643", + "stop_no": "05157", + "xcode": "127.09417", + "stop_type": "일반차로", + "node_id": "104000064", + "nxtStn": "풍납동극동.쌍용아파트" + }, + { + "stop_nm": "광진우체국", + "ycode": "37.537998", + "stop_no": "05158", + "xcode": "127.090409", + "stop_type": "일반차로", + "node_id": "104000065", + "nxtStn": "테크노마트.광진문화원" + }, + { + "stop_nm": "강변역A", + "ycode": "37.5360260082", + "stop_no": "05161", + "xcode": "127.0934995562", + "stop_type": "일반차로", + "node_id": "104000183", + "nxtStn": "잠실롯데월드호텔롯데타워" + }, + { + "stop_nm": "테크노마트앞.강변역", + "ycode": "37.536867", + "stop_no": "05162", + "xcode": "127.093756", + "stop_type": "일반차로", + "node_id": "104000279", + "nxtStn": "구의3동주민센터" + }, + { + "stop_nm": "현대2단지", + "ycode": "37.5378544595", + "stop_no": "05163", + "xcode": "127.0965438105", + "stop_type": "일반차로", + "node_id": "104000070", + "nxtStn": "강변역.테크노마트앞" + }, + { + "stop_nm": "올림픽대교북단사거리", + "ycode": "37.5433926994", + "stop_no": "05164", + "xcode": "127.0932099949", + "stop_type": "일반차로", + "node_id": "104000071", + "nxtStn": "광장자이아파트" + }, + { + "stop_nm": "올림픽대교북단사거리", + "ycode": "37.5433887171", + "stop_no": "05165", + "xcode": "127.0936875546", + "stop_type": "일반차로", + "node_id": "104000072", + "nxtStn": "래미안구의파크스위트사거리" + }, + { + "stop_nm": "광장동현대아파트앞", + "ycode": "37.54191", + "stop_no": "05166", + "xcode": "127.097768", + "stop_type": "일반차로", + "node_id": "104000073", + "nxtStn": "구의3동주민센터" + }, + { + "stop_nm": "광장동현대아파트앞", + "ycode": "37.542071", + "stop_no": "05167", + "xcode": "127.098974", + "stop_type": "일반차로", + "node_id": "104000074", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "광나루역.극동아파트", + "ycode": "37.543536", + "stop_no": "05168", + "xcode": "127.102963", + "stop_type": "일반차로", + "node_id": "104000075", + "nxtStn": "워커힐호텔비스타워커힐" + }, + { + "stop_nm": "광나루역.극동아파트", + "ycode": "37.544242", + "stop_no": "05169", + "xcode": "127.10332", + "stop_type": "일반차로", + "node_id": "104000076", + "nxtStn": "강변역A" + }, + { + "stop_nm": "워커힐아파트.광장동", + "ycode": "37.547895755", + "stop_no": "05172", + "xcode": "127.1067149694", + "stop_type": "일반차로", + "node_id": "104000271", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "워커힐아파트앞", + "ycode": "37.5504960052", + "stop_no": "05173", + "xcode": "127.1090263699", + "stop_type": "일반차로", + "node_id": "104000080", + "nxtStn": "우미내검문소.고구려대장간마을" + }, + { + "stop_nm": "워커힐입구", + "ycode": "37.550613427", + "stop_no": "05174", + "xcode": "127.1087232242", + "stop_type": "일반차로", + "node_id": "104000081", + "nxtStn": "워커힐아파트.광장동" + }, + { + "stop_nm": "광진구청", + "ycode": "37.538762", + "stop_no": "05175", + "xcode": "127.083188", + "stop_type": "일반차로", + "node_id": "104000082", + "nxtStn": "구의역4번출구" + }, + { + "stop_nm": "자양사거리", + "ycode": "37.536933", + "stop_no": "05176", + "xcode": "127.082432", + "stop_type": "일반차로", + "node_id": "104000083", + "nxtStn": "자양초등학교앞" + }, + { + "stop_nm": "자양사거리", + "ycode": "37.5367503042", + "stop_no": "05177", + "xcode": "127.0821044683", + "stop_type": "일반차로", + "node_id": "104000084", + "nxtStn": "자양동잠실대교북단" + }, + { + "stop_nm": "자양초등학교앞", + "ycode": "37.537947", + "stop_no": "05178", + "xcode": "127.078467", + "stop_type": "일반차로", + "node_id": "104000085", + "nxtStn": "건국대학교앞" + }, + { + "stop_nm": "자양초등학교앞", + "ycode": "37.537422", + "stop_no": "05179", + "xcode": "127.079265", + "stop_type": "일반차로", + "node_id": "104000086", + "nxtStn": "자양사거리" + }, + { + "stop_nm": "건국대학교앞", + "ycode": "37.538743", + "stop_no": "05180", + "xcode": "127.075048", + "stop_type": "일반차로", + "node_id": "104000087", + "nxtStn": "건대로데오거리입구" + }, + { + "stop_nm": "자양미소약국.자양골목시장", + "ycode": "37.53275", + "stop_no": "05183", + "xcode": "127.077319", + "stop_type": "일반차로", + "node_id": "104000090", + "nxtStn": "자양중학교앞" + }, + { + "stop_nm": "국민은행자양지점앞", + "ycode": "37.531572725", + "stop_no": "05185", + "xcode": "127.081413066", + "stop_type": "일반차로", + "node_id": "104000092", + "nxtStn": "국민은행자양지점" + }, + { + "stop_nm": "자양하늘채베르아파트앞", + "ycode": "37.5321922367", + "stop_no": "05187", + "xcode": "127.0846079653", + "stop_type": "일반차로", + "node_id": "104000094", + "nxtStn": "성자초등학교앞" + }, + { + "stop_nm": "자양동잠실대교북단", + "ycode": "37.5329553244", + "stop_no": "05188", + "xcode": "127.0848057104", + "stop_type": "일반차로", + "node_id": "104000095", + "nxtStn": "잠실대교전망쉼터" + }, + { + "stop_nm": "신자초등학교앞", + "ycode": "37.530442", + "stop_no": "05189", + "xcode": "127.074911", + "stop_type": "일반차로", + "node_id": "104000096", + "nxtStn": "제일은행사거리" + }, + { + "stop_nm": "자양미소약국.자양골목시장", + "ycode": "37.5327003382", + "stop_no": "05190", + "xcode": "127.0768712862", + "stop_type": "일반차로", + "node_id": "104000097", + "nxtStn": "국민은행자양지점" + }, + { + "stop_nm": "국민은행자양지점앞", + "ycode": "37.5315308364", + "stop_no": "05191", + "xcode": "127.0807386521", + "stop_type": "일반차로", + "node_id": "104000098", + "nxtStn": "성자초등학교앞" + }, + { + "stop_nm": "동서울우편집중국앞", + "ycode": "37.535052", + "stop_no": "05192", + "xcode": "127.084333", + "stop_type": "일반차로", + "node_id": "104000291", + "nxtStn": "구의역3번출구" + }, + { + "stop_nm": "자양하늘채베르아파트앞", + "ycode": "37.5319732231", + "stop_no": "05193", + "xcode": "127.0846733447", + "stop_type": "일반차로", + "node_id": "104000100", + "nxtStn": "행운슈퍼앞" + }, + { + "stop_nm": "자양동잠실대교북단", + "ycode": "37.5321201527", + "stop_no": "05194", + "xcode": "127.0858514017", + "stop_type": "일반차로", + "node_id": "104000101", + "nxtStn": "동서울우편집중국앞" + }, + { + "stop_nm": "구의역3번출구", + "ycode": "37.5375186301", + "stop_no": "05199", + "xcode": "127.0882893582", + "stop_type": "일반차로", + "node_id": "104000106", + "nxtStn": "광진우체국" + }, + { + "stop_nm": "국민은행신자양지점", + "ycode": "37.5355719112", + "stop_no": "05200", + "xcode": "127.066874712", + "stop_type": "일반차로", + "node_id": "104000107", + "nxtStn": "뚝도변전소앞" + }, + { + "stop_nm": "신양초등학교앞", + "ycode": "37.5349118182", + "stop_no": "05201", + "xcode": "127.0692877009", + "stop_type": "일반차로", + "node_id": "104000108", + "nxtStn": "자양고교앞" + }, + { + "stop_nm": "신양초등학교앞", + "ycode": "37.535233709", + "stop_no": "05202", + "xcode": "127.0689474032", + "stop_type": "일반차로", + "node_id": "104000109", + "nxtStn": "뚝도변전소앞" + }, + { + "stop_nm": "뚝도변전소앞", + "ycode": "37.536091", + "stop_no": "05203", + "xcode": "127.068908", + "stop_type": "일반차로", + "node_id": "104000110", + "nxtStn": "광진문화예술회관" + }, + { + "stop_nm": "광진문화예술회관", + "ycode": "37.5385652456", + "stop_no": "05204", + "xcode": "127.0701692006", + "stop_type": "일반차로", + "node_id": "104000111", + "nxtStn": "건국대학교앞" + }, + { + "stop_nm": "건국대학교앞", + "ycode": "37.5384461141", + "stop_no": "05205", + "xcode": "127.0748753929", + "stop_type": "일반차로", + "node_id": "104000112", + "nxtStn": "송림식당앞" + }, + { + "stop_nm": "신자초등학교앞", + "ycode": "37.530768", + "stop_no": "05209", + "xcode": "127.074922", + "stop_type": "일반차로", + "node_id": "104000116", + "nxtStn": "종점" + }, + { + "stop_nm": "자양우성아파트앞", + "ycode": "37.533798", + "stop_no": "05210", + "xcode": "127.073412", + "stop_type": "일반차로", + "node_id": "104000117", + "nxtStn": "자양종합복지관앞" + }, + { + "stop_nm": "자양우성아파트앞", + "ycode": "37.533946958", + "stop_no": "05211", + "xcode": "127.0734066984", + "stop_type": "일반차로", + "node_id": "104000118", + "nxtStn": "자양고교앞" + }, + { + "stop_nm": "자양고교앞", + "ycode": "37.5345790942", + "stop_no": "05212", + "xcode": "127.0711714016", + "stop_type": "일반차로", + "node_id": "104000119", + "nxtStn": "신양초등학교앞" + }, + { + "stop_nm": "자양고교앞", + "ycode": "37.53431586", + "stop_no": "05213", + "xcode": "127.0713601174", + "stop_type": "일반차로", + "node_id": "104000120", + "nxtStn": "자양우성아파트앞" + }, + { + "stop_nm": "대동아파트앞", + "ycode": "37.536419", + "stop_no": "05214", + "xcode": "127.068967", + "stop_type": "일반차로", + "node_id": "104000121", + "nxtStn": "신양초등학교앞" + }, + { + "stop_nm": "국민은행신자양지점", + "ycode": "37.53573", + "stop_no": "05215", + "xcode": "127.067195", + "stop_type": "일반차로", + "node_id": "104000122", + "nxtStn": "노룬산시장앞" + }, + { + "stop_nm": "노룬산시장", + "ycode": "37.5395029881", + "stop_no": "05216", + "xcode": "127.0626912618", + "stop_type": "일반차로", + "node_id": "104000123", + "nxtStn": "성수사거리" + }, + { + "stop_nm": "건대입구역6번출구", + "ycode": "37.5408268775", + "stop_no": "05217", + "xcode": "127.0672788711", + "stop_type": "일반차로", + "node_id": "104000124", + "nxtStn": "건대입구(가상)" + }, + { + "stop_nm": "건대로데오거리입구", + "ycode": "37.538919286", + "stop_no": "05218", + "xcode": "127.0699257583", + "stop_type": "일반차로", + "node_id": "104000125", + "nxtStn": "대동아파트앞" + }, + { + "stop_nm": "노룬산시장앞", + "ycode": "37.5368058708", + "stop_no": "05219", + "xcode": "127.0629447386", + "stop_type": "일반차로", + "node_id": "104000126", + "nxtStn": "영동대교북단" + }, + { + "stop_nm": "영동대교북단", + "ycode": "37.536723", + "stop_no": "05220", + "xcode": "127.061193", + "stop_type": "일반차로", + "node_id": "104000127", + "nxtStn": "노룬산시장" + }, + { + "stop_nm": "노룬산시장앞", + "ycode": "37.5366067526", + "stop_no": "05221", + "xcode": "127.0628993085", + "stop_type": "일반차로", + "node_id": "104000128", + "nxtStn": "국민은행신자양지점" + }, + { + "stop_nm": "신양초등학교앞", + "ycode": "37.533802", + "stop_no": "05222", + "xcode": "127.067918", + "stop_type": "일반차로", + "node_id": "104000129", + "nxtStn": "국민은행신자양지점" + }, + { + "stop_nm": "자양4동주민센터앞", + "ycode": "37.533632", + "stop_no": "05223", + "xcode": "127.067497", + "stop_type": "일반차로", + "node_id": "104000130", + "nxtStn": "신양초등학교앞" + }, + { + "stop_nm": "성수사거리", + "ycode": "37.5431585111", + "stop_no": "05224", + "xcode": "127.0647765888", + "stop_type": "일반차로", + "node_id": "104000131", + "nxtStn": "화양사거리" + }, + { + "stop_nm": "화양사거리", + "ycode": "37.5472318425", + "stop_no": "05225", + "xcode": "127.0670885688", + "stop_type": "일반차로", + "node_id": "104000132", + "nxtStn": "송정동서울숲아이파크" + }, + { + "stop_nm": "광진광장", + "ycode": "37.5477151717", + "stop_no": "05226", + "xcode": "127.0715209148", + "stop_type": "일반차로", + "node_id": "104000133", + "nxtStn": "어린이대공원역.화양천주교회" + }, + { + "stop_nm": "어린이대공원역.화양천주교회", + "ycode": "37.5466216409", + "stop_no": "05227", + "xcode": "127.0736284938", + "stop_type": "일반차로", + "node_id": "104000134", + "nxtStn": "한아름공원" + }, + { + "stop_nm": "한아름공원", + "ycode": "37.543765", + "stop_no": "05228", + "xcode": "127.072222", + "stop_type": "일반차로", + "node_id": "104000135", + "nxtStn": "건대입구역사거리.건대병원" + }, + { + "stop_nm": "건대입구역사거리.건대병원", + "ycode": "37.540929", + "stop_no": "05229", + "xcode": "127.07095", + "stop_type": "일반차로", + "node_id": "104000136", + "nxtStn": "건대로데오거리입구" + }, + { + "stop_nm": "건대입구역1번출구", + "ycode": "37.5408957525", + "stop_no": "05230", + "xcode": "127.0681672642", + "stop_type": "일반차로", + "node_id": "104000137", + "nxtStn": "서울효사랑병원" + }, + { + "stop_nm": "어린이대공원역3번출구", + "ycode": "37.546807", + "stop_no": "05231", + "xcode": "127.075148", + "stop_type": "일반차로", + "node_id": "104000138", + "nxtStn": "어린이회관" + }, + { + "stop_nm": "건대입구역사거리.건대병원", + "ycode": "37.540822", + "stop_no": "05232", + "xcode": "127.071248", + "stop_type": "일반차로", + "node_id": "104000139", + "nxtStn": "어린이대공원역.화양천주교회" + }, + { + "stop_nm": "어린이회관", + "ycode": "37.545273", + "stop_no": "05233", + "xcode": "127.079592", + "stop_type": "일반차로", + "node_id": "104000290", + "nxtStn": "구의사거리.광진소방서앞" + }, + { + "stop_nm": "어린이대공원역.화양천주교회", + "ycode": "37.5459043941", + "stop_no": "05234", + "xcode": "127.0735881785", + "stop_type": "일반차로", + "node_id": "104000141", + "nxtStn": "광진광장" + }, + { + "stop_nm": "송정동서울숲아이파크", + "ycode": "37.5517044591", + "stop_no": "05235", + "xcode": "127.0695975111", + "stop_type": "일반차로", + "node_id": "104000142", + "nxtStn": "송정동건영아파트" + }, + { + "stop_nm": "송정동건영아파트", + "ycode": "37.554752", + "stop_no": "05236", + "xcode": "127.071302", + "stop_type": "일반차로", + "node_id": "104000143", + "nxtStn": "군자교" + }, + { + "stop_nm": "군자교남단", + "ycode": "37.557410967", + "stop_no": "05237", + "xcode": "127.0727879339", + "stop_type": "일반차로", + "node_id": "104000144", + "nxtStn": "장한평역" + }, + { + "stop_nm": "KEB.하나은행.군자동.지점", + "ycode": "37.5577085489", + "stop_no": "05238", + "xcode": "127.0767090775", + "stop_type": "일반차로", + "node_id": "104000145", + "nxtStn": "군자삼거리" + }, + { + "stop_nm": "KEB.하나은행.군자동.지점", + "ycode": "37.5571562758", + "stop_no": "05239", + "xcode": "127.0765591034", + "stop_type": "일반차로", + "node_id": "104000146", + "nxtStn": "메리놀외방선교회" + }, + { + "stop_nm": "능동우편취급국", + "ycode": "37.5561609072", + "stop_no": "05240", + "xcode": "127.0760329007", + "stop_type": "일반차로", + "node_id": "104000147", + "nxtStn": "KEB.하나은행.군자동.지점" + }, + { + "stop_nm": "군자삼거리", + "ycode": "37.5549755455", + "stop_no": "05241", + "xcode": "127.0752869423", + "stop_type": "일반차로", + "node_id": "104000148", + "nxtStn": "세종초등학교.세종사이버대학교앞" + }, + { + "stop_nm": "군자삼거리", + "ycode": "37.5546466232", + "stop_no": "05242", + "xcode": "127.0753228303", + "stop_type": "일반차로", + "node_id": "104000149", + "nxtStn": "능동우편취급국" + }, + { + "stop_nm": "세종초등학교.세종사이버대학교앞", + "ycode": "37.553525", + "stop_no": "05243", + "xcode": "127.073395", + "stop_type": "일반차로", + "node_id": "104000150", + "nxtStn": "군자새마을금고앞" + }, + { + "stop_nm": "세종초교앞", + "ycode": "37.553868", + "stop_no": "05244", + "xcode": "127.074363", + "stop_type": "일반차로", + "node_id": "104000151", + "nxtStn": "군자삼거리" + }, + { + "stop_nm": "군자새마을금고.성동광진위센터", + "ycode": "37.5518512093", + "stop_no": "05245", + "xcode": "127.0713225073", + "stop_type": "일반차로", + "node_id": "104000152", + "nxtStn": "세종초교앞" + }, + { + "stop_nm": "군자새마을금고앞", + "ycode": "37.5513566499", + "stop_no": "05246", + "xcode": "127.0710877554", + "stop_type": "일반차로", + "node_id": "104000153", + "nxtStn": "장안초등학교" + }, + { + "stop_nm": "장안초등학교", + "ycode": "37.5486923124", + "stop_no": "05247", + "xcode": "127.070754754", + "stop_type": "일반차로", + "node_id": "104000154", + "nxtStn": "군자새마을금고.성동광진위센터" + }, + { + "stop_nm": "장안초등학교", + "ycode": "37.54858", + "stop_no": "05248", + "xcode": "127.070483", + "stop_type": "일반차로", + "node_id": "104000155", + "nxtStn": "광진광장" + }, + { + "stop_nm": "화양사거리", + "ycode": "37.5483288986", + "stop_no": "05249", + "xcode": "127.0686841693", + "stop_type": "일반차로", + "node_id": "104000293", + "nxtStn": "성동세무서" + }, + { + "stop_nm": "광진광장", + "ycode": "37.548002", + "stop_no": "05250", + "xcode": "127.07154", + "stop_type": "일반차로", + "node_id": "104000157", + "nxtStn": "장안초등학교" + }, + { + "stop_nm": "어린이대공원앞.세종대학교", + "ycode": "37.549752", + "stop_no": "05251", + "xcode": "127.07544", + "stop_type": "일반차로", + "node_id": "104000158", + "nxtStn": "어린이대공원역3번출구" + }, + { + "stop_nm": "능동교회앞", + "ycode": "37.5528739948", + "stop_no": "05252", + "xcode": "127.0769927342", + "stop_type": "일반차로", + "node_id": "104000159", + "nxtStn": "어린이대공원앞.세종대학교" + }, + { + "stop_nm": "능동사거리.군자역", + "ycode": "37.556322", + "stop_no": "05253", + "xcode": "127.07882", + "stop_type": "일반차로", + "node_id": "104000160", + "nxtStn": "능동교회앞" + }, + { + "stop_nm": "아차산역삼거리", + "ycode": "37.5545122859", + "stop_no": "05256", + "xcode": "127.0868570328", + "stop_type": "일반차로", + "node_id": "104000308", + "nxtStn": "용마초등학교" + }, + { + "stop_nm": "용마초등학교", + "ycode": "37.5565279273", + "stop_no": "05257", + "xcode": "127.0816967206", + "stop_type": "일반차로", + "node_id": "104000309", + "nxtStn": "군자역" + }, + { + "stop_nm": "어린이대공원후문", + "ycode": "37.5508666828", + "stop_no": "05258", + "xcode": "127.0905075507", + "stop_type": "일반차로", + "node_id": "104000165", + "nxtStn": "중곡동입구" + }, + { + "stop_nm": "서울화양동우체국", + "ycode": "37.548113", + "stop_no": "05259", + "xcode": "127.068776", + "stop_type": "일반차로", + "node_id": "104000310", + "nxtStn": "광진광장" + }, + { + "stop_nm": "중곡동입구", + "ycode": "37.554798956", + "stop_no": "05260", + "xcode": "127.0882622041", + "stop_type": "일반차로", + "node_id": "104000167", + "nxtStn": "아차산역삼거리" + }, + { + "stop_nm": "제일은행사거리", + "ycode": "37.5335505333", + "stop_no": "05261", + "xcode": "127.0747505569", + "stop_type": "일반차로", + "node_id": "104000168", + "nxtStn": "자양우성아파트앞" + }, + { + "stop_nm": "동곡삼거리", + "ycode": "37.563673", + "stop_no": "05262", + "xcode": "127.077955", + "stop_type": "일반차로", + "node_id": "104000169", + "nxtStn": "중곡1동사거리" + }, + { + "stop_nm": "건대병원입구", + "ycode": "37.5421084758", + "stop_no": "05263", + "xcode": "127.0714727877", + "stop_type": "일반차로", + "node_id": "104000170", + "nxtStn": "건국대학교앞" + }, + { + "stop_nm": "광진청소년수련관", + "ycode": "37.5459514944", + "stop_no": "05265", + "xcode": "127.1053745185", + "stop_type": "일반차로", + "node_id": "104000269", + "nxtStn": "광나루현대아파트" + }, + { + "stop_nm": "강변역B", + "ycode": "37.5359746179", + "stop_no": "05266", + "xcode": "127.0935345703", + "stop_type": "일반차로", + "node_id": "104000280", + "nxtStn": "동서울터미널(경유)" + }, + { + "stop_nm": "테크노마트앞.강변역", + "ycode": "37.536907", + "stop_no": "05267", + "xcode": "127.093802", + "stop_type": "일반차로", + "node_id": "104000069", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "중곡동성당", + "ycode": "37.562765", + "stop_no": "05268", + "xcode": "127.082402", + "stop_type": "일반차로", + "node_id": "104000275", + "nxtStn": "중곡2동주민센터앞" + }, + { + "stop_nm": "종합의료복합단지", + "ycode": "37.564373", + "stop_no": "05269", + "xcode": "127.083307", + "stop_type": "일반차로", + "node_id": "104000274", + "nxtStn": "중곡동성당" + }, + { + "stop_nm": "중곡역.국립정신건강센터", + "ycode": "37.5662294972", + "stop_no": "05270", + "xcode": "127.0843249567", + "stop_type": "일반차로", + "node_id": "104000273", + "nxtStn": "종합의료복합단지" + }, + { + "stop_nm": "용곡삼거리", + "ycode": "37.5685782991", + "stop_no": "05271", + "xcode": "127.0855997978", + "stop_type": "일반차로", + "node_id": "104000272", + "nxtStn": "중곡역.국립정신건강센터" + }, + { + "stop_nm": "구의3동주민센터", + "ycode": "37.539065", + "stop_no": "05272", + "xcode": "127.092544", + "stop_type": "일반차로", + "node_id": "104000302", + "nxtStn": "올림픽대교북단사거리" + }, + { + "stop_nm": "구의3동주민센터", + "ycode": "37.539049", + "stop_no": "05273", + "xcode": "127.092102", + "stop_type": "일반차로", + "node_id": "104000303", + "nxtStn": "구의역2번출구" + }, + { + "stop_nm": "광진구민체육센터", + "ycode": "37.5468671731", + "stop_no": "05298", + "xcode": "127.1077984572", + "stop_type": "일반차로", + "node_id": "104000307", + "nxtStn": "광나루우편취급국" + }, + { + "stop_nm": "광나루우편취급국", + "ycode": "37.547401", + "stop_no": "05299", + "xcode": "127.106316", + "stop_type": "일반차로", + "node_id": "104000306", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "건대입구(가상)", + "ycode": "37.5401911408", + "stop_no": "05499", + "xcode": "127.0709898289", + "stop_type": "가상정류장", + "node_id": "104000304", + "nxtStn": "건대입구역사거리.건대병원" + }, + { + "stop_nm": "중곡4동경로당입구앞", + "ycode": "37.5591306198", + "stop_no": "05500", + "xcode": "127.0939630731", + "stop_type": "마을버스", + "node_id": "104900124", + "nxtStn": "CU중곡긴고랑점앞" + }, + { + "stop_nm": "중곡아파트.종점", + "ycode": "37.5663789768", + "stop_no": "05501", + "xcode": "127.0779156425", + "stop_type": "마을버스", + "node_id": "104900085", + "nxtStn": "종점" + }, + { + "stop_nm": "긴고랑종점", + "ycode": "37.562194465", + "stop_no": "05503", + "xcode": "127.0960429247", + "stop_type": "마을버스", + "node_id": "104900059", + "nxtStn": "긴고랑주차장" + }, + { + "stop_nm": "정보도서관", + "ycode": "37.5502486719", + "stop_no": "05504", + "xcode": "127.1104622298", + "stop_type": "마을버스", + "node_id": "104900058", + "nxtStn": "한강호텔입구" + }, + { + "stop_nm": "강원설비앞", + "ycode": "37.5590029448", + "stop_no": "05505", + "xcode": "127.0901359394", + "stop_type": "마을버스", + "node_id": "104900123", + "nxtStn": "긴고랑입구" + }, + { + "stop_nm": "강원설비앞", + "ycode": "37.5588490108", + "stop_no": "05506", + "xcode": "127.0899354071", + "stop_type": "마을버스", + "node_id": "104900122", + "nxtStn": "중곡4동어린이집입구" + }, + { + "stop_nm": "중앙상회앞", + "ycode": "37.5601590013", + "stop_no": "05508", + "xcode": "127.0947974601", + "stop_type": "마을버스", + "node_id": "104900089", + "nxtStn": "중곡4동경로당입구앞" + }, + { + "stop_nm": "한강호텔입구", + "ycode": "37.5484546316", + "stop_no": "05509", + "xcode": "127.1094523282", + "stop_type": "마을버스", + "node_id": "104900057", + "nxtStn": "광나루현대아파트" + }, + { + "stop_nm": "중곡4동경로당입구앞", + "ycode": "37.5591925416", + "stop_no": "05510", + "xcode": "127.0942812172", + "stop_type": "마을버스", + "node_id": "104900121", + "nxtStn": "중앙상회앞" + }, + { + "stop_nm": "중곡아파트.기점", + "ycode": "37.566876", + "stop_no": "05511", + "xcode": "127.078165", + "stop_type": "마을버스", + "node_id": "104900128", + "nxtStn": "면곡시장" + }, + { + "stop_nm": "구.새마을금고앞", + "ycode": "37.5614417271", + "stop_no": "05512", + "xcode": "127.0871709238", + "stop_type": "마을버스", + "node_id": "104900056", + "nxtStn": "신성시장입구" + }, + { + "stop_nm": "CU중곡긴고랑점앞", + "ycode": "37.5589159963", + "stop_no": "05513", + "xcode": "127.0930312463", + "stop_type": "마을버스", + "node_id": "104900055", + "nxtStn": "중곡4동어린이집입구" + }, + { + "stop_nm": "광나루현대아파트", + "ycode": "37.546721738", + "stop_no": "05514", + "xcode": "127.1075869834", + "stop_type": "마을버스", + "node_id": "104900054", + "nxtStn": "신동아아파트" + }, + { + "stop_nm": "긴고랑주차장", + "ycode": "37.5609606399", + "stop_no": "05515", + "xcode": "127.0956309346", + "stop_type": "일반차로", + "node_id": "104000294", + "nxtStn": "중앙상회앞" + }, + { + "stop_nm": "신성시장입구", + "ycode": "37.5585269693", + "stop_no": "05517", + "xcode": "127.0880096605", + "stop_type": "마을버스", + "node_id": "104900053", + "nxtStn": "마을금고.브레드제과점" + }, + { + "stop_nm": "중곡4동어린이집입구", + "ycode": "37.5586845522", + "stop_no": "05518", + "xcode": "127.0917043706", + "stop_type": "마을버스", + "node_id": "104900052", + "nxtStn": "강원설비앞" + }, + { + "stop_nm": "신동아아파트", + "ycode": "37.54635", + "stop_no": "05519", + "xcode": "127.10533", + "stop_type": "마을버스", + "node_id": "104900109", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "마을금고.브레드제과점", + "ycode": "37.5576339581", + "stop_no": "05522", + "xcode": "127.0892468924", + "stop_type": "마을버스", + "node_id": "104900051", + "nxtStn": "우리들약국" + }, + { + "stop_nm": "긴고랑입구", + "ycode": "37.5588770015", + "stop_no": "05523", + "xcode": "127.0886688403", + "stop_type": "마을버스", + "node_id": "104900049", + "nxtStn": "신성시장앞" + }, + { + "stop_nm": "우리들약국", + "ycode": "37.5569014807", + "stop_no": "05527", + "xcode": "127.0902850791", + "stop_type": "마을버스", + "node_id": "104900048", + "nxtStn": "해오름공원입구" + }, + { + "stop_nm": "광남고.삼성아파트", + "ycode": "37.5419477863", + "stop_no": "05528", + "xcode": "127.1014183009", + "stop_type": "마을버스", + "node_id": "104900050", + "nxtStn": "현대3차아파트" + }, + { + "stop_nm": "해오름공원입구", + "ycode": "37.5563079173", + "stop_no": "05531", + "xcode": "127.0911230749", + "stop_type": "마을버스", + "node_id": "104900047", + "nxtStn": "기원정사입구" + }, + { + "stop_nm": "현대3차아파트", + "ycode": "37.5404651876", + "stop_no": "05533", + "xcode": "127.0996486938", + "stop_type": "마을버스", + "node_id": "104900046", + "nxtStn": "현대2단지" + }, + { + "stop_nm": "기업은행.용마사거리", + "ycode": "37.5624460371", + "stop_no": "05535", + "xcode": "127.0814330674", + "stop_type": "마을버스", + "node_id": "104900045", + "nxtStn": "중곡우체국앞" + }, + { + "stop_nm": "기원정사입구", + "ycode": "37.5548826175", + "stop_no": "05536", + "xcode": "127.0931371525", + "stop_type": "마을버스", + "node_id": "104900044", + "nxtStn": "영화사입구" + }, + { + "stop_nm": "송림식당앞", + "ycode": "37.5368221134", + "stop_no": "05539", + "xcode": "127.0766299665", + "stop_type": "마을버스", + "node_id": "104900042", + "nxtStn": "자양중학교앞" + }, + { + "stop_nm": "중곡우체국앞", + "ycode": "37.5611637445", + "stop_no": "05540", + "xcode": "127.0840577691", + "stop_type": "마을버스", + "node_id": "104900041", + "nxtStn": "중곡보건지소" + }, + { + "stop_nm": "영화사입구", + "ycode": "37.5542285469", + "stop_no": "05541", + "xcode": "127.0941176381", + "stop_type": "마을버스", + "node_id": "104900040", + "nxtStn": "성안약국" + }, + { + "stop_nm": "군자역", + "ycode": "37.5578748138", + "stop_no": "05542", + "xcode": "127.0800822765", + "stop_type": "마을버스", + "node_id": "104900039", + "nxtStn": "중곡2동주민센터앞" + }, + { + "stop_nm": "강변역.테크노마트앞", + "ycode": "37.5363934727", + "stop_no": "05543", + "xcode": "127.0948590232", + "stop_type": "마을버스", + "node_id": "104900038", + "nxtStn": "테크노마트앞.강변역" + }, + { + "stop_nm": "자양중학교앞", + "ycode": "37.5346905273", + "stop_no": "05544", + "xcode": "127.0759963869", + "stop_type": "마을버스", + "node_id": "104900037", + "nxtStn": "자양미소약국.자양골목시장" + }, + { + "stop_nm": "성안약국", + "ycode": "37.5532100607", + "stop_no": "05545", + "xcode": "127.0932969209", + "stop_type": "마을버스", + "node_id": "104900036", + "nxtStn": "지영슈퍼" + }, + { + "stop_nm": "지영슈퍼", + "ycode": "37.5518187362", + "stop_no": "05549", + "xcode": "127.0921939479", + "stop_type": "마을버스", + "node_id": "104900035", + "nxtStn": "아차산역사거리" + }, + { + "stop_nm": "구의역", + "ycode": "37.5382387949", + "stop_no": "05550", + "xcode": "127.0892373497", + "stop_type": "마을버스", + "node_id": "104900100", + "nxtStn": "구의홈마트앞" + }, + { + "stop_nm": "국민은행자양지점", + "ycode": "37.5319860054", + "stop_no": "05551", + "xcode": "127.0792387772", + "stop_type": "마을버스", + "node_id": "104900112", + "nxtStn": "국민은행자양지점앞" + }, + { + "stop_nm": "아차산역사거리", + "ycode": "37.550722", + "stop_no": "05553", + "xcode": "127.091307", + "stop_type": "마을버스", + "node_id": "104900034", + "nxtStn": "선화예고앞" + }, + { + "stop_nm": "중곡보건지소", + "ycode": "37.5595305795", + "stop_no": "05554", + "xcode": "127.0870747483", + "stop_type": "마을버스", + "node_id": "104900033", + "nxtStn": "긴고랑입구" + }, + { + "stop_nm": "미니스톱구의중앙점앞", + "ycode": "37.5415506336", + "stop_no": "05555", + "xcode": "127.0900164716", + "stop_type": "마을버스", + "node_id": "104900102", + "nxtStn": "래미안구의파크스위트사거리" + }, + { + "stop_nm": "영동대교입구.성수사거리", + "ycode": "37.5423991251", + "stop_no": "05556", + "xcode": "127.0643413763", + "stop_type": "마을버스", + "node_id": "104900031", + "nxtStn": "화양동현대아파트" + }, + { + "stop_nm": "선화예고앞", + "ycode": "37.5494847466", + "stop_no": "05558", + "xcode": "127.0900588338", + "stop_type": "마을버스", + "node_id": "104900030", + "nxtStn": "한국켄트외국인학교" + }, + { + "stop_nm": "긴고랑입구", + "ycode": "37.5587364311", + "stop_no": "05559", + "xcode": "127.0886686737", + "stop_type": "마을버스", + "node_id": "104900029", + "nxtStn": "강원설비앞" + }, + { + "stop_nm": "구의홈마트앞", + "ycode": "37.5402902234", + "stop_no": "05560", + "xcode": "127.0897229975", + "stop_type": "마을버스", + "node_id": "104900032", + "nxtStn": "미니스톱구의중앙점앞" + }, + { + "stop_nm": "화양동현대아파트", + "ycode": "37.5439827587", + "stop_no": "05561", + "xcode": "127.0652401586", + "stop_type": "마을버스", + "node_id": "104900028", + "nxtStn": "성수대우프레시아1차아파트" + }, + { + "stop_nm": "성자초등학교앞", + "ycode": "37.5313000096", + "stop_no": "05562", + "xcode": "127.0822557273", + "stop_type": "마을버스", + "node_id": "104900114", + "nxtStn": "자양하늘채베르아파트앞" + }, + { + "stop_nm": "한국켄트외국인학교", + "ycode": "37.5477299911", + "stop_no": "05563", + "xcode": "127.0880988204", + "stop_type": "마을버스", + "node_id": "104900027", + "nxtStn": "구의사거리" + }, + { + "stop_nm": "중곡4동어린이집입구", + "ycode": "37.5585169771", + "stop_no": "05564", + "xcode": "127.0916679445", + "stop_type": "마을버스", + "node_id": "104900026", + "nxtStn": "CU중곡긴고랑점앞" + }, + { + "stop_nm": "래미안구의파크스위트사거리", + "ycode": "37.5440489261", + "stop_no": "05565", + "xcode": "127.0906000271", + "stop_type": "마을버스", + "node_id": "104900025", + "nxtStn": "올림픽대교북단사거리" + }, + { + "stop_nm": "성수대우프레시아1차아파트", + "ycode": "37.5452943403", + "stop_no": "05566", + "xcode": "127.0659848276", + "stop_type": "마을버스", + "node_id": "104900024", + "nxtStn": "화양사거리SKV1센터" + }, + { + "stop_nm": "CU중곡긴고랑점앞", + "ycode": "37.5587592285", + "stop_no": "05569", + "xcode": "127.0930027538", + "stop_type": "마을버스", + "node_id": "104900023", + "nxtStn": "중곡4동경로당입구앞" + }, + { + "stop_nm": "화양사거리SKV1센터", + "ycode": "37.546257", + "stop_no": "05571", + "xcode": "127.06641", + "stop_type": "마을버스", + "node_id": "104900022", + "nxtStn": "왕약국" + }, + { + "stop_nm": "행운슈퍼앞", + "ycode": "37.5329501167", + "stop_no": "05572", + "xcode": "127.0870098898", + "stop_type": "마을버스", + "node_id": "104900116", + "nxtStn": "한창주택" + }, + { + "stop_nm": "중앙상회앞", + "ycode": "37.56016", + "stop_no": "05574", + "xcode": "127.094972", + "stop_type": "마을버스", + "node_id": "104900021", + "nxtStn": "종점" + }, + { + "stop_nm": "한창주택", + "ycode": "37.5336144423", + "stop_no": "05576", + "xcode": "127.0891356598", + "stop_type": "마을버스", + "node_id": "104900106", + "nxtStn": "구의아크로리버앞" + }, + { + "stop_nm": "광장중학교앞", + "ycode": "37.5467903263", + "stop_no": "05578", + "xcode": "127.1024015366", + "stop_type": "마을버스", + "node_id": "104900020", + "nxtStn": "장신대앞" + }, + { + "stop_nm": "구의아크로리버앞", + "ycode": "37.5352926857", + "stop_no": "05579", + "xcode": "127.0921362577", + "stop_type": "마을버스", + "node_id": "104900099", + "nxtStn": "강변역A" + }, + { + "stop_nm": "구의역4번출구", + "ycode": "37.5366543055", + "stop_no": "05580", + "xcode": "127.084837057", + "stop_type": "마을버스", + "node_id": "104900019", + "nxtStn": "구의역3번출구" + }, + { + "stop_nm": "장신대앞", + "ycode": "37.5475393553", + "stop_no": "05581", + "xcode": "127.1052273651", + "stop_type": "마을버스", + "node_id": "104900018", + "nxtStn": "워커힐아파트입구" + }, + { + "stop_nm": "강변역A", + "ycode": "37.535988", + "stop_no": "05582", + "xcode": "127.093833", + "stop_type": "마을버스", + "node_id": "104900097", + "nxtStn": "동서울호텔앞" + }, + { + "stop_nm": "워커힐아파트입구", + "ycode": "37.5479203339", + "stop_no": "05584", + "xcode": "127.1066256895", + "stop_type": "마을버스", + "node_id": "104900110", + "nxtStn": "워커힐아파트" + }, + { + "stop_nm": "동서울호텔앞", + "ycode": "37.5345349158", + "stop_no": "05585", + "xcode": "127.0920685648", + "stop_type": "마을버스", + "node_id": "104900103", + "nxtStn": "한창주택" + }, + { + "stop_nm": "워커힐아파트", + "ycode": "37.5500035243", + "stop_no": "05587", + "xcode": "127.1075883052", + "stop_type": "마을버스", + "node_id": "104900017", + "nxtStn": "워커힐아파트입구" + }, + { + "stop_nm": "한창주택", + "ycode": "37.5337153779", + "stop_no": "05588", + "xcode": "127.0891188071", + "stop_type": "마을버스", + "node_id": "104900107", + "nxtStn": "행운슈퍼앞" + }, + { + "stop_nm": "행운슈퍼앞", + "ycode": "37.5330699358", + "stop_no": "05589", + "xcode": "127.0870462374", + "stop_type": "마을버스", + "node_id": "104900016", + "nxtStn": "자양하늘채베르아파트앞" + }, + { + "stop_nm": "워커힐아파트입구", + "ycode": "37.5480904595", + "stop_no": "05591", + "xcode": "127.1064754858", + "stop_type": "마을버스", + "node_id": "104900015", + "nxtStn": "장신대앞" + }, + { + "stop_nm": "구의역1번출구", + "ycode": "37.536929", + "stop_no": "05594", + "xcode": "127.084791", + "stop_type": "마을버스", + "node_id": "104900014", + "nxtStn": "광진구청" + }, + { + "stop_nm": "장신대앞", + "ycode": "37.5476304504", + "stop_no": "05595", + "xcode": "127.1051324275", + "stop_type": "마을버스", + "node_id": "104900013", + "nxtStn": "광장중학교앞" + }, + { + "stop_nm": "성자초등학교앞", + "ycode": "37.5315196593", + "stop_no": "05596", + "xcode": "127.0825682599", + "stop_type": "마을버스", + "node_id": "104900115", + "nxtStn": "국민은행자양지점앞" + }, + { + "stop_nm": "광장중학교앞", + "ycode": "37.5469479421", + "stop_no": "05597", + "xcode": "127.1024888949", + "stop_type": "마을버스", + "node_id": "104900012", + "nxtStn": "한전삼거리" + }, + { + "stop_nm": "광진경찰서앞", + "ycode": "37.542346877", + "stop_no": "05599", + "xcode": "127.0843546327", + "stop_type": "마을버스", + "node_id": "104900091", + "nxtStn": "구의사거리" + }, + { + "stop_nm": "한전삼거리", + "ycode": "37.5454433478", + "stop_no": "05600", + "xcode": "127.097965691", + "stop_type": "마을버스", + "node_id": "104900011", + "nxtStn": "청구아파트앞" + }, + { + "stop_nm": "자양동", + "ycode": "37.535609", + "stop_no": "05665", + "xcode": "127.067637", + "stop_type": "일반차로", + "node_id": "104000236", + "nxtStn": "성수119안전센터" + }, + { + "stop_nm": "자양동", + "ycode": "37.535636", + "stop_no": "05666", + "xcode": "127.066848", + "stop_type": "일반차로", + "node_id": "104000237", + "nxtStn": "광진구의회" + }, + { + "stop_nm": "국민은행자양지점", + "ycode": "37.532277", + "stop_no": "05668", + "xcode": "127.079026", + "stop_type": "마을버스", + "node_id": "104900113", + "nxtStn": "자양미소약국.자양골목시장" + }, + { + "stop_nm": "청구아파트앞", + "ycode": "37.5423895999", + "stop_no": "05670", + "xcode": "127.0967938276", + "stop_type": "마을버스", + "node_id": "104900010", + "nxtStn": "광장자이아파트" + }, + { + "stop_nm": "광장자이아파트", + "ycode": "37.542253", + "stop_no": "05671", + "xcode": "127.094923", + "stop_type": "마을버스", + "node_id": "104900127", + "nxtStn": "올림픽대교북단사거리" + }, + { + "stop_nm": "서울서광교회앞", + "ycode": "37.5475847263", + "stop_no": "05672", + "xcode": "127.088351026", + "stop_type": "마을버스", + "node_id": "104900009", + "nxtStn": "구의2동주민센터입구" + }, + { + "stop_nm": "자양중학교앞", + "ycode": "37.5346353803", + "stop_no": "05677", + "xcode": "127.0762758207", + "stop_type": "마을버스", + "node_id": "104900007", + "nxtStn": "자양1파출소앞" + }, + { + "stop_nm": "래미안구의파크스위트사거리", + "ycode": "37.5441301287", + "stop_no": "05679", + "xcode": "127.0904643237", + "stop_type": "마을버스", + "node_id": "104900006", + "nxtStn": "미니스톱구의중앙점앞" + }, + { + "stop_nm": "자양1파출소앞", + "ycode": "37.5367651642", + "stop_no": "05680", + "xcode": "127.0769071428", + "stop_type": "마을버스", + "node_id": "104900005", + "nxtStn": "건국대학교앞" + }, + { + "stop_nm": "면곡시장", + "ycode": "37.571462406", + "stop_no": "05687", + "xcode": "127.0813749581", + "stop_type": "일반차로", + "node_id": "104000248", + "nxtStn": "면곡시장앞" + }, + { + "stop_nm": "동곡삼거리", + "ycode": "37.563803", + "stop_no": "05690", + "xcode": "127.078265", + "stop_type": "일반차로", + "node_id": "104000251", + "nxtStn": "중곡아파트.종점" + }, + { + "stop_nm": "광진구의회", + "ycode": "37.5391969456", + "stop_no": "05694", + "xcode": "127.0701166071", + "stop_type": "일반차로", + "node_id": "104000255", + "nxtStn": "자양동" + }, + { + "stop_nm": "광진구의회", + "ycode": "37.538333", + "stop_no": "05695", + "xcode": "127.070083", + "stop_type": "일반차로", + "node_id": "104000256", + "nxtStn": "건대입구역" + }, + { + "stop_nm": "건대입구역", + "ycode": "37.5433804463", + "stop_no": "05696", + "xcode": "127.0720930253", + "stop_type": "일반차로", + "node_id": "104000257", + "nxtStn": "광진구의회" + }, + { + "stop_nm": "건대입구역", + "ycode": "37.5422803253", + "stop_no": "05697", + "xcode": "127.0719007166", + "stop_type": "일반차로", + "node_id": "104000258", + "nxtStn": "세종대학교" + }, + { + "stop_nm": "세종대학교", + "ycode": "37.5498616561", + "stop_no": "05698", + "xcode": "127.0755658718", + "stop_type": "일반차로", + "node_id": "104000259", + "nxtStn": "건대입구역" + }, + { + "stop_nm": "세종대학교", + "ycode": "37.5498550499", + "stop_no": "05699", + "xcode": "127.0760310216", + "stop_type": "일반차로", + "node_id": "104000260", + "nxtStn": "군자역" + }, + { + "stop_nm": "군자역", + "ycode": "37.5563636008", + "stop_no": "05700", + "xcode": "127.0788605078", + "stop_type": "일반차로", + "node_id": "104000261", + "nxtStn": "세종대학교" + }, + { + "stop_nm": "군자역", + "ycode": "37.555206", + "stop_no": "05701", + "xcode": "127.078641", + "stop_type": "일반차로", + "node_id": "104000262", + "nxtStn": "군자교입구" + }, + { + "stop_nm": "지영슈퍼", + "ycode": "37.5517744916", + "stop_no": "05709", + "xcode": "127.0923104685", + "stop_type": "마을버스", + "node_id": "104900004", + "nxtStn": "성안약국" + }, + { + "stop_nm": "미니스톱구의중앙점앞", + "ycode": "37.5415633601", + "stop_no": "05710", + "xcode": "127.089870505", + "stop_type": "마을버스", + "node_id": "104900098", + "nxtStn": "구의홈마트앞" + }, + { + "stop_nm": "성안약국", + "ycode": "37.5531415024", + "stop_no": "05713", + "xcode": "127.0933919081", + "stop_type": "마을버스", + "node_id": "104900003", + "nxtStn": "영화사입구" + }, + { + "stop_nm": "구의홈마트앞", + "ycode": "37.5403191787", + "stop_no": "05714", + "xcode": "127.089564605", + "stop_type": "마을버스", + "node_id": "104900002", + "nxtStn": "구의역" + }, + { + "stop_nm": "종로약국앞", + "ycode": "37.5575879581", + "stop_no": "05716", + "xcode": "127.0881058981", + "stop_type": "마을버스", + "node_id": "104900001", + "nxtStn": "중곡보건지소" + }, + { + "stop_nm": "영화사입구", + "ycode": "37.5540834447", + "stop_no": "05717", + "xcode": "127.0941502787", + "stop_type": "마을버스", + "node_id": "104900080", + "nxtStn": "기원정사입구" + }, + { + "stop_nm": "구의역", + "ycode": "37.5382758492", + "stop_no": "05718", + "xcode": "127.08909255", + "stop_type": "마을버스", + "node_id": "104900079", + "nxtStn": "광진우체국" + }, + { + "stop_nm": "기원정사입구", + "ycode": "37.5552791459", + "stop_no": "05720", + "xcode": "127.0930430702", + "stop_type": "마을버스", + "node_id": "104900078", + "nxtStn": "해오름공원입구" + }, + { + "stop_nm": "테크노마트.광진문화원", + "ycode": "37.5370205329", + "stop_no": "05721", + "xcode": "127.0961011535", + "stop_type": "마을버스", + "node_id": "104900077", + "nxtStn": "프라임아파트앞" + }, + { + "stop_nm": "해오름공원입구", + "ycode": "37.5563302584", + "stop_no": "05723", + "xcode": "127.0913641894", + "stop_type": "마을버스", + "node_id": "104900076", + "nxtStn": "우리들약국" + }, + { + "stop_nm": "프라임아파트앞", + "ycode": "37.5378379672", + "stop_no": "05724", + "xcode": "127.0970323661", + "stop_type": "마을버스", + "node_id": "104900075", + "nxtStn": "현대3.5차아파트" + }, + { + "stop_nm": "용마사거리", + "ycode": "37.5627570449", + "stop_no": "05726", + "xcode": "127.0812432362", + "stop_type": "마을버스", + "node_id": "104900082", + "nxtStn": "동곡삼거리" + }, + { + "stop_nm": "우리들약국", + "ycode": "37.5570437893", + "stop_no": "05727", + "xcode": "127.0903690097", + "stop_type": "마을버스", + "node_id": "104900074", + "nxtStn": "마을금고앞" + }, + { + "stop_nm": "현대3.5차아파트", + "ycode": "37.5407790748", + "stop_no": "05728", + "xcode": "127.1003518538", + "stop_type": "마을버스", + "node_id": "104900073", + "nxtStn": "광남고.삼성아파트" + }, + { + "stop_nm": "마을금고앞", + "ycode": "37.5577311656", + "stop_no": "05731", + "xcode": "127.0893930217", + "stop_type": "마을버스", + "node_id": "104900072", + "nxtStn": "신성시장입구" + }, + { + "stop_nm": "광남고.삼성아파트", + "ycode": "37.5423430827", + "stop_no": "05732", + "xcode": "127.1017492793", + "stop_type": "마을버스", + "node_id": "104900108", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "자양종합복지관앞", + "ycode": "37.532469", + "stop_no": "05733", + "xcode": "127.075441", + "stop_type": "마을버스", + "node_id": "104900071", + "nxtStn": "신자초등학교앞" + }, + { + "stop_nm": "신성시장입구", + "ycode": "37.5586702034", + "stop_no": "05735", + "xcode": "127.0880630283", + "stop_type": "마을버스", + "node_id": "104900070", + "nxtStn": "대순진리회앞.구.새마을금고" + }, + { + "stop_nm": "대순진리회앞.구.새마을금고", + "ycode": "37.5609548433", + "stop_no": "05737", + "xcode": "127.0875676658", + "stop_type": "마을버스", + "node_id": "104900068", + "nxtStn": "대원외고앞" + }, + { + "stop_nm": "대원외고앞", + "ycode": "37.5632448358", + "stop_no": "05739", + "xcode": "127.0871413296", + "stop_type": "마을버스", + "node_id": "104900067", + "nxtStn": "중곡4동파출소" + }, + { + "stop_nm": "광나루현대아파트", + "ycode": "37.5466936524", + "stop_no": "05740", + "xcode": "127.1077533058", + "stop_type": "마을버스", + "node_id": "104900066", + "nxtStn": "한강호텔입구" + }, + { + "stop_nm": "중곡4동파출소", + "ycode": "37.5654194455", + "stop_no": "05741", + "xcode": "127.0867703018", + "stop_type": "마을버스", + "node_id": "104900065", + "nxtStn": "용암사입구" + }, + { + "stop_nm": "한강호텔입구", + "ycode": "37.5482745397", + "stop_no": "05742", + "xcode": "127.1093151239", + "stop_type": "마을버스", + "node_id": "104900064", + "nxtStn": "워커힐팰리스" + }, + { + "stop_nm": "워커힐팰리스", + "ycode": "37.5500133218", + "stop_no": "05744", + "xcode": "127.1096719072", + "stop_type": "마을버스", + "node_id": "104900063", + "nxtStn": "종점" + }, + { + "stop_nm": "워커힐호텔비스타워커힐", + "ycode": "37.5542416044", + "stop_no": "05745", + "xcode": "127.1102655251", + "stop_type": "일반차로", + "node_id": "104000281", + "nxtStn": "광나루역.극동아파트" + }, + { + "stop_nm": "아차산역사거리", + "ycode": "37.5506719315", + "stop_no": "05752", + "xcode": "127.0914351492", + "stop_type": "마을버스", + "node_id": "104900061", + "nxtStn": "지영슈퍼" + }, + { + "stop_nm": "중곡119안전센터", + "ycode": "37.5667567645", + "stop_no": "05755", + "xcode": "127.0862442255", + "stop_type": "마을버스", + "node_id": "104900125", + "nxtStn": "대원고교앞" + }, + { + "stop_nm": "구의3동주민센터", + "ycode": "37.538005", + "stop_no": "05757", + "xcode": "127.091613", + "stop_type": "마을버스", + "node_id": "104900133", + "nxtStn": "구의역" + }, + { + "stop_nm": "뚝섬유원지", + "ycode": "37.5310817825", + "stop_no": "05900", + "xcode": "127.0667912942", + "stop_type": "일반차로", + "node_id": "104000300", + "nxtStn": "잠실역1번.11번출구" + }, + { + "stop_nm": "건국대입구", + "ycode": "37.5411150129", + "stop_no": "05901", + "xcode": "127.0675636466", + "stop_type": "일반차로", + "node_id": "104000301", + "nxtStn": "성수역수제화거리" + }, + { + "stop_nm": "광장자이아파트", + "ycode": "37.5421672546", + "stop_no": "05990", + "xcode": "127.0949108596", + "stop_type": "마을버스", + "node_id": "104900126", + "nxtStn": "청구아파트앞" + }, + { + "stop_nm": "한전삼거리", + "ycode": "37.5452405574", + "stop_no": "05992", + "xcode": "127.0980186154", + "stop_type": "마을버스", + "node_id": "104900119", + "nxtStn": "광장중학교앞" + }, + { + "stop_nm": "청구아파트앞", + "ycode": "37.5432605587", + "stop_no": "05993", + "xcode": "127.0961815897", + "stop_type": "마을버스", + "node_id": "104900118", + "nxtStn": "한전삼거리" + }, + { + "stop_nm": "용마사거리", + "ycode": "37.561856", + "stop_no": "05994", + "xcode": "127.08221", + "stop_type": "마을버스", + "node_id": "104900132", + "nxtStn": "중곡우체국앞" + }, + { + "stop_nm": "강변역.테크노마트앞", + "ycode": "37.536342", + "stop_no": "05999", + "xcode": "127.094792", + "stop_type": "마을버스", + "node_id": "104900129", + "nxtStn": "현대아파트앞" + }, + { + "stop_nm": "답십리역사거리", + "ycode": "37.5651870868", + "stop_no": "06001", + "xcode": "127.0550604632", + "stop_type": "중앙차로", + "node_id": "105000001", + "nxtStn": "신답초등학교.청계한신휴플러스" + }, + { + "stop_nm": "청년회의소", + "ycode": "37.5619653169", + "stop_no": "06002", + "xcode": "127.0612838214", + "stop_type": "중앙차로", + "node_id": "105000002", + "nxtStn": "답십리역사거리" + }, + { + "stop_nm": "장한평역", + "ycode": "37.5611510646", + "stop_no": "06003", + "xcode": "127.0672869559", + "stop_type": "중앙차로", + "node_id": "105000003", + "nxtStn": "청년회의소" + }, + { + "stop_nm": "신답초등학교.청계한신휴플러스", + "ycode": "37.571753", + "stop_no": "06004", + "xcode": "127.044292", + "stop_type": "중앙차로", + "node_id": "105000004", + "nxtStn": "답십리역사거리" + }, + { + "stop_nm": "신답초등학교.청계한신휴플러스", + "ycode": "37.5717559096", + "stop_no": "06005", + "xcode": "127.0447281029", + "stop_type": "중앙차로", + "node_id": "105000005", + "nxtStn": "동대문구청.용신동주민센터" + }, + { + "stop_nm": "동대문구청", + "ycode": "37.5741", + "stop_no": "06006", + "xcode": "127.038322", + "stop_type": "중앙차로", + "node_id": "105000006", + "nxtStn": "서울시동부병원" + }, + { + "stop_nm": "서울시동부병원", + "ycode": "37.5739292519", + "stop_no": "06007", + "xcode": "127.0309536211", + "stop_type": "중앙차로", + "node_id": "105000007", + "nxtStn": "신설동역.서울풍물시장" + }, + { + "stop_nm": "신설동역.서울풍물시장", + "ycode": "37.574427911", + "stop_no": "06008", + "xcode": "127.0257176822", + "stop_type": "중앙차로", + "node_id": "105000008", + "nxtStn": "동묘앞" + }, + { + "stop_nm": "중랑교", + "ycode": "37.5917575509", + "stop_no": "06009", + "xcode": "127.0676664848", + "stop_type": "중앙차로", + "node_id": "105000009", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "중랑교", + "ycode": "37.591426", + "stop_no": "06010", + "xcode": "127.066835", + "stop_type": "중앙차로", + "node_id": "105000010", + "nxtStn": "중랑역.동부시장" + }, + { + "stop_nm": "삼육서울병원", + "ycode": "37.589692", + "stop_no": "06011", + "xcode": "127.060685", + "stop_type": "중앙차로", + "node_id": "105000011", + "nxtStn": "시조사삼거리" + }, + { + "stop_nm": "삼육서울병원", + "ycode": "37.59", + "stop_no": "06012", + "xcode": "127.061955", + "stop_type": "중앙차로", + "node_id": "105000012", + "nxtStn": "중랑교" + }, + { + "stop_nm": "시조사삼거리", + "ycode": "37.588707", + "stop_no": "06013", + "xcode": "127.056888", + "stop_type": "중앙차로", + "node_id": "105000013", + "nxtStn": "떡전교사거리.동대문노인복지관" + }, + { + "stop_nm": "떡전교사거리.동대문노인복지관", + "ycode": "37.5864447699", + "stop_no": "06014", + "xcode": "127.0520133159", + "stop_type": "중앙차로", + "node_id": "105000014", + "nxtStn": "청량리미주아파트.동대문세무서" + }, + { + "stop_nm": "청량리역환승센타", + "ycode": "37.5804025104", + "stop_no": "06015", + "xcode": "127.0454307288", + "stop_type": "중앙차로", + "node_id": "105000015", + "nxtStn": "청량리.청과물도매시장" + }, + { + "stop_nm": "청량리역환승센타", + "ycode": "37.5802508767", + "stop_no": "06016", + "xcode": "127.0460771387", + "stop_type": "중앙차로", + "node_id": "105000016", + "nxtStn": "서울성심병원" + }, + { + "stop_nm": "동대문구청", + "ycode": "37.5734588708", + "stop_no": "06017", + "xcode": "127.0399889148", + "stop_type": "중앙차로", + "node_id": "105000017", + "nxtStn": "신답초등학교.청계한신휴플러스" + }, + { + "stop_nm": "청량리역환승센터", + "ycode": "37.580223", + "stop_no": "06018", + "xcode": "127.045748", + "stop_type": "중앙차로", + "node_id": "105000447", + "nxtStn": "서울성심병원" + }, + { + "stop_nm": "청량리역환승센터", + "ycode": "37.580304", + "stop_no": "06019", + "xcode": "127.045721", + "stop_type": "중앙차로", + "node_id": "105000446", + "nxtStn": "서울성심병원" + }, + { + "stop_nm": "청량리역환승센터", + "ycode": "37.580672", + "stop_no": "06020", + "xcode": "127.045381", + "stop_type": "중앙차로", + "node_id": "105000402", + "nxtStn": "현대코아" + }, + { + "stop_nm": "청량리미주아파트.동대문세무서", + "ycode": "37.58278", + "stop_no": "06021", + "xcode": "127.048395", + "stop_type": "중앙차로", + "node_id": "105000478", + "nxtStn": "청량리역환승센타" + }, + { + "stop_nm": "청량리.청과물도매시장", + "ycode": "37.578798", + "stop_no": "06022", + "xcode": "127.040598", + "stop_type": "중앙차로", + "node_id": "105000480", + "nxtStn": "제기동역.서울약령시" + }, + { + "stop_nm": "제기동역.서울약령시", + "ycode": "37.578144", + "stop_no": "06023", + "xcode": "127.037779", + "stop_type": "중앙차로", + "node_id": "105000482", + "nxtStn": "청량리역" + }, + { + "stop_nm": "제기동역.서울약령시", + "ycode": "37.5782338521", + "stop_no": "06024", + "xcode": "127.0365057166", + "stop_type": "중앙차로", + "node_id": "105000481", + "nxtStn": "용두동사거리.한국의류시험연구원" + }, + { + "stop_nm": "용두동사거리", + "ycode": "37.5775320632", + "stop_no": "06025", + "xcode": "127.0299882252", + "stop_type": "중앙차로", + "node_id": "105000484", + "nxtStn": "제기동역.서울약령시" + }, + { + "stop_nm": "용두동사거리.한국의류시험연구원", + "ycode": "37.5771723903", + "stop_no": "06026", + "xcode": "127.0282360085", + "stop_type": "중앙차로", + "node_id": "105000483", + "nxtStn": "신설동역" + }, + { + "stop_nm": "신설동역", + "ycode": "37.5761500409", + "stop_no": "06027", + "xcode": "127.0250446359", + "stop_type": "중앙차로", + "node_id": "105000486", + "nxtStn": "용두동사거리" + }, + { + "stop_nm": "신설동역", + "ycode": "37.575826798", + "stop_no": "06028", + "xcode": "127.0238433051", + "stop_type": "중앙차로", + "node_id": "105000485", + "nxtStn": "동묘앞" + }, + { + "stop_nm": "신설동역", + "ycode": "37.576453593", + "stop_no": "06101", + "xcode": "127.0255836506", + "stop_type": "가로변시간", + "node_id": "105000018", + "nxtStn": "신설동역1번출구" + }, + { + "stop_nm": "신설동역", + "ycode": "37.5762453617", + "stop_no": "06102", + "xcode": "127.025947005", + "stop_type": "일반차로", + "node_id": "105000019", + "nxtStn": "용두로타리한국의류시험연구원" + }, + { + "stop_nm": "용두동한국의류시험연구원", + "ycode": "37.5775187657", + "stop_no": "06103", + "xcode": "127.029114172", + "stop_type": "가로변시간", + "node_id": "105000020", + "nxtStn": "신설동역" + }, + { + "stop_nm": "용두로타리한국의류시험연구원", + "ycode": "37.5772564569", + "stop_no": "06104", + "xcode": "127.0294820292", + "stop_type": "가로변시간", + "node_id": "105000021", + "nxtStn": "서울시동부병원" + }, + { + "stop_nm": "제기역약령시장", + "ycode": "37.5782970238", + "stop_no": "06105", + "xcode": "127.0366096265", + "stop_type": "일반차로", + "node_id": "105000022", + "nxtStn": "동대문중앙새마을금고" + }, + { + "stop_nm": "제기역약령시장", + "ycode": "37.578056", + "stop_no": "06106", + "xcode": "127.036835", + "stop_type": "일반차로", + "node_id": "105000023", + "nxtStn": "동대문구청.용신동주민센터" + }, + { + "stop_nm": "신설동역1번출구", + "ycode": "37.5766303332", + "stop_no": "06107", + "xcode": "127.0233166791", + "stop_type": "일반차로", + "node_id": "105000552", + "nxtStn": "대광고등학교앞" + }, + { + "stop_nm": "청량리미주상가앞", + "ycode": "37.5818902252", + "stop_no": "06112", + "xcode": "127.0476780218", + "stop_type": "가로변전일", + "node_id": "105000028", + "nxtStn": "서울성심병원" + }, + { + "stop_nm": "서울성심병원", + "ycode": "37.5843923886", + "stop_no": "06113", + "xcode": "127.0502442553", + "stop_type": "일반차로", + "node_id": "105000029", + "nxtStn": "청량리미주상가앞" + }, + { + "stop_nm": "서울성심병원", + "ycode": "37.5846074691", + "stop_no": "06114", + "xcode": "127.0508977332", + "stop_type": "가로변시간", + "node_id": "105000030", + "nxtStn": "휘경동입구" + }, + { + "stop_nm": "시조사", + "ycode": "37.5868487759", + "stop_no": "06115", + "xcode": "127.0522795666", + "stop_type": "일반차로", + "node_id": "105000031", + "nxtStn": "동대문노인종합복지관" + }, + { + "stop_nm": "휘경동입구", + "ycode": "37.587663", + "stop_no": "06117", + "xcode": "127.055203", + "stop_type": "가로변시간", + "node_id": "105000033", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "삼육서울병원", + "ycode": "37.589765", + "stop_no": "06118", + "xcode": "127.06061", + "stop_type": "일반차로", + "node_id": "105000034", + "nxtStn": "회기역종점" + }, + { + "stop_nm": "중랑교", + "ycode": "37.59114436", + "stop_no": "06121", + "xcode": "127.0664306844", + "stop_type": "일반차로", + "node_id": "105000037", + "nxtStn": "휘경2동주민센터" + }, + { + "stop_nm": "회기시장", + "ycode": "37.5912026288", + "stop_no": "06122", + "xcode": "127.0566389299", + "stop_type": "일반차로", + "node_id": "105000038", + "nxtStn": "회기동현대아파트" + }, + { + "stop_nm": "회기시장", + "ycode": "37.590807", + "stop_no": "06123", + "xcode": "127.056588", + "stop_type": "일반차로", + "node_id": "105000039", + "nxtStn": "경희중고" + }, + { + "stop_nm": "경희중고", + "ycode": "37.592923", + "stop_no": "06124", + "xcode": "127.057747", + "stop_type": "일반차로", + "node_id": "105000040", + "nxtStn": "회기시장" + }, + { + "stop_nm": "경희중고", + "ycode": "37.5933472946", + "stop_no": "06125", + "xcode": "127.0583346646", + "stop_type": "일반차로", + "node_id": "105000041", + "nxtStn": "외대앞" + }, + { + "stop_nm": "외대앞", + "ycode": "37.5956282146", + "stop_no": "06126", + "xcode": "127.0596059335", + "stop_type": "일반차로", + "node_id": "105000042", + "nxtStn": "경희중고" + }, + { + "stop_nm": "외대앞", + "ycode": "37.5954812555", + "stop_no": "06127", + "xcode": "127.0597677578", + "stop_type": "일반차로", + "node_id": "105000043", + "nxtStn": "이문동교회" + }, + { + "stop_nm": "이문동우체국", + "ycode": "37.5993882544", + "stop_no": "06128", + "xcode": "127.0617459937", + "stop_type": "일반차로", + "node_id": "105000044", + "nxtStn": "외대앞" + }, + { + "stop_nm": "이문동교회", + "ycode": "37.600254", + "stop_no": "06129", + "xcode": "127.062108", + "stop_type": "일반차로", + "node_id": "105000045", + "nxtStn": "의릉입구" + }, + { + "stop_nm": "의릉입구", + "ycode": "37.6038755751", + "stop_no": "06130", + "xcode": "127.0619229882", + "stop_type": "일반차로", + "node_id": "105000046", + "nxtStn": "이문동우체국" + }, + { + "stop_nm": "의릉입구", + "ycode": "37.6034852714", + "stop_no": "06131", + "xcode": "127.0621763625", + "stop_type": "일반차로", + "node_id": "105000047", + "nxtStn": "한국예술종합학교" + }, + { + "stop_nm": "한천로쌍용아파트앞", + "ycode": "37.5981910949", + "stop_no": "06132", + "xcode": "127.0676192785", + "stop_type": "일반차로", + "node_id": "105000048", + "nxtStn": "이문동삼익아파트" + }, + { + "stop_nm": "한천로쌍용아파트앞", + "ycode": "37.5986649133", + "stop_no": "06133", + "xcode": "127.0678869789", + "stop_type": "일반차로", + "node_id": "105000049", + "nxtStn": "석관동코오롱아파트" + }, + { + "stop_nm": "이문동삼익아파트", + "ycode": "37.5945485558", + "stop_no": "06134", + "xcode": "127.0682139128", + "stop_type": "일반차로", + "node_id": "105000050", + "nxtStn": "동일스위트리버아파트.휘봉고교" + }, + { + "stop_nm": "이문동삼익아파트", + "ycode": "37.5951035399", + "stop_no": "06135", + "xcode": "127.0683627707", + "stop_type": "일반차로", + "node_id": "105000051", + "nxtStn": "한천로쌍용아파트앞" + }, + { + "stop_nm": "동일스위트리버아파트.휘봉고교", + "ycode": "37.5877987669", + "stop_no": "06136", + "xcode": "127.0677525508", + "stop_type": "일반차로", + "node_id": "105000052", + "nxtStn": "서울준법지원센터.동성빌라" + }, + { + "stop_nm": "휘경유수지견인차고지앞", + "ycode": "37.58842", + "stop_no": "06137", + "xcode": "127.068577", + "stop_type": "일반차로", + "node_id": "105000053", + "nxtStn": "이문동삼익아파트" + }, + { + "stop_nm": "답십리래미안엘파인아파트", + "ycode": "37.5757201382", + "stop_no": "06138", + "xcode": "127.0672934155", + "stop_type": "일반차로", + "node_id": "105000560", + "nxtStn": "답십리촬영소.우성그린아파트" + }, + { + "stop_nm": "서울준법지원센터.동성빌라", + "ycode": "37.5855552625", + "stop_no": "06140", + "xcode": "127.0673893111", + "stop_type": "일반차로", + "node_id": "105000054", + "nxtStn": "휘경여중고휘경주공아파트앞" + }, + { + "stop_nm": "서울준법지원센터.동성빌라", + "ycode": "37.5856794521", + "stop_no": "06141", + "xcode": "127.0676702359", + "stop_type": "일반차로", + "node_id": "105000055", + "nxtStn": "동일스위트리버앞.휘봉고교" + }, + { + "stop_nm": "휘경여중고휘경주공아파트앞", + "ycode": "37.582603", + "stop_no": "06142", + "xcode": "127.068289", + "stop_type": "일반차로", + "node_id": "105000056", + "nxtStn": "배봉산입구" + }, + { + "stop_nm": "휘경여중고휘경주공아파트", + "ycode": "37.5821574897", + "stop_no": "06143", + "xcode": "127.0685434142", + "stop_type": "일반차로", + "node_id": "105000057", + "nxtStn": "서울준법지원센터.동성빌라" + }, + { + "stop_nm": "장안동현대아파트앞", + "ycode": "37.5797461738", + "stop_no": "06144", + "xcode": "127.0685412036", + "stop_type": "일반차로", + "node_id": "105000058", + "nxtStn": "휘경여중고.휘경주공아파트" + }, + { + "stop_nm": "전곡시장앞", + "ycode": "37.5772370675", + "stop_no": "06145", + "xcode": "127.06779506", + "stop_type": "일반차로", + "node_id": "105000059", + "nxtStn": "답십리래미안엘파인아파트" + }, + { + "stop_nm": "전곡시장앞", + "ycode": "37.57733", + "stop_no": "06146", + "xcode": "127.068143", + "stop_type": "일반차로", + "node_id": "105000060", + "nxtStn": "장안동현대아파트앞" + }, + { + "stop_nm": "답십리촬영소.우성그린아파트", + "ycode": "37.57419", + "stop_no": "06147", + "xcode": "127.066852", + "stop_type": "일반차로", + "node_id": "105000061", + "nxtStn": "동답초교.대림아파트" + }, + { + "stop_nm": "촬영소사거리.우성그린아파트", + "ycode": "37.5735106563", + "stop_no": "06148", + "xcode": "127.0669165487", + "stop_type": "일반차로", + "node_id": "105000062", + "nxtStn": "전곡시장앞" + }, + { + "stop_nm": "풍안시장.동답초교", + "ycode": "37.5710397628", + "stop_no": "06149", + "xcode": "127.065489039", + "stop_type": "일반차로", + "node_id": "105000063", + "nxtStn": "촬영소사거리.우성그린아파트" + }, + { + "stop_nm": "동답한신동아아파트", + "ycode": "37.569627", + "stop_no": "06150", + "xcode": "127.06411", + "stop_type": "일반차로", + "node_id": "105000064", + "nxtStn": "동아.위더스빌아파트" + }, + { + "stop_nm": "동답한신동아아파트", + "ycode": "37.568881615", + "stop_no": "06151", + "xcode": "127.0639045358", + "stop_type": "일반차로", + "node_id": "105000065", + "nxtStn": "풍안시장.동답초교" + }, + { + "stop_nm": "동아.위더스빌아파트", + "ycode": "37.5666982468", + "stop_no": "06152", + "xcode": "127.062258974", + "stop_type": "일반차로", + "node_id": "105000066", + "nxtStn": "동답한신동아아파트" + }, + { + "stop_nm": "동아.위더스빌아파트", + "ycode": "37.5661589085", + "stop_no": "06153", + "xcode": "127.0614649831", + "stop_type": "일반차로", + "node_id": "105000067", + "nxtStn": "고미술상가" + }, + { + "stop_nm": "하나은행장안동지점", + "ycode": "37.563405", + "stop_no": "06154", + "xcode": "127.058557", + "stop_type": "일반차로", + "node_id": "105000068", + "nxtStn": "동아.위더스빌아파트" + }, + { + "stop_nm": "장한평", + "ycode": "37.5613115442", + "stop_no": "06155", + "xcode": "127.067137684", + "stop_type": "일반차로", + "node_id": "105000069", + "nxtStn": "장한평역3번출구" + }, + { + "stop_nm": "청년회의소앞", + "ycode": "37.5621102645", + "stop_no": "06156", + "xcode": "127.0615307058", + "stop_type": "일반차로", + "node_id": "105000070", + "nxtStn": "하나은행장안동지점" + }, + { + "stop_nm": "고미술상가", + "ycode": "37.563612", + "stop_no": "06157", + "xcode": "127.057297", + "stop_type": "일반차로", + "node_id": "105000071", + "nxtStn": "답십리역.동부시장" + }, + { + "stop_nm": "답십리역.동부시장", + "ycode": "37.5672562517", + "stop_no": "06158", + "xcode": "127.0525194449", + "stop_type": "일반차로", + "node_id": "105000072", + "nxtStn": "신답역앞" + }, + { + "stop_nm": "신답역앞", + "ycode": "37.5708430857", + "stop_no": "06159", + "xcode": "127.0470913509", + "stop_type": "일반차로", + "node_id": "105000073", + "nxtStn": "한신휴플러스정문" + }, + { + "stop_nm": "동대문구청.용두역4번출구", + "ycode": "37.573438", + "stop_no": "06160", + "xcode": "127.039718", + "stop_type": "일반차로", + "node_id": "105000074", + "nxtStn": "신답역" + }, + { + "stop_nm": "용두역", + "ycode": "37.573977", + "stop_no": "06161", + "xcode": "127.037268", + "stop_type": "가로변전일", + "node_id": "105000075", + "nxtStn": "동대문구청" + }, + { + "stop_nm": "용두동신동아아파트", + "ycode": "37.5737704369", + "stop_no": "06162", + "xcode": "127.0317924634", + "stop_type": "일반차로", + "node_id": "105000076", + "nxtStn": "용두역" + }, + { + "stop_nm": "동대문우체국.서울풍물시장", + "ycode": "37.574759758", + "stop_no": "06163", + "xcode": "127.0245652731", + "stop_type": "일반차로", + "node_id": "105000077", + "nxtStn": "용두동신동아아파트" + }, + { + "stop_nm": "동대문구청.용두역3번출구", + "ycode": "37.5755374598", + "stop_no": "06164", + "xcode": "127.0383451914", + "stop_type": "일반차로", + "node_id": "105000078", + "nxtStn": "동대문구청.용신동주민센터" + }, + { + "stop_nm": "동대문구청.용신동주민센터", + "ycode": "37.5765807726", + "stop_no": "06165", + "xcode": "127.0384168651", + "stop_type": "일반차로", + "node_id": "105000079", + "nxtStn": "경동시장앞" + }, + { + "stop_nm": "동대문구청.용신동주민센터", + "ycode": "37.575307", + "stop_no": "06166", + "xcode": "127.037988", + "stop_type": "일반차로", + "node_id": "105000080", + "nxtStn": "마장축산물시장" + }, + { + "stop_nm": "경동시장앞", + "ycode": "37.5819989191", + "stop_no": "06167", + "xcode": "127.0387559286", + "stop_type": "일반차로", + "node_id": "105000081", + "nxtStn": "홍파초등학교" + }, + { + "stop_nm": "제기동주민센터.서울약령시앞", + "ycode": "37.5819251477", + "stop_no": "06168", + "xcode": "127.0383947016", + "stop_type": "일반차로", + "node_id": "105000082", + "nxtStn": "경동시장" + }, + { + "stop_nm": "경동시장", + "ycode": "37.5799644113", + "stop_no": "06169", + "xcode": "127.038283869", + "stop_type": "일반차로", + "node_id": "105000083", + "nxtStn": "경동시장사거리" + }, + { + "stop_nm": "홍파초등학교", + "ycode": "37.585531", + "stop_no": "06170", + "xcode": "127.038639", + "stop_type": "일반차로", + "node_id": "105000084", + "nxtStn": "제기동한신아파트앞" + }, + { + "stop_nm": "홍파초등학교", + "ycode": "37.5855971074", + "stop_no": "06171", + "xcode": "127.0383377075", + "stop_type": "일반차로", + "node_id": "105000085", + "nxtStn": "제기동주민센터.서울약령시앞" + }, + { + "stop_nm": "제기동한신아파트앞", + "ycode": "37.587603", + "stop_no": "06172", + "xcode": "127.037888", + "stop_type": "일반차로", + "node_id": "105000086", + "nxtStn": "고려대역.고대앞삼거리" + }, + { + "stop_nm": "고려대역.고대앞삼거리", + "ycode": "37.5894337656", + "stop_no": "06173", + "xcode": "127.0366856036", + "stop_type": "일반차로", + "node_id": "105000087", + "nxtStn": "숭례초등학교" + }, + { + "stop_nm": "고려대역.고대앞삼거리", + "ycode": "37.588548", + "stop_no": "06174", + "xcode": "127.036872", + "stop_type": "일반차로", + "node_id": "105000088", + "nxtStn": "홍파초등학교" + }, + { + "stop_nm": "고려대학교앞", + "ycode": "37.588138", + "stop_no": "06175", + "xcode": "127.03468", + "stop_type": "일반차로", + "node_id": "105000089", + "nxtStn": "숭례초등학교" + }, + { + "stop_nm": "우신향병원", + "ycode": "37.585725", + "stop_no": "06176", + "xcode": "127.032383", + "stop_type": "일반차로", + "node_id": "105000090", + "nxtStn": "고려대학교앞" + }, + { + "stop_nm": "안암오거리", + "ycode": "37.582468", + "stop_no": "06177", + "xcode": "127.029893", + "stop_type": "일반차로", + "node_id": "105000091", + "nxtStn": "우신향병원" + }, + { + "stop_nm": "대광고등학교앞", + "ycode": "37.5797777214", + "stop_no": "06178", + "xcode": "127.0255621436", + "stop_type": "일반차로", + "node_id": "105000092", + "nxtStn": "안암오거리" + }, + { + "stop_nm": "종암초등학교앞", + "ycode": "37.5816186068", + "stop_no": "06179", + "xcode": "127.0295992386", + "stop_type": "일반차로", + "node_id": "105000093", + "nxtStn": "용두시장앞" + }, + { + "stop_nm": "용두시장앞", + "ycode": "37.5791115868", + "stop_no": "06180", + "xcode": "127.0303341829", + "stop_type": "일반차로", + "node_id": "105000094", + "nxtStn": "안암오거리" + }, + { + "stop_nm": "용두시장앞", + "ycode": "37.579035", + "stop_no": "06181", + "xcode": "127.030161", + "stop_type": "일반차로", + "node_id": "105000095", + "nxtStn": "용두동한국의류시험연구원" + }, + { + "stop_nm": "서울시동부병원", + "ycode": "37.5758964701", + "stop_no": "06182", + "xcode": "127.0304302445", + "stop_type": "일반차로", + "node_id": "105000096", + "nxtStn": "동아제약앞" + }, + { + "stop_nm": "서울시동부병원", + "ycode": "37.5761901571", + "stop_no": "06183", + "xcode": "127.0306952909", + "stop_type": "일반차로", + "node_id": "105000097", + "nxtStn": "제기동역.서울약령시" + }, + { + "stop_nm": "동아제약앞", + "ycode": "37.5725993738", + "stop_no": "06184", + "xcode": "127.0304424882", + "stop_type": "일반차로", + "node_id": "105000098", + "nxtStn": "e편한세상청계센트럴포레아파트" + }, + { + "stop_nm": "동아제약앞", + "ycode": "37.5727164409", + "stop_no": "06185", + "xcode": "127.0307312249", + "stop_type": "일반차로", + "node_id": "105000099", + "nxtStn": "서울시동부병원" + }, + { + "stop_nm": "떡전교앞", + "ycode": "37.5849040401", + "stop_no": "06186", + "xcode": "127.0526948922", + "stop_type": "일반차로", + "node_id": "105000100", + "nxtStn": "서울성심병원" + }, + { + "stop_nm": "떡전교앞", + "ycode": "37.5846184473", + "stop_no": "06187", + "xcode": "127.0525769324", + "stop_type": "일반차로", + "node_id": "105000101", + "nxtStn": "서울시립대" + }, + { + "stop_nm": "서울시립대입구", + "ycode": "37.5830057298", + "stop_no": "06188", + "xcode": "127.0540556741", + "stop_type": "일반차로", + "node_id": "105000102", + "nxtStn": "떡전교앞" + }, + { + "stop_nm": "서울시립대학교앞", + "ycode": "37.5826804893", + "stop_no": "06189", + "xcode": "127.053939948", + "stop_type": "일반차로", + "node_id": "105000103", + "nxtStn": "전농로터리시장.동부교육지원청" + }, + { + "stop_nm": "서울시동부교육지원청.해성국제컨벤션고교", + "ycode": "37.579183", + "stop_no": "06190", + "xcode": "127.056865", + "stop_type": "일반차로", + "node_id": "105000104", + "nxtStn": "서울시립대입구" + }, + { + "stop_nm": "전농로터리시장.동부교육지원청", + "ycode": "37.578817", + "stop_no": "06191", + "xcode": "127.05676", + "stop_type": "일반차로", + "node_id": "105000105", + "nxtStn": "전농래미안크레시티아파트" + }, + { + "stop_nm": "전농우체국앞", + "ycode": "37.576367", + "stop_no": "06192", + "xcode": "127.057575", + "stop_type": "일반차로", + "node_id": "105000106", + "nxtStn": "청솔우성아파트.답십리시장" + }, + { + "stop_nm": "전농우체국앞", + "ycode": "37.576523", + "stop_no": "06193", + "xcode": "127.05789", + "stop_type": "일반차로", + "node_id": "105000107", + "nxtStn": "서울시동부교육지원청.해성국제컨벤션고교" + }, + { + "stop_nm": "청솔우성아파트.답십리시장", + "ycode": "37.5737092806", + "stop_no": "06194", + "xcode": "127.0576479903", + "stop_type": "일반차로", + "node_id": "105000108", + "nxtStn": "전농우체국앞" + }, + { + "stop_nm": "청솔우성아파트.답십리시장", + "ycode": "37.5741112935", + "stop_no": "06195", + "xcode": "127.0573890413", + "stop_type": "일반차로", + "node_id": "105000109", + "nxtStn": "답십리1동희망샘교회앞" + }, + { + "stop_nm": "답십리2동시온교회앞", + "ycode": "37.5705961302", + "stop_no": "06196", + "xcode": "127.0573999289", + "stop_type": "일반차로", + "node_id": "105000110", + "nxtStn": "청솔우성아파트.답십리시장" + }, + { + "stop_nm": "답십리1동희망샘교회앞", + "ycode": "37.5705241856", + "stop_no": "06197", + "xcode": "127.0571055329", + "stop_type": "일반차로", + "node_id": "105000111", + "nxtStn": "답십리초등학교앞" + }, + { + "stop_nm": "답십리초등학교.현대시장", + "ycode": "37.568453", + "stop_no": "06198", + "xcode": "127.057202", + "stop_type": "일반차로", + "node_id": "105000112", + "nxtStn": "답십리2동시온교회앞" + }, + { + "stop_nm": "답십리초등학교앞", + "ycode": "37.5686265703", + "stop_no": "06199", + "xcode": "127.0569308801", + "stop_type": "일반차로", + "node_id": "105000113", + "nxtStn": "황물로사거리" + }, + { + "stop_nm": "답십리역사거리", + "ycode": "37.5655060079", + "stop_no": "06200", + "xcode": "127.0552010664", + "stop_type": "일반차로", + "node_id": "105000114", + "nxtStn": "답십리초등학교.현대시장" + }, + { + "stop_nm": "황물로사거리", + "ycode": "37.5665418919", + "stop_no": "06201", + "xcode": "127.0559919809", + "stop_type": "일반차로", + "node_id": "105000115", + "nxtStn": "답십리역.동부시장" + }, + { + "stop_nm": "답십리1동주민센터.래미안위브", + "ycode": "37.5723670085", + "stop_no": "06202", + "xcode": "127.0510037445", + "stop_type": "일반차로", + "node_id": "105000116", + "nxtStn": "용답휴식공원" + }, + { + "stop_nm": "답십리1동주민센터.래미안위브", + "ycode": "37.5721", + "stop_no": "06203", + "xcode": "127.051142", + "stop_type": "일반차로", + "node_id": "105000117", + "nxtStn": "동대문중학교" + }, + { + "stop_nm": "동대문중학교", + "ycode": "37.575014", + "stop_no": "06204", + "xcode": "127.053755", + "stop_type": "일반차로", + "node_id": "105000118", + "nxtStn": "답십리1동주민센터.래미안위브" + }, + { + "stop_nm": "동대문중학교", + "ycode": "37.5741762971", + "stop_no": "06205", + "xcode": "127.0532771747", + "stop_type": "일반차로", + "node_id": "105000119", + "nxtStn": "대한노인회동대문구지회" + }, + { + "stop_nm": "전농래미안크레시티아파트", + "ycode": "37.576277", + "stop_no": "06206", + "xcode": "127.055592", + "stop_type": "일반차로", + "node_id": "105000120", + "nxtStn": "동대문중학교" + }, + { + "stop_nm": "대한노인회동대문구지회", + "ycode": "37.576208", + "stop_no": "06207", + "xcode": "127.055902", + "stop_type": "일반차로", + "node_id": "105000121", + "nxtStn": "서울시동부교육지원청.해성국제컨벤션고교" + }, + { + "stop_nm": "전농사거리", + "ycode": "37.577818", + "stop_no": "06208", + "xcode": "127.059038", + "stop_type": "일반차로", + "node_id": "105000122", + "nxtStn": "서울시동부교육지원청.해성국제컨벤션고교" + }, + { + "stop_nm": "전농사거리", + "ycode": "37.5775633596", + "stop_no": "06209", + "xcode": "127.059240552", + "stop_type": "일반차로", + "node_id": "105000123", + "nxtStn": "전동초등학교.전농동SK아파트" + }, + { + "stop_nm": "배봉초등학교.전농우성아파트", + "ycode": "37.5786953183", + "stop_no": "06210", + "xcode": "127.0672948159", + "stop_type": "일반차로", + "node_id": "105000124", + "nxtStn": "전동초등학교.전농동SK아파트" + }, + { + "stop_nm": "배봉초등학교.전농우성아파트", + "ycode": "37.5784402407", + "stop_no": "06211", + "xcode": "127.0674157317", + "stop_type": "일반차로", + "node_id": "105000125", + "nxtStn": "장안2동주민센터" + }, + { + "stop_nm": "장안2동주민센터", + "ycode": "37.5788403828", + "stop_no": "06212", + "xcode": "127.0704039846", + "stop_type": "일반차로", + "node_id": "105000126", + "nxtStn": "장안동현대아파트앞" + }, + { + "stop_nm": "장안2동주민센터", + "ycode": "37.578696", + "stop_no": "06213", + "xcode": "127.070461", + "stop_type": "일반차로", + "node_id": "105000127", + "nxtStn": "동대부고.은석초교앞" + }, + { + "stop_nm": "장안교앞", + "ycode": "37.579653", + "stop_no": "06214", + "xcode": "127.07397", + "stop_type": "일반차로", + "node_id": "105000128", + "nxtStn": "장안2동주민센터" + }, + { + "stop_nm": "장안교은석초등학교", + "ycode": "37.57962", + "stop_no": "06215", + "xcode": "127.074689", + "stop_type": "일반차로", + "node_id": "105000129", + "nxtStn": "홈플러스면목동점" + }, + { + "stop_nm": "청량리역6번출구", + "ycode": "37.5786543471", + "stop_no": "06216", + "xcode": "127.0431144224", + "stop_type": "일반차로", + "node_id": "105000130", + "nxtStn": "청량리.청과물도매시장" + }, + { + "stop_nm": "청량리역6번출구", + "ycode": "37.577945", + "stop_no": "06217", + "xcode": "127.043786", + "stop_type": "일반차로", + "node_id": "105000131", + "nxtStn": "전농시장앞" + }, + { + "stop_nm": "롯데캐슬노블레스", + "ycode": "37.5755552627", + "stop_no": "06218", + "xcode": "127.0484716502", + "stop_type": "일반차로", + "node_id": "105000132", + "nxtStn": "청량리역6번출구" + }, + { + "stop_nm": "전농시장앞", + "ycode": "37.5760847235", + "stop_no": "06219", + "xcode": "127.0471184271", + "stop_type": "일반차로", + "node_id": "105000133", + "nxtStn": "동대문구답십리도서관앞" + }, + { + "stop_nm": "래미안크레시티.답십리도서관", + "ycode": "37.574561753", + "stop_no": "06220", + "xcode": "127.0502439795", + "stop_type": "일반차로", + "node_id": "105000134", + "nxtStn": "롯데캐슬노블레스" + }, + { + "stop_nm": "동대문구답십리도서관앞", + "ycode": "37.57388", + "stop_no": "06221", + "xcode": "127.051028", + "stop_type": "일반차로", + "node_id": "105000135", + "nxtStn": "답십리래미안위브아파트" + }, + { + "stop_nm": "답십리래미안위브아파트", + "ycode": "37.572769", + "stop_no": "06222", + "xcode": "127.054827", + "stop_type": "일반차로", + "node_id": "105000136", + "nxtStn": "답십리종합상가" + }, + { + "stop_nm": "답십리래미안미드카운티", + "ycode": "37.57298", + "stop_no": "06223", + "xcode": "127.055558", + "stop_type": "일반차로", + "node_id": "105000137", + "nxtStn": "래미안크레시티.답십리도서관" + }, + { + "stop_nm": "답십리종합상가", + "ycode": "37.5727320519", + "stop_no": "06224", + "xcode": "127.0567075826", + "stop_type": "일반차로", + "node_id": "105000138", + "nxtStn": "답십리2동두산아파트" + }, + { + "stop_nm": "답십리2동두산아파트", + "ycode": "37.572755", + "stop_no": "06225", + "xcode": "127.058512", + "stop_type": "일반차로", + "node_id": "105000139", + "nxtStn": "답십리2동한양아파트앞" + }, + { + "stop_nm": "한양아파트.청솔우성아파트후문", + "ycode": "37.5729536188", + "stop_no": "06226", + "xcode": "127.0587580146", + "stop_type": "일반차로", + "node_id": "105000140", + "nxtStn": "답십리래미안미드카운티" + }, + { + "stop_nm": "답십리2동한양아파트앞", + "ycode": "37.5726702291", + "stop_no": "06227", + "xcode": "127.0614069359", + "stop_type": "일반차로", + "node_id": "105000141", + "nxtStn": "동답한신.대림아파트동대문체육관" + }, + { + "stop_nm": "답십리2동한양아파트앞", + "ycode": "37.57295", + "stop_no": "06228", + "xcode": "127.06112", + "stop_type": "일반차로", + "node_id": "105000142", + "nxtStn": "한양아파트.청솔우성아파트후문" + }, + { + "stop_nm": "동답한신.대림아파트동대문체육관", + "ycode": "37.572663", + "stop_no": "06229", + "xcode": "127.063768", + "stop_type": "일반차로", + "node_id": "105000143", + "nxtStn": "촬영소사거리.동답초등학교" + }, + { + "stop_nm": "촬영소사거리.동답초등학교", + "ycode": "37.572642", + "stop_no": "06230", + "xcode": "127.065212", + "stop_type": "일반차로", + "node_id": "105000144", + "nxtStn": "동대문구.성동구선거관리위원회" + }, + { + "stop_nm": "촬영소사거리.세양청마루아파트앞", + "ycode": "37.572887", + "stop_no": "06231", + "xcode": "127.065358", + "stop_type": "일반차로", + "node_id": "105000145", + "nxtStn": "답십리2동한양아파트앞" + }, + { + "stop_nm": "동대문구.성동구선거관리위원회", + "ycode": "37.572487", + "stop_no": "06232", + "xcode": "127.068203", + "stop_type": "일반차로", + "node_id": "105000146", + "nxtStn": "장안동삼성쉐르빌아파트앞" + }, + { + "stop_nm": "동대문구.성동구선거관리위원회", + "ycode": "37.572768", + "stop_no": "06233", + "xcode": "127.067877", + "stop_type": "일반차로", + "node_id": "105000147", + "nxtStn": "촬영소사거리.세양청마루아파트앞" + }, + { + "stop_nm": "장안사거리", + "ycode": "37.572585", + "stop_no": "06234", + "xcode": "127.070338", + "stop_type": "일반차로", + "node_id": "105000148", + "nxtStn": "동대문구.성동구선거관리위원회" + }, + { + "stop_nm": "국민은행장안동지점", + "ycode": "37.572362", + "stop_no": "06235", + "xcode": "127.073497", + "stop_type": "일반차로", + "node_id": "105000149", + "nxtStn": "장안사거리" + }, + { + "stop_nm": "국민은행장안동지점", + "ycode": "37.572055", + "stop_no": "06236", + "xcode": "127.07421", + "stop_type": "일반차로", + "node_id": "105000150", + "nxtStn": "늘푸른동아아파트" + }, + { + "stop_nm": "장안동근린공원", + "ycode": "37.5773238141", + "stop_no": "06237", + "xcode": "127.0719536475", + "stop_type": "일반차로", + "node_id": "105000151", + "nxtStn": "동대문더퍼스트데시앙아파트" + }, + { + "stop_nm": "장안동근린공원", + "ycode": "37.578312", + "stop_no": "06238", + "xcode": "127.072382", + "stop_type": "일반차로", + "node_id": "105000152", + "nxtStn": "장안2동주민센터" + }, + { + "stop_nm": "동대문더퍼스트데시앙아파트", + "ycode": "37.574993", + "stop_no": "06239", + "xcode": "127.071777", + "stop_type": "일반차로", + "node_id": "105000153", + "nxtStn": "코리아병원" + }, + { + "stop_nm": "NH농협장안평지점", + "ycode": "37.5751529569", + "stop_no": "06240", + "xcode": "127.0721655351", + "stop_type": "일반차로", + "node_id": "105000154", + "nxtStn": "장안동근린공원" + }, + { + "stop_nm": "코리아병원", + "ycode": "37.5732069079", + "stop_no": "06241", + "xcode": "127.0716598633", + "stop_type": "일반차로", + "node_id": "105000155", + "nxtStn": "장안동삼성쉐르빌아파트" + }, + { + "stop_nm": "새서울병원", + "ycode": "37.5731012702", + "stop_no": "06242", + "xcode": "127.0720050585", + "stop_type": "일반차로", + "node_id": "105000156", + "nxtStn": "NH농협장안평지점" + }, + { + "stop_nm": "장안동삼성쉐르빌아파트", + "ycode": "37.5714", + "stop_no": "06243", + "xcode": "127.071355", + "stop_type": "일반차로", + "node_id": "105000157", + "nxtStn": "새서울병원" + }, + { + "stop_nm": "장안동삼성쉐르빌아파트", + "ycode": "37.571238", + "stop_no": "06244", + "xcode": "127.070843", + "stop_type": "일반차로", + "node_id": "105000158", + "nxtStn": "현대벤처빌.현대썬앤빌" + }, + { + "stop_nm": "(구)경남호텔앞", + "ycode": "37.569605", + "stop_no": "06245", + "xcode": "127.070183", + "stop_type": "일반차로", + "node_id": "105000159", + "nxtStn": "장안동삼성쉐르빌아파트" + }, + { + "stop_nm": "현대벤처빌.현대썬앤빌", + "ycode": "37.5689208635", + "stop_no": "06246", + "xcode": "127.0694007013", + "stop_type": "일반차로", + "node_id": "105000160", + "nxtStn": "우리은행장안지점앞" + }, + { + "stop_nm": "현대벤처빌", + "ycode": "37.5679144891", + "stop_no": "06247", + "xcode": "127.0690489433", + "stop_type": "일반차로", + "node_id": "105000161", + "nxtStn": "(구)경남호텔앞" + }, + { + "stop_nm": "우리은행장안지점앞", + "ycode": "37.566393", + "stop_no": "06248", + "xcode": "127.067727", + "stop_type": "일반차로", + "node_id": "105000162", + "nxtStn": "장한평역2번출구" + }, + { + "stop_nm": "우리은행장안지점앞", + "ycode": "37.565598658", + "stop_no": "06249", + "xcode": "127.0676384821", + "stop_type": "일반차로", + "node_id": "105000163", + "nxtStn": "장평중학교앞" + }, + { + "stop_nm": "북한연구소앞", + "ycode": "37.5634648165", + "stop_no": "06250", + "xcode": "127.0661434798", + "stop_type": "일반차로", + "node_id": "105000164", + "nxtStn": "우리은행장안지점앞" + }, + { + "stop_nm": "장한평역", + "ycode": "37.562295", + "stop_no": "06251", + "xcode": "127.064928", + "stop_type": "일반차로", + "node_id": "105000165", + "nxtStn": "청년회의소앞" + }, + { + "stop_nm": "장한평역", + "ycode": "37.5624370636", + "stop_no": "06252", + "xcode": "127.0654362294", + "stop_type": "일반차로", + "node_id": "105000166", + "nxtStn": "북한연구소앞" + }, + { + "stop_nm": "신이문역", + "ycode": "37.602617", + "stop_no": "06253", + "xcode": "127.067899", + "stop_type": "일반차로", + "node_id": "105000167", + "nxtStn": "쌍용아파트" + }, + { + "stop_nm": "이문동현대아파트앞", + "ycode": "37.601002", + "stop_no": "06254", + "xcode": "127.070708", + "stop_type": "일반차로", + "node_id": "105000168", + "nxtStn": "쌍용아파트" + }, + { + "stop_nm": "이문동현대아파트", + "ycode": "37.6008590191", + "stop_no": "06255", + "xcode": "127.0709847069", + "stop_type": "일반차로", + "node_id": "105000169", + "nxtStn": "중화2동주민센터" + }, + { + "stop_nm": "휘경2동주민센터", + "ycode": "37.5907361464", + "stop_no": "06256", + "xcode": "127.0680485017", + "stop_type": "일반차로", + "node_id": "105000170", + "nxtStn": "휘경미소지움아파트" + }, + { + "stop_nm": "휘경2동주민센터", + "ycode": "37.590505", + "stop_no": "06257", + "xcode": "127.068086", + "stop_type": "일반차로", + "node_id": "105000171", + "nxtStn": "동일스위트리버아파트.휘봉고교" + }, + { + "stop_nm": "동부아동상담소.동국대부속중고", + "ycode": "37.576833541", + "stop_no": "06258", + "xcode": "127.0763833794", + "stop_type": "일반차로", + "node_id": "105000172", + "nxtStn": "장안삼성래미안2차아파트" + }, + { + "stop_nm": "장안삼성래미안2차아파트", + "ycode": "37.574681581", + "stop_no": "06259", + "xcode": "127.0766223278", + "stop_type": "일반차로", + "node_id": "105000173", + "nxtStn": "장안삼성래미안2차아파트.성복교회" + }, + { + "stop_nm": "장안삼성래미안2차아파트.성복교회", + "ycode": "37.572847", + "stop_no": "06260", + "xcode": "127.076813", + "stop_type": "일반차로", + "node_id": "105000174", + "nxtStn": "장안현대홈타운앞" + }, + { + "stop_nm": "장안현대홈타운아파트앞", + "ycode": "37.5697591707", + "stop_no": "06261", + "xcode": "127.073388625", + "stop_type": "일반차로", + "node_id": "105000175", + "nxtStn": "장안치안센터" + }, + { + "stop_nm": "구민회관앞", + "ycode": "37.566387", + "stop_no": "06262", + "xcode": "127.073943", + "stop_type": "일반차로", + "node_id": "105000176", + "nxtStn": "파라브아파트" + }, + { + "stop_nm": "파라브아파트", + "ycode": "37.5635828092", + "stop_no": "06263", + "xcode": "127.0723739757", + "stop_type": "일반차로", + "node_id": "105000177", + "nxtStn": "장한평역4번출구" + }, + { + "stop_nm": "장안현대홈타운상가", + "ycode": "37.571308", + "stop_no": "06264", + "xcode": "127.074378", + "stop_type": "일반차로", + "node_id": "105000178", + "nxtStn": "국민은행장안동지점" + }, + { + "stop_nm": "장안현대홈타운앞", + "ycode": "37.56929", + "stop_no": "06265", + "xcode": "127.075618", + "stop_type": "일반차로", + "node_id": "105000179", + "nxtStn": "구민회관앞" + }, + { + "stop_nm": "장안치안센터", + "ycode": "37.567945", + "stop_no": "06266", + "xcode": "127.072502", + "stop_type": "일반차로", + "node_id": "105000180", + "nxtStn": "장평중학교" + }, + { + "stop_nm": "장안치안센터", + "ycode": "37.568223", + "stop_no": "06267", + "xcode": "127.072702", + "stop_type": "일반차로", + "node_id": "105000181", + "nxtStn": "장안현대홈타운상가" + }, + { + "stop_nm": "장평중학교", + "ycode": "37.565745401", + "stop_no": "06268", + "xcode": "127.0709395499", + "stop_type": "일반차로", + "node_id": "105000182", + "nxtStn": "파라브아파트" + }, + { + "stop_nm": "회기역종점", + "ycode": "37.5899003691", + "stop_no": "06269", + "xcode": "127.0588619251", + "stop_type": "일반차로", + "node_id": "105000183", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "경희대입구", + "ycode": "37.591272", + "stop_no": "06270", + "xcode": "127.053012", + "stop_type": "일반차로", + "node_id": "105000184", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "경희대입구", + "ycode": "37.591583", + "stop_no": "06271", + "xcode": "127.052713", + "stop_type": "일반차로", + "node_id": "105000185", + "nxtStn": "서울바이오허브.농촌경제연구원" + }, + { + "stop_nm": "서울바이오허브.농촌경제연구원", + "ycode": "37.591388", + "stop_no": "06272", + "xcode": "127.050135", + "stop_type": "일반차로", + "node_id": "105000186", + "nxtStn": "경희대입구" + }, + { + "stop_nm": "서울바이오허브.농촌경제연구원", + "ycode": "37.591608", + "stop_no": "06273", + "xcode": "127.049277", + "stop_type": "일반차로", + "node_id": "105000187", + "nxtStn": "한국과학기술원.홍릉초등학교" + }, + { + "stop_nm": "한국과학기술원.홍릉초등학교", + "ycode": "37.591769", + "stop_no": "06274", + "xcode": "127.045747", + "stop_type": "일반차로", + "node_id": "105000188", + "nxtStn": "세종대왕기념관" + }, + { + "stop_nm": "한국과학기술원.홍릉초등학교", + "ycode": "37.591545", + "stop_no": "06275", + "xcode": "127.046963", + "stop_type": "일반차로", + "node_id": "105000189", + "nxtStn": "서울바이오허브.농촌경제연구원" + }, + { + "stop_nm": "국방연구원", + "ycode": "37.591413", + "stop_no": "06276", + "xcode": "127.041182", + "stop_type": "일반차로", + "node_id": "105000190", + "nxtStn": "고대앞" + }, + { + "stop_nm": "국방연구원", + "ycode": "37.5911039928", + "stop_no": "06277", + "xcode": "127.040058371", + "stop_type": "일반차로", + "node_id": "105000191", + "nxtStn": "한국과학기술원.홍릉초등학교" + }, + { + "stop_nm": "세종대왕기념관", + "ycode": "37.5898533719", + "stop_no": "06278", + "xcode": "127.042380198", + "stop_type": "일반차로", + "node_id": "105000192", + "nxtStn": "영휘원사거리.(구)홍릉사거리" + }, + { + "stop_nm": "세종대왕기념관", + "ycode": "37.5904615395", + "stop_no": "06279", + "xcode": "127.0425673859", + "stop_type": "일반차로", + "node_id": "105000193", + "nxtStn": "한국과학기술원.홍릉초등학교" + }, + { + "stop_nm": "영휘원사거리.(구)홍릉사거리", + "ycode": "37.5860009275", + "stop_no": "06280", + "xcode": "127.0431751633", + "stop_type": "일반차로", + "node_id": "105000194", + "nxtStn": "동대문경찰서" + }, + { + "stop_nm": "영휘원사거리.(구)홍릉사거리", + "ycode": "37.586014337", + "stop_no": "06281", + "xcode": "127.043466176", + "stop_type": "일반차로", + "node_id": "105000195", + "nxtStn": "동부아파트" + }, + { + "stop_nm": "동대문경찰서", + "ycode": "37.583817328", + "stop_no": "06282", + "xcode": "127.0438781813", + "stop_type": "일반차로", + "node_id": "105000196", + "nxtStn": "현대코아" + }, + { + "stop_nm": "동대문경찰서", + "ycode": "37.5835585724", + "stop_no": "06283", + "xcode": "127.0442607393", + "stop_type": "일반차로", + "node_id": "105000197", + "nxtStn": "영휘원사거리.(구)홍릉사거리" + }, + { + "stop_nm": "현대코아", + "ycode": "37.5818120287", + "stop_no": "06284", + "xcode": "127.0448733855", + "stop_type": "일반차로", + "node_id": "105000198", + "nxtStn": "동대문경찰서" + }, + { + "stop_nm": "현대코아", + "ycode": "37.5814859166", + "stop_no": "06285", + "xcode": "127.0446557984", + "stop_type": "일반차로", + "node_id": "105000199", + "nxtStn": "청량리.청과물도매시장" + }, + { + "stop_nm": "동대문중앙새마을금고", + "ycode": "37.583118", + "stop_no": "06286", + "xcode": "127.041213", + "stop_type": "일반차로", + "node_id": "105000200", + "nxtStn": "제기동주민센터.서울약령시앞" + }, + { + "stop_nm": "동대문중앙새마을금고", + "ycode": "37.582988", + "stop_no": "06287", + "xcode": "127.042218", + "stop_type": "일반차로", + "node_id": "105000201", + "nxtStn": "동대문경찰서" + }, + { + "stop_nm": "제기동주민센터앞", + "ycode": "37.5829768901", + "stop_no": "06288", + "xcode": "127.0378676044", + "stop_type": "일반차로", + "node_id": "105000551", + "nxtStn": "제기동천주교회" + }, + { + "stop_nm": "제기동한신아파트", + "ycode": "37.5866381789", + "stop_no": "06289", + "xcode": "127.0373610455", + "stop_type": "일반차로", + "node_id": "105000203", + "nxtStn": "제기시장" + }, + { + "stop_nm": "제기시장", + "ycode": "37.586385", + "stop_no": "06290", + "xcode": "127.03522", + "stop_type": "일반차로", + "node_id": "105000204", + "nxtStn": "홍파초등학교" + }, + { + "stop_nm": "제기시장", + "ycode": "37.586625", + "stop_no": "06291", + "xcode": "127.03467", + "stop_type": "일반차로", + "node_id": "105000205", + "nxtStn": "고려대학교앞" + }, + { + "stop_nm": "외대역앞", + "ycode": "37.596009591", + "stop_no": "06293", + "xcode": "127.0609470779", + "stop_type": "일반차로", + "node_id": "105000207", + "nxtStn": "이경시장" + }, + { + "stop_nm": "외대역앞", + "ycode": "37.5960661454", + "stop_no": "06294", + "xcode": "127.0613604745", + "stop_type": "일반차로", + "node_id": "105000208", + "nxtStn": "외대앞" + }, + { + "stop_nm": "이경시장", + "ycode": "37.5952640352", + "stop_no": "06295", + "xcode": "127.0649927315", + "stop_type": "일반차로", + "node_id": "105000209", + "nxtStn": "이문1동주민센터" + }, + { + "stop_nm": "청랑리한신아파트.청량사입구", + "ycode": "37.586742", + "stop_no": "06297", + "xcode": "127.047414", + "stop_type": "일반차로", + "node_id": "105000211", + "nxtStn": "영휘원사거리.(구)홍릉사거리" + }, + { + "stop_nm": "전동초등학교.전농동SK아파트", + "ycode": "37.5777508201", + "stop_no": "06298", + "xcode": "127.060944646", + "stop_type": "일반차로", + "node_id": "105000212", + "nxtStn": "배봉초등학교.전농우성아파트" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.582758", + "stop_no": "06299", + "xcode": "127.030517", + "stop_type": "일반차로", + "node_id": "105000213", + "nxtStn": "우신향병원" + }, + { + "stop_nm": "제기동천주교회", + "ycode": "37.582855", + "stop_no": "06300", + "xcode": "127.033572", + "stop_type": "일반차로", + "node_id": "105000214", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "이문동쌍용아파트", + "ycode": "37.5988156622", + "stop_no": "06301", + "xcode": "127.0689799868", + "stop_type": "일반차로", + "node_id": "105000215", + "nxtStn": "이문동삼익아파트" + }, + { + "stop_nm": "이문동쌍용아파트", + "ycode": "37.598831", + "stop_no": "06302", + "xcode": "127.069119", + "stop_type": "일반차로", + "node_id": "105000216", + "nxtStn": "이문동현대아파트" + }, + { + "stop_nm": "이문1동주민센터", + "ycode": "37.597807", + "stop_no": "06303", + "xcode": "127.065257", + "stop_type": "일반차로", + "node_id": "105000217", + "nxtStn": "한천로입구" + }, + { + "stop_nm": "전동초등학교.전농동SK아파트", + "ycode": "37.57812", + "stop_no": "06304", + "xcode": "127.061495", + "stop_type": "일반차로", + "node_id": "105000218", + "nxtStn": "전농사거리" + }, + { + "stop_nm": "한국산업인력공단서울지역본부", + "ycode": "37.58375", + "stop_no": "06308", + "xcode": "127.07297", + "stop_type": "일반차로", + "node_id": "105000222", + "nxtStn": "동부아동상담소.동국대부속중고" + }, + { + "stop_nm": "휘경공고휘경주공아파트", + "ycode": "37.584163", + "stop_no": "06309", + "xcode": "127.069252", + "stop_type": "일반차로", + "node_id": "105000223", + "nxtStn": "동서그랜드맨션" + }, + { + "stop_nm": "e편한세상청계센트럴포레아파트", + "ycode": "37.570818", + "stop_no": "06310", + "xcode": "127.03029", + "stop_type": "일반차로", + "node_id": "105000559", + "nxtStn": "청계벽산아파트.텐즈힐아파트" + }, + { + "stop_nm": "한천로입구", + "ycode": "37.599119", + "stop_no": "06311", + "xcode": "127.067351", + "stop_type": "일반차로", + "node_id": "105000558", + "nxtStn": "이문동쌍용아파트" + }, + { + "stop_nm": "래미안장안1차아파트앞", + "ycode": "37.566832", + "stop_no": "06313", + "xcode": "127.072023", + "stop_type": "일반차로", + "node_id": "105000226", + "nxtStn": "장안치안센터" + }, + { + "stop_nm": "장평중학교앞", + "ycode": "37.56496", + "stop_no": "06314", + "xcode": "127.070252", + "stop_type": "일반차로", + "node_id": "105000227", + "nxtStn": "래미안장안1차아파트앞" + }, + { + "stop_nm": "청량리미주상가앞", + "ycode": "37.5819579768", + "stop_no": "06315", + "xcode": "127.0472557344", + "stop_type": "가로변전일", + "node_id": "105000228", + "nxtStn": "청량리역환승센터" + }, + { + "stop_nm": "동대문구청.용두역", + "ycode": "37.572834", + "stop_no": "06316", + "xcode": "127.04015", + "stop_type": "일반차로", + "node_id": "105000229", + "nxtStn": "마장축산물시장" + }, + { + "stop_nm": "종로사약국", + "ycode": "37.5945213658", + "stop_no": "06318", + "xcode": "127.0653057725", + "stop_type": "일반차로", + "node_id": "105000231", + "nxtStn": "외대역앞" + }, + { + "stop_nm": "회기동현대아파트", + "ycode": "37.589113", + "stop_no": "06320", + "xcode": "127.05446", + "stop_type": "일반차로", + "node_id": "105000233", + "nxtStn": "떡전교사거리.동대문노인복지관" + }, + { + "stop_nm": "우산빌딩앞", + "ycode": "37.588882349", + "stop_no": "06321", + "xcode": "127.0546770593", + "stop_type": "일반차로", + "node_id": "105000234", + "nxtStn": "회기시장" + }, + { + "stop_nm": "배봉산입구", + "ycode": "37.580325", + "stop_no": "06322", + "xcode": "127.068212", + "stop_type": "일반차로", + "node_id": "105000235", + "nxtStn": "장안2동주민센터" + }, + { + "stop_nm": "면곡시장", + "ycode": "37.5716446389", + "stop_no": "06324", + "xcode": "127.0810660939", + "stop_type": "일반차로", + "node_id": "105000237", + "nxtStn": "국민은행장안동지점" + }, + { + "stop_nm": "동부아파트", + "ycode": "37.586688", + "stop_no": "06330", + "xcode": "127.045232", + "stop_type": "일반차로", + "node_id": "105000243", + "nxtStn": "청랑리한신아파트.청량사입구" + }, + { + "stop_nm": "자동차부품상가", + "ycode": "37.5645946726", + "stop_no": "06335", + "xcode": "127.0577756725", + "stop_type": "일반차로", + "node_id": "105000248", + "nxtStn": "답십리초등학교.현대시장" + }, + { + "stop_nm": "청랑리한신아파트.청량사입구", + "ycode": "37.586516", + "stop_no": "06349", + "xcode": "127.047667", + "stop_type": "일반차로", + "node_id": "105000262", + "nxtStn": "동대문노인종합복지관" + }, + { + "stop_nm": "장안동삼성쉐르빌아파트앞", + "ycode": "37.5723084893", + "stop_no": "06356", + "xcode": "127.0702110373", + "stop_type": "일반차로", + "node_id": "105000550", + "nxtStn": "국민은행장안동지점" + }, + { + "stop_nm": "동대문노인종합복지관", + "ycode": "37.5859460919", + "stop_no": "06357", + "xcode": "127.0497131121", + "stop_type": "일반차로", + "node_id": "105000269", + "nxtStn": "떡전교앞" + }, + { + "stop_nm": "쌍용아파트", + "ycode": "37.601422", + "stop_no": "06358", + "xcode": "127.068471", + "stop_type": "일반차로", + "node_id": "105000270", + "nxtStn": "이문동현대아파트" + }, + { + "stop_nm": "쌍용아파트", + "ycode": "37.6014515002", + "stop_no": "06359", + "xcode": "127.0685216442", + "stop_type": "일반차로", + "node_id": "105000271", + "nxtStn": "신이문역" + }, + { + "stop_nm": "삼육서울병원", + "ycode": "37.5902833371", + "stop_no": "06416", + "xcode": "127.0623612795", + "stop_type": "일반차로", + "node_id": "105000287", + "nxtStn": "중랑교" + }, + { + "stop_nm": "동일스위트리버앞.휘봉고교", + "ycode": "37.5871806733", + "stop_no": "06417", + "xcode": "127.0676591393", + "stop_type": "일반차로", + "node_id": "105000288", + "nxtStn": "휘경2동주민센터" + }, + { + "stop_nm": "청량리수산시장", + "ycode": "37.5786434462", + "stop_no": "06418", + "xcode": "127.0408714095", + "stop_type": "일반차로", + "node_id": "105000289", + "nxtStn": "청량리역환승센터" + }, + { + "stop_nm": "휘봉초등학교", + "ycode": "37.587707", + "stop_no": "06419", + "xcode": "127.069695", + "stop_type": "일반차로", + "node_id": "105000290", + "nxtStn": "한국산업인력공단서울지역본부" + }, + { + "stop_nm": "휘경미소지움아파트", + "ycode": "37.5909282333", + "stop_no": "06422", + "xcode": "127.0645643148", + "stop_type": "일반차로", + "node_id": "105000477", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "휘경공고.휘경주공아파트", + "ycode": "37.584471", + "stop_no": "06423", + "xcode": "127.069714", + "stop_type": "일반차로", + "node_id": "105000549", + "nxtStn": "휘경여중고휘경주공아파트앞" + }, + { + "stop_nm": "용두동신동아아파트", + "ycode": "37.5740450496", + "stop_no": "06424", + "xcode": "127.0325997915", + "stop_type": "일반차로", + "node_id": "105000479", + "nxtStn": "서울시동부병원" + }, + { + "stop_nm": "청량리수산시장", + "ycode": "37.5789521614", + "stop_no": "06426", + "xcode": "127.0418950942", + "stop_type": "일반차로", + "node_id": "105000488", + "nxtStn": "청량리역환승센터" + }, + { + "stop_nm": "답십리역", + "ycode": "37.5667684599", + "stop_no": "06500", + "xcode": "127.0531915243", + "stop_type": "마을버스", + "node_id": "105900043", + "nxtStn": "농협답십리역지점" + }, + { + "stop_nm": "가든아파트.수사연구소", + "ycode": "37.58455", + "stop_no": "06501", + "xcode": "127.072077", + "stop_type": "마을버스", + "node_id": "105900028", + "nxtStn": "동일하이빌.현대베스트빌아파트" + }, + { + "stop_nm": "회기역", + "ycode": "37.5899342359", + "stop_no": "06502", + "xcode": "127.0577963876", + "stop_type": "마을버스", + "node_id": "105900027", + "nxtStn": "경희대입구" + }, + { + "stop_nm": "농협답십리역지점", + "ycode": "37.568489", + "stop_no": "06503", + "xcode": "127.050678", + "stop_type": "마을버스", + "node_id": "105900026", + "nxtStn": "신답역앞" + }, + { + "stop_nm": "동일하이빌.현대베스트빌아파트", + "ycode": "37.5824731826", + "stop_no": "06504", + "xcode": "127.0739978057", + "stop_type": "마을버스", + "node_id": "105900025", + "nxtStn": "장안교앞" + }, + { + "stop_nm": "동안교회", + "ycode": "37.5938269496", + "stop_no": "06505", + "xcode": "127.0577733522", + "stop_type": "마을버스", + "node_id": "105900057", + "nxtStn": "경희중고" + }, + { + "stop_nm": "경희대입구", + "ycode": "37.5915657534", + "stop_no": "06506", + "xcode": "127.0527811217", + "stop_type": "마을버스", + "node_id": "105900051", + "nxtStn": "의료원입구사거리" + }, + { + "stop_nm": "청계한신휴플러스", + "ycode": "37.571806", + "stop_no": "06507", + "xcode": "127.045036", + "stop_type": "일반차로", + "node_id": "103000508", + "nxtStn": "동대문구청.용두역" + }, + { + "stop_nm": "경희중고", + "ycode": "37.5943592428", + "stop_no": "06509", + "xcode": "127.056427291", + "stop_type": "마을버스", + "node_id": "105900024", + "nxtStn": "경희맨션" + }, + { + "stop_nm": "경희대의료원", + "ycode": "37.5940620058", + "stop_no": "06510", + "xcode": "127.0522472422", + "stop_type": "마을버스", + "node_id": "105900050", + "nxtStn": "경희대입구" + }, + { + "stop_nm": "한신휴플러스정문", + "ycode": "37.5727352624", + "stop_no": "06511", + "xcode": "127.0450796439", + "stop_type": "마을버스", + "node_id": "105900041", + "nxtStn": "동아아파트" + }, + { + "stop_nm": "경희맨션", + "ycode": "37.5956150844", + "stop_no": "06513", + "xcode": "127.0570001318", + "stop_type": "마을버스", + "node_id": "105900023", + "nxtStn": "미니슈퍼" + }, + { + "stop_nm": "동아아파트", + "ycode": "37.5742471004", + "stop_no": "06515", + "xcode": "127.0455832239", + "stop_type": "마을버스", + "node_id": "105900022", + "nxtStn": "전농119안전센터" + }, + { + "stop_nm": "미니슈퍼", + "ycode": "37.5966712234", + "stop_no": "06517", + "xcode": "127.0568673052", + "stop_type": "마을버스", + "node_id": "105900021", + "nxtStn": "외대.경희대후문" + }, + { + "stop_nm": "전농119안전센터", + "ycode": "37.5761835356", + "stop_no": "06519", + "xcode": "127.0456081798", + "stop_type": "마을버스", + "node_id": "105900020", + "nxtStn": "전농1동치안센터" + }, + { + "stop_nm": "외대.경희대후문", + "ycode": "37.5983128684", + "stop_no": "06521", + "xcode": "127.0571505475", + "stop_type": "마을버스", + "node_id": "105900019", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "전농1동치안센터", + "ycode": "37.5764222386", + "stop_no": "06523", + "xcode": "127.0480957022", + "stop_type": "마을버스", + "node_id": "105900018", + "nxtStn": "신성미소지움아파트" + }, + { + "stop_nm": "휘경여중고.휘경주공아파트", + "ycode": "37.5824548381", + "stop_no": "06524", + "xcode": "127.0685629353", + "stop_type": "마을버스", + "node_id": "105900017", + "nxtStn": "서울준법지원센터.동성빌라" + }, + { + "stop_nm": "신성미소지움아파트", + "ycode": "37.5789318307", + "stop_no": "06526", + "xcode": "127.0501307614", + "stop_type": "마을버스", + "node_id": "105900038", + "nxtStn": "청량리소화물취급소" + }, + { + "stop_nm": "삼성래미안", + "ycode": "37.5999148754", + "stop_no": "06528", + "xcode": "127.0574111213", + "stop_type": "마을버스", + "node_id": "105900016", + "nxtStn": "외대.경희대후문" + }, + { + "stop_nm": "청량리소화물취급소", + "ycode": "37.5805090878", + "stop_no": "06530", + "xcode": "127.0514146373", + "stop_type": "마을버스", + "node_id": "105900039", + "nxtStn": "영광빌딩" + }, + { + "stop_nm": "영광빌딩", + "ycode": "37.5818431221", + "stop_no": "06533", + "xcode": "127.0525059131", + "stop_type": "마을버스", + "node_id": "105900036", + "nxtStn": "시립대입구" + }, + { + "stop_nm": "새마을금고앞", + "ycode": "37.5977887402", + "stop_no": "06535", + "xcode": "127.0601637112", + "stop_type": "마을버스", + "node_id": "105900013", + "nxtStn": "외대앞역" + }, + { + "stop_nm": "시립대입구", + "ycode": "37.5838521215", + "stop_no": "06537", + "xcode": "127.0534663672", + "stop_type": "마을버스", + "node_id": "105900015", + "nxtStn": "떡전교앞" + }, + { + "stop_nm": "외대앞역", + "ycode": "37.595336", + "stop_no": "06539", + "xcode": "127.062826", + "stop_type": "마을버스", + "node_id": "105900056", + "nxtStn": "새마을금고앞" + }, + { + "stop_nm": "새마을금고앞", + "ycode": "37.5978607902", + "stop_no": "06543", + "xcode": "127.0602362489", + "stop_type": "마을버스", + "node_id": "105900014", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "회기역종점", + "ycode": "37.5898517712", + "stop_no": "06546", + "xcode": "127.0587395905", + "stop_type": "마을버스", + "node_id": "105900053", + "nxtStn": "삼육서울병원" + }, + { + "stop_nm": "외대.경희대후문", + "ycode": "37.5983039484", + "stop_no": "06556", + "xcode": "127.0569625455", + "stop_type": "마을버스", + "node_id": "105900012", + "nxtStn": "미니슈퍼" + }, + { + "stop_nm": "신설동역1번출구", + "ycode": "37.575968", + "stop_no": "06557", + "xcode": "127.023871", + "stop_type": "마을버스", + "node_id": "105900029", + "nxtStn": "대광고등학교앞" + }, + { + "stop_nm": "미니슈퍼", + "ycode": "37.5967406655", + "stop_no": "06560", + "xcode": "127.056746183", + "stop_type": "마을버스", + "node_id": "105900011", + "nxtStn": "딩동슈퍼" + }, + { + "stop_nm": "딩동슈퍼", + "ycode": "37.5956556765", + "stop_no": "06564", + "xcode": "127.0569106983", + "stop_type": "마을버스", + "node_id": "105900009", + "nxtStn": "경희중고" + }, + { + "stop_nm": "경희중고", + "ycode": "37.5946512359", + "stop_no": "06567", + "xcode": "127.056342578", + "stop_type": "마을버스", + "node_id": "105900007", + "nxtStn": "동안교회" + }, + { + "stop_nm": "동안교회", + "ycode": "37.5928603119", + "stop_no": "06570", + "xcode": "127.0573015187", + "stop_type": "마을버스", + "node_id": "105900006", + "nxtStn": "종점" + }, + { + "stop_nm": "동대부고.은석초교앞", + "ycode": "37.57926", + "stop_no": "06572", + "xcode": "127.073669", + "stop_type": "마을버스", + "node_id": "105900005", + "nxtStn": "종점" + }, + { + "stop_nm": "서울시립대", + "ycode": "37.5831151587", + "stop_no": "06575", + "xcode": "127.0531816401", + "stop_type": "마을버스", + "node_id": "105900004", + "nxtStn": "영광빌딩" + }, + { + "stop_nm": "영광빌딩", + "ycode": "37.5819811249", + "stop_no": "06576", + "xcode": "127.0521991693", + "stop_type": "마을버스", + "node_id": "105900037", + "nxtStn": "청량리소화물취급소" + }, + { + "stop_nm": "청량리소화물취급소", + "ycode": "37.5805903074", + "stop_no": "06577", + "xcode": "127.0511350317", + "stop_type": "마을버스", + "node_id": "105900040", + "nxtStn": "신성미소지움아파트" + }, + { + "stop_nm": "신성미소지움아파트", + "ycode": "37.5786581335", + "stop_no": "06578", + "xcode": "127.0495757982", + "stop_type": "마을버스", + "node_id": "105900031", + "nxtStn": "전농1동치안센터" + }, + { + "stop_nm": "전농1동치안센터", + "ycode": "37.5762782623", + "stop_no": "06579", + "xcode": "127.0476065132", + "stop_type": "마을버스", + "node_id": "105900032", + "nxtStn": "동대문해병전우회" + }, + { + "stop_nm": "동대문해병전우회", + "ycode": "37.5763718959", + "stop_no": "06580", + "xcode": "127.0455245142", + "stop_type": "마을버스", + "node_id": "105900033", + "nxtStn": "태양어린이.동아아파트" + }, + { + "stop_nm": "태양어린이.동아아파트", + "ycode": "37.5740642361", + "stop_no": "06581", + "xcode": "127.0454348029", + "stop_type": "마을버스", + "node_id": "105900034", + "nxtStn": "한신휴플러스후문" + }, + { + "stop_nm": "한신휴플러스후문", + "ycode": "37.572989629", + "stop_no": "06582", + "xcode": "127.0467315569", + "stop_type": "마을버스", + "node_id": "105900035", + "nxtStn": "신답역" + }, + { + "stop_nm": "신답역", + "ycode": "37.5711404728", + "stop_no": "06583", + "xcode": "127.0492345839", + "stop_type": "마을버스", + "node_id": "105900042", + "nxtStn": "장미예식장" + }, + { + "stop_nm": "장미예식장", + "ycode": "37.5701586306", + "stop_no": "06584", + "xcode": "127.0505437481", + "stop_type": "마을버스", + "node_id": "105900003", + "nxtStn": "동부자동차매매시장" + }, + { + "stop_nm": "동부자동차매매시장", + "ycode": "37.5689958143", + "stop_no": "06585", + "xcode": "127.0514870981", + "stop_type": "마을버스", + "node_id": "105900044", + "nxtStn": "답십리역.경우회매장입구" + }, + { + "stop_nm": "답십리역.경우회매장입구", + "ycode": "37.567473882", + "stop_no": "06586", + "xcode": "127.0534863549", + "stop_type": "마을버스", + "node_id": "105900045", + "nxtStn": "답십리쌍마사거리" + }, + { + "stop_nm": "답십리쌍마사거리", + "ycode": "37.5661899369", + "stop_no": "06587", + "xcode": "127.0552015711", + "stop_type": "마을버스", + "node_id": "105900046", + "nxtStn": "부속상가" + }, + { + "stop_nm": "부속상가", + "ycode": "37.5651430993", + "stop_no": "06588", + "xcode": "127.0566146653", + "stop_type": "마을버스", + "node_id": "105900047", + "nxtStn": "종점" + }, + { + "stop_nm": "고려대역3번출구", + "ycode": "37.5904833874", + "stop_no": "06591", + "xcode": "127.0365261369", + "stop_type": "마을버스", + "node_id": "105900002", + "nxtStn": "종암교통정보센터" + }, + { + "stop_nm": "의료원입구사거리", + "ycode": "37.5926993775", + "stop_no": "06594", + "xcode": "127.052658489", + "stop_type": "마을버스", + "node_id": "105900001", + "nxtStn": "경희대의료원" + }, + { + "stop_nm": "삼육서울병원", + "ycode": "37.5902762019", + "stop_no": "06595", + "xcode": "127.0622219909", + "stop_type": "마을버스", + "node_id": "105900054", + "nxtStn": "중랑교" + }, + { + "stop_nm": "장안삼거리", + "ycode": "37.5780291247", + "stop_no": "06626", + "xcode": "127.0723517263", + "stop_type": "일반차로", + "node_id": "105000316", + "nxtStn": "사가정센트럴아이파크아파트" + }, + { + "stop_nm": "장안사거리삼성래미안", + "ycode": "37.5732093887", + "stop_no": "06628", + "xcode": "127.0720255408", + "stop_type": "일반차로", + "node_id": "105000318", + "nxtStn": "장안삼거리" + }, + { + "stop_nm": "장안사거리삼성래미안", + "ycode": "37.5737862935", + "stop_no": "06629", + "xcode": "127.0716864575", + "stop_type": "일반차로", + "node_id": "105000319", + "nxtStn": "경남관광호텔" + }, + { + "stop_nm": "장한평역", + "ycode": "37.561336", + "stop_no": "06631", + "xcode": "127.067083", + "stop_type": "일반차로", + "node_id": "105000321", + "nxtStn": "경남관광호텔" + }, + { + "stop_nm": "청량리역", + "ycode": "37.5804355236", + "stop_no": "06755", + "xcode": "127.0462731283", + "stop_type": "일반차로", + "node_id": "105000407", + "nxtStn": "서울시립대입구" + }, + { + "stop_nm": "서울시립대입구", + "ycode": "37.5828562643", + "stop_no": "06756", + "xcode": "127.0538030705", + "stop_type": "일반차로", + "node_id": "105000408", + "nxtStn": "전농로터리시장" + }, + { + "stop_nm": "전농로터리시장", + "ycode": "37.5772526361", + "stop_no": "06757", + "xcode": "127.0571016136", + "stop_type": "일반차로", + "node_id": "105000409", + "nxtStn": "신답역" + }, + { + "stop_nm": "신답역", + "ycode": "37.5705481504", + "stop_no": "06758", + "xcode": "127.0477839986", + "stop_type": "일반차로", + "node_id": "105000410", + "nxtStn": "동대문구청" + }, + { + "stop_nm": "장안삼거리", + "ycode": "37.5778473212", + "stop_no": "06768", + "xcode": "127.0719971746", + "stop_type": "일반차로", + "node_id": "105000420", + "nxtStn": "장안사거리삼성래미안" + }, + { + "stop_nm": "신설동로터리.서울풍물시장", + "ycode": "37.5742755859", + "stop_no": "06774", + "xcode": "127.0234166489", + "stop_type": "일반차로", + "node_id": "105000426", + "nxtStn": "신설동역1번출구" + }, + { + "stop_nm": "경동시장앞", + "ycode": "37.58056802", + "stop_no": "06775", + "xcode": "127.0386578148", + "stop_type": "일반차로", + "node_id": "105000438", + "nxtStn": "홍파초등학교" + }, + { + "stop_nm": "경동시장사거리", + "ycode": "37.5772293536", + "stop_no": "06776", + "xcode": "127.038109149", + "stop_type": "일반차로", + "node_id": "105000555", + "nxtStn": "동대문구청.용신동주민센터" + }, + { + "stop_nm": "경남관광호텔", + "ycode": "37.570577", + "stop_no": "06777", + "xcode": "127.070482", + "stop_type": "일반차로", + "node_id": "105000429", + "nxtStn": "장한평역" + }, + { + "stop_nm": "경남관광호텔", + "ycode": "37.5703410911", + "stop_no": "06778", + "xcode": "127.0707390026", + "stop_type": "일반차로", + "node_id": "105000430", + "nxtStn": "장안사거리삼성래미안" + }, + { + "stop_nm": "동답초교.대림아파트", + "ycode": "37.571208", + "stop_no": "06779", + "xcode": "127.06523", + "stop_type": "일반차로", + "node_id": "105000489", + "nxtStn": "동답한신동아아파트" + }, + { + "stop_nm": "정화여자중.상업고등학교", + "ycode": "37.586801", + "stop_no": "06780", + "xcode": "127.041754", + "stop_type": "일반차로", + "node_id": "105000557", + "nxtStn": "제기동한신아파트" + }, + { + "stop_nm": "정화여자중.상업고등학교", + "ycode": "37.586612", + "stop_no": "06781", + "xcode": "127.041841", + "stop_type": "일반차로", + "node_id": "105000556", + "nxtStn": "동부아파트" + }, + { + "stop_nm": "동대문노인종합복지관", + "ycode": "37.5863103228", + "stop_no": "06999", + "xcode": "127.0492581619", + "stop_type": "일반차로", + "node_id": "105000440", + "nxtStn": "청랑리한신아파트.청량사입구" + }, + { + "stop_nm": "망우역.상봉터미널", + "ycode": "37.5978685187", + "stop_no": "07001", + "xcode": "127.091120459", + "stop_type": "중앙차로", + "node_id": "106000001", + "nxtStn": "상봉역.중랑우체국" + }, + { + "stop_nm": "망우역.상봉터미널", + "ycode": "37.597605", + "stop_no": "07002", + "xcode": "127.090466", + "stop_type": "중앙차로", + "node_id": "106000002", + "nxtStn": "망우역.망우지구대" + }, + { + "stop_nm": "상봉역.중랑우체국", + "ycode": "37.5959590869", + "stop_no": "07003", + "xcode": "127.0837435605", + "stop_type": "중앙차로", + "node_id": "106000003", + "nxtStn": "지하철7호선중화역" + }, + { + "stop_nm": "상봉역.중랑우체국", + "ycode": "37.5957502855", + "stop_no": "07004", + "xcode": "127.0832728328", + "stop_type": "중앙차로", + "node_id": "106000004", + "nxtStn": "망우역.상봉터미널" + }, + { + "stop_nm": "중랑역.동부시장", + "ycode": "37.5940083437", + "stop_no": "07005", + "xcode": "127.0760312329", + "stop_type": "중앙차로", + "node_id": "106000005", + "nxtStn": "중랑교" + }, + { + "stop_nm": "중랑역.동부시장", + "ycode": "37.593613", + "stop_no": "07006", + "xcode": "127.074938", + "stop_type": "중앙차로", + "node_id": "106000006", + "nxtStn": "중화동한신아파트" + }, + { + "stop_nm": "망우역.망우지구대", + "ycode": "37.598848", + "stop_no": "07007", + "xcode": "127.09539", + "stop_type": "중앙차로", + "node_id": "106000434", + "nxtStn": "망우역.상봉터미널" + }, + { + "stop_nm": "망우역.망우지구대", + "ycode": "37.5985580019", + "stop_no": "07008", + "xcode": "127.0948710737", + "stop_type": "중앙차로", + "node_id": "106000435", + "nxtStn": "우림시장.망우사거리" + }, + { + "stop_nm": "우림시장.망우사거리", + "ycode": "37.599565", + "stop_no": "07009", + "xcode": "127.098635", + "stop_type": "중앙차로", + "node_id": "106000433", + "nxtStn": "망우역.망우지구대" + }, + { + "stop_nm": "우림시장.망우사거리", + "ycode": "37.599368", + "stop_no": "07010", + "xcode": "127.098222", + "stop_type": "중앙차로", + "node_id": "106000432", + "nxtStn": "금란교회" + }, + { + "stop_nm": "금란교회", + "ycode": "37.6005297976", + "stop_no": "07011", + "xcode": "127.1040333871", + "stop_type": "중앙차로", + "node_id": "106000431", + "nxtStn": "우림시장.망우사거리" + }, + { + "stop_nm": "금란교회", + "ycode": "37.6003640418", + "stop_no": "07012", + "xcode": "127.1033574704", + "stop_type": "중앙차로", + "node_id": "106000430", + "nxtStn": "동부제일병원.망우리공원" + }, + { + "stop_nm": "동부제일병원.망우리공원", + "ycode": "37.6004643043", + "stop_no": "07013", + "xcode": "127.1089021873", + "stop_type": "중앙차로", + "node_id": "106000428", + "nxtStn": "판교원마을1.2단지.판교도서관" + }, + { + "stop_nm": "동부제일병원.망우리공원", + "ycode": "37.600478", + "stop_no": "07014", + "xcode": "127.107756", + "stop_type": "중앙차로", + "node_id": "106000429", + "nxtStn": "망우리역사문화공원" + }, + { + "stop_nm": "극동늘푸른아파트", + "ycode": "37.6147026458", + "stop_no": "07101", + "xcode": "127.0764039758", + "stop_type": "가로변시간", + "node_id": "106000007", + "nxtStn": "묵동삼거리.먹골역" + }, + { + "stop_nm": "묵동자이.신도브래뉴아파트", + "ycode": "37.6152702687", + "stop_no": "07102", + "xcode": "127.0765885798", + "stop_type": "일반차로", + "node_id": "106000008", + "nxtStn": "태릉입구역4번출구" + }, + { + "stop_nm": "묵동삼거리.먹골역", + "ycode": "37.6125566965", + "stop_no": "07103", + "xcode": "127.0771199228", + "stop_type": "가로변시간", + "node_id": "106000009", + "nxtStn": "지하철7호선중화역" + }, + { + "stop_nm": "먹골역.묵동자이아파트", + "ycode": "37.613832", + "stop_no": "07104", + "xcode": "127.077084", + "stop_type": "일반차로", + "node_id": "106000010", + "nxtStn": "태릉입구역4번출구" + }, + { + "stop_nm": "한국전력동대문중랑지사", + "ycode": "37.606957", + "stop_no": "07105", + "xcode": "127.07826", + "stop_type": "가로변시간", + "node_id": "106000011", + "nxtStn": "지하철7호선중화역" + }, + { + "stop_nm": "한국전력동대문중랑지사", + "ycode": "37.606223", + "stop_no": "07106", + "xcode": "127.078747", + "stop_type": "가로변시간", + "node_id": "106000012", + "nxtStn": "먹골역" + }, + { + "stop_nm": "지하철7호선중화역", + "ycode": "37.6026485718", + "stop_no": "07107", + "xcode": "127.0791563016", + "stop_type": "가로변시간", + "node_id": "106000013", + "nxtStn": "망우역" + }, + { + "stop_nm": "지하철7호선중화역", + "ycode": "37.602844147", + "stop_no": "07108", + "xcode": "127.0794497843", + "stop_type": "가로변시간", + "node_id": "106000014", + "nxtStn": "먹골역.묵동자이아파트" + }, + { + "stop_nm": "국민은행중화동지점", + "ycode": "37.5988415137", + "stop_no": "07109", + "xcode": "127.079861688", + "stop_type": "가로변시간", + "node_id": "106000015", + "nxtStn": "중랑역.동부시장" + }, + { + "stop_nm": "중화동한신아파트", + "ycode": "37.5990762154", + "stop_no": "07110", + "xcode": "127.0801694529", + "stop_type": "일반차로", + "node_id": "106000016", + "nxtStn": "지하철7호선중화역" + }, + { + "stop_nm": "상봉2동복합청사.도서관", + "ycode": "37.5918910703", + "stop_no": "07111", + "xcode": "127.0799782951", + "stop_type": "일반차로", + "node_id": "106000017", + "nxtStn": "면목2동주민센터" + }, + { + "stop_nm": "상봉2동복합청사.도서관", + "ycode": "37.592033", + "stop_no": "07112", + "xcode": "127.080285", + "stop_type": "일반차로", + "node_id": "106000018", + "nxtStn": "중화동한신아파트" + }, + { + "stop_nm": "면목2동주민센터", + "ycode": "37.5893825204", + "stop_no": "07113", + "xcode": "127.079858977", + "stop_type": "일반차로", + "node_id": "106000019", + "nxtStn": "면목2동" + }, + { + "stop_nm": "중목초등학교", + "ycode": "37.589732", + "stop_no": "07114", + "xcode": "127.080195", + "stop_type": "일반차로", + "node_id": "106000020", + "nxtStn": "상봉2동복합청사.도서관" + }, + { + "stop_nm": "면목2동", + "ycode": "37.587152", + "stop_no": "07115", + "xcode": "127.079732", + "stop_type": "일반차로", + "node_id": "106000021", + "nxtStn": "면목5동주민센터" + }, + { + "stop_nm": "면목2동", + "ycode": "37.5874792439", + "stop_no": "07116", + "xcode": "127.0801196457", + "stop_type": "일반차로", + "node_id": "106000022", + "nxtStn": "중목초등학교" + }, + { + "stop_nm": "면목5동주민센터", + "ycode": "37.584885", + "stop_no": "07117", + "xcode": "127.079633", + "stop_type": "일반차로", + "node_id": "106000023", + "nxtStn": "늘푸른근린공원" + }, + { + "stop_nm": "장안시장", + "ycode": "37.585525", + "stop_no": "07118", + "xcode": "127.080023", + "stop_type": "일반차로", + "node_id": "106000024", + "nxtStn": "면목2동" + }, + { + "stop_nm": "면목신우아파트", + "ycode": "37.5802709857", + "stop_no": "07119", + "xcode": "127.0794405095", + "stop_type": "일반차로", + "node_id": "106000025", + "nxtStn": "면목119안전센터" + }, + { + "stop_nm": "면목신우아파트", + "ycode": "37.5806329732", + "stop_no": "07120", + "xcode": "127.0798122666", + "stop_type": "일반차로", + "node_id": "106000026", + "nxtStn": "늘푸른근린공원" + }, + { + "stop_nm": "면목119안전센터", + "ycode": "37.5735215001", + "stop_no": "07121", + "xcode": "127.0799088318", + "stop_type": "일반차로", + "node_id": "106000027", + "nxtStn": "면곡시장" + }, + { + "stop_nm": "경남아너스빌아파트앞", + "ycode": "37.5747495207", + "stop_no": "07122", + "xcode": "127.0801546872", + "stop_type": "일반차로", + "node_id": "106000028", + "nxtStn": "면목신우아파트" + }, + { + "stop_nm": "늘푸른동아아파트", + "ycode": "37.5724984572", + "stop_no": "07123", + "xcode": "127.0803571864", + "stop_type": "일반차로", + "node_id": "106000029", + "nxtStn": "경남아너스빌아파트앞" + }, + { + "stop_nm": "중랑역동부시장1", + "ycode": "37.593925", + "stop_no": "07124", + "xcode": "127.075519", + "stop_type": "일반차로", + "node_id": "106000030", + "nxtStn": "중랑교동부시장" + }, + { + "stop_nm": "중랑역.동부시장1", + "ycode": "37.5939499392", + "stop_no": "07125", + "xcode": "127.0767665567", + "stop_type": "일반차로", + "node_id": "106000476", + "nxtStn": "상봉역.중랑우체국" + }, + { + "stop_nm": "한샘교회", + "ycode": "37.59542", + "stop_no": "07128", + "xcode": "127.082492", + "stop_type": "일반차로", + "node_id": "106000034", + "nxtStn": "지하철7호선상봉역" + }, + { + "stop_nm": "국민은행망우동지점", + "ycode": "37.5994734943", + "stop_no": "07129", + "xcode": "127.0971021652", + "stop_type": "일반차로", + "node_id": "106000035", + "nxtStn": "망우역.망우지구대" + }, + { + "stop_nm": "지하철7호선상봉역", + "ycode": "37.5966238431", + "stop_no": "07130", + "xcode": "127.0872459258", + "stop_type": "일반차로", + "node_id": "106000036", + "nxtStn": "망우역.상봉터미널" + }, + { + "stop_nm": "국민은행망우동지점", + "ycode": "37.599481396", + "stop_no": "07131", + "xcode": "127.0973547272", + "stop_type": "일반차로", + "node_id": "106000037", + "nxtStn": "성원아파트경남아너스빌앞" + }, + { + "stop_nm": "지하철7호선상봉역", + "ycode": "37.597363", + "stop_no": "07132", + "xcode": "127.088627", + "stop_type": "가로변전일", + "node_id": "106000038", + "nxtStn": "상봉1동주민센터" + }, + { + "stop_nm": "망우역", + "ycode": "37.59864", + "stop_no": "07133", + "xcode": "127.094072", + "stop_type": "일반차로", + "node_id": "106000039", + "nxtStn": "지하철7호선상봉역" + }, + { + "stop_nm": "망우역", + "ycode": "37.598691", + "stop_no": "07134", + "xcode": "127.095541", + "stop_type": "가로변시간", + "node_id": "106000040", + "nxtStn": "능산지하차도" + }, + { + "stop_nm": "망우지구대", + "ycode": "37.599037", + "stop_no": "07135", + "xcode": "127.095842", + "stop_type": "가로변시간", + "node_id": "106000041", + "nxtStn": "상봉터미널" + }, + { + "stop_nm": "양원숲초등학교", + "ycode": "37.609688437", + "stop_no": "07136", + "xcode": "127.1049084768", + "stop_type": "일반차로", + "node_id": "106000485", + "nxtStn": "양원리" + }, + { + "stop_nm": "하나은행망우동지점", + "ycode": "37.599627", + "stop_no": "07137", + "xcode": "127.098587", + "stop_type": "가로변시간", + "node_id": "106000043", + "nxtStn": "망우지구대" + }, + { + "stop_nm": "양원숲초등학교", + "ycode": "37.6100539033", + "stop_no": "07138", + "xcode": "127.1047153577", + "stop_type": "일반차로", + "node_id": "106000484", + "nxtStn": "동성프라자앞" + }, + { + "stop_nm": "금란교회앞", + "ycode": "37.600599", + "stop_no": "07140", + "xcode": "127.103792", + "stop_type": "가로변시간", + "node_id": "106000046", + "nxtStn": "삼용사입구" + }, + { + "stop_nm": "금란교회앞", + "ycode": "37.600172", + "stop_no": "07141", + "xcode": "127.102679", + "stop_type": "가로변전일", + "node_id": "106000047", + "nxtStn": "망우동고개" + }, + { + "stop_nm": "능산사거리", + "ycode": "37.60848", + "stop_no": "07142", + "xcode": "127.101942", + "stop_type": "일반차로", + "node_id": "106000486", + "nxtStn": "양원숲초등학교" + }, + { + "stop_nm": "망우동고개", + "ycode": "37.60069", + "stop_no": "07143", + "xcode": "127.107379", + "stop_type": "가로변전일", + "node_id": "106000049", + "nxtStn": "금란교회" + }, + { + "stop_nm": "서울우유앞", + "ycode": "37.592108", + "stop_no": "07144", + "xcode": "127.072817", + "stop_type": "일반차로", + "node_id": "106000050", + "nxtStn": "중랑초등학교" + }, + { + "stop_nm": "서울우유앞", + "ycode": "37.591323", + "stop_no": "07145", + "xcode": "127.073171", + "stop_type": "일반차로", + "node_id": "106000051", + "nxtStn": "중랑교" + }, + { + "stop_nm": "중랑초등학교", + "ycode": "37.58932", + "stop_no": "07146", + "xcode": "127.074318", + "stop_type": "일반차로", + "node_id": "106000052", + "nxtStn": "동부시장남문입구" + }, + { + "stop_nm": "중랑초등학교", + "ycode": "37.589507", + "stop_no": "07147", + "xcode": "127.07427", + "stop_type": "일반차로", + "node_id": "106000053", + "nxtStn": "서울우유앞" + }, + { + "stop_nm": "동부시장남문입구", + "ycode": "37.59043", + "stop_no": "07148", + "xcode": "127.077666", + "stop_type": "일반차로", + "node_id": "106000054", + "nxtStn": "88병원" + }, + { + "stop_nm": "동부시장남문입구", + "ycode": "37.5907703673", + "stop_no": "07149", + "xcode": "127.078259265", + "stop_type": "일반차로", + "node_id": "106000055", + "nxtStn": "중랑초교정문.면목2동치안센터" + }, + { + "stop_nm": "88병원", + "ycode": "37.5913119461", + "stop_no": "07150", + "xcode": "127.0808960477", + "stop_type": "일반차로", + "node_id": "106000056", + "nxtStn": "서울창업카페상봉점" + }, + { + "stop_nm": "상봉2동주민센터", + "ycode": "37.591647", + "stop_no": "07151", + "xcode": "127.081088", + "stop_type": "일반차로", + "node_id": "106000057", + "nxtStn": "동부시장남문입구" + }, + { + "stop_nm": "서울창업카페상봉점", + "ycode": "37.592028", + "stop_no": "07152", + "xcode": "127.083885", + "stop_type": "일반차로", + "node_id": "106000058", + "nxtStn": "면목6거리" + }, + { + "stop_nm": "서울창업카페상봉점", + "ycode": "37.59224", + "stop_no": "07153", + "xcode": "127.083713", + "stop_type": "일반차로", + "node_id": "106000059", + "nxtStn": "상봉2동주민센터" + }, + { + "stop_nm": "면목6거리", + "ycode": "37.59288", + "stop_no": "07154", + "xcode": "127.087857", + "stop_type": "일반차로", + "node_id": "106000060", + "nxtStn": "상봉신협" + }, + { + "stop_nm": "면목6거리", + "ycode": "37.5929402273", + "stop_no": "07155", + "xcode": "127.0872031229", + "stop_type": "일반차로", + "node_id": "106000061", + "nxtStn": "서울창업카페상봉점" + }, + { + "stop_nm": "상봉신협", + "ycode": "37.5933652483", + "stop_no": "07156", + "xcode": "127.0899024613", + "stop_type": "일반차로", + "node_id": "106000062", + "nxtStn": "상봉터미널" + }, + { + "stop_nm": "상봉신협", + "ycode": "37.5936531571", + "stop_no": "07157", + "xcode": "127.0905684056", + "stop_type": "일반차로", + "node_id": "106000063", + "nxtStn": "면목초등학교" + }, + { + "stop_nm": "상봉터미널입구", + "ycode": "37.59388", + "stop_no": "07158", + "xcode": "127.092532", + "stop_type": "일반차로", + "node_id": "106000064", + "nxtStn": "혜원여중고입구" + }, + { + "stop_nm": "상봉터미널입구", + "ycode": "37.594368", + "stop_no": "07159", + "xcode": "127.093677", + "stop_type": "일반차로", + "node_id": "106000065", + "nxtStn": "상봉신협" + }, + { + "stop_nm": "혜원여중고입구", + "ycode": "37.594427", + "stop_no": "07160", + "xcode": "127.09505", + "stop_type": "일반차로", + "node_id": "106000066", + "nxtStn": "봉우재고개" + }, + { + "stop_nm": "혜원여중고입구", + "ycode": "37.594772", + "stop_no": "07161", + "xcode": "127.095553", + "stop_type": "일반차로", + "node_id": "106000067", + "nxtStn": "상봉터미널입구" + }, + { + "stop_nm": "봉우재고개", + "ycode": "37.595025", + "stop_no": "07162", + "xcode": "127.097837", + "stop_type": "일반차로", + "node_id": "106000068", + "nxtStn": "우림시장" + }, + { + "stop_nm": "봉우재고개", + "ycode": "37.5951120639", + "stop_no": "07163", + "xcode": "127.0973048687", + "stop_type": "일반차로", + "node_id": "106000069", + "nxtStn": "혜원여중고입구" + }, + { + "stop_nm": "우림시장", + "ycode": "37.595398", + "stop_no": "07164", + "xcode": "127.09954", + "stop_type": "일반차로", + "node_id": "106000070", + "nxtStn": "용마공원입구" + }, + { + "stop_nm": "우림시장", + "ycode": "37.595575", + "stop_no": "07165", + "xcode": "127.099288", + "stop_type": "일반차로", + "node_id": "106000071", + "nxtStn": "봉우재고개" + }, + { + "stop_nm": "지하철7호선상봉역", + "ycode": "37.5943971396", + "stop_no": "07166", + "xcode": "127.0861765659", + "stop_type": "일반차로", + "node_id": "106000072", + "nxtStn": "망우역.상봉터미널" + }, + { + "stop_nm": "지하철7호선상봉역", + "ycode": "37.5941972708", + "stop_no": "07167", + "xcode": "127.0859396558", + "stop_type": "일반차로", + "node_id": "106000073", + "nxtStn": "면목초등학교" + }, + { + "stop_nm": "면목초등학교", + "ycode": "37.5913436688", + "stop_no": "07168", + "xcode": "127.0869725161", + "stop_type": "일반차로", + "node_id": "106000074", + "nxtStn": "면목6거리" + }, + { + "stop_nm": "면목초등학교", + "ycode": "37.5913024354", + "stop_no": "07169", + "xcode": "127.0866780454", + "stop_type": "일반차로", + "node_id": "106000075", + "nxtStn": "지하철7호선면목역" + }, + { + "stop_nm": "지하철7호선면목역", + "ycode": "37.5891321995", + "stop_no": "07170", + "xcode": "127.0872405771", + "stop_type": "일반차로", + "node_id": "106000076", + "nxtStn": "면목본동주민센터.면목정보도서관" + }, + { + "stop_nm": "지하철7호선면목역", + "ycode": "37.5891662321", + "stop_no": "07171", + "xcode": "127.0875225751", + "stop_type": "일반차로", + "node_id": "106000077", + "nxtStn": "면목초등학교" + }, + { + "stop_nm": "면목본동주민센터.면목정보도서관", + "ycode": "37.586909", + "stop_no": "07172", + "xcode": "127.088244", + "stop_type": "일반차로", + "node_id": "106000078", + "nxtStn": "지하철7호선면목역" + }, + { + "stop_nm": "면목본동주민센터.면목정보도서관", + "ycode": "37.5865148002", + "stop_no": "07173", + "xcode": "127.0880980871", + "stop_type": "일반차로", + "node_id": "106000079", + "nxtStn": "면동초등학교" + }, + { + "stop_nm": "면동초등학교", + "ycode": "37.5842573049", + "stop_no": "07174", + "xcode": "127.0884543619", + "stop_type": "일반차로", + "node_id": "106000080", + "nxtStn": "면목본동주민센터.면목정보도서관" + }, + { + "stop_nm": "면동초등학교", + "ycode": "37.5848547979", + "stop_no": "07175", + "xcode": "127.0883599559", + "stop_type": "일반차로", + "node_id": "106000081", + "nxtStn": "면목우체국.녹색병원" + }, + { + "stop_nm": "면목우체국.녹색병원", + "ycode": "37.5820548439", + "stop_no": "07176", + "xcode": "127.0887178358", + "stop_type": "일반차로", + "node_id": "106000082", + "nxtStn": "면동초등학교" + }, + { + "stop_nm": "면목우체국.녹색병원", + "ycode": "37.582733", + "stop_no": "07177", + "xcode": "127.088455", + "stop_type": "일반차로", + "node_id": "106000083", + "nxtStn": "지하철7호선사가정역" + }, + { + "stop_nm": "지하철7호선사가정역", + "ycode": "37.579857", + "stop_no": "07178", + "xcode": "127.088067", + "stop_type": "일반차로", + "node_id": "106000084", + "nxtStn": "면목우체국.녹색병원" + }, + { + "stop_nm": "지하철7호선사가정역", + "ycode": "37.5812242521", + "stop_no": "07179", + "xcode": "127.0884337896", + "stop_type": "일반차로", + "node_id": "106000085", + "nxtStn": "면목시장" + }, + { + "stop_nm": "면목시장", + "ycode": "37.5796470274", + "stop_no": "07180", + "xcode": "127.0876506935", + "stop_type": "일반차로", + "node_id": "106000086", + "nxtStn": "면남초등학교" + }, + { + "stop_nm": "면남초등학교", + "ycode": "37.5786342777", + "stop_no": "07181", + "xcode": "127.0863248288", + "stop_type": "일반차로", + "node_id": "106000087", + "nxtStn": "지하철7호선사가정역" + }, + { + "stop_nm": "면남초등학교", + "ycode": "37.5783", + "stop_no": "07182", + "xcode": "127.085932", + "stop_type": "일반차로", + "node_id": "106000088", + "nxtStn": "방약국앞" + }, + { + "stop_nm": "방약국앞", + "ycode": "37.5757745627", + "stop_no": "07183", + "xcode": "127.0858494168", + "stop_type": "일반차로", + "node_id": "106000089", + "nxtStn": "면남초등학교" + }, + { + "stop_nm": "방약국앞", + "ycode": "37.575997", + "stop_no": "07184", + "xcode": "127.08574", + "stop_type": "일반차로", + "node_id": "106000090", + "nxtStn": "중곡초등학교" + }, + { + "stop_nm": "중곡초등학교", + "ycode": "37.572917", + "stop_no": "07185", + "xcode": "127.084205", + "stop_type": "일반차로", + "node_id": "106000091", + "nxtStn": "방약국앞" + }, + { + "stop_nm": "중곡초등학교", + "ycode": "37.5731508875", + "stop_no": "07186", + "xcode": "127.0841787922", + "stop_type": "일반차로", + "node_id": "106000092", + "nxtStn": "면곡시장앞" + }, + { + "stop_nm": "삼용사입구", + "ycode": "37.5976831695", + "stop_no": "07187", + "xcode": "127.1001745527", + "stop_type": "일반차로", + "node_id": "106000093", + "nxtStn": "용마공원입구" + }, + { + "stop_nm": "삼용사입구", + "ycode": "37.5969440708", + "stop_no": "07188", + "xcode": "127.1004181775", + "stop_type": "일반차로", + "node_id": "106000094", + "nxtStn": "능산지하차도" + }, + { + "stop_nm": "용마공원입구", + "ycode": "37.59392", + "stop_no": "07189", + "xcode": "127.099437", + "stop_type": "일반차로", + "node_id": "106000095", + "nxtStn": "삼용사입구" + }, + { + "stop_nm": "용마공원입구", + "ycode": "37.594253", + "stop_no": "07190", + "xcode": "127.099292", + "stop_type": "일반차로", + "node_id": "106000096", + "nxtStn": "우리은행망우동지점" + }, + { + "stop_nm": "면일초등학교", + "ycode": "37.592017", + "stop_no": "07191", + "xcode": "127.0984", + "stop_type": "일반차로", + "node_id": "106000097", + "nxtStn": "용마공원입구" + }, + { + "stop_nm": "우리은행망우동지점", + "ycode": "37.591217", + "stop_no": "07192", + "xcode": "127.097627", + "stop_type": "일반차로", + "node_id": "106000098", + "nxtStn": "혜원여중고후문" + }, + { + "stop_nm": "서일대학교", + "ycode": "37.58951", + "stop_no": "07193", + "xcode": "127.0967", + "stop_type": "일반차로", + "node_id": "106000099", + "nxtStn": "용마문화복지센터" + }, + { + "stop_nm": "서일대학교", + "ycode": "37.589193", + "stop_no": "07194", + "xcode": "127.09687", + "stop_type": "일반차로", + "node_id": "106000100", + "nxtStn": "면일초등학교" + }, + { + "stop_nm": "용마문화복지센터", + "ycode": "37.5863676957", + "stop_no": "07195", + "xcode": "127.0953481587", + "stop_type": "일반차로", + "node_id": "106000101", + "nxtStn": "서일대정문" + }, + { + "stop_nm": "용마문화복지센터", + "ycode": "37.586712", + "stop_no": "07196", + "xcode": "127.095167", + "stop_type": "일반차로", + "node_id": "106000102", + "nxtStn": "중화중학교.다문화가족지원센터" + }, + { + "stop_nm": "중화중학교.면목고등학교", + "ycode": "37.5839979712", + "stop_no": "07197", + "xcode": "127.0940498031", + "stop_type": "일반차로", + "node_id": "106000103", + "nxtStn": "중화중학교삼거리" + }, + { + "stop_nm": "중화중학교.다문화가족지원센터", + "ycode": "37.5847547944", + "stop_no": "07198", + "xcode": "127.0941651172", + "stop_type": "일반차로", + "node_id": "106000104", + "nxtStn": "면중초등학교" + }, + { + "stop_nm": "면중초등학교", + "ycode": "37.5812311904", + "stop_no": "07199", + "xcode": "127.0934632177", + "stop_type": "일반차로", + "node_id": "106000105", + "nxtStn": "중화중학교.면목고등학교" + }, + { + "stop_nm": "면중초등학교", + "ycode": "37.5822693524", + "stop_no": "07200", + "xcode": "127.0933286447", + "stop_type": "일반차로", + "node_id": "106000106", + "nxtStn": "면목동금호어울림아파트" + }, + { + "stop_nm": "한양수자인사가정파크", + "ycode": "37.580071", + "stop_no": "07201", + "xcode": "127.092889", + "stop_type": "일반차로", + "node_id": "106000107", + "nxtStn": "면중초등학교" + }, + { + "stop_nm": "묵동공감대아파트", + "ycode": "37.613841", + "stop_no": "07202", + "xcode": "127.078121", + "stop_type": "일반차로", + "node_id": "106000487", + "nxtStn": "묵동구길" + }, + { + "stop_nm": "면목동금호어울림아파트", + "ycode": "37.579245", + "stop_no": "07203", + "xcode": "127.091719", + "stop_type": "일반차로", + "node_id": "106000108", + "nxtStn": "면목동대원칸타빌아파트" + }, + { + "stop_nm": "면목동금호어울림아파트", + "ycode": "37.577838", + "stop_no": "07204", + "xcode": "127.090708", + "stop_type": "일반차로", + "node_id": "106000109", + "nxtStn": "한양수자인사가정파크" + }, + { + "stop_nm": "면목동대원칸타빌아파트", + "ycode": "37.577761", + "stop_no": "07205", + "xcode": "127.090284", + "stop_type": "일반차로", + "node_id": "106000110", + "nxtStn": "용마폭포공원" + }, + { + "stop_nm": "용마폭포공원", + "ycode": "37.5756922268", + "stop_no": "07206", + "xcode": "127.0887419869", + "stop_type": "일반차로", + "node_id": "106000111", + "nxtStn": "면목동금호어울림아파트" + }, + { + "stop_nm": "용마폭포공원", + "ycode": "37.5759266564", + "stop_no": "07207", + "xcode": "127.0885475333", + "stop_type": "일반차로", + "node_id": "106000112", + "nxtStn": "용마산역" + }, + { + "stop_nm": "용마산역", + "ycode": "37.5733815658", + "stop_no": "07208", + "xcode": "127.0866708555", + "stop_type": "일반차로", + "node_id": "106000113", + "nxtStn": "용마폭포공원" + }, + { + "stop_nm": "용마산역", + "ycode": "37.5735061163", + "stop_no": "07209", + "xcode": "127.0863981576", + "stop_type": "일반차로", + "node_id": "106000114", + "nxtStn": "용마산하늘채아파트" + }, + { + "stop_nm": "용마산하늘채아파트", + "ycode": "37.5710236763", + "stop_no": "07210", + "xcode": "127.086306987", + "stop_type": "일반차로", + "node_id": "106000115", + "nxtStn": "용마산역" + }, + { + "stop_nm": "용마산하늘채아파트", + "ycode": "37.5712581697", + "stop_no": "07211", + "xcode": "127.0860197064", + "stop_type": "일반차로", + "node_id": "106000116", + "nxtStn": "용암사입구" + }, + { + "stop_nm": "묵동구길", + "ycode": "37.6155190845", + "stop_no": "07212", + "xcode": "127.0790554743", + "stop_type": "일반차로", + "node_id": "106000117", + "nxtStn": "주유소앞다운복지관" + }, + { + "stop_nm": "묵동구길", + "ycode": "37.615893", + "stop_no": "07213", + "xcode": "127.07907", + "stop_type": "일반차로", + "node_id": "106000118", + "nxtStn": "묵1동주민센터입구.먹골역" + }, + { + "stop_nm": "묵1동주민센터입구.먹골역", + "ycode": "37.6118632153", + "stop_no": "07214", + "xcode": "127.077951746", + "stop_type": "일반차로", + "node_id": "106000119", + "nxtStn": "묵동공감대아파트" + }, + { + "stop_nm": "묵1동주민센터입구.먹골역", + "ycode": "37.6125895905", + "stop_no": "07215", + "xcode": "127.0777995873", + "stop_type": "일반차로", + "node_id": "106000120", + "nxtStn": "먹골역" + }, + { + "stop_nm": "신성은하수아파트", + "ycode": "37.588578", + "stop_no": "07216", + "xcode": "127.073707", + "stop_type": "일반차로", + "node_id": "106000121", + "nxtStn": "서울우유앞" + }, + { + "stop_nm": "신성은하수아파트", + "ycode": "37.5884540581", + "stop_no": "07217", + "xcode": "127.0734454772", + "stop_type": "일반차로", + "node_id": "106000122", + "nxtStn": "면목2동한신아파트" + }, + { + "stop_nm": "면목2동한신아파트", + "ycode": "37.587332", + "stop_no": "07218", + "xcode": "127.074047", + "stop_type": "일반차로", + "node_id": "106000123", + "nxtStn": "신성은하수아파트" + }, + { + "stop_nm": "면목2동한신아파트", + "ycode": "37.586758", + "stop_no": "07219", + "xcode": "127.074238", + "stop_type": "일반차로", + "node_id": "106000124", + "nxtStn": "면목5동" + }, + { + "stop_nm": "면목5동", + "ycode": "37.5856077735", + "stop_no": "07220", + "xcode": "127.0758895994", + "stop_type": "일반차로", + "node_id": "106000125", + "nxtStn": "동서그랜드맨션" + }, + { + "stop_nm": "면목5동", + "ycode": "37.585908", + "stop_no": "07221", + "xcode": "127.0761", + "stop_type": "일반차로", + "node_id": "106000126", + "nxtStn": "면목2동한신아파트" + }, + { + "stop_nm": "동서그랜드맨션", + "ycode": "37.586112", + "stop_no": "07222", + "xcode": "127.077953", + "stop_type": "일반차로", + "node_id": "106000127", + "nxtStn": "하나은행면목지점" + }, + { + "stop_nm": "동서그랜드맨션", + "ycode": "37.586482", + "stop_no": "07223", + "xcode": "127.07881", + "stop_type": "일반차로", + "node_id": "106000128", + "nxtStn": "면목5동" + }, + { + "stop_nm": "하나은행면목지점", + "ycode": "37.586817", + "stop_no": "07224", + "xcode": "127.08111", + "stop_type": "일반차로", + "node_id": "106000129", + "nxtStn": "IBK기업은행면목동지점" + }, + { + "stop_nm": "하나은행면목지점", + "ycode": "37.587028", + "stop_no": "07225", + "xcode": "127.081042", + "stop_type": "일반차로", + "node_id": "106000130", + "nxtStn": "동부시장남문입구" + }, + { + "stop_nm": "면목복개천", + "ycode": "37.587913", + "stop_no": "07226", + "xcode": "127.086043", + "stop_type": "일반차로", + "node_id": "106000131", + "nxtStn": "지하철7호선면목역" + }, + { + "stop_nm": "면목복개천", + "ycode": "37.58805", + "stop_no": "07227", + "xcode": "127.08567", + "stop_type": "일반차로", + "node_id": "106000132", + "nxtStn": "하나은행면목지점" + }, + { + "stop_nm": "지하철7호선면목역", + "ycode": "37.588495", + "stop_no": "07228", + "xcode": "127.088633", + "stop_type": "일반차로", + "node_id": "106000133", + "nxtStn": "농협앞" + }, + { + "stop_nm": "면목역", + "ycode": "37.5886788778", + "stop_no": "07229", + "xcode": "127.0885501828", + "stop_type": "일반차로", + "node_id": "106000134", + "nxtStn": "면목복개천" + }, + { + "stop_nm": "농협앞", + "ycode": "37.5891826734", + "stop_no": "07230", + "xcode": "127.0919716473", + "stop_type": "일반차로", + "node_id": "106000135", + "nxtStn": "면목지구대" + }, + { + "stop_nm": "농협앞", + "ycode": "37.5894466728", + "stop_no": "07231", + "xcode": "127.0919968842", + "stop_type": "일반차로", + "node_id": "106000136", + "nxtStn": "면목역" + }, + { + "stop_nm": "혜원여중고후문", + "ycode": "37.590197", + "stop_no": "07232", + "xcode": "127.09618", + "stop_type": "일반차로", + "node_id": "106000137", + "nxtStn": "면일초등학교" + }, + { + "stop_nm": "혜원여중고후문", + "ycode": "37.590465", + "stop_no": "07233", + "xcode": "127.096388", + "stop_type": "일반차로", + "node_id": "106000138", + "nxtStn": "농협앞" + }, + { + "stop_nm": "면목마젤란아파트", + "ycode": "37.5868243425", + "stop_no": "07234", + "xcode": "127.0837401254", + "stop_type": "일반차로", + "node_id": "106000139", + "nxtStn": "녹색병원입구" + }, + { + "stop_nm": "면목마젤란아파트", + "ycode": "37.5867052516", + "stop_no": "07235", + "xcode": "127.0839472075", + "stop_type": "일반차로", + "node_id": "106000140", + "nxtStn": "아남리치카운티아파트" + }, + { + "stop_nm": "녹색병원입구", + "ycode": "37.5841544497", + "stop_no": "07236", + "xcode": "127.0836907108", + "stop_type": "일반차로", + "node_id": "106000141", + "nxtStn": "면목마젤란아파트" + }, + { + "stop_nm": "녹색병원입구", + "ycode": "37.584902585", + "stop_no": "07237", + "xcode": "127.0833643143", + "stop_type": "일반차로", + "node_id": "106000142", + "nxtStn": "면목두산아파트1차" + }, + { + "stop_nm": "면목두산아파트1차", + "ycode": "37.5819331246", + "stop_no": "07238", + "xcode": "127.0838863683", + "stop_type": "일반차로", + "node_id": "106000143", + "nxtStn": "녹색병원입구" + }, + { + "stop_nm": "면목두산아파트1차", + "ycode": "37.5818306838", + "stop_no": "07239", + "xcode": "127.0834865686", + "stop_type": "일반차로", + "node_id": "106000144", + "nxtStn": "면목두산아파트4.5단지" + }, + { + "stop_nm": "면목두산아파트4.5단지", + "ycode": "37.578455", + "stop_no": "07240", + "xcode": "127.081197", + "stop_type": "일반차로", + "node_id": "106000145", + "nxtStn": "면목두산아파트2.3단지" + }, + { + "stop_nm": "면목두산아파트4.5단지", + "ycode": "37.578533", + "stop_no": "07241", + "xcode": "127.081028", + "stop_type": "일반차로", + "node_id": "106000146", + "nxtStn": "면목119안전센터" + }, + { + "stop_nm": "사가정센트럴아이파크아파트", + "ycode": "37.581373", + "stop_no": "07242", + "xcode": "127.081988", + "stop_type": "일반차로", + "node_id": "106000147", + "nxtStn": "장안삼거리" + }, + { + "stop_nm": "홈플러스면목동점", + "ycode": "37.581130873", + "stop_no": "07243", + "xcode": "127.0817183593", + "stop_type": "일반차로", + "node_id": "106000148", + "nxtStn": "면목두산아파트2차" + }, + { + "stop_nm": "면목두산아파트2차", + "ycode": "37.5811079401", + "stop_no": "07244", + "xcode": "127.0848478468", + "stop_type": "일반차로", + "node_id": "106000149", + "nxtStn": "면목두산아파트4.5단지" + }, + { + "stop_nm": "면목두산아파트2차", + "ycode": "37.580998", + "stop_no": "07245", + "xcode": "127.084642", + "stop_type": "일반차로", + "node_id": "106000150", + "nxtStn": "사가정역" + }, + { + "stop_nm": "사가정역", + "ycode": "37.580905", + "stop_no": "07246", + "xcode": "127.087622", + "stop_type": "일반차로", + "node_id": "106000151", + "nxtStn": "면목두산아파트2차" + }, + { + "stop_nm": "사가정역", + "ycode": "37.580663", + "stop_no": "07247", + "xcode": "127.087297", + "stop_type": "일반차로", + "node_id": "106000152", + "nxtStn": "면목시장" + }, + { + "stop_nm": "사가정시장", + "ycode": "37.580642", + "stop_no": "07248", + "xcode": "127.089433", + "stop_type": "일반차로", + "node_id": "106000153", + "nxtStn": "사가정역" + }, + { + "stop_nm": "사가정시장", + "ycode": "37.580439", + "stop_no": "07249", + "xcode": "127.089307", + "stop_type": "일반차로", + "node_id": "106000154", + "nxtStn": "면중초등학교" + }, + { + "stop_nm": "용마산교차로", + "ycode": "37.580637", + "stop_no": "07250", + "xcode": "127.092499", + "stop_type": "일반차로", + "node_id": "106000155", + "nxtStn": "사가정시장" + }, + { + "stop_nm": "중화2동주민센터", + "ycode": "37.601637", + "stop_no": "07251", + "xcode": "127.076759", + "stop_type": "일반차로", + "node_id": "106000156", + "nxtStn": "이문동현대아파트앞" + }, + { + "stop_nm": "중화2동주민센터", + "ycode": "37.6014130353", + "stop_no": "07252", + "xcode": "127.0770110188", + "stop_type": "일반차로", + "node_id": "106000157", + "nxtStn": "중화역입구대원사약국" + }, + { + "stop_nm": "지하철7호선중화역3번출구", + "ycode": "37.601707", + "stop_no": "07253", + "xcode": "127.078733", + "stop_type": "일반차로", + "node_id": "106000158", + "nxtStn": "중화2동주민센터" + }, + { + "stop_nm": "지하철7호선중화역3번출구", + "ycode": "37.6014504691", + "stop_no": "07254", + "xcode": "127.0789975477", + "stop_type": "일반차로", + "node_id": "106000159", + "nxtStn": "지하철7호선중화역2번출구" + }, + { + "stop_nm": "지하철7호선중화역2번출구", + "ycode": "37.6016944246", + "stop_no": "07255", + "xcode": "127.0806830436", + "stop_type": "일반차로", + "node_id": "106000160", + "nxtStn": "지하철7호선중화역3번출구" + }, + { + "stop_nm": "지하철7호선중화역2번출구", + "ycode": "37.601522", + "stop_no": "07256", + "xcode": "127.080945", + "stop_type": "일반차로", + "node_id": "106000161", + "nxtStn": "중흥초등학교" + }, + { + "stop_nm": "중흥초등학교", + "ycode": "37.6017894225", + "stop_no": "07257", + "xcode": "127.082731936", + "stop_type": "일반차로", + "node_id": "106000162", + "nxtStn": "지하철7호선중화역2번출구" + }, + { + "stop_nm": "중흥초등학교", + "ycode": "37.601683", + "stop_no": "07258", + "xcode": "127.083092", + "stop_type": "일반차로", + "node_id": "106000163", + "nxtStn": "이화연립경동제일교회앞" + }, + { + "stop_nm": "이화연립경동제일교회앞", + "ycode": "37.6023518938", + "stop_no": "07259", + "xcode": "127.084996551", + "stop_type": "일반차로", + "node_id": "106000164", + "nxtStn": "중흥초등학교" + }, + { + "stop_nm": "이화연립경동제일교회앞", + "ycode": "37.602297", + "stop_no": "07260", + "xcode": "127.085312", + "stop_type": "일반차로", + "node_id": "106000165", + "nxtStn": "쌍용아파트신내테크노타운앞" + }, + { + "stop_nm": "쌍용아파트신내테크노타운앞", + "ycode": "37.6032877508", + "stop_no": "07261", + "xcode": "127.0879638335", + "stop_type": "일반차로", + "node_id": "106000166", + "nxtStn": "이화연립경동제일교회앞" + }, + { + "stop_nm": "쌍용아파트신내테크노타운앞", + "ycode": "37.6031155767", + "stop_no": "07262", + "xcode": "127.0880531041", + "stop_type": "일반차로", + "node_id": "106000167", + "nxtStn": "엘지아파트앞" + }, + { + "stop_nm": "엘지아파트앞", + "ycode": "37.6041", + "stop_no": "07263", + "xcode": "127.089863", + "stop_type": "일반차로", + "node_id": "106000168", + "nxtStn": "쌍용아파트신내테크노타운앞" + }, + { + "stop_nm": "엘지아파트앞", + "ycode": "37.603949", + "stop_no": "07264", + "xcode": "127.090003", + "stop_type": "일반차로", + "node_id": "106000169", + "nxtStn": "신현중학교" + }, + { + "stop_nm": "신현중학교", + "ycode": "37.605312", + "stop_no": "07265", + "xcode": "127.091763", + "stop_type": "일반차로", + "node_id": "106000170", + "nxtStn": "엘지아파트앞" + }, + { + "stop_nm": "신현중학교", + "ycode": "37.6047917401", + "stop_no": "07266", + "xcode": "127.0914211649", + "stop_type": "일반차로", + "node_id": "106000171", + "nxtStn": "중랑구청" + }, + { + "stop_nm": "중랑구청", + "ycode": "37.606645", + "stop_no": "07267", + "xcode": "127.094183", + "stop_type": "일반차로", + "node_id": "106000172", + "nxtStn": "신현중학교" + }, + { + "stop_nm": "중랑구청", + "ycode": "37.6062056111", + "stop_no": "07268", + "xcode": "127.0936349035", + "stop_type": "일반차로", + "node_id": "106000173", + "nxtStn": "동성프라자앞" + }, + { + "stop_nm": "동성프라자앞", + "ycode": "37.6077715316", + "stop_no": "07269", + "xcode": "127.0971854414", + "stop_type": "일반차로", + "node_id": "106000174", + "nxtStn": "신내동성3차아파트" + }, + { + "stop_nm": "동성프라자앞", + "ycode": "37.6077071928", + "stop_no": "07270", + "xcode": "127.0976236907", + "stop_type": "일반차로", + "node_id": "106000175", + "nxtStn": "신내초등학교" + }, + { + "stop_nm": "성원아파트경남아너스빌앞", + "ycode": "37.6039568351", + "stop_no": "07271", + "xcode": "127.0954657423", + "stop_type": "일반차로", + "node_id": "106000176", + "nxtStn": "국민은행망우동지점" + }, + { + "stop_nm": "성원아파트경남아너스빌앞", + "ycode": "37.6034500817", + "stop_no": "07272", + "xcode": "127.0958886791", + "stop_type": "일반차로", + "node_id": "106000177", + "nxtStn": "중랑구청사거리" + }, + { + "stop_nm": "중랑구청사거리", + "ycode": "37.605617", + "stop_no": "07273", + "xcode": "127.095212", + "stop_type": "일반차로", + "node_id": "106000178", + "nxtStn": "성원아파트경남아너스빌앞" + }, + { + "stop_nm": "중랑구청사거리", + "ycode": "37.606057", + "stop_no": "07274", + "xcode": "127.095368", + "stop_type": "일반차로", + "node_id": "106000179", + "nxtStn": "신내동성3차아파트" + }, + { + "stop_nm": "신내동성3차아파트", + "ycode": "37.607645", + "stop_no": "07275", + "xcode": "127.09524", + "stop_type": "일반차로", + "node_id": "106000180", + "nxtStn": "신내동성1.2차아파트" + }, + { + "stop_nm": "신내동성1.2차아파트", + "ycode": "37.609753", + "stop_no": "07276", + "xcode": "127.096062", + "stop_type": "일반차로", + "node_id": "106000181", + "nxtStn": "신내9단지아파트.서울의료원" + }, + { + "stop_nm": "신내10단지아파트", + "ycode": "37.6091470123", + "stop_no": "07277", + "xcode": "127.0955629892", + "stop_type": "일반차로", + "node_id": "106000182", + "nxtStn": "동성프라자앞" + }, + { + "stop_nm": "신내9단지아파트", + "ycode": "37.6105694794", + "stop_no": "07278", + "xcode": "127.0959906996", + "stop_type": "일반차로", + "node_id": "106000183", + "nxtStn": "신내10단지아파트" + }, + { + "stop_nm": "신내8단지아파트.서울의료원", + "ycode": "37.6131148914", + "stop_no": "07279", + "xcode": "127.0961797384", + "stop_type": "일반차로", + "node_id": "106000184", + "nxtStn": "신내9단지아파트" + }, + { + "stop_nm": "신내9단지아파트.서울의료원", + "ycode": "37.612626142", + "stop_no": "07280", + "xcode": "127.0966220017", + "stop_type": "일반차로", + "node_id": "106000185", + "nxtStn": "중랑소방서" + }, + { + "stop_nm": "신내7단지아파트홈플러스", + "ycode": "37.6152532096", + "stop_no": "07281", + "xcode": "127.0938875252", + "stop_type": "일반차로", + "node_id": "106000186", + "nxtStn": "중랑소방서" + }, + { + "stop_nm": "신내7단지아파트홈플러스", + "ycode": "37.615523", + "stop_no": "07282", + "xcode": "127.093707", + "stop_type": "일반차로", + "node_id": "106000187", + "nxtStn": "신내6단지아파트" + }, + { + "stop_nm": "봉화초등학교", + "ycode": "37.6137609119", + "stop_no": "07283", + "xcode": "127.0917243901", + "stop_type": "일반차로", + "node_id": "106000188", + "nxtStn": "신내7단지아파트홈플러스" + }, + { + "stop_nm": "봉화초등학교", + "ycode": "37.6138773039", + "stop_no": "07284", + "xcode": "127.0915285695", + "stop_type": "일반차로", + "node_id": "106000189", + "nxtStn": "신내6단지아파트.옹기테마공원" + }, + { + "stop_nm": "신내6단지아파트.옹기테마공원", + "ycode": "37.6138970824", + "stop_no": "07285", + "xcode": "127.0904185112", + "stop_type": "일반차로", + "node_id": "106000190", + "nxtStn": "신내우체국.5단지두산대림아파트" + }, + { + "stop_nm": "신내6단지", + "ycode": "37.616207", + "stop_no": "07286", + "xcode": "127.091775", + "stop_type": "일반차로", + "node_id": "106000191", + "nxtStn": "신내7단지아파트홈플러스" + }, + { + "stop_nm": "신내6단지아파트.옹기테마공원", + "ycode": "37.613983", + "stop_no": "07287", + "xcode": "127.090082", + "stop_type": "일반차로", + "node_id": "106000192", + "nxtStn": "봉화초등학교" + }, + { + "stop_nm": "신내우체국.5단지두산대림아파트", + "ycode": "37.6165664023", + "stop_no": "07288", + "xcode": "127.0900173419", + "stop_type": "일반차로", + "node_id": "106000193", + "nxtStn": "신내6단지" + }, + { + "stop_nm": "신내우체국.5단지두산대림아파트", + "ycode": "37.616633", + "stop_no": "07289", + "xcode": "127.08977", + "stop_type": "일반차로", + "node_id": "106000194", + "nxtStn": "신내6단지아파트.옹기테마공원" + }, + { + "stop_nm": "구립도서관체육관", + "ycode": "37.61561", + "stop_no": "07290", + "xcode": "127.087083", + "stop_type": "일반차로", + "node_id": "106000195", + "nxtStn": "신내우체국.5단지두산대림아파트" + }, + { + "stop_nm": "구립도서관체육관", + "ycode": "37.615712", + "stop_no": "07291", + "xcode": "127.087137", + "stop_type": "일반차로", + "node_id": "106000196", + "nxtStn": "신내5단지아파트" + }, + { + "stop_nm": "신내4단지아파트", + "ycode": "37.6165927675", + "stop_no": "07292", + "xcode": "127.0860809693", + "stop_type": "일반차로", + "node_id": "106000197", + "nxtStn": "구립도서관체육관" + }, + { + "stop_nm": "신내4단지아파트", + "ycode": "37.61653", + "stop_no": "07293", + "xcode": "127.086243", + "stop_type": "일반차로", + "node_id": "106000198", + "nxtStn": "태릉고등학교.원묵초등학교" + }, + { + "stop_nm": "지하철6호선화랑대역", + "ycode": "37.619727", + "stop_no": "07294", + "xcode": "127.085768", + "stop_type": "일반차로", + "node_id": "106000199", + "nxtStn": "태릉고등학교.원묵초등학교" + }, + { + "stop_nm": "지하철6호선화랑대역", + "ycode": "37.61985", + "stop_no": "07295", + "xcode": "127.086185", + "stop_type": "일반차로", + "node_id": "106000200", + "nxtStn": "예수사랑교회" + }, + { + "stop_nm": "봉화산역2번출구", + "ycode": "37.616705", + "stop_no": "07296", + "xcode": "127.093173", + "stop_type": "일반차로", + "node_id": "106000201", + "nxtStn": "신내6단지" + }, + { + "stop_nm": "봉화산역3번출구", + "ycode": "37.616458735", + "stop_no": "07297", + "xcode": "127.0929080569", + "stop_type": "일반차로", + "node_id": "106000202", + "nxtStn": "서울의료원후문" + }, + { + "stop_nm": "중랑경찰서후문", + "ycode": "37.619875", + "stop_no": "07298", + "xcode": "127.105557", + "stop_type": "일반차로", + "node_id": "106000203", + "nxtStn": "우디안아파트114동앞" + }, + { + "stop_nm": "새우개마을", + "ycode": "37.6182441062", + "stop_no": "07299", + "xcode": "127.1033558569", + "stop_type": "일반차로", + "node_id": "106000204", + "nxtStn": "신내능마을" + }, + { + "stop_nm": "신내능마을", + "ycode": "37.6143619055", + "stop_no": "07300", + "xcode": "127.1016592961", + "stop_type": "일반차로", + "node_id": "106000205", + "nxtStn": "중랑경찰서후문" + }, + { + "stop_nm": "신내능마을", + "ycode": "37.6145594387", + "stop_no": "07301", + "xcode": "127.1014318828", + "stop_type": "일반차로", + "node_id": "106000206", + "nxtStn": "신내데시앙아파트후문" + }, + { + "stop_nm": "신내교회.신내데시앙아파트", + "ycode": "37.6105405898", + "stop_no": "07302", + "xcode": "127.101332875", + "stop_type": "일반차로", + "node_id": "106000207", + "nxtStn": "중랑공영차고지" + }, + { + "stop_nm": "신내교회.신내데시앙아파트", + "ycode": "37.6105382531", + "stop_no": "07303", + "xcode": "127.101015256", + "stop_type": "일반차로", + "node_id": "106000208", + "nxtStn": "신내초등학교" + }, + { + "stop_nm": "신내초등학교", + "ycode": "37.6061555986", + "stop_no": "07304", + "xcode": "127.1007499588", + "stop_type": "일반차로", + "node_id": "106000209", + "nxtStn": "능산지하차도" + }, + { + "stop_nm": "신내새한아파트앞", + "ycode": "37.605838161", + "stop_no": "07305", + "xcode": "127.101048541", + "stop_type": "일반차로", + "node_id": "106000210", + "nxtStn": "동성프라자앞" + }, + { + "stop_nm": "능산지하차도", + "ycode": "37.6009474144", + "stop_no": "07306", + "xcode": "127.1006376085", + "stop_type": "일반차로", + "node_id": "106000211", + "nxtStn": "신내새한아파트앞" + }, + { + "stop_nm": "능산지하차도", + "ycode": "37.6010819221", + "stop_no": "07307", + "xcode": "127.1003489912", + "stop_type": "일반차로", + "node_id": "106000212", + "nxtStn": "하나은행망우동지점" + }, + { + "stop_nm": "상봉터미널", + "ycode": "37.5964661524", + "stop_no": "07308", + "xcode": "127.0931425288", + "stop_type": "일반차로", + "node_id": "106000213", + "nxtStn": "망우역" + }, + { + "stop_nm": "상봉터미널", + "ycode": "37.5962266864", + "stop_no": "07309", + "xcode": "127.092859113", + "stop_type": "일반차로", + "node_id": "106000214", + "nxtStn": "상봉신협" + }, + { + "stop_nm": "망우3동주민센터.혜원여중고후문", + "ycode": "37.5921676455", + "stop_no": "07310", + "xcode": "127.0935437056", + "stop_type": "일반차로", + "node_id": "106000215", + "nxtStn": "상봉신협" + }, + { + "stop_nm": "망우3동주민센터.혜원여중고후문", + "ycode": "37.5924652462", + "stop_no": "07311", + "xcode": "127.0932383267", + "stop_type": "일반차로", + "node_id": "106000216", + "nxtStn": "동원시장" + }, + { + "stop_nm": "동원시장", + "ycode": "37.5904581513", + "stop_no": "07312", + "xcode": "127.0937068936", + "stop_type": "일반차로", + "node_id": "106000217", + "nxtStn": "망우3동주민센터.혜원여중고후문" + }, + { + "stop_nm": "동원시장", + "ycode": "37.5903997916", + "stop_no": "07313", + "xcode": "127.0934407109", + "stop_type": "일반차로", + "node_id": "106000218", + "nxtStn": "면목본동파출소" + }, + { + "stop_nm": "면목본동파출소", + "ycode": "37.5886709536", + "stop_no": "07314", + "xcode": "127.0941326831", + "stop_type": "일반차로", + "node_id": "106000219", + "nxtStn": "동원시장" + }, + { + "stop_nm": "면목본동파출소", + "ycode": "37.5871759203", + "stop_no": "07315", + "xcode": "127.0942915914", + "stop_type": "일반차로", + "node_id": "106000220", + "nxtStn": "중화중학교.다문화가족지원센터" + }, + { + "stop_nm": "중화2동체육공원", + "ycode": "37.60036", + "stop_no": "07316", + "xcode": "127.073872", + "stop_type": "일반차로", + "node_id": "106000221", + "nxtStn": "중화2동주민센터" + }, + { + "stop_nm": "중화빗물펌프장", + "ycode": "37.598335", + "stop_no": "07317", + "xcode": "127.072015", + "stop_type": "일반차로", + "node_id": "106000222", + "nxtStn": "중화2동새마을금고" + }, + { + "stop_nm": "중화2동새마을금고", + "ycode": "37.595615", + "stop_no": "07318", + "xcode": "127.072125", + "stop_type": "일반차로", + "node_id": "106000223", + "nxtStn": "중랑교동부시장" + }, + { + "stop_nm": "중화2동새마을금고", + "ycode": "37.595532", + "stop_no": "07319", + "xcode": "127.072348", + "stop_type": "일반차로", + "node_id": "106000224", + "nxtStn": "성은교회앞" + }, + { + "stop_nm": "중랑교동부시장", + "ycode": "37.5938170461", + "stop_no": "07320", + "xcode": "127.0724587364", + "stop_type": "일반차로", + "node_id": "106000225", + "nxtStn": "중랑교" + }, + { + "stop_nm": "중랑교동부시장", + "ycode": "37.5938844814", + "stop_no": "07321", + "xcode": "127.072696613", + "stop_type": "일반차로", + "node_id": "106000226", + "nxtStn": "중화2동새마을금고" + }, + { + "stop_nm": "아남리치카운티아파트", + "ycode": "37.590405", + "stop_no": "07324", + "xcode": "127.085383", + "stop_type": "일반차로", + "node_id": "106000228", + "nxtStn": "지하철7호선상봉역" + }, + { + "stop_nm": "망우동고개", + "ycode": "37.6012829905", + "stop_no": "07325", + "xcode": "127.1083597586", + "stop_type": "일반차로", + "node_id": "106000229", + "nxtStn": "망우동금호어울림아파트" + }, + { + "stop_nm": "망우금호어울림아파트", + "ycode": "37.602019", + "stop_no": "07327", + "xcode": "127.108052", + "stop_type": "일반차로", + "node_id": "106000231", + "nxtStn": "망우동고개" + }, + { + "stop_nm": "망우동금호어울림아파트", + "ycode": "37.6023627391", + "stop_no": "07328", + "xcode": "127.1080906424", + "stop_type": "일반차로", + "node_id": "106000232", + "nxtStn": "서울특별시북부병원" + }, + { + "stop_nm": "경남아파트", + "ycode": "37.6038260938", + "stop_no": "07329", + "xcode": "127.1071130742", + "stop_type": "일반차로", + "node_id": "106000233", + "nxtStn": "망우금호어울림아파트" + }, + { + "stop_nm": "서울특별시북부병원", + "ycode": "37.604098", + "stop_no": "07330", + "xcode": "127.107178", + "stop_type": "일반차로", + "node_id": "106000234", + "nxtStn": "양원역입구" + }, + { + "stop_nm": "양원역입구", + "ycode": "37.6055398887", + "stop_no": "07331", + "xcode": "127.1061947194", + "stop_type": "일반차로", + "node_id": "106000235", + "nxtStn": "경남아파트" + }, + { + "stop_nm": "양원역입구", + "ycode": "37.6056398133", + "stop_no": "07332", + "xcode": "127.106301327", + "stop_type": "일반차로", + "node_id": "106000236", + "nxtStn": "양원리" + }, + { + "stop_nm": "양원리", + "ycode": "37.609532", + "stop_no": "07333", + "xcode": "127.106587", + "stop_type": "일반차로", + "node_id": "106000237", + "nxtStn": "동서울교회" + }, + { + "stop_nm": "양원리", + "ycode": "37.609634", + "stop_no": "07334", + "xcode": "127.106506", + "stop_type": "일반차로", + "node_id": "106000238", + "nxtStn": "양원역입구" + }, + { + "stop_nm": "동서울교회", + "ycode": "37.611755", + "stop_no": "07335", + "xcode": "127.105265", + "stop_type": "일반차로", + "node_id": "106000239", + "nxtStn": "신내역1번출구" + }, + { + "stop_nm": "동서울교회", + "ycode": "37.6115852113", + "stop_no": "07336", + "xcode": "127.105257509", + "stop_type": "일반차로", + "node_id": "106000240", + "nxtStn": "양원리" + }, + { + "stop_nm": "중랑공영차고지", + "ycode": "37.613645229", + "stop_no": "07337", + "xcode": "127.1020230606", + "stop_type": "일반차로", + "node_id": "106000241", + "nxtStn": "중랑공영차고지.신내역" + }, + { + "stop_nm": "면목아남아파트", + "ycode": "37.5903178004", + "stop_no": "07346", + "xcode": "127.0850893069", + "stop_type": "일반차로", + "node_id": "106000249", + "nxtStn": "면목마젤란아파트" + }, + { + "stop_nm": "중랑소방서", + "ycode": "37.6148745872", + "stop_no": "07347", + "xcode": "127.0952202984", + "stop_type": "일반차로", + "node_id": "106000250", + "nxtStn": "신내7단지아파트홈플러스" + }, + { + "stop_nm": "세방아파트입구", + "ycode": "37.61511", + "stop_no": "07348", + "xcode": "127.08462", + "stop_type": "일반차로", + "node_id": "106000251", + "nxtStn": "먹골파출소.신안아파트입구" + }, + { + "stop_nm": "원묵고등학교", + "ycode": "37.6156010333", + "stop_no": "07349", + "xcode": "127.0855859412", + "stop_type": "일반차로", + "node_id": "106000252", + "nxtStn": "신내5단지아파트" + }, + { + "stop_nm": "먹골파출소.신안아파트입구", + "ycode": "37.61456", + "stop_no": "07350", + "xcode": "127.08234", + "stop_type": "일반차로", + "node_id": "106000253", + "nxtStn": "신안2차아파트" + }, + { + "stop_nm": "먹골파출소.신안아파트입구", + "ycode": "37.61441", + "stop_no": "07351", + "xcode": "127.08124", + "stop_type": "일반차로", + "node_id": "106000254", + "nxtStn": "원묵고등학교" + }, + { + "stop_nm": "신안2차아파트", + "ycode": "37.6147974229", + "stop_no": "07352", + "xcode": "127.0788949924", + "stop_type": "일반차로", + "node_id": "106000255", + "nxtStn": "동양쇼핑" + }, + { + "stop_nm": "신안2차아파트입구", + "ycode": "37.614411", + "stop_no": "07353", + "xcode": "127.080063", + "stop_type": "일반차로", + "node_id": "106000256", + "nxtStn": "먹골파출소.신안아파트입구" + }, + { + "stop_nm": "중랑소방서", + "ycode": "37.61468", + "stop_no": "07354", + "xcode": "127.095217", + "stop_type": "일반차로", + "node_id": "106000257", + "nxtStn": "신내8단지아파트.서울의료원" + }, + { + "stop_nm": "송곡여고양원역", + "ycode": "37.605722", + "stop_no": "07355", + "xcode": "127.105802", + "stop_type": "일반차로", + "node_id": "106000258", + "nxtStn": "엘림재가방문요양센터" + }, + { + "stop_nm": "송곡여고양원역", + "ycode": "37.605473", + "stop_no": "07356", + "xcode": "127.1056", + "stop_type": "일반차로", + "node_id": "106000259", + "nxtStn": "양원리" + }, + { + "stop_nm": "엘림재가방문요양센터", + "ycode": "37.6046853285", + "stop_no": "07357", + "xcode": "127.1035239722", + "stop_type": "일반차로", + "node_id": "106000260", + "nxtStn": "이화미디어고.중랑숲어린이도서관" + }, + { + "stop_nm": "엘림재가방문요양센터", + "ycode": "37.604392", + "stop_no": "07358", + "xcode": "127.103255", + "stop_type": "일반차로", + "node_id": "106000261", + "nxtStn": "송곡여고양원역" + }, + { + "stop_nm": "이화미디어고.중랑숲어린이도서관", + "ycode": "37.6032313021", + "stop_no": "07359", + "xcode": "127.1021141659", + "stop_type": "일반차로", + "node_id": "106000262", + "nxtStn": "금란교회" + }, + { + "stop_nm": "이화미디어고.중랑숲어린이도서관", + "ycode": "37.6031193851", + "stop_no": "07360", + "xcode": "127.1023246716", + "stop_type": "일반차로", + "node_id": "106000263", + "nxtStn": "엘림재가방문요양센터" + }, + { + "stop_nm": "금란교회", + "ycode": "37.601288", + "stop_no": "07361", + "xcode": "127.10199", + "stop_type": "일반차로", + "node_id": "106000264", + "nxtStn": "망우사거리" + }, + { + "stop_nm": "금란교회", + "ycode": "37.60118", + "stop_no": "07362", + "xcode": "127.10215", + "stop_type": "일반차로", + "node_id": "106000265", + "nxtStn": "이화미디어고.중랑숲어린이도서관" + }, + { + "stop_nm": "망우사거리", + "ycode": "37.6005378384", + "stop_no": "07363", + "xcode": "127.1001455367", + "stop_type": "일반차로", + "node_id": "106000266", + "nxtStn": "국민은행망우동지점" + }, + { + "stop_nm": "망우사거리", + "ycode": "37.600378", + "stop_no": "07364", + "xcode": "127.099922", + "stop_type": "일반차로", + "node_id": "106000267", + "nxtStn": "금란교회" + }, + { + "stop_nm": "국민은행망우동지점", + "ycode": "37.5999201792", + "stop_no": "07365", + "xcode": "127.0974107927", + "stop_type": "일반차로", + "node_id": "106000268", + "nxtStn": "성원아파트경남아너스빌앞" + }, + { + "stop_nm": "국민은행망우동지점", + "ycode": "37.5997615516", + "stop_no": "07366", + "xcode": "127.0974547542", + "stop_type": "일반차로", + "node_id": "106000269", + "nxtStn": "망우사거리" + }, + { + "stop_nm": "신내6단지아파트", + "ycode": "37.616412", + "stop_no": "07367", + "xcode": "127.091705", + "stop_type": "일반차로", + "node_id": "106000270", + "nxtStn": "신내우체국.5단지두산대림아파트" + }, + { + "stop_nm": "이수아파트앞시장입구", + "ycode": "37.618275", + "stop_no": "07369", + "xcode": "127.083077", + "stop_type": "일반차로", + "node_id": "106000271", + "nxtStn": "묵동교" + }, + { + "stop_nm": "이수아파트앞시장입구", + "ycode": "37.618177", + "stop_no": "07370", + "xcode": "127.082953", + "stop_type": "일반차로", + "node_id": "106000272", + "nxtStn": "지하철6호선화랑대역" + }, + { + "stop_nm": "묵동교", + "ycode": "37.618035", + "stop_no": "07371", + "xcode": "127.079282", + "stop_type": "일반차로", + "node_id": "106000273", + "nxtStn": "묵동구길" + }, + { + "stop_nm": "묵동교", + "ycode": "37.618", + "stop_no": "07372", + "xcode": "127.079462", + "stop_type": "일반차로", + "node_id": "106000274", + "nxtStn": "이수아파트앞시장입구" + }, + { + "stop_nm": "동양쇼핑", + "ycode": "37.61544", + "stop_no": "07373", + "xcode": "127.078388", + "stop_type": "일반차로", + "node_id": "106000275", + "nxtStn": "우리은행" + }, + { + "stop_nm": "우리은행", + "ycode": "37.6157665771", + "stop_no": "07375", + "xcode": "127.076789072", + "stop_type": "일반차로", + "node_id": "106000277", + "nxtStn": "태릉입구역" + }, + { + "stop_nm": "목동교입구.로프트원오피스텔", + "ycode": "37.6155845183", + "stop_no": "07376", + "xcode": "127.076850054", + "stop_type": "일반차로", + "node_id": "106000278", + "nxtStn": "묵동구길" + }, + { + "stop_nm": "한국아파트", + "ycode": "37.614932", + "stop_no": "07377", + "xcode": "127.073243", + "stop_type": "일반차로", + "node_id": "106000279", + "nxtStn": "동구햇살아파트" + }, + { + "stop_nm": "동구햇살아파트", + "ycode": "37.6134823027", + "stop_no": "07378", + "xcode": "127.0740058681", + "stop_type": "일반차로", + "node_id": "106000280", + "nxtStn": "브라운캐슬B동" + }, + { + "stop_nm": "묵동롯데시네마", + "ycode": "37.614848", + "stop_no": "07379", + "xcode": "127.075273", + "stop_type": "일반차로", + "node_id": "106000281", + "nxtStn": "브라운캐슬" + }, + { + "stop_nm": "묵동롯데시네마", + "ycode": "37.615033", + "stop_no": "07380", + "xcode": "127.075498", + "stop_type": "일반차로", + "node_id": "106000282", + "nxtStn": "목동교입구.로프트원오피스텔" + }, + { + "stop_nm": "브라운캐슬", + "ycode": "37.613589603", + "stop_no": "07381", + "xcode": "127.075317679", + "stop_type": "일반차로", + "node_id": "106000283", + "nxtStn": "먹골역입구" + }, + { + "stop_nm": "브라운캐슬", + "ycode": "37.6136191751", + "stop_no": "07382", + "xcode": "127.0755737065", + "stop_type": "일반차로", + "node_id": "106000284", + "nxtStn": "묵동롯데시네마" + }, + { + "stop_nm": "먹골역입구", + "ycode": "37.611463", + "stop_no": "07383", + "xcode": "127.075802", + "stop_type": "일반차로", + "node_id": "106000285", + "nxtStn": "묵2동주민센터" + }, + { + "stop_nm": "먹골역입구", + "ycode": "37.611487", + "stop_no": "07384", + "xcode": "127.07589", + "stop_type": "일반차로", + "node_id": "106000286", + "nxtStn": "브라운캐슬" + }, + { + "stop_nm": "묵2동주민센터", + "ycode": "37.6098946925", + "stop_no": "07385", + "xcode": "127.0760354677", + "stop_type": "일반차로", + "node_id": "106000287", + "nxtStn": "금보당금은방" + }, + { + "stop_nm": "묵2동주민센터", + "ycode": "37.609907", + "stop_no": "07386", + "xcode": "127.076185", + "stop_type": "일반차로", + "node_id": "106000288", + "nxtStn": "먹골역입구" + }, + { + "stop_nm": "금보당금은방", + "ycode": "37.608187", + "stop_no": "07387", + "xcode": "127.076422", + "stop_type": "일반차로", + "node_id": "106000289", + "nxtStn": "신묵초등학교입구" + }, + { + "stop_nm": "금보당금은방", + "ycode": "37.6079263237", + "stop_no": "07388", + "xcode": "127.0766496237", + "stop_type": "일반차로", + "node_id": "106000290", + "nxtStn": "묵2동주민센터" + }, + { + "stop_nm": "신묵초등학교입구", + "ycode": "37.606737", + "stop_no": "07389", + "xcode": "127.076707", + "stop_type": "일반차로", + "node_id": "106000291", + "nxtStn": "제일시장" + }, + { + "stop_nm": "신묵초등학교", + "ycode": "37.60674", + "stop_no": "07390", + "xcode": "127.076797", + "stop_type": "일반차로", + "node_id": "106000292", + "nxtStn": "금보당금은방" + }, + { + "stop_nm": "제일시장", + "ycode": "37.6049696369", + "stop_no": "07391", + "xcode": "127.0769920333", + "stop_type": "일반차로", + "node_id": "106000293", + "nxtStn": "신동신약국" + }, + { + "stop_nm": "제일프라자", + "ycode": "37.604997", + "stop_no": "07392", + "xcode": "127.077127", + "stop_type": "일반차로", + "node_id": "106000294", + "nxtStn": "신묵초등학교" + }, + { + "stop_nm": "신동신약국", + "ycode": "37.6035367408", + "stop_no": "07393", + "xcode": "127.0772499173", + "stop_type": "일반차로", + "node_id": "106000295", + "nxtStn": "중화역입구대원사약국" + }, + { + "stop_nm": "신동신약국", + "ycode": "37.603468", + "stop_no": "07394", + "xcode": "127.07742", + "stop_type": "일반차로", + "node_id": "106000296", + "nxtStn": "제일프라자" + }, + { + "stop_nm": "중화역입구대원사약국", + "ycode": "37.6012530842", + "stop_no": "07395", + "xcode": "127.0777107671", + "stop_type": "일반차로", + "node_id": "106000297", + "nxtStn": "태릉시장입구" + }, + { + "stop_nm": "중화역입구대원사입구", + "ycode": "37.601903", + "stop_no": "07396", + "xcode": "127.077742", + "stop_type": "일반차로", + "node_id": "106000298", + "nxtStn": "신동신약국" + }, + { + "stop_nm": "태릉시장입구", + "ycode": "37.5994786312", + "stop_no": "07397", + "xcode": "127.0780328218", + "stop_type": "일반차로", + "node_id": "106000299", + "nxtStn": "수협" + }, + { + "stop_nm": "태릉프라자약국농협", + "ycode": "37.59834", + "stop_no": "07398", + "xcode": "127.077145", + "stop_type": "일반차로", + "node_id": "106000300", + "nxtStn": "태릉시장입구굴다리" + }, + { + "stop_nm": "태릉시장입구굴다리", + "ycode": "37.596675", + "stop_no": "07399", + "xcode": "127.075747", + "stop_type": "일반차로", + "node_id": "106000301", + "nxtStn": "중랑역동부시장1" + }, + { + "stop_nm": "우남푸르미아아파트", + "ycode": "37.607243", + "stop_no": "07401", + "xcode": "127.099208", + "stop_type": "일반차로", + "node_id": "106000303", + "nxtStn": "신내초등학교" + }, + { + "stop_nm": "우남푸르미아아파트", + "ycode": "37.606984993", + "stop_no": "07402", + "xcode": "127.0992197585", + "stop_type": "일반차로", + "node_id": "106000304", + "nxtStn": "능산사거리" + }, + { + "stop_nm": "신내초등학교", + "ycode": "37.605195", + "stop_no": "07403", + "xcode": "127.097703", + "stop_type": "일반차로", + "node_id": "106000305", + "nxtStn": "경남아파트" + }, + { + "stop_nm": "신내초등학교", + "ycode": "37.605377", + "stop_no": "07404", + "xcode": "127.097937", + "stop_type": "일반차로", + "node_id": "106000306", + "nxtStn": "우남푸르미아아파트" + }, + { + "stop_nm": "경남아파트", + "ycode": "37.602835", + "stop_no": "07405", + "xcode": "127.096948", + "stop_type": "일반차로", + "node_id": "106000307", + "nxtStn": "성원아파트경남아너스빌앞" + }, + { + "stop_nm": "대명프라자", + "ycode": "37.6024633795", + "stop_no": "07406", + "xcode": "127.0970063858", + "stop_type": "일반차로", + "node_id": "106000308", + "nxtStn": "신내초등학교" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.602475", + "stop_no": "07407", + "xcode": "127.096077", + "stop_type": "일반차로", + "node_id": "106000309", + "nxtStn": "대명프라자" + }, + { + "stop_nm": "상봉1동주민센터", + "ycode": "37.6004378473", + "stop_no": "07408", + "xcode": "127.0876490313", + "stop_type": "일반차로", + "node_id": "106000310", + "nxtStn": "신내쌍용아파트" + }, + { + "stop_nm": "상봉1동주민센터", + "ycode": "37.6006651301", + "stop_no": "07409", + "xcode": "127.0873672963", + "stop_type": "일반차로", + "node_id": "106000311", + "nxtStn": "지하철7호선상봉역" + }, + { + "stop_nm": "신내쌍용아파트", + "ycode": "37.601538208", + "stop_no": "07410", + "xcode": "127.0874691143", + "stop_type": "일반차로", + "node_id": "106000312", + "nxtStn": "쌍용아파트신내테크노타운앞" + }, + { + "stop_nm": "신내쌍용아파트", + "ycode": "37.6022634222", + "stop_no": "07411", + "xcode": "127.0871091386", + "stop_type": "일반차로", + "node_id": "106000313", + "nxtStn": "상봉1동주민센터" + }, + { + "stop_nm": "면목두산아파트2.3단지", + "ycode": "37.579814057", + "stop_no": "07415", + "xcode": "127.0826783287", + "stop_type": "일반차로", + "node_id": "106000477", + "nxtStn": "면목두산아파트2차" + }, + { + "stop_nm": "망우역", + "ycode": "37.5986297908", + "stop_no": "07417", + "xcode": "127.0929810127", + "stop_type": "일반차로", + "node_id": "106000318", + "nxtStn": "국민은행망우동지점" + }, + { + "stop_nm": "중랑공영차고지.신내역", + "ycode": "37.6135447482", + "stop_no": "07418", + "xcode": "127.1027996822", + "stop_type": "일반차로", + "node_id": "106000319", + "nxtStn": "새우개마을입구" + }, + { + "stop_nm": "서울특별시북부병원", + "ycode": "37.605022", + "stop_no": "07420", + "xcode": "127.108843", + "stop_type": "일반차로", + "node_id": "106000320", + "nxtStn": "양원역" + }, + { + "stop_nm": "양원역", + "ycode": "37.606348", + "stop_no": "07421", + "xcode": "127.107417", + "stop_type": "일반차로", + "node_id": "106000321", + "nxtStn": "양원역입구" + }, + { + "stop_nm": "성은교회앞", + "ycode": "37.597175", + "stop_no": "07422", + "xcode": "127.071965", + "stop_type": "일반차로", + "node_id": "106000322", + "nxtStn": "중화2동체육공원" + }, + { + "stop_nm": "해모로아파트앞", + "ycode": "37.601927", + "stop_no": "07424", + "xcode": "127.111338", + "stop_type": "일반차로", + "node_id": "106000324", + "nxtStn": "서울특별시북부병원" + }, + { + "stop_nm": "먹골역", + "ycode": "37.6089365533", + "stop_no": "07425", + "xcode": "127.0778546804", + "stop_type": "가로변시간", + "node_id": "106000325", + "nxtStn": "한국전력동대문중랑지사" + }, + { + "stop_nm": "먹골역", + "ycode": "37.6093643524", + "stop_no": "07426", + "xcode": "127.0781824676", + "stop_type": "가로변시간", + "node_id": "106000326", + "nxtStn": "먹골역.묵동자이아파트" + }, + { + "stop_nm": "중화2동체육공원", + "ycode": "37.6003626826", + "stop_no": "07427", + "xcode": "127.0736950143", + "stop_type": "일반차로", + "node_id": "106000327", + "nxtStn": "중화빗물펌프장" + }, + { + "stop_nm": "태릉고등학교앞", + "ycode": "37.618437592", + "stop_no": "07429", + "xcode": "127.0853769562", + "stop_type": "일반차로", + "node_id": "106000328", + "nxtStn": "이수아파트앞시장입구" + }, + { + "stop_nm": "태릉고등학교.원묵초등학교", + "ycode": "37.6186329275", + "stop_no": "07430", + "xcode": "127.0874434835", + "stop_type": "일반차로", + "node_id": "106000329", + "nxtStn": "신내4단지아파트" + }, + { + "stop_nm": "태릉고등학교.원묵초등학교", + "ycode": "37.618038", + "stop_no": "07431", + "xcode": "127.08734", + "stop_type": "일반차로", + "node_id": "106000330", + "nxtStn": "지하철6호선화랑대역" + }, + { + "stop_nm": "서울의료원후문", + "ycode": "37.613773", + "stop_no": "07432", + "xcode": "127.097435", + "stop_type": "일반차로", + "node_id": "106000439", + "nxtStn": "신내데시앙아파트후문" + }, + { + "stop_nm": "서울의료원후문", + "ycode": "37.613665", + "stop_no": "07433", + "xcode": "127.098397", + "stop_type": "일반차로", + "node_id": "106000438", + "nxtStn": "봉화산역2번출구" + }, + { + "stop_nm": "신내데시앙아파트후문", + "ycode": "37.61316", + "stop_no": "07434", + "xcode": "127.099442", + "stop_type": "일반차로", + "node_id": "106000436", + "nxtStn": "신내능마을" + }, + { + "stop_nm": "신내데시앙아파트후문", + "ycode": "37.6130754494", + "stop_no": "07435", + "xcode": "127.1002631605", + "stop_type": "일반차로", + "node_id": "106000437", + "nxtStn": "서울의료원후문" + }, + { + "stop_nm": "중화중학교삼거리", + "ycode": "37.5864491668", + "stop_no": "07436", + "xcode": "127.0948851433", + "stop_type": "일반차로", + "node_id": "106000440", + "nxtStn": "서울동부새마을금고본점" + }, + { + "stop_nm": "새우개마을입구", + "ycode": "37.614242", + "stop_no": "07437", + "xcode": "127.099763", + "stop_type": "일반차로", + "node_id": "106000441", + "nxtStn": "봉화초등학교" + }, + { + "stop_nm": "신내차량사업소입구", + "ycode": "37.6126730935", + "stop_no": "07438", + "xcode": "127.10186655", + "stop_type": "일반차로", + "node_id": "106000442", + "nxtStn": "동서울교회" + }, + { + "stop_nm": "용마산빌라", + "ycode": "37.571309", + "stop_no": "07439", + "xcode": "127.084125", + "stop_type": "일반차로", + "node_id": "106000443", + "nxtStn": "면곡시장앞" + }, + { + "stop_nm": "신내역1번출구", + "ycode": "37.612477", + "stop_no": "07440", + "xcode": "127.103338", + "stop_type": "일반차로", + "node_id": "106000454", + "nxtStn": "중랑공영차고지" + }, + { + "stop_nm": "능말입구", + "ycode": "37.613847", + "stop_no": "07442", + "xcode": "127.105677", + "stop_type": "일반차로", + "node_id": "106000450", + "nxtStn": "신내우디안아파트107동앞" + }, + { + "stop_nm": "망우리역사문화공원", + "ycode": "37.601549", + "stop_no": "07443", + "xcode": "127.115214", + "stop_type": "일반차로", + "node_id": "106000482", + "nxtStn": "딸기원(중)" + }, + { + "stop_nm": "망우리역사문화공원", + "ycode": "37.6018460877", + "stop_no": "07444", + "xcode": "127.1153104035", + "stop_type": "일반차로", + "node_id": "106000483", + "nxtStn": "망우동고개" + }, + { + "stop_nm": "신내SKV1센터", + "ycode": "37.614464", + "stop_no": "07446", + "xcode": "127.113272", + "stop_type": "일반차로", + "node_id": "106000481", + "nxtStn": "신내데시앙포레아파트220동앞" + }, + { + "stop_nm": "능말입구", + "ycode": "37.613782", + "stop_no": "07447", + "xcode": "127.105478", + "stop_type": "일반차로", + "node_id": "106000451", + "nxtStn": "중랑공영차고지.신내역" + }, + { + "stop_nm": "중랑경찰서후문", + "ycode": "37.6196890354", + "stop_no": "07448", + "xcode": "127.1048418581", + "stop_type": "일반차로", + "node_id": "106000456", + "nxtStn": "새우개마을" + }, + { + "stop_nm": "당너머", + "ycode": "37.612948", + "stop_no": "07450", + "xcode": "127.107552", + "stop_type": "일반차로", + "node_id": "106000462", + "nxtStn": "중랑공영차고지.종점" + }, + { + "stop_nm": "당너머", + "ycode": "37.6128307149", + "stop_no": "07451", + "xcode": "127.1079642278", + "stop_type": "일반차로", + "node_id": "106000463", + "nxtStn": "신내SKV1센터" + }, + { + "stop_nm": "신내데시앙포레아파트220동앞", + "ycode": "37.615403", + "stop_no": "07452", + "xcode": "127.112802", + "stop_type": "일반차로", + "node_id": "106000459", + "nxtStn": "당너머" + }, + { + "stop_nm": "신내데시앙포레아파트220동앞", + "ycode": "37.6158044062", + "stop_no": "07453", + "xcode": "127.1127215883", + "stop_type": "일반차로", + "node_id": "106000458", + "nxtStn": "새솔초등학교입구" + }, + { + "stop_nm": "신내데시앙포레아파트정문앞", + "ycode": "37.616499082", + "stop_no": "07454", + "xcode": "127.1108830078", + "stop_type": "일반차로", + "node_id": "106000461", + "nxtStn": "신내데시앙포레아파트220동앞" + }, + { + "stop_nm": "새솔초등학교입구", + "ycode": "37.6172677017", + "stop_no": "07455", + "xcode": "127.1098030048", + "stop_type": "일반차로", + "node_id": "106000460", + "nxtStn": "우디안아파트114동앞" + }, + { + "stop_nm": "새솔초등학교", + "ycode": "37.617433", + "stop_no": "07456", + "xcode": "127.108382", + "stop_type": "일반차로", + "node_id": "106000457", + "nxtStn": "신내데시앙포레아파트정문앞" + }, + { + "stop_nm": "중랑경찰서정문.우디안101동앞", + "ycode": "37.6178214058", + "stop_no": "07457", + "xcode": "127.1054962576", + "stop_type": "일반차로", + "node_id": "106000464", + "nxtStn": "우디안아파트114동앞" + }, + { + "stop_nm": "중랑경찰서정문.우디안101동앞", + "ycode": "37.61769", + "stop_no": "07458", + "xcode": "127.105355", + "stop_type": "일반차로", + "node_id": "106900027", + "nxtStn": "신내우디안아파트107동앞" + }, + { + "stop_nm": "신내우디안아파트107동앞", + "ycode": "37.6156282044", + "stop_no": "07459", + "xcode": "127.1054535122", + "stop_type": "일반차로", + "node_id": "106000466", + "nxtStn": "중랑경찰서정문.우디안101동앞" + }, + { + "stop_nm": "신내우디안아파트107동앞", + "ycode": "37.615298", + "stop_no": "07460", + "xcode": "127.105899", + "stop_type": "일반차로", + "node_id": "106000465", + "nxtStn": "능말입구" + }, + { + "stop_nm": "신내10단지아파트", + "ycode": "37.610387", + "stop_no": "07461", + "xcode": "127.095293", + "stop_type": "일반차로", + "node_id": "106000468", + "nxtStn": "신내9단지아파트.서울의료원" + }, + { + "stop_nm": "중랑공영차고지삼거리", + "ycode": "37.612974", + "stop_no": "07462", + "xcode": "127.104668", + "stop_type": "일반차로", + "node_id": "106000469", + "nxtStn": "당너머" + }, + { + "stop_nm": "우디안아파트114동앞", + "ycode": "37.618859", + "stop_no": "07463", + "xcode": "127.107416", + "stop_type": "일반차로", + "node_id": "106000472", + "nxtStn": "중랑경찰서후문" + }, + { + "stop_nm": "우디안아파트114동앞", + "ycode": "37.619084", + "stop_no": "07464", + "xcode": "127.10715", + "stop_type": "일반차로", + "node_id": "106000471", + "nxtStn": "새솔초등학교" + }, + { + "stop_nm": "늘푸른근린공원", + "ycode": "37.5831084305", + "stop_no": "07465", + "xcode": "127.0796405872", + "stop_type": "일반차로", + "node_id": "106000475", + "nxtStn": "면목신우아파트" + }, + { + "stop_nm": "늘푸른근린공원", + "ycode": "37.583045", + "stop_no": "07466", + "xcode": "127.079919", + "stop_type": "일반차로", + "node_id": "106000474", + "nxtStn": "장안시장" + }, + { + "stop_nm": "브라운캐슬B동", + "ycode": "37.613647", + "stop_no": "07467", + "xcode": "127.074999", + "stop_type": "일반차로", + "node_id": "106000473", + "nxtStn": "묵동롯데시네마" + }, + { + "stop_nm": "진로아파트앞.종점", + "ycode": "37.5876453629", + "stop_no": "07500", + "xcode": "127.1019812378", + "stop_type": "마을버스", + "node_id": "106900021", + "nxtStn": "진주빌라.바다약국" + }, + { + "stop_nm": "중화동종점", + "ycode": "37.6000603766", + "stop_no": "07501", + "xcode": "127.082531829", + "stop_type": "마을버스", + "node_id": "106900019", + "nxtStn": "정신교회" + }, + { + "stop_nm": "진주빌라.바다약국", + "ycode": "37.58827", + "stop_no": "07502", + "xcode": "127.100031", + "stop_type": "마을버스", + "node_id": "106900022", + "nxtStn": "공판장" + }, + { + "stop_nm": "정신교회", + "ycode": "37.599794443", + "stop_no": "07503", + "xcode": "127.0813967466", + "stop_type": "마을버스", + "node_id": "106900018", + "nxtStn": "마을금고" + }, + { + "stop_nm": "마을금고", + "ycode": "37.5996788543", + "stop_no": "07504", + "xcode": "127.0804464349", + "stop_type": "마을버스", + "node_id": "106900017", + "nxtStn": "수협" + }, + { + "stop_nm": "공판장", + "ycode": "37.5886290229", + "stop_no": "07505", + "xcode": "127.0991229153", + "stop_type": "마을버스", + "node_id": "106900016", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "수협", + "ycode": "37.5995534192", + "stop_no": "07506", + "xcode": "127.0793873937", + "stop_type": "마을버스", + "node_id": "106900015", + "nxtStn": "태릉시장" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.589166", + "stop_no": "07507", + "xcode": "127.097652", + "stop_type": "마을버스", + "node_id": "106900024", + "nxtStn": "서일대정문" + }, + { + "stop_nm": "태릉시장", + "ycode": "37.5997722467", + "stop_no": "07508", + "xcode": "127.0782426453", + "stop_type": "마을버스", + "node_id": "106900014", + "nxtStn": "중화2동주민센터" + }, + { + "stop_nm": "서일대정문", + "ycode": "37.588306", + "stop_no": "07509", + "xcode": "127.09608", + "stop_type": "마을버스", + "node_id": "106900029", + "nxtStn": "중화중학교삼거리" + }, + { + "stop_nm": "서울동부새마을금고본점", + "ycode": "37.5877930543", + "stop_no": "07510", + "xcode": "127.094431648", + "stop_type": "마을버스", + "node_id": "106900013", + "nxtStn": "농협앞" + }, + { + "stop_nm": "서일대정문", + "ycode": "37.587816", + "stop_no": "07511", + "xcode": "127.096119", + "stop_type": "마을버스", + "node_id": "106900028", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "면목역", + "ycode": "37.588313321", + "stop_no": "07512", + "xcode": "127.0869542692", + "stop_type": "마을버스", + "node_id": "106900012", + "nxtStn": "하나은행면목지점" + }, + { + "stop_nm": "중랑초교정문.면목2동치안센터", + "ycode": "37.5896743021", + "stop_no": "07515", + "xcode": "127.0760239509", + "stop_type": "마을버스", + "node_id": "106900010", + "nxtStn": "한신아파트상가" + }, + { + "stop_nm": "한신아파트상가", + "ycode": "37.5884214469", + "stop_no": "07517", + "xcode": "127.0765526169", + "stop_type": "마을버스", + "node_id": "106900009", + "nxtStn": "한신아파트후문" + }, + { + "stop_nm": "IBK기업은행면목동지점", + "ycode": "37.5876550553", + "stop_no": "07518", + "xcode": "127.085009712", + "stop_type": "마을버스", + "node_id": "106900030", + "nxtStn": "지하철7호선면목역" + }, + { + "stop_nm": "한신아파트후문", + "ycode": "37.5873563919", + "stop_no": "07519", + "xcode": "127.0765028357", + "stop_type": "마을버스", + "node_id": "106900008", + "nxtStn": "동서그랜드맨션" + }, + { + "stop_nm": "마을금고", + "ycode": "37.5995049778", + "stop_no": "07520", + "xcode": "127.0803975494", + "stop_type": "마을버스", + "node_id": "106900007", + "nxtStn": "정신교회" + }, + { + "stop_nm": "정신교회", + "ycode": "37.5996555334", + "stop_no": "07521", + "xcode": "127.0816027142", + "stop_type": "마을버스", + "node_id": "106900006", + "nxtStn": "중화동종점" + }, + { + "stop_nm": "중화동종점", + "ycode": "37.599933245", + "stop_no": "07523", + "xcode": "127.0826438086", + "stop_type": "마을버스", + "node_id": "106900004", + "nxtStn": "종점" + }, + { + "stop_nm": "지하철7호선면목역", + "ycode": "37.588387996", + "stop_no": "07524", + "xcode": "127.088323368", + "stop_type": "마을버스", + "node_id": "106900020", + "nxtStn": "농협앞" + }, + { + "stop_nm": "면목지구대", + "ycode": "37.5878158428", + "stop_no": "07525", + "xcode": "127.0941044299", + "stop_type": "마을버스", + "node_id": "106900003", + "nxtStn": "용마문화복지센터" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5890945823", + "stop_no": "07526", + "xcode": "127.097321946", + "stop_type": "마을버스", + "node_id": "106900025", + "nxtStn": "공판장" + }, + { + "stop_nm": "공판장", + "ycode": "37.5884903229", + "stop_no": "07527", + "xcode": "127.0990423344", + "stop_type": "마을버스", + "node_id": "106900002", + "nxtStn": "진주빌라.바다약국" + }, + { + "stop_nm": "진주빌라.바다약국", + "ycode": "37.5881373013", + "stop_no": "07528", + "xcode": "127.0999211488", + "stop_type": "마을버스", + "node_id": "106900026", + "nxtStn": "진로아파트앞.종점" + }, + { + "stop_nm": "진로아파트앞.종점", + "ycode": "37.587547", + "stop_no": "07529", + "xcode": "127.101985", + "stop_type": "마을버스", + "node_id": "106900023", + "nxtStn": "종점" + }, + { + "stop_nm": "수협", + "ycode": "37.5993830841", + "stop_no": "07530", + "xcode": "127.0794313809", + "stop_type": "마을버스", + "node_id": "106900001", + "nxtStn": "마을금고" + }, + { + "stop_nm": "중랑공영차고지.신내역", + "ycode": "37.613209", + "stop_no": "07550", + "xcode": "127.103628", + "stop_type": "일반차로", + "node_id": "106000467", + "nxtStn": "능말입구" + }, + { + "stop_nm": "중랑공영차고지.종점", + "ycode": "37.6133839428", + "stop_no": "07551", + "xcode": "127.1044676292", + "stop_type": "일반차로", + "node_id": "106000480", + "nxtStn": "종점" + }, + { + "stop_nm": "사가정역", + "ycode": "37.5807358238", + "stop_no": "07554", + "xcode": "127.0870023398", + "stop_type": "일반차로", + "node_id": "106000470", + "nxtStn": "면목우체국.녹색병원" + }, + { + "stop_nm": "망우역", + "ycode": "37.5986607304", + "stop_no": "07771", + "xcode": "127.092595999", + "stop_type": "일반차로", + "node_id": "106000427", + "nxtStn": "상봉역.중랑우체국" + }, + { + "stop_nm": "길음2동주민센터", + "ycode": "37.6069061871", + "stop_no": "08001", + "xcode": "127.028209324", + "stop_type": "중앙차로", + "node_id": "107000001", + "nxtStn": "길음뉴타운" + }, + { + "stop_nm": "길음2동주민센터", + "ycode": "37.60611", + "stop_no": "08002", + "xcode": "127.02747", + "stop_type": "중앙차로", + "node_id": "107000002", + "nxtStn": "창문여고" + }, + { + "stop_nm": "길음뉴타운", + "ycode": "37.6037502378", + "stop_no": "08003", + "xcode": "127.0242688702", + "stop_type": "중앙차로", + "node_id": "107000003", + "nxtStn": "미아리고개.미아리예술극장" + }, + { + "stop_nm": "길음뉴타운", + "ycode": "37.603112", + "stop_no": "08004", + "xcode": "127.023443", + "stop_type": "중앙차로", + "node_id": "107000004", + "nxtStn": "길음2동주민센터" + }, + { + "stop_nm": "미아리고개.미아리예술극장", + "ycode": "37.5988112954", + "stop_no": "08005", + "xcode": "127.0217090638", + "stop_type": "중앙차로", + "node_id": "107000005", + "nxtStn": "돈암사거리.성신여대입구" + }, + { + "stop_nm": "미아리고개.미아리예술극장", + "ycode": "37.5979210002", + "stop_no": "08006", + "xcode": "127.0218209221", + "stop_type": "중앙차로", + "node_id": "107000006", + "nxtStn": "길음뉴타운" + }, + { + "stop_nm": "돈암사거리.성신여대입구", + "ycode": "37.5937432794", + "stop_no": "08007", + "xcode": "127.0181313708", + "stop_type": "중앙차로", + "node_id": "107000007", + "nxtStn": "삼선교.한성대학교" + }, + { + "stop_nm": "돈암사거리.성신여대입구", + "ycode": "37.593251", + "stop_no": "08008", + "xcode": "127.017684", + "stop_type": "중앙차로", + "node_id": "107000008", + "nxtStn": "미아리고개.미아리예술극장" + }, + { + "stop_nm": "삼선교.한성대학교", + "ycode": "37.5899648397", + "stop_no": "08009", + "xcode": "127.0093351178", + "stop_type": "중앙차로", + "node_id": "107000009", + "nxtStn": "명륜3가.성대입구" + }, + { + "stop_nm": "삼선교.한성대학교.조소앙활동터", + "ycode": "37.5893632989", + "stop_no": "08010", + "xcode": "127.0082049442", + "stop_type": "중앙차로", + "node_id": "107000010", + "nxtStn": "돈암사거리.성신여대입구" + }, + { + "stop_nm": "숭곡초교입구", + "ycode": "37.609848", + "stop_no": "08101", + "xcode": "127.03204", + "stop_type": "일반차로", + "node_id": "107000011", + "nxtStn": "창문여고" + }, + { + "stop_nm": "창문여고", + "ycode": "37.6118505947", + "stop_no": "08102", + "xcode": "127.035819966", + "stop_type": "일반차로", + "node_id": "107000012", + "nxtStn": "8번지입구" + }, + { + "stop_nm": "동방고개", + "ycode": "37.613712", + "stop_no": "08103", + "xcode": "127.038267", + "stop_type": "일반차로", + "node_id": "107000013", + "nxtStn": "장위동그린빌아파트" + }, + { + "stop_nm": "장위동그린빌아파트", + "ycode": "37.6178525754", + "stop_no": "08104", + "xcode": "127.0431131466", + "stop_type": "일반차로", + "node_id": "107000014", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.6203171059", + "stop_no": "08105", + "xcode": "127.0453451219", + "stop_type": "일반차로", + "node_id": "107000015", + "nxtStn": "장월초등학교" + }, + { + "stop_nm": "장월초등학교", + "ycode": "37.6234659543", + "stop_no": "08106", + "xcode": "127.0487105636", + "stop_type": "일반차로", + "node_id": "107000016", + "nxtStn": "롯데캐슬루나아파트" + }, + { + "stop_nm": "국민대앞", + "ycode": "37.6106795513", + "stop_no": "08107", + "xcode": "126.9940273315", + "stop_type": "일반차로", + "node_id": "107000017", + "nxtStn": "청덕초등학교" + }, + { + "stop_nm": "국민대앞", + "ycode": "37.61109", + "stop_no": "08108", + "xcode": "126.994079", + "stop_type": "일반차로", + "node_id": "107000018", + "nxtStn": "국민대앞" + }, + { + "stop_nm": "국민대학교앞", + "ycode": "37.610809", + "stop_no": "08110", + "xcode": "126.994644", + "stop_type": "일반차로", + "node_id": "107000020", + "nxtStn": "롯데아파트" + }, + { + "stop_nm": "청덕초등학교", + "ycode": "37.608787", + "stop_no": "08111", + "xcode": "126.999112", + "stop_type": "일반차로", + "node_id": "107000021", + "nxtStn": "북악중학교" + }, + { + "stop_nm": "청덕초교", + "ycode": "37.609034", + "stop_no": "08112", + "xcode": "126.998859", + "stop_type": "일반차로", + "node_id": "107000022", + "nxtStn": "국민대학교앞" + }, + { + "stop_nm": "북악중학교", + "ycode": "37.607386", + "stop_no": "08113", + "xcode": "127.002908", + "stop_type": "일반차로", + "node_id": "107000023", + "nxtStn": "봉국사" + }, + { + "stop_nm": "고려대사범대학부속고등학교", + "ycode": "37.607888", + "stop_no": "08114", + "xcode": "127.002378", + "stop_type": "일반차로", + "node_id": "107000024", + "nxtStn": "청덕초교" + }, + { + "stop_nm": "봉국사", + "ycode": "37.60571", + "stop_no": "08115", + "xcode": "127.008008", + "stop_type": "일반차로", + "node_id": "107000025", + "nxtStn": "정릉우체국앞" + }, + { + "stop_nm": "봉국사", + "ycode": "37.606138", + "stop_no": "08116", + "xcode": "127.007657", + "stop_type": "일반차로", + "node_id": "107000026", + "nxtStn": "고려대사범대학부속고등학교" + }, + { + "stop_nm": "정릉2동주민센터", + "ycode": "37.604593", + "stop_no": "08117", + "xcode": "127.011258", + "stop_type": "일반차로", + "node_id": "107000027", + "nxtStn": "돈암동삼성아파트입구" + }, + { + "stop_nm": "정릉2동주민센터", + "ycode": "37.604978", + "stop_no": "08118", + "xcode": "127.0112", + "stop_type": "일반차로", + "node_id": "107000028", + "nxtStn": "홍은IC(가상)" + }, + { + "stop_nm": "숭덕초교", + "ycode": "37.6033583637", + "stop_no": "08119", + "xcode": "127.0146827395", + "stop_type": "일반차로", + "node_id": "107000029", + "nxtStn": "돈암동삼성아파트입구" + }, + { + "stop_nm": "숭덕초교", + "ycode": "37.603698019", + "stop_no": "08120", + "xcode": "127.0151143204", + "stop_type": "일반차로", + "node_id": "107000030", + "nxtStn": "정릉2동주민센터" + }, + { + "stop_nm": "정릉길음시장", + "ycode": "37.602215", + "stop_no": "08121", + "xcode": "127.019326", + "stop_type": "일반차로", + "node_id": "107000031", + "nxtStn": "길음역출구" + }, + { + "stop_nm": "정릉길음시장.길음뉴타운9단지", + "ycode": "37.602522", + "stop_no": "08122", + "xcode": "127.019578", + "stop_type": "일반차로", + "node_id": "107000032", + "nxtStn": "숭덕초교" + }, + { + "stop_nm": "돈암동삼성아파트입구", + "ycode": "37.6018744304", + "stop_no": "08123", + "xcode": "127.0245753189", + "stop_type": "일반차로", + "node_id": "107000033", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "길음역", + "ycode": "37.602042", + "stop_no": "08124", + "xcode": "127.023771", + "stop_type": "일반차로", + "node_id": "107000034", + "nxtStn": "정릉2동주민센터" + }, + { + "stop_nm": "돈암1동주민센터", + "ycode": "37.603672", + "stop_no": "08125", + "xcode": "127.026423", + "stop_type": "일반차로", + "node_id": "107000035", + "nxtStn": "종암사거리" + }, + { + "stop_nm": "돈암1동주민센터", + "ycode": "37.604513", + "stop_no": "08126", + "xcode": "127.026568", + "stop_type": "일반차로", + "node_id": "107000036", + "nxtStn": "길음역" + }, + { + "stop_nm": "종암사거리", + "ycode": "37.603607", + "stop_no": "08127", + "xcode": "127.031172", + "stop_type": "일반차로", + "node_id": "107000037", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "KT월곡지사", + "ycode": "37.602447", + "stop_no": "08128", + "xcode": "127.034373", + "stop_type": "일반차로", + "node_id": "107000038", + "nxtStn": "종암SK아파트" + }, + { + "stop_nm": "KT월곡지사", + "ycode": "37.603029", + "stop_no": "08129", + "xcode": "127.034699", + "stop_type": "일반차로", + "node_id": "107000039", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "종암SK아파트", + "ycode": "37.602052", + "stop_no": "08130", + "xcode": "127.037613", + "stop_type": "일반차로", + "node_id": "107000040", + "nxtStn": "월곡역" + }, + { + "stop_nm": "성북구보건소", + "ycode": "37.602583", + "stop_no": "08131", + "xcode": "127.039162", + "stop_type": "일반차로", + "node_id": "107000041", + "nxtStn": "생명의전화" + }, + { + "stop_nm": "월곡역", + "ycode": "37.60163", + "stop_no": "08132", + "xcode": "127.041452", + "stop_type": "일반차로", + "node_id": "107000042", + "nxtStn": "동덕여대앞" + }, + { + "stop_nm": "월곡역", + "ycode": "37.603073", + "stop_no": "08133", + "xcode": "127.042348", + "stop_type": "일반차로", + "node_id": "107000043", + "nxtStn": "성북구보건소" + }, + { + "stop_nm": "동덕여대앞", + "ycode": "37.6030027838", + "stop_no": "08134", + "xcode": "127.0428338902", + "stop_type": "일반차로", + "node_id": "107000044", + "nxtStn": "한국과학기술연구원입구" + }, + { + "stop_nm": "한국과학기술연구원입구", + "ycode": "37.605587", + "stop_no": "08135", + "xcode": "127.047274", + "stop_type": "일반차로", + "node_id": "107000045", + "nxtStn": "월곡중학교" + }, + { + "stop_nm": "상월곡역", + "ycode": "37.605489", + "stop_no": "08136", + "xcode": "127.046447", + "stop_type": "일반차로", + "node_id": "107000046", + "nxtStn": "월곡역" + }, + { + "stop_nm": "월곡중학교", + "ycode": "37.606895", + "stop_no": "08137", + "xcode": "127.049787", + "stop_type": "일반차로", + "node_id": "107000047", + "nxtStn": "새석관시장" + }, + { + "stop_nm": "월곡중학교", + "ycode": "37.606968", + "stop_no": "08138", + "xcode": "127.049235", + "stop_type": "일반차로", + "node_id": "107000048", + "nxtStn": "상월곡역" + }, + { + "stop_nm": "새석관시장", + "ycode": "37.608644", + "stop_no": "08139", + "xcode": "127.053096", + "stop_type": "일반차로", + "node_id": "107000049", + "nxtStn": "돌곶이역8번출구" + }, + { + "stop_nm": "새석관시장", + "ycode": "37.608448", + "stop_no": "08140", + "xcode": "127.052105", + "stop_type": "일반차로", + "node_id": "107000050", + "nxtStn": "월곡중학교" + }, + { + "stop_nm": "돌곶이역", + "ycode": "37.611453", + "stop_no": "08141", + "xcode": "127.058482", + "stop_type": "일반차로", + "node_id": "107000051", + "nxtStn": "석관동주민센터" + }, + { + "stop_nm": "돌곶이역", + "ycode": "37.6105861206", + "stop_no": "08142", + "xcode": "127.0562084808", + "stop_type": "일반차로", + "node_id": "107000052", + "nxtStn": "새석관시장" + }, + { + "stop_nm": "장위동동원베네스트.온누리병원", + "ycode": "37.612043", + "stop_no": "08143", + "xcode": "127.058969", + "stop_type": "일반차로", + "node_id": "107000053", + "nxtStn": "돌곶이역" + }, + { + "stop_nm": "석관동주민센터", + "ycode": "37.613393", + "stop_no": "08144", + "xcode": "127.061917", + "stop_type": "일반차로", + "node_id": "107000054", + "nxtStn": "석계역굴다리앞" + }, + { + "stop_nm": "석관동주민센터", + "ycode": "37.61344", + "stop_no": "08145", + "xcode": "127.061432", + "stop_type": "일반차로", + "node_id": "107000055", + "nxtStn": "장위119안전센터" + }, + { + "stop_nm": "석계역굴다리앞", + "ycode": "37.6143314819", + "stop_no": "08146", + "xcode": "127.0657965807", + "stop_type": "일반차로", + "node_id": "107000056", + "nxtStn": "월계1동경로당" + }, + { + "stop_nm": "석계역", + "ycode": "37.615104", + "stop_no": "08147", + "xcode": "127.067112", + "stop_type": "일반차로", + "node_id": "107000057", + "nxtStn": "공릉1동삼익아파트" + }, + { + "stop_nm": "성가복지병원", + "ycode": "37.6058827177", + "stop_no": "08148", + "xcode": "127.0311378827", + "stop_type": "일반차로", + "node_id": "107000058", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "성가복지병원", + "ycode": "37.605922", + "stop_no": "08149", + "xcode": "127.03153", + "stop_type": "일반차로", + "node_id": "107000059", + "nxtStn": "미아사거리역" + }, + { + "stop_nm": "종암사거리입구", + "ycode": "37.6014326326", + "stop_no": "08150", + "xcode": "127.0330443723", + "stop_type": "일반차로", + "node_id": "107000060", + "nxtStn": "종암동주민센터" + }, + { + "stop_nm": "종암사거리입구", + "ycode": "37.601095", + "stop_no": "08151", + "xcode": "127.033673", + "stop_type": "일반차로", + "node_id": "107000061", + "nxtStn": "길음역" + }, + { + "stop_nm": "종암동주민센터", + "ycode": "37.5994152643", + "stop_no": "08152", + "xcode": "127.0341075456", + "stop_type": "일반차로", + "node_id": "107000062", + "nxtStn": "숭례초교" + }, + { + "stop_nm": "종암동주민센터", + "ycode": "37.598373", + "stop_no": "08153", + "xcode": "127.034953", + "stop_type": "일반차로", + "node_id": "107000063", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "숭례초교", + "ycode": "37.5948052663", + "stop_no": "08154", + "xcode": "127.0356811781", + "stop_type": "일반차로", + "node_id": "107000064", + "nxtStn": "고대앞" + }, + { + "stop_nm": "숭례초등학교", + "ycode": "37.5943969245", + "stop_no": "08155", + "xcode": "127.036170198", + "stop_type": "일반차로", + "node_id": "107000065", + "nxtStn": "종암동주민센터" + }, + { + "stop_nm": "고대앞", + "ycode": "37.5885636851", + "stop_no": "08156", + "xcode": "127.0348108154", + "stop_type": "일반차로", + "node_id": "107000066", + "nxtStn": "우신향병원" + }, + { + "stop_nm": "우신향병원", + "ycode": "37.5851359404", + "stop_no": "08157", + "xcode": "127.0316104668", + "stop_type": "일반차로", + "node_id": "107000067", + "nxtStn": "종암초등학교앞" + }, + { + "stop_nm": "안암오거리", + "ycode": "37.582482", + "stop_no": "08158", + "xcode": "127.029065", + "stop_type": "일반차로", + "node_id": "107000068", + "nxtStn": "대광초교" + }, + { + "stop_nm": "대광초교", + "ycode": "37.5797066498", + "stop_no": "08159", + "xcode": "127.0250277117", + "stop_type": "일반차로", + "node_id": "107000069", + "nxtStn": "신설동로터리" + }, + { + "stop_nm": "정릉북한산국립공원입구", + "ycode": "37.617721", + "stop_no": "08160", + "xcode": "126.999296", + "stop_type": "일반차로", + "node_id": "107000070", + "nxtStn": "정릉산장아파트" + }, + { + "stop_nm": "정릉산장아파트", + "ycode": "37.616712", + "stop_no": "08161", + "xcode": "127.003343", + "stop_type": "일반차로", + "node_id": "107000071", + "nxtStn": "정릉4동주민센터.경국사" + }, + { + "stop_nm": "정릉대우아파트", + "ycode": "37.616708", + "stop_no": "08162", + "xcode": "127.00386", + "stop_type": "일반차로", + "node_id": "107000072", + "nxtStn": "정릉북한산국립공원입구" + }, + { + "stop_nm": "정릉4동주민센터.경국사", + "ycode": "37.613529", + "stop_no": "08163", + "xcode": "127.006345", + "stop_type": "일반차로", + "node_id": "107000073", + "nxtStn": "솔샘사거리" + }, + { + "stop_nm": "정릉4동주민센터.경국사", + "ycode": "37.613335", + "stop_no": "08164", + "xcode": "127.006681", + "stop_type": "일반차로", + "node_id": "107000074", + "nxtStn": "산장아파트" + }, + { + "stop_nm": "성북청수도서관.정릉4동성당", + "ycode": "37.6115696748", + "stop_no": "08165", + "xcode": "127.0084193769", + "stop_type": "일반차로", + "node_id": "107000075", + "nxtStn": "정릉시장입구" + }, + { + "stop_nm": "성북청수도서관.정릉4동성당", + "ycode": "37.610876", + "stop_no": "08166", + "xcode": "127.009045", + "stop_type": "일반차로", + "node_id": "107000076", + "nxtStn": "오렌지마트" + }, + { + "stop_nm": "정릉시장입구", + "ycode": "37.6084653256", + "stop_no": "08167", + "xcode": "127.0098212542", + "stop_type": "일반차로", + "node_id": "107000077", + "nxtStn": "정릉우체국앞" + }, + { + "stop_nm": "정릉시장입구", + "ycode": "37.6080327763", + "stop_no": "08168", + "xcode": "127.0101519307", + "stop_type": "일반차로", + "node_id": "107000078", + "nxtStn": "정릉시장입구.정릉약국" + }, + { + "stop_nm": "정릉우체국앞", + "ycode": "37.6051645031", + "stop_no": "08169", + "xcode": "127.0114121305", + "stop_type": "일반차로", + "node_id": "107000079", + "nxtStn": "숭덕초교" + }, + { + "stop_nm": "정릉우체국앞", + "ycode": "37.605393", + "stop_no": "08170", + "xcode": "127.011524", + "stop_type": "일반차로", + "node_id": "107000080", + "nxtStn": "정릉시장입구" + }, + { + "stop_nm": "미아초교", + "ycode": "37.6115318739", + "stop_no": "08171", + "xcode": "127.0220389791", + "stop_type": "일반차로", + "node_id": "107000081", + "nxtStn": "길음역" + }, + { + "stop_nm": "미아초교", + "ycode": "37.6108866161", + "stop_no": "08172", + "xcode": "127.0224658136", + "stop_type": "일반차로", + "node_id": "107000082", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "길음동동부아파트", + "ycode": "37.607288", + "stop_no": "08173", + "xcode": "127.023531", + "stop_type": "일반차로", + "node_id": "107000083", + "nxtStn": "길음뉴타운" + }, + { + "stop_nm": "길음동동부아파트", + "ycode": "37.608022", + "stop_no": "08174", + "xcode": "127.023455", + "stop_type": "일반차로", + "node_id": "107000084", + "nxtStn": "미아초교" + }, + { + "stop_nm": "삼선동주민센터", + "ycode": "37.5906107149", + "stop_no": "08175", + "xcode": "127.0143473137", + "stop_type": "일반차로", + "node_id": "107000085", + "nxtStn": "성북구청.성북경찰서" + }, + { + "stop_nm": "삼선동주민센터", + "ycode": "37.5906917676", + "stop_no": "08176", + "xcode": "127.0147153546", + "stop_type": "일반차로", + "node_id": "107000086", + "nxtStn": "돈암사거리.성신여대입구" + }, + { + "stop_nm": "성북구청.성북경찰서", + "ycode": "37.588152", + "stop_no": "08177", + "xcode": "127.017432", + "stop_type": "일반차로", + "node_id": "107000087", + "nxtStn": "보문역" + }, + { + "stop_nm": "성북구청.성북경찰서", + "ycode": "37.5886054063", + "stop_no": "08178", + "xcode": "127.0172299027", + "stop_type": "일반차로", + "node_id": "107000088", + "nxtStn": "삼선동주민센터" + }, + { + "stop_nm": "보문역", + "ycode": "37.5858514183", + "stop_no": "08179", + "xcode": "127.0189209428", + "stop_type": "일반차로", + "node_id": "107000089", + "nxtStn": "보문동성당" + }, + { + "stop_nm": "보문역", + "ycode": "37.584875", + "stop_no": "08180", + "xcode": "127.01977", + "stop_type": "일반차로", + "node_id": "107000090", + "nxtStn": "성북구청.성북경찰서" + }, + { + "stop_nm": "보문동성당", + "ycode": "37.5823963244", + "stop_no": "08181", + "xcode": "127.0207962235", + "stop_type": "일반차로", + "node_id": "107000091", + "nxtStn": "보문동주민센터" + }, + { + "stop_nm": "보문동성당", + "ycode": "37.582398971", + "stop_no": "08182", + "xcode": "127.0211155216", + "stop_type": "일반차로", + "node_id": "107000092", + "nxtStn": "보문역" + }, + { + "stop_nm": "보문동주민센터", + "ycode": "37.5804514958", + "stop_no": "08183", + "xcode": "127.0218634882", + "stop_type": "일반차로", + "node_id": "107000093", + "nxtStn": "신설동로터리" + }, + { + "stop_nm": "보문동주민센터", + "ycode": "37.580047", + "stop_no": "08184", + "xcode": "127.022377", + "stop_type": "일반차로", + "node_id": "107000094", + "nxtStn": "보문동성당" + }, + { + "stop_nm": "월계2교.참누리아파트", + "ycode": "37.6232183587", + "stop_no": "08185", + "xcode": "127.0503746013", + "stop_type": "일반차로", + "node_id": "107000095", + "nxtStn": "광운초교앞" + }, + { + "stop_nm": "월계2교", + "ycode": "37.623825", + "stop_no": "08186", + "xcode": "127.050133", + "stop_type": "일반차로", + "node_id": "107000096", + "nxtStn": "월계주공1단지아파트앞" + }, + { + "stop_nm": "광운초교앞", + "ycode": "37.619952", + "stop_no": "08187", + "xcode": "127.052958", + "stop_type": "일반차로", + "node_id": "107000097", + "nxtStn": "장위래미안아파트" + }, + { + "stop_nm": "광운초교", + "ycode": "37.620285", + "stop_no": "08188", + "xcode": "127.053112", + "stop_type": "일반차로", + "node_id": "107000098", + "nxtStn": "월계2교" + }, + { + "stop_nm": "장위3동주민센터", + "ycode": "37.616488", + "stop_no": "08189", + "xcode": "127.056887", + "stop_type": "일반차로", + "node_id": "107000099", + "nxtStn": "장삼주유소" + }, + { + "stop_nm": "장위3동주민센터", + "ycode": "37.6166153166", + "stop_no": "08190", + "xcode": "127.0570263836", + "stop_type": "일반차로", + "node_id": "107000100", + "nxtStn": "남대문중학교" + }, + { + "stop_nm": "장삼주유소", + "ycode": "37.6141178016", + "stop_no": "08191", + "xcode": "127.0592242299", + "stop_type": "일반차로", + "node_id": "107000101", + "nxtStn": "장위사거리" + }, + { + "stop_nm": "장삼주유소", + "ycode": "37.61397337", + "stop_no": "08192", + "xcode": "127.0597361132", + "stop_type": "일반차로", + "node_id": "107000102", + "nxtStn": "장위3동주민센터" + }, + { + "stop_nm": "장위사거리", + "ycode": "37.61159", + "stop_no": "08193", + "xcode": "127.061832", + "stop_type": "일반차로", + "node_id": "107000103", + "nxtStn": "석관중고등학교앞" + }, + { + "stop_nm": "장위사거리", + "ycode": "37.6119253322", + "stop_no": "08194", + "xcode": "127.0618298638", + "stop_type": "일반차로", + "node_id": "107000104", + "nxtStn": "장삼주유소" + }, + { + "stop_nm": "석관중고등학교앞", + "ycode": "37.6092611472", + "stop_no": "08195", + "xcode": "127.0640251528", + "stop_type": "일반차로", + "node_id": "107000105", + "nxtStn": "한일유앤아이아파트" + }, + { + "stop_nm": "석관고등학교", + "ycode": "37.6094354736", + "stop_no": "08196", + "xcode": "127.064361798", + "stop_type": "일반차로", + "node_id": "107000106", + "nxtStn": "장위사거리" + }, + { + "stop_nm": "석관동코오롱아파트", + "ycode": "37.6065852831", + "stop_no": "08197", + "xcode": "127.0661262457", + "stop_type": "일반차로", + "node_id": "107000107", + "nxtStn": "한천로쌍용아파트앞" + }, + { + "stop_nm": "석관동코오롱아파트", + "ycode": "37.606698968", + "stop_no": "08198", + "xcode": "127.0663652319", + "stop_type": "일반차로", + "node_id": "107000108", + "nxtStn": "석관고등학교" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.619247", + "stop_no": "08199", + "xcode": "127.045103", + "stop_type": "일반차로", + "node_id": "107000109", + "nxtStn": "장곡초교앞" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.619118", + "stop_no": "08200", + "xcode": "127.045647", + "stop_type": "일반차로", + "node_id": "107000110", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "장곡초교앞", + "ycode": "37.617652", + "stop_no": "08201", + "xcode": "127.047712", + "stop_type": "일반차로", + "node_id": "107000111", + "nxtStn": "하나은행장위동지점" + }, + { + "stop_nm": "장곡초교앞", + "ycode": "37.6177065388", + "stop_no": "08202", + "xcode": "127.0479421691", + "stop_type": "일반차로", + "node_id": "107000112", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "하나은행장위동지점", + "ycode": "37.6162107764", + "stop_no": "08203", + "xcode": "127.0500209793", + "stop_type": "일반차로", + "node_id": "107000113", + "nxtStn": "장위동원천주유소" + }, + { + "stop_nm": "하나은행장위동지점", + "ycode": "37.61643", + "stop_no": "08204", + "xcode": "127.050048", + "stop_type": "일반차로", + "node_id": "107000114", + "nxtStn": "장곡초교사거리" + }, + { + "stop_nm": "장위동원천주유소", + "ycode": "37.614699", + "stop_no": "08205", + "xcode": "127.052571", + "stop_type": "일반차로", + "node_id": "107000115", + "nxtStn": "돌곶이역2번출구" + }, + { + "stop_nm": "장위동원천주유소", + "ycode": "37.6146307869", + "stop_no": "08206", + "xcode": "127.0529741295", + "stop_type": "일반차로", + "node_id": "107000116", + "nxtStn": "하나은행장위동지점" + }, + { + "stop_nm": "장위2동주민센터", + "ycode": "37.6120921548", + "stop_no": "08207", + "xcode": "127.0555322537", + "stop_type": "일반차로", + "node_id": "107000117", + "nxtStn": "돌곶이역" + }, + { + "stop_nm": "돌곶이역", + "ycode": "37.6102045872", + "stop_no": "08209", + "xcode": "127.0575578503", + "stop_type": "일반차로", + "node_id": "107000119", + "nxtStn": "석관시장" + }, + { + "stop_nm": "돌곶이역", + "ycode": "37.611744", + "stop_no": "08210", + "xcode": "127.056203", + "stop_type": "일반차로", + "node_id": "107000120", + "nxtStn": "장위동원천주유소" + }, + { + "stop_nm": "석관시장", + "ycode": "37.6086897394", + "stop_no": "08211", + "xcode": "127.0590704145", + "stop_type": "일반차로", + "node_id": "107000121", + "nxtStn": "석관동새마을금고" + }, + { + "stop_nm": "석관시장", + "ycode": "37.609002", + "stop_no": "08212", + "xcode": "127.059062", + "stop_type": "일반차로", + "node_id": "107000122", + "nxtStn": "돌곶이역" + }, + { + "stop_nm": "석관동새마을금고", + "ycode": "37.607457", + "stop_no": "08213", + "xcode": "127.0604", + "stop_type": "일반차로", + "node_id": "107000123", + "nxtStn": "한국예술종합학교" + }, + { + "stop_nm": "석관동새마을금고", + "ycode": "37.6072717639", + "stop_no": "08214", + "xcode": "127.0609375732", + "stop_type": "일반차로", + "node_id": "107000124", + "nxtStn": "석관시장" + }, + { + "stop_nm": "한국예술종합학교", + "ycode": "37.6056471604", + "stop_no": "08215", + "xcode": "127.0618293174", + "stop_type": "일반차로", + "node_id": "107000125", + "nxtStn": "의릉입구" + }, + { + "stop_nm": "한국예술종합학교", + "ycode": "37.605762", + "stop_no": "08216", + "xcode": "127.062017", + "stop_type": "일반차로", + "node_id": "107000126", + "nxtStn": "석관동새마을금고" + }, + { + "stop_nm": "돈암힐스테이트.코오롱하늘채", + "ycode": "37.5984370068", + "stop_no": "08218", + "xcode": "127.0142965055", + "stop_type": "일반차로", + "node_id": "107000520", + "nxtStn": "돈암2동주민센터입구.흥천사" + }, + { + "stop_nm": "꿈의숲아이파크아파트", + "ycode": "37.618015", + "stop_no": "08219", + "xcode": "127.051383", + "stop_type": "일반차로", + "node_id": "107000129", + "nxtStn": "장위래미안아파트" + }, + { + "stop_nm": "꿈의숲아이파크아파트", + "ycode": "37.617995", + "stop_no": "08220", + "xcode": "127.051061", + "stop_type": "일반차로", + "node_id": "107000130", + "nxtStn": "장곡초교사거리" + }, + { + "stop_nm": "장곡초교사거리", + "ycode": "37.617145", + "stop_no": "08221", + "xcode": "127.050007", + "stop_type": "일반차로", + "node_id": "107000131", + "nxtStn": "간대어린이공원" + }, + { + "stop_nm": "장곡초교사거리", + "ycode": "37.617257", + "stop_no": "08222", + "xcode": "127.049918", + "stop_type": "일반차로", + "node_id": "107000132", + "nxtStn": "장곡초교" + }, + { + "stop_nm": "서울다원학교.한용운활동터", + "ycode": "37.594506", + "stop_no": "08223", + "xcode": "126.991816", + "stop_type": "일반차로", + "node_id": "107000133", + "nxtStn": "동방문화대학원대학교" + }, + { + "stop_nm": "동방문화대학원대학교", + "ycode": "37.594498", + "stop_no": "08224", + "xcode": "126.993163", + "stop_type": "일반차로", + "node_id": "107000134", + "nxtStn": "성북구립미술관.쌍다리앞" + }, + { + "stop_nm": "동방문화대학원대학교", + "ycode": "37.594733", + "stop_no": "08225", + "xcode": "126.993402", + "stop_type": "일반차로", + "node_id": "107000135", + "nxtStn": "서울다원학교.한용운활동터" + }, + { + "stop_nm": "성북구립미술관.쌍다리앞", + "ycode": "37.5935941166", + "stop_no": "08226", + "xcode": "126.9958337905", + "stop_type": "일반차로", + "node_id": "107000136", + "nxtStn": "성북초교.성북선잠박물관" + }, + { + "stop_nm": "성북구립미술관.쌍다리앞", + "ycode": "37.5937446022", + "stop_no": "08227", + "xcode": "126.995943628", + "stop_type": "일반차로", + "node_id": "107000137", + "nxtStn": "동방문화대학원대학교" + }, + { + "stop_nm": "성북초교.성북선잠박물관", + "ycode": "37.593069", + "stop_no": "08228", + "xcode": "126.998772", + "stop_type": "일반차로", + "node_id": "107000138", + "nxtStn": "홍익대부속중고등학교입구" + }, + { + "stop_nm": "성북초교.성북선잠박물관", + "ycode": "37.5930769453", + "stop_no": "08229", + "xcode": "126.9978246173", + "stop_type": "일반차로", + "node_id": "107000139", + "nxtStn": "쌍다리" + }, + { + "stop_nm": "홍익대부속중고등학교입구", + "ycode": "37.5932175334", + "stop_no": "08230", + "xcode": "127.0006477466", + "stop_type": "일반차로", + "node_id": "107000140", + "nxtStn": "경신중고입구" + }, + { + "stop_nm": "홍익대부속중고등학교입구", + "ycode": "37.5932724917", + "stop_no": "08231", + "xcode": "127.0015310386", + "stop_type": "일반차로", + "node_id": "107000141", + "nxtStn": "선잠단지.성락원앞" + }, + { + "stop_nm": "경신중고입구", + "ycode": "37.5917865725", + "stop_no": "08232", + "xcode": "127.0028344034", + "stop_type": "일반차로", + "node_id": "107000142", + "nxtStn": "성북동주민센터.동구마케팅고" + }, + { + "stop_nm": "경신중고입구", + "ycode": "37.592406", + "stop_no": "08233", + "xcode": "127.002668", + "stop_type": "일반차로", + "node_id": "107000143", + "nxtStn": "홍익대부속중고등학교입구" + }, + { + "stop_nm": "성북동주민센터.동구마케팅고", + "ycode": "37.5907466938", + "stop_no": "08234", + "xcode": "127.0036474176", + "stop_type": "일반차로", + "node_id": "107000144", + "nxtStn": "한성대입구역5번출구" + }, + { + "stop_nm": "성북동주민센터.동구마케팅고", + "ycode": "37.590938", + "stop_no": "08235", + "xcode": "127.003877", + "stop_type": "일반차로", + "node_id": "107000145", + "nxtStn": "경신중고입구" + }, + { + "stop_nm": "삼선교.성북문화원", + "ycode": "37.5892007474", + "stop_no": "08236", + "xcode": "127.0051299468", + "stop_type": "일반차로", + "node_id": "107000146", + "nxtStn": "혜화역.서울연극센터(장면총리가옥)" + }, + { + "stop_nm": "삼선교.성북문화원", + "ycode": "37.589091", + "stop_no": "08237", + "xcode": "127.005614", + "stop_type": "일반차로", + "node_id": "107000147", + "nxtStn": "한신103동앞" + }, + { + "stop_nm": "서울다원학교.한용운활동터", + "ycode": "37.594738", + "stop_no": "08238", + "xcode": "126.991655", + "stop_type": "일반차로", + "node_id": "107000514", + "nxtStn": "서울다원학교.한용운활동터" + }, + { + "stop_nm": "장위래미안아파트", + "ycode": "37.618894", + "stop_no": "08239", + "xcode": "127.052473", + "stop_type": "일반차로", + "node_id": "107000522", + "nxtStn": "꿈의숲아이파크아파트" + }, + { + "stop_nm": "신종월교", + "ycode": "37.59731", + "stop_no": "08240", + "xcode": "127.041248", + "stop_type": "일반차로", + "node_id": "107000496", + "nxtStn": "월곡래미안루나밸리" + }, + { + "stop_nm": "창문여고", + "ycode": "37.611781", + "stop_no": "08241", + "xcode": "127.035696", + "stop_type": "일반차로", + "node_id": "107000504", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "장위래미안아파트", + "ycode": "37.618853", + "stop_no": "08242", + "xcode": "127.05266", + "stop_type": "일반차로", + "node_id": "107000521", + "nxtStn": "광운초교" + }, + { + "stop_nm": "남대문중학교", + "ycode": "37.6180556213", + "stop_no": "08243", + "xcode": "127.0546974877", + "stop_type": "일반차로", + "node_id": "107000528", + "nxtStn": "장위3동주민센터" + }, + { + "stop_nm": "남대문중학교", + "ycode": "37.6177666792", + "stop_no": "08244", + "xcode": "127.0553787688", + "stop_type": "일반차로", + "node_id": "107000529", + "nxtStn": "광운초교" + }, + { + "stop_nm": "길음시장", + "ycode": "37.603094", + "stop_no": "08245", + "xcode": "127.023597", + "stop_type": "일반차로", + "node_id": "107000150", + "nxtStn": "길음역" + }, + { + "stop_nm": "길음시장", + "ycode": "37.603149768", + "stop_no": "08246", + "xcode": "127.0230920656", + "stop_type": "일반차로", + "node_id": "107000151", + "nxtStn": "정릉길음시장.길음뉴타운9단지" + }, + { + "stop_nm": "길음역", + "ycode": "37.604682", + "stop_no": "08247", + "xcode": "127.025955", + "stop_type": "일반차로", + "node_id": "107000152", + "nxtStn": "성북우체국현대백화점" + }, + { + "stop_nm": "길음역", + "ycode": "37.605087769", + "stop_no": "08248", + "xcode": "127.0259217322", + "stop_type": "일반차로", + "node_id": "107000153", + "nxtStn": "길음동동부아파트" + }, + { + "stop_nm": "미아사거리", + "ycode": "37.6101676658", + "stop_no": "08249", + "xcode": "127.0300443665", + "stop_type": "일반차로", + "node_id": "107000154", + "nxtStn": "현대백화점" + }, + { + "stop_nm": "서경로꿈마루도서관앞", + "ycode": "37.6115052388", + "stop_no": "08250", + "xcode": "127.013387398", + "stop_type": "일반차로", + "node_id": "107000155", + "nxtStn": "길원초등학교입구" + }, + { + "stop_nm": "길원초등학교입구", + "ycode": "37.6104382371", + "stop_no": "08251", + "xcode": "127.0143749082", + "stop_type": "일반차로", + "node_id": "107000156", + "nxtStn": "길음뉴타운11단지롯데캐슬" + }, + { + "stop_nm": "길원초등학교입구", + "ycode": "37.610337", + "stop_no": "08252", + "xcode": "127.014672", + "stop_type": "일반차로", + "node_id": "107000157", + "nxtStn": "서경로꿈마루도서관앞" + }, + { + "stop_nm": "길음뉴타운11단지롯데캐슬", + "ycode": "37.608835", + "stop_no": "08253", + "xcode": "127.015362", + "stop_type": "일반차로", + "node_id": "107000158", + "nxtStn": "길음뉴타운8단지" + }, + { + "stop_nm": "길음뉴타운11단지롯데캐슬", + "ycode": "37.608783", + "stop_no": "08254", + "xcode": "127.015477", + "stop_type": "일반차로", + "node_id": "107000159", + "nxtStn": "길원초등학교입구" + }, + { + "stop_nm": "정릉동아.길음뉴타운데시앙아파트", + "ycode": "37.606292268", + "stop_no": "08255", + "xcode": "127.0149528803", + "stop_type": "일반차로", + "node_id": "107000160", + "nxtStn": "숭덕초교" + }, + { + "stop_nm": "길음뉴타운데시앙.정릉동아아파트", + "ycode": "37.60641", + "stop_no": "08256", + "xcode": "127.015123", + "stop_type": "일반차로", + "node_id": "107000161", + "nxtStn": "길음뉴타운8단지" + }, + { + "stop_nm": "숭덕초교", + "ycode": "37.6038076998", + "stop_no": "08257", + "xcode": "127.0145783295", + "stop_type": "일반차로", + "node_id": "107000162", + "nxtStn": "숭덕초교" + }, + { + "stop_nm": "성북생태체험관", + "ycode": "37.620221", + "stop_no": "08258", + "xcode": "127.006498", + "stop_type": "일반차로", + "node_id": "107000163", + "nxtStn": "정릉초교" + }, + { + "stop_nm": "정릉초교", + "ycode": "37.619058", + "stop_no": "08259", + "xcode": "127.00634", + "stop_type": "일반차로", + "node_id": "107000164", + "nxtStn": "정릉동풍림상가앞" + }, + { + "stop_nm": "정릉동풍림상가앞", + "ycode": "37.6167005028", + "stop_no": "08260", + "xcode": "127.0077085694", + "stop_type": "일반차로", + "node_id": "107000165", + "nxtStn": "정릉동풍림아파트.청소년문화의집" + }, + { + "stop_nm": "정릉동풍림상가앞", + "ycode": "37.616763", + "stop_no": "08261", + "xcode": "127.008189", + "stop_type": "일반차로", + "node_id": "107000166", + "nxtStn": "풍림아파트삼거리" + }, + { + "stop_nm": "정릉동풍림아파트.청소년문화의집", + "ycode": "37.616477", + "stop_no": "08262", + "xcode": "127.008677", + "stop_type": "일반차로", + "node_id": "107000167", + "nxtStn": "북한산보국문역2번출구" + }, + { + "stop_nm": "정릉입구.정릉역", + "ycode": "37.6024257513", + "stop_no": "08263", + "xcode": "127.0135090711", + "stop_type": "일반차로", + "node_id": "107000168", + "nxtStn": "아리랑고개.아리랑시네미디어센터" + }, + { + "stop_nm": "정릉입구.정릉역", + "ycode": "37.602875", + "stop_no": "08264", + "xcode": "127.013502", + "stop_type": "일반차로", + "node_id": "107000169", + "nxtStn": "정릉우체국앞" + }, + { + "stop_nm": "아리랑고개.아리랑시네미디어센터", + "ycode": "37.6006317832", + "stop_no": "08265", + "xcode": "127.0137784395", + "stop_type": "일반차로", + "node_id": "107000170", + "nxtStn": "돈암힐스테이트.코오롱하늘채" + }, + { + "stop_nm": "아리랑고개.아리랑시네미디어센터", + "ycode": "37.600468", + "stop_no": "08266", + "xcode": "127.013738", + "stop_type": "일반차로", + "node_id": "107000171", + "nxtStn": "우성APT정문" + }, + { + "stop_nm": "돈암2동주민센터입구.흥천사", + "ycode": "37.596722", + "stop_no": "08267", + "xcode": "127.015117", + "stop_type": "일반차로", + "node_id": "107000172", + "nxtStn": "성신여대입구역" + }, + { + "stop_nm": "돈암2동주민센터입구.흥천사", + "ycode": "37.596197", + "stop_no": "08268", + "xcode": "127.015603", + "stop_type": "일반차로", + "node_id": "107000173", + "nxtStn": "돈암힐스테이트.코오롱하늘채" + }, + { + "stop_nm": "성신여대입구역", + "ycode": "37.59374", + "stop_no": "08269", + "xcode": "127.016139", + "stop_type": "일반차로", + "node_id": "107000174", + "nxtStn": "구306보충대.탑석센트럴자이아파" + }, + { + "stop_nm": "성신여대입구역", + "ycode": "37.593748", + "stop_no": "08270", + "xcode": "127.016419", + "stop_type": "일반차로", + "node_id": "107000175", + "nxtStn": "돈암2동주민센터입구.흥천사" + }, + { + "stop_nm": "한국과학기술연구원입구", + "ycode": "37.603913", + "stop_no": "08271", + "xcode": "127.044818", + "stop_type": "일반차로", + "node_id": "107000176", + "nxtStn": "대농빌라앞" + }, + { + "stop_nm": "대농빌라앞", + "ycode": "37.601615", + "stop_no": "08272", + "xcode": "127.043213", + "stop_type": "일반차로", + "node_id": "107000177", + "nxtStn": "월곡2SH빌아파트" + }, + { + "stop_nm": "월곡샹그레빌아파트", + "ycode": "37.5954776166", + "stop_no": "08273", + "xcode": "127.0408149328", + "stop_type": "일반차로", + "node_id": "105000474", + "nxtStn": "국방연구원" + }, + { + "stop_nm": "월곡샹그레빌아파트", + "ycode": "37.5954", + "stop_no": "08274", + "xcode": "127.040878", + "stop_type": "일반차로", + "node_id": "107000178", + "nxtStn": "신종월교" + }, + { + "stop_nm": "장위동고개", + "ycode": "37.6142454988", + "stop_no": "08275", + "xcode": "127.0406505559", + "stop_type": "일반차로", + "node_id": "107000179", + "nxtStn": "장위1동주민센터" + }, + { + "stop_nm": "장위동고개", + "ycode": "37.61438", + "stop_no": "08276", + "xcode": "127.040918", + "stop_type": "일반차로", + "node_id": "107000180", + "nxtStn": "장위동입구" + }, + { + "stop_nm": "장위1동주민센터", + "ycode": "37.613861789", + "stop_no": "08277", + "xcode": "127.0427868796", + "stop_type": "일반차로", + "node_id": "107000181", + "nxtStn": "장위1동치안센터" + }, + { + "stop_nm": "장위1동주민센터", + "ycode": "37.613973", + "stop_no": "08278", + "xcode": "127.043464", + "stop_type": "일반차로", + "node_id": "107000182", + "nxtStn": "나약국" + }, + { + "stop_nm": "장위1동치안센터", + "ycode": "37.613833", + "stop_no": "08279", + "xcode": "127.045172", + "stop_type": "일반차로", + "node_id": "107000183", + "nxtStn": "청소년문화누림센터" + }, + { + "stop_nm": "장위1동치안센터", + "ycode": "37.613943", + "stop_no": "08280", + "xcode": "127.046111", + "stop_type": "일반차로", + "node_id": "107000184", + "nxtStn": "장위1동주민센터" + }, + { + "stop_nm": "청소년문화누림센터", + "ycode": "37.613592", + "stop_no": "08281", + "xcode": "127.048435", + "stop_type": "일반차로", + "node_id": "107000185", + "nxtStn": "장곡초교" + }, + { + "stop_nm": "청소년문화누림센터", + "ycode": "37.6138828968", + "stop_no": "08282", + "xcode": "127.0487688779", + "stop_type": "일반차로", + "node_id": "107000186", + "nxtStn": "장위1동치안센터" + }, + { + "stop_nm": "월곡1동주민센터", + "ycode": "37.61083", + "stop_no": "08283", + "xcode": "127.035227", + "stop_type": "일반차로", + "node_id": "107000187", + "nxtStn": "밤나무골시장" + }, + { + "stop_nm": "월곡1동주민센터", + "ycode": "37.61033", + "stop_no": "08284", + "xcode": "127.035622", + "stop_type": "일반차로", + "node_id": "107000188", + "nxtStn": "경남아너스빌정문" + }, + { + "stop_nm": "밤나무골시장", + "ycode": "37.6094533376", + "stop_no": "08285", + "xcode": "127.0356802463", + "stop_type": "일반차로", + "node_id": "107000189", + "nxtStn": "월곡동두산아파트" + }, + { + "stop_nm": "월곡삼성래미안아파트", + "ycode": "37.609399", + "stop_no": "08286", + "xcode": "127.035937", + "stop_type": "일반차로", + "node_id": "107000190", + "nxtStn": "월곡1동주민센터" + }, + { + "stop_nm": "월곡동두산아파트", + "ycode": "37.6066191426", + "stop_no": "08287", + "xcode": "127.03659179", + "stop_type": "일반차로", + "node_id": "107000191", + "nxtStn": "생명의전화로터리" + }, + { + "stop_nm": "월곡동두산아파트", + "ycode": "37.606802", + "stop_no": "08288", + "xcode": "127.036703", + "stop_type": "일반차로", + "node_id": "107000192", + "nxtStn": "월곡삼성래미안아파트" + }, + { + "stop_nm": "생명의전화", + "ycode": "37.604518", + "stop_no": "08289", + "xcode": "127.037215", + "stop_type": "일반차로", + "node_id": "107000193", + "nxtStn": "월곡역" + }, + { + "stop_nm": "생명의전화", + "ycode": "37.604178", + "stop_no": "08290", + "xcode": "127.037535", + "stop_type": "일반차로", + "node_id": "107000194", + "nxtStn": "월곡동두산아파트" + }, + { + "stop_nm": "장곡초교", + "ycode": "37.6162024332", + "stop_no": "08293", + "xcode": "127.0485302331", + "stop_type": "일반차로", + "node_id": "107000197", + "nxtStn": "청소년문화누림센터" + }, + { + "stop_nm": "장곡초교", + "ycode": "37.6161195728", + "stop_no": "08294", + "xcode": "127.048798454", + "stop_type": "일반차로", + "node_id": "107000198", + "nxtStn": "장곡초교사거리" + }, + { + "stop_nm": "보문역", + "ycode": "37.5854637287", + "stop_no": "08295", + "xcode": "127.0202535696", + "stop_type": "일반차로", + "node_id": "107000199", + "nxtStn": "안암동주민센터" + }, + { + "stop_nm": "보문역", + "ycode": "37.5856511849", + "stop_no": "08296", + "xcode": "127.0200803771", + "stop_type": "일반차로", + "node_id": "107000200", + "nxtStn": "보문역3번출구" + }, + { + "stop_nm": "안암동주민센터", + "ycode": "37.5860464325", + "stop_no": "08297", + "xcode": "127.021938613", + "stop_type": "일반차로", + "node_id": "107000201", + "nxtStn": "고려대이공대.고대병원" + }, + { + "stop_nm": "안암동주민센터", + "ycode": "37.5862680197", + "stop_no": "08298", + "xcode": "127.0223689592", + "stop_type": "일반차로", + "node_id": "107000202", + "nxtStn": "보문역" + }, + { + "stop_nm": "고려대이공대.고대병원", + "ycode": "37.586177", + "stop_no": "08299", + "xcode": "127.025987", + "stop_type": "일반차로", + "node_id": "107000203", + "nxtStn": "안암역" + }, + { + "stop_nm": "고려대이공대.고대병원", + "ycode": "37.586431", + "stop_no": "08300", + "xcode": "127.02588", + "stop_type": "일반차로", + "node_id": "107000204", + "nxtStn": "안암동주민센터" + }, + { + "stop_nm": "안암역", + "ycode": "37.586229248", + "stop_no": "08301", + "xcode": "127.0305239036", + "stop_type": "일반차로", + "node_id": "107000205", + "nxtStn": "고대사거리" + }, + { + "stop_nm": "안암전철역", + "ycode": "37.5863644753", + "stop_no": "08302", + "xcode": "127.0302759807", + "stop_type": "일반차로", + "node_id": "107000206", + "nxtStn": "고려대이공대.고대병원" + }, + { + "stop_nm": "안암오거리", + "ycode": "37.5832964381", + "stop_no": "08303", + "xcode": "127.0295931093", + "stop_type": "일반차로", + "node_id": "107000207", + "nxtStn": "개운사입구" + }, + { + "stop_nm": "개운사입구", + "ycode": "37.5858303361", + "stop_no": "08304", + "xcode": "127.029458235", + "stop_type": "일반차로", + "node_id": "107000208", + "nxtStn": "고대병원" + }, + { + "stop_nm": "돈암시장입구", + "ycode": "37.591444", + "stop_no": "08305", + "xcode": "127.016715", + "stop_type": "일반차로", + "node_id": "107000209", + "nxtStn": "성신여대정문앞" + }, + { + "stop_nm": "돈암시장입구", + "ycode": "37.591715", + "stop_no": "08306", + "xcode": "127.016772", + "stop_type": "일반차로", + "node_id": "107000210", + "nxtStn": "성신여대입구역" + }, + { + "stop_nm": "성북구청", + "ycode": "37.589376", + "stop_no": "08307", + "xcode": "127.01817", + "stop_type": "일반차로", + "node_id": "107000211", + "nxtStn": "보문2교" + }, + { + "stop_nm": "성북구청", + "ycode": "37.5899335613", + "stop_no": "08308", + "xcode": "127.0175710536", + "stop_type": "일반차로", + "node_id": "107000212", + "nxtStn": "삼선동주민센터" + }, + { + "stop_nm": "보문2교", + "ycode": "37.589125", + "stop_no": "08309", + "xcode": "127.019434", + "stop_type": "일반차로", + "node_id": "107000213", + "nxtStn": "성신여대후문" + }, + { + "stop_nm": "보문2교", + "ycode": "37.589049348", + "stop_no": "08310", + "xcode": "127.0191459598", + "stop_type": "일반차로", + "node_id": "107000214", + "nxtStn": "성북구청" + }, + { + "stop_nm": "성신여대후문", + "ycode": "37.589053", + "stop_no": "08311", + "xcode": "127.022099", + "stop_type": "일반차로", + "node_id": "107000215", + "nxtStn": "용문중고교" + }, + { + "stop_nm": "성신여대후문", + "ycode": "37.589132", + "stop_no": "08312", + "xcode": "127.022108", + "stop_type": "일반차로", + "node_id": "107000216", + "nxtStn": "성신여대평생교육원" + }, + { + "stop_nm": "용문중고교", + "ycode": "37.5876943273", + "stop_no": "08313", + "xcode": "127.0229774528", + "stop_type": "일반차로", + "node_id": "107000217", + "nxtStn": "안암초교" + }, + { + "stop_nm": "용문중고교", + "ycode": "37.5873563855", + "stop_no": "08314", + "xcode": "127.0231483316", + "stop_type": "일반차로", + "node_id": "107000510", + "nxtStn": "안암동주민센터" + }, + { + "stop_nm": "안암초교", + "ycode": "37.5869202094", + "stop_no": "08315", + "xcode": "127.0233961765", + "stop_type": "일반차로", + "node_id": "107000219", + "nxtStn": "고려대이공대" + }, + { + "stop_nm": "안암초교", + "ycode": "37.587107", + "stop_no": "08316", + "xcode": "127.023433", + "stop_type": "일반차로", + "node_id": "107000220", + "nxtStn": "용문중고교" + }, + { + "stop_nm": "돈암초교입구", + "ycode": "37.591078", + "stop_no": "08318", + "xcode": "127.012142", + "stop_type": "일반차로", + "node_id": "107000222", + "nxtStn": "삼선동주민센터" + }, + { + "stop_nm": "정릉3동주민센터앞", + "ycode": "37.608447", + "stop_no": "08320", + "xcode": "127.00441", + "stop_type": "일반차로", + "node_id": "107000224", + "nxtStn": "고려대사범대학부속고등학교" + }, + { + "stop_nm": "정릉3동주민센터앞", + "ycode": "37.608522", + "stop_no": "08321", + "xcode": "127.004703", + "stop_type": "일반차로", + "node_id": "107000225", + "nxtStn": "삼덕단지.성북구최만린미술관" + }, + { + "stop_nm": "삼덕단지.성북구최만린미술관", + "ycode": "37.6103867411", + "stop_no": "08322", + "xcode": "127.0050597014", + "stop_type": "일반차로", + "node_id": "107000226", + "nxtStn": "구.정릉3동주민센터" + }, + { + "stop_nm": "삼덕단지.성북구최만린미술관", + "ycode": "37.610417", + "stop_no": "08323", + "xcode": "127.005238", + "stop_type": "일반차로", + "node_id": "107000227", + "nxtStn": "정릉4동주민센터.경국사" + }, + { + "stop_nm": "솔샘사거리", + "ycode": "37.612776", + "stop_no": "08324", + "xcode": "127.006957", + "stop_type": "일반차로", + "node_id": "107000228", + "nxtStn": "수녀원" + }, + { + "stop_nm": "솔샘사거리", + "ycode": "37.612605", + "stop_no": "08325", + "xcode": "127.006943", + "stop_type": "일반차로", + "node_id": "107000229", + "nxtStn": "청소년문화의집.정릉e편한세상" + }, + { + "stop_nm": "보문역3번출구", + "ycode": "37.585933", + "stop_no": "08326", + "xcode": "127.019202", + "stop_type": "일반차로", + "node_id": "107000230", + "nxtStn": "성북구청.성북경찰서" + }, + { + "stop_nm": "성북우체국현대백화점", + "ycode": "37.6078214049", + "stop_no": "08327", + "xcode": "127.0293808251", + "stop_type": "일반차로", + "node_id": "107000231", + "nxtStn": "성가복지병원" + }, + { + "stop_nm": "정릉동풍림아파트", + "ycode": "37.616485", + "stop_no": "08328", + "xcode": "127.008891", + "stop_type": "일반차로", + "node_id": "107000232", + "nxtStn": "SK아파트.벽산아파트상가" + }, + { + "stop_nm": "현대백화점", + "ycode": "37.608328", + "stop_no": "08329", + "xcode": "127.029292", + "stop_type": "일반차로", + "node_id": "107000233", + "nxtStn": "길음역" + }, + { + "stop_nm": "돈암동일신건영휴먼빌아파트", + "ycode": "37.601461", + "stop_no": "08330", + "xcode": "127.013386", + "stop_type": "일반차로", + "node_id": "107000234", + "nxtStn": "아리랑고개.아리랑시네미디어센터" + }, + { + "stop_nm": "석계역", + "ycode": "37.6137162476", + "stop_no": "08332", + "xcode": "127.0654245016", + "stop_type": "일반차로", + "node_id": "107000235", + "nxtStn": "석계역문화공원" + }, + { + "stop_nm": "석계역", + "ycode": "37.613598", + "stop_no": "08333", + "xcode": "127.065462", + "stop_type": "일반차로", + "node_id": "107000236", + "nxtStn": "상진운수종점" + }, + { + "stop_nm": "월곡2SH빌아파트", + "ycode": "37.597512", + "stop_no": "08334", + "xcode": "127.042217", + "stop_type": "일반차로", + "node_id": "107000237", + "nxtStn": "월곡샹그레빌아파트" + }, + { + "stop_nm": "석관고등학교후문", + "ycode": "37.610699", + "stop_no": "08335", + "xcode": "127.0665", + "stop_type": "일반차로", + "node_id": "107000238", + "nxtStn": "석계역" + }, + { + "stop_nm": "길음역", + "ycode": "37.60221", + "stop_no": "08336", + "xcode": "127.024315", + "stop_type": "일반차로", + "node_id": "107000239", + "nxtStn": "길음뉴타운10단지.라온유아파트" + }, + { + "stop_nm": "청소년문화의집.정릉e편한세상", + "ycode": "37.6151911012", + "stop_no": "08338", + "xcode": "127.0089068708", + "stop_type": "일반차로", + "node_id": "107000240", + "nxtStn": "정릉동풍림상가앞" + }, + { + "stop_nm": "상진운수종점", + "ycode": "37.611201", + "stop_no": "08341", + "xcode": "127.065254", + "stop_type": "일반차로", + "node_id": "107000243", + "nxtStn": "종점" + }, + { + "stop_nm": "상진운수종점", + "ycode": "37.611267", + "stop_no": "08342", + "xcode": "127.065628", + "stop_type": "일반차로", + "node_id": "107000244", + "nxtStn": "석관중고등학교앞" + }, + { + "stop_nm": "대진여객차고지", + "ycode": "37.617689", + "stop_no": "08344", + "xcode": "127.000797", + "stop_type": "일반차로", + "node_id": "107000246", + "nxtStn": "종점" + }, + { + "stop_nm": "정릉북한산국립공원입구", + "ycode": "37.617839", + "stop_no": "08347", + "xcode": "126.999331", + "stop_type": "일반차로", + "node_id": "107000249", + "nxtStn": "종점" + }, + { + "stop_nm": "풍림아파트삼거리", + "ycode": "37.617339", + "stop_no": "08348", + "xcode": "127.007432", + "stop_type": "일반차로", + "node_id": "107000508", + "nxtStn": "정릉초교" + }, + { + "stop_nm": "성북생태체험관", + "ycode": "37.620153", + "stop_no": "08349", + "xcode": "127.006495", + "stop_type": "일반차로", + "node_id": "107000251", + "nxtStn": "종점" + }, + { + "stop_nm": "정릉초교", + "ycode": "37.618938", + "stop_no": "08350", + "xcode": "127.006424", + "stop_type": "일반차로", + "node_id": "107000252", + "nxtStn": "성북생태체험관" + }, + { + "stop_nm": "파크빌라앞", + "ycode": "37.598225", + "stop_no": "08351", + "xcode": "127.005912", + "stop_type": "일반차로", + "node_id": "107000524", + "nxtStn": "508단지삼거리" + }, + { + "stop_nm": "골드하우스", + "ycode": "37.598485", + "stop_no": "08352", + "xcode": "127.004559", + "stop_type": "일반차로", + "node_id": "107000523", + "nxtStn": "파크빌라앞" + }, + { + "stop_nm": "월곡중학교", + "ycode": "37.6062348572", + "stop_no": "08353", + "xcode": "127.0478487259", + "stop_type": "일반차로", + "node_id": "107000255", + "nxtStn": "동아아파트" + }, + { + "stop_nm": "508단지삼거리", + "ycode": "37.5993330895", + "stop_no": "08355", + "xcode": "127.0055357424", + "stop_type": "일반차로", + "node_id": "107000257", + "nxtStn": "스카이힐스" + }, + { + "stop_nm": "산장빌라", + "ycode": "37.5992526767", + "stop_no": "08357", + "xcode": "127.0072873121", + "stop_type": "일반차로", + "node_id": "107000259", + "nxtStn": "508단지삼거리" + }, + { + "stop_nm": "산장빌라", + "ycode": "37.5987761153", + "stop_no": "08358", + "xcode": "127.0073998099", + "stop_type": "일반차로", + "node_id": "107000260", + "nxtStn": "우방아파트" + }, + { + "stop_nm": "성북참노인전문병원", + "ycode": "37.5976300271", + "stop_no": "08359", + "xcode": "127.0056794425", + "stop_type": "일반차로", + "node_id": "107000506", + "nxtStn": "종점" + }, + { + "stop_nm": "교수단지", + "ycode": "37.599665", + "stop_no": "08360", + "xcode": "127.009284", + "stop_type": "일반차로", + "node_id": "107000262", + "nxtStn": "산장빌라" + }, + { + "stop_nm": "우방아파트", + "ycode": "37.6002114009", + "stop_no": "08361", + "xcode": "127.0094554943", + "stop_type": "일반차로", + "node_id": "107000263", + "nxtStn": "일신건영아파트.꿈에그린아파트" + }, + { + "stop_nm": "일신건영아파트.꿈에그린아파트", + "ycode": "37.6014914182", + "stop_no": "08363", + "xcode": "127.0121089813", + "stop_type": "일반차로", + "node_id": "107000515", + "nxtStn": "교수단지" + }, + { + "stop_nm": "일신건영아파트.꿈에그린아파트", + "ycode": "37.6014510424", + "stop_no": "08364", + "xcode": "127.0122269985", + "stop_type": "일반차로", + "node_id": "107000266", + "nxtStn": "돈암동일신건영휴먼빌아파트" + }, + { + "stop_nm": "돈암힐스테이트.코오롱하늘채", + "ycode": "37.598831", + "stop_no": "08365", + "xcode": "127.014404", + "stop_type": "일반차로", + "node_id": "107000267", + "nxtStn": "돈암동일신건영휴먼빌아파트" + }, + { + "stop_nm": "돈암동일신건영휴먼빌아파트", + "ycode": "37.601643", + "stop_no": "08366", + "xcode": "127.013626", + "stop_type": "일반차로", + "node_id": "107000268", + "nxtStn": "일신건영아파트.꿈에그린아파트" + }, + { + "stop_nm": "구민회관입구", + "ycode": "37.596703351", + "stop_no": "08367", + "xcode": "127.0064556975", + "stop_type": "일반차로", + "node_id": "107000269", + "nxtStn": "508단지삼거리" + }, + { + "stop_nm": "508단지입구", + "ycode": "37.5991744552", + "stop_no": "08368", + "xcode": "127.006386249", + "stop_type": "일반차로", + "node_id": "107000270", + "nxtStn": "산장빌라" + }, + { + "stop_nm": "스카이힐스", + "ycode": "37.599483255", + "stop_no": "08369", + "xcode": "127.0036633229", + "stop_type": "일반차로", + "node_id": "107000271", + "nxtStn": "골드하우스" + }, + { + "stop_nm": "508단지삼거리", + "ycode": "37.5992258555", + "stop_no": "08370", + "xcode": "127.0056342632", + "stop_type": "일반차로", + "node_id": "107000272", + "nxtStn": "508단지입구" + }, + { + "stop_nm": "대일외고서경대정문", + "ycode": "37.612945", + "stop_no": "08371", + "xcode": "127.013145", + "stop_type": "일반차로", + "node_id": "107000273", + "nxtStn": "서경대본관" + }, + { + "stop_nm": "서경대본관", + "ycode": "37.61546", + "stop_no": "08372", + "xcode": "127.011423", + "stop_type": "일반차로", + "node_id": "107000274", + "nxtStn": "서경대정문.대일외고" + }, + { + "stop_nm": "서경대본관", + "ycode": "37.615626", + "stop_no": "08373", + "xcode": "127.011687", + "stop_type": "일반차로", + "node_id": "107000275", + "nxtStn": "서경대본관" + }, + { + "stop_nm": "길음뉴타운8단지", + "ycode": "37.60757", + "stop_no": "08380", + "xcode": "127.015877", + "stop_type": "일반차로", + "node_id": "107000281", + "nxtStn": "길음뉴타운11단지롯데캐슬" + }, + { + "stop_nm": "길음뉴타운8단지", + "ycode": "37.6074068143", + "stop_no": "08381", + "xcode": "127.0157040433", + "stop_type": "일반차로", + "node_id": "107000280", + "nxtStn": "정릉동아.길음뉴타운데시앙아파트" + }, + { + "stop_nm": "서경로꿈마루도서관앞", + "ycode": "37.611633", + "stop_no": "08382", + "xcode": "127.013476", + "stop_type": "일반차로", + "node_id": "107000282", + "nxtStn": "대일외고서경대정문" + }, + { + "stop_nm": "국민커뮤니티센터", + "ycode": "37.6122826515", + "stop_no": "08390", + "xcode": "127.0044096525", + "stop_type": "일반차로", + "node_id": "107000290", + "nxtStn": "국민대후문" + }, + { + "stop_nm": "정릉연립", + "ycode": "37.612212", + "stop_no": "08391", + "xcode": "127.004373", + "stop_type": "일반차로", + "node_id": "107000291", + "nxtStn": "솔샘사거리" + }, + { + "stop_nm": "국민대후문", + "ycode": "37.611197", + "stop_no": "08392", + "xcode": "126.999453", + "stop_type": "일반차로", + "node_id": "107000292", + "nxtStn": "고려대사범대학부속고등학교.후문" + }, + { + "stop_nm": "국민대후문", + "ycode": "37.611173", + "stop_no": "08393", + "xcode": "126.999865", + "stop_type": "일반차로", + "node_id": "107000293", + "nxtStn": "정릉연립" + }, + { + "stop_nm": "고려대사범대학부속고등학교.후문", + "ycode": "37.609505", + "stop_no": "08394", + "xcode": "126.999294", + "stop_type": "일반차로", + "node_id": "107000294", + "nxtStn": "국민대앞" + }, + { + "stop_nm": "고려대사범대학부속고등학교.후문", + "ycode": "37.6094614333", + "stop_no": "08395", + "xcode": "126.9995106864", + "stop_type": "일반차로", + "node_id": "107000295", + "nxtStn": "국민대후문" + }, + { + "stop_nm": "월곡래미안루나밸리", + "ycode": "37.599653", + "stop_no": "08396", + "xcode": "127.041163", + "stop_type": "일반차로", + "node_id": "107000296", + "nxtStn": "부용마을아파트정문" + }, + { + "stop_nm": "길음뉴타운10단지.라온유아파트", + "ycode": "37.6029875372", + "stop_no": "08400", + "xcode": "127.0181336142", + "stop_type": "일반차로", + "node_id": "107000497", + "nxtStn": "숭덕초교" + }, + { + "stop_nm": "숭곡초교후문", + "ycode": "37.609277551", + "stop_no": "08401", + "xcode": "127.0328337687", + "stop_type": "일반차로", + "node_id": "107000501", + "nxtStn": "월곡아남아파트" + }, + { + "stop_nm": "월곡아남아파트", + "ycode": "37.6064773977", + "stop_no": "08402", + "xcode": "127.0345110882", + "stop_type": "일반차로", + "node_id": "107000502", + "nxtStn": "월곡동신아파트" + }, + { + "stop_nm": "월곡동신아파트", + "ycode": "37.6045305985", + "stop_no": "08403", + "xcode": "127.0360244691", + "stop_type": "일반차로", + "node_id": "107000500", + "nxtStn": "KT월곡지사" + }, + { + "stop_nm": "돌곶이역8번출구", + "ycode": "37.610303", + "stop_no": "08404", + "xcode": "127.056327", + "stop_type": "일반차로", + "node_id": "107000505", + "nxtStn": "돌곶이역" + }, + { + "stop_nm": "한성대입구역", + "ycode": "37.5893629858", + "stop_no": "08405", + "xcode": "127.0047236816", + "stop_type": "일반차로", + "node_id": "107000509", + "nxtStn": "삼선교.한성대학교.조소앙활동터" + }, + { + "stop_nm": "장위동입구", + "ycode": "37.6137313245", + "stop_no": "08406", + "xcode": "127.0390305016", + "stop_type": "일반차로", + "node_id": "107000516", + "nxtStn": "창문여고앞" + }, + { + "stop_nm": "북한산보국문역2번출구", + "ycode": "37.612293899", + "stop_no": "08408", + "xcode": "127.0079858233", + "stop_type": "일반차로", + "node_id": "107000518", + "nxtStn": "성북청수도서관.정릉4동성당" + }, + { + "stop_nm": "북한산보국문역1번출구", + "ycode": "37.6120835499", + "stop_no": "08409", + "xcode": "127.008329146", + "stop_type": "일반차로", + "node_id": "107000519", + "nxtStn": "정릉4동주민센터.경국사" + }, + { + "stop_nm": "일신초교.래미안라센트아파트", + "ycode": "37.598242", + "stop_no": "08410", + "xcode": "127.039436", + "stop_type": "일반차로", + "node_id": "107000525", + "nxtStn": "서울사대부설중학교" + }, + { + "stop_nm": "서울사대부설중학교", + "ycode": "37.5961434071", + "stop_no": "08411", + "xcode": "127.0383641124", + "stop_type": "일반차로", + "node_id": "107000526", + "nxtStn": "서울사대부설고등학교" + }, + { + "stop_nm": "서울사대부설고등학교", + "ycode": "37.593648", + "stop_no": "08412", + "xcode": "127.037164", + "stop_type": "일반차로", + "node_id": "107000527", + "nxtStn": "숭례초등학교" + }, + { + "stop_nm": "일신휴먼빌.우정아파트", + "ycode": "37.60044", + "stop_no": "08448", + "xcode": "127.011252", + "stop_type": "마을버스", + "node_id": "107900267", + "nxtStn": "돈암코오롱하늘채아파트" + }, + { + "stop_nm": "고려아파트", + "ycode": "37.5985623481", + "stop_no": "08449", + "xcode": "127.0272458091", + "stop_type": "마을버스", + "node_id": "107900001", + "nxtStn": "고려슈퍼" + }, + { + "stop_nm": "장월초교.참누리아파트", + "ycode": "37.6232885677", + "stop_no": "08450", + "xcode": "127.0484023045", + "stop_type": "마을버스", + "node_id": "107900305", + "nxtStn": "장석교회" + }, + { + "stop_nm": "동방주택", + "ycode": "37.6165854246", + "stop_no": "08451", + "xcode": "127.0437263808", + "stop_type": "마을버스", + "node_id": "107900304", + "nxtStn": "슈퍼앞" + }, + { + "stop_nm": "장위중학교", + "ycode": "37.6119090424", + "stop_no": "08452", + "xcode": "127.0405010899", + "stop_type": "마을버스", + "node_id": "107900303", + "nxtStn": "월곡청소년센터" + }, + { + "stop_nm": "신안APT.길음초등학교", + "ycode": "37.6142243316", + "stop_no": "08453", + "xcode": "127.0164202375", + "stop_type": "마을버스", + "node_id": "107900284", + "nxtStn": "대우APT211동" + }, + { + "stop_nm": "정릉4동종점", + "ycode": "37.6129436918", + "stop_no": "08454", + "xcode": "127.0101775182", + "stop_type": "마을버스", + "node_id": "107900278", + "nxtStn": "KEB하나은행.오렌지마트" + }, + { + "stop_nm": "산림초소", + "ycode": "37.6139199881", + "stop_no": "08455", + "xcode": "126.9979440805", + "stop_type": "마을버스", + "node_id": "107900273", + "nxtStn": "넓은마당" + }, + { + "stop_nm": "정릉2동주민센터", + "ycode": "37.6046085645", + "stop_no": "08456", + "xcode": "127.0110779295", + "stop_type": "마을버스", + "node_id": "107900272", + "nxtStn": "중앙하이츠정문" + }, + { + "stop_nm": "성신여대입구역3번출구", + "ycode": "37.5922918719", + "stop_no": "08457", + "xcode": "127.0164516544", + "stop_type": "마을버스", + "node_id": "107900280", + "nxtStn": "돈암시장입구" + }, + { + "stop_nm": "삼선푸르지오APT앞", + "ycode": "37.585159", + "stop_no": "08458", + "xcode": "127.013573", + "stop_type": "마을버스", + "node_id": "107900248", + "nxtStn": "한성대입구3거리" + }, + { + "stop_nm": "한성대정문", + "ycode": "37.5825625217", + "stop_no": "08459", + "xcode": "127.0112286496", + "stop_type": "마을버스", + "node_id": "107900256", + "nxtStn": "한양슈퍼앞" + }, + { + "stop_nm": "한신113동앞", + "ycode": "37.5943426813", + "stop_no": "08460", + "xcode": "127.0085997586", + "stop_type": "마을버스", + "node_id": "107900246", + "nxtStn": "구민회관201동앞" + }, + { + "stop_nm": "낙산삼거리", + "ycode": "37.5802666048", + "stop_no": "08462", + "xcode": "127.0105670837", + "stop_type": "마을버스", + "node_id": "107900244", + "nxtStn": "창신쌍용2단지.한성대후문" + }, + { + "stop_nm": "돈암2동주민센터", + "ycode": "37.5975863998", + "stop_no": "08463", + "xcode": "127.0109908191", + "stop_type": "마을버스", + "node_id": "107900245", + "nxtStn": "돈암지구대.현대아파트" + }, + { + "stop_nm": "종암중학교", + "ycode": "37.5932844701", + "stop_no": "08464", + "xcode": "127.0348752977", + "stop_type": "마을버스", + "node_id": "107900143", + "nxtStn": "선경아파트" + }, + { + "stop_nm": "종암교통정보센터", + "ycode": "37.594027", + "stop_no": "08465", + "xcode": "127.035902", + "stop_type": "마을버스", + "node_id": "107900104", + "nxtStn": "세븐마트" + }, + { + "stop_nm": "고려슈퍼", + "ycode": "37.598640621", + "stop_no": "08466", + "xcode": "127.027767923", + "stop_type": "마을버스", + "node_id": "107900077", + "nxtStn": "죽림정사" + }, + { + "stop_nm": "슈퍼앞", + "ycode": "37.6158087153", + "stop_no": "08467", + "xcode": "127.0422165656", + "stop_type": "마을버스", + "node_id": "107900048", + "nxtStn": "나약국" + }, + { + "stop_nm": "월곡청소년센터", + "ycode": "37.6110151894", + "stop_no": "08468", + "xcode": "127.0404315108", + "stop_type": "마을버스", + "node_id": "107900032", + "nxtStn": "월곡인조잔디구장" + }, + { + "stop_nm": "대우APT211동", + "ycode": "37.6129402321", + "stop_no": "08469", + "xcode": "127.0167960192", + "stop_type": "마을버스", + "node_id": "107900005", + "nxtStn": "대우APT정문.대림APT후문" + }, + { + "stop_nm": "KEB하나은행.오렌지마트", + "ycode": "37.6113037986", + "stop_no": "08470", + "xcode": "127.0091703259", + "stop_type": "마을버스", + "node_id": "107900002", + "nxtStn": "정릉시장입구" + }, + { + "stop_nm": "중앙하이츠정문", + "ycode": "37.6026973686", + "stop_no": "08471", + "xcode": "127.0109779802", + "stop_type": "마을버스", + "node_id": "107900268", + "nxtStn": "중앙하이츠후문" + }, + { + "stop_nm": "한양슈퍼앞", + "ycode": "37.5834681227", + "stop_no": "08474", + "xcode": "127.0111699073", + "stop_type": "마을버스", + "node_id": "107900004", + "nxtStn": "(구)법화사" + }, + { + "stop_nm": "구민회관201동앞", + "ycode": "37.5955879331", + "stop_no": "08475", + "xcode": "127.0092873052", + "stop_type": "마을버스", + "node_id": "107900006", + "nxtStn": "한진204동앞" + }, + { + "stop_nm": "돈암지구대.현대아파트", + "ycode": "37.596978894", + "stop_no": "08477", + "xcode": "127.0127098361", + "stop_type": "마을버스", + "node_id": "107900007", + "nxtStn": "이수아파트.한신휴아파트입구" + }, + { + "stop_nm": "선경아파트", + "ycode": "37.5943749086", + "stop_no": "08478", + "xcode": "127.0344613329", + "stop_type": "마을버스", + "node_id": "107900008", + "nxtStn": "극동아파트정문" + }, + { + "stop_nm": "세븐마트", + "ycode": "37.5925498469", + "stop_no": "08479", + "xcode": "127.0356653798", + "stop_type": "마을버스", + "node_id": "107900009", + "nxtStn": "고려대법과대학.한국어교육관입구" + }, + { + "stop_nm": "죽림정사", + "ycode": "37.5995314443", + "stop_no": "08480", + "xcode": "127.0292269396", + "stop_type": "마을버스", + "node_id": "107900010", + "nxtStn": "래미안세레니티" + }, + { + "stop_nm": "나약국", + "ycode": "37.6143344683", + "stop_no": "08482", + "xcode": "127.041354229", + "stop_type": "마을버스", + "node_id": "107900012", + "nxtStn": "장위1동주민센터" + }, + { + "stop_nm": "동아아파트", + "ycode": "37.6081543482", + "stop_no": "08483", + "xcode": "127.0474093545", + "stop_type": "마을버스", + "node_id": "107900013", + "nxtStn": "이지마트" + }, + { + "stop_nm": "월곡인조잔디구장", + "ycode": "37.6086618783", + "stop_no": "08484", + "xcode": "127.0394708753", + "stop_type": "마을버스", + "node_id": "107900014", + "nxtStn": "월곡1동밤골경로당" + }, + { + "stop_nm": "대우APT정문.대림APT후문", + "ycode": "37.6119651381", + "stop_no": "08485", + "xcode": "127.0176158808", + "stop_type": "마을버스", + "node_id": "107900015", + "nxtStn": "새생명교회" + }, + { + "stop_nm": "넓은마당", + "ycode": "37.6146057316", + "stop_no": "08487", + "xcode": "126.9997043527", + "stop_type": "마을버스", + "node_id": "107900274", + "nxtStn": "도광사" + }, + { + "stop_nm": "중앙하이츠후문", + "ycode": "37.603539", + "stop_no": "08488", + "xcode": "127.009355", + "stop_type": "마을버스", + "node_id": "107900269", + "nxtStn": "정수초교" + }, + { + "stop_nm": "성신여대정문앞", + "ycode": "37.590765825", + "stop_no": "08489", + "xcode": "127.0197375056", + "stop_type": "마을버스", + "node_id": "107900016", + "nxtStn": "성신여대평생교육원" + }, + { + "stop_nm": "한성대입구3거리", + "ycode": "37.5864120039", + "stop_no": "08490", + "xcode": "127.0109450153", + "stop_type": "마을버스", + "node_id": "107900257", + "nxtStn": "성북세무서앞" + }, + { + "stop_nm": "(구)법화사", + "ycode": "37.5847416354", + "stop_no": "08491", + "xcode": "127.0110898368", + "stop_type": "마을버스", + "node_id": "107900017", + "nxtStn": "한성대입구3거리" + }, + { + "stop_nm": "이수아파트.한신휴아파트입구", + "ycode": "37.5966164967", + "stop_no": "08492", + "xcode": "127.0141174417", + "stop_type": "마을버스", + "node_id": "107900018", + "nxtStn": "성신여대입구역" + }, + { + "stop_nm": "극동아파트정문", + "ycode": "37.5954238021", + "stop_no": "08493", + "xcode": "127.0343689551", + "stop_type": "마을버스", + "node_id": "107900019", + "nxtStn": "극동아파트후문" + }, + { + "stop_nm": "고려대법과대학.한국어교육관입구", + "ycode": "37.5913557733", + "stop_no": "08494", + "xcode": "127.0330195331", + "stop_type": "마을버스", + "node_id": "107900020", + "nxtStn": "고려대안암학사" + }, + { + "stop_nm": "래미안세레니티", + "ycode": "37.5990484356", + "stop_no": "08495", + "xcode": "127.0293309418", + "stop_type": "마을버스", + "node_id": "107900021", + "nxtStn": "통일교회" + }, + { + "stop_nm": "장위1동주민센터", + "ycode": "37.6138183526", + "stop_no": "08497", + "xcode": "127.0432920552", + "stop_type": "마을버스", + "node_id": "107900291", + "nxtStn": "장위1동치안센터" + }, + { + "stop_nm": "이지마트", + "ycode": "37.6097861067", + "stop_no": "08498", + "xcode": "127.0476777016", + "stop_type": "마을버스", + "node_id": "107900295", + "nxtStn": "GS25장위제일점" + }, + { + "stop_nm": "월곡1동밤골경로당", + "ycode": "37.6074171689", + "stop_no": "08499", + "xcode": "127.0403853901", + "stop_type": "마을버스", + "node_id": "107900023", + "nxtStn": "초림빌라" + }, + { + "stop_nm": "새생명교회", + "ycode": "37.611032", + "stop_no": "08500", + "xcode": "127.018246", + "stop_type": "마을버스", + "node_id": "107900158", + "nxtStn": "현대아파트앞" + }, + { + "stop_nm": "도광사", + "ycode": "37.6154094907", + "stop_no": "08502", + "xcode": "127.001466925", + "stop_type": "마을버스", + "node_id": "107900275", + "nxtStn": "산장아파트" + }, + { + "stop_nm": "정수초교", + "ycode": "37.604372", + "stop_no": "08503", + "xcode": "127.008832", + "stop_type": "마을버스", + "node_id": "107900024", + "nxtStn": "그린빌라" + }, + { + "stop_nm": "성신여대평생교육원", + "ycode": "37.589302", + "stop_no": "08504", + "xcode": "127.020334", + "stop_type": "마을버스", + "node_id": "107900025", + "nxtStn": "성신여대후문" + }, + { + "stop_nm": "성신여대입구역", + "ycode": "37.5935074738", + "stop_no": "08505", + "xcode": "127.0162095823", + "stop_type": "마을버스", + "node_id": "107900259", + "nxtStn": "돈암시장입구" + }, + { + "stop_nm": "극동아파트후문", + "ycode": "37.5960223777", + "stop_no": "08506", + "xcode": "127.0334881714", + "stop_type": "마을버스", + "node_id": "107900026", + "nxtStn": "종암아이파크2차정문" + }, + { + "stop_nm": "고려대안암학사", + "ycode": "37.5912582105", + "stop_no": "08507", + "xcode": "127.030584842", + "stop_type": "마을버스", + "node_id": "107900027", + "nxtStn": "고려대아이스링크" + }, + { + "stop_nm": "통일교회", + "ycode": "37.5977570629", + "stop_no": "08508", + "xcode": "127.0297868295", + "stop_type": "마을버스", + "node_id": "107900028", + "nxtStn": "그린마트" + }, + { + "stop_nm": "장위1동치안센터", + "ycode": "37.6138039967", + "stop_no": "08510", + "xcode": "127.0455235372", + "stop_type": "마을버스", + "node_id": "107900030", + "nxtStn": "국민은행장위동지점" + }, + { + "stop_nm": "GS25장위제일점", + "ycode": "37.610855472", + "stop_no": "08511", + "xcode": "127.0482277397", + "stop_type": "마을버스", + "node_id": "107900031", + "nxtStn": "장위천주교앞" + }, + { + "stop_nm": "초림빌라", + "ycode": "37.607459", + "stop_no": "08512", + "xcode": "127.041067", + "stop_type": "마을버스", + "node_id": "107900033", + "nxtStn": "동덕여대후문" + }, + { + "stop_nm": "대림상가앞", + "ycode": "37.6108023697", + "stop_no": "08513", + "xcode": "127.019928561", + "stop_type": "마을버스", + "node_id": "107900034", + "nxtStn": "대림APT정문" + }, + { + "stop_nm": "현대아파트앞", + "ycode": "37.609086", + "stop_no": "08514", + "xcode": "127.020319", + "stop_type": "마을버스", + "node_id": "107900035", + "nxtStn": "래미안821동앞" + }, + { + "stop_nm": "산장아파트", + "ycode": "37.616657", + "stop_no": "08516", + "xcode": "127.003503", + "stop_type": "마을버스", + "node_id": "107900036", + "nxtStn": "정릉4동주민센터.경국사" + }, + { + "stop_nm": "그린빌라", + "ycode": "37.6038644988", + "stop_no": "08517", + "xcode": "127.0082440902", + "stop_type": "마을버스", + "node_id": "107900037", + "nxtStn": "정수빌라" + }, + { + "stop_nm": "삼선시장앞", + "ycode": "37.5881107312", + "stop_no": "08519", + "xcode": "127.0088742018", + "stop_type": "마을버스", + "node_id": "107900038", + "nxtStn": "한성대입구역.성북천분수마루" + }, + { + "stop_nm": "종암아이파크2차정문", + "ycode": "37.5968921594", + "stop_no": "08521", + "xcode": "127.0326607185", + "stop_type": "마을버스", + "node_id": "107900039", + "nxtStn": "현대홈마트" + }, + { + "stop_nm": "고려대아이스링크", + "ycode": "37.5930412509", + "stop_no": "08522", + "xcode": "127.0278066095", + "stop_type": "마을버스", + "node_id": "107900040", + "nxtStn": "성북구의회" + }, + { + "stop_nm": "그린마트", + "ycode": "37.5979829182", + "stop_no": "08523", + "xcode": "127.0310202081", + "stop_type": "마을버스", + "node_id": "107900041", + "nxtStn": "종암아이파크2차후문" + }, + { + "stop_nm": "장위천주교앞", + "ycode": "37.6126113808", + "stop_no": "08526", + "xcode": "127.0489730694", + "stop_type": "마을버스", + "node_id": "107900043", + "nxtStn": "장위시장" + }, + { + "stop_nm": "동덕여대후문", + "ycode": "37.606657", + "stop_no": "08527", + "xcode": "127.040839", + "stop_type": "마을버스", + "node_id": "107900044", + "nxtStn": "두산아파트후문" + }, + { + "stop_nm": "대림APT정문", + "ycode": "37.6111129362", + "stop_no": "08528", + "xcode": "127.0216763929", + "stop_type": "마을버스", + "node_id": "107900045", + "nxtStn": "파리바게트앞" + }, + { + "stop_nm": "래미안821동앞", + "ycode": "37.606389", + "stop_no": "08529", + "xcode": "127.021798", + "stop_type": "마을버스", + "node_id": "107900046", + "nxtStn": "길음시장입구" + }, + { + "stop_nm": "정수빌라", + "ycode": "37.6034392147", + "stop_no": "08532", + "xcode": "127.0078193261", + "stop_type": "마을버스", + "node_id": "107900047", + "nxtStn": "그린빌라" + }, + { + "stop_nm": "한성대입구역.성북천분수마루", + "ycode": "37.587917", + "stop_no": "08534", + "xcode": "127.00704", + "stop_type": "마을버스", + "node_id": "107900049", + "nxtStn": "삼선교.성북문화원" + }, + { + "stop_nm": "삼선시장", + "ycode": "37.5881449546", + "stop_no": "08535", + "xcode": "127.0091097341", + "stop_type": "마을버스", + "node_id": "107900254", + "nxtStn": "한성대입구역.성북천분수마루" + }, + { + "stop_nm": "동방고개", + "ycode": "37.6137524896", + "stop_no": "08536", + "xcode": "127.0383227067", + "stop_type": "마을버스", + "node_id": "107900292", + "nxtStn": "장위동그린빌아파트" + }, + { + "stop_nm": "정덕초교입구.이수아파트", + "ycode": "37.5966624215", + "stop_no": "08537", + "xcode": "127.0143711251", + "stop_type": "마을버스", + "node_id": "107900050", + "nxtStn": "돈암지구대.현대아파트" + }, + { + "stop_nm": "현대홈마트", + "ycode": "37.59774179", + "stop_no": "08538", + "xcode": "127.0330031027", + "stop_type": "마을버스", + "node_id": "107900051", + "nxtStn": "종암아이파크2차후문" + }, + { + "stop_nm": "성북구의회", + "ycode": "37.594558093", + "stop_no": "08539", + "xcode": "127.0264561677", + "stop_type": "마을버스", + "node_id": "107900052", + "nxtStn": "개운중학교" + }, + { + "stop_nm": "종암아이파크2차후문", + "ycode": "37.5978024471", + "stop_no": "08540", + "xcode": "127.0319702953", + "stop_type": "마을버스", + "node_id": "107900053", + "nxtStn": "성북노인정입구" + }, + { + "stop_nm": "장위시장", + "ycode": "37.6133087107", + "stop_no": "08542", + "xcode": "127.0500348524", + "stop_type": "마을버스", + "node_id": "107900055", + "nxtStn": "어해랑앞" + }, + { + "stop_nm": "두산아파트후문", + "ycode": "37.605962848", + "stop_no": "08543", + "xcode": "127.0402905965", + "stop_type": "마을버스", + "node_id": "107900056", + "nxtStn": "자산약국.월곡전철역입구.6호선" + }, + { + "stop_nm": "파리바게트앞", + "ycode": "37.6113884844", + "stop_no": "08544", + "xcode": "127.0226562581", + "stop_type": "마을버스", + "node_id": "107900302", + "nxtStn": "동부아파트.샘물교회앞" + }, + { + "stop_nm": "길음시장입구", + "ycode": "37.60517", + "stop_no": "08545", + "xcode": "127.02237", + "stop_type": "마을버스", + "node_id": "107900282", + "nxtStn": "길음전철역" + }, + { + "stop_nm": "길음역출구", + "ycode": "37.6022105821", + "stop_no": "08546", + "xcode": "127.0243523151", + "stop_type": "마을버스", + "node_id": "107900283", + "nxtStn": "정릉길음시장.길음뉴타운9단지" + }, + { + "stop_nm": "그린빌라", + "ycode": "37.6037248291", + "stop_no": "08548", + "xcode": "127.0082621961", + "stop_type": "마을버스", + "node_id": "107900057", + "nxtStn": "정수초교" + }, + { + "stop_nm": "한신105동앞", + "ycode": "37.592584", + "stop_no": "08550", + "xcode": "127.00899", + "stop_type": "마을버스", + "node_id": "107900249", + "nxtStn": "한신103동앞" + }, + { + "stop_nm": "장위동그린빌아파트", + "ycode": "37.6177787253", + "stop_no": "08551", + "xcode": "127.0430066211", + "stop_type": "마을버스", + "node_id": "107900293", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "돈암지구대.현대아파트", + "ycode": "37.5970744148", + "stop_no": "08552", + "xcode": "127.0126588906", + "stop_type": "마을버스", + "node_id": "107900058", + "nxtStn": "돈암신일해피트리아파트" + }, + { + "stop_nm": "개운중학교", + "ycode": "37.5941781735", + "stop_no": "08554", + "xcode": "127.0248944002", + "stop_type": "마을버스", + "node_id": "107900060", + "nxtStn": "풍림아파트.성신초교" + }, + { + "stop_nm": "성북노인정입구", + "ycode": "37.5978526869", + "stop_no": "08555", + "xcode": "127.0327766528", + "stop_type": "마을버스", + "node_id": "107900061", + "nxtStn": "원진프라자앞" + }, + { + "stop_nm": "어해랑앞", + "ycode": "37.6139775278", + "stop_no": "08557", + "xcode": "127.0529124982", + "stop_type": "마을버스", + "node_id": "107900063", + "nxtStn": "세광빌라" + }, + { + "stop_nm": "자산약국.월곡전철역입구.6호선", + "ycode": "37.6043412492", + "stop_no": "08558", + "xcode": "127.0392307477", + "stop_type": "마을버스", + "node_id": "107900064", + "nxtStn": "생명의전화" + }, + { + "stop_nm": "동부아파트.샘물교회앞", + "ycode": "37.6118369827", + "stop_no": "08559", + "xcode": "127.0238853806", + "stop_type": "마을버스", + "node_id": "107900065", + "nxtStn": "래미안길음센터피스120동앞" + }, + { + "stop_nm": "길음전철역", + "ycode": "37.604133", + "stop_no": "08560", + "xcode": "127.024301", + "stop_type": "마을버스", + "node_id": "107900281", + "nxtStn": "길음시장앞" + }, + { + "stop_nm": "수녀원", + "ycode": "37.6119203778", + "stop_no": "08562", + "xcode": "127.0053135319", + "stop_type": "마을버스", + "node_id": "107900066", + "nxtStn": "삼덕단지.성북구최만린미술관" + }, + { + "stop_nm": "정수초교", + "ycode": "37.6041816433", + "stop_no": "08563", + "xcode": "127.0087719123", + "stop_type": "마을버스", + "node_id": "107900067", + "nxtStn": "중앙하이츠후문" + }, + { + "stop_nm": "고려대이공대", + "ycode": "37.586127814", + "stop_no": "08564", + "xcode": "127.025042317", + "stop_type": "마을버스", + "node_id": "107900068", + "nxtStn": "고대병원" + }, + { + "stop_nm": "삼선교.한성대입구역", + "ycode": "37.5894788054", + "stop_no": "08566", + "xcode": "127.0051556693", + "stop_type": "마을버스", + "node_id": "107900069", + "nxtStn": "한성대입구역5번출구" + }, + { + "stop_nm": "한신103동앞", + "ycode": "37.5922035215", + "stop_no": "08567", + "xcode": "127.0082620546", + "stop_type": "마을버스", + "node_id": "107900070", + "nxtStn": "삼선교.한성대입구역" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.6199450324", + "stop_no": "08568", + "xcode": "127.0451511821", + "stop_type": "마을버스", + "node_id": "107900298", + "nxtStn": "꿈의숲대명루첸아파트" + }, + { + "stop_nm": "돈암신일해피트리아파트", + "ycode": "37.5977882419", + "stop_no": "08569", + "xcode": "127.0110067037", + "stop_type": "마을버스", + "node_id": "107900071", + "nxtStn": "돈암코오롱하늘채아파트" + }, + { + "stop_nm": "통일교회", + "ycode": "37.5978597954", + "stop_no": "08570", + "xcode": "127.0297528957", + "stop_type": "마을버스", + "node_id": "107900072", + "nxtStn": "래미안세레니티" + }, + { + "stop_nm": "풍림아파트.성신초교", + "ycode": "37.5951930807", + "stop_no": "08571", + "xcode": "127.0235199391", + "stop_type": "마을버스", + "node_id": "107900073", + "nxtStn": "풍림106동" + }, + { + "stop_nm": "한미약국", + "ycode": "37.5988695825", + "stop_no": "08572", + "xcode": "127.0342980595", + "stop_type": "마을버스", + "node_id": "107900074", + "nxtStn": "성북노인정입구" + }, + { + "stop_nm": "세광빌라", + "ycode": "37.6146086251", + "stop_no": "08574", + "xcode": "127.0541544376", + "stop_type": "마을버스", + "node_id": "107900076", + "nxtStn": "관문약국" + }, + { + "stop_nm": "래미안길음센터피스120동앞", + "ycode": "37.6120078422", + "stop_no": "08576", + "xcode": "127.0255414558", + "stop_type": "마을버스", + "node_id": "107900079", + "nxtStn": "영훈중고후문.길음래미안센터피스" + }, + { + "stop_nm": "중앙하이츠후문", + "ycode": "37.603448", + "stop_no": "08580", + "xcode": "127.009261", + "stop_type": "마을버스", + "node_id": "107900270", + "nxtStn": "중앙하이츠정문" + }, + { + "stop_nm": "고대병원", + "ycode": "37.5861138287", + "stop_no": "08581", + "xcode": "127.0271631411", + "stop_type": "마을버스", + "node_id": "107900080", + "nxtStn": "안암역" + }, + { + "stop_nm": "풍림106동", + "ycode": "37.5976127854", + "stop_no": "08584", + "xcode": "127.0220507277", + "stop_type": "마을버스", + "node_id": "107900081", + "nxtStn": "고명중고교" + }, + { + "stop_nm": "성북노인정입구", + "ycode": "37.5979671042", + "stop_no": "08585", + "xcode": "127.0328514477", + "stop_type": "마을버스", + "node_id": "107900082", + "nxtStn": "종암아이파크2차후문" + }, + { + "stop_nm": "장위3동주민센터", + "ycode": "37.6163806677", + "stop_no": "08586", + "xcode": "127.0569015699", + "stop_type": "마을버스", + "node_id": "107900083", + "nxtStn": "장위119안전센터" + }, + { + "stop_nm": "관문약국", + "ycode": "37.6156127998", + "stop_no": "08587", + "xcode": "127.0553083192", + "stop_type": "마을버스", + "node_id": "107900084", + "nxtStn": "우리랜드사우나" + }, + { + "stop_nm": "동덕여대부속유치원앞", + "ycode": "37.606123", + "stop_no": "08588", + "xcode": "127.045275", + "stop_type": "마을버스", + "node_id": "107900350", + "nxtStn": "동아아파트정문앞" + }, + { + "stop_nm": "영훈중고후문.길음래미안센터피스", + "ycode": "37.612454342", + "stop_no": "08589", + "xcode": "127.0274932778", + "stop_type": "마을버스", + "node_id": "107900086", + "nxtStn": "미아사거리전철역" + }, + { + "stop_nm": "길음시장앞", + "ycode": "37.6032940101", + "stop_no": "08590", + "xcode": "127.0227410113", + "stop_type": "마을버스", + "node_id": "107900087", + "nxtStn": "길음시장입구" + }, + { + "stop_nm": "구.정릉3동주민센터", + "ycode": "37.6094883196", + "stop_no": "08592", + "xcode": "127.0058966843", + "stop_type": "마을버스", + "node_id": "107900088", + "nxtStn": "정든마을" + }, + { + "stop_nm": "중앙하이츠정문", + "ycode": "37.6027307247", + "stop_no": "08593", + "xcode": "127.0108058347", + "stop_type": "마을버스", + "node_id": "107900271", + "nxtStn": "종점" + }, + { + "stop_nm": "한성대입구역5번출구", + "ycode": "37.589225", + "stop_no": "08596", + "xcode": "127.00509", + "stop_type": "마을버스", + "node_id": "107900090", + "nxtStn": "삼선교제1시장" + }, + { + "stop_nm": "참누리아파트", + "ycode": "37.6229337873", + "stop_no": "08597", + "xcode": "127.0477971194", + "stop_type": "마을버스", + "node_id": "107900091", + "nxtStn": "번3동주민센터" + }, + { + "stop_nm": "고명중고교", + "ycode": "37.5987114012", + "stop_no": "08598", + "xcode": "127.0203281149", + "stop_type": "마을버스", + "node_id": "107900093", + "nxtStn": "브라운스톤" + }, + { + "stop_nm": "종암아이파크2차후문", + "ycode": "37.5979024838", + "stop_no": "08599", + "xcode": "127.0319114484", + "stop_type": "마을버스", + "node_id": "107900285", + "nxtStn": "그린마트" + }, + { + "stop_nm": "장위119안전센터", + "ycode": "37.6152176785", + "stop_no": "08600", + "xcode": "127.0581116015", + "stop_type": "마을버스", + "node_id": "107900097", + "nxtStn": "석관동주민센터" + }, + { + "stop_nm": "우리랜드사우나", + "ycode": "37.6167062363", + "stop_no": "08602", + "xcode": "127.0563241001", + "stop_type": "마을버스", + "node_id": "107900098", + "nxtStn": "장위3동주민센터" + }, + { + "stop_nm": "석계역5번출구", + "ycode": "37.614014", + "stop_no": "08603", + "xcode": "127.065067", + "stop_type": "마을버스", + "node_id": "107900357", + "nxtStn": "석관두산아파트" + }, + { + "stop_nm": "석관두산아파트", + "ycode": "37.614168", + "stop_no": "08604", + "xcode": "127.067625", + "stop_type": "마을버스", + "node_id": "107900358", + "nxtStn": "성북레포츠타운" + }, + { + "stop_nm": "성북레포츠타운", + "ycode": "37.610083", + "stop_no": "08605", + "xcode": "127.070302", + "stop_type": "마을버스", + "node_id": "107900359", + "nxtStn": "석계역" + }, + { + "stop_nm": "미아사거리전철역", + "ycode": "37.612328", + "stop_no": "08657", + "xcode": "127.029704", + "stop_type": "마을버스", + "node_id": "107900100", + "nxtStn": "미아사거리" + }, + { + "stop_nm": "길음시장입구", + "ycode": "37.6048051558", + "stop_no": "08662", + "xcode": "127.0226202832", + "stop_type": "마을버스", + "node_id": "107900101", + "nxtStn": "래미안610동앞" + }, + { + "stop_nm": "정든마을", + "ycode": "37.609463", + "stop_no": "08714", + "xcode": "127.007299", + "stop_type": "마을버스", + "node_id": "107900102", + "nxtStn": "수보약국" + }, + { + "stop_nm": "국민은행장위동지점", + "ycode": "37.6135767647", + "stop_no": "08715", + "xcode": "127.048192117", + "stop_type": "마을버스", + "node_id": "107900308", + "nxtStn": "장위시장" + }, + { + "stop_nm": "고대사거리", + "ycode": "37.5862774378", + "stop_no": "08716", + "xcode": "127.032286944", + "stop_type": "마을버스", + "node_id": "107900103", + "nxtStn": "우신향병원" + }, + { + "stop_nm": "한성대입구역2번출구", + "ycode": "37.5885307766", + "stop_no": "08718", + "xcode": "127.0067963836", + "stop_type": "마을버스", + "node_id": "107900107", + "nxtStn": "녹십자약국" + }, + { + "stop_nm": "삼선교제1시장", + "ycode": "37.5877945813", + "stop_no": "08721", + "xcode": "127.0068903011", + "stop_type": "마을버스", + "node_id": "107900108", + "nxtStn": "삼선교제2시장" + }, + { + "stop_nm": "개운초등학교", + "ycode": "37.6013301158", + "stop_no": "08722", + "xcode": "127.0288153961", + "stop_type": "마을버스", + "node_id": "107900110", + "nxtStn": "종암래미안" + }, + { + "stop_nm": "브라운스톤", + "ycode": "37.599545", + "stop_no": "08727", + "xcode": "127.01759", + "stop_type": "마을버스", + "node_id": "107900113", + "nxtStn": "힐스테이트" + }, + { + "stop_nm": "그린마트", + "ycode": "37.5980964627", + "stop_no": "08728", + "xcode": "127.0309919428", + "stop_type": "마을버스", + "node_id": "107900115", + "nxtStn": "통일교회" + }, + { + "stop_nm": "래미안610동앞", + "ycode": "37.605554924", + "stop_no": "08731", + "xcode": "127.0222829921", + "stop_type": "마을버스", + "node_id": "107900118", + "nxtStn": "래미안609동앞" + }, + { + "stop_nm": "수보약국", + "ycode": "37.6086862377", + "stop_no": "08733", + "xcode": "127.007874243", + "stop_type": "마을버스", + "node_id": "107900120", + "nxtStn": "정릉시장입구" + }, + { + "stop_nm": "쌍다리", + "ycode": "37.5934247138", + "stop_no": "08734", + "xcode": "126.9958836268", + "stop_type": "마을버스", + "node_id": "107900125", + "nxtStn": "용광교회" + }, + { + "stop_nm": "녹십자약국", + "ycode": "37.5896344415", + "stop_no": "08744", + "xcode": "127.0092820358", + "stop_type": "마을버스", + "node_id": "107900127", + "nxtStn": "삼영탕앞" + }, + { + "stop_nm": "삼선교제2시장", + "ycode": "37.5877791457", + "stop_no": "08745", + "xcode": "127.0086669439", + "stop_type": "마을버스", + "node_id": "107900128", + "nxtStn": "성북세무서앞" + }, + { + "stop_nm": "종암래미안", + "ycode": "37.6017407751", + "stop_no": "08748", + "xcode": "127.0297680319", + "stop_type": "마을버스", + "node_id": "107900129", + "nxtStn": "종암아이파크1차후문" + }, + { + "stop_nm": "힐스테이트", + "ycode": "37.599802358", + "stop_no": "08749", + "xcode": "127.0170331603", + "stop_type": "마을버스", + "node_id": "107900130", + "nxtStn": "우성APT정문" + }, + { + "stop_nm": "현대백화점", + "ycode": "37.6083206204", + "stop_no": "08750", + "xcode": "127.0293255215", + "stop_type": "마을버스", + "node_id": "107900131", + "nxtStn": "길음2동주민센터" + }, + { + "stop_nm": "래미안609동앞", + "ycode": "37.6065398941", + "stop_no": "08751", + "xcode": "127.0218415618", + "stop_type": "마을버스", + "node_id": "107900132", + "nxtStn": "래미안501동앞" + }, + { + "stop_nm": "오렌지마트", + "ycode": "37.6113614529", + "stop_no": "08757", + "xcode": "127.0093640245", + "stop_type": "마을버스", + "node_id": "107900133", + "nxtStn": "종점" + }, + { + "stop_nm": "정릉시장입구", + "ycode": "37.6082706923", + "stop_no": "08758", + "xcode": "127.0098053714", + "stop_type": "마을버스", + "node_id": "107900134", + "nxtStn": "정릉우체국앞" + }, + { + "stop_nm": "용광교회", + "ycode": "37.5925307938", + "stop_no": "08759", + "xcode": "126.9948588415", + "stop_type": "마을버스", + "node_id": "107900135", + "nxtStn": "북정마을삼거리" + }, + { + "stop_nm": "삼영탕앞", + "ycode": "37.5888116861", + "stop_no": "08760", + "xcode": "127.0100292895", + "stop_type": "마을버스", + "node_id": "107900136", + "nxtStn": "성북세무서앞" + }, + { + "stop_nm": "성북세무서앞", + "ycode": "37.5881655969", + "stop_no": "08765", + "xcode": "127.0101254524", + "stop_type": "마을버스", + "node_id": "107900137", + "nxtStn": "본교회앞" + }, + { + "stop_nm": "종암아이파크1차후문", + "ycode": "37.6021839366", + "stop_no": "08766", + "xcode": "127.0304477445", + "stop_type": "마을버스", + "node_id": "107900138", + "nxtStn": "성북소방서" + }, + { + "stop_nm": "우성APT정문", + "ycode": "37.6006018719", + "stop_no": "08767", + "xcode": "127.0152065619", + "stop_type": "마을버스", + "node_id": "107900139", + "nxtStn": "아리랑고개.아리랑시네미디어센터" + }, + { + "stop_nm": "길음2동주민센터", + "ycode": "37.6066792098", + "stop_no": "08769", + "xcode": "127.0278026247", + "stop_type": "마을버스", + "node_id": "107900141", + "nxtStn": "길음전철역" + }, + { + "stop_nm": "래미안501동앞", + "ycode": "37.6086973016", + "stop_no": "08770", + "xcode": "127.020692544", + "stop_type": "마을버스", + "node_id": "107900142", + "nxtStn": "길음1동주민센터.길음중앙새마을금고앞" + }, + { + "stop_nm": "북정마을삼거리", + "ycode": "37.5925495961", + "stop_no": "08771", + "xcode": "126.9925917473", + "stop_type": "마을버스", + "node_id": "107900144", + "nxtStn": "슈퍼앞" + }, + { + "stop_nm": "성북세무서앞", + "ycode": "37.5878763191", + "stop_no": "08772", + "xcode": "127.010448131", + "stop_type": "마을버스", + "node_id": "107900145", + "nxtStn": "한성대입구사거리" + }, + { + "stop_nm": "본교회앞", + "ycode": "37.5886421351", + "stop_no": "08773", + "xcode": "127.0116236224", + "stop_type": "마을버스", + "node_id": "107900146", + "nxtStn": "고려삼계탕" + }, + { + "stop_nm": "성북소방서", + "ycode": "37.602575", + "stop_no": "08775", + "xcode": "127.030928", + "stop_type": "마을버스", + "node_id": "107900147", + "nxtStn": "종암아이파크1차정문" + }, + { + "stop_nm": "장위119안전센터", + "ycode": "37.6148983478", + "stop_no": "08780", + "xcode": "127.0588113942", + "stop_type": "마을버스", + "node_id": "107900148", + "nxtStn": "우리랜드사우나" + }, + { + "stop_nm": "석계역", + "ycode": "37.614627", + "stop_no": "08781", + "xcode": "127.06471", + "stop_type": "마을버스", + "node_id": "107900299", + "nxtStn": "석관동주민센터" + }, + { + "stop_nm": "길음전철역", + "ycode": "37.60424", + "stop_no": "08783", + "xcode": "127.024158", + "stop_type": "마을버스", + "node_id": "107900149", + "nxtStn": "길음시장입구" + }, + { + "stop_nm": "길음1동주민센터.길음중앙새마을금고앞", + "ycode": "37.609922941", + "stop_no": "08786", + "xcode": "127.0197436999", + "stop_type": "마을버스", + "node_id": "107900150", + "nxtStn": "새생명교회" + }, + { + "stop_nm": "국민은행사거리", + "ycode": "37.6137056129", + "stop_no": "08787", + "xcode": "127.0482091911", + "stop_type": "마을버스", + "node_id": "107900307", + "nxtStn": "장위1동치안센터" + }, + { + "stop_nm": "슈퍼앞", + "ycode": "37.5931263008", + "stop_no": "08788", + "xcode": "126.9927207864", + "stop_type": "마을버스", + "node_id": "107900151", + "nxtStn": "북정경로당" + }, + { + "stop_nm": "한성대입구사거리", + "ycode": "37.5858614419", + "stop_no": "08789", + "xcode": "127.0109053037", + "stop_type": "마을버스", + "node_id": "107900152", + "nxtStn": "(구)법화사" + }, + { + "stop_nm": "고려삼계탕", + "ycode": "37.5896248782", + "stop_no": "08790", + "xcode": "127.0147162769", + "stop_type": "마을버스", + "node_id": "107900153", + "nxtStn": "삼선동주민센터" + }, + { + "stop_nm": "종암아이파크1차정문", + "ycode": "37.6035229732", + "stop_no": "08791", + "xcode": "127.0303644793", + "stop_type": "마을버스", + "node_id": "107900154", + "nxtStn": "범양APT입구" + }, + { + "stop_nm": "꿈의숲대명루첸아파트", + "ycode": "37.619748", + "stop_no": "08792", + "xcode": "127.048003", + "stop_type": "마을버스", + "node_id": "107900354", + "nxtStn": "장곡초교앞" + }, + { + "stop_nm": "돈암힐스테이트.코오롱하늘채", + "ycode": "37.598517", + "stop_no": "08795", + "xcode": "127.014262", + "stop_type": "마을버스", + "node_id": "107900155", + "nxtStn": "돈암2동주민센터입구.흥천사" + }, + { + "stop_nm": "고려슈퍼", + "ycode": "37.5986595673", + "stop_no": "08796", + "xcode": "127.0276682695", + "stop_type": "마을버스", + "node_id": "107900156", + "nxtStn": "종점" + }, + { + "stop_nm": "새생명교회", + "ycode": "37.6109999704", + "stop_no": "08798", + "xcode": "127.0183054636", + "stop_type": "마을버스", + "node_id": "107900159", + "nxtStn": "대우APT정문.대림APT후문앞" + }, + { + "stop_nm": "돈암코오롱하늘채.일신휴먼빌", + "ycode": "37.599603", + "stop_no": "08799", + "xcode": "127.011342", + "stop_type": "마을버스", + "node_id": "107900351", + "nxtStn": "일신휴먼빌.우정아파트" + }, + { + "stop_nm": "서경대정문.대일외고", + "ycode": "37.613128", + "stop_no": "08800", + "xcode": "127.013025", + "stop_type": "일반차로", + "node_id": "107000444", + "nxtStn": "서경로꿈마루도서관앞" + }, + { + "stop_nm": "북정경로당", + "ycode": "37.5926486034", + "stop_no": "08801", + "xcode": "126.9909757805", + "stop_type": "마을버스", + "node_id": "107900160", + "nxtStn": "북정마을삼거리.모정앞" + }, + { + "stop_nm": "(구)법화사", + "ycode": "37.5845908968", + "stop_no": "08807", + "xcode": "127.0109979664", + "stop_type": "마을버스", + "node_id": "107900162", + "nxtStn": "한양슈퍼앞" + }, + { + "stop_nm": "범양APT입구", + "ycode": "37.6039526599", + "stop_no": "08808", + "xcode": "127.0272103996", + "stop_type": "마을버스", + "node_id": "107900165", + "nxtStn": "길음역" + }, + { + "stop_nm": "선잠로3길입구", + "ycode": "37.5959526063", + "stop_no": "08809", + "xcode": "126.9972123529", + "stop_type": "마을버스", + "node_id": "107900340", + "nxtStn": "성북빌리지" + }, + { + "stop_nm": "선잠로3길입구", + "ycode": "37.596027983", + "stop_no": "08810", + "xcode": "126.9968838263", + "stop_type": "마을버스", + "node_id": "107900341", + "nxtStn": "성북동성당" + }, + { + "stop_nm": "원진프라자앞", + "ycode": "37.5995439814", + "stop_no": "08815", + "xcode": "127.0329450077", + "stop_type": "마을버스", + "node_id": "107900306", + "nxtStn": "한미약국" + }, + { + "stop_nm": "대우APT정문.대림APT후문앞", + "ycode": "37.61229132", + "stop_no": "08819", + "xcode": "127.0176895841", + "stop_type": "마을버스", + "node_id": "107900171", + "nxtStn": "대우APT211동앞" + }, + { + "stop_nm": "선잠단지.성락원앞", + "ycode": "37.594727", + "stop_no": "08821", + "xcode": "126.998925", + "stop_type": "마을버스", + "node_id": "107900318", + "nxtStn": "성북동성당" + }, + { + "stop_nm": "선잠단지.성락원앞", + "ycode": "37.594596", + "stop_no": "08822", + "xcode": "126.998918", + "stop_type": "마을버스", + "node_id": "107900317", + "nxtStn": "홍익대부속중고등학교입구" + }, + { + "stop_nm": "북정마을삼거리.모정앞", + "ycode": "37.5923603438", + "stop_no": "08823", + "xcode": "126.9922226001", + "stop_type": "마을버스", + "node_id": "107900174", + "nxtStn": "용광교회" + }, + { + "stop_nm": "성북동성당", + "ycode": "37.595446", + "stop_no": "08824", + "xcode": "126.997778", + "stop_type": "마을버스", + "node_id": "107900315", + "nxtStn": "선잠로3길입구" + }, + { + "stop_nm": "성북동성당", + "ycode": "37.595476", + "stop_no": "08825", + "xcode": "126.997653", + "stop_type": "마을버스", + "node_id": "107900316", + "nxtStn": "선잠단지.성락원앞" + }, + { + "stop_nm": "성북빌리지", + "ycode": "37.5967146098", + "stop_no": "08826", + "xcode": "126.9966104959", + "stop_type": "마을버스", + "node_id": "107900314", + "nxtStn": "북악슈퍼" + }, + { + "stop_nm": "성북빌리지", + "ycode": "37.596666", + "stop_no": "08827", + "xcode": "126.996591", + "stop_type": "마을버스", + "node_id": "107900309", + "nxtStn": "선잠로3길입구" + }, + { + "stop_nm": "한양슈퍼앞", + "ycode": "37.5835870776", + "stop_no": "08828", + "xcode": "127.0110533004", + "stop_type": "마을버스", + "node_id": "107900177", + "nxtStn": "종점" + }, + { + "stop_nm": "돈암초등학교", + "ycode": "37.5915399594", + "stop_no": "08829", + "xcode": "127.0123873098", + "stop_type": "마을버스", + "node_id": "107900255", + "nxtStn": "수협동소문동지점" + }, + { + "stop_nm": "길음역", + "ycode": "37.6044477074", + "stop_no": "08830", + "xcode": "127.0256430693", + "stop_type": "마을버스", + "node_id": "107900180", + "nxtStn": "힐스테이트입구" + }, + { + "stop_nm": "북악슈퍼", + "ycode": "37.5975084085", + "stop_no": "08831", + "xcode": "126.9949423033", + "stop_type": "마을버스", + "node_id": "107900313", + "nxtStn": "길상사" + }, + { + "stop_nm": "래미안장위퍼스트하이아파트", + "ycode": "37.6195039893", + "stop_no": "08832", + "xcode": "127.0505518894", + "stop_type": "마을버스", + "node_id": "107900344", + "nxtStn": "꿈의숲대명루첸아파트" + }, + { + "stop_nm": "북악슈퍼", + "ycode": "37.597552", + "stop_no": "08833", + "xcode": "126.994835", + "stop_type": "마을버스", + "node_id": "107900312", + "nxtStn": "성북빌리지" + }, + { + "stop_nm": "우리랜드사우나", + "ycode": "37.6167081324", + "stop_no": "08834", + "xcode": "127.0561269978", + "stop_type": "마을버스", + "node_id": "107900181", + "nxtStn": "관문약국" + }, + { + "stop_nm": "대우APT211동앞", + "ycode": "37.6130627667", + "stop_no": "08835", + "xcode": "127.0168877975", + "stop_type": "마을버스", + "node_id": "107900182", + "nxtStn": "종점" + }, + { + "stop_nm": "용광교회", + "ycode": "37.5924406819", + "stop_no": "08836", + "xcode": "126.9947886382", + "stop_type": "마을버스", + "node_id": "107900185", + "nxtStn": "쌍다리" + }, + { + "stop_nm": "길상사", + "ycode": "37.5983184366", + "stop_no": "08837", + "xcode": "126.9938901546", + "stop_type": "마을버스", + "node_id": "107900311", + "nxtStn": "한국가구박물관입구" + }, + { + "stop_nm": "수협동소문동지점", + "ycode": "37.5904336247", + "stop_no": "08838", + "xcode": "127.0102797636", + "stop_type": "마을버스", + "node_id": "107900188", + "nxtStn": "삼선교" + }, + { + "stop_nm": "길상사", + "ycode": "37.598455", + "stop_no": "08839", + "xcode": "126.993605", + "stop_type": "마을버스", + "node_id": "107900310", + "nxtStn": "북악슈퍼" + }, + { + "stop_nm": "정릉꿈에그린아파트", + "ycode": "37.6015704448", + "stop_no": "08840", + "xcode": "127.0115042175", + "stop_type": "마을버스", + "node_id": "107900320", + "nxtStn": "아리랑시장" + }, + { + "stop_nm": "종암사거리입구", + "ycode": "37.600991", + "stop_no": "08841", + "xcode": "127.03341", + "stop_type": "일반차로", + "node_id": "107000469", + "nxtStn": "고려대역.숭례초교" + }, + { + "stop_nm": "정릉꿈에그린아파트", + "ycode": "37.6015704448", + "stop_no": "08842", + "xcode": "127.0112628186", + "stop_type": "마을버스", + "node_id": "107900321", + "nxtStn": "일신휴먼빌.우정아파트" + }, + { + "stop_nm": "아리랑시장", + "ycode": "37.6024197844", + "stop_no": "08843", + "xcode": "127.0114966535", + "stop_type": "마을버스", + "node_id": "107900323", + "nxtStn": "중앙하이츠빌아파트" + }, + { + "stop_nm": "아리랑시장", + "ycode": "37.602268", + "stop_no": "08844", + "xcode": "127.011371", + "stop_type": "마을버스", + "node_id": "107900324", + "nxtStn": "정릉꿈에그린아파트" + }, + { + "stop_nm": "중앙하이츠빌아파트", + "ycode": "37.602557", + "stop_no": "08845", + "xcode": "127.010793", + "stop_type": "마을버스", + "node_id": "107900322", + "nxtStn": "종점" + }, + { + "stop_nm": "세계문화유산정릉", + "ycode": "37.601537", + "stop_no": "08846", + "xcode": "127.009674", + "stop_type": "마을버스", + "node_id": "107900326", + "nxtStn": "정릉꿈에그린1단지" + }, + { + "stop_nm": "정릉꿈에그린1단지", + "ycode": "37.602168631", + "stop_no": "08847", + "xcode": "127.0109350201", + "stop_type": "마을버스", + "node_id": "107900325", + "nxtStn": "아리랑시장" + }, + { + "stop_nm": "일신휴먼빌.우정아파트", + "ycode": "37.600083", + "stop_no": "08848", + "xcode": "127.011293", + "stop_type": "마을버스", + "node_id": "107900319", + "nxtStn": "정릉꿈에그린아파트" + }, + { + "stop_nm": "돈암코오롱하늘채아파트", + "ycode": "37.598883", + "stop_no": "08849", + "xcode": "127.011319", + "stop_type": "마을버스", + "node_id": "107900331", + "nxtStn": "돈암2동주민센터" + }, + { + "stop_nm": "돈암코오롱하늘채아파트", + "ycode": "37.598794", + "stop_no": "08850", + "xcode": "127.01137", + "stop_type": "마을버스", + "node_id": "107900330", + "nxtStn": "돈암코오롱하늘채.일신휴먼빌" + }, + { + "stop_nm": "힐스테이트입구", + "ycode": "37.6064783291", + "stop_no": "08854", + "xcode": "127.0280770548", + "stop_type": "마을버스", + "node_id": "107900190", + "nxtStn": "현대백화점별관주차장" + }, + { + "stop_nm": "한국가구박물관입구", + "ycode": "37.599294", + "stop_no": "08855", + "xcode": "126.992609", + "stop_type": "마을버스", + "node_id": "107900327", + "nxtStn": "우리옛돌박물관.정법사" + }, + { + "stop_nm": "우리옛돌박물관.정법사", + "ycode": "37.600969", + "stop_no": "08856", + "xcode": "126.990568", + "stop_type": "마을버스", + "node_id": "107900329", + "nxtStn": "한국가구박물관입구" + }, + { + "stop_nm": "한국가구박물관입구", + "ycode": "37.599778", + "stop_no": "08858", + "xcode": "126.992192", + "stop_type": "마을버스", + "node_id": "107900328", + "nxtStn": "길상사" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.620359", + "stop_no": "08866", + "xcode": "127.045299", + "stop_type": "일반차로", + "node_id": "107000495", + "nxtStn": "롯데캐슬루나아파트" + }, + { + "stop_nm": "관문약국", + "ycode": "37.6158597012", + "stop_no": "08868", + "xcode": "127.0552994399", + "stop_type": "마을버스", + "node_id": "107900191", + "nxtStn": "세광빌라" + }, + { + "stop_nm": "쌍다리", + "ycode": "37.5933823665", + "stop_no": "08872", + "xcode": "126.9959968718", + "stop_type": "마을버스", + "node_id": "107900194", + "nxtStn": "성북초교.성북선잠박물관" + }, + { + "stop_nm": "삼선교", + "ycode": "37.589082", + "stop_no": "08873", + "xcode": "127.00719", + "stop_type": "마을버스", + "node_id": "107900195", + "nxtStn": "삼선교.성북문화원" + }, + { + "stop_nm": "현대백화점별관주차장", + "ycode": "37.6075367209", + "stop_no": "08874", + "xcode": "127.0291417258", + "stop_type": "마을버스", + "node_id": "107900197", + "nxtStn": "미아사거리역.롯데백화점" + }, + { + "stop_nm": "세광빌라", + "ycode": "37.6149094357", + "stop_no": "08876", + "xcode": "127.0544842868", + "stop_type": "마을버스", + "node_id": "107900201", + "nxtStn": "어해랑앞" + }, + { + "stop_nm": "간대어린이공원", + "ycode": "37.618638", + "stop_no": "08877", + "xcode": "127.051184", + "stop_type": "마을버스", + "node_id": "107900355", + "nxtStn": "종점" + }, + { + "stop_nm": "돌곶이역2번출구", + "ycode": "37.611535958", + "stop_no": "08878", + "xcode": "127.0561142907", + "stop_type": "마을버스", + "node_id": "107900356", + "nxtStn": "돌곶이역" + }, + { + "stop_nm": "성가복지병원앞", + "ycode": "37.6059394924", + "stop_no": "08881", + "xcode": "127.0311141214", + "stop_type": "마을버스", + "node_id": "107900286", + "nxtStn": "성북소방서" + }, + { + "stop_nm": "꿈의숲코오롱하늘채아파트", + "ycode": "37.619142", + "stop_no": "08883", + "xcode": "127.045616", + "stop_type": "마을버스", + "node_id": "107900203", + "nxtStn": "종점" + }, + { + "stop_nm": "어해랑앞", + "ycode": "37.614046", + "stop_no": "08884", + "xcode": "127.052652", + "stop_type": "마을버스", + "node_id": "107900204", + "nxtStn": "장위시장" + }, + { + "stop_nm": "고대병원", + "ycode": "37.5863798344", + "stop_no": "08886", + "xcode": "127.0262694676", + "stop_type": "마을버스", + "node_id": "107900206", + "nxtStn": "안암초교" + }, + { + "stop_nm": "한신103동앞", + "ycode": "37.5920233074", + "stop_no": "08888", + "xcode": "127.0082088116", + "stop_type": "마을버스", + "node_id": "107900208", + "nxtStn": "한신105동앞" + }, + { + "stop_nm": "성북소방서", + "ycode": "37.6027999972", + "stop_no": "08889", + "xcode": "127.031525069", + "stop_type": "마을버스", + "node_id": "107900210", + "nxtStn": "종암아이파크1차후문" + }, + { + "stop_nm": "장위시장", + "ycode": "37.6134406042", + "stop_no": "08892", + "xcode": "127.0505764271", + "stop_type": "마을버스", + "node_id": "107900213", + "nxtStn": "장위천주교앞" + }, + { + "stop_nm": "생명의전화로터리", + "ycode": "37.6038353025", + "stop_no": "08893", + "xcode": "127.0378090878", + "stop_type": "마을버스", + "node_id": "107900215", + "nxtStn": "자산약국.월곡전철역입구.6호선" + }, + { + "stop_nm": "정릉시장입구.정릉약국", + "ycode": "37.608370718", + "stop_no": "08894", + "xcode": "127.0097442213", + "stop_type": "마을버스", + "node_id": "107900216", + "nxtStn": "수보약국" + }, + { + "stop_nm": "꿈의숲동문앞", + "ycode": "37.620922", + "stop_no": "08895", + "xcode": "127.045828", + "stop_type": "마을버스", + "node_id": "107900338", + "nxtStn": "꿈의숲대명루첸아파트" + }, + { + "stop_nm": "꿈의숲대명루첸아파트", + "ycode": "37.619379", + "stop_no": "08896", + "xcode": "127.046968", + "stop_type": "마을버스", + "node_id": "107900339", + "nxtStn": "꿈의숲코오롱하늘채아파트" + }, + { + "stop_nm": "종암아이파크1차후문", + "ycode": "37.602206504", + "stop_no": "08897", + "xcode": "127.0302914603", + "stop_type": "마을버스", + "node_id": "107900219", + "nxtStn": "종암래미안" + }, + { + "stop_nm": "돈암힐스테이트.코오롱하늘채", + "ycode": "37.5987916924", + "stop_no": "08898", + "xcode": "127.0143670046", + "stop_type": "마을버스", + "node_id": "107900262", + "nxtStn": "아리랑고개.아리랑시네미디어센터" + }, + { + "stop_nm": "자산약국.월곡전철역입구.6호선", + "ycode": "37.6041727102", + "stop_no": "08900", + "xcode": "127.0393382553", + "stop_type": "마을버스", + "node_id": "107900224", + "nxtStn": "월곡시장.동덕여대오거리" + }, + { + "stop_nm": "수보약국", + "ycode": "37.608704248", + "stop_no": "08901", + "xcode": "127.0080441437", + "stop_type": "마을버스", + "node_id": "107900226", + "nxtStn": "정든마을" + }, + { + "stop_nm": "종암래미안", + "ycode": "37.6018588018", + "stop_no": "08904", + "xcode": "127.0298303694", + "stop_type": "마을버스", + "node_id": "107900230", + "nxtStn": "개운초등학교" + }, + { + "stop_nm": "장위천주교앞", + "ycode": "37.6123942977", + "stop_no": "08908", + "xcode": "127.0487837637", + "stop_type": "마을버스", + "node_id": "107900234", + "nxtStn": "GS25장위제일점" + }, + { + "stop_nm": "월곡시장.동덕여대오거리", + "ycode": "37.6041273834", + "stop_no": "08909", + "xcode": "127.0427144806", + "stop_type": "마을버스", + "node_id": "107900239", + "nxtStn": "월곡로데오거리" + }, + { + "stop_nm": "정든마을", + "ycode": "37.6096167331", + "stop_no": "08910", + "xcode": "127.0073694927", + "stop_type": "마을버스", + "node_id": "107900241", + "nxtStn": "대동슈퍼" + }, + { + "stop_nm": "개운초등학교", + "ycode": "37.6012022543", + "stop_no": "08912", + "xcode": "127.0284325466", + "stop_type": "마을버스", + "node_id": "107900240", + "nxtStn": "죽림정사앞" + }, + { + "stop_nm": "우성APT정문", + "ycode": "37.6004509363", + "stop_no": "08913", + "xcode": "127.0152061932", + "stop_type": "마을버스", + "node_id": "107900238", + "nxtStn": "쌍용APT" + }, + { + "stop_nm": "나약국", + "ycode": "37.614294786", + "stop_no": "08914", + "xcode": "127.0414527557", + "stop_type": "마을버스", + "node_id": "107900237", + "nxtStn": "슈퍼앞" + }, + { + "stop_nm": "GS25장위제일점", + "ycode": "37.6110537358", + "stop_no": "08915", + "xcode": "127.0481667022", + "stop_type": "마을버스", + "node_id": "107900236", + "nxtStn": "이지마트" + }, + { + "stop_nm": "월곡로데오거리", + "ycode": "37.6048993942", + "stop_no": "08916", + "xcode": "127.0438728583", + "stop_type": "마을버스", + "node_id": "107900235", + "nxtStn": "동덕여대부속유치원앞" + }, + { + "stop_nm": "대동슈퍼", + "ycode": "37.6111778561", + "stop_no": "08917", + "xcode": "127.0058854907", + "stop_type": "마을버스", + "node_id": "107900233", + "nxtStn": "수녀원입구" + }, + { + "stop_nm": "한진206동앞", + "ycode": "37.5954940982", + "stop_no": "08919", + "xcode": "127.0107232511", + "stop_type": "마을버스", + "node_id": "107900261", + "nxtStn": "한진207동앞" + }, + { + "stop_nm": "죽림정사앞", + "ycode": "37.5996513018", + "stop_no": "08920", + "xcode": "127.0291748905", + "stop_type": "마을버스", + "node_id": "107900232", + "nxtStn": "래미안세레니티" + }, + { + "stop_nm": "쌍용APT", + "ycode": "37.6000277168", + "stop_no": "08921", + "xcode": "127.0164193819", + "stop_type": "마을버스", + "node_id": "107900231", + "nxtStn": "브라운스톤" + }, + { + "stop_nm": "슈퍼앞", + "ycode": "37.615649", + "stop_no": "08922", + "xcode": "127.042313", + "stop_type": "마을버스", + "node_id": "107900229", + "nxtStn": "종점" + }, + { + "stop_nm": "이지마트", + "ycode": "37.6099870685", + "stop_no": "08923", + "xcode": "127.0476291248", + "stop_type": "마을버스", + "node_id": "107900228", + "nxtStn": "동아아파트" + }, + { + "stop_nm": "동아아파트정문앞", + "ycode": "37.6068870252", + "stop_no": "08924", + "xcode": "127.0461343399", + "stop_type": "마을버스", + "node_id": "107900227", + "nxtStn": "월곡중학교입구" + }, + { + "stop_nm": "수녀원입구", + "ycode": "37.6118951367", + "stop_no": "08925", + "xcode": "127.0055480005", + "stop_type": "마을버스", + "node_id": "107900243", + "nxtStn": "정릉4동주민센터.경국사" + }, + { + "stop_nm": "성신여대평생교육원", + "ycode": "37.5893438185", + "stop_no": "08926", + "xcode": "127.0202580181", + "stop_type": "마을버스", + "node_id": "107900258", + "nxtStn": "보문2교" + }, + { + "stop_nm": "명신초.삼선푸르지오.힐스테이트", + "ycode": "37.5822593867", + "stop_no": "08927", + "xcode": "127.0145993366", + "stop_type": "마을버스", + "node_id": "107900225", + "nxtStn": "창신쌍용2단지.한성대후문" + }, + { + "stop_nm": "브라운스톤", + "ycode": "37.5992976541", + "stop_no": "08928", + "xcode": "127.0176785796", + "stop_type": "마을버스", + "node_id": "107900223", + "nxtStn": "고명중고교" + }, + { + "stop_nm": "동아아파트", + "ycode": "37.6080318541", + "stop_no": "08930", + "xcode": "127.0472756242", + "stop_type": "마을버스", + "node_id": "107900297", + "nxtStn": "상월곡역" + }, + { + "stop_nm": "월곡중학교입구", + "ycode": "37.6075912815", + "stop_no": "08931", + "xcode": "127.0471292345", + "stop_type": "마을버스", + "node_id": "107900221", + "nxtStn": "월곡초교" + }, + { + "stop_nm": "돈암시장", + "ycode": "37.5913019518", + "stop_no": "08934", + "xcode": "127.0134834289", + "stop_type": "마을버스", + "node_id": "107900220", + "nxtStn": "성북구청.경동고입구" + }, + { + "stop_nm": "창신쌍용2단지.한성대후문", + "ycode": "37.5813963581", + "stop_no": "08935", + "xcode": "127.0127354927", + "stop_type": "마을버스", + "node_id": "107900218", + "nxtStn": "낙산삼거리" + }, + { + "stop_nm": "고명중고교", + "ycode": "37.5984610236", + "stop_no": "08936", + "xcode": "127.02029673", + "stop_type": "마을버스", + "node_id": "107900217", + "nxtStn": "풍림아파트" + }, + { + "stop_nm": "상월곡역", + "ycode": "37.6068638336", + "stop_no": "08937", + "xcode": "127.0478038236", + "stop_type": "마을버스", + "node_id": "107900290", + "nxtStn": "월곡중학교" + }, + { + "stop_nm": "월곡초교", + "ycode": "37.6091289096", + "stop_no": "08938", + "xcode": "127.0461798986", + "stop_type": "마을버스", + "node_id": "107900214", + "nxtStn": "월곡초등학교후문" + }, + { + "stop_nm": "산장아파트", + "ycode": "37.616608793", + "stop_no": "08939", + "xcode": "127.0034685688", + "stop_type": "마을버스", + "node_id": "107900279", + "nxtStn": "도광사" + }, + { + "stop_nm": "성북구청.경동고입구", + "ycode": "37.5878015805", + "stop_no": "08941", + "xcode": "127.0175977286", + "stop_type": "마을버스", + "node_id": "107900209", + "nxtStn": "경동고앞" + }, + { + "stop_nm": "한신301동앞", + "ycode": "37.5962151136", + "stop_no": "08942", + "xcode": "127.0089861462", + "stop_type": "마을버스", + "node_id": "107900207", + "nxtStn": "구민회관201동앞" + }, + { + "stop_nm": "낙산삼거리", + "ycode": "37.5802801396", + "stop_no": "08943", + "xcode": "127.0103598878", + "stop_type": "마을버스", + "node_id": "107900199", + "nxtStn": "종점" + }, + { + "stop_nm": "풍림아파트", + "ycode": "37.5974334637", + "stop_no": "08945", + "xcode": "127.022078987", + "stop_type": "마을버스", + "node_id": "107900196", + "nxtStn": "풍림아파트.성신초교" + }, + { + "stop_nm": "월곡중학교", + "ycode": "37.606796", + "stop_no": "08946", + "xcode": "127.048839", + "stop_type": "마을버스", + "node_id": "107900193", + "nxtStn": "종점" + }, + { + "stop_nm": "월곡초등학교후문", + "ycode": "37.6113791943", + "stop_no": "08947", + "xcode": "127.0454756183", + "stop_type": "마을버스", + "node_id": "107900242", + "nxtStn": "누구나교회" + }, + { + "stop_nm": "도광사", + "ycode": "37.6154320192", + "stop_no": "08948", + "xcode": "127.0013581804", + "stop_type": "마을버스", + "node_id": "107900276", + "nxtStn": "넓은마당" + }, + { + "stop_nm": "경동고앞", + "ycode": "37.5870414318", + "stop_no": "08949", + "xcode": "127.0149048675", + "stop_type": "마을버스", + "node_id": "107900189", + "nxtStn": "삼선노인정" + }, + { + "stop_nm": "구민회관201동앞", + "ycode": "37.5955284683", + "stop_no": "08950", + "xcode": "127.009196701", + "stop_type": "마을버스", + "node_id": "107900187", + "nxtStn": "한신113동앞" + }, + { + "stop_nm": "현대홈마트", + "ycode": "37.5977742664", + "stop_no": "08951", + "xcode": "127.0328694828", + "stop_type": "마을버스", + "node_id": "107900186", + "nxtStn": "종암아이파크2차정문" + }, + { + "stop_nm": "풍림아파트.성신초교", + "ycode": "37.595269765", + "stop_no": "08952", + "xcode": "127.0230545241", + "stop_type": "마을버스", + "node_id": "107900184", + "nxtStn": "개운중학교" + }, + { + "stop_nm": "누구나교회", + "ycode": "37.6119083534", + "stop_no": "08953", + "xcode": "127.0448959944", + "stop_type": "마을버스", + "node_id": "107900183", + "nxtStn": "태광빌라" + }, + { + "stop_nm": "넓은마당", + "ycode": "37.6146859282", + "stop_no": "08954", + "xcode": "126.9997383348", + "stop_type": "마을버스", + "node_id": "107900277", + "nxtStn": "종점" + }, + { + "stop_nm": "삼선노인정", + "ycode": "37.5863747515", + "stop_no": "08956", + "xcode": "127.0138720583", + "stop_type": "마을버스", + "node_id": "107900179", + "nxtStn": "삼선초교" + }, + { + "stop_nm": "한신113동앞", + "ycode": "37.5944634325", + "stop_no": "08957", + "xcode": "127.0085261637", + "stop_type": "마을버스", + "node_id": "107900178", + "nxtStn": "동구고등학교후문" + }, + { + "stop_nm": "종암아이파크2차정문", + "ycode": "37.596973297", + "stop_no": "08958", + "xcode": "127.0325169289", + "stop_type": "마을버스", + "node_id": "107900176", + "nxtStn": "극동아파트후문" + }, + { + "stop_nm": "개운중학교", + "ycode": "37.5940465738", + "stop_no": "08959", + "xcode": "127.0250868706", + "stop_type": "마을버스", + "node_id": "107900175", + "nxtStn": "성북구의회" + }, + { + "stop_nm": "태광빌라", + "ycode": "37.612208778", + "stop_no": "08960", + "xcode": "127.0439311044", + "stop_type": "마을버스", + "node_id": "107900173", + "nxtStn": "장위1동노인정" + }, + { + "stop_nm": "삼선초교", + "ycode": "37.585164", + "stop_no": "08961", + "xcode": "127.013358", + "stop_type": "마을버스", + "node_id": "107900172", + "nxtStn": "종점" + }, + { + "stop_nm": "동구고등학교후문", + "ycode": "37.593705", + "stop_no": "08962", + "xcode": "127.008419", + "stop_type": "마을버스", + "node_id": "107900169", + "nxtStn": "종점" + }, + { + "stop_nm": "극동아파트후문", + "ycode": "37.596016114", + "stop_no": "08964", + "xcode": "127.0333330207", + "stop_type": "마을버스", + "node_id": "107900168", + "nxtStn": "극동아파트정문" + }, + { + "stop_nm": "성북구의회", + "ycode": "37.5944860839", + "stop_no": "08965", + "xcode": "127.0261062172", + "stop_type": "마을버스", + "node_id": "107900167", + "nxtStn": "고려대아이스링크" + }, + { + "stop_nm": "장위1동노인정", + "ycode": "37.6116143881", + "stop_no": "08966", + "xcode": "127.043044981", + "stop_type": "마을버스", + "node_id": "107900166", + "nxtStn": "하트마트편의점" + }, + { + "stop_nm": "고려대역.숭례초교", + "ycode": "37.5948925645", + "stop_no": "08967", + "xcode": "127.036034544", + "stop_type": "일반차로", + "node_id": "107000507", + "nxtStn": "종암사거리입구" + }, + { + "stop_nm": "극동아파트정문", + "ycode": "37.5954193263", + "stop_no": "08969", + "xcode": "127.0342670319", + "stop_type": "마을버스", + "node_id": "107900164", + "nxtStn": "선경아파트" + }, + { + "stop_nm": "고려대아이스링크", + "ycode": "37.5929132964", + "stop_no": "08970", + "xcode": "127.0278065619", + "stop_type": "마을버스", + "node_id": "107900163", + "nxtStn": "고려대안암학사" + }, + { + "stop_nm": "하트마트편의점", + "ycode": "37.6120303721", + "stop_no": "08971", + "xcode": "127.0414141194", + "stop_type": "마을버스", + "node_id": "107900161", + "nxtStn": "종점" + }, + { + "stop_nm": "선경아파트", + "ycode": "37.5943641285", + "stop_no": "08972", + "xcode": "127.0343480838", + "stop_type": "마을버스", + "node_id": "107900126", + "nxtStn": "종암중학교" + }, + { + "stop_nm": "고려대안암학사", + "ycode": "37.591162", + "stop_no": "08973", + "xcode": "127.030334", + "stop_type": "마을버스", + "node_id": "107900124", + "nxtStn": "고려대법과대학.한국어교육관입구" + }, + { + "stop_nm": "종암중학교", + "ycode": "37.5932304366", + "stop_no": "08975", + "xcode": "127.0347676921", + "stop_type": "마을버스", + "node_id": "107900123", + "nxtStn": "종점" + }, + { + "stop_nm": "고려대법과대학.한국어교육관입구", + "ycode": "37.5912827419", + "stop_no": "08976", + "xcode": "127.0331735065", + "stop_type": "마을버스", + "node_id": "107900122", + "nxtStn": "종암로한진택배" + }, + { + "stop_nm": "종암로한진택배", + "ycode": "37.5924290939", + "stop_no": "08977", + "xcode": "127.0356891028", + "stop_type": "마을버스", + "node_id": "107900121", + "nxtStn": "종점" + }, + { + "stop_nm": "성북세무서앞", + "ycode": "37.588102", + "stop_no": "08979", + "xcode": "127.010533", + "stop_type": "마을버스", + "node_id": "107900119", + "nxtStn": "삼선시장" + }, + { + "stop_nm": "꿈의숲대명루첸아파트", + "ycode": "37.6208195823", + "stop_no": "08980", + "xcode": "127.0456216446", + "stop_type": "마을버스", + "node_id": "107900117", + "nxtStn": "참누리아파트" + }, + { + "stop_nm": "래미안세레니티", + "ycode": "37.5990565246", + "stop_no": "08981", + "xcode": "127.0294147509", + "stop_type": "마을버스", + "node_id": "107900116", + "nxtStn": "양광교회.죽림정사앞" + }, + { + "stop_nm": "양광교회.죽림정사앞", + "ycode": "37.5995701571", + "stop_no": "08982", + "xcode": "127.0293639897", + "stop_type": "마을버스", + "node_id": "107900114", + "nxtStn": "고려슈퍼" + }, + { + "stop_nm": "석관동주민센터", + "ycode": "37.6129858688", + "stop_no": "08983", + "xcode": "127.0613211365", + "stop_type": "마을버스", + "node_id": "107900112", + "nxtStn": "석계역5번출구" + }, + { + "stop_nm": "한신105동앞", + "ycode": "37.5925539857", + "stop_no": "08984", + "xcode": "127.0090683722", + "stop_type": "마을버스", + "node_id": "107900111", + "nxtStn": "한신108동앞" + }, + { + "stop_nm": "한신108동앞", + "ycode": "37.5935334384", + "stop_no": "08985", + "xcode": "127.0094569142", + "stop_type": "마을버스", + "node_id": "107900250", + "nxtStn": "스카이프라자앞.111동앞" + }, + { + "stop_nm": "스카이프라자앞.111동앞", + "ycode": "37.5945110389", + "stop_no": "08986", + "xcode": "127.010411688", + "stop_type": "마을버스", + "node_id": "107900251", + "nxtStn": "한진206동앞" + }, + { + "stop_nm": "한진207동앞", + "ycode": "37.5963140934", + "stop_no": "08987", + "xcode": "127.0106667452", + "stop_type": "마을버스", + "node_id": "107900105", + "nxtStn": "한진202동앞" + }, + { + "stop_nm": "한진202동앞", + "ycode": "37.596549", + "stop_no": "08988", + "xcode": "127.009801", + "stop_type": "마을버스", + "node_id": "107900106", + "nxtStn": "한신301동앞" + }, + { + "stop_nm": "한진204동앞", + "ycode": "37.596461", + "stop_no": "08989", + "xcode": "127.009958", + "stop_type": "마을버스", + "node_id": "107900109", + "nxtStn": "한진207동앞" + }, + { + "stop_nm": "한진207동앞", + "ycode": "37.596345", + "stop_no": "08990", + "xcode": "127.010583", + "stop_type": "마을버스", + "node_id": "107900264", + "nxtStn": "스카이프라자앞.111동" + }, + { + "stop_nm": "스카이프라자앞.111동", + "ycode": "37.594611", + "stop_no": "08991", + "xcode": "127.010379", + "stop_type": "마을버스", + "node_id": "107900252", + "nxtStn": "한신108동앞" + }, + { + "stop_nm": "한신108동앞", + "ycode": "37.593948", + "stop_no": "08992", + "xcode": "127.009698", + "stop_type": "마을버스", + "node_id": "107900253", + "nxtStn": "한신105동앞" + }, + { + "stop_nm": "삼선동주민센터", + "ycode": "37.5910090068", + "stop_no": "08997", + "xcode": "127.0142590636", + "stop_type": "마을버스", + "node_id": "107900095", + "nxtStn": "돈암초등학교" + }, + { + "stop_nm": "수유3동우체국", + "ycode": "37.641345", + "stop_no": "09001", + "xcode": "127.029165", + "stop_type": "중앙차로", + "node_id": "108000001", + "nxtStn": "수유(강북구청)역" + }, + { + "stop_nm": "수유3동우체국", + "ycode": "37.640892", + "stop_no": "09002", + "xcode": "127.02883", + "stop_type": "중앙차로", + "node_id": "108000002", + "nxtStn": "우이1교앞" + }, + { + "stop_nm": "수유역", + "ycode": "37.6365324921", + "stop_no": "09003", + "xcode": "127.0239950106", + "stop_type": "중앙차로", + "node_id": "108000003", + "nxtStn": "수유시장.성신여대미아캠퍼스앞" + }, + { + "stop_nm": "수유역.강북구청", + "ycode": "37.637582", + "stop_no": "09004", + "xcode": "127.025327", + "stop_type": "중앙차로", + "node_id": "108000004", + "nxtStn": "쌍문역" + }, + { + "stop_nm": "수유시장.성신여대미아캠퍼스앞", + "ycode": "37.6312262117", + "stop_no": "09005", + "xcode": "127.0241719892", + "stop_type": "중앙차로", + "node_id": "108000005", + "nxtStn": "미아역.신일중고" + }, + { + "stop_nm": "수유시장.성신여대미아캠퍼스앞", + "ycode": "37.6303451749", + "stop_no": "09006", + "xcode": "127.0246442208", + "stop_type": "중앙차로", + "node_id": "108000006", + "nxtStn": "수유역.강북구청" + }, + { + "stop_nm": "미아역.신일중고", + "ycode": "37.6248696784", + "stop_no": "09007", + "xcode": "127.0266493048", + "stop_type": "중앙차로", + "node_id": "108000007", + "nxtStn": "미아사거리역" + }, + { + "stop_nm": "미아역.신일중고", + "ycode": "37.6243092426", + "stop_no": "09008", + "xcode": "127.0270667409", + "stop_type": "중앙차로", + "node_id": "108000008", + "nxtStn": "수유역.강북구청" + }, + { + "stop_nm": "도봉세무서.성북시장", + "ycode": "37.6197140913", + "stop_no": "09009", + "xcode": "127.028719403", + "stop_type": "중앙차로", + "node_id": "108000009", + "nxtStn": "미아사거리역" + }, + { + "stop_nm": "도봉세무서.성북시장", + "ycode": "37.6188372063", + "stop_no": "09010", + "xcode": "127.0292480892", + "stop_type": "중앙차로", + "node_id": "108000010", + "nxtStn": "미아역.신일중고" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6137621245", + "stop_no": "09011", + "xcode": "127.0299325391", + "stop_type": "중앙차로", + "node_id": "108000011", + "nxtStn": "고려대역.숭례초교" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6128943078", + "stop_no": "09012", + "xcode": "127.0302131064", + "stop_type": "중앙차로", + "node_id": "108000012", + "nxtStn": "미아역.신일중고" + }, + { + "stop_nm": "수유(강북구청)역", + "ycode": "37.63829", + "stop_no": "09013", + "xcode": "127.025873", + "stop_type": "중앙차로", + "node_id": "108000378", + "nxtStn": "미아역.신일중고" + }, + { + "stop_nm": "우이동도선사입구.북한산우이역", + "ycode": "37.662647", + "stop_no": "09102", + "xcode": "127.012719", + "stop_type": "일반차로", + "node_id": "108000014", + "nxtStn": "우이동성원아파트" + }, + { + "stop_nm": "우이동성원아파트", + "ycode": "37.660809", + "stop_no": "09103", + "xcode": "127.013424", + "stop_type": "일반차로", + "node_id": "108000015", + "nxtStn": "진성빌라사거리" + }, + { + "stop_nm": "우이동성원아파트", + "ycode": "37.662045", + "stop_no": "09104", + "xcode": "127.013357", + "stop_type": "일반차로", + "node_id": "108000016", + "nxtStn": "우이동도선사입구" + }, + { + "stop_nm": "진성빌라사거리", + "ycode": "37.659077", + "stop_no": "09105", + "xcode": "127.013785", + "stop_type": "일반차로", + "node_id": "108000017", + "nxtStn": "서라벌중학교.우이동대우아파트" + }, + { + "stop_nm": "서라벌중학교.우이동대우아파트", + "ycode": "37.6551", + "stop_no": "09106", + "xcode": "127.012933", + "stop_type": "일반차로", + "node_id": "108000018", + "nxtStn": "덕성여대솔밭근린공원" + }, + { + "stop_nm": "덕성여대솔밭근린공원", + "ycode": "37.6513809333", + "stop_no": "09107", + "xcode": "127.0126091716", + "stop_type": "일반차로", + "node_id": "108000019", + "nxtStn": "덕성여대입구" + }, + { + "stop_nm": "4.19민주묘지역", + "ycode": "37.6491109904", + "stop_no": "09108", + "xcode": "127.0137114618", + "stop_type": "일반차로", + "node_id": "108000020", + "nxtStn": "인수동장미원" + }, + { + "stop_nm": "4.19민주묘지역", + "ycode": "37.649113", + "stop_no": "09109", + "xcode": "127.014019", + "stop_type": "일반차로", + "node_id": "108000021", + "nxtStn": "덕성여대입구" + }, + { + "stop_nm": "국립4.19민주묘지입구사거리", + "ycode": "37.648147", + "stop_no": "09110", + "xcode": "127.013448", + "stop_type": "일반차로", + "node_id": "108000022", + "nxtStn": "국립4.19민주묘지" + }, + { + "stop_nm": "국립4.19민주묘지입구사거리", + "ycode": "37.647984", + "stop_no": "09111", + "xcode": "127.013467", + "stop_type": "일반차로", + "node_id": "108000023", + "nxtStn": "인수동장미원" + }, + { + "stop_nm": "국립419묘지삼거리.윤극영가옥", + "ycode": "37.64653", + "stop_no": "09112", + "xcode": "127.010438", + "stop_type": "일반차로", + "node_id": "108000024", + "nxtStn": "인수동백운교회입구" + }, + { + "stop_nm": "국립419묘지삼거리.윤극영가옥", + "ycode": "37.6463224596", + "stop_no": "09113", + "xcode": "127.0106931578", + "stop_type": "일반차로", + "node_id": "108000025", + "nxtStn": "우이동주민센터입구" + }, + { + "stop_nm": "인수동백운교회입구", + "ycode": "37.644587883", + "stop_no": "09114", + "xcode": "127.0106566466", + "stop_type": "일반차로", + "node_id": "108000026", + "nxtStn": "인수초중학교" + }, + { + "stop_nm": "인수동백운교회입구", + "ycode": "37.644309423", + "stop_no": "09115", + "xcode": "127.0109421731", + "stop_type": "일반차로", + "node_id": "108000027", + "nxtStn": "국립419민주묘지삼거리.윤극영가옥" + }, + { + "stop_nm": "인수중학교.극동아파트", + "ycode": "37.6425036675", + "stop_no": "09116", + "xcode": "127.010828591", + "stop_type": "일반차로", + "node_id": "108000028", + "nxtStn": "국립재활원" + }, + { + "stop_nm": "인수중학교.극동아파트", + "ycode": "37.6423108154", + "stop_no": "09117", + "xcode": "127.0110529305", + "stop_type": "일반차로", + "node_id": "108000029", + "nxtStn": "인수초중학교" + }, + { + "stop_nm": "서울영어마을수유캠프국립재활원입구", + "ycode": "37.640048", + "stop_no": "09118", + "xcode": "127.011902", + "stop_type": "일반차로", + "node_id": "108000030", + "nxtStn": "우이초등학교후문" + }, + { + "stop_nm": "서울영어마을수유캠프국립재활원입구", + "ycode": "37.64031", + "stop_no": "09119", + "xcode": "127.01185", + "stop_type": "일반차로", + "node_id": "108000031", + "nxtStn": "인수중학교.극동아파트" + }, + { + "stop_nm": "인수동장미원", + "ycode": "37.6450333774", + "stop_no": "09120", + "xcode": "127.0155272484", + "stop_type": "일반차로", + "node_id": "108000032", + "nxtStn": "가오리역" + }, + { + "stop_nm": "인수동장미원", + "ycode": "37.6445998945", + "stop_no": "09121", + "xcode": "127.0159997041", + "stop_type": "일반차로", + "node_id": "108000033", + "nxtStn": "국립4.19민주묘지입구사거리" + }, + { + "stop_nm": "가오리역", + "ycode": "37.6418977929", + "stop_no": "09122", + "xcode": "127.0165777635", + "stop_type": "일반차로", + "node_id": "108000034", + "nxtStn": "우이초등학교" + }, + { + "stop_nm": "가오리역", + "ycode": "37.6416805827", + "stop_no": "09123", + "xcode": "127.0168113608", + "stop_type": "일반차로", + "node_id": "108000035", + "nxtStn": "인수동장미원" + }, + { + "stop_nm": "북부성모의원", + "ycode": "37.646853", + "stop_no": "09124", + "xcode": "127.01746", + "stop_type": "일반차로", + "node_id": "108000036", + "nxtStn": "4.19민주묘지역" + }, + { + "stop_nm": "북부성모병원", + "ycode": "37.6467578286", + "stop_no": "09125", + "xcode": "127.0170948735", + "stop_type": "일반차로", + "node_id": "108000037", + "nxtStn": "수유2동주민센터우이시장" + }, + { + "stop_nm": "수유2동주민센터우이시장", + "ycode": "37.6450886664", + "stop_no": "09126", + "xcode": "127.019428906", + "stop_type": "일반차로", + "node_id": "108000038", + "nxtStn": "광산사거리" + }, + { + "stop_nm": "수유2동주민센터우이시장", + "ycode": "37.644893", + "stop_no": "09127", + "xcode": "127.020202", + "stop_type": "일반차로", + "node_id": "108000039", + "nxtStn": "북부성모의원" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.643365", + "stop_no": "09128", + "xcode": "127.021765", + "stop_type": "일반차로", + "node_id": "108000040", + "nxtStn": "강북구청" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.643647", + "stop_no": "09129", + "xcode": "127.021913", + "stop_type": "일반차로", + "node_id": "108000041", + "nxtStn": "수유2동주민센터우이시장" + }, + { + "stop_nm": "우이초등학교후문", + "ycode": "37.6383971504", + "stop_no": "09130", + "xcode": "127.0136267756", + "stop_type": "일반차로", + "node_id": "108000042", + "nxtStn": "인수동청수탕입구" + }, + { + "stop_nm": "우이초등학교후문", + "ycode": "37.6384286647", + "stop_no": "09131", + "xcode": "127.0138284749", + "stop_type": "일반차로", + "node_id": "108000043", + "nxtStn": "서울영어마을수유캠프국립재활원입구" + }, + { + "stop_nm": "인수동청수탕입구", + "ycode": "37.637168", + "stop_no": "09132", + "xcode": "127.012868", + "stop_type": "일반차로", + "node_id": "108000044", + "nxtStn": "한신대학교" + }, + { + "stop_nm": "인수동청수탕입구", + "ycode": "37.6365184578", + "stop_no": "09133", + "xcode": "127.0130723558", + "stop_type": "일반차로", + "node_id": "108000045", + "nxtStn": "우이초등학교후문" + }, + { + "stop_nm": "우이초등학교", + "ycode": "37.6365089299", + "stop_no": "09134", + "xcode": "127.0171140536", + "stop_type": "일반차로", + "node_id": "108000046", + "nxtStn": "수유보건지소" + }, + { + "stop_nm": "우이초등학교", + "ycode": "37.63681", + "stop_no": "09135", + "xcode": "127.017357", + "stop_type": "일반차로", + "node_id": "108000047", + "nxtStn": "가오리역" + }, + { + "stop_nm": "화계사입구.한신대학교대학원", + "ycode": "37.633975", + "stop_no": "09136", + "xcode": "127.013957", + "stop_type": "일반차로", + "node_id": "108000048", + "nxtStn": "인수동청수탕입구" + }, + { + "stop_nm": "화계사입구.한신대학교대학원", + "ycode": "37.6337259037", + "stop_no": "09137", + "xcode": "127.0139522376", + "stop_type": "일반차로", + "node_id": "108000049", + "nxtStn": "수유동삼양탕앞" + }, + { + "stop_nm": "수유동삼양탕앞", + "ycode": "37.63408", + "stop_no": "09138", + "xcode": "127.015551", + "stop_type": "일반차로", + "node_id": "108000050", + "nxtStn": "한신대신학대학원.화계사" + }, + { + "stop_nm": "수유동삼양탕앞", + "ycode": "37.6338204001", + "stop_no": "09139", + "xcode": "127.0149108072", + "stop_type": "일반차로", + "node_id": "108000051", + "nxtStn": "화계사입구사거리" + }, + { + "stop_nm": "화계사입구사거리", + "ycode": "37.6342866157", + "stop_no": "09140", + "xcode": "127.016899104", + "stop_type": "일반차로", + "node_id": "108000052", + "nxtStn": "수유동삼양탕앞" + }, + { + "stop_nm": "화계사입구사거리", + "ycode": "37.6339931438", + "stop_no": "09141", + "xcode": "127.0168721385", + "stop_type": "일반차로", + "node_id": "108000053", + "nxtStn": "수유보건지소" + }, + { + "stop_nm": "강북노인종합복지관", + "ycode": "37.6344334502", + "stop_no": "09142", + "xcode": "127.0189955726", + "stop_type": "일반차로", + "node_id": "108000054", + "nxtStn": "송암교회.화계사거리.수유보건지소" + }, + { + "stop_nm": "강북노인종합복지관", + "ycode": "37.634218", + "stop_no": "09143", + "xcode": "127.01914", + "stop_type": "일반차로", + "node_id": "108000055", + "nxtStn": "신일병원" + }, + { + "stop_nm": "신일병원", + "ycode": "37.634723", + "stop_no": "09144", + "xcode": "127.022267", + "stop_type": "일반차로", + "node_id": "108000056", + "nxtStn": "강북노인종합복지관" + }, + { + "stop_nm": "신일병원", + "ycode": "37.6343871166", + "stop_no": "09145", + "xcode": "127.0212163361", + "stop_type": "일반차로", + "node_id": "108000057", + "nxtStn": "북한산스카이빌딩" + }, + { + "stop_nm": "강북구청", + "ycode": "37.640412", + "stop_no": "09146", + "xcode": "127.02602", + "stop_type": "일반차로", + "node_id": "108000058", + "nxtStn": "수유(강북구청)역" + }, + { + "stop_nm": "강북구청", + "ycode": "37.640615", + "stop_no": "09147", + "xcode": "127.026213", + "stop_type": "일반차로", + "node_id": "108000059", + "nxtStn": "강북종합시장" + }, + { + "stop_nm": "강북경찰서입구", + "ycode": "37.6351433469", + "stop_no": "09148", + "xcode": "127.0286868166", + "stop_type": "일반차로", + "node_id": "108000060", + "nxtStn": "삼성화재강북지점" + }, + { + "stop_nm": "강북경찰서입구", + "ycode": "37.634985", + "stop_no": "09149", + "xcode": "127.029118", + "stop_type": "일반차로", + "node_id": "108000061", + "nxtStn": "북부시장입구" + }, + { + "stop_nm": "북부시장입구", + "ycode": "37.635428", + "stop_no": "09150", + "xcode": "127.031872", + "stop_type": "일반차로", + "node_id": "108000062", + "nxtStn": "강북경찰서입구" + }, + { + "stop_nm": "북부시장입구", + "ycode": "37.6351685497", + "stop_no": "09151", + "xcode": "127.0322808941", + "stop_type": "일반차로", + "node_id": "108000063", + "nxtStn": "번동5거리.북부노동지청" + }, + { + "stop_nm": "번동사거리", + "ycode": "37.636125", + "stop_no": "09152", + "xcode": "127.03503", + "stop_type": "일반차로", + "node_id": "108000064", + "nxtStn": "북부시장입구" + }, + { + "stop_nm": "번동사거리", + "ycode": "37.635633", + "stop_no": "09153", + "xcode": "127.03451", + "stop_type": "일반차로", + "node_id": "108000065", + "nxtStn": "창동서울탁주앞" + }, + { + "stop_nm": "북부수도사업소", + "ycode": "37.6342350364", + "stop_no": "09154", + "xcode": "127.0361604414", + "stop_type": "일반차로", + "node_id": "108000066", + "nxtStn": "신화초교입구" + }, + { + "stop_nm": "북부수도사업소", + "ycode": "37.6349568396", + "stop_no": "09155", + "xcode": "127.0352743398", + "stop_type": "일반차로", + "node_id": "108000067", + "nxtStn": "번동사거리" + }, + { + "stop_nm": "수유보건지소", + "ycode": "37.6333403549", + "stop_no": "09156", + "xcode": "127.0174696835", + "stop_type": "일반차로", + "node_id": "108000068", + "nxtStn": "빨래골입구.수유1동주민센터" + }, + { + "stop_nm": "수유보건지소", + "ycode": "37.6332538827", + "stop_no": "09157", + "xcode": "127.0177047638", + "stop_type": "일반차로", + "node_id": "108000069", + "nxtStn": "우이초등학교" + }, + { + "stop_nm": "빨래골입구.수유1동주민센터", + "ycode": "37.629858846", + "stop_no": "09158", + "xcode": "127.017765125", + "stop_type": "일반차로", + "node_id": "108000070", + "nxtStn": "롯데마트삼양점.래미안1차아파트" + }, + { + "stop_nm": "빨래골입구.서울수유초등학교", + "ycode": "37.630007", + "stop_no": "09159", + "xcode": "127.017982", + "stop_type": "일반차로", + "node_id": "108000071", + "nxtStn": "수유보건지소" + }, + { + "stop_nm": "롯데마트삼양점.래미안1차아파트", + "ycode": "37.6252947897", + "stop_no": "09160", + "xcode": "127.0182240004", + "stop_type": "일반차로", + "node_id": "108000072", + "nxtStn": "삼양초등학교" + }, + { + "stop_nm": "롯데마트삼양점.래미안1차아파트", + "ycode": "37.62547", + "stop_no": "09161", + "xcode": "127.01844", + "stop_type": "일반차로", + "node_id": "108000073", + "nxtStn": "빨래골입구.서울수유초등학교" + }, + { + "stop_nm": "삼양초등학교", + "ycode": "37.623249", + "stop_no": "09162", + "xcode": "127.018997", + "stop_type": "일반차로", + "node_id": "108000074", + "nxtStn": "강북청소년문화정보도서관입구" + }, + { + "stop_nm": "삼양초등학교", + "ycode": "37.623407", + "stop_no": "09163", + "xcode": "127.019088", + "stop_type": "일반차로", + "node_id": "108000075", + "nxtStn": "롯데마트삼양점.래미안1차아파트" + }, + { + "stop_nm": "강북청소년문화정보도서관입구", + "ycode": "37.621833", + "stop_no": "09164", + "xcode": "127.020175", + "stop_type": "일반차로", + "node_id": "108000076", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "강북청소년문화정보도서관입구", + "ycode": "37.62151722", + "stop_no": "09165", + "xcode": "127.0205867332", + "stop_type": "일반차로", + "node_id": "108000077", + "nxtStn": "삼양초등학교" + }, + { + "stop_nm": "삼양동사거리", + "ycode": "37.6180883036", + "stop_no": "09166", + "xcode": "127.0213079919", + "stop_type": "일반차로", + "node_id": "108000078", + "nxtStn": "미아초교" + }, + { + "stop_nm": "삼양동사거리", + "ycode": "37.6185334123", + "stop_no": "09167", + "xcode": "127.0214576496", + "stop_type": "일반차로", + "node_id": "108000079", + "nxtStn": "SK아파트.벽산아파트상가" + }, + { + "stop_nm": "송천초등학교.미아뉴타운입구", + "ycode": "37.6154596915", + "stop_no": "09168", + "xcode": "127.0221103696", + "stop_type": "일반차로", + "node_id": "108000080", + "nxtStn": "미아초교" + }, + { + "stop_nm": "송천초등학교.미아뉴타운입구", + "ycode": "37.6140963114", + "stop_no": "09169", + "xcode": "127.0223138592", + "stop_type": "일반차로", + "node_id": "108000081", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "삼양동사거리", + "ycode": "37.619154", + "stop_no": "09170", + "xcode": "127.022342", + "stop_type": "일반차로", + "node_id": "108000082", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "삼양동사거리", + "ycode": "37.619143", + "stop_no": "09171", + "xcode": "127.021773", + "stop_type": "일반차로", + "node_id": "108000083", + "nxtStn": "성암국제무역고등학교" + }, + { + "stop_nm": "성암국제무역고등학교", + "ycode": "37.618327", + "stop_no": "09172", + "xcode": "127.024985", + "stop_type": "일반차로", + "node_id": "108000084", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "성암국제무역고등학교", + "ycode": "37.6179423926", + "stop_no": "09173", + "xcode": "127.0255230955", + "stop_type": "일반차로", + "node_id": "108000085", + "nxtStn": "삼양동사거리입구" + }, + { + "stop_nm": "삼양동사거리입구", + "ycode": "37.61729", + "stop_no": "09174", + "xcode": "127.02838", + "stop_type": "일반차로", + "node_id": "108000086", + "nxtStn": "성암국제무역고등학교" + }, + { + "stop_nm": "삼양동사거리입구", + "ycode": "37.61706", + "stop_no": "09175", + "xcode": "127.028487", + "stop_type": "일반차로", + "node_id": "108000087", + "nxtStn": "미아사거리역" + }, + { + "stop_nm": "강북보건소", + "ycode": "37.632253", + "stop_no": "09176", + "xcode": "127.039033", + "stop_type": "일반차로", + "node_id": "108000088", + "nxtStn": "번동초교.솔그린APT.하나은행" + }, + { + "stop_nm": "신창교", + "ycode": "37.633285201", + "stop_no": "09177", + "xcode": "127.0385729384", + "stop_type": "일반차로", + "node_id": "108000089", + "nxtStn": "북부수도사업소" + }, + { + "stop_nm": "강북보건소", + "ycode": "37.632478", + "stop_no": "09179", + "xcode": "127.039233", + "stop_type": "일반차로", + "node_id": "108000091", + "nxtStn": "신창교" + }, + { + "stop_nm": "번동주공4단지", + "ycode": "37.6313780406", + "stop_no": "09180", + "xcode": "127.0399848073", + "stop_type": "일반차로", + "node_id": "108000092", + "nxtStn": "번동주공3단지" + }, + { + "stop_nm": "초안교", + "ycode": "37.63111", + "stop_no": "09181", + "xcode": "127.04109", + "stop_type": "일반차로", + "node_id": "108000093", + "nxtStn": "강북보건소" + }, + { + "stop_nm": "번동주공3단지", + "ycode": "37.6290195783", + "stop_no": "09182", + "xcode": "127.0434628856", + "stop_type": "일반차로", + "node_id": "108000094", + "nxtStn": "번동주공1단지" + }, + { + "stop_nm": "번동주공3단지", + "ycode": "37.628652", + "stop_no": "09183", + "xcode": "127.044375", + "stop_type": "일반차로", + "node_id": "108000095", + "nxtStn": "초안교" + }, + { + "stop_nm": "번동주공1단지", + "ycode": "37.6255071471", + "stop_no": "09184", + "xcode": "127.048129578", + "stop_type": "일반차로", + "node_id": "108000096", + "nxtStn": "월계2교.참누리아파트" + }, + { + "stop_nm": "번동주공1단지", + "ycode": "37.627015", + "stop_no": "09185", + "xcode": "127.047227", + "stop_type": "일반차로", + "node_id": "108000097", + "nxtStn": "번동주공3단지" + }, + { + "stop_nm": "오현초등학교", + "ycode": "37.6234130879", + "stop_no": "09186", + "xcode": "127.0479843518", + "stop_type": "일반차로", + "node_id": "108000098", + "nxtStn": "꿈의숲주차장입구" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.6191713406", + "stop_no": "09187", + "xcode": "127.0442546555", + "stop_type": "일반차로", + "node_id": "108000099", + "nxtStn": "송중동한일유엔아이" + }, + { + "stop_nm": "송중동한일유엔아이", + "ycode": "37.6137499056", + "stop_no": "09188", + "xcode": "127.0379534336", + "stop_type": "일반차로", + "node_id": "108000100", + "nxtStn": "창문여고앞" + }, + { + "stop_nm": "창문여고앞", + "ycode": "37.611997767", + "stop_no": "09189", + "xcode": "127.0354111524", + "stop_type": "일반차로", + "node_id": "108000101", + "nxtStn": "숭곡초등학교입구" + }, + { + "stop_nm": "숭곡초등학교입구", + "ycode": "37.610022", + "stop_no": "09190", + "xcode": "127.031828", + "stop_type": "일반차로", + "node_id": "108000102", + "nxtStn": "길음2동주민센터" + }, + { + "stop_nm": "강북청소년수련관", + "ycode": "37.645667", + "stop_no": "09194", + "xcode": "127.006839", + "stop_type": "일반차로", + "node_id": "108000106", + "nxtStn": "무량사입구" + }, + { + "stop_nm": "강북청소년수련관", + "ycode": "37.645786", + "stop_no": "09195", + "xcode": "127.006806", + "stop_type": "일반차로", + "node_id": "108000107", + "nxtStn": "백련사" + }, + { + "stop_nm": "국립4.19민주묘지", + "ycode": "37.646899", + "stop_no": "09196", + "xcode": "127.009145", + "stop_type": "일반차로", + "node_id": "108000108", + "nxtStn": "국립419묘지삼거리.윤극영가옥" + }, + { + "stop_nm": "국립4.19민주묘지", + "ycode": "37.64695", + "stop_no": "09197", + "xcode": "127.008957", + "stop_type": "일반차로", + "node_id": "108000109", + "nxtStn": "무량사입구" + }, + { + "stop_nm": "강북중학교", + "ycode": "37.6448419212", + "stop_no": "09198", + "xcode": "127.0235480508", + "stop_type": "일반차로", + "node_id": "108000110", + "nxtStn": "강북구청" + }, + { + "stop_nm": "한성운수차고지", + "ycode": "37.634382", + "stop_no": "09199", + "xcode": "127.036702", + "stop_type": "일반차로", + "node_id": "108000111", + "nxtStn": "한성운수종점" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.6425235501", + "stop_no": "09200", + "xcode": "127.0229920646", + "stop_type": "일반차로", + "node_id": "108000112", + "nxtStn": "강북구청" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.643844513", + "stop_no": "09201", + "xcode": "127.0231023914", + "stop_type": "일반차로", + "node_id": "108000113", + "nxtStn": "쌍문초등학교" + }, + { + "stop_nm": "수유중앙시장", + "ycode": "37.6403601066", + "stop_no": "09203", + "xcode": "127.0227228438", + "stop_type": "일반차로", + "node_id": "108000115", + "nxtStn": "광산사거리" + }, + { + "stop_nm": "대한병원", + "ycode": "37.6367337539", + "stop_no": "09205", + "xcode": "127.0231692841", + "stop_type": "일반차로", + "node_id": "108000117", + "nxtStn": "수유중앙시장" + }, + { + "stop_nm": "삼성화재강북지점", + "ycode": "37.6355100656", + "stop_no": "09206", + "xcode": "127.0248073406", + "stop_type": "일반차로", + "node_id": "108000118", + "nxtStn": "수유역" + }, + { + "stop_nm": "강북구청사거리", + "ycode": "37.6388225533", + "stop_no": "09207", + "xcode": "127.028315436", + "stop_type": "일반차로", + "node_id": "108000119", + "nxtStn": "수송초등학교" + }, + { + "stop_nm": "강북구청사거리", + "ycode": "37.6389603513", + "stop_no": "09208", + "xcode": "127.0285953685", + "stop_type": "일반차로", + "node_id": "108000120", + "nxtStn": "수유(강북구청)역" + }, + { + "stop_nm": "수송초등학교", + "ycode": "37.6367835337", + "stop_no": "09209", + "xcode": "127.0313717256", + "stop_type": "일반차로", + "node_id": "108000121", + "nxtStn": "한성운수종점" + }, + { + "stop_nm": "수송초등학교", + "ycode": "37.6369600703", + "stop_no": "09210", + "xcode": "127.0316539386", + "stop_type": "일반차로", + "node_id": "108000122", + "nxtStn": "강북구청사거리" + }, + { + "stop_nm": "수유중학교혜화여고", + "ycode": "37.63211", + "stop_no": "09211", + "xcode": "127.013588", + "stop_type": "일반차로", + "node_id": "108000123", + "nxtStn": "서울정인학교" + }, + { + "stop_nm": "혜화여고", + "ycode": "37.631977", + "stop_no": "09212", + "xcode": "127.013792", + "stop_type": "일반차로", + "node_id": "108000124", + "nxtStn": "화계사입구.한신대학교대학원" + }, + { + "stop_nm": "서울정인학교", + "ycode": "37.6292133906", + "stop_no": "09213", + "xcode": "127.013001965", + "stop_type": "일반차로", + "node_id": "108000125", + "nxtStn": "구세군강북종합사회복지관입구" + }, + { + "stop_nm": "우광타운", + "ycode": "37.629297", + "stop_no": "09214", + "xcode": "127.013128", + "stop_type": "일반차로", + "node_id": "108000126", + "nxtStn": "혜화여고" + }, + { + "stop_nm": "구세군강북종합사회복지관입구", + "ycode": "37.6247738195", + "stop_no": "09215", + "xcode": "127.0123860255", + "stop_type": "일반차로", + "node_id": "108000127", + "nxtStn": "솔샘중고등학교" + }, + { + "stop_nm": "구세군강북종합사회복지관입구", + "ycode": "37.62492", + "stop_no": "09216", + "xcode": "127.012504", + "stop_type": "일반차로", + "node_id": "108000128", + "nxtStn": "마을버스사무실" + }, + { + "stop_nm": "솔샘중고등학교.팔팔·미송경로당", + "ycode": "37.623368", + "stop_no": "09217", + "xcode": "127.013138", + "stop_type": "일반차로", + "node_id": "108000129", + "nxtStn": "구세군강북종합사회복지관입구" + }, + { + "stop_nm": "솔샘중고등학교.팔팔·미송경로당", + "ycode": "37.6232608308", + "stop_no": "09218", + "xcode": "127.0130269844", + "stop_type": "일반차로", + "node_id": "108000130", + "nxtStn": "삼각산동SK아파트북한산시티미양초등학교" + }, + { + "stop_nm": "동북프라자", + "ycode": "37.619885", + "stop_no": "09219", + "xcode": "127.018418", + "stop_type": "일반차로", + "node_id": "108000131", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "동북시장", + "ycode": "37.619995", + "stop_no": "09220", + "xcode": "127.018796", + "stop_type": "일반차로", + "node_id": "108000132", + "nxtStn": "삼각산119안전센터" + }, + { + "stop_nm": "두산위브아파트입구", + "ycode": "37.620027", + "stop_no": "09221", + "xcode": "127.016258", + "stop_type": "일반차로", + "node_id": "108000133", + "nxtStn": "동북프라자" + }, + { + "stop_nm": "두산위브아파트입구", + "ycode": "37.6201498963", + "stop_no": "09222", + "xcode": "127.0161949742", + "stop_type": "일반차로", + "node_id": "108000134", + "nxtStn": "삼양동벽산라이브파크미양초등학교" + }, + { + "stop_nm": "삼각산동SK아파트북한산시티미양초등학교", + "ycode": "37.620197", + "stop_no": "09223", + "xcode": "127.013398", + "stop_type": "일반차로", + "node_id": "108000135", + "nxtStn": "두산위브아파트입구" + }, + { + "stop_nm": "삼양동벽산라이브파크미양초등학교", + "ycode": "37.620308", + "stop_no": "09224", + "xcode": "127.012611", + "stop_type": "일반차로", + "node_id": "108000136", + "nxtStn": "솔샘중고등학교.팔팔·미송경로당" + }, + { + "stop_nm": "SK아파트.벽산아파트상가", + "ycode": "37.6197323732", + "stop_no": "09225", + "xcode": "127.0111968544", + "stop_type": "일반차로", + "node_id": "108000137", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "SK아파트.벽산아파트상가", + "ycode": "37.6199369055", + "stop_no": "09226", + "xcode": "127.0113418872", + "stop_type": "일반차로", + "node_id": "108000138", + "nxtStn": "정릉동풍림아파트.청소년문화의집" + }, + { + "stop_nm": "솔샘터널", + "ycode": "37.618778", + "stop_no": "09227", + "xcode": "127.009232", + "stop_type": "일반차로", + "node_id": "108000139", + "nxtStn": "SK아파트벽산아파트상가" + }, + { + "stop_nm": "번동주공아파트3단지4단지", + "ycode": "37.629378", + "stop_no": "09228", + "xcode": "127.039935", + "stop_type": "일반차로", + "node_id": "108000140", + "nxtStn": "번동한솔솔파크" + }, + { + "stop_nm": "번동주공아파트3단지4단지", + "ycode": "37.63011", + "stop_no": "09229", + "xcode": "127.041138", + "stop_type": "일반차로", + "node_id": "108000141", + "nxtStn": "초안교" + }, + { + "stop_nm": "번동초등학교", + "ycode": "37.6289388579", + "stop_no": "09230", + "xcode": "127.0398418797", + "stop_type": "일반차로", + "node_id": "108000142", + "nxtStn": "번동주공아파트3단지4단지" + }, + { + "stop_nm": "번동한솔솔파크", + "ycode": "37.627663", + "stop_no": "09231", + "xcode": "127.03828", + "stop_type": "일반차로", + "node_id": "108000143", + "nxtStn": "번동초등학교" + }, + { + "stop_nm": "번동한솔솔파크", + "ycode": "37.6275338363", + "stop_no": "09232", + "xcode": "127.037812026", + "stop_type": "일반차로", + "node_id": "108000144", + "nxtStn": "번동해모로아파트" + }, + { + "stop_nm": "번동해모로아파트", + "ycode": "37.626375", + "stop_no": "09233", + "xcode": "127.036817", + "stop_type": "일반차로", + "node_id": "108000145", + "nxtStn": "번동한솔솔파크" + }, + { + "stop_nm": "번동해모로아파트", + "ycode": "37.626853", + "stop_no": "09234", + "xcode": "127.036975", + "stop_type": "일반차로", + "node_id": "108000146", + "nxtStn": "강북문화정보도서관" + }, + { + "stop_nm": "강북문화정보도서관", + "ycode": "37.625232", + "stop_no": "09235", + "xcode": "127.037288", + "stop_type": "일반차로", + "node_id": "108000147", + "nxtStn": "번동해모로아파트" + }, + { + "stop_nm": "강북문화정보도서관", + "ycode": "37.625388", + "stop_no": "09236", + "xcode": "127.036928", + "stop_type": "일반차로", + "node_id": "108000148", + "nxtStn": "동문굿모닝힐" + }, + { + "stop_nm": "동문굿모닝힐", + "ycode": "37.6235474611", + "stop_no": "09237", + "xcode": "127.0377556282", + "stop_type": "일반차로", + "node_id": "108000149", + "nxtStn": "강북문화정보도서관" + }, + { + "stop_nm": "동문굿모닝힐", + "ycode": "37.623740389", + "stop_no": "09238", + "xcode": "127.0374543779", + "stop_type": "일반차로", + "node_id": "108000150", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.6225842756", + "stop_no": "09239", + "xcode": "127.0375263014", + "stop_type": "일반차로", + "node_id": "108000151", + "nxtStn": "꿈의숲롯데캐슬아파트" + }, + { + "stop_nm": "꿈의숲롯데캐슬아파트", + "ycode": "37.617995", + "stop_no": "09240", + "xcode": "127.035814", + "stop_type": "일반차로", + "node_id": "108000152", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "꿈의숲롯데캐슬아파트", + "ycode": "37.6185988921", + "stop_no": "09241", + "xcode": "127.0359374797", + "stop_type": "일반차로", + "node_id": "108000153", + "nxtStn": "경남아너스빌.꿈의숲해링턴아파트" + }, + { + "stop_nm": "경남아너스빌.꿈의숲해링턴아파트", + "ycode": "37.616498", + "stop_no": "09242", + "xcode": "127.034503", + "stop_type": "일반차로", + "node_id": "108000154", + "nxtStn": "꿈의숲롯데캐슬아파트" + }, + { + "stop_nm": "경남아너스빌.꿈의숲해링턴아파트", + "ycode": "37.6167487855", + "stop_no": "09243", + "xcode": "127.0345744355", + "stop_type": "일반차로", + "node_id": "108000155", + "nxtStn": "송중초등학교" + }, + { + "stop_nm": "송중초등학교", + "ycode": "37.616419", + "stop_no": "09244", + "xcode": "127.031159", + "stop_type": "일반차로", + "node_id": "108000156", + "nxtStn": "경남아너스빌.꿈의숲해링턴아파트" + }, + { + "stop_nm": "송중초등학교", + "ycode": "37.6165541394", + "stop_no": "09245", + "xcode": "127.0316486841", + "stop_type": "일반차로", + "node_id": "108000157", + "nxtStn": "롯데백화점미아점" + }, + { + "stop_nm": "수유3동우체국", + "ycode": "37.6400256713", + "stop_no": "09246", + "xcode": "127.0275793554", + "stop_type": "일반차로", + "node_id": "108000158", + "nxtStn": "강북구청" + }, + { + "stop_nm": "수유3동우체국", + "ycode": "37.64006", + "stop_no": "09247", + "xcode": "127.028118", + "stop_type": "일반차로", + "node_id": "108000159", + "nxtStn": "태영데시앙아파트" + }, + { + "stop_nm": "수유역.노스페이스문화센터", + "ycode": "37.638953", + "stop_no": "09248", + "xcode": "127.026899", + "stop_type": "일반차로", + "node_id": "108000160", + "nxtStn": "강북구청사거리" + }, + { + "stop_nm": "수유역.강북구청", + "ycode": "37.6376933332", + "stop_no": "09249", + "xcode": "127.0250607476", + "stop_type": "일반차로", + "node_id": "108000161", + "nxtStn": "대한병원" + }, + { + "stop_nm": "미아역8번출구.신일중고", + "ycode": "37.627378539", + "stop_no": "09253", + "xcode": "127.025544449", + "stop_type": "일반차로", + "node_id": "108000165", + "nxtStn": "미아역.신일중고" + }, + { + "stop_nm": "영신여객차고지(우이동종점)", + "ycode": "37.662778", + "stop_no": "09255", + "xcode": "127.011345", + "stop_type": "일반차로", + "node_id": "108000382", + "nxtStn": "우이동도선사입구.북한산우이역" + }, + { + "stop_nm": "영신여객차고지(우이동종점)", + "ycode": "37.662914", + "stop_no": "09256", + "xcode": "127.011263", + "stop_type": "일반차로", + "node_id": "108000383", + "nxtStn": "종점" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6153850288", + "stop_no": "09260", + "xcode": "127.0297349566", + "stop_type": "일반차로", + "node_id": "108000172", + "nxtStn": "미아사거리" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6117784388", + "stop_no": "09261", + "xcode": "127.0304393218", + "stop_type": "일반차로", + "node_id": "108000173", + "nxtStn": "송중초등학교" + }, + { + "stop_nm": "한신대학교", + "ycode": "37.635375886", + "stop_no": "09263", + "xcode": "127.0130710226", + "stop_type": "일반차로", + "node_id": "108000175", + "nxtStn": "한신대신학대학원.화계사" + }, + { + "stop_nm": "수유사거리", + "ycode": "37.63462", + "stop_no": "09266", + "xcode": "127.024333", + "stop_type": "일반차로", + "node_id": "108000178", + "nxtStn": "강북경찰서입구" + }, + { + "stop_nm": "수유사거리", + "ycode": "37.634925", + "stop_no": "09267", + "xcode": "127.024917", + "stop_type": "일반차로", + "node_id": "108000179", + "nxtStn": "수유시장.성신여대미아캠퍼스앞" + }, + { + "stop_nm": "송중동주민센터앞", + "ycode": "37.6160580688", + "stop_no": "09269", + "xcode": "127.0333691522", + "stop_type": "일반차로", + "node_id": "108000181", + "nxtStn": "송중동경남아너스빌정문" + }, + { + "stop_nm": "송중동경남아너스빌정문", + "ycode": "37.6132978404", + "stop_no": "09270", + "xcode": "127.0340849359", + "stop_type": "일반차로", + "node_id": "108000182", + "nxtStn": "창문여고" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.6227175379", + "stop_no": "09271", + "xcode": "127.0378333766", + "stop_type": "일반차로", + "node_id": "108000183", + "nxtStn": "동문굿모닝힐" + }, + { + "stop_nm": "수유역.강북구청", + "ycode": "37.6386311446", + "stop_no": "09272", + "xcode": "127.0260514034", + "stop_type": "일반차로", + "node_id": "108000184", + "nxtStn": "삼성화재강북지점" + }, + { + "stop_nm": "삼각산보건지소", + "ycode": "37.61704", + "stop_no": "09273", + "xcode": "127.015455", + "stop_type": "일반차로", + "node_id": "108000185", + "nxtStn": "삼각산119안전센터" + }, + { + "stop_nm": "삼각산보건지소", + "ycode": "37.6174683906", + "stop_no": "09274", + "xcode": "127.0152813623", + "stop_type": "일반차로", + "node_id": "108000186", + "nxtStn": "삼각산동삼각산아이원아파트정문" + }, + { + "stop_nm": "삼각산동삼각산아이원아파트후문", + "ycode": "37.616347829", + "stop_no": "09275", + "xcode": "127.0188312494", + "stop_type": "일반차로", + "node_id": "108000187", + "nxtStn": "삼각산동삼각산아이원아파트정문" + }, + { + "stop_nm": "삼각산동삼각산아이원아파트후문", + "ycode": "37.616273", + "stop_no": "09276", + "xcode": "127.018745", + "stop_type": "일반차로", + "node_id": "108000188", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "롯데백화점미아점", + "ycode": "37.614709413", + "stop_no": "09277", + "xcode": "127.0307561737", + "stop_type": "일반차로", + "node_id": "108000189", + "nxtStn": "미아사거리역2번출구" + }, + { + "stop_nm": "우이동주민센터입구", + "ycode": "37.6476640054", + "stop_no": "09278", + "xcode": "127.0123580949", + "stop_type": "일반차로", + "node_id": "108000190", + "nxtStn": "4.19민주묘지역" + }, + { + "stop_nm": "창문여고", + "ycode": "37.6121340119", + "stop_no": "09279", + "xcode": "127.0358638935", + "stop_type": "일반차로", + "node_id": "108000375", + "nxtStn": "길음2동주민센터" + }, + { + "stop_nm": "솔샘터널", + "ycode": "37.618743", + "stop_no": "09283", + "xcode": "127.009213", + "stop_type": "일반차로", + "node_id": "108000192", + "nxtStn": "SK아파트벽산아파트상가" + }, + { + "stop_nm": "우이동도선사입구", + "ycode": "37.662789", + "stop_no": "09286", + "xcode": "127.012956", + "stop_type": "일반차로", + "node_id": "108000193", + "nxtStn": "한국사회봉사회" + }, + { + "stop_nm": "우이동차고지기점", + "ycode": "37.662987", + "stop_no": "09289", + "xcode": "127.012021", + "stop_type": "일반차로", + "node_id": "108000194", + "nxtStn": "한국사회봉사회" + }, + { + "stop_nm": "한성운수종점", + "ycode": "37.634618", + "stop_no": "09290", + "xcode": "127.035297", + "stop_type": "일반차로", + "node_id": "108000195", + "nxtStn": "종점" + }, + { + "stop_nm": "화계사입구.종점", + "ycode": "37.632628", + "stop_no": "09291", + "xcode": "127.013707", + "stop_type": "일반차로", + "node_id": "108000196", + "nxtStn": "화계사입구.한신대학교대학원" + }, + { + "stop_nm": "SK아파트벽산아파트상가", + "ycode": "37.6196972385", + "stop_no": "09293", + "xcode": "127.0111164185", + "stop_type": "일반차로", + "node_id": "108000198", + "nxtStn": "솔샘중고등학교.팔팔·미송경로당" + }, + { + "stop_nm": "우이동차고지종점", + "ycode": "37.663158", + "stop_no": "09294", + "xcode": "127.012302", + "stop_type": "일반차로", + "node_id": "108000199", + "nxtStn": "종점" + }, + { + "stop_nm": "삼각산동삼각산아이원아파트정문", + "ycode": "37.6161778465", + "stop_no": "09295", + "xcode": "127.0166880013", + "stop_type": "일반차로", + "node_id": "108000200", + "nxtStn": "삼각산동삼각산아이원아파트후문" + }, + { + "stop_nm": "삼각산동삼각산아이원아파트정문", + "ycode": "37.616358098", + "stop_no": "09298", + "xcode": "127.0164422295", + "stop_type": "일반차로", + "node_id": "108000203", + "nxtStn": "삼각산보건지소" + }, + { + "stop_nm": "삼각산고.래미안트리베라", + "ycode": "37.61443", + "stop_no": "09302", + "xcode": "127.021813", + "stop_type": "일반차로", + "node_id": "108000205", + "nxtStn": "삼각산동삼각산아이원아파트후문" + }, + { + "stop_nm": "삼각산고.래미안트리베라", + "ycode": "37.614468", + "stop_no": "09303", + "xcode": "127.021202", + "stop_type": "일반차로", + "node_id": "108000204", + "nxtStn": "미아초교" + }, + { + "stop_nm": "방천시장입구", + "ycode": "37.611208", + "stop_no": "09304", + "xcode": "127.033147", + "stop_type": "일반차로", + "node_id": "108000364", + "nxtStn": "창문여고" + }, + { + "stop_nm": "화계사입구.한신대학교대학원", + "ycode": "37.633257", + "stop_no": "09305", + "xcode": "127.01343", + "stop_type": "일반차로", + "node_id": "108000365", + "nxtStn": "수유중학교혜화여고" + }, + { + "stop_nm": "미아사거리역.롯데백화점", + "ycode": "37.6140792311", + "stop_no": "09306", + "xcode": "127.0302283114", + "stop_type": "일반차로", + "node_id": "108000369", + "nxtStn": "삼양동사거리입구" + }, + { + "stop_nm": "삼각산119안전센터", + "ycode": "37.619548", + "stop_no": "09307", + "xcode": "127.015178", + "stop_type": "일반차로", + "node_id": "108000367", + "nxtStn": "삼각산보건지소" + }, + { + "stop_nm": "삼각산119안전센터", + "ycode": "37.619795", + "stop_no": "09308", + "xcode": "127.015343", + "stop_type": "일반차로", + "node_id": "108000368", + "nxtStn": "삼양동벽산라이브파크미양초등학교" + }, + { + "stop_nm": "무량사입구", + "ycode": "37.6462100417", + "stop_no": "09310", + "xcode": "127.00794393", + "stop_type": "일반차로", + "node_id": "108000372", + "nxtStn": "국립4.19민주묘지" + }, + { + "stop_nm": "무량사입구", + "ycode": "37.646323", + "stop_no": "09311", + "xcode": "127.007842", + "stop_type": "일반차로", + "node_id": "108000371", + "nxtStn": "강북청소년수련관" + }, + { + "stop_nm": "꿈의숲주차장입구", + "ycode": "37.6208649775", + "stop_no": "09312", + "xcode": "127.0453126023", + "stop_type": "일반차로", + "node_id": "108000373", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "수유중앙시장", + "ycode": "37.6408936108", + "stop_no": "09313", + "xcode": "127.0223875946", + "stop_type": "일반차로", + "node_id": "108000377", + "nxtStn": "대한병원" + }, + { + "stop_nm": "대한병원", + "ycode": "37.636835", + "stop_no": "09314", + "xcode": "127.022882", + "stop_type": "일반차로", + "node_id": "108000376", + "nxtStn": "삼성화재강북지점" + }, + { + "stop_nm": "우이동", + "ycode": "37.6634309704", + "stop_no": "09500", + "xcode": "127.0122904688", + "stop_type": "마을버스", + "node_id": "108900216", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "미송경로당", + "ycode": "37.6241772665", + "stop_no": "09501", + "xcode": "127.0127201301", + "stop_type": "마을버스", + "node_id": "108900158", + "nxtStn": "구세군강북종합사회복지관입구" + }, + { + "stop_nm": "번동초교.솔그린APT.하나은행", + "ycode": "37.6289921152", + "stop_no": "09502", + "xcode": "127.0395643313", + "stop_type": "마을버스", + "node_id": "108900154", + "nxtStn": "번동한솔솔파크" + }, + { + "stop_nm": "연일슈퍼", + "ycode": "37.6289011321", + "stop_no": "09503", + "xcode": "127.0303510091", + "stop_type": "마을버스", + "node_id": "108900153", + "nxtStn": "샛별슈퍼" + }, + { + "stop_nm": "빨래골", + "ycode": "37.627439", + "stop_no": "09504", + "xcode": "127.010183", + "stop_type": "마을버스", + "node_id": "108900152", + "nxtStn": "수연슈퍼" + }, + { + "stop_nm": "본원정사", + "ycode": "37.6381013089", + "stop_no": "09505", + "xcode": "127.0063793815", + "stop_type": "마을버스", + "node_id": "108900022", + "nxtStn": "모아빌라" + }, + { + "stop_nm": "아카데미하우스.통일교육원", + "ycode": "37.6420400906", + "stop_no": "09506", + "xcode": "127.0020125009", + "stop_type": "마을버스", + "node_id": "108900151", + "nxtStn": "신성빌라" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.661095", + "stop_no": "09507", + "xcode": "127.0134", + "stop_type": "마을버스", + "node_id": "108900150", + "nxtStn": "청한빌라" + }, + { + "stop_nm": "번동슈퍼", + "ycode": "37.627648264", + "stop_no": "09510", + "xcode": "127.0378426735", + "stop_type": "마을버스", + "node_id": "108900148", + "nxtStn": "청화슈퍼" + }, + { + "stop_nm": "샛별슈퍼", + "ycode": "37.6278746042", + "stop_no": "09512", + "xcode": "127.0310972055", + "stop_type": "마을버스", + "node_id": "108900162", + "nxtStn": "믿음슈퍼" + }, + { + "stop_nm": "수연슈퍼", + "ycode": "37.627719", + "stop_no": "09513", + "xcode": "127.01135", + "stop_type": "마을버스", + "node_id": "108900147", + "nxtStn": "다리앞" + }, + { + "stop_nm": "모아빌라", + "ycode": "37.638200457", + "stop_no": "09514", + "xcode": "127.0074386095", + "stop_type": "마을버스", + "node_id": "108900146", + "nxtStn": "해청빌라" + }, + { + "stop_nm": "신성빌라", + "ycode": "37.6435025092", + "stop_no": "09515", + "xcode": "127.003531011", + "stop_type": "마을버스", + "node_id": "108900217", + "nxtStn": "백련사" + }, + { + "stop_nm": "송중동주민센터", + "ycode": "37.6161085295", + "stop_no": "09516", + "xcode": "127.0333691747", + "stop_type": "마을버스", + "node_id": "108900164", + "nxtStn": "송중동경남아너스빌정문" + }, + { + "stop_nm": "마을버스사무실", + "ycode": "37.6249774078", + "stop_no": "09517", + "xcode": "127.0129139934", + "stop_type": "마을버스", + "node_id": "108900156", + "nxtStn": "구세군강북종합사회복지관" + }, + { + "stop_nm": "청화슈퍼", + "ycode": "37.6278189463", + "stop_no": "09518", + "xcode": "127.036646366", + "stop_type": "마을버스", + "node_id": "108900025", + "nxtStn": "교육촌경로당" + }, + { + "stop_nm": "믿음슈퍼", + "ycode": "37.6270885851", + "stop_no": "09520", + "xcode": "127.0321221868", + "stop_type": "마을버스", + "node_id": "108900145", + "nxtStn": "당진슈퍼" + }, + { + "stop_nm": "다리앞", + "ycode": "37.6278825764", + "stop_no": "09521", + "xcode": "127.0122018705", + "stop_type": "마을버스", + "node_id": "108900144", + "nxtStn": "삼흥연립" + }, + { + "stop_nm": "해청빌라", + "ycode": "37.6375342546", + "stop_no": "09522", + "xcode": "127.0076913639", + "stop_type": "마을버스", + "node_id": "108900143", + "nxtStn": "기도원입구" + }, + { + "stop_nm": "백련사", + "ycode": "37.6441927035", + "stop_no": "09523", + "xcode": "127.0045157924", + "stop_type": "마을버스", + "node_id": "108900142", + "nxtStn": "강북청소년수련관" + }, + { + "stop_nm": "구세군강북종합사회복지관", + "ycode": "37.6251665309", + "stop_no": "09525", + "xcode": "127.0138350809", + "stop_type": "마을버스", + "node_id": "108900141", + "nxtStn": "보람미용실" + }, + { + "stop_nm": "교육촌경로당", + "ycode": "37.62716", + "stop_no": "09526", + "xcode": "127.03564", + "stop_type": "마을버스", + "node_id": "108900140", + "nxtStn": "영순슈퍼" + }, + { + "stop_nm": "당진슈퍼", + "ycode": "37.6255143363", + "stop_no": "09528", + "xcode": "127.0323276996", + "stop_type": "마을버스", + "node_id": "108900138", + "nxtStn": "삼광학원" + }, + { + "stop_nm": "삼흥연립", + "ycode": "37.628087", + "stop_no": "09529", + "xcode": "127.013346", + "stop_type": "마을버스", + "node_id": "108900137", + "nxtStn": "한빛맹아학교" + }, + { + "stop_nm": "기도원입구", + "ycode": "37.637014", + "stop_no": "09530", + "xcode": "127.007915", + "stop_type": "마을버스", + "node_id": "108900136", + "nxtStn": "형제슈퍼" + }, + { + "stop_nm": "강북청소년수련관", + "ycode": "37.6456973855", + "stop_no": "09531", + "xcode": "127.0070203007", + "stop_type": "마을버스", + "node_id": "108900218", + "nxtStn": "무량사입구" + }, + { + "stop_nm": "보람미용실", + "ycode": "37.6252573458", + "stop_no": "09532", + "xcode": "127.015405311", + "stop_type": "마을버스", + "node_id": "108900135", + "nxtStn": "페리카나치킨" + }, + { + "stop_nm": "영순슈퍼", + "ycode": "37.6266121006", + "stop_no": "09533", + "xcode": "127.0344605841", + "stop_type": "마을버스", + "node_id": "108900134", + "nxtStn": "당진슈퍼" + }, + { + "stop_nm": "동문굿모닝힐", + "ycode": "37.6238998772", + "stop_no": "09534", + "xcode": "127.0374657868", + "stop_type": "마을버스", + "node_id": "108900133", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "삼광학원", + "ycode": "37.6244988638", + "stop_no": "09535", + "xcode": "127.0321493948", + "stop_type": "마을버스", + "node_id": "108900132", + "nxtStn": "한영교회" + }, + { + "stop_nm": "한빛맹아학교", + "ycode": "37.6287112892", + "stop_no": "09536", + "xcode": "127.0152179897", + "stop_type": "마을버스", + "node_id": "108900131", + "nxtStn": "한빛예술단" + }, + { + "stop_nm": "형제슈퍼", + "ycode": "37.6366827714", + "stop_no": "09537", + "xcode": "127.0098045717", + "stop_type": "마을버스", + "node_id": "108900130", + "nxtStn": "삼성하이츠빌라" + }, + { + "stop_nm": "쌍문교", + "ycode": "37.6461780008", + "stop_no": "09539", + "xcode": "127.0246386377", + "stop_type": "마을버스", + "node_id": "108900129", + "nxtStn": "강북중학교" + }, + { + "stop_nm": "페리카나치킨", + "ycode": "37.625406772", + "stop_no": "09540", + "xcode": "127.01654052", + "stop_type": "마을버스", + "node_id": "108900128", + "nxtStn": "삼양시장.롯데마트" + }, + { + "stop_nm": "당진슈퍼", + "ycode": "37.6254665363", + "stop_no": "09541", + "xcode": "127.032482888", + "stop_type": "마을버스", + "node_id": "108900174", + "nxtStn": "삼광학원" + }, + { + "stop_nm": "동성마트", + "ycode": "37.6236275055", + "stop_no": "09543", + "xcode": "127.0321875376", + "stop_type": "마을버스", + "node_id": "108900127", + "nxtStn": "한영교회" + }, + { + "stop_nm": "한빛예술단", + "ycode": "37.629395", + "stop_no": "09544", + "xcode": "127.016291", + "stop_type": "마을버스", + "node_id": "108900126", + "nxtStn": "수유1동주민센터.파출소" + }, + { + "stop_nm": "삼성하이츠빌라", + "ycode": "37.636735", + "stop_no": "09545", + "xcode": "127.011015", + "stop_type": "마을버스", + "node_id": "108900125", + "nxtStn": "도일타운" + }, + { + "stop_nm": "도일타운", + "ycode": "37.636753", + "stop_no": "09546", + "xcode": "127.011938", + "stop_type": "마을버스", + "node_id": "108900278", + "nxtStn": "청수탕" + }, + { + "stop_nm": "강북중학교", + "ycode": "37.6445347047", + "stop_no": "09547", + "xcode": "127.023286184", + "stop_type": "마을버스", + "node_id": "108900124", + "nxtStn": "광산사거리" + }, + { + "stop_nm": "삼양시장.롯데마트", + "ycode": "37.6250705419", + "stop_no": "09548", + "xcode": "127.0174161828", + "stop_type": "마을버스", + "node_id": "108900123", + "nxtStn": "삼양부동산" + }, + { + "stop_nm": "한영교회", + "ycode": "37.623077793", + "stop_no": "09550", + "xcode": "127.0323753581", + "stop_type": "마을버스", + "node_id": "108900122", + "nxtStn": "제일슈퍼" + }, + { + "stop_nm": "수유1동주민센터.파출소", + "ycode": "37.6301526349", + "stop_no": "09551", + "xcode": "127.0175250022", + "stop_type": "마을버스", + "node_id": "108900203", + "nxtStn": "진주빌딩" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.6424802856", + "stop_no": "09553", + "xcode": "127.023056642", + "stop_type": "마을버스", + "node_id": "108900211", + "nxtStn": "강북구청" + }, + { + "stop_nm": "삼양부동산", + "ycode": "37.6248776198", + "stop_no": "09554", + "xcode": "127.0180165771", + "stop_type": "마을버스", + "node_id": "108900121", + "nxtStn": "삼양오거리" + }, + { + "stop_nm": "제일슈퍼", + "ycode": "37.6221991545", + "stop_no": "09556", + "xcode": "127.0326717873", + "stop_type": "마을버스", + "node_id": "108900119", + "nxtStn": "홈빌라트" + }, + { + "stop_nm": "진주빌딩", + "ycode": "37.6309112824", + "stop_no": "09557", + "xcode": "127.0179523198", + "stop_type": "마을버스", + "node_id": "108900204", + "nxtStn": "광성슈퍼" + }, + { + "stop_nm": "청수탕", + "ycode": "37.6367446746", + "stop_no": "09558", + "xcode": "127.0126565535", + "stop_type": "마을버스", + "node_id": "108900118", + "nxtStn": "한신대학교" + }, + { + "stop_nm": "강북구청", + "ycode": "37.6403810594", + "stop_no": "09560", + "xcode": "127.0259840261", + "stop_type": "마을버스", + "node_id": "108900212", + "nxtStn": "수유역" + }, + { + "stop_nm": "삼양오거리", + "ycode": "37.6247891837", + "stop_no": "09561", + "xcode": "127.0188481065", + "stop_type": "마을버스", + "node_id": "108900172", + "nxtStn": "구.삼양극장" + }, + { + "stop_nm": "도일타운", + "ycode": "37.6369021524", + "stop_no": "09562", + "xcode": "127.0118237871", + "stop_type": "마을버스", + "node_id": "108900277", + "nxtStn": "삼성하이츠빌라" + }, + { + "stop_nm": "홈빌라트", + "ycode": "37.62124033", + "stop_no": "09563", + "xcode": "127.0329273916", + "stop_type": "마을버스", + "node_id": "108900117", + "nxtStn": "꿈의숲해링턴아파트101동앞" + }, + { + "stop_nm": "광성슈퍼", + "ycode": "37.6321483624", + "stop_no": "09564", + "xcode": "127.0186380913", + "stop_type": "마을버스", + "node_id": "108900205", + "nxtStn": "화계유치원" + }, + { + "stop_nm": "인수초중학교", + "ycode": "37.6435561341", + "stop_no": "09566", + "xcode": "127.0107834163", + "stop_type": "마을버스", + "node_id": "108900116", + "nxtStn": "인수중학교.극동아파트" + }, + { + "stop_nm": "수유역", + "ycode": "37.6375906296", + "stop_no": "09567", + "xcode": "127.0249677991", + "stop_type": "마을버스", + "node_id": "108900177", + "nxtStn": "대한병원" + }, + { + "stop_nm": "오현초등학교", + "ycode": "37.6235355369", + "stop_no": "09568", + "xcode": "127.0459678973", + "stop_type": "마을버스", + "node_id": "108900195", + "nxtStn": "주공1.2단지한진아파트" + }, + { + "stop_nm": "구.삼양극장", + "ycode": "37.6248635854", + "stop_no": "09569", + "xcode": "127.0211399902", + "stop_type": "마을버스", + "node_id": "108900115", + "nxtStn": "삼양신협" + }, + { + "stop_nm": "꿈의숲해링턴아파트101동앞", + "ycode": "37.6201373335", + "stop_no": "09571", + "xcode": "127.0331749954", + "stop_type": "마을버스", + "node_id": "108900114", + "nxtStn": "꿈의숲해링턴아파트105동앞" + }, + { + "stop_nm": "화계유치원", + "ycode": "37.6338728904", + "stop_no": "09572", + "xcode": "127.019526826", + "stop_type": "마을버스", + "node_id": "108900113", + "nxtStn": "신일병원" + }, + { + "stop_nm": "한신대신학대학원.화계사", + "ycode": "37.6337304054", + "stop_no": "09573", + "xcode": "127.0139839635", + "stop_type": "마을버스", + "node_id": "108900206", + "nxtStn": "삼양탕" + }, + { + "stop_nm": "주공1.2단지한진아파트", + "ycode": "37.6253372712", + "stop_no": "09576", + "xcode": "127.0447499944", + "stop_type": "마을버스", + "node_id": "108900111", + "nxtStn": "신원아파트.북서울꿈의교회" + }, + { + "stop_nm": "삼양신협", + "ycode": "37.6254173467", + "stop_no": "09577", + "xcode": "127.0232915478", + "stop_type": "마을버스", + "node_id": "108900163", + "nxtStn": "미아역6번출구" + }, + { + "stop_nm": "번3동주민센터", + "ycode": "37.6261592427", + "stop_no": "09578", + "xcode": "127.0466039503", + "stop_type": "마을버스", + "node_id": "108900110", + "nxtStn": "주공1.2단지한진아파트" + }, + { + "stop_nm": "미아사거리전철역", + "ycode": "37.612966", + "stop_no": "09579", + "xcode": "127.030484", + "stop_type": "마을버스", + "node_id": "108900168", + "nxtStn": "롯데백화점" + }, + { + "stop_nm": "꿈의숲해링턴아파트105동앞", + "ycode": "37.618384", + "stop_no": "09580", + "xcode": "127.033583", + "stop_type": "마을버스", + "node_id": "108900109", + "nxtStn": "꿈의숲해링턴아파트108동앞" + }, + { + "stop_nm": "삼양탕", + "ycode": "37.6338294026", + "stop_no": "09582", + "xcode": "127.0149765253", + "stop_type": "마을버스", + "node_id": "108900207", + "nxtStn": "송암교회.화계사거리.수유보건지소" + }, + { + "stop_nm": "국립재활원", + "ycode": "37.6402544989", + "stop_no": "09583", + "xcode": "127.0115682035", + "stop_type": "마을버스", + "node_id": "108900108", + "nxtStn": "강북구의회.강북문화예술회관" + }, + { + "stop_nm": "신원아파트.북서울꿈의교회", + "ycode": "37.6261160053", + "stop_no": "09585", + "xcode": "127.044224785", + "stop_type": "마을버스", + "node_id": "108900106", + "nxtStn": "기산아파트.2단지후문" + }, + { + "stop_nm": "미아역6번출구", + "ycode": "37.625939543", + "stop_no": "09586", + "xcode": "127.0253864806", + "stop_type": "마을버스", + "node_id": "108900105", + "nxtStn": "미아역7번출구" + }, + { + "stop_nm": "꿈의숲해링턴아파트108동앞", + "ycode": "37.616662", + "stop_no": "09588", + "xcode": "127.033989", + "stop_type": "마을버스", + "node_id": "108900103", + "nxtStn": "송중초등학교" + }, + { + "stop_nm": "북한산스카이빌딩", + "ycode": "37.6356860225", + "stop_no": "09589", + "xcode": "127.0236086128", + "stop_type": "마을버스", + "node_id": "108900102", + "nxtStn": "수유역" + }, + { + "stop_nm": "송암교회.화계사거리.수유보건지소", + "ycode": "37.6339778333", + "stop_no": "09590", + "xcode": "127.016816616", + "stop_type": "마을버스", + "node_id": "108900101", + "nxtStn": "강북노인종합복지관" + }, + { + "stop_nm": "강북구의회.강북문화예술회관", + "ycode": "37.6403416065", + "stop_no": "09591", + "xcode": "127.0142820851", + "stop_type": "마을버스", + "node_id": "108900233", + "nxtStn": "가오리" + }, + { + "stop_nm": "경남아너스빌정문", + "ycode": "37.6130688648", + "stop_no": "09592", + "xcode": "127.0344291798", + "stop_type": "마을버스", + "node_id": "108900100", + "nxtStn": "송중동주민센터" + }, + { + "stop_nm": "기산아파트.2단지후문", + "ycode": "37.6276136002", + "stop_no": "09593", + "xcode": "127.0442392677", + "stop_type": "마을버스", + "node_id": "108900099", + "nxtStn": "주공3단지정문" + }, + { + "stop_nm": "미아역7번출구", + "ycode": "37.626782", + "stop_no": "09594", + "xcode": "127.025885", + "stop_type": "마을버스", + "node_id": "108900098", + "nxtStn": "깨순이김밥" + }, + { + "stop_nm": "수유역", + "ycode": "37.6374815091", + "stop_no": "09595", + "xcode": "127.0253881411", + "stop_type": "마을버스", + "node_id": "108900178", + "nxtStn": "번동삼거리" + }, + { + "stop_nm": "가오리", + "ycode": "37.6406305942", + "stop_no": "09597", + "xcode": "127.016284405", + "stop_type": "마을버스", + "node_id": "108900234", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "송중동주민센터", + "ycode": "37.6159868107", + "stop_no": "09598", + "xcode": "127.0336239934", + "stop_type": "마을버스", + "node_id": "108900169", + "nxtStn": "송중초등학교" + }, + { + "stop_nm": "쌍문교", + "ycode": "37.6456427714", + "stop_no": "09599", + "xcode": "127.0245795335", + "stop_type": "마을버스", + "node_id": "108900215", + "nxtStn": "쌍문초등학교" + }, + { + "stop_nm": "주공3단지정문", + "ycode": "37.6282486714", + "stop_no": "09600", + "xcode": "127.0423068222", + "stop_type": "마을버스", + "node_id": "108900097", + "nxtStn": "한양아파트입구.삼덕상운" + }, + { + "stop_nm": "깨순이김밥", + "ycode": "37.6260467836", + "stop_no": "09631", + "xcode": "127.0253321368", + "stop_type": "마을버스", + "node_id": "108900096", + "nxtStn": "삼양신협" + }, + { + "stop_nm": "8번지입구", + "ycode": "37.6137400363", + "stop_no": "09642", + "xcode": "127.0378208986", + "stop_type": "마을버스", + "node_id": "108900095", + "nxtStn": "양지빌라" + }, + { + "stop_nm": "번동삼거리", + "ycode": "37.6350975692", + "stop_no": "09656", + "xcode": "127.0279469112", + "stop_type": "마을버스", + "node_id": "108900094", + "nxtStn": "보람빌딩" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.6409823569", + "stop_no": "09682", + "xcode": "127.0199332209", + "stop_type": "마을버스", + "node_id": "108900093", + "nxtStn": "성당앞" + }, + { + "stop_nm": "한양아파트입구.삼덕상운", + "ycode": "37.6279896285", + "stop_no": "09717", + "xcode": "127.0409777233", + "stop_type": "마을버스", + "node_id": "108900092", + "nxtStn": "하나은행.새마을금고" + }, + { + "stop_nm": "삼양신협", + "ycode": "37.625637", + "stop_no": "09718", + "xcode": "127.023522", + "stop_type": "마을버스", + "node_id": "108900091", + "nxtStn": "강북반석교회" + }, + { + "stop_nm": "미아사거리역2번출구", + "ycode": "37.613971", + "stop_no": "09739", + "xcode": "127.03086", + "stop_type": "일반차로", + "node_id": "108000339", + "nxtStn": "방천시장입구" + }, + { + "stop_nm": "양지빌라", + "ycode": "37.6150510498", + "stop_no": "09753", + "xcode": "127.0380243258", + "stop_type": "마을버스", + "node_id": "108900090", + "nxtStn": "8번지슈퍼" + }, + { + "stop_nm": "성당앞", + "ycode": "37.6422570137", + "stop_no": "09754", + "xcode": "127.0220299226", + "stop_type": "마을버스", + "node_id": "108900089", + "nxtStn": "중앙시장" + }, + { + "stop_nm": "하나은행.새마을금고", + "ycode": "37.628747", + "stop_no": "09760", + "xcode": "127.039527", + "stop_type": "마을버스", + "node_id": "108900088", + "nxtStn": "강북구민운동장.4단지" + }, + { + "stop_nm": "북서울꿈의숲", + "ycode": "37.618983", + "stop_no": "09767", + "xcode": "127.044096", + "stop_type": "일반차로", + "node_id": "108000366", + "nxtStn": "창문여고" + }, + { + "stop_nm": "강북반석교회", + "ycode": "37.625108", + "stop_no": "09769", + "xcode": "127.021441", + "stop_type": "마을버스", + "node_id": "108900087", + "nxtStn": "훌랄라치킨" + }, + { + "stop_nm": "8번지슈퍼", + "ycode": "37.6158503081", + "stop_no": "09770", + "xcode": "127.0380371932", + "stop_type": "마을버스", + "node_id": "108900086", + "nxtStn": "산장빌라" + }, + { + "stop_nm": "롯데백화점", + "ycode": "37.614457", + "stop_no": "09771", + "xcode": "127.030938", + "stop_type": "마을버스", + "node_id": "108900085", + "nxtStn": "송중초등학교" + }, + { + "stop_nm": "중앙시장", + "ycode": "37.64039", + "stop_no": "09773", + "xcode": "127.022469", + "stop_type": "마을버스", + "node_id": "108900083", + "nxtStn": "대한병원" + }, + { + "stop_nm": "강북구민운동장.4단지", + "ycode": "37.630107976", + "stop_no": "09774", + "xcode": "127.0385973548", + "stop_type": "마을버스", + "node_id": "108900184", + "nxtStn": "강북보건소.번2동주민센터" + }, + { + "stop_nm": "훌랄라치킨", + "ycode": "37.624899112", + "stop_no": "09775", + "xcode": "127.0188730581", + "stop_type": "마을버스", + "node_id": "108900173", + "nxtStn": "삼일약국.롯데마트" + }, + { + "stop_nm": "산장빌라", + "ycode": "37.6164279001", + "stop_no": "09776", + "xcode": "127.0380476824", + "stop_type": "마을버스", + "node_id": "108900082", + "nxtStn": "삼우하이츠빌라" + }, + { + "stop_nm": "화계유치원", + "ycode": "37.6339936682", + "stop_no": "09777", + "xcode": "127.0193274421", + "stop_type": "마을버스", + "node_id": "108900081", + "nxtStn": "성일빌딩" + }, + { + "stop_nm": "강북보건소.번2동주민센터", + "ycode": "37.631544792", + "stop_no": "09779", + "xcode": "127.0370685406", + "stop_type": "마을버스", + "node_id": "108900189", + "nxtStn": "금호.현대아파트" + }, + { + "stop_nm": "삼일약국.롯데마트", + "ycode": "37.625035", + "stop_no": "09780", + "xcode": "127.017932", + "stop_type": "마을버스", + "node_id": "108900079", + "nxtStn": "삼양시장" + }, + { + "stop_nm": "삼우하이츠빌라", + "ycode": "37.6160812447", + "stop_no": "09781", + "xcode": "127.0372251142", + "stop_type": "마을버스", + "node_id": "108900078", + "nxtStn": "한일아파트후문" + }, + { + "stop_nm": "꿈의숲해링턴아파트108동앞", + "ycode": "37.61671", + "stop_no": "09782", + "xcode": "127.03406", + "stop_type": "마을버스", + "node_id": "108900077", + "nxtStn": "꿈의숲해링턴아파트105동앞" + }, + { + "stop_nm": "성일빌딩", + "ycode": "37.6322619376", + "stop_no": "09783", + "xcode": "127.0183911221", + "stop_type": "마을버스", + "node_id": "108900208", + "nxtStn": "수유1동주민센터.파출소" + }, + { + "stop_nm": "금호.현대아파트", + "ycode": "37.6318694163", + "stop_no": "09785", + "xcode": "127.0363141169", + "stop_type": "마을버스", + "node_id": "108900076", + "nxtStn": "로얄공인중계사무소" + }, + { + "stop_nm": "삼양시장", + "ycode": "37.625226", + "stop_no": "09786", + "xcode": "127.017349", + "stop_type": "마을버스", + "node_id": "108900075", + "nxtStn": "페리카나치킨" + }, + { + "stop_nm": "한일아파트후문", + "ycode": "37.6154856509", + "stop_no": "09787", + "xcode": "127.0371511878", + "stop_type": "마을버스", + "node_id": "108900074", + "nxtStn": "장미맨션" + }, + { + "stop_nm": "꿈의숲해링턴아파트105동앞", + "ycode": "37.618395", + "stop_no": "09788", + "xcode": "127.03367", + "stop_type": "마을버스", + "node_id": "108900073", + "nxtStn": "꿈의숲해링턴아파트101동앞" + }, + { + "stop_nm": "수유1동주민센터.파출소", + "ycode": "37.6304022281", + "stop_no": "09789", + "xcode": "127.0175703804", + "stop_type": "마을버스", + "node_id": "108900209", + "nxtStn": "한빛예술단" + }, + { + "stop_nm": "수유역", + "ycode": "37.636852", + "stop_no": "09790", + "xcode": "127.024586", + "stop_type": "마을버스", + "node_id": "108900072", + "nxtStn": "강북구청" + }, + { + "stop_nm": "로얄공인중계사무소", + "ycode": "37.632733949", + "stop_no": "09791", + "xcode": "127.0350081615", + "stop_type": "마을버스", + "node_id": "108900071", + "nxtStn": "주공5단지" + }, + { + "stop_nm": "페리카나치킨", + "ycode": "37.6254842593", + "stop_no": "09792", + "xcode": "127.016582455", + "stop_type": "마을버스", + "node_id": "108900070", + "nxtStn": "보람미용실" + }, + { + "stop_nm": "장미맨션", + "ycode": "37.6147440609", + "stop_no": "09793", + "xcode": "127.0371417568", + "stop_type": "마을버스", + "node_id": "108900069", + "nxtStn": "한일아파트정문" + }, + { + "stop_nm": "꿈의숲해링턴아파트101동앞", + "ycode": "37.620030966", + "stop_no": "09794", + "xcode": "127.0333154191", + "stop_type": "마을버스", + "node_id": "108900068", + "nxtStn": "홈빌라트" + }, + { + "stop_nm": "한빛예술단", + "ycode": "37.6296268423", + "stop_no": "09795", + "xcode": "127.0162720978", + "stop_type": "마을버스", + "node_id": "108900067", + "nxtStn": "한빛맹아학교" + }, + { + "stop_nm": "주공5단지", + "ycode": "37.6333955299", + "stop_no": "09798", + "xcode": "127.0343739731", + "stop_type": "마을버스", + "node_id": "108900066", + "nxtStn": "금강산병원.전자공단" + }, + { + "stop_nm": "보람미용실", + "ycode": "37.6253402419", + "stop_no": "09799", + "xcode": "127.015432518", + "stop_type": "마을버스", + "node_id": "108900065", + "nxtStn": "구세군강북종합사회복지관" + }, + { + "stop_nm": "한일아파트정문", + "ycode": "37.6139772435", + "stop_no": "09800", + "xcode": "127.0371221189", + "stop_type": "마을버스", + "node_id": "108900064", + "nxtStn": "8번지입구" + }, + { + "stop_nm": "홈빌라트", + "ycode": "37.6211844276", + "stop_no": "09801", + "xcode": "127.0330531131", + "stop_type": "마을버스", + "node_id": "108900063", + "nxtStn": "제일슈퍼" + }, + { + "stop_nm": "한빛맹아학교", + "ycode": "37.628796", + "stop_no": "09802", + "xcode": "127.015161", + "stop_type": "마을버스", + "node_id": "108900062", + "nxtStn": "삼흥연립" + }, + { + "stop_nm": "송암교회.화계사거리.수유보건지소", + "ycode": "37.6342732728", + "stop_no": "09803", + "xcode": "127.0170113546", + "stop_type": "마을버스", + "node_id": "108900230", + "nxtStn": "수유동삼양탕앞" + }, + { + "stop_nm": "강북종합시장", + "ycode": "37.6411606222", + "stop_no": "09804", + "xcode": "127.0253984583", + "stop_type": "마을버스", + "node_id": "108900061", + "nxtStn": "성당앞" + }, + { + "stop_nm": "금강산병원.전자공단", + "ycode": "37.6344085277", + "stop_no": "09805", + "xcode": "127.0337455976", + "stop_type": "마을버스", + "node_id": "108900060", + "nxtStn": "번동5거리.북부노동지청" + }, + { + "stop_nm": "구세군강북종합사회복지관", + "ycode": "37.625303504", + "stop_no": "09806", + "xcode": "127.0137637329", + "stop_type": "마을버스", + "node_id": "108900157", + "nxtStn": "월산슈퍼" + }, + { + "stop_nm": "8번지입구", + "ycode": "37.613707628", + "stop_no": "09807", + "xcode": "127.0377245997", + "stop_type": "마을버스", + "node_id": "108900059", + "nxtStn": "창문여고앞" + }, + { + "stop_nm": "제일슈퍼", + "ycode": "37.6222270573", + "stop_no": "09808", + "xcode": "127.0327828202", + "stop_type": "마을버스", + "node_id": "108900058", + "nxtStn": "한영교회" + }, + { + "stop_nm": "삼흥연립", + "ycode": "37.628212", + "stop_no": "09809", + "xcode": "127.01344", + "stop_type": "마을버스", + "node_id": "108900057", + "nxtStn": "다리앞" + }, + { + "stop_nm": "성당앞", + "ycode": "37.6423669718", + "stop_no": "09811", + "xcode": "127.0218894421", + "stop_type": "마을버스", + "node_id": "108900210", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "번동5거리.북부노동지청", + "ycode": "37.6350464176", + "stop_no": "09812", + "xcode": "127.0340110218", + "stop_type": "마을버스", + "node_id": "108900180", + "nxtStn": "북부시장입구" + }, + { + "stop_nm": "다리앞", + "ycode": "37.627969078", + "stop_no": "09813", + "xcode": "127.0122245437", + "stop_type": "마을버스", + "node_id": "108900056", + "nxtStn": "수연슈퍼" + }, + { + "stop_nm": "한신대신학대학원.화계사", + "ycode": "37.634119725", + "stop_no": "09814", + "xcode": "127.0135376169", + "stop_type": "마을버스", + "node_id": "108900055", + "nxtStn": "유진슈퍼" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.6411409504", + "stop_no": "09815", + "xcode": "127.0199139997", + "stop_type": "마을버스", + "node_id": "108900054", + "nxtStn": "가오리" + }, + { + "stop_nm": "월산슈퍼", + "ycode": "37.6252901267", + "stop_no": "09817", + "xcode": "127.012515263", + "stop_type": "마을버스", + "node_id": "108900159", + "nxtStn": "정은빌라" + }, + { + "stop_nm": "방천시장입구", + "ycode": "37.6109552133", + "stop_no": "09818", + "xcode": "127.0334019855", + "stop_type": "마을버스", + "node_id": "108900053", + "nxtStn": "미아사거리역" + }, + { + "stop_nm": "한영교회", + "ycode": "37.622997", + "stop_no": "09819", + "xcode": "127.032525", + "stop_type": "마을버스", + "node_id": "108900052", + "nxtStn": "삼광학원" + }, + { + "stop_nm": "수연슈퍼", + "ycode": "37.627803", + "stop_no": "09820", + "xcode": "127.011384", + "stop_type": "마을버스", + "node_id": "108900051", + "nxtStn": "빨래골" + }, + { + "stop_nm": "유진슈퍼", + "ycode": "37.63553896", + "stop_no": "09821", + "xcode": "127.0132670716", + "stop_type": "마을버스", + "node_id": "108900232", + "nxtStn": "청수탕" + }, + { + "stop_nm": "가오리", + "ycode": "37.6407630608", + "stop_no": "09822", + "xcode": "127.0162289098", + "stop_type": "마을버스", + "node_id": "108900235", + "nxtStn": "강북구의회.강북문화예술회관" + }, + { + "stop_nm": "정은빌라", + "ycode": "37.6259965831", + "stop_no": "09824", + "xcode": "127.012449672", + "stop_type": "마을버스", + "node_id": "108900050", + "nxtStn": "빨래골입구" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6127265273", + "stop_no": "09825", + "xcode": "127.0309028649", + "stop_type": "마을버스", + "node_id": "108900049", + "nxtStn": "롯데백화점" + }, + { + "stop_nm": "삼광학원", + "ycode": "37.6244222371", + "stop_no": "09826", + "xcode": "127.0322762463", + "stop_type": "마을버스", + "node_id": "108900048", + "nxtStn": "당진슈퍼" + }, + { + "stop_nm": "빨래골", + "ycode": "37.627491", + "stop_no": "09827", + "xcode": "127.01008", + "stop_type": "마을버스", + "node_id": "108900047", + "nxtStn": "종점" + }, + { + "stop_nm": "청수탕", + "ycode": "37.6369587608", + "stop_no": "09828", + "xcode": "127.0126679297", + "stop_type": "마을버스", + "node_id": "108900046", + "nxtStn": "도일타운" + }, + { + "stop_nm": "강북구의회.강북문화예술회관", + "ycode": "37.6404389454", + "stop_no": "09829", + "xcode": "127.014098535", + "stop_type": "마을버스", + "node_id": "108900236", + "nxtStn": "국립재활원" + }, + { + "stop_nm": "빨래골입구", + "ycode": "37.6265516594", + "stop_no": "09830", + "xcode": "127.0123647948", + "stop_type": "마을버스", + "node_id": "108900045", + "nxtStn": "청소년독서실" + }, + { + "stop_nm": "삼성하이츠빌라", + "ycode": "37.6368907918", + "stop_no": "09831", + "xcode": "127.011080062", + "stop_type": "마을버스", + "node_id": "108900044", + "nxtStn": "형제슈퍼" + }, + { + "stop_nm": "국립재활원", + "ycode": "37.6402256236", + "stop_no": "09832", + "xcode": "127.0119761285", + "stop_type": "마을버스", + "node_id": "108900043", + "nxtStn": "인수중학교.극동아파트" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.6617153182", + "stop_no": "09833", + "xcode": "127.0134032107", + "stop_type": "마을버스", + "node_id": "108900042", + "nxtStn": "우이동" + }, + { + "stop_nm": "수유역.강북구청", + "ycode": "37.6376399831", + "stop_no": "09834", + "xcode": "127.0259230173", + "stop_type": "마을버스", + "node_id": "108900041", + "nxtStn": "강북경찰서입구" + }, + { + "stop_nm": "청소년독서실", + "ycode": "37.6260353485", + "stop_no": "09835", + "xcode": "127.0122706768", + "stop_type": "마을버스", + "node_id": "108900040", + "nxtStn": "구세군강북종합사회복지관입구" + }, + { + "stop_nm": "믿음슈퍼", + "ycode": "37.6271020543", + "stop_no": "09836", + "xcode": "127.0322943991", + "stop_type": "마을버스", + "node_id": "108900039", + "nxtStn": "우광슈퍼" + }, + { + "stop_nm": "형제슈퍼", + "ycode": "37.6368864275", + "stop_no": "09837", + "xcode": "127.0097995802", + "stop_type": "마을버스", + "node_id": "108900038", + "nxtStn": "기도원입구" + }, + { + "stop_nm": "당진슈퍼", + "ycode": "37.6254962129", + "stop_no": "09841", + "xcode": "127.0326970216", + "stop_type": "마을버스", + "node_id": "108900035", + "nxtStn": "영순슈퍼" + }, + { + "stop_nm": "우광슈퍼", + "ycode": "37.628003", + "stop_no": "09843", + "xcode": "127.031599", + "stop_type": "마을버스", + "node_id": "108900034", + "nxtStn": "종점" + }, + { + "stop_nm": "기도원입구", + "ycode": "37.637072", + "stop_no": "09844", + "xcode": "127.007973", + "stop_type": "마을버스", + "node_id": "108900033", + "nxtStn": "해청빌라" + }, + { + "stop_nm": "인수초중학교", + "ycode": "37.6435398929", + "stop_no": "09845", + "xcode": "127.011019117", + "stop_type": "마을버스", + "node_id": "108900032", + "nxtStn": "인수동백운교회입구" + }, + { + "stop_nm": "솔샘중고등학교", + "ycode": "37.6240619418", + "stop_no": "09847", + "xcode": "127.0125898279", + "stop_type": "마을버스", + "node_id": "108900161", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "영순슈퍼", + "ycode": "37.6264670403", + "stop_no": "09848", + "xcode": "127.0345928361", + "stop_type": "마을버스", + "node_id": "108900031", + "nxtStn": "금강슈퍼" + }, + { + "stop_nm": "해청빌라", + "ycode": "37.637507", + "stop_no": "09851", + "xcode": "127.007837", + "stop_type": "마을버스", + "node_id": "108900030", + "nxtStn": "모아빌라" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.619802676", + "stop_no": "09853", + "xcode": "127.0110031514", + "stop_type": "마을버스", + "node_id": "108900029", + "nxtStn": "솔샘터널" + }, + { + "stop_nm": "금강슈퍼", + "ycode": "37.6270767404", + "stop_no": "09854", + "xcode": "127.0357113281", + "stop_type": "마을버스", + "node_id": "108900028", + "nxtStn": "청화슈퍼" + }, + { + "stop_nm": "모아빌라", + "ycode": "37.6382309279", + "stop_no": "09856", + "xcode": "127.0077503725", + "stop_type": "마을버스", + "node_id": "108900027", + "nxtStn": "본원정사" + }, + { + "stop_nm": "국립419민주묘지삼거리.윤극영가옥", + "ycode": "37.6461584609", + "stop_no": "09857", + "xcode": "127.0107157988", + "stop_type": "마을버스", + "node_id": "108900026", + "nxtStn": "국립4.19민주묘지" + }, + { + "stop_nm": "청화슈퍼", + "ycode": "37.6277765778", + "stop_no": "09859", + "xcode": "127.0367029926", + "stop_type": "마을버스", + "node_id": "108900024", + "nxtStn": "번동슈퍼" + }, + { + "stop_nm": "동문굿모닝힐", + "ycode": "37.6235952196", + "stop_no": "09860", + "xcode": "127.0377522537", + "stop_type": "마을버스", + "node_id": "108900196", + "nxtStn": "강북문화정보도서관.해모로아파트" + }, + { + "stop_nm": "본원정사", + "ycode": "37.6381346428", + "stop_no": "09861", + "xcode": "127.0064915618", + "stop_type": "마을버스", + "node_id": "108900023", + "nxtStn": "종점" + }, + { + "stop_nm": "주공5단지", + "ycode": "37.6335857244", + "stop_no": "09863", + "xcode": "127.0341463204", + "stop_type": "마을버스", + "node_id": "108900021", + "nxtStn": "로얄공인중계사무소" + }, + { + "stop_nm": "번동초등학교", + "ycode": "37.6285317388", + "stop_no": "09865", + "xcode": "127.0393340964", + "stop_type": "마을버스", + "node_id": "108900190", + "nxtStn": "번동주공아파트3단지4단지" + }, + { + "stop_nm": "로얄공인중계사무소", + "ycode": "37.6328106097", + "stop_no": "09868", + "xcode": "127.0347759274", + "stop_type": "마을버스", + "node_id": "108900020", + "nxtStn": "금호.현대아파트" + }, + { + "stop_nm": "강북문화정보도서관.해모로아파트", + "ycode": "37.6258127839", + "stop_no": "09870", + "xcode": "127.0370107352", + "stop_type": "마을버스", + "node_id": "108900019", + "nxtStn": "번동한솔솔파크" + }, + { + "stop_nm": "금호.현대아파트", + "ycode": "37.6317369268", + "stop_no": "09872", + "xcode": "127.0364126242", + "stop_type": "마을버스", + "node_id": "108900018", + "nxtStn": "강북보건소.번2동주민센터" + }, + { + "stop_nm": "강북보건소앞.번2동주민센터", + "ycode": "37.6316563508", + "stop_no": "09873", + "xcode": "127.0376226365", + "stop_type": "마을버스", + "node_id": "108900017", + "nxtStn": "강북보건소" + }, + { + "stop_nm": "백련사", + "ycode": "37.6445864643", + "stop_no": "09875", + "xcode": "127.00480365", + "stop_type": "마을버스", + "node_id": "108900016", + "nxtStn": "신성빌라" + }, + { + "stop_nm": "강북보건소.번2동주민센터", + "ycode": "37.6312689643", + "stop_no": "09876", + "xcode": "127.0373743139", + "stop_type": "마을버스", + "node_id": "108900185", + "nxtStn": "강북구민운동장.4단지" + }, + { + "stop_nm": "신성빌라", + "ycode": "37.6436773202", + "stop_no": "09877", + "xcode": "127.0034868249", + "stop_type": "마을버스", + "node_id": "108900225", + "nxtStn": "아카데미하우스.통일교육원" + }, + { + "stop_nm": "강북구민운동장.4단지", + "ycode": "37.6300386219", + "stop_no": "09878", + "xcode": "127.0385078133", + "stop_type": "마을버스", + "node_id": "108900186", + "nxtStn": "하나은행.새마을금고" + }, + { + "stop_nm": "아카데미하우스.통일교육원", + "ycode": "37.6421608368", + "stop_no": "09880", + "xcode": "127.0019309161", + "stop_type": "마을버스", + "node_id": "108900015", + "nxtStn": "종점" + }, + { + "stop_nm": "번동슈퍼", + "ycode": "37.6277177238", + "stop_no": "09881", + "xcode": "127.0376036568", + "stop_type": "마을버스", + "node_id": "108900014", + "nxtStn": "번동초등학교" + }, + { + "stop_nm": "한양아파트입구.삼덕상운", + "ycode": "37.627812073", + "stop_no": "09882", + "xcode": "127.0410988513", + "stop_type": "마을버스", + "node_id": "108900199", + "nxtStn": "주공3단지정문" + }, + { + "stop_nm": "주공3단지정문", + "ycode": "37.6280702834", + "stop_no": "09883", + "xcode": "127.0422330792", + "stop_type": "마을버스", + "node_id": "108900013", + "nxtStn": "기산아파트.2단지후문" + }, + { + "stop_nm": "기산아파트.2단지후문", + "ycode": "37.6277956991", + "stop_no": "09884", + "xcode": "127.0440252483", + "stop_type": "마을버스", + "node_id": "108900012", + "nxtStn": "신원아파트.북서울꿈의교회" + }, + { + "stop_nm": "신원아파트.북서울꿈의교회", + "ycode": "37.6259772576", + "stop_no": "09885", + "xcode": "127.0441737213", + "stop_type": "마을버스", + "node_id": "108900011", + "nxtStn": "주공1.2단지한진아파트" + }, + { + "stop_nm": "주공1.2단지한진아파트", + "ycode": "37.6249236185", + "stop_no": "09886", + "xcode": "127.0448958911", + "stop_type": "마을버스", + "node_id": "108900010", + "nxtStn": "오현초등학교" + }, + { + "stop_nm": "오현초등학교", + "ycode": "37.6230966867", + "stop_no": "09887", + "xcode": "127.0460254038", + "stop_type": "마을버스", + "node_id": "108900009", + "nxtStn": "꿈의숲주차장입구" + }, + { + "stop_nm": "주공1.2단지한진아파트", + "ycode": "37.6252363894", + "stop_no": "09888", + "xcode": "127.0446457062", + "stop_type": "마을버스", + "node_id": "108900008", + "nxtStn": "번3동주민센터" + }, + { + "stop_nm": "번3동주민센터", + "ycode": "37.6260240521", + "stop_no": "09890", + "xcode": "127.0466752399", + "stop_type": "마을버스", + "node_id": "108900007", + "nxtStn": "오현초등학교" + }, + { + "stop_nm": "현대백화점.E마트.빅토리아호텔", + "ycode": "37.610179269", + "stop_no": "09893", + "xcode": "127.0304770554", + "stop_type": "마을버스", + "node_id": "108900004", + "nxtStn": "미아사거리역.롯데백화점" + }, + { + "stop_nm": "미아사거리역.롯데백화점", + "ycode": "37.61424", + "stop_no": "09894", + "xcode": "127.030113", + "stop_type": "마을버스", + "node_id": "108900171", + "nxtStn": "삼양동사거리입구" + }, + { + "stop_nm": "광산사거리", + "ycode": "37.6434913546", + "stop_no": "09895", + "xcode": "127.0227668587", + "stop_type": "마을버스", + "node_id": "108900003", + "nxtStn": "쌍문교" + }, + { + "stop_nm": "보람빌딩", + "ycode": "37.6348963686", + "stop_no": "09896", + "xcode": "127.0250915337", + "stop_type": "마을버스", + "node_id": "108900002", + "nxtStn": "신일병원" + }, + { + "stop_nm": "번동5거리.북부노동지청", + "ycode": "37.6350509566", + "stop_no": "09897", + "xcode": "127.0338943188", + "stop_type": "마을버스", + "node_id": "108900183", + "nxtStn": "금강산병원.전자공단" + }, + { + "stop_nm": "금강산병원.전자공단", + "ycode": "37.6343535824", + "stop_no": "09898", + "xcode": "127.0336730577", + "stop_type": "마을버스", + "node_id": "108900192", + "nxtStn": "주공5단지" + }, + { + "stop_nm": "하나은행.새마을금고", + "ycode": "37.6285541467", + "stop_no": "09899", + "xcode": "127.0396898577", + "stop_type": "마을버스", + "node_id": "108900201", + "nxtStn": "한양아파트입구.삼덕상운" + }, + { + "stop_nm": "우이3교", + "ycode": "37.636407", + "stop_no": "09903", + "xcode": "127.035708", + "stop_type": "일반차로", + "node_id": "108000379", + "nxtStn": "북부수도사업소" + }, + { + "stop_nm": "당진슈퍼", + "ycode": "37.6255043924", + "stop_no": "09905", + "xcode": "127.0324443854", + "stop_type": "마을버스", + "node_id": "108900001", + "nxtStn": "믿음슈퍼" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.6144948223", + "stop_no": "09908", + "xcode": "127.0210554967", + "stop_type": "마을버스", + "node_id": "108900240", + "nxtStn": "성우아파트" + }, + { + "stop_nm": "성우아파트", + "ycode": "37.6174096971", + "stop_no": "09909", + "xcode": "127.0217994295", + "stop_type": "마을버스", + "node_id": "108900241", + "nxtStn": "삼양동사거리" + }, + { + "stop_nm": "미아사거리역", + "ycode": "37.6150849616", + "stop_no": "09913", + "xcode": "127.029758625", + "stop_type": "마을버스", + "node_id": "108900245", + "nxtStn": "현대백화점별관주차장" + }, + { + "stop_nm": "두산위브아파트", + "ycode": "37.6190948303", + "stop_no": "09920", + "xcode": "127.0154198988", + "stop_type": "마을버스", + "node_id": "108900250", + "nxtStn": "동북프라자" + }, + { + "stop_nm": "한영교회", + "ycode": "37.6231428162", + "stop_no": "09934", + "xcode": "127.0318418008", + "stop_type": "마을버스", + "node_id": "108900272", + "nxtStn": "달팽이계단" + }, + { + "stop_nm": "달팽이계단", + "ycode": "37.6239152351", + "stop_no": "09936", + "xcode": "127.0311295427", + "stop_type": "마을버스", + "node_id": "108900271", + "nxtStn": "대성빌라정문" + }, + { + "stop_nm": "대성빌라정문", + "ycode": "37.6248327216", + "stop_no": "09937", + "xcode": "127.0304263922", + "stop_type": "마을버스", + "node_id": "108900270", + "nxtStn": "신구한일아파트입구" + }, + { + "stop_nm": "신구한일아파트입구", + "ycode": "37.6257429795", + "stop_no": "09938", + "xcode": "127.029785532", + "stop_type": "마을버스", + "node_id": "108900269", + "nxtStn": "실버복지센터" + }, + { + "stop_nm": "실버복지센터", + "ycode": "37.627171", + "stop_no": "09939", + "xcode": "127.029372", + "stop_type": "마을버스", + "node_id": "108900268", + "nxtStn": "남양빌라" + }, + { + "stop_nm": "남양빌라", + "ycode": "37.626857045", + "stop_no": "09940", + "xcode": "127.0284627093", + "stop_type": "마을버스", + "node_id": "108900267", + "nxtStn": "미아역3번출구" + }, + { + "stop_nm": "미아역3번출구", + "ycode": "37.6264897538", + "stop_no": "09941", + "xcode": "127.0269693692", + "stop_type": "마을버스", + "node_id": "108900266", + "nxtStn": "미아역1번출구" + }, + { + "stop_nm": "미아역1번출구", + "ycode": "37.6275568794", + "stop_no": "09942", + "xcode": "127.0258843935", + "stop_type": "마을버스", + "node_id": "108900265", + "nxtStn": "한국전력공사" + }, + { + "stop_nm": "수유시장", + "ycode": "37.6321924359", + "stop_no": "09943", + "xcode": "127.0240584476", + "stop_type": "마을버스", + "node_id": "108900264", + "nxtStn": "요진아파트" + }, + { + "stop_nm": "요진아파트", + "ycode": "37.6336246217", + "stop_no": "09944", + "xcode": "127.026553857", + "stop_type": "마을버스", + "node_id": "108900263", + "nxtStn": "우일빌딩앞" + }, + { + "stop_nm": "우일빌딩앞", + "ycode": "37.634811133", + "stop_no": "09945", + "xcode": "127.0274879166", + "stop_type": "마을버스", + "node_id": "108900262", + "nxtStn": "신구한일아파트입구" + }, + { + "stop_nm": "신구한일아파트입구", + "ycode": "37.6256574148", + "stop_no": "09946", + "xcode": "127.0296336871", + "stop_type": "마을버스", + "node_id": "108900261", + "nxtStn": "대성빌라정문" + }, + { + "stop_nm": "대성빌라정문", + "ycode": "37.6248255726", + "stop_no": "09947", + "xcode": "127.0301941441", + "stop_type": "마을버스", + "node_id": "108900260", + "nxtStn": "달팽이계단" + }, + { + "stop_nm": "달팽이계단", + "ycode": "37.623820677", + "stop_no": "09948", + "xcode": "127.0309176532", + "stop_type": "마을버스", + "node_id": "108900259", + "nxtStn": "한영교회" + }, + { + "stop_nm": "한영교회", + "ycode": "37.6231743045", + "stop_no": "09949", + "xcode": "127.0320253405", + "stop_type": "마을버스", + "node_id": "108900258", + "nxtStn": "삼광학원" + }, + { + "stop_nm": "한국전력공사", + "ycode": "37.6305370136", + "stop_no": "09950", + "xcode": "127.0247048513", + "stop_type": "마을버스", + "node_id": "108900273", + "nxtStn": "수유시장" + }, + { + "stop_nm": "창문여고앞", + "ycode": "37.611885", + "stop_no": "09994", + "xcode": "127.035382", + "stop_type": "마을버스", + "node_id": "107900301", + "nxtStn": "방천시장입구" + }, + { + "stop_nm": "도봉산역", + "ycode": "37.6890359607", + "stop_no": "10001", + "xcode": "127.0455053816", + "stop_type": "중앙차로", + "node_id": "109000001", + "nxtStn": "도봉한신아파트" + }, + { + "stop_nm": "도봉산역", + "ycode": "37.6885817356", + "stop_no": "10002", + "xcode": "127.0457253227", + "stop_type": "중앙차로", + "node_id": "109000002", + "nxtStn": "다락원.서울도솔학교앞" + }, + { + "stop_nm": "도봉한신아파트", + "ycode": "37.6839230725", + "stop_no": "10003", + "xcode": "127.04598371", + "stop_type": "중앙차로", + "node_id": "109000003", + "nxtStn": "서울북부지방법원.검찰청.도봉역성황당" + }, + { + "stop_nm": "도봉한신아파트", + "ycode": "37.682672", + "stop_no": "10004", + "xcode": "127.046067", + "stop_type": "중앙차로", + "node_id": "109000004", + "nxtStn": "도봉산역" + }, + { + "stop_nm": "서울북부지방법원.검찰청.도봉역성황당", + "ycode": "37.6776824784", + "stop_no": "10005", + "xcode": "127.0448851161", + "stop_type": "중앙차로", + "node_id": "109000005", + "nxtStn": "신도봉사거리" + }, + { + "stop_nm": "서울북부지방법원.검찰청.도봉역성황당", + "ycode": "37.677262", + "stop_no": "10006", + "xcode": "127.045103", + "stop_type": "중앙차로", + "node_id": "109000006", + "nxtStn": "도봉한신아파트" + }, + { + "stop_nm": "신도봉사거리", + "ycode": "37.6733126379", + "stop_no": "10007", + "xcode": "127.0441629656", + "stop_type": "중앙차로", + "node_id": "109000007", + "nxtStn": "신도봉시장.도봉구청.방학역북부" + }, + { + "stop_nm": "신도봉사거리", + "ycode": "37.67275", + "stop_no": "10008", + "xcode": "127.044333", + "stop_type": "중앙차로", + "node_id": "109000008", + "nxtStn": "서울북부지방법원.검찰청.도봉역성황당" + }, + { + "stop_nm": "도봉소방서.방학역남부", + "ycode": "37.6661739233", + "stop_no": "10009", + "xcode": "127.0429312049", + "stop_type": "중앙차로", + "node_id": "109000009", + "nxtStn": "도봉보건소" + }, + { + "stop_nm": "도봉소방서.방학역남부", + "ycode": "37.665702886", + "stop_no": "10010", + "xcode": "127.0430251134", + "stop_type": "중앙차로", + "node_id": "109000010", + "nxtStn": "신도봉시장.도봉구청.방학역북부" + }, + { + "stop_nm": "도봉보건소", + "ycode": "37.6589364195", + "stop_no": "10011", + "xcode": "127.0407623758", + "stop_type": "중앙차로", + "node_id": "109000011", + "nxtStn": "도봉구민회관.도봉문화원" + }, + { + "stop_nm": "도봉보건소.북한산아이파크아파트", + "ycode": "37.658205", + "stop_no": "10012", + "xcode": "127.040517", + "stop_type": "중앙차로", + "node_id": "109000012", + "nxtStn": "도봉소방서.방학역남부" + }, + { + "stop_nm": "도봉구민회관.도봉문화원", + "ycode": "37.6545598452", + "stop_no": "10013", + "xcode": "127.0381736668", + "stop_type": "중앙차로", + "node_id": "109000013", + "nxtStn": "쌍문역" + }, + { + "stop_nm": "도봉구민회관.도봉문화원", + "ycode": "37.653968", + "stop_no": "10014", + "xcode": "127.037977", + "stop_type": "중앙차로", + "node_id": "109000014", + "nxtStn": "도봉보건소.북한산아이파크아파트" + }, + { + "stop_nm": "쌍문역", + "ycode": "37.6488174173", + "stop_no": "10015", + "xcode": "127.0347686574", + "stop_type": "중앙차로", + "node_id": "109000015", + "nxtStn": "수유(강북구청)역" + }, + { + "stop_nm": "쌍문역", + "ycode": "37.6480714136", + "stop_no": "10016", + "xcode": "127.0344600639", + "stop_type": "중앙차로", + "node_id": "109000016", + "nxtStn": "도봉구민회관.도봉문화원" + }, + { + "stop_nm": "우이1교앞", + "ycode": "37.6452929962", + "stop_no": "10017", + "xcode": "127.0326524367", + "stop_type": "중앙차로", + "node_id": "109000017", + "nxtStn": "수유3동우체국" + }, + { + "stop_nm": "우이1교앞", + "ycode": "37.644652", + "stop_no": "10018", + "xcode": "127.03242", + "stop_type": "중앙차로", + "node_id": "109000018", + "nxtStn": "쌍문역" + }, + { + "stop_nm": "신도봉시장.도봉구청.방학역북부", + "ycode": "37.6699703757", + "stop_no": "10019", + "xcode": "127.0436250299", + "stop_type": "중앙차로", + "node_id": "109000019", + "nxtStn": "도봉소방서.방학역남부" + }, + { + "stop_nm": "신도봉시장.도봉구청.방학역북부", + "ycode": "37.6692224773", + "stop_no": "10020", + "xcode": "127.0436336184", + "stop_type": "중앙차로", + "node_id": "109000020", + "nxtStn": "신도봉사거리" + }, + { + "stop_nm": "도봉동한신아파트", + "ycode": "37.6826140348", + "stop_no": "10103", + "xcode": "127.0456109086", + "stop_type": "일반차로", + "node_id": "109000023", + "nxtStn": "도봉역" + }, + { + "stop_nm": "도봉동한신아파트", + "ycode": "37.6821047926", + "stop_no": "10104", + "xcode": "127.0459586654", + "stop_type": "일반차로", + "node_id": "109000024", + "nxtStn": "김근태기념도서관.도봉고등학교" + }, + { + "stop_nm": "녹천역", + "ycode": "37.643223", + "stop_no": "10105", + "xcode": "127.052427", + "stop_type": "일반차로", + "node_id": "109000407", + "nxtStn": "서울외국어고등학교" + }, + { + "stop_nm": "서울북부지방법원.검찰청.도봉역성황당", + "ycode": "37.6771834389", + "stop_no": "10107", + "xcode": "127.0451325639", + "stop_type": "일반차로", + "node_id": "109000025", + "nxtStn": "도봉동한신아파트" + }, + { + "stop_nm": "서울북부지방법원.검찰청.도봉역성황당", + "ycode": "37.6770277354", + "stop_no": "10108", + "xcode": "127.0446529158", + "stop_type": "일반차로", + "node_id": "109000026", + "nxtStn": "도봉견인차량보관소" + }, + { + "stop_nm": "도봉견인차량보관소", + "ycode": "37.6741632354", + "stop_no": "10109", + "xcode": "127.0446001847", + "stop_type": "일반차로", + "node_id": "109000027", + "nxtStn": "서울북부지방법원.검찰청.도봉역성황당" + }, + { + "stop_nm": "도봉견인차량보관소", + "ycode": "37.6741048347", + "stop_no": "10110", + "xcode": "127.0441500898", + "stop_type": "일반차로", + "node_id": "109000028", + "nxtStn": "천주교도봉동교회" + }, + { + "stop_nm": "방학역", + "ycode": "37.6691842613", + "stop_no": "10111", + "xcode": "127.0437945509", + "stop_type": "일반차로", + "node_id": "109000029", + "nxtStn": "도봉견인차량보관소" + }, + { + "stop_nm": "도봉소방서", + "ycode": "37.6656756185", + "stop_no": "10113", + "xcode": "127.043188402", + "stop_type": "일반차로", + "node_id": "109000030", + "nxtStn": "신도봉시장.도봉구청.방학역북부" + }, + { + "stop_nm": "도봉소방서", + "ycode": "37.6651007798", + "stop_no": "10114", + "xcode": "127.0425798048", + "stop_type": "일반차로", + "node_id": "109000031", + "nxtStn": "방학사거리" + }, + { + "stop_nm": "방학사거리.바로선병원", + "ycode": "37.661215", + "stop_no": "10115", + "xcode": "127.042275", + "stop_type": "일반차로", + "node_id": "109000032", + "nxtStn": "도봉소방서" + }, + { + "stop_nm": "방학사거리", + "ycode": "37.6622176747", + "stop_no": "10116", + "xcode": "127.0421039333", + "stop_type": "일반차로", + "node_id": "109000033", + "nxtStn": "도봉보건소" + }, + { + "stop_nm": "도봉보건소", + "ycode": "37.657513", + "stop_no": "10117", + "xcode": "127.040227", + "stop_type": "일반차로", + "node_id": "109000034", + "nxtStn": "방학사거리.바로선병원" + }, + { + "stop_nm": "도봉보건소", + "ycode": "37.657913", + "stop_no": "10118", + "xcode": "127.04", + "stop_type": "일반차로", + "node_id": "109000035", + "nxtStn": "창5동현대아파트" + }, + { + "stop_nm": "함석헌기념관.정의여중고", + "ycode": "37.6526308865", + "stop_no": "10119", + "xcode": "127.0373872846", + "stop_type": "일반차로", + "node_id": "109000036", + "nxtStn": "도봉구민회관.도봉문화원" + }, + { + "stop_nm": "함석헌기념관.정의여중고", + "ycode": "37.6521851028", + "stop_no": "10120", + "xcode": "127.0365880712", + "stop_type": "일반차로", + "node_id": "109000037", + "nxtStn": "쌍문역.쌍문시장" + }, + { + "stop_nm": "도봉구민회관.도봉문화원", + "ycode": "37.6541047846", + "stop_no": "10121", + "xcode": "127.0382221679", + "stop_type": "일반차로", + "node_id": "109000038", + "nxtStn": "도봉구보건소앞" + }, + { + "stop_nm": "도봉구민회관.도봉문화원", + "ycode": "37.6548202673", + "stop_no": "10122", + "xcode": "127.0381420661", + "stop_type": "일반차로", + "node_id": "109000039", + "nxtStn": "함석헌기념관.정의여중고" + }, + { + "stop_nm": "쌍문역.쌍문시장", + "ycode": "37.6480246628", + "stop_no": "10124", + "xcode": "127.0340974005", + "stop_type": "일반차로", + "node_id": "109000040", + "nxtStn": "우이1교" + }, + { + "stop_nm": "쌍문역.쌍리단길", + "ycode": "37.647535", + "stop_no": "10126", + "xcode": "127.034272", + "stop_type": "일반차로", + "node_id": "109000041", + "nxtStn": "함석헌기념관.정의여중고" + }, + { + "stop_nm": "우이1교앞", + "ycode": "37.643993768", + "stop_no": "10127", + "xcode": "127.0321793259", + "stop_type": "일반차로", + "node_id": "109000042", + "nxtStn": "쌍문역.쌍리단길" + }, + { + "stop_nm": "서울북부지방법원.검찰청.성우아파트", + "ycode": "37.676134203", + "stop_no": "10129", + "xcode": "127.048374262", + "stop_type": "일반차로", + "node_id": "109000044", + "nxtStn": "서울북부지방법원" + }, + { + "stop_nm": "서울북부지방법원.검찰청.성우아파트", + "ycode": "37.675807", + "stop_no": "10130", + "xcode": "127.047788", + "stop_type": "일반차로", + "node_id": "109000045", + "nxtStn": "서울북부지방검찰청.한양수자인아파트" + }, + { + "stop_nm": "법조타운공영주차장", + "ycode": "37.674737", + "stop_no": "10131", + "xcode": "127.047318", + "stop_type": "일반차로", + "node_id": "109000046", + "nxtStn": "서울북부지방법원.검찰청.성우아파트" + }, + { + "stop_nm": "법조타운공영주차장", + "ycode": "37.673315", + "stop_no": "10132", + "xcode": "127.046582", + "stop_type": "일반차로", + "node_id": "109000047", + "nxtStn": "도봉구청" + }, + { + "stop_nm": "도봉구청", + "ycode": "37.6689552465", + "stop_no": "10133", + "xcode": "127.0463337031", + "stop_type": "일반차로", + "node_id": "109000048", + "nxtStn": "도봉중학교.서원아파트" + }, + { + "stop_nm": "도봉구청", + "ycode": "37.6689221295", + "stop_no": "10134", + "xcode": "127.046057508", + "stop_type": "일반차로", + "node_id": "109000049", + "nxtStn": "대상타운현대아파트" + }, + { + "stop_nm": "방학1동대상타운현대삼성아파트", + "ycode": "37.665833", + "stop_no": "10135", + "xcode": "127.046438", + "stop_type": "일반차로", + "node_id": "109000050", + "nxtStn": "방학삼성래미안1단지아파트" + }, + { + "stop_nm": "방학1동대상타운현대삼성아파트", + "ycode": "37.666388", + "stop_no": "10136", + "xcode": "127.046003", + "stop_type": "일반차로", + "node_id": "109000051", + "nxtStn": "서울문화고등학교" + }, + { + "stop_nm": "창동쌍용.성원아파트", + "ycode": "37.6604251641", + "stop_no": "10137", + "xcode": "127.0494952497", + "stop_type": "일반차로", + "node_id": "109000052", + "nxtStn": "창동아이파크" + }, + { + "stop_nm": "창동쌍용아파트", + "ycode": "37.660497", + "stop_no": "10138", + "xcode": "127.048778", + "stop_type": "일반차로", + "node_id": "109000053", + "nxtStn": "자운고등학교앞" + }, + { + "stop_nm": "자운고등학교앞", + "ycode": "37.658932863", + "stop_no": "10139", + "xcode": "127.0500065597", + "stop_type": "일반차로", + "node_id": "109000054", + "nxtStn": "창동쌍용.성원아파트" + }, + { + "stop_nm": "자운고등학교앞", + "ycode": "37.6586807038", + "stop_no": "10140", + "xcode": "127.0496686321", + "stop_type": "일반차로", + "node_id": "109000055", + "nxtStn": "창동동아청솔아파트" + }, + { + "stop_nm": "창동동아청솔아파트", + "ycode": "37.65668", + "stop_no": "10141", + "xcode": "127.049804", + "stop_type": "일반차로", + "node_id": "109000056", + "nxtStn": "자운고등학교앞" + }, + { + "stop_nm": "창동동아청솔아파트", + "ycode": "37.656671335", + "stop_no": "10142", + "xcode": "127.0495822895", + "stop_type": "일반차로", + "node_id": "109000057", + "nxtStn": "창동농협물류센터" + }, + { + "stop_nm": "창동농협물류센터", + "ycode": "37.654932", + "stop_no": "10143", + "xcode": "127.050328", + "stop_type": "일반차로", + "node_id": "109000058", + "nxtStn": "창동동아청솔아파트" + }, + { + "stop_nm": "창동농협물류센터", + "ycode": "37.6542124806", + "stop_no": "10144", + "xcode": "127.0512466785", + "stop_type": "일반차로", + "node_id": "109000059", + "nxtStn": "창동역동측" + }, + { + "stop_nm": "창동농협물류센터", + "ycode": "37.65383", + "stop_no": "10145", + "xcode": "127.051022", + "stop_type": "일반차로", + "node_id": "109000060", + "nxtStn": "상계6동우체국" + }, + { + "stop_nm": "창동역동측", + "ycode": "37.653483", + "stop_no": "10146", + "xcode": "127.05058", + "stop_type": "일반차로", + "node_id": "109000061", + "nxtStn": "창동동아아파트" + }, + { + "stop_nm": "창동동아아파트", + "ycode": "37.651933", + "stop_no": "10147", + "xcode": "127.051465", + "stop_type": "일반차로", + "node_id": "109000062", + "nxtStn": "창동역동측(도봉방면)" + }, + { + "stop_nm": "창동동아아파트", + "ycode": "37.651353", + "stop_no": "10148", + "xcode": "127.051443", + "stop_type": "일반차로", + "node_id": "109000063", + "nxtStn": "창동주공19단지" + }, + { + "stop_nm": "창동주공19단지", + "ycode": "37.6490406835", + "stop_no": "10149", + "xcode": "127.0523899949", + "stop_type": "일반차로", + "node_id": "109000064", + "nxtStn": "창동동아아파트" + }, + { + "stop_nm": "창동주공19단지", + "ycode": "37.6492264659", + "stop_no": "10150", + "xcode": "127.0520286111", + "stop_type": "일반차로", + "node_id": "109000065", + "nxtStn": "창동주공18단지" + }, + { + "stop_nm": "창동주공18단지", + "ycode": "37.6470625209", + "stop_no": "10151", + "xcode": "127.0530436187", + "stop_type": "일반차로", + "node_id": "109000066", + "nxtStn": "창동주공19단지" + }, + { + "stop_nm": "창동주공18단지", + "ycode": "37.6472653853", + "stop_no": "10152", + "xcode": "127.0527729177", + "stop_type": "일반차로", + "node_id": "109000067", + "nxtStn": "서울외국어고등학교" + }, + { + "stop_nm": "도봉산입구", + "ycode": "37.687083", + "stop_no": "10153", + "xcode": "127.040722", + "stop_type": "일반차로", + "node_id": "109000068", + "nxtStn": "도봉고등학교" + }, + { + "stop_nm": "도봉고등학교", + "ycode": "37.687318", + "stop_no": "10154", + "xcode": "127.044188", + "stop_type": "일반차로", + "node_id": "109000069", + "nxtStn": "도봉한신아파트" + }, + { + "stop_nm": "김근태기념도서관.도봉고등학교", + "ycode": "37.687489", + "stop_no": "10155", + "xcode": "127.044031", + "stop_type": "일반차로", + "node_id": "109000070", + "nxtStn": "도봉산입구" + }, + { + "stop_nm": "도봉역", + "ycode": "37.680322", + "stop_no": "10156", + "xcode": "127.046683", + "stop_type": "일반차로", + "node_id": "109000071", + "nxtStn": "노원교" + }, + { + "stop_nm": "도봉역", + "ycode": "37.6803959104", + "stop_no": "10157", + "xcode": "127.0470845566", + "stop_type": "일반차로", + "node_id": "109000072", + "nxtStn": "도봉역" + }, + { + "stop_nm": "노원교", + "ycode": "37.6794237641", + "stop_no": "10158", + "xcode": "127.0490169573", + "stop_type": "일반차로", + "node_id": "109000073", + "nxtStn": "성대야구장노원교앞" + }, + { + "stop_nm": "노원교", + "ycode": "37.6796543968", + "stop_no": "10159", + "xcode": "127.0491191453", + "stop_type": "일반차로", + "node_id": "109000074", + "nxtStn": "도봉역" + }, + { + "stop_nm": "성대야구장노원교앞", + "ycode": "37.67907", + "stop_no": "10160", + "xcode": "127.04939", + "stop_type": "일반차로", + "node_id": "109000075", + "nxtStn": "서울북부지방법원" + }, + { + "stop_nm": "천주교도봉동교회", + "ycode": "37.671205", + "stop_no": "10161", + "xcode": "127.042713", + "stop_type": "일반차로", + "node_id": "109000076", + "nxtStn": "도봉중학교후문" + }, + { + "stop_nm": "천주교도봉동교회", + "ycode": "37.6713119921", + "stop_no": "10162", + "xcode": "127.0428107756", + "stop_type": "일반차로", + "node_id": "109000077", + "nxtStn": "오봉초등학교" + }, + { + "stop_nm": "오봉초등학교", + "ycode": "37.6705203068", + "stop_no": "10163", + "xcode": "127.0391794072", + "stop_type": "일반차로", + "node_id": "109000078", + "nxtStn": "천주교도봉동교회" + }, + { + "stop_nm": "오봉초등학교", + "ycode": "37.670787", + "stop_no": "10164", + "xcode": "127.03934", + "stop_type": "일반차로", + "node_id": "109000079", + "nxtStn": "방학2동공영주차장" + }, + { + "stop_nm": "방학2동공영주차장", + "ycode": "37.669435", + "stop_no": "10165", + "xcode": "127.036635", + "stop_type": "일반차로", + "node_id": "109000080", + "nxtStn": "오봉초등학교" + }, + { + "stop_nm": "방학2동공영주차장", + "ycode": "37.6696083095", + "stop_no": "10166", + "xcode": "127.0367133828", + "stop_type": "일반차로", + "node_id": "109000081", + "nxtStn": "방학2동주민센터" + }, + { + "stop_nm": "방학2동주민센터", + "ycode": "37.668217", + "stop_no": "10167", + "xcode": "127.034807", + "stop_type": "일반차로", + "node_id": "109000082", + "nxtStn": "방학2동공영주차장" + }, + { + "stop_nm": "방학2동주민센터", + "ycode": "37.6682708426", + "stop_no": "10168", + "xcode": "127.0346224327", + "stop_type": "일반차로", + "node_id": "109000083", + "nxtStn": "방학중학교정문" + }, + { + "stop_nm": "신방학중학교앞", + "ycode": "37.66372", + "stop_no": "10172", + "xcode": "127.027995", + "stop_type": "일반차로", + "node_id": "109900164", + "nxtStn": "방학3동신동아프라자" + }, + { + "stop_nm": "방학동신우빌라", + "ycode": "37.664078", + "stop_no": "10173", + "xcode": "127.03514", + "stop_type": "일반차로", + "node_id": "109000088", + "nxtStn": "도깨비시장" + }, + { + "stop_nm": "방학동신우빌라", + "ycode": "37.6641158948", + "stop_no": "10174", + "xcode": "127.0348959433", + "stop_type": "일반차로", + "node_id": "109000089", + "nxtStn": "방학동삼익세라믹" + }, + { + "stop_nm": "방학동삼익세라믹", + "ycode": "37.661672", + "stop_no": "10175", + "xcode": "127.03493", + "stop_type": "일반차로", + "node_id": "109000090", + "nxtStn": "방학동신우빌라" + }, + { + "stop_nm": "방학동삼익세라믹", + "ycode": "37.6617551365", + "stop_no": "10176", + "xcode": "127.0346738125", + "stop_type": "일반차로", + "node_id": "109000091", + "nxtStn": "쌍문동청구아파트" + }, + { + "stop_nm": "쌍문동청구아파트", + "ycode": "37.659737", + "stop_no": "10177", + "xcode": "127.035081", + "stop_type": "일반차로", + "node_id": "109000092", + "nxtStn": "방학동삼익세라믹" + }, + { + "stop_nm": "쌍문동청구아파트", + "ycode": "37.6596243231", + "stop_no": "10178", + "xcode": "127.0348107133", + "stop_type": "일반차로", + "node_id": "109000093", + "nxtStn": "도봉구보건소앞" + }, + { + "stop_nm": "샘말어린이공원", + "ycode": "37.6686672058", + "stop_no": "10179", + "xcode": "127.0318158985", + "stop_type": "일반차로", + "node_id": "109000094", + "nxtStn": "안방학동" + }, + { + "stop_nm": "방학중학교정문", + "ycode": "37.666488", + "stop_no": "10180", + "xcode": "127.034428", + "stop_type": "일반차로", + "node_id": "109000095", + "nxtStn": "안방학동" + }, + { + "stop_nm": "방학중학교정문", + "ycode": "37.666548", + "stop_no": "10181", + "xcode": "127.034145", + "stop_type": "일반차로", + "node_id": "109000096", + "nxtStn": "방학동도깨비시장" + }, + { + "stop_nm": "신한은행방학동지점", + "ycode": "37.663457", + "stop_no": "10182", + "xcode": "127.037293", + "stop_type": "일반차로", + "node_id": "109000097", + "nxtStn": "도깨비시장" + }, + { + "stop_nm": "신한은행방학동지점", + "ycode": "37.6632312342", + "stop_no": "10183", + "xcode": "127.037197641", + "stop_type": "일반차로", + "node_id": "109000098", + "nxtStn": "국민은행방학지점" + }, + { + "stop_nm": "연산군.정의공주묘", + "ycode": "37.661732", + "stop_no": "10184", + "xcode": "127.023323", + "stop_type": "일반차로", + "node_id": "109000099", + "nxtStn": "방학동신동아타워" + }, + { + "stop_nm": "연산군정의공주묘", + "ycode": "37.6620015247", + "stop_no": "10185", + "xcode": "127.0231445962", + "stop_type": "일반차로", + "node_id": "109000100", + "nxtStn": "한국사회봉사회" + }, + { + "stop_nm": "방학동신동아타워", + "ycode": "37.6616802914", + "stop_no": "10186", + "xcode": "127.028111025", + "stop_type": "일반차로", + "node_id": "109000101", + "nxtStn": "방학동신동아아파트" + }, + { + "stop_nm": "방학동신동아타워", + "ycode": "37.662028", + "stop_no": "10187", + "xcode": "127.028692", + "stop_type": "일반차로", + "node_id": "109000102", + "nxtStn": "연산군정의공주묘" + }, + { + "stop_nm": "방학3동신동아프라자", + "ycode": "37.6613704683", + "stop_no": "10188", + "xcode": "127.0274841055", + "stop_type": "일반차로", + "node_id": "109000103", + "nxtStn": "방학3동주민센터" + }, + { + "stop_nm": "방학동신동아아파트", + "ycode": "37.6619831294", + "stop_no": "10189", + "xcode": "127.0313834612", + "stop_type": "일반차로", + "node_id": "109000104", + "nxtStn": "국민은행방학지점" + }, + { + "stop_nm": "방학동신동아아파트", + "ycode": "37.662362", + "stop_no": "10190", + "xcode": "127.03202", + "stop_type": "일반차로", + "node_id": "109000105", + "nxtStn": "방학동신동아타워" + }, + { + "stop_nm": "국민은행방학지점", + "ycode": "37.662362", + "stop_no": "10191", + "xcode": "127.034242", + "stop_type": "일반차로", + "node_id": "109000106", + "nxtStn": "신한은행방학동지점" + }, + { + "stop_nm": "국민은행방학지점", + "ycode": "37.662595", + "stop_no": "10192", + "xcode": "127.034113", + "stop_type": "일반차로", + "node_id": "109000107", + "nxtStn": "방학동신동아아파트" + }, + { + "stop_nm": "신한은행방학동지점", + "ycode": "37.6626546059", + "stop_no": "10193", + "xcode": "127.037002395", + "stop_type": "일반차로", + "node_id": "109000108", + "nxtStn": "방학사거리" + }, + { + "stop_nm": "신한은행방학동지점", + "ycode": "37.662933", + "stop_no": "10194", + "xcode": "127.036807", + "stop_type": "일반차로", + "node_id": "109000109", + "nxtStn": "국민은행방학지점" + }, + { + "stop_nm": "방학사거리", + "ycode": "37.66272", + "stop_no": "10195", + "xcode": "127.040618", + "stop_type": "일반차로", + "node_id": "109000110", + "nxtStn": "정병원" + }, + { + "stop_nm": "방학사거리", + "ycode": "37.66298", + "stop_no": "10196", + "xcode": "127.040387", + "stop_type": "일반차로", + "node_id": "109000111", + "nxtStn": "신한은행방학동지점" + }, + { + "stop_nm": "서울문화고등학교", + "ycode": "37.6628720833", + "stop_no": "10197", + "xcode": "127.046309519", + "stop_type": "일반차로", + "node_id": "109000112", + "nxtStn": "방학사거리" + }, + { + "stop_nm": "서울문화고등학교", + "ycode": "37.662327", + "stop_no": "10198", + "xcode": "127.048067", + "stop_type": "일반차로", + "node_id": "109000113", + "nxtStn": "노원고등학교" + }, + { + "stop_nm": "서울문화고등학교", + "ycode": "37.662625", + "stop_no": "10199", + "xcode": "127.048068", + "stop_type": "일반차로", + "node_id": "109000114", + "nxtStn": "방학1동대상타운현대삼성아파트" + }, + { + "stop_nm": "쌍문동청한빌라", + "ycode": "37.6574593323", + "stop_no": "10200", + "xcode": "127.0150062055", + "stop_type": "일반차로", + "node_id": "109000115", + "nxtStn": "쌍문동우이빌라" + }, + { + "stop_nm": "쌍문동청한빌라", + "ycode": "37.657732", + "stop_no": "10201", + "xcode": "127.014762", + "stop_type": "일반차로", + "node_id": "109000116", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "쌍문동우이빌라", + "ycode": "37.6572182406", + "stop_no": "10202", + "xcode": "127.0191018217", + "stop_type": "일반차로", + "node_id": "109000117", + "nxtStn": "초당초등학교" + }, + { + "stop_nm": "쌍문동우이빌라", + "ycode": "37.657407", + "stop_no": "10203", + "xcode": "127.01802", + "stop_type": "일반차로", + "node_id": "109000118", + "nxtStn": "청한빌라" + }, + { + "stop_nm": "초당초등학교", + "ycode": "37.657406", + "stop_no": "10204", + "xcode": "127.023049", + "stop_type": "일반차로", + "node_id": "109000119", + "nxtStn": "방학동우성아파트" + }, + { + "stop_nm": "초당초등학교", + "ycode": "37.657531", + "stop_no": "10205", + "xcode": "127.022295", + "stop_type": "일반차로", + "node_id": "109000120", + "nxtStn": "쌍문동우이빌라" + }, + { + "stop_nm": "방학동우성아파트", + "ycode": "37.6574046264", + "stop_no": "10206", + "xcode": "127.0242705926", + "stop_type": "일반차로", + "node_id": "109000121", + "nxtStn": "청구아파트" + }, + { + "stop_nm": "방학동우성.청구아파트", + "ycode": "37.657656", + "stop_no": "10207", + "xcode": "127.0251", + "stop_type": "일반차로", + "node_id": "109000122", + "nxtStn": "초당초등학교" + }, + { + "stop_nm": "방학3동신동아프라자", + "ycode": "37.6608342669", + "stop_no": "10208", + "xcode": "127.0277400677", + "stop_type": "일반차로", + "node_id": "109000123", + "nxtStn": "대원그린아파트.도봉실버센터" + }, + { + "stop_nm": "방학3동주민센터", + "ycode": "37.6598133715", + "stop_no": "10209", + "xcode": "127.0276286112", + "stop_type": "일반차로", + "node_id": "109000124", + "nxtStn": "방학동성원아파트.방학3동주민센터" + }, + { + "stop_nm": "쌍문동성원아파트", + "ycode": "37.6576477672", + "stop_no": "10210", + "xcode": "127.0289334878", + "stop_type": "일반차로", + "node_id": "109000125", + "nxtStn": "쌍문동한양.현대아파트" + }, + { + "stop_nm": "쌍문동성원아파트", + "ycode": "37.657845", + "stop_no": "10211", + "xcode": "127.028738", + "stop_type": "일반차로", + "node_id": "109000126", + "nxtStn": "세그루학원" + }, + { + "stop_nm": "쌍문동한양.현대아파트", + "ycode": "37.657838", + "stop_no": "10212", + "xcode": "127.031452", + "stop_type": "일반차로", + "node_id": "109000127", + "nxtStn": "쌍문동한양아파트" + }, + { + "stop_nm": "쌍문동현대.한양아파트", + "ycode": "37.6580003804", + "stop_no": "10213", + "xcode": "127.0313205806", + "stop_type": "일반차로", + "node_id": "109000128", + "nxtStn": "쌍문동성원아파트" + }, + { + "stop_nm": "쌍문동삼익금호1차아파트", + "ycode": "37.658051", + "stop_no": "10214", + "xcode": "127.034792", + "stop_type": "일반차로", + "node_id": "109000129", + "nxtStn": "도봉구보건소앞" + }, + { + "stop_nm": "쌍문동금호1차삼익아파트", + "ycode": "37.6582514168", + "stop_no": "10215", + "xcode": "127.0345433384", + "stop_type": "일반차로", + "node_id": "109000130", + "nxtStn": "쌍문동현대.한양아파트" + }, + { + "stop_nm": "도봉구보건소앞", + "ycode": "37.657248", + "stop_no": "10216", + "xcode": "127.03753", + "stop_type": "일반차로", + "node_id": "109000131", + "nxtStn": "도봉구민회관.도봉문화원" + }, + { + "stop_nm": "도봉구보건소앞", + "ycode": "37.6574389797", + "stop_no": "10217", + "xcode": "127.0375891737", + "stop_type": "일반차로", + "node_id": "109000132", + "nxtStn": "쌍문동금호1차삼익아파트" + }, + { + "stop_nm": "북서울교회", + "ycode": "37.6572562221", + "stop_no": "10218", + "xcode": "127.0136533178", + "stop_type": "일반차로", + "node_id": "109000133", + "nxtStn": "동아운수앞" + }, + { + "stop_nm": "서라벌중학교.우이동대우아파트", + "ycode": "37.655025", + "stop_no": "10219", + "xcode": "127.013223", + "stop_type": "일반차로", + "node_id": "109000134", + "nxtStn": "북서울교회" + }, + { + "stop_nm": "덕성여대입구", + "ycode": "37.65106", + "stop_no": "10221", + "xcode": "127.013138", + "stop_type": "일반차로", + "node_id": "109000135", + "nxtStn": "서라벌중학교.우이동대우아파트" + }, + { + "stop_nm": "쌍문초등학교", + "ycode": "37.6469743334", + "stop_no": "10222", + "xcode": "127.0256814814", + "stop_type": "일반차로", + "node_id": "109000136", + "nxtStn": "숭미초등학교" + }, + { + "stop_nm": "쌍문초등학교", + "ycode": "37.647095", + "stop_no": "10223", + "xcode": "127.02539", + "stop_type": "일반차로", + "node_id": "109000137", + "nxtStn": "강북중학교" + }, + { + "stop_nm": "숭미초등학교", + "ycode": "37.649556", + "stop_no": "10224", + "xcode": "127.027789", + "stop_type": "일반차로", + "node_id": "109000138", + "nxtStn": "신일라이프아파트" + }, + { + "stop_nm": "숭미초등학교", + "ycode": "37.649833", + "stop_no": "10225", + "xcode": "127.027818", + "stop_type": "일반차로", + "node_id": "109000139", + "nxtStn": "쌍문1동주민센터" + }, + { + "stop_nm": "둘리뮤지엄.대우이안극동아파트", + "ycode": "37.6517710532", + "stop_no": "10226", + "xcode": "127.02842575", + "stop_type": "일반차로", + "node_id": "109000140", + "nxtStn": "세그루학원" + }, + { + "stop_nm": "둘리뮤지엄.대우이안극동아파트", + "ycode": "37.651532", + "stop_no": "10227", + "xcode": "127.028262", + "stop_type": "일반차로", + "node_id": "109000141", + "nxtStn": "옛고을길입구" + }, + { + "stop_nm": "창동주공1단지", + "ycode": "37.6542705499", + "stop_no": "10228", + "xcode": "127.0410046287", + "stop_type": "일반차로", + "node_id": "109000142", + "nxtStn": "창5동현대1차아파트" + }, + { + "stop_nm": "창동주공1단지아파트", + "ycode": "37.65367", + "stop_no": "10229", + "xcode": "127.040882", + "stop_type": "일반차로", + "node_id": "109000143", + "nxtStn": "서울북부지방법원등기국" + }, + { + "stop_nm": "서울북부지방법원등기국", + "ycode": "37.651106", + "stop_no": "10231", + "xcode": "127.044525", + "stop_type": "일반차로", + "node_id": "109000145", + "nxtStn": "도봉경찰서.창4동주민센터" + }, + { + "stop_nm": "서울북부지방법원등기국", + "ycode": "37.6514245604", + "stop_no": "10232", + "xcode": "127.0445412495", + "stop_type": "일반차로", + "node_id": "109000146", + "nxtStn": "창동주공1단지" + }, + { + "stop_nm": "창동역서측", + "ycode": "37.652335845", + "stop_no": "10234", + "xcode": "127.0461227769", + "stop_type": "일반차로", + "node_id": "109000148", + "nxtStn": "창일중학교" + }, + { + "stop_nm": "창4동주민센터", + "ycode": "37.652513", + "stop_no": "10235", + "xcode": "127.052332", + "stop_type": "일반차로", + "node_id": "109000149", + "nxtStn": "노원구청" + }, + { + "stop_nm": "창4동주민센터", + "ycode": "37.6527469996", + "stop_no": "10236", + "xcode": "127.0519925342", + "stop_type": "일반차로", + "node_id": "109000150", + "nxtStn": "세무서앞" + }, + { + "stop_nm": "창동주공4단지", + "ycode": "37.6451", + "stop_no": "10241", + "xcode": "127.048225", + "stop_type": "일반차로", + "node_id": "109000155", + "nxtStn": "녹천북부역" + }, + { + "stop_nm": "창동주공4단지", + "ycode": "37.6453057413", + "stop_no": "10242", + "xcode": "127.0480754907", + "stop_type": "일반차로", + "node_id": "109000156", + "nxtStn": "도봉문화정보도서관" + }, + { + "stop_nm": "도봉문화정보도서관", + "ycode": "37.644087", + "stop_no": "10244", + "xcode": "127.044358", + "stop_type": "일반차로", + "node_id": "109000158", + "nxtStn": "창동주공4단지" + }, + { + "stop_nm": "도봉문화정보도서관", + "ycode": "37.6442125083", + "stop_no": "10245", + "xcode": "127.0440281367", + "stop_type": "일반차로", + "node_id": "109000159", + "nxtStn": "창림초교창동신창아파트앞" + }, + { + "stop_nm": "창림초교창동신창아파트앞", + "ycode": "37.6415355739", + "stop_no": "10246", + "xcode": "127.0410384214", + "stop_type": "일반차로", + "node_id": "109000160", + "nxtStn": "도봉문화정보도서관" + }, + { + "stop_nm": "창림초교창동신창아파트앞", + "ycode": "37.6416284932", + "stop_no": "10247", + "xcode": "127.0407268539", + "stop_type": "일반차로", + "node_id": "109000161", + "nxtStn": "국립현대미술관창동레지던시" + }, + { + "stop_nm": "국립현대미술관창동레지던시", + "ycode": "37.6398501948", + "stop_no": "10248", + "xcode": "127.0394443113", + "stop_type": "일반차로", + "node_id": "109000162", + "nxtStn": "창림초교창동신창아파트앞" + }, + { + "stop_nm": "국립현대미술관창동레지던시", + "ycode": "37.6404", + "stop_no": "10249", + "xcode": "127.039542", + "stop_type": "일반차로", + "node_id": "109000163", + "nxtStn": "신창.창동시장" + }, + { + "stop_nm": "창동서울탁주앞", + "ycode": "37.637708", + "stop_no": "10250", + "xcode": "127.037383", + "stop_type": "일반차로", + "node_id": "109000164", + "nxtStn": "창동.신창시장" + }, + { + "stop_nm": "창동서울탁주앞", + "ycode": "37.6375883927", + "stop_no": "10251", + "xcode": "127.036931039", + "stop_type": "일반차로", + "node_id": "109000165", + "nxtStn": "우이3교" + }, + { + "stop_nm": "창2동주민센터.보건지소", + "ycode": "37.6408990489", + "stop_no": "10252", + "xcode": "127.0336397512", + "stop_type": "일반차로", + "node_id": "109000166", + "nxtStn": "태영데시앙아파트" + }, + { + "stop_nm": "창2동주민센터.보건지소", + "ycode": "37.640778", + "stop_no": "10253", + "xcode": "127.033467", + "stop_type": "일반차로", + "node_id": "109000167", + "nxtStn": "창번2교앞" + }, + { + "stop_nm": "창2동한일아파트", + "ycode": "37.6461539659", + "stop_no": "10256", + "xcode": "127.0372571163", + "stop_type": "일반차로", + "node_id": "109000170", + "nxtStn": "창동청구빌라" + }, + { + "stop_nm": "창1동제1공영주차장입구", + "ycode": "37.64638", + "stop_no": "10257", + "xcode": "127.037605", + "stop_type": "일반차로", + "node_id": "109000171", + "nxtStn": "KT도봉지점" + }, + { + "stop_nm": "한신아파트101동앞", + "ycode": "37.6459816934", + "stop_no": "10258", + "xcode": "127.0348523274", + "stop_type": "일반차로", + "node_id": "109000172", + "nxtStn": "창2동한일아파트" + }, + { + "stop_nm": "KT도봉지점", + "ycode": "37.646192", + "stop_no": "10259", + "xcode": "127.035125", + "stop_type": "일반차로", + "node_id": "109000173", + "nxtStn": "쌍문역.쌍리단길" + }, + { + "stop_nm": "창동청구빌라", + "ycode": "37.645895", + "stop_no": "10260", + "xcode": "127.039792", + "stop_type": "일반차로", + "node_id": "109000174", + "nxtStn": "창1동제1공영주차장입구" + }, + { + "stop_nm": "창동청구빌라", + "ycode": "37.6461243931", + "stop_no": "10261", + "xcode": "127.0395258217", + "stop_type": "일반차로", + "node_id": "109000175", + "nxtStn": "창성빌라" + }, + { + "stop_nm": "창림초등학교후문", + "ycode": "37.643092", + "stop_no": "10262", + "xcode": "127.040517", + "stop_type": "일반차로", + "node_id": "109000176", + "nxtStn": "대우아파트104동" + }, + { + "stop_nm": "창림초등학교후문", + "ycode": "37.643407", + "stop_no": "10263", + "xcode": "127.040335", + "stop_type": "일반차로", + "node_id": "109000177", + "nxtStn": "국립현대미술관창동레지던시" + }, + { + "stop_nm": "창동대우아파트", + "ycode": "37.6426101856", + "stop_no": "10264", + "xcode": "127.0367159557", + "stop_type": "일반차로", + "node_id": "109000178", + "nxtStn": "창2동주민센터·보건지소" + }, + { + "stop_nm": "창동역동측(도봉방면)", + "ycode": "37.6539743778", + "stop_no": "10265", + "xcode": "127.0499897686", + "stop_type": "일반차로", + "node_id": "109000179", + "nxtStn": "창동농협물류센터" + }, + { + "stop_nm": "창동역동측(노원방면)", + "ycode": "37.653635", + "stop_no": "10266", + "xcode": "127.050183", + "stop_type": "일반차로", + "node_id": "109000180", + "nxtStn": "상계6동우체국" + }, + { + "stop_nm": "서울가든아파트앞", + "ycode": "37.6469310032", + "stop_no": "10269", + "xcode": "127.0442008606", + "stop_type": "일반차로", + "node_id": "109000181", + "nxtStn": "창1동주민센터" + }, + { + "stop_nm": "창1동주민센터", + "ycode": "37.6487636037", + "stop_no": "10270", + "xcode": "127.0430117184", + "stop_type": "일반차로", + "node_id": "109000182", + "nxtStn": "창동주공3단지" + }, + { + "stop_nm": "창1동주민센터", + "ycode": "37.648735", + "stop_no": "10271", + "xcode": "127.042778", + "stop_type": "일반차로", + "node_id": "109000183", + "nxtStn": "도봉문화정보도서관" + }, + { + "stop_nm": "창동주공3단지", + "ycode": "37.650998", + "stop_no": "10272", + "xcode": "127.041717", + "stop_type": "일반차로", + "node_id": "109000184", + "nxtStn": "서울북부지방법원등기국" + }, + { + "stop_nm": "창동주공3단지", + "ycode": "37.6513229545", + "stop_no": "10273", + "xcode": "127.0414767297", + "stop_type": "일반차로", + "node_id": "109000185", + "nxtStn": "창1동주민센터" + }, + { + "stop_nm": "세그루학원", + "ycode": "37.6565423713", + "stop_no": "10276", + "xcode": "127.0279900823", + "stop_type": "일반차로", + "node_id": "109000188", + "nxtStn": "방학3동주민센터" + }, + { + "stop_nm": "세그루학원", + "ycode": "37.6556242091", + "stop_no": "10277", + "xcode": "127.0278333324", + "stop_type": "일반차로", + "node_id": "109000189", + "nxtStn": "둘리뮤지엄.대우이안극동아파트" + }, + { + "stop_nm": "창동주공17단지", + "ycode": "37.6457412104", + "stop_no": "10278", + "xcode": "127.0537656741", + "stop_type": "일반차로", + "node_id": "109000190", + "nxtStn": "마들근린공원.노원에코센터" + }, + { + "stop_nm": "창동주공17단지", + "ycode": "37.646105", + "stop_no": "10279", + "xcode": "127.05361", + "stop_type": "일반차로", + "node_id": "109000191", + "nxtStn": "창동주공4단지" + }, + { + "stop_nm": "창3동염광아트필", + "ycode": "37.6344925058", + "stop_no": "10280", + "xcode": "127.042349857", + "stop_type": "일반차로", + "node_id": "109000192", + "nxtStn": "북서울농협창동지점" + }, + { + "stop_nm": "창3동염광아트빌", + "ycode": "37.634407", + "stop_no": "10281", + "xcode": "127.04252", + "stop_type": "일반차로", + "node_id": "109000193", + "nxtStn": "한승미메이드아파트" + }, + { + "stop_nm": "한승미메이드아파트", + "ycode": "37.633173", + "stop_no": "10282", + "xcode": "127.043635", + "stop_type": "일반차로", + "node_id": "109000194", + "nxtStn": "창3동염광아트필" + }, + { + "stop_nm": "한승미메이드아파트", + "ycode": "37.633177", + "stop_no": "10283", + "xcode": "127.043506", + "stop_type": "일반차로", + "node_id": "109000195", + "nxtStn": "초안아파트.흥화브라운빌아파트" + }, + { + "stop_nm": "북서울농협창동지점", + "ycode": "37.634107", + "stop_no": "10284", + "xcode": "127.04149", + "stop_type": "일반차로", + "node_id": "109000196", + "nxtStn": "신화초교입구" + }, + { + "stop_nm": "북서울농협창동지점", + "ycode": "37.6338519893", + "stop_no": "10285", + "xcode": "127.0412154818", + "stop_type": "일반차로", + "node_id": "109000197", + "nxtStn": "창3동염광아트빌" + }, + { + "stop_nm": "신화초교입구", + "ycode": "37.6337044602", + "stop_no": "10286", + "xcode": "127.0402309119", + "stop_type": "일반차로", + "node_id": "109000198", + "nxtStn": "신창교" + }, + { + "stop_nm": "신화초교입구", + "ycode": "37.6334072452", + "stop_no": "10287", + "xcode": "127.0400822024", + "stop_type": "일반차로", + "node_id": "109000199", + "nxtStn": "북서울농협창동지점" + }, + { + "stop_nm": "서울외국어고등학교", + "ycode": "37.645154", + "stop_no": "10292", + "xcode": "127.052529", + "stop_type": "일반차로", + "node_id": "109900166", + "nxtStn": "녹천역" + }, + { + "stop_nm": "서울외국어고등학교", + "ycode": "37.6452469971", + "stop_no": "10293", + "xcode": "127.0527023636", + "stop_type": "일반차로", + "node_id": "109900165", + "nxtStn": "창동주공18단지" + }, + { + "stop_nm": "방학동도깨비시장입구", + "ycode": "37.665298", + "stop_no": "10294", + "xcode": "127.036817", + "stop_type": "일반차로", + "node_id": "109000206", + "nxtStn": "거성학마을아파트" + }, + { + "stop_nm": "거성학마을아파트", + "ycode": "37.666342", + "stop_no": "10295", + "xcode": "127.03834", + "stop_type": "일반차로", + "node_id": "109000207", + "nxtStn": "도봉새마을금고본점" + }, + { + "stop_nm": "도봉새마을금고본점", + "ycode": "37.667145875", + "stop_no": "10296", + "xcode": "127.0412481803", + "stop_type": "일반차로", + "node_id": "109000208", + "nxtStn": "방학역" + }, + { + "stop_nm": "창5동현대아파트", + "ycode": "37.655623", + "stop_no": "10297", + "xcode": "127.040403", + "stop_type": "일반차로", + "node_id": "109000209", + "nxtStn": "창동주공1단지아파트" + }, + { + "stop_nm": "창5동현대1차아파트", + "ycode": "37.65587", + "stop_no": "10298", + "xcode": "127.040602", + "stop_type": "일반차로", + "node_id": "109000210", + "nxtStn": "도봉구보건소앞" + }, + { + "stop_nm": "창동아이파크", + "ycode": "37.661613", + "stop_no": "10299", + "xcode": "127.046752", + "stop_type": "일반차로", + "node_id": "109000211", + "nxtStn": "창동쌍용아파트" + }, + { + "stop_nm": "창번교", + "ycode": "37.6354839138", + "stop_no": "10301", + "xcode": "127.0384278157", + "stop_type": "일반차로", + "node_id": "108000381", + "nxtStn": "창동서울탁주앞" + }, + { + "stop_nm": "방학3동주민센터", + "ycode": "37.6591681347", + "stop_no": "10302", + "xcode": "127.0279037943", + "stop_type": "일반차로", + "node_id": "109000214", + "nxtStn": "신동아아파트16동" + }, + { + "stop_nm": "도봉동서광아파트", + "ycode": "37.6781990171", + "stop_no": "10303", + "xcode": "127.0494617013", + "stop_type": "일반차로", + "node_id": "109000215", + "nxtStn": "두산아파트.도심공항수락터미널" + }, + { + "stop_nm": "정병원", + "ycode": "37.661947", + "stop_no": "10304", + "xcode": "127.04192", + "stop_type": "일반차로", + "node_id": "109000216", + "nxtStn": "북한산아이파크" + }, + { + "stop_nm": "창동고등학교", + "ycode": "37.651367", + "stop_no": "10305", + "xcode": "127.038457", + "stop_type": "일반차로", + "node_id": "109000217", + "nxtStn": "창동역서측" + }, + { + "stop_nm": "정의여중고입구", + "ycode": "37.650997", + "stop_no": "10306", + "xcode": "127.033138", + "stop_type": "일반차로", + "node_id": "109000218", + "nxtStn": "창동고등학교" + }, + { + "stop_nm": "도깨비시장", + "ycode": "37.665505", + "stop_no": "10309", + "xcode": "127.035503", + "stop_type": "일반차로", + "node_id": "109000221", + "nxtStn": "방학중학교정문" + }, + { + "stop_nm": "방학동도깨비시장", + "ycode": "37.665458", + "stop_no": "10310", + "xcode": "127.03533", + "stop_type": "일반차로", + "node_id": "109000222", + "nxtStn": "방학동신우빌라" + }, + { + "stop_nm": "태영데시앙아파트", + "ycode": "37.642384365", + "stop_no": "10311", + "xcode": "127.0324449266", + "stop_type": "일반차로", + "node_id": "109000223", + "nxtStn": "우이1교앞" + }, + { + "stop_nm": "창번교앞", + "ycode": "37.6354686365", + "stop_no": "10312", + "xcode": "127.03822395", + "stop_type": "일반차로", + "node_id": "109000224", + "nxtStn": "신화초교입구" + }, + { + "stop_nm": "금용아파트", + "ycode": "37.637736706", + "stop_no": "10313", + "xcode": "127.0351770744", + "stop_type": "일반차로", + "node_id": "109000225", + "nxtStn": "창2동주민센터.보건지소" + }, + { + "stop_nm": "창번2교앞", + "ycode": "37.63859", + "stop_no": "10314", + "xcode": "127.034453", + "stop_type": "일반차로", + "node_id": "109000226", + "nxtStn": "창동서울탁주앞" + }, + { + "stop_nm": "대우아파트104동", + "ycode": "37.6432566421", + "stop_no": "10315", + "xcode": "127.038349191", + "stop_type": "일반차로", + "node_id": "109000227", + "nxtStn": "창동대우아파트" + }, + { + "stop_nm": "도봉산입구", + "ycode": "37.687222", + "stop_no": "10317", + "xcode": "127.040693", + "stop_type": "일반차로", + "node_id": "109000228", + "nxtStn": "종점" + }, + { + "stop_nm": "샘말어린이공원", + "ycode": "37.668748", + "stop_no": "10320", + "xcode": "127.031945", + "stop_type": "일반차로", + "node_id": "109000231", + "nxtStn": "안방학동" + }, + { + "stop_nm": "안방학동", + "ycode": "37.6690677721", + "stop_no": "10321", + "xcode": "127.0299513375", + "stop_type": "일반차로", + "node_id": "109000232", + "nxtStn": "샘말어린이공원" + }, + { + "stop_nm": "동아운수앞", + "ycode": "37.658907", + "stop_no": "10325", + "xcode": "127.013997", + "stop_type": "일반차로", + "node_id": "109000236", + "nxtStn": "우이동성원아파트" + }, + { + "stop_nm": "창동.신창시장", + "ycode": "37.6388467098", + "stop_no": "10330", + "xcode": "127.0384760994", + "stop_type": "일반차로", + "node_id": "109000241", + "nxtStn": "국립현대미술관창동레지던시" + }, + { + "stop_nm": "신창.창동시장", + "ycode": "37.63926", + "stop_no": "10331", + "xcode": "127.038458", + "stop_type": "일반차로", + "node_id": "109000242", + "nxtStn": "창동서울탁주앞" + }, + { + "stop_nm": "안방학동", + "ycode": "37.667618", + "stop_no": "10333", + "xcode": "127.03301", + "stop_type": "일반차로", + "node_id": "109000397", + "nxtStn": "방학중학교정문" + }, + { + "stop_nm": "안방학동", + "ycode": "37.667887", + "stop_no": "10334", + "xcode": "127.032893", + "stop_type": "일반차로", + "node_id": "109000396", + "nxtStn": "샘말어린이공원" + }, + { + "stop_nm": "창동농협물류센터", + "ycode": "37.6548949746", + "stop_no": "10335", + "xcode": "127.0500842135", + "stop_type": "일반차로", + "node_id": "109000403", + "nxtStn": "창동역동측" + }, + { + "stop_nm": "태영데시앙아파트", + "ycode": "37.64263", + "stop_no": "10336", + "xcode": "127.031783", + "stop_type": "일반차로", + "node_id": "109000399", + "nxtStn": "창2동주민센터.보건지소" + }, + { + "stop_nm": "방학중학교", + "ycode": "37.666728", + "stop_no": "10337", + "xcode": "127.032371", + "stop_type": "일반차로", + "node_id": "109000400", + "nxtStn": "신방학중학교앞" + }, + { + "stop_nm": "도봉산역광역환승센터", + "ycode": "37.6898762161", + "stop_no": "10339", + "xcode": "127.0444996062", + "stop_type": "일반차로", + "node_id": "109000405", + "nxtStn": "다락원.서울도솔학교앞" + }, + { + "stop_nm": "도봉산역광역환승센터", + "ycode": "37.6899483575", + "stop_no": "10340", + "xcode": "127.0443522431", + "stop_type": "일반차로", + "node_id": "109000406", + "nxtStn": "도봉산역" + }, + { + "stop_nm": "도봉산역광역환승센터", + "ycode": "37.690177", + "stop_no": "10341", + "xcode": "127.044267", + "stop_type": "일반차로", + "node_id": "109000408", + "nxtStn": "종점" + }, + { + "stop_nm": "한국사회봉사회", + "ycode": "37.6618138354", + "stop_no": "10342", + "xcode": "127.0147587067", + "stop_type": "일반차로", + "node_id": "108000384", + "nxtStn": "연산군.정의공주묘" + }, + { + "stop_nm": "한국사회봉사회", + "ycode": "37.662163", + "stop_no": "10343", + "xcode": "127.014675", + "stop_type": "일반차로", + "node_id": "108000385", + "nxtStn": "우이동도선사입구.북한산우이역" + }, + { + "stop_nm": "창동교", + "ycode": "37.65173", + "stop_no": "10411", + "xcode": "127.053249", + "stop_type": "일반차로", + "node_id": "109000414", + "nxtStn": "녹천교" + }, + { + "stop_nm": "창동교", + "ycode": "37.652111", + "stop_no": "10412", + "xcode": "127.053492", + "stop_type": "일반차로", + "node_id": "109000413", + "nxtStn": "노원구청" + }, + { + "stop_nm": "녹천교", + "ycode": "37.644731", + "stop_no": "10413", + "xcode": "127.05452", + "stop_type": "일반차로", + "node_id": "109000416", + "nxtStn": "월계보건지소" + }, + { + "stop_nm": "녹천교", + "ycode": "37.6450344811", + "stop_no": "10414", + "xcode": "127.0549535751", + "stop_type": "일반차로", + "node_id": "109000415", + "nxtStn": "창동교" + }, + { + "stop_nm": "도봉여성센터", + "ycode": "37.6628827003", + "stop_no": "10502", + "xcode": "127.0302537587", + "stop_type": "마을버스", + "node_id": "109900006", + "nxtStn": "방학3동신동아프라자" + }, + { + "stop_nm": "한일병원", + "ycode": "37.645868972", + "stop_no": "10503", + "xcode": "127.0284574972", + "stop_type": "마을버스", + "node_id": "109900114", + "nxtStn": "한일병원입구" + }, + { + "stop_nm": "동익아파트", + "ycode": "37.6506949897", + "stop_no": "10504", + "xcode": "127.0252305774", + "stop_type": "마을버스", + "node_id": "109900007", + "nxtStn": "용호약국" + }, + { + "stop_nm": "꽃동네", + "ycode": "37.6527572122", + "stop_no": "10505", + "xcode": "127.022498822", + "stop_type": "마을버스", + "node_id": "109900104", + "nxtStn": "에덴약국" + }, + { + "stop_nm": "한일병원입구", + "ycode": "37.6445614593", + "stop_no": "10509", + "xcode": "127.0286428437", + "stop_type": "마을버스", + "node_id": "109900002", + "nxtStn": "우이1교앞" + }, + { + "stop_nm": "용호약국", + "ycode": "37.6499633172", + "stop_no": "10510", + "xcode": "127.025211064", + "stop_type": "마을버스", + "node_id": "109900001", + "nxtStn": "사거리슈퍼" + }, + { + "stop_nm": "에덴약국", + "ycode": "37.6514369621", + "stop_no": "10511", + "xcode": "127.0233665374", + "stop_type": "마을버스", + "node_id": "109900003", + "nxtStn": "쌍문1동현대아파트" + }, + { + "stop_nm": "청한빌라", + "ycode": "37.6572646786", + "stop_no": "10512", + "xcode": "127.0151682419", + "stop_type": "마을버스", + "node_id": "109900102", + "nxtStn": "우이성당" + }, + { + "stop_nm": "사거리슈퍼", + "ycode": "37.6497379178", + "stop_no": "10515", + "xcode": "127.0258093606", + "stop_type": "마을버스", + "node_id": "109900100", + "nxtStn": "믿음주유소" + }, + { + "stop_nm": "쌍문1동현대아파트", + "ycode": "37.6505864786", + "stop_no": "10516", + "xcode": "127.0226715612", + "stop_type": "마을버스", + "node_id": "109900099", + "nxtStn": "오복슈퍼" + }, + { + "stop_nm": "우이성당", + "ycode": "37.655704", + "stop_no": "10517", + "xcode": "127.015745", + "stop_type": "마을버스", + "node_id": "109900105", + "nxtStn": "약초원.동아슈퍼" + }, + { + "stop_nm": "방학동성원아파트.방학3동주민센터", + "ycode": "37.6586933171", + "stop_no": "10519", + "xcode": "127.0276882672", + "stop_type": "마을버스", + "node_id": "109900098", + "nxtStn": "세그루학원" + }, + { + "stop_nm": "믿음주유소", + "ycode": "37.6493746259", + "stop_no": "10521", + "xcode": "127.0265163993", + "stop_type": "마을버스", + "node_id": "109900097", + "nxtStn": "쌍문1동주민센터" + }, + { + "stop_nm": "오복슈퍼", + "ycode": "37.6495384245", + "stop_no": "10522", + "xcode": "127.0231778182", + "stop_type": "마을버스", + "node_id": "109900096", + "nxtStn": "코오롱아파트.덕성여대기숙사" + }, + { + "stop_nm": "쌍문1동주민센터", + "ycode": "37.6482095603", + "stop_no": "10526", + "xcode": "127.0263788608", + "stop_type": "마을버스", + "node_id": "109900094", + "nxtStn": "쌍문초등학교" + }, + { + "stop_nm": "환승장.기숙사", + "ycode": "37.6489176294", + "stop_no": "10527", + "xcode": "127.0229271728", + "stop_type": "마을버스", + "node_id": "109900093", + "nxtStn": "쌍문초등학교" + }, + { + "stop_nm": "덕성여대후문.효문중고교앞", + "ycode": "37.6526914381", + "stop_no": "10528", + "xcode": "127.0171019004", + "stop_type": "마을버스", + "node_id": "109900092", + "nxtStn": "효문중학교" + }, + { + "stop_nm": "창동아이파크", + "ycode": "37.6612378102", + "stop_no": "10529", + "xcode": "127.0478602057", + "stop_type": "마을버스", + "node_id": "109900140", + "nxtStn": "서울문화고등학교" + }, + { + "stop_nm": "도봉구보건소앞", + "ycode": "37.6573821506", + "stop_no": "10531", + "xcode": "127.0377806894", + "stop_type": "마을버스", + "node_id": "109900090", + "nxtStn": "시립도봉노인종합복지관" + }, + { + "stop_nm": "쌍문초등학교", + "ycode": "37.647649", + "stop_no": "10532", + "xcode": "127.025013", + "stop_type": "마을버스", + "node_id": "109900089", + "nxtStn": "미래빌라" + }, + { + "stop_nm": "쌍문1치안센터", + "ycode": "37.6500958249", + "stop_no": "10533", + "xcode": "127.0202835758", + "stop_type": "마을버스", + "node_id": "109900106", + "nxtStn": "경기푸른미래관" + }, + { + "stop_nm": "신일라이프아파트", + "ycode": "37.6506912973", + "stop_no": "10535", + "xcode": "127.0294951701", + "stop_type": "마을버스", + "node_id": "109900115", + "nxtStn": "엘지전자" + }, + { + "stop_nm": "시립도봉노인종합복지관", + "ycode": "37.6581010105", + "stop_no": "10536", + "xcode": "127.0355267033", + "stop_type": "마을버스", + "node_id": "109900111", + "nxtStn": "쌍문동금호1차삼익아파트" + }, + { + "stop_nm": "경기푸른미래관", + "ycode": "37.649549", + "stop_no": "10537", + "xcode": "127.021968", + "stop_type": "마을버스", + "node_id": "109900107", + "nxtStn": "코오롱아파트.덕성여대기숙사" + }, + { + "stop_nm": "방학삼성래미안1단지아파트", + "ycode": "37.6673955059", + "stop_no": "10540", + "xcode": "127.0462737888", + "stop_type": "마을버스", + "node_id": "109900087", + "nxtStn": "도봉구청" + }, + { + "stop_nm": "소피아호텔", + "ycode": "37.651121436", + "stop_no": "10541", + "xcode": "127.0349113945", + "stop_type": "마을버스", + "node_id": "109900086", + "nxtStn": "창동고등학교" + }, + { + "stop_nm": "쌍문동현대1차아파트", + "ycode": "37.6580622671", + "stop_no": "10542", + "xcode": "127.0323860104", + "stop_type": "마을버스", + "node_id": "109900085", + "nxtStn": "쌍문동현대.한양아파트" + }, + { + "stop_nm": "미래빌라", + "ycode": "37.64797", + "stop_no": "10546", + "xcode": "127.026463", + "stop_type": "마을버스", + "node_id": "109900084", + "nxtStn": "숭미초등학교" + }, + { + "stop_nm": "도봉중학교.서원아파트", + "ycode": "37.6712739361", + "stop_no": "10549", + "xcode": "127.0457717409", + "stop_type": "마을버스", + "node_id": "109900083", + "nxtStn": "천주교도봉동교회" + }, + { + "stop_nm": "창동한신아파트", + "ycode": "37.6459961514", + "stop_no": "10550", + "xcode": "127.0347140807", + "stop_type": "마을버스", + "node_id": "109900131", + "nxtStn": "창동중앙약국" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.6579159925", + "stop_no": "10551", + "xcode": "127.0301168678", + "stop_type": "마을버스", + "node_id": "109900082", + "nxtStn": "선덕사거리.세그루학원입구" + }, + { + "stop_nm": "세무서앞", + "ycode": "37.6532890093", + "stop_no": "10553", + "xcode": "127.0509355099", + "stop_type": "마을버스", + "node_id": "109900081", + "nxtStn": "창동역동측" + }, + { + "stop_nm": "창동중앙약국", + "ycode": "37.6461540013", + "stop_no": "10556", + "xcode": "127.0371449268", + "stop_type": "마을버스", + "node_id": "109900132", + "nxtStn": "창동청구빌라" + }, + { + "stop_nm": "선덕사거리.세그루학원입구", + "ycode": "37.657803811", + "stop_no": "10557", + "xcode": "127.028285241", + "stop_type": "마을버스", + "node_id": "109900080", + "nxtStn": "청구아파트" + }, + { + "stop_nm": "서울북부지방검찰청.한양수자인아파트", + "ycode": "37.6746701716", + "stop_no": "10560", + "xcode": "127.0472921515", + "stop_type": "마을버스", + "node_id": "109900078", + "nxtStn": "서울북부지방법원.검찰청.성우아파트" + }, + { + "stop_nm": "오봉초등학교", + "ycode": "37.6710237818", + "stop_no": "10561", + "xcode": "127.0398564343", + "stop_type": "마을버스", + "node_id": "109900077", + "nxtStn": "시온슈퍼" + }, + { + "stop_nm": "방학3동주민센터", + "ycode": "37.6584636075", + "stop_no": "10563", + "xcode": "127.0274082286", + "stop_type": "마을버스", + "node_id": "109900123", + "nxtStn": "김수영문학관" + }, + { + "stop_nm": "청구아파트", + "ycode": "37.6577150088", + "stop_no": "10564", + "xcode": "127.0265443002", + "stop_type": "마을버스", + "node_id": "109900076", + "nxtStn": "방학동우성.청구아파트" + }, + { + "stop_nm": "엘지전자", + "ycode": "37.6508502983", + "stop_no": "10565", + "xcode": "127.0313946417", + "stop_type": "마을버스", + "node_id": "109900075", + "nxtStn": "정의여중고입구" + }, + { + "stop_nm": "시온슈퍼", + "ycode": "37.6728138601", + "stop_no": "10568", + "xcode": "127.0409094029", + "stop_type": "마을버스", + "node_id": "109900074", + "nxtStn": "부부슈퍼" + }, + { + "stop_nm": "창성빌라", + "ycode": "37.6441949149", + "stop_no": "10569", + "xcode": "127.040308972", + "stop_type": "마을버스", + "node_id": "109900137", + "nxtStn": "대우아파트104동" + }, + { + "stop_nm": "김수영문학관", + "ycode": "37.6594246503", + "stop_no": "10570", + "xcode": "127.0251961284", + "stop_type": "마을버스", + "node_id": "109900073", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "서울북부지방법원", + "ycode": "37.677670178", + "stop_no": "10572", + "xcode": "127.0492414111", + "stop_type": "마을버스", + "node_id": "109900072", + "nxtStn": "도봉역" + }, + { + "stop_nm": "부부슈퍼", + "ycode": "37.6744514399", + "stop_no": "10573", + "xcode": "127.0425393678", + "stop_type": "마을버스", + "node_id": "109900071", + "nxtStn": "삼거리슈퍼" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.6583226778", + "stop_no": "10575", + "xcode": "127.0249781408", + "stop_type": "마을버스", + "node_id": "109900126", + "nxtStn": "방학3동주민센터" + }, + { + "stop_nm": "삼거리슈퍼", + "ycode": "37.675670191", + "stop_no": "10578", + "xcode": "127.0436465315", + "stop_type": "마을버스", + "node_id": "109900069", + "nxtStn": "성황당" + }, + { + "stop_nm": "방학3동주민센터", + "ycode": "37.6583221264", + "stop_no": "10580", + "xcode": "127.0274591801", + "stop_type": "마을버스", + "node_id": "109900068", + "nxtStn": "금호타운" + }, + { + "stop_nm": "믿음주유소", + "ycode": "37.6493926166", + "stop_no": "10582", + "xcode": "127.0266535322", + "stop_type": "마을버스", + "node_id": "109900067", + "nxtStn": "사거리슈퍼앞" + }, + { + "stop_nm": "쌍문초등학교", + "ycode": "37.64783", + "stop_no": "10583", + "xcode": "127.024913", + "stop_type": "마을버스", + "node_id": "109900066", + "nxtStn": "코오롱아파트.덕성여대기숙사" + }, + { + "stop_nm": "창동고등학교", + "ycode": "37.6512502397", + "stop_no": "10584", + "xcode": "127.0379917772", + "stop_type": "마을버스", + "node_id": "109900134", + "nxtStn": "서울북부지방법원등기국" + }, + { + "stop_nm": "도봉역", + "ycode": "37.6809875292", + "stop_no": "10585", + "xcode": "127.0457799763", + "stop_type": "마을버스", + "node_id": "109900065", + "nxtStn": "대우.삼성서비스센터" + }, + { + "stop_nm": "성황당", + "ycode": "37.6771875559", + "stop_no": "10586", + "xcode": "127.0437721274", + "stop_type": "마을버스", + "node_id": "109900149", + "nxtStn": "도봉1동주민센터.럭키아파트" + }, + { + "stop_nm": "창2동주민센터·보건지소", + "ycode": "37.6423381849", + "stop_no": "10587", + "xcode": "127.0357876148", + "stop_type": "마을버스", + "node_id": "109900064", + "nxtStn": "창2동건영아파트" + }, + { + "stop_nm": "금호타운", + "ycode": "37.6576773905", + "stop_no": "10588", + "xcode": "127.0293879937", + "stop_type": "마을버스", + "node_id": "109900117", + "nxtStn": "쌍문동한양.현대아파트" + }, + { + "stop_nm": "사거리슈퍼앞", + "ycode": "37.6497982681", + "stop_no": "10590", + "xcode": "127.0259102437", + "stop_type": "마을버스", + "node_id": "109900062", + "nxtStn": "용호약국" + }, + { + "stop_nm": "대우.삼성서비스센터", + "ycode": "37.683131", + "stop_no": "10592", + "xcode": "127.047119", + "stop_type": "마을버스", + "node_id": "109900061", + "nxtStn": "유원극동아파트" + }, + { + "stop_nm": "도봉1동주민센터.럭키아파트", + "ycode": "37.678620287", + "stop_no": "10593", + "xcode": "127.0437151494", + "stop_type": "마을버스", + "node_id": "109900150", + "nxtStn": "도봉1파출소" + }, + { + "stop_nm": "창2동건영아파트", + "ycode": "37.6407674519", + "stop_no": "10594", + "xcode": "127.0337768025", + "stop_type": "마을버스", + "node_id": "109900060", + "nxtStn": "태영데시앙아파트" + }, + { + "stop_nm": "용호약국", + "ycode": "37.6500858758", + "stop_no": "10597", + "xcode": "127.0251555744", + "stop_type": "마을버스", + "node_id": "109900058", + "nxtStn": "종점" + }, + { + "stop_nm": "오복슈퍼", + "ycode": "37.6496014864", + "stop_no": "10598", + "xcode": "127.0232469679", + "stop_type": "마을버스", + "node_id": "109900057", + "nxtStn": "쌍문1동현대아파트" + }, + { + "stop_nm": "도봉경찰서.창4동주민센터", + "ycode": "37.6523110123", + "stop_no": "10599", + "xcode": "127.0516851003", + "stop_type": "마을버스", + "node_id": "109900056", + "nxtStn": "창동농협물류센터" + }, + { + "stop_nm": "유원극동아파트", + "ycode": "37.6827010175", + "stop_no": "10600", + "xcode": "127.0489114044", + "stop_type": "마을버스", + "node_id": "109900055", + "nxtStn": "한신아파트후문" + }, + { + "stop_nm": "도봉1파출소", + "ycode": "37.67952", + "stop_no": "10604", + "xcode": "127.043648", + "stop_type": "마을버스", + "node_id": "109900151", + "nxtStn": "윤성빌라.다리앞" + }, + { + "stop_nm": "쌍문동한양아파트", + "ycode": "37.657868485", + "stop_no": "10612", + "xcode": "127.0325684045", + "stop_type": "마을버스", + "node_id": "109900054", + "nxtStn": "쌍문동삼익금호1차아파트" + }, + { + "stop_nm": "거성학마을아파트", + "ycode": "37.6662550301", + "stop_no": "10617", + "xcode": "127.0378894716", + "stop_type": "일반차로", + "node_id": "109000394", + "nxtStn": "방학동도깨비시장입구" + }, + { + "stop_nm": "쌍문1동현대아파트", + "ycode": "37.6505188837", + "stop_no": "10637", + "xcode": "127.0227440715", + "stop_type": "마을버스", + "node_id": "109900053", + "nxtStn": "에덴약국" + }, + { + "stop_nm": "한신아파트후문", + "ycode": "37.6838280147", + "stop_no": "10638", + "xcode": "127.0495039881", + "stop_type": "마을버스", + "node_id": "109900052", + "nxtStn": "도봉파크빌2단지" + }, + { + "stop_nm": "창북중학교", + "ycode": "37.6515935012", + "stop_no": "10657", + "xcode": "127.0381460822", + "stop_type": "일반차로", + "node_id": "109000293", + "nxtStn": "소피아호텔" + }, + { + "stop_nm": "윤성빌라.다리앞", + "ycode": "37.6790145516", + "stop_no": "10667", + "xcode": "127.0423594433", + "stop_type": "마을버스", + "node_id": "109900051", + "nxtStn": "도봉초등학교" + }, + { + "stop_nm": "에덴약국", + "ycode": "37.6513747708", + "stop_no": "10697", + "xcode": "127.0234515159", + "stop_type": "마을버스", + "node_id": "109900050", + "nxtStn": "종점" + }, + { + "stop_nm": "도봉파크빌2단지", + "ycode": "37.6842317103", + "stop_no": "10698", + "xcode": "127.0515734531", + "stop_type": "마을버스", + "node_id": "109900049", + "nxtStn": "누원고등학교.한신아파트정문" + }, + { + "stop_nm": "녹천북부역", + "ycode": "37.645672", + "stop_no": "10700", + "xcode": "127.050588", + "stop_type": "마을버스", + "node_id": "109900170", + "nxtStn": "창1동대우그린아파트" + }, + { + "stop_nm": "창1동대우그린아파트", + "ycode": "37.6469959833", + "stop_no": "10701", + "xcode": "127.0486325542", + "stop_type": "마을버스", + "node_id": "109900171", + "nxtStn": "창일중학교" + }, + { + "stop_nm": "창일중학교", + "ycode": "37.6486610411", + "stop_no": "10702", + "xcode": "127.047867374", + "stop_type": "마을버스", + "node_id": "109900172", + "nxtStn": "창동역서측" + }, + { + "stop_nm": "창동역서측", + "ycode": "37.6523291893", + "stop_no": "10703", + "xcode": "127.0463383955", + "stop_type": "마을버스", + "node_id": "109900173", + "nxtStn": "상아아파트" + }, + { + "stop_nm": "상아아파트", + "ycode": "37.653057", + "stop_no": "10704", + "xcode": "127.043215", + "stop_type": "마을버스", + "node_id": "109900174", + "nxtStn": "창동주공1단지" + }, + { + "stop_nm": "옛고을길입구", + "ycode": "37.6508570874", + "stop_no": "10705", + "xcode": "127.0315854369", + "stop_type": "마을버스", + "node_id": "109900175", + "nxtStn": "정의여중고입구" + }, + { + "stop_nm": "창일중학교", + "ycode": "37.649152", + "stop_no": "10706", + "xcode": "127.047398", + "stop_type": "마을버스", + "node_id": "109900176", + "nxtStn": "주공4단지후문" + }, + { + "stop_nm": "주공4단지후문", + "ycode": "37.646858824", + "stop_no": "10707", + "xcode": "127.0483171871", + "stop_type": "마을버스", + "node_id": "109900177", + "nxtStn": "창동주공4단지" + }, + { + "stop_nm": "창동아이파크", + "ycode": "37.660955", + "stop_no": "10710", + "xcode": "127.047165", + "stop_type": "마을버스", + "node_id": "109900167", + "nxtStn": "북한산아이파크" + }, + { + "stop_nm": "북한산아이파크", + "ycode": "37.659193", + "stop_no": "10711", + "xcode": "127.04191", + "stop_type": "마을버스", + "node_id": "109900168", + "nxtStn": "방학사거리" + }, + { + "stop_nm": "북한산아이파크", + "ycode": "37.659079", + "stop_no": "10713", + "xcode": "127.042117", + "stop_type": "마을버스", + "node_id": "109000410", + "nxtStn": "창동아이파크" + }, + { + "stop_nm": "창동아이파크", + "ycode": "37.661037", + "stop_no": "10714", + "xcode": "127.047497", + "stop_type": "마을버스", + "node_id": "109900169", + "nxtStn": "창동쌍용아파트" + }, + { + "stop_nm": "도봉초등학교", + "ycode": "37.67847", + "stop_no": "10722", + "xcode": "127.040717", + "stop_type": "마을버스", + "node_id": "109900152", + "nxtStn": "부대앞" + }, + { + "stop_nm": "도봉구보건소앞", + "ycode": "37.6571578082", + "stop_no": "10726", + "xcode": "127.0376989713", + "stop_type": "마을버스", + "node_id": "109900113", + "nxtStn": "도봉구민회관.도봉문화원" + }, + { + "stop_nm": "경기푸른미래관", + "ycode": "37.649656", + "stop_no": "10734", + "xcode": "127.022036", + "stop_type": "마을버스", + "node_id": "109900108", + "nxtStn": "쌍문1치안센터" + }, + { + "stop_nm": "서원아파트", + "ycode": "37.6716952848", + "stop_no": "10735", + "xcode": "127.0466777586", + "stop_type": "일반차로", + "node_id": "109000361", + "nxtStn": "서울북부지방검찰청.한양수자인아파트" + }, + { + "stop_nm": "창동이마트", + "ycode": "37.6513329248", + "stop_no": "10736", + "xcode": "127.0461708888", + "stop_type": "마을버스", + "node_id": "109900135", + "nxtStn": "창북중학교" + }, + { + "stop_nm": "누원고등학교.한신아파트정문", + "ycode": "37.6858016495", + "stop_no": "10737", + "xcode": "127.0509577365", + "stop_type": "마을버스", + "node_id": "109900048", + "nxtStn": "수락리버시티3.4단지" + }, + { + "stop_nm": "서울문화고등학교", + "ycode": "37.6636468356", + "stop_no": "10740", + "xcode": "127.0467520626", + "stop_type": "일반차로", + "node_id": "109000364", + "nxtStn": "방학1동대상타운현대삼성아파트" + }, + { + "stop_nm": "부대앞", + "ycode": "37.6781182487", + "stop_no": "10744", + "xcode": "127.0389713981", + "stop_type": "마을버스", + "node_id": "109900153", + "nxtStn": "무수골" + }, + { + "stop_nm": "소피아호텔", + "ycode": "37.6513619627", + "stop_no": "10745", + "xcode": "127.0351189022", + "stop_type": "마을버스", + "node_id": "109900047", + "nxtStn": "정의여중고" + }, + { + "stop_nm": "청구아파트", + "ycode": "37.6575159", + "stop_no": "10747", + "xcode": "127.0264127549", + "stop_type": "마을버스", + "node_id": "109900046", + "nxtStn": "금호타운" + }, + { + "stop_nm": "쌍문1치안센터", + "ycode": "37.6501841", + "stop_no": "10754", + "xcode": "127.0204615261", + "stop_type": "마을버스", + "node_id": "109900109", + "nxtStn": "효문중학교" + }, + { + "stop_nm": "무수골", + "ycode": "37.6777532993", + "stop_no": "10757", + "xcode": "127.0361868209", + "stop_type": "마을버스", + "node_id": "109900045", + "nxtStn": "부대앞" + }, + { + "stop_nm": "정의여중고", + "ycode": "37.6512012464", + "stop_no": "10775", + "xcode": "127.0331242114", + "stop_type": "마을버스", + "node_id": "109900044", + "nxtStn": "엘지전자" + }, + { + "stop_nm": "덕성여대후문.효문중고교앞", + "ycode": "37.6527716123", + "stop_no": "10777", + "xcode": "127.0172526514", + "stop_type": "마을버스", + "node_id": "109900042", + "nxtStn": "약초원.동아슈퍼" + }, + { + "stop_nm": "부대앞", + "ycode": "37.6780200195", + "stop_no": "10778", + "xcode": "127.0390076255", + "stop_type": "마을버스", + "node_id": "109900154", + "nxtStn": "도봉초등학교" + }, + { + "stop_nm": "신일라이프아파트", + "ycode": "37.6509462068", + "stop_no": "10779", + "xcode": "127.0298771931", + "stop_type": "마을버스", + "node_id": "109900041", + "nxtStn": "숭미초등학교" + }, + { + "stop_nm": "약초원.동아슈퍼", + "ycode": "37.6545604185", + "stop_no": "10780", + "xcode": "127.0160925096", + "stop_type": "마을버스", + "node_id": "109900040", + "nxtStn": "우이성당" + }, + { + "stop_nm": "도봉초등학교", + "ycode": "37.6783177932", + "stop_no": "10781", + "xcode": "127.0404396652", + "stop_type": "마을버스", + "node_id": "109900039", + "nxtStn": "윤성빌라.다리앞" + }, + { + "stop_nm": "우이1교", + "ycode": "37.643926", + "stop_no": "10783", + "xcode": "127.031755", + "stop_type": "마을버스", + "node_id": "109900038", + "nxtStn": "한일병원입구" + }, + { + "stop_nm": "우이성당", + "ycode": "37.6560328264", + "stop_no": "10784", + "xcode": "127.0157596144", + "stop_type": "마을버스", + "node_id": "109900037", + "nxtStn": "청한빌라" + }, + { + "stop_nm": "엘지전자", + "ycode": "37.6510629639", + "stop_no": "10785", + "xcode": "127.0313539323", + "stop_type": "마을버스", + "node_id": "109900036", + "nxtStn": "신일라이프아파트" + }, + { + "stop_nm": "한신아파트정문", + "ycode": "37.6864731679", + "stop_no": "10786", + "xcode": "127.0504502354", + "stop_type": "마을버스", + "node_id": "109900035", + "nxtStn": "도봉파크빌3단지" + }, + { + "stop_nm": "윤성빌라.다리앞", + "ycode": "37.6789379513", + "stop_no": "10787", + "xcode": "127.0423843417", + "stop_type": "마을버스", + "node_id": "109900034", + "nxtStn": "도봉1파출소" + }, + { + "stop_nm": "한일병원입구", + "ycode": "37.6444216622", + "stop_no": "10789", + "xcode": "127.0291719949", + "stop_type": "마을버스", + "node_id": "109900033", + "nxtStn": "종점" + }, + { + "stop_nm": "청한빌라", + "ycode": "37.6573106168", + "stop_no": "10790", + "xcode": "127.0152985919", + "stop_type": "마을버스", + "node_id": "109900032", + "nxtStn": "법종사" + }, + { + "stop_nm": "도봉파크빌3단지", + "ycode": "37.6879883235", + "stop_no": "10791", + "xcode": "127.0493865639", + "stop_type": "마을버스", + "node_id": "109900031", + "nxtStn": "도봉산역" + }, + { + "stop_nm": "도봉1파출소", + "ycode": "37.6795575228", + "stop_no": "10792", + "xcode": "127.0433971197", + "stop_type": "마을버스", + "node_id": "109900030", + "nxtStn": "도봉1동주민센터.럭키아파트" + }, + { + "stop_nm": "도봉1동주민센터.럭키아파트", + "ycode": "37.6786374607", + "stop_no": "10797", + "xcode": "127.0435711769", + "stop_type": "마을버스", + "node_id": "109900155", + "nxtStn": "성황당" + }, + { + "stop_nm": "신동아아파트16동", + "ycode": "37.6601962887", + "stop_no": "10798", + "xcode": "127.027803303", + "stop_type": "마을버스", + "node_id": "109900029", + "nxtStn": "방학3동신동아프라자" + }, + { + "stop_nm": "도봉산역", + "ycode": "37.6893500743", + "stop_no": "10799", + "xcode": "127.0466117182", + "stop_type": "마을버스", + "node_id": "109900028", + "nxtStn": "도봉파크빌3단지" + }, + { + "stop_nm": "성황당", + "ycode": "37.6769488243", + "stop_no": "10800", + "xcode": "127.0436280078", + "stop_type": "마을버스", + "node_id": "109900027", + "nxtStn": "삼거리슈퍼" + }, + { + "stop_nm": "도봉파크빌3단지", + "ycode": "37.6879397664", + "stop_no": "10802", + "xcode": "127.0491450189", + "stop_type": "마을버스", + "node_id": "109900025", + "nxtStn": "한신아파트정문" + }, + { + "stop_nm": "삼거리슈퍼", + "ycode": "37.6755926524", + "stop_no": "10803", + "xcode": "127.0434480274", + "stop_type": "마을버스", + "node_id": "109900024", + "nxtStn": "부부슈퍼" + }, + { + "stop_nm": "대원그린아파트.도봉실버센터", + "ycode": "37.6625589484", + "stop_no": "10804", + "xcode": "127.0276624996", + "stop_type": "마을버스", + "node_id": "109900125", + "nxtStn": "방학동극동아파트.방학동천주교성당" + }, + { + "stop_nm": "부부슈퍼", + "ycode": "37.674596518", + "stop_no": "10805", + "xcode": "127.0425258468", + "stop_type": "마을버스", + "node_id": "109900023", + "nxtStn": "시온슈퍼" + }, + { + "stop_nm": "방학동극동아파트.방학동천주교성당", + "ycode": "37.6636518246", + "stop_no": "10806", + "xcode": "127.0282160499", + "stop_type": "마을버스", + "node_id": "109900022", + "nxtStn": "방학중학교" + }, + { + "stop_nm": "시온슈퍼", + "ycode": "37.6731273774", + "stop_no": "10807", + "xcode": "127.0410739524", + "stop_type": "마을버스", + "node_id": "109900021", + "nxtStn": "오봉초등학교" + }, + { + "stop_nm": "방학중학교", + "ycode": "37.6666528006", + "stop_no": "10808", + "xcode": "127.0325922954", + "stop_type": "일반차로", + "node_id": "109000411", + "nxtStn": "방학2동주민센터" + }, + { + "stop_nm": "오봉초등학교", + "ycode": "37.6710355447", + "stop_no": "10809", + "xcode": "127.0397113391", + "stop_type": "마을버스", + "node_id": "109900020", + "nxtStn": "천주교도봉동교회" + }, + { + "stop_nm": "누원고등학교.한신아파트정문", + "ycode": "37.6856747197", + "stop_no": "10810", + "xcode": "127.0506753264", + "stop_type": "마을버스", + "node_id": "109900019", + "nxtStn": "도봉파크빌2단지앞" + }, + { + "stop_nm": "도봉파크빌2단지앞", + "ycode": "37.684151", + "stop_no": "10812", + "xcode": "127.051338", + "stop_type": "마을버스", + "node_id": "109900018", + "nxtStn": "극동유원아파트후문" + }, + { + "stop_nm": "도봉중학교.서원아파트", + "ycode": "37.670555", + "stop_no": "10813", + "xcode": "127.046316", + "stop_type": "마을버스", + "node_id": "109900017", + "nxtStn": "도봉구청" + }, + { + "stop_nm": "극동유원아파트후문", + "ycode": "37.6820001335", + "stop_no": "10814", + "xcode": "127.050685298", + "stop_type": "마을버스", + "node_id": "109900016", + "nxtStn": "삼환아파트후문" + }, + { + "stop_nm": "삼환아파트후문", + "ycode": "37.6802200817", + "stop_no": "10816", + "xcode": "127.0495741502", + "stop_type": "마을버스", + "node_id": "109900103", + "nxtStn": "삼환.동아에코빌아파트" + }, + { + "stop_nm": "삼환.동아에코빌아파트", + "ycode": "37.6805570067", + "stop_no": "10818", + "xcode": "127.0475733049", + "stop_type": "마을버스", + "node_id": "109900014", + "nxtStn": "성대야구장노원교앞" + }, + { + "stop_nm": "대상타운현대아파트", + "ycode": "37.665799", + "stop_no": "10819", + "xcode": "127.046214", + "stop_type": "마을버스", + "node_id": "109900013", + "nxtStn": "서울문화고등학교" + }, + { + "stop_nm": "서울문화고등학교", + "ycode": "37.663969", + "stop_no": "10821", + "xcode": "127.046483", + "stop_type": "마을버스", + "node_id": "109900012", + "nxtStn": "창동아이파크" + }, + { + "stop_nm": "서울북부지방법원", + "ycode": "37.6769856293", + "stop_no": "10822", + "xcode": "127.0485936182", + "stop_type": "마을버스", + "node_id": "109900011", + "nxtStn": "서울북부지방법원.검찰청.성우아파트" + }, + { + "stop_nm": "서울북부지방검찰청.한양수자인아파트", + "ycode": "37.6747299568", + "stop_no": "10826", + "xcode": "127.0470617037", + "stop_type": "마을버스", + "node_id": "109900161", + "nxtStn": "하나약국" + }, + { + "stop_nm": "하나약국", + "ycode": "37.6724630827", + "stop_no": "10828", + "xcode": "127.046473053", + "stop_type": "마을버스", + "node_id": "109900162", + "nxtStn": "도봉중학교.서원아파트" + }, + { + "stop_nm": "한신아파트정문", + "ycode": "37.686613", + "stop_no": "10831", + "xcode": "127.050075", + "stop_type": "일반차로", + "node_id": "109000412", + "nxtStn": "수락리버시티3.4단지" + }, + { + "stop_nm": "약초원.동아슈퍼", + "ycode": "37.654286", + "stop_no": "10834", + "xcode": "127.016021", + "stop_type": "마을버스", + "node_id": "109900010", + "nxtStn": "덕성여대후문.효문중고교앞" + }, + { + "stop_nm": "환승장.기숙사", + "ycode": "37.6488535848", + "stop_no": "10836", + "xcode": "127.0232739332", + "stop_type": "마을버스", + "node_id": "109900009", + "nxtStn": "경기푸른미래관" + }, + { + "stop_nm": "법종사", + "ycode": "37.6572458455", + "stop_no": "10838", + "xcode": "127.0183105701", + "stop_type": "마을버스", + "node_id": "109900008", + "nxtStn": "종점" + }, + { + "stop_nm": "효문중학교", + "ycode": "37.651528", + "stop_no": "10841", + "xcode": "127.01862", + "stop_type": "마을버스", + "node_id": "109900178", + "nxtStn": "덕성여대후문.효문중고교앞" + }, + { + "stop_nm": "효문중학교", + "ycode": "37.651493", + "stop_no": "10842", + "xcode": "127.018379", + "stop_type": "마을버스", + "node_id": "109900179", + "nxtStn": "쌍문1치안센터" + }, + { + "stop_nm": "도봉중학교후문", + "ycode": "37.6711168303", + "stop_no": "10843", + "xcode": "127.0450448623", + "stop_type": "마을버스", + "node_id": "109900180", + "nxtStn": "도봉중학교.서원아파트" + }, + { + "stop_nm": "방학동도깨비시장입구", + "ycode": "37.6651868464", + "stop_no": "10997", + "xcode": "127.036319008", + "stop_type": "일반차로", + "node_id": "109000395", + "nxtStn": "방학동신우빌라" + }, + { + "stop_nm": "온누리교회", + "ycode": "37.6673886582", + "stop_no": "10999", + "xcode": "127.0403849917", + "stop_type": "일반차로", + "node_id": "109000393", + "nxtStn": "거성학마을아파트" + }, + { + "stop_nm": "공릉시장", + "ycode": "37.6227408373", + "stop_no": "11101", + "xcode": "127.0741781792", + "stop_type": "가로변시간", + "node_id": "110000001", + "nxtStn": "공릉역1번출구" + }, + { + "stop_nm": "공릉시장", + "ycode": "37.6231160369", + "stop_no": "11102", + "xcode": "127.0736211764", + "stop_type": "가로변시간", + "node_id": "110000002", + "nxtStn": "태릉입구역3번출구" + }, + { + "stop_nm": "태릉입구역4번출구", + "ycode": "37.6195890997", + "stop_no": "11103", + "xcode": "127.0752002532", + "stop_type": "가로변전일", + "node_id": "110000003", + "nxtStn": "공릉역1번출구" + }, + { + "stop_nm": "태릉입구역3번출구", + "ycode": "37.6194253308", + "stop_no": "11104", + "xcode": "127.0748409839", + "stop_type": "가로변전일", + "node_id": "110000004", + "nxtStn": "묵동삼거리.먹골역" + }, + { + "stop_nm": "태릉입구역", + "ycode": "37.617403", + "stop_no": "11105", + "xcode": "127.074378", + "stop_type": "일반차로", + "node_id": "110000005", + "nxtStn": "한진한화그랑빌아파트" + }, + { + "stop_nm": "태릉입구역", + "ycode": "37.6170160254", + "stop_no": "11106", + "xcode": "127.0745338498", + "stop_type": "일반차로", + "node_id": "110000006", + "nxtStn": "태릉입구역7번출구.서울생활사박물관" + }, + { + "stop_nm": "공릉1동삼익아파트", + "ycode": "37.61795", + "stop_no": "11107", + "xcode": "127.07276", + "stop_type": "일반차로", + "node_id": "110000007", + "nxtStn": "대동아파트" + }, + { + "stop_nm": "공릉초등학교", + "ycode": "37.6186521132", + "stop_no": "11108", + "xcode": "127.0735465403", + "stop_type": "일반차로", + "node_id": "110000008", + "nxtStn": "한진한화그랑빌아파트" + }, + { + "stop_nm": "대주아파트", + "ycode": "37.6213166942", + "stop_no": "11109", + "xcode": "127.0719631752", + "stop_type": "일반차로", + "node_id": "110000009", + "nxtStn": "공릉대아2차아파트" + }, + { + "stop_nm": "공릉행복발전소", + "ycode": "37.6221490333", + "stop_no": "11110", + "xcode": "127.0723921996", + "stop_type": "일반차로", + "node_id": "110000010", + "nxtStn": "공릉초등학교" + }, + { + "stop_nm": "공릉대아2차아파트", + "ycode": "37.6229904068", + "stop_no": "11111", + "xcode": "127.0713043223", + "stop_type": "일반차로", + "node_id": "110000011", + "nxtStn": "건민약국앞" + }, + { + "stop_nm": "태릉사거리", + "ycode": "37.619715", + "stop_no": "11112", + "xcode": "127.078135", + "stop_type": "일반차로", + "node_id": "110000012", + "nxtStn": "두산힐스빌아파트" + }, + { + "stop_nm": "경춘선숲길.토끼굴앞", + "ycode": "37.619205", + "stop_no": "11113", + "xcode": "127.07968", + "stop_type": "일반차로", + "node_id": "110000013", + "nxtStn": "서울생활사박물관.농협앞" + }, + { + "stop_nm": "주유소앞다운복지관", + "ycode": "37.618947", + "stop_no": "11114", + "xcode": "127.079792", + "stop_type": "일반차로", + "node_id": "110000014", + "nxtStn": "화랑대역1번출구" + }, + { + "stop_nm": "태릉사거리", + "ycode": "37.618882", + "stop_no": "11115", + "xcode": "127.078377", + "stop_type": "일반차로", + "node_id": "110000015", + "nxtStn": "서울생활사박물관.농협앞" + }, + { + "stop_nm": "서울생활사박물관.농협앞", + "ycode": "37.618683", + "stop_no": "11116", + "xcode": "127.077998", + "stop_type": "일반차로", + "node_id": "110000016", + "nxtStn": "태릉입구역" + }, + { + "stop_nm": "태릉입구역7번출구.서울생활사박물관", + "ycode": "37.617859", + "stop_no": "11117", + "xcode": "127.076678", + "stop_type": "일반차로", + "node_id": "110000017", + "nxtStn": "주유소앞다운복지관" + }, + { + "stop_nm": "화랑대역1번출구", + "ycode": "37.6197810079", + "stop_no": "11118", + "xcode": "127.0832854305", + "stop_type": "일반차로", + "node_id": "110000018", + "nxtStn": "화랑대사거리" + }, + { + "stop_nm": "공연초등학교", + "ycode": "37.626815", + "stop_no": "11119", + "xcode": "127.076127", + "stop_type": "일반차로", + "node_id": "110000019", + "nxtStn": "원자력병원입구" + }, + { + "stop_nm": "공릉역", + "ycode": "37.625982", + "stop_no": "11120", + "xcode": "127.07413", + "stop_type": "일반차로", + "node_id": "110000020", + "nxtStn": "공연초등학교" + }, + { + "stop_nm": "서울과학기술대앞", + "ycode": "37.630347", + "stop_no": "11121", + "xcode": "127.076147", + "stop_type": "일반차로", + "node_id": "110000021", + "nxtStn": "동신아파트" + }, + { + "stop_nm": "동신아파트", + "ycode": "37.627625", + "stop_no": "11122", + "xcode": "127.077577", + "stop_type": "일반차로", + "node_id": "110000022", + "nxtStn": "공연초등학교" + }, + { + "stop_nm": "현대성우아파트", + "ycode": "37.62747", + "stop_no": "11123", + "xcode": "127.077707", + "stop_type": "일반차로", + "node_id": "110000023", + "nxtStn": "삼익아파트.한보아파트" + }, + { + "stop_nm": "동부아파트", + "ycode": "37.62739", + "stop_no": "11124", + "xcode": "127.078517", + "stop_type": "일반차로", + "node_id": "110000024", + "nxtStn": "서울과학기술대앞" + }, + { + "stop_nm": "한보아파트.삼익아파트", + "ycode": "37.6275466907", + "stop_no": "11125", + "xcode": "127.0804798611", + "stop_type": "일반차로", + "node_id": "110000025", + "nxtStn": "동신아파트" + }, + { + "stop_nm": "삼익아파트.한보아파트", + "ycode": "37.627342", + "stop_no": "11126", + "xcode": "127.080105", + "stop_type": "일반차로", + "node_id": "110000026", + "nxtStn": "원자력병원" + }, + { + "stop_nm": "원자력병원", + "ycode": "37.628407", + "stop_no": "11127", + "xcode": "127.082092", + "stop_type": "일반차로", + "node_id": "110000027", + "nxtStn": "원자력병원.공릉해링턴플레이스" + }, + { + "stop_nm": "원자력병원입구", + "ycode": "37.626273", + "stop_no": "11128", + "xcode": "127.079457", + "stop_type": "일반차로", + "node_id": "110000028", + "nxtStn": "안마을" + }, + { + "stop_nm": "안마을", + "ycode": "37.623458", + "stop_no": "11129", + "xcode": "127.07952", + "stop_type": "일반차로", + "node_id": "110000029", + "nxtStn": "원자력병원공릉동삼익2차아파트" + }, + { + "stop_nm": "두산힐스빌아파트", + "ycode": "37.6213870578", + "stop_no": "11130", + "xcode": "127.0788883617", + "stop_type": "일반차로", + "node_id": "110000030", + "nxtStn": "태릉사거리" + }, + { + "stop_nm": "두산힐스빌아파트", + "ycode": "37.6213409964", + "stop_no": "11131", + "xcode": "127.079046912", + "stop_type": "일반차로", + "node_id": "110000031", + "nxtStn": "안마을" + }, + { + "stop_nm": "안마을", + "ycode": "37.6236970732", + "stop_no": "11132", + "xcode": "127.0794300566", + "stop_type": "일반차로", + "node_id": "110000032", + "nxtStn": "두산힐스빌아파트" + }, + { + "stop_nm": "공릉해링턴플레이스", + "ycode": "37.6282670614", + "stop_no": "11133", + "xcode": "127.0850407835", + "stop_type": "일반차로", + "node_id": "110000033", + "nxtStn": "서울과학기술대학교후문" + }, + { + "stop_nm": "원자력병원.공릉해링턴플레이스", + "ycode": "37.627145", + "stop_no": "11134", + "xcode": "127.085318", + "stop_type": "일반차로", + "node_id": "110000034", + "nxtStn": "태릉해링턴플레이스아파트" + }, + { + "stop_nm": "공릉우방아파트", + "ycode": "37.626095", + "stop_no": "11135", + "xcode": "127.086035", + "stop_type": "일반차로", + "node_id": "110000035", + "nxtStn": "원자력병원" + }, + { + "stop_nm": "태릉해링턴플레이스아파트", + "ycode": "37.625332", + "stop_no": "11136", + "xcode": "127.085922", + "stop_type": "일반차로", + "node_id": "110000036", + "nxtStn": "청솔아파트" + }, + { + "stop_nm": "화랑타운아파트", + "ycode": "37.623608", + "stop_no": "11137", + "xcode": "127.086747", + "stop_type": "일반차로", + "node_id": "110000037", + "nxtStn": "공릉우방아파트" + }, + { + "stop_nm": "청솔아파트", + "ycode": "37.623303", + "stop_no": "11138", + "xcode": "127.086528", + "stop_type": "일반차로", + "node_id": "110000038", + "nxtStn": "지하철6호선화랑대역" + }, + { + "stop_nm": "화랑대역2번출구", + "ycode": "37.6202214222", + "stop_no": "11139", + "xcode": "127.083590654", + "stop_type": "일반차로", + "node_id": "110000039", + "nxtStn": "태릉입구" + }, + { + "stop_nm": "화랑대사거리", + "ycode": "37.621812", + "stop_no": "11140", + "xcode": "127.08812", + "stop_type": "일반차로", + "node_id": "110000040", + "nxtStn": "경춘선숲길.화랑대역공원" + }, + { + "stop_nm": "화랑대사거리", + "ycode": "37.621976", + "stop_no": "11141", + "xcode": "127.087887", + "stop_type": "일반차로", + "node_id": "110000041", + "nxtStn": "화랑대역2번출구" + }, + { + "stop_nm": "경춘선숲길.화랑대역공원", + "ycode": "37.623845", + "stop_no": "11142", + "xcode": "127.091127", + "stop_type": "일반차로", + "node_id": "110000042", + "nxtStn": "서울여대.육군사관학교행정안내소" + }, + { + "stop_nm": "경춘선숲길.화랑대역공원", + "ycode": "37.6235352001", + "stop_no": "11143", + "xcode": "127.0902613846", + "stop_type": "일반차로", + "node_id": "110000043", + "nxtStn": "화랑대사거리" + }, + { + "stop_nm": "서울여대.육군사관학교행정안내소", + "ycode": "37.625902", + "stop_no": "11144", + "xcode": "127.094735", + "stop_type": "일반차로", + "node_id": "110000044", + "nxtStn": "태릉국제사격장" + }, + { + "stop_nm": "서울여대.육군사관학교행정안내소", + "ycode": "37.6261675083", + "stop_no": "11145", + "xcode": "127.0945526831", + "stop_type": "일반차로", + "node_id": "110000045", + "nxtStn": "경춘선숲길.화랑대역공원" + }, + { + "stop_nm": "태릉국제사격장", + "ycode": "37.6276474938", + "stop_no": "11146", + "xcode": "127.0962777688", + "stop_type": "일반차로", + "node_id": "110000046", + "nxtStn": "태릉" + }, + { + "stop_nm": "태릉국제사격장", + "ycode": "37.6281945254", + "stop_no": "11147", + "xcode": "127.0961867051", + "stop_type": "일반차로", + "node_id": "110000047", + "nxtStn": "서울여대.육군사관학교행정안내소" + }, + { + "stop_nm": "태릉", + "ycode": "37.6301893532", + "stop_no": "11148", + "xcode": "127.0985753415", + "stop_type": "일반차로", + "node_id": "110000048", + "nxtStn": "태릉선수촌" + }, + { + "stop_nm": "태릉", + "ycode": "37.63046", + "stop_no": "11149", + "xcode": "127.098258", + "stop_type": "일반차로", + "node_id": "110000049", + "nxtStn": "태릉국제사격장" + }, + { + "stop_nm": "태릉선수촌", + "ycode": "37.633302178", + "stop_no": "11150", + "xcode": "127.1032736039", + "stop_type": "일반차로", + "node_id": "110000050", + "nxtStn": "한국스포츠정책과학원" + }, + { + "stop_nm": "태릉선수촌", + "ycode": "37.6338984084", + "stop_no": "11151", + "xcode": "127.1035996118", + "stop_type": "일반차로", + "node_id": "110000051", + "nxtStn": "태릉" + }, + { + "stop_nm": "한국스포츠정책과학원", + "ycode": "37.6355918609", + "stop_no": "11152", + "xcode": "127.1062793991", + "stop_type": "일반차로", + "node_id": "110000652", + "nxtStn": "삼육대앞" + }, + { + "stop_nm": "한국스포츠정책과학원", + "ycode": "37.635152", + "stop_no": "11153", + "xcode": "127.105305", + "stop_type": "일반차로", + "node_id": "110000053", + "nxtStn": "태릉선수촌" + }, + { + "stop_nm": "삼육대앞", + "ycode": "37.6384153875", + "stop_no": "11154", + "xcode": "127.1084328965", + "stop_type": "일반차로", + "node_id": "110000054", + "nxtStn": "미리내마을" + }, + { + "stop_nm": "삼육대앞", + "ycode": "37.638788", + "stop_no": "11155", + "xcode": "127.1084", + "stop_type": "일반차로", + "node_id": "110000055", + "nxtStn": "한국스포츠정책과학원" + }, + { + "stop_nm": "담터고개", + "ycode": "37.6408369424", + "stop_no": "11156", + "xcode": "127.1112874447", + "stop_type": "일반차로", + "node_id": "110000056", + "nxtStn": "삼육대앞" + }, + { + "stop_nm": "원자력병원공릉동삼익2차아파트", + "ycode": "37.6260432496", + "stop_no": "11157", + "xcode": "127.0797928224", + "stop_type": "일반차로", + "node_id": "110000057", + "nxtStn": "동부아파트" + }, + { + "stop_nm": "예수사랑교회", + "ycode": "37.6223048363", + "stop_no": "11158", + "xcode": "127.0871773715", + "stop_type": "일반차로", + "node_id": "110000058", + "nxtStn": "화랑타운아파트" + }, + { + "stop_nm": "서울과학기술대입구", + "ycode": "37.6284740985", + "stop_no": "11159", + "xcode": "127.071801265", + "stop_type": "가로변시간", + "node_id": "110000059", + "nxtStn": "하계미성아파트" + }, + { + "stop_nm": "서울과학기술대입구", + "ycode": "37.628345", + "stop_no": "11160", + "xcode": "127.071373", + "stop_type": "가로변시간", + "node_id": "110000060", + "nxtStn": "공릉역4번출구" + }, + { + "stop_nm": "공릉역1번출구", + "ycode": "37.626687", + "stop_no": "11161", + "xcode": "127.072703", + "stop_type": "가로변시간", + "node_id": "110000061", + "nxtStn": "하계역" + }, + { + "stop_nm": "공릉역4번출구", + "ycode": "37.62661", + "stop_no": "11162", + "xcode": "127.072314", + "stop_type": "가로변시간", + "node_id": "110000062", + "nxtStn": "태릉입구역3번출구" + }, + { + "stop_nm": "공릉신도2차아파트", + "ycode": "37.62539", + "stop_no": "11163", + "xcode": "127.07131", + "stop_type": "일반차로", + "node_id": "110000063", + "nxtStn": "공릉행복발전소" + }, + { + "stop_nm": "공릉대동2차아파트", + "ycode": "37.6268706243", + "stop_no": "11164", + "xcode": "127.0710519858", + "stop_type": "일반차로", + "node_id": "110000064", + "nxtStn": "노원문화원" + }, + { + "stop_nm": "공릉대동2차아파트", + "ycode": "37.62713", + "stop_no": "11165", + "xcode": "127.07075", + "stop_type": "일반차로", + "node_id": "110000065", + "nxtStn": "공릉신도2차아파트" + }, + { + "stop_nm": "노원문화원", + "ycode": "37.6283778949", + "stop_no": "11166", + "xcode": "127.0699476545", + "stop_type": "일반차로", + "node_id": "110000066", + "nxtStn": "공릉대동2차아파트" + }, + { + "stop_nm": "노원문화원", + "ycode": "37.6286113424", + "stop_no": "11167", + "xcode": "127.0698345772", + "stop_type": "일반차로", + "node_id": "110000067", + "nxtStn": "용원초등학교" + }, + { + "stop_nm": "용원초등학교", + "ycode": "37.62866", + "stop_no": "11168", + "xcode": "127.06871", + "stop_type": "일반차로", + "node_id": "110000068", + "nxtStn": "하계장미아파트" + }, + { + "stop_nm": "용원초등학교", + "ycode": "37.62827", + "stop_no": "11169", + "xcode": "127.06867", + "stop_type": "일반차로", + "node_id": "110000069", + "nxtStn": "노원문화원" + }, + { + "stop_nm": "공릉동.동신아파트앞", + "ycode": "37.62823", + "stop_no": "11170", + "xcode": "127.077542", + "stop_type": "일반차로", + "node_id": "110000683", + "nxtStn": "원자력병원입구" + }, + { + "stop_nm": "공릉2단지", + "ycode": "37.63064", + "stop_no": "11171", + "xcode": "127.06757", + "stop_type": "일반차로", + "node_id": "110000071", + "nxtStn": "용원초등학교" + }, + { + "stop_nm": "서울과학기술대학교후문", + "ycode": "37.631122", + "stop_no": "11172", + "xcode": "127.083106", + "stop_type": "일반차로", + "node_id": "110000693", + "nxtStn": "역곡워시주유소" + }, + { + "stop_nm": "영화교회", + "ycode": "37.630567", + "stop_no": "11173", + "xcode": "127.071683", + "stop_type": "일반차로", + "node_id": "110000073", + "nxtStn": "공릉1단지후문" + }, + { + "stop_nm": "서울과학기술대학교후문", + "ycode": "37.632518", + "stop_no": "11174", + "xcode": "127.083299", + "stop_type": "일반차로", + "node_id": "110000692", + "nxtStn": "삼익선경아파트" + }, + { + "stop_nm": "공릉삼익아파트", + "ycode": "37.6294796422", + "stop_no": "11175", + "xcode": "127.0733714013", + "stop_type": "일반차로", + "node_id": "110000075", + "nxtStn": "영화교회" + }, + { + "stop_nm": "공연초등학교", + "ycode": "37.6267236629", + "stop_no": "11176", + "xcode": "127.0755405228", + "stop_type": "일반차로", + "node_id": "110000076", + "nxtStn": "공릉역" + }, + { + "stop_nm": "공릉역", + "ycode": "37.6259895946", + "stop_no": "11177", + "xcode": "127.0736172131", + "stop_type": "일반차로", + "node_id": "110000077", + "nxtStn": "건민약국앞" + }, + { + "stop_nm": "공릉1단지후문", + "ycode": "37.63132", + "stop_no": "11178", + "xcode": "127.0697", + "stop_type": "일반차로", + "node_id": "110000078", + "nxtStn": "공릉2단지" + }, + { + "stop_nm": "상계주공9단지", + "ycode": "37.6629604016", + "stop_no": "11180", + "xcode": "127.0584559747", + "stop_type": "가로변전일", + "node_id": "110000080", + "nxtStn": "상계주공12단지" + }, + { + "stop_nm": "노원고등학교", + "ycode": "37.6613927099", + "stop_no": "11181", + "xcode": "127.054559747", + "stop_type": "일반차로", + "node_id": "110000081", + "nxtStn": "임광아파트상가" + }, + { + "stop_nm": "임광아파트상가", + "ycode": "37.6611596105", + "stop_no": "11182", + "xcode": "127.0574568963", + "stop_type": "일반차로", + "node_id": "110000082", + "nxtStn": "상계주공7단지" + }, + { + "stop_nm": "상계주공7단지", + "ycode": "37.6603667717", + "stop_no": "11183", + "xcode": "127.0591136049", + "stop_type": "가로변시간", + "node_id": "110000083", + "nxtStn": "상계주공7단지.광림교회앞" + }, + { + "stop_nm": "대림아파트상가", + "ycode": "37.6603435605", + "stop_no": "11184", + "xcode": "127.0586794778", + "stop_type": "가로변시간", + "node_id": "110000084", + "nxtStn": "도봉면허시험장" + }, + { + "stop_nm": "도봉면허시험장", + "ycode": "37.6574468479", + "stop_no": "11185", + "xcode": "127.0599658724", + "stop_type": "일반차로", + "node_id": "110000085", + "nxtStn": "상계주공7단지" + }, + { + "stop_nm": "도봉면허시험장", + "ycode": "37.6573380333", + "stop_no": "11186", + "xcode": "127.0595396275", + "stop_type": "일반차로", + "node_id": "110000086", + "nxtStn": "상계주공3단지" + }, + { + "stop_nm": "상계주공7단지", + "ycode": "37.6609052625", + "stop_no": "11187", + "xcode": "127.0598156383", + "stop_type": "일반차로", + "node_id": "110000087", + "nxtStn": "상계주공7단지.광림교회앞" + }, + { + "stop_nm": "상계주공7단지.광림교회앞", + "ycode": "37.660576", + "stop_no": "11188", + "xcode": "127.062616", + "stop_type": "일반차로", + "node_id": "110000088", + "nxtStn": "상계초등학교" + }, + { + "stop_nm": "상계10동우체국", + "ycode": "37.6607333963", + "stop_no": "11189", + "xcode": "127.0628214067", + "stop_type": "일반차로", + "node_id": "110000089", + "nxtStn": "포레나노원" + }, + { + "stop_nm": "청원고등학교", + "ycode": "37.6650492388", + "stop_no": "11190", + "xcode": "127.0617198674", + "stop_type": "일반차로", + "node_id": "110000090", + "nxtStn": "보람아파트1단지" + }, + { + "stop_nm": "상계주공9단지", + "ycode": "37.6645767657", + "stop_no": "11191", + "xcode": "127.058796161", + "stop_type": "일반차로", + "node_id": "110000091", + "nxtStn": "청원고등학교" + }, + { + "stop_nm": "온곡중학교.노원중앙도서관", + "ycode": "37.6595872028", + "stop_no": "11192", + "xcode": "127.0645319222", + "stop_type": "일반차로", + "node_id": "110000092", + "nxtStn": "상계10동우체국" + }, + { + "stop_nm": "온곡중학교.노원중앙도서관", + "ycode": "37.659298", + "stop_no": "11193", + "xcode": "127.064485", + "stop_type": "일반차로", + "node_id": "110000093", + "nxtStn": "상계초등학교" + }, + { + "stop_nm": "두산아파트.도심공항수락터미널", + "ycode": "37.678717", + "stop_no": "11194", + "xcode": "127.053177", + "stop_type": "일반차로", + "node_id": "110000094", + "nxtStn": "성대야구장노원교앞" + }, + { + "stop_nm": "두산아파트.도심공항수락터미널", + "ycode": "37.678501", + "stop_no": "11195", + "xcode": "127.053318", + "stop_type": "일반차로", + "node_id": "110000095", + "nxtStn": "수락산역" + }, + { + "stop_nm": "수락산역3번출구", + "ycode": "37.6771708775", + "stop_no": "11196", + "xcode": "127.0555614524", + "stop_type": "일반차로", + "node_id": "110000096", + "nxtStn": "홍파복지원.수락산벨리체아파트" + }, + { + "stop_nm": "수락산역", + "ycode": "37.6773540117", + "stop_no": "11197", + "xcode": "127.0551013061", + "stop_type": "가로변전일", + "node_id": "110000097", + "nxtStn": "노일초등학교" + }, + { + "stop_nm": "노일초등학교", + "ycode": "37.6735135543", + "stop_no": "11198", + "xcode": "127.0552560424", + "stop_type": "일반차로", + "node_id": "110000098", + "nxtStn": "노일중학교" + }, + { + "stop_nm": "노원초등학교", + "ycode": "37.67292", + "stop_no": "11199", + "xcode": "127.055736", + "stop_type": "일반차로", + "node_id": "110000099", + "nxtStn": "수락산역3번출구" + }, + { + "stop_nm": "상계현대2차아파트", + "ycode": "37.6717178437", + "stop_no": "11200", + "xcode": "127.0509549057", + "stop_type": "일반차로", + "node_id": "110000100", + "nxtStn": "상경초등학교" + }, + { + "stop_nm": "상계현대3차아파트", + "ycode": "37.6709521187", + "stop_no": "11201", + "xcode": "127.0525754362", + "stop_type": "일반차로", + "node_id": "110000101", + "nxtStn": "상계현대2차아파트" + }, + { + "stop_nm": "수락리버시티아파트", + "ycode": "37.6893310475", + "stop_no": "11202", + "xcode": "127.0552031453", + "stop_type": "일반차로", + "node_id": "110000102", + "nxtStn": "수락중고등학교" + }, + { + "stop_nm": "수락리버시티아파트", + "ycode": "37.6890118581", + "stop_no": "11203", + "xcode": "127.0556485232", + "stop_type": "일반차로", + "node_id": "110000052", + "nxtStn": "장암역.석림사입구" + }, + { + "stop_nm": "수락중고등학교", + "ycode": "37.6828387764", + "stop_no": "11204", + "xcode": "127.0552708957", + "stop_type": "일반차로", + "node_id": "110000104", + "nxtStn": "은빛아파트2단지" + }, + { + "stop_nm": "수락중고등학교", + "ycode": "37.682928", + "stop_no": "11205", + "xcode": "127.055555", + "stop_type": "일반차로", + "node_id": "110000105", + "nxtStn": "수락리버시티3.4단지" + }, + { + "stop_nm": "은빛아파트2단지", + "ycode": "37.6802094382", + "stop_no": "11206", + "xcode": "127.0552746136", + "stop_type": "가로변시간", + "node_id": "110000106", + "nxtStn": "수락산역" + }, + { + "stop_nm": "홍파복지원.수락산벨리체아파트", + "ycode": "37.680261", + "stop_no": "11207", + "xcode": "127.055504", + "stop_type": "일반차로", + "node_id": "110000107", + "nxtStn": "수락중고등학교" + }, + { + "stop_nm": "상계초등학교", + "ycode": "37.657616", + "stop_no": "11208", + "xcode": "127.065995", + "stop_type": "일반차로", + "node_id": "110000108", + "nxtStn": "노원역10번출구" + }, + { + "stop_nm": "상계초등학교", + "ycode": "37.658106", + "stop_no": "11209", + "xcode": "127.0659", + "stop_type": "일반차로", + "node_id": "110000109", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "노원역9번출구", + "ycode": "37.656087", + "stop_no": "11210", + "xcode": "127.061986", + "stop_type": "일반차로", + "node_id": "110000110", + "nxtStn": "노원구청" + }, + { + "stop_nm": "노원역1번출구", + "ycode": "37.656202", + "stop_no": "11211", + "xcode": "127.063365", + "stop_type": "일반차로", + "node_id": "110000111", + "nxtStn": "상계초등학교" + }, + { + "stop_nm": "롯데백화점노원점.노원역4번출구", + "ycode": "37.65483", + "stop_no": "11212", + "xcode": "127.062274", + "stop_type": "일반차로", + "node_id": "110000112", + "nxtStn": "노원역1번출구" + }, + { + "stop_nm": "와우패션클럽", + "ycode": "37.655122", + "stop_no": "11213", + "xcode": "127.063605", + "stop_type": "일반차로", + "node_id": "110000113", + "nxtStn": "롯데백화점노원점.노원역4번출구" + }, + { + "stop_nm": "중앙하이츠2차아파트", + "ycode": "37.654765", + "stop_no": "11214", + "xcode": "127.06749", + "stop_type": "일반차로", + "node_id": "110000114", + "nxtStn": "와우패션클럽" + }, + { + "stop_nm": "상계중학교정문", + "ycode": "37.65259", + "stop_no": "11215", + "xcode": "127.068137", + "stop_type": "일반차로", + "node_id": "110000115", + "nxtStn": "중앙하이츠2차아파트" + }, + { + "stop_nm": "상계중학교", + "ycode": "37.65158", + "stop_no": "11216", + "xcode": "127.069417", + "stop_type": "일반차로", + "node_id": "110000116", + "nxtStn": "상명고등학교" + }, + { + "stop_nm": "코오롱아파트.양지대림아파트", + "ycode": "37.652497575", + "stop_no": "11217", + "xcode": "127.0707159998", + "stop_type": "일반차로", + "node_id": "110000117", + "nxtStn": "상계119안전센터" + }, + { + "stop_nm": "상계119안전센터", + "ycode": "37.65408", + "stop_no": "11218", + "xcode": "127.071558", + "stop_type": "일반차로", + "node_id": "110000118", + "nxtStn": "상계중학교" + }, + { + "stop_nm": "상계119안전센터", + "ycode": "37.654227", + "stop_no": "11219", + "xcode": "127.071837", + "stop_type": "일반차로", + "node_id": "110000119", + "nxtStn": "상계동주유소" + }, + { + "stop_nm": "상계동주유소", + "ycode": "37.6575214427", + "stop_no": "11220", + "xcode": "127.0716240844", + "stop_type": "일반차로", + "node_id": "110000120", + "nxtStn": "상계119안전센터" + }, + { + "stop_nm": "상계동주유소", + "ycode": "37.6577519815", + "stop_no": "11221", + "xcode": "127.0718498531", + "stop_type": "일반차로", + "node_id": "110000121", + "nxtStn": "상계역" + }, + { + "stop_nm": "상계중앙시장입구", + "ycode": "37.658467", + "stop_no": "11222", + "xcode": "127.070695", + "stop_type": "일반차로", + "node_id": "110000122", + "nxtStn": "벽산아파트103동" + }, + { + "stop_nm": "상계중앙시장입구", + "ycode": "37.6586672162", + "stop_no": "11223", + "xcode": "127.07079099", + "stop_type": "일반차로", + "node_id": "110000123", + "nxtStn": "상계2동주민센터" + }, + { + "stop_nm": "흥안운수종점", + "ycode": "37.6697664795", + "stop_no": "11224", + "xcode": "127.0809233223", + "stop_type": "일반차로", + "node_id": "110000124", + "nxtStn": "흥안운수상계4동종점" + }, + { + "stop_nm": "흥안운수종점", + "ycode": "37.66967", + "stop_no": "11225", + "xcode": "127.080593", + "stop_type": "일반차로", + "node_id": "110000125", + "nxtStn": "불암현대아파트" + }, + { + "stop_nm": "불암현대아파트", + "ycode": "37.668205", + "stop_no": "11226", + "xcode": "127.079355", + "stop_type": "일반차로", + "node_id": "110000126", + "nxtStn": "동아불암아파트" + }, + { + "stop_nm": "동아불암아파트", + "ycode": "37.6661480625", + "stop_no": "11227", + "xcode": "127.0777874472", + "stop_type": "일반차로", + "node_id": "110000127", + "nxtStn": "부천북초.원미1동행정복지센터" + }, + { + "stop_nm": "동아불암아파트", + "ycode": "37.66705", + "stop_no": "11228", + "xcode": "127.078702", + "stop_type": "일반차로", + "node_id": "110000128", + "nxtStn": "흥안운수종점" + }, + { + "stop_nm": "노원롯데캐슬시그니처아파트", + "ycode": "37.664861", + "stop_no": "11229", + "xcode": "127.07712", + "stop_type": "일반차로", + "node_id": "110000129", + "nxtStn": "동아불암아파트" + }, + { + "stop_nm": "노원롯데캐슬시그니처아파트", + "ycode": "37.66495", + "stop_no": "11230", + "xcode": "127.076952", + "stop_type": "일반차로", + "node_id": "110000130", + "nxtStn": "당고개입구오거리" + }, + { + "stop_nm": "상계불암대림아파트", + "ycode": "37.6631739503", + "stop_no": "11231", + "xcode": "127.0761128792", + "stop_type": "일반차로", + "node_id": "110000131", + "nxtStn": "노원롯데캐슬시그니처아파트" + }, + { + "stop_nm": "흥안운수상계4동종점", + "ycode": "37.67092", + "stop_no": "11232", + "xcode": "127.082537", + "stop_type": "일반차로", + "node_id": "110000132", + "nxtStn": "종점" + }, + { + "stop_nm": "상계역", + "ycode": "37.659743", + "stop_no": "11233", + "xcode": "127.072128", + "stop_type": "일반차로", + "node_id": "110000133", + "nxtStn": "상계중앙시장입구" + }, + { + "stop_nm": "상신교회", + "ycode": "37.661247", + "stop_no": "11234", + "xcode": "127.07079", + "stop_type": "일반차로", + "node_id": "110000134", + "nxtStn": "상계역" + }, + { + "stop_nm": "상신교회", + "ycode": "37.6614316732", + "stop_no": "11235", + "xcode": "127.0708752242", + "stop_type": "일반차로", + "node_id": "110000135", + "nxtStn": "상계5동주민센터" + }, + { + "stop_nm": "계상초등학교", + "ycode": "37.66283", + "stop_no": "11236", + "xcode": "127.06898", + "stop_type": "일반차로", + "node_id": "110000136", + "nxtStn": "24시편의점" + }, + { + "stop_nm": "상계5동주민센터", + "ycode": "37.6628644876", + "stop_no": "11237", + "xcode": "127.0691876995", + "stop_type": "일반차로", + "node_id": "110000137", + "nxtStn": "상계한신2차아파트" + }, + { + "stop_nm": "상계한신2차아파트", + "ycode": "37.664262", + "stop_no": "11238", + "xcode": "127.066593", + "stop_type": "일반차로", + "node_id": "110000138", + "nxtStn": "계상초등학교" + }, + { + "stop_nm": "상계한신2차아파트", + "ycode": "37.6644437316", + "stop_no": "11239", + "xcode": "127.0666569148", + "stop_type": "일반차로", + "node_id": "110000139", + "nxtStn": "보람아파트상가" + }, + { + "stop_nm": "상계벽산아파트", + "ycode": "37.661293", + "stop_no": "11240", + "xcode": "127.073492", + "stop_type": "일반차로", + "node_id": "110000140", + "nxtStn": "상계중앙시장입구" + }, + { + "stop_nm": "당고개입구오거리", + "ycode": "37.6629882049", + "stop_no": "11241", + "xcode": "127.0753926279", + "stop_type": "일반차로", + "node_id": "110000700", + "nxtStn": "상계벽산아파트" + }, + { + "stop_nm": "상계2동주민센터", + "ycode": "37.65757", + "stop_no": "11242", + "xcode": "127.067777", + "stop_type": "일반차로", + "node_id": "110000699", + "nxtStn": "상계중앙시장입구" + }, + { + "stop_nm": "벽산아파트103동", + "ycode": "37.6607048337", + "stop_no": "11243", + "xcode": "127.0718186956", + "stop_type": "일반차로", + "node_id": "110000143", + "nxtStn": "상신교회" + }, + { + "stop_nm": "상계주공3단지", + "ycode": "37.651943", + "stop_no": "11244", + "xcode": "127.061033", + "stop_type": "가로변시간", + "node_id": "110000144", + "nxtStn": "상계주공2단지" + }, + { + "stop_nm": "상계주공2단지", + "ycode": "37.649375", + "stop_no": "11245", + "xcode": "127.061738", + "stop_type": "가로변시간", + "node_id": "110000145", + "nxtStn": "상계주공1단지" + }, + { + "stop_nm": "상계주공1단지", + "ycode": "37.647297", + "stop_no": "11246", + "xcode": "127.062782", + "stop_type": "가로변시간", + "node_id": "110000146", + "nxtStn": "중계역" + }, + { + "stop_nm": "마들근린공원.노원에코센터", + "ycode": "37.64505", + "stop_no": "11247", + "xcode": "127.059495", + "stop_type": "일반차로", + "node_id": "110000147", + "nxtStn": "중계역" + }, + { + "stop_nm": "마들근린공원.노원에코센터", + "ycode": "37.6452860969", + "stop_no": "11248", + "xcode": "127.0595368052", + "stop_type": "일반차로", + "node_id": "110000148", + "nxtStn": "창동주공17단지" + }, + { + "stop_nm": "노원구청", + "ycode": "37.65393", + "stop_no": "11250", + "xcode": "127.058153", + "stop_type": "일반차로", + "node_id": "110000150", + "nxtStn": "창동농협물류센터" + }, + { + "stop_nm": "노원구청", + "ycode": "37.6542764042", + "stop_no": "11251", + "xcode": "127.0572410143", + "stop_type": "일반차로", + "node_id": "110000151", + "nxtStn": "노원역2번출구" + }, + { + "stop_nm": "노원구청", + "ycode": "37.6543087235", + "stop_no": "11252", + "xcode": "127.0574869763", + "stop_type": "일반차로", + "node_id": "110000152", + "nxtStn": "노원역2번출구" + }, + { + "stop_nm": "상계주공2단지223동", + "ycode": "37.647906", + "stop_no": "11253", + "xcode": "127.056991", + "stop_type": "일반차로", + "node_id": "110000153", + "nxtStn": "상계주공2단지상가" + }, + { + "stop_nm": "상계주공2단지", + "ycode": "37.6511093271", + "stop_no": "11254", + "xcode": "127.0604208967", + "stop_type": "일반차로", + "node_id": "110000154", + "nxtStn": "상계주공6단지" + }, + { + "stop_nm": "상계주공6단지", + "ycode": "37.65318414", + "stop_no": "11255", + "xcode": "127.0611445117", + "stop_type": "가로변전일", + "node_id": "110000155", + "nxtStn": "노원역1번출구" + }, + { + "stop_nm": "상계주공4단지", + "ycode": "37.6507752318", + "stop_no": "11256", + "xcode": "127.0617647168", + "stop_type": "가로변시간", + "node_id": "110000156", + "nxtStn": "노원구청앞" + }, + { + "stop_nm": "백병원", + "ycode": "37.6480182386", + "stop_no": "11257", + "xcode": "127.06288209", + "stop_type": "가로변시간", + "node_id": "110000157", + "nxtStn": "상계주공4단지" + }, + { + "stop_nm": "상계6.7동주민센터", + "ycode": "37.6544207283", + "stop_no": "11260", + "xcode": "127.06720443", + "stop_type": "일반차로", + "node_id": "110000160", + "nxtStn": "상계중학교" + }, + { + "stop_nm": "상계중학교", + "ycode": "37.6523542041", + "stop_no": "11261", + "xcode": "127.0678156944", + "stop_type": "일반차로", + "node_id": "110000161", + "nxtStn": "상명고등학교" + }, + { + "stop_nm": "상계2동주민센터", + "ycode": "37.657637", + "stop_no": "11262", + "xcode": "127.067489", + "stop_type": "일반차로", + "node_id": "110000698", + "nxtStn": "노원역9번출구" + }, + { + "stop_nm": "상경초등학교", + "ycode": "37.6707971529", + "stop_no": "11266", + "xcode": "127.0520711414", + "stop_type": "일반차로", + "node_id": "110000166", + "nxtStn": "상계주공15단지" + }, + { + "stop_nm": "상계주공15단지", + "ycode": "37.6682902974", + "stop_no": "11267", + "xcode": "127.0565591686", + "stop_type": "가로변전일", + "node_id": "110000167", + "nxtStn": "상계주공11단지" + }, + { + "stop_nm": "상계주공11단지", + "ycode": "37.6653136549", + "stop_no": "11268", + "xcode": "127.0573560403", + "stop_type": "가로변전일", + "node_id": "110000168", + "nxtStn": "상계주공10단지" + }, + { + "stop_nm": "상계주공10단지", + "ycode": "37.6621441437", + "stop_no": "11269", + "xcode": "127.0582161724", + "stop_type": "가로변전일", + "node_id": "110000169", + "nxtStn": "대림아파트상가" + }, + { + "stop_nm": "노원고등학교", + "ycode": "37.66169", + "stop_no": "11270", + "xcode": "127.054463", + "stop_type": "일반차로", + "node_id": "110000170", + "nxtStn": "서울문화고등학교" + }, + { + "stop_nm": "상계주공10단지상가", + "ycode": "37.661425", + "stop_no": "11271", + "xcode": "127.057598", + "stop_type": "일반차로", + "node_id": "110000171", + "nxtStn": "노원고등학교" + }, + { + "stop_nm": "상계주공14단지", + "ycode": "37.669103", + "stop_no": "11272", + "xcode": "127.056828", + "stop_type": "가로변전일", + "node_id": "110000172", + "nxtStn": "심원초등학교" + }, + { + "stop_nm": "상계주공12단지", + "ycode": "37.666492", + "stop_no": "11273", + "xcode": "127.057562", + "stop_type": "일반차로", + "node_id": "110000173", + "nxtStn": "원미고등학교" + }, + { + "stop_nm": "보람아파트1단지", + "ycode": "37.6644083632", + "stop_no": "11274", + "xcode": "127.0654519677", + "stop_type": "일반차로", + "node_id": "110000174", + "nxtStn": "상계한신2차아파트" + }, + { + "stop_nm": "보람아파트2단지", + "ycode": "37.664782", + "stop_no": "11275", + "xcode": "127.064385", + "stop_type": "일반차로", + "node_id": "110000175", + "nxtStn": "청원고등학교" + }, + { + "stop_nm": "청원고등학교", + "ycode": "37.6652295093", + "stop_no": "11276", + "xcode": "127.0616145996", + "stop_type": "일반차로", + "node_id": "110000176", + "nxtStn": "상계주공12단지1202동" + }, + { + "stop_nm": "상계주공12단지1202동", + "ycode": "37.6649222801", + "stop_no": "11277", + "xcode": "127.0597893905", + "stop_type": "일반차로", + "node_id": "110000177", + "nxtStn": "마들역" + }, + { + "stop_nm": "광운대역", + "ycode": "37.6226011923", + "stop_no": "11278", + "xcode": "127.0616088528", + "stop_type": "일반차로", + "node_id": "110000178", + "nxtStn": "월계현대아파트" + }, + { + "stop_nm": "광운대역", + "ycode": "37.622605", + "stop_no": "11279", + "xcode": "127.061827", + "stop_type": "일반차로", + "node_id": "110000179", + "nxtStn": "신도브래뉴.한전노원변전소" + }, + { + "stop_nm": "월계현대아파트", + "ycode": "37.619835", + "stop_no": "11280", + "xcode": "127.06336", + "stop_type": "일반차로", + "node_id": "110000180", + "nxtStn": "광운대역" + }, + { + "stop_nm": "월계현대아파트", + "ycode": "37.61932", + "stop_no": "11281", + "xcode": "127.063398", + "stop_type": "일반차로", + "node_id": "110000181", + "nxtStn": "월계1동경로당" + }, + { + "stop_nm": "물류센터", + "ycode": "37.617162", + "stop_no": "11282", + "xcode": "127.064175", + "stop_type": "일반차로", + "node_id": "110000182", + "nxtStn": "월계현대아파트" + }, + { + "stop_nm": "석계역1번출구.A", + "ycode": "37.61493", + "stop_no": "11283", + "xcode": "127.065197", + "stop_type": "일반차로", + "node_id": "110000183", + "nxtStn": "석계역" + }, + { + "stop_nm": "석계역2번출구", + "ycode": "37.615274256", + "stop_no": "11284", + "xcode": "127.0669732146", + "stop_type": "일반차로", + "node_id": "110000184", + "nxtStn": "석계역1번출구.B" + }, + { + "stop_nm": "광운대학교", + "ycode": "37.619962", + "stop_no": "11285", + "xcode": "127.058482", + "stop_type": "일반차로", + "node_id": "110000185", + "nxtStn": "월계삼거리" + }, + { + "stop_nm": "월계삼거리", + "ycode": "37.6226677969", + "stop_no": "11286", + "xcode": "127.0600070288", + "stop_type": "일반차로", + "node_id": "110000186", + "nxtStn": "광운대역" + }, + { + "stop_nm": "청백아파트1단지", + "ycode": "37.635412", + "stop_no": "11291", + "xcode": "127.052187", + "stop_type": "일반차로", + "node_id": "110000191", + "nxtStn": "대우아파트" + }, + { + "stop_nm": "대우아파트", + "ycode": "37.6331096709", + "stop_no": "11292", + "xcode": "127.0521635327", + "stop_type": "일반차로", + "node_id": "110000192", + "nxtStn": "청백아파트" + }, + { + "stop_nm": "청백아파트3단지4단지", + "ycode": "37.631737", + "stop_no": "11293", + "xcode": "127.050935", + "stop_type": "일반차로", + "node_id": "110000193", + "nxtStn": "염광중학교후문" + }, + { + "stop_nm": "청백아파트3단지4단지", + "ycode": "37.6316287727", + "stop_no": "11294", + "xcode": "127.051063481", + "stop_type": "일반차로", + "node_id": "110000194", + "nxtStn": "대우아파트" + }, + { + "stop_nm": "초안아파트.흥화브라운빌아파트", + "ycode": "37.63207", + "stop_no": "11295", + "xcode": "127.044295", + "stop_type": "일반차로", + "node_id": "110000195", + "nxtStn": "한승미메이드아파트" + }, + { + "stop_nm": "초안아파트.흥화브라운빌아파트", + "ycode": "37.632292", + "stop_no": "11296", + "xcode": "127.04406", + "stop_type": "일반차로", + "node_id": "110000196", + "nxtStn": "쌍용스윗닷홈아파트" + }, + { + "stop_nm": "쌍용스윗닷홈아파트", + "ycode": "37.630397", + "stop_no": "11297", + "xcode": "127.045424", + "stop_type": "일반차로", + "node_id": "110000197", + "nxtStn": "초안아파트.흥화브라운빌아파트" + }, + { + "stop_nm": "신창중학교후문", + "ycode": "37.627968", + "stop_no": "11298", + "xcode": "127.047397", + "stop_type": "일반차로", + "node_id": "110000198", + "nxtStn": "유원극동아파트" + }, + { + "stop_nm": "신창중학교후문", + "ycode": "37.62792", + "stop_no": "11299", + "xcode": "127.047275", + "stop_type": "일반차로", + "node_id": "110000199", + "nxtStn": "염광고등학교" + }, + { + "stop_nm": "염광고등학교", + "ycode": "37.6275401275", + "stop_no": "11300", + "xcode": "127.0503112065", + "stop_type": "일반차로", + "node_id": "110000200", + "nxtStn": "신창중학교후문" + }, + { + "stop_nm": "염광고등학교", + "ycode": "37.627302", + "stop_no": "11301", + "xcode": "127.050238", + "stop_type": "일반차로", + "node_id": "110000201", + "nxtStn": "월계주공1단지상가" + }, + { + "stop_nm": "월계주공1단지상가", + "ycode": "37.626691", + "stop_no": "11302", + "xcode": "127.051624", + "stop_type": "일반차로", + "node_id": "110000202", + "nxtStn": "월계주공1단지" + }, + { + "stop_nm": "월계공단", + "ycode": "37.6271301634", + "stop_no": "11303", + "xcode": "127.0518546625", + "stop_type": "일반차로", + "node_id": "110000203", + "nxtStn": "염광고등학교" + }, + { + "stop_nm": "월계종합사회복지관", + "ycode": "37.627488", + "stop_no": "11304", + "xcode": "127.052597", + "stop_type": "일반차로", + "node_id": "110000204", + "nxtStn": "월계공단" + }, + { + "stop_nm": "월계종합사회복지관", + "ycode": "37.627487", + "stop_no": "11305", + "xcode": "127.052763", + "stop_type": "일반차로", + "node_id": "110000205", + "nxtStn": "월계주공1단지" + }, + { + "stop_nm": "월계주공2단지", + "ycode": "37.6283500757", + "stop_no": "11306", + "xcode": "127.0538076332", + "stop_type": "일반차로", + "node_id": "110000206", + "nxtStn": "월계공단" + }, + { + "stop_nm": "월계주공1단지", + "ycode": "37.628286", + "stop_no": "11307", + "xcode": "127.054101", + "stop_type": "일반차로", + "node_id": "110000207", + "nxtStn": "인덕대앞" + }, + { + "stop_nm": "인덕대학교", + "ycode": "37.628658", + "stop_no": "11308", + "xcode": "127.055175", + "stop_type": "일반차로", + "node_id": "110000208", + "nxtStn": "인덕대앞" + }, + { + "stop_nm": "인덕대학교", + "ycode": "37.628672", + "stop_no": "11309", + "xcode": "127.055407", + "stop_type": "일반차로", + "node_id": "110000209", + "nxtStn": "월계주공2단지" + }, + { + "stop_nm": "월계주공108동앞롯데캐슬루나아파트", + "ycode": "37.6261891646", + "stop_no": "11310", + "xcode": "127.0525926058", + "stop_type": "가로변시간", + "node_id": "110000210", + "nxtStn": "오현초등학교" + }, + { + "stop_nm": "인덕대학", + "ycode": "37.6279837976", + "stop_no": "11311", + "xcode": "127.0552744331", + "stop_type": "가로변시간", + "node_id": "110000211", + "nxtStn": "월계주공108동앞롯데캐슬루나아파트" + }, + { + "stop_nm": "한진한화그랑빌아파트", + "ycode": "37.6158054934", + "stop_no": "11312", + "xcode": "127.0692324274", + "stop_type": "일반차로", + "node_id": "110000212", + "nxtStn": "석계역2번출구" + }, + { + "stop_nm": "한진한화그랑빌아파트", + "ycode": "37.6182551734", + "stop_no": "11313", + "xcode": "127.0698588736", + "stop_type": "일반차로", + "node_id": "110000213", + "nxtStn": "한진한화그랑빌아파트" + }, + { + "stop_nm": "한천초등학교", + "ycode": "37.619455", + "stop_no": "11314", + "xcode": "127.069878", + "stop_type": "일반차로", + "node_id": "110000214", + "nxtStn": "한진한화그랑빌아파트" + }, + { + "stop_nm": "한천초등학교", + "ycode": "37.619986091", + "stop_no": "11315", + "xcode": "127.0699692449", + "stop_type": "일반차로", + "node_id": "110000215", + "nxtStn": "월계미성아파트" + }, + { + "stop_nm": "월계동대우아파트", + "ycode": "37.6330006245", + "stop_no": "11316", + "xcode": "127.0521985803", + "stop_type": "일반차로", + "node_id": "110000677", + "nxtStn": "종점" + }, + { + "stop_nm": "월계미성아파트", + "ycode": "37.621683", + "stop_no": "11317", + "xcode": "127.069345", + "stop_type": "일반차로", + "node_id": "110000216", + "nxtStn": "월계미륭아파트" + }, + { + "stop_nm": "월계미륭아파트", + "ycode": "37.6231065697", + "stop_no": "11318", + "xcode": "127.0683895402", + "stop_type": "일반차로", + "node_id": "110000217", + "nxtStn": "월계미성아파트" + }, + { + "stop_nm": "월계미륭아파트", + "ycode": "37.6233839659", + "stop_no": "11319", + "xcode": "127.0686265665", + "stop_type": "일반차로", + "node_id": "110000218", + "nxtStn": "월계삼호아파트" + }, + { + "stop_nm": "월계삼호아파트", + "ycode": "37.6251751879", + "stop_no": "11320", + "xcode": "127.0672913812", + "stop_type": "일반차로", + "node_id": "110000219", + "nxtStn": "월계미륭아파트" + }, + { + "stop_nm": "월계삼호아파트", + "ycode": "37.6253210274", + "stop_no": "11321", + "xcode": "127.0675294239", + "stop_type": "일반차로", + "node_id": "110000220", + "nxtStn": "월계삼호4차아파트" + }, + { + "stop_nm": "월계삼호4차아파트", + "ycode": "37.6264654662", + "stop_no": "11322", + "xcode": "127.0658231365", + "stop_type": "일반차로", + "node_id": "110000221", + "nxtStn": "월계삼호아파트" + }, + { + "stop_nm": "월계삼호4차아파트", + "ycode": "37.6266627148", + "stop_no": "11323", + "xcode": "127.0659819208", + "stop_type": "일반차로", + "node_id": "110000222", + "nxtStn": "녹천초등학교월계이마트" + }, + { + "stop_nm": "녹천초등학교월계이마트", + "ycode": "37.6274651272", + "stop_no": "11324", + "xcode": "127.0647089816", + "stop_type": "일반차로", + "node_id": "110000223", + "nxtStn": "월계삼호4차아파트" + }, + { + "stop_nm": "녹천초등학교월계이마트", + "ycode": "37.6275517792", + "stop_no": "11325", + "xcode": "127.0649064093", + "stop_type": "일반차로", + "node_id": "110000224", + "nxtStn": "월계역" + }, + { + "stop_nm": "월계사슴아파트2단지", + "ycode": "37.6321018431", + "stop_no": "11326", + "xcode": "127.0605822539", + "stop_type": "일반차로", + "node_id": "110000225", + "nxtStn": "월계역" + }, + { + "stop_nm": "월계사슴아파트3단지", + "ycode": "37.6319802807", + "stop_no": "11327", + "xcode": "127.0604190015", + "stop_type": "일반차로", + "node_id": "110000226", + "nxtStn": "인덕대학" + }, + { + "stop_nm": "월계역", + "ycode": "37.6339280991", + "stop_no": "11328", + "xcode": "127.0592762067", + "stop_type": "일반차로", + "node_id": "110000227", + "nxtStn": "월계보건지소" + }, + { + "stop_nm": "월계역", + "ycode": "37.6337353806", + "stop_no": "11329", + "xcode": "127.0590505789", + "stop_type": "일반차로", + "node_id": "110000228", + "nxtStn": "월계사슴아파트3단지" + }, + { + "stop_nm": "대우아파트", + "ycode": "37.6338935455", + "stop_no": "11330", + "xcode": "127.0523147751", + "stop_type": "일반차로", + "node_id": "110000229", + "nxtStn": "청백아파트종점" + }, + { + "stop_nm": "인덕삼거리", + "ycode": "37.628462", + "stop_no": "11331", + "xcode": "127.057478", + "stop_type": "일반차로", + "node_id": "110000230", + "nxtStn": "신도브래뉴.한전노원변전소" + }, + { + "stop_nm": "신도브래뉴.한전노원변전소", + "ycode": "37.628184", + "stop_no": "11332", + "xcode": "127.059202", + "stop_type": "일반차로", + "node_id": "110000231", + "nxtStn": "광운대역" + }, + { + "stop_nm": "광운중.광운인공지능고등학교", + "ycode": "37.6189553524", + "stop_no": "11333", + "xcode": "127.0563054062", + "stop_type": "일반차로", + "node_id": "110000232", + "nxtStn": "원미구청" + }, + { + "stop_nm": "광운중.광운인공지능고등학교", + "ycode": "37.618947", + "stop_no": "11334", + "xcode": "127.056528", + "stop_type": "일반차로", + "node_id": "110000233", + "nxtStn": "북교사거리" + }, + { + "stop_nm": "광운대학교", + "ycode": "37.6198429291", + "stop_no": "11335", + "xcode": "127.0581457879", + "stop_type": "일반차로", + "node_id": "110000234", + "nxtStn": "조마루사거리" + }, + { + "stop_nm": "월계삼거리", + "ycode": "37.622613", + "stop_no": "11336", + "xcode": "127.05962", + "stop_type": "일반차로", + "node_id": "110000235", + "nxtStn": "광운대학교" + }, + { + "stop_nm": "롯데캐슬루나아파트", + "ycode": "37.625218", + "stop_no": "11337", + "xcode": "127.05153", + "stop_type": "일반차로", + "node_id": "110000236", + "nxtStn": "인덕대앞" + }, + { + "stop_nm": "인덕대앞", + "ycode": "37.629037896", + "stop_no": "11338", + "xcode": "127.0575128243", + "stop_type": "가로변시간", + "node_id": "110000237", + "nxtStn": "월계사슴아파트2단지" + }, + { + "stop_nm": "월계보건지소", + "ycode": "37.631974", + "stop_no": "11339", + "xcode": "127.061623", + "stop_type": "가로변시간", + "node_id": "110000238", + "nxtStn": "인덕삼거리" + }, + { + "stop_nm": "월계보건지소", + "ycode": "37.631739", + "stop_no": "11340", + "xcode": "127.061715", + "stop_type": "가로변시간", + "node_id": "110000239", + "nxtStn": "하계실버센터" + }, + { + "stop_nm": "교육촌.벼루말", + "ycode": "37.621967", + "stop_no": "11341", + "xcode": "127.052715", + "stop_type": "일반차로", + "node_id": "110000240", + "nxtStn": "장석교회" + }, + { + "stop_nm": "장석교회", + "ycode": "37.624205", + "stop_no": "11343", + "xcode": "127.050608", + "stop_type": "일반차로", + "node_id": "110000242", + "nxtStn": "오현초등학교" + }, + { + "stop_nm": "쌍용스윗닷홈아파트", + "ycode": "37.6306057989", + "stop_no": "11344", + "xcode": "127.0450262042", + "stop_type": "일반차로", + "node_id": "110000243", + "nxtStn": "유원극동아파트" + }, + { + "stop_nm": "인덕삼거리", + "ycode": "37.6286993108", + "stop_no": "11345", + "xcode": "127.0571622955", + "stop_type": "일반차로", + "node_id": "110000244", + "nxtStn": "월계보건지소" + }, + { + "stop_nm": "신도브래뉴.한전노원변전소", + "ycode": "37.628399", + "stop_no": "11346", + "xcode": "127.058804", + "stop_type": "일반차로", + "node_id": "110000245", + "nxtStn": "인덕삼거리" + }, + { + "stop_nm": "상명고등학교.성원아파트", + "ycode": "37.64991", + "stop_no": "11347", + "xcode": "127.069155", + "stop_type": "일반차로", + "node_id": "110000246", + "nxtStn": "상계중학교정문" + }, + { + "stop_nm": "중계1동주민센터", + "ycode": "37.651725", + "stop_no": "11348", + "xcode": "127.076938", + "stop_type": "일반차로", + "node_id": "110000247", + "nxtStn": "중계주공5단지514동" + }, + { + "stop_nm": "은행사거리", + "ycode": "37.6488502006", + "stop_no": "11349", + "xcode": "127.0764225838", + "stop_type": "일반차로", + "node_id": "110000248", + "nxtStn": "중계주공10단지.중계건영3차아파트" + }, + { + "stop_nm": "양지근린공원", + "ycode": "37.646722", + "stop_no": "11350", + "xcode": "127.076373", + "stop_type": "일반차로", + "node_id": "110000249", + "nxtStn": "중계주공9단지후문" + }, + { + "stop_nm": "서라벌고등학교", + "ycode": "37.6448411567", + "stop_no": "11351", + "xcode": "127.0750013294", + "stop_type": "일반차로", + "node_id": "110000250", + "nxtStn": "불암중학교" + }, + { + "stop_nm": "불암중학교", + "ycode": "37.646531", + "stop_no": "11352", + "xcode": "127.07429", + "stop_type": "일반차로", + "node_id": "110000251", + "nxtStn": "중계주공10단지.중계건영3차아파트" + }, + { + "stop_nm": "불암중학교", + "ycode": "37.6465375422", + "stop_no": "11353", + "xcode": "127.0741270461", + "stop_type": "일반차로", + "node_id": "110000252", + "nxtStn": "서라벌고등학교" + }, + { + "stop_nm": "중계주공10단지.중계건영3차아파트", + "ycode": "37.647708", + "stop_no": "11354", + "xcode": "127.073627", + "stop_type": "일반차로", + "node_id": "110000253", + "nxtStn": "중계구민체육센터" + }, + { + "stop_nm": "롯데우성아파트", + "ycode": "37.64751", + "stop_no": "11355", + "xcode": "127.073828", + "stop_type": "일반차로", + "node_id": "110000254", + "nxtStn": "은행사거리" + }, + { + "stop_nm": "중계구민체육센터", + "ycode": "37.647602", + "stop_no": "11356", + "xcode": "127.07121", + "stop_type": "일반차로", + "node_id": "110000255", + "nxtStn": "롯데우성아파트" + }, + { + "stop_nm": "중계구민체육센터", + "ycode": "37.6477683703", + "stop_no": "11357", + "xcode": "127.0712792746", + "stop_type": "일반차로", + "node_id": "110000256", + "nxtStn": "목련아파트상가" + }, + { + "stop_nm": "롯데마트", + "ycode": "37.647192", + "stop_no": "11358", + "xcode": "127.070212", + "stop_type": "일반차로", + "node_id": "110000257", + "nxtStn": "상명초등학교" + }, + { + "stop_nm": "을지중학교", + "ycode": "37.650542", + "stop_no": "11359", + "xcode": "127.071798", + "stop_type": "일반차로", + "node_id": "110000258", + "nxtStn": "청암중.고등학교" + }, + { + "stop_nm": "을지중학교", + "ycode": "37.6502087203", + "stop_no": "11360", + "xcode": "127.0709042219", + "stop_type": "일반차로", + "node_id": "110000259", + "nxtStn": "상명초등학교" + }, + { + "stop_nm": "청암중.고등학교", + "ycode": "37.65289", + "stop_no": "11361", + "xcode": "127.07395", + "stop_type": "일반차로", + "node_id": "110000260", + "nxtStn": "원광초등학교" + }, + { + "stop_nm": "중계주공5단지514동", + "ycode": "37.6508108548", + "stop_no": "11364", + "xcode": "127.0749325352", + "stop_type": "일반차로", + "node_id": "110000263", + "nxtStn": "중계1동신안아파트" + }, + { + "stop_nm": "원광초등학교", + "ycode": "37.654492", + "stop_no": "11365", + "xcode": "127.076603", + "stop_type": "일반차로", + "node_id": "110000264", + "nxtStn": "중계1동주민센터" + }, + { + "stop_nm": "중계역", + "ycode": "37.644069", + "stop_no": "11366", + "xcode": "127.064373", + "stop_type": "가로변시간", + "node_id": "110000265", + "nxtStn": "중계그린아파트" + }, + { + "stop_nm": "노원구민의전당", + "ycode": "37.6393911575", + "stop_no": "11367", + "xcode": "127.0664180981", + "stop_type": "가로변전일", + "node_id": "110000266", + "nxtStn": "하계역" + }, + { + "stop_nm": "건영옴니백화점", + "ycode": "37.638902", + "stop_no": "11368", + "xcode": "127.064113", + "stop_type": "일반차로", + "node_id": "110000267", + "nxtStn": "중평초등학교" + }, + { + "stop_nm": "브라운스톤중계.우리은행앞", + "ycode": "37.639455", + "stop_no": "11369", + "xcode": "127.064092", + "stop_type": "일반차로", + "node_id": "110000268", + "nxtStn": "브라운스톤중계" + }, + { + "stop_nm": "서울아이티고등학교", + "ycode": "37.64263", + "stop_no": "11370", + "xcode": "127.062437", + "stop_type": "일반차로", + "node_id": "110000269", + "nxtStn": "건영옴니백화점" + }, + { + "stop_nm": "서울아이티고등학교", + "ycode": "37.6416979423", + "stop_no": "11371", + "xcode": "127.063103394", + "stop_type": "일반차로", + "node_id": "110000270", + "nxtStn": "북부여성발전센터앞" + }, + { + "stop_nm": "어린이교통공원", + "ycode": "37.645358", + "stop_no": "11372", + "xcode": "127.062874", + "stop_type": "일반차로", + "node_id": "110000271", + "nxtStn": "미도아파트앞" + }, + { + "stop_nm": "중계역", + "ycode": "37.64322", + "stop_no": "11373", + "xcode": "127.065089", + "stop_type": "가로변전일", + "node_id": "110000272", + "nxtStn": "어린이교통공원" + }, + { + "stop_nm": "서울시립북서울미술관", + "ycode": "37.639748", + "stop_no": "11374", + "xcode": "127.066741", + "stop_type": "가로변시간", + "node_id": "110000273", + "nxtStn": "중계역" + }, + { + "stop_nm": "중계건영2차아파트", + "ycode": "37.646097", + "stop_no": "11375", + "xcode": "127.065243", + "stop_type": "일반차로", + "node_id": "110000274", + "nxtStn": "중계역" + }, + { + "stop_nm": "중계역2번출구", + "ycode": "37.6456175479", + "stop_no": "11376", + "xcode": "127.0649391251", + "stop_type": "일반차로", + "node_id": "110000275", + "nxtStn": "중계3단지목련아파트" + }, + { + "stop_nm": "상명초등학교", + "ycode": "37.6478506148", + "stop_no": "11377", + "xcode": "127.0677841912", + "stop_type": "일반차로", + "node_id": "110000276", + "nxtStn": "중계건영2차아파트" + }, + { + "stop_nm": "중계3단지목련아파트", + "ycode": "37.6475000013", + "stop_no": "11378", + "xcode": "127.0679665353", + "stop_type": "일반차로", + "node_id": "110000277", + "nxtStn": "목련아파트상가" + }, + { + "stop_nm": "상명고등학교", + "ycode": "37.6494835403", + "stop_no": "11379", + "xcode": "127.0690664892", + "stop_type": "일반차로", + "node_id": "110000278", + "nxtStn": "중계구민체육센터" + }, + { + "stop_nm": "목련아파트상가", + "ycode": "37.6468582175", + "stop_no": "11380", + "xcode": "127.0698765896", + "stop_type": "일반차로", + "node_id": "110000279", + "nxtStn": "중계목화아파트4단지" + }, + { + "stop_nm": "중계목화아파트4단지", + "ycode": "37.6435314138", + "stop_no": "11381", + "xcode": "127.0714066755", + "stop_type": "일반차로", + "node_id": "110000280", + "nxtStn": "노원경찰서" + }, + { + "stop_nm": "용동초등학교", + "ycode": "37.6421162703", + "stop_no": "11382", + "xcode": "127.069131057", + "stop_type": "일반차로", + "node_id": "110000281", + "nxtStn": "2001아울렛중계점" + }, + { + "stop_nm": "용동초등학교", + "ycode": "37.6418721472", + "stop_no": "11383", + "xcode": "127.0690118488", + "stop_type": "일반차로", + "node_id": "110000282", + "nxtStn": "역곡안동네" + }, + { + "stop_nm": "2001아울렛중계점", + "ycode": "37.6416882067", + "stop_no": "11384", + "xcode": "127.067663219", + "stop_type": "일반차로", + "node_id": "110000283", + "nxtStn": "제이디팰리시티" + }, + { + "stop_nm": "서울시립북서울미술관후문", + "ycode": "37.641308", + "stop_no": "11385", + "xcode": "127.066847", + "stop_type": "일반차로", + "node_id": "110000284", + "nxtStn": "밤골.산울림청소년센터" + }, + { + "stop_nm": "홈플러스중계점", + "ycode": "37.6407225926", + "stop_no": "11386", + "xcode": "127.0686266493", + "stop_type": "일반차로", + "node_id": "110000285", + "nxtStn": "까치울역3번출구" + }, + { + "stop_nm": "노원평생학습관", + "ycode": "37.6393428578", + "stop_no": "11387", + "xcode": "127.0689347229", + "stop_type": "일반차로", + "node_id": "110000286", + "nxtStn": "역곡안동네" + }, + { + "stop_nm": "대진여자고등학교", + "ycode": "37.644552", + "stop_no": "11388", + "xcode": "127.067158", + "stop_type": "일반차로", + "node_id": "110000287", + "nxtStn": "역곡상상시장" + }, + { + "stop_nm": "청계초등학교", + "ycode": "37.6445081062", + "stop_no": "11389", + "xcode": "127.0669303287", + "stop_type": "일반차로", + "node_id": "110000288", + "nxtStn": "역곡역북부(마을)" + }, + { + "stop_nm": "중계역1번출구", + "ycode": "37.646265", + "stop_no": "11390", + "xcode": "127.063757", + "stop_type": "가로변시간", + "node_id": "110000289", + "nxtStn": "백병원" + }, + { + "stop_nm": "상계역", + "ycode": "37.661365", + "stop_no": "11391", + "xcode": "127.073973", + "stop_type": "일반차로", + "node_id": "110000290", + "nxtStn": "상계불암대림아파트" + }, + { + "stop_nm": "상계역", + "ycode": "37.659345525", + "stop_no": "11392", + "xcode": "127.0730188945", + "stop_type": "일반차로", + "node_id": "110000291", + "nxtStn": "중계주공3단지" + }, + { + "stop_nm": "상계역", + "ycode": "37.659257", + "stop_no": "11393", + "xcode": "127.073408", + "stop_type": "일반차로", + "node_id": "110000292", + "nxtStn": "상계동주유소" + }, + { + "stop_nm": "중계주공3단지", + "ycode": "37.6569324006", + "stop_no": "11394", + "xcode": "127.077310076", + "stop_type": "일반차로", + "node_id": "110000293", + "nxtStn": "중계주공4단지" + }, + { + "stop_nm": "중계주공2단지", + "ycode": "37.657048", + "stop_no": "11395", + "xcode": "127.07783", + "stop_type": "일반차로", + "node_id": "110000294", + "nxtStn": "상계역" + }, + { + "stop_nm": "중계주공4단지", + "ycode": "37.655638775", + "stop_no": "11396", + "xcode": "127.0780504028", + "stop_type": "일반차로", + "node_id": "110000295", + "nxtStn": "중계1동주민센터" + }, + { + "stop_nm": "중계주공4단지", + "ycode": "37.65414", + "stop_no": "11397", + "xcode": "127.078357", + "stop_type": "일반차로", + "node_id": "110000296", + "nxtStn": "중계주공2단지" + }, + { + "stop_nm": "중계1동주민센터", + "ycode": "37.651867022", + "stop_no": "11398", + "xcode": "127.0775628848", + "stop_type": "일반차로", + "node_id": "110000297", + "nxtStn": "중계주공4단지" + }, + { + "stop_nm": "신한은행중계동지점", + "ycode": "37.650543", + "stop_no": "11399", + "xcode": "127.077402", + "stop_type": "일반차로", + "node_id": "110000298", + "nxtStn": "노원문화예술회관.불암초등학교" + }, + { + "stop_nm": "기업은행중계동WM센터", + "ycode": "37.650735", + "stop_no": "11400", + "xcode": "127.077627", + "stop_type": "일반차로", + "node_id": "110000299", + "nxtStn": "은행사거리" + }, + { + "stop_nm": "공릉신도2차아파트", + "ycode": "37.6254122748", + "stop_no": "11401", + "xcode": "127.0715005195", + "stop_type": "일반차로", + "node_id": "110000696", + "nxtStn": "공릉대동2차아파트" + }, + { + "stop_nm": "노원문화예술회관.불암초등학교", + "ycode": "37.6506776631", + "stop_no": "11402", + "xcode": "127.0801602952", + "stop_type": "일반차로", + "node_id": "110000301", + "nxtStn": "기업은행중계동WM센터" + }, + { + "stop_nm": "노원문화예술회관.불암초등학교", + "ycode": "37.6500481925", + "stop_no": "11403", + "xcode": "127.0809177871", + "stop_type": "일반차로", + "node_id": "110000302", + "nxtStn": "불암고등학교" + }, + { + "stop_nm": "영신여자고등학교입구", + "ycode": "37.64982", + "stop_no": "11404", + "xcode": "127.081118", + "stop_type": "일반차로", + "node_id": "110000303", + "nxtStn": "노원문화예술회관.불암초등학교" + }, + { + "stop_nm": "불암고등학교", + "ycode": "37.6485021744", + "stop_no": "11405", + "xcode": "127.0805749976", + "stop_type": "일반차로", + "node_id": "110000304", + "nxtStn": "노원우체국" + }, + { + "stop_nm": "중계본동주민센터", + "ycode": "37.6474739679", + "stop_no": "11406", + "xcode": "127.0806838117", + "stop_type": "일반차로", + "node_id": "110000305", + "nxtStn": "영신여자고등학교입구" + }, + { + "stop_nm": "노원우체국", + "ycode": "37.6460324291", + "stop_no": "11407", + "xcode": "127.0817180202", + "stop_type": "일반차로", + "node_id": "110000306", + "nxtStn": "중계본동종점" + }, + { + "stop_nm": "노원우체국", + "ycode": "37.6461584467", + "stop_no": "11408", + "xcode": "127.0819108069", + "stop_type": "일반차로", + "node_id": "110000307", + "nxtStn": "중계본동주민센터" + }, + { + "stop_nm": "중계본동종점", + "ycode": "37.644643", + "stop_no": "11409", + "xcode": "127.083058", + "stop_type": "일반차로", + "node_id": "110000308", + "nxtStn": "제이디팰리시티" + }, + { + "stop_nm": "중계주공7단지", + "ycode": "37.647938", + "stop_no": "11410", + "xcode": "127.079788", + "stop_type": "일반차로", + "node_id": "110000309", + "nxtStn": "노원우체국" + }, + { + "stop_nm": "중계주공6단지상가", + "ycode": "37.6481262911", + "stop_no": "11411", + "xcode": "127.0794424677", + "stop_type": "일반차로", + "node_id": "110000310", + "nxtStn": "중계주공6단지" + }, + { + "stop_nm": "대림벽산아파트", + "ycode": "37.647837", + "stop_no": "11412", + "xcode": "127.077428", + "stop_type": "일반차로", + "node_id": "110000311", + "nxtStn": "중계주공7단지" + }, + { + "stop_nm": "중계주공6단지", + "ycode": "37.648085", + "stop_no": "11413", + "xcode": "127.07758", + "stop_type": "일반차로", + "node_id": "110000312", + "nxtStn": "은행사거리" + }, + { + "stop_nm": "은행사거리", + "ycode": "37.64989", + "stop_no": "11414", + "xcode": "127.076862", + "stop_type": "일반차로", + "node_id": "110000313", + "nxtStn": "신한은행중계동지점" + }, + { + "stop_nm": "대림벽산아파트", + "ycode": "37.646757", + "stop_no": "11415", + "xcode": "127.076745", + "stop_type": "일반차로", + "node_id": "110000314", + "nxtStn": "은행사거리" + }, + { + "stop_nm": "하계역", + "ycode": "37.63664", + "stop_no": "11416", + "xcode": "127.068123", + "stop_type": "가로변시간", + "node_id": "110000315", + "nxtStn": "서울시립북서울미술관" + }, + { + "stop_nm": "하계미성아파트", + "ycode": "37.635092", + "stop_no": "11417", + "xcode": "127.068822", + "stop_type": "가로변전일", + "node_id": "110000316", + "nxtStn": "하계역" + }, + { + "stop_nm": "서울과학기술대앞", + "ycode": "37.6305565211", + "stop_no": "11418", + "xcode": "127.0760825727", + "stop_type": "일반차로", + "node_id": "110000317", + "nxtStn": "경기기계공업고등학교" + }, + { + "stop_nm": "중계주공9단지후문", + "ycode": "37.643023", + "stop_no": "11419", + "xcode": "127.0766", + "stop_type": "일반차로", + "node_id": "110000318", + "nxtStn": "대림벽산아파트" + }, + { + "stop_nm": "중계주공9단지후문", + "ycode": "37.64303", + "stop_no": "11420", + "xcode": "127.076223", + "stop_type": "일반차로", + "node_id": "110000319", + "nxtStn": "한신동성아파트.시립과학관" + }, + { + "stop_nm": "삼익선경아파트후문.시립과학관", + "ycode": "37.639898", + "stop_no": "11421", + "xcode": "127.076359", + "stop_type": "일반차로", + "node_id": "110000320", + "nxtStn": "중계주공9단지후문" + }, + { + "stop_nm": "한신동성아파트.시립과학관", + "ycode": "37.640197", + "stop_no": "11422", + "xcode": "127.076093", + "stop_type": "일반차로", + "node_id": "110000321", + "nxtStn": "골마을근린공원" + }, + { + "stop_nm": "삼익선경아파트", + "ycode": "37.6381084499", + "stop_no": "11423", + "xcode": "127.0775270502", + "stop_type": "일반차로", + "node_id": "110000322", + "nxtStn": "서울온천" + }, + { + "stop_nm": "대진고등학교.하계우방아파트", + "ycode": "37.6378760581", + "stop_no": "11424", + "xcode": "127.0773942359", + "stop_type": "일반차로", + "node_id": "110000323", + "nxtStn": "서울과학기술대학교후문" + }, + { + "stop_nm": "하계미성아파트.을지병원", + "ycode": "37.6365847976", + "stop_no": "11425", + "xcode": "127.0694328255", + "stop_type": "가로변시간", + "node_id": "110000324", + "nxtStn": "한성여객종점" + }, + { + "stop_nm": "하계역", + "ycode": "37.6368537465", + "stop_no": "11426", + "xcode": "127.0694876352", + "stop_type": "가로변시간", + "node_id": "110000325", + "nxtStn": "하계우성아파트" + }, + { + "stop_nm": "한성여객종점", + "ycode": "37.63813", + "stop_no": "11428", + "xcode": "127.070056", + "stop_type": "일반차로", + "node_id": "110000327", + "nxtStn": "노원평생학습관" + }, + { + "stop_nm": "한성여객종점", + "ycode": "37.6372710586", + "stop_no": "11429", + "xcode": "127.070816008", + "stop_type": "일반차로", + "node_id": "110000328", + "nxtStn": "대진고등학교" + }, + { + "stop_nm": "상계중앙하이츠2단지", + "ycode": "37.6549891949", + "stop_no": "11430", + "xcode": "127.0674044139", + "stop_type": "일반차로", + "node_id": "110000682", + "nxtStn": "노원역9번출구" + }, + { + "stop_nm": "북부여성발전센터앞", + "ycode": "37.6432608103", + "stop_no": "11431", + "xcode": "127.062362481", + "stop_type": "일반차로", + "node_id": "110000687", + "nxtStn": "그린아파트101동앞" + }, + { + "stop_nm": "그린아파트101동앞", + "ycode": "37.6443053969", + "stop_no": "11432", + "xcode": "127.0619180071", + "stop_type": "일반차로", + "node_id": "110000685", + "nxtStn": "마들근린공원.노원에코센터" + }, + { + "stop_nm": "대진고등학교", + "ycode": "37.6379362241", + "stop_no": "11433", + "xcode": "127.0736490566", + "stop_type": "일반차로", + "node_id": "110000695", + "nxtStn": "서울온천" + }, + { + "stop_nm": "골마을근린공원", + "ycode": "37.638345", + "stop_no": "11434", + "xcode": "127.074233", + "stop_type": "일반차로", + "node_id": "110000333", + "nxtStn": "하계역" + }, + { + "stop_nm": "서울온천", + "ycode": "37.6393648263", + "stop_no": "11435", + "xcode": "127.0743080173", + "stop_type": "일반차로", + "node_id": "110000334", + "nxtStn": "노원경찰서.혜성여고" + }, + { + "stop_nm": "하계1동주민센터", + "ycode": "37.6404263202", + "stop_no": "11436", + "xcode": "127.0728303267", + "stop_type": "일반차로", + "node_id": "110000335", + "nxtStn": "골마을근린공원" + }, + { + "stop_nm": "노원경찰서.혜성여고", + "ycode": "37.6420899031", + "stop_no": "11437", + "xcode": "127.0725259962", + "stop_type": "일반차로", + "node_id": "110000336", + "nxtStn": "하계현대아파트" + }, + { + "stop_nm": "노원경찰서", + "ycode": "37.642018", + "stop_no": "11438", + "xcode": "127.072132", + "stop_type": "일반차로", + "node_id": "110000337", + "nxtStn": "하계1동주민센터" + }, + { + "stop_nm": "동천학교", + "ycode": "37.644083", + "stop_no": "11439", + "xcode": "127.07424", + "stop_type": "일반차로", + "node_id": "110000338", + "nxtStn": "서라벌고등학교" + }, + { + "stop_nm": "동천학교", + "ycode": "37.644076", + "stop_no": "11440", + "xcode": "127.073769", + "stop_type": "일반차로", + "node_id": "110000339", + "nxtStn": "노원경찰서" + }, + { + "stop_nm": "서라벌고등학교", + "ycode": "37.645015", + "stop_no": "11441", + "xcode": "127.07474", + "stop_type": "일반차로", + "node_id": "110000340", + "nxtStn": "동천학교" + }, + { + "stop_nm": "하계현대아파트", + "ycode": "37.6449579802", + "stop_no": "11442", + "xcode": "127.0711485363", + "stop_type": "일반차로", + "node_id": "110000341", + "nxtStn": "롯데마트" + }, + { + "stop_nm": "홈플러스중계점", + "ycode": "37.640465", + "stop_no": "11443", + "xcode": "127.068993", + "stop_type": "일반차로", + "node_id": "110000342", + "nxtStn": "대진여자고등학교" + }, + { + "stop_nm": "하계한신청구아파트", + "ycode": "37.639192", + "stop_no": "11444", + "xcode": "127.068945", + "stop_type": "일반차로", + "node_id": "110000343", + "nxtStn": "역곡초.중.고등학교" + }, + { + "stop_nm": "경기기계공업고등학교", + "ycode": "37.6309290578", + "stop_no": "11445", + "xcode": "127.0740537568", + "stop_type": "일반차로", + "node_id": "110000344", + "nxtStn": "청솔7단지아파트" + }, + { + "stop_nm": "한천중학교", + "ycode": "37.6309420546", + "stop_no": "11446", + "xcode": "127.0734430848", + "stop_type": "일반차로", + "node_id": "110000345", + "nxtStn": "서울과학기술대앞" + }, + { + "stop_nm": "하계역", + "ycode": "37.636803", + "stop_no": "11447", + "xcode": "127.067613", + "stop_type": "가로변시간", + "node_id": "110000346", + "nxtStn": "하계우성아파트" + }, + { + "stop_nm": "하계장미아파트", + "ycode": "37.634078815", + "stop_no": "11448", + "xcode": "127.0688040917", + "stop_type": "가로변전일", + "node_id": "110000347", + "nxtStn": "서울과학기술대입구" + }, + { + "stop_nm": "하계2동주민센터", + "ycode": "37.6319906999", + "stop_no": "11449", + "xcode": "127.068132236", + "stop_type": "일반차로", + "node_id": "110000348", + "nxtStn": "장미6단지아파트" + }, + { + "stop_nm": "하계2동주민센터", + "ycode": "37.631773", + "stop_no": "11450", + "xcode": "127.068115", + "stop_type": "일반차로", + "node_id": "110000349", + "nxtStn": "경춘선숲길방문자센터" + }, + { + "stop_nm": "중평초등학교", + "ycode": "37.636602", + "stop_no": "11451", + "xcode": "127.065373", + "stop_type": "일반차로", + "node_id": "110000350", + "nxtStn": "브라운스톤중계.우리은행앞" + }, + { + "stop_nm": "하계극동아파트", + "ycode": "37.633833", + "stop_no": "11452", + "xcode": "127.064587", + "stop_type": "가로변시간", + "node_id": "110000351", + "nxtStn": "월계보건지소" + }, + { + "stop_nm": "하계시영아파트", + "ycode": "37.634055", + "stop_no": "11453", + "xcode": "127.065452", + "stop_type": "가로변시간", + "node_id": "110000352", + "nxtStn": "하계장미아파트" + }, + { + "stop_nm": "하계우성아파트", + "ycode": "37.63514", + "stop_no": "11454", + "xcode": "127.066652", + "stop_type": "가로변시간", + "node_id": "110000353", + "nxtStn": "하계극동아파트" + }, + { + "stop_nm": "하계장미아파트", + "ycode": "37.6349277927", + "stop_no": "11455", + "xcode": "127.0669625244", + "stop_type": "가로변전일", + "node_id": "110000354", + "nxtStn": "하계역" + }, + { + "stop_nm": "중평초등학교", + "ycode": "37.636961", + "stop_no": "11456", + "xcode": "127.065006", + "stop_type": "일반차로", + "node_id": "110000355", + "nxtStn": "벽산상가" + }, + { + "stop_nm": "석계역1번출구", + "ycode": "37.615168", + "stop_no": "11457", + "xcode": "127.064818", + "stop_type": "일반차로", + "node_id": "110000356", + "nxtStn": "월계1동경로당" + }, + { + "stop_nm": "중계1동신안아파트", + "ycode": "37.65125", + "stop_no": "11458", + "xcode": "127.07229", + "stop_type": "일반차로", + "node_id": "110000357", + "nxtStn": "을지중학교" + }, + { + "stop_nm": "하계5단지아파트", + "ycode": "37.633941468", + "stop_no": "11459", + "xcode": "127.0663248698", + "stop_type": "일반차로", + "node_id": "110000689", + "nxtStn": "하계2동주민센터" + }, + { + "stop_nm": "그린아파트101동앞", + "ycode": "37.644343387", + "stop_no": "11460", + "xcode": "127.0616415379", + "stop_type": "일반차로", + "node_id": "110000686", + "nxtStn": "북부여성발전센터앞" + }, + { + "stop_nm": "북부여성발전센터앞", + "ycode": "37.643175307", + "stop_no": "11461", + "xcode": "127.0621743013", + "stop_type": "일반차로", + "node_id": "110000684", + "nxtStn": "서울아이티고등학교" + }, + { + "stop_nm": "당현초등학교", + "ycode": "37.648347", + "stop_no": "11462", + "xcode": "127.058925", + "stop_type": "일반차로", + "node_id": "110000361", + "nxtStn": "상계주공2단지223동" + }, + { + "stop_nm": "상계주공2단지상가", + "ycode": "37.650412", + "stop_no": "11463", + "xcode": "127.057071", + "stop_type": "일반차로", + "node_id": "110000362", + "nxtStn": "상계주공2단지" + }, + { + "stop_nm": "월계미성아파트", + "ycode": "37.6214670481", + "stop_no": "11464", + "xcode": "127.0691617763", + "stop_type": "일반차로", + "node_id": "110000363", + "nxtStn": "한천초등학교" + }, + { + "stop_nm": "벼루말교", + "ycode": "37.6198488394", + "stop_no": "11465", + "xcode": "127.055220831", + "stop_type": "일반차로", + "node_id": "110000364", + "nxtStn": "장위래미안아파트" + }, + { + "stop_nm": "청구빌라.연촌초등학교", + "ycode": "37.635092", + "stop_no": "11466", + "xcode": "127.071477", + "stop_type": "일반차로", + "node_id": "110000365", + "nxtStn": "하계1치안센터" + }, + { + "stop_nm": "청구빌라.연촌초등학교", + "ycode": "37.63528", + "stop_no": "11467", + "xcode": "127.071537", + "stop_type": "일반차로", + "node_id": "110000366", + "nxtStn": "종점" + }, + { + "stop_nm": "벼루말교", + "ycode": "37.6196650162", + "stop_no": "11468", + "xcode": "127.0552252263", + "stop_type": "일반차로", + "node_id": "110000367", + "nxtStn": "광운중.광운인공지능고등학교" + }, + { + "stop_nm": "하계1치안센터", + "ycode": "37.63311", + "stop_no": "11469", + "xcode": "127.072415", + "stop_type": "일반차로", + "node_id": "110000368", + "nxtStn": "청구빌라.연촌초등학교" + }, + { + "stop_nm": "하계1치안센터", + "ycode": "37.6329494935", + "stop_no": "11470", + "xcode": "127.0722633137", + "stop_type": "일반차로", + "node_id": "110000369", + "nxtStn": "한천중학교" + }, + { + "stop_nm": "월계중학교", + "ycode": "37.6300545578", + "stop_no": "11474", + "xcode": "127.0511179201", + "stop_type": "일반차로", + "node_id": "110000373", + "nxtStn": "청백아파트3단지4단지" + }, + { + "stop_nm": "염광중학교후문", + "ycode": "37.6303366157", + "stop_no": "11475", + "xcode": "127.0510739268", + "stop_type": "일반차로", + "node_id": "110000374", + "nxtStn": "염광고등학교" + }, + { + "stop_nm": "물류센터", + "ycode": "37.6170537289", + "stop_no": "11476", + "xcode": "127.0640318343", + "stop_type": "일반차로", + "node_id": "110000375", + "nxtStn": "석계역" + }, + { + "stop_nm": "월계역신도브래뉴아파트앞", + "ycode": "37.629878", + "stop_no": "11477", + "xcode": "127.059074", + "stop_type": "일반차로", + "node_id": "110000376", + "nxtStn": "인덕대학교" + }, + { + "stop_nm": "태릉입구", + "ycode": "37.6183307692", + "stop_no": "11478", + "xcode": "127.0786053295", + "stop_type": "일반차로", + "node_id": "110000377", + "nxtStn": "묵동구길" + }, + { + "stop_nm": "석계역1번출구.B", + "ycode": "37.614924", + "stop_no": "11481", + "xcode": "127.065202", + "stop_type": "일반차로", + "node_id": "110000379", + "nxtStn": "석관동주민센터" + }, + { + "stop_nm": "삼화상운차고지", + "ycode": "37.6260862831", + "stop_no": "11482", + "xcode": "127.0529460051", + "stop_type": "일반차로", + "node_id": "110000380", + "nxtStn": "인덕삼거리" + }, + { + "stop_nm": "월계동진아교통", + "ycode": "37.627735", + "stop_no": "11485", + "xcode": "127.064418", + "stop_type": "일반차로", + "node_id": "110000383", + "nxtStn": "종점" + }, + { + "stop_nm": "월계동진아교통", + "ycode": "37.627618", + "stop_no": "11486", + "xcode": "127.06447", + "stop_type": "일반차로", + "node_id": "110000384", + "nxtStn": "월계역" + }, + { + "stop_nm": "중계본동종점", + "ycode": "37.644617", + "stop_no": "11487", + "xcode": "127.082796", + "stop_type": "일반차로", + "node_id": "110000385", + "nxtStn": "불암산스포츠타운" + }, + { + "stop_nm": "한성여객종점", + "ycode": "37.637536", + "stop_no": "11489", + "xcode": "127.070635", + "stop_type": "일반차로", + "node_id": "110000387", + "nxtStn": "하계역" + }, + { + "stop_nm": "흥안운수상계4동종점", + "ycode": "37.6708342206", + "stop_no": "11491", + "xcode": "127.0822757357", + "stop_type": "일반차로", + "node_id": "110000389", + "nxtStn": "흥안운수종점" + }, + { + "stop_nm": "삼화상운", + "ycode": "37.627217", + "stop_no": "11493", + "xcode": "127.05038", + "stop_type": "일반차로", + "node_id": "110000391", + "nxtStn": "월계2교.참누리아파트" + }, + { + "stop_nm": "유원극동아파트", + "ycode": "37.6296015672", + "stop_no": "11499", + "xcode": "127.0461279839", + "stop_type": "일반차로", + "node_id": "110000396", + "nxtStn": "신창중학교후문" + }, + { + "stop_nm": "유원극동아파트", + "ycode": "37.6296727092", + "stop_no": "11500", + "xcode": "127.0462390596", + "stop_type": "일반차로", + "node_id": "110000397", + "nxtStn": "쌍용스윗닷홈아파트" + }, + { + "stop_nm": "월계미륭아파트", + "ycode": "37.624038", + "stop_no": "11501", + "xcode": "127.068042", + "stop_type": "일반차로", + "node_id": "110000398", + "nxtStn": "월계미성아파트" + }, + { + "stop_nm": "7단지영업소", + "ycode": "37.6602778615", + "stop_no": "11502", + "xcode": "127.0637357104", + "stop_type": "일반차로", + "node_id": "110000399", + "nxtStn": "상계10동우체국" + }, + { + "stop_nm": "수락리버시티3.4단지", + "ycode": "37.68721", + "stop_no": "11503", + "xcode": "127.052687", + "stop_type": "일반차로", + "node_id": "110000640", + "nxtStn": "수락중고등학교" + }, + { + "stop_nm": "7단지영업소", + "ycode": "37.6596419854", + "stop_no": "11504", + "xcode": "127.0641070552", + "stop_type": "일반차로", + "node_id": "110000694", + "nxtStn": "상동역1번출구.부천터미널소풍." + }, + { + "stop_nm": "경춘선숲길방문자센터", + "ycode": "37.631832", + "stop_no": "11505", + "xcode": "127.070397", + "stop_type": "일반차로", + "node_id": "110000653", + "nxtStn": "하계2동주민센터" + }, + { + "stop_nm": "월계주공1단지아파트앞", + "ycode": "37.62626", + "stop_no": "11506", + "xcode": "127.05156", + "stop_type": "일반차로", + "node_id": "110000656", + "nxtStn": "종점" + }, + { + "stop_nm": "불암산스포츠타운", + "ycode": "37.639013", + "stop_no": "11507", + "xcode": "127.082806", + "stop_type": "일반차로", + "node_id": "110000676", + "nxtStn": "종점" + }, + { + "stop_nm": "중계본동종점", + "ycode": "37.6444764862", + "stop_no": "11508", + "xcode": "127.0828807934", + "stop_type": "일반차로", + "node_id": "110000674", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "불암산스포츠타운", + "ycode": "37.638684", + "stop_no": "11509", + "xcode": "127.082437", + "stop_type": "일반차로", + "node_id": "110000675", + "nxtStn": "서울과학기술대학교후문" + }, + { + "stop_nm": "수락현대아파트", + "ycode": "37.6746356354", + "stop_no": "11511", + "xcode": "127.0602823906", + "stop_type": "마을버스", + "node_id": "110900001", + "nxtStn": "수락산디자인거리" + }, + { + "stop_nm": "서울특별시북부기술교육원", + "ycode": "37.6421605433", + "stop_no": "11512", + "xcode": "127.0571172663", + "stop_type": "마을버스", + "node_id": "110900002", + "nxtStn": "마들근린공원.노원에코센터" + }, + { + "stop_nm": "상계8동주민센터", + "ycode": "37.666974", + "stop_no": "11513", + "xcode": "127.051943", + "stop_type": "마을버스", + "node_id": "110900003", + "nxtStn": "상계주공11단지" + }, + { + "stop_nm": "온곡초등학교", + "ycode": "37.6667154619", + "stop_no": "11514", + "xcode": "127.0664537758", + "stop_type": "마을버스", + "node_id": "110900004", + "nxtStn": "보람아파트앞" + }, + { + "stop_nm": "상계역", + "ycode": "37.660644234", + "stop_no": "11515", + "xcode": "127.0736491547", + "stop_type": "마을버스", + "node_id": "110900005", + "nxtStn": "노원센트럴푸르지오아파트상가" + }, + { + "stop_nm": "수락산디자인거리", + "ycode": "37.674971", + "stop_no": "11516", + "xcode": "127.057874", + "stop_type": "마을버스", + "node_id": "110900006", + "nxtStn": "7호선수락산역" + }, + { + "stop_nm": "상계주공11단지", + "ycode": "37.667017757", + "stop_no": "11518", + "xcode": "127.055119735", + "stop_type": "마을버스", + "node_id": "110900007", + "nxtStn": "마들역" + }, + { + "stop_nm": "보람아파트앞", + "ycode": "37.6649666306", + "stop_no": "11519", + "xcode": "127.0661699718", + "stop_type": "마을버스", + "node_id": "110900121", + "nxtStn": "상계한신2차아파트" + }, + { + "stop_nm": "노원센트럴푸르지오아파트상가", + "ycode": "37.6638676034", + "stop_no": "11521", + "xcode": "127.0751187662", + "stop_type": "마을버스", + "node_id": "110900008", + "nxtStn": "오뚜기슈퍼" + }, + { + "stop_nm": "7호선수락산역", + "ycode": "37.675835", + "stop_no": "11522", + "xcode": "127.055857", + "stop_type": "마을버스", + "node_id": "110900113", + "nxtStn": "노일초등학교" + }, + { + "stop_nm": "마들역", + "ycode": "37.665561", + "stop_no": "11524", + "xcode": "127.057475", + "stop_type": "마을버스", + "node_id": "110900009", + "nxtStn": "상계주공9단지" + }, + { + "stop_nm": "오뚜기슈퍼", + "ycode": "37.664375249", + "stop_no": "11527", + "xcode": "127.0727573729", + "stop_type": "마을버스", + "node_id": "110900010", + "nxtStn": "또또슈퍼" + }, + { + "stop_nm": "상계주공9단지", + "ycode": "37.6646710926", + "stop_no": "11530", + "xcode": "127.0593675238", + "stop_type": "마을버스", + "node_id": "110900136", + "nxtStn": "청원고등학교" + }, + { + "stop_nm": "대동아파트", + "ycode": "37.620137", + "stop_no": "11532", + "xcode": "127.072241", + "stop_type": "마을버스", + "node_id": "110900011", + "nxtStn": "대주아파트" + }, + { + "stop_nm": "또또슈퍼", + "ycode": "37.6653067674", + "stop_no": "11534", + "xcode": "127.0716043605", + "stop_type": "마을버스", + "node_id": "110900012", + "nxtStn": "대동택시" + }, + { + "stop_nm": "상계주공14단지", + "ycode": "37.6709217102", + "stop_no": "11535", + "xcode": "127.0578625428", + "stop_type": "마을버스", + "node_id": "110900013", + "nxtStn": "14단지상가" + }, + { + "stop_nm": "청원고등학교", + "ycode": "37.6645170181", + "stop_no": "11537", + "xcode": "127.0611130008", + "stop_type": "마을버스", + "node_id": "110900014", + "nxtStn": "상계주공9단지.포레나노원" + }, + { + "stop_nm": "수락산역", + "ycode": "37.677823", + "stop_no": "11538", + "xcode": "127.055226", + "stop_type": "마을버스", + "node_id": "110900015", + "nxtStn": "노일초등학교" + }, + { + "stop_nm": "대동택시", + "ycode": "37.6658821177", + "stop_no": "11539", + "xcode": "127.0708375154", + "stop_type": "마을버스", + "node_id": "110900016", + "nxtStn": "상계금호어울림아파트입구" + }, + { + "stop_nm": "14단지상가", + "ycode": "37.6697567019", + "stop_no": "11540", + "xcode": "127.0595053381", + "stop_type": "마을버스", + "node_id": "110900017", + "nxtStn": "상원초등학교" + }, + { + "stop_nm": "상계주공9단지.포레나노원", + "ycode": "37.6622649228", + "stop_no": "11542", + "xcode": "127.0616937591", + "stop_type": "마을버스", + "node_id": "110900019", + "nxtStn": "상계주공7단지.광림교회앞" + }, + { + "stop_nm": "상계금호어울림아파트입구", + "ycode": "37.666592042", + "stop_no": "11545", + "xcode": "127.0695323546", + "stop_type": "마을버스", + "node_id": "110900020", + "nxtStn": "한신1차아파트후문" + }, + { + "stop_nm": "상원초등학교", + "ycode": "37.668107", + "stop_no": "11546", + "xcode": "127.060307", + "stop_type": "마을버스", + "node_id": "110900087", + "nxtStn": "청원고등학교후문" + }, + { + "stop_nm": "주유소앞", + "ycode": "37.655617199", + "stop_no": "11549", + "xcode": "127.0658941981", + "stop_type": "마을버스", + "node_id": "110900086", + "nxtStn": "롯데백화점.노원역4번출구" + }, + { + "stop_nm": "건민약국앞", + "ycode": "37.6250138329", + "stop_no": "11550", + "xcode": "127.0719758027", + "stop_type": "마을버스", + "node_id": "110900085", + "nxtStn": "공릉역" + }, + { + "stop_nm": "노일중학교", + "ycode": "37.6725397529", + "stop_no": "11551", + "xcode": "127.0546941742", + "stop_type": "마을버스", + "node_id": "110900115", + "nxtStn": "상계1차현대아파트" + }, + { + "stop_nm": "한신1차아파트후문", + "ycode": "37.6659065133", + "stop_no": "11552", + "xcode": "127.0692075262", + "stop_type": "마을버스", + "node_id": "110900084", + "nxtStn": "상계한신1차아파트상가" + }, + { + "stop_nm": "청원고등학교후문", + "ycode": "37.6669955926", + "stop_no": "11553", + "xcode": "127.0616682026", + "stop_type": "마을버스", + "node_id": "110900131", + "nxtStn": "상계주공13단지" + }, + { + "stop_nm": "벽산상가", + "ycode": "37.6355998817", + "stop_no": "11554", + "xcode": "127.0655683222", + "stop_type": "마을버스", + "node_id": "110900083", + "nxtStn": "하계극동아파트" + }, + { + "stop_nm": "롯데백화점.노원역4번출구", + "ycode": "37.6547839375", + "stop_no": "11556", + "xcode": "127.0621375121", + "stop_type": "마을버스", + "node_id": "110900129", + "nxtStn": "노원구청앞" + }, + { + "stop_nm": "상계1차현대아파트", + "ycode": "37.6720621442", + "stop_no": "11558", + "xcode": "127.0528006763", + "stop_type": "마을버스", + "node_id": "110900082", + "nxtStn": "상계현대2차아파트" + }, + { + "stop_nm": "상계한신1차아파트상가", + "ycode": "37.6652660143", + "stop_no": "11559", + "xcode": "127.0689224185", + "stop_type": "마을버스", + "node_id": "110900081", + "nxtStn": "한신1차아파트정문" + }, + { + "stop_nm": "상계주공13단지", + "ycode": "37.6667468606", + "stop_no": "11560", + "xcode": "127.063432919", + "stop_type": "마을버스", + "node_id": "110900080", + "nxtStn": "보람아파트정문" + }, + { + "stop_nm": "노원역10번출구", + "ycode": "37.6566407298", + "stop_no": "11562", + "xcode": "127.0644341674", + "stop_type": "마을버스", + "node_id": "110900118", + "nxtStn": "노원역9번출구" + }, + { + "stop_nm": "노원구청앞", + "ycode": "37.653934", + "stop_no": "11563", + "xcode": "127.058277", + "stop_type": "마을버스", + "node_id": "110900079", + "nxtStn": "창4동주민센터" + }, + { + "stop_nm": "한신1차아파트정문", + "ycode": "37.665426804", + "stop_no": "11566", + "xcode": "127.068237921", + "stop_type": "마을버스", + "node_id": "110900078", + "nxtStn": "한신3차아파트" + }, + { + "stop_nm": "보람아파트정문", + "ycode": "37.6645548999", + "stop_no": "11567", + "xcode": "127.0644308067", + "stop_type": "마을버스", + "node_id": "110900077", + "nxtStn": "지에스마트" + }, + { + "stop_nm": "한신3차아파트", + "ycode": "37.6656829734", + "stop_no": "11571", + "xcode": "127.0672196744", + "stop_type": "마을버스", + "node_id": "110900120", + "nxtStn": "종점" + }, + { + "stop_nm": "상계주공15단지", + "ycode": "37.6706380752", + "stop_no": "11576", + "xcode": "127.0536169926", + "stop_type": "마을버스", + "node_id": "110900075", + "nxtStn": "상계주공14단지" + }, + { + "stop_nm": "광운대역", + "ycode": "37.6229211797", + "stop_no": "11581", + "xcode": "127.0614119968", + "stop_type": "마을버스", + "node_id": "110900071", + "nxtStn": "월계현대아파트" + }, + { + "stop_nm": "청솔7단지아파트", + "ycode": "37.6317303507", + "stop_no": "11583", + "xcode": "127.0722281429", + "stop_type": "마을버스", + "node_id": "110900108", + "nxtStn": "경춘선숲길방문자센터" + }, + { + "stop_nm": "대림아파트105동앞", + "ycode": "37.662867", + "stop_no": "11587", + "xcode": "127.073725", + "stop_type": "마을버스", + "node_id": "110900070", + "nxtStn": "상신교회" + }, + { + "stop_nm": "상계6동우체국", + "ycode": "37.6536989107", + "stop_no": "11590", + "xcode": "127.0588725833", + "stop_type": "마을버스", + "node_id": "110900128", + "nxtStn": "마들역" + }, + { + "stop_nm": "상신교회", + "ycode": "37.6613054276", + "stop_no": "11593", + "xcode": "127.0710326547", + "stop_type": "마을버스", + "node_id": "110900068", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "석계역", + "ycode": "37.615421632", + "stop_no": "11594", + "xcode": "127.0644586182", + "stop_type": "마을버스", + "node_id": "110900067", + "nxtStn": "화진연립" + }, + { + "stop_nm": "노원역2번출구", + "ycode": "37.656281", + "stop_no": "11595", + "xcode": "127.063159", + "stop_type": "마을버스", + "node_id": "110900119", + "nxtStn": "상계초등학교" + }, + { + "stop_nm": "노원역5번출구", + "ycode": "37.6543273712", + "stop_no": "11596", + "xcode": "127.0616021898", + "stop_type": "마을버스", + "node_id": "110900130", + "nxtStn": "KT플라자노원점" + }, + { + "stop_nm": "장미6단지아파트", + "ycode": "37.6329598124", + "stop_no": "11597", + "xcode": "127.0669924831", + "stop_type": "마을버스", + "node_id": "110900066", + "nxtStn": "장미5단지아파트" + }, + { + "stop_nm": "화진연립", + "ycode": "37.6158813474", + "stop_no": "11599", + "xcode": "127.0607559977", + "stop_type": "마을버스", + "node_id": "110900091", + "nxtStn": "동신아파트" + }, + { + "stop_nm": "KT플라자노원점", + "ycode": "37.654889", + "stop_no": "11601", + "xcode": "127.063664", + "stop_type": "마을버스", + "node_id": "110900065", + "nxtStn": "순복음교회" + }, + { + "stop_nm": "중계센트럴파크아파트", + "ycode": "37.64379", + "stop_no": "11602", + "xcode": "127.05969", + "stop_type": "마을버스", + "node_id": "110900149", + "nxtStn": "종점" + }, + { + "stop_nm": "장석교회", + "ycode": "37.6242668613", + "stop_no": "11603", + "xcode": "127.0509399385", + "stop_type": "마을버스", + "node_id": "110900150", + "nxtStn": "교육촌.벼루말" + }, + { + "stop_nm": "교육촌.벼루말", + "ycode": "37.621867", + "stop_no": "11604", + "xcode": "127.052674", + "stop_type": "마을버스", + "node_id": "107900332", + "nxtStn": "꿈의숲SK뷰아파트" + }, + { + "stop_nm": "꿈의숲SK뷰아파트", + "ycode": "37.620868", + "stop_no": "11605", + "xcode": "127.053655", + "stop_type": "마을버스", + "node_id": "107900333", + "nxtStn": "광운중.광운인공지능고등학교" + }, + { + "stop_nm": "석계역문화공원", + "ycode": "37.615372", + "stop_no": "11607", + "xcode": "127.064422", + "stop_type": "마을버스", + "node_id": "107900337", + "nxtStn": "석관동주민센터" + }, + { + "stop_nm": "꿈의숲SK뷰아파트", + "ycode": "37.620879", + "stop_no": "11609", + "xcode": "127.053777", + "stop_type": "마을버스", + "node_id": "107900334", + "nxtStn": "교육촌.벼루말" + }, + { + "stop_nm": "장미5단지아파트", + "ycode": "37.6340828467", + "stop_no": "11634", + "xcode": "127.0664870208", + "stop_type": "마을버스", + "node_id": "110900063", + "nxtStn": "하계역" + }, + { + "stop_nm": "당고개역", + "ycode": "37.6692446012", + "stop_no": "11664", + "xcode": "127.0784855626", + "stop_type": "일반차로", + "node_id": "110000655", + "nxtStn": "상계3.4동주민센터" + }, + { + "stop_nm": "동신아파트", + "ycode": "37.6173040527", + "stop_no": "11675", + "xcode": "127.0609644558", + "stop_type": "마을버스", + "node_id": "110900062", + "nxtStn": "삼창아파트" + }, + { + "stop_nm": "순복음교회", + "ycode": "37.6553098844", + "stop_no": "11680", + "xcode": "127.0659777956", + "stop_type": "마을버스", + "node_id": "110900061", + "nxtStn": "메디아이산부인과" + }, + { + "stop_nm": "수락산역", + "ycode": "37.680258992", + "stop_no": "11689", + "xcode": "127.0552859878", + "stop_type": "가로변시간", + "node_id": "110000670", + "nxtStn": "노일초교앞" + }, + { + "stop_nm": "하계역", + "ycode": "37.635345", + "stop_no": "11723", + "xcode": "127.068366", + "stop_type": "마을버스", + "node_id": "110900111", + "nxtStn": "경춘선숲길방문자센터" + }, + { + "stop_nm": "지에스마트", + "ycode": "37.6637908331", + "stop_no": "11781", + "xcode": "127.0659762338", + "stop_type": "마을버스", + "node_id": "110900060", + "nxtStn": "보람1차후문" + }, + { + "stop_nm": "보람아파트상가", + "ycode": "37.6646590132", + "stop_no": "11784", + "xcode": "127.0651801458", + "stop_type": "마을버스", + "node_id": "110900059", + "nxtStn": "상계주공13단지" + }, + { + "stop_nm": "삼창아파트", + "ycode": "37.618195896", + "stop_no": "11793", + "xcode": "127.0596522656", + "stop_type": "마을버스", + "node_id": "110900058", + "nxtStn": "동신아파트" + }, + { + "stop_nm": "포레나노원", + "ycode": "37.6631858244", + "stop_no": "11796", + "xcode": "127.0616933878", + "stop_type": "마을버스", + "node_id": "110900057", + "nxtStn": "청원고등학교" + }, + { + "stop_nm": "청솔7단지앞", + "ycode": "37.6315960409", + "stop_no": "11801", + "xcode": "127.0723073234", + "stop_type": "일반차로", + "node_id": "110000587", + "nxtStn": "한천중학교" + }, + { + "stop_nm": "경춘선숲길방문자센터", + "ycode": "37.6316152129", + "stop_no": "11803", + "xcode": "127.0704050243", + "stop_type": "일반차로", + "node_id": "110000589", + "nxtStn": "청솔7단지앞" + }, + { + "stop_nm": "메디아이산부인과", + "ycode": "37.6564915397", + "stop_no": "11804", + "xcode": "127.0669716859", + "stop_type": "마을버스", + "node_id": "110900056", + "nxtStn": "상계2동주민센터" + }, + { + "stop_nm": "보람1차후문", + "ycode": "37.6621032692", + "stop_no": "11818", + "xcode": "127.065699307", + "stop_type": "마을버스", + "node_id": "110900132", + "nxtStn": "온곡중학교" + }, + { + "stop_nm": "상계주공13단지", + "ycode": "37.666671", + "stop_no": "11819", + "xcode": "127.063863", + "stop_type": "마을버스", + "node_id": "110900054", + "nxtStn": "청원고등학교후문" + }, + { + "stop_nm": "노일초교", + "ycode": "37.6727734628", + "stop_no": "11827", + "xcode": "127.0559095992", + "stop_type": "일반차로", + "node_id": "110000668", + "nxtStn": "수락터미널" + }, + { + "stop_nm": "노일초교앞", + "ycode": "37.6735874431", + "stop_no": "11828", + "xcode": "127.0552549636", + "stop_type": "일반차로", + "node_id": "110000667", + "nxtStn": "마들역" + }, + { + "stop_nm": "마들역", + "ycode": "37.6651451292", + "stop_no": "11829", + "xcode": "127.0574057853", + "stop_type": "가로변시간", + "node_id": "110000672", + "nxtStn": "노원역" + }, + { + "stop_nm": "마들역", + "ycode": "37.6664029636", + "stop_no": "11830", + "xcode": "127.057548446", + "stop_type": "가로변전일", + "node_id": "110000664", + "nxtStn": "노일초교" + }, + { + "stop_nm": "노원역", + "ycode": "37.6518335013", + "stop_no": "11831", + "xcode": "127.0609915402", + "stop_type": "가로변시간", + "node_id": "110000665", + "nxtStn": "중계역" + }, + { + "stop_nm": "노원역", + "ycode": "37.6529525233", + "stop_no": "11832", + "xcode": "127.0612202549", + "stop_type": "가로변전일", + "node_id": "110000671", + "nxtStn": "마들역" + }, + { + "stop_nm": "중계역", + "ycode": "37.6472686025", + "stop_no": "11833", + "xcode": "127.0627647339", + "stop_type": "가로변시간", + "node_id": "110000669", + "nxtStn": "하계역" + }, + { + "stop_nm": "중계역", + "ycode": "37.6480849384", + "stop_no": "11834", + "xcode": "127.0628447488", + "stop_type": "가로변시간", + "node_id": "110000663", + "nxtStn": "노원역" + }, + { + "stop_nm": "하계역", + "ycode": "37.6350402373", + "stop_no": "11835", + "xcode": "127.068859365", + "stop_type": "가로변시간", + "node_id": "110000661", + "nxtStn": "중계역" + }, + { + "stop_nm": "하계역", + "ycode": "37.6351558735", + "stop_no": "11836", + "xcode": "127.0683473286", + "stop_type": "가로변시간", + "node_id": "110000662", + "nxtStn": "공릉역4번출구" + }, + { + "stop_nm": "동신아파트", + "ycode": "37.61708085", + "stop_no": "11842", + "xcode": "127.0586613199", + "stop_type": "마을버스", + "node_id": "110900053", + "nxtStn": "화진연립" + }, + { + "stop_nm": "청백아파트", + "ycode": "37.63221", + "stop_no": "11843", + "xcode": "127.052348", + "stop_type": "마을버스", + "node_id": "110900145", + "nxtStn": "월계주공2단지앞" + }, + { + "stop_nm": "청백아파트", + "ycode": "37.6325284238", + "stop_no": "11844", + "xcode": "127.0525501962", + "stop_type": "마을버스", + "node_id": "110900148", + "nxtStn": "대우아파트" + }, + { + "stop_nm": "월계주공2단지앞", + "ycode": "37.6292", + "stop_no": "11845", + "xcode": "127.054667", + "stop_type": "마을버스", + "node_id": "110900146", + "nxtStn": "월계주공2단지" + }, + { + "stop_nm": "인덕대앞", + "ycode": "37.62934", + "stop_no": "11846", + "xcode": "127.054777", + "stop_type": "마을버스", + "node_id": "110900147", + "nxtStn": "청백아파트" + }, + { + "stop_nm": "청원고등학교", + "ycode": "37.6646214365", + "stop_no": "11847", + "xcode": "127.0613182514", + "stop_type": "마을버스", + "node_id": "110900052", + "nxtStn": "상계주공12단지1202동" + }, + { + "stop_nm": "청백아파트종점", + "ycode": "37.6355589675", + "stop_no": "11848", + "xcode": "127.0524831681", + "stop_type": "마을버스", + "node_id": "110900144", + "nxtStn": "종점" + }, + { + "stop_nm": "롯데캐슬루나아파트", + "ycode": "37.6252290714", + "stop_no": "11859", + "xcode": "127.0515462538", + "stop_type": "일반차로", + "node_id": "110000660", + "nxtStn": "인덕대학" + }, + { + "stop_nm": "인덕대학", + "ycode": "37.6286964721", + "stop_no": "11860", + "xcode": "127.0554494371", + "stop_type": "일반차로", + "node_id": "110000658", + "nxtStn": "월계동대우아파트" + }, + { + "stop_nm": "인덕대학", + "ycode": "37.6279225632", + "stop_no": "11861", + "xcode": "127.0551905495", + "stop_type": "가로변전일", + "node_id": "110000657", + "nxtStn": "롯데캐슬루나아파트" + }, + { + "stop_nm": "롯데캐슬루나아파트", + "ycode": "37.6253859655", + "stop_no": "11862", + "xcode": "127.051303919", + "stop_type": "일반차로", + "node_id": "110000659", + "nxtStn": "북서울꿈의숲" + }, + { + "stop_nm": "수락터미널", + "ycode": "37.678762", + "stop_no": "11863", + "xcode": "127.053626", + "stop_type": "일반차로", + "node_id": "110000666", + "nxtStn": "의정부IC(가상)" + }, + { + "stop_nm": "상계2동주민센터", + "ycode": "37.6580461346", + "stop_no": "11866", + "xcode": "127.0682709722", + "stop_type": "마을버스", + "node_id": "110900153", + "nxtStn": "주유소앞" + }, + { + "stop_nm": "온곡중학교", + "ycode": "37.6604211521", + "stop_no": "11867", + "xcode": "127.0653475903", + "stop_type": "마을버스", + "node_id": "110900049", + "nxtStn": "상계초등학교" + }, + { + "stop_nm": "청원고등학교후문", + "ycode": "37.6670774308", + "stop_no": "11868", + "xcode": "127.061973194", + "stop_type": "마을버스", + "node_id": "110900133", + "nxtStn": "상원초등학교" + }, + { + "stop_nm": "화진연립", + "ycode": "37.6157506698", + "stop_no": "11869", + "xcode": "127.0607955382", + "stop_type": "마을버스", + "node_id": "110900090", + "nxtStn": "석계역" + }, + { + "stop_nm": "석계역", + "ycode": "37.6152947954", + "stop_no": "11874", + "xcode": "127.0639696032", + "stop_type": "마을버스", + "node_id": "110900047", + "nxtStn": "농협" + }, + { + "stop_nm": "마들역", + "ycode": "37.664477", + "stop_no": "11875", + "xcode": "127.05686", + "stop_type": "마을버스", + "node_id": "110900046", + "nxtStn": "동일초등학교" + }, + { + "stop_nm": "수락리버시티3.4단지", + "ycode": "37.687056013", + "stop_no": "11879", + "xcode": "127.0528498554", + "stop_type": "마을버스", + "node_id": "110900116", + "nxtStn": "수락리버시티2단지정문" + }, + { + "stop_nm": "14단지상가", + "ycode": "37.6698782533", + "stop_no": "11880", + "xcode": "127.0596913435", + "stop_type": "마을버스", + "node_id": "110900045", + "nxtStn": "상원중학교" + }, + { + "stop_nm": "농협", + "ycode": "37.6166561998", + "stop_no": "11881", + "xcode": "127.0643090243", + "stop_type": "마을버스", + "node_id": "110900044", + "nxtStn": "월계1동주민센터" + }, + { + "stop_nm": "동일초등학교", + "ycode": "37.6644124259", + "stop_no": "11882", + "xcode": "127.0557933772", + "stop_type": "마을버스", + "node_id": "110900043", + "nxtStn": "주공11단지성당" + }, + { + "stop_nm": "월계1동주민센터", + "ycode": "37.6193859905", + "stop_no": "11884", + "xcode": "127.0635603154", + "stop_type": "마을버스", + "node_id": "110900042", + "nxtStn": "광운대역" + }, + { + "stop_nm": "주공11단지성당", + "ycode": "37.664495", + "stop_no": "11885", + "xcode": "127.053488", + "stop_type": "마을버스", + "node_id": "110900041", + "nxtStn": "종점" + }, + { + "stop_nm": "건민약국앞", + "ycode": "37.6252418718", + "stop_no": "11886", + "xcode": "127.071869529", + "stop_type": "마을버스", + "node_id": "110900040", + "nxtStn": "대아아파트" + }, + { + "stop_nm": "상계주공14단지", + "ycode": "37.6706636759", + "stop_no": "11887", + "xcode": "127.0566788642", + "stop_type": "마을버스", + "node_id": "110900039", + "nxtStn": "노원초등학교" + }, + { + "stop_nm": "광운대역", + "ycode": "37.6231879357", + "stop_no": "11888", + "xcode": "127.0613442435", + "stop_type": "마을버스", + "node_id": "110900038", + "nxtStn": "신도브래뉴.한전노원변전소" + }, + { + "stop_nm": "대아아파트", + "ycode": "37.622991", + "stop_no": "11890", + "xcode": "127.071166", + "stop_type": "마을버스", + "node_id": "110900037", + "nxtStn": "대주아파트" + }, + { + "stop_nm": "대주아파트", + "ycode": "37.621562", + "stop_no": "11893", + "xcode": "127.071688", + "stop_type": "마을버스", + "node_id": "110900036", + "nxtStn": "대동아파트" + }, + { + "stop_nm": "7호선수락산역", + "ycode": "37.6755694441", + "stop_no": "11894", + "xcode": "127.0560307331", + "stop_type": "마을버스", + "node_id": "110900035", + "nxtStn": "수락산디자인거리" + }, + { + "stop_nm": "대동아파트", + "ycode": "37.6196579989", + "stop_no": "11897", + "xcode": "127.0721221193", + "stop_type": "마을버스", + "node_id": "110900097", + "nxtStn": "공릉초등학교" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.6603174005", + "stop_no": "11898", + "xcode": "127.0655775882", + "stop_type": "마을버스", + "node_id": "110900033", + "nxtStn": "보람1차후문" + }, + { + "stop_nm": "수락산디자인거리", + "ycode": "37.6748739104", + "stop_no": "11899", + "xcode": "127.0576989633", + "stop_type": "마을버스", + "node_id": "110900032", + "nxtStn": "수락현대아파트" + }, + { + "stop_nm": "공릉초등학교", + "ycode": "37.618327", + "stop_no": "11901", + "xcode": "127.072547", + "stop_type": "마을버스", + "node_id": "110900095", + "nxtStn": "한진한화그랑빌아파트" + }, + { + "stop_nm": "보람1차후문", + "ycode": "37.6621166411", + "stop_no": "11902", + "xcode": "127.0659577499", + "stop_type": "마을버스", + "node_id": "110900135", + "nxtStn": "지에스마트" + }, + { + "stop_nm": "수락현대아파트", + "ycode": "37.6743422459", + "stop_no": "11903", + "xcode": "127.059571351", + "stop_type": "마을버스", + "node_id": "110900031", + "nxtStn": "종점" + }, + { + "stop_nm": "하계실버센터", + "ycode": "37.633742", + "stop_no": "11904", + "xcode": "127.064896", + "stop_type": "마을버스", + "node_id": "110900030", + "nxtStn": "벽산상가" + }, + { + "stop_nm": "지에스마트", + "ycode": "37.6634077801", + "stop_no": "11906", + "xcode": "127.0661459181", + "stop_type": "마을버스", + "node_id": "110900029", + "nxtStn": "보람아파트상가" + }, + { + "stop_nm": "벽산상가", + "ycode": "37.6354312046", + "stop_no": "11907", + "xcode": "127.0658820328", + "stop_type": "마을버스", + "node_id": "110900028", + "nxtStn": "현대우성아파트" + }, + { + "stop_nm": "현대우성아파트", + "ycode": "37.63703", + "stop_no": "11910", + "xcode": "127.06519", + "stop_type": "마을버스", + "node_id": "110900027", + "nxtStn": "브라운스톤중계.우리은행앞" + }, + { + "stop_nm": "미도아파트앞", + "ycode": "37.6447970339", + "stop_no": "11915", + "xcode": "127.060864533", + "stop_type": "마을버스", + "node_id": "110900025", + "nxtStn": "중계센트럴파크아파트" + }, + { + "stop_nm": "상계현대3차아파트", + "ycode": "37.6707308288", + "stop_no": "11916", + "xcode": "127.053742889", + "stop_type": "마을버스", + "node_id": "110900024", + "nxtStn": "상계현대3차아파트" + }, + { + "stop_nm": "24시편의점", + "ycode": "37.6613714485", + "stop_no": "11926", + "xcode": "127.0706292064", + "stop_type": "마을버스", + "node_id": "110900125", + "nxtStn": "상계역" + }, + { + "stop_nm": "원자력병원입구", + "ycode": "37.6273693051", + "stop_no": "11927", + "xcode": "127.0775985987", + "stop_type": "마을버스", + "node_id": "110900023", + "nxtStn": "서울과학기술대앞" + }, + { + "stop_nm": "상원초등학교", + "ycode": "37.667989", + "stop_no": "11928", + "xcode": "127.0606", + "stop_type": "마을버스", + "node_id": "110900022", + "nxtStn": "14단지상가" + }, + { + "stop_nm": "상원중학교", + "ycode": "37.671119003", + "stop_no": "11929", + "xcode": "127.0579499838", + "stop_type": "마을버스", + "node_id": "110900021", + "nxtStn": "상계현대3차아파트" + }, + { + "stop_nm": "노원역8번출구", + "ycode": "37.65532", + "stop_no": "11931", + "xcode": "127.059262", + "stop_type": "일반차로", + "node_id": "110000679", + "nxtStn": "상계주공3단지" + }, + { + "stop_nm": "서울과학기술대학교정문앞", + "ycode": "37.630292744", + "stop_no": "11933", + "xcode": "127.0771008584", + "stop_type": "마을버스", + "node_id": "110900141", + "nxtStn": "대학본부앞" + }, + { + "stop_nm": "대학본부앞", + "ycode": "37.6321298894", + "stop_no": "11934", + "xcode": "127.0787105035", + "stop_type": "마을버스", + "node_id": "110900139", + "nxtStn": "붕어방" + }, + { + "stop_nm": "붕어방", + "ycode": "37.634002", + "stop_no": "11935", + "xcode": "127.07799", + "stop_type": "마을버스", + "node_id": "110900138", + "nxtStn": "대학본부앞" + }, + { + "stop_nm": "대학본부앞", + "ycode": "37.6320633528", + "stop_no": "11936", + "xcode": "127.0784951609", + "stop_type": "마을버스", + "node_id": "110900137", + "nxtStn": "서울과학기술대학교정문앞" + }, + { + "stop_nm": "서울과학기술대학교정문앞", + "ycode": "37.6311853983", + "stop_no": "11937", + "xcode": "127.0775867046", + "stop_type": "마을버스", + "node_id": "110900140", + "nxtStn": "동신아파트" + }, + { + "stop_nm": "중계그린아파트", + "ycode": "37.6407016676", + "stop_no": "11938", + "xcode": "127.0641790384", + "stop_type": "마을버스", + "node_id": "110900143", + "nxtStn": "건영옴니백화점" + }, + { + "stop_nm": "브라운스톤중계", + "ycode": "37.640479158", + "stop_no": "11939", + "xcode": "127.0640734649", + "stop_type": "마을버스", + "node_id": "110900142", + "nxtStn": "중계역" + }, + { + "stop_nm": "석계역문화공원(북)", + "ycode": "37.615372", + "stop_no": "11940", + "xcode": "127.064422", + "stop_type": "마을버스", + "node_id": "107900360", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "당고개역", + "ycode": "37.6706170199", + "stop_no": "11990", + "xcode": "127.079711295", + "stop_type": "일반차로", + "node_id": "110000650", + "nxtStn": "당고개입구오거리" + }, + { + "stop_nm": "동막골유원지", + "ycode": "37.6751003976", + "stop_no": "11992", + "xcode": "127.0866348621", + "stop_type": "일반차로", + "node_id": "110000648", + "nxtStn": "덕능교장" + }, + { + "stop_nm": "상계3.4동주민센터", + "ycode": "37.6723158562", + "stop_no": "11994", + "xcode": "127.0831808706", + "stop_type": "일반차로", + "node_id": "110000646", + "nxtStn": "삼거리농원" + }, + { + "stop_nm": "상계3.4동주민센터", + "ycode": "37.6730037112", + "stop_no": "11995", + "xcode": "127.0834249516", + "stop_type": "일반차로", + "node_id": "110000645", + "nxtStn": "당고개역" + }, + { + "stop_nm": "상계4동", + "ycode": "37.6738791873", + "stop_no": "11996", + "xcode": "127.0844987818", + "stop_type": "일반차로", + "node_id": "110000644", + "nxtStn": "상계3.4동주민센터" + }, + { + "stop_nm": "동막골유원지", + "ycode": "37.6752275947", + "stop_no": "11997", + "xcode": "127.0864366179", + "stop_type": "일반차로", + "node_id": "110000643", + "nxtStn": "상계4동" + }, + { + "stop_nm": "덕은교.은평차고지앞", + "ycode": "37.5895807424", + "stop_no": "12001", + "xcode": "126.8840903371", + "stop_type": "중앙차로", + "node_id": "111000001", + "nxtStn": "수색교" + }, + { + "stop_nm": "덕은교.은평차고지앞", + "ycode": "37.5891989861", + "stop_no": "12002", + "xcode": "126.8848376007", + "stop_type": "중앙차로", + "node_id": "111000002", + "nxtStn": "덕은동(중)" + }, + { + "stop_nm": "수색교", + "ycode": "37.585759", + "stop_no": "12003", + "xcode": "126.888672", + "stop_type": "중앙차로", + "node_id": "111000003", + "nxtStn": "수색역앞" + }, + { + "stop_nm": "수색교", + "ycode": "37.584698", + "stop_no": "12004", + "xcode": "126.89018", + "stop_type": "중앙차로", + "node_id": "111000004", + "nxtStn": "월드컵파크7단지" + }, + { + "stop_nm": "수색역앞", + "ycode": "37.5832230348", + "stop_no": "12005", + "xcode": "126.8932380184", + "stop_type": "중앙차로", + "node_id": "111000005", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "수색역앞", + "ycode": "37.583047", + "stop_no": "12006", + "xcode": "126.894103", + "stop_type": "중앙차로", + "node_id": "111000006", + "nxtStn": "수색교" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.579047", + "stop_no": "12007", + "xcode": "126.900505", + "stop_type": "중앙차로", + "node_id": "111000007", + "nxtStn": "DMC래미안e.편한세상요진아파트" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.578622", + "stop_no": "12008", + "xcode": "126.901345", + "stop_type": "중앙차로", + "node_id": "111000008", + "nxtStn": "수색역앞" + }, + { + "stop_nm": "은평뉴타운10단지", + "ycode": "37.642948", + "stop_no": "12009", + "xcode": "126.915165", + "stop_type": "중앙차로", + "node_id": "111000009", + "nxtStn": "진관공영차고지" + }, + { + "stop_nm": "은평뉴타운10단지", + "ycode": "37.643407", + "stop_no": "12010", + "xcode": "126.91373", + "stop_type": "중앙차로", + "node_id": "111000010", + "nxtStn": "구파발역입구" + }, + { + "stop_nm": "구파발역입구", + "ycode": "37.636164", + "stop_no": "12011", + "xcode": "126.917023", + "stop_type": "중앙차로", + "node_id": "111000011", + "nxtStn": "은평뉴타운10단지" + }, + { + "stop_nm": "구파발역입구", + "ycode": "37.637116", + "stop_no": "12012", + "xcode": "126.916837", + "stop_type": "중앙차로", + "node_id": "111000012", + "nxtStn": "은진초교입구.은뜨락도서관" + }, + { + "stop_nm": "박석고개.신도고등학교", + "ycode": "37.629919", + "stop_no": "12013", + "xcode": "126.919374", + "stop_type": "중앙차로", + "node_id": "111000013", + "nxtStn": "구파발(가상)" + }, + { + "stop_nm": "박석고개.신도고등학교", + "ycode": "37.6310872697", + "stop_no": "12014", + "xcode": "126.9190609605", + "stop_type": "중앙차로", + "node_id": "111000014", + "nxtStn": "세명컴퓨터고등학교" + }, + { + "stop_nm": "세명컴퓨터고등학교", + "ycode": "37.6242147932", + "stop_no": "12015", + "xcode": "126.9199734902", + "stop_type": "중앙차로", + "node_id": "111000926", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "세명컴퓨터고등학교", + "ycode": "37.6252825924", + "stop_no": "12016", + "xcode": "126.9199961366", + "stop_type": "중앙차로", + "node_id": "111000925", + "nxtStn": "연신내역.연서시장" + }, + { + "stop_nm": "연신내역.연서시장", + "ycode": "37.6183598996", + "stop_no": "12017", + "xcode": "126.9218398322", + "stop_type": "중앙차로", + "node_id": "111000928", + "nxtStn": "세명컴퓨터고등학교" + }, + { + "stop_nm": "연신내역.연서시장", + "ycode": "37.6192580456", + "stop_no": "12018", + "xcode": "126.9210382474", + "stop_type": "중앙차로", + "node_id": "111000927", + "nxtStn": "동명여고.천주교불광동성당" + }, + { + "stop_nm": "동명여고.천주교불광동성당", + "ycode": "37.6156029897", + "stop_no": "12019", + "xcode": "126.9250457359", + "stop_type": "중앙차로", + "node_id": "111000930", + "nxtStn": "연신내역.연서시장" + }, + { + "stop_nm": "동명여고.천주교불광동성당", + "ycode": "37.6161853499", + "stop_no": "12020", + "xcode": "126.9240393187", + "stop_type": "중앙차로", + "node_id": "111000929", + "nxtStn": "불광역3.6호선" + }, + { + "stop_nm": "불광역3.6호선", + "ycode": "37.6119112959", + "stop_no": "12021", + "xcode": "126.9287979055", + "stop_type": "중앙차로", + "node_id": "111000932", + "nxtStn": "동명여고.천주교불광동성당" + }, + { + "stop_nm": "불광역3.6호선", + "ycode": "37.6124473901", + "stop_no": "12022", + "xcode": "126.9281552459", + "stop_type": "중앙차로", + "node_id": "111000931", + "nxtStn": "불광역3호선.서울혁신파크" + }, + { + "stop_nm": "불광역3호선.서울혁신파크", + "ycode": "37.60865", + "stop_no": "12023", + "xcode": "126.931625", + "stop_type": "중앙차로", + "node_id": "111000934", + "nxtStn": "불광역3.6호선" + }, + { + "stop_nm": "불광역3호선.서울혁신파크", + "ycode": "37.609067", + "stop_no": "12024", + "xcode": "126.931067", + "stop_type": "중앙차로", + "node_id": "111000933", + "nxtStn": "한전서대문은평.북한산푸르지오" + }, + { + "stop_nm": "한전서대문은평.북한산푸르지오", + "ycode": "37.6055532703", + "stop_no": "12025", + "xcode": "126.9343058909", + "stop_type": "중앙차로", + "node_id": "111000936", + "nxtStn": "불광역3호선.서울혁신파크" + }, + { + "stop_nm": "한전서대문은평.북한산푸르지오", + "ycode": "37.606093", + "stop_no": "12026", + "xcode": "126.933807", + "stop_type": "중앙차로", + "node_id": "111000935", + "nxtStn": "녹번전철역" + }, + { + "stop_nm": "녹번역", + "ycode": "37.6018619707", + "stop_no": "12027", + "xcode": "126.935322042", + "stop_type": "중앙차로", + "node_id": "111000938", + "nxtStn": "한전서대문은평.북한산푸르지오" + }, + { + "stop_nm": "녹번역", + "ycode": "37.6024349118", + "stop_no": "12028", + "xcode": "126.9350485981", + "stop_type": "중앙차로", + "node_id": "111000937", + "nxtStn": "산골고개" + }, + { + "stop_nm": "불광역1번출구", + "ycode": "37.6100879267", + "stop_no": "12103", + "xcode": "126.9304602536", + "stop_type": "가로변전일", + "node_id": "111000017", + "nxtStn": "동명여고" + }, + { + "stop_nm": "불광역3.6호선", + "ycode": "37.6124835753", + "stop_no": "12104", + "xcode": "126.9283885506", + "stop_type": "가로변시간", + "node_id": "111000018", + "nxtStn": "동명여고" + }, + { + "stop_nm": "동명여고", + "ycode": "37.616295", + "stop_no": "12105", + "xcode": "126.924228", + "stop_type": "가로변전일", + "node_id": "111000917", + "nxtStn": "연서시장" + }, + { + "stop_nm": "연신내역", + "ycode": "37.6181925106", + "stop_no": "12106", + "xcode": "126.9221617234", + "stop_type": "가로변시간", + "node_id": "111000020", + "nxtStn": "연서시장" + }, + { + "stop_nm": "선일하이츠빌라", + "ycode": "37.62279", + "stop_no": "12107", + "xcode": "126.919943", + "stop_type": "가로변전일", + "node_id": "111000021", + "nxtStn": "세명컴퓨터고등학교" + }, + { + "stop_nm": "세명컴퓨터고등학교", + "ycode": "37.6257486454", + "stop_no": "12109", + "xcode": "126.9202811322", + "stop_type": "가로변시간", + "node_id": "111000023", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "구파발역2번출구", + "ycode": "37.6367680033", + "stop_no": "12111", + "xcode": "126.9189889746", + "stop_type": "일반차로", + "node_id": "111000025", + "nxtStn": "고양IC(가상)" + }, + { + "stop_nm": "구파발역.롯데몰", + "ycode": "37.637248", + "stop_no": "12112", + "xcode": "126.918577", + "stop_type": "일반차로", + "node_id": "111001116", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "구파발역.롯데몰", + "ycode": "37.637246", + "stop_no": "12113", + "xcode": "126.918533", + "stop_type": "일반차로", + "node_id": "111001117", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "박석고개", + "ycode": "37.6262373755", + "stop_no": "12117", + "xcode": "126.9198715831", + "stop_type": "가로변시간", + "node_id": "111000029", + "nxtStn": "연신내역" + }, + { + "stop_nm": "신한은행갈현지점", + "ycode": "37.6238469574", + "stop_no": "12118", + "xcode": "126.9196883967", + "stop_type": "가로변시간", + "node_id": "111000030", + "nxtStn": "연신내역.로데오거리" + }, + { + "stop_nm": "연신내역", + "ycode": "37.617346", + "stop_no": "12119", + "xcode": "126.92256", + "stop_type": "가로변전일", + "node_id": "111000031", + "nxtStn": "불광역3.6호선" + }, + { + "stop_nm": "동명여고", + "ycode": "37.6159770824", + "stop_no": "12120", + "xcode": "126.9240648193", + "stop_type": "가로변시간", + "node_id": "111000032", + "nxtStn": "불광역3.6호선" + }, + { + "stop_nm": "불광역3.6호선", + "ycode": "37.612663", + "stop_no": "12121", + "xcode": "126.927845", + "stop_type": "가로변전일", + "node_id": "111000033", + "nxtStn": "국민은행세검정지점" + }, + { + "stop_nm": "불광역4번출구", + "ycode": "37.609758", + "stop_no": "12122", + "xcode": "126.930336", + "stop_type": "가로변전일", + "node_id": "111000034", + "nxtStn": "양광교회" + }, + { + "stop_nm": "녹번역", + "ycode": "37.601187", + "stop_no": "12125", + "xcode": "126.933176", + "stop_type": "가로변전일", + "node_id": "111000037", + "nxtStn": "은평구청" + }, + { + "stop_nm": "은평구청", + "ycode": "37.6014275543", + "stop_no": "12126", + "xcode": "126.930407158", + "stop_type": "가로변시간", + "node_id": "111000038", + "nxtStn": "역촌역" + }, + { + "stop_nm": "은평세무서", + "ycode": "37.6013998544", + "stop_no": "12127", + "xcode": "126.926337939", + "stop_type": "일반차로", + "node_id": "111000039", + "nxtStn": "본서부병원" + }, + { + "stop_nm": "본서부병원", + "ycode": "37.6009", + "stop_no": "12128", + "xcode": "126.9238", + "stop_type": "일반차로", + "node_id": "111000040", + "nxtStn": "서강스카이빌" + }, + { + "stop_nm": "신진과학기술고교.이마트은평점", + "ycode": "37.5998598128", + "stop_no": "12129", + "xcode": "126.918510745", + "stop_type": "일반차로", + "node_id": "111000041", + "nxtStn": "응암역신사오거리" + }, + { + "stop_nm": "응암역신사오거리", + "ycode": "37.599036", + "stop_no": "12130", + "xcode": "126.914866", + "stop_type": "일반차로", + "node_id": "111000042", + "nxtStn": "신사동고개" + }, + { + "stop_nm": "응암역신사오거리", + "ycode": "37.5987592495", + "stop_no": "12131", + "xcode": "126.9149894161", + "stop_type": "일반차로", + "node_id": "111000043", + "nxtStn": "신진과학기술고교.이마트은평점" + }, + { + "stop_nm": "신진과학기술고교.이마트은평점", + "ycode": "37.5995376513", + "stop_no": "12132", + "xcode": "126.9186295811", + "stop_type": "일반차로", + "node_id": "111000044", + "nxtStn": "본서부병원" + }, + { + "stop_nm": "본서부병원", + "ycode": "37.6005501772", + "stop_no": "12133", + "xcode": "126.9235787889", + "stop_type": "일반차로", + "node_id": "111000045", + "nxtStn": "은평세무서" + }, + { + "stop_nm": "은평세무서", + "ycode": "37.6012216354", + "stop_no": "12134", + "xcode": "126.9266529623", + "stop_type": "일반차로", + "node_id": "111000046", + "nxtStn": "은평구청" + }, + { + "stop_nm": "은평구청", + "ycode": "37.601197", + "stop_no": "12135", + "xcode": "126.930393", + "stop_type": "가로변전일", + "node_id": "111000047", + "nxtStn": "녹번역" + }, + { + "stop_nm": "녹번초등학교.은평세무서", + "ycode": "37.6028391102", + "stop_no": "12137", + "xcode": "126.92615785", + "stop_type": "일반차로", + "node_id": "111000049", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "역촌역.역촌오거리", + "ycode": "37.606957085", + "stop_no": "12138", + "xcode": "126.9224758463", + "stop_type": "일반차로", + "node_id": "111000050", + "nxtStn": "하나은행역촌지점" + }, + { + "stop_nm": "삼성타운", + "ycode": "37.6087032927", + "stop_no": "12139", + "xcode": "126.9209709958", + "stop_type": "일반차로", + "node_id": "111000051", + "nxtStn": "구산역3번출구.예일여고" + }, + { + "stop_nm": "구산역1번출구.예일여고", + "ycode": "37.6108522823", + "stop_no": "12140", + "xcode": "126.918180036", + "stop_type": "일반차로", + "node_id": "111000052", + "nxtStn": "역촌중앙시장" + }, + { + "stop_nm": "역촌중앙시장", + "ycode": "37.612813", + "stop_no": "12141", + "xcode": "126.914718", + "stop_type": "일반차로", + "node_id": "111000053", + "nxtStn": "구산사거리" + }, + { + "stop_nm": "구산사거리", + "ycode": "37.613613", + "stop_no": "12142", + "xcode": "126.912487", + "stop_type": "일반차로", + "node_id": "111000054", + "nxtStn": "선진운수종점" + }, + { + "stop_nm": "선진운수종점", + "ycode": "37.614342", + "stop_no": "12143", + "xcode": "126.910458", + "stop_type": "일반차로", + "node_id": "111000055", + "nxtStn": "선정중고등학교" + }, + { + "stop_nm": "선정중고등학교", + "ycode": "37.615836", + "stop_no": "12144", + "xcode": "126.908392", + "stop_type": "일반차로", + "node_id": "111000056", + "nxtStn": "서울경찰청86.87기동대.우남아파트" + }, + { + "stop_nm": "서울경찰청86.87기동대.우남아파트", + "ycode": "37.618049", + "stop_no": "12145", + "xcode": "126.906434", + "stop_type": "일반차로", + "node_id": "111000057", + "nxtStn": "시계입구가게앞검문소" + }, + { + "stop_nm": "서울경찰청86.87기동대.우남아파트", + "ycode": "37.6185284274", + "stop_no": "12146", + "xcode": "126.9058308185", + "stop_type": "일반차로", + "node_id": "111000058", + "nxtStn": "수국사입구" + }, + { + "stop_nm": "선정중고등학교", + "ycode": "37.615714", + "stop_no": "12147", + "xcode": "126.90808", + "stop_type": "일반차로", + "node_id": "111000059", + "nxtStn": "선진운수종점" + }, + { + "stop_nm": "선진운수종점", + "ycode": "37.613895", + "stop_no": "12148", + "xcode": "126.910862", + "stop_type": "일반차로", + "node_id": "111000060", + "nxtStn": "구산동주민센터.구산치안센터" + }, + { + "stop_nm": "구산사거리", + "ycode": "37.6132406179", + "stop_no": "12149", + "xcode": "126.9125387021", + "stop_type": "일반차로", + "node_id": "111000061", + "nxtStn": "역촌중앙시장" + }, + { + "stop_nm": "역촌중앙시장", + "ycode": "37.612525", + "stop_no": "12150", + "xcode": "126.914677", + "stop_type": "일반차로", + "node_id": "111000062", + "nxtStn": "구산역2번출구.예일여고" + }, + { + "stop_nm": "구산역2번출구.예일여고", + "ycode": "37.6107737973", + "stop_no": "12151", + "xcode": "126.9177586143", + "stop_type": "일반차로", + "node_id": "111000063", + "nxtStn": "하나은행역촌동지점" + }, + { + "stop_nm": "하나은행역촌동지점", + "ycode": "37.6092676452", + "stop_no": "12152", + "xcode": "126.9200382135", + "stop_type": "일반차로", + "node_id": "111000064", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "역촌역.역촌오거리", + "ycode": "37.6065740745", + "stop_no": "12153", + "xcode": "126.9224014904", + "stop_type": "일반차로", + "node_id": "111000065", + "nxtStn": "녹번초등학교.은평세무서" + }, + { + "stop_nm": "녹번초등학교.은평세무서", + "ycode": "37.603666166", + "stop_no": "12154", + "xcode": "126.9250309695", + "stop_type": "일반차로", + "node_id": "111000066", + "nxtStn": "은평구청" + }, + { + "stop_nm": "응암초등학교", + "ycode": "37.5870793679", + "stop_no": "12155", + "xcode": "126.9211239608", + "stop_type": "일반차로", + "node_id": "111000067", + "nxtStn": "은평문화예술정보학교" + }, + { + "stop_nm": "은평문화예술정보학교", + "ycode": "37.588893", + "stop_no": "12156", + "xcode": "126.918898", + "stop_type": "일반차로", + "node_id": "111000068", + "nxtStn": "국민은행" + }, + { + "stop_nm": "응암오거리", + "ycode": "37.5907361763", + "stop_no": "12157", + "xcode": "126.9165521769", + "stop_type": "일반차로", + "node_id": "111000069", + "nxtStn": "신사초등학교" + }, + { + "stop_nm": "신사초등학교", + "ycode": "37.5931399182", + "stop_no": "12158", + "xcode": "126.9135451755", + "stop_type": "일반차로", + "node_id": "111000070", + "nxtStn": "신사동고개사거리" + }, + { + "stop_nm": "신사동고개사거리", + "ycode": "37.596033", + "stop_no": "12159", + "xcode": "126.909871", + "stop_type": "일반차로", + "node_id": "111000071", + "nxtStn": "신사동고개.은평지역자활센터" + }, + { + "stop_nm": "신사동고개사거리", + "ycode": "37.5956071263", + "stop_no": "12160", + "xcode": "126.9099682771", + "stop_type": "일반차로", + "node_id": "111000072", + "nxtStn": "신사초등학교" + }, + { + "stop_nm": "신사초등학교", + "ycode": "37.5933583703", + "stop_no": "12161", + "xcode": "126.9128484808", + "stop_type": "일반차로", + "node_id": "111000073", + "nxtStn": "새절역" + }, + { + "stop_nm": "응암오거리", + "ycode": "37.5907322847", + "stop_no": "12162", + "xcode": "126.916146787", + "stop_type": "일반차로", + "node_id": "111000074", + "nxtStn": "대림시장" + }, + { + "stop_nm": "은평문화예술정보학교", + "ycode": "37.588822", + "stop_no": "12163", + "xcode": "126.918622", + "stop_type": "일반차로", + "node_id": "111000075", + "nxtStn": "응암초등학교" + }, + { + "stop_nm": "응암초등학교", + "ycode": "37.587477", + "stop_no": "12164", + "xcode": "126.920307", + "stop_type": "일반차로", + "node_id": "111000076", + "nxtStn": "명지전문대.충암중고등학교" + }, + { + "stop_nm": "대림시장", + "ycode": "37.5878268986", + "stop_no": "12165", + "xcode": "126.9165435736", + "stop_type": "일반차로", + "node_id": "111000077", + "nxtStn": "동도하이츠아파트" + }, + { + "stop_nm": "대림시장", + "ycode": "37.5886847389", + "stop_no": "12166", + "xcode": "126.9170368506", + "stop_type": "일반차로", + "node_id": "111000078", + "nxtStn": "응암오거리" + }, + { + "stop_nm": "응암역.신사오거리", + "ycode": "37.5979358249", + "stop_no": "12167", + "xcode": "126.9152247795", + "stop_type": "일반차로", + "node_id": "111000079", + "nxtStn": "신흥시장" + }, + { + "stop_nm": "신흥시장", + "ycode": "37.5954014899", + "stop_no": "12168", + "xcode": "126.9145640351", + "stop_type": "일반차로", + "node_id": "111000080", + "nxtStn": "새절역" + }, + { + "stop_nm": "새절역", + "ycode": "37.5911871934", + "stop_no": "12169", + "xcode": "126.9134545782", + "stop_type": "일반차로", + "node_id": "111000081", + "nxtStn": "와산교" + }, + { + "stop_nm": "와산교", + "ycode": "37.587889553", + "stop_no": "12170", + "xcode": "126.9126985944", + "stop_type": "일반차로", + "node_id": "111000082", + "nxtStn": "연서중학교입구" + }, + { + "stop_nm": "증산종합시장.증산중학교입구", + "ycode": "37.580827", + "stop_no": "12172", + "xcode": "126.90615", + "stop_type": "일반차로", + "node_id": "111000084", + "nxtStn": "월드컵경기장서측.문화비축기지" + }, + { + "stop_nm": "증산종합시장.증산중학교입구", + "ycode": "37.5805912987", + "stop_no": "12173", + "xcode": "126.9063881275", + "stop_type": "일반차로", + "node_id": "111000085", + "nxtStn": "증산역.증산동주민센터" + }, + { + "stop_nm": "증산역.증산동주민센터", + "ycode": "37.5836809982", + "stop_no": "12174", + "xcode": "126.909681456", + "stop_type": "일반차로", + "node_id": "111000086", + "nxtStn": "연서중학교입구" + }, + { + "stop_nm": "와산교", + "ycode": "37.5880943849", + "stop_no": "12175", + "xcode": "126.9130844852", + "stop_type": "일반차로", + "node_id": "111000087", + "nxtStn": "새절역.숭실고입구" + }, + { + "stop_nm": "새절역.숭실고입구", + "ycode": "37.591681", + "stop_no": "12176", + "xcode": "126.913892", + "stop_type": "일반차로", + "node_id": "111000088", + "nxtStn": "응암오거리" + }, + { + "stop_nm": "신흥시장", + "ycode": "37.5954017296", + "stop_no": "12177", + "xcode": "126.9148958447", + "stop_type": "일반차로", + "node_id": "111000089", + "nxtStn": "응암역.신사오거리" + }, + { + "stop_nm": "응암역.신사오거리", + "ycode": "37.5981073049", + "stop_no": "12178", + "xcode": "126.9156062368", + "stop_type": "일반차로", + "node_id": "111000090", + "nxtStn": "역촌초등학교" + }, + { + "stop_nm": "역촌초등학교", + "ycode": "37.6021814396", + "stop_no": "12179", + "xcode": "126.9160546584", + "stop_type": "일반차로", + "node_id": "111000091", + "nxtStn": "역말사거리" + }, + { + "stop_nm": "역말사거리", + "ycode": "37.6061494708", + "stop_no": "12180", + "xcode": "126.9155586421", + "stop_type": "일반차로", + "node_id": "111000092", + "nxtStn": "구산역2번출구.예일여고" + }, + { + "stop_nm": "구산역2번출구.예일여고", + "ycode": "37.6099512058", + "stop_no": "12181", + "xcode": "126.9169033629", + "stop_type": "일반차로", + "node_id": "111000093", + "nxtStn": "구산전철역" + }, + { + "stop_nm": "구산역1번출구", + "ycode": "37.6116583062", + "stop_no": "12182", + "xcode": "126.91753691", + "stop_type": "일반차로", + "node_id": "111000094", + "nxtStn": "대조동주민센터" + }, + { + "stop_nm": "대조동주민센터", + "ycode": "37.6140725919", + "stop_no": "12183", + "xcode": "126.9179363667", + "stop_type": "일반차로", + "node_id": "111000095", + "nxtStn": "연신내역.로데오거리" + }, + { + "stop_nm": "연신내역.로데오거리", + "ycode": "37.6178207167", + "stop_no": "12184", + "xcode": "126.9199962033", + "stop_type": "일반차로", + "node_id": "111000096", + "nxtStn": "연서시장" + }, + { + "stop_nm": "연서시장", + "ycode": "37.6192425563", + "stop_no": "12185", + "xcode": "126.9225910997", + "stop_type": "일반차로", + "node_id": "111000097", + "nxtStn": "종로약국" + }, + { + "stop_nm": "종로약국", + "ycode": "37.6203765441", + "stop_no": "12186", + "xcode": "126.9246380909", + "stop_type": "일반차로", + "node_id": "111000098", + "nxtStn": "불광보건소" + }, + { + "stop_nm": "불광지구대", + "ycode": "37.6217745784", + "stop_no": "12187", + "xcode": "126.9267891079", + "stop_type": "일반차로", + "node_id": "111000099", + "nxtStn": "북한산대창센시티아파트" + }, + { + "stop_nm": "북한산대창센시티아파트", + "ycode": "37.6248070601", + "stop_no": "12188", + "xcode": "126.9288094985", + "stop_type": "일반차로", + "node_id": "111000100", + "nxtStn": "은평경찰서" + }, + { + "stop_nm": "은평경찰서", + "ycode": "37.6276323558", + "stop_no": "12189", + "xcode": "126.9294752418", + "stop_type": "일반차로", + "node_id": "111000101", + "nxtStn": "신도초중교입구.한국고전번역원" + }, + { + "stop_nm": "폭포동", + "ycode": "37.630715", + "stop_no": "12190", + "xcode": "126.931032", + "stop_type": "일반차로", + "node_id": "111000102", + "nxtStn": "은평노인종합복지관.신도중학교" + }, + { + "stop_nm": "신도중학교", + "ycode": "37.6333482679", + "stop_no": "12192", + "xcode": "126.9315290754", + "stop_type": "일반차로", + "node_id": "111000104", + "nxtStn": "폭포동.은평노인종합복지관" + }, + { + "stop_nm": "은평노인종합복지관.신도중학교", + "ycode": "37.632495", + "stop_no": "12195", + "xcode": "126.931533", + "stop_type": "일반차로", + "node_id": "111000107", + "nxtStn": "기자촌11단지앞" + }, + { + "stop_nm": "폭포동.은평노인종합복지관", + "ycode": "37.6313826666", + "stop_no": "12197", + "xcode": "126.9310069167", + "stop_type": "일반차로", + "node_id": "111000109", + "nxtStn": "은평경찰서" + }, + { + "stop_nm": "은평경찰서", + "ycode": "37.628117", + "stop_no": "12198", + "xcode": "126.929277", + "stop_type": "일반차로", + "node_id": "111000110", + "nxtStn": "연신초등학교" + }, + { + "stop_nm": "연신초등학교", + "ycode": "37.6256234179", + "stop_no": "12199", + "xcode": "126.9287702008", + "stop_type": "일반차로", + "node_id": "111000111", + "nxtStn": "불광지구대" + }, + { + "stop_nm": "불광지구대", + "ycode": "37.6218554999", + "stop_no": "12200", + "xcode": "126.926505814", + "stop_type": "일반차로", + "node_id": "111000112", + "nxtStn": "새장골유래비" + }, + { + "stop_nm": "새장골유래비", + "ycode": "37.6205196512", + "stop_no": "12201", + "xcode": "126.9243796594", + "stop_type": "일반차로", + "node_id": "111000113", + "nxtStn": "연서시장" + }, + { + "stop_nm": "연서시장", + "ycode": "37.619596645", + "stop_no": "12202", + "xcode": "126.9225340914", + "stop_type": "일반차로", + "node_id": "111000114", + "nxtStn": "연신내역.물빛공원" + }, + { + "stop_nm": "연신내역.로데오거리", + "ycode": "37.618013317", + "stop_no": "12203", + "xcode": "126.9196550241", + "stop_type": "일반차로", + "node_id": "111000115", + "nxtStn": "은평연세병원" + }, + { + "stop_nm": "은평연세병원", + "ycode": "37.61474", + "stop_no": "12204", + "xcode": "126.917738", + "stop_type": "일반차로", + "node_id": "111000116", + "nxtStn": "길마어린이공원" + }, + { + "stop_nm": "구산역4번출구", + "ycode": "37.611892", + "stop_no": "12205", + "xcode": "126.917187", + "stop_type": "일반차로", + "node_id": "111000117", + "nxtStn": "구산역3번출구.예일여고" + }, + { + "stop_nm": "구산역3번출구.예일여고", + "ycode": "37.610497", + "stop_no": "12206", + "xcode": "126.916776", + "stop_type": "일반차로", + "node_id": "111000118", + "nxtStn": "미주아트빌" + }, + { + "stop_nm": "역말사거리", + "ycode": "37.6062104465", + "stop_no": "12207", + "xcode": "126.9151429014", + "stop_type": "일반차로", + "node_id": "111000119", + "nxtStn": "역촌초등학교" + }, + { + "stop_nm": "역촌초등학교", + "ycode": "37.6027929337", + "stop_no": "12208", + "xcode": "126.9155726294", + "stop_type": "일반차로", + "node_id": "111000120", + "nxtStn": "응암역2번출구" + }, + { + "stop_nm": "응암역2번출구", + "ycode": "37.6004214787", + "stop_no": "12209", + "xcode": "126.9158607077", + "stop_type": "일반차로", + "node_id": "111000121", + "nxtStn": "응암역.신사오거리" + }, + { + "stop_nm": "신사동고개.은평지역자활센터", + "ycode": "37.5984133304", + "stop_no": "12210", + "xcode": "126.910253684", + "stop_type": "일반차로", + "node_id": "111000122", + "nxtStn": "서울기독대학교입구" + }, + { + "stop_nm": "서울기독대학교입구", + "ycode": "37.6014374785", + "stop_no": "12211", + "xcode": "126.9103848244", + "stop_type": "일반차로", + "node_id": "111000123", + "nxtStn": "시립서북병원세현교회앞" + }, + { + "stop_nm": "시립서북병원세현교회앞", + "ycode": "37.6061458636", + "stop_no": "12212", + "xcode": "126.910658933", + "stop_type": "일반차로", + "node_id": "111000124", + "nxtStn": "구산중학교.구산교회" + }, + { + "stop_nm": "구산중학교.구산교회", + "ycode": "37.608955", + "stop_no": "12213", + "xcode": "126.91102", + "stop_type": "일반차로", + "node_id": "111000125", + "nxtStn": "구산동주민센터.구산치안센터" + }, + { + "stop_nm": "구산동주민센터.구산치안센터", + "ycode": "37.61138", + "stop_no": "12214", + "xcode": "126.911363", + "stop_type": "일반차로", + "node_id": "111000126", + "nxtStn": "선진운수종점" + }, + { + "stop_nm": "구산동주민센터.구산치안센터", + "ycode": "37.612207", + "stop_no": "12215", + "xcode": "126.91129", + "stop_type": "일반차로", + "node_id": "111000127", + "nxtStn": "구산중학교.구산교회" + }, + { + "stop_nm": "구산중학교.구산교회", + "ycode": "37.6088023972", + "stop_no": "12216", + "xcode": "126.9108335829", + "stop_type": "일반차로", + "node_id": "111000128", + "nxtStn": "시립서북병원세현교회앞" + }, + { + "stop_nm": "시립서북병원세현교회앞", + "ycode": "37.6060168573", + "stop_no": "12217", + "xcode": "126.9104597465", + "stop_type": "일반차로", + "node_id": "111000129", + "nxtStn": "서울기독대학교입구" + }, + { + "stop_nm": "서울기독대학교입구", + "ycode": "37.6020320757", + "stop_no": "12218", + "xcode": "126.9102266857", + "stop_type": "일반차로", + "node_id": "111000130", + "nxtStn": "우남교통" + }, + { + "stop_nm": "우남교통", + "ycode": "37.5997666658", + "stop_no": "12219", + "xcode": "126.9101252157", + "stop_type": "일반차로", + "node_id": "111000131", + "nxtStn": "신사동고개.은평지역자활센터" + }, + { + "stop_nm": "신사동고개.은평지역자활센터", + "ycode": "37.5986006142", + "stop_no": "12220", + "xcode": "126.9100665956", + "stop_type": "일반차로", + "node_id": "111000132", + "nxtStn": "신사1동주민센터" + }, + { + "stop_nm": "갈현1동주민센터", + "ycode": "37.623967591", + "stop_no": "12221", + "xcode": "126.9169240149", + "stop_type": "일반차로", + "node_id": "111000133", + "nxtStn": "갈현동성당앞" + }, + { + "stop_nm": "한일탕", + "ycode": "37.6260825696", + "stop_no": "12222", + "xcode": "126.9184103208", + "stop_type": "일반차로", + "node_id": "111000134", + "nxtStn": "갈현1동주민센터" + }, + { + "stop_nm": "한일탕", + "ycode": "37.6261494835", + "stop_no": "12223", + "xcode": "126.9187489917", + "stop_type": "일반차로", + "node_id": "111000135", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "갈현1동주민센터", + "ycode": "37.6232468092", + "stop_no": "12224", + "xcode": "126.9170449022", + "stop_type": "일반차로", + "node_id": "111000136", + "nxtStn": "갈현중앙시장" + }, + { + "stop_nm": "불광롯데캐슬아파트", + "ycode": "37.6130745033", + "stop_no": "12225", + "xcode": "126.9320721326", + "stop_type": "일반차로", + "node_id": "111001121", + "nxtStn": "불광대호아파트" + }, + { + "stop_nm": "진관초교입구", + "ycode": "37.6469051663", + "stop_no": "12227", + "xcode": "126.9258465241", + "stop_type": "일반차로", + "node_id": "111000138", + "nxtStn": "푸르지오625동앞.관음사입구" + }, + { + "stop_nm": "푸르지오625동앞.관음사입구", + "ycode": "37.648985", + "stop_no": "12229", + "xcode": "126.928667", + "stop_type": "일반차로", + "node_id": "111000150", + "nxtStn": "삼천리골입구56사단북한산부대" + }, + { + "stop_nm": "삼천리골입구56사단북한산부대", + "ycode": "37.650344644", + "stop_no": "12230", + "xcode": "126.9351168233", + "stop_type": "일반차로", + "node_id": "111000141", + "nxtStn": "푸르지오618동앞.관음사입구" + }, + { + "stop_nm": "백화사", + "ycode": "37.653550933", + "stop_no": "12231", + "xcode": "126.9389594548", + "stop_type": "일반차로", + "node_id": "111000142", + "nxtStn": "흥국사" + }, + { + "stop_nm": "흥국사", + "ycode": "37.656762115", + "stop_no": "12232", + "xcode": "126.9420101744", + "stop_type": "일반차로", + "node_id": "111000143", + "nxtStn": "북한산성입구" + }, + { + "stop_nm": "북한산성입구", + "ycode": "37.6580874009", + "stop_no": "12233", + "xcode": "126.9453651665", + "stop_type": "일반차로", + "node_id": "111000144", + "nxtStn": "효자치안센터" + }, + { + "stop_nm": "북한산성입구", + "ycode": "37.6581874095", + "stop_no": "12234", + "xcode": "126.9453412916", + "stop_type": "일반차로", + "node_id": "111000145", + "nxtStn": "흥국사" + }, + { + "stop_nm": "흥국사", + "ycode": "37.657265", + "stop_no": "12235", + "xcode": "126.94219", + "stop_type": "일반차로", + "node_id": "111000146", + "nxtStn": "백화사" + }, + { + "stop_nm": "백화사", + "ycode": "37.6537446878", + "stop_no": "12236", + "xcode": "126.9390034965", + "stop_type": "일반차로", + "node_id": "111000147", + "nxtStn": "삼천리골입구56사단북한산부대" + }, + { + "stop_nm": "삼천리골입구56사단북한산부대", + "ycode": "37.650083", + "stop_no": "12237", + "xcode": "126.933315", + "stop_type": "일반차로", + "node_id": "111000148", + "nxtStn": "입곡삼거리" + }, + { + "stop_nm": "진관초교관음사입구", + "ycode": "37.6477735446", + "stop_no": "12238", + "xcode": "126.926868987", + "stop_type": "일반차로", + "node_id": "111000149", + "nxtStn": "진관중고교약수사입구" + }, + { + "stop_nm": "푸르지오618동앞.관음사입구", + "ycode": "37.649682", + "stop_no": "12239", + "xcode": "126.929232", + "stop_type": "일반차로", + "node_id": "111000140", + "nxtStn": "진관초교관음사입구" + }, + { + "stop_nm": "진관중고교약수사입구", + "ycode": "37.6457026484", + "stop_no": "12240", + "xcode": "126.9236855353", + "stop_type": "일반차로", + "node_id": "111000151", + "nxtStn": "지축교앞" + }, + { + "stop_nm": "응암2동주민센터", + "ycode": "37.5959245549", + "stop_no": "12241", + "xcode": "126.9236015835", + "stop_type": "일반차로", + "node_id": "111001132", + "nxtStn": "영락중학교입구" + }, + { + "stop_nm": "응암2동주민센터", + "ycode": "37.595649", + "stop_no": "12242", + "xcode": "126.923082", + "stop_type": "일반차로", + "node_id": "111001131", + "nxtStn": "시립은평병원" + }, + { + "stop_nm": "이마트.은평점", + "ycode": "37.600054", + "stop_no": "12243", + "xcode": "126.918586", + "stop_type": "일반차로", + "node_id": "111000153", + "nxtStn": "서부경찰서" + }, + { + "stop_nm": "서부경찰서", + "ycode": "37.601367", + "stop_no": "12244", + "xcode": "126.920592", + "stop_type": "일반차로", + "node_id": "111000154", + "nxtStn": "해주드림빌APT" + }, + { + "stop_nm": "해주드림빌APT", + "ycode": "37.604167052", + "stop_no": "12245", + "xcode": "126.9220664791", + "stop_type": "일반차로", + "node_id": "111000155", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "역촌역.역촌오거리", + "ycode": "37.6068015906", + "stop_no": "12246", + "xcode": "126.923243231", + "stop_type": "일반차로", + "node_id": "111000156", + "nxtStn": "대조시장앞" + }, + { + "stop_nm": "대조시장앞", + "ycode": "37.6086555139", + "stop_no": "12247", + "xcode": "126.9265165396", + "stop_type": "일반차로", + "node_id": "111000157", + "nxtStn": "양광교회앞" + }, + { + "stop_nm": "양광교회앞", + "ycode": "37.6084619409", + "stop_no": "12248", + "xcode": "126.9282417636", + "stop_type": "일반차로", + "node_id": "111000158", + "nxtStn": "불광역.불광1동주민센터" + }, + { + "stop_nm": "불광역.불광1동주민센터", + "ycode": "37.6090959943", + "stop_no": "12249", + "xcode": "126.9322904306", + "stop_type": "일반차로", + "node_id": "111000159", + "nxtStn": "독박골.북한산래미안APT앞" + }, + { + "stop_nm": "독박골.북한산래미안APT앞", + "ycode": "37.610512964", + "stop_no": "12250", + "xcode": "126.9397954573", + "stop_type": "일반차로", + "node_id": "111000160", + "nxtStn": "구기터널입구" + }, + { + "stop_nm": "구기터널입구", + "ycode": "37.610411", + "stop_no": "12251", + "xcode": "126.944938", + "stop_type": "일반차로", + "node_id": "111000161", + "nxtStn": "구기터널.삼성출판박물관" + }, + { + "stop_nm": "구기터널입구", + "ycode": "37.6107519472", + "stop_no": "12252", + "xcode": "126.9457747343", + "stop_type": "일반차로", + "node_id": "111000162", + "nxtStn": "독박골.북한산래미안APT" + }, + { + "stop_nm": "독박골.북한산래미안APT", + "ycode": "37.6107435434", + "stop_no": "12253", + "xcode": "126.9396027141", + "stop_type": "일반차로", + "node_id": "111000163", + "nxtStn": "불광역.불광1동주민센터" + }, + { + "stop_nm": "불광역.불광1동주민센터", + "ycode": "37.6095286975", + "stop_no": "12254", + "xcode": "126.9326083189", + "stop_type": "일반차로", + "node_id": "111000164", + "nxtStn": "양광교회" + }, + { + "stop_nm": "양광교회", + "ycode": "37.6085452704", + "stop_no": "12255", + "xcode": "126.9289518591", + "stop_type": "일반차로", + "node_id": "111000165", + "nxtStn": "불광역3.6호선" + }, + { + "stop_nm": "대조시장", + "ycode": "37.608786", + "stop_no": "12256", + "xcode": "126.926162", + "stop_type": "일반차로", + "node_id": "111000166", + "nxtStn": "역촌오거리" + }, + { + "stop_nm": "역촌오거리", + "ycode": "37.6076554963", + "stop_no": "12257", + "xcode": "126.9239679445", + "stop_type": "일반차로", + "node_id": "111000167", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "역촌역1번출구", + "ycode": "37.6052406679", + "stop_no": "12258", + "xcode": "126.9221735304", + "stop_type": "일반차로", + "node_id": "111000168", + "nxtStn": "서부경찰서" + }, + { + "stop_nm": "서부경찰서", + "ycode": "37.602018", + "stop_no": "12259", + "xcode": "126.920548", + "stop_type": "일반차로", + "node_id": "111000169", + "nxtStn": "이마트.은평점" + }, + { + "stop_nm": "이마트.은평점", + "ycode": "37.600238", + "stop_no": "12260", + "xcode": "126.918138", + "stop_type": "일반차로", + "node_id": "111000170", + "nxtStn": "응암역신사오거리" + }, + { + "stop_nm": "응암1동주민센터", + "ycode": "37.600152", + "stop_no": "12261", + "xcode": "126.926767", + "stop_type": "일반차로", + "node_id": "111000171", + "nxtStn": "녹번센트레빌아파트" + }, + { + "stop_nm": "영락중학교입구", + "ycode": "37.597337", + "stop_no": "12262", + "xcode": "126.92434", + "stop_type": "일반차로", + "node_id": "111000172", + "nxtStn": "응암2동주민센터" + }, + { + "stop_nm": "시립은평병원", + "ycode": "37.5932", + "stop_no": "12263", + "xcode": "126.922968", + "stop_type": "일반차로", + "node_id": "111000173", + "nxtStn": "백련산힐스테이트4차" + }, + { + "stop_nm": "백련산힐스테이트4차", + "ycode": "37.590011", + "stop_no": "12264", + "xcode": "126.922674", + "stop_type": "일반차로", + "node_id": "111000174", + "nxtStn": "서부중앙교회" + }, + { + "stop_nm": "충암고교앞.대주피오레아파트", + "ycode": "37.5868458253", + "stop_no": "12265", + "xcode": "126.9226529706", + "stop_type": "일반차로", + "node_id": "111000175", + "nxtStn": "응암정보도서관" + }, + { + "stop_nm": "충암고교앞.대주피오레아파트", + "ycode": "37.5869567896", + "stop_no": "12266", + "xcode": "126.9228521457", + "stop_type": "일반차로", + "node_id": "111000176", + "nxtStn": "응암초교.백련산힐스테이트3차" + }, + { + "stop_nm": "백련산힐스테이트2차", + "ycode": "37.5903133577", + "stop_no": "12267", + "xcode": "126.9228701963", + "stop_type": "일반차로", + "node_id": "111000177", + "nxtStn": "백련산힐스테이트2차상가앞" + }, + { + "stop_nm": "시립은평병원", + "ycode": "37.593283", + "stop_no": "12268", + "xcode": "126.923127", + "stop_type": "일반차로", + "node_id": "111000178", + "nxtStn": "응암2동주민센터" + }, + { + "stop_nm": "영락중학교입구", + "ycode": "37.5969092616", + "stop_no": "12269", + "xcode": "126.92416574", + "stop_type": "일반차로", + "node_id": "111000179", + "nxtStn": "녹번센트레빌아파트" + }, + { + "stop_nm": "응암1동주민센터", + "ycode": "37.600396483", + "stop_no": "12270", + "xcode": "126.9270456288", + "stop_type": "일반차로", + "node_id": "111000180", + "nxtStn": "은평구청" + }, + { + "stop_nm": "한솔아파트입구선정중학교후문", + "ycode": "37.6157960537", + "stop_no": "12271", + "xcode": "126.9137069892", + "stop_type": "일반차로", + "node_id": "111000181", + "nxtStn": "G캐슬아파트" + }, + { + "stop_nm": "갈현동미미아파트", + "ycode": "37.6182029973", + "stop_no": "12272", + "xcode": "126.9151519292", + "stop_type": "일반차로", + "node_id": "111000182", + "nxtStn": "선일여고입구" + }, + { + "stop_nm": "선일여고입구", + "ycode": "37.6193423695", + "stop_no": "12273", + "xcode": "126.9157125131", + "stop_type": "일반차로", + "node_id": "111000183", + "nxtStn": "갈현동성당앞" + }, + { + "stop_nm": "갈현동성당앞", + "ycode": "37.6207946411", + "stop_no": "12274", + "xcode": "126.9165922246", + "stop_type": "일반차로", + "node_id": "111000184", + "nxtStn": "갈현1동주민센터" + }, + { + "stop_nm": "갈현동성당앞", + "ycode": "37.62054", + "stop_no": "12275", + "xcode": "126.916227", + "stop_type": "일반차로", + "node_id": "111000185", + "nxtStn": "선일여고입구" + }, + { + "stop_nm": "선일여고입구", + "ycode": "37.619392", + "stop_no": "12276", + "xcode": "126.915519", + "stop_type": "일반차로", + "node_id": "111000186", + "nxtStn": "갈현동미미아파트" + }, + { + "stop_nm": "갈현동미미아파트", + "ycode": "37.6181857266", + "stop_no": "12277", + "xcode": "126.9149435132", + "stop_type": "일반차로", + "node_id": "111000187", + "nxtStn": "한솔아파트입구선정중학교후문" + }, + { + "stop_nm": "한솔아파트입구선정중학교후문", + "ycode": "37.6160781278", + "stop_no": "12278", + "xcode": "126.9137542396", + "stop_type": "일반차로", + "node_id": "111000188", + "nxtStn": "구산동사거리" + }, + { + "stop_nm": "불광역9번출구.불광초등학교", + "ycode": "37.611288", + "stop_no": "12279", + "xcode": "126.930517", + "stop_type": "일반차로", + "node_id": "111000189", + "nxtStn": "불광롯데캐슬아파트" + }, + { + "stop_nm": "불광대호아파트", + "ycode": "37.614479", + "stop_no": "12280", + "xcode": "126.93247", + "stop_type": "일반차로", + "node_id": "111000190", + "nxtStn": "불광1동공동주차장앞" + }, + { + "stop_nm": "불광1동공동주차장앞", + "ycode": "37.615697", + "stop_no": "12281", + "xcode": "126.933002", + "stop_type": "일반차로", + "node_id": "111000191", + "nxtStn": "불광1치안센터.독바위역" + }, + { + "stop_nm": "불광1치안센터.독바위역", + "ycode": "37.617356", + "stop_no": "12282", + "xcode": "126.933141", + "stop_type": "일반차로", + "node_id": "111000192", + "nxtStn": "수리초등학교입구" + }, + { + "stop_nm": "수리초등학교입구", + "ycode": "37.619248", + "stop_no": "12283", + "xcode": "126.932557", + "stop_type": "일반차로", + "node_id": "111000193", + "nxtStn": "북한산수자인아파트" + }, + { + "stop_nm": "북한산수자인아파트", + "ycode": "37.6216806133", + "stop_no": "12284", + "xcode": "126.931665598", + "stop_type": "일반차로", + "node_id": "111000194", + "nxtStn": "불광중학교" + }, + { + "stop_nm": "불광중학교", + "ycode": "37.622872", + "stop_no": "12285", + "xcode": "126.930952", + "stop_type": "일반차로", + "node_id": "111000195", + "nxtStn": "북한산대창센시티아파트" + }, + { + "stop_nm": "북한산대창센시티아파트", + "ycode": "37.6237282359", + "stop_no": "12286", + "xcode": "126.9299354838", + "stop_type": "일반차로", + "node_id": "111000196", + "nxtStn": "연신초등학교" + }, + { + "stop_nm": "북한산대창센시티아파트", + "ycode": "37.6238488301", + "stop_no": "12287", + "xcode": "126.9296816036", + "stop_type": "일반차로", + "node_id": "111000197", + "nxtStn": "불광중학교" + }, + { + "stop_nm": "불광중학교", + "ycode": "37.6225007168", + "stop_no": "12288", + "xcode": "126.9310525109", + "stop_type": "일반차로", + "node_id": "111000198", + "nxtStn": "북한산수자인아파트" + }, + { + "stop_nm": "북한산수자인아파트", + "ycode": "37.621045", + "stop_no": "12289", + "xcode": "126.931655", + "stop_type": "일반차로", + "node_id": "111000199", + "nxtStn": "수리초등학교입구" + }, + { + "stop_nm": "수리초등학교입구", + "ycode": "37.619092", + "stop_no": "12290", + "xcode": "126.932512", + "stop_type": "일반차로", + "node_id": "111000200", + "nxtStn": "불광1치안센터.독바위역" + }, + { + "stop_nm": "불광1치안센터.독바위역", + "ycode": "37.617938", + "stop_no": "12291", + "xcode": "126.933077", + "stop_type": "일반차로", + "node_id": "111000201", + "nxtStn": "불광1동공동주차장앞" + }, + { + "stop_nm": "불광1동공동주차장앞", + "ycode": "37.6163", + "stop_no": "12292", + "xcode": "126.932728", + "stop_type": "일반차로", + "node_id": "111000202", + "nxtStn": "불광대호아파트" + }, + { + "stop_nm": "불광대호아파트", + "ycode": "37.614533", + "stop_no": "12293", + "xcode": "126.932333", + "stop_type": "일반차로", + "node_id": "111000203", + "nxtStn": "불광초등학교" + }, + { + "stop_nm": "불광초등학교", + "ycode": "37.6115701913", + "stop_no": "12294", + "xcode": "126.9304574428", + "stop_type": "일반차로", + "node_id": "111000204", + "nxtStn": "불광전철역" + }, + { + "stop_nm": "신사동고개사거리", + "ycode": "37.5956194245", + "stop_no": "12295", + "xcode": "126.9103318553", + "stop_type": "일반차로", + "node_id": "111001122", + "nxtStn": "상신초등학교입구" + }, + { + "stop_nm": "백련산SK뷰아이파크아파트", + "ycode": "37.595846", + "stop_no": "12296", + "xcode": "126.919156", + "stop_type": "일반차로", + "node_id": "111001128", + "nxtStn": "신진과학기술고등학교" + }, + { + "stop_nm": "서부경찰서후문", + "ycode": "37.6024326383", + "stop_no": "12303", + "xcode": "126.9223367061", + "stop_type": "일반차로", + "node_id": "111000213", + "nxtStn": "신진과학기술고등학교" + }, + { + "stop_nm": "신진과학기술고등학교", + "ycode": "37.59791", + "stop_no": "12304", + "xcode": "126.920325", + "stop_type": "일반차로", + "node_id": "111000214", + "nxtStn": "벧엘블래스빌" + }, + { + "stop_nm": "응암시장", + "ycode": "37.5943144974", + "stop_no": "12305", + "xcode": "126.9179795859", + "stop_type": "일반차로", + "node_id": "111000215", + "nxtStn": "응암3동주민센터" + }, + { + "stop_nm": "서서울농협본점", + "ycode": "37.5934441515", + "stop_no": "12307", + "xcode": "126.918131154", + "stop_type": "일반차로", + "node_id": "111000217", + "nxtStn": "응암시장입구" + }, + { + "stop_nm": "신진과학기술고등학교", + "ycode": "37.5978224711", + "stop_no": "12308", + "xcode": "126.9206733351", + "stop_type": "일반차로", + "node_id": "111000218", + "nxtStn": "금호아파트" + }, + { + "stop_nm": "서부경찰서후문", + "ycode": "37.6018695323", + "stop_no": "12309", + "xcode": "126.9226455849", + "stop_type": "일반차로", + "node_id": "111000219", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.579265", + "stop_no": "12310", + "xcode": "126.900601", + "stop_type": "일반차로", + "node_id": "111000220", + "nxtStn": "수색역앞" + }, + { + "stop_nm": "수색역", + "ycode": "37.581891", + "stop_no": "12311", + "xcode": "126.896196", + "stop_type": "일반차로", + "node_id": "111000221", + "nxtStn": "수색초등학교" + }, + { + "stop_nm": "덕은교.은평차고지앞", + "ycode": "37.5885944751", + "stop_no": "12314", + "xcode": "126.8856592313", + "stop_type": "일반차로", + "node_id": "111000224", + "nxtStn": "은평권역공영차고지" + }, + { + "stop_nm": "덕은교.은평차고지앞", + "ycode": "37.589961128", + "stop_no": "12315", + "xcode": "126.8834469451", + "stop_type": "일반차로", + "node_id": "111000225", + "nxtStn": "DMC첨단산업센터" + }, + { + "stop_nm": "수색교", + "ycode": "37.585563", + "stop_no": "12316", + "xcode": "126.88869", + "stop_type": "일반차로", + "node_id": "111000226", + "nxtStn": "수색119안전센터" + }, + { + "stop_nm": "수색119안전센터", + "ycode": "37.583469198", + "stop_no": "12317", + "xcode": "126.8924280896", + "stop_type": "일반차로", + "node_id": "111000227", + "nxtStn": "수색초등학교" + }, + { + "stop_nm": "수색역", + "ycode": "37.5807252119", + "stop_no": "12318", + "xcode": "126.8972983814", + "stop_type": "일반차로", + "node_id": "111000228", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.5782704462", + "stop_no": "12319", + "xcode": "126.9012938809", + "stop_type": "일반차로", + "node_id": "111000229", + "nxtStn": "증산교앞" + }, + { + "stop_nm": "수색초등학교", + "ycode": "37.5838964478", + "stop_no": "12320", + "xcode": "126.8976450323", + "stop_type": "일반차로", + "node_id": "111000230", + "nxtStn": "e편한세상수색에코포레" + }, + { + "stop_nm": "e편한세상수색에코포레", + "ycode": "37.585871126", + "stop_no": "12321", + "xcode": "126.9002070161", + "stop_type": "일반차로", + "node_id": "111000231", + "nxtStn": "상신중학교앞" + }, + { + "stop_nm": "은평터널앞", + "ycode": "37.5916129815", + "stop_no": "12322", + "xcode": "126.905834169", + "stop_type": "일반차로", + "node_id": "111000232", + "nxtStn": "e편한세상수색에코포레" + }, + { + "stop_nm": "e편한세상수색에코포레", + "ycode": "37.5861018572", + "stop_no": "12323", + "xcode": "126.9002689854", + "stop_type": "일반차로", + "node_id": "111000233", + "nxtStn": "수색초등학교" + }, + { + "stop_nm": "수색초등학교", + "ycode": "37.5844411022", + "stop_no": "12324", + "xcode": "126.897867645", + "stop_type": "일반차로", + "node_id": "111000234", + "nxtStn": "수색역앞" + }, + { + "stop_nm": "새마을금고앞", + "ycode": "37.588999", + "stop_no": "12329", + "xcode": "126.911854", + "stop_type": "일반차로", + "node_id": "111000239", + "nxtStn": "미성아파트앞" + }, + { + "stop_nm": "새마을금고앞", + "ycode": "37.5887219151", + "stop_no": "12330", + "xcode": "126.9123692391", + "stop_type": "일반차로", + "node_id": "111000240", + "nxtStn": "새절역.숭실고입구" + }, + { + "stop_nm": "미성아파트앞", + "ycode": "37.589962", + "stop_no": "12331", + "xcode": "126.910122", + "stop_type": "일반차로", + "node_id": "111000241", + "nxtStn": "상신중학교앞" + }, + { + "stop_nm": "미성아파트앞", + "ycode": "37.5897240784", + "stop_no": "12332", + "xcode": "126.9101746617", + "stop_type": "일반차로", + "node_id": "111000242", + "nxtStn": "새마을금고앞" + }, + { + "stop_nm": "상신중학교앞", + "ycode": "37.590611", + "stop_no": "12333", + "xcode": "126.906454", + "stop_type": "일반차로", + "node_id": "111000243", + "nxtStn": "e편한세상수색에코포레" + }, + { + "stop_nm": "상신중학교앞", + "ycode": "37.590528", + "stop_no": "12334", + "xcode": "126.906192", + "stop_type": "일반차로", + "node_id": "111000244", + "nxtStn": "미성아파트앞" + }, + { + "stop_nm": "숭실고입구", + "ycode": "37.591947", + "stop_no": "12335", + "xcode": "126.906391", + "stop_type": "일반차로", + "node_id": "111000245", + "nxtStn": "현대아파트앞" + }, + { + "stop_nm": "현대아파트앞", + "ycode": "37.593711", + "stop_no": "12336", + "xcode": "126.907944", + "stop_type": "일반차로", + "node_id": "111000246", + "nxtStn": "신사사거리" + }, + { + "stop_nm": "현대아파트앞", + "ycode": "37.593637", + "stop_no": "12337", + "xcode": "126.907713", + "stop_type": "일반차로", + "node_id": "111000247", + "nxtStn": "은평터널앞" + }, + { + "stop_nm": "신사사거리", + "ycode": "37.5956793509", + "stop_no": "12338", + "xcode": "126.9089727568", + "stop_type": "일반차로", + "node_id": "111000248", + "nxtStn": "신사동고개사거리" + }, + { + "stop_nm": "신사사거리", + "ycode": "37.595726085", + "stop_no": "12339", + "xcode": "126.9088141552", + "stop_type": "일반차로", + "node_id": "111000249", + "nxtStn": "현대아파트앞" + }, + { + "stop_nm": "동명여고후문", + "ycode": "37.613396539", + "stop_no": "12340", + "xcode": "126.9243200422", + "stop_type": "일반차로", + "node_id": "111000250", + "nxtStn": "동명탕앞" + }, + { + "stop_nm": "동명탕앞", + "ycode": "37.6113775306", + "stop_no": "12341", + "xcode": "126.922048761", + "stop_type": "일반차로", + "node_id": "111000251", + "nxtStn": "호림아파트앞" + }, + { + "stop_nm": "하나은행역촌동지점", + "ycode": "37.6083362023", + "stop_no": "12343", + "xcode": "126.9204238095", + "stop_type": "일반차로", + "node_id": "111000253", + "nxtStn": "역촌역.역촌오거리" + }, + { + "stop_nm": "충북슈퍼앞", + "ycode": "37.6059843928", + "stop_no": "12345", + "xcode": "126.9178318079", + "stop_type": "일반차로", + "node_id": "111000255", + "nxtStn": "하나은행역촌동지점" + }, + { + "stop_nm": "역촌동주민센터", + "ycode": "37.605725", + "stop_no": "12347", + "xcode": "126.914828", + "stop_type": "일반차로", + "node_id": "111000257", + "nxtStn": "충북슈퍼앞" + }, + { + "stop_nm": "제각말5단지.은평뉴타운도서관", + "ycode": "37.638398", + "stop_no": "12350", + "xcode": "126.93551", + "stop_type": "일반차로", + "node_id": "111000260", + "nxtStn": "하나고.삼천사.진관사입구" + }, + { + "stop_nm": "제각말5단지.은평뉴타운도서관", + "ycode": "37.636736149", + "stop_no": "12351", + "xcode": "126.9344374778", + "stop_type": "일반차로", + "node_id": "111000261", + "nxtStn": "신도중학교" + }, + { + "stop_nm": "연신초등학교", + "ycode": "37.625899", + "stop_no": "12361", + "xcode": "126.92919", + "stop_type": "일반차로", + "node_id": "111000271", + "nxtStn": "은평경찰서" + }, + { + "stop_nm": "증산역.증산동주민센터", + "ycode": "37.5837546123", + "stop_no": "12364", + "xcode": "126.9093224341", + "stop_type": "일반차로", + "node_id": "111000274", + "nxtStn": "증산종합시장.증산중학교입구" + }, + { + "stop_nm": "연신초등학교.연신내성당", + "ycode": "37.626872", + "stop_no": "12365", + "xcode": "126.929043", + "stop_type": "일반차로", + "node_id": "111000275", + "nxtStn": "북한산대창센시티아파트" + }, + { + "stop_nm": "신사동고개", + "ycode": "37.5981632618", + "stop_no": "12366", + "xcode": "126.9108258962", + "stop_type": "일반차로", + "node_id": "111000276", + "nxtStn": "서울기독대학교입구" + }, + { + "stop_nm": "시립서북병원", + "ycode": "37.6046894448", + "stop_no": "12367", + "xcode": "126.9103118348", + "stop_type": "일반차로", + "node_id": "111000277", + "nxtStn": "서울기독대학교입구" + }, + { + "stop_nm": "신사동고개", + "ycode": "37.5977669942", + "stop_no": "12368", + "xcode": "126.9099169775", + "stop_type": "일반차로", + "node_id": "111000278", + "nxtStn": "신사동고개사거리" + }, + { + "stop_nm": "녹번역", + "ycode": "37.600877", + "stop_no": "12381", + "xcode": "126.934225", + "stop_type": "가로변시간", + "node_id": "111000291", + "nxtStn": "녹번동대림JR아파트앞" + }, + { + "stop_nm": "시립서북병원", + "ycode": "37.605176", + "stop_no": "12388", + "xcode": "126.910563", + "stop_type": "일반차로", + "node_id": "111000298", + "nxtStn": "역촌동성당" + }, + { + "stop_nm": "구산동사거리", + "ycode": "37.6142712329", + "stop_no": "12390", + "xcode": "126.9122339199", + "stop_type": "일반차로", + "node_id": "111000299", + "nxtStn": "한솔아파트입구선정중학교후문" + }, + { + "stop_nm": "구산동사거리", + "ycode": "37.614367", + "stop_no": "12391", + "xcode": "126.912121", + "stop_type": "일반차로", + "node_id": "111000300", + "nxtStn": "온누리약국" + }, + { + "stop_nm": "역촌동성당", + "ycode": "37.60556", + "stop_no": "12393", + "xcode": "126.912148", + "stop_type": "일반차로", + "node_id": "111000302", + "nxtStn": "역말사거리" + }, + { + "stop_nm": "역촌동성당", + "ycode": "37.6057372754", + "stop_no": "12394", + "xcode": "126.9125361624", + "stop_type": "일반차로", + "node_id": "111000303", + "nxtStn": "시립서북병원" + }, + { + "stop_nm": "호림아파트앞", + "ycode": "37.6091519314", + "stop_no": "12406", + "xcode": "126.9208187439", + "stop_type": "일반차로", + "node_id": "111000312", + "nxtStn": "구산역3번출구.예일여고" + }, + { + "stop_nm": "은평권역공영차고지", + "ycode": "37.591459", + "stop_no": "12409", + "xcode": "126.884374", + "stop_type": "일반차로", + "node_id": "111000315", + "nxtStn": "종점" + }, + { + "stop_nm": "응암정보도서관", + "ycode": "37.586568", + "stop_no": "12415", + "xcode": "126.919898", + "stop_type": "일반차로", + "node_id": "111000320", + "nxtStn": "서울중앙교회앞" + }, + { + "stop_nm": "응암정보도서관", + "ycode": "37.5867495708", + "stop_no": "12416", + "xcode": "126.9201891291", + "stop_type": "일반차로", + "node_id": "111000321", + "nxtStn": "충암고교앞.대주피오레아파트" + }, + { + "stop_nm": "서울중앙교회앞", + "ycode": "37.5852370433", + "stop_no": "12417", + "xcode": "126.9181435403", + "stop_type": "일반차로", + "node_id": "111000322", + "nxtStn": "은가어린이공원구150번종점" + }, + { + "stop_nm": "우성공인중개사", + "ycode": "37.5850429138", + "stop_no": "12418", + "xcode": "126.918876351", + "stop_type": "일반차로", + "node_id": "111000323", + "nxtStn": "응암정보도서관" + }, + { + "stop_nm": "응암오거리", + "ycode": "37.5908592237", + "stop_no": "12419", + "xcode": "126.9159858454", + "stop_type": "일반차로", + "node_id": "111000324", + "nxtStn": "응암3동주민센터" + }, + { + "stop_nm": "갈현노인복지센터", + "ycode": "37.6247220019", + "stop_no": "12420", + "xcode": "126.917214331", + "stop_type": "일반차로", + "node_id": "111000325", + "nxtStn": "한일탕" + }, + { + "stop_nm": "녹번동대림JR아파트앞", + "ycode": "37.599268", + "stop_no": "12421", + "xcode": "126.937212", + "stop_type": "가로변시간", + "node_id": "111000326", + "nxtStn": "녹번역" + }, + { + "stop_nm": "연서중학교입구", + "ycode": "37.5862294351", + "stop_no": "12422", + "xcode": "126.9122781788", + "stop_type": "일반차로", + "node_id": "111000327", + "nxtStn": "와산교" + }, + { + "stop_nm": "연서중학교입구", + "ycode": "37.5861713747", + "stop_no": "12423", + "xcode": "126.9117539841", + "stop_type": "일반차로", + "node_id": "111000328", + "nxtStn": "증산역.증산동주민센터" + }, + { + "stop_nm": "지축교앞", + "ycode": "37.645043", + "stop_no": "12424", + "xcode": "126.917493", + "stop_type": "일반차로", + "node_id": "111000329", + "nxtStn": "진관공영차고지" + }, + { + "stop_nm": "지축교앞", + "ycode": "37.6448504011", + "stop_no": "12425", + "xcode": "126.9196860466", + "stop_type": "일반차로", + "node_id": "111000330", + "nxtStn": "진관중고교약수사입구" + }, + { + "stop_nm": "진관중고교약수사입구", + "ycode": "37.6451606289", + "stop_no": "12426", + "xcode": "126.9229619673", + "stop_type": "일반차로", + "node_id": "111000331", + "nxtStn": "진관초교입구" + }, + { + "stop_nm": "응암3동주민센터", + "ycode": "37.5911611009", + "stop_no": "12427", + "xcode": "126.9173132277", + "stop_type": "일반차로", + "node_id": "111000332", + "nxtStn": "국민은행" + }, + { + "stop_nm": "롯데캐슬823동앞", + "ycode": "37.6420727334", + "stop_no": "12429", + "xcode": "126.9217560692", + "stop_type": "일반차로", + "node_id": "111000334", + "nxtStn": "진관중고교.약수사앞" + }, + { + "stop_nm": "진관중고교.약수사앞", + "ycode": "37.6434108442", + "stop_no": "12430", + "xcode": "126.9231360187", + "stop_type": "일반차로", + "node_id": "111000335", + "nxtStn": "래미안909동앞" + }, + { + "stop_nm": "아이파크701동앞", + "ycode": "37.6460451246", + "stop_no": "12431", + "xcode": "126.9280934321", + "stop_type": "일반차로", + "node_id": "111000918", + "nxtStn": "푸르지오604동앞" + }, + { + "stop_nm": "푸르지오621동앞", + "ycode": "37.648436", + "stop_no": "12432", + "xcode": "126.930478", + "stop_type": "일반차로", + "node_id": "111000337", + "nxtStn": "아이파크708동앞" + }, + { + "stop_nm": "진관초교앞", + "ycode": "37.64627", + "stop_no": "12433", + "xcode": "126.9294", + "stop_type": "일반차로", + "node_id": "111000338", + "nxtStn": "생태공원앞.구립상림도서관" + }, + { + "stop_nm": "생태공원앞", + "ycode": "37.6440749929", + "stop_no": "12434", + "xcode": "126.9289701583", + "stop_type": "일반차로", + "node_id": "111000339", + "nxtStn": "아이파크709동앞" + }, + { + "stop_nm": "진관중고교.약수사앞", + "ycode": "37.643627", + "stop_no": "12435", + "xcode": "126.924132", + "stop_type": "일반차로", + "node_id": "111000340", + "nxtStn": "아이파크714동앞" + }, + { + "stop_nm": "래미안909동앞", + "ycode": "37.6411534924", + "stop_no": "12436", + "xcode": "126.9215474004", + "stop_type": "일반차로", + "node_id": "111000341", + "nxtStn": "구파발역.롯데몰" + }, + { + "stop_nm": "하나고.삼천사.진관사입구", + "ycode": "37.641815", + "stop_no": "12437", + "xcode": "126.938408", + "stop_type": "일반차로", + "node_id": "111000342", + "nxtStn": "삼천리골입구56사단북한산부대" + }, + { + "stop_nm": "응암3동주민센터", + "ycode": "37.5916290571", + "stop_no": "12439", + "xcode": "126.9176960361", + "stop_type": "일반차로", + "node_id": "111000344", + "nxtStn": "서서울농협본점" + }, + { + "stop_nm": "입곡삼거리", + "ycode": "37.649733", + "stop_no": "12440", + "xcode": "126.936408", + "stop_type": "일반차로", + "node_id": "111000345", + "nxtStn": "하나고.삼천사.진관사입구" + }, + { + "stop_nm": "입곡삼거리", + "ycode": "37.651691", + "stop_no": "12441", + "xcode": "126.937378", + "stop_type": "일반차로", + "node_id": "111000346", + "nxtStn": "백화사" + }, + { + "stop_nm": "아이파크709동앞", + "ycode": "37.64485753", + "stop_no": "12442", + "xcode": "126.9266769344", + "stop_type": "일반차로", + "node_id": "111000347", + "nxtStn": "진관중고교.약수사앞" + }, + { + "stop_nm": "은진초교입구.은뜨락도서관", + "ycode": "37.63076", + "stop_no": "12445", + "xcode": "126.9208", + "stop_type": "일반차로", + "node_id": "111000350", + "nxtStn": "은평구민체육센터앞" + }, + { + "stop_nm": "은진초교입구.은뜨락도서관", + "ycode": "37.6310195075", + "stop_no": "12446", + "xcode": "126.9209179115", + "stop_type": "일반차로", + "node_id": "111000351", + "nxtStn": "구파발역입구" + }, + { + "stop_nm": "은평구민체육센터앞", + "ycode": "37.631421", + "stop_no": "12447", + "xcode": "126.922569", + "stop_type": "일반차로", + "node_id": "111000352", + "nxtStn": "신도초중교입구.한국고전번역원" + }, + { + "stop_nm": "은평구민체육센터앞", + "ycode": "37.631655", + "stop_no": "12448", + "xcode": "126.923248", + "stop_type": "일반차로", + "node_id": "111000353", + "nxtStn": "은진초교입구.은뜨락도서관" + }, + { + "stop_nm": "신도초중교입구.한국고전번역원", + "ycode": "37.631487", + "stop_no": "12449", + "xcode": "126.925337", + "stop_type": "일반차로", + "node_id": "111000354", + "nxtStn": "은평경찰서" + }, + { + "stop_nm": "신도초중교입구.한국고전번역원", + "ycode": "37.6315631161", + "stop_no": "12450", + "xcode": "126.9269041367", + "stop_type": "일반차로", + "node_id": "111000355", + "nxtStn": "은평구민체육센터앞" + }, + { + "stop_nm": "은평성모병원", + "ycode": "37.633809", + "stop_no": "12451", + "xcode": "126.917492", + "stop_type": "일반차로", + "node_id": "111001133", + "nxtStn": "구파발(가상)" + }, + { + "stop_nm": "아이파크714동앞", + "ycode": "37.644767", + "stop_no": "12453", + "xcode": "126.926202", + "stop_type": "일반차로", + "node_id": "111000358", + "nxtStn": "아이파크701동앞" + }, + { + "stop_nm": "푸르지오604동앞", + "ycode": "37.647765", + "stop_no": "12455", + "xcode": "126.930083", + "stop_type": "일반차로", + "node_id": "111000360", + "nxtStn": "푸르지오614동앞" + }, + { + "stop_nm": "푸르지오614동앞", + "ycode": "37.649745", + "stop_no": "12456", + "xcode": "126.931495", + "stop_type": "일반차로", + "node_id": "111000361", + "nxtStn": "삼천리골입구56사단북한산부대" + }, + { + "stop_nm": "아이파크708동앞", + "ycode": "37.645634", + "stop_no": "12457", + "xcode": "126.92713", + "stop_type": "일반차로", + "node_id": "111000916", + "nxtStn": "진관중고교.약수사앞" + }, + { + "stop_nm": "진관동주민센터.은평우체국", + "ycode": "37.634545", + "stop_no": "12458", + "xcode": "126.919781", + "stop_type": "가로변전일", + "node_id": "111000551", + "nxtStn": "동부센트레빌324동앞" + }, + { + "stop_nm": "진관동주민센터.은평우체국", + "ycode": "37.634698", + "stop_no": "12459", + "xcode": "126.91982", + "stop_type": "일반차로", + "node_id": "111000550", + "nxtStn": "구파발(가상)" + }, + { + "stop_nm": "동부센트레빌324동앞", + "ycode": "37.634163", + "stop_no": "12460", + "xcode": "126.924645", + "stop_type": "일반차로", + "node_id": "111000549", + "nxtStn": "동부센트레빌320동앞" + }, + { + "stop_nm": "두산위브253동앞", + "ycode": "37.634275", + "stop_no": "12461", + "xcode": "126.923168", + "stop_type": "일반차로", + "node_id": "111000548", + "nxtStn": "진관동주민센터.은평우체국" + }, + { + "stop_nm": "동부센트레빌320동앞", + "ycode": "37.6340897602", + "stop_no": "12462", + "xcode": "126.9278046811", + "stop_type": "일반차로", + "node_id": "111000547", + "nxtStn": "신도초교.은평메디텍고등학교" + }, + { + "stop_nm": "신도초교.은평메디텍고등학교", + "ycode": "37.634313", + "stop_no": "12463", + "xcode": "126.929245", + "stop_type": "일반차로", + "node_id": "111000546", + "nxtStn": "두산위브205동앞" + }, + { + "stop_nm": "하나고.삼천사.진관사입구", + "ycode": "37.6417643622", + "stop_no": "12464", + "xcode": "126.9381067653", + "stop_type": "일반차로", + "node_id": "111000552", + "nxtStn": "제각말5단지.은평뉴타운도서관" + }, + { + "stop_nm": "두산위브205동앞", + "ycode": "37.6342668645", + "stop_no": "12465", + "xcode": "126.9262624499", + "stop_type": "일반차로", + "node_id": "111000922", + "nxtStn": "두산위브253동앞" + }, + { + "stop_nm": "래미안922동앞", + "ycode": "37.64408", + "stop_no": "12466", + "xcode": "126.921341", + "stop_type": "일반차로", + "node_id": "111000920", + "nxtStn": "래미안909동앞" + }, + { + "stop_nm": "롯데캐슬820동앞", + "ycode": "37.6440018231", + "stop_no": "12467", + "xcode": "126.921569335", + "stop_type": "일반차로", + "node_id": "111000921", + "nxtStn": "지축교앞" + }, + { + "stop_nm": "진관공영차고지", + "ycode": "37.646727264", + "stop_no": "12469", + "xcode": "126.9079338724", + "stop_type": "일반차로", + "node_id": "111001112", + "nxtStn": "동산동능모퉁이.한국지역난방공 " + }, + { + "stop_nm": "진관공영차고지", + "ycode": "37.6466658339", + "stop_no": "12470", + "xcode": "126.9081159578", + "stop_type": "일반차로", + "node_id": "111001113", + "nxtStn": "진관공영차고지" + }, + { + "stop_nm": "기자촌11단지앞", + "ycode": "37.634757", + "stop_no": "12471", + "xcode": "126.93258", + "stop_type": "일반차로", + "node_id": "111000924", + "nxtStn": "제각말5단지.은평뉴타운도서관" + }, + { + "stop_nm": "수국사입구", + "ycode": "37.616775", + "stop_no": "12472", + "xcode": "126.906785", + "stop_type": "일반차로", + "node_id": "111000939", + "nxtStn": "선정중고등학교" + }, + { + "stop_nm": "응암초교.백련산힐스테이트3차", + "ycode": "37.5887750972", + "stop_no": "12473", + "xcode": "126.9227143861", + "stop_type": "일반차로", + "node_id": "111000940", + "nxtStn": "백련산힐스테이트2차" + }, + { + "stop_nm": "신도초교.은평메디텍고등학교", + "ycode": "37.634092", + "stop_no": "12474", + "xcode": "126.930538", + "stop_type": "일반차로", + "node_id": "111000941", + "nxtStn": "신도중학교" + }, + { + "stop_nm": "응암초교.백련산힐스테이트3차", + "ycode": "37.588335", + "stop_no": "12475", + "xcode": "126.922555", + "stop_type": "일반차로", + "node_id": "111001120", + "nxtStn": "충암고교앞.대주피오레아파트" + }, + { + "stop_nm": "녹번센트레빌아파트", + "ycode": "37.5987999451", + "stop_no": "12476", + "xcode": "126.9259022216", + "stop_type": "일반차로", + "node_id": "111000943", + "nxtStn": "응암1동주민센터" + }, + { + "stop_nm": "녹번센트레빌아파트", + "ycode": "37.5991595285", + "stop_no": "12477", + "xcode": "126.925981141", + "stop_type": "일반차로", + "node_id": "111000944", + "nxtStn": "영락중학교입구" + }, + { + "stop_nm": "선진운수종점", + "ycode": "37.614378", + "stop_no": "12478", + "xcode": "126.909608", + "stop_type": "일반차로", + "node_id": "111000945", + "nxtStn": "구산동사거리" + }, + { + "stop_nm": "기자촌사거리", + "ycode": "37.634432", + "stop_no": "12479", + "xcode": "126.932131", + "stop_type": "일반차로", + "node_id": "111001111", + "nxtStn": "신도초교.은평메디텍고등학교" + }, + { + "stop_nm": "갈현중앙시장", + "ycode": "37.623464", + "stop_no": "12480", + "xcode": "126.918397", + "stop_type": "일반차로", + "node_id": "111001110", + "nxtStn": "갈현동성당앞" + }, + { + "stop_nm": "갈현중앙시장", + "ycode": "37.6232841899", + "stop_no": "12481", + "xcode": "126.9189696235", + "stop_type": "일반차로", + "node_id": "111001109", + "nxtStn": "연신내역6번출구" + }, + { + "stop_nm": "덕산중학교.씨티아파트", + "ycode": "37.6001887986", + "stop_no": "12498", + "xcode": "126.9045107403", + "stop_type": "일반차로", + "node_id": "111001123", + "nxtStn": "상신초등학교입구" + }, + { + "stop_nm": "덕산중학교.두산위브아파트", + "ycode": "37.6003715553", + "stop_no": "12499", + "xcode": "126.9045804777", + "stop_type": "일반차로", + "node_id": "111001124", + "nxtStn": "DMC두산위브더퍼스트" + }, + { + "stop_nm": "대성중.고등학교", + "ycode": "37.622241841", + "stop_no": "12500", + "xcode": "126.9113648182", + "stop_type": "마을버스", + "node_id": "111900102", + "nxtStn": "선일여고.빅데이터고" + }, + { + "stop_nm": "시립은평병원.파크자이아파트", + "ycode": "37.593376", + "stop_no": "12501", + "xcode": "126.921958", + "stop_type": "마을버스", + "node_id": "111900101", + "nxtStn": "신비로마트" + }, + { + "stop_nm": "경향파크아파트", + "ycode": "37.6098126903", + "stop_no": "12502", + "xcode": "126.9064058814", + "stop_type": "마을버스", + "node_id": "111900111", + "nxtStn": "대동슈퍼" + }, + { + "stop_nm": "12번지건영아파트", + "ycode": "37.629087", + "stop_no": "12503", + "xcode": "126.913999", + "stop_type": "마을버스", + "node_id": "111900058", + "nxtStn": "미미슈퍼" + }, + { + "stop_nm": "상신초교.두산.한신아파트", + "ycode": "37.5995007546", + "stop_no": "12504", + "xcode": "126.9060257766", + "stop_type": "마을버스", + "node_id": "111900057", + "nxtStn": "신사1동경로당" + }, + { + "stop_nm": "선일여고.빅데이터고", + "ycode": "37.6205134295", + "stop_no": "12506", + "xcode": "126.9127522188", + "stop_type": "마을버스", + "node_id": "111900100", + "nxtStn": "미미아파트" + }, + { + "stop_nm": "신비로마트", + "ycode": "37.5935080891", + "stop_no": "12507", + "xcode": "126.9207130204", + "stop_type": "마을버스", + "node_id": "111900118", + "nxtStn": "응암시장입구" + }, + { + "stop_nm": "대동슈퍼", + "ycode": "37.6091453914", + "stop_no": "12508", + "xcode": "126.9069186823", + "stop_type": "마을버스", + "node_id": "111900099", + "nxtStn": "구산근린공원.GS편의점" + }, + { + "stop_nm": "미미슈퍼", + "ycode": "37.628696532", + "stop_no": "12509", + "xcode": "126.9144806172", + "stop_type": "마을버스", + "node_id": "111900098", + "nxtStn": "충남슈퍼" + }, + { + "stop_nm": "신사1동경로당", + "ycode": "37.6011047367", + "stop_no": "12510", + "xcode": "126.9065878058", + "stop_type": "마을버스", + "node_id": "111900097", + "nxtStn": "라이프씨티후문.광성교회" + }, + { + "stop_nm": "미니마트", + "ycode": "37.6261436774", + "stop_no": "12511", + "xcode": "126.913128566", + "stop_type": "마을버스", + "node_id": "111900096", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "미미아파트", + "ycode": "37.6193298376", + "stop_no": "12512", + "xcode": "126.9145751762", + "stop_type": "마을버스", + "node_id": "111900095", + "nxtStn": "갈현초교.로데오거리" + }, + { + "stop_nm": "응암시장입구", + "ycode": "37.5938507341", + "stop_no": "12513", + "xcode": "126.9184081548", + "stop_type": "마을버스", + "node_id": "111900119", + "nxtStn": "서울정형외과" + }, + { + "stop_nm": "구산근린공원.GS편의점", + "ycode": "37.6078442485", + "stop_no": "12514", + "xcode": "126.9081005205", + "stop_type": "마을버스", + "node_id": "111900094", + "nxtStn": "구산마트" + }, + { + "stop_nm": "충남슈퍼", + "ycode": "37.6281888678", + "stop_no": "12515", + "xcode": "126.9152380123", + "stop_type": "마을버스", + "node_id": "111900093", + "nxtStn": "신창슈퍼" + }, + { + "stop_nm": "라이프씨티후문.광성교회", + "ycode": "37.6019571245", + "stop_no": "12516", + "xcode": "126.9065369075", + "stop_type": "마을버스", + "node_id": "111900092", + "nxtStn": "역촌센트레빌" + }, + { + "stop_nm": "후레쉬유통", + "ycode": "37.6252521036", + "stop_no": "12517", + "xcode": "126.9150510185", + "stop_type": "마을버스", + "node_id": "111900091", + "nxtStn": "양지초교" + }, + { + "stop_nm": "갈현초교.로데오거리", + "ycode": "37.6183017293", + "stop_no": "12518", + "xcode": "126.9171432868", + "stop_type": "마을버스", + "node_id": "111900090", + "nxtStn": "연신내역.물빛공원" + }, + { + "stop_nm": "구산마트", + "ycode": "37.6075149639", + "stop_no": "12520", + "xcode": "126.9099346707", + "stop_type": "마을버스", + "node_id": "111900089", + "nxtStn": "엔에스아파트" + }, + { + "stop_nm": "신창슈퍼", + "ycode": "37.6275398834", + "stop_no": "12521", + "xcode": "126.9162130815", + "stop_type": "마을버스", + "node_id": "111900088", + "nxtStn": "대한슈퍼" + }, + { + "stop_nm": "역촌센트레빌", + "ycode": "37.6036440665", + "stop_no": "12522", + "xcode": "126.9066729719", + "stop_type": "마을버스", + "node_id": "111900087", + "nxtStn": "천사원입구.서북병원" + }, + { + "stop_nm": "그린마트", + "ycode": "37.6245867693", + "stop_no": "12523", + "xcode": "126.9158414066", + "stop_type": "마을버스", + "node_id": "111900086", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "연신내역.물빛공원", + "ycode": "37.6179370025", + "stop_no": "12524", + "xcode": "126.9200640466", + "stop_type": "마을버스", + "node_id": "111900112", + "nxtStn": "연서시장" + }, + { + "stop_nm": "금호아파트", + "ycode": "37.5991458825", + "stop_no": "12525", + "xcode": "126.9215937962", + "stop_type": "마을버스", + "node_id": "111900085", + "nxtStn": "서부경찰서후문" + }, + { + "stop_nm": "엔에스아파트", + "ycode": "37.6074009938", + "stop_no": "12526", + "xcode": "126.9129600864", + "stop_type": "마을버스", + "node_id": "111900084", + "nxtStn": "미주아트빌" + }, + { + "stop_nm": "대한슈퍼", + "ycode": "37.6264916063", + "stop_no": "12527", + "xcode": "126.9170390302", + "stop_type": "마을버스", + "node_id": "111900083", + "nxtStn": "한일탕" + }, + { + "stop_nm": "천사원입구.서북병원", + "ycode": "37.6046059597", + "stop_no": "12528", + "xcode": "126.9072233446", + "stop_type": "마을버스", + "node_id": "111900018", + "nxtStn": "GS편의점.제일영광교회" + }, + { + "stop_nm": "갈현1동주민센터", + "ycode": "37.6237007979", + "stop_no": "12529", + "xcode": "126.9168212191", + "stop_type": "마을버스", + "node_id": "111900082", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "서부경찰서후문", + "ycode": "37.6011577098", + "stop_no": "12531", + "xcode": "126.922503383", + "stop_type": "마을버스", + "node_id": "111900080", + "nxtStn": "은평세무서음식문화거리" + }, + { + "stop_nm": "미주아트빌", + "ycode": "37.607360642", + "stop_no": "12532", + "xcode": "126.9144620117", + "stop_type": "마을버스", + "node_id": "111900079", + "nxtStn": "구산역2번출구.예일여고" + }, + { + "stop_nm": "한일탕", + "ycode": "37.6258625007", + "stop_no": "12533", + "xcode": "126.9181148695", + "stop_type": "마을버스", + "node_id": "111900078", + "nxtStn": "동아문구" + }, + { + "stop_nm": "GS편의점.제일영광교회", + "ycode": "37.6038734274", + "stop_no": "12534", + "xcode": "126.9088695197", + "stop_type": "마을버스", + "node_id": "111900077", + "nxtStn": "역촌노인복지관" + }, + { + "stop_nm": "은평세무서", + "ycode": "37.602627", + "stop_no": "12536", + "xcode": "126.92665", + "stop_type": "마을버스", + "node_id": "111900103", + "nxtStn": "은평문화예술회관" + }, + { + "stop_nm": "동아문구", + "ycode": "37.6250653271", + "stop_no": "12538", + "xcode": "126.9172320767", + "stop_type": "마을버스", + "node_id": "111900076", + "nxtStn": "갈현1동주민센터" + }, + { + "stop_nm": "역촌노인복지관", + "ycode": "37.6029022786", + "stop_no": "12539", + "xcode": "126.9110909239", + "stop_type": "마을버스", + "node_id": "111900075", + "nxtStn": "역촌초등학교후문" + }, + { + "stop_nm": "불광보건소", + "ycode": "37.6212263774", + "stop_no": "12540", + "xcode": "126.9276959244", + "stop_type": "마을버스", + "node_id": "111900074", + "nxtStn": "금강골드" + }, + { + "stop_nm": "은평문화예술회관", + "ycode": "37.6036578292", + "stop_no": "12541", + "xcode": "126.9275532384", + "stop_type": "마을버스", + "node_id": "111900104", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "구산전철역", + "ycode": "37.6107888716", + "stop_no": "12542", + "xcode": "126.9176987121", + "stop_type": "마을버스", + "node_id": "111900122", + "nxtStn": "삼성아파트후문" + }, + { + "stop_nm": "갈현1동주민센터", + "ycode": "37.6237981731", + "stop_no": "12543", + "xcode": "126.9169038114", + "stop_type": "마을버스", + "node_id": "111900073", + "nxtStn": "갈현중앙시장" + }, + { + "stop_nm": "역촌초등학교후문", + "ycode": "37.6021657689", + "stop_no": "12544", + "xcode": "126.9130783097", + "stop_type": "마을버스", + "node_id": "111900072", + "nxtStn": "우리들약국" + }, + { + "stop_nm": "금강골드", + "ycode": "37.6220396778", + "stop_no": "12545", + "xcode": "126.9300582848", + "stop_type": "마을버스", + "node_id": "111900071", + "nxtStn": "불광중학교" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.6052022296", + "stop_no": "12546", + "xcode": "126.9289335194", + "stop_type": "마을버스", + "node_id": "111900070", + "nxtStn": "삼거리" + }, + { + "stop_nm": "삼성아파트후문", + "ycode": "37.6094541116", + "stop_no": "12547", + "xcode": "126.9212918796", + "stop_type": "마을버스", + "node_id": "111900069", + "nxtStn": "동명탕" + }, + { + "stop_nm": "우리들약국", + "ycode": "37.6023270787", + "stop_no": "12548", + "xcode": "126.9155822164", + "stop_type": "마을버스", + "node_id": "111900068", + "nxtStn": "풍림아그네스앞" + }, + { + "stop_nm": "불광중학교", + "ycode": "37.6223118057", + "stop_no": "12549", + "xcode": "126.9315964607", + "stop_type": "마을버스", + "node_id": "111900067", + "nxtStn": "종점" + }, + { + "stop_nm": "삼거리", + "ycode": "37.6060269864", + "stop_no": "12550", + "xcode": "126.9308932967", + "stop_type": "마을버스", + "node_id": "111900066", + "nxtStn": "은평여성인력개발센터" + }, + { + "stop_nm": "동명탕", + "ycode": "37.6113704609", + "stop_no": "12551", + "xcode": "126.9222594504", + "stop_type": "마을버스", + "node_id": "111900065", + "nxtStn": "동명여고후문" + }, + { + "stop_nm": "갈현1동주민센터", + "ycode": "37.6238134692", + "stop_no": "12553", + "xcode": "126.9168720735", + "stop_type": "마을버스", + "node_id": "111900064", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "불광동팀수양관", + "ycode": "37.6225815388", + "stop_no": "12554", + "xcode": "126.9337169448", + "stop_type": "마을버스", + "node_id": "111900063", + "nxtStn": "불광중학교" + }, + { + "stop_nm": "서울혁신파크", + "ycode": "37.6064338527", + "stop_no": "12555", + "xcode": "126.933287288", + "stop_type": "마을버스", + "node_id": "111900105", + "nxtStn": "녹번전철역" + }, + { + "stop_nm": "동명여고후문", + "ycode": "37.6134047996", + "stop_no": "12556", + "xcode": "126.9245556417", + "stop_type": "마을버스", + "node_id": "111900062", + "nxtStn": "대조동우체국" + }, + { + "stop_nm": "그린마트", + "ycode": "37.6245869396", + "stop_no": "12558", + "xcode": "126.9160804483", + "stop_type": "마을버스", + "node_id": "111900061", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "불광중학교", + "ycode": "37.6225288027", + "stop_no": "12559", + "xcode": "126.9315479397", + "stop_type": "마을버스", + "node_id": "111900060", + "nxtStn": "금강골드" + }, + { + "stop_nm": "녹번전철역", + "ycode": "37.601652", + "stop_no": "12560", + "xcode": "126.935223", + "stop_type": "마을버스", + "node_id": "111900059", + "nxtStn": "은평구청" + }, + { + "stop_nm": "대조동우체국", + "ycode": "37.613091", + "stop_no": "12561", + "xcode": "126.926633", + "stop_type": "마을버스", + "node_id": "111900056", + "nxtStn": "불광전철역" + }, + { + "stop_nm": "하나은행역촌지점", + "ycode": "37.6082433296", + "stop_no": "12562", + "xcode": "126.9203621159", + "stop_type": "마을버스", + "node_id": "111900123", + "nxtStn": "삼성아파트후문" + }, + { + "stop_nm": "후레쉬유통", + "ycode": "37.6252216663", + "stop_no": "12563", + "xcode": "126.9153286159", + "stop_type": "마을버스", + "node_id": "111900055", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "금강골드", + "ycode": "37.622154", + "stop_no": "12564", + "xcode": "126.930021", + "stop_type": "마을버스", + "node_id": "111900054", + "nxtStn": "불광보건소" + }, + { + "stop_nm": "불광전철역", + "ycode": "37.609785", + "stop_no": "12566", + "xcode": "126.930403", + "stop_type": "마을버스", + "node_id": "111900053", + "nxtStn": "양광교회앞" + }, + { + "stop_nm": "갈헌1동주민센터", + "ycode": "37.6234667674", + "stop_no": "12567", + "xcode": "126.9171783379", + "stop_type": "마을버스", + "node_id": "111900052", + "nxtStn": "갈현노인복지센터" + }, + { + "stop_nm": "미니마트", + "ycode": "37.6260645355", + "stop_no": "12568", + "xcode": "126.9133371158", + "stop_type": "마을버스", + "node_id": "111900051", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "불광보건소", + "ycode": "37.6214750716", + "stop_no": "12569", + "xcode": "126.927728474", + "stop_type": "마을버스", + "node_id": "111900050", + "nxtStn": "새장골유래비" + }, + { + "stop_nm": "양광교회앞", + "ycode": "37.6085524361", + "stop_no": "12571", + "xcode": "126.9288804949", + "stop_type": "마을버스", + "node_id": "111900113", + "nxtStn": "대조시장" + }, + { + "stop_nm": "갈현노인복지센터", + "ycode": "37.6249708087", + "stop_no": "12572", + "xcode": "126.9173681302", + "stop_type": "마을버스", + "node_id": "111900049", + "nxtStn": "한일탕" + }, + { + "stop_nm": "석광사", + "ycode": "37.6264706212", + "stop_no": "12573", + "xcode": "126.9117131583", + "stop_type": "마을버스", + "node_id": "111900048", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "한일탕", + "ycode": "37.6257490703", + "stop_no": "12577", + "xcode": "126.9182679378", + "stop_type": "마을버스", + "node_id": "111900046", + "nxtStn": "6번지입구" + }, + { + "stop_nm": "연신내역.물빛공원", + "ycode": "37.6179484142", + "stop_no": "12581", + "xcode": "126.9196188444", + "stop_type": "마을버스", + "node_id": "111900110", + "nxtStn": "갈현초교.로데오거리" + }, + { + "stop_nm": "서강스카이빌", + "ycode": "37.599637866", + "stop_no": "12582", + "xcode": "126.9215785571", + "stop_type": "마을버스", + "node_id": "111900044", + "nxtStn": "신진과학기술고등학교" + }, + { + "stop_nm": "금원빌라", + "ycode": "37.627308", + "stop_no": "12584", + "xcode": "126.918217", + "stop_type": "마을버스", + "node_id": "111900043", + "nxtStn": "영진빌라" + }, + { + "stop_nm": "갈현초교.로데오거리", + "ycode": "37.6183891774", + "stop_no": "12585", + "xcode": "126.9172043613", + "stop_type": "마을버스", + "node_id": "111900042", + "nxtStn": "미미아파트" + }, + { + "stop_nm": "영진빌라", + "ycode": "37.628026", + "stop_no": "12588", + "xcode": "126.91723", + "stop_type": "마을버스", + "node_id": "111900040", + "nxtStn": "일진빌라" + }, + { + "stop_nm": "미미아파트", + "ycode": "37.6194836087", + "stop_no": "12589", + "xcode": "126.9147744045", + "stop_type": "마을버스", + "node_id": "111900039", + "nxtStn": "선일여고.빅데이터고" + }, + { + "stop_nm": "응암시장입구", + "ycode": "37.5936340537", + "stop_no": "12590", + "xcode": "126.9191082332", + "stop_type": "마을버스", + "node_id": "111900038", + "nxtStn": "신비로마트" + }, + { + "stop_nm": "일진빌라", + "ycode": "37.628647", + "stop_no": "12592", + "xcode": "126.916511", + "stop_type": "마을버스", + "node_id": "111900036", + "nxtStn": "미곡빌라" + }, + { + "stop_nm": "선일여고.빅데이터고", + "ycode": "37.620586", + "stop_no": "12593", + "xcode": "126.912867", + "stop_type": "마을버스", + "node_id": "111900035", + "nxtStn": "대성중.고등학교" + }, + { + "stop_nm": "신비로마트", + "ycode": "37.593465478", + "stop_no": "12594", + "xcode": "126.9203269078", + "stop_type": "마을버스", + "node_id": "111900034", + "nxtStn": "시립은평병원.파크자이아파트" + }, + { + "stop_nm": "미주아트빌", + "ycode": "37.6074762806", + "stop_no": "12595", + "xcode": "126.9148764255", + "stop_type": "마을버스", + "node_id": "111900033", + "nxtStn": "엔에스아파트" + }, + { + "stop_nm": "미곡빌라", + "ycode": "37.6292", + "stop_no": "12596", + "xcode": "126.91571", + "stop_type": "마을버스", + "node_id": "111900032", + "nxtStn": "양지빌라" + }, + { + "stop_nm": "시립은평병원.파크자이아파트", + "ycode": "37.593162", + "stop_no": "12598", + "xcode": "126.922315", + "stop_type": "마을버스", + "node_id": "111900030", + "nxtStn": "힐스테이트2단지후문앞" + }, + { + "stop_nm": "엔에스아파트", + "ycode": "37.6075146741", + "stop_no": "12599", + "xcode": "126.9131547681", + "stop_type": "마을버스", + "node_id": "111900029", + "nxtStn": "구산마트" + }, + { + "stop_nm": "양지빌라", + "ycode": "37.6287104174", + "stop_no": "12600", + "xcode": "126.9149120747", + "stop_type": "마을버스", + "node_id": "111900028", + "nxtStn": "종점" + }, + { + "stop_nm": "구산마트", + "ycode": "37.6076159546", + "stop_no": "12603", + "xcode": "126.9100251603", + "stop_type": "마을버스", + "node_id": "111900027", + "nxtStn": "구산근린공원.GS편의점" + }, + { + "stop_nm": "구파발역.롯데몰", + "ycode": "37.637573", + "stop_no": "12608", + "xcode": "126.918503", + "stop_type": "일반차로", + "node_id": "111000915", + "nxtStn": "박석고개.신도고등학교" + }, + { + "stop_nm": "하나은행역촌지점", + "ycode": "37.6083549287", + "stop_no": "12612", + "xcode": "126.9201615172", + "stop_type": "마을버스", + "node_id": "111900124", + "nxtStn": "새생명약국앞" + }, + { + "stop_nm": "구산근린공원.GS편의점", + "ycode": "37.6078265542", + "stop_no": "12615", + "xcode": "126.9085218863", + "stop_type": "마을버스", + "node_id": "111900026", + "nxtStn": "은평마을" + }, + { + "stop_nm": "은평마을", + "ycode": "37.6081354955", + "stop_no": "12623", + "xcode": "126.9071997055", + "stop_type": "마을버스", + "node_id": "111900025", + "nxtStn": "대동슈퍼" + }, + { + "stop_nm": "대동슈퍼", + "ycode": "37.6091680559", + "stop_no": "12627", + "xcode": "126.9070930846", + "stop_type": "마을버스", + "node_id": "111900024", + "nxtStn": "종점" + }, + { + "stop_nm": "우리들약국", + "ycode": "37.6024207649", + "stop_no": "12679", + "xcode": "126.915544736", + "stop_type": "마을버스", + "node_id": "111900023", + "nxtStn": "역촌초등학교후문" + }, + { + "stop_nm": "역촌초등학교후문", + "ycode": "37.6022657636", + "stop_no": "12682", + "xcode": "126.913043084", + "stop_type": "마을버스", + "node_id": "111900022", + "nxtStn": "역촌노인복지관" + }, + { + "stop_nm": "역촌노인복지관", + "ycode": "37.6030076903", + "stop_no": "12684", + "xcode": "126.9110704122", + "stop_type": "마을버스", + "node_id": "111900021", + "nxtStn": "GS편의점.제일영광교회" + }, + { + "stop_nm": "GS편의점.제일영광교회", + "ycode": "37.6039125765", + "stop_no": "12685", + "xcode": "126.9089627251", + "stop_type": "마을버스", + "node_id": "111900020", + "nxtStn": "천사원입구" + }, + { + "stop_nm": "천사원입구", + "ycode": "37.6047114321", + "stop_no": "12705", + "xcode": "126.9072809761", + "stop_type": "마을버스", + "node_id": "111900019", + "nxtStn": "경남아너스빌.서북병원" + }, + { + "stop_nm": "역촌센트레빌", + "ycode": "37.6036115181", + "stop_no": "12706", + "xcode": "126.9065348376", + "stop_type": "마을버스", + "node_id": "111900017", + "nxtStn": "라이프씨티아파트후문.광성교회" + }, + { + "stop_nm": "라이프씨티아파트후문.광성교회", + "ycode": "37.6019984659", + "stop_no": "12713", + "xcode": "126.9063998164", + "stop_type": "마을버스", + "node_id": "111900016", + "nxtStn": "신사1동경로당" + }, + { + "stop_nm": "신사1동경로당", + "ycode": "37.6010559497", + "stop_no": "12714", + "xcode": "126.9064259132", + "stop_type": "마을버스", + "node_id": "111900015", + "nxtStn": "상신초교.두산.한신아파트" + }, + { + "stop_nm": "은평공영차고지(가상)", + "ycode": "37.5913387098", + "stop_no": "12723", + "xcode": "126.8832624811", + "stop_type": "가상정류장", + "node_id": "111000468", + "nxtStn": "종점" + }, + { + "stop_nm": "연신내역6번출구", + "ycode": "37.6187941297", + "stop_no": "12725", + "xcode": "126.920609953", + "stop_type": "마을버스", + "node_id": "111900014", + "nxtStn": "청구성심병원후문" + }, + { + "stop_nm": "상신초교.두산.한신아파트", + "ycode": "37.5996258649", + "stop_no": "12727", + "xcode": "126.9063506929", + "stop_type": "마을버스", + "node_id": "111900013", + "nxtStn": "종점" + }, + { + "stop_nm": "청구성심병원후문", + "ycode": "37.6203235076", + "stop_no": "12733", + "xcode": "126.9193772591", + "stop_type": "마을버스", + "node_id": "111900012", + "nxtStn": "연갈현공판장후문" + }, + { + "stop_nm": "역촌역", + "ycode": "37.605524", + "stop_no": "12741", + "xcode": "126.923438", + "stop_type": "일반차로", + "node_id": "111000483", + "nxtStn": "은평구청" + }, + { + "stop_nm": "역촌역", + "ycode": "37.604969841", + "stop_no": "12742", + "xcode": "126.9219467184", + "stop_type": "일반차로", + "node_id": "111000484", + "nxtStn": "응암역" + }, + { + "stop_nm": "응암역", + "ycode": "37.5976816655", + "stop_no": "12743", + "xcode": "126.915151456", + "stop_type": "일반차로", + "node_id": "111000485", + "nxtStn": "새절역" + }, + { + "stop_nm": "응암역", + "ycode": "37.597900063", + "stop_no": "12744", + "xcode": "126.9156177958", + "stop_type": "일반차로", + "node_id": "111000486", + "nxtStn": "역촌역" + }, + { + "stop_nm": "새절역", + "ycode": "37.5911367076", + "stop_no": "12745", + "xcode": "126.9134206649", + "stop_type": "일반차로", + "node_id": "111000487", + "nxtStn": "증산역" + }, + { + "stop_nm": "새절역", + "ycode": "37.591669694", + "stop_no": "12746", + "xcode": "126.9140270141", + "stop_type": "일반차로", + "node_id": "111000488", + "nxtStn": "응암역" + }, + { + "stop_nm": "증산역", + "ycode": "37.5837279163", + "stop_no": "12747", + "xcode": "126.9097617912", + "stop_type": "일반차로", + "node_id": "111000489", + "nxtStn": "새절역" + }, + { + "stop_nm": "증산역", + "ycode": "37.5838186304", + "stop_no": "12748", + "xcode": "126.9093755737", + "stop_type": "일반차로", + "node_id": "111000490", + "nxtStn": "상암동입구" + }, + { + "stop_nm": "연갈현공판장후문", + "ycode": "37.6231941796", + "stop_no": "12750", + "xcode": "126.9191124639", + "stop_type": "마을버스", + "node_id": "111900010", + "nxtStn": "갈헌1동주민센터" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.611396", + "stop_no": "12792", + "xcode": "126.937962", + "stop_type": "마을버스", + "node_id": "111900009", + "nxtStn": "현대힐스테이트1차정문" + }, + { + "stop_nm": "현대힐스테이트1차정문", + "ycode": "37.612018", + "stop_no": "12794", + "xcode": "126.937086", + "stop_type": "마을버스", + "node_id": "111900008", + "nxtStn": "현대힐스테이트1차후문" + }, + { + "stop_nm": "현대힐스테이트1차후문", + "ycode": "37.6122743017", + "stop_no": "12795", + "xcode": "126.9358352057", + "stop_type": "마을버스", + "node_id": "111900007", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.6121205904", + "stop_no": "12804", + "xcode": "126.9332606867", + "stop_type": "마을버스", + "node_id": "111900006", + "nxtStn": "불광초등학교" + }, + { + "stop_nm": "불광역9번출구", + "ycode": "37.6110519588", + "stop_no": "12806", + "xcode": "126.9302407459", + "stop_type": "마을버스", + "node_id": "111900106", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.6119764495", + "stop_no": "12807", + "xcode": "126.9333185837", + "stop_type": "마을버스", + "node_id": "111900004", + "nxtStn": "현대힐스테이트1차후문" + }, + { + "stop_nm": "현대힐스테이트1차후문", + "ycode": "37.6124118652", + "stop_no": "12808", + "xcode": "126.9352811899", + "stop_type": "마을버스", + "node_id": "111900003", + "nxtStn": "현대힐스테이트1차정문" + }, + { + "stop_nm": "현대힐스테이트1차정문", + "ycode": "37.612039", + "stop_no": "12809", + "xcode": "126.93671", + "stop_type": "마을버스", + "node_id": "111900002", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.6110914359", + "stop_no": "12810", + "xcode": "126.9380064656", + "stop_type": "마을버스", + "node_id": "111900001", + "nxtStn": "종점" + }, + { + "stop_nm": "힐스테이트302동앞", + "ycode": "37.5883424842", + "stop_no": "12811", + "xcode": "126.9253747237", + "stop_type": "마을버스", + "node_id": "111900129", + "nxtStn": "힐스테이트116동앞" + }, + { + "stop_nm": "힐스테이트116동앞", + "ycode": "37.589629845", + "stop_no": "12812", + "xcode": "126.9249091668", + "stop_type": "마을버스", + "node_id": "111900131", + "nxtStn": "서울연은초등학교" + }, + { + "stop_nm": "서울연은초등학교", + "ycode": "37.5907478447", + "stop_no": "12813", + "xcode": "126.9245151054", + "stop_type": "마을버스", + "node_id": "111900126", + "nxtStn": "힐스테이트1단지정문앞" + }, + { + "stop_nm": "힐스테이트1단지정문앞", + "ycode": "37.5915036842", + "stop_no": "12814", + "xcode": "126.9242436989", + "stop_type": "마을버스", + "node_id": "111900125", + "nxtStn": "힐스테이트상가앞" + }, + { + "stop_nm": "힐스테이트상가앞", + "ycode": "37.5928402753", + "stop_no": "12815", + "xcode": "126.9232775237", + "stop_type": "마을버스", + "node_id": "111900130", + "nxtStn": "시립은평병원.파크자이아파트" + }, + { + "stop_nm": "힐스테이트2단지후문앞", + "ycode": "37.5920072263", + "stop_no": "12816", + "xcode": "126.923985", + "stop_type": "마을버스", + "node_id": "111900132", + "nxtStn": "서울연은초등학교" + }, + { + "stop_nm": "서울연은초등학교", + "ycode": "37.5905405474", + "stop_no": "12817", + "xcode": "126.9244417099", + "stop_type": "마을버스", + "node_id": "111900128", + "nxtStn": "힐스테이트212동앞" + }, + { + "stop_nm": "힐스테이트212동앞", + "ycode": "37.5894937244", + "stop_no": "12818", + "xcode": "126.9248209789", + "stop_type": "마을버스", + "node_id": "111900127", + "nxtStn": "힐스테이트302동앞" + }, + { + "stop_nm": "힐스테이트302동앞", + "ycode": "37.588117", + "stop_no": "12819", + "xcode": "126.925316", + "stop_type": "마을버스", + "node_id": "111900133", + "nxtStn": "종점" + }, + { + "stop_nm": "태평양약국", + "ycode": "37.593111", + "stop_no": "12820", + "xcode": "126.917828", + "stop_type": "마을버스", + "node_id": "111900135", + "nxtStn": "응암3동주민센터" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5898036255", + "stop_no": "12821", + "xcode": "126.9166596611", + "stop_type": "마을버스", + "node_id": "111900136", + "nxtStn": "와산교" + }, + { + "stop_nm": "풍림아그네스앞", + "ycode": "37.6030068196", + "stop_no": "12827", + "xcode": "126.9186054162", + "stop_type": "마을버스", + "node_id": "111900142", + "nxtStn": "역촌유치원입구" + }, + { + "stop_nm": "역촌유치원입구", + "ycode": "37.6041610114", + "stop_no": "12828", + "xcode": "126.9184603197", + "stop_type": "마을버스", + "node_id": "111900141", + "nxtStn": "새생명약국앞" + }, + { + "stop_nm": "새생명약국앞", + "ycode": "37.6060224907", + "stop_no": "12829", + "xcode": "126.9182215705", + "stop_type": "마을버스", + "node_id": "111900140", + "nxtStn": "하나은행역촌지점" + }, + { + "stop_nm": "새생명약국앞", + "ycode": "37.6059584123", + "stop_no": "12830", + "xcode": "126.9180755331", + "stop_type": "마을버스", + "node_id": "111900139", + "nxtStn": "역촌유치원입구" + }, + { + "stop_nm": "역촌유치원입구", + "ycode": "37.6041473815", + "stop_no": "12831", + "xcode": "126.9182961091", + "stop_type": "마을버스", + "node_id": "111900138", + "nxtStn": "풍림아그네스앞" + }, + { + "stop_nm": "풍림아그네스앞", + "ycode": "37.6029499433", + "stop_no": "12832", + "xcode": "126.9184491833", + "stop_type": "마을버스", + "node_id": "111900137", + "nxtStn": "우리들약국" + }, + { + "stop_nm": "대림e편한세상1단지", + "ycode": "37.612225", + "stop_no": "12833", + "xcode": "126.906143", + "stop_type": "마을버스", + "node_id": "111901113", + "nxtStn": "대림e편한세상2단지" + }, + { + "stop_nm": "대림e편한세상2단지", + "ycode": "37.6128333067", + "stop_no": "12834", + "xcode": "126.9066309054", + "stop_type": "마을버스", + "node_id": "111900161", + "nxtStn": "현대아파트입구" + }, + { + "stop_nm": "현대아파트입구", + "ycode": "37.6133377398", + "stop_no": "12835", + "xcode": "126.9064105253", + "stop_type": "마을버스", + "node_id": "111900160", + "nxtStn": "임창빌라" + }, + { + "stop_nm": "임창빌라", + "ycode": "37.613632", + "stop_no": "12836", + "xcode": "126.907981", + "stop_type": "마을버스", + "node_id": "111900159", + "nxtStn": "온누리약국" + }, + { + "stop_nm": "온누리약국", + "ycode": "37.6143112872", + "stop_no": "12837", + "xcode": "126.9091981199", + "stop_type": "마을버스", + "node_id": "111900158", + "nxtStn": "구산동사거리" + }, + { + "stop_nm": "G캐슬아파트", + "ycode": "37.6152059361", + "stop_no": "12838", + "xcode": "126.9150771747", + "stop_type": "마을버스", + "node_id": "111900157", + "nxtStn": "길마어린이공원" + }, + { + "stop_nm": "길마어린이공원", + "ycode": "37.6148011476", + "stop_no": "12839", + "xcode": "126.9160551992", + "stop_type": "마을버스", + "node_id": "111900156", + "nxtStn": "길천사우나" + }, + { + "stop_nm": "길천사우나", + "ycode": "37.6142901678", + "stop_no": "12840", + "xcode": "126.9172394904", + "stop_type": "마을버스", + "node_id": "111900155", + "nxtStn": "대림모터스" + }, + { + "stop_nm": "대림모터스", + "ycode": "37.6145006565", + "stop_no": "12841", + "xcode": "126.9180072593", + "stop_type": "마을버스", + "node_id": "111900154", + "nxtStn": "연신내역.물빛공원" + }, + { + "stop_nm": "연서시장", + "ycode": "37.619575", + "stop_no": "12842", + "xcode": "126.921011", + "stop_type": "마을버스", + "node_id": "111900153", + "nxtStn": "세명컴퓨터고등학교" + }, + { + "stop_nm": "청구성심병원", + "ycode": "37.6210299267", + "stop_no": "12843", + "xcode": "126.9193323152", + "stop_type": "마을버스", + "node_id": "111900152", + "nxtStn": "연신내역.물빛공원" + }, + { + "stop_nm": "아름다운교회", + "ycode": "37.616314", + "stop_no": "12844", + "xcode": "126.918541", + "stop_type": "마을버스", + "node_id": "111900151", + "nxtStn": "은평연세병원" + }, + { + "stop_nm": "길마어린이공원", + "ycode": "37.614929", + "stop_no": "12845", + "xcode": "126.91616", + "stop_type": "마을버스", + "node_id": "111900150", + "nxtStn": "G캐슬아파트" + }, + { + "stop_nm": "G캐슬아파트", + "ycode": "37.615245", + "stop_no": "12846", + "xcode": "126.915376", + "stop_type": "마을버스", + "node_id": "111900149", + "nxtStn": "한솔아파트입구" + }, + { + "stop_nm": "한솔아파트입구", + "ycode": "37.6158421464", + "stop_no": "12847", + "xcode": "126.9138949752", + "stop_type": "마을버스", + "node_id": "111900148", + "nxtStn": "구산동사거리" + }, + { + "stop_nm": "온누리약국", + "ycode": "37.6143933425", + "stop_no": "12848", + "xcode": "126.9092716485", + "stop_type": "마을버스", + "node_id": "111900147", + "nxtStn": "임창빌라" + }, + { + "stop_nm": "임창빌라", + "ycode": "37.6137483452", + "stop_no": "12849", + "xcode": "126.9083379258", + "stop_type": "마을버스", + "node_id": "111900146", + "nxtStn": "현대아파트입구" + }, + { + "stop_nm": "현대아파트입구", + "ycode": "37.6134594849", + "stop_no": "12850", + "xcode": "126.9065349731", + "stop_type": "마을버스", + "node_id": "111900145", + "nxtStn": "대림e편한세상2단지" + }, + { + "stop_nm": "대림e편한세상2단지", + "ycode": "37.6127764433", + "stop_no": "12851", + "xcode": "126.9065109082", + "stop_type": "마을버스", + "node_id": "111900144", + "nxtStn": "대림e편한세상1단지" + }, + { + "stop_nm": "대림e편한세상1단지", + "ycode": "37.612291", + "stop_no": "12852", + "xcode": "126.906101", + "stop_type": "마을버스", + "node_id": "111900143", + "nxtStn": "종점" + }, + { + "stop_nm": "와산교", + "ycode": "37.5888854535", + "stop_no": "12853", + "xcode": "126.9141942524", + "stop_type": "마을버스", + "node_id": "111900162", + "nxtStn": "새절역.숭실고입구" + }, + { + "stop_nm": "서울정형외과", + "ycode": "37.5952882098", + "stop_no": "12854", + "xcode": "126.9187565139", + "stop_type": "마을버스", + "node_id": "111900164", + "nxtStn": "신진과학기술고등학교" + }, + { + "stop_nm": "벧엘블래스빌", + "ycode": "37.5954033834", + "stop_no": "12855", + "xcode": "126.9185163078", + "stop_type": "마을버스", + "node_id": "111900163", + "nxtStn": "응암시장입구" + }, + { + "stop_nm": "숭실고등학교", + "ycode": "37.592443", + "stop_no": "12856", + "xcode": "126.903749", + "stop_type": "마을버스", + "node_id": "111901114", + "nxtStn": "숭실고등학교입구" + }, + { + "stop_nm": "숭실고등학교입구", + "ycode": "37.592284", + "stop_no": "12857", + "xcode": "126.905843", + "stop_type": "마을버스", + "node_id": "111901115", + "nxtStn": "서신초교.내를건너서숲으로도서관" + }, + { + "stop_nm": "서신초교.내를건너서숲으로도서관", + "ycode": "37.5916503772", + "stop_no": "12858", + "xcode": "126.9074274187", + "stop_type": "마을버스", + "node_id": "111901116", + "nxtStn": "삼거리.명진아파트" + }, + { + "stop_nm": "삼거리.명진아파트", + "ycode": "37.590419", + "stop_no": "12859", + "xcode": "126.910658", + "stop_type": "마을버스", + "node_id": "111901117", + "nxtStn": "안디옥교회.새절역" + }, + { + "stop_nm": "안디옥교회.새절역", + "ycode": "37.590379", + "stop_no": "12860", + "xcode": "126.91301", + "stop_type": "마을버스", + "node_id": "111901118", + "nxtStn": "신사초등학교.새절역" + }, + { + "stop_nm": "신사초등학교.새절역", + "ycode": "37.5931645919", + "stop_no": "12861", + "xcode": "126.9134793725", + "stop_type": "마을버스", + "node_id": "111901119", + "nxtStn": "신사동고개사거리" + }, + { + "stop_nm": "상신초등학교입구", + "ycode": "37.5967350848", + "stop_no": "12863", + "xcode": "126.9080526428", + "stop_type": "마을버스", + "node_id": "111901121", + "nxtStn": "행운슈퍼" + }, + { + "stop_nm": "행운슈퍼", + "ycode": "37.5958755995", + "stop_no": "12864", + "xcode": "126.9059418012", + "stop_type": "마을버스", + "node_id": "111901122", + "nxtStn": "상신초교후문.산새마을종점" + }, + { + "stop_nm": "상신초교후문.산새마을종점", + "ycode": "37.5968616877", + "stop_no": "12865", + "xcode": "126.9051264097", + "stop_type": "마을버스", + "node_id": "111901123", + "nxtStn": "행운슈퍼" + }, + { + "stop_nm": "행운슈퍼", + "ycode": "37.59591", + "stop_no": "12866", + "xcode": "126.905852", + "stop_type": "마을버스", + "node_id": "111901124", + "nxtStn": "상신초등학교입구" + }, + { + "stop_nm": "상신초등학교입구", + "ycode": "37.5966", + "stop_no": "12867", + "xcode": "126.90848", + "stop_type": "마을버스", + "node_id": "111901125", + "nxtStn": "신사동고개사거리" + }, + { + "stop_nm": "새절역", + "ycode": "37.5912354732", + "stop_no": "12869", + "xcode": "126.9134733954", + "stop_type": "마을버스", + "node_id": "111901127", + "nxtStn": "브라운스톤빌앞" + }, + { + "stop_nm": "삼거리.명진아파트", + "ycode": "37.590585901", + "stop_no": "12870", + "xcode": "126.9104975116", + "stop_type": "마을버스", + "node_id": "111901128", + "nxtStn": "서신초교.내를건너서숲으로도서관" + }, + { + "stop_nm": "서신초교.내를건너서숲으로도서관", + "ycode": "37.591809", + "stop_no": "12871", + "xcode": "126.907347", + "stop_type": "마을버스", + "node_id": "111901129", + "nxtStn": "숭실고등학교입구" + }, + { + "stop_nm": "숭실고등학교입구", + "ycode": "37.59242", + "stop_no": "12872", + "xcode": "126.905773", + "stop_type": "마을버스", + "node_id": "111901130", + "nxtStn": "종점" + }, + { + "stop_nm": "경남아너스빌.서북병원", + "ycode": "37.6048441969", + "stop_no": "12873", + "xcode": "126.9055112666", + "stop_type": "마을버스", + "node_id": "111901131", + "nxtStn": "역촌센트레빌" + }, + { + "stop_nm": "힐스테이트상가", + "ycode": "37.592643", + "stop_no": "12874", + "xcode": "126.923802", + "stop_type": "마을버스", + "node_id": "111901132", + "nxtStn": "시립은평병원.파크자이아파트" + }, + { + "stop_nm": "서부중앙교회", + "ycode": "37.589092", + "stop_no": "12875", + "xcode": "126.922394", + "stop_type": "마을버스", + "node_id": "111901133", + "nxtStn": "응암초등학교" + }, + { + "stop_nm": "응암초등학교", + "ycode": "37.5893764234", + "stop_no": "12876", + "xcode": "126.9212381918", + "stop_type": "마을버스", + "node_id": "111901134", + "nxtStn": "성암문구사거리" + }, + { + "stop_nm": "성암문구사거리", + "ycode": "37.58970267", + "stop_no": "12877", + "xcode": "126.9200405855", + "stop_type": "마을버스", + "node_id": "111901135", + "nxtStn": "은평문화예술정보학교" + }, + { + "stop_nm": "응암감리교회대림시장앞", + "ycode": "37.588801", + "stop_no": "12880", + "xcode": "126.918663", + "stop_type": "마을버스", + "node_id": "111901138", + "nxtStn": "응암동성당" + }, + { + "stop_nm": "응암동성당", + "ycode": "37.589040611", + "stop_no": "12881", + "xcode": "126.9195323069", + "stop_type": "마을버스", + "node_id": "111901139", + "nxtStn": "성암문구사거리" + }, + { + "stop_nm": "성암문구사거리", + "ycode": "37.5895742757", + "stop_no": "12882", + "xcode": "126.9200061957", + "stop_type": "마을버스", + "node_id": "111901140", + "nxtStn": "응암초등학교" + }, + { + "stop_nm": "응암초등학교", + "ycode": "37.589164", + "stop_no": "12883", + "xcode": "126.921364", + "stop_type": "마을버스", + "node_id": "111901141", + "nxtStn": "백련산힐스테이트2차앞" + }, + { + "stop_nm": "백련산힐스테이트2차앞", + "ycode": "37.58935", + "stop_no": "12884", + "xcode": "126.922784", + "stop_type": "마을버스", + "node_id": "111901142", + "nxtStn": "백련산힐스테이트2차" + }, + { + "stop_nm": "백련산힐스테이트2차상가앞", + "ycode": "37.591972", + "stop_no": "12885", + "xcode": "126.923008", + "stop_type": "마을버스", + "node_id": "111901143", + "nxtStn": "힐스테이트2단지후문앞" + }, + { + "stop_nm": "은평세무서음식문화거리", + "ycode": "37.6020443537", + "stop_no": "12886", + "xcode": "126.9251390628", + "stop_type": "마을버스", + "node_id": "111901144", + "nxtStn": "은평세무서" + }, + { + "stop_nm": "은평여성인력개발센터", + "ycode": "37.607211", + "stop_no": "12887", + "xcode": "126.932141", + "stop_type": "마을버스", + "node_id": "111901145", + "nxtStn": "서울혁신파크" + }, + { + "stop_nm": "대조시장.NC백화점", + "ycode": "37.6095175554", + "stop_no": "12888", + "xcode": "126.9278360602", + "stop_type": "마을버스", + "node_id": "111901146", + "nxtStn": "불광역9번출구" + }, + { + "stop_nm": "행정연구원건너편", + "ycode": "37.609607", + "stop_no": "12889", + "xcode": "126.936464", + "stop_type": "마을버스", + "node_id": "111001126", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "파크자이105동앞", + "ycode": "37.591968", + "stop_no": "12890", + "xcode": "126.92292", + "stop_type": "마을버스", + "node_id": "111901149", + "nxtStn": "백련산힐스테이트4차" + }, + { + "stop_nm": "브라운스톤빌앞", + "ycode": "37.5905437355", + "stop_no": "12891", + "xcode": "126.9124577519", + "stop_type": "마을버스", + "node_id": "111901152", + "nxtStn": "삼거리.명진아파트" + }, + { + "stop_nm": "구파발(가상)", + "ycode": "37.6348480405", + "stop_no": "12900", + "xcode": "126.9190889597", + "stop_type": "가상정류장", + "node_id": "111001130", + "nxtStn": "구파발역2번출구" + }, + { + "stop_nm": "6번지입구", + "ycode": "37.6268686558", + "stop_no": "12991", + "xcode": "126.9190319477", + "stop_type": "마을버스", + "node_id": "111900134", + "nxtStn": "금원빌라" + }, + { + "stop_nm": "북가좌동삼거리", + "ycode": "37.5754463835", + "stop_no": "13001", + "xcode": "126.9045265135", + "stop_type": "중앙차로", + "node_id": "112000001", + "nxtStn": "DMC래미안e.편한세상요진아파트" + }, + { + "stop_nm": "북가좌동삼거리", + "ycode": "37.575143", + "stop_no": "13002", + "xcode": "126.905143", + "stop_type": "중앙차로", + "node_id": "112000002", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "DMC래미안e.편한세상요진아파트", + "ycode": "37.5716775164", + "stop_no": "13003", + "xcode": "126.9096099146", + "stop_type": "중앙차로", + "node_id": "112000003", + "nxtStn": "모래내시장.가좌역" + }, + { + "stop_nm": "DMC래미안e.편한세상요진아파트", + "ycode": "37.571577", + "stop_no": "13004", + "xcode": "126.910313", + "stop_type": "중앙차로", + "node_id": "112000004", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "모래내시장.가좌역", + "ycode": "37.5690774104", + "stop_no": "13005", + "xcode": "126.9150627853", + "stop_type": "중앙차로", + "node_id": "112000005", + "nxtStn": "연희삼거리" + }, + { + "stop_nm": "모래내시장.가좌역", + "ycode": "37.569862", + "stop_no": "13006", + "xcode": "126.913786", + "stop_type": "중앙차로", + "node_id": "112000006", + "nxtStn": "DMC래미안e.편한세상요진아파트" + }, + { + "stop_nm": "사천교", + "ycode": "37.567558", + "stop_no": "13007", + "xcode": "126.918153", + "stop_type": "중앙차로", + "node_id": "112000007", + "nxtStn": "연희104고지앞.구성산회관" + }, + { + "stop_nm": "연희104고지앞.구성산회관", + "ycode": "37.566285", + "stop_no": "13008", + "xcode": "126.925081", + "stop_type": "중앙차로", + "node_id": "112000008", + "nxtStn": "연세대앞" + }, + { + "stop_nm": "연희104고지앞.구성산회관", + "ycode": "37.5663570321", + "stop_no": "13009", + "xcode": "126.9257860764", + "stop_type": "중앙차로", + "node_id": "112000009", + "nxtStn": "월드컵경기장입구" + }, + { + "stop_nm": "서대문우체국", + "ycode": "37.561955", + "stop_no": "13010", + "xcode": "126.931992", + "stop_type": "중앙차로", + "node_id": "112000010", + "nxtStn": "연세대앞" + }, + { + "stop_nm": "서대문우체국", + "ycode": "37.5625326219", + "stop_no": "13011", + "xcode": "126.9314621185", + "stop_type": "중앙차로", + "node_id": "112000011", + "nxtStn": "연희104고지앞.구성산회관" + }, + { + "stop_nm": "연세대앞", + "ycode": "37.559959", + "stop_no": "13012", + "xcode": "126.935341", + "stop_type": "중앙차로", + "node_id": "112000012", + "nxtStn": "이대후문" + }, + { + "stop_nm": "연세대앞", + "ycode": "37.5601569117", + "stop_no": "13013", + "xcode": "126.9354996016", + "stop_type": "중앙차로", + "node_id": "112000013", + "nxtStn": "연희104고지앞.구성산회관" + }, + { + "stop_nm": "세브란스병원앞", + "ycode": "37.5599674551", + "stop_no": "13014", + "xcode": "126.9384506818", + "stop_type": "중앙차로", + "node_id": "112000014", + "nxtStn": "이대후문" + }, + { + "stop_nm": "세브란스병원앞", + "ycode": "37.5601326008", + "stop_no": "13015", + "xcode": "126.9389236898", + "stop_type": "중앙차로", + "node_id": "112000015", + "nxtStn": "연세대앞" + }, + { + "stop_nm": "이대후문", + "ycode": "37.5626001751", + "stop_no": "13016", + "xcode": "126.9433012302", + "stop_type": "중앙차로", + "node_id": "112000016", + "nxtStn": "경복궁역" + }, + { + "stop_nm": "이대후문", + "ycode": "37.5630635031", + "stop_no": "13017", + "xcode": "126.943648393", + "stop_type": "중앙차로", + "node_id": "112000017", + "nxtStn": "연세대앞" + }, + { + "stop_nm": "동교동삼거리", + "ycode": "37.5577646946", + "stop_no": "13019", + "xcode": "126.92951964", + "stop_type": "중앙차로", + "node_id": "113000415", + "nxtStn": "연희동대우아파트" + }, + { + "stop_nm": "신촌오거리.현대백화점", + "ycode": "37.5559833987", + "stop_no": "13021", + "xcode": "126.9345037666", + "stop_type": "중앙차로", + "node_id": "113000416", + "nxtStn": "홍대입구역" + }, + { + "stop_nm": "신촌오거리.2호선신촌역", + "ycode": "37.555731", + "stop_no": "13023", + "xcode": "126.938693", + "stop_type": "중앙차로", + "node_id": "113000417", + "nxtStn": "신촌오거리.현대백화점" + }, + { + "stop_nm": "이대역", + "ycode": "37.5568755655", + "stop_no": "13025", + "xcode": "126.9472705221", + "stop_type": "중앙차로", + "node_id": "113000411", + "nxtStn": "신촌오거리.2호선신촌역" + }, + { + "stop_nm": "산골고개", + "ycode": "37.5953018189", + "stop_no": "13026", + "xcode": "126.9399957025", + "stop_type": "중앙차로", + "node_id": "112000405", + "nxtStn": "홍제역.서대문세무서" + }, + { + "stop_nm": "산골고개", + "ycode": "37.5949646378", + "stop_no": "13027", + "xcode": "126.9404876113", + "stop_type": "중앙차로", + "node_id": "112000406", + "nxtStn": "녹번역" + }, + { + "stop_nm": "홍제역.서대문세무서", + "ycode": "37.5884908289", + "stop_no": "13028", + "xcode": "126.944365257", + "stop_type": "중앙차로", + "node_id": "112000407", + "nxtStn": "홍제삼거리.인왕산한신휴플러스" + }, + { + "stop_nm": "홍제역.서대문세무서", + "ycode": "37.5878433932", + "stop_no": "13029", + "xcode": "126.9453225684", + "stop_type": "중앙차로", + "node_id": "112000408", + "nxtStn": "그랜드힐튼호텔" + }, + { + "stop_nm": "홍제삼거리.인왕산한신휴플러스", + "ycode": "37.585207045", + "stop_no": "13030", + "xcode": "126.9478427379", + "stop_type": "중앙차로", + "node_id": "112000416", + "nxtStn": "무악재역" + }, + { + "stop_nm": "무악재역", + "ycode": "37.5831543142", + "stop_no": "13031", + "xcode": "126.9498097936", + "stop_type": "중앙차로", + "node_id": "112000398", + "nxtStn": "안산초등학교" + }, + { + "stop_nm": "무악재역", + "ycode": "37.5818652109", + "stop_no": "13032", + "xcode": "126.9506553191", + "stop_type": "중앙차로", + "node_id": "112000400", + "nxtStn": "인왕산.홍제원아파트" + }, + { + "stop_nm": "안산초등학교", + "ycode": "37.580686", + "stop_no": "13033", + "xcode": "126.951572", + "stop_type": "중앙차로", + "node_id": "112000404", + "nxtStn": "독립문역.한성과학고" + }, + { + "stop_nm": "독립문역.한성과학고", + "ycode": "37.5746889121", + "stop_no": "13034", + "xcode": "126.9575774512", + "stop_type": "중앙차로", + "node_id": "112000402", + "nxtStn": "영천시장" + }, + { + "stop_nm": "독립문역.한성과학고", + "ycode": "37.575642", + "stop_no": "13035", + "xcode": "126.95656", + "stop_type": "중앙차로", + "node_id": "112000401", + "nxtStn": "무악재역" + }, + { + "stop_nm": "영천시장", + "ycode": "37.5699391328", + "stop_no": "13036", + "xcode": "126.9625329584", + "stop_type": "중앙차로", + "node_id": "100000363", + "nxtStn": "바비엥스위트" + }, + { + "stop_nm": "영천시장", + "ycode": "37.569515943", + "stop_no": "13037", + "xcode": "126.9631796651", + "stop_type": "중앙차로", + "node_id": "100000362", + "nxtStn": "독립문역.한성과학고" + }, + { + "stop_nm": "서대문역", + "ycode": "37.5664745324", + "stop_no": "13038", + "xcode": "126.9658300015", + "stop_type": "중앙차로", + "node_id": "112000403", + "nxtStn": "경찰청.동북아역사재단" + }, + { + "stop_nm": "경찰청.동북아역사재단", + "ycode": "37.5624764161", + "stop_no": "13039", + "xcode": "126.9692243077", + "stop_type": "중앙차로", + "node_id": "112000399", + "nxtStn": "프레이저플레이스남대문" + }, + { + "stop_nm": "인왕산.홍제원아파트", + "ycode": "37.5843965104", + "stop_no": "13040", + "xcode": "126.9488623648", + "stop_type": "중앙차로", + "node_id": "112000409", + "nxtStn": "홍제역.서대문세무서" + }, + { + "stop_nm": "웨딩타운", + "ycode": "37.55724", + "stop_no": "13042", + "xcode": "126.952552", + "stop_type": "중앙차로", + "node_id": "113000475", + "nxtStn": "이대역" + }, + { + "stop_nm": "아현역", + "ycode": "37.557396", + "stop_no": "13044", + "xcode": "126.956889", + "stop_type": "중앙차로", + "node_id": "113000478", + "nxtStn": "웨딩타운" + }, + { + "stop_nm": "충정로역", + "ycode": "37.560855", + "stop_no": "13045", + "xcode": "126.963315", + "stop_type": "중앙차로", + "node_id": "112000430", + "nxtStn": "서대문역사거리" + }, + { + "stop_nm": "충정로역", + "ycode": "37.5598429758", + "stop_no": "13046", + "xcode": "126.9624710247", + "stop_type": "중앙차로", + "node_id": "112000429", + "nxtStn": "아현역" + }, + { + "stop_nm": "서대문역사거리", + "ycode": "37.565579", + "stop_no": "13047", + "xcode": "126.966565", + "stop_type": "중앙차로", + "node_id": "101000304", + "nxtStn": "서울역사박물관.경희궁앞" + }, + { + "stop_nm": "모래내시장.가좌역", + "ycode": "37.569921", + "stop_no": "13107", + "xcode": "126.913963", + "stop_type": "일반차로", + "node_id": "112000024", + "nxtStn": "삼성래미안2차아파트" + }, + { + "stop_nm": "사천교", + "ycode": "37.5680820886", + "stop_no": "13109", + "xcode": "126.9175934441", + "stop_type": "일반차로", + "node_id": "112000026", + "nxtStn": "모래내시장.가좌역" + }, + { + "stop_nm": "연희104고지앞.구성산회관", + "ycode": "37.566297", + "stop_no": "13110", + "xcode": "126.92421", + "stop_type": "일반차로", + "node_id": "112000027", + "nxtStn": "연남동" + }, + { + "stop_nm": "연희104고지앞.구성산회관", + "ycode": "37.56655", + "stop_no": "13111", + "xcode": "126.924998", + "stop_type": "일반차로", + "node_id": "112000028", + "nxtStn": "사천교" + }, + { + "stop_nm": "서대문우체국", + "ycode": "37.56323", + "stop_no": "13112", + "xcode": "126.930445", + "stop_type": "일반차로", + "node_id": "112000029", + "nxtStn": "연세대학교앞" + }, + { + "stop_nm": "서대문우체국", + "ycode": "37.5630010161", + "stop_no": "13113", + "xcode": "126.9311628502", + "stop_type": "일반차로", + "node_id": "112000030", + "nxtStn": "연희교차로" + }, + { + "stop_nm": "연세대학교앞", + "ycode": "37.55982", + "stop_no": "13114", + "xcode": "126.935305", + "stop_type": "일반차로", + "node_id": "112000031", + "nxtStn": "세브란스병원" + }, + { + "stop_nm": "연대앞", + "ycode": "37.560453", + "stop_no": "13115", + "xcode": "126.934836", + "stop_type": "일반차로", + "node_id": "112000032", + "nxtStn": "서대문우체국" + }, + { + "stop_nm": "세브란스병원", + "ycode": "37.5598680153", + "stop_no": "13116", + "xcode": "126.9378406593", + "stop_type": "일반차로", + "node_id": "112000033", + "nxtStn": "신촌기차역" + }, + { + "stop_nm": "세브란스병원", + "ycode": "37.560268", + "stop_no": "13117", + "xcode": "126.939242", + "stop_type": "일반차로", + "node_id": "112000034", + "nxtStn": "연대앞" + }, + { + "stop_nm": "이대부중", + "ycode": "37.5622161608", + "stop_no": "13118", + "xcode": "126.9429924976", + "stop_type": "일반차로", + "node_id": "112000035", + "nxtStn": "이대부고" + }, + { + "stop_nm": "이대부중", + "ycode": "37.5636440514", + "stop_no": "13119", + "xcode": "126.9441630049", + "stop_type": "일반차로", + "node_id": "112000036", + "nxtStn": "세브란스병원앞" + }, + { + "stop_nm": "이대부고", + "ycode": "37.565531", + "stop_no": "13120", + "xcode": "126.946423", + "stop_type": "일반차로", + "node_id": "112000037", + "nxtStn": "사직단" + }, + { + "stop_nm": "이대부고", + "ycode": "37.5663177634", + "stop_no": "13121", + "xcode": "126.9464759832", + "stop_type": "일반차로", + "node_id": "112000038", + "nxtStn": "이대부중" + }, + { + "stop_nm": "홍은동동부센트레빌", + "ycode": "37.596757", + "stop_no": "13122", + "xcode": "126.938705", + "stop_type": "일반차로", + "node_id": "112000039", + "nxtStn": "산골고개" + }, + { + "stop_nm": "산골고개", + "ycode": "37.59506873", + "stop_no": "13123", + "xcode": "126.9405745726", + "stop_type": "가로변시간", + "node_id": "112000040", + "nxtStn": "녹번동대림JR아파트앞" + }, + { + "stop_nm": "홍은사거리.북한산더샵아파트앞", + "ycode": "37.592378", + "stop_no": "13124", + "xcode": "126.941265", + "stop_type": "일반차로", + "node_id": "112000041", + "nxtStn": "산골고개" + }, + { + "stop_nm": "홍제우체국", + "ycode": "37.586895", + "stop_no": "13125", + "xcode": "126.946047", + "stop_type": "가로변시간", + "node_id": "112000042", + "nxtStn": "고은초등학교.홍제센트럴아이파크" + }, + { + "stop_nm": "영천시장", + "ycode": "37.57022", + "stop_no": "13133", + "xcode": "126.962027", + "stop_type": "일반차로", + "node_id": "112000050", + "nxtStn": "영천시장입구" + }, + { + "stop_nm": "금화초등학교.서울시교육청", + "ycode": "37.5679014179", + "stop_no": "13134", + "xcode": "126.9643259996", + "stop_type": "일반차로", + "node_id": "112000051", + "nxtStn": "미동초등학교" + }, + { + "stop_nm": "충정로역2호선", + "ycode": "37.5596112723", + "stop_no": "13137", + "xcode": "126.9640265994", + "stop_type": "일반차로", + "node_id": "112000054", + "nxtStn": "아현역" + }, + { + "stop_nm": "이대역", + "ycode": "37.556982", + "stop_no": "13140", + "xcode": "126.946575", + "stop_type": "일반차로", + "node_id": "112000057", + "nxtStn": "신촌기차역입구" + }, + { + "stop_nm": "신촌기차역입구", + "ycode": "37.5568082054", + "stop_no": "13141", + "xcode": "126.9438432587", + "stop_type": "가로변전일", + "node_id": "112000058", + "nxtStn": "신촌아트레온" + }, + { + "stop_nm": "신촌역2호선", + "ycode": "37.556188", + "stop_no": "13142", + "xcode": "126.93964", + "stop_type": "가로변전일", + "node_id": "112000059", + "nxtStn": "신촌로터리" + }, + { + "stop_nm": "신촌아트레온", + "ycode": "37.5565096313", + "stop_no": "13143", + "xcode": "126.9407880306", + "stop_type": "일반차로", + "node_id": "112000433", + "nxtStn": "연세로.문학의거리" + }, + { + "stop_nm": "동교동삼거리연희동방면", + "ycode": "37.5586582575", + "stop_no": "13144", + "xcode": "126.9274994875", + "stop_type": "가로변전일", + "node_id": "112000061", + "nxtStn": "연희동대우아파트" + }, + { + "stop_nm": "연세로.명물거리", + "ycode": "37.558149", + "stop_no": "13145", + "xcode": "126.936975", + "stop_type": "일반차로", + "node_id": "112000062", + "nxtStn": "연대앞.세브란스병원" + }, + { + "stop_nm": "연세로.스타광장", + "ycode": "37.55641", + "stop_no": "13146", + "xcode": "126.936767", + "stop_type": "일반차로", + "node_id": "112000063", + "nxtStn": "현대백화점" + }, + { + "stop_nm": "연희동대우아파트", + "ycode": "37.5626233467", + "stop_no": "13147", + "xcode": "126.9279552211", + "stop_type": "일반차로", + "node_id": "112000064", + "nxtStn": "연희교차로" + }, + { + "stop_nm": "연희교차로", + "ycode": "37.5657", + "stop_no": "13148", + "xcode": "126.930163", + "stop_type": "일반차로", + "node_id": "112000065", + "nxtStn": "연희3거리" + }, + { + "stop_nm": "연희교차로", + "ycode": "37.565947", + "stop_no": "13149", + "xcode": "126.930035", + "stop_type": "일반차로", + "node_id": "112000066", + "nxtStn": "연남동" + }, + { + "stop_nm": "연희3거리", + "ycode": "37.5678664551", + "stop_no": "13150", + "xcode": "126.9319224998", + "stop_type": "일반차로", + "node_id": "112000067", + "nxtStn": "한성화교중고교.서대문소방서" + }, + { + "stop_nm": "연희3거리", + "ycode": "37.567933", + "stop_no": "13151", + "xcode": "126.93161", + "stop_type": "일반차로", + "node_id": "112000068", + "nxtStn": "연희브라운스톤" + }, + { + "stop_nm": "한성화교중고교.서대문소방서", + "ycode": "37.572300887", + "stop_no": "13152", + "xcode": "126.9354132782", + "stop_type": "일반차로", + "node_id": "112000069", + "nxtStn": "서대문자연사박물관입구" + }, + { + "stop_nm": "한성화교중고교.서대문소방서", + "ycode": "37.5724773892", + "stop_no": "13153", + "xcode": "126.935209346", + "stop_type": "일반차로", + "node_id": "112000070", + "nxtStn": "연희초등학교" + }, + { + "stop_nm": "서대문자연사박물관입구", + "ycode": "37.575177", + "stop_no": "13154", + "xcode": "126.935406", + "stop_type": "일반차로", + "node_id": "112000071", + "nxtStn": "서대문구청.보건소.구의회" + }, + { + "stop_nm": "서대문자연사박물관입구", + "ycode": "37.575229", + "stop_no": "13155", + "xcode": "126.935243", + "stop_type": "일반차로", + "node_id": "112000072", + "nxtStn": "한성화교중고교.서대문소방서" + }, + { + "stop_nm": "서대문구청.보건소.구의회", + "ycode": "37.5782448388", + "stop_no": "13156", + "xcode": "126.9360659508", + "stop_type": "일반차로", + "node_id": "112000073", + "nxtStn": "하나로마트.동신병원" + }, + { + "stop_nm": "서대문구청.서대문구의회", + "ycode": "37.5786159669", + "stop_no": "13157", + "xcode": "126.9358425895", + "stop_type": "일반차로", + "node_id": "112000074", + "nxtStn": "서대문자연사박물관입구" + }, + { + "stop_nm": "동신병원", + "ycode": "37.58083", + "stop_no": "13158", + "xcode": "126.93601", + "stop_type": "일반차로", + "node_id": "112000075", + "nxtStn": "서대문구청.서대문구의회" + }, + { + "stop_nm": "서대문구보건소별관", + "ycode": "37.582662", + "stop_no": "13159", + "xcode": "126.936284", + "stop_type": "일반차로", + "node_id": "112000076", + "nxtStn": "정원여중" + }, + { + "stop_nm": "정원여중", + "ycode": "37.5862495334", + "stop_no": "13160", + "xcode": "126.9349879316", + "stop_type": "일반차로", + "node_id": "112000077", + "nxtStn": "스위스그랜드호텔.현대아파트" + }, + { + "stop_nm": "정원여중.스위스그랜드호텔", + "ycode": "37.587662", + "stop_no": "13161", + "xcode": "126.93526", + "stop_type": "일반차로", + "node_id": "112000078", + "nxtStn": "동신병원" + }, + { + "stop_nm": "홍은현대아파트.스위스그랜드호텔", + "ycode": "37.588639", + "stop_no": "13162", + "xcode": "126.936427", + "stop_type": "일반차로", + "node_id": "112000079", + "nxtStn": "유진상가" + }, + { + "stop_nm": "홍은현대아파트", + "ycode": "37.590057", + "stop_no": "13163", + "xcode": "126.938345", + "stop_type": "일반차로", + "node_id": "112000080", + "nxtStn": "정원여중.스위스그랜드호텔" + }, + { + "stop_nm": "유진상가", + "ycode": "37.591753", + "stop_no": "13164", + "xcode": "126.942865", + "stop_type": "일반차로", + "node_id": "112000081", + "nxtStn": "문화촌현대아파트" + }, + { + "stop_nm": "유진상가", + "ycode": "37.59218", + "stop_no": "13165", + "xcode": "126.943133", + "stop_type": "일반차로", + "node_id": "112000082", + "nxtStn": "홍은현대아파트" + }, + { + "stop_nm": "문화촌현대아파트", + "ycode": "37.59225", + "stop_no": "13166", + "xcode": "126.946542", + "stop_type": "일반차로", + "node_id": "112000083", + "nxtStn": "서울여자간호대학교.홍은초등학교" + }, + { + "stop_nm": "문화촌현대아파트", + "ycode": "37.592652", + "stop_no": "13167", + "xcode": "126.946808", + "stop_type": "일반차로", + "node_id": "112000084", + "nxtStn": "유진상가다리앞" + }, + { + "stop_nm": "서울여자간호대학교.홍은초등학교", + "ycode": "37.596107216", + "stop_no": "13168", + "xcode": "126.9492224035", + "stop_type": "일반차로", + "node_id": "112000085", + "nxtStn": "유원하나아파트" + }, + { + "stop_nm": "서울여자간호대학교.홍은초등학교", + "ycode": "37.595642031", + "stop_no": "13169", + "xcode": "126.948705185", + "stop_type": "일반차로", + "node_id": "112000086", + "nxtStn": "문화촌현대아파트" + }, + { + "stop_nm": "유원하나아파트", + "ycode": "37.595884281", + "stop_no": "13170", + "xcode": "126.9526777041", + "stop_type": "일반차로", + "node_id": "112000087", + "nxtStn": "홍지문.옥천암" + }, + { + "stop_nm": "유원하나아파트", + "ycode": "37.59574", + "stop_no": "13171", + "xcode": "126.952061", + "stop_type": "일반차로", + "node_id": "112000088", + "nxtStn": "홍은초등학교" + }, + { + "stop_nm": "홍지문.옥천암", + "ycode": "37.5965724145", + "stop_no": "13172", + "xcode": "126.9565922341", + "stop_type": "일반차로", + "node_id": "112000089", + "nxtStn": "세검정.상명대" + }, + { + "stop_nm": "홍지문", + "ycode": "37.59691", + "stop_no": "13173", + "xcode": "126.956263", + "stop_type": "일반차로", + "node_id": "112000090", + "nxtStn": "유원하나아파트" + }, + { + "stop_nm": "북가좌2동주민센터", + "ycode": "37.579833", + "stop_no": "13174", + "xcode": "126.911478", + "stop_type": "일반차로", + "node_id": "112000091", + "nxtStn": "KT가좌지사" + }, + { + "stop_nm": "북가좌2동주민센터", + "ycode": "37.5802996548", + "stop_no": "13175", + "xcode": "126.9114608746", + "stop_type": "일반차로", + "node_id": "112000092", + "nxtStn": "DMC래미안e.편한세상2.4단지" + }, + { + "stop_nm": "KT가좌지사", + "ycode": "37.58204", + "stop_no": "13176", + "xcode": "126.913138", + "stop_type": "일반차로", + "node_id": "112000093", + "nxtStn": "동도하이츠아파트" + }, + { + "stop_nm": "KT가좌지사", + "ycode": "37.582861", + "stop_no": "13177", + "xcode": "126.913399", + "stop_type": "일반차로", + "node_id": "112000094", + "nxtStn": "북가좌2동주민센터" + }, + { + "stop_nm": "동도하이츠아파트", + "ycode": "37.5846770601", + "stop_no": "13178", + "xcode": "126.9150178885", + "stop_type": "일반차로", + "node_id": "112000095", + "nxtStn": "대림시장" + }, + { + "stop_nm": "동도하이츠아파트", + "ycode": "37.5849012516", + "stop_no": "13179", + "xcode": "126.9147685281", + "stop_type": "일반차로", + "node_id": "112000096", + "nxtStn": "KT가좌지사" + }, + { + "stop_nm": "DMC.파크뷰자이", + "ycode": "37.573861", + "stop_no": "13180", + "xcode": "126.916234", + "stop_type": "일반차로", + "node_id": "112000097", + "nxtStn": "모래내삼거리" + }, + { + "stop_nm": "삼성래미안2차아파트", + "ycode": "37.57125", + "stop_no": "13181", + "xcode": "126.913812", + "stop_type": "일반차로", + "node_id": "112000098", + "nxtStn": "DMC.파크뷰자이" + }, + { + "stop_nm": "모래내삼거리", + "ycode": "37.570778", + "stop_no": "13182", + "xcode": "126.913295", + "stop_type": "일반차로", + "node_id": "112000099", + "nxtStn": "모래내시장.가좌역" + }, + { + "stop_nm": "DMC래미안e.편한세상2.4단지", + "ycode": "37.576740896", + "stop_no": "13183", + "xcode": "126.9109918398", + "stop_type": "일반차로", + "node_id": "112000100", + "nxtStn": "북가좌삼호.DMC아이파크아파트" + }, + { + "stop_nm": "모래내우체국.증가교회", + "ycode": "37.576322", + "stop_no": "13184", + "xcode": "126.911825", + "stop_type": "일반차로", + "node_id": "112000101", + "nxtStn": "북가좌초교사거리" + }, + { + "stop_nm": "북가좌삼호.DMC아이파크아파트", + "ycode": "37.5752684365", + "stop_no": "13185", + "xcode": "126.9133099754", + "stop_type": "일반차로", + "node_id": "112000102", + "nxtStn": "DMC파크뷰자이.별동상가" + }, + { + "stop_nm": "북가좌삼호.DMC아이파크아파트", + "ycode": "37.57553", + "stop_no": "13186", + "xcode": "126.913058", + "stop_type": "일반차로", + "node_id": "112000103", + "nxtStn": "모래내우체국.증가교회" + }, + { + "stop_nm": "DMC센트레빌아파트", + "ycode": "37.575307", + "stop_no": "13188", + "xcode": "126.915772", + "stop_type": "일반차로", + "node_id": "112000105", + "nxtStn": "북가좌삼호.DMC아이파크아파트" + }, + { + "stop_nm": "DMC파크뷰자이.별동상가", + "ycode": "37.575188", + "stop_no": "13189", + "xcode": "126.916089", + "stop_type": "일반차로", + "node_id": "112000106", + "nxtStn": "DMC.파크뷰자이" + }, + { + "stop_nm": "래미안루센티아.DMC쌍용", + "ycode": "37.575566", + "stop_no": "13190", + "xcode": "126.918536", + "stop_type": "일반차로", + "node_id": "112000107", + "nxtStn": "DMC.파크뷰자이" + }, + { + "stop_nm": "명지대사거리", + "ycode": "37.577378", + "stop_no": "13191", + "xcode": "126.920981", + "stop_type": "일반차로", + "node_id": "112000108", + "nxtStn": "명지대사거리.우리은행" + }, + { + "stop_nm": "DMC에코자이아파트", + "ycode": "37.5764335942", + "stop_no": "13192", + "xcode": "126.9195564567", + "stop_type": "일반차로", + "node_id": "112000109", + "nxtStn": "래미안루센티아.DMC쌍용" + }, + { + "stop_nm": "DMC센트럴아이파크아파트", + "ycode": "37.578217", + "stop_no": "13193", + "xcode": "126.921853", + "stop_type": "일반차로", + "node_id": "112000110", + "nxtStn": "DMC에코자이아파트" + }, + { + "stop_nm": "명지대", + "ycode": "37.5791366844", + "stop_no": "13194", + "xcode": "126.9235485995", + "stop_type": "일반차로", + "node_id": "112000111", + "nxtStn": "명지대삼거리" + }, + { + "stop_nm": "명지대", + "ycode": "37.579882", + "stop_no": "13195", + "xcode": "126.924292", + "stop_type": "일반차로", + "node_id": "112000112", + "nxtStn": "DMC센트럴아이파크아파트" + }, + { + "stop_nm": "명지대삼거리", + "ycode": "37.580957", + "stop_no": "13196", + "xcode": "126.926105", + "stop_type": "일반차로", + "node_id": "112000113", + "nxtStn": "명지중고등학교" + }, + { + "stop_nm": "명지대삼거리", + "ycode": "37.5812704533", + "stop_no": "13197", + "xcode": "126.926363438", + "stop_type": "일반차로", + "node_id": "112000114", + "nxtStn": "명지대" + }, + { + "stop_nm": "고은초등학교.홍제센트럴아이파크", + "ycode": "37.5852299437", + "stop_no": "13198", + "xcode": "126.9446994488", + "stop_type": "일반차로", + "node_id": "112000115", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "신연중학교서대문도서관", + "ycode": "37.583957533", + "stop_no": "13199", + "xcode": "126.9408336411", + "stop_type": "일반차로", + "node_id": "112000116", + "nxtStn": "서대문구보건소별관" + }, + { + "stop_nm": "백련교", + "ycode": "37.5829006647", + "stop_no": "13200", + "xcode": "126.9375486367", + "stop_type": "일반차로", + "node_id": "112000117", + "nxtStn": "가산빌라" + }, + { + "stop_nm": "서대문문화체육회관입구", + "ycode": "37.5814081994", + "stop_no": "13201", + "xcode": "126.9353906921", + "stop_type": "일반차로", + "node_id": "112000118", + "nxtStn": "홍연2교두산아파트앞" + }, + { + "stop_nm": "홍연2교두산아파트앞", + "ycode": "37.5784212336", + "stop_no": "13202", + "xcode": "126.9308803247", + "stop_type": "일반차로", + "node_id": "112000119", + "nxtStn": "홍남교" + }, + { + "stop_nm": "홍남교", + "ycode": "37.576642", + "stop_no": "13203", + "xcode": "126.927497", + "stop_type": "일반차로", + "node_id": "112000120", + "nxtStn": "백련시장" + }, + { + "stop_nm": "연가교", + "ycode": "37.5725614324", + "stop_no": "13204", + "xcode": "126.922182071", + "stop_type": "일반차로", + "node_id": "112000121", + "nxtStn": "남가좌현대아파트" + }, + { + "stop_nm": "연희파크푸르지오앞", + "ycode": "37.5757480189", + "stop_no": "13205", + "xcode": "126.9280833227", + "stop_type": "일반차로", + "node_id": "112000122", + "nxtStn": "홍연시장" + }, + { + "stop_nm": "홍연시장", + "ycode": "37.577128", + "stop_no": "13206", + "xcode": "126.930688", + "stop_type": "일반차로", + "node_id": "112000123", + "nxtStn": "연희홍연아파트" + }, + { + "stop_nm": "연희홍연아파트", + "ycode": "37.577997674", + "stop_no": "13207", + "xcode": "126.9323548321", + "stop_type": "일반차로", + "node_id": "112000124", + "nxtStn": "서대문구청" + }, + { + "stop_nm": "서대문구청", + "ycode": "37.5790506621", + "stop_no": "13208", + "xcode": "126.934871913", + "stop_type": "일반차로", + "node_id": "112000125", + "nxtStn": "서대문구청.서대문구의회" + }, + { + "stop_nm": "남가좌현대아파트", + "ycode": "37.5749175727", + "stop_no": "13209", + "xcode": "126.9218592217", + "stop_type": "일반차로", + "node_id": "112000126", + "nxtStn": "명지대사거리" + }, + { + "stop_nm": "신촌기차역", + "ycode": "37.558777", + "stop_no": "13210", + "xcode": "126.94245", + "stop_type": "일반차로", + "node_id": "112000127", + "nxtStn": "신촌역2호선" + }, + { + "stop_nm": "신촌기차역", + "ycode": "37.558355", + "stop_no": "13211", + "xcode": "126.94293", + "stop_type": "일반차로", + "node_id": "112000128", + "nxtStn": "이대부중" + }, + { + "stop_nm": "증산교앞", + "ycode": "37.5780399456", + "stop_no": "13212", + "xcode": "126.9048028539", + "stop_type": "일반차로", + "node_id": "112000129", + "nxtStn": "증산종합시장.증산중학교입구" + }, + { + "stop_nm": "연희지하차도", + "ycode": "37.577152", + "stop_no": "13213", + "xcode": "126.932553", + "stop_type": "일반차로", + "node_id": "112000130", + "nxtStn": "서대문구청.보건소.구의회" + }, + { + "stop_nm": "연희지하차도", + "ycode": "37.577503", + "stop_no": "13214", + "xcode": "126.932202", + "stop_type": "일반차로", + "node_id": "112000131", + "nxtStn": "홍연2교현대교통종점" + }, + { + "stop_nm": "홍연2교현대교통종점", + "ycode": "37.578217", + "stop_no": "13215", + "xcode": "126.929983", + "stop_type": "일반차로", + "node_id": "112000132", + "nxtStn": "연희지하차도" + }, + { + "stop_nm": "홍연2교현대교통종점", + "ycode": "37.578402", + "stop_no": "13216", + "xcode": "126.930207", + "stop_type": "일반차로", + "node_id": "112000133", + "nxtStn": "명지대입구.신원지벤스타" + }, + { + "stop_nm": "명지대입구.서울무용센터", + "ycode": "37.580847", + "stop_no": "13217", + "xcode": "126.927408", + "stop_type": "일반차로", + "node_id": "112000134", + "nxtStn": "두산아파트" + }, + { + "stop_nm": "명지중고등학교", + "ycode": "37.58256", + "stop_no": "13218", + "xcode": "126.925698", + "stop_type": "일반차로", + "node_id": "112000135", + "nxtStn": "명지대삼거리" + }, + { + "stop_nm": "명지중고등학교", + "ycode": "37.582933", + "stop_no": "13219", + "xcode": "126.925685", + "stop_type": "일반차로", + "node_id": "112000136", + "nxtStn": "명지전문대.충암중고등학교" + }, + { + "stop_nm": "명지전문대.충암중고등학교", + "ycode": "37.584667", + "stop_no": "13220", + "xcode": "126.923595", + "stop_type": "일반차로", + "node_id": "112000137", + "nxtStn": "명지대학교교회" + }, + { + "stop_nm": "명지전문대.충암중고등학교", + "ycode": "37.584668", + "stop_no": "13221", + "xcode": "126.923958", + "stop_type": "일반차로", + "node_id": "112000138", + "nxtStn": "응암초등학교" + }, + { + "stop_nm": "연희동자치회관", + "ycode": "37.569517", + "stop_no": "13222", + "xcode": "126.931267", + "stop_type": "일반차로", + "node_id": "112000139", + "nxtStn": "사러가쇼핑" + }, + { + "stop_nm": "연희동자치회관", + "ycode": "37.5697475722", + "stop_no": "13223", + "xcode": "126.9312958858", + "stop_type": "일반차로", + "node_id": "112000140", + "nxtStn": "서대문구보훈회관" + }, + { + "stop_nm": "서대문구보훈회관", + "ycode": "37.5717018011", + "stop_no": "13224", + "xcode": "126.9293638634", + "stop_type": "일반차로", + "node_id": "112000141", + "nxtStn": "연희동자치회관" + }, + { + "stop_nm": "서대문구보훈회관", + "ycode": "37.5718307606", + "stop_no": "13225", + "xcode": "126.9295369529", + "stop_type": "일반차로", + "node_id": "112000142", + "nxtStn": "홍남교.서대문두바퀴환경센터" + }, + { + "stop_nm": "홍남교.서대문두바퀴환경센터", + "ycode": "37.57464", + "stop_no": "13226", + "xcode": "126.926983", + "stop_type": "일반차로", + "node_id": "112000143", + "nxtStn": "서대문구보훈회관" + }, + { + "stop_nm": "홍남교.서대문두바퀴환경센터", + "ycode": "37.574885", + "stop_no": "13227", + "xcode": "126.927027", + "stop_type": "일반차로", + "node_id": "112000144", + "nxtStn": "백련시장" + }, + { + "stop_nm": "백련시장", + "ycode": "37.5766469566", + "stop_no": "13228", + "xcode": "126.9249301317", + "stop_type": "일반차로", + "node_id": "112000145", + "nxtStn": "홍남교백련시장입구" + }, + { + "stop_nm": "백련시장", + "ycode": "37.577092", + "stop_no": "13229", + "xcode": "126.924702", + "stop_type": "일반차로", + "node_id": "112000146", + "nxtStn": "명지대사거리국민은행앞" + }, + { + "stop_nm": "명지대사거리.우리은행", + "ycode": "37.577431", + "stop_no": "13230", + "xcode": "126.922584", + "stop_type": "일반차로", + "node_id": "112000147", + "nxtStn": "백련시장" + }, + { + "stop_nm": "명지대사거리국민은행앞", + "ycode": "37.577607", + "stop_no": "13231", + "xcode": "126.922413", + "stop_type": "일반차로", + "node_id": "112000148", + "nxtStn": "명지대" + }, + { + "stop_nm": "연가초교.DMC래미안클라시스", + "ycode": "37.5791189521", + "stop_no": "13232", + "xcode": "126.9172942879", + "stop_type": "일반차로", + "node_id": "112000149", + "nxtStn": "명지대" + }, + { + "stop_nm": "연가초.연희중.래미안클라시스", + "ycode": "37.578957", + "stop_no": "13233", + "xcode": "126.918066", + "stop_type": "일반차로", + "node_id": "112000150", + "nxtStn": "DMC두산위브아파트" + }, + { + "stop_nm": "북가좌사거리", + "ycode": "37.581185", + "stop_no": "13234", + "xcode": "126.914667", + "stop_type": "일반차로", + "node_id": "112000151", + "nxtStn": "행운부동산앞" + }, + { + "stop_nm": "북가좌사거리", + "ycode": "37.5818379941", + "stop_no": "13235", + "xcode": "126.9141424887", + "stop_type": "일반차로", + "node_id": "112000152", + "nxtStn": "북가좌119안전센터" + }, + { + "stop_nm": "북가좌119안전센터", + "ycode": "37.5827920973", + "stop_no": "13236", + "xcode": "126.912510399", + "stop_type": "일반차로", + "node_id": "112000153", + "nxtStn": "북가좌사거리" + }, + { + "stop_nm": "북가좌119안전센터", + "ycode": "37.583448", + "stop_no": "13237", + "xcode": "126.912037", + "stop_type": "일반차로", + "node_id": "112000154", + "nxtStn": "연서중학교입구" + }, + { + "stop_nm": "충정로역5호선", + "ycode": "37.561714", + "stop_no": "13238", + "xcode": "126.964018", + "stop_type": "가로변시간", + "node_id": "112000155", + "nxtStn": "미동초등학교" + }, + { + "stop_nm": "미동초등학교", + "ycode": "37.5631581038", + "stop_no": "13240", + "xcode": "126.9644505142", + "stop_type": "가로변시간", + "node_id": "112000157", + "nxtStn": "충정로역8번출구" + }, + { + "stop_nm": "DMC한양아파트", + "ycode": "37.57649", + "stop_no": "13241", + "xcode": "126.90852", + "stop_type": "일반차로", + "node_id": "112000158", + "nxtStn": "북가좌초교사거리" + }, + { + "stop_nm": "북가좌초교·DMC현대아파트", + "ycode": "37.5767876006", + "stop_no": "13242", + "xcode": "126.9084364654", + "stop_type": "일반차로", + "node_id": "112000159", + "nxtStn": "DMC래미안e-편한세상3단지" + }, + { + "stop_nm": "독립문역", + "ycode": "37.575418", + "stop_no": "13250", + "xcode": "126.956433", + "stop_type": "일반차로", + "node_id": "112000167", + "nxtStn": "독립문(가상)" + }, + { + "stop_nm": "서대문경찰서", + "ycode": "37.563413", + "stop_no": "13252", + "xcode": "126.968395", + "stop_type": "일반차로", + "node_id": "112000169", + "nxtStn": "염천교" + }, + { + "stop_nm": "충정로역2호선", + "ycode": "37.5597212618", + "stop_no": "13253", + "xcode": "126.9642110489", + "stop_type": "일반차로", + "node_id": "112000170", + "nxtStn": "아현초등학교" + }, + { + "stop_nm": "연가교", + "ycode": "37.572816", + "stop_no": "13256", + "xcode": "126.92215", + "stop_type": "일반차로", + "node_id": "112000173", + "nxtStn": "서대문종합사회복지관" + }, + { + "stop_nm": "명지대입구.신원지벤스타", + "ycode": "37.580458", + "stop_no": "13258", + "xcode": "126.928147", + "stop_type": "일반차로", + "node_id": "112000175", + "nxtStn": "명지중고등학교" + }, + { + "stop_nm": "현대백화점", + "ycode": "37.5566664866", + "stop_no": "13259", + "xcode": "126.9330023083", + "stop_type": "가로변전일", + "node_id": "112000176", + "nxtStn": "동교동삼거리연희동방면" + }, + { + "stop_nm": "서대문종합사회복지관", + "ycode": "37.5712597156", + "stop_no": "13260", + "xcode": "126.9200245273", + "stop_type": "일반차로", + "node_id": "112000177", + "nxtStn": "창덕에버빌" + }, + { + "stop_nm": "서대문종합사회복지관", + "ycode": "37.5709633371", + "stop_no": "13261", + "xcode": "126.9201437133", + "stop_type": "일반차로", + "node_id": "112000178", + "nxtStn": "연가교" + }, + { + "stop_nm": "홍남교백련시장입구", + "ycode": "37.5752855695", + "stop_no": "13262", + "xcode": "126.9251839684", + "stop_type": "일반차로", + "node_id": "112000179", + "nxtStn": "연가교" + }, + { + "stop_nm": "북가좌초교사거리", + "ycode": "37.5787263414", + "stop_no": "13263", + "xcode": "126.9102546757", + "stop_type": "일반차로", + "node_id": "112000180", + "nxtStn": "북가좌초교·DMC현대아파트" + }, + { + "stop_nm": "북가좌초교사거리", + "ycode": "37.578365", + "stop_no": "13264", + "xcode": "126.910333", + "stop_type": "일반차로", + "node_id": "112000181", + "nxtStn": "북가좌2동주민센터" + }, + { + "stop_nm": "은가어린이공원구150번종점", + "ycode": "37.5829339719", + "stop_no": "13265", + "xcode": "126.9196202751", + "stop_type": "일반차로", + "node_id": "112000182", + "nxtStn": "우성공인중개사" + }, + { + "stop_nm": "증산교앞", + "ycode": "37.578309", + "stop_no": "13266", + "xcode": "126.904788", + "stop_type": "일반차로", + "node_id": "112000183", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "DMC두산위브아파트", + "ycode": "37.5805574973", + "stop_no": "13267", + "xcode": "126.915323745", + "stop_type": "일반차로", + "node_id": "112000184", + "nxtStn": "연가초교.DMC래미안클라시스" + }, + { + "stop_nm": "DMC두산위브아파트", + "ycode": "37.580345", + "stop_no": "13268", + "xcode": "126.915942", + "stop_type": "일반차로", + "node_id": "112000185", + "nxtStn": "북가좌사거리" + }, + { + "stop_nm": "독립문공원.극동아파트", + "ycode": "37.5718528892", + "stop_no": "13270", + "xcode": "126.9593190984", + "stop_type": "일반차로", + "node_id": "112000187", + "nxtStn": "3호선독립문역" + }, + { + "stop_nm": "봉원동사거리", + "ycode": "37.5668611224", + "stop_no": "13278", + "xcode": "126.9464767265", + "stop_type": "일반차로", + "node_id": "112000195", + "nxtStn": "삼호아파트" + }, + { + "stop_nm": "봉원사", + "ycode": "37.570102", + "stop_no": "13279", + "xcode": "126.946105", + "stop_type": "일반차로", + "node_id": "112000196", + "nxtStn": "봉원사길" + }, + { + "stop_nm": "봉원사", + "ycode": "37.570109", + "stop_no": "13280", + "xcode": "126.94611", + "stop_type": "일반차로", + "node_id": "112000197", + "nxtStn": "봉원사길" + }, + { + "stop_nm": "봉원동사거리", + "ycode": "37.5667963452", + "stop_no": "13281", + "xcode": "126.9467009136", + "stop_type": "일반차로", + "node_id": "112000198", + "nxtStn": "봉원사길" + }, + { + "stop_nm": "삼호아파트", + "ycode": "37.57149", + "stop_no": "13282", + "xcode": "126.95941", + "stop_type": "일반차로", + "node_id": "112000199", + "nxtStn": "독립문역.서대문형무소역사관" + }, + { + "stop_nm": "서부운수기점", + "ycode": "37.581632", + "stop_no": "13285", + "xcode": "126.910257", + "stop_type": "일반차로", + "node_id": "112000202", + "nxtStn": "북가좌2동주민센터" + }, + { + "stop_nm": "중소기업은행", + "ycode": "37.582257", + "stop_no": "13299", + "xcode": "126.912993", + "stop_type": "일반차로", + "node_id": "112000216", + "nxtStn": "북가좌2동주민센터" + }, + { + "stop_nm": "봉원사길", + "ycode": "37.5683540231", + "stop_no": "13313", + "xcode": "126.946017179", + "stop_type": "일반차로", + "node_id": "112000230", + "nxtStn": "봉원동사거리" + }, + { + "stop_nm": "봉원사길", + "ycode": "37.568603", + "stop_no": "13314", + "xcode": "126.94611", + "stop_type": "일반차로", + "node_id": "112000231", + "nxtStn": "봉원사" + }, + { + "stop_nm": "연세로.문학의거리", + "ycode": "37.55626", + "stop_no": "13324", + "xcode": "126.937003", + "stop_type": "일반차로", + "node_id": "112000392", + "nxtStn": "연세로.명물거리" + }, + { + "stop_nm": "독립문역.서대문형무소역사관", + "ycode": "37.5763938404", + "stop_no": "13325", + "xcode": "126.955308749", + "stop_type": "일반차로", + "node_id": "112000314", + "nxtStn": "독립문역" + }, + { + "stop_nm": "독립문공원", + "ycode": "37.5764875221", + "stop_no": "13326", + "xcode": "126.9552249123", + "stop_type": "일반차로", + "node_id": "112000313", + "nxtStn": "국립대한민국임시정부기념관" + }, + { + "stop_nm": "남가좌동현대아파트후문", + "ycode": "37.5739820992", + "stop_no": "13327", + "xcode": "126.9189766576", + "stop_type": "일반차로", + "node_id": "112000415", + "nxtStn": "연가교" + }, + { + "stop_nm": "남가좌동현대아파트후문", + "ycode": "37.5744342988", + "stop_no": "13328", + "xcode": "126.9187610612", + "stop_type": "일반차로", + "node_id": "112000414", + "nxtStn": "DMC.파크뷰자이" + }, + { + "stop_nm": "산골고개", + "ycode": "37.594833", + "stop_no": "13329", + "xcode": "126.940303", + "stop_type": "일반차로", + "node_id": "112000417", + "nxtStn": "홍은현대아파트" + }, + { + "stop_nm": "DMC래미안e-편한세상3단지", + "ycode": "37.5751661304", + "stop_no": "13330", + "xcode": "126.9067640004", + "stop_type": "일반차로", + "node_id": "112000426", + "nxtStn": "북가좌동삼거리" + }, + { + "stop_nm": "DMC래미안e-편한세상3단지", + "ycode": "37.5750474159", + "stop_no": "13331", + "xcode": "126.9070551106", + "stop_type": "일반차로", + "node_id": "112000422", + "nxtStn": "DMC한양아파트" + }, + { + "stop_nm": "연흥교회", + "ycode": "37.572607", + "stop_no": "13332", + "xcode": "126.921163", + "stop_type": "일반차로", + "node_id": "112000421", + "nxtStn": "남가좌동현대아파트후문" + }, + { + "stop_nm": "홍제역4번출구", + "ycode": "37.5893732847", + "stop_no": "13334", + "xcode": "126.943082762", + "stop_type": "일반차로", + "node_id": "112000424", + "nxtStn": "홍제우체국" + }, + { + "stop_nm": "남가좌동새마을금고", + "ycode": "37.574429", + "stop_no": "13335", + "xcode": "126.917304", + "stop_type": "일반차로", + "node_id": "112000425", + "nxtStn": "가재울초등학교" + }, + { + "stop_nm": "국립대한민국임시정부기념관", + "ycode": "37.57583", + "stop_no": "13336", + "xcode": "126.953572", + "stop_type": "일반차로", + "node_id": "112000427", + "nxtStn": "독립문파크빌" + }, + { + "stop_nm": "독립문파크빌", + "ycode": "37.5745776862", + "stop_no": "13337", + "xcode": "126.9518579342", + "stop_type": "일반차로", + "node_id": "112000428", + "nxtStn": "독립문역.서대문형무소역사관" + }, + { + "stop_nm": "두산아파트", + "ycode": "37.578768", + "stop_no": "13338", + "xcode": "126.932058", + "stop_type": "일반차로", + "node_id": "112000431", + "nxtStn": "서대문문화체육회관" + }, + { + "stop_nm": "DMC.파크뷰자이", + "ycode": "37.573768", + "stop_no": "13339", + "xcode": "126.916328", + "stop_type": "일반차로", + "node_id": "112000432", + "nxtStn": "남가좌동새마을금고" + }, + { + "stop_nm": "아현가구단지", + "ycode": "37.5586613075", + "stop_no": "13340", + "xcode": "126.9608923538", + "stop_type": "일반차로", + "node_id": "112000437", + "nxtStn": "아현전철역" + }, + { + "stop_nm": "DMC쌍용.래미안루센티아", + "ycode": "37.575594", + "stop_no": "13341", + "xcode": "126.91881", + "stop_type": "일반차로", + "node_id": "112000439", + "nxtStn": "명지대사거리" + }, + { + "stop_nm": "독립문(가상)", + "ycode": "37.572263", + "stop_no": "13499", + "xcode": "126.960083", + "stop_type": "가상정류장", + "node_id": "112000438", + "nxtStn": "독립문공원.극동아파트" + }, + { + "stop_nm": "정원슈퍼", + "ycode": "37.5864360186", + "stop_no": "13500", + "xcode": "126.9317244197", + "stop_type": "마을버스", + "node_id": "112900227", + "nxtStn": "소공원" + }, + { + "stop_nm": "홍은동국민주택", + "ycode": "37.605675", + "stop_no": "13501", + "xcode": "126.949851", + "stop_type": "마을버스", + "node_id": "112900116", + "nxtStn": "풍림.극동아파트" + }, + { + "stop_nm": "백련사", + "ycode": "37.5848355947", + "stop_no": "13502", + "xcode": "126.9285294071", + "stop_type": "마을버스", + "node_id": "112900218", + "nxtStn": "명지고후문" + }, + { + "stop_nm": "풍진베이스타운.안산자락길입구", + "ycode": "37.582426", + "stop_no": "13503", + "xcode": "126.943324", + "stop_type": "마을버스", + "node_id": "112900007", + "nxtStn": "명진아트빌라" + }, + { + "stop_nm": "개미마을", + "ycode": "37.589797675", + "stop_no": "13505", + "xcode": "126.9539148251", + "stop_type": "마을버스", + "node_id": "112900205", + "nxtStn": "삼거리연탄가게" + }, + { + "stop_nm": "두산아파트", + "ycode": "37.5591201611", + "stop_no": "13506", + "xcode": "126.949261098", + "stop_type": "마을버스", + "node_id": "112900005", + "nxtStn": "초원약국" + }, + { + "stop_nm": "북아현삼거리", + "ycode": "37.5648050703", + "stop_no": "13507", + "xcode": "126.9529748039", + "stop_type": "마을버스", + "node_id": "112900180", + "nxtStn": "추계초등학교" + }, + { + "stop_nm": "궁동근린공원입구", + "ycode": "37.5695765271", + "stop_no": "13508", + "xcode": "126.9241991219", + "stop_type": "마을버스", + "node_id": "112900004", + "nxtStn": "궁동근린공원회관" + }, + { + "stop_nm": "뜨란채아파트101동", + "ycode": "37.565837009", + "stop_no": "13509", + "xcode": "126.9587733457", + "stop_type": "마을버스", + "node_id": "112900003", + "nxtStn": "뜨란채아파트.노인복지관" + }, + { + "stop_nm": "삼성빌라", + "ycode": "37.5956", + "stop_no": "13510", + "xcode": "126.933839", + "stop_type": "마을버스", + "node_id": "112900002", + "nxtStn": "서강아파트1차정문앞" + }, + { + "stop_nm": "소공원", + "ycode": "37.5863364542", + "stop_no": "13511", + "xcode": "126.9325182667", + "stop_type": "마을버스", + "node_id": "112900219", + "nxtStn": "삼성그린빌" + }, + { + "stop_nm": "풍림.극동아파트", + "ycode": "37.603637", + "stop_no": "13512", + "xcode": "126.949474", + "stop_type": "마을버스", + "node_id": "112900115", + "nxtStn": "포방공영주차장" + }, + { + "stop_nm": "명지고후문", + "ycode": "37.584106951", + "stop_no": "13513", + "xcode": "126.929089453", + "stop_type": "마을버스", + "node_id": "112900220", + "nxtStn": "팔각정" + }, + { + "stop_nm": "명진아트빌라", + "ycode": "37.5828145423", + "stop_no": "13514", + "xcode": "126.9436821958", + "stop_type": "마을버스", + "node_id": "112900001", + "nxtStn": "고은초교삼거리" + }, + { + "stop_nm": "홍은초등학교", + "ycode": "37.5968898285", + "stop_no": "13515", + "xcode": "126.9503226419", + "stop_type": "마을버스", + "node_id": "112900114", + "nxtStn": "문화촌주유소" + }, + { + "stop_nm": "삼거리연탄가게", + "ycode": "37.5904915483", + "stop_no": "13516", + "xcode": "126.9533843286", + "stop_type": "마을버스", + "node_id": "112900207", + "nxtStn": "버드나무가게" + }, + { + "stop_nm": "초원약국", + "ycode": "37.5597710801", + "stop_no": "13517", + "xcode": "126.9500337563", + "stop_type": "마을버스", + "node_id": "112900112", + "nxtStn": "신촌푸르지오1단지후문.힐스테이트신촌" + }, + { + "stop_nm": "추계초등학교", + "ycode": "37.5635916001", + "stop_no": "13518", + "xcode": "126.9541934784", + "stop_type": "마을버스", + "node_id": "112900111", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "궁동근린공원회관", + "ycode": "37.5709433271", + "stop_no": "13519", + "xcode": "126.9253683141", + "stop_type": "마을버스", + "node_id": "112900189", + "nxtStn": "서대문지역자활센터" + }, + { + "stop_nm": "서서울농협홍은지점.동신병원", + "ycode": "37.580977", + "stop_no": "13520", + "xcode": "126.936114", + "stop_type": "마을버스", + "node_id": "112900223", + "nxtStn": "서대문구청.서대문구의회" + }, + { + "stop_nm": "뜨란채아파트.노인복지관", + "ycode": "37.568067297", + "stop_no": "13521", + "xcode": "126.9590155058", + "stop_type": "마을버스", + "node_id": "112900170", + "nxtStn": "산경아파트" + }, + { + "stop_nm": "금화장오거리", + "ycode": "37.5643630011", + "stop_no": "13522", + "xcode": "126.9592914762", + "stop_type": "마을버스", + "node_id": "112900181", + "nxtStn": "경기대후문" + }, + { + "stop_nm": "미성아파트", + "ycode": "37.5932894508", + "stop_no": "13523", + "xcode": "126.9344642894", + "stop_type": "마을버스", + "node_id": "112900110", + "nxtStn": "홍은중학교" + }, + { + "stop_nm": "삼성그린빌", + "ycode": "37.5869709106", + "stop_no": "13524", + "xcode": "126.9326750877", + "stop_type": "마을버스", + "node_id": "112900109", + "nxtStn": "동원빌라" + }, + { + "stop_nm": "팔각정", + "ycode": "37.5832993159", + "stop_no": "13526", + "xcode": "126.9301670114", + "stop_type": "마을버스", + "node_id": "112900108", + "nxtStn": "서대문문화체육회관" + }, + { + "stop_nm": "고은초교삼거리", + "ycode": "37.5843122345", + "stop_no": "13527", + "xcode": "126.9438520431", + "stop_type": "마을버스", + "node_id": "112900107", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "문화촌주유소", + "ycode": "37.59527", + "stop_no": "13528", + "xcode": "126.948602", + "stop_type": "마을버스", + "node_id": "112900106", + "nxtStn": "홍은사회복지관별관" + }, + { + "stop_nm": "버드나무가게", + "ycode": "37.5910365086", + "stop_no": "13529", + "xcode": "126.9528846042", + "stop_type": "마을버스", + "node_id": "112900105", + "nxtStn": "금강빌라.인왕중학교" + }, + { + "stop_nm": "신촌푸르지오1단지후문.힐스테이트신촌", + "ycode": "37.560852", + "stop_no": "13530", + "xcode": "126.951642", + "stop_type": "마을버스", + "node_id": "112900104", + "nxtStn": "중앙여고" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5631196895", + "stop_no": "13531", + "xcode": "126.9548740803", + "stop_type": "마을버스", + "node_id": "112900103", + "nxtStn": "중앙여고" + }, + { + "stop_nm": "서대문지역자활센터", + "ycode": "37.5721234264", + "stop_no": "13532", + "xcode": "126.9262762163", + "stop_type": "마을버스", + "node_id": "112900190", + "nxtStn": "대명빌라" + }, + { + "stop_nm": "산경아파트", + "ycode": "37.568526", + "stop_no": "13534", + "xcode": "126.960299", + "stop_type": "마을버스", + "node_id": "112900168", + "nxtStn": "천연동마을금고" + }, + { + "stop_nm": "경기대후문", + "ycode": "37.5639149801", + "stop_no": "13535", + "xcode": "126.9614458786", + "stop_type": "마을버스", + "node_id": "112900102", + "nxtStn": "미동초교" + }, + { + "stop_nm": "홍은중학교", + "ycode": "37.5923361752", + "stop_no": "13536", + "xcode": "126.9346010147", + "stop_type": "마을버스", + "node_id": "112900101", + "nxtStn": "차고앞" + }, + { + "stop_nm": "동원빌라", + "ycode": "37.5870541637", + "stop_no": "13537", + "xcode": "126.9332966622", + "stop_type": "마을버스", + "node_id": "112900100", + "nxtStn": "싸이버아파트" + }, + { + "stop_nm": "포방공영주차장", + "ycode": "37.6008891646", + "stop_no": "13538", + "xcode": "126.948937151", + "stop_type": "마을버스", + "node_id": "112900099", + "nxtStn": "포방시장" + }, + { + "stop_nm": "서대문문화체육회관", + "ycode": "37.5812287775", + "stop_no": "13539", + "xcode": "126.9319952523", + "stop_type": "마을버스", + "node_id": "112900098", + "nxtStn": "서대문등기소" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.584232427", + "stop_no": "13540", + "xcode": "126.9427866202", + "stop_type": "마을버스", + "node_id": "112900097", + "nxtStn": "신연중학교서대문도서관" + }, + { + "stop_nm": "홍은사회복지관별관", + "ycode": "37.594174", + "stop_no": "13541", + "xcode": "126.948048", + "stop_type": "마을버스", + "node_id": "112900096", + "nxtStn": "문화촌현대아파트" + }, + { + "stop_nm": "금강빌라.인왕중학교", + "ycode": "37.5918227992", + "stop_no": "13542", + "xcode": "126.951991775", + "stop_type": "마을버스", + "node_id": "112900095", + "nxtStn": "오동나무앞" + }, + { + "stop_nm": "중앙여고", + "ycode": "37.5622215575", + "stop_no": "13544", + "xcode": "126.9555537949", + "stop_type": "마을버스", + "node_id": "112900093", + "nxtStn": "경남아파트.북아현119안전센터" + }, + { + "stop_nm": "홍제초등학교", + "ycode": "37.5922380009", + "stop_no": "13545", + "xcode": "126.9434055817", + "stop_type": "마을버스", + "node_id": "112900232", + "nxtStn": "홍제역.서대문세무서" + }, + { + "stop_nm": "천연동마을금고", + "ycode": "37.568438466", + "stop_no": "13546", + "xcode": "126.9614503394", + "stop_type": "마을버스", + "node_id": "112900169", + "nxtStn": "영천동" + }, + { + "stop_nm": "미동초교", + "ycode": "37.5642738059", + "stop_no": "13547", + "xcode": "126.9649491898", + "stop_type": "마을버스", + "node_id": "112900092", + "nxtStn": "미동초등학교" + }, + { + "stop_nm": "차고앞", + "ycode": "37.5917253952", + "stop_no": "13548", + "xcode": "126.9348869143", + "stop_type": "마을버스", + "node_id": "112900091", + "nxtStn": "삼거리" + }, + { + "stop_nm": "싸이버아파트", + "ycode": "37.5871221418", + "stop_no": "13549", + "xcode": "126.9340020442", + "stop_type": "마을버스", + "node_id": "112900090", + "nxtStn": "정원여중입구" + }, + { + "stop_nm": "포방시장", + "ycode": "37.5994652097", + "stop_no": "13550", + "xcode": "126.9483922502", + "stop_type": "마을버스", + "node_id": "112900089", + "nxtStn": "호박골다리" + }, + { + "stop_nm": "서대문등기소", + "ycode": "37.5802086413", + "stop_no": "13551", + "xcode": "126.9333967449", + "stop_type": "마을버스", + "node_id": "112900088", + "nxtStn": "홍은2동주민센터" + }, + { + "stop_nm": "문화촌현대아파트", + "ycode": "37.592324", + "stop_no": "13553", + "xcode": "126.947358", + "stop_type": "마을버스", + "node_id": "112900087", + "nxtStn": "홍제역해링턴플레이스" + }, + { + "stop_nm": "오동나무앞", + "ycode": "37.592868", + "stop_no": "13554", + "xcode": "126.95111", + "stop_type": "마을버스", + "node_id": "112900086", + "nxtStn": "동성교회" + }, + { + "stop_nm": "경남아파트.북아현119안전센터", + "ycode": "37.56103", + "stop_no": "13556", + "xcode": "126.955862", + "stop_type": "마을버스", + "node_id": "112900177", + "nxtStn": "한성고교" + }, + { + "stop_nm": "행복하우스", + "ycode": "37.573132", + "stop_no": "13557", + "xcode": "126.928697", + "stop_type": "마을버스", + "node_id": "112900194", + "nxtStn": "서대문구보훈회관" + }, + { + "stop_nm": "삼거리", + "ycode": "37.5900216603", + "stop_no": "13560", + "xcode": "126.9352937891", + "stop_type": "마을버스", + "node_id": "112900084", + "nxtStn": "스위스그랜드호텔앞" + }, + { + "stop_nm": "정원여중입구", + "ycode": "37.5864367347", + "stop_no": "13561", + "xcode": "126.9345801332", + "stop_type": "마을버스", + "node_id": "112900083", + "nxtStn": "홍은현대아파트.스위스그랜드호텔" + }, + { + "stop_nm": "호박골다리", + "ycode": "37.5981452692", + "stop_no": "13562", + "xcode": "126.9467080038", + "stop_type": "마을버스", + "node_id": "112900082", + "nxtStn": "간호대정문" + }, + { + "stop_nm": "송죽원", + "ycode": "37.583949", + "stop_no": "13563", + "xcode": "126.939074", + "stop_type": "마을버스", + "node_id": "112900202", + "nxtStn": "백련교" + }, + { + "stop_nm": "홍제역해링턴플레이스", + "ycode": "37.5910942532", + "stop_no": "13564", + "xcode": "126.9467051053", + "stop_type": "마을버스", + "node_id": "112900081", + "nxtStn": "인왕초등학교" + }, + { + "stop_nm": "동성교회", + "ycode": "37.5941790512", + "stop_no": "13565", + "xcode": "126.9496042131", + "stop_type": "마을버스", + "node_id": "112900080", + "nxtStn": "문화공원입구" + }, + { + "stop_nm": "중앙여고", + "ycode": "37.5618692519", + "stop_no": "13566", + "xcode": "126.9548553237", + "stop_type": "마을버스", + "node_id": "112900079", + "nxtStn": "경남아파트.북아현119안전센터" + }, + { + "stop_nm": "한성고교", + "ycode": "37.5594522562", + "stop_no": "13567", + "xcode": "126.9564975053", + "stop_type": "마을버스", + "node_id": "112900078", + "nxtStn": "북아현로입구" + }, + { + "stop_nm": "현대그린마트", + "ycode": "37.571348", + "stop_no": "13570", + "xcode": "126.961027", + "stop_type": "마을버스", + "node_id": "112900076", + "nxtStn": "영천시장" + }, + { + "stop_nm": "충정로역8번출구", + "ycode": "37.5609058481", + "stop_no": "13571", + "xcode": "126.963069492", + "stop_type": "마을버스", + "node_id": "112900075", + "nxtStn": "충정로역7번출구" + }, + { + "stop_nm": "스위스그랜드호텔앞", + "ycode": "37.5889769825", + "stop_no": "13572", + "xcode": "126.9363704352", + "stop_type": "마을버스", + "node_id": "112900074", + "nxtStn": "홍은현대아파트.스위스그랜드호텔" + }, + { + "stop_nm": "간호대정문", + "ycode": "37.597", + "stop_no": "13574", + "xcode": "126.947429", + "stop_type": "마을버스", + "node_id": "112900073", + "nxtStn": "홍은초등학교.간호대입구" + }, + { + "stop_nm": "홍은사거리", + "ycode": "37.592102727", + "stop_no": "13575", + "xcode": "126.9413333792", + "stop_type": "마을버스", + "node_id": "112900216", + "nxtStn": "산골고개" + }, + { + "stop_nm": "인왕초등학교", + "ycode": "37.5892500775", + "stop_no": "13577", + "xcode": "126.9455049823", + "stop_type": "마을버스", + "node_id": "112900072", + "nxtStn": "홍제역.1번출구" + }, + { + "stop_nm": "문화공원입구", + "ycode": "37.594406", + "stop_no": "13578", + "xcode": "126.948395", + "stop_type": "마을버스", + "node_id": "112900071", + "nxtStn": "홍은사회복지관별관" + }, + { + "stop_nm": "충정로역7번출구", + "ycode": "37.559865", + "stop_no": "13583", + "xcode": "126.962423", + "stop_type": "마을버스", + "node_id": "112900069", + "nxtStn": "한우리독서운동본부" + }, + { + "stop_nm": "산골고개", + "ycode": "37.595088755", + "stop_no": "13586", + "xcode": "126.9405232626", + "stop_type": "마을버스", + "node_id": "112900067", + "nxtStn": "반석블레스아파트" + }, + { + "stop_nm": "홍은초등학교.간호대입구", + "ycode": "37.5964044941", + "stop_no": "13587", + "xcode": "126.9489115796", + "stop_type": "마을버스", + "node_id": "112900066", + "nxtStn": "문화촌주유소" + }, + { + "stop_nm": "가산빌라", + "ycode": "37.584882269", + "stop_no": "13589", + "xcode": "126.9360670682", + "stop_type": "마을버스", + "node_id": "112900199", + "nxtStn": "평화슈퍼" + }, + { + "stop_nm": "사러가쇼핑", + "ycode": "37.567293", + "stop_no": "13590", + "xcode": "126.930254", + "stop_type": "마을버스", + "node_id": "112900065", + "nxtStn": "연희브라운스톤" + }, + { + "stop_nm": "영천시장입구", + "ycode": "37.5692775009", + "stop_no": "13591", + "xcode": "126.9630256888", + "stop_type": "마을버스", + "node_id": "112900063", + "nxtStn": "육교앞" + }, + { + "stop_nm": "한우리독서운동본부", + "ycode": "37.5612397836", + "stop_no": "13592", + "xcode": "126.961904561", + "stop_type": "마을버스", + "node_id": "112900062", + "nxtStn": "광염교회" + }, + { + "stop_nm": "반석블레스아파트", + "ycode": "37.5951671678", + "stop_no": "13593", + "xcode": "126.9410116214", + "stop_type": "마을버스", + "node_id": "112900215", + "nxtStn": "풍림1차아파트" + }, + { + "stop_nm": "평화슈퍼", + "ycode": "37.5862688501", + "stop_no": "13594", + "xcode": "126.9357069372", + "stop_type": "마을버스", + "node_id": "112900203", + "nxtStn": "스위스그랜드호텔" + }, + { + "stop_nm": "북아현로입구", + "ycode": "37.557825", + "stop_no": "13595", + "xcode": "126.956271", + "stop_type": "마을버스", + "node_id": "112900178", + "nxtStn": "아현역1번출구" + }, + { + "stop_nm": "아현역1번출구", + "ycode": "37.5575069757", + "stop_no": "13596", + "xcode": "126.9553924724", + "stop_type": "일반차로", + "node_id": "112000410", + "nxtStn": "웨딩타운" + }, + { + "stop_nm": "육교앞", + "ycode": "37.5679383551", + "stop_no": "13597", + "xcode": "126.9643010771", + "stop_type": "마을버스", + "node_id": "112900172", + "nxtStn": "서대문사거리" + }, + { + "stop_nm": "광염교회", + "ycode": "37.5621480741", + "stop_no": "13598", + "xcode": "126.9618690079", + "stop_type": "마을버스", + "node_id": "112900061", + "nxtStn": "경기대사회교육원" + }, + { + "stop_nm": "풍림1차아파트", + "ycode": "37.5943540172", + "stop_no": "13599", + "xcode": "126.9420858176", + "stop_type": "마을버스", + "node_id": "112900060", + "nxtStn": "팔각정" + }, + { + "stop_nm": "스위스그랜드호텔", + "ycode": "37.5877677594", + "stop_no": "13600", + "xcode": "126.9364416698", + "stop_type": "마을버스", + "node_id": "112900200", + "nxtStn": "남양아파트" + }, + { + "stop_nm": "웨딩타운", + "ycode": "37.5572720684", + "stop_no": "13617", + "xcode": "126.9515261108", + "stop_type": "마을버스", + "node_id": "112900056", + "nxtStn": "이대전철역" + }, + { + "stop_nm": "서대문문화체육회관", + "ycode": "37.5807483392", + "stop_no": "13626", + "xcode": "126.9349134591", + "stop_type": "일반차로", + "node_id": "112000256", + "nxtStn": "서대문구보건소별관" + }, + { + "stop_nm": "서대문사거리", + "ycode": "37.5666951917", + "stop_no": "13654", + "xcode": "126.9654574653", + "stop_type": "마을버스", + "node_id": "112900163", + "nxtStn": "서대문전철역" + }, + { + "stop_nm": "경기대사회교육원", + "ycode": "37.563362", + "stop_no": "13656", + "xcode": "126.962426", + "stop_type": "마을버스", + "node_id": "112900059", + "nxtStn": "인창중고" + }, + { + "stop_nm": "팔각정", + "ycode": "37.5952754911", + "stop_no": "13659", + "xcode": "126.9432424727", + "stop_type": "마을버스", + "node_id": "112900057", + "nxtStn": "홍은유원아파트" + }, + { + "stop_nm": "남양아파트", + "ycode": "37.5891240045", + "stop_no": "13660", + "xcode": "126.9383406199", + "stop_type": "마을버스", + "node_id": "112900201", + "nxtStn": "유진상가" + }, + { + "stop_nm": "서대문전철역", + "ycode": "37.5652797325", + "stop_no": "13664", + "xcode": "126.9659992155", + "stop_type": "마을버스", + "node_id": "112900054", + "nxtStn": "미동초등학교" + }, + { + "stop_nm": "인창중고", + "ycode": "37.5642130373", + "stop_no": "13665", + "xcode": "126.9636417757", + "stop_type": "마을버스", + "node_id": "112900053", + "nxtStn": "인창중고" + }, + { + "stop_nm": "홍은유원아파트", + "ycode": "37.5969649835", + "stop_no": "13667", + "xcode": "126.9450463638", + "stop_type": "마을버스", + "node_id": "112900052", + "nxtStn": "동원베네스트주차장.두산위브입구" + }, + { + "stop_nm": "유진상가다리앞", + "ycode": "37.5919205228", + "stop_no": "13668", + "xcode": "126.9446843067", + "stop_type": "마을버스", + "node_id": "112900208", + "nxtStn": "홍제초등학교" + }, + { + "stop_nm": "문화촌현대아파트입구", + "ycode": "37.5926048425", + "stop_no": "13669", + "xcode": "126.9471389075", + "stop_type": "마을버스", + "node_id": "112900051", + "nxtStn": "문화공원입구" + }, + { + "stop_nm": "바비엥스위트", + "ycode": "37.5647772952", + "stop_no": "13683", + "xcode": "126.9673182162", + "stop_type": "일반차로", + "node_id": "101000248", + "nxtStn": "경찰청.동북아역사재단" + }, + { + "stop_nm": "종근당", + "ycode": "37.5598271919", + "stop_no": "13695", + "xcode": "126.9629183473", + "stop_type": "마을버스", + "node_id": "112900164", + "nxtStn": "충정로역5호선" + }, + { + "stop_nm": "이대농협", + "ycode": "37.5568236234", + "stop_no": "13698", + "xcode": "126.9440526436", + "stop_type": "마을버스", + "node_id": "112900183", + "nxtStn": "아트레온" + }, + { + "stop_nm": "미동초등학교", + "ycode": "37.5643964142", + "stop_no": "13699", + "xcode": "126.9651506262", + "stop_type": "마을버스", + "node_id": "112900162", + "nxtStn": "인창중고" + }, + { + "stop_nm": "인창중고", + "ycode": "37.5646637442", + "stop_no": "13700", + "xcode": "126.9641668008", + "stop_type": "마을버스", + "node_id": "112900165", + "nxtStn": "광산사우나" + }, + { + "stop_nm": "사천교", + "ycode": "37.5680630996", + "stop_no": "13715", + "xcode": "126.9180638508", + "stop_type": "마을버스", + "node_id": "112900050", + "nxtStn": "모래내시장" + }, + { + "stop_nm": "벽산아파트후문", + "ycode": "37.5962886959", + "stop_no": "13716", + "xcode": "126.9459766195", + "stop_type": "마을버스", + "node_id": "112900049", + "nxtStn": "홍은성당" + }, + { + "stop_nm": "현대백화점", + "ycode": "37.5561694068", + "stop_no": "13720", + "xcode": "126.9347143466", + "stop_type": "마을버스", + "node_id": "112900260", + "nxtStn": "신촌역" + }, + { + "stop_nm": "아트레온", + "ycode": "37.5562630013", + "stop_no": "13724", + "xcode": "126.940090405", + "stop_type": "마을버스", + "node_id": "112900226", + "nxtStn": "CGV신촌아트레온" + }, + { + "stop_nm": "신촌자이엘라", + "ycode": "37.556764", + "stop_no": "13725", + "xcode": "126.942534", + "stop_type": "마을버스", + "node_id": "112900184", + "nxtStn": "CGV신촌아트레온" + }, + { + "stop_nm": "인창중고", + "ycode": "37.564489", + "stop_no": "13726", + "xcode": "126.964204", + "stop_type": "마을버스", + "node_id": "112900047", + "nxtStn": "경기대후문" + }, + { + "stop_nm": "연희초등학교", + "ycode": "37.5699570285", + "stop_no": "13731", + "xcode": "126.9335745537", + "stop_type": "일반차로", + "node_id": "112000337", + "nxtStn": "한성화교중고교.서대문소방서" + }, + { + "stop_nm": "광산사우나", + "ycode": "37.5656091147", + "stop_no": "13737", + "xcode": "126.9645783982", + "stop_type": "마을버스", + "node_id": "112900046", + "nxtStn": "서대문성당" + }, + { + "stop_nm": "스위스그랜드호텔.현대아파트", + "ycode": "37.5893324262", + "stop_no": "13740", + "xcode": "126.9363778811", + "stop_type": "마을버스", + "node_id": "112900045", + "nxtStn": "삼거리" + }, + { + "stop_nm": "모래내시장", + "ycode": "37.5690928967", + "stop_no": "13747", + "xcode": "126.9156151886", + "stop_type": "마을버스", + "node_id": "112900044", + "nxtStn": "삼성래미안2차아파트" + }, + { + "stop_nm": "연희초등학교", + "ycode": "37.56972", + "stop_no": "13749", + "xcode": "126.93303", + "stop_type": "일반차로", + "node_id": "112000352", + "nxtStn": "연희3거리" + }, + { + "stop_nm": "홍은성당", + "ycode": "37.5960212696", + "stop_no": "13751", + "xcode": "126.9464082826", + "stop_type": "마을버스", + "node_id": "112900043", + "nxtStn": "벽산아파트정문" + }, + { + "stop_nm": "간호대입구올해피장애인복지센터", + "ycode": "37.5959314635", + "stop_no": "13754", + "xcode": "126.9491285283", + "stop_type": "마을버스", + "node_id": "112900042", + "nxtStn": "유원하나아파트" + }, + { + "stop_nm": "우리은행홍제동지점", + "ycode": "37.5917792198", + "stop_no": "13755", + "xcode": "126.9451782303", + "stop_type": "마을버스", + "node_id": "112900209", + "nxtStn": "문화촌현대아파트입구" + }, + { + "stop_nm": "미동초등학교", + "ycode": "37.5630924901", + "stop_no": "13764", + "xcode": "126.9650063417", + "stop_type": "마을버스", + "node_id": "112900166", + "nxtStn": "서대문역7번출구" + }, + { + "stop_nm": "충정로역", + "ycode": "37.5595348321", + "stop_no": "13766", + "xcode": "126.9645314698", + "stop_type": "일반차로", + "node_id": "112000365", + "nxtStn": "한국경제신문사.서소문역사공원" + }, + { + "stop_nm": "연희삼거리", + "ycode": "37.5715704986", + "stop_no": "13773", + "xcode": "126.9344980432", + "stop_type": "일반차로", + "node_id": "112000372", + "nxtStn": "모래내시장.가좌역" + }, + { + "stop_nm": "연희삼거리", + "ycode": "37.5695126174", + "stop_no": "13774", + "xcode": "126.9332681588", + "stop_type": "일반차로", + "node_id": "112000373", + "nxtStn": "서대문구청" + }, + { + "stop_nm": "서대문구청", + "ycode": "37.5784645604", + "stop_no": "13775", + "xcode": "126.9357996958", + "stop_type": "일반차로", + "node_id": "112000374", + "nxtStn": "연희삼거리" + }, + { + "stop_nm": "서대문구청", + "ycode": "37.5785143003", + "stop_no": "13776", + "xcode": "126.936131388", + "stop_type": "일반차로", + "node_id": "112000375", + "nxtStn": "그랜드힐튼호텔" + }, + { + "stop_nm": "그랜드힐튼호텔", + "ycode": "37.5878538931", + "stop_no": "13777", + "xcode": "126.9357565292", + "stop_type": "일반차로", + "node_id": "112000376", + "nxtStn": "홍제역.서대문세무서" + }, + { + "stop_nm": "그랜드힐튼호텔", + "ycode": "37.5880402875", + "stop_no": "13778", + "xcode": "126.9355163118", + "stop_type": "일반차로", + "node_id": "112000377", + "nxtStn": "서대문구청" + }, + { + "stop_nm": "CGV신촌아트레온", + "ycode": "37.5557927422", + "stop_no": "13793", + "xcode": "126.938554851", + "stop_type": "마을버스", + "node_id": "112900041", + "nxtStn": "신촌전철역" + }, + { + "stop_nm": "경기대후문", + "ycode": "37.5640060641", + "stop_no": "13794", + "xcode": "126.961672228", + "stop_type": "마을버스", + "node_id": "112900040", + "nxtStn": "금화장오거리" + }, + { + "stop_nm": "서대문성당", + "ycode": "37.5672714689", + "stop_no": "13795", + "xcode": "126.9640444243", + "stop_type": "마을버스", + "node_id": "112900173", + "nxtStn": "동명여중" + }, + { + "stop_nm": "삼거리", + "ycode": "37.5900046159", + "stop_no": "13796", + "xcode": "126.935433086", + "stop_type": "마을버스", + "node_id": "112900039", + "nxtStn": "차고앞" + }, + { + "stop_nm": "벽산아파트정문", + "ycode": "37.594645127", + "stop_no": "13798", + "xcode": "126.9460106487", + "stop_type": "마을버스", + "node_id": "112900038", + "nxtStn": "홍은사회복지관별관" + }, + { + "stop_nm": "서대문역7번출구", + "ycode": "37.5652394638", + "stop_no": "13801", + "xcode": "126.9669874701", + "stop_type": "마을버스", + "node_id": "112900037", + "nxtStn": "서대문경찰서" + }, + { + "stop_nm": "신촌전철역", + "ycode": "37.555388", + "stop_no": "13802", + "xcode": "126.937149", + "stop_type": "마을버스", + "node_id": "112900230", + "nxtStn": "연세로.명물거리" + }, + { + "stop_nm": "금화장오거리", + "ycode": "37.5644864668", + "stop_no": "13803", + "xcode": "126.9593378205", + "stop_type": "마을버스", + "node_id": "112900182", + "nxtStn": "뜨란채아파트101동" + }, + { + "stop_nm": "동명여중", + "ycode": "37.5679460471", + "stop_no": "13804", + "xcode": "126.9629448878", + "stop_type": "마을버스", + "node_id": "112900036", + "nxtStn": "영천시장입구" + }, + { + "stop_nm": "차고앞", + "ycode": "37.5915705415", + "stop_no": "13805", + "xcode": "126.9351293826", + "stop_type": "마을버스", + "node_id": "112900035", + "nxtStn": "홍은중학교" + }, + { + "stop_nm": "고은초교삼거리", + "ycode": "37.5842616936", + "stop_no": "13808", + "xcode": "126.9436845024", + "stop_type": "마을버스", + "node_id": "112900034", + "nxtStn": "명진아트빌라" + }, + { + "stop_nm": "영천시장입구", + "ycode": "37.5684530235", + "stop_no": "13813", + "xcode": "126.9618816426", + "stop_type": "마을버스", + "node_id": "112900032", + "nxtStn": "영천동" + }, + { + "stop_nm": "홍은중학교", + "ycode": "37.5926714357", + "stop_no": "13814", + "xcode": "126.9347015063", + "stop_type": "마을버스", + "node_id": "112900031", + "nxtStn": "미성아파트" + }, + { + "stop_nm": "정원여중입구", + "ycode": "37.5865602152", + "stop_no": "13816", + "xcode": "126.9346366412", + "stop_type": "마을버스", + "node_id": "112900030", + "nxtStn": "싸이버아파트" + }, + { + "stop_nm": "명진아트빌라", + "ycode": "37.5829135972", + "stop_no": "13818", + "xcode": "126.943546249", + "stop_type": "마을버스", + "node_id": "112900029", + "nxtStn": "종점" + }, + { + "stop_nm": "문화공원입구", + "ycode": "37.5942912091", + "stop_no": "13819", + "xcode": "126.9484966108", + "stop_type": "마을버스", + "node_id": "112900028", + "nxtStn": "동성교회" + }, + { + "stop_nm": "가재울초등학교", + "ycode": "37.574565", + "stop_no": "13820", + "xcode": "126.918356", + "stop_type": "마을버스", + "node_id": "112900233", + "nxtStn": "남가좌동아이파크후문" + }, + { + "stop_nm": "연대앞.세브란스병원", + "ycode": "37.560294", + "stop_no": "13821", + "xcode": "126.935592", + "stop_type": "마을버스", + "node_id": "112900188", + "nxtStn": "연희성당" + }, + { + "stop_nm": "미성아파트", + "ycode": "37.5936545113", + "stop_no": "13822", + "xcode": "126.9346802635", + "stop_type": "마을버스", + "node_id": "112900027", + "nxtStn": "종점" + }, + { + "stop_nm": "남가좌동아이파크후문", + "ycode": "37.5745040424", + "stop_no": "13823", + "xcode": "126.9206142993", + "stop_type": "마을버스", + "node_id": "112900224", + "nxtStn": "남가좌동아이파크정문" + }, + { + "stop_nm": "싸이버아파트", + "ycode": "37.5872194803", + "stop_no": "13824", + "xcode": "126.9340393252", + "stop_type": "마을버스", + "node_id": "112900026", + "nxtStn": "동원빌라" + }, + { + "stop_nm": "동신병원사거리", + "ycode": "37.5815669075", + "stop_no": "13826", + "xcode": "126.9356034175", + "stop_type": "마을버스", + "node_id": "112900025", + "nxtStn": "홍은2동주민센터" + }, + { + "stop_nm": "동성교회", + "ycode": "37.5941402463", + "stop_no": "13827", + "xcode": "126.9494683467", + "stop_type": "마을버스", + "node_id": "112900024", + "nxtStn": "오동나무" + }, + { + "stop_nm": "연희성당", + "ycode": "37.5630514409", + "stop_no": "13828", + "xcode": "126.9311005456", + "stop_type": "마을버스", + "node_id": "112900196", + "nxtStn": "연희브라운스톤" + }, + { + "stop_nm": "남가좌동아이파크정문", + "ycode": "37.5749489217", + "stop_no": "13830", + "xcode": "126.9215738878", + "stop_type": "마을버스", + "node_id": "112900225", + "nxtStn": "연가교" + }, + { + "stop_nm": "동원빌라", + "ycode": "37.5871586938", + "stop_no": "13831", + "xcode": "126.9333033629", + "stop_type": "마을버스", + "node_id": "112900023", + "nxtStn": "삼성그린빌" + }, + { + "stop_nm": "홍은2동주민센터", + "ycode": "37.5809086238", + "stop_no": "13832", + "xcode": "126.934715178", + "stop_type": "마을버스", + "node_id": "112900022", + "nxtStn": "서대문등기소" + }, + { + "stop_nm": "오동나무", + "ycode": "37.593009015", + "stop_no": "13833", + "xcode": "126.9507351582", + "stop_type": "마을버스", + "node_id": "112900021", + "nxtStn": "금강빌라.인왕중학교" + }, + { + "stop_nm": "연희브라운스톤", + "ycode": "37.5657082519", + "stop_no": "13834", + "xcode": "126.9302298489", + "stop_type": "마을버스", + "node_id": "112900020", + "nxtStn": "하나은행연희동지점" + }, + { + "stop_nm": "3호선독립문역", + "ycode": "37.5724599224", + "stop_no": "13835", + "xcode": "126.9584504401", + "stop_type": "마을버스", + "node_id": "112900019", + "nxtStn": "이진아기념도서관" + }, + { + "stop_nm": "삼성그린빌", + "ycode": "37.5868978487", + "stop_no": "13837", + "xcode": "126.9325460681", + "stop_type": "마을버스", + "node_id": "112900018", + "nxtStn": "종점" + }, + { + "stop_nm": "서대문등기소", + "ycode": "37.5803213337", + "stop_no": "13838", + "xcode": "126.9334962806", + "stop_type": "마을버스", + "node_id": "112900017", + "nxtStn": "서대문문화체육회관" + }, + { + "stop_nm": "금강빌라.인왕중학교", + "ycode": "37.592209", + "stop_no": "13839", + "xcode": "126.951628", + "stop_type": "마을버스", + "node_id": "112900016", + "nxtStn": "버드나무가게" + }, + { + "stop_nm": "하나은행연희동지점", + "ycode": "37.5669938067", + "stop_no": "13840", + "xcode": "126.931247474", + "stop_type": "마을버스", + "node_id": "112900015", + "nxtStn": "국민은행" + }, + { + "stop_nm": "이진아기념도서관", + "ycode": "37.5727088538", + "stop_no": "13841", + "xcode": "126.9565857109", + "stop_type": "마을버스", + "node_id": "112900014", + "nxtStn": "극동아파트119동" + }, + { + "stop_nm": "서대문문화체육회관", + "ycode": "37.581535", + "stop_no": "13844", + "xcode": "126.931859", + "stop_type": "마을버스", + "node_id": "112900013", + "nxtStn": "팔각정" + }, + { + "stop_nm": "버드나무가게", + "ycode": "37.590994104", + "stop_no": "13845", + "xcode": "126.9527510089", + "stop_type": "마을버스", + "node_id": "112900012", + "nxtStn": "삼거리연탄.약수터입구" + }, + { + "stop_nm": "종근당후문", + "ycode": "37.5594697141", + "stop_no": "13846", + "xcode": "126.9637436891", + "stop_type": "마을버스", + "node_id": "112900011", + "nxtStn": "아현가구단지" + }, + { + "stop_nm": "사러가쇼핑", + "ycode": "37.567212", + "stop_no": "13847", + "xcode": "126.930373", + "stop_type": "마을버스", + "node_id": "112900064", + "nxtStn": "민속식당" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5677564703", + "stop_no": "13848", + "xcode": "126.9318331689", + "stop_type": "마을버스", + "node_id": "112900197", + "nxtStn": "연희초등학교" + }, + { + "stop_nm": "극동아파트119동", + "ycode": "37.5729676798", + "stop_no": "13849", + "xcode": "126.9547526626", + "stop_type": "마을버스", + "node_id": "112900010", + "nxtStn": "이진아기념도서관" + }, + { + "stop_nm": "사천교", + "ycode": "37.5683166376", + "stop_no": "13850", + "xcode": "126.9185424288", + "stop_type": "마을버스", + "node_id": "112900009", + "nxtStn": "사천고가앞" + }, + { + "stop_nm": "팔각정", + "ycode": "37.583313833", + "stop_no": "13852", + "xcode": "126.9303357066", + "stop_type": "마을버스", + "node_id": "112900008", + "nxtStn": "명지고후문" + }, + { + "stop_nm": "삼거리연탄.약수터입구", + "ycode": "37.5904725788", + "stop_no": "13853", + "xcode": "126.9532665726", + "stop_type": "마을버스", + "node_id": "112900210", + "nxtStn": "개미마을" + }, + { + "stop_nm": "민속식당", + "ycode": "37.5679615197", + "stop_no": "13855", + "xcode": "126.9296164448", + "stop_type": "마을버스", + "node_id": "112900118", + "nxtStn": "서연중학교" + }, + { + "stop_nm": "이진아기념도서관", + "ycode": "37.5726421343", + "stop_no": "13857", + "xcode": "126.9564804632", + "stop_type": "마을버스", + "node_id": "112900119", + "nxtStn": "3호선독립문역" + }, + { + "stop_nm": "유진상가", + "ycode": "37.591660052", + "stop_no": "13858", + "xcode": "126.9426778859", + "stop_type": "마을버스", + "node_id": "112900120", + "nxtStn": "우리은행홍제동지점" + }, + { + "stop_nm": "명지고후문", + "ycode": "37.5841656006", + "stop_no": "13859", + "xcode": "126.9292207427", + "stop_type": "마을버스", + "node_id": "112900222", + "nxtStn": "백련사" + }, + { + "stop_nm": "개미마을", + "ycode": "37.589712", + "stop_no": "13860", + "xcode": "126.95378", + "stop_type": "마을버스", + "node_id": "112900206", + "nxtStn": "종점" + }, + { + "stop_nm": "아현전철역", + "ycode": "37.5574907123", + "stop_no": "13861", + "xcode": "126.9577230295", + "stop_type": "마을버스", + "node_id": "112900121", + "nxtStn": "북아현로입구" + }, + { + "stop_nm": "서연중학교", + "ycode": "37.5691422348", + "stop_no": "13862", + "xcode": "126.928589688", + "stop_type": "마을버스", + "node_id": "112900122", + "nxtStn": "평화교회" + }, + { + "stop_nm": "3호선독립문역", + "ycode": "37.5724049323", + "stop_no": "13864", + "xcode": "126.9583836762", + "stop_type": "마을버스", + "node_id": "112900123", + "nxtStn": "극동아파트입구" + }, + { + "stop_nm": "이대입구", + "ycode": "37.5568998934", + "stop_no": "13865", + "xcode": "126.9452863295", + "stop_type": "마을버스", + "node_id": "112900185", + "nxtStn": "신촌아트레온" + }, + { + "stop_nm": "백련사", + "ycode": "37.5849059393", + "stop_no": "13866", + "xcode": "126.9286278498", + "stop_type": "마을버스", + "node_id": "112900221", + "nxtStn": "종점" + }, + { + "stop_nm": "평화교회", + "ycode": "37.5695046821", + "stop_no": "13867", + "xcode": "126.9260014418", + "stop_type": "마을버스", + "node_id": "112900124", + "nxtStn": "종점" + }, + { + "stop_nm": "극동아파트입구", + "ycode": "37.5719201973", + "stop_no": "13869", + "xcode": "126.9585322513", + "stop_type": "마을버스", + "node_id": "112900174", + "nxtStn": "삼호아파트.천연동주민센터" + }, + { + "stop_nm": "신촌아트레온", + "ycode": "37.5564894962", + "stop_no": "13870", + "xcode": "126.9407252016", + "stop_type": "마을버스", + "node_id": "112900125", + "nxtStn": "신촌역" + }, + { + "stop_nm": "북아현동주민센터", + "ycode": "37.559643", + "stop_no": "13871", + "xcode": "126.956777", + "stop_type": "마을버스", + "node_id": "112900126", + "nxtStn": "경남아파트.북아현119안전센터" + }, + { + "stop_nm": "삼호아파트.천연동주민센터", + "ycode": "37.5707914279", + "stop_no": "13874", + "xcode": "126.9593909971", + "stop_type": "마을버스", + "node_id": "112900127", + "nxtStn": "영천동" + }, + { + "stop_nm": "홍은초등학교.간호대입구", + "ycode": "37.5967926054", + "stop_no": "13875", + "xcode": "126.9483675672", + "stop_type": "마을버스", + "node_id": "112900128", + "nxtStn": "간호대정문" + }, + { + "stop_nm": "경남아파트.북아현119안전센터", + "ycode": "37.5607808911", + "stop_no": "13876", + "xcode": "126.9560391181", + "stop_type": "마을버스", + "node_id": "112900179", + "nxtStn": "중앙여고" + }, + { + "stop_nm": "하나로마트.동신병원", + "ycode": "37.5800385838", + "stop_no": "13877", + "xcode": "126.9354666025", + "stop_type": "마을버스", + "node_id": "112900129", + "nxtStn": "홍은2동어린이집앞" + }, + { + "stop_nm": "영천시장입구", + "ycode": "37.5689547887", + "stop_no": "13878", + "xcode": "126.9614410169", + "stop_type": "마을버스", + "node_id": "112900130", + "nxtStn": "감리신학대학교" + }, + { + "stop_nm": "간호대정문", + "ycode": "37.597314", + "stop_no": "13879", + "xcode": "126.947135", + "stop_type": "마을버스", + "node_id": "112900131", + "nxtStn": "호박골다리" + }, + { + "stop_nm": "중앙여고", + "ycode": "37.562059", + "stop_no": "13880", + "xcode": "126.954952", + "stop_type": "마을버스", + "node_id": "112900132", + "nxtStn": "힐스테이트신촌.신촌푸르지오1단지후문" + }, + { + "stop_nm": "중앙여고", + "ycode": "37.562450459", + "stop_no": "13881", + "xcode": "126.9556170486", + "stop_type": "마을버스", + "node_id": "112900133", + "nxtStn": "추계초등학교" + }, + { + "stop_nm": "홍은2동어린이집앞", + "ycode": "37.5795467759", + "stop_no": "13882", + "xcode": "126.9341740353", + "stop_type": "마을버스", + "node_id": "112900134", + "nxtStn": "홍제천입구" + }, + { + "stop_nm": "감리신학대학교", + "ycode": "37.5679216001", + "stop_no": "13883", + "xcode": "126.9625724585", + "stop_type": "마을버스", + "node_id": "112900135", + "nxtStn": "서대문센트레빌" + }, + { + "stop_nm": "추계초등학교", + "ycode": "37.5636952525", + "stop_no": "13885", + "xcode": "126.9542624655", + "stop_type": "마을버스", + "node_id": "112900137", + "nxtStn": "종점" + }, + { + "stop_nm": "두산아파트", + "ycode": "37.5787201694", + "stop_no": "13886", + "xcode": "126.9320428222", + "stop_type": "마을버스", + "node_id": "112900138", + "nxtStn": "종점" + }, + { + "stop_nm": "서대문센트레빌", + "ycode": "37.5671723156", + "stop_no": "13887", + "xcode": "126.9639357971", + "stop_type": "마을버스", + "node_id": "112900175", + "nxtStn": "광산사우나" + }, + { + "stop_nm": "포방시장", + "ycode": "37.5993508468", + "stop_no": "13888", + "xcode": "126.9485644718", + "stop_type": "마을버스", + "node_id": "112900139", + "nxtStn": "포방공영주차장" + }, + { + "stop_nm": "홍은2동주민센터", + "ycode": "37.5804137793", + "stop_no": "13891", + "xcode": "126.9344518005", + "stop_type": "마을버스", + "node_id": "112900141", + "nxtStn": "서서울농협홍은지점.동신병원" + }, + { + "stop_nm": "광산사우나", + "ycode": "37.5656108726", + "stop_no": "13892", + "xcode": "126.9644312366", + "stop_type": "마을버스", + "node_id": "112900142", + "nxtStn": "인창중고" + }, + { + "stop_nm": "포방공영주차장", + "ycode": "37.6008595246", + "stop_no": "13893", + "xcode": "126.9491591491", + "stop_type": "마을버스", + "node_id": "112900143", + "nxtStn": "풍림.극동아파트" + }, + { + "stop_nm": "힐스테이트신촌.신촌푸르지오1단지후문", + "ycode": "37.560896", + "stop_no": "13894", + "xcode": "126.95155", + "stop_type": "마을버스", + "node_id": "112900144", + "nxtStn": "초원약국" + }, + { + "stop_nm": "인창중고", + "ycode": "37.564719", + "stop_no": "13895", + "xcode": "126.964122", + "stop_type": "마을버스", + "node_id": "112900167", + "nxtStn": "미동초교" + }, + { + "stop_nm": "호박골다리", + "ycode": "37.598138", + "stop_no": "13897", + "xcode": "126.946883", + "stop_type": "마을버스", + "node_id": "112900145", + "nxtStn": "포방시장" + }, + { + "stop_nm": "초원약국", + "ycode": "37.5598106586", + "stop_no": "13898", + "xcode": "126.9498696017", + "stop_type": "마을버스", + "node_id": "112900146", + "nxtStn": "종점" + }, + { + "stop_nm": "홍은동국민주택", + "ycode": "37.6051967755", + "stop_no": "13902", + "xcode": "126.9499071147", + "stop_type": "마을버스", + "node_id": "112900113", + "nxtStn": "종점" + }, + { + "stop_nm": "풍림.극동아파트", + "ycode": "37.6034755286", + "stop_no": "13905", + "xcode": "126.9495050706", + "stop_type": "마을버스", + "node_id": "112900147", + "nxtStn": "홍은동국민주택" + }, + { + "stop_nm": "홍은동국민주택", + "ycode": "37.6056464425", + "stop_no": "13907", + "xcode": "126.949965709", + "stop_type": "마을버스", + "node_id": "112900217", + "nxtStn": "종점" + }, + { + "stop_nm": "홍제역.3번출구", + "ycode": "37.5884321956", + "stop_no": "13911", + "xcode": "126.9442328155", + "stop_type": "일반차로", + "node_id": "112000413", + "nxtStn": "홍제우체국" + }, + { + "stop_nm": "홍제우체국", + "ycode": "37.586761", + "stop_no": "13912", + "xcode": "126.946335", + "stop_type": "마을버스", + "node_id": "112900204", + "nxtStn": "신연중학교서대문도서관" + }, + { + "stop_nm": "홍제2동주민센터", + "ycode": "37.5861855115", + "stop_no": "13913", + "xcode": "126.949649234", + "stop_type": "마을버스", + "node_id": "112900148", + "nxtStn": "인왕산현대아파트입구" + }, + { + "stop_nm": "인왕산현대아파트입구", + "ycode": "37.5854477501", + "stop_no": "13915", + "xcode": "126.9479674436", + "stop_type": "마을버스", + "node_id": "112900214", + "nxtStn": "홍제역.1번출구" + }, + { + "stop_nm": "삼호아파트.천연동주민센터", + "ycode": "37.5704846345", + "stop_no": "13916", + "xcode": "126.9601123504", + "stop_type": "마을버스", + "node_id": "112900149", + "nxtStn": "독립문공원.극동아파트" + }, + { + "stop_nm": "홍제역.1번출구", + "ycode": "37.5890349366", + "stop_no": "13917", + "xcode": "126.944047791", + "stop_type": "일반차로", + "node_id": "112000411", + "nxtStn": "유진상가.인왕시장" + }, + { + "stop_nm": "유진상가.인왕시장", + "ycode": "37.5907884605", + "stop_no": "13918", + "xcode": "126.9421882308", + "stop_type": "일반차로", + "node_id": "112000412", + "nxtStn": "인왕시장" + }, + { + "stop_nm": "연희브라운스톤", + "ycode": "37.5660497076", + "stop_no": "13919", + "xcode": "126.9301310454", + "stop_type": "마을버스", + "node_id": "112900193", + "nxtStn": "서대문우체국" + }, + { + "stop_nm": "신촌기차역", + "ycode": "37.558729", + "stop_no": "13922", + "xcode": "126.942636", + "stop_type": "마을버스", + "node_id": "112900186", + "nxtStn": "신촌자이엘라" + }, + { + "stop_nm": "인왕산현대아파트입구", + "ycode": "37.5851813121", + "stop_no": "13923", + "xcode": "126.9487531269", + "stop_type": "마을버스", + "node_id": "112900151", + "nxtStn": "인왕산현대아파트101동" + }, + { + "stop_nm": "인왕산현대아파트117동", + "ycode": "37.586306", + "stop_no": "13924", + "xcode": "126.951019", + "stop_type": "마을버스", + "node_id": "112900212", + "nxtStn": "인왕산현대아파트117동" + }, + { + "stop_nm": "북아현로입구", + "ycode": "37.5581795882", + "stop_no": "13926", + "xcode": "126.9564549195", + "stop_type": "마을버스", + "node_id": "112900152", + "nxtStn": "북아현동주민센터" + }, + { + "stop_nm": "인왕산현대아파트117동", + "ycode": "37.5864158661", + "stop_no": "13927", + "xcode": "126.9510203195", + "stop_type": "마을버스", + "node_id": "112900213", + "nxtStn": "홍제2동주민센터" + }, + { + "stop_nm": "이대전철역", + "ycode": "37.5569744833", + "stop_no": "13928", + "xcode": "126.9468188341", + "stop_type": "마을버스", + "node_id": "112900187", + "nxtStn": "이대농협" + }, + { + "stop_nm": "유진상가", + "ycode": "37.590665", + "stop_no": "13929", + "xcode": "126.941944", + "stop_type": "마을버스", + "node_id": "112900153", + "nxtStn": "홍제역.3번출구" + }, + { + "stop_nm": "인왕산현대아파트101동", + "ycode": "37.5861227688", + "stop_no": "13930", + "xcode": "126.9504373685", + "stop_type": "마을버스", + "node_id": "112900154", + "nxtStn": "인왕산현대아파트117동" + }, + { + "stop_nm": "홍은2동주민센터", + "ycode": "37.5801955537", + "stop_no": "13933", + "xcode": "126.9341610096", + "stop_type": "마을버스", + "node_id": "112900155", + "nxtStn": "서대문구보건소별관" + }, + { + "stop_nm": "뜨란채아파트101동", + "ycode": "37.5658549579", + "stop_no": "13934", + "xcode": "126.958565046", + "stop_type": "마을버스", + "node_id": "112900157", + "nxtStn": "금화장오거리" + }, + { + "stop_nm": "뜨란채아파트101동", + "ycode": "37.5657891996", + "stop_no": "13935", + "xcode": "126.9586262109", + "stop_type": "마을버스", + "node_id": "112900156", + "nxtStn": "종점" + }, + { + "stop_nm": "홍지문35통", + "ycode": "37.596795", + "stop_no": "13936", + "xcode": "126.956141", + "stop_type": "마을버스", + "node_id": "112900211", + "nxtStn": "옥천교앞" + }, + { + "stop_nm": "옥천교앞", + "ycode": "37.59636", + "stop_no": "13937", + "xcode": "126.954365", + "stop_type": "마을버스", + "node_id": "112900158", + "nxtStn": "유원하나아파트" + }, + { + "stop_nm": "대명빌라", + "ycode": "37.5729270056", + "stop_no": "13938", + "xcode": "126.9270218704", + "stop_type": "마을버스", + "node_id": "112900234", + "nxtStn": "연희상가아파트" + }, + { + "stop_nm": "인왕시장", + "ycode": "37.591139002", + "stop_no": "13939", + "xcode": "126.942912416", + "stop_type": "마을버스", + "node_id": "112900235", + "nxtStn": "우리은행홍제동지점" + }, + { + "stop_nm": "창덕에버빌", + "ycode": "37.569392", + "stop_no": "13940", + "xcode": "126.917428", + "stop_type": "마을버스", + "node_id": "112900159", + "nxtStn": "사천교" + }, + { + "stop_nm": "영천동", + "ycode": "37.570132209", + "stop_no": "13941", + "xcode": "126.9605121088", + "stop_type": "마을버스", + "node_id": "112900160", + "nxtStn": "삼호아파트.천연동주민센터" + }, + { + "stop_nm": "독립문", + "ycode": "37.5714816578", + "stop_no": "13942", + "xcode": "126.9593725088", + "stop_type": "마을버스", + "node_id": "112900176", + "nxtStn": "현대그린마트" + }, + { + "stop_nm": "영천동", + "ycode": "37.5700627813", + "stop_no": "13943", + "xcode": "126.960381957", + "stop_type": "마을버스", + "node_id": "112900161", + "nxtStn": "영천시장입구" + }, + { + "stop_nm": "동원베네스트아파트입구", + "ycode": "37.598258", + "stop_no": "13944", + "xcode": "126.944763", + "stop_type": "마을버스", + "node_id": "112900237", + "nxtStn": "홍은유원아파트입구" + }, + { + "stop_nm": "홍은유원아파트입구", + "ycode": "37.597227", + "stop_no": "13945", + "xcode": "126.945185", + "stop_type": "마을버스", + "node_id": "112900236", + "nxtStn": "벽산아파트후문" + }, + { + "stop_nm": "동원베네스트주차장.두산위브입구", + "ycode": "37.599114", + "stop_no": "13946", + "xcode": "126.944217", + "stop_type": "마을버스", + "node_id": "112900261", + "nxtStn": "동원베네스트아파트입구" + }, + { + "stop_nm": "홍은사회복지관별관", + "ycode": "37.594126", + "stop_no": "13947", + "xcode": "126.947438", + "stop_type": "마을버스", + "node_id": "112900228", + "nxtStn": "문화촌현대아파트" + }, + { + "stop_nm": "서강아파트1차정문앞", + "ycode": "37.5949183961", + "stop_no": "13952", + "xcode": "126.934065371", + "stop_type": "마을버스", + "node_id": "112900229", + "nxtStn": "미성아파트" + }, + { + "stop_nm": "연희상가아파트", + "ycode": "37.573124", + "stop_no": "13953", + "xcode": "126.928045", + "stop_type": "마을버스", + "node_id": "112900238", + "nxtStn": "행복하우스" + }, + { + "stop_nm": "봉원사입구", + "ycode": "37.566731", + "stop_no": "13955", + "xcode": "126.946423", + "stop_type": "마을버스", + "node_id": "112900239", + "nxtStn": "삼호아파트" + }, + { + "stop_nm": "증산역(증산2교)", + "ycode": "37.583707", + "stop_no": "13956", + "xcode": "126.911353", + "stop_type": "마을버스", + "node_id": "111901147", + "nxtStn": "북가좌119안전센터" + }, + { + "stop_nm": "행운부동산앞", + "ycode": "37.5810205908", + "stop_no": "13957", + "xcode": "126.9167321501", + "stop_type": "마을버스", + "node_id": "112900240", + "nxtStn": "은가경로당앞" + }, + { + "stop_nm": "은가경로당앞", + "ycode": "37.58104", + "stop_no": "13958", + "xcode": "126.917958", + "stop_type": "마을버스", + "node_id": "112900241", + "nxtStn": "삼성유치원(씨유앞)" + }, + { + "stop_nm": "삼성유치원(씨유앞)", + "ycode": "37.5816494679", + "stop_no": "13959", + "xcode": "126.9185478211", + "stop_type": "마을버스", + "node_id": "112900242", + "nxtStn": "두란노어린이집앞" + }, + { + "stop_nm": "두란노어린이집앞", + "ycode": "37.5816324631", + "stop_no": "13960", + "xcode": "126.920715046", + "stop_type": "마을버스", + "node_id": "112900243", + "nxtStn": "은혜감사어린이집" + }, + { + "stop_nm": "은혜감사어린이집", + "ycode": "37.582046", + "stop_no": "13961", + "xcode": "126.92247", + "stop_type": "마을버스", + "node_id": "112900244", + "nxtStn": "백련어린이공원(공영주차장)" + }, + { + "stop_nm": "백련어린이공원(공영주차장)", + "ycode": "37.582627", + "stop_no": "13962", + "xcode": "126.923673", + "stop_type": "마을버스", + "node_id": "112900245", + "nxtStn": "상록운수" + }, + { + "stop_nm": "상록운수", + "ycode": "37.5840983069", + "stop_no": "13963", + "xcode": "126.9233328162", + "stop_type": "마을버스", + "node_id": "112900246", + "nxtStn": "명지전문대.충암중고등학교" + }, + { + "stop_nm": "명지대학교교회", + "ycode": "37.58258", + "stop_no": "13964", + "xcode": "126.925364", + "stop_type": "마을버스", + "node_id": "112900247", + "nxtStn": "명지대후문(세븐일레븐)" + }, + { + "stop_nm": "명지대후문(세븐일레븐)", + "ycode": "37.5814977632", + "stop_no": "13965", + "xcode": "126.9248407889", + "stop_type": "마을버스", + "node_id": "112900248", + "nxtStn": "백련어린이공원" + }, + { + "stop_nm": "백련어린이공원", + "ycode": "37.582254", + "stop_no": "13966", + "xcode": "126.923995", + "stop_type": "마을버스", + "node_id": "112900249", + "nxtStn": "은혜감사어린이집앞" + }, + { + "stop_nm": "은혜감사어린이집앞", + "ycode": "37.582089", + "stop_no": "13967", + "xcode": "126.922361", + "stop_type": "마을버스", + "node_id": "112900250", + "nxtStn": "이마트24앞" + }, + { + "stop_nm": "두란노어린이집", + "ycode": "37.5818014448", + "stop_no": "13968", + "xcode": "126.9204911769", + "stop_type": "마을버스", + "node_id": "112900251", + "nxtStn": "삼성유치원앞(씨유)" + }, + { + "stop_nm": "삼성유치원앞(씨유)", + "ycode": "37.581742", + "stop_no": "13969", + "xcode": "126.918481", + "stop_type": "마을버스", + "node_id": "112900252", + "nxtStn": "행운부동산앞" + }, + { + "stop_nm": "행운부동산앞", + "ycode": "37.5810418471", + "stop_no": "13971", + "xcode": "126.9171076593", + "stop_type": "마을버스", + "node_id": "112900254", + "nxtStn": "DMC두산위브아파트" + }, + { + "stop_nm": "북가좌사거리", + "ycode": "37.5815492394", + "stop_no": "13972", + "xcode": "126.9137968727", + "stop_type": "마을버스", + "node_id": "112900255", + "nxtStn": "북가좌오거리" + }, + { + "stop_nm": "북가좌오거리", + "ycode": "37.5811559999", + "stop_no": "13973", + "xcode": "126.9124960014", + "stop_type": "마을버스", + "node_id": "112900256", + "nxtStn": "북가좌2동주민센터" + }, + { + "stop_nm": "북가좌2동주민센터", + "ycode": "37.581368", + "stop_no": "13974", + "xcode": "126.911175", + "stop_type": "마을버스", + "node_id": "112900257", + "nxtStn": "해담는다리앞" + }, + { + "stop_nm": "해담는다리앞", + "ycode": "37.582228", + "stop_no": "13975", + "xcode": "126.909381", + "stop_type": "마을버스", + "node_id": "111901148", + "nxtStn": "증산2교" + }, + { + "stop_nm": "이마트24앞", + "ycode": "37.581934", + "stop_no": "13976", + "xcode": "126.921477", + "stop_type": "마을버스", + "node_id": "112900258", + "nxtStn": "두란노어린이집" + }, + { + "stop_nm": "증산2교", + "ycode": "37.583907", + "stop_no": "13977", + "xcode": "126.910934", + "stop_type": "마을버스", + "node_id": "111001129", + "nxtStn": "종점" + }, + { + "stop_nm": "홍제천입구", + "ycode": "37.578691", + "stop_no": "13978", + "xcode": "126.93194", + "stop_type": "마을버스", + "node_id": "112900259", + "nxtStn": "두산아파트" + }, + { + "stop_nm": "연희IC(가상)", + "ycode": "37.5688523226", + "stop_no": "13996", + "xcode": "126.9180003475", + "stop_type": "가상정류장", + "node_id": "112000435", + "nxtStn": "홍은IC(가상)" + }, + { + "stop_nm": "홍은IC(가상)", + "ycode": "37.5950187272", + "stop_no": "13997", + "xcode": "126.9497329793", + "stop_type": "가상정류장", + "node_id": "112000434", + "nxtStn": "정릉2동주민센터" + }, + { + "stop_nm": "마포역", + "ycode": "37.540947", + "stop_no": "14001", + "xcode": "126.947967", + "stop_type": "중앙차로", + "node_id": "113000001", + "nxtStn": "공덕역" + }, + { + "stop_nm": "마포역", + "ycode": "37.540277175", + "stop_no": "14002", + "xcode": "126.9467854312", + "stop_type": "중앙차로", + "node_id": "113000002", + "nxtStn": "여의도환승센터" + }, + { + "stop_nm": "공덕역", + "ycode": "37.5436049054", + "stop_no": "14003", + "xcode": "126.9509046196", + "stop_type": "중앙차로", + "node_id": "113000003", + "nxtStn": "아현동주민센터" + }, + { + "stop_nm": "공덕역", + "ycode": "37.5445016819", + "stop_no": "14004", + "xcode": "126.9513544428", + "stop_type": "중앙차로", + "node_id": "113000004", + "nxtStn": "마포역서울가든호텔" + }, + { + "stop_nm": "아현동주민센터", + "ycode": "37.546364876", + "stop_no": "14005", + "xcode": "126.9529070766", + "stop_type": "중앙차로", + "node_id": "113000005", + "nxtStn": "마포경찰서" + }, + { + "stop_nm": "아현동주민센터", + "ycode": "37.5470777755", + "stop_no": "14006", + "xcode": "126.9532416189", + "stop_type": "중앙차로", + "node_id": "113000006", + "nxtStn": "공덕역" + }, + { + "stop_nm": "마포경찰서", + "ycode": "37.5501999331", + "stop_no": "14007", + "xcode": "126.9552123486", + "stop_type": "중앙차로", + "node_id": "113000007", + "nxtStn": "아현초등학교" + }, + { + "stop_nm": "마포경찰서", + "ycode": "37.5507703612", + "stop_no": "14008", + "xcode": "126.9553048134", + "stop_type": "중앙차로", + "node_id": "113000008", + "nxtStn": "아현동주민센터" + }, + { + "stop_nm": "아현초등학교", + "ycode": "37.5540780443", + "stop_no": "14009", + "xcode": "126.9571001865", + "stop_type": "중앙차로", + "node_id": "113000009", + "nxtStn": "충정로역" + }, + { + "stop_nm": "아현초등학교", + "ycode": "37.5548981253", + "stop_no": "14010", + "xcode": "126.9573351399", + "stop_type": "중앙차로", + "node_id": "113000010", + "nxtStn": "마포경찰서" + }, + { + "stop_nm": "합정역", + "ycode": "37.549002", + "stop_no": "14011", + "xcode": "126.91299", + "stop_type": "중앙차로", + "node_id": "113000424", + "nxtStn": "서교동" + }, + { + "stop_nm": "합정역", + "ycode": "37.5495459112", + "stop_no": "14012", + "xcode": "126.9137990853", + "stop_type": "중앙차로", + "node_id": "113000412", + "nxtStn": "양화대교전망카페" + }, + { + "stop_nm": "서교동", + "ycode": "37.5536367406", + "stop_no": "14013", + "xcode": "126.9195815796", + "stop_type": "중앙차로", + "node_id": "113000423", + "nxtStn": "홍대입구역" + }, + { + "stop_nm": "서교동", + "ycode": "37.5541724774", + "stop_no": "14014", + "xcode": "126.9200216767", + "stop_type": "중앙차로", + "node_id": "113000413", + "nxtStn": "합정역" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.556641", + "stop_no": "14015", + "xcode": "126.923466", + "stop_type": "중앙차로", + "node_id": "113000422", + "nxtStn": "신촌오거리.현대백화점" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.557325", + "stop_no": "14016", + "xcode": "126.924317", + "stop_type": "중앙차로", + "node_id": "113000414", + "nxtStn": "서교동" + }, + { + "stop_nm": "동교동삼거리", + "ycode": "37.558069", + "stop_no": "14061", + "xcode": "126.928546", + "stop_type": "중앙차로", + "node_id": "113000421", + "nxtStn": "신촌농협.하나로마트" + }, + { + "stop_nm": "신촌오거리.현대백화점", + "ycode": "37.5553966479", + "stop_no": "14062", + "xcode": "126.9358930618", + "stop_type": "중앙차로", + "node_id": "113000420", + "nxtStn": "신촌오거리.2호선신촌역" + }, + { + "stop_nm": "신촌오거리.2호선신촌역", + "ycode": "37.55611", + "stop_no": "14063", + "xcode": "126.94015", + "stop_type": "중앙차로", + "node_id": "113000419", + "nxtStn": "이대역" + }, + { + "stop_nm": "이대역", + "ycode": "37.556652", + "stop_no": "14064", + "xcode": "126.944495", + "stop_type": "중앙차로", + "node_id": "113000418", + "nxtStn": "웨딩타운" + }, + { + "stop_nm": "웨딩타운", + "ycode": "37.557092", + "stop_no": "14067", + "xcode": "126.951517", + "stop_type": "중앙차로", + "node_id": "113000476", + "nxtStn": "아현역" + }, + { + "stop_nm": "아현역", + "ycode": "37.557293", + "stop_no": "14068", + "xcode": "126.954943", + "stop_type": "중앙차로", + "node_id": "113000477", + "nxtStn": "충정로역" + }, + { + "stop_nm": "홍대입구역(가상)", + "ycode": "37.5552260552", + "stop_no": "14096", + "xcode": "126.9218643721", + "stop_type": "가상정류장", + "node_id": "113000505", + "nxtStn": "홍대입구역" + }, + { + "stop_nm": "홍대입구역(가상)", + "ycode": "37.5586515499", + "stop_no": "14097", + "xcode": "126.9259252365", + "stop_type": "가상정류장", + "node_id": "113000506", + "nxtStn": "홍대입구역" + }, + { + "stop_nm": "합정역(가상)", + "ycode": "37.5478537853", + "stop_no": "14098", + "xcode": "126.9099652884", + "stop_type": "가상정류장", + "node_id": "113000508", + "nxtStn": "합정역" + }, + { + "stop_nm": "합정역(가상)", + "ycode": "37.5514613841", + "stop_no": "14099", + "xcode": "126.9161214841", + "stop_type": "가상정류장", + "node_id": "113000509", + "nxtStn": "합정역" + }, + { + "stop_nm": "아현동가구단지", + "ycode": "37.557975", + "stop_no": "14100", + "xcode": "126.960662", + "stop_type": "일반차로", + "node_id": "113000474", + "nxtStn": "충정로역" + }, + { + "stop_nm": "마포구청.성산자동차검사소", + "ycode": "37.5649538546", + "stop_no": "14101", + "xcode": "126.9024231067", + "stop_type": "일반차로", + "node_id": "113000011", + "nxtStn": "월드컵경기장남측.월드컵공원" + }, + { + "stop_nm": "마포구청", + "ycode": "37.5649023958", + "stop_no": "14102", + "xcode": "126.9018904171", + "stop_type": "일반차로", + "node_id": "113000012", + "nxtStn": "마포구청역입구" + }, + { + "stop_nm": "마포농수산물시장.월드컵공원", + "ycode": "37.566106", + "stop_no": "14103", + "xcode": "126.897454", + "stop_type": "일반차로", + "node_id": "113000013", + "nxtStn": "마포구청" + }, + { + "stop_nm": "월드컵경기장남측.월드컵공원", + "ycode": "37.566664", + "stop_no": "14104", + "xcode": "126.896317", + "stop_type": "일반차로", + "node_id": "113000014", + "nxtStn": "월드컵공원입구.문화비축기지입구" + }, + { + "stop_nm": "월드컵경기장서측.문화비축기지", + "ycode": "37.569236499", + "stop_no": "14105", + "xcode": "126.895467768", + "stop_type": "일반차로", + "node_id": "113000015", + "nxtStn": "증산종합시장.증산중학교입구" + }, + { + "stop_nm": "월드컵경기장서측.문화비축기지", + "ycode": "37.5694982692", + "stop_no": "14106", + "xcode": "126.8949636335", + "stop_type": "일반차로", + "node_id": "113000016", + "nxtStn": "마포농수산물시장.월드컵공원" + }, + { + "stop_nm": "월드컵파크3단지.난지천공원", + "ycode": "37.573349", + "stop_no": "14107", + "xcode": "126.887954", + "stop_type": "일반차로", + "node_id": "113000017", + "nxtStn": "서부면허시험장.월드컵파크8단지" + }, + { + "stop_nm": "월드컵파크3단지.난지천공원", + "ycode": "37.57232", + "stop_no": "14108", + "xcode": "126.888463", + "stop_type": "일반차로", + "node_id": "113000018", + "nxtStn": "월드컵공원입구.문화비축기지입구" + }, + { + "stop_nm": "서부면허시험장", + "ycode": "37.5778826192", + "stop_no": "14109", + "xcode": "126.880437164", + "stop_type": "일반차로", + "node_id": "113000019", + "nxtStn": "월드컵파크7단지" + }, + { + "stop_nm": "서부면허시험장", + "ycode": "37.5774012358", + "stop_no": "14110", + "xcode": "126.8802386693", + "stop_type": "일반차로", + "node_id": "113000020", + "nxtStn": "월드컵파크3단지정문" + }, + { + "stop_nm": "DMC첨단산업센터", + "ycode": "37.585347", + "stop_no": "14111", + "xcode": "126.885192", + "stop_type": "일반차로", + "node_id": "113000021", + "nxtStn": "수색교" + }, + { + "stop_nm": "DMC첨단산업센터", + "ycode": "37.585598", + "stop_no": "14112", + "xcode": "126.884787", + "stop_type": "일반차로", + "node_id": "113000022", + "nxtStn": "월드컵파크7단지" + }, + { + "stop_nm": "월드컵공원입구.문화비축기지입구", + "ycode": "37.568523", + "stop_no": "14115", + "xcode": "126.892748", + "stop_type": "일반차로", + "node_id": "113000025", + "nxtStn": "월드컵파크3단지후문" + }, + { + "stop_nm": "월드컵파크3단지정문", + "ycode": "37.573822", + "stop_no": "14116", + "xcode": "126.889228", + "stop_type": "일반차로", + "node_id": "113000026", + "nxtStn": "월드컵파크2단지.에스플렉스센터" + }, + { + "stop_nm": "월드컵파크2단지.에스플렉스센터", + "ycode": "37.575267", + "stop_no": "14117", + "xcode": "126.890647", + "stop_type": "일반차로", + "node_id": "113000027", + "nxtStn": "상암초등학교" + }, + { + "stop_nm": "월드컵파크2단지.에스플렉스센터", + "ycode": "37.5753384971", + "stop_no": "14118", + "xcode": "126.8902909609", + "stop_type": "일반차로", + "node_id": "113000028", + "nxtStn": "월드컵파크3단지.난지천공원" + }, + { + "stop_nm": "합정역", + "ycode": "37.5485905004", + "stop_no": "14119", + "xcode": "126.9143006049", + "stop_type": "일반차로", + "node_id": "113000029", + "nxtStn": "서울화력발전소입구" + }, + { + "stop_nm": "합정역", + "ycode": "37.5487970862", + "stop_no": "14120", + "xcode": "126.9146251811", + "stop_type": "일반차로", + "node_id": "113000030", + "nxtStn": "홀트아동복지회" + }, + { + "stop_nm": "서울화력발전소입구", + "ycode": "37.5481890927", + "stop_no": "14121", + "xcode": "126.9175061586", + "stop_type": "일반차로", + "node_id": "113000031", + "nxtStn": "합정역" + }, + { + "stop_nm": "서울화력발전소입구", + "ycode": "37.5479367436", + "stop_no": "14122", + "xcode": "126.9174453228", + "stop_type": "일반차로", + "node_id": "113000032", + "nxtStn": "상수역" + }, + { + "stop_nm": "상수역", + "ycode": "37.547684", + "stop_no": "14123", + "xcode": "126.921584", + "stop_type": "일반차로", + "node_id": "113000033", + "nxtStn": "극동방송" + }, + { + "stop_nm": "상수역", + "ycode": "37.5478737711", + "stop_no": "14124", + "xcode": "126.9215637852", + "stop_type": "일반차로", + "node_id": "113000034", + "nxtStn": "서울화력발전소입구" + }, + { + "stop_nm": "서강초등학교", + "ycode": "37.547801", + "stop_no": "14125", + "xcode": "126.925363", + "stop_type": "일반차로", + "node_id": "113000035", + "nxtStn": "상수역" + }, + { + "stop_nm": "서강초등학교", + "ycode": "37.5474910871", + "stop_no": "14126", + "xcode": "126.9261941009", + "stop_type": "일반차로", + "node_id": "113000036", + "nxtStn": "광흥창역" + }, + { + "stop_nm": "광흥창역", + "ycode": "37.5476090642", + "stop_no": "14127", + "xcode": "126.9305409732", + "stop_type": "일반차로", + "node_id": "113000037", + "nxtStn": "서강초등학교" + }, + { + "stop_nm": "광흥창역", + "ycode": "37.5473522775", + "stop_no": "14128", + "xcode": "126.9305842172", + "stop_type": "일반차로", + "node_id": "113000038", + "nxtStn": "신수중학교" + }, + { + "stop_nm": "광흥창역", + "ycode": "37.547313", + "stop_no": "14129", + "xcode": "126.933942", + "stop_type": "일반차로", + "node_id": "113000039", + "nxtStn": "마포세무서" + }, + { + "stop_nm": "마포세무서", + "ycode": "37.5469713032", + "stop_no": "14130", + "xcode": "126.9390917397", + "stop_type": "일반차로", + "node_id": "113000040", + "nxtStn": "광성중고등학교" + }, + { + "stop_nm": "중앙잔디광장", + "ycode": "37.566485", + "stop_no": "14131", + "xcode": "126.879248", + "stop_type": "일반차로", + "node_id": "113000485", + "nxtStn": "노을공원입구(난지미술창작스튜디오)" + }, + { + "stop_nm": "마포역", + "ycode": "37.5397090071", + "stop_no": "14132", + "xcode": "126.9457368286", + "stop_type": "일반차로", + "node_id": "113000042", + "nxtStn": "용강동입구" + }, + { + "stop_nm": "노을공원입구(난지미술창작스튜디오)", + "ycode": "37.569406359", + "stop_no": "14133", + "xcode": "126.8806949077", + "stop_type": "일반차로", + "node_id": "113000486", + "nxtStn": "난지천공원다목적구장" + }, + { + "stop_nm": "공덕역10번출구", + "ycode": "37.541936", + "stop_no": "14134", + "xcode": "126.952877", + "stop_type": "일반차로", + "node_id": "113000471", + "nxtStn": "서울대동창회관" + }, + { + "stop_nm": "공덕역10번출구", + "ycode": "37.54175", + "stop_no": "14135", + "xcode": "126.952932", + "stop_type": "일반차로", + "node_id": "113000470", + "nxtStn": "도화동현대아파트" + }, + { + "stop_nm": "난지천공원다목적구장", + "ycode": "37.57356", + "stop_no": "14136", + "xcode": "126.883441", + "stop_type": "일반차로", + "node_id": "113000493", + "nxtStn": "난지천공원" + }, + { + "stop_nm": "난지천공원", + "ycode": "37.574169", + "stop_no": "14137", + "xcode": "126.886101", + "stop_type": "일반차로", + "node_id": "113000487", + "nxtStn": "월드컵파크3단지.난지천공원" + }, + { + "stop_nm": "월드컵경기장역", + "ycode": "37.5695262377", + "stop_no": "14138", + "xcode": "126.9001971302", + "stop_type": "일반차로", + "node_id": "113000491", + "nxtStn": "마포구청.농수산물시장" + }, + { + "stop_nm": "마포구청.농수산물시장", + "ycode": "37.566298907", + "stop_no": "14139", + "xcode": "126.8995833556", + "stop_type": "일반차로", + "node_id": "113000492", + "nxtStn": "월드컵경기장남측.월드컵공원" + }, + { + "stop_nm": "난지천공원다목적구장", + "ycode": "37.573856", + "stop_no": "14140", + "xcode": "126.883275", + "stop_type": "일반차로", + "node_id": "113000488", + "nxtStn": "노을공원입구(난지미술창작스튜디오)" + }, + { + "stop_nm": "공덕역.공덕시장", + "ycode": "37.544413", + "stop_no": "14141", + "xcode": "126.95303", + "stop_type": "일반차로", + "node_id": "113000051", + "nxtStn": "공덕역2번출구" + }, + { + "stop_nm": "공덕시장", + "ycode": "37.54435", + "stop_no": "14142", + "xcode": "126.954148", + "stop_type": "일반차로", + "node_id": "113000052", + "nxtStn": "신덕성결교회" + }, + { + "stop_nm": "신덕성결교회", + "ycode": "37.5459410072", + "stop_no": "14143", + "xcode": "126.9566906448", + "stop_type": "일반차로", + "node_id": "113000053", + "nxtStn": "한겨레신문사" + }, + { + "stop_nm": "신덕성결교회", + "ycode": "37.545893", + "stop_no": "14144", + "xcode": "126.956162", + "stop_type": "일반차로", + "node_id": "113000054", + "nxtStn": "공덕역.공덕시장" + }, + { + "stop_nm": "한겨레신문사", + "ycode": "37.548146748", + "stop_no": "14145", + "xcode": "126.9588159115", + "stop_type": "일반차로", + "node_id": "113000055", + "nxtStn": "신덕성결교회" + }, + { + "stop_nm": "한겨레신문사", + "ycode": "37.547997", + "stop_no": "14146", + "xcode": "126.958985", + "stop_type": "일반차로", + "node_id": "113000056", + "nxtStn": "만리동고개" + }, + { + "stop_nm": "노을공원입구(난지미술창작스튜디오)", + "ycode": "37.569581", + "stop_no": "14147", + "xcode": "126.880488", + "stop_type": "일반차로", + "node_id": "113000489", + "nxtStn": "종점" + }, + { + "stop_nm": "공덕오거리", + "ycode": "37.5430732748", + "stop_no": "14149", + "xcode": "126.9531626402", + "stop_type": "일반차로", + "node_id": "113000058", + "nxtStn": "공덕역2번출구" + }, + { + "stop_nm": "공덕오거리", + "ycode": "37.542752", + "stop_no": "14150", + "xcode": "126.953331", + "stop_type": "일반차로", + "node_id": "113000059", + "nxtStn": "용마루고개.브라운스톤공덕아파트" + }, + { + "stop_nm": "용마루고개.신공덕삼성아파트", + "ycode": "37.541871", + "stop_no": "14151", + "xcode": "126.955885", + "stop_type": "일반차로", + "node_id": "113000060", + "nxtStn": "공덕전철역" + }, + { + "stop_nm": "서울대동창회관", + "ycode": "37.542444957", + "stop_no": "14152", + "xcode": "126.9507441044", + "stop_type": "일반차로", + "node_id": "113000061", + "nxtStn": "공덕역" + }, + { + "stop_nm": "공덕역", + "ycode": "37.543495", + "stop_no": "14153", + "xcode": "126.951633", + "stop_type": "일반차로", + "node_id": "113000062", + "nxtStn": "열린마트" + }, + { + "stop_nm": "도화동현대아파트", + "ycode": "37.5403322186", + "stop_no": "14154", + "xcode": "126.9557014553", + "stop_type": "일반차로", + "node_id": "113000063", + "nxtStn": "도원삼성래미안아파트" + }, + { + "stop_nm": "도화동현대아파트", + "ycode": "37.540450311", + "stop_no": "14155", + "xcode": "126.9558315224", + "stop_type": "일반차로", + "node_id": "113000064", + "nxtStn": "공덕역10번출구" + }, + { + "stop_nm": "중동초등학교", + "ycode": "37.5668726108", + "stop_no": "14156", + "xcode": "126.9104194588", + "stop_type": "일반차로", + "node_id": "113000065", + "nxtStn": "성산2동주민센터" + }, + { + "stop_nm": "중동초등학교", + "ycode": "37.5666220223", + "stop_no": "14157", + "xcode": "126.9103076889", + "stop_type": "일반차로", + "node_id": "113000066", + "nxtStn": "성산2교" + }, + { + "stop_nm": "성산2동주민센터", + "ycode": "37.5677928213", + "stop_no": "14158", + "xcode": "126.9083263491", + "stop_type": "일반차로", + "node_id": "113000067", + "nxtStn": "중동초등학교" + }, + { + "stop_nm": "성산2동주민센터", + "ycode": "37.5680037628", + "stop_no": "14159", + "xcode": "126.9084370307", + "stop_type": "일반차로", + "node_id": "113000068", + "nxtStn": "성산119안전센터" + }, + { + "stop_nm": "성산119안전센터", + "ycode": "37.5698617774", + "stop_no": "14160", + "xcode": "126.9038566649", + "stop_type": "일반차로", + "node_id": "113000069", + "nxtStn": "성산아파트" + }, + { + "stop_nm": "성산119안전센터", + "ycode": "37.569712", + "stop_no": "14161", + "xcode": "126.903712", + "stop_type": "일반차로", + "node_id": "113000070", + "nxtStn": "성산2동주민센터" + }, + { + "stop_nm": "성산아파트", + "ycode": "37.571597138", + "stop_no": "14162", + "xcode": "126.9014985417", + "stop_type": "일반차로", + "node_id": "113000071", + "nxtStn": "월드컵경기장역" + }, + { + "stop_nm": "성산아파트", + "ycode": "37.571461", + "stop_no": "14163", + "xcode": "126.901416", + "stop_type": "일반차로", + "node_id": "113000072", + "nxtStn": "성산119안전센터" + }, + { + "stop_nm": "DMC상암센트럴파크", + "ycode": "37.575185", + "stop_no": "14164", + "xcode": "126.89604", + "stop_type": "일반차로", + "node_id": "113000073", + "nxtStn": "상암초등학교" + }, + { + "stop_nm": "DMC상암센트럴파크", + "ycode": "37.575152", + "stop_no": "14165", + "xcode": "126.895487", + "stop_type": "일반차로", + "node_id": "113000074", + "nxtStn": "월드컵경기장북측" + }, + { + "stop_nm": "상암초등학교", + "ycode": "37.576392", + "stop_no": "14166", + "xcode": "126.893423", + "stop_type": "일반차로", + "node_id": "113000075", + "nxtStn": "DMC상암센트럴파크" + }, + { + "stop_nm": "상암초등학교", + "ycode": "37.576549", + "stop_no": "14167", + "xcode": "126.89372", + "stop_type": "일반차로", + "node_id": "113000076", + "nxtStn": "KBS미디어센터" + }, + { + "stop_nm": "신촌로터리", + "ycode": "37.5538094529", + "stop_no": "14168", + "xcode": "126.9368825067", + "stop_type": "일반차로", + "node_id": "113000077", + "nxtStn": "서강대학교" + }, + { + "stop_nm": "신촌로터리", + "ycode": "37.5535240112", + "stop_no": "14169", + "xcode": "126.9372675673", + "stop_type": "일반차로", + "node_id": "113000078", + "nxtStn": "현대백화점" + }, + { + "stop_nm": "서강대학교", + "ycode": "37.5511", + "stop_no": "14170", + "xcode": "126.93797", + "stop_type": "일반차로", + "node_id": "113000079", + "nxtStn": "신촌로터리" + }, + { + "stop_nm": "서강대학교", + "ycode": "37.5518272757", + "stop_no": "14171", + "xcode": "126.9373153932", + "stop_type": "일반차로", + "node_id": "113000080", + "nxtStn": "광성중고등학교" + }, + { + "stop_nm": "광성중고등학교", + "ycode": "37.5493548145", + "stop_no": "14172", + "xcode": "126.9386715493", + "stop_type": "일반차로", + "node_id": "113000081", + "nxtStn": "대흥역" + }, + { + "stop_nm": "광성중고등학교", + "ycode": "37.548952", + "stop_no": "14173", + "xcode": "126.93986", + "stop_type": "일반차로", + "node_id": "113000082", + "nxtStn": "서강대학교" + }, + { + "stop_nm": "대흥역", + "ycode": "37.5481067455", + "stop_no": "14174", + "xcode": "126.9409887457", + "stop_type": "일반차로", + "node_id": "113000083", + "nxtStn": "용강초등학교" + }, + { + "stop_nm": "대흥역", + "ycode": "37.547675", + "stop_no": "14175", + "xcode": "126.94272", + "stop_type": "일반차로", + "node_id": "113000084", + "nxtStn": "대흥역사거리" + }, + { + "stop_nm": "용강초등학교", + "ycode": "37.546977106", + "stop_no": "14176", + "xcode": "126.9435145128", + "stop_type": "일반차로", + "node_id": "113000085", + "nxtStn": "동도중학교.서울디자인고등학교" + }, + { + "stop_nm": "동도중학교.서울디자인고등학교", + "ycode": "37.5464778856", + "stop_no": "14177", + "xcode": "126.945401461", + "stop_type": "일반차로", + "node_id": "113000086", + "nxtStn": "대흥역" + }, + { + "stop_nm": "동도중학교.서울디자인고등학교", + "ycode": "37.54564", + "stop_no": "14178", + "xcode": "126.946768", + "stop_type": "일반차로", + "node_id": "113000087", + "nxtStn": "공덕역1번출구" + }, + { + "stop_nm": "공덕역2번출구", + "ycode": "37.545201", + "stop_no": "14179", + "xcode": "126.948339", + "stop_type": "일반차로", + "node_id": "113000088", + "nxtStn": "동도중학교.서울디지인고등학교" + }, + { + "stop_nm": "공덕역1번출구", + "ycode": "37.5444323434", + "stop_no": "14180", + "xcode": "126.9493208487", + "stop_type": "일반차로", + "node_id": "113000089", + "nxtStn": "공덕오거리" + }, + { + "stop_nm": "서서울농협홍대역점", + "ycode": "37.556405", + "stop_no": "14181", + "xcode": "126.91986", + "stop_type": "일반차로", + "node_id": "113000090", + "nxtStn": "홍대입구역(가상)" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.5558462446", + "stop_no": "14182", + "xcode": "126.9209476216", + "stop_type": "일반차로", + "node_id": "113000091", + "nxtStn": "서울도시가스마포사옥" + }, + { + "stop_nm": "성산동", + "ycode": "37.564767", + "stop_no": "14184", + "xcode": "126.906904", + "stop_type": "일반차로", + "node_id": "113000479", + "nxtStn": "마포구청.성산자동차검사소" + }, + { + "stop_nm": "성산2교", + "ycode": "37.5642538566", + "stop_no": "14185", + "xcode": "126.9124764414", + "stop_type": "일반차로", + "node_id": "113000094", + "nxtStn": "성미약수터" + }, + { + "stop_nm": "성산2교", + "ycode": "37.5638632409", + "stop_no": "14186", + "xcode": "126.9132054677", + "stop_type": "일반차로", + "node_id": "113000095", + "nxtStn": "중동초등학교" + }, + { + "stop_nm": "성미약수터", + "ycode": "37.5617966139", + "stop_no": "14187", + "xcode": "126.9151050102", + "stop_type": "일반차로", + "node_id": "113000096", + "nxtStn": "성산2교" + }, + { + "stop_nm": "성미약수터", + "ycode": "37.5624635723", + "stop_no": "14188", + "xcode": "126.9140662478", + "stop_type": "일반차로", + "node_id": "113000097", + "nxtStn": "경성중고사거리" + }, + { + "stop_nm": "경성중고.홍대부속여중고입구", + "ycode": "37.560551806", + "stop_no": "14189", + "xcode": "126.9158070869", + "stop_type": "일반차로", + "node_id": "113000098", + "nxtStn": "성서초등학교" + }, + { + "stop_nm": "경성중고.홍대부속여중고입구", + "ycode": "37.5596512854", + "stop_no": "14190", + "xcode": "126.9166140242", + "stop_type": "일반차로", + "node_id": "113000099", + "nxtStn": "임오빌딩" + }, + { + "stop_nm": "경성중고.홍대부속여중고입구", + "ycode": "37.5594093604", + "stop_no": "14191", + "xcode": "126.9172809899", + "stop_type": "일반차로", + "node_id": "113000100", + "nxtStn": "성미약수터" + }, + { + "stop_nm": "서울도시가스마포사옥", + "ycode": "37.557227", + "stop_no": "14192", + "xcode": "126.919321", + "stop_type": "일반차로", + "node_id": "113000101", + "nxtStn": "청원빌딩" + }, + { + "stop_nm": "서울도시가스마포사옥", + "ycode": "37.5578790449", + "stop_no": "14193", + "xcode": "126.9182029073", + "stop_type": "일반차로", + "node_id": "113000102", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "마포구청역", + "ycode": "37.5627277529", + "stop_no": "14194", + "xcode": "126.902662558", + "stop_type": "일반차로", + "node_id": "113000103", + "nxtStn": "영등포아리수정수센터" + }, + { + "stop_nm": "마포구청역", + "ycode": "37.562458", + "stop_no": "14195", + "xcode": "126.902475", + "stop_type": "일반차로", + "node_id": "113000104", + "nxtStn": "마포중앙도서관" + }, + { + "stop_nm": "마포중앙도서관", + "ycode": "37.5636762812", + "stop_no": "14196", + "xcode": "126.9067285152", + "stop_type": "가로변전일", + "node_id": "113000105", + "nxtStn": "성산2교" + }, + { + "stop_nm": "마포중앙도서관", + "ycode": "37.564253", + "stop_no": "14197", + "xcode": "126.907457", + "stop_type": "가로변전일", + "node_id": "113000106", + "nxtStn": "마포구청역" + }, + { + "stop_nm": "성산2교", + "ycode": "37.56567", + "stop_no": "14198", + "xcode": "126.913555", + "stop_type": "가로변시간", + "node_id": "113000107", + "nxtStn": "연희104고지앞.구성산회관" + }, + { + "stop_nm": "성산2교", + "ycode": "37.5656929458", + "stop_no": "14199", + "xcode": "126.9126441333", + "stop_type": "일반차로", + "node_id": "113000108", + "nxtStn": "중동초등학교" + }, + { + "stop_nm": "광흥창역.서강동주민센터", + "ycode": "37.5482784766", + "stop_no": "14200", + "xcode": "126.9319142889", + "stop_type": "일반차로", + "node_id": "113000109", + "nxtStn": "창전현대홈타운" + }, + { + "stop_nm": "광흥창역.서강동주민센터", + "ycode": "37.548255", + "stop_no": "14201", + "xcode": "126.931413", + "stop_type": "일반차로", + "node_id": "113000110", + "nxtStn": "국회의사당" + }, + { + "stop_nm": "창전현대홈타운", + "ycode": "37.550872", + "stop_no": "14202", + "xcode": "126.932665", + "stop_type": "일반차로", + "node_id": "113000111", + "nxtStn": "신촌로터리" + }, + { + "stop_nm": "창전현대홈타운", + "ycode": "37.5507124982", + "stop_no": "14203", + "xcode": "126.932199547", + "stop_type": "일반차로", + "node_id": "113000112", + "nxtStn": "신촌이랜드청년주택" + }, + { + "stop_nm": "신촌로터리", + "ycode": "37.553892", + "stop_no": "14204", + "xcode": "126.934562", + "stop_type": "일반차로", + "node_id": "113000113", + "nxtStn": "창전현대홈타운" + }, + { + "stop_nm": "신촌로터리", + "ycode": "37.5540511998", + "stop_no": "14205", + "xcode": "126.9356825619", + "stop_type": "일반차로", + "node_id": "113000114", + "nxtStn": "현대백화점" + }, + { + "stop_nm": "이대역6번출구", + "ycode": "37.5564896634", + "stop_no": "14207", + "xcode": "126.9447874756", + "stop_type": "일반차로", + "node_id": "113000116", + "nxtStn": "아현고개" + }, + { + "stop_nm": "이화여대입구", + "ycode": "37.5559161044", + "stop_no": "14208", + "xcode": "126.9457318695", + "stop_type": "일반차로", + "node_id": "113000117", + "nxtStn": "대흥교회" + }, + { + "stop_nm": "이대역5번출구", + "ycode": "37.5557990945", + "stop_no": "14209", + "xcode": "126.946020578", + "stop_type": "일반차로", + "node_id": "113000118", + "nxtStn": "신촌기차역입구" + }, + { + "stop_nm": "대흥교회", + "ycode": "37.5540499504", + "stop_no": "14210", + "xcode": "126.9457581231", + "stop_type": "일반차로", + "node_id": "113000119", + "nxtStn": "서강대학교후문" + }, + { + "stop_nm": "대흥교회", + "ycode": "37.5537887705", + "stop_no": "14211", + "xcode": "126.9460582466", + "stop_type": "일반차로", + "node_id": "113000120", + "nxtStn": "이대역5번출구" + }, + { + "stop_nm": "서강대학교후문", + "ycode": "37.5504951872", + "stop_no": "14212", + "xcode": "126.9439464603", + "stop_type": "일반차로", + "node_id": "113000121", + "nxtStn": "용강초등학교" + }, + { + "stop_nm": "마포자이2차아파트.대흥역", + "ycode": "37.548758", + "stop_no": "14213", + "xcode": "126.942535", + "stop_type": "일반차로", + "node_id": "113000472", + "nxtStn": "광성중고등학교" + }, + { + "stop_nm": "굴레방다리.아현역", + "ycode": "37.5571518068", + "stop_no": "14215", + "xcode": "126.9574606253", + "stop_type": "일반차로", + "node_id": "113000124", + "nxtStn": "아현초등학교" + }, + { + "stop_nm": "양화진성지공원입구", + "ycode": "37.5486575374", + "stop_no": "14216", + "xcode": "126.9122481343", + "stop_type": "일반차로", + "node_id": "113000125", + "nxtStn": "합정역" + }, + { + "stop_nm": "홍대입구", + "ycode": "37.5545944804", + "stop_no": "14217", + "xcode": "126.920375476", + "stop_type": "일반차로", + "node_id": "113000494", + "nxtStn": "서교동사거리(경유)" + }, + { + "stop_nm": "홀트아동복지회", + "ycode": "37.5490106533", + "stop_no": "14218", + "xcode": "126.9121780839", + "stop_type": "가로변전일", + "node_id": "113000127", + "nxtStn": "새서울의원" + }, + { + "stop_nm": "합정역", + "ycode": "37.5510604429", + "stop_no": "14219", + "xcode": "126.9156095164", + "stop_type": "일반차로", + "node_id": "113000128", + "nxtStn": "메세나폴리스" + }, + { + "stop_nm": "합정역", + "ycode": "37.5502177028", + "stop_no": "14220", + "xcode": "126.9153071515", + "stop_type": "가로변전일", + "node_id": "113000129", + "nxtStn": "서교동" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.556562", + "stop_no": "14224", + "xcode": "126.923044", + "stop_type": "가로변전일", + "node_id": "113000133", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.5557705985", + "stop_no": "14225", + "xcode": "126.9226011904", + "stop_type": "일반차로", + "node_id": "113000134", + "nxtStn": "동교동삼거리" + }, + { + "stop_nm": "연남동", + "ycode": "37.5625221708", + "stop_no": "14226", + "xcode": "126.9275410215", + "stop_type": "일반차로", + "node_id": "113000135", + "nxtStn": "동교동삼거리" + }, + { + "stop_nm": "신촌역", + "ycode": "37.555637521", + "stop_no": "14228", + "xcode": "126.9347610004", + "stop_type": "가로변전일", + "node_id": "113000137", + "nxtStn": "신촌로터리" + }, + { + "stop_nm": "극동방송", + "ycode": "37.5494237971", + "stop_no": "14230", + "xcode": "126.9231511533", + "stop_type": "일반차로", + "node_id": "113000139", + "nxtStn": "홍익대학교" + }, + { + "stop_nm": "극동방송", + "ycode": "37.5494290547", + "stop_no": "14231", + "xcode": "126.9229225322", + "stop_type": "일반차로", + "node_id": "113000140", + "nxtStn": "상수역" + }, + { + "stop_nm": "홍익대학교", + "ycode": "37.5521905815", + "stop_no": "14232", + "xcode": "126.923804758", + "stop_type": "일반차로", + "node_id": "113000141", + "nxtStn": "삼진제약" + }, + { + "stop_nm": "홍익대학교", + "ycode": "37.5530705865", + "stop_no": "14233", + "xcode": "126.924641406", + "stop_type": "일반차로", + "node_id": "113000142", + "nxtStn": "홍대입구역사거리" + }, + { + "stop_nm": "산울림소극장", + "ycode": "37.5543703111", + "stop_no": "14234", + "xcode": "126.9298077585", + "stop_type": "일반차로", + "node_id": "113000143", + "nxtStn": "신촌오거리.현대백화점" + }, + { + "stop_nm": "산울림소극장", + "ycode": "37.554958166", + "stop_no": "14235", + "xcode": "126.9301572482", + "stop_type": "일반차로", + "node_id": "113000144", + "nxtStn": "삼진제약" + }, + { + "stop_nm": "신수중학교", + "ycode": "37.545242206", + "stop_no": "14236", + "xcode": "126.9326481273", + "stop_type": "일반차로", + "node_id": "113000145", + "nxtStn": "한국출판콘텐츠센터" + }, + { + "stop_nm": "신수중학교", + "ycode": "37.5454360008", + "stop_no": "14237", + "xcode": "126.9327520694", + "stop_type": "일반차로", + "node_id": "113000146", + "nxtStn": "광흥창역" + }, + { + "stop_nm": "래미안웰스트림아파트", + "ycode": "37.5442313666", + "stop_no": "14238", + "xcode": "126.9362364705", + "stop_type": "일반차로", + "node_id": "113000147", + "nxtStn": "신수중학교" + }, + { + "stop_nm": "한국출판콘텐츠센터", + "ycode": "37.5446547963", + "stop_no": "14239", + "xcode": "126.9354090177", + "stop_type": "일반차로", + "node_id": "113000148", + "nxtStn": "신석초등학교" + }, + { + "stop_nm": "용강동주민센터", + "ycode": "37.5419177341", + "stop_no": "14240", + "xcode": "126.9404187472", + "stop_type": "일반차로", + "node_id": "113000149", + "nxtStn": "마포전철역" + }, + { + "stop_nm": "용강동주민센터", + "ycode": "37.5417099622", + "stop_no": "14241", + "xcode": "126.9411793777", + "stop_type": "일반차로", + "node_id": "113000150", + "nxtStn": "신석초등학교" + }, + { + "stop_nm": "용강동입구", + "ycode": "37.5396325539", + "stop_no": "14242", + "xcode": "126.9441050979", + "stop_type": "일반차로", + "node_id": "113000151", + "nxtStn": "용강동주민센터" + }, + { + "stop_nm": "메세나폴리스", + "ycode": "37.550946", + "stop_no": "14244", + "xcode": "126.912933", + "stop_type": "일반차로", + "node_id": "113000153", + "nxtStn": "성산초등학교입구" + }, + { + "stop_nm": "마포한강푸르지오", + "ycode": "37.550787", + "stop_no": "14245", + "xcode": "126.912592", + "stop_type": "일반차로", + "node_id": "113000154", + "nxtStn": "합정역" + }, + { + "stop_nm": "성산초등학교입구", + "ycode": "37.5531302266", + "stop_no": "14246", + "xcode": "126.9118676593", + "stop_type": "일반차로", + "node_id": "113000155", + "nxtStn": "마포한강푸르지오" + }, + { + "stop_nm": "성산초등학교입구", + "ycode": "37.553218", + "stop_no": "14247", + "xcode": "126.912262", + "stop_type": "일반차로", + "node_id": "113000156", + "nxtStn": "기업은행서교동지점(최규하대통령가옥)" + }, + { + "stop_nm": "기업은행서교동지점(최규하대통령가옥)", + "ycode": "37.5547915422", + "stop_no": "14248", + "xcode": "126.9114638988", + "stop_type": "일반차로", + "node_id": "113000157", + "nxtStn": "망원시장.망원동월드컵시장입구" + }, + { + "stop_nm": "기업은행서교동지점(최규하대통령가옥)", + "ycode": "37.5548695099", + "stop_no": "14249", + "xcode": "126.9108956213", + "stop_type": "일반차로", + "node_id": "113000158", + "nxtStn": "성산초등학교입구" + }, + { + "stop_nm": "망원시장.망원동월드컵시장입구", + "ycode": "37.557338", + "stop_no": "14250", + "xcode": "126.908759", + "stop_type": "일반차로", + "node_id": "113000159", + "nxtStn": "기업은행서교동지점(최규하대통령가옥)" + }, + { + "stop_nm": "망원시장.망원동월드컵시장입구", + "ycode": "37.5575911259", + "stop_no": "14251", + "xcode": "126.9089432755", + "stop_type": "일반차로", + "node_id": "113000160", + "nxtStn": "마포구청역입구" + }, + { + "stop_nm": "마포구청역입구", + "ycode": "37.5604275533", + "stop_no": "14252", + "xcode": "126.906364689", + "stop_type": "일반차로", + "node_id": "113000161", + "nxtStn": "마포구청.성산자동차검사소" + }, + { + "stop_nm": "마포구청역입구", + "ycode": "37.5605946475", + "stop_no": "14253", + "xcode": "126.9057249395", + "stop_type": "일반차로", + "node_id": "113000162", + "nxtStn": "망원시장.망원동월드컵시장입구" + }, + { + "stop_nm": "성서초등학교", + "ycode": "37.5588032368", + "stop_no": "14254", + "xcode": "126.9114976368", + "stop_type": "일반차로", + "node_id": "113000163", + "nxtStn": "망원시장.망원동월드컵시장입구" + }, + { + "stop_nm": "성서초등학교", + "ycode": "37.5585137421", + "stop_no": "14255", + "xcode": "126.9111731244", + "stop_type": "일반차로", + "node_id": "113000164", + "nxtStn": "경성중고.홍대부속여중고입구" + }, + { + "stop_nm": "새서울의원", + "ycode": "37.5510938111", + "stop_no": "14256", + "xcode": "126.9072376566", + "stop_type": "일반차로", + "node_id": "113000234", + "nxtStn": "하모니마트" + }, + { + "stop_nm": "미원아파트입구", + "ycode": "37.5591229348", + "stop_no": "14257", + "xcode": "126.9032162229", + "stop_type": "일반차로", + "node_id": "113000166", + "nxtStn": "동교초등학교" + }, + { + "stop_nm": "미원아파트입구", + "ycode": "37.5591653733", + "stop_no": "14258", + "xcode": "126.9033225674", + "stop_type": "일반차로", + "node_id": "113000167", + "nxtStn": "망원2동주민센터" + }, + { + "stop_nm": "망원2동주민센터", + "ycode": "37.5600059068", + "stop_no": "14259", + "xcode": "126.9030950972", + "stop_type": "일반차로", + "node_id": "113000168", + "nxtStn": "청기와빌라" + }, + { + "stop_nm": "망원2동주민센터", + "ycode": "37.5600805608", + "stop_no": "14260", + "xcode": "126.9029286079", + "stop_type": "일반차로", + "node_id": "113000169", + "nxtStn": "미원아파트입구" + }, + { + "stop_nm": "청기와빌라", + "ycode": "37.560782", + "stop_no": "14261", + "xcode": "126.904392", + "stop_type": "일반차로", + "node_id": "113000170", + "nxtStn": "망원2동주민센터" + }, + { + "stop_nm": "청기와빌라", + "ycode": "37.5607605683", + "stop_no": "14262", + "xcode": "126.9047512686", + "stop_type": "일반차로", + "node_id": "113000171", + "nxtStn": "마포구청.성산자동차검사소" + }, + { + "stop_nm": "망원정입구", + "ycode": "37.5525939414", + "stop_no": "14263", + "xcode": "126.9069935902", + "stop_type": "일반차로", + "node_id": "113000172", + "nxtStn": "성산초등학교" + }, + { + "stop_nm": "성산초등학교", + "ycode": "37.553593858", + "stop_no": "14264", + "xcode": "126.9100992042", + "stop_type": "일반차로", + "node_id": "113000173", + "nxtStn": "성산초등학교입구" + }, + { + "stop_nm": "서서울농협", + "ycode": "37.553553", + "stop_no": "14265", + "xcode": "126.906064", + "stop_type": "일반차로", + "node_id": "113000174", + "nxtStn": "망원1동주민센터" + }, + { + "stop_nm": "서서울농협", + "ycode": "37.5534086494", + "stop_no": "14266", + "xcode": "126.9060056297", + "stop_type": "일반차로", + "node_id": "113000175", + "nxtStn": "망원정입구" + }, + { + "stop_nm": "망원1동주민센터", + "ycode": "37.5556235492", + "stop_no": "14267", + "xcode": "126.9048936302", + "stop_type": "일반차로", + "node_id": "113000176", + "nxtStn": "서서울농협" + }, + { + "stop_nm": "망원1동주민센터", + "ycode": "37.5554407976", + "stop_no": "14268", + "xcode": "126.9051055187", + "stop_type": "일반차로", + "node_id": "113000177", + "nxtStn": "동교초등학교" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.557947", + "stop_no": "14269", + "xcode": "126.904216", + "stop_type": "일반차로", + "node_id": "113000178", + "nxtStn": "미원아파트입구" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.5578909496", + "stop_no": "14270", + "xcode": "126.9040871071", + "stop_type": "일반차로", + "node_id": "113000179", + "nxtStn": "망원1동주민센터" + }, + { + "stop_nm": "월드컵파크7단지", + "ycode": "37.5811497135", + "stop_no": "14271", + "xcode": "126.8784199476", + "stop_type": "일반차로", + "node_id": "113000180", + "nxtStn": "구룡근린공원" + }, + { + "stop_nm": "월드컵파크7단지", + "ycode": "37.581876", + "stop_no": "14272", + "xcode": "126.878963", + "stop_type": "일반차로", + "node_id": "113000181", + "nxtStn": "대덕동행정복지센터" + }, + { + "stop_nm": "월드컵경기장북측", + "ycode": "37.572855", + "stop_no": "14273", + "xcode": "126.899468", + "stop_type": "일반차로", + "node_id": "113000182", + "nxtStn": "성산아파트" + }, + { + "stop_nm": "월드컵경기장북측", + "ycode": "37.573967", + "stop_no": "14274", + "xcode": "126.898104", + "stop_type": "일반차로", + "node_id": "113000183", + "nxtStn": "DMC상암센트럴파크" + }, + { + "stop_nm": "경성중고.홍대부속여중고입구", + "ycode": "37.5597317011", + "stop_no": "14275", + "xcode": "126.9156529372", + "stop_type": "일반차로", + "node_id": "113000184", + "nxtStn": "성미약수터" + }, + { + "stop_nm": "삼진제약", + "ycode": "37.553351", + "stop_no": "14283", + "xcode": "126.926719", + "stop_type": "일반차로", + "node_id": "113000189", + "nxtStn": "홍대정문" + }, + { + "stop_nm": "홍대입구역사거리", + "ycode": "37.55473", + "stop_no": "14284", + "xcode": "126.92221", + "stop_type": "일반차로", + "node_id": "113000190", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "상암DMC홍보관.YTN", + "ycode": "37.577985", + "stop_no": "14286", + "xcode": "126.891323", + "stop_type": "일반차로", + "node_id": "113000192", + "nxtStn": "상암월드컵파크5단지" + }, + { + "stop_nm": "상암DMC홍보관.YTN", + "ycode": "37.5774605863", + "stop_no": "14287", + "xcode": "126.8912875667", + "stop_type": "일반차로", + "node_id": "113000193", + "nxtStn": "상암동입구" + }, + { + "stop_nm": "월드컵파크5단지.상암중고등학교입구", + "ycode": "37.580921", + "stop_no": "14288", + "xcode": "126.886335", + "stop_type": "일반차로", + "node_id": "113000194", + "nxtStn": "월드컵파크7단지" + }, + { + "stop_nm": "월드컵파크5단지", + "ycode": "37.5803332786", + "stop_no": "14289", + "xcode": "126.8865178403", + "stop_type": "일반차로", + "node_id": "113000195", + "nxtStn": "상암DMC홍보관.YTN" + }, + { + "stop_nm": "구룡근린공원", + "ycode": "37.5834310105", + "stop_no": "14290", + "xcode": "126.8826124496", + "stop_type": "일반차로", + "node_id": "113000196", + "nxtStn": "DMC첨단산업센터" + }, + { + "stop_nm": "상암고등학교", + "ycode": "37.5817798292", + "stop_no": "14291", + "xcode": "126.8840462067", + "stop_type": "일반차로", + "node_id": "113000197", + "nxtStn": "월드컵파크5단지" + }, + { + "stop_nm": "월드컵파크3단지후문", + "ycode": "37.571242", + "stop_no": "14292", + "xcode": "126.889762", + "stop_type": "일반차로", + "node_id": "113000198", + "nxtStn": "난지천공원.박정희대통령기념관" + }, + { + "stop_nm": "마포아트센터", + "ycode": "37.549827", + "stop_no": "14293", + "xcode": "126.943779", + "stop_type": "일반차로", + "node_id": "113000199", + "nxtStn": "숭문중고등학교후문" + }, + { + "stop_nm": "월드컵파크4단지후문.JTBC", + "ycode": "37.577357", + "stop_no": "14295", + "xcode": "126.889893", + "stop_type": "일반차로", + "node_id": "113000201", + "nxtStn": "YTN뉴스퀘어.CJE&M" + }, + { + "stop_nm": "디지털미디어시티역2번출구", + "ycode": "37.5752078233", + "stop_no": "14296", + "xcode": "126.8996741287", + "stop_type": "일반차로", + "node_id": "113000202", + "nxtStn": "공항철도디지털미디어시티역" + }, + { + "stop_nm": "월드컵파크4단지후문.JTBC", + "ycode": "37.577856", + "stop_no": "14306", + "xcode": "126.889942", + "stop_type": "일반차로", + "node_id": "113000203", + "nxtStn": "월드컵파크4단지" + }, + { + "stop_nm": "누리꿈스퀘어.MBC", + "ycode": "37.578988", + "stop_no": "14307", + "xcode": "126.889637", + "stop_type": "일반차로", + "node_id": "113000204", + "nxtStn": "월드컵파크5단지.상암중고등학교입구" + }, + { + "stop_nm": "월드메르디앙아파트", + "ycode": "37.5450734893", + "stop_no": "14308", + "xcode": "126.9234283579", + "stop_type": "일반차로", + "node_id": "113000205", + "nxtStn": "상수역" + }, + { + "stop_nm": "월드메르디앙아파트", + "ycode": "37.5448091234", + "stop_no": "14309", + "xcode": "126.924290977", + "stop_type": "일반차로", + "node_id": "113000206", + "nxtStn": "광명공영차고지종점" + }, + { + "stop_nm": "한강밤섬자이아파트", + "ycode": "37.5457358405", + "stop_no": "14310", + "xcode": "126.9277926676", + "stop_type": "일반차로", + "node_id": "113000207", + "nxtStn": "월드메르디앙아파트" + }, + { + "stop_nm": "한강밤섬자이아파트", + "ycode": "37.5455492751", + "stop_no": "14311", + "xcode": "126.9277294722", + "stop_type": "일반차로", + "node_id": "113000208", + "nxtStn": "서강해모로아파트" + }, + { + "stop_nm": "서강해모로아파트", + "ycode": "37.5456864091", + "stop_no": "14312", + "xcode": "126.9294970623", + "stop_type": "일반차로", + "node_id": "113000209", + "nxtStn": "한강밤섬자이아파트" + }, + { + "stop_nm": "서강해모로아파트", + "ycode": "37.5454945461", + "stop_no": "14313", + "xcode": "126.9296149399", + "stop_type": "일반차로", + "node_id": "113000210", + "nxtStn": "신수중학교" + }, + { + "stop_nm": "서교동주민센터.마포신문사", + "ycode": "37.5548915242", + "stop_no": "14314", + "xcode": "126.9163533449", + "stop_type": "일반차로", + "node_id": "113000211", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.5556445461", + "stop_no": "14315", + "xcode": "126.91982843", + "stop_type": "일반차로", + "node_id": "113000212", + "nxtStn": "홍대입구역(가상)" + }, + { + "stop_nm": "월드컵경기장북측", + "ycode": "37.573757", + "stop_no": "14316", + "xcode": "126.897992", + "stop_type": "일반차로", + "node_id": "113000213", + "nxtStn": "월드컵경기장서측.문화비축기지" + }, + { + "stop_nm": "강변한신코아", + "ycode": "37.537435", + "stop_no": "14317", + "xcode": "126.943978", + "stop_type": "일반차로", + "node_id": "113000214", + "nxtStn": "마포역" + }, + { + "stop_nm": "난지한강공원", + "ycode": "37.568006", + "stop_no": "14330", + "xcode": "126.878193", + "stop_type": "일반차로", + "node_id": "113000430", + "nxtStn": "행주산성입구.행주내동" + }, + { + "stop_nm": "난지한강공원", + "ycode": "37.568751", + "stop_no": "14331", + "xcode": "126.875258", + "stop_type": "일반차로", + "node_id": "113000428", + "nxtStn": "중앙잔디광장" + }, + { + "stop_nm": "월드컵공원입구.문화비축기지입구", + "ycode": "37.568177", + "stop_no": "14332", + "xcode": "126.892749", + "stop_type": "일반차로", + "node_id": "113000410", + "nxtStn": "마포농수산물시장.월드컵경기장" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.575079", + "stop_no": "14333", + "xcode": "126.900747", + "stop_type": "일반차로", + "node_id": "113000425", + "nxtStn": "DMC상암센트럴파크" + }, + { + "stop_nm": "월드컵파크9.10.11.12단지", + "ycode": "37.58533", + "stop_no": "14334", + "xcode": "126.878833", + "stop_type": "일반차로", + "node_id": "113000433", + "nxtStn": "대덕동행정복지센터" + }, + { + "stop_nm": "월드컵파크9.10.11.12단지", + "ycode": "37.584397", + "stop_no": "14335", + "xcode": "126.879965", + "stop_type": "일반차로", + "node_id": "113000432", + "nxtStn": "상암고등학교" + }, + { + "stop_nm": "용마루고개.브라운스톤공덕아파트", + "ycode": "37.54113", + "stop_no": "14336", + "xcode": "126.956831", + "stop_type": "일반차로", + "node_id": "102000254", + "nxtStn": "용마루고개.효창파크푸르지오아파트" + }, + { + "stop_nm": "하늘초등학교", + "ycode": "37.585322", + "stop_no": "14337", + "xcode": "126.879658", + "stop_type": "일반차로", + "node_id": "113000436", + "nxtStn": "월드컵파크10단지" + }, + { + "stop_nm": "월드컵파크10단지", + "ycode": "37.586203", + "stop_no": "14338", + "xcode": "126.88135", + "stop_type": "일반차로", + "node_id": "113000435", + "nxtStn": "쌍굴입구" + }, + { + "stop_nm": "월드컵파크11.12단지", + "ycode": "37.5862704288", + "stop_no": "14339", + "xcode": "126.8808993224", + "stop_type": "일반차로", + "node_id": "113000437", + "nxtStn": "월드컵파크9.10.11.12단지" + }, + { + "stop_nm": "수색교", + "ycode": "37.587217", + "stop_no": "14340", + "xcode": "126.883985", + "stop_type": "일반차로", + "node_id": "113000438", + "nxtStn": "월드컵파크11.12단지" + }, + { + "stop_nm": "수색교", + "ycode": "37.5870817539", + "stop_no": "14341", + "xcode": "126.8839598515", + "stop_type": "일반차로", + "node_id": "113000434", + "nxtStn": "덕은교.은평차고지앞" + }, + { + "stop_nm": "가좌역1번출구", + "ycode": "37.568313", + "stop_no": "14342", + "xcode": "126.914942", + "stop_type": "일반차로", + "node_id": "113000495", + "nxtStn": "가좌행복주택.건영월드컵아파트" + }, + { + "stop_nm": "가좌역", + "ycode": "37.5678973956", + "stop_no": "14343", + "xcode": "126.9153689271", + "stop_type": "일반차로", + "node_id": "113000496", + "nxtStn": "월드컵아이파크" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.575527", + "stop_no": "14344", + "xcode": "126.90078", + "stop_type": "일반차로", + "node_id": "113000448", + "nxtStn": "공항철도디지털미디어시티역" + }, + { + "stop_nm": "청구아파트.참누리아파트", + "ycode": "37.5742321541", + "stop_no": "14346", + "xcode": "126.9028581629", + "stop_type": "일반차로", + "node_id": "113000446", + "nxtStn": "디지털미디어시티역" + }, + { + "stop_nm": "청구아파트.참누리아파트", + "ycode": "37.5738331722", + "stop_no": "14347", + "xcode": "126.9031032213", + "stop_type": "일반차로", + "node_id": "113000445", + "nxtStn": "중동현대아파트" + }, + { + "stop_nm": "중동현대아파트", + "ycode": "37.5716856118", + "stop_no": "14348", + "xcode": "126.9072675947", + "stop_type": "일반차로", + "node_id": "113000444", + "nxtStn": "청구아파트.참누리아파트" + }, + { + "stop_nm": "중동현대아파트", + "ycode": "37.571463", + "stop_no": "14349", + "xcode": "126.907287", + "stop_type": "일반차로", + "node_id": "113000443", + "nxtStn": "가좌행복주택.건영월드컵아파트" + }, + { + "stop_nm": "가좌행복주택.건영월드컵아파트", + "ycode": "37.569452", + "stop_no": "14350", + "xcode": "126.912103", + "stop_type": "일반차로", + "node_id": "113000442", + "nxtStn": "중동현대아파트" + }, + { + "stop_nm": "가좌행복주택.건영월드컵아파트", + "ycode": "37.569305", + "stop_no": "14351", + "xcode": "126.912038", + "stop_type": "일반차로", + "node_id": "113000441", + "nxtStn": "가좌역" + }, + { + "stop_nm": "월드컵아이파크", + "ycode": "37.56673", + "stop_no": "14352", + "xcode": "126.913607", + "stop_type": "일반차로", + "node_id": "113000440", + "nxtStn": "성산2교" + }, + { + "stop_nm": "월드컵아이파크", + "ycode": "37.5664713538", + "stop_no": "14353", + "xcode": "126.9136846815", + "stop_type": "일반차로", + "node_id": "113000439", + "nxtStn": "가좌역1번출구" + }, + { + "stop_nm": "DMC첨단산업센터", + "ycode": "37.58406", + "stop_no": "14354", + "xcode": "126.886547", + "stop_type": "일반차로", + "node_id": "113000455", + "nxtStn": "덕은교.은평차고지앞" + }, + { + "stop_nm": "DMC첨단산업센터", + "ycode": "37.5836187524", + "stop_no": "14355", + "xcode": "126.886622684", + "stop_type": "일반차로", + "node_id": "113000454", + "nxtStn": "MBC" + }, + { + "stop_nm": "SBS.YTN", + "ycode": "37.579827", + "stop_no": "14356", + "xcode": "126.894375", + "stop_type": "일반차로", + "node_id": "113000453", + "nxtStn": "MBC" + }, + { + "stop_nm": "SBS.YTN", + "ycode": "37.579836", + "stop_no": "14357", + "xcode": "126.893961", + "stop_type": "일반차로", + "node_id": "113000452", + "nxtStn": "공항철도디지털미디어시티역" + }, + { + "stop_nm": "공항철도디지털미디어시티역", + "ycode": "37.576698", + "stop_no": "14358", + "xcode": "126.899007", + "stop_type": "일반차로", + "node_id": "113000451", + "nxtStn": "SBS.YTN" + }, + { + "stop_nm": "공항철도디지털미디어시티역", + "ycode": "37.576962", + "stop_no": "14359", + "xcode": "126.8982", + "stop_type": "일반차로", + "node_id": "113000450", + "nxtStn": "디지털미디어시티역2번출구" + }, + { + "stop_nm": "디지털미디어시티역", + "ycode": "37.575355", + "stop_no": "14360", + "xcode": "126.900585", + "stop_type": "일반차로", + "node_id": "113000449", + "nxtStn": "청구아파트.참누리아파트" + }, + { + "stop_nm": "상암동주민센터앞", + "ycode": "37.57863", + "stop_no": "14361", + "xcode": "126.894031", + "stop_type": "일반차로", + "node_id": "113000469", + "nxtStn": "공항철도디지털미디어시티역" + }, + { + "stop_nm": "MBC", + "ycode": "37.582084", + "stop_no": "14362", + "xcode": "126.89073", + "stop_type": "일반차로", + "node_id": "111001115", + "nxtStn": "DMC첨단산업센터" + }, + { + "stop_nm": "MBC", + "ycode": "37.581821", + "stop_no": "14363", + "xcode": "126.890791", + "stop_type": "일반차로", + "node_id": "111001114", + "nxtStn": "SBS.YTN" + }, + { + "stop_nm": "성산대교(가상)", + "ycode": "37.5577065878", + "stop_no": "14365", + "xcode": "126.894624544", + "stop_type": "가상정류장", + "node_id": "113000500", + "nxtStn": "난지한강공원(가상)" + }, + { + "stop_nm": "난지천공원.박정희대통령기념관", + "ycode": "37.5745129571", + "stop_no": "14490", + "xcode": "126.8861820148", + "stop_type": "마을버스", + "node_id": "113900288", + "nxtStn": "서부면허시험장.월드컵파크8단지" + }, + { + "stop_nm": "공덕시장", + "ycode": "37.5443868565", + "stop_no": "14491", + "xcode": "126.9541672852", + "stop_type": "마을버스", + "node_id": "113900296", + "nxtStn": "신덕성결교회" + }, + { + "stop_nm": "마포16번종점", + "ycode": "37.5608656017", + "stop_no": "14492", + "xcode": "126.8988594191", + "stop_type": "마을버스", + "node_id": "113900260", + "nxtStn": "동원데자뷰아파트" + }, + { + "stop_nm": "서부면허시험장.월드컵파크8단지", + "ycode": "37.578532", + "stop_no": "14493", + "xcode": "126.882112", + "stop_type": "마을버스", + "node_id": "113900297", + "nxtStn": "난지천공원.박정희대통령기념관" + }, + { + "stop_nm": "창전중앙하이츠아파트", + "ycode": "37.549918", + "stop_no": "14494", + "xcode": "126.927529", + "stop_type": "마을버스", + "node_id": "113900299", + "nxtStn": "홍대후문" + }, + { + "stop_nm": "망원유수지.마포구민체육센터", + "ycode": "37.5564968722", + "stop_no": "14495", + "xcode": "126.8985925441", + "stop_type": "마을버스", + "node_id": "113900284", + "nxtStn": "태양빌딩" + }, + { + "stop_nm": "양화진성지", + "ycode": "37.5456403732", + "stop_no": "14496", + "xcode": "126.9119307997", + "stop_type": "마을버스", + "node_id": "113900285", + "nxtStn": "다운교회" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.5573254742", + "stop_no": "14497", + "xcode": "126.9236679158", + "stop_type": "마을버스", + "node_id": "113900300", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.557726", + "stop_no": "14498", + "xcode": "126.923439", + "stop_type": "마을버스", + "node_id": "113900301", + "nxtStn": "코오롱아파트106동앞" + }, + { + "stop_nm": "아현전철역", + "ycode": "37.557136", + "stop_no": "14499", + "xcode": "126.956245", + "stop_type": "마을버스", + "node_id": "113900302", + "nxtStn": "돼지슈퍼" + }, + { + "stop_nm": "샛별문방구.마포전철역", + "ycode": "37.5398243005", + "stop_no": "14500", + "xcode": "126.947628807", + "stop_type": "마을버스", + "node_id": "113900303", + "nxtStn": "가든호텔.삼성프라자" + }, + { + "stop_nm": "청암대", + "ycode": "37.5356892247", + "stop_no": "14501", + "xcode": "126.947758433", + "stop_type": "마을버스", + "node_id": "113900304", + "nxtStn": "청암자이아파트" + }, + { + "stop_nm": "한겨레신문사", + "ycode": "37.5471556001", + "stop_no": "14502", + "xcode": "126.9589794255", + "stop_type": "마을버스", + "node_id": "113900219", + "nxtStn": "효창공원후문" + }, + { + "stop_nm": "동원데자뷰아파트", + "ycode": "37.5603378705", + "stop_no": "14503", + "xcode": "126.8992212168", + "stop_type": "마을버스", + "node_id": "113900305", + "nxtStn": "대상아파트" + }, + { + "stop_nm": "창전삼성아파트109동", + "ycode": "37.5502446123", + "stop_no": "14505", + "xcode": "126.9302782196", + "stop_type": "마을버스", + "node_id": "113900306", + "nxtStn": "창전삼성아파트107동" + }, + { + "stop_nm": "홍대후문", + "ycode": "37.5512061281", + "stop_no": "14506", + "xcode": "126.927367497", + "stop_type": "마을버스", + "node_id": "113900307", + "nxtStn": "서강유치원" + }, + { + "stop_nm": "신촌수정탕", + "ycode": "37.5497981454", + "stop_no": "14507", + "xcode": "126.9375706084", + "stop_type": "마을버스", + "node_id": "113900308", + "nxtStn": "삼익아파트입구" + }, + { + "stop_nm": "태양빌딩", + "ycode": "37.5560641071", + "stop_no": "14508", + "xcode": "126.8993650599", + "stop_type": "마을버스", + "node_id": "113900014", + "nxtStn": "망원교회" + }, + { + "stop_nm": "난지천공원.박정희대통령기념관", + "ycode": "37.5740883789", + "stop_no": "14509", + "xcode": "126.8860527171", + "stop_type": "마을버스", + "node_id": "113900273", + "nxtStn": "월드컵파크3단지" + }, + { + "stop_nm": "다운교회", + "ycode": "37.545625", + "stop_no": "14510", + "xcode": "126.912826", + "stop_type": "마을버스", + "node_id": "113900016", + "nxtStn": "한이맨션" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.5557913332", + "stop_no": "14511", + "xcode": "126.9210303052", + "stop_type": "마을버스", + "node_id": "113900245", + "nxtStn": "서울도시가스마포사옥" + }, + { + "stop_nm": "코오롱아파트106동앞", + "ycode": "37.5609091091", + "stop_no": "14512", + "xcode": "126.9231008719", + "stop_type": "마을버스", + "node_id": "113900017", + "nxtStn": "코오롱아파트104동앞" + }, + { + "stop_nm": "가든호텔.삼성프라자", + "ycode": "37.540748", + "stop_no": "14513", + "xcode": "126.94921", + "stop_type": "마을버스", + "node_id": "113900018", + "nxtStn": "열린마트" + }, + { + "stop_nm": "우성아파트3동", + "ycode": "37.5361648924", + "stop_no": "14514", + "xcode": "126.9475068947", + "stop_type": "마을버스", + "node_id": "113900019", + "nxtStn": "우성아파트입구" + }, + { + "stop_nm": "대상아파트", + "ycode": "37.5597426063", + "stop_no": "14515", + "xcode": "126.8996419598", + "stop_type": "마을버스", + "node_id": "113900020", + "nxtStn": "신부파스카아파트" + }, + { + "stop_nm": "창전삼성아파트107동", + "ycode": "37.5507316247", + "stop_no": "14517", + "xcode": "126.9309953149", + "stop_type": "마을버스", + "node_id": "113900022", + "nxtStn": "창전삼성아파트104동" + }, + { + "stop_nm": "서강유치원", + "ycode": "37.5519120695", + "stop_no": "14518", + "xcode": "126.9279949601", + "stop_type": "마을버스", + "node_id": "113900023", + "nxtStn": "유관순무용원" + }, + { + "stop_nm": "삼익아파트입구", + "ycode": "37.5499070227", + "stop_no": "14519", + "xcode": "126.9356035042", + "stop_type": "마을버스", + "node_id": "113900024", + "nxtStn": "신수경남아파트" + }, + { + "stop_nm": "용약국", + "ycode": "37.55448", + "stop_no": "14520", + "xcode": "126.936862", + "stop_type": "마을버스", + "node_id": "113900025", + "nxtStn": "서강대학교" + }, + { + "stop_nm": "월드컵파크3단지", + "ycode": "37.572626", + "stop_no": "14521", + "xcode": "126.888357", + "stop_type": "마을버스", + "node_id": "113900274", + "nxtStn": "월드컵공원입구.문화비축기지입구" + }, + { + "stop_nm": "한이맨션", + "ycode": "37.54551586", + "stop_no": "14522", + "xcode": "126.9141581354", + "stop_type": "마을버스", + "node_id": "113900026", + "nxtStn": "서일빌딩" + }, + { + "stop_nm": "코오롱아파트104동앞", + "ycode": "37.5622933508", + "stop_no": "14524", + "xcode": "126.9219754172", + "stop_type": "마을버스", + "node_id": "113900027", + "nxtStn": "코오롱아파트사거리" + }, + { + "stop_nm": "돼지슈퍼", + "ycode": "37.5569216068", + "stop_no": "14525", + "xcode": "126.9614845703", + "stop_type": "마을버스", + "node_id": "113900028", + "nxtStn": "신일약국" + }, + { + "stop_nm": "하나님의교회", + "ycode": "37.546219", + "stop_no": "14527", + "xcode": "126.959881", + "stop_type": "마을버스", + "node_id": "113900029", + "nxtStn": "신애교회" + }, + { + "stop_nm": "신부파스카아파트", + "ycode": "37.5587574153", + "stop_no": "14528", + "xcode": "126.9003563794", + "stop_type": "마을버스", + "node_id": "113900030", + "nxtStn": "백합아파트" + }, + { + "stop_nm": "창전삼성아파트104동", + "ycode": "37.5510770869", + "stop_no": "14530", + "xcode": "126.9315846569", + "stop_type": "마을버스", + "node_id": "113900031", + "nxtStn": "창전삼성아파트입구" + }, + { + "stop_nm": "유관순무용원", + "ycode": "37.5527354367", + "stop_no": "14531", + "xcode": "126.9290988156", + "stop_type": "마을버스", + "node_id": "113900032", + "nxtStn": "와우공원입구" + }, + { + "stop_nm": "신수경남아파트", + "ycode": "37.5500104497", + "stop_no": "14532", + "xcode": "126.9336171589", + "stop_type": "마을버스", + "node_id": "113900033", + "nxtStn": "광흥창역.서강동주민센터" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.5565345744", + "stop_no": "14534", + "xcode": "126.9016179771", + "stop_type": "마을버스", + "node_id": "113900251", + "nxtStn": "동교초등학교" + }, + { + "stop_nm": "서일빌딩", + "ycode": "37.5454162494", + "stop_no": "14536", + "xcode": "126.9159825506", + "stop_type": "마을버스", + "node_id": "113900035", + "nxtStn": "마포새빛문화숲" + }, + { + "stop_nm": "청원빌딩", + "ycode": "37.5584151692", + "stop_no": "14537", + "xcode": "126.9181649687", + "stop_type": "마을버스", + "node_id": "113900267", + "nxtStn": "경성고교입구" + }, + { + "stop_nm": "코오롱아파트사거리", + "ycode": "37.5630345645", + "stop_no": "14538", + "xcode": "126.9213939451", + "stop_type": "마을버스", + "node_id": "113900036", + "nxtStn": "대룡빌딩" + }, + { + "stop_nm": "신일약국", + "ycode": "37.5560100579", + "stop_no": "14539", + "xcode": "126.9625987905", + "stop_type": "마을버스", + "node_id": "113900037", + "nxtStn": "아현실버복지관" + }, + { + "stop_nm": "아현실버복지관", + "ycode": "37.5576412633", + "stop_no": "14540", + "xcode": "126.9602156344", + "stop_type": "마을버스", + "node_id": "101900026", + "nxtStn": "서부수도사업소" + }, + { + "stop_nm": "S마트", + "ycode": "37.538799", + "stop_no": "14541", + "xcode": "126.947562", + "stop_type": "마을버스", + "node_id": "113900038", + "nxtStn": "샛별문방구.마포전철역" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.5572273703", + "stop_no": "14542", + "xcode": "126.9014438887", + "stop_type": "마을버스", + "node_id": "113900039", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "창전삼성아파트입구", + "ycode": "37.5516299322", + "stop_no": "14544", + "xcode": "126.9324080979", + "stop_type": "마을버스", + "node_id": "113900040", + "nxtStn": "금호태영아파트" + }, + { + "stop_nm": "와우공원입구", + "ycode": "37.5531811274", + "stop_no": "14545", + "xcode": "126.9300208249", + "stop_type": "마을버스", + "node_id": "113900041", + "nxtStn": "경의선책거리.산울림소극장" + }, + { + "stop_nm": "마포소방서", + "ycode": "37.5490808985", + "stop_no": "14546", + "xcode": "126.9326944706", + "stop_type": "마을버스", + "node_id": "113900042", + "nxtStn": "신수동성당.신수동주민센터" + }, + { + "stop_nm": "광흥창역.서강동주민센터", + "ycode": "37.548295", + "stop_no": "14547", + "xcode": "126.93264", + "stop_type": "마을버스", + "node_id": "113900043", + "nxtStn": "서강수협.신수중학교" + }, + { + "stop_nm": "대흥역", + "ycode": "37.5480716446", + "stop_no": "14548", + "xcode": "126.9410725222", + "stop_type": "마을버스", + "node_id": "113900225", + "nxtStn": "용강초등학교" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.5568114132", + "stop_no": "14549", + "xcode": "126.9029520908", + "stop_type": "마을버스", + "node_id": "113900252", + "nxtStn": "하나은행망원동지점" + }, + { + "stop_nm": "마포농수산물시장.월드컵경기장", + "ycode": "37.5660689383", + "stop_no": "14550", + "xcode": "126.8972675665", + "stop_type": "마을버스", + "node_id": "113900044", + "nxtStn": "마포구청.마포구청역" + }, + { + "stop_nm": "마포새빛문화숲", + "ycode": "37.5452896463", + "stop_no": "14551", + "xcode": "126.9179054483", + "stop_type": "마을버스", + "node_id": "113900045", + "nxtStn": "마포새빛문화숲후문" + }, + { + "stop_nm": "경성고교입구", + "ycode": "37.5601111815", + "stop_no": "14552", + "xcode": "126.9166359308", + "stop_type": "마을버스", + "node_id": "113900046", + "nxtStn": "마포FM" + }, + { + "stop_nm": "대룡빌딩", + "ycode": "37.5636821303", + "stop_no": "14553", + "xcode": "126.9222716786", + "stop_type": "마을버스", + "node_id": "113900047", + "nxtStn": "연남동주민센터" + }, + { + "stop_nm": "열린마트", + "ycode": "37.542036376", + "stop_no": "14554", + "xcode": "126.9515801113", + "stop_type": "마을버스", + "node_id": "113900049", + "nxtStn": "공덕역10번출구" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.5567102451", + "stop_no": "14555", + "xcode": "126.9015668119", + "stop_type": "마을버스", + "node_id": "113900262", + "nxtStn": "망원교회" + }, + { + "stop_nm": "한강공원입구", + "ycode": "37.5562291056", + "stop_no": "14556", + "xcode": "126.8992248663", + "stop_type": "마을버스", + "node_id": "113900309", + "nxtStn": "종점" + }, + { + "stop_nm": "금호태영아파트", + "ycode": "37.5537200783", + "stop_no": "14557", + "xcode": "126.9317248509", + "stop_type": "마을버스", + "node_id": "113900050", + "nxtStn": "한국영화아카데미" + }, + { + "stop_nm": "경의선책거리.산울림소극장", + "ycode": "37.5549249512", + "stop_no": "14558", + "xcode": "126.9303700659", + "stop_type": "마을버스", + "node_id": "113900246", + "nxtStn": "신촌농협.하나로마트" + }, + { + "stop_nm": "신수동성당.신수동주민센터", + "ycode": "37.5472604384", + "stop_no": "14559", + "xcode": "126.9338504704", + "stop_type": "마을버스", + "node_id": "113900231", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "서강수협.신수중학교", + "ycode": "37.5453150473", + "stop_no": "14560", + "xcode": "126.9323900344", + "stop_type": "마을버스", + "node_id": "113900051", + "nxtStn": "한국출판콘텐츠센터" + }, + { + "stop_nm": "용강초등학교", + "ycode": "37.547055", + "stop_no": "14561", + "xcode": "126.943554", + "stop_type": "마을버스", + "node_id": "113900052", + "nxtStn": "서울여자중고등학교" + }, + { + "stop_nm": "하나은행망원동지점", + "ycode": "37.5570891333", + "stop_no": "14562", + "xcode": "126.904280554", + "stop_type": "마을버스", + "node_id": "113900253", + "nxtStn": "망원시장" + }, + { + "stop_nm": "마포구청.마포구청역", + "ycode": "37.5657503917", + "stop_no": "14563", + "xcode": "126.9009458973", + "stop_type": "마을버스", + "node_id": "113900053", + "nxtStn": "월드컵경기장역" + }, + { + "stop_nm": "마포새빛문화숲후문", + "ycode": "37.5450286612", + "stop_no": "14564", + "xcode": "126.9210360015", + "stop_type": "마을버스", + "node_id": "113900054", + "nxtStn": "상수동" + }, + { + "stop_nm": "마포FM", + "ycode": "37.5609964881", + "stop_no": "14565", + "xcode": "126.9177138986", + "stop_type": "마을버스", + "node_id": "113900055", + "nxtStn": "경성중고.홍익디자인고" + }, + { + "stop_nm": "연남동주민센터", + "ycode": "37.5640863415", + "stop_no": "14566", + "xcode": "126.9230681745", + "stop_type": "마을버스", + "node_id": "113900056", + "nxtStn": "에덴지우아파트" + }, + { + "stop_nm": "도화현대1차아파트111동앞", + "ycode": "37.5411751362", + "stop_no": "14567", + "xcode": "126.9543656256", + "stop_type": "마을버스", + "node_id": "113900057", + "nxtStn": "도화현대1차아파트단지내" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.5471721489", + "stop_no": "14569", + "xcode": "126.9371834845", + "stop_type": "마을버스", + "node_id": "113900058", + "nxtStn": "마포세무서" + }, + { + "stop_nm": "한국출판콘텐츠센터", + "ycode": "37.5446400388", + "stop_no": "14570", + "xcode": "126.9354914384", + "stop_type": "마을버스", + "node_id": "113900059", + "nxtStn": "신수현대아파트.래미안웰스트림" + }, + { + "stop_nm": "서울여자중고등학교", + "ycode": "37.547055382", + "stop_no": "14571", + "xcode": "126.9471495554", + "stop_type": "마을버스", + "node_id": "113900060", + "nxtStn": "염리삼성아파트" + }, + { + "stop_nm": "망원시장", + "ycode": "37.5574392258", + "stop_no": "14572", + "xcode": "126.9059847205", + "stop_type": "마을버스", + "node_id": "113900254", + "nxtStn": "구)망원우체국사거리" + }, + { + "stop_nm": "월드컵경기장역", + "ycode": "37.5692704064", + "stop_no": "14573", + "xcode": "126.9002903006", + "stop_type": "마을버스", + "node_id": "113900061", + "nxtStn": "성산아파트" + }, + { + "stop_nm": "상수동", + "ycode": "37.5464906666", + "stop_no": "14574", + "xcode": "126.9230500467", + "stop_type": "마을버스", + "node_id": "113900062", + "nxtStn": "상수역" + }, + { + "stop_nm": "경성중고.홍익디자인고", + "ycode": "37.5619139666", + "stop_no": "14575", + "xcode": "126.9192591331", + "stop_type": "마을버스", + "node_id": "113900265", + "nxtStn": "코오롱아파트사거리" + }, + { + "stop_nm": "에덴지우아파트", + "ycode": "37.5645907957", + "stop_no": "14576", + "xcode": "126.924217758", + "stop_type": "마을버스", + "node_id": "113900063", + "nxtStn": "에덴맨션" + }, + { + "stop_nm": "도화현대1차아파트", + "ycode": "37.5404825999", + "stop_no": "14577", + "xcode": "126.9554309077", + "stop_type": "마을버스", + "node_id": "113900064", + "nxtStn": "세븐일레븐" + }, + { + "stop_nm": "망원유수지.마포구민체육센터", + "ycode": "37.5559070067", + "stop_no": "14579", + "xcode": "126.8990019445", + "stop_type": "마을버스", + "node_id": "113900065", + "nxtStn": "화평교회" + }, + { + "stop_nm": "마포세무서", + "ycode": "37.5470162832", + "stop_no": "14582", + "xcode": "126.9389468423", + "stop_type": "마을버스", + "node_id": "113900232", + "nxtStn": "굴다리시장" + }, + { + "stop_nm": "신수현대아파트.래미안웰스트림", + "ycode": "37.5437179924", + "stop_no": "14583", + "xcode": "126.9367020261", + "stop_type": "마을버스", + "node_id": "113900066", + "nxtStn": "신석초등학교" + }, + { + "stop_nm": "염리삼성아파트", + "ycode": "37.5484856059", + "stop_no": "14584", + "xcode": "126.9475661602", + "stop_type": "마을버스", + "node_id": "113900067", + "nxtStn": "일성여자중고등학교" + }, + { + "stop_nm": "구)망원우체국사거리", + "ycode": "37.557824975", + "stop_no": "14585", + "xcode": "126.9076978449", + "stop_type": "마을버스", + "node_id": "113900068", + "nxtStn": "망원전철역" + }, + { + "stop_nm": "상수역", + "ycode": "37.547637", + "stop_no": "14586", + "xcode": "126.923594", + "stop_type": "마을버스", + "node_id": "113900069", + "nxtStn": "상수두산아파트" + }, + { + "stop_nm": "코오롱아파트사거리", + "ycode": "37.5636983072", + "stop_no": "14587", + "xcode": "126.9208510308", + "stop_type": "마을버스", + "node_id": "113900070", + "nxtStn": "경성중고후문" + }, + { + "stop_nm": "에덴맨션", + "ycode": "37.5639839246", + "stop_no": "14588", + "xcode": "126.9249462367", + "stop_type": "마을버스", + "node_id": "113900071", + "nxtStn": "하모니마트사거리" + }, + { + "stop_nm": "서부수도사업소", + "ycode": "37.556804829", + "stop_no": "14589", + "xcode": "126.9598728435", + "stop_type": "마을버스", + "node_id": "113900286", + "nxtStn": "만물사부동산" + }, + { + "stop_nm": "화평교회", + "ycode": "37.5544373457", + "stop_no": "14590", + "xcode": "126.9011589449", + "stop_type": "마을버스", + "node_id": "113900255", + "nxtStn": "망원1동파출소" + }, + { + "stop_nm": "신촌역", + "ycode": "37.5556204253", + "stop_no": "14591", + "xcode": "126.9348062895", + "stop_type": "마을버스", + "node_id": "113900247", + "nxtStn": "신촌역" + }, + { + "stop_nm": "굴다리시장", + "ycode": "37.5462786361", + "stop_no": "14592", + "xcode": "126.9414168429", + "stop_type": "마을버스", + "node_id": "113900072", + "nxtStn": "대흥태영아파트" + }, + { + "stop_nm": "신석초등학교", + "ycode": "37.543163949", + "stop_no": "14593", + "xcode": "126.9386568825", + "stop_type": "마을버스", + "node_id": "113900073", + "nxtStn": "용강동주민센터" + }, + { + "stop_nm": "일성여자중고등학교", + "ycode": "37.5488734491", + "stop_no": "14594", + "xcode": "126.9484113079", + "stop_type": "마을버스", + "node_id": "113900074", + "nxtStn": "마포현대아파트" + }, + { + "stop_nm": "망원전철역", + "ycode": "37.556111", + "stop_no": "14595", + "xcode": "126.909936", + "stop_type": "마을버스", + "node_id": "113900075", + "nxtStn": "성산초등학교" + }, + { + "stop_nm": "상수두산아파트", + "ycode": "37.5475467474", + "stop_no": "14596", + "xcode": "126.9244409921", + "stop_type": "마을버스", + "node_id": "113900076", + "nxtStn": "서강초등학교" + }, + { + "stop_nm": "경성중고후문", + "ycode": "37.5643791604", + "stop_no": "14597", + "xcode": "126.9202967687", + "stop_type": "마을버스", + "node_id": "113900077", + "nxtStn": "경의선숲길공원입구" + }, + { + "stop_nm": "하모니마트사거리", + "ycode": "37.5633660552", + "stop_no": "14598", + "xcode": "126.9253883256", + "stop_type": "마을버스", + "node_id": "113900078", + "nxtStn": "대명아파트" + }, + { + "stop_nm": "만물사부동산", + "ycode": "37.5553480504", + "stop_no": "14599", + "xcode": "126.9607372268", + "stop_type": "마을버스", + "node_id": "113900217", + "nxtStn": "환일고등학교" + }, + { + "stop_nm": "하나님의교회", + "ycode": "37.539331855", + "stop_no": "14600", + "xcode": "126.9553127738", + "stop_type": "마을버스", + "node_id": "113900079", + "nxtStn": "용산성당.현대홈타운" + }, + { + "stop_nm": "MBC", + "ycode": "37.5796281217", + "stop_no": "14601", + "xcode": "126.8917373023", + "stop_type": "마을버스", + "node_id": "113900001", + "nxtStn": "월드컵파크4단지후문.JTBC" + }, + { + "stop_nm": "월드컵파크4단지", + "ycode": "37.5778014837", + "stop_no": "14602", + "xcode": "126.8877410517", + "stop_type": "마을버스", + "node_id": "113900002", + "nxtStn": "상암중학교" + }, + { + "stop_nm": "상암중학교", + "ycode": "37.578973", + "stop_no": "14603", + "xcode": "126.887243", + "stop_type": "마을버스", + "node_id": "113900003", + "nxtStn": "서울산업진흥원.국악방송" + }, + { + "stop_nm": "서울산업진흥원.국악방송", + "ycode": "37.580736", + "stop_no": "14604", + "xcode": "126.888953", + "stop_type": "마을버스", + "node_id": "113900004", + "nxtStn": "우리기술사옥.한국지역정보개발원" + }, + { + "stop_nm": "우리기술사옥.한국지역정보개발원", + "ycode": "37.582262", + "stop_no": "14605", + "xcode": "126.887877", + "stop_type": "마을버스", + "node_id": "113900005", + "nxtStn": "DMC빌" + }, + { + "stop_nm": "DMC빌", + "ycode": "37.582393", + "stop_no": "14606", + "xcode": "126.885591", + "stop_type": "마을버스", + "node_id": "113900006", + "nxtStn": "상암고등학교" + }, + { + "stop_nm": "우리금융상암센터.DMC빌", + "ycode": "37.581936", + "stop_no": "14607", + "xcode": "126.885579", + "stop_type": "마을버스", + "node_id": "113900007", + "nxtStn": "스탠포드호텔" + }, + { + "stop_nm": "도화현대1차아파트단지내", + "ycode": "37.539784", + "stop_no": "14608", + "xcode": "126.954589", + "stop_type": "마을버스", + "node_id": "113900223", + "nxtStn": "도화현대1차아파트" + }, + { + "stop_nm": "양화대교북단(가상)", + "ycode": "37.5499218193", + "stop_no": "14609", + "xcode": "126.9042670854", + "stop_type": "가상정류장", + "node_id": "113000462", + "nxtStn": "성산대교북단(가상)" + }, + { + "stop_nm": "상암고등학교", + "ycode": "37.5809780136", + "stop_no": "14610", + "xcode": "126.8825326891", + "stop_type": "마을버스", + "node_id": "111001127", + "nxtStn": "상암월드컵파크6.7단지" + }, + { + "stop_nm": "상암월드컵파크6.7단지", + "ycode": "37.5812734756", + "stop_no": "14611", + "xcode": "126.8805398078", + "stop_type": "마을버스", + "node_id": "113900314", + "nxtStn": "종점" + }, + { + "stop_nm": "상암월드컵파크6.7단지", + "ycode": "37.5810587094", + "stop_no": "14612", + "xcode": "126.8806237964", + "stop_type": "마을버스", + "node_id": "113900315", + "nxtStn": "상암고등학교" + }, + { + "stop_nm": "상암고등학교", + "ycode": "37.580684598", + "stop_no": "14613", + "xcode": "126.8836707859", + "stop_type": "마을버스", + "node_id": "111901150", + "nxtStn": "우리금융상암센터.DMC빌" + }, + { + "stop_nm": "스탠포드호텔", + "ycode": "37.5824225201", + "stop_no": "14614", + "xcode": "126.8861172457", + "stop_type": "일반차로", + "node_id": "113000467", + "nxtStn": "월드컵파크7단지" + }, + { + "stop_nm": "스탠포드호텔", + "ycode": "37.5824509369", + "stop_no": "14615", + "xcode": "126.8856846789", + "stop_type": "일반차로", + "node_id": "113000466", + "nxtStn": "상암월드컵파크5단지" + }, + { + "stop_nm": "월드컵파크6단지상가", + "ycode": "37.5798067452", + "stop_no": "14616", + "xcode": "126.885663889", + "stop_type": "마을버스", + "node_id": "111901151", + "nxtStn": "월드컵파크6단지" + }, + { + "stop_nm": "공덕역10번출구", + "ycode": "37.54185", + "stop_no": "14617", + "xcode": "126.953092", + "stop_type": "마을버스", + "node_id": "113900290", + "nxtStn": "열린마트" + }, + { + "stop_nm": "공덕역10번출구", + "ycode": "37.541839", + "stop_no": "14618", + "xcode": "126.95289", + "stop_type": "마을버스", + "node_id": "113900289", + "nxtStn": "도화현대1차아파트111동앞" + }, + { + "stop_nm": "웨딩타운", + "ycode": "37.556973", + "stop_no": "14619", + "xcode": "126.951584", + "stop_type": "마을버스", + "node_id": "113900291", + "nxtStn": "북아현로입구" + }, + { + "stop_nm": "상지초등학교", + "ycode": "37.5797209678", + "stop_no": "14620", + "xcode": "126.8814543536", + "stop_type": "마을버스", + "node_id": "113900293", + "nxtStn": "종점" + }, + { + "stop_nm": "아현전철역", + "ycode": "37.557174107", + "stop_no": "14622", + "xcode": "126.9568346839", + "stop_type": "마을버스", + "node_id": "113900218", + "nxtStn": "가구단지" + }, + { + "stop_nm": "스탠포드호텔", + "ycode": "37.58256", + "stop_no": "14623", + "xcode": "126.886563", + "stop_type": "마을버스", + "node_id": "113900008", + "nxtStn": "우리기술사옥.한국지역정보개발원" + }, + { + "stop_nm": "우리기술사옥.한국지역정보개발원", + "ycode": "37.582026762", + "stop_no": "14624", + "xcode": "126.8878117007", + "stop_type": "마을버스", + "node_id": "113900009", + "nxtStn": "전자회관" + }, + { + "stop_nm": "전자회관", + "ycode": "37.5808056835", + "stop_no": "14625", + "xcode": "126.8886559163", + "stop_type": "마을버스", + "node_id": "113900010", + "nxtStn": "상암중학교" + }, + { + "stop_nm": "상암중학교", + "ycode": "37.579330494", + "stop_no": "14626", + "xcode": "126.8872133447", + "stop_type": "마을버스", + "node_id": "113900011", + "nxtStn": "월드컵파크6단지" + }, + { + "stop_nm": "월드컵파크6단지", + "ycode": "37.5781786312", + "stop_no": "14627", + "xcode": "126.8873113833", + "stop_type": "마을버스", + "node_id": "113900012", + "nxtStn": "월드컵파크4단지후문.JTBC" + }, + { + "stop_nm": "YTN뉴스퀘어.CJE&M", + "ycode": "37.579007", + "stop_no": "14628", + "xcode": "126.891577", + "stop_type": "마을버스", + "node_id": "113900013", + "nxtStn": "SBS.YTN" + }, + { + "stop_nm": "마포한강아이파크아파트", + "ycode": "37.5524231339", + "stop_no": "14659", + "xcode": "126.9041144875", + "stop_type": "마을버스", + "node_id": "113900256", + "nxtStn": "하모니마트" + }, + { + "stop_nm": "중동초등학교", + "ycode": "37.566822815", + "stop_no": "14661", + "xcode": "126.9101093439", + "stop_type": "마을버스", + "node_id": "113900080", + "nxtStn": "성모병원사거리" + }, + { + "stop_nm": "대흥태영아파트", + "ycode": "37.5457513998", + "stop_no": "14662", + "xcode": "126.9430638871", + "stop_type": "마을버스", + "node_id": "113900081", + "nxtStn": "대흥세양아파트" + }, + { + "stop_nm": "용강동주민센터", + "ycode": "37.541885", + "stop_no": "14663", + "xcode": "126.940554", + "stop_type": "마을버스", + "node_id": "113900082", + "nxtStn": "마포전철역" + }, + { + "stop_nm": "서강대교북단(가상)", + "ycode": "37.5437095826", + "stop_no": "14664", + "xcode": "126.9289183928", + "stop_type": "가상정류장", + "node_id": "113000481", + "nxtStn": "양화대교북단(가상)" + }, + { + "stop_nm": "양화대교북단(가상)", + "ycode": "37.547406373", + "stop_no": "14665", + "xcode": "126.9082296874", + "stop_type": "가상정류장", + "node_id": "113000482", + "nxtStn": "성산대교북단(가상)" + }, + { + "stop_nm": "마포현대아파트", + "ycode": "37.5487755518", + "stop_no": "14667", + "xcode": "126.9491538042", + "stop_type": "마을버스", + "node_id": "113900083", + "nxtStn": "공덕삼성3차아파트후문" + }, + { + "stop_nm": "성산초등학교", + "ycode": "37.5542263109", + "stop_no": "14669", + "xcode": "126.9123428704", + "stop_type": "마을버스", + "node_id": "113900084", + "nxtStn": "고니빌딩" + }, + { + "stop_nm": "서강초등학교", + "ycode": "37.5474902299", + "stop_no": "14670", + "xcode": "126.9262642691", + "stop_type": "마을버스", + "node_id": "113900237", + "nxtStn": "서강쌍용아파트.광흥창역" + }, + { + "stop_nm": "경의선숲길공원입구", + "ycode": "37.5658939505", + "stop_no": "14671", + "xcode": "126.9190510756", + "stop_type": "마을버스", + "node_id": "113900085", + "nxtStn": "사천고가앞" + }, + { + "stop_nm": "대명아파트", + "ycode": "37.5624505717", + "stop_no": "14672", + "xcode": "126.9243116542", + "stop_type": "마을버스", + "node_id": "113900086", + "nxtStn": "종점" + }, + { + "stop_nm": "환일고등학교", + "ycode": "37.5545623235", + "stop_no": "14674", + "xcode": "126.9608191314", + "stop_type": "마을버스", + "node_id": "113900087", + "nxtStn": "아현1동경로당" + }, + { + "stop_nm": "용산성당.현대홈타운", + "ycode": "37.5376063241", + "stop_no": "14675", + "xcode": "126.9531660599", + "stop_type": "마을버스", + "node_id": "113900216", + "nxtStn": "원효초등학교" + }, + { + "stop_nm": "가구단지", + "ycode": "37.5580233931", + "stop_no": "14676", + "xcode": "126.9607211084", + "stop_type": "마을버스", + "node_id": "113900088", + "nxtStn": "종근당" + }, + { + "stop_nm": "하모니마트", + "ycode": "37.5522804732", + "stop_no": "14677", + "xcode": "126.9059979922", + "stop_type": "마을버스", + "node_id": "113900089", + "nxtStn": "새서울의원" + }, + { + "stop_nm": "성모병원사거리", + "ycode": "37.564613951", + "stop_no": "14678", + "xcode": "126.9121224136", + "stop_type": "마을버스", + "node_id": "113900090", + "nxtStn": "성미약수터" + }, + { + "stop_nm": "마포대교북단(가상)", + "ycode": "37.5405215516", + "stop_no": "14682", + "xcode": "126.9396616685", + "stop_type": "가상정류장", + "node_id": "113000460", + "nxtStn": "서강대교북단(가상)" + }, + { + "stop_nm": "창전삼성아파트입구", + "ycode": "37.5517786762", + "stop_no": "14693", + "xcode": "126.9325188796", + "stop_type": "마을버스", + "node_id": "113900091", + "nxtStn": "창전삼성아파트104동" + }, + { + "stop_nm": "대흥세양아파트", + "ycode": "37.5448456877", + "stop_no": "14694", + "xcode": "126.9447270314", + "stop_type": "마을버스", + "node_id": "113900092", + "nxtStn": "마포자이아파트" + }, + { + "stop_nm": "아현1동경로당", + "ycode": "37.5536056568", + "stop_no": "14700", + "xcode": "126.9610258398", + "stop_type": "마을버스", + "node_id": "101900027", + "nxtStn": "만리동고개" + }, + { + "stop_nm": "마포전철역", + "ycode": "37.539618346", + "stop_no": "14712", + "xcode": "126.9445498324", + "stop_type": "마을버스", + "node_id": "113900093", + "nxtStn": "성지빌딩" + }, + { + "stop_nm": "공덕삼성3차아파트후문", + "ycode": "37.5491526058", + "stop_no": "14713", + "xcode": "126.9512380153", + "stop_type": "마을버스", + "node_id": "113900094", + "nxtStn": "엘지빌딩" + }, + { + "stop_nm": "고니빌딩", + "ycode": "37.5545141067", + "stop_no": "14714", + "xcode": "126.9140402901", + "stop_type": "마을버스", + "node_id": "113900095", + "nxtStn": "서교동주민센터" + }, + { + "stop_nm": "서강쌍용아파트.광흥창역", + "ycode": "37.5479459242", + "stop_no": "14715", + "xcode": "126.9302871512", + "stop_type": "마을버스", + "node_id": "113900096", + "nxtStn": "이랜드" + }, + { + "stop_nm": "사천고가앞", + "ycode": "37.567173", + "stop_no": "14716", + "xcode": "126.917561", + "stop_type": "마을버스", + "node_id": "113900266", + "nxtStn": "사천교" + }, + { + "stop_nm": "원효초등학교", + "ycode": "37.536212316", + "stop_no": "14718", + "xcode": "126.9509196507", + "stop_type": "마을버스", + "node_id": "113900097", + "nxtStn": "한강타운.우성아파트16동앞" + }, + { + "stop_nm": "새서울의원", + "ycode": "37.5512595136", + "stop_no": "14727", + "xcode": "126.9070201173", + "stop_type": "마을버스", + "node_id": "113900098", + "nxtStn": "남경장" + }, + { + "stop_nm": "창전삼성아파트104동", + "ycode": "37.5512824672", + "stop_no": "14738", + "xcode": "126.9314899516", + "stop_type": "마을버스", + "node_id": "113900099", + "nxtStn": "창전삼성아파트107동" + }, + { + "stop_nm": "와우산로오거리", + "ycode": "37.5544423161", + "stop_no": "14742", + "xcode": "126.9299639616", + "stop_type": "마을버스", + "node_id": "113900313", + "nxtStn": "와우공원입구" + }, + { + "stop_nm": "산울림포스트극장", + "ycode": "37.554667", + "stop_no": "14743", + "xcode": "126.93037", + "stop_type": "마을버스", + "node_id": "113900100", + "nxtStn": "와우산로오거리" + }, + { + "stop_nm": "마포자이아파트", + "ycode": "37.5441046793", + "stop_no": "14744", + "xcode": "126.9460097727", + "stop_type": "마을버스", + "node_id": "113900101", + "nxtStn": "염리초등학교" + }, + { + "stop_nm": "성지빌딩", + "ycode": "37.5414733719", + "stop_no": "14745", + "xcode": "126.945776289", + "stop_type": "마을버스", + "node_id": "113900102", + "nxtStn": "염리초등학교" + }, + { + "stop_nm": "엘지빌딩", + "ycode": "37.5483341659", + "stop_no": "14746", + "xcode": "126.9539119587", + "stop_type": "마을버스", + "node_id": "113900103", + "nxtStn": "아현동주민센터" + }, + { + "stop_nm": "서교동주민센터", + "ycode": "37.5547403269", + "stop_no": "14747", + "xcode": "126.9153507025", + "stop_type": "마을버스", + "node_id": "113900104", + "nxtStn": "우리은행서교동지점" + }, + { + "stop_nm": "이랜드", + "ycode": "37.5491991774", + "stop_no": "14748", + "xcode": "126.9315365761", + "stop_type": "마을버스", + "node_id": "113900235", + "nxtStn": "마포노인복지관" + }, + { + "stop_nm": "만리동고개", + "ycode": "37.5516189178", + "stop_no": "14749", + "xcode": "126.9622625784", + "stop_type": "마을버스", + "node_id": "113900283", + "nxtStn": "공덕동주민센터" + }, + { + "stop_nm": "한강타운.우성아파트16동앞", + "ycode": "37.5359386921", + "stop_no": "14750", + "xcode": "126.949516699", + "stop_type": "마을버스", + "node_id": "113900105", + "nxtStn": "종점" + }, + { + "stop_nm": "공덕전철역", + "ycode": "37.5432839409", + "stop_no": "14753", + "xcode": "126.9526849444", + "stop_type": "마을버스", + "node_id": "113900222", + "nxtStn": "종점" + }, + { + "stop_nm": "남경장", + "ycode": "37.5487583715", + "stop_no": "14754", + "xcode": "126.9098198111", + "stop_type": "마을버스", + "node_id": "113900250", + "nxtStn": "양화진성지공원입구" + }, + { + "stop_nm": "창전삼성아파트107동", + "ycode": "37.5508496218", + "stop_no": "14755", + "xcode": "126.9309159814", + "stop_type": "마을버스", + "node_id": "113900106", + "nxtStn": "창전삼성아파트109동" + }, + { + "stop_nm": "와우공원입구", + "ycode": "37.55326", + "stop_no": "14756", + "xcode": "126.929943", + "stop_type": "마을버스", + "node_id": "113900107", + "nxtStn": "유관순무용원" + }, + { + "stop_nm": "염리초등학교", + "ycode": "37.542602893", + "stop_no": "14757", + "xcode": "126.9467600134", + "stop_type": "마을버스", + "node_id": "113900108", + "nxtStn": "중부여성발전센터" + }, + { + "stop_nm": "염리초등학교", + "ycode": "37.5426264908", + "stop_no": "14758", + "xcode": "126.9471368388", + "stop_type": "마을버스", + "node_id": "113900109", + "nxtStn": "재화스퀘어" + }, + { + "stop_nm": "아현동주민센터", + "ycode": "37.5471182709", + "stop_no": "14760", + "xcode": "126.9531057864", + "stop_type": "마을버스", + "node_id": "113900221", + "nxtStn": "공덕전철역" + }, + { + "stop_nm": "우리은행서교동지점", + "ycode": "37.5532594418", + "stop_no": "14761", + "xcode": "126.9173477744", + "stop_type": "마을버스", + "node_id": "113900238", + "nxtStn": "서교동교회" + }, + { + "stop_nm": "마포노인복지관", + "ycode": "37.5495294243", + "stop_no": "14763", + "xcode": "126.9323103997", + "stop_type": "마을버스", + "node_id": "113900110", + "nxtStn": "창전현대홈타운" + }, + { + "stop_nm": "공덕동주민센터", + "ycode": "37.550516", + "stop_no": "14764", + "xcode": "126.960085", + "stop_type": "마을버스", + "node_id": "113900111", + "nxtStn": "삼우빌딩" + }, + { + "stop_nm": "청암대", + "ycode": "37.5357712964", + "stop_no": "14765", + "xcode": "126.9479213196", + "stop_type": "마을버스", + "node_id": "113900112", + "nxtStn": "우성아파트3동" + }, + { + "stop_nm": "성산대교북단(가상)", + "ycode": "37.5579914723", + "stop_no": "14768", + "xcode": "126.8931280157", + "stop_type": "가상정류장", + "node_id": "113000463", + "nxtStn": "양화대교북단(가상)" + }, + { + "stop_nm": "성서초등학교", + "ycode": "37.5586625923", + "stop_no": "14799", + "xcode": "126.9126081977", + "stop_type": "마을버스", + "node_id": "113900113", + "nxtStn": "희성교회" + }, + { + "stop_nm": "마포역서울가든호텔", + "ycode": "37.5407404838", + "stop_no": "14803", + "xcode": "126.9471087481", + "stop_type": "일반차로", + "node_id": "113000383", + "nxtStn": "서강대교북단(가상)" + }, + { + "stop_nm": "창전어린이공원", + "ycode": "37.550275", + "stop_no": "14804", + "xcode": "126.929512", + "stop_type": "마을버스", + "node_id": "113900310", + "nxtStn": "창전삼성아파트110동" + }, + { + "stop_nm": "창전어린이공원", + "ycode": "37.5502453963", + "stop_no": "14805", + "xcode": "126.9293288892", + "stop_type": "마을버스", + "node_id": "113900311", + "nxtStn": "창전삼성아파트109동" + }, + { + "stop_nm": "창전삼성아파트109동", + "ycode": "37.5504860271", + "stop_no": "14808", + "xcode": "126.9302994032", + "stop_type": "마을버스", + "node_id": "113900114", + "nxtStn": "창전어린이공원" + }, + { + "stop_nm": "유관순무용원", + "ycode": "37.55285", + "stop_no": "14809", + "xcode": "126.92905", + "stop_type": "마을버스", + "node_id": "113900115", + "nxtStn": "서강유치원" + }, + { + "stop_nm": "중부여성발전센터", + "ycode": "37.541218067", + "stop_no": "14810", + "xcode": "126.9451382306", + "stop_type": "마을버스", + "node_id": "113900116", + "nxtStn": "마포전철역" + }, + { + "stop_nm": "재화스퀘어", + "ycode": "37.543896028", + "stop_no": "14812", + "xcode": "126.9468982901", + "stop_type": "마을버스", + "node_id": "113900117", + "nxtStn": "한국컴퓨터" + }, + { + "stop_nm": "공덕전철역", + "ycode": "37.545520682", + "stop_no": "14814", + "xcode": "126.9510176651", + "stop_type": "마을버스", + "node_id": "113900118", + "nxtStn": "공덕역2번출구" + }, + { + "stop_nm": "월드컵경기장입구", + "ycode": "37.5624161019", + "stop_no": "14815", + "xcode": "126.9028169097", + "stop_type": "일반차로", + "node_id": "113000395", + "nxtStn": "연희104고지앞.구성산회관" + }, + { + "stop_nm": "월드컵경기장입구", + "ycode": "37.5628235118", + "stop_no": "14816", + "xcode": "126.9029578759", + "stop_type": "일반차로", + "node_id": "113000396", + "nxtStn": "성산대교북단(가상)" + }, + { + "stop_nm": "월드컵파크7단지", + "ycode": "37.582255636", + "stop_no": "14817", + "xcode": "126.8804641383", + "stop_type": "일반차로", + "node_id": "113000397", + "nxtStn": "수색교" + }, + { + "stop_nm": "월드컵파크7단지", + "ycode": "37.58198", + "stop_no": "14818", + "xcode": "126.87924", + "stop_type": "일반차로", + "node_id": "113000398", + "nxtStn": "마곡철교(가상)" + }, + { + "stop_nm": "상암동입구", + "ycode": "37.573784664", + "stop_no": "14826", + "xcode": "126.8994147382", + "stop_type": "일반차로", + "node_id": "113000406", + "nxtStn": "증산역" + }, + { + "stop_nm": "상암동입구", + "ycode": "37.5738246995", + "stop_no": "14827", + "xcode": "126.8983845144", + "stop_type": "일반차로", + "node_id": "113000407", + "nxtStn": "상암DMC홍보관.YTN" + }, + { + "stop_nm": "상암월드컵파크5단지", + "ycode": "37.580846", + "stop_no": "14828", + "xcode": "126.886475", + "stop_type": "일반차로", + "node_id": "113000408", + "nxtStn": "스탠포드호텔" + }, + { + "stop_nm": "상암월드컵파크5단지", + "ycode": "37.580475", + "stop_no": "14829", + "xcode": "126.88641", + "stop_type": "일반차로", + "node_id": "113000409", + "nxtStn": "상암DMC홍보관.YTN" + }, + { + "stop_nm": "성산대교북단(가상)", + "ycode": "37.5602985794", + "stop_no": "14830", + "xcode": "126.8914902203", + "stop_type": "가상정류장", + "node_id": "113000429", + "nxtStn": "난지한강공원(가상)" + }, + { + "stop_nm": "홍은IC(가상)", + "ycode": "37.5637422699", + "stop_no": "14831", + "xcode": "126.884538281", + "stop_type": "가상정류장", + "node_id": "113000427", + "nxtStn": "월드컵경기장입구" + }, + { + "stop_nm": "홍대입구역사거리", + "ycode": "37.5545259524", + "stop_no": "14832", + "xcode": "126.9209776106", + "stop_type": "마을버스", + "node_id": "113900119", + "nxtStn": "서교푸르지오아파트" + }, + { + "stop_nm": "창전현대홈타운", + "ycode": "37.5508740938", + "stop_no": "14833", + "xcode": "126.9327234162", + "stop_type": "마을버스", + "node_id": "113900120", + "nxtStn": "신촌연세병원.기업은행" + }, + { + "stop_nm": "삼우빌딩", + "ycode": "37.5492115356", + "stop_no": "14834", + "xcode": "126.9579450038", + "stop_type": "마을버스", + "node_id": "113900121", + "nxtStn": "공덕동성당" + }, + { + "stop_nm": "합정역", + "ycode": "37.5498487849", + "stop_no": "14835", + "xcode": "126.9147926148", + "stop_type": "마을버스", + "node_id": "113900122", + "nxtStn": "우리은행서교동지점" + }, + { + "stop_nm": "희성교회", + "ycode": "37.5568038157", + "stop_no": "14836", + "xcode": "126.914080671", + "stop_type": "마을버스", + "node_id": "113900123", + "nxtStn": "서교동주민센터" + }, + { + "stop_nm": "서강유치원", + "ycode": "37.552039", + "stop_no": "14837", + "xcode": "126.927969", + "stop_type": "마을버스", + "node_id": "113900124", + "nxtStn": "홍대후문" + }, + { + "stop_nm": "마포전철역", + "ycode": "37.5396209172", + "stop_no": "14838", + "xcode": "126.9442691905", + "stop_type": "마을버스", + "node_id": "113900125", + "nxtStn": "용강동주민센터" + }, + { + "stop_nm": "한국컴퓨터", + "ycode": "37.5449286853", + "stop_no": "14839", + "xcode": "126.94493407", + "stop_type": "마을버스", + "node_id": "113900126", + "nxtStn": "대흥태영아파트" + }, + { + "stop_nm": "신촌연세병원.기업은행", + "ycode": "37.5519917333", + "stop_no": "14842", + "xcode": "126.9332204035", + "stop_type": "마을버스", + "node_id": "113900127", + "nxtStn": "신촌로터리" + }, + { + "stop_nm": "공덕동성당", + "ycode": "37.5483812312", + "stop_no": "14843", + "xcode": "126.9568867015", + "stop_type": "마을버스", + "node_id": "113900128", + "nxtStn": "서울서부지방법원" + }, + { + "stop_nm": "우리은행서교동지점", + "ycode": "37.5519430729", + "stop_no": "14844", + "xcode": "126.9175337114", + "stop_type": "마을버스", + "node_id": "113900129", + "nxtStn": "홍대입구역사거리" + }, + { + "stop_nm": "서교동주민센터.마포신문사", + "ycode": "37.5548725266", + "stop_no": "14845", + "xcode": "126.9162481047", + "stop_type": "마을버스", + "node_id": "113900239", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "홍대후문", + "ycode": "37.551306", + "stop_no": "14846", + "xcode": "126.927311", + "stop_type": "마을버스", + "node_id": "113900130", + "nxtStn": "창전중앙하이츠아파트" + }, + { + "stop_nm": "대흥태영아파트", + "ycode": "37.545951456", + "stop_no": "14848", + "xcode": "126.943090896", + "stop_type": "마을버스", + "node_id": "113900131", + "nxtStn": "굴다리시장" + }, + { + "stop_nm": "동도중학교.서울디지인고등학교", + "ycode": "37.5464463948", + "stop_no": "14849", + "xcode": "126.9455044702", + "stop_type": "마을버스", + "node_id": "113900227", + "nxtStn": "대흥역" + }, + { + "stop_nm": "서울서부지방법원", + "ycode": "37.5488", + "stop_no": "14851", + "xcode": "126.955346", + "stop_type": "마을버스", + "node_id": "113900132", + "nxtStn": "마포경찰서" + }, + { + "stop_nm": "세븐일레븐", + "ycode": "37.540366553", + "stop_no": "14852", + "xcode": "126.9559492607", + "stop_type": "마을버스", + "node_id": "113900133", + "nxtStn": "도화현대1차아파트단지내" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.5556580917", + "stop_no": "14853", + "xcode": "126.919871426", + "stop_type": "마을버스", + "node_id": "113900240", + "nxtStn": "홍대입구역" + }, + { + "stop_nm": "난지한강공원(가상)", + "ycode": "37.5707180521", + "stop_no": "14854", + "xcode": "126.8735248004", + "stop_type": "가상정류장", + "node_id": "113000465", + "nxtStn": "난지도하수처리장(가상)" + }, + { + "stop_nm": "신석초등학교", + "ycode": "37.5434232109", + "stop_no": "14855", + "xcode": "126.9388467265", + "stop_type": "마을버스", + "node_id": "113900135", + "nxtStn": "신수현대아파트.래미안웰스트림" + }, + { + "stop_nm": "굴다리시장", + "ycode": "37.5463896176", + "stop_no": "14856", + "xcode": "126.9417132655", + "stop_type": "마을버스", + "node_id": "113900136", + "nxtStn": "마포세무서" + }, + { + "stop_nm": "서교동주민센터", + "ycode": "37.5555997561", + "stop_no": "14858", + "xcode": "126.9150520526", + "stop_type": "마을버스", + "node_id": "113900137", + "nxtStn": "우리은행서교동지점" + }, + { + "stop_nm": "난지한강공원(가상)", + "ycode": "37.5702183782", + "stop_no": "14861", + "xcode": "126.8730875323", + "stop_type": "가상정류장", + "node_id": "113000464", + "nxtStn": "합정역" + }, + { + "stop_nm": "서교푸르지오아파트", + "ycode": "37.5536272738", + "stop_no": "14862", + "xcode": "126.9231791726", + "stop_type": "마을버스", + "node_id": "113900140", + "nxtStn": "홍대정문" + }, + { + "stop_nm": "홍대입구역", + "ycode": "37.55669", + "stop_no": "14863", + "xcode": "126.923217", + "stop_type": "마을버스", + "node_id": "113900248", + "nxtStn": "동교로사거리" + }, + { + "stop_nm": "신수현대아파트.래미안웰스트림", + "ycode": "37.5438334622", + "stop_no": "14864", + "xcode": "126.9369441072", + "stop_type": "마을버스", + "node_id": "113900141", + "nxtStn": "한국출판콘텐츠센터" + }, + { + "stop_nm": "마포세무서", + "ycode": "37.5472983739", + "stop_no": "14865", + "xcode": "126.939039414", + "stop_type": "마을버스", + "node_id": "113900142", + "nxtStn": "신수세양아파트" + }, + { + "stop_nm": "대흥역사거리", + "ycode": "37.5481047003", + "stop_no": "14866", + "xcode": "126.9423208067", + "stop_type": "마을버스", + "node_id": "113900226", + "nxtStn": "마포아트센터" + }, + { + "stop_nm": "신촌역", + "ycode": "37.5553244188", + "stop_no": "14867", + "xcode": "126.9356327981", + "stop_type": "일반차로", + "node_id": "113000456", + "nxtStn": "기업은행.신촌연세병원" + }, + { + "stop_nm": "마포경찰서", + "ycode": "37.55034", + "stop_no": "14869", + "xcode": "126.955324", + "stop_type": "마을버스", + "node_id": "113900220", + "nxtStn": "애오개역" + }, + { + "stop_nm": "도화현대1차아파트111동앞", + "ycode": "37.54124", + "stop_no": "14870", + "xcode": "126.954561", + "stop_type": "마을버스", + "node_id": "113900143", + "nxtStn": "공덕역10번출구" + }, + { + "stop_nm": "홍대정문", + "ycode": "37.5529817959", + "stop_no": "14871", + "xcode": "126.9238877068", + "stop_type": "마을버스", + "node_id": "113900144", + "nxtStn": "레드로드입구" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.555868873", + "stop_no": "14872", + "xcode": "126.91976141", + "stop_type": "마을버스", + "node_id": "113900241", + "nxtStn": "서교동주민센터.마포신문사" + }, + { + "stop_nm": "한국출판콘텐츠센터", + "ycode": "37.5447473219", + "stop_no": "14873", + "xcode": "126.9355502266", + "stop_type": "마을버스", + "node_id": "113900145", + "nxtStn": "서강수협.신수중학교" + }, + { + "stop_nm": "신수세양아파트", + "ycode": "37.5474092121", + "stop_no": "14874", + "xcode": "126.9373247519", + "stop_type": "마을버스", + "node_id": "113900146", + "nxtStn": "신수동성당.신수동주민센터" + }, + { + "stop_nm": "서교동교회", + "ycode": "37.5516621838", + "stop_no": "14876", + "xcode": "126.9192022864", + "stop_type": "마을버스", + "node_id": "113900148", + "nxtStn": "레드로드입구" + }, + { + "stop_nm": "애오개역", + "ycode": "37.5525946358", + "stop_no": "14877", + "xcode": "126.9565340004", + "stop_type": "마을버스", + "node_id": "113900149", + "nxtStn": "아현초등학교" + }, + { + "stop_nm": "열린마트", + "ycode": "37.54222", + "stop_no": "14878", + "xcode": "126.951624", + "stop_type": "마을버스", + "node_id": "113900048", + "nxtStn": "가든호텔.삼성프라자" + }, + { + "stop_nm": "레드로드입구", + "ycode": "37.5508193618", + "stop_no": "14879", + "xcode": "126.9214305434", + "stop_type": "마을버스", + "node_id": "113900150", + "nxtStn": "서교동교회" + }, + { + "stop_nm": "서교동주민센터.마포신문사", + "ycode": "37.5550661861", + "stop_no": "14880", + "xcode": "126.9161414944", + "stop_type": "마을버스", + "node_id": "113900242", + "nxtStn": "서교동주민센터" + }, + { + "stop_nm": "서강수협.신수중학교", + "ycode": "37.5454755063", + "stop_no": "14881", + "xcode": "126.932501928", + "stop_type": "마을버스", + "node_id": "113900151", + "nxtStn": "광흥창역.서강동주민센터" + }, + { + "stop_nm": "신수동성당.신수동주민센터", + "ycode": "37.5474825845", + "stop_no": "14882", + "xcode": "126.934706995", + "stop_type": "마을버스", + "node_id": "113900233", + "nxtStn": "광흥창역.서강동주민센터" + }, + { + "stop_nm": "숭문중고등학교후문", + "ycode": "37.5520916812", + "stop_no": "14883", + "xcode": "126.9453441712", + "stop_type": "마을버스", + "node_id": "113900152", + "nxtStn": "마포프레스티지자이아파트" + }, + { + "stop_nm": "레드로드입구", + "ycode": "37.5506427579", + "stop_no": "14884", + "xcode": "126.9214465737", + "stop_type": "마을버스", + "node_id": "113900153", + "nxtStn": "홍대정문" + }, + { + "stop_nm": "가든호텔.삼성프라자", + "ycode": "37.540742", + "stop_no": "14886", + "xcode": "126.949055", + "stop_type": "마을버스", + "node_id": "113900155", + "nxtStn": "샛별문방구.마포전철역" + }, + { + "stop_nm": "희성교회", + "ycode": "37.556871554", + "stop_no": "14887", + "xcode": "126.9142956492", + "stop_type": "마을버스", + "node_id": "113900156", + "nxtStn": "성서초등학교" + }, + { + "stop_nm": "광흥창역.서강동주민센터", + "ycode": "37.5479365863", + "stop_no": "14888", + "xcode": "126.9328324399", + "stop_type": "마을버스", + "node_id": "113900234", + "nxtStn": "마포소방서" + }, + { + "stop_nm": "마포프레스티지자이아파트", + "ycode": "37.5534760955", + "stop_no": "14889", + "xcode": "126.9460686583", + "stop_type": "마을버스", + "node_id": "113900157", + "nxtStn": "이대전철역" + }, + { + "stop_nm": "홍대정문", + "ycode": "37.5520039556", + "stop_no": "14890", + "xcode": "126.9236510232", + "stop_type": "마을버스", + "node_id": "113900158", + "nxtStn": "삼진제약" + }, + { + "stop_nm": "아현초등학교", + "ycode": "37.555839", + "stop_no": "14892", + "xcode": "126.955808", + "stop_type": "마을버스", + "node_id": "113900312", + "nxtStn": "종점" + }, + { + "stop_nm": "샛별문방구.마포전철역", + "ycode": "37.540055", + "stop_no": "14893", + "xcode": "126.947596", + "stop_type": "마을버스", + "node_id": "113900139", + "nxtStn": "S마트" + }, + { + "stop_nm": "상지초등학교", + "ycode": "37.579565", + "stop_no": "14894", + "xcode": "126.881401", + "stop_type": "마을버스", + "node_id": "113900292", + "nxtStn": "서부면허시험장.월드컵파크8단지" + }, + { + "stop_nm": "합정역", + "ycode": "37.5505859949", + "stop_no": "14895", + "xcode": "126.9149513563", + "stop_type": "일반차로", + "node_id": "113000468", + "nxtStn": "난지한강공원(가상)" + }, + { + "stop_nm": "성서초등학교", + "ycode": "37.5586852894", + "stop_no": "14896", + "xcode": "126.9128379471", + "stop_type": "마을버스", + "node_id": "113900160", + "nxtStn": "경성중고사거리" + }, + { + "stop_nm": "마포소방서", + "ycode": "37.5504232028", + "stop_no": "14897", + "xcode": "126.9331168737", + "stop_type": "마을버스", + "node_id": "113900161", + "nxtStn": "신촌연세병원.기업은행" + }, + { + "stop_nm": "이대전철역", + "ycode": "37.5559135339", + "stop_no": "14898", + "xcode": "126.9460216273", + "stop_type": "마을버스", + "node_id": "113900229", + "nxtStn": "이대입구" + }, + { + "stop_nm": "홍대정문", + "ycode": "37.5531509051", + "stop_no": "14899", + "xcode": "126.9248314705", + "stop_type": "마을버스", + "node_id": "113900162", + "nxtStn": "레드로드입구" + }, + { + "stop_nm": "라사라패션직업전문학교", + "ycode": "37.5541278747", + "stop_no": "14900", + "xcode": "126.929511747", + "stop_type": "마을버스", + "node_id": "113900163", + "nxtStn": "신촌농협.하나로마트" + }, + { + "stop_nm": "사천고가앞", + "ycode": "37.566914654", + "stop_no": "14901", + "xcode": "126.9174119301", + "stop_type": "마을버스", + "node_id": "113900164", + "nxtStn": "경의선숲길공원입구" + }, + { + "stop_nm": "S마트", + "ycode": "37.538833", + "stop_no": "14902", + "xcode": "126.94745", + "stop_type": "마을버스", + "node_id": "113900224", + "nxtStn": "우성아파트입구" + }, + { + "stop_nm": "경성중고사거리", + "ycode": "37.5606439736", + "stop_no": "14905", + "xcode": "126.9161669371", + "stop_type": "마을버스", + "node_id": "113900165", + "nxtStn": "성미약수터" + }, + { + "stop_nm": "서교푸르지오아파트", + "ycode": "37.55391", + "stop_no": "14906", + "xcode": "126.923179", + "stop_type": "마을버스", + "node_id": "113900166", + "nxtStn": "홍대입구역사거리" + }, + { + "stop_nm": "경의선숲길공원입구", + "ycode": "37.565464", + "stop_no": "14907", + "xcode": "126.919186", + "stop_type": "마을버스", + "node_id": "113900167", + "nxtStn": "경성중고후문" + }, + { + "stop_nm": "우성아파트입구", + "ycode": "37.537967", + "stop_no": "14908", + "xcode": "126.947384", + "stop_type": "마을버스", + "node_id": "113900168", + "nxtStn": "우성아파트3동" + }, + { + "stop_nm": "성미약수터", + "ycode": "37.5622973046", + "stop_no": "14910", + "xcode": "126.9146652433", + "stop_type": "마을버스", + "node_id": "113900169", + "nxtStn": "성모병원사거리" + }, + { + "stop_nm": "홍대입구", + "ycode": "37.5545361094", + "stop_no": "14911", + "xcode": "126.9224697856", + "stop_type": "일반차로", + "node_id": "113000503", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "공항철도.홍대입구역", + "ycode": "37.5577221581", + "stop_no": "14912", + "xcode": "126.9252620559", + "stop_type": "일반차로", + "node_id": "113000504", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "경성중고후문", + "ycode": "37.564438", + "stop_no": "14913", + "xcode": "126.920127", + "stop_type": "마을버스", + "node_id": "113900171", + "nxtStn": "코오롱아파트사거리" + }, + { + "stop_nm": "우성아파트3동", + "ycode": "37.536403", + "stop_no": "14914", + "xcode": "126.947396", + "stop_type": "마을버스", + "node_id": "113900172", + "nxtStn": "청암대" + }, + { + "stop_nm": "하모니마트", + "ycode": "37.5525211624", + "stop_no": "14915", + "xcode": "126.9061199251", + "stop_type": "마을버스", + "node_id": "113900173", + "nxtStn": "마포한강아이파크아파트" + }, + { + "stop_nm": "성모병원사거리", + "ycode": "37.5646439871", + "stop_no": "14916", + "xcode": "126.9125264992", + "stop_type": "마을버스", + "node_id": "113900174", + "nxtStn": "중동초등학교" + }, + { + "stop_nm": "코오롱아파트사거리", + "ycode": "37.563581", + "stop_no": "14917", + "xcode": "126.920842", + "stop_type": "마을버스", + "node_id": "113900175", + "nxtStn": "경성중고.홍익디자인고" + }, + { + "stop_nm": "도화현대1차아파트", + "ycode": "37.5404537169", + "stop_no": "14918", + "xcode": "126.9553041828", + "stop_type": "마을버스", + "node_id": "113900287", + "nxtStn": "세븐일레븐" + }, + { + "stop_nm": "마포한강아이파크아파트", + "ycode": "37.5526385439", + "stop_no": "14919", + "xcode": "126.9041741974", + "stop_type": "마을버스", + "node_id": "113900257", + "nxtStn": "망원1동파출소" + }, + { + "stop_nm": "중동초등학교", + "ycode": "37.5665745631", + "stop_no": "14920", + "xcode": "126.9107016888", + "stop_type": "마을버스", + "node_id": "113900176", + "nxtStn": "성산2동주민센터" + }, + { + "stop_nm": "신한은행서교동금융센터점", + "ycode": "37.5573853501", + "stop_no": "14921", + "xcode": "126.9183539873", + "stop_type": "마을버스", + "node_id": "113900177", + "nxtStn": "대우미래사랑아파트" + }, + { + "stop_nm": "경성중고.홍익디자인고", + "ycode": "37.5622871811", + "stop_no": "14922", + "xcode": "126.919496441", + "stop_type": "마을버스", + "node_id": "113900178", + "nxtStn": "효성약국" + }, + { + "stop_nm": "망원1동파출소", + "ycode": "37.5536897719", + "stop_no": "14923", + "xcode": "126.9026460189", + "stop_type": "마을버스", + "node_id": "113900179", + "nxtStn": "화평교회" + }, + { + "stop_nm": "대우미래사랑아파트", + "ycode": "37.5567410028", + "stop_no": "14924", + "xcode": "126.9169681476", + "stop_type": "마을버스", + "node_id": "113900180", + "nxtStn": "한국해양전략연구소" + }, + { + "stop_nm": "효성약국", + "ycode": "37.5612082417", + "stop_no": "14925", + "xcode": "126.917709138", + "stop_type": "마을버스", + "node_id": "113900181", + "nxtStn": "경성중고.홍대부속여중고입구" + }, + { + "stop_nm": "화평교회", + "ycode": "37.554615888", + "stop_no": "14926", + "xcode": "126.9013092437", + "stop_type": "마을버스", + "node_id": "113900258", + "nxtStn": "망원유수지.마포구민체육센터" + }, + { + "stop_nm": "성산시영아파트", + "ycode": "37.5699733715", + "stop_no": "14927", + "xcode": "126.9036833144", + "stop_type": "마을버스", + "node_id": "113900182", + "nxtStn": "성산아파트" + }, + { + "stop_nm": "한국해양전략연구소", + "ycode": "37.55615891", + "stop_no": "14928", + "xcode": "126.9157158214", + "stop_type": "마을버스", + "node_id": "113900183", + "nxtStn": "서교동주민센터" + }, + { + "stop_nm": "망원1동파출소", + "ycode": "37.55346", + "stop_no": "14929", + "xcode": "126.902746", + "stop_type": "마을버스", + "node_id": "113900294", + "nxtStn": "마포한강아이파크아파트" + }, + { + "stop_nm": "망원유수지.마포구민체육센터", + "ycode": "37.5559856164", + "stop_no": "14930", + "xcode": "126.8992531113", + "stop_type": "마을버스", + "node_id": "113900184", + "nxtStn": "망원교회" + }, + { + "stop_nm": "서교동주민센터", + "ycode": "37.5556453918", + "stop_no": "14932", + "xcode": "126.9146083137", + "stop_type": "마을버스", + "node_id": "113900185", + "nxtStn": "새화빌딩" + }, + { + "stop_nm": "창전삼성아파트", + "ycode": "37.5515831433", + "stop_no": "14933", + "xcode": "126.9325269785", + "stop_type": "마을버스", + "node_id": "113900186", + "nxtStn": "창전현대홈타운" + }, + { + "stop_nm": "임오빌딩", + "ycode": "37.5587705681", + "stop_no": "14934", + "xcode": "126.917399414", + "stop_type": "마을버스", + "node_id": "113900189", + "nxtStn": "서울도시가스마포사옥" + }, + { + "stop_nm": "월드컵경기장역", + "ycode": "37.573873297", + "stop_no": "14935", + "xcode": "126.8983131242", + "stop_type": "마을버스", + "node_id": "113900269", + "nxtStn": "DMC상암센트럴파크" + }, + { + "stop_nm": "새화빌딩", + "ycode": "37.5551110975", + "stop_no": "14936", + "xcode": "126.9134453847", + "stop_type": "마을버스", + "node_id": "113900187", + "nxtStn": "성산초등학교" + }, + { + "stop_nm": "신촌이랜드청년주택", + "ycode": "37.549509", + "stop_no": "14937", + "xcode": "126.93152", + "stop_type": "마을버스", + "node_id": "113900188", + "nxtStn": "서강쌍용아파트.광흥창역" + }, + { + "stop_nm": "성산초등학교", + "ycode": "37.5544197369", + "stop_no": "14940", + "xcode": "126.9119272598", + "stop_type": "마을버스", + "node_id": "113900243", + "nxtStn": "망원전철역" + }, + { + "stop_nm": "우리은행서교동지점", + "ycode": "37.5533631842", + "stop_no": "14941", + "xcode": "126.9175609269", + "stop_type": "마을버스", + "node_id": "113900190", + "nxtStn": "서교동주민센터" + }, + { + "stop_nm": "서강쌍용아파트.광흥창역", + "ycode": "37.547971961", + "stop_no": "14942", + "xcode": "126.93012642", + "stop_type": "마을버스", + "node_id": "113900191", + "nxtStn": "서강초등학교" + }, + { + "stop_nm": "동교로사거리", + "ycode": "37.5560597174", + "stop_no": "14943", + "xcode": "126.9210453635", + "stop_type": "마을버스", + "node_id": "113900192", + "nxtStn": "종점" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.557089657", + "stop_no": "14944", + "xcode": "126.901628566", + "stop_type": "마을버스", + "node_id": "113900193", + "nxtStn": "백합아파트" + }, + { + "stop_nm": "망원전철역", + "ycode": "37.5560981493", + "stop_no": "14946", + "xcode": "126.9102976671", + "stop_type": "마을버스", + "node_id": "113900194", + "nxtStn": "구)망원우체국사거리" + }, + { + "stop_nm": "서교동주민센터", + "ycode": "37.5556503792", + "stop_no": "14947", + "xcode": "126.9152772343", + "stop_type": "마을버스", + "node_id": "113900195", + "nxtStn": "희성교회" + }, + { + "stop_nm": "서강초등학교", + "ycode": "37.547746198", + "stop_no": "14948", + "xcode": "126.9263556875", + "stop_type": "마을버스", + "node_id": "113900196", + "nxtStn": "홍대후문" + }, + { + "stop_nm": "신부파스카아파트", + "ycode": "37.5587854475", + "stop_no": "14950", + "xcode": "126.900472928", + "stop_type": "마을버스", + "node_id": "113900197", + "nxtStn": "대상아파트" + }, + { + "stop_nm": "KBS미디어센터", + "ycode": "37.5762495025", + "stop_no": "14951", + "xcode": "126.8912678163", + "stop_type": "마을버스", + "node_id": "113900198", + "nxtStn": "월드컵파크2단지" + }, + { + "stop_nm": "구)망원우체국사거리", + "ycode": "37.5579016118", + "stop_no": "14952", + "xcode": "126.9072824163", + "stop_type": "마을버스", + "node_id": "113900199", + "nxtStn": "망원동월드컵시장" + }, + { + "stop_nm": "홍대후문", + "ycode": "37.5477681308", + "stop_no": "14953", + "xcode": "126.9254084029", + "stop_type": "마을버스", + "node_id": "113900200", + "nxtStn": "상수역" + }, + { + "stop_nm": "대상아파트", + "ycode": "37.5596562821", + "stop_no": "14954", + "xcode": "126.8998548757", + "stop_type": "마을버스", + "node_id": "113900201", + "nxtStn": "동원데자뷰아파트" + }, + { + "stop_nm": "월드컵파크2단지", + "ycode": "37.57525", + "stop_no": "14955", + "xcode": "126.890323", + "stop_type": "마을버스", + "node_id": "113900275", + "nxtStn": "월드컵파크3단지.난지천공원" + }, + { + "stop_nm": "망원동월드컵시장", + "ycode": "37.5576257556", + "stop_no": "14956", + "xcode": "126.9059890137", + "stop_type": "마을버스", + "node_id": "113900263", + "nxtStn": "하나은행망원동지점" + }, + { + "stop_nm": "상수역", + "ycode": "37.5478391735", + "stop_no": "14957", + "xcode": "126.9223888577", + "stop_type": "마을버스", + "node_id": "113900202", + "nxtStn": "레드로드입구" + }, + { + "stop_nm": "동원데자뷰아파트", + "ycode": "37.560265953", + "stop_no": "14958", + "xcode": "126.8994205325", + "stop_type": "마을버스", + "node_id": "113900203", + "nxtStn": "마포16번종점" + }, + { + "stop_nm": "하나은행망원동지점", + "ycode": "37.5573616057", + "stop_no": "14959", + "xcode": "126.9047035289", + "stop_type": "마을버스", + "node_id": "113900204", + "nxtStn": "동교초등학교" + }, + { + "stop_nm": "레드로드입구", + "ycode": "37.547926", + "stop_no": "14960", + "xcode": "126.920503", + "stop_type": "마을버스", + "node_id": "113900205", + "nxtStn": "합정동" + }, + { + "stop_nm": "마포16번종점", + "ycode": "37.5609278604", + "stop_no": "14961", + "xcode": "126.8989566813", + "stop_type": "마을버스", + "node_id": "113900261", + "nxtStn": "종점" + }, + { + "stop_nm": "서부면허시험장.월드컵파크8단지", + "ycode": "37.578253", + "stop_no": "14962", + "xcode": "126.881973", + "stop_type": "마을버스", + "node_id": "113900298", + "nxtStn": "상지초등학교" + }, + { + "stop_nm": "동교초등학교", + "ycode": "37.5570015474", + "stop_no": "14963", + "xcode": "126.9029563717", + "stop_type": "마을버스", + "node_id": "113900264", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "합정동", + "ycode": "37.5476074126", + "stop_no": "14964", + "xcode": "126.9181201992", + "stop_type": "마을버스", + "node_id": "113900206", + "nxtStn": "마포새빛문화숲" + }, + { + "stop_nm": "마포새빛문화숲", + "ycode": "37.5455098635", + "stop_no": "14965", + "xcode": "126.9171164107", + "stop_type": "마을버스", + "node_id": "113900207", + "nxtStn": "서일빌딩" + }, + { + "stop_nm": "서일빌딩", + "ycode": "37.5455541032", + "stop_no": "14966", + "xcode": "126.9159631569", + "stop_type": "마을버스", + "node_id": "113900208", + "nxtStn": "성우맨션" + }, + { + "stop_nm": "성우맨션", + "ycode": "37.5456357722", + "stop_no": "14968", + "xcode": "126.9142496659", + "stop_type": "마을버스", + "node_id": "113900209", + "nxtStn": "다운교회" + }, + { + "stop_nm": "다운교회", + "ycode": "37.5457365309", + "stop_no": "14969", + "xcode": "126.9127953093", + "stop_type": "마을버스", + "node_id": "113900015", + "nxtStn": "종점" + }, + { + "stop_nm": "월드컵경기장역", + "ycode": "37.5695938487", + "stop_no": "14971", + "xcode": "126.9001896889", + "stop_type": "마을버스", + "node_id": "113900210", + "nxtStn": "마포구청.마포구청역" + }, + { + "stop_nm": "마포구청.마포구청역", + "ycode": "37.5663149654", + "stop_no": "14972", + "xcode": "126.8995256257", + "stop_type": "마을버스", + "node_id": "113900270", + "nxtStn": "월드컵경기장남측.월드컵공원" + }, + { + "stop_nm": "원효대교북단(가상)", + "ycode": "37.5304943418", + "stop_no": "14975", + "xcode": "126.9519779883", + "stop_type": "가상정류장", + "node_id": "102000300", + "nxtStn": "마포대교북단(가상)" + }, + { + "stop_nm": "우성아파트입구", + "ycode": "37.537980068", + "stop_no": "14976", + "xcode": "126.9475018046", + "stop_type": "마을버스", + "node_id": "113900211", + "nxtStn": "S마트" + }, + { + "stop_nm": "망원교회", + "ycode": "37.55623509", + "stop_no": "14977", + "xcode": "126.9001616621", + "stop_type": "마을버스", + "node_id": "113900259", + "nxtStn": "성원아파트" + }, + { + "stop_nm": "망원교회", + "ycode": "37.5564958163", + "stop_no": "14978", + "xcode": "126.9005291712", + "stop_type": "마을버스", + "node_id": "113900212", + "nxtStn": "한강공원입구" + }, + { + "stop_nm": "신촌역", + "ycode": "37.5546992456", + "stop_no": "14979", + "xcode": "126.9359751517", + "stop_type": "마을버스", + "node_id": "113900249", + "nxtStn": "기업은행.신촌연세병원" + }, + { + "stop_nm": "경성중고사거리", + "ycode": "37.5606202414", + "stop_no": "14981", + "xcode": "126.915740226", + "stop_type": "마을버스", + "node_id": "113900268", + "nxtStn": "성서초등학교" + }, + { + "stop_nm": "삼진제약", + "ycode": "37.553212", + "stop_no": "14982", + "xcode": "126.92683", + "stop_type": "마을버스", + "node_id": "113900295", + "nxtStn": "라사라패션직업전문학교" + }, + { + "stop_nm": "한국영화아카데미", + "ycode": "37.5542981382", + "stop_no": "14983", + "xcode": "126.9294391491", + "stop_type": "마을버스", + "node_id": "113900214", + "nxtStn": "삼진제약" + }, + { + "stop_nm": "서교동교회", + "ycode": "37.5517506356", + "stop_no": "14984", + "xcode": "126.9194138368", + "stop_type": "마을버스", + "node_id": "113900244", + "nxtStn": "우리은행서교동지점" + }, + { + "stop_nm": "성산2동주민센터", + "ycode": "37.5680244492", + "stop_no": "14985", + "xcode": "126.9083871955", + "stop_type": "마을버스", + "node_id": "113900271", + "nxtStn": "성산시영아파트" + }, + { + "stop_nm": "원효대교북단(가상)", + "ycode": "37.530453709", + "stop_no": "14986", + "xcode": "126.9502786869", + "stop_type": "가상정류장", + "node_id": "102000299", + "nxtStn": "이촌동두산위브트레지움" + }, + { + "stop_nm": "월드컵파크7단지", + "ycode": "37.580411", + "stop_no": "14987", + "xcode": "126.879876", + "stop_type": "마을버스", + "node_id": "113900215", + "nxtStn": "상지초등학교" + }, + { + "stop_nm": "창전삼성아파트110동", + "ycode": "37.549935", + "stop_no": "14988", + "xcode": "126.928352", + "stop_type": "마을버스", + "node_id": "113900236", + "nxtStn": "창전어린이공원" + }, + { + "stop_nm": "신촌역", + "ycode": "37.554288", + "stop_no": "14989", + "xcode": "126.935896", + "stop_type": "마을버스", + "node_id": "113900230", + "nxtStn": "용약국" + }, + { + "stop_nm": "신촌역", + "ycode": "37.5544909027", + "stop_no": "14990", + "xcode": "126.9356255921", + "stop_type": "마을버스", + "node_id": "113900282", + "nxtStn": "기업은행.신촌연세병원" + }, + { + "stop_nm": "신촌농협.하나로마트", + "ycode": "37.5561881182", + "stop_no": "14991", + "xcode": "126.9332008127", + "stop_type": "마을버스", + "node_id": "113900281", + "nxtStn": "신촌역" + }, + { + "stop_nm": "기업은행.신촌연세병원", + "ycode": "37.5531660102", + "stop_no": "14992", + "xcode": "126.9334875964", + "stop_type": "마을버스", + "node_id": "113900280", + "nxtStn": "창전삼성아파트" + }, + { + "stop_nm": "세븐일레븐", + "ycode": "37.540239", + "stop_no": "14993", + "xcode": "126.956005", + "stop_type": "마을버스", + "node_id": "113900279", + "nxtStn": "도원삼성래미안아파트101동앞" + }, + { + "stop_nm": "아현고개", + "ycode": "37.5566204258", + "stop_no": "14994", + "xcode": "126.9469798113", + "stop_type": "마을버스", + "node_id": "113900278", + "nxtStn": "웨딩타운" + }, + { + "stop_nm": "양화대교북단(가상)", + "ycode": "37.5475721541", + "stop_no": "14995", + "xcode": "126.9059337445", + "stop_type": "가상정류장", + "node_id": "113000484", + "nxtStn": "서강대교북단(가상)" + }, + { + "stop_nm": "백합아파트", + "ycode": "37.5579505185", + "stop_no": "14996", + "xcode": "126.9009301902", + "stop_type": "마을버스", + "node_id": "113900277", + "nxtStn": "동교초등학교" + }, + { + "stop_nm": "백합아파트", + "ycode": "37.557938922", + "stop_no": "14997", + "xcode": "126.9010705599", + "stop_type": "마을버스", + "node_id": "113900276", + "nxtStn": "신부파스카아파트" + }, + { + "stop_nm": "서강대교북단(가상)", + "ycode": "37.5430891823", + "stop_no": "14998", + "xcode": "126.9280834266", + "stop_type": "가상정류장", + "node_id": "113000483", + "nxtStn": "마포대교(가상)" + }, + { + "stop_nm": "홍익병원목동관", + "ycode": "37.53091", + "stop_no": "15101", + "xcode": "126.86403", + "stop_type": "가로변시간", + "node_id": "114000001", + "nxtStn": "대일고등학교" + }, + { + "stop_nm": "금호어울림.대원칸타빌아파트", + "ycode": "37.53269", + "stop_no": "15102", + "xcode": "126.866545", + "stop_type": "일반차로", + "node_id": "114000002", + "nxtStn": "목동3.4단지사잇길" + }, + { + "stop_nm": "목동3단지후문", + "ycode": "37.5343243418", + "stop_no": "15103", + "xcode": "126.8699099401", + "stop_type": "일반차로", + "node_id": "114000003", + "nxtStn": "영도초등학교" + }, + { + "stop_nm": "영도초등학교", + "ycode": "37.5355559091", + "stop_no": "15104", + "xcode": "126.8705188382", + "stop_type": "일반차로", + "node_id": "114000004", + "nxtStn": "성원.극동아파트" + }, + { + "stop_nm": "신목중학교.목동2단지후문", + "ycode": "37.538155", + "stop_no": "15105", + "xcode": "126.873548", + "stop_type": "일반차로", + "node_id": "114000005", + "nxtStn": "월촌초등학교" + }, + { + "stop_nm": "목동2단지", + "ycode": "37.5366", + "stop_no": "15106", + "xcode": "126.877988", + "stop_type": "일반차로", + "node_id": "114000006", + "nxtStn": "목동3단지" + }, + { + "stop_nm": "목동3단지", + "ycode": "37.534747", + "stop_no": "15107", + "xcode": "126.875742", + "stop_type": "일반차로", + "node_id": "114000007", + "nxtStn": "목동4단지상가.목동종합운동장" + }, + { + "stop_nm": "목동4단지상가.목동종합운동장", + "ycode": "37.5322979868", + "stop_no": "15108", + "xcode": "126.8751149732", + "stop_type": "일반차로", + "node_id": "114000008", + "nxtStn": "목동현대백화점" + }, + { + "stop_nm": "목동3.4단지사잇길", + "ycode": "37.532797", + "stop_no": "15109", + "xcode": "126.871977", + "stop_type": "일반차로", + "node_id": "114000009", + "nxtStn": "목동4단지상가.목동종합운동장" + }, + { + "stop_nm": "목동사거리", + "ycode": "37.5332695189", + "stop_no": "15111", + "xcode": "126.8638355299", + "stop_type": "가로변시간", + "node_id": "114000011", + "nxtStn": "영도중.강서고입구.기아양서대리점" + }, + { + "stop_nm": "영도중.강서고입구.기아양서대리점", + "ycode": "37.5361735073", + "stop_no": "15112", + "xcode": "126.8636220426", + "stop_type": "가로변시간", + "node_id": "114000012", + "nxtStn": "목동시장.대일고교.배광교회" + }, + { + "stop_nm": "목동시장.대일고교.배광교회", + "ycode": "37.5390050043", + "stop_no": "15113", + "xcode": "126.863840943", + "stop_type": "가로변시간", + "node_id": "114000013", + "nxtStn": "목동성원아파트" + }, + { + "stop_nm": "신목중학교", + "ycode": "37.537122", + "stop_no": "15114", + "xcode": "126.8719", + "stop_type": "일반차로", + "node_id": "114000014", + "nxtStn": "농협.영도초등학교" + }, + { + "stop_nm": "목동스카이아파트.목동3단지", + "ycode": "37.534189", + "stop_no": "15115", + "xcode": "126.869706", + "stop_type": "일반차로", + "node_id": "114000015", + "nxtStn": "목동3.4단지사잇길" + }, + { + "stop_nm": "금호어울림.대원칸타빌아파트", + "ycode": "37.532875", + "stop_no": "15116", + "xcode": "126.866862", + "stop_type": "일반차로", + "node_id": "114000016", + "nxtStn": "화곡동남부시장" + }, + { + "stop_nm": "신목동역2번출구", + "ycode": "37.5438547597", + "stop_no": "15117", + "xcode": "126.8823418211", + "stop_type": "일반차로", + "node_id": "114000017", + "nxtStn": "안양천입구" + }, + { + "stop_nm": "신목동역1번출구", + "ycode": "37.5439220697", + "stop_no": "15118", + "xcode": "126.882068981", + "stop_type": "일반차로", + "node_id": "114000018", + "nxtStn": "목원초등학교.서울지방식품의약품안전청" + }, + { + "stop_nm": "경서농협", + "ycode": "37.521363", + "stop_no": "15119", + "xcode": "126.856298", + "stop_type": "일반차로", + "node_id": "114000396", + "nxtStn": "우리은행신정동지점" + }, + { + "stop_nm": "목동성원아파트", + "ycode": "37.5422950368", + "stop_no": "15126", + "xcode": "126.8631752063", + "stop_type": "가로변전일", + "node_id": "114000026", + "nxtStn": "목3동주민센터.현대아이파크.실로암안과" + }, + { + "stop_nm": "목3동주민센터.현대아이파크.실로암안과", + "ycode": "37.5448325228", + "stop_no": "15127", + "xcode": "126.8624010187", + "stop_type": "가로변시간", + "node_id": "114000027", + "nxtStn": "등촌역6번출구.목동깨비시장" + }, + { + "stop_nm": "등촌역6번출구.목동깨비시장", + "ycode": "37.5496948079", + "stop_no": "15128", + "xcode": "126.8639369391", + "stop_type": "가로변시간", + "node_id": "114000028", + "nxtStn": "등촌역.강서보건소" + }, + { + "stop_nm": "월촌초등학교", + "ycode": "37.5411875533", + "stop_no": "15140", + "xcode": "126.8770703252", + "stop_type": "일반차로", + "node_id": "114000038", + "nxtStn": "목동한신청구아파트" + }, + { + "stop_nm": "월촌초등학교.우성아파트", + "ycode": "37.540498", + "stop_no": "15141", + "xcode": "126.87537", + "stop_type": "일반차로", + "node_id": "114000039", + "nxtStn": "용왕산입구" + }, + { + "stop_nm": "목원초등학교.서울지방식품의약품안전청", + "ycode": "37.5425325465", + "stop_no": "15142", + "xcode": "126.8811364216", + "stop_type": "일반차로", + "node_id": "114000040", + "nxtStn": "신목동역2번출구" + }, + { + "stop_nm": "용왕산", + "ycode": "37.539131", + "stop_no": "15143", + "xcode": "126.874232", + "stop_type": "일반차로", + "node_id": "114000434", + "nxtStn": "신목중학교" + }, + { + "stop_nm": "신목동역", + "ycode": "37.5459435557", + "stop_no": "15144", + "xcode": "126.881497679", + "stop_type": "일반차로", + "node_id": "114000042", + "nxtStn": "신목동역-서울지방식품의약품안전청" + }, + { + "stop_nm": "목동한신청구아파트", + "ycode": "37.5406383625", + "stop_no": "15145", + "xcode": "126.8801650973", + "stop_type": "일반차로", + "node_id": "114000043", + "nxtStn": "한신청구아파트" + }, + { + "stop_nm": "목동한신청구아파트", + "ycode": "37.5407286601", + "stop_no": "15146", + "xcode": "126.8803505399", + "stop_type": "일반차로", + "node_id": "114000044", + "nxtStn": "월촌초등학교.우성아파트" + }, + { + "stop_nm": "목동1.2단지사잇길", + "ycode": "37.5383884014", + "stop_no": "15147", + "xcode": "126.8784758339", + "stop_type": "일반차로", + "node_id": "114000045", + "nxtStn": "용왕산" + }, + { + "stop_nm": "월촌중학교.목동1단지", + "ycode": "37.537913", + "stop_no": "15148", + "xcode": "126.881672", + "stop_type": "일반차로", + "node_id": "114000046", + "nxtStn": "목동2단지" + }, + { + "stop_nm": "목동YMCA.서울에너지공사", + "ycode": "37.5388422797", + "stop_no": "15149", + "xcode": "126.8826597565", + "stop_type": "일반차로", + "node_id": "114000047", + "nxtStn": "월촌중학교.목동1단지" + }, + { + "stop_nm": "목동YMCA.서울에너지공사", + "ycode": "37.539032", + "stop_no": "15150", + "xcode": "126.882858", + "stop_type": "일반차로", + "node_id": "114000048", + "nxtStn": "한신청구아파트정문" + }, + { + "stop_nm": "목동5단지C상가.목동운동장북문", + "ycode": "37.53295", + "stop_no": "15151", + "xcode": "126.877573", + "stop_type": "일반차로", + "node_id": "114000049", + "nxtStn": "파리공원" + }, + { + "stop_nm": "파리공원", + "ycode": "37.5346216632", + "stop_no": "15152", + "xcode": "126.8783257944", + "stop_type": "일반차로", + "node_id": "114000050", + "nxtStn": "목동5단지B상가.목5동주민센터" + }, + { + "stop_nm": "목동5단지B상가.목5동주민센터", + "ycode": "37.53576", + "stop_no": "15153", + "xcode": "126.881295", + "stop_type": "일반차로", + "node_id": "114000051", + "nxtStn": "이대목동병원.목동6단지앞" + }, + { + "stop_nm": "이대목동병원.목동6단지앞", + "ycode": "37.536847", + "stop_no": "15154", + "xcode": "126.884428", + "stop_type": "일반차로", + "node_id": "114000052", + "nxtStn": "신목동역-서울지방식품의약품안전청" + }, + { + "stop_nm": "목동아파트601동앞.이대병원", + "ycode": "37.5358926776", + "stop_no": "15155", + "xcode": "126.8832527876", + "stop_type": "일반차로", + "node_id": "114000053", + "nxtStn": "월촌중학교.목동1단지" + }, + { + "stop_nm": "목동아파트5.6단지사잇길.경인초교", + "ycode": "37.5328700866", + "stop_no": "15156", + "xcode": "126.883850411", + "stop_type": "일반차로", + "node_id": "114000054", + "nxtStn": "목동아파트601동앞.이대병원" + }, + { + "stop_nm": "오목교역", + "ycode": "37.5250698135", + "stop_no": "15157", + "xcode": "126.8763828695", + "stop_type": "일반차로", + "node_id": "114000428", + "nxtStn": "오목교역.대학학원" + }, + { + "stop_nm": "양정고등학교", + "ycode": "37.5352231619", + "stop_no": "15158", + "xcode": "126.8879022224", + "stop_type": "일반차로", + "node_id": "114000055", + "nxtStn": "당산동삼익아파트" + }, + { + "stop_nm": "목1동주민센터", + "ycode": "37.529802", + "stop_no": "15159", + "xcode": "126.87358", + "stop_type": "일반차로", + "node_id": "114000056", + "nxtStn": "목동7단지" + }, + { + "stop_nm": "목동역.홍익병원", + "ycode": "37.527382", + "stop_no": "15160", + "xcode": "126.864433", + "stop_type": "일반차로", + "node_id": "114000057", + "nxtStn": "홍익병원목동관" + }, + { + "stop_nm": "CBS방송국", + "ycode": "37.528097", + "stop_no": "15161", + "xcode": "126.874148", + "stop_type": "일반차로", + "node_id": "114000058", + "nxtStn": "오목교역" + }, + { + "stop_nm": "목운초등학교.목운중학교", + "ycode": "37.5264186976", + "stop_no": "15162", + "xcode": "126.873770474", + "stop_type": "일반차로", + "node_id": "114000059", + "nxtStn": "오목교역.청학스포츠타운" + }, + { + "stop_nm": "목동7단지", + "ycode": "37.52851", + "stop_no": "15163", + "xcode": "126.870233", + "stop_type": "일반차로", + "node_id": "114000060", + "nxtStn": "하이스트학원.종로학원" + }, + { + "stop_nm": "목운초등학교.목운중학교", + "ycode": "37.526127", + "stop_no": "15164", + "xcode": "126.873394", + "stop_type": "일반차로", + "node_id": "114000061", + "nxtStn": "목동운동장남문.아이스링크" + }, + { + "stop_nm": "목동운동장남문.아이스링크", + "ycode": "37.5284743808", + "stop_no": "15165", + "xcode": "126.8765922255", + "stop_type": "일반차로", + "node_id": "114000062", + "nxtStn": "목동5단지C상가.목동운동장북문" + }, + { + "stop_nm": "목동7단지.종로학원", + "ycode": "37.525671", + "stop_no": "15166", + "xcode": "126.868759", + "stop_type": "일반차로", + "node_id": "114000063", + "nxtStn": "진명여고" + }, + { + "stop_nm": "목동대학학원", + "ycode": "37.524957", + "stop_no": "15167", + "xcode": "126.873313", + "stop_type": "일반차로", + "node_id": "114000064", + "nxtStn": "하이스트학원.종로학원" + }, + { + "stop_nm": "오목교역.동신한방병원", + "ycode": "37.524447", + "stop_no": "15168", + "xcode": "126.876825", + "stop_type": "일반차로", + "node_id": "114000065", + "nxtStn": "목동대학학원" + }, + { + "stop_nm": "갈산초등학교정문", + "ycode": "37.5128049409", + "stop_no": "15169", + "xcode": "126.8704857561", + "stop_type": "일반차로", + "node_id": "114000066", + "nxtStn": "목동14단지" + }, + { + "stop_nm": "오목교역.청학스포츠타운", + "ycode": "37.523427", + "stop_no": "15170", + "xcode": "126.875447", + "stop_type": "일반차로", + "node_id": "114000067", + "nxtStn": "오목교역.동신한방병원" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5210696367", + "stop_no": "15171", + "xcode": "126.8736392011", + "stop_type": "일반차로", + "node_id": "114000068", + "nxtStn": "목동대학학원" + }, + { + "stop_nm": "신정2동주민센터", + "ycode": "37.5189830043", + "stop_no": "15172", + "xcode": "126.8714242396", + "stop_type": "일반차로", + "node_id": "114000069", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "오목교역.동신한방병원", + "ycode": "37.5240854759", + "stop_no": "15173", + "xcode": "126.8769218981", + "stop_type": "일반차로", + "node_id": "114000070", + "nxtStn": "관악고등학교" + }, + { + "stop_nm": "신목초등학교입구", + "ycode": "37.517471", + "stop_no": "15174", + "xcode": "126.870927", + "stop_type": "일반차로", + "node_id": "114000071", + "nxtStn": "신정2동주민센터" + }, + { + "stop_nm": "목동14단지상가", + "ycode": "37.514711", + "stop_no": "15175", + "xcode": "126.871891", + "stop_type": "일반차로", + "node_id": "114000072", + "nxtStn": "목동아파트1434동앞" + }, + { + "stop_nm": "현대아파트정문", + "ycode": "37.5197850505", + "stop_no": "15176", + "xcode": "126.8774210833", + "stop_type": "일반차로", + "node_id": "114000073", + "nxtStn": "삼성아파트후문" + }, + { + "stop_nm": "현대아파트정문", + "ycode": "37.5207879158", + "stop_no": "15177", + "xcode": "126.8782362614", + "stop_type": "일반차로", + "node_id": "114000074", + "nxtStn": "관악고등학교" + }, + { + "stop_nm": "삼성아파트정문", + "ycode": "37.516349522", + "stop_no": "15178", + "xcode": "126.8769040606", + "stop_type": "일반차로", + "node_id": "114000075", + "nxtStn": "목동14단지C상가앞" + }, + { + "stop_nm": "삼성아파트후문", + "ycode": "37.518115032", + "stop_no": "15179", + "xcode": "126.8771500437", + "stop_type": "일반차로", + "node_id": "114000076", + "nxtStn": "삼성아파트정문" + }, + { + "stop_nm": "현대아파트후문", + "ycode": "37.5219304431", + "stop_no": "15180", + "xcode": "126.8781721806", + "stop_type": "일반차로", + "node_id": "114000077", + "nxtStn": "현대아파트정문" + }, + { + "stop_nm": "목동14단지C상가앞", + "ycode": "37.514047", + "stop_no": "15181", + "xcode": "126.874176", + "stop_type": "일반차로", + "node_id": "114000078", + "nxtStn": "목동아파트1434동앞" + }, + { + "stop_nm": "목일중학교", + "ycode": "37.51402", + "stop_no": "15182", + "xcode": "126.873928", + "stop_type": "일반차로", + "node_id": "114000079", + "nxtStn": "현대아파트정문" + }, + { + "stop_nm": "목동13단지", + "ycode": "37.514267", + "stop_no": "15183", + "xcode": "126.869395", + "stop_type": "일반차로", + "node_id": "114000080", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "목동14단지", + "ycode": "37.5147422125", + "stop_no": "15184", + "xcode": "126.8695819439", + "stop_type": "일반차로", + "node_id": "114000081", + "nxtStn": "양천공원" + }, + { + "stop_nm": "신트리공원", + "ycode": "37.5144890648", + "stop_no": "15185", + "xcode": "126.8579171135", + "stop_type": "일반차로", + "node_id": "114000082", + "nxtStn": "신트리아파트" + }, + { + "stop_nm": "목동12.13단지사잇길", + "ycode": "37.5130539408", + "stop_no": "15186", + "xcode": "126.8635453462", + "stop_type": "일반차로", + "node_id": "114000083", + "nxtStn": "양천구민체육센터.양천일자리센터" + }, + { + "stop_nm": "목동12.13단지사잇길", + "ycode": "37.513233", + "stop_no": "15187", + "xcode": "126.86327", + "stop_type": "일반차로", + "node_id": "114000084", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "신목초등학교입구", + "ycode": "37.5173017573", + "stop_no": "15188", + "xcode": "126.8707856913", + "stop_type": "일반차로", + "node_id": "114000085", + "nxtStn": "목동14단지관리사무소앞" + }, + { + "stop_nm": "목동14단지관리사무소앞", + "ycode": "37.515142", + "stop_no": "15189", + "xcode": "126.872213", + "stop_type": "일반차로", + "node_id": "114000086", + "nxtStn": "목동13단지" + }, + { + "stop_nm": "목동11단지", + "ycode": "37.5132198855", + "stop_no": "15190", + "xcode": "126.858308657", + "stop_type": "일반차로", + "node_id": "114000087", + "nxtStn": "목동아파트1102동앞" + }, + { + "stop_nm": "목동14단지관리사무소앞", + "ycode": "37.5147961876", + "stop_no": "15191", + "xcode": "126.8716908326", + "stop_type": "일반차로", + "node_id": "114000088", + "nxtStn": "목동13단지" + }, + { + "stop_nm": "양천구청역", + "ycode": "37.5125666892", + "stop_no": "15192", + "xcode": "126.865327879", + "stop_type": "일반차로", + "node_id": "114000089", + "nxtStn": "목동아파트1216동앞" + }, + { + "stop_nm": "양천공원", + "ycode": "37.517872", + "stop_no": "15193", + "xcode": "126.869642", + "stop_type": "일반차로", + "node_id": "114000090", + "nxtStn": "목동중학교" + }, + { + "stop_nm": "양천구청", + "ycode": "37.516543", + "stop_no": "15194", + "xcode": "126.86703", + "stop_type": "일반차로", + "node_id": "114000091", + "nxtStn": "목동13단지" + }, + { + "stop_nm": "양천구민체육센터.양천일자리센터", + "ycode": "37.5155435776", + "stop_no": "15195", + "xcode": "126.8642387934", + "stop_type": "일반차로", + "node_id": "114000092", + "nxtStn": "양천구청" + }, + { + "stop_nm": "목동12단지", + "ycode": "37.5141819623", + "stop_no": "15196", + "xcode": "126.8603283424", + "stop_type": "일반차로", + "node_id": "114000093", + "nxtStn": "양천구민체육센터.양천일자리센터" + }, + { + "stop_nm": "갈산초등학교정문", + "ycode": "37.512822", + "stop_no": "15197", + "xcode": "126.870105", + "stop_type": "일반차로", + "node_id": "114000094", + "nxtStn": "기업은행구로중앙지점" + }, + { + "stop_nm": "갈산초등학교후문", + "ycode": "37.51109", + "stop_no": "15198", + "xcode": "126.868713", + "stop_type": "일반차로", + "node_id": "114000095", + "nxtStn": "기업은행구로중앙지점" + }, + { + "stop_nm": "갈산초등학교후문", + "ycode": "37.511285", + "stop_no": "15199", + "xcode": "126.869212", + "stop_type": "일반차로", + "node_id": "114000096", + "nxtStn": "은정초등학교" + }, + { + "stop_nm": "은정초등학교", + "ycode": "37.51033", + "stop_no": "15200", + "xcode": "126.866702", + "stop_type": "일반차로", + "node_id": "114000097", + "nxtStn": "양천아파트" + }, + { + "stop_nm": "은정초등학교", + "ycode": "37.5100942816", + "stop_no": "15201", + "xcode": "126.8671059902", + "stop_type": "일반차로", + "node_id": "114000098", + "nxtStn": "갈산초등학교후문" + }, + { + "stop_nm": "목동우성아파트", + "ycode": "37.507195", + "stop_no": "15202", + "xcode": "126.865711", + "stop_type": "일반차로", + "node_id": "114000099", + "nxtStn": "양천아파트" + }, + { + "stop_nm": "목동우성아파트입구", + "ycode": "37.508448", + "stop_no": "15203", + "xcode": "126.864212", + "stop_type": "일반차로", + "node_id": "114000100", + "nxtStn": "은정초등학교" + }, + { + "stop_nm": "양천아파트", + "ycode": "37.5081742559", + "stop_no": "15204", + "xcode": "126.8633494936", + "stop_type": "일반차로", + "node_id": "114000101", + "nxtStn": "봉영여중.목동고" + }, + { + "stop_nm": "봉영여중.목동고", + "ycode": "37.5072813126", + "stop_no": "15205", + "xcode": "126.861841071", + "stop_type": "일반차로", + "node_id": "114000102", + "nxtStn": "목동우성아파트입구" + }, + { + "stop_nm": "봉영여중.목동고", + "ycode": "37.5073907618", + "stop_no": "15206", + "xcode": "126.8614268774", + "stop_type": "일반차로", + "node_id": "114000103", + "nxtStn": "목동아파트11단지(1117동)" + }, + { + "stop_nm": "봉영여중.목동고", + "ycode": "37.508692", + "stop_no": "15207", + "xcode": "126.861867", + "stop_type": "일반차로", + "node_id": "114000104", + "nxtStn": "목동우성아파트입구" + }, + { + "stop_nm": "양천노인종합복지관", + "ycode": "37.510288", + "stop_no": "15208", + "xcode": "126.85918", + "stop_type": "일반차로", + "node_id": "114000105", + "nxtStn": "목동아파트1218동앞" + }, + { + "stop_nm": "양천구청역", + "ycode": "37.512871", + "stop_no": "15209", + "xcode": "126.866609", + "stop_type": "일반차로", + "node_id": "114000106", + "nxtStn": "목동14단지상가" + }, + { + "stop_nm": "양천아파트", + "ycode": "37.510264", + "stop_no": "15210", + "xcode": "126.862762", + "stop_type": "일반차로", + "node_id": "114000107", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "신정네거리해누리분수광장", + "ycode": "37.5218864223", + "stop_no": "15211", + "xcode": "126.8515143857", + "stop_type": "일반차로", + "node_id": "114000108", + "nxtStn": "동방아파트" + }, + { + "stop_nm": "신정네거리.신정119안전센터", + "ycode": "37.5220233018", + "stop_no": "15212", + "xcode": "126.8507300915", + "stop_type": "일반차로", + "node_id": "114000109", + "nxtStn": "신정네거리역" + }, + { + "stop_nm": "동방아파트", + "ycode": "37.5218824877", + "stop_no": "15213", + "xcode": "126.8463249183", + "stop_type": "일반차로", + "node_id": "114000110", + "nxtStn": "신곡시장.금빛새마을금고" + }, + { + "stop_nm": "동방아파트.신월종합사회복지관", + "ycode": "37.5214264859", + "stop_no": "15214", + "xcode": "126.8462896508", + "stop_type": "일반차로", + "node_id": "114000111", + "nxtStn": "신정네거리.신정119안전센터" + }, + { + "stop_nm": "신곡시장.금빛새마을금고", + "ycode": "37.5196434749", + "stop_no": "15215", + "xcode": "126.8437433353", + "stop_type": "일반차로", + "node_id": "114000112", + "nxtStn": "신곡시장" + }, + { + "stop_nm": "신곡시장.금빛새마을금고", + "ycode": "37.5192849388", + "stop_no": "15216", + "xcode": "126.8438198804", + "stop_type": "일반차로", + "node_id": "114000113", + "nxtStn": "동방아파트.신월종합사회복지관" + }, + { + "stop_nm": "신한은행신월동지점", + "ycode": "37.518022", + "stop_no": "15217", + "xcode": "126.841605", + "stop_type": "일반차로", + "node_id": "114000114", + "nxtStn": "목동센트럴1단지" + }, + { + "stop_nm": "신한은행신월동지점", + "ycode": "37.5178279621", + "stop_no": "15218", + "xcode": "126.8418635354", + "stop_type": "일반차로", + "node_id": "114000115", + "nxtStn": "신곡시장.금빛새마을금고" + }, + { + "stop_nm": "양강중학교", + "ycode": "37.5237110271", + "stop_no": "15219", + "xcode": "126.8499936", + "stop_type": "일반차로", + "node_id": "114000116", + "nxtStn": "신정역(은행정).신정4동주민센터" + }, + { + "stop_nm": "신월2동주민센터입구", + "ycode": "37.522757", + "stop_no": "15220", + "xcode": "126.84569", + "stop_type": "일반차로", + "node_id": "114000117", + "nxtStn": "양강중학교" + }, + { + "stop_nm": "강서초등학교", + "ycode": "37.521878", + "stop_no": "15221", + "xcode": "126.841932", + "stop_type": "일반차로", + "node_id": "114000118", + "nxtStn": "신월2동주민센터입구" + }, + { + "stop_nm": "한빛종합사회복지관", + "ycode": "37.521257", + "stop_no": "15222", + "xcode": "126.839252", + "stop_type": "일반차로", + "node_id": "114000119", + "nxtStn": "강서초등학교" + }, + { + "stop_nm": "신월동남부주유소", + "ycode": "37.519392", + "stop_no": "15223", + "xcode": "126.838583", + "stop_type": "일반차로", + "node_id": "114000120", + "nxtStn": "국립과학수사연구소입구" + }, + { + "stop_nm": "신월2동우체국", + "ycode": "37.523082", + "stop_no": "15224", + "xcode": "126.851248", + "stop_type": "일반차로", + "node_id": "114000121", + "nxtStn": "신정네거리역" + }, + { + "stop_nm": "신트리사거리", + "ycode": "37.5131152074", + "stop_no": "15225", + "xcode": "126.855949147", + "stop_type": "일반차로", + "node_id": "114000122", + "nxtStn": "계남초등학교" + }, + { + "stop_nm": "신트리아파트", + "ycode": "37.5129", + "stop_no": "15226", + "xcode": "126.854138", + "stop_type": "일반차로", + "node_id": "114000123", + "nxtStn": "신트리사거리" + }, + { + "stop_nm": "정랑고개.양천벤처타운", + "ycode": "37.5115773183", + "stop_no": "15227", + "xcode": "126.8503821304", + "stop_type": "일반차로", + "node_id": "114000124", + "nxtStn": "신트리아파트" + }, + { + "stop_nm": "신정학마을아파트", + "ycode": "37.5074208503", + "stop_no": "15228", + "xcode": "126.8439634217", + "stop_type": "일반차로", + "node_id": "114000125", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "양천고등학교", + "ycode": "37.5099267313", + "stop_no": "15229", + "xcode": "126.8456571614", + "stop_type": "일반차로", + "node_id": "114000126", + "nxtStn": "정랑고개.양천벤처타운" + }, + { + "stop_nm": "계남초등학교", + "ycode": "37.509753", + "stop_no": "15230", + "xcode": "126.858427", + "stop_type": "일반차로", + "node_id": "114000127", + "nxtStn": "양명초교.신서중" + }, + { + "stop_nm": "목동아파트11단지(1117동)", + "ycode": "37.507307", + "stop_no": "15231", + "xcode": "126.859905", + "stop_type": "일반차로", + "node_id": "114000128", + "nxtStn": "계남초등학교" + }, + { + "stop_nm": "신정1동주민센터.신오새마을금고", + "ycode": "37.5172033635", + "stop_no": "15232", + "xcode": "126.8543710811", + "stop_type": "일반차로", + "node_id": "114000426", + "nxtStn": "신정네거리역" + }, + { + "stop_nm": "양명초교.신서중", + "ycode": "37.5143052592", + "stop_no": "15233", + "xcode": "126.855702514", + "stop_type": "일반차로", + "node_id": "114000130", + "nxtStn": "신정1동주민센터.신오새마을금고" + }, + { + "stop_nm": "신트리공원.목동아파트11단지", + "ycode": "37.5139204866", + "stop_no": "15234", + "xcode": "126.8571828958", + "stop_type": "일반차로", + "node_id": "114000131", + "nxtStn": "목동12단지" + }, + { + "stop_nm": "목동10단지상가", + "ycode": "37.515967", + "stop_no": "15235", + "xcode": "126.859673", + "stop_type": "일반차로", + "node_id": "114000132", + "nxtStn": "목동12단지" + }, + { + "stop_nm": "양천문화회관.양천일자리센터", + "ycode": "37.5169332443", + "stop_no": "15236", + "xcode": "126.8623809974", + "stop_type": "일반차로", + "node_id": "114000133", + "nxtStn": "목동9단지B상가" + }, + { + "stop_nm": "목동10단지농협", + "ycode": "37.517802", + "stop_no": "15237", + "xcode": "126.856382", + "stop_type": "일반차로", + "node_id": "114000134", + "nxtStn": "양명초등학교" + }, + { + "stop_nm": "목동13단지", + "ycode": "37.514516", + "stop_no": "15238", + "xcode": "126.869302", + "stop_type": "일반차로", + "node_id": "114000427", + "nxtStn": "갈산초등학교정문" + }, + { + "stop_nm": "목동13단지", + "ycode": "37.5135267044", + "stop_no": "15239", + "xcode": "126.8680275029", + "stop_type": "일반차로", + "node_id": "114000429", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "신서초등학교", + "ycode": "37.5206410194", + "stop_no": "15241", + "xcode": "126.8618413297", + "stop_type": "일반차로", + "node_id": "114000138", + "nxtStn": "목동프라자" + }, + { + "stop_nm": "신정1동우체국", + "ycode": "37.521953", + "stop_no": "15242", + "xcode": "126.861673", + "stop_type": "일반차로", + "node_id": "114000139", + "nxtStn": "서울남부지방법원.서울남부지방검찰청" + }, + { + "stop_nm": "우리은행신정동지점", + "ycode": "37.521705", + "stop_no": "15247", + "xcode": "126.859385", + "stop_type": "일반차로", + "node_id": "114000144", + "nxtStn": "신정1동우체국" + }, + { + "stop_nm": "목동프라자", + "ycode": "37.5198759498", + "stop_no": "15248", + "xcode": "126.8602781332", + "stop_type": "일반차로", + "node_id": "114000145", + "nxtStn": "목동10단지" + }, + { + "stop_nm": "목동10단지", + "ycode": "37.519087", + "stop_no": "15249", + "xcode": "126.856654", + "stop_type": "일반차로", + "node_id": "114000146", + "nxtStn": "신정1동주민센터" + }, + { + "stop_nm": "신정네거리역", + "ycode": "37.521037", + "stop_no": "15250", + "xcode": "126.853402", + "stop_type": "일반차로", + "node_id": "114000147", + "nxtStn": "경서농협" + }, + { + "stop_nm": "신정네거리역", + "ycode": "37.519463", + "stop_no": "15251", + "xcode": "126.853398", + "stop_type": "일반차로", + "node_id": "114000148", + "nxtStn": "신정네거리해누리분수광장" + }, + { + "stop_nm": "길훈로즈빌아파트", + "ycode": "37.5224330208", + "stop_no": "15252", + "xcode": "126.8711569767", + "stop_type": "일반차로", + "node_id": "114000149", + "nxtStn": "목운초등학교.목운중학교" + }, + { + "stop_nm": "하이스트학원.종로학원", + "ycode": "37.524815", + "stop_no": "15253", + "xcode": "126.869403", + "stop_type": "일반차로", + "node_id": "114000150", + "nxtStn": "목동8단지천주교" + }, + { + "stop_nm": "목동역", + "ycode": "37.525797", + "stop_no": "15254", + "xcode": "126.865402", + "stop_type": "일반차로", + "node_id": "114000151", + "nxtStn": "목동7단지" + }, + { + "stop_nm": "목동8단지지하도", + "ycode": "37.52005", + "stop_no": "15255", + "xcode": "126.866912", + "stop_type": "일반차로", + "node_id": "114000152", + "nxtStn": "서울남부지방법원.서울남부지방검찰청" + }, + { + "stop_nm": "양천구청.양천보건소", + "ycode": "37.5181625662", + "stop_no": "15256", + "xcode": "126.8661628949", + "stop_type": "일반차로", + "node_id": "114000153", + "nxtStn": "양천문화회관.양천일자리센터" + }, + { + "stop_nm": "목동8단지.한전", + "ycode": "37.5201834629", + "stop_no": "15257", + "xcode": "126.8683291544", + "stop_type": "일반차로", + "node_id": "114000154", + "nxtStn": "양천구청.양천보건소" + }, + { + "stop_nm": "진명여고", + "ycode": "37.5239401081", + "stop_no": "15258", + "xcode": "126.8651037893", + "stop_type": "일반차로", + "node_id": "114000155", + "nxtStn": "목동역" + }, + { + "stop_nm": "서울남부지방법원.서울남부지방검찰청", + "ycode": "37.52179", + "stop_no": "15259", + "xcode": "126.865547", + "stop_type": "일반차로", + "node_id": "114000156", + "nxtStn": "갈산초등학교정문" + }, + { + "stop_nm": "서울남부지방법원.서울남부지방검찰청", + "ycode": "37.5218496017", + "stop_no": "15260", + "xcode": "126.8659323028", + "stop_type": "일반차로", + "node_id": "114000157", + "nxtStn": "진명여고" + }, + { + "stop_nm": "오목교역.청학스포츠타운", + "ycode": "37.5236278346", + "stop_no": "15261", + "xcode": "126.8753149721", + "stop_type": "일반차로", + "node_id": "114000158", + "nxtStn": "현대아이파크아파트" + }, + { + "stop_nm": "현대아이파크아파트", + "ycode": "37.5210340842", + "stop_no": "15262", + "xcode": "126.873256871", + "stop_type": "일반차로", + "node_id": "114000159", + "nxtStn": "목동중학교.서울출입국.외국인청" + }, + { + "stop_nm": "목동중학교.서울출입국.외국인청", + "ycode": "37.5198771646", + "stop_no": "15263", + "xcode": "126.8708457351", + "stop_type": "일반차로", + "node_id": "114000160", + "nxtStn": "신목초등학교입구" + }, + { + "stop_nm": "목동대학학원", + "ycode": "37.524727", + "stop_no": "15264", + "xcode": "126.872863", + "stop_type": "일반차로", + "node_id": "114000161", + "nxtStn": "오목교역.동신한방병원" + }, + { + "stop_nm": "목동7단지", + "ycode": "37.525588", + "stop_no": "15265", + "xcode": "126.867124", + "stop_type": "일반차로", + "node_id": "114000162", + "nxtStn": "하이스트학원.종로학원" + }, + { + "stop_nm": "제일은행앞", + "ycode": "37.5193001008", + "stop_no": "15266", + "xcode": "126.8640996248", + "stop_type": "일반차로", + "node_id": "114000163", + "nxtStn": "신서초등학교" + }, + { + "stop_nm": "서울남부지방법원.서울남부지방검찰청", + "ycode": "37.5221940523", + "stop_no": "15268", + "xcode": "126.8633685313", + "stop_type": "일반차로", + "node_id": "114000165", + "nxtStn": "진명여고" + }, + { + "stop_nm": "목동중학교", + "ycode": "37.519063", + "stop_no": "15269", + "xcode": "126.870348", + "stop_type": "일반차로", + "node_id": "114000166", + "nxtStn": "길훈로즈빌아파트" + }, + { + "stop_nm": "진명여고", + "ycode": "37.5245071942", + "stop_no": "15270", + "xcode": "126.8645744119", + "stop_type": "일반차로", + "node_id": "114000167", + "nxtStn": "서울남부지방법원.서울남부지방검찰청" + }, + { + "stop_nm": "우리은행신정동지점", + "ycode": "37.521902", + "stop_no": "15271", + "xcode": "126.85871", + "stop_type": "일반차로", + "node_id": "114000168", + "nxtStn": "신정4동경서농협" + }, + { + "stop_nm": "목동역.목동오거리", + "ycode": "37.5258057871", + "stop_no": "15272", + "xcode": "126.8631068968", + "stop_type": "일반차로", + "node_id": "114000169", + "nxtStn": "목동역.홍익병원" + }, + { + "stop_nm": "신서고등학교.영상고등학교입구", + "ycode": "37.5253957175", + "stop_no": "15273", + "xcode": "126.8599725442", + "stop_type": "일반차로", + "node_id": "114000170", + "nxtStn": "목동역.목동오거리" + }, + { + "stop_nm": "신정역(은행정).신정4동주민센터", + "ycode": "37.5246301301", + "stop_no": "15274", + "xcode": "126.8542989447", + "stop_type": "일반차로", + "node_id": "114000171", + "nxtStn": "신서고등학교.영상고등학교입구" + }, + { + "stop_nm": "신정1동우체국", + "ycode": "37.5221525641", + "stop_no": "15277", + "xcode": "126.8614154182", + "stop_type": "일반차로", + "node_id": "114000174", + "nxtStn": "우리은행신정동지점" + }, + { + "stop_nm": "서울남부지방법원.서울남부지방검찰청", + "ycode": "37.52253", + "stop_no": "15279", + "xcode": "126.864355", + "stop_type": "일반차로", + "node_id": "114000176", + "nxtStn": "신정1동우체국" + }, + { + "stop_nm": "신정네거리역", + "ycode": "37.5212769715", + "stop_no": "15280", + "xcode": "126.853432075", + "stop_type": "일반차로", + "node_id": "114000177", + "nxtStn": "신정네거리해누리분수광장" + }, + { + "stop_nm": "신서고등학교.영상고등학교앞", + "ycode": "37.522625", + "stop_no": "15281", + "xcode": "126.85945", + "stop_type": "일반차로", + "node_id": "114000178", + "nxtStn": "신정1동우체국" + }, + { + "stop_nm": "제일여성병원", + "ycode": "37.522473", + "stop_no": "15282", + "xcode": "126.851877", + "stop_type": "일반차로", + "node_id": "114000179", + "nxtStn": "양강중학교" + }, + { + "stop_nm": "신정4동경서농협", + "ycode": "37.521515", + "stop_no": "15283", + "xcode": "126.855172", + "stop_type": "일반차로", + "node_id": "114000180", + "nxtStn": "신정네거리역" + }, + { + "stop_nm": "목동역.홍익병원", + "ycode": "37.5280495538", + "stop_no": "15284", + "xcode": "126.8639151684", + "stop_type": "일반차로", + "node_id": "114000181", + "nxtStn": "목동역.목동오거리" + }, + { + "stop_nm": "목동역.목동오거리", + "ycode": "37.5259586072", + "stop_no": "15285", + "xcode": "126.8627909553", + "stop_type": "일반차로", + "node_id": "114000182", + "nxtStn": "신서고교.영상고교입구" + }, + { + "stop_nm": "신서고교.영상고교입구", + "ycode": "37.5256530348", + "stop_no": "15286", + "xcode": "126.8603986015", + "stop_type": "일반차로", + "node_id": "114000183", + "nxtStn": "신정역(은행정).신정4동주민센터" + }, + { + "stop_nm": "신정역(은행정).신정4동주민센터", + "ycode": "37.524902", + "stop_no": "15287", + "xcode": "126.854377", + "stop_type": "일반차로", + "node_id": "114000184", + "nxtStn": "양강중학교" + }, + { + "stop_nm": "양강중학교", + "ycode": "37.525068", + "stop_no": "15288", + "xcode": "126.850553", + "stop_type": "일반차로", + "node_id": "114000185", + "nxtStn": "KT강서지사" + }, + { + "stop_nm": "신월문화체육센터", + "ycode": "37.519969", + "stop_no": "15292", + "xcode": "126.835249", + "stop_type": "일반차로", + "node_id": "114000189", + "nxtStn": "신월시영아파트중문" + }, + { + "stop_nm": "신월동우성상가", + "ycode": "37.52179", + "stop_no": "15293", + "xcode": "126.833838", + "stop_type": "일반차로", + "node_id": "114000190", + "nxtStn": "신월문화체육센터" + }, + { + "stop_nm": "중부운수앞", + "ycode": "37.5241040725", + "stop_no": "15294", + "xcode": "126.8307797604", + "stop_type": "일반차로", + "node_id": "114000191", + "nxtStn": "신월동우성상가" + }, + { + "stop_nm": "신월문화체육센터", + "ycode": "37.520117", + "stop_no": "15295", + "xcode": "126.836198", + "stop_type": "일반차로", + "node_id": "114000192", + "nxtStn": "신월시영아파트중문" + }, + { + "stop_nm": "신월동우성상가", + "ycode": "37.521717", + "stop_no": "15296", + "xcode": "126.83399", + "stop_type": "일반차로", + "node_id": "114000193", + "nxtStn": "중부운수앞" + }, + { + "stop_nm": "국립과학수사연구소입구", + "ycode": "37.522355", + "stop_no": "15298", + "xcode": "126.837035", + "stop_type": "일반차로", + "node_id": "114000194", + "nxtStn": "서서울호수공원" + }, + { + "stop_nm": "신안파크아파트후문", + "ycode": "37.5239255582", + "stop_no": "15299", + "xcode": "126.8288364619", + "stop_type": "일반차로", + "node_id": "114000195", + "nxtStn": "중부운수앞" + }, + { + "stop_nm": "신안파크아파트후문", + "ycode": "37.5241", + "stop_no": "15300", + "xcode": "126.828906", + "stop_type": "일반차로", + "node_id": "114000196", + "nxtStn": "국립과학수사연구소.고강동종점" + }, + { + "stop_nm": "국립과학수사연구소.고강동종점", + "ycode": "37.5234552209", + "stop_no": "15301", + "xcode": "126.8257794501", + "stop_type": "일반차로", + "node_id": "114000197", + "nxtStn": "신안파크아파트후문" + }, + { + "stop_nm": "신정1동주민센터.신오새마을금고", + "ycode": "37.5176031829", + "stop_no": "15302", + "xcode": "126.8538761936", + "stop_type": "일반차로", + "node_id": "114000198", + "nxtStn": "남명초교.신정3동주민센터" + }, + { + "stop_nm": "신정네거리역", + "ycode": "37.5198533776", + "stop_no": "15303", + "xcode": "126.8528216878", + "stop_type": "일반차로", + "node_id": "114000199", + "nxtStn": "신정1동주민센터" + }, + { + "stop_nm": "신트리아파트", + "ycode": "37.513032", + "stop_no": "15304", + "xcode": "126.853865", + "stop_type": "일반차로", + "node_id": "114000200", + "nxtStn": "정랑고개.양천벤처타운" + }, + { + "stop_nm": "정랑고개.양천벤처타운", + "ycode": "37.5116613527", + "stop_no": "15305", + "xcode": "126.8498548282", + "stop_type": "일반차로", + "node_id": "114000201", + "nxtStn": "금옥중.금옥여고.백암고등학교" + }, + { + "stop_nm": "서부트럭터미널.신정동일하이빌아파트", + "ycode": "37.510935", + "stop_no": "15306", + "xcode": "126.842363", + "stop_type": "일반차로", + "node_id": "114000202", + "nxtStn": "강신중학교" + }, + { + "stop_nm": "강신중학교", + "ycode": "37.5152713231", + "stop_no": "15307", + "xcode": "126.8403598507", + "stop_type": "일반차로", + "node_id": "114000203", + "nxtStn": "국립과학수사연구소" + }, + { + "stop_nm": "남명초교.신정3동주민센터", + "ycode": "37.515076534", + "stop_no": "15308", + "xcode": "126.8549125537", + "stop_type": "일반차로", + "node_id": "114000204", + "nxtStn": "신트리사거리" + }, + { + "stop_nm": "금옥중.금옥여고.백암고등학교", + "ycode": "37.5098523335", + "stop_no": "15309", + "xcode": "126.8445827103", + "stop_type": "일반차로", + "node_id": "114000205", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "양강중학교", + "ycode": "37.524862", + "stop_no": "15310", + "xcode": "126.85028", + "stop_type": "일반차로", + "node_id": "114000206", + "nxtStn": "신월2동우체국" + }, + { + "stop_nm": "양강중학교", + "ycode": "37.52385", + "stop_no": "15311", + "xcode": "126.849502", + "stop_type": "일반차로", + "node_id": "114000207", + "nxtStn": "신월2동주민센터입구.경창전통시장" + }, + { + "stop_nm": "신월2동주민센터입구.경창전통시장", + "ycode": "37.5231005832", + "stop_no": "15312", + "xcode": "126.8460404234", + "stop_type": "일반차로", + "node_id": "114000208", + "nxtStn": "강서초등학교" + }, + { + "stop_nm": "강서초등학교", + "ycode": "37.522025", + "stop_no": "15313", + "xcode": "126.841675", + "stop_type": "일반차로", + "node_id": "114000209", + "nxtStn": "한빛종합사회복지관" + }, + { + "stop_nm": "한빛종합사회복지관", + "ycode": "37.521342", + "stop_no": "15314", + "xcode": "126.838743", + "stop_type": "일반차로", + "node_id": "114000210", + "nxtStn": "신월문화체육센터" + }, + { + "stop_nm": "과학수사연구소입구", + "ycode": "37.521905", + "stop_no": "15315", + "xcode": "126.836962", + "stop_type": "일반차로", + "node_id": "114000211", + "nxtStn": "강신중학교" + }, + { + "stop_nm": "서부트럭터미널.신정동일하이빌아파트", + "ycode": "37.510088", + "stop_no": "15316", + "xcode": "126.8424", + "stop_type": "일반차로", + "node_id": "114000212", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "신정현대아파트.서부트럭터미널", + "ycode": "37.5083597993", + "stop_no": "15317", + "xcode": "126.8429841108", + "stop_type": "일반차로", + "node_id": "114000213", + "nxtStn": "오류동입구" + }, + { + "stop_nm": "넓은들공원", + "ycode": "37.510795", + "stop_no": "15318", + "xcode": "126.839199", + "stop_type": "일반차로", + "node_id": "114000214", + "nxtStn": "대일관광고.푸른마을3단지" + }, + { + "stop_nm": "넓은들공원", + "ycode": "37.511066", + "stop_no": "15319", + "xcode": "126.838648", + "stop_type": "일반차로", + "node_id": "114000215", + "nxtStn": "동일하이빌아파트" + }, + { + "stop_nm": "신정현대아파트", + "ycode": "37.508781", + "stop_no": "15320", + "xcode": "126.842139", + "stop_type": "일반차로", + "node_id": "114000216", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "신정숲속마을아파트", + "ycode": "37.506447", + "stop_no": "15321", + "xcode": "126.834138", + "stop_type": "일반차로", + "node_id": "114000217", + "nxtStn": "양천공영차고지" + }, + { + "stop_nm": "신정숲속마을아파트.댓골마을입구", + "ycode": "37.506761", + "stop_no": "15322", + "xcode": "126.835613", + "stop_type": "일반차로", + "node_id": "114000218", + "nxtStn": "서서울생활과학고.궁동도서관" + }, + { + "stop_nm": "양천중앙도서관.푸른마을2단지", + "ycode": "37.5141912766", + "stop_no": "15323", + "xcode": "126.8340906245", + "stop_type": "일반차로", + "node_id": "114000219", + "nxtStn": "신월시영아파트.강월초등학교" + }, + { + "stop_nm": "양천중앙도서관.푸른마을2단지", + "ycode": "37.514032", + "stop_no": "15324", + "xcode": "126.833988", + "stop_type": "일반차로", + "node_id": "114000220", + "nxtStn": "이든채아파트.서남병원" + }, + { + "stop_nm": "신월시영아파트.강월초등학교", + "ycode": "37.515731", + "stop_no": "15325", + "xcode": "126.83553", + "stop_type": "일반차로", + "node_id": "114000221", + "nxtStn": "금실어린이공원" + }, + { + "stop_nm": "신월시영아파트.강월초등학교", + "ycode": "37.515937", + "stop_no": "15326", + "xcode": "126.835305", + "stop_type": "일반차로", + "node_id": "114000222", + "nxtStn": "양천중앙도서관.푸른마을2단지" + }, + { + "stop_nm": "강월초교입구사거리", + "ycode": "37.516359946", + "stop_no": "15327", + "xcode": "126.8377839139", + "stop_type": "일반차로", + "node_id": "114000223", + "nxtStn": "강신중학교" + }, + { + "stop_nm": "강월초교입구사거리", + "ycode": "37.5166925531", + "stop_no": "15328", + "xcode": "126.8378578575", + "stop_type": "일반차로", + "node_id": "114000224", + "nxtStn": "신월시영아파트.강월초등학교" + }, + { + "stop_nm": "금실어린이공원", + "ycode": "37.5179542888", + "stop_no": "15329", + "xcode": "126.8377738585", + "stop_type": "일반차로", + "node_id": "114000225", + "nxtStn": "신월시영아파트중문" + }, + { + "stop_nm": "금실어린이공원", + "ycode": "37.5174285164", + "stop_no": "15330", + "xcode": "126.8378532017", + "stop_type": "일반차로", + "node_id": "114000226", + "nxtStn": "신월시영아파트.강월초등학교" + }, + { + "stop_nm": "강신중학교", + "ycode": "37.515863", + "stop_no": "15331", + "xcode": "126.839809", + "stop_type": "일반차로", + "node_id": "114000227", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "양서중학교", + "ycode": "37.531548", + "stop_no": "15332", + "xcode": "126.830955", + "stop_type": "일반차로", + "node_id": "114000228", + "nxtStn": "서서울호수공원" + }, + { + "stop_nm": "신월1동주민센터.신월보건지소", + "ycode": "37.532183", + "stop_no": "15333", + "xcode": "126.83105", + "stop_type": "일반차로", + "node_id": "114000229", + "nxtStn": "서부여성발전센터" + }, + { + "stop_nm": "신월3동주민센터.신월3동우체국", + "ycode": "37.5346648231", + "stop_no": "15334", + "xcode": "126.8288288926", + "stop_type": "일반차로", + "node_id": "114000230", + "nxtStn": "양서중학교" + }, + { + "stop_nm": "서부여성발전센터", + "ycode": "37.535164296", + "stop_no": "15335", + "xcode": "126.8290121927", + "stop_type": "일반차로", + "node_id": "114000231", + "nxtStn": "메디힐병원.서울금융고등학교" + }, + { + "stop_nm": "가로공원공영주차장.신영시장", + "ycode": "37.536378", + "stop_no": "15336", + "xcode": "126.833023", + "stop_type": "일반차로", + "node_id": "114000232", + "nxtStn": "가로공원.나누리병원" + }, + { + "stop_nm": "국민은행신월동지점", + "ycode": "37.535805", + "stop_no": "15337", + "xcode": "126.829107", + "stop_type": "일반차로", + "node_id": "114000233", + "nxtStn": "가로공원공영주차장.신영시장" + }, + { + "stop_nm": "서서울호수공원", + "ycode": "37.5290347298", + "stop_no": "15338", + "xcode": "126.8325721561", + "stop_type": "일반차로", + "node_id": "114000234", + "nxtStn": "과학수사연구소입구" + }, + { + "stop_nm": "서서울호수공원", + "ycode": "37.5292505864", + "stop_no": "15339", + "xcode": "126.8329212932", + "stop_type": "일반차로", + "node_id": "114000235", + "nxtStn": "화곡입구" + }, + { + "stop_nm": "하나은행신월동지점", + "ycode": "37.530478", + "stop_no": "15340", + "xcode": "126.837995", + "stop_type": "일반차로", + "node_id": "114000236", + "nxtStn": "신월동기점" + }, + { + "stop_nm": "가로공원공영주차장", + "ycode": "37.536653", + "stop_no": "15341", + "xcode": "126.832582", + "stop_type": "일반차로", + "node_id": "114000237", + "nxtStn": "국민은행신월동지점" + }, + { + "stop_nm": "양원초교.광영여고", + "ycode": "37.5390246021", + "stop_no": "15342", + "xcode": "126.8235071834", + "stop_type": "일반차로", + "node_id": "114000238", + "nxtStn": "신월5동주민센터.신월중학교" + }, + { + "stop_nm": "국민은행신월동지점", + "ycode": "37.5362149282", + "stop_no": "15343", + "xcode": "126.8296038629", + "stop_type": "일반차로", + "node_id": "114000239", + "nxtStn": "신월3동주민센터.신월3동우체국" + }, + { + "stop_nm": "메디힐병원.서울금융고등학교", + "ycode": "37.5369926272", + "stop_no": "15344", + "xcode": "126.8277768675", + "stop_type": "일반차로", + "node_id": "114000240", + "nxtStn": "신월중학교입구" + }, + { + "stop_nm": "신화중학교", + "ycode": "37.539653", + "stop_no": "15345", + "xcode": "126.83135", + "stop_type": "가로변전일", + "node_id": "114000241", + "nxtStn": "신월5동주민센터.신월중학교" + }, + { + "stop_nm": "신월5동주민센터.신월중학교", + "ycode": "37.5394783937", + "stop_no": "15346", + "xcode": "126.8275323805", + "stop_type": "가로변전일", + "node_id": "114000242", + "nxtStn": "광영고.신동아파밀리에아파트" + }, + { + "stop_nm": "신월5동주민센터.신월중학교", + "ycode": "37.539253", + "stop_no": "15347", + "xcode": "126.827617", + "stop_type": "가로변전일", + "node_id": "114000243", + "nxtStn": "신화중학교" + }, + { + "stop_nm": "신월중학교입구", + "ycode": "37.539898", + "stop_no": "15348", + "xcode": "126.825283", + "stop_type": "일반차로", + "node_id": "114000244", + "nxtStn": "서울금융고등학교" + }, + { + "stop_nm": "신월중학교입구", + "ycode": "37.540132", + "stop_no": "15349", + "xcode": "126.82566", + "stop_type": "일반차로", + "node_id": "114000245", + "nxtStn": "외발산신광명마을" + }, + { + "stop_nm": "광영고.신동아파밀리에아파트", + "ycode": "37.5393577897", + "stop_no": "15350", + "xcode": "126.8233615523", + "stop_type": "일반차로", + "node_id": "114000246", + "nxtStn": "서울농원" + }, + { + "stop_nm": "서울금융고등학교", + "ycode": "37.537320428", + "stop_no": "15351", + "xcode": "126.8270247465", + "stop_type": "일반차로", + "node_id": "114000247", + "nxtStn": "신월3동주민센터.신월3동우체국" + }, + { + "stop_nm": "신화중학교", + "ycode": "37.539355", + "stop_no": "15352", + "xcode": "126.830763", + "stop_type": "가로변시간", + "node_id": "114000248", + "nxtStn": "강서구청소년상담복지센터" + }, + { + "stop_nm": "경창빌딩", + "ycode": "37.51866", + "stop_no": "15353", + "xcode": "126.838582", + "stop_type": "일반차로", + "node_id": "114000249", + "nxtStn": "강신중학교" + }, + { + "stop_nm": "신월시영아파트중문", + "ycode": "37.519088", + "stop_no": "15354", + "xcode": "126.836715", + "stop_type": "일반차로", + "node_id": "114000250", + "nxtStn": "신월문화체육센터" + }, + { + "stop_nm": "신월시영아파트중문", + "ycode": "37.519083", + "stop_no": "15355", + "xcode": "126.83658", + "stop_type": "일반차로", + "node_id": "114000251", + "nxtStn": "금실어린이공원" + }, + { + "stop_nm": "목원초등학교.서울지방식품의약품안전청", + "ycode": "37.543038", + "stop_no": "15356", + "xcode": "126.881355", + "stop_type": "일반차로", + "node_id": "114000252", + "nxtStn": "목동한신청구아파트" + }, + { + "stop_nm": "양천노인종합복지관", + "ycode": "37.510413", + "stop_no": "15357", + "xcode": "126.859079", + "stop_type": "일반차로", + "node_id": "114000253", + "nxtStn": "신트리아파트" + }, + { + "stop_nm": "양서중학교", + "ycode": "37.5327964612", + "stop_no": "15358", + "xcode": "126.8302430927", + "stop_type": "일반차로", + "node_id": "114000432", + "nxtStn": "보람쉬움아파트" + }, + { + "stop_nm": "양명초등학교", + "ycode": "37.516086", + "stop_no": "15359", + "xcode": "126.857243", + "stop_type": "일반차로", + "node_id": "114000254", + "nxtStn": "목동11단지" + }, + { + "stop_nm": "신목동역-서울지방식품의약품안전청", + "ycode": "37.543635", + "stop_no": "15360", + "xcode": "126.88336", + "stop_type": "일반차로", + "node_id": "114000255", + "nxtStn": "월촌중학교.목동1단지" + }, + { + "stop_nm": "목동파라곤", + "ycode": "37.5300691011", + "stop_no": "15361", + "xcode": "126.8755214922", + "stop_type": "일반차로", + "node_id": "114000256", + "nxtStn": "목동5단지C상가.목동운동장북문" + }, + { + "stop_nm": "신정현대아파트.서부트럭터미널", + "ycode": "37.5090108927", + "stop_no": "15362", + "xcode": "126.8420065648", + "stop_type": "일반차로", + "node_id": "114000257", + "nxtStn": "동일하이빌아파트" + }, + { + "stop_nm": "대일관광고.푸른마을3단지", + "ycode": "37.51118", + "stop_no": "15363", + "xcode": "126.836222", + "stop_type": "일반차로", + "node_id": "114000258", + "nxtStn": "푸른마을1단지아파트" + }, + { + "stop_nm": "대일관광고.푸른마을3단지", + "ycode": "37.511319", + "stop_no": "15364", + "xcode": "126.835885", + "stop_type": "일반차로", + "node_id": "114000259", + "nxtStn": "양천공영차고지" + }, + { + "stop_nm": "신정현대아파트", + "ycode": "37.5086365863", + "stop_no": "15365", + "xcode": "126.8410741599", + "stop_type": "일반차로", + "node_id": "114000260", + "nxtStn": "양천공영차고지" + }, + { + "stop_nm": "신월문화체육센터", + "ycode": "37.520513", + "stop_no": "15366", + "xcode": "126.836879", + "stop_type": "일반차로", + "node_id": "114000261", + "nxtStn": "한빛종합사회복지관" + }, + { + "stop_nm": "목동아파트1102동앞", + "ycode": "37.511596", + "stop_no": "15367", + "xcode": "126.860129", + "stop_type": "일반차로", + "node_id": "114000262", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "트럭터미널주유소앞", + "ycode": "37.5090877674", + "stop_no": "15368", + "xcode": "126.8415437621", + "stop_type": "일반차로", + "node_id": "114000263", + "nxtStn": "넓은들공원" + }, + { + "stop_nm": "목동아파트1434동앞", + "ycode": "37.515655", + "stop_no": "15369", + "xcode": "126.871975", + "stop_type": "일반차로", + "node_id": "114000264", + "nxtStn": "신목초등학교입구" + }, + { + "stop_nm": "목동아파트1216동앞", + "ycode": "37.511505", + "stop_no": "15370", + "xcode": "126.862188", + "stop_type": "일반차로", + "node_id": "114000438", + "nxtStn": "양천노인종합복지관" + }, + { + "stop_nm": "신월동기점", + "ycode": "37.5294773535", + "stop_no": "15371", + "xcode": "126.8385294276", + "stop_type": "일반차로", + "node_id": "114000265", + "nxtStn": "종점" + }, + { + "stop_nm": "목동아파트1218동앞", + "ycode": "37.5117167505", + "stop_no": "15372", + "xcode": "126.8636210262", + "stop_type": "일반차로", + "node_id": "114000439", + "nxtStn": "양천구청역" + }, + { + "stop_nm": "양천공영차고지", + "ycode": "37.5084927645", + "stop_no": "15373", + "xcode": "126.8372191177", + "stop_type": "일반차로", + "node_id": "114000267", + "nxtStn": "종점" + }, + { + "stop_nm": "국립과학수사연구소.고강동종점", + "ycode": "37.523548", + "stop_no": "15374", + "xcode": "126.825713", + "stop_type": "일반차로", + "node_id": "114000268", + "nxtStn": "종점" + }, + { + "stop_nm": "신월동기점", + "ycode": "37.529577", + "stop_no": "15377", + "xcode": "126.838662", + "stop_type": "일반차로", + "node_id": "114000270", + "nxtStn": "황외과앞" + }, + { + "stop_nm": "양천공영차고지", + "ycode": "37.508701", + "stop_no": "15378", + "xcode": "126.837646", + "stop_type": "일반차로", + "node_id": "114000271", + "nxtStn": "대일관광고.푸른마을3단지" + }, + { + "stop_nm": "신정이펜하우스3단지", + "ycode": "37.5141211783", + "stop_no": "15380", + "xcode": "126.8304154243", + "stop_type": "일반차로", + "node_id": "114000404", + "nxtStn": "신월시영아파트.강월초등학교" + }, + { + "stop_nm": "푸른마을1단지.이든채아파트", + "ycode": "37.5126531126", + "stop_no": "15399", + "xcode": "126.8353881275", + "stop_type": "일반차로", + "node_id": "114000283", + "nxtStn": "신은초등학교" + }, + { + "stop_nm": "신교정입구", + "ycode": "37.5186669544", + "stop_no": "15401", + "xcode": "126.8738695176", + "stop_type": "일반차로", + "node_id": "118000605", + "nxtStn": "오목교역" + }, + { + "stop_nm": "중부운수앞", + "ycode": "37.5242203138", + "stop_no": "15402", + "xcode": "126.8307794978", + "stop_type": "일반차로", + "node_id": "114000285", + "nxtStn": "신안파크아파트후문" + }, + { + "stop_nm": "푸른마을1단지.이든채아파트", + "ycode": "37.512878", + "stop_no": "15405", + "xcode": "126.83488", + "stop_type": "일반차로", + "node_id": "114000288", + "nxtStn": "푸른마을아파트3단지" + }, + { + "stop_nm": "신정교입구", + "ycode": "37.518575", + "stop_no": "15408", + "xcode": "126.873613", + "stop_type": "일반차로", + "node_id": "114000289", + "nxtStn": "신도림역" + }, + { + "stop_nm": "신월청소년문화센터", + "ycode": "37.5354516006", + "stop_no": "15411", + "xcode": "126.8264417895", + "stop_type": "일반차로", + "node_id": "114000292", + "nxtStn": "국민은행신월동지점" + }, + { + "stop_nm": "계남초등학교", + "ycode": "37.510125", + "stop_no": "15412", + "xcode": "126.857763", + "stop_type": "일반차로", + "node_id": "114000293", + "nxtStn": "고척파크푸르지오아파트" + }, + { + "stop_nm": "신목동역-서울지방식품의약품안전청", + "ycode": "37.5436432794", + "stop_no": "15413", + "xcode": "126.8835304104", + "stop_type": "일반차로", + "node_id": "114000294", + "nxtStn": "나이아가라.리버파크.골든서울호텔" + }, + { + "stop_nm": "보람쉬움아파트", + "ycode": "37.5298", + "stop_no": "15414", + "xcode": "126.835482", + "stop_type": "일반차로", + "node_id": "114000402", + "nxtStn": "강서한방병원" + }, + { + "stop_nm": "보람쉬움아파트.신영시장", + "ycode": "37.5299044382", + "stop_no": "15415", + "xcode": "126.8352416009", + "stop_type": "일반차로", + "node_id": "114000403", + "nxtStn": "서서울호수공원" + }, + { + "stop_nm": "신정이펜하우스2단지", + "ycode": "37.514504", + "stop_no": "15416", + "xcode": "126.830539", + "stop_type": "일반차로", + "node_id": "114000405", + "nxtStn": "이펜하우스1단지.어르신요양센터" + }, + { + "stop_nm": "신정이펜하우스1단지아파트", + "ycode": "37.5139871425", + "stop_no": "15418", + "xcode": "126.8280797488", + "stop_type": "일반차로", + "node_id": "114000431", + "nxtStn": "까치울터널" + }, + { + "stop_nm": "이펜하우스1단지.어르신요양센터", + "ycode": "37.513244", + "stop_no": "15419", + "xcode": "126.828913", + "stop_type": "일반차로", + "node_id": "114000423", + "nxtStn": "신정이펜하우스3.4단지" + }, + { + "stop_nm": "양천어르신요양센터", + "ycode": "37.5136182192", + "stop_no": "15420", + "xcode": "126.8284425852", + "stop_type": "일반차로", + "node_id": "114000430", + "nxtStn": "신정이펜하우스3단지" + }, + { + "stop_nm": "신정이펜하우스3.4단지", + "ycode": "37.511293", + "stop_no": "15421", + "xcode": "126.83046", + "stop_type": "일반차로", + "node_id": "114000425", + "nxtStn": "서남병원" + }, + { + "stop_nm": "신정이펜하우스5단지.서남병원", + "ycode": "37.511199", + "stop_no": "15423", + "xcode": "126.833468", + "stop_type": "일반차로", + "node_id": "114000424", + "nxtStn": "푸른마을1단지아파트" + }, + { + "stop_nm": "푸른마을아파트3단지", + "ycode": "37.5120789765", + "stop_no": "15500", + "xcode": "126.8365884562", + "stop_type": "마을버스", + "node_id": "114900007", + "nxtStn": "넓은들공원" + }, + { + "stop_nm": "강서보건소.9호선등촌역", + "ycode": "37.5490380694", + "stop_no": "15501", + "xcode": "126.8680475339", + "stop_type": "마을버스", + "node_id": "114900082", + "nxtStn": "목2동주민센터" + }, + { + "stop_nm": "목2동주민센터", + "ycode": "37.546175", + "stop_no": "15503", + "xcode": "126.871381", + "stop_type": "마을버스", + "node_id": "114900080", + "nxtStn": "팔복부동산.목동교회" + }, + { + "stop_nm": "동일하이빌아파트", + "ycode": "37.5100140206", + "stop_no": "15504", + "xcode": "126.8408155962", + "stop_type": "마을버스", + "node_id": "114900006", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "팔복부동산.목동교회", + "ycode": "37.543894503", + "stop_no": "15505", + "xcode": "126.870383328", + "stop_type": "마을버스", + "node_id": "114900005", + "nxtStn": "목동문화체육센터.건영아파트" + }, + { + "stop_nm": "신정현대아파트.서부트럭터미널", + "ycode": "37.5084268815", + "stop_no": "15506", + "xcode": "126.8412612427", + "stop_type": "마을버스", + "node_id": "114900004", + "nxtStn": "한성교회.금옥여고.백암고" + }, + { + "stop_nm": "목동문화체육센터.건영아파트", + "ycode": "37.5417556164", + "stop_no": "15507", + "xcode": "126.8690347158", + "stop_type": "마을버스", + "node_id": "114900003", + "nxtStn": "우신웨스트빌.목동보건지소" + }, + { + "stop_nm": "한성교회.금옥여고.백암고", + "ycode": "37.5107847678", + "stop_no": "15508", + "xcode": "126.8430650004", + "stop_type": "마을버스", + "node_id": "114900002", + "nxtStn": "대림.수정아파트" + }, + { + "stop_nm": "우신웨스트빌.목동보건지소", + "ycode": "37.5394632318", + "stop_no": "15509", + "xcode": "126.8690375939", + "stop_type": "마을버스", + "node_id": "114900001", + "nxtStn": "현대아파트.월드메르디앙아파트" + }, + { + "stop_nm": "대림.수정아파트", + "ycode": "37.5123383373", + "stop_no": "15510", + "xcode": "126.8424429811", + "stop_type": "마을버스", + "node_id": "114900032", + "nxtStn": "벽산.대주아파트" + }, + { + "stop_nm": "벽산.대주아파트", + "ycode": "37.5143898216", + "stop_no": "15511", + "xcode": "126.8415302899", + "stop_type": "마을버스", + "node_id": "114900031", + "nxtStn": "목동센트럴2단지" + }, + { + "stop_nm": "성원.극동아파트", + "ycode": "37.5380036179", + "stop_no": "15512", + "xcode": "126.8716473252", + "stop_type": "마을버스", + "node_id": "114900030", + "nxtStn": "신목중학교" + }, + { + "stop_nm": "목동센트럴2단지", + "ycode": "37.515529943", + "stop_no": "15513", + "xcode": "126.8410312611", + "stop_type": "마을버스", + "node_id": "114900029", + "nxtStn": "목동센트럴1단지" + }, + { + "stop_nm": "목동센트럴1단지", + "ycode": "37.5164268831", + "stop_no": "15516", + "xcode": "126.8407068265", + "stop_type": "마을버스", + "node_id": "114900026", + "nxtStn": "신한은행신월동지점" + }, + { + "stop_nm": "농협.영도초등학교", + "ycode": "37.535918184", + "stop_no": "15518", + "xcode": "126.8705498954", + "stop_type": "마을버스", + "node_id": "114900025", + "nxtStn": "목동스카이아파트.목동3단지" + }, + { + "stop_nm": "학마을2단지아파트", + "ycode": "37.5088381976", + "stop_no": "15522", + "xcode": "126.8442805344", + "stop_type": "마을버스", + "node_id": "114900022", + "nxtStn": "학마을2단지아파트" + }, + { + "stop_nm": "한신청구아파트", + "ycode": "37.53969003", + "stop_no": "15524", + "xcode": "126.8815754738", + "stop_type": "마을버스", + "node_id": "114900020", + "nxtStn": "월촌중학교.목동1단지" + }, + { + "stop_nm": "학마을2단지아파트", + "ycode": "37.508967", + "stop_no": "15526", + "xcode": "126.844108", + "stop_type": "마을버스", + "node_id": "114900018", + "nxtStn": "오류중학교" + }, + { + "stop_nm": "신정1동주민센터", + "ycode": "37.5183653861", + "stop_no": "15536", + "xcode": "126.8547129441", + "stop_type": "마을버스", + "node_id": "114900013", + "nxtStn": "목동10단지" + }, + { + "stop_nm": "목동10단지", + "ycode": "37.5189371319", + "stop_no": "15539", + "xcode": "126.8566246544", + "stop_type": "마을버스", + "node_id": "114900011", + "nxtStn": "목동프라자" + }, + { + "stop_nm": "오목교역.대학학원", + "ycode": "37.5248106495", + "stop_no": "15540", + "xcode": "126.8741567243", + "stop_type": "마을버스", + "node_id": "114900010", + "nxtStn": "목운초등학교.목운중학교" + }, + { + "stop_nm": "목동프라자", + "ycode": "37.5193999936", + "stop_no": "15542", + "xcode": "126.8593705814", + "stop_type": "마을버스", + "node_id": "114900090", + "nxtStn": "신서초교" + }, + { + "stop_nm": "신서초교", + "ycode": "37.5206350924", + "stop_no": "15545", + "xcode": "126.8621671623", + "stop_type": "마을버스", + "node_id": "114900008", + "nxtStn": "서울남부지법" + }, + { + "stop_nm": "서울남부지법", + "ycode": "37.5216813177", + "stop_no": "15547", + "xcode": "126.8629843287", + "stop_type": "마을버스", + "node_id": "114900059", + "nxtStn": "진명여고" + }, + { + "stop_nm": "한신청구아파트정문", + "ycode": "37.5398180274", + "stop_no": "15553", + "xcode": "126.8816171411", + "stop_type": "마을버스", + "node_id": "114900034", + "nxtStn": "목동한신청구아파트" + }, + { + "stop_nm": "목동8단지천주교", + "ycode": "37.5225981211", + "stop_no": "15554", + "xcode": "126.8688815376", + "stop_type": "마을버스", + "node_id": "114900035", + "nxtStn": "목동8단지.한전" + }, + { + "stop_nm": "목동3.4단지사잇길", + "ycode": "37.5327979786", + "stop_no": "15556", + "xcode": "126.8716438006", + "stop_type": "마을버스", + "node_id": "114900036", + "nxtStn": "목동3단지후문" + }, + { + "stop_nm": "용왕산입구", + "ycode": "37.5380880949", + "stop_no": "15561", + "xcode": "126.8731057989", + "stop_type": "마을버스", + "node_id": "114900063", + "nxtStn": "성원.극동아파트" + }, + { + "stop_nm": "성원.극동아파트", + "ycode": "37.5380073723", + "stop_no": "15564", + "xcode": "126.8717853725", + "stop_type": "마을버스", + "node_id": "114900039", + "nxtStn": "현대아파트.월드메르디앙아파트" + }, + { + "stop_nm": "목동9단지B상가", + "ycode": "37.5182652653", + "stop_no": "15565", + "xcode": "126.860685007", + "stop_type": "마을버스", + "node_id": "114900040", + "nxtStn": "목동프라자" + }, + { + "stop_nm": "현대아파트.월드메르디앙아파트", + "ycode": "37.5390523984", + "stop_no": "15566", + "xcode": "126.8699130421", + "stop_type": "마을버스", + "node_id": "114900041", + "nxtStn": "우신웨스트빌.목동보건지소" + }, + { + "stop_nm": "목동프라자", + "ycode": "37.5195079433", + "stop_no": "15567", + "xcode": "126.8592176522", + "stop_type": "마을버스", + "node_id": "114900069", + "nxtStn": "목동10단지" + }, + { + "stop_nm": "우신웨스트빌.목동보건지소", + "ycode": "37.5402388202", + "stop_no": "15568", + "xcode": "126.8688076498", + "stop_type": "마을버스", + "node_id": "114900042", + "nxtStn": "목동문화체육센터.건영아파트" + }, + { + "stop_nm": "목동문화체육센터.건영아파트", + "ycode": "37.5418504119", + "stop_no": "15570", + "xcode": "126.869197507", + "stop_type": "마을버스", + "node_id": "114900064", + "nxtStn": "팔복부동산.목동교회" + }, + { + "stop_nm": "신정1동주민센터", + "ycode": "37.5184090452", + "stop_no": "15571", + "xcode": "126.8543800508", + "stop_type": "마을버스", + "node_id": "114900091", + "nxtStn": "신정네거리역" + }, + { + "stop_nm": "팔복부동산.목동교회", + "ycode": "37.5438486739", + "stop_no": "15572", + "xcode": "126.8704988384", + "stop_type": "마을버스", + "node_id": "114900065", + "nxtStn": "목2동주민센터" + }, + { + "stop_nm": "목2동주민센터", + "ycode": "37.5466952437", + "stop_no": "15574", + "xcode": "126.8713325179", + "stop_type": "마을버스", + "node_id": "114900047", + "nxtStn": "양동중학교" + }, + { + "stop_nm": "양동중학교", + "ycode": "37.547522312", + "stop_no": "15576", + "xcode": "126.8687518796", + "stop_type": "마을버스", + "node_id": "114900067", + "nxtStn": "롯데캐슬아파트.목3동시장" + }, + { + "stop_nm": "수명산입구", + "ycode": "37.5434136288", + "stop_no": "15577", + "xcode": "126.8288756598", + "stop_type": "마을버스", + "node_id": "114900074", + "nxtStn": "강서양천교육지원청" + }, + { + "stop_nm": "거산아파트", + "ycode": "37.5401966583", + "stop_no": "15579", + "xcode": "126.8319712047", + "stop_type": "마을버스", + "node_id": "114900044", + "nxtStn": "강서구청소년상담복지센터" + }, + { + "stop_nm": "신곡시장", + "ycode": "37.5187453383", + "stop_no": "15582", + "xcode": "126.842581104", + "stop_type": "마을버스", + "node_id": "114900048", + "nxtStn": "신한은행신월동지점" + }, + { + "stop_nm": "목동센트럴1단지", + "ycode": "37.5165519359", + "stop_no": "15584", + "xcode": "126.8404713803", + "stop_type": "마을버스", + "node_id": "114900068", + "nxtStn": "목동센트럴2단지.이마트24" + }, + { + "stop_nm": "목동센트럴2단지.이마트24", + "ycode": "37.5157451286", + "stop_no": "15585", + "xcode": "126.8408152558", + "stop_type": "마을버스", + "node_id": "114900049", + "nxtStn": "벽산.대주아파트" + }, + { + "stop_nm": "벽산.대주아파트", + "ycode": "37.5145607856", + "stop_no": "15586", + "xcode": "126.8413477998", + "stop_type": "마을버스", + "node_id": "114900050", + "nxtStn": "대림.수정아파트" + }, + { + "stop_nm": "대림.수정아파트", + "ycode": "37.5122985653", + "stop_no": "15587", + "xcode": "126.8423503064", + "stop_type": "마을버스", + "node_id": "114900051", + "nxtStn": "한성교회.백암고" + }, + { + "stop_nm": "한성교회.백암고", + "ycode": "37.5111080859", + "stop_no": "15588", + "xcode": "126.8429319752", + "stop_type": "마을버스", + "node_id": "114900052", + "nxtStn": "금옥여고.대우미래사랑아파트" + }, + { + "stop_nm": "금옥여고.대우미래사랑아파트", + "ycode": "37.5096646181", + "stop_no": "15589", + "xcode": "126.8436826965", + "stop_type": "마을버스", + "node_id": "114900053", + "nxtStn": "신정현대아파트.서부트럭터미널" + }, + { + "stop_nm": "동일하이빌아파트", + "ycode": "37.5101435591", + "stop_no": "15591", + "xcode": "126.8406524331", + "stop_type": "마을버스", + "node_id": "114900054", + "nxtStn": "넓은들공원" + }, + { + "stop_nm": "현대아파트.월드메르디앙아파트", + "ycode": "37.5387122738", + "stop_no": "15593", + "xcode": "126.8703583513", + "stop_type": "마을버스", + "node_id": "114900070", + "nxtStn": "성원.극동아파트" + }, + { + "stop_nm": "롯데캐슬아파트.목3동시장", + "ycode": "37.5480700593", + "stop_no": "15594", + "xcode": "126.8670352013", + "stop_type": "마을버스", + "node_id": "114900083", + "nxtStn": "종점" + }, + { + "stop_nm": "신정이펜하우스1단지", + "ycode": "37.515057", + "stop_no": "15596", + "xcode": "126.828095", + "stop_type": "마을버스", + "node_id": "114900097", + "nxtStn": "이펜하우스1단지.어르신요양센터" + }, + { + "stop_nm": "서남병원", + "ycode": "37.511742", + "stop_no": "15599", + "xcode": "126.832599", + "stop_type": "마을버스", + "node_id": "114900075", + "nxtStn": "신은초등학교" + }, + { + "stop_nm": "신은초등학교", + "ycode": "37.513337", + "stop_no": "15600", + "xcode": "126.833538", + "stop_type": "마을버스", + "node_id": "114900057", + "nxtStn": "이든채아파트.서남병원" + }, + { + "stop_nm": "신은초등학교", + "ycode": "37.513485896", + "stop_no": "15614", + "xcode": "126.8336315903", + "stop_type": "마을버스", + "node_id": "114900072", + "nxtStn": "서남병원" + }, + { + "stop_nm": "서남병원", + "ycode": "37.5117570005", + "stop_no": "15635", + "xcode": "126.83252592", + "stop_type": "마을버스", + "node_id": "114900076", + "nxtStn": "이펜하우스3.4단지" + }, + { + "stop_nm": "이펜하우스3.4단지", + "ycode": "37.5115753271", + "stop_no": "15637", + "xcode": "126.8302520069", + "stop_type": "마을버스", + "node_id": "114900073", + "nxtStn": "양천어르신요양센터" + }, + { + "stop_nm": "양천어르신요양센터", + "ycode": "37.513441", + "stop_no": "15638", + "xcode": "126.828909", + "stop_type": "마을버스", + "node_id": "114900058", + "nxtStn": "신정이펜하우스1단지.새금성교회" + }, + { + "stop_nm": "신정이펜하우스1단지.새금성교회", + "ycode": "37.514448", + "stop_no": "15639", + "xcode": "126.828504", + "stop_type": "일반차로", + "node_id": "114000435", + "nxtStn": "종점" + }, + { + "stop_nm": "목동역", + "ycode": "37.5253674114", + "stop_no": "15691", + "xcode": "126.864285482", + "stop_type": "일반차로", + "node_id": "114000368", + "nxtStn": "갈산초등학교" + }, + { + "stop_nm": "목동역", + "ycode": "37.5253354768", + "stop_no": "15692", + "xcode": "126.8647256531", + "stop_type": "일반차로", + "node_id": "114000369", + "nxtStn": "홍익병원목동관" + }, + { + "stop_nm": "갈산초등학교", + "ycode": "37.5129359732", + "stop_no": "15693", + "xcode": "126.8700047657", + "stop_type": "일반차로", + "node_id": "114000370", + "nxtStn": "구로공구상가" + }, + { + "stop_nm": "갈산초등학교", + "ycode": "37.5130463236", + "stop_no": "15694", + "xcode": "126.87038353", + "stop_type": "일반차로", + "node_id": "114000371", + "nxtStn": "목동역" + }, + { + "stop_nm": "화곡입구", + "ycode": "37.5369927184", + "stop_no": "15695", + "xcode": "126.8272223971", + "stop_type": "일반차로", + "node_id": "114000372", + "nxtStn": "서서울호수공원" + }, + { + "stop_nm": "화곡입구", + "ycode": "37.5370988852", + "stop_no": "15696", + "xcode": "126.8277279655", + "stop_type": "일반차로", + "node_id": "114000373", + "nxtStn": "강서면허시험장" + }, + { + "stop_nm": "국립과학수사연구소", + "ycode": "37.523023", + "stop_no": "15700", + "xcode": "126.836618", + "stop_type": "일반차로", + "node_id": "114000377", + "nxtStn": "서서울호수공원" + }, + { + "stop_nm": "서부트럭터미널", + "ycode": "37.5078265129", + "stop_no": "15702", + "xcode": "126.8437883314", + "stop_type": "일반차로", + "node_id": "114000379", + "nxtStn": "강신중학교" + }, + { + "stop_nm": "대일고등학교", + "ycode": "37.5394087376", + "stop_no": "15703", + "xcode": "126.8638775519", + "stop_type": "가로변시간", + "node_id": "114000380", + "nxtStn": "강서구의회" + }, + { + "stop_nm": "양천공영차고지", + "ycode": "37.5084115031", + "stop_no": "15718", + "xcode": "126.8374184549", + "stop_type": "일반차로", + "node_id": "114000395", + "nxtStn": "신정현대아파트" + }, + { + "stop_nm": "오목교역", + "ycode": "37.52344", + "stop_no": "15801", + "xcode": "126.875152", + "stop_type": "일반차로", + "node_id": "114000409", + "nxtStn": "신정교입구" + }, + { + "stop_nm": "오목교역", + "ycode": "37.523328", + "stop_no": "15806", + "xcode": "126.875375", + "stop_type": "일반차로", + "node_id": "114000408", + "nxtStn": "목동운동장남문.아이스링크" + }, + { + "stop_nm": "신도림4차e편한세상", + "ycode": "37.5121981404", + "stop_no": "15808", + "xcode": "126.887744365", + "stop_type": "일반차로", + "node_id": "116000577", + "nxtStn": "신교정입구" + }, + { + "stop_nm": "목동현대백화점", + "ycode": "37.5281690673", + "stop_no": "15909", + "xcode": "126.8741804998", + "stop_type": "일반차로", + "node_id": "114000411", + "nxtStn": "오목교역" + }, + { + "stop_nm": "강서양천교육지원청", + "ycode": "37.5410845627", + "stop_no": "15992", + "xcode": "126.8306668454", + "stop_type": "마을버스", + "node_id": "114900099", + "nxtStn": "거산아파트" + }, + { + "stop_nm": "거산아파트", + "ycode": "37.540714", + "stop_no": "15995", + "xcode": "126.831693", + "stop_type": "마을버스", + "node_id": "114900098", + "nxtStn": "푸르지오APT" + }, + { + "stop_nm": "우리은행앞", + "ycode": "37.5359337917", + "stop_no": "15996", + "xcode": "126.8277442245", + "stop_type": "일반차로", + "node_id": "114000401", + "nxtStn": "고강공영차고지" + }, + { + "stop_nm": "염창역.서울도시가스", + "ycode": "37.547145", + "stop_no": "16001", + "xcode": "126.875895", + "stop_type": "중앙차로", + "node_id": "115000001", + "nxtStn": "등촌역.강서보건소" + }, + { + "stop_nm": "염창역.서울도시가스", + "ycode": "37.5469638223", + "stop_no": "16002", + "xcode": "126.875005296", + "stop_type": "중앙차로", + "node_id": "115000002", + "nxtStn": "선유도역.롯데제과" + }, + { + "stop_nm": "등촌역.강서보건소", + "ycode": "37.549115", + "stop_no": "16003", + "xcode": "126.86872", + "stop_type": "중앙차로", + "node_id": "115000003", + "nxtStn": "등촌중학교.백석초등학교" + }, + { + "stop_nm": "등촌역.강서보건소", + "ycode": "37.5494106214", + "stop_no": "16004", + "xcode": "126.8675998318", + "stop_type": "중앙차로", + "node_id": "115000004", + "nxtStn": "염창역.서울도시가스" + }, + { + "stop_nm": "등촌중학교.백석초등학교", + "ycode": "37.5526737152", + "stop_no": "16005", + "xcode": "126.8614641474", + "stop_type": "중앙차로", + "node_id": "115000005", + "nxtStn": "강서구청사거리.서울디지털대학교" + }, + { + "stop_nm": "등촌중학교.백석초등학교", + "ycode": "37.552903", + "stop_no": "16006", + "xcode": "126.86068", + "stop_type": "중앙차로", + "node_id": "115000006", + "nxtStn": "등촌역.강서보건소" + }, + { + "stop_nm": "강서구청사거리.서울디지털대학교", + "ycode": "37.554887", + "stop_no": "16007", + "xcode": "126.855528", + "stop_type": "중앙차로", + "node_id": "115000588", + "nxtStn": "KBS스포츠월드" + }, + { + "stop_nm": "강서구청사거리.서울디지털대학교", + "ycode": "37.5552355847", + "stop_no": "16008", + "xcode": "126.8540843129", + "stop_type": "중앙차로", + "node_id": "115000589", + "nxtStn": "등촌중학교.한국임업진흥원" + }, + { + "stop_nm": "KBS스포츠월드", + "ycode": "37.556782", + "stop_no": "16009", + "xcode": "126.850512", + "stop_type": "중앙차로", + "node_id": "115000590", + "nxtStn": "한국가스기술공사" + }, + { + "stop_nm": "KBS스포츠월드", + "ycode": "37.5570387011", + "stop_no": "16010", + "xcode": "126.8489377041", + "stop_type": "중앙차로", + "node_id": "115000591", + "nxtStn": "강서구청사거리.서울디지털대학교" + }, + { + "stop_nm": "한국가스기술공사", + "ycode": "37.558022", + "stop_no": "16011", + "xcode": "126.845633", + "stop_type": "중앙차로", + "node_id": "115000592", + "nxtStn": "발산역" + }, + { + "stop_nm": "한국가스기술공사", + "ycode": "37.557972", + "stop_no": "16012", + "xcode": "126.843735", + "stop_type": "중앙차로", + "node_id": "115000593", + "nxtStn": "KBS스포츠월드" + }, + { + "stop_nm": "발산역", + "ycode": "37.558502", + "stop_no": "16013", + "xcode": "126.83922", + "stop_type": "중앙차로", + "node_id": "115000594", + "nxtStn": "마곡동로사거리" + }, + { + "stop_nm": "송정역", + "ycode": "37.561437958", + "stop_no": "16014", + "xcode": "126.8097996593", + "stop_type": "중앙차로", + "node_id": "115000634", + "nxtStn": "마곡역" + }, + { + "stop_nm": "송정역", + "ycode": "37.561353", + "stop_no": "16015", + "xcode": "126.810938", + "stop_type": "중앙차로", + "node_id": "115000633", + "nxtStn": "김포공항국제선" + }, + { + "stop_nm": "공항중학교.마곡엠밸리9,10단지", + "ycode": "37.5608", + "stop_no": "16016", + "xcode": "126.815552", + "stop_type": "중앙차로", + "node_id": "115000635", + "nxtStn": "강서세무서" + }, + { + "stop_nm": "발산역", + "ycode": "37.5585733533", + "stop_no": "16017", + "xcode": "126.8376109437", + "stop_type": "중앙차로", + "node_id": "115000893", + "nxtStn": "한국가스기술공사" + }, + { + "stop_nm": "마곡역", + "ycode": "37.559695", + "stop_no": "16018", + "xcode": "126.827513", + "stop_type": "중앙차로", + "node_id": "115000895", + "nxtStn": "송정역" + }, + { + "stop_nm": "마곡역", + "ycode": "37.559729", + "stop_no": "16019", + "xcode": "126.826223", + "stop_type": "중앙차로", + "node_id": "115000896", + "nxtStn": "마곡동로사거리" + }, + { + "stop_nm": "공항중학교.마곡엠밸리9,10단지", + "ycode": "37.560738", + "stop_no": "16020", + "xcode": "126.817152", + "stop_type": "중앙차로", + "node_id": "115000894", + "nxtStn": "송정역" + }, + { + "stop_nm": "마곡동로사거리", + "ycode": "37.559073", + "stop_no": "16021", + "xcode": "126.83399", + "stop_type": "중앙차로", + "node_id": "115000923", + "nxtStn": "마곡역" + }, + { + "stop_nm": "마곡동로사거리", + "ycode": "37.559102", + "stop_no": "16022", + "xcode": "126.832479", + "stop_type": "중앙차로", + "node_id": "115000922", + "nxtStn": "발산역" + }, + { + "stop_nm": "강서세무서", + "ycode": "37.560136", + "stop_no": "16023", + "xcode": "126.822202", + "stop_type": "중앙차로", + "node_id": "115000947", + "nxtStn": "마곡역" + }, + { + "stop_nm": "강서세무서", + "ycode": "37.560159", + "stop_no": "16024", + "xcode": "126.82286", + "stop_type": "중앙차로", + "node_id": "115000946", + "nxtStn": "공항중학교.마곡엠밸리9,10단지" + }, + { + "stop_nm": "화원중학교", + "ycode": "37.537835", + "stop_no": "16100", + "xcode": "126.841037", + "stop_type": "일반차로", + "node_id": "115000925", + "nxtStn": "화곡역4번출구" + }, + { + "stop_nm": "서울식물원.식물문화센터", + "ycode": "37.5683883474", + "stop_no": "16102", + "xcode": "126.8349619166", + "stop_type": "일반차로", + "node_id": "115000940", + "nxtStn": "서울식물원.숲문화학교" + }, + { + "stop_nm": "백석초등학교.한국임업진흥원", + "ycode": "37.5527036123", + "stop_no": "16103", + "xcode": "126.8616542673", + "stop_type": "일반차로", + "node_id": "115000007", + "nxtStn": "강서대학교.강서LG베스트샵" + }, + { + "stop_nm": "등촌중학교.한국임업진흥원", + "ycode": "37.5529521864", + "stop_no": "16104", + "xcode": "126.8601040507", + "stop_type": "일반차로", + "node_id": "115000008", + "nxtStn": "강서구의회" + }, + { + "stop_nm": "강서대학교.강서LG베스트샵", + "ycode": "37.55484", + "stop_no": "16105", + "xcode": "126.856033", + "stop_type": "일반차로", + "node_id": "115000009", + "nxtStn": "경복비즈니스고등학교" + }, + { + "stop_nm": "하이웨이주유소.강서대학교", + "ycode": "37.554537", + "stop_no": "16106", + "xcode": "126.855795", + "stop_type": "일반차로", + "node_id": "115000010", + "nxtStn": "등촌중학교.한국임업진흥원" + }, + { + "stop_nm": "서울식물원.숲문화학교", + "ycode": "37.566225", + "stop_no": "16107", + "xcode": "126.83415", + "stop_type": "일반차로", + "node_id": "115000941", + "nxtStn": "LG사이언스파크" + }, + { + "stop_nm": "LG사이언스파크", + "ycode": "37.561979", + "stop_no": "16108", + "xcode": "126.833526", + "stop_type": "일반차로", + "node_id": "115000942", + "nxtStn": "발산역" + }, + { + "stop_nm": "등촌주공5단지아파트", + "ycode": "37.558187", + "stop_no": "16109", + "xcode": "126.843795", + "stop_type": "가로변시간", + "node_id": "115000013", + "nxtStn": "발산역4번출구" + }, + { + "stop_nm": "발산역4번출구", + "ycode": "37.5586270014", + "stop_no": "16111", + "xcode": "126.8392815106", + "stop_type": "가로변시간", + "node_id": "115000015", + "nxtStn": "발산역9번출구" + }, + { + "stop_nm": "발산역5번출구", + "ycode": "37.5582109717", + "stop_no": "16112", + "xcode": "126.8394838811", + "stop_type": "가로변시간", + "node_id": "115000016", + "nxtStn": "한국가스기술공사" + }, + { + "stop_nm": "공항중학교", + "ycode": "37.56112", + "stop_no": "16115", + "xcode": "126.814653", + "stop_type": "가로변시간", + "node_id": "115000019", + "nxtStn": "송정역" + }, + { + "stop_nm": "송정역", + "ycode": "37.561178", + "stop_no": "16116", + "xcode": "126.81072", + "stop_type": "가로변시간", + "node_id": "115000020", + "nxtStn": "공항중학교.마곡엠밸리9단지" + }, + { + "stop_nm": "송정역", + "ycode": "37.5616789813", + "stop_no": "16117", + "xcode": "126.8090169265", + "stop_type": "가로변전일", + "node_id": "115000021", + "nxtStn": "공항시장" + }, + { + "stop_nm": "공항시장", + "ycode": "37.562263", + "stop_no": "16118", + "xcode": "126.808837", + "stop_type": "일반차로", + "node_id": "115000022", + "nxtStn": "공항시장역3번출구" + }, + { + "stop_nm": "공항시장", + "ycode": "37.562423", + "stop_no": "16119", + "xcode": "126.808751", + "stop_type": "일반차로", + "node_id": "115000023", + "nxtStn": "롯데몰.김포공항역" + }, + { + "stop_nm": "공항시장역3번출구", + "ycode": "37.5638248877", + "stop_no": "16120", + "xcode": "126.8109493938", + "stop_type": "일반차로", + "node_id": "115000024", + "nxtStn": "방화2동청성아파트" + }, + { + "stop_nm": "공항시장역.공항성산교회", + "ycode": "37.5647464984", + "stop_no": "16121", + "xcode": "126.8113840134", + "stop_type": "일반차로", + "node_id": "115000025", + "nxtStn": "공항시장" + }, + { + "stop_nm": "방화주유소", + "ycode": "37.566218", + "stop_no": "16122", + "xcode": "126.812578", + "stop_type": "일반차로", + "node_id": "115000026", + "nxtStn": "방신전통시장" + }, + { + "stop_nm": "방화2동청성아파트앞", + "ycode": "37.5669761672", + "stop_no": "16123", + "xcode": "126.8116149845", + "stop_type": "일반차로", + "node_id": "115000027", + "nxtStn": "공항시장역.공항성산교회" + }, + { + "stop_nm": "방신전통시장", + "ycode": "37.569958", + "stop_no": "16124", + "xcode": "126.812862", + "stop_type": "일반차로", + "node_id": "115000028", + "nxtStn": "국민은행방화동지점" + }, + { + "stop_nm": "방화2동우촌연립", + "ycode": "37.5700234331", + "stop_no": "16125", + "xcode": "126.8114748571", + "stop_type": "일반차로", + "node_id": "115000029", + "nxtStn": "방화2동청성아파트앞" + }, + { + "stop_nm": "국민은행방화동지점", + "ycode": "37.5727187792", + "stop_no": "16126", + "xcode": "126.8115903308", + "stop_type": "일반차로", + "node_id": "115000030", + "nxtStn": "방화사거리" + }, + { + "stop_nm": "국민은행방화동지점", + "ycode": "37.5726571076", + "stop_no": "16127", + "xcode": "126.8113414217", + "stop_type": "일반차로", + "node_id": "115000031", + "nxtStn": "방화2동우촌연립" + }, + { + "stop_nm": "한서고등학교.보람아파트", + "ycode": "37.57483", + "stop_no": "16128", + "xcode": "126.811733", + "stop_type": "일반차로", + "node_id": "115000032", + "nxtStn": "방화역2번출구" + }, + { + "stop_nm": "한서고등학교.보람아파트", + "ycode": "37.574816243", + "stop_no": "16129", + "xcode": "126.8114186211", + "stop_type": "일반차로", + "node_id": "115000033", + "nxtStn": "국민은행방화동지점" + }, + { + "stop_nm": "방화역2번출구", + "ycode": "37.576742", + "stop_no": "16130", + "xcode": "126.812627", + "stop_type": "일반차로", + "node_id": "115000034", + "nxtStn": "방화3동주민센터" + }, + { + "stop_nm": "방화역", + "ycode": "37.5769118737", + "stop_no": "16131", + "xcode": "126.8123587027", + "stop_type": "일반차로", + "node_id": "115000035", + "nxtStn": "한서고등학교.보람아파트" + }, + { + "stop_nm": "방화3동주민센터.국립국어원", + "ycode": "37.57913", + "stop_no": "16132", + "xcode": "126.813513", + "stop_type": "일반차로", + "node_id": "115000036", + "nxtStn": "종점" + }, + { + "stop_nm": "방화도시7단지.국립국어원", + "ycode": "37.579305", + "stop_no": "16133", + "xcode": "126.813355", + "stop_type": "일반차로", + "node_id": "115000037", + "nxtStn": "방화역3번출구" + }, + { + "stop_nm": "가양8단지아파트.가양역", + "ycode": "37.5618621425", + "stop_no": "16134", + "xcode": "126.8559123678", + "stop_type": "일반차로", + "node_id": "115000038", + "nxtStn": "가양초등학교" + }, + { + "stop_nm": "가양역.마포중고등학교", + "ycode": "37.5589275113", + "stop_no": "16135", + "xcode": "126.8542038866", + "stop_type": "일반차로", + "node_id": "115000039", + "nxtStn": "가양역6번출구.현대프린스텔" + }, + { + "stop_nm": "가양역.마포중고등학교", + "ycode": "37.5595591647", + "stop_no": "16136", + "xcode": "126.8541936005", + "stop_type": "일반차로", + "node_id": "115000040", + "nxtStn": "경복비즈니스고등학교" + }, + { + "stop_nm": "경복비즈니스고등학교", + "ycode": "37.5575280794", + "stop_no": "16137", + "xcode": "126.8534482519", + "stop_type": "일반차로", + "node_id": "115000041", + "nxtStn": "가양역.마포중고등학교" + }, + { + "stop_nm": "경복비즈니스고등학교", + "ycode": "37.557662838", + "stop_no": "16138", + "xcode": "126.8531220051", + "stop_type": "일반차로", + "node_id": "115000042", + "nxtStn": "한국건강관리협회" + }, + { + "stop_nm": "강서구청.한국건강관리협회", + "ycode": "37.552627948", + "stop_no": "16139", + "xcode": "126.8505841855", + "stop_type": "가로변시간", + "node_id": "115000043", + "nxtStn": "강서구청사거리.서울디지털대학교" + }, + { + "stop_nm": "강서구청.한국건강관리협회", + "ycode": "37.5526688733", + "stop_no": "16140", + "xcode": "126.8501698616", + "stop_type": "가로변전일", + "node_id": "115000044", + "nxtStn": "우장초등학교" + }, + { + "stop_nm": "우장초등학교", + "ycode": "37.5503532252", + "stop_no": "16141", + "xcode": "126.8481814428", + "stop_type": "가로변전일", + "node_id": "115000045", + "nxtStn": "한국폴리텍1.서울강서대학교" + }, + { + "stop_nm": "우장초등학교", + "ycode": "37.549366909", + "stop_no": "16142", + "xcode": "126.8477782735", + "stop_type": "가로변시간", + "node_id": "115000046", + "nxtStn": "강서구청.한국건강관리협회" + }, + { + "stop_nm": "한국폴리텍1.서울강서대학교", + "ycode": "37.5460872756", + "stop_no": "16143", + "xcode": "126.8452748106", + "stop_type": "가로변전일", + "node_id": "115000047", + "nxtStn": "우장초등학교" + }, + { + "stop_nm": "한국폴리텍1.서울강서대학교", + "ycode": "37.5458432676", + "stop_no": "16144", + "xcode": "126.8447320961", + "stop_type": "일반차로", + "node_id": "115000048", + "nxtStn": "화곡본동시장" + }, + { + "stop_nm": "화곡본동시장", + "ycode": "37.5431786479", + "stop_no": "16145", + "xcode": "126.8426281976", + "stop_type": "가로변시간", + "node_id": "115000049", + "nxtStn": "화곡역5번출구" + }, + { + "stop_nm": "화곡본동시장", + "ycode": "37.5433434761", + "stop_no": "16146", + "xcode": "126.8432514003", + "stop_type": "가로변시간", + "node_id": "115000050", + "nxtStn": "한국폴리텍1.서울강서대학교" + }, + { + "stop_nm": "화곡역", + "ycode": "37.541038", + "stop_no": "16147", + "xcode": "126.838753", + "stop_type": "가로변전일", + "node_id": "115000051", + "nxtStn": "화곡본동시장" + }, + { + "stop_nm": "화곡역7번출구", + "ycode": "37.540872", + "stop_no": "16148", + "xcode": "126.837005", + "stop_type": "가로변전일", + "node_id": "115000052", + "nxtStn": "화곡푸르지오" + }, + { + "stop_nm": "강서구청소년상담복지센터", + "ycode": "37.540192", + "stop_no": "16149", + "xcode": "126.83556", + "stop_type": "가로변시간", + "node_id": "115000053", + "nxtStn": "화곡역1번출구" + }, + { + "stop_nm": "화곡푸르지오", + "ycode": "37.5401506396", + "stop_no": "16150", + "xcode": "126.8344789776", + "stop_type": "가로변시간", + "node_id": "115000054", + "nxtStn": "거산아파트" + }, + { + "stop_nm": "외발산신광명마을", + "ycode": "37.5460645834", + "stop_no": "16151", + "xcode": "126.8215259396", + "stop_type": "일반차로", + "node_id": "115000055", + "nxtStn": "강서면허시험장.메이필드호텔" + }, + { + "stop_nm": "외발산신광명마을", + "ycode": "37.545958", + "stop_no": "16152", + "xcode": "126.821132", + "stop_type": "일반차로", + "node_id": "115000056", + "nxtStn": "신월중학교입구" + }, + { + "stop_nm": "강서면허시험장.메이필드호텔", + "ycode": "37.5496838966", + "stop_no": "16153", + "xcode": "126.8194959796", + "stop_type": "일반차로", + "node_id": "115000057", + "nxtStn": "공항동송정중학교" + }, + { + "stop_nm": "강서면허시험장.메이필드호텔", + "ycode": "37.547798", + "stop_no": "16154", + "xcode": "126.820227", + "stop_type": "일반차로", + "node_id": "115000058", + "nxtStn": "외발산신광명마을" + }, + { + "stop_nm": "강서농수산물도매시장", + "ycode": "37.55187", + "stop_no": "16155", + "xcode": "126.81998", + "stop_type": "일반차로", + "node_id": "115000059", + "nxtStn": "강서면허시험장.메이필드호텔" + }, + { + "stop_nm": "영인운수.차고지", + "ycode": "37.5453351183", + "stop_no": "16156", + "xcode": "126.8179353333", + "stop_type": "일반차로", + "node_id": "115000916", + "nxtStn": "대한항공.메이필드호텔" + }, + { + "stop_nm": "대한항공.메이필드호텔", + "ycode": "37.549722", + "stop_no": "16157", + "xcode": "126.816819", + "stop_type": "일반차로", + "node_id": "115000915", + "nxtStn": "강서면허시험장.강서농수산물시장" + }, + { + "stop_nm": "공항동송정중학교", + "ycode": "37.552778", + "stop_no": "16158", + "xcode": "126.815117", + "stop_type": "일반차로", + "node_id": "115000061", + "nxtStn": "강서면허시험장.강서농수산물시장" + }, + { + "stop_nm": "공항동송정중학교", + "ycode": "37.55313", + "stop_no": "16159", + "xcode": "126.815368", + "stop_type": "일반차로", + "node_id": "115000062", + "nxtStn": "국립항공박물관.공항동천주교회" + }, + { + "stop_nm": "국립항공박물관.공항동천주교회", + "ycode": "37.555638", + "stop_no": "16160", + "xcode": "126.811917", + "stop_type": "일반차로", + "node_id": "115000063", + "nxtStn": "공항동지하도입구" + }, + { + "stop_nm": "국립항공박물관.공항동천주교회", + "ycode": "37.555152", + "stop_no": "16161", + "xcode": "126.811943", + "stop_type": "일반차로", + "node_id": "115000064", + "nxtStn": "공항동송정중학교" + }, + { + "stop_nm": "공항동지하도입구", + "ycode": "37.559087", + "stop_no": "16162", + "xcode": "126.808185", + "stop_type": "일반차로", + "node_id": "115000065", + "nxtStn": "롯데몰.김포공항역" + }, + { + "stop_nm": "영인운수.차고지", + "ycode": "37.545213", + "stop_no": "16163", + "xcode": "126.818291", + "stop_type": "일반차로", + "node_id": "115000917", + "nxtStn": "종점" + }, + { + "stop_nm": "방화중학교", + "ycode": "37.564621397", + "stop_no": "16164", + "xcode": "126.8059168195", + "stop_type": "일반차로", + "node_id": "115000067", + "nxtStn": "국립항공박물관.공항동천주교회" + }, + { + "stop_nm": "서울방화초등학교", + "ycode": "37.5671989332", + "stop_no": "16165", + "xcode": "126.8056214646", + "stop_type": "일반차로", + "node_id": "115000068", + "nxtStn": "방화동도시개발11단지" + }, + { + "stop_nm": "방화동도시개발11단지", + "ycode": "37.570852", + "stop_no": "16166", + "xcode": "126.804202", + "stop_type": "일반차로", + "node_id": "115000069", + "nxtStn": "개화119안전센터" + }, + { + "stop_nm": "개화119안전센터", + "ycode": "37.575195", + "stop_no": "16167", + "xcode": "126.8026", + "stop_type": "일반차로", + "node_id": "115000070", + "nxtStn": "개화역광역환승센터" + }, + { + "stop_nm": "개화119안전센터", + "ycode": "37.575128", + "stop_no": "16168", + "xcode": "126.802225", + "stop_type": "일반차로", + "node_id": "115000071", + "nxtStn": "김포공항국제선" + }, + { + "stop_nm": "개화역1번출구.개화검문소", + "ycode": "37.578455", + "stop_no": "16169", + "xcode": "126.800345", + "stop_type": "일반차로", + "node_id": "115000072", + "nxtStn": "개화동상사마을종점" + }, + { + "stop_nm": "개화역1번출구.개화검문소", + "ycode": "37.5784942626", + "stop_no": "16170", + "xcode": "126.7997884498", + "stop_type": "일반차로", + "node_id": "115000073", + "nxtStn": "개화119안전센터" + }, + { + "stop_nm": "상사마을", + "ycode": "37.5824925499", + "stop_no": "16171", + "xcode": "126.7985641294", + "stop_type": "일반차로", + "node_id": "115000074", + "nxtStn": "장기동" + }, + { + "stop_nm": "상사마을", + "ycode": "37.58182", + "stop_no": "16172", + "xcode": "126.798335", + "stop_type": "일반차로", + "node_id": "115000075", + "nxtStn": "개화역1번출구.개화검문소" + }, + { + "stop_nm": "영일고등학교.강서도서관", + "ycode": "37.5489885793", + "stop_no": "16173", + "xcode": "126.8633553696", + "stop_type": "가로변시간", + "node_id": "115000076", + "nxtStn": "아이파크아파트.백석중학교.실로암안과" + }, + { + "stop_nm": "아이파크아파트.백석중학교.실로암안과", + "ycode": "37.5451448999", + "stop_no": "16174", + "xcode": "126.8621412863", + "stop_type": "가로변시간", + "node_id": "115000077", + "nxtStn": "등촌2동주민센터.등촌동대림아파트" + }, + { + "stop_nm": "등촌2동주민센터.등촌동대림아파트", + "ycode": "37.5419424703", + "stop_no": "16175", + "xcode": "126.8629698908", + "stop_type": "가로변전일", + "node_id": "115000078", + "nxtStn": "대일고교.임광아파트.배광교회" + }, + { + "stop_nm": "대일고교.임광아파트.배광교회", + "ycode": "37.539791346", + "stop_no": "16176", + "xcode": "126.8635679255", + "stop_type": "가로변시간", + "node_id": "115000079", + "nxtStn": "용문사.시립화곡청소년센터" + }, + { + "stop_nm": "용문사.시립화곡청소년센터", + "ycode": "37.5370972069", + "stop_no": "16177", + "xcode": "126.8633458107", + "stop_type": "가로변전일", + "node_id": "115000080", + "nxtStn": "목동사거리" + }, + { + "stop_nm": "목동사거리", + "ycode": "37.533198", + "stop_no": "16178", + "xcode": "126.863521", + "stop_type": "가로변시간", + "node_id": "115000081", + "nxtStn": "목동역.홍익병원" + }, + { + "stop_nm": "목동사거리", + "ycode": "37.5316337661", + "stop_no": "16179", + "xcode": "126.863608811", + "stop_type": "가로변시간", + "node_id": "115000082", + "nxtStn": "목동역.홍익병원" + }, + { + "stop_nm": "화곡동남부시장", + "ycode": "37.5318363326", + "stop_no": "16180", + "xcode": "126.858853902", + "stop_type": "일반차로", + "node_id": "115000083", + "nxtStn": "화곡2동주민센터" + }, + { + "stop_nm": "성석교회", + "ycode": "37.5315122234", + "stop_no": "16181", + "xcode": "126.8575906388", + "stop_type": "일반차로", + "node_id": "115000084", + "nxtStn": "금호어울림.대원칸타빌아파트" + }, + { + "stop_nm": "서울신정초등학교", + "ycode": "37.531128", + "stop_no": "16182", + "xcode": "126.852907", + "stop_type": "일반차로", + "node_id": "115000085", + "nxtStn": "화곡8동주민센터" + }, + { + "stop_nm": "서울신정초등학교", + "ycode": "37.530934", + "stop_no": "16183", + "xcode": "126.85253", + "stop_type": "일반차로", + "node_id": "115000086", + "nxtStn": "LG주유소" + }, + { + "stop_nm": "화곡8동주민센터", + "ycode": "37.530822", + "stop_no": "16184", + "xcode": "126.849587", + "stop_type": "일반차로", + "node_id": "115000087", + "nxtStn": "화곡동유림아파트" + }, + { + "stop_nm": "화곡8동주민센터.까치산시장", + "ycode": "37.5305885107", + "stop_no": "16185", + "xcode": "126.8488200647", + "stop_type": "일반차로", + "node_id": "115000088", + "nxtStn": "서울신정초등학교" + }, + { + "stop_nm": "KT강서지사", + "ycode": "37.5299722869", + "stop_no": "16186", + "xcode": "126.8475167279", + "stop_type": "일반차로", + "node_id": "115000089", + "nxtStn": "신정역(은행정).신정4동주민센터" + }, + { + "stop_nm": "KT강서지사", + "ycode": "37.5299538337", + "stop_no": "16187", + "xcode": "126.8478810975", + "stop_type": "일반차로", + "node_id": "115000090", + "nxtStn": "까치산역1번출구" + }, + { + "stop_nm": "화곡동유림아파트", + "ycode": "37.530479", + "stop_no": "16188", + "xcode": "126.844302", + "stop_type": "일반차로", + "node_id": "115000091", + "nxtStn": "강서한방병원" + }, + { + "stop_nm": "화곡동유림아파트", + "ycode": "37.530353", + "stop_no": "16189", + "xcode": "126.844427", + "stop_type": "일반차로", + "node_id": "115000092", + "nxtStn": "까치산역2번출구" + }, + { + "stop_nm": "황외과앞", + "ycode": "37.5309632183", + "stop_no": "16190", + "xcode": "126.8378394153", + "stop_type": "일반차로", + "node_id": "115000093", + "nxtStn": "화곡동대림아파트.화곡중앙시장" + }, + { + "stop_nm": "까치산역2번출구", + "ycode": "37.5317706703", + "stop_no": "16191", + "xcode": "126.8468455507", + "stop_type": "일반차로", + "node_id": "115000094", + "nxtStn": "화곡동백구사" + }, + { + "stop_nm": "까치산역4번출구", + "ycode": "37.5322386315", + "stop_no": "16192", + "xcode": "126.8461927843", + "stop_type": "일반차로", + "node_id": "115000095", + "nxtStn": "화곡동유림아파트" + }, + { + "stop_nm": "화곡동백구사", + "ycode": "37.5326", + "stop_no": "16193", + "xcode": "126.842518", + "stop_type": "일반차로", + "node_id": "115000096", + "nxtStn": "화곡동대림아파트.화곡중앙시장" + }, + { + "stop_nm": "화곡동백구사", + "ycode": "37.532383", + "stop_no": "16194", + "xcode": "126.840795", + "stop_type": "일반차로", + "node_id": "115000097", + "nxtStn": "다운어린이공원.치유하는교회" + }, + { + "stop_nm": "화곡대림아파트", + "ycode": "37.533003", + "stop_no": "16195", + "xcode": "126.83893", + "stop_type": "일반차로", + "node_id": "115000098", + "nxtStn": "하나은행신월동지점" + }, + { + "stop_nm": "화곡동대림아파트.화곡중앙시장", + "ycode": "37.53418", + "stop_no": "16196", + "xcode": "126.838322", + "stop_type": "일반차로", + "node_id": "115000099", + "nxtStn": "가로공원.나누리병원" + }, + { + "stop_nm": "가로공원.나누리병원", + "ycode": "37.5367734994", + "stop_no": "16197", + "xcode": "126.8371920237", + "stop_type": "일반차로", + "node_id": "115000100", + "nxtStn": "신월초등학교" + }, + { + "stop_nm": "가로공원.나누리병원", + "ycode": "37.5374398713", + "stop_no": "16198", + "xcode": "126.8368737328", + "stop_type": "일반차로", + "node_id": "115000101", + "nxtStn": "화곡중앙골목시장" + }, + { + "stop_nm": "가로공원.나누리병원", + "ycode": "37.536907", + "stop_no": "16199", + "xcode": "126.836673", + "stop_type": "일반차로", + "node_id": "115000102", + "nxtStn": "화곡중앙골목시장" + }, + { + "stop_nm": "가로공원.나누리병원", + "ycode": "37.5371786505", + "stop_no": "16200", + "xcode": "126.8362926723", + "stop_type": "일반차로", + "node_id": "115000103", + "nxtStn": "가로공원공영주차장" + }, + { + "stop_nm": "다운어린이공원.치유하는교회", + "ycode": "37.5325644788", + "stop_no": "16201", + "xcode": "126.8437952234", + "stop_type": "일반차로", + "node_id": "115000945", + "nxtStn": "까치산역4번출구" + }, + { + "stop_nm": "화원중학교", + "ycode": "37.537977", + "stop_no": "16202", + "xcode": "126.840433", + "stop_type": "일반차로", + "node_id": "115000105", + "nxtStn": "가로공원.나누리병원" + }, + { + "stop_nm": "신월초등학교", + "ycode": "37.5386348969", + "stop_no": "16203", + "xcode": "126.8389691102", + "stop_type": "일반차로", + "node_id": "115000106", + "nxtStn": "화곡역4번출구" + }, + { + "stop_nm": "신월초등학교", + "ycode": "37.5389654088", + "stop_no": "16204", + "xcode": "126.8394911995", + "stop_type": "일반차로", + "node_id": "115000107", + "nxtStn": "가로공원.나누리병원" + }, + { + "stop_nm": "화곡역5번출구", + "ycode": "37.5406479194", + "stop_no": "16205", + "xcode": "126.8409451288", + "stop_type": "가로변시간", + "node_id": "115000108", + "nxtStn": "신월초등학교" + }, + { + "stop_nm": "화곡역4번출구", + "ycode": "37.540952728", + "stop_no": "16206", + "xcode": "126.8411221475", + "stop_type": "가로변시간", + "node_id": "115000109", + "nxtStn": "본동시장.새마을금고본점" + }, + { + "stop_nm": "화곡역1번출구", + "ycode": "37.542798", + "stop_no": "16207", + "xcode": "126.839517", + "stop_type": "가로변전일", + "node_id": "115000110", + "nxtStn": "대원시장" + }, + { + "stop_nm": "화곡역8번출구", + "ycode": "37.5429294084", + "stop_no": "16208", + "xcode": "126.8388885788", + "stop_type": "가로변전일", + "node_id": "115000111", + "nxtStn": "화곡역7번출구" + }, + { + "stop_nm": "대원시장", + "ycode": "37.5440629818", + "stop_no": "16209", + "xcode": "126.8382263704", + "stop_type": "가로변시간", + "node_id": "115000112", + "nxtStn": "화곡중고등학교" + }, + { + "stop_nm": "대원시장", + "ycode": "37.5445248902", + "stop_no": "16210", + "xcode": "126.8373132333", + "stop_type": "가로변시간", + "node_id": "115000113", + "nxtStn": "화곡역8번출구" + }, + { + "stop_nm": "화곡중고등학교", + "ycode": "37.547224", + "stop_no": "16211", + "xcode": "126.836224", + "stop_type": "가로변시간", + "node_id": "115000114", + "nxtStn": "대원시장" + }, + { + "stop_nm": "화곡중고등학교", + "ycode": "37.547421", + "stop_no": "16212", + "xcode": "126.836467", + "stop_type": "일반차로", + "node_id": "115000646", + "nxtStn": "우장산역1번출구" + }, + { + "stop_nm": "우장산역", + "ycode": "37.549241001", + "stop_no": "16213", + "xcode": "126.8365028309", + "stop_type": "가로변전일", + "node_id": "115000116", + "nxtStn": "명덕고등학교.서울스타병원" + }, + { + "stop_nm": "우장산역", + "ycode": "37.5498027659", + "stop_no": "16214", + "xcode": "126.8361292528", + "stop_type": "가로변시간", + "node_id": "115000117", + "nxtStn": "송화시장" + }, + { + "stop_nm": "명덕고등학교.서울스타병원", + "ycode": "37.553092", + "stop_no": "16215", + "xcode": "126.836523", + "stop_type": "가로변전일", + "node_id": "115000118", + "nxtStn": "우장산월드메르디앙아파트" + }, + { + "stop_nm": "명덕고등학교.서울스타병원", + "ycode": "37.5532912365", + "stop_no": "16216", + "xcode": "126.8363717464", + "stop_type": "가로변전일", + "node_id": "115000119", + "nxtStn": "우장산역4번출구" + }, + { + "stop_nm": "발산역.우장산힐스테이트", + "ycode": "37.5560385988", + "stop_no": "16217", + "xcode": "126.8376254994", + "stop_type": "가로변시간", + "node_id": "115000120", + "nxtStn": "발산역3번출구" + }, + { + "stop_nm": "발산역.우장산힐스테이트", + "ycode": "37.5567655856", + "stop_no": "16218", + "xcode": "126.8374835698", + "stop_type": "일반차로", + "node_id": "115000121", + "nxtStn": "명덕고등학교.서울스타병원" + }, + { + "stop_nm": "발산역2번출구", + "ycode": "37.56009", + "stop_no": "16219", + "xcode": "126.838558", + "stop_type": "일반차로", + "node_id": "115000122", + "nxtStn": "발산역7번출구" + }, + { + "stop_nm": "발산역3번출구", + "ycode": "37.5601701491", + "stop_no": "16220", + "xcode": "126.8389703128", + "stop_type": "일반차로", + "node_id": "115000123", + "nxtStn": "서울호서전문학교.등촌주공3단지아파트" + }, + { + "stop_nm": "서울호서전문학교.등촌주공3단지아파트", + "ycode": "37.5627492675", + "stop_no": "16221", + "xcode": "126.8394809325", + "stop_type": "일반차로", + "node_id": "115000124", + "nxtStn": "발산역2번출구" + }, + { + "stop_nm": "서울호서전문학교.등촌주공3단지아파트", + "ycode": "37.562662", + "stop_no": "16222", + "xcode": "126.839755", + "stop_type": "일반차로", + "node_id": "115000125", + "nxtStn": "서울강서우체국" + }, + { + "stop_nm": "서울강서우체국", + "ycode": "37.564569", + "stop_no": "16223", + "xcode": "126.84037", + "stop_type": "일반차로", + "node_id": "115000126", + "nxtStn": "기업은행" + }, + { + "stop_nm": "서울강서우체국", + "ycode": "37.5645673439", + "stop_no": "16224", + "xcode": "126.8400518125", + "stop_type": "일반차로", + "node_id": "115000127", + "nxtStn": "서울호서전문학교.등촌주공3단지아파트" + }, + { + "stop_nm": "양천향교역.휴먼빌아파트", + "ycode": "37.569217", + "stop_no": "16225", + "xcode": "126.841602", + "stop_type": "일반차로", + "node_id": "115000128", + "nxtStn": "가양한강타운아파트" + }, + { + "stop_nm": "양천향교입구", + "ycode": "37.57003", + "stop_no": "16226", + "xcode": "126.841425", + "stop_type": "일반차로", + "node_id": "115000129", + "nxtStn": "양천향교역7번출구" + }, + { + "stop_nm": "가양한강타운아파트", + "ycode": "37.570403", + "stop_no": "16227", + "xcode": "126.843453", + "stop_type": "일반차로", + "node_id": "115000130", + "nxtStn": "가양2단지성지아파트.동양고등학교" + }, + { + "stop_nm": "가양한강타운아파트", + "ycode": "37.5705058666", + "stop_no": "16228", + "xcode": "126.8438103417", + "stop_type": "일반차로", + "node_id": "115000131", + "nxtStn": "양천향교입구" + }, + { + "stop_nm": "가양2단지성지아파트.동양고등학교", + "ycode": "37.569627", + "stop_no": "16229", + "xcode": "126.846542", + "stop_type": "일반차로", + "node_id": "115000132", + "nxtStn": "한보구암마을아파트" + }, + { + "stop_nm": "가양2단지성지아파트.동양고등학교", + "ycode": "37.569643", + "stop_no": "16230", + "xcode": "126.847348", + "stop_type": "일반차로", + "node_id": "115000133", + "nxtStn": "가양한강타운아파트" + }, + { + "stop_nm": "한보구암마을아파트", + "ycode": "37.568767", + "stop_no": "16231", + "xcode": "126.849027", + "stop_type": "일반차로", + "node_id": "115000134", + "nxtStn": "강서한강자이아파트" + }, + { + "stop_nm": "가양동천주교영등포공업고등학교", + "ycode": "37.5684832895", + "stop_no": "16232", + "xcode": "126.8496502756", + "stop_type": "일반차로", + "node_id": "115000135", + "nxtStn": "가양2단지성지아파트.동양고등학교" + }, + { + "stop_nm": "서울서진학교.우체국앞.허준박물관", + "ycode": "37.566848", + "stop_no": "16233", + "xcode": "126.85133", + "stop_type": "일반차로", + "node_id": "115000136", + "nxtStn": "가양4단지아파트" + }, + { + "stop_nm": "탑산초등학교.허준박물관", + "ycode": "37.5666981923", + "stop_no": "16234", + "xcode": "126.8517605558", + "stop_type": "일반차로", + "node_id": "115000137", + "nxtStn": "가양동천주교영등포공업고등학교" + }, + { + "stop_nm": "가양4단지아파트", + "ycode": "37.56526", + "stop_no": "16235", + "xcode": "126.85329", + "stop_type": "일반차로", + "node_id": "115000138", + "nxtStn": "가양5단지아파트" + }, + { + "stop_nm": "대림경동아파트", + "ycode": "37.5655880638", + "stop_no": "16236", + "xcode": "126.8532162499", + "stop_type": "일반차로", + "node_id": "115000139", + "nxtStn": "탑산초등학교.허준박물관" + }, + { + "stop_nm": "가양5단지아파트", + "ycode": "37.564242", + "stop_no": "16237", + "xcode": "126.85513", + "stop_type": "일반차로", + "node_id": "115000140", + "nxtStn": "가양초등학교" + }, + { + "stop_nm": "가양2동강변아파트", + "ycode": "37.5641799397", + "stop_no": "16238", + "xcode": "126.8556380616", + "stop_type": "일반차로", + "node_id": "115000141", + "nxtStn": "대림경동아파트" + }, + { + "stop_nm": "가양6단지아파트", + "ycode": "37.5629463904", + "stop_no": "16239", + "xcode": "126.8579043717", + "stop_type": "일반차로", + "node_id": "115000142", + "nxtStn": "가양2동강변아파트" + }, + { + "stop_nm": "가양초등학교", + "ycode": "37.561717", + "stop_no": "16240", + "xcode": "126.85982", + "stop_type": "일반차로", + "node_id": "115000143", + "nxtStn": "강서구청별관" + }, + { + "stop_nm": "강서구청별관", + "ycode": "37.561198", + "stop_no": "16241", + "xcode": "126.85976", + "stop_type": "일반차로", + "node_id": "115000144", + "nxtStn": "증미역3번출구.강서소방서" + }, + { + "stop_nm": "가양3동주민센터", + "ycode": "37.5614125205", + "stop_no": "16242", + "xcode": "126.8607529864", + "stop_type": "일반차로", + "node_id": "115000145", + "nxtStn": "가양6단지아파트" + }, + { + "stop_nm": "가양9단지아파트", + "ycode": "37.559812", + "stop_no": "16243", + "xcode": "126.863307", + "stop_type": "일반차로", + "node_id": "115000146", + "nxtStn": "블루나인비지니스센터" + }, + { + "stop_nm": "가양9단지아파트.세현고등학교", + "ycode": "37.559813", + "stop_no": "16244", + "xcode": "126.86361", + "stop_type": "일반차로", + "node_id": "115000147", + "nxtStn": "가양7단지상가앞" + }, + { + "stop_nm": "염창동아3차아파트.나이아가라호텔", + "ycode": "37.5491222747", + "stop_no": "16245", + "xcode": "126.877626568", + "stop_type": "일반차로", + "node_id": "115000148", + "nxtStn": "염창동새마을금고" + }, + { + "stop_nm": "염창동아3차아파트", + "ycode": "37.5488168686", + "stop_no": "16246", + "xcode": "126.8776893136", + "stop_type": "일반차로", + "node_id": "115000149", + "nxtStn": "안양천입구" + }, + { + "stop_nm": "염창동새마을금고", + "ycode": "37.5502350947", + "stop_no": "16247", + "xcode": "126.8733240118", + "stop_type": "일반차로", + "node_id": "115000150", + "nxtStn": "염창동한마음.관음삼성아파트" + }, + { + "stop_nm": "염창동새마을금고", + "ycode": "37.5501570313", + "stop_no": "16248", + "xcode": "126.8727944748", + "stop_type": "일반차로", + "node_id": "115000151", + "nxtStn": "염창동아3차아파트" + }, + { + "stop_nm": "염창동한마음.관음삼성아파트", + "ycode": "37.5530470916", + "stop_no": "16249", + "xcode": "126.8697189477", + "stop_type": "일반차로", + "node_id": "115000152", + "nxtStn": "금호.한솔아파트" + }, + { + "stop_nm": "염창동관음삼성아파트", + "ycode": "37.5529295507", + "stop_no": "16250", + "xcode": "126.8693581039", + "stop_type": "일반차로", + "node_id": "115000153", + "nxtStn": "염창동새마을금고" + }, + { + "stop_nm": "태영.삼성한사랑아파트", + "ycode": "37.5550652684", + "stop_no": "16251", + "xcode": "126.8654574304", + "stop_type": "일반차로", + "node_id": "115000154", + "nxtStn": "한마음아파트" + }, + { + "stop_nm": "금호.한솔아파트", + "ycode": "37.5554473635", + "stop_no": "16252", + "xcode": "126.8654850398", + "stop_type": "일반차로", + "node_id": "115000155", + "nxtStn": "증미역2번출구" + }, + { + "stop_nm": "블루나인비지니스센터", + "ycode": "37.5562428349", + "stop_no": "16253", + "xcode": "126.8637439355", + "stop_type": "일반차로", + "node_id": "115000156", + "nxtStn": "태영.삼성한사랑아파트" + }, + { + "stop_nm": "블루나인비지니스센터", + "ycode": "37.5565070571", + "stop_no": "16254", + "xcode": "126.8639188939", + "stop_type": "일반차로", + "node_id": "115000157", + "nxtStn": "증미역1번출구.강서소방서" + }, + { + "stop_nm": "증미역.강서소방서", + "ycode": "37.557866", + "stop_no": "16255", + "xcode": "126.861431", + "stop_type": "일반차로", + "node_id": "115000158", + "nxtStn": "가양역5번출구.현대아파트" + }, + { + "stop_nm": "증미역.강서소방서", + "ycode": "37.557230783", + "stop_no": "16256", + "xcode": "126.8617194697", + "stop_type": "일반차로", + "node_id": "115000159", + "nxtStn": "블루나인비지니스센터" + }, + { + "stop_nm": "가양역.현대프린스텔", + "ycode": "37.5602196054", + "stop_no": "16257", + "xcode": "126.8563497598", + "stop_type": "일반차로", + "node_id": "115000160", + "nxtStn": "증미역3번출구.강서소방서" + }, + { + "stop_nm": "가양역.현대아파트", + "ycode": "37.560412", + "stop_no": "16258", + "xcode": "126.856722", + "stop_type": "일반차로", + "node_id": "115000161", + "nxtStn": "가양역1번출구.우성아파트" + }, + { + "stop_nm": "가양역.우성아파트", + "ycode": "37.5614520887", + "stop_no": "16259", + "xcode": "126.8539737105", + "stop_type": "일반차로", + "node_id": "115000162", + "nxtStn": "가양역.마포중고등학교" + }, + { + "stop_nm": "가양역.우성아파트", + "ycode": "37.562223", + "stop_no": "16260", + "xcode": "126.853228", + "stop_type": "일반차로", + "node_id": "115000163", + "nxtStn": "SBS공개홀" + }, + { + "stop_nm": "SBS공개홀", + "ycode": "37.5634890953", + "stop_no": "16261", + "xcode": "126.85080021", + "stop_type": "일반차로", + "node_id": "115000164", + "nxtStn": "강서한강자이아파트" + }, + { + "stop_nm": "SBS공개홀", + "ycode": "37.563659097", + "stop_no": "16262", + "xcode": "126.8498490115", + "stop_type": "일반차로", + "node_id": "115000165", + "nxtStn": "가양역9번출구.우성아파트" + }, + { + "stop_nm": "가양4.5단지상가앞", + "ycode": "37.5640845262", + "stop_no": "16263", + "xcode": "126.8526273202", + "stop_type": "일반차로", + "node_id": "115000927", + "nxtStn": "등촌주공9단지" + }, + { + "stop_nm": "서울서진학교", + "ycode": "37.566287", + "stop_no": "16264", + "xcode": "126.850292", + "stop_type": "일반차로", + "node_id": "115000167", + "nxtStn": "서울서진학교.우체국앞.허준박물관" + }, + { + "stop_nm": "등촌동대림아파트", + "ycode": "37.5644051441", + "stop_no": "16265", + "xcode": "126.8483940429", + "stop_type": "일반차로", + "node_id": "115000168", + "nxtStn": "SBS공개홀" + }, + { + "stop_nm": "강서한강자이아파트", + "ycode": "37.5650145106", + "stop_no": "16266", + "xcode": "126.8478709578", + "stop_type": "일반차로", + "node_id": "115000169", + "nxtStn": "가양동CJ주식회사" + }, + { + "stop_nm": "가양동CJ주식회사", + "ycode": "37.566652", + "stop_no": "16267", + "xcode": "126.844935", + "stop_type": "일반차로", + "node_id": "115000170", + "nxtStn": "양천향교역7번출구" + }, + { + "stop_nm": "가양동CJ주식회사", + "ycode": "37.566813", + "stop_no": "16268", + "xcode": "126.844067", + "stop_type": "일반차로", + "node_id": "115000171", + "nxtStn": "등촌동대림아파트" + }, + { + "stop_nm": "양천초등학교.겸재정선미술관", + "ycode": "37.5690684929", + "stop_no": "16269", + "xcode": "126.8403424556", + "stop_type": "일반차로", + "node_id": "115000172", + "nxtStn": "2.8공원" + }, + { + "stop_nm": "양천초등학교.겸재정선미술관", + "ycode": "37.568749", + "stop_no": "16270", + "xcode": "126.840489", + "stop_type": "일반차로", + "node_id": "115000173", + "nxtStn": "양천향교역7번출구" + }, + { + "stop_nm": "겸재정선미술관.서울식물원", + "ycode": "37.569779", + "stop_no": "16271", + "xcode": "126.838568", + "stop_type": "일반차로", + "node_id": "115000174", + "nxtStn": "양천초등학교.겸재정선미술관" + }, + { + "stop_nm": "겸재정선미술관.서울식물원", + "ycode": "37.5707733354", + "stop_no": "16272", + "xcode": "126.8372947297", + "stop_type": "일반차로", + "node_id": "115000175", + "nxtStn": "마곡실내배드민턴장" + }, + { + "stop_nm": "마곡실내배드민턴장", + "ycode": "37.572618", + "stop_no": "16273", + "xcode": "126.829851", + "stop_type": "일반차로", + "node_id": "115000176", + "nxtStn": "겸재정선미술관.서울식물원" + }, + { + "stop_nm": "마곡실내배드민턴장", + "ycode": "37.5726747685", + "stop_no": "16274", + "xcode": "126.8319558638", + "stop_type": "일반차로", + "node_id": "115000177", + "nxtStn": "서남물재생센터" + }, + { + "stop_nm": "서남물재생센터", + "ycode": "37.573004", + "stop_no": "16275", + "xcode": "126.827321", + "stop_type": "일반차로", + "node_id": "115000178", + "nxtStn": "서남환경공원.마곡청구아파트" + }, + { + "stop_nm": "서남물재생센터", + "ycode": "37.572769", + "stop_no": "16276", + "xcode": "126.827155", + "stop_type": "일반차로", + "node_id": "115000179", + "nxtStn": "마곡실내배드민턴장" + }, + { + "stop_nm": "서남환경공원.마곡청구아파트", + "ycode": "37.5732822116", + "stop_no": "16277", + "xcode": "126.8233293081", + "stop_type": "일반차로", + "node_id": "115000180", + "nxtStn": "방화2단지아파트" + }, + { + "stop_nm": "서남환경공원.마곡청구아파트", + "ycode": "37.573136", + "stop_no": "16278", + "xcode": "126.822208", + "stop_type": "일반차로", + "node_id": "115000181", + "nxtStn": "서남물재생센터" + }, + { + "stop_nm": "방화동도시개발2단지아파트", + "ycode": "37.573249517", + "stop_no": "16279", + "xcode": "126.8185240847", + "stop_type": "일반차로", + "node_id": "115000182", + "nxtStn": "서남환경공원.마곡청구아파트" + }, + { + "stop_nm": "방화동도시개발2단지아파트", + "ycode": "37.573514", + "stop_no": "16280", + "xcode": "126.818829", + "stop_type": "일반차로", + "node_id": "115000183", + "nxtStn": "방화동동부센트레빌아파트" + }, + { + "stop_nm": "방화동동부센트레빌아파트", + "ycode": "37.5733225126", + "stop_no": "16283", + "xcode": "126.8138643735", + "stop_type": "일반차로", + "node_id": "115000186", + "nxtStn": "방화2단지아파트" + }, + { + "stop_nm": "방화동동부센트레빌아파트", + "ycode": "37.573528", + "stop_no": "16284", + "xcode": "126.814217", + "stop_type": "일반차로", + "node_id": "115000187", + "nxtStn": "방화사거리" + }, + { + "stop_nm": "방화사거리", + "ycode": "37.5730855678", + "stop_no": "16285", + "xcode": "126.8104923847", + "stop_type": "일반차로", + "node_id": "115000188", + "nxtStn": "국민은행방화동지점" + }, + { + "stop_nm": "방화사거리", + "ycode": "37.573162", + "stop_no": "16286", + "xcode": "126.809421", + "stop_type": "일반차로", + "node_id": "115000189", + "nxtStn": "개화산역" + }, + { + "stop_nm": "개화산역", + "ycode": "37.572521", + "stop_no": "16287", + "xcode": "126.806172", + "stop_type": "일반차로", + "node_id": "115000190", + "nxtStn": "방화사거리" + }, + { + "stop_nm": "개화산역", + "ycode": "37.5727710603", + "stop_no": "16288", + "xcode": "126.8052934018", + "stop_type": "일반차로", + "node_id": "115000191", + "nxtStn": "개화119안전센터" + }, + { + "stop_nm": "등촌3동천주교회", + "ycode": "37.560082", + "stop_no": "16291", + "xcode": "126.845797", + "stop_type": "일반차로", + "node_id": "115000194", + "nxtStn": "등촌주공5단지아파트" + }, + { + "stop_nm": "등촌3동천주교회", + "ycode": "37.5599579041", + "stop_no": "16292", + "xcode": "126.8460350791", + "stop_type": "일반차로", + "node_id": "115000195", + "nxtStn": "등촌3동주공10단지아파트" + }, + { + "stop_nm": "등촌3동5단지아파트.등촌고등학교", + "ycode": "37.561745", + "stop_no": "16293", + "xcode": "126.84519", + "stop_type": "일반차로", + "node_id": "115000196", + "nxtStn": "등촌3동주공10단지아파트" + }, + { + "stop_nm": "등촌3동5단지아파트.등촌고등학교", + "ycode": "37.56195", + "stop_no": "16294", + "xcode": "126.845205", + "stop_type": "일반차로", + "node_id": "115000197", + "nxtStn": "등촌동부영아파트" + }, + { + "stop_nm": "등촌3동주공4단지아파트", + "ycode": "37.562433", + "stop_no": "16295", + "xcode": "126.843177", + "stop_type": "일반차로", + "node_id": "115000198", + "nxtStn": "등촌3동5단지아파트.등촌고등학교" + }, + { + "stop_nm": "등촌동부영아파트", + "ycode": "37.562722", + "stop_no": "16296", + "xcode": "126.84275", + "stop_type": "일반차로", + "node_id": "115000199", + "nxtStn": "서울호서전문학교.등촌주공3단지아파트" + }, + { + "stop_nm": "등촌3동주공10단지아파트", + "ycode": "37.5619664289", + "stop_no": "16297", + "xcode": "126.8474153204", + "stop_type": "일반차로", + "node_id": "115000200", + "nxtStn": "서울서진학교" + }, + { + "stop_nm": "등촌3동대림아파트", + "ycode": "37.56259", + "stop_no": "16298", + "xcode": "126.84749", + "stop_type": "일반차로", + "node_id": "115000201", + "nxtStn": "등촌3동천주교회" + }, + { + "stop_nm": "마곡13단지힐스테이트아파트", + "ycode": "37.556702", + "stop_no": "16301", + "xcode": "126.817975", + "stop_type": "일반차로", + "node_id": "115000935", + "nxtStn": "송정중학교정문" + }, + { + "stop_nm": "다솔마을.강서농수산물도매시장", + "ycode": "37.5548179682", + "stop_no": "16302", + "xcode": "126.8198769197", + "stop_type": "일반차로", + "node_id": "115000934", + "nxtStn": "마곡13단지힐스테이트아파트" + }, + { + "stop_nm": "강서공업고등학교", + "ycode": "37.57553", + "stop_no": "16303", + "xcode": "126.816628", + "stop_type": "일반차로", + "node_id": "115000206", + "nxtStn": "신방화사거리" + }, + { + "stop_nm": "방화동도시개발1.2단지아파트", + "ycode": "37.57522", + "stop_no": "16304", + "xcode": "126.816875", + "stop_type": "일반차로", + "node_id": "115000207", + "nxtStn": "방화역2번출구" + }, + { + "stop_nm": "서울항공비지니스고등학교", + "ycode": "37.5695169119", + "stop_no": "16305", + "xcode": "126.8168322544", + "stop_type": "일반차로", + "node_id": "115000208", + "nxtStn": "신방화사거리" + }, + { + "stop_nm": "서울항공비지니스고등학교", + "ycode": "37.5689651724", + "stop_no": "16306", + "xcode": "126.8163793241", + "stop_type": "일반차로", + "node_id": "115000209", + "nxtStn": "신방화역7번출구" + }, + { + "stop_nm": "공항중학교", + "ycode": "37.5634491761", + "stop_no": "16307", + "xcode": "126.8162550447", + "stop_type": "일반차로", + "node_id": "115000210", + "nxtStn": "공항중학교" + }, + { + "stop_nm": "공항중학교.마곡엠밸리9단지", + "ycode": "37.562458", + "stop_no": "16308", + "xcode": "126.81676", + "stop_type": "일반차로", + "node_id": "115000211", + "nxtStn": "마곡엠밸리5단지" + }, + { + "stop_nm": "양천향교역", + "ycode": "37.5670001354", + "stop_no": "16309", + "xcode": "126.8407487895", + "stop_type": "일반차로", + "node_id": "115000212", + "nxtStn": "서울강서우체국" + }, + { + "stop_nm": "방신전통시장", + "ycode": "37.5700525655", + "stop_no": "16321", + "xcode": "126.812660348", + "stop_type": "일반차로", + "node_id": "115000224", + "nxtStn": "강서농협" + }, + { + "stop_nm": "방화주유소", + "ycode": "37.5666910754", + "stop_no": "16322", + "xcode": "126.8125292434", + "stop_type": "일반차로", + "node_id": "115000225", + "nxtStn": "공항시장역.공항성산교회" + }, + { + "stop_nm": "제과점앞", + "ycode": "37.56021", + "stop_no": "16326", + "xcode": "126.809942", + "stop_type": "일반차로", + "node_id": "115000229", + "nxtStn": "공항동주민센터" + }, + { + "stop_nm": "공항동천주교회", + "ycode": "37.557387", + "stop_no": "16327", + "xcode": "126.811612", + "stop_type": "일반차로", + "node_id": "115000230", + "nxtStn": "공항동송정중학교" + }, + { + "stop_nm": "강서한방병원", + "ycode": "37.5301259278", + "stop_no": "16328", + "xcode": "126.8390315329", + "stop_type": "일반차로", + "node_id": "115000231", + "nxtStn": "신월동기점" + }, + { + "stop_nm": "강서한방병원", + "ycode": "37.5299929864", + "stop_no": "16329", + "xcode": "126.8393407089", + "stop_type": "일반차로", + "node_id": "115000232", + "nxtStn": "화곡동유림아파트" + }, + { + "stop_nm": "강서한강자이아파트", + "ycode": "37.5663646057", + "stop_no": "16330", + "xcode": "126.8500718716", + "stop_type": "일반차로", + "node_id": "115000233", + "nxtStn": "등촌3동대림아파트" + }, + { + "stop_nm": "강서구청별관", + "ycode": "37.561162", + "stop_no": "16332", + "xcode": "126.859807", + "stop_type": "일반차로", + "node_id": "115000234", + "nxtStn": "가양7단지상가" + }, + { + "stop_nm": "우장산동주민센터", + "ycode": "37.547926", + "stop_no": "16339", + "xcode": "126.841575", + "stop_type": "일반차로", + "node_id": "115000241", + "nxtStn": "문성유치원" + }, + { + "stop_nm": "문성유치원", + "ycode": "37.546913", + "stop_no": "16340", + "xcode": "126.844227", + "stop_type": "일반차로", + "node_id": "115000242", + "nxtStn": "우장산투웨니퍼스트오피스텔" + }, + { + "stop_nm": "우장산투웨니퍼스트오피스텔", + "ycode": "37.547202", + "stop_no": "16341", + "xcode": "126.845782", + "stop_type": "가로변시간", + "node_id": "115000243", + "nxtStn": "우장초등학교" + }, + { + "stop_nm": "가양7단지상가", + "ycode": "37.560708", + "stop_no": "16342", + "xcode": "126.861713", + "stop_type": "일반차로", + "node_id": "115000244", + "nxtStn": "가양9단지아파트" + }, + { + "stop_nm": "등촌주공9단지", + "ycode": "37.561643", + "stop_no": "16344", + "xcode": "126.850602", + "stop_type": "일반차로", + "node_id": "115000246", + "nxtStn": "강서구민올림픽체육센터" + }, + { + "stop_nm": "강서구민올림픽체육센터", + "ycode": "37.559912", + "stop_no": "16345", + "xcode": "126.850182", + "stop_type": "일반차로", + "node_id": "115000247", + "nxtStn": "등촌주공6단지" + }, + { + "stop_nm": "등촌주공6단지", + "ycode": "37.560553", + "stop_no": "16346", + "xcode": "126.848477", + "stop_type": "일반차로", + "node_id": "115000248", + "nxtStn": "등현초등학교" + }, + { + "stop_nm": "등현초등학교", + "ycode": "37.5611", + "stop_no": "16347", + "xcode": "126.847267", + "stop_type": "일반차로", + "node_id": "115000249", + "nxtStn": "등촌3동5단지아파트.등촌고등학교" + }, + { + "stop_nm": "가양7단지상가앞", + "ycode": "37.560737", + "stop_no": "16348", + "xcode": "126.86182", + "stop_type": "일반차로", + "node_id": "115000250", + "nxtStn": "강서구청별관" + }, + { + "stop_nm": "우장산휴먼빌아파트", + "ycode": "37.5474383521", + "stop_no": "16350", + "xcode": "126.8434782256", + "stop_type": "일반차로", + "node_id": "115000251", + "nxtStn": "우장산동주민센터" + }, + { + "stop_nm": "우장산동주민센터", + "ycode": "37.548077", + "stop_no": "16351", + "xcode": "126.841394", + "stop_type": "일반차로", + "node_id": "115000252", + "nxtStn": "양서1단지우장산아이파크이편한세상" + }, + { + "stop_nm": "양서1단지우장산아이파크이편한세상", + "ycode": "37.547995", + "stop_no": "16352", + "xcode": "126.83702", + "stop_type": "일반차로", + "node_id": "115000253", + "nxtStn": "우장산역1번출구" + }, + { + "stop_nm": "우장산파크빌", + "ycode": "37.546653", + "stop_no": "16361", + "xcode": "126.845337", + "stop_type": "가로변시간", + "node_id": "115000258", + "nxtStn": "우장산휴먼빌아파트" + }, + { + "stop_nm": "강서힐스테이트아파트", + "ycode": "37.547853051", + "stop_no": "16364", + "xcode": "126.836963084", + "stop_type": "일반차로", + "node_id": "115000259", + "nxtStn": "우장산동주민센터" + }, + { + "stop_nm": "등촌주공6단지앞", + "ycode": "37.560355", + "stop_no": "16366", + "xcode": "126.848447", + "stop_type": "일반차로", + "node_id": "115000261", + "nxtStn": "강서구민올림픽체육센터" + }, + { + "stop_nm": "강서구민올림픽체육센터", + "ycode": "37.559795", + "stop_no": "16367", + "xcode": "126.850322", + "stop_type": "일반차로", + "node_id": "115000262", + "nxtStn": "등촌9단지SBS공개홀" + }, + { + "stop_nm": "등촌9단지SBS공개홀", + "ycode": "37.561875", + "stop_no": "16368", + "xcode": "126.850932", + "stop_type": "일반차로", + "node_id": "115000263", + "nxtStn": "가양4.5단지상가앞" + }, + { + "stop_nm": "가양4.5단지상가앞", + "ycode": "37.563943", + "stop_no": "16369", + "xcode": "126.852823", + "stop_type": "일반차로", + "node_id": "115000264", + "nxtStn": "가양5단지아파트" + }, + { + "stop_nm": "삼정그린코아아파트", + "ycode": "37.5715960686", + "stop_no": "16373", + "xcode": "126.8117011886", + "stop_type": "일반차로", + "node_id": "115000267", + "nxtStn": "방신전통시장" + }, + { + "stop_nm": "강서농협", + "ycode": "37.568327", + "stop_no": "16374", + "xcode": "126.812885", + "stop_type": "일반차로", + "node_id": "115000268", + "nxtStn": "방신전통시장" + }, + { + "stop_nm": "강서농협", + "ycode": "37.568388", + "stop_no": "16375", + "xcode": "126.812767", + "stop_type": "일반차로", + "node_id": "115000269", + "nxtStn": "방화주유소" + }, + { + "stop_nm": "서울방화초등학교", + "ycode": "37.568165", + "stop_no": "16376", + "xcode": "126.805304", + "stop_type": "일반차로", + "node_id": "115000270", + "nxtStn": "방화동도시개발11단지" + }, + { + "stop_nm": "공항동주민센터", + "ycode": "37.55883", + "stop_no": "16378", + "xcode": "126.810557", + "stop_type": "일반차로", + "node_id": "115000272", + "nxtStn": "공항동천주교회" + }, + { + "stop_nm": "천주교성당", + "ycode": "37.5560299741", + "stop_no": "16379", + "xcode": "126.8123522209", + "stop_type": "일반차로", + "node_id": "115000273", + "nxtStn": "공항동주민센터" + }, + { + "stop_nm": "마곡나루역4번출구.서울식물원", + "ycode": "37.565259", + "stop_no": "16385", + "xcode": "126.827772", + "stop_type": "일반차로", + "node_id": "115000936", + "nxtStn": "마곡나루역" + }, + { + "stop_nm": "마곡나루역5번출구.서울식물원", + "ycode": "37.565369", + "stop_no": "16386", + "xcode": "126.8275", + "stop_type": "일반차로", + "node_id": "115000937", + "nxtStn": "마곡역" + }, + { + "stop_nm": "마곡역교차로", + "ycode": "37.559349", + "stop_no": "16387", + "xcode": "126.828571", + "stop_type": "일반차로", + "node_id": "115000938", + "nxtStn": "이대서울병원" + }, + { + "stop_nm": "이대서울병원", + "ycode": "37.55874", + "stop_no": "16388", + "xcode": "126.834829", + "stop_type": "일반차로", + "node_id": "115000939", + "nxtStn": "발산역7번출구" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.55874", + "stop_no": "16389", + "xcode": "126.80421", + "stop_type": "일반차로", + "node_id": "115000280", + "nxtStn": "송정역" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.558392", + "stop_no": "16390", + "xcode": "126.80465", + "stop_type": "일반차로", + "node_id": "115000281", + "nxtStn": "방화동도시개발11단지" + }, + { + "stop_nm": "김포공항국제선", + "ycode": "37.56531", + "stop_no": "16391", + "xcode": "126.801112", + "stop_type": "일반차로", + "node_id": "115000282", + "nxtStn": "한국공항공사" + }, + { + "stop_nm": "김포공항국제선", + "ycode": "37.5649980309", + "stop_no": "16392", + "xcode": "126.8010312835", + "stop_type": "일반차로", + "node_id": "115000283", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "발산역7번출구", + "ycode": "37.557738", + "stop_no": "16393", + "xcode": "126.837903", + "stop_type": "일반차로", + "node_id": "115000284", + "nxtStn": "명덕고등학교.서울스타병원" + }, + { + "stop_nm": "신방화역5번출구", + "ycode": "37.567393", + "stop_no": "16394", + "xcode": "126.817444", + "stop_type": "일반차로", + "node_id": "115000897", + "nxtStn": "마곡엠밸리6.7단지.마곡중학교" + }, + { + "stop_nm": "마곡엠밸리6.7단지.마곡중학교", + "ycode": "37.567107", + "stop_no": "16395", + "xcode": "126.821451", + "stop_type": "일반차로", + "node_id": "115000912", + "nxtStn": "마곡나루역" + }, + { + "stop_nm": "마곡나루역", + "ycode": "37.566759", + "stop_no": "16396", + "xcode": "126.825808", + "stop_type": "일반차로", + "node_id": "115000898", + "nxtStn": "마곡나루역5번출구.서울식물원" + }, + { + "stop_nm": "마곡역", + "ycode": "37.56138", + "stop_no": "16397", + "xcode": "126.826913", + "stop_type": "일반차로", + "node_id": "115000900", + "nxtStn": "마곡역교차로" + }, + { + "stop_nm": "마곡역", + "ycode": "37.561329", + "stop_no": "16398", + "xcode": "126.827173", + "stop_type": "일반차로", + "node_id": "115000901", + "nxtStn": "마곡나루역1번출구.웰튼병원" + }, + { + "stop_nm": "마곡나루역1번출구.웰튼병원", + "ycode": "37.5669558738", + "stop_no": "16399", + "xcode": "126.8265562889", + "stop_type": "일반차로", + "node_id": "115000899", + "nxtStn": "마곡엠밸리7단지앞" + }, + { + "stop_nm": "마곡동로사거리", + "ycode": "37.5594674923", + "stop_no": "16400", + "xcode": "126.8314960803", + "stop_type": "일반차로", + "node_id": "115000933", + "nxtStn": "마곡역" + }, + { + "stop_nm": "마곡엠밸리11.12단지", + "ycode": "37.560066", + "stop_no": "16401", + "xcode": "126.82157", + "stop_type": "일반차로", + "node_id": "115000913", + "nxtStn": "마곡역6번출구" + }, + { + "stop_nm": "마곡13단지힐스테이트후문", + "ycode": "37.556634", + "stop_no": "16402", + "xcode": "126.818732", + "stop_type": "마을버스", + "node_id": "115900271", + "nxtStn": "공진초등학교" + }, + { + "stop_nm": "공진초등학교", + "ycode": "37.5584322785", + "stop_no": "16403", + "xcode": "126.8216428956", + "stop_type": "마을버스", + "node_id": "115900272", + "nxtStn": "마곡엠밸리14단지" + }, + { + "stop_nm": "송정역", + "ycode": "37.5613200833", + "stop_no": "16407", + "xcode": "126.8122234956", + "stop_type": "일반차로", + "node_id": "115000295", + "nxtStn": "방화중학교" + }, + { + "stop_nm": "외발산동기점", + "ycode": "37.5452091516", + "stop_no": "16408", + "xcode": "126.8213321956", + "stop_type": "일반차로", + "node_id": "115000296", + "nxtStn": "신월5동주민센터.신월중학교" + }, + { + "stop_nm": "한국공항공사", + "ycode": "37.562433", + "stop_no": "16410", + "xcode": "126.798872", + "stop_type": "일반차로", + "node_id": "115000297", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "한국공항공사", + "ycode": "37.56242", + "stop_no": "16411", + "xcode": "126.798863", + "stop_type": "일반차로", + "node_id": "115000298", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "이마트(가상)", + "ycode": "37.5625474539", + "stop_no": "16412", + "xcode": "126.7984631135", + "stop_type": "가상정류장", + "node_id": "115000637", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "개화동상사마을종점", + "ycode": "37.588697", + "stop_no": "16413", + "xcode": "126.80181", + "stop_type": "일반차로", + "node_id": "115000300", + "nxtStn": "상사마을" + }, + { + "stop_nm": "마곡수명산파크7단지", + "ycode": "37.549218", + "stop_no": "16416", + "xcode": "126.823065", + "stop_type": "일반차로", + "node_id": "115000302", + "nxtStn": "마곡수명산파크5단지6단지" + }, + { + "stop_nm": "마곡수명산파크5단지6단지", + "ycode": "37.55131", + "stop_no": "16417", + "xcode": "126.82535", + "stop_type": "일반차로", + "node_id": "115000303", + "nxtStn": "마곡수명산파크2단지" + }, + { + "stop_nm": "마곡수명산파크2단지", + "ycode": "37.5549071083", + "stop_no": "16418", + "xcode": "126.8264227097", + "stop_type": "일반차로", + "node_id": "115000304", + "nxtStn": "마곡엠밸리15단지아파트" + }, + { + "stop_nm": "마곡수명산파크2단지", + "ycode": "37.554787", + "stop_no": "16419", + "xcode": "126.826058", + "stop_type": "일반차로", + "node_id": "115000305", + "nxtStn": "마곡수명산파크3단지4단지" + }, + { + "stop_nm": "마곡수명산파크3단지4단지", + "ycode": "37.55168483", + "stop_no": "16420", + "xcode": "126.8252225589", + "stop_type": "일반차로", + "node_id": "115000306", + "nxtStn": "마곡수명산파크7단지" + }, + { + "stop_nm": "마곡수명산파크7단지", + "ycode": "37.549322", + "stop_no": "16421", + "xcode": "126.822762", + "stop_type": "일반차로", + "node_id": "115000307", + "nxtStn": "강서면허시험장.메이필드호텔" + }, + { + "stop_nm": "마곡역6번출구", + "ycode": "37.559571", + "stop_no": "16422", + "xcode": "126.825491", + "stop_type": "일반차로", + "node_id": "115000308", + "nxtStn": "마곡엠밸리14단지" + }, + { + "stop_nm": "마곡역", + "ycode": "37.5602184256", + "stop_no": "16423", + "xcode": "126.8243287914", + "stop_type": "일반차로", + "node_id": "115000309", + "nxtStn": "공항중학교.마곡엠밸리9,10단지" + }, + { + "stop_nm": "화곡2동주민센터", + "ycode": "37.5313768831", + "stop_no": "16424", + "xcode": "126.8552226927", + "stop_type": "일반차로", + "node_id": "115000310", + "nxtStn": "서울신정초등학교" + }, + { + "stop_nm": "화곡2동주민센터", + "ycode": "37.531179", + "stop_no": "16425", + "xcode": "126.854478", + "stop_type": "일반차로", + "node_id": "115000311", + "nxtStn": "성석교회" + }, + { + "stop_nm": "마곡엠밸리14단지아파트", + "ycode": "37.557467", + "stop_no": "16427", + "xcode": "126.826412", + "stop_type": "일반차로", + "node_id": "115000313", + "nxtStn": "마곡수명산파크2단지" + }, + { + "stop_nm": "마곡엠밸리15단지아파트", + "ycode": "37.5574387588", + "stop_no": "16428", + "xcode": "126.8267496101", + "stop_type": "일반차로", + "node_id": "115000314", + "nxtStn": "마곡동로사거리" + }, + { + "stop_nm": "발산역9번출구", + "ycode": "37.558922", + "stop_no": "16429", + "xcode": "126.836511", + "stop_type": "일반차로", + "node_id": "115000315", + "nxtStn": "마곡동로사거리" + }, + { + "stop_nm": "공항동주민센터", + "ycode": "37.558964", + "stop_no": "16430", + "xcode": "126.810619", + "stop_type": "일반차로", + "node_id": "115000316", + "nxtStn": "송정역" + }, + { + "stop_nm": "신방화사거리", + "ycode": "37.572868", + "stop_no": "16431", + "xcode": "126.816922", + "stop_type": "일반차로", + "node_id": "115000317", + "nxtStn": "방화1.2단지아파트" + }, + { + "stop_nm": "신방화사거리", + "ycode": "37.572787", + "stop_no": "16432", + "xcode": "126.816537", + "stop_type": "일반차로", + "node_id": "115000318", + "nxtStn": "서울항공비즈니스고등학교" + }, + { + "stop_nm": "방화2동우촌연립", + "ycode": "37.5701349", + "stop_no": "16433", + "xcode": "126.8117126614", + "stop_type": "일반차로", + "node_id": "115000319", + "nxtStn": "국민은행방화동지점" + }, + { + "stop_nm": "개화역광역환승센터", + "ycode": "37.57845", + "stop_no": "16434", + "xcode": "126.797811", + "stop_type": "일반차로", + "node_id": "115000320", + "nxtStn": "개화역광역환승센터" + }, + { + "stop_nm": "개화역광역환승센터", + "ycode": "37.57822", + "stop_no": "16435", + "xcode": "126.797978", + "stop_type": "일반차로", + "node_id": "115000321", + "nxtStn": "코콤" + }, + { + "stop_nm": "방화2동청성아파트", + "ycode": "37.5665639113", + "stop_no": "16436", + "xcode": "126.8118933674", + "stop_type": "일반차로", + "node_id": "115000322", + "nxtStn": "방화2동우촌연립" + }, + { + "stop_nm": "핑크힐병원", + "ycode": "37.5493147499", + "stop_no": "16450", + "xcode": "126.8755585298", + "stop_type": "일반차로", + "node_id": "115000609", + "nxtStn": "염창역2번출구" + }, + { + "stop_nm": "롯데몰.김포공항역", + "ycode": "37.562379", + "stop_no": "16451", + "xcode": "126.803024", + "stop_type": "일반차로", + "node_id": "115000617", + "nxtStn": "김포공항국제선" + }, + { + "stop_nm": "송정중학교정문", + "ycode": "37.554337", + "stop_no": "16453", + "xcode": "126.81623", + "stop_type": "일반차로", + "node_id": "115000624", + "nxtStn": "공항동송정중학교" + }, + { + "stop_nm": "염창동주민센터", + "ycode": "37.553683", + "stop_no": "16462", + "xcode": "126.871126", + "stop_type": "마을버스", + "node_id": "115900241", + "nxtStn": "관음삼성.보람더하임아파트" + }, + { + "stop_nm": "대통마트", + "ycode": "37.5350552783", + "stop_no": "16463", + "xcode": "126.8560563182", + "stop_type": "마을버스", + "node_id": "115900231", + "nxtStn": "아람마트" + }, + { + "stop_nm": "강원슈퍼", + "ycode": "37.5355970088", + "stop_no": "16464", + "xcode": "126.8569390185", + "stop_type": "마을버스", + "node_id": "115900232", + "nxtStn": "대통마트" + }, + { + "stop_nm": "화곡보람3차아파트", + "ycode": "37.5364555609", + "stop_no": "16465", + "xcode": "126.8582737558", + "stop_type": "마을버스", + "node_id": "115900233", + "nxtStn": "강원슈퍼" + }, + { + "stop_nm": "에이엔케슬", + "ycode": "37.5371360581", + "stop_no": "16466", + "xcode": "126.859168675", + "stop_type": "마을버스", + "node_id": "115900234", + "nxtStn": "화곡보람3차아파트" + }, + { + "stop_nm": "한광고", + "ycode": "37.5377930358", + "stop_no": "16467", + "xcode": "126.8584805675", + "stop_type": "마을버스", + "node_id": "115900235", + "nxtStn": "에이엔케슬" + }, + { + "stop_nm": "신정여상", + "ycode": "37.5372836881", + "stop_no": "16468", + "xcode": "126.8575411898", + "stop_type": "마을버스", + "node_id": "115900236", + "nxtStn": "한광고" + }, + { + "stop_nm": "명지해드는터아파트", + "ycode": "37.5365469849", + "stop_no": "16469", + "xcode": "126.8563782102", + "stop_type": "마을버스", + "node_id": "115900237", + "nxtStn": "신정여상" + }, + { + "stop_nm": "동우아트빌", + "ycode": "37.536478", + "stop_no": "16470", + "xcode": "126.855948", + "stop_type": "마을버스", + "node_id": "115900238", + "nxtStn": "명지해드는터아파트" + }, + { + "stop_nm": "미주아파트", + "ycode": "37.5374138804", + "stop_no": "16471", + "xcode": "126.8549371793", + "stop_type": "마을버스", + "node_id": "115900239", + "nxtStn": "동우아트빌" + }, + { + "stop_nm": "방송인아파트", + "ycode": "37.5370334682", + "stop_no": "16472", + "xcode": "126.85410904", + "stop_type": "마을버스", + "node_id": "115900240", + "nxtStn": "미주아파트" + }, + { + "stop_nm": "곰달래약국", + "ycode": "37.5315199743", + "stop_no": "16473", + "xcode": "126.858040957", + "stop_type": "마을버스", + "node_id": "115900230", + "nxtStn": "남부시장" + }, + { + "stop_nm": "중앙하이츠빌라", + "ycode": "37.5307641322", + "stop_no": "16474", + "xcode": "126.8581894818", + "stop_type": "마을버스", + "node_id": "115900229", + "nxtStn": "곰달래약국" + }, + { + "stop_nm": "곰달래아파트", + "ycode": "37.529662", + "stop_no": "16475", + "xcode": "126.856579", + "stop_type": "마을버스", + "node_id": "115900228", + "nxtStn": "중앙하이츠빌라" + }, + { + "stop_nm": "삼성아파트", + "ycode": "37.5292192105", + "stop_no": "16476", + "xcode": "126.8541282205", + "stop_type": "마을버스", + "node_id": "115900227", + "nxtStn": "곰달래아파트" + }, + { + "stop_nm": "은창아파트", + "ycode": "37.5289352735", + "stop_no": "16477", + "xcode": "126.8518828439", + "stop_type": "마을버스", + "node_id": "115900226", + "nxtStn": "삼성아파트" + }, + { + "stop_nm": "화곡전화국", + "ycode": "37.529481", + "stop_no": "16478", + "xcode": "126.847914", + "stop_type": "마을버스", + "node_id": "115900225", + "nxtStn": "은창아파트" + }, + { + "stop_nm": "까치산역4번출구", + "ycode": "37.532641", + "stop_no": "16479", + "xcode": "126.846073", + "stop_type": "마을버스", + "node_id": "115900224", + "nxtStn": "화곡전화국" + }, + { + "stop_nm": "까치시장", + "ycode": "37.533742673", + "stop_no": "16480", + "xcode": "126.8462779542", + "stop_type": "마을버스", + "node_id": "115900223", + "nxtStn": "까치산역4번출구" + }, + { + "stop_nm": "화곡탑건진선미아파트", + "ycode": "37.53617", + "stop_no": "16481", + "xcode": "126.846713", + "stop_type": "마을버스", + "node_id": "115900222", + "nxtStn": "까치시장" + }, + { + "stop_nm": "개나리슈퍼", + "ycode": "37.536642", + "stop_no": "16482", + "xcode": "126.848008", + "stop_type": "마을버스", + "node_id": "115900221", + "nxtStn": "화곡탑건진선미아파트" + }, + { + "stop_nm": "빨래세탁소", + "ycode": "37.5371687836", + "stop_no": "16483", + "xcode": "126.8491623939", + "stop_type": "마을버스", + "node_id": "115900220", + "nxtStn": "개나리슈퍼" + }, + { + "stop_nm": "공작세탁소", + "ycode": "37.536591509", + "stop_no": "16484", + "xcode": "126.8545741382", + "stop_type": "마을버스", + "node_id": "115900218", + "nxtStn": "방송인아파트" + }, + { + "stop_nm": "주영렉스빌", + "ycode": "37.5360470216", + "stop_no": "16485", + "xcode": "126.8551479825", + "stop_type": "마을버스", + "node_id": "115900217", + "nxtStn": "공작세탁소" + }, + { + "stop_nm": "대통마트", + "ycode": "37.5348425483", + "stop_no": "16486", + "xcode": "126.855997887", + "stop_type": "마을버스", + "node_id": "115900216", + "nxtStn": "주영렉스빌" + }, + { + "stop_nm": "국민약국", + "ycode": "37.5317540263", + "stop_no": "16487", + "xcode": "126.8578470281", + "stop_type": "마을버스", + "node_id": "115900215", + "nxtStn": "화곡중앙하이츠빌라" + }, + { + "stop_nm": "주영렉스빌", + "ycode": "37.535899", + "stop_no": "16488", + "xcode": "126.855048", + "stop_type": "마을버스", + "node_id": "115900219", + "nxtStn": "대통마트" + }, + { + "stop_nm": "약수터", + "ycode": "37.5387776474", + "stop_no": "16489", + "xcode": "126.85163932", + "stop_type": "마을버스", + "node_id": "115900214", + "nxtStn": "정은파크빌" + }, + { + "stop_nm": "신광명마을", + "ycode": "37.5471082621", + "stop_no": "16490", + "xcode": "126.8240687003", + "stop_type": "마을버스", + "node_id": "115900209", + "nxtStn": "서울자동차학원" + }, + { + "stop_nm": "수명중고등학교", + "ycode": "37.549302466", + "stop_no": "16491", + "xcode": "126.8240952322", + "stop_type": "마을버스", + "node_id": "115900210", + "nxtStn": "수명산파크7단지정문" + }, + { + "stop_nm": "마곡.수명산파크4단지", + "ycode": "37.550615042", + "stop_no": "16492", + "xcode": "126.8244871379", + "stop_type": "마을버스", + "node_id": "115900211", + "nxtStn": "수명중고등학교" + }, + { + "stop_nm": "방화중학교", + "ycode": "37.5642674199", + "stop_no": "16493", + "xcode": "126.8065584409", + "stop_type": "일반차로", + "node_id": "115000066", + "nxtStn": "방화동도시개발11단지" + }, + { + "stop_nm": "한마음아파트", + "ycode": "37.5551078122", + "stop_no": "16494", + "xcode": "126.8680232498", + "stop_type": "마을버스", + "node_id": "115900212", + "nxtStn": "삼천리아파트" + }, + { + "stop_nm": "우성아파트앞", + "ycode": "37.5555155833", + "stop_no": "16495", + "xcode": "126.8708997", + "stop_type": "마을버스", + "node_id": "115900206", + "nxtStn": "동아1.2차아파트" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.5555615934", + "stop_no": "16496", + "xcode": "126.8709494221", + "stop_type": "마을버스", + "node_id": "115900208", + "nxtStn": "삼천리아파트" + }, + { + "stop_nm": "봉제산정상", + "ycode": "37.536704", + "stop_no": "16497", + "xcode": "126.85174", + "stop_type": "마을버스", + "node_id": "115900207", + "nxtStn": "태창아파트" + }, + { + "stop_nm": "생태공원", + "ycode": "37.583442", + "stop_no": "16498", + "xcode": "126.818551", + "stop_type": "마을버스", + "node_id": "115900023", + "nxtStn": "서광아파트" + }, + { + "stop_nm": "NC백화점앞", + "ycode": "37.559471", + "stop_no": "16499", + "xcode": "126.840246", + "stop_type": "마을버스", + "node_id": "115900184", + "nxtStn": "등명중학교" + }, + { + "stop_nm": "염창역1번출구.강서평생학습관", + "ycode": "37.5472979883", + "stop_no": "16500", + "xcode": "126.8737556441", + "stop_type": "마을버스", + "node_id": "115900022", + "nxtStn": "대림아파트" + }, + { + "stop_nm": "명지해드는터아파트", + "ycode": "37.5366974117", + "stop_no": "16501", + "xcode": "126.8563184623", + "stop_type": "마을버스", + "node_id": "115900001", + "nxtStn": "동우아트빌" + }, + { + "stop_nm": "하이웨이주유소", + "ycode": "37.554465", + "stop_no": "16502", + "xcode": "126.854287", + "stop_type": "마을버스", + "node_id": "115900021", + "nxtStn": "하나마트" + }, + { + "stop_nm": "서광아파트", + "ycode": "37.5788332307", + "stop_no": "16503", + "xcode": "126.8194426148", + "stop_type": "마을버스", + "node_id": "115900020", + "nxtStn": "정곡초교" + }, + { + "stop_nm": "마곡엠밸리7단지앞", + "ycode": "37.565419", + "stop_no": "16504", + "xcode": "126.824463", + "stop_type": "마을버스", + "node_id": "115900243", + "nxtStn": "강서세무서.공항초교" + }, + { + "stop_nm": "대림아파트", + "ycode": "37.5483303142", + "stop_no": "16505", + "xcode": "126.8751414211", + "stop_type": "마을버스", + "node_id": "115900019", + "nxtStn": "동아3차아파트" + }, + { + "stop_nm": "하나마트", + "ycode": "37.5524923381", + "stop_no": "16506", + "xcode": "126.8531015943", + "stop_type": "마을버스", + "node_id": "115900018", + "nxtStn": "백연공원" + }, + { + "stop_nm": "정곡초교", + "ycode": "37.5760007418", + "stop_no": "16507", + "xcode": "126.8186173155", + "stop_type": "마을버스", + "node_id": "115900017", + "nxtStn": "방화4단지" + }, + { + "stop_nm": "등명중학교", + "ycode": "37.5590951148", + "stop_no": "16508", + "xcode": "126.8429614647", + "stop_type": "마을버스", + "node_id": "115900016", + "nxtStn": "등촌3동성당사거리" + }, + { + "stop_nm": "동아3차아파트", + "ycode": "37.5494621232", + "stop_no": "16509", + "xcode": "126.8760290974", + "stop_type": "마을버스", + "node_id": "115900002", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "미주아파트", + "ycode": "37.5375050938", + "stop_no": "16510", + "xcode": "126.8551022133", + "stop_type": "마을버스", + "node_id": "115900015", + "nxtStn": "방송인아파트" + }, + { + "stop_nm": "백연공원", + "ycode": "37.5506285112", + "stop_no": "16511", + "xcode": "126.8520877836", + "stop_type": "마을버스", + "node_id": "115900014", + "nxtStn": "강서대학교" + }, + { + "stop_nm": "방화4단지", + "ycode": "37.576744", + "stop_no": "16512", + "xcode": "126.813401", + "stop_type": "마을버스", + "node_id": "115900202", + "nxtStn": "방화3동주민센터" + }, + { + "stop_nm": "등촌3동성당사거리", + "ycode": "37.5588259101", + "stop_no": "16513", + "xcode": "126.8458653593", + "stop_type": "마을버스", + "node_id": "115900013", + "nxtStn": "등촌6단지" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5502377469", + "stop_no": "16514", + "xcode": "126.8732764729", + "stop_type": "마을버스", + "node_id": "115900166", + "nxtStn": "관음삼성.보람더하임아파트" + }, + { + "stop_nm": "방송인아파트", + "ycode": "37.537196", + "stop_no": "16515", + "xcode": "126.854055", + "stop_type": "마을버스", + "node_id": "115900012", + "nxtStn": "공작세탁소" + }, + { + "stop_nm": "강서대학교", + "ycode": "37.5494785312", + "stop_no": "16516", + "xcode": "126.851224259", + "stop_type": "마을버스", + "node_id": "115900011", + "nxtStn": "골목시장" + }, + { + "stop_nm": "방화3동주민센터", + "ycode": "37.5785925502", + "stop_no": "16517", + "xcode": "126.8135874519", + "stop_type": "마을버스", + "node_id": "115900203", + "nxtStn": "방화역3번출구" + }, + { + "stop_nm": "등촌6단지", + "ycode": "37.5595698622", + "stop_no": "16518", + "xcode": "126.8476782843", + "stop_type": "마을버스", + "node_id": "115900010", + "nxtStn": "등촌9단지" + }, + { + "stop_nm": "관음삼성.보람더하임아파트", + "ycode": "37.5524224634", + "stop_no": "16519", + "xcode": "126.8703832733", + "stop_type": "마을버스", + "node_id": "115900009", + "nxtStn": "염창중학교" + }, + { + "stop_nm": "공작세탁소", + "ycode": "37.536466022", + "stop_no": "16520", + "xcode": "126.8543808707", + "stop_type": "마을버스", + "node_id": "115900008", + "nxtStn": "주영렉스빌" + }, + { + "stop_nm": "골목시장", + "ycode": "37.5486194397", + "stop_no": "16521", + "xcode": "126.850235687", + "stop_type": "마을버스", + "node_id": "115900181", + "nxtStn": "SK브로드밴드강서방송" + }, + { + "stop_nm": "등촌9단지", + "ycode": "37.5614067814", + "stop_no": "16523", + "xcode": "126.8487623402", + "stop_type": "마을버스", + "node_id": "115900003", + "nxtStn": "등촌주공9단지" + }, + { + "stop_nm": "염창중학교", + "ycode": "37.5533520946", + "stop_no": "16524", + "xcode": "126.8709339914", + "stop_type": "마을버스", + "node_id": "115900006", + "nxtStn": "동아1.2차아파트" + }, + { + "stop_nm": "대통마트", + "ycode": "37.5349622669", + "stop_no": "16525", + "xcode": "126.855893555", + "stop_type": "마을버스", + "node_id": "115900005", + "nxtStn": "남부시장" + }, + { + "stop_nm": "SK브로드밴드강서방송", + "ycode": "37.5478099476", + "stop_no": "16526", + "xcode": "126.849284385", + "stop_type": "마을버스", + "node_id": "115900182", + "nxtStn": "수정빌딩" + }, + { + "stop_nm": "정곡초교", + "ycode": "37.575846", + "stop_no": "16527", + "xcode": "126.819574", + "stop_type": "마을버스", + "node_id": "115900004", + "nxtStn": "서광아파트" + }, + { + "stop_nm": "강서세무서.공항초교", + "ycode": "37.562005", + "stop_no": "16528", + "xcode": "126.820612", + "stop_type": "마을버스", + "node_id": "115900244", + "nxtStn": "마곡엠밸리11.12단지" + }, + { + "stop_nm": "남부시장", + "ycode": "37.5325197799", + "stop_no": "16529", + "xcode": "126.857698479", + "stop_type": "마을버스", + "node_id": "115900047", + "nxtStn": "국민약국" + }, + { + "stop_nm": "수정빌딩", + "ycode": "37.545809", + "stop_no": "16530", + "xcode": "126.84754", + "stop_type": "마을버스", + "node_id": "115900046", + "nxtStn": "화곡유치원" + }, + { + "stop_nm": "다솔마을", + "ycode": "37.555154", + "stop_no": "16532", + "xcode": "126.816664", + "stop_type": "마을버스", + "node_id": "115900245", + "nxtStn": "마곡13단지힐스테이트후문" + }, + { + "stop_nm": "화곡유치원", + "ycode": "37.5444216025", + "stop_no": "16533", + "xcode": "126.8461326678", + "stop_type": "마을버스", + "node_id": "115900175", + "nxtStn": "본동시장" + }, + { + "stop_nm": "마곡엠밸리14단지", + "ycode": "37.5579919123", + "stop_no": "16534", + "xcode": "126.8256188032", + "stop_type": "마을버스", + "node_id": "115900273", + "nxtStn": "마곡역2번출구" + }, + { + "stop_nm": "등촌7단지아파트", + "ycode": "37.561265", + "stop_no": "16535", + "xcode": "126.853035", + "stop_type": "마을버스", + "node_id": "115900044", + "nxtStn": "가양역.마포중고등학교" + }, + { + "stop_nm": "삼천리아파트", + "ycode": "37.5561740306", + "stop_no": "16536", + "xcode": "126.8698493274", + "stop_type": "마을버스", + "node_id": "115900043", + "nxtStn": "한마음아파트" + }, + { + "stop_nm": "화곡중앙하이츠빌라", + "ycode": "37.5307477357", + "stop_no": "16537", + "xcode": "126.8580424207", + "stop_type": "마을버스", + "node_id": "115900042", + "nxtStn": "곰달래아파트" + }, + { + "stop_nm": "본동시장", + "ycode": "37.5428311336", + "stop_no": "16538", + "xcode": "126.8442200427", + "stop_type": "마을버스", + "node_id": "115900041", + "nxtStn": "볏골어린이공원" + }, + { + "stop_nm": "마곡엠밸리14단지", + "ycode": "37.558322", + "stop_no": "16539", + "xcode": "126.824727", + "stop_type": "마을버스", + "node_id": "115900274", + "nxtStn": "마곡엠밸리11.12단지상가" + }, + { + "stop_nm": "한서고등학교.보람아파트", + "ycode": "37.5748665364", + "stop_no": "16540", + "xcode": "126.8114926908", + "stop_type": "마을버스", + "node_id": "115900246", + "nxtStn": "방신시장.LG베스트샵" + }, + { + "stop_nm": "한마음아파트", + "ycode": "37.5550445028", + "stop_no": "16541", + "xcode": "126.8678151019", + "stop_type": "마을버스", + "node_id": "115900039", + "nxtStn": "금호.한솔아파트" + }, + { + "stop_nm": "곰달래아파트", + "ycode": "37.5297942783", + "stop_no": "16542", + "xcode": "126.8572148649", + "stop_type": "마을버스", + "node_id": "115900038", + "nxtStn": "삼성아파트" + }, + { + "stop_nm": "본동사무소", + "ycode": "37.5426467961", + "stop_no": "16543", + "xcode": "126.847974135", + "stop_type": "마을버스", + "node_id": "115900037", + "nxtStn": "거성빌라" + }, + { + "stop_nm": "볏골어린이공원", + "ycode": "37.540965", + "stop_no": "16544", + "xcode": "126.841979", + "stop_type": "마을버스", + "node_id": "115900036", + "nxtStn": "화곡역4번출구" + }, + { + "stop_nm": "방신시장.LG베스트샵", + "ycode": "37.5733423192", + "stop_no": "16545", + "xcode": "126.8125870322", + "stop_type": "마을버스", + "node_id": "115900247", + "nxtStn": "방화동동부센트레빌아파트" + }, + { + "stop_nm": "마곡엠밸리11.12단지상가", + "ycode": "37.558666", + "stop_no": "16546", + "xcode": "126.821038", + "stop_type": "마을버스", + "node_id": "115900275", + "nxtStn": "마곡13단지힐스테이트상가" + }, + { + "stop_nm": "삼성아파트", + "ycode": "37.5294337746", + "stop_no": "16547", + "xcode": "126.8542115306", + "stop_type": "마을버스", + "node_id": "115900035", + "nxtStn": "은창아파트" + }, + { + "stop_nm": "거성빌라", + "ycode": "37.5421787361", + "stop_no": "16548", + "xcode": "126.8490739183", + "stop_type": "마을버스", + "node_id": "115900034", + "nxtStn": "강서구립봉제산어르신복지센터" + }, + { + "stop_nm": "마곡13단지힐스테이트상가", + "ycode": "37.558364", + "stop_no": "16549", + "xcode": "126.820138", + "stop_type": "마을버스", + "node_id": "115900276", + "nxtStn": "마곡13단지힐스테이트후문" + }, + { + "stop_nm": "겸재정선미술관입구", + "ycode": "37.5717978008", + "stop_no": "16550", + "xcode": "126.8376286494", + "stop_type": "마을버스", + "node_id": "115900033", + "nxtStn": "금호APT" + }, + { + "stop_nm": "한국건강관리협회", + "ycode": "37.5538251223", + "stop_no": "16551", + "xcode": "126.8509971757", + "stop_type": "마을버스", + "node_id": "115900032", + "nxtStn": "강서구청입구" + }, + { + "stop_nm": "증미역2번출구", + "ycode": "37.557180458", + "stop_no": "16552", + "xcode": "126.8626080867", + "stop_type": "마을버스", + "node_id": "115900031", + "nxtStn": "등촌강변샤르망오피스텔" + }, + { + "stop_nm": "은창아파트", + "ycode": "37.5291208041", + "stop_no": "16553", + "xcode": "126.8518066697", + "stop_type": "마을버스", + "node_id": "115900030", + "nxtStn": "KT강서지사" + }, + { + "stop_nm": "강서구립봉제산어르신복지센터", + "ycode": "37.5417729905", + "stop_no": "16554", + "xcode": "126.8502912541", + "stop_type": "마을버스", + "node_id": "115900029", + "nxtStn": "대영마트" + }, + { + "stop_nm": "본동시장.새마을금고본점", + "ycode": "37.5428192627", + "stop_no": "16555", + "xcode": "126.8427421191", + "stop_type": "마을버스", + "node_id": "115900028", + "nxtStn": "화곡유치원" + }, + { + "stop_nm": "금호APT", + "ycode": "37.5743399784", + "stop_no": "16556", + "xcode": "126.8371204609", + "stop_type": "마을버스", + "node_id": "115900027", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "강서구청입구", + "ycode": "37.5532043177", + "stop_no": "16557", + "xcode": "126.8496141991", + "stop_type": "마을버스", + "node_id": "115900026", + "nxtStn": "우장산꿈에그린아파트" + }, + { + "stop_nm": "등촌강변샤르망오피스텔", + "ycode": "37.558624739", + "stop_no": "16558", + "xcode": "126.8571485471", + "stop_type": "마을버스", + "node_id": "115900025", + "nxtStn": "등촌현대아파트" + }, + { + "stop_nm": "마곡13단지힐스테이트후문", + "ycode": "37.5567373931", + "stop_no": "16559", + "xcode": "126.8179906008", + "stop_type": "마을버스", + "node_id": "115900277", + "nxtStn": "송정중학교정문" + }, + { + "stop_nm": "대영마트", + "ycode": "37.5405745983", + "stop_no": "16560", + "xcode": "126.851055235", + "stop_type": "마을버스", + "node_id": "115900178", + "nxtStn": "정은파크빌" + }, + { + "stop_nm": "우체국", + "ycode": "37.544197", + "stop_no": "16561", + "xcode": "126.84593", + "stop_type": "마을버스", + "node_id": "115900072", + "nxtStn": "화곡초교" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.5755640607", + "stop_no": "16562", + "xcode": "126.8367589013", + "stop_type": "마을버스", + "node_id": "115900071", + "nxtStn": "종점" + }, + { + "stop_nm": "우장산꿈에그린아파트", + "ycode": "37.5532921022", + "stop_no": "16563", + "xcode": "126.8477997172", + "stop_type": "마을버스", + "node_id": "115900070", + "nxtStn": "롯데3차APT" + }, + { + "stop_nm": "등촌현대아파트", + "ycode": "37.5566172929", + "stop_no": "16564", + "xcode": "126.8550855865", + "stop_type": "마을버스", + "node_id": "115900069", + "nxtStn": "하이웨이주유소" + }, + { + "stop_nm": "까치산역1번출구", + "ycode": "37.5326055625", + "stop_no": "16565", + "xcode": "126.8463346005", + "stop_type": "마을버스", + "node_id": "115900068", + "nxtStn": "까치시장" + }, + { + "stop_nm": "정은파크빌", + "ycode": "37.540005562", + "stop_no": "16566", + "xcode": "126.8514173531", + "stop_type": "마을버스", + "node_id": "115900067", + "nxtStn": "약수터" + }, + { + "stop_nm": "화곡초교", + "ycode": "37.543584805", + "stop_no": "16567", + "xcode": "126.8465565086", + "stop_type": "마을버스", + "node_id": "115900066", + "nxtStn": "본동사무소" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.575737", + "stop_no": "16568", + "xcode": "126.836678", + "stop_type": "마을버스", + "node_id": "115900164", + "nxtStn": "금호APT" + }, + { + "stop_nm": "롯데3차APT", + "ycode": "37.5528724125", + "stop_no": "16569", + "xcode": "126.8465770816", + "stop_type": "마을버스", + "node_id": "115900065", + "nxtStn": "강서구민회관" + }, + { + "stop_nm": "하이웨이주유소", + "ycode": "37.555586", + "stop_no": "16570", + "xcode": "126.854095", + "stop_type": "마을버스", + "node_id": "115900064", + "nxtStn": "경복비즈니스고등학교" + }, + { + "stop_nm": "까치시장", + "ycode": "37.5335405699", + "stop_no": "16571", + "xcode": "126.8460803531", + "stop_type": "마을버스", + "node_id": "115900063", + "nxtStn": "선교교회" + }, + { + "stop_nm": "약수터", + "ycode": "37.5387720758", + "stop_no": "16572", + "xcode": "126.8515080655", + "stop_type": "마을버스", + "node_id": "115900062", + "nxtStn": "태창아파트" + }, + { + "stop_nm": "금호APT", + "ycode": "37.574293801", + "stop_no": "16573", + "xcode": "126.8369597981", + "stop_type": "마을버스", + "node_id": "115900061", + "nxtStn": "겸재정선미술관입구" + }, + { + "stop_nm": "강서구민회관", + "ycode": "37.5530658323", + "stop_no": "16574", + "xcode": "126.8442711774", + "stop_type": "마을버스", + "node_id": "115900060", + "nxtStn": "발산어린이집" + }, + { + "stop_nm": "선교교회", + "ycode": "37.5343420215", + "stop_no": "16576", + "xcode": "126.8477612943", + "stop_type": "마을버스", + "node_id": "115900058", + "nxtStn": "화곡탑건진선미아파트" + }, + { + "stop_nm": "겸재정선미술관입구", + "ycode": "37.5718308684", + "stop_no": "16577", + "xcode": "126.8374304603", + "stop_type": "마을버스", + "node_id": "115900057", + "nxtStn": "2.8공원" + }, + { + "stop_nm": "발산어린이집", + "ycode": "37.554367135", + "stop_no": "16578", + "xcode": "126.8416539309", + "stop_type": "마을버스", + "node_id": "115900056", + "nxtStn": "롯데1차" + }, + { + "stop_nm": "화곡탑건진선미아파트", + "ycode": "37.5359934136", + "stop_no": "16579", + "xcode": "126.8468187447", + "stop_type": "마을버스", + "node_id": "115900055", + "nxtStn": "개나리슈퍼" + }, + { + "stop_nm": "삼거리", + "ycode": "37.53739", + "stop_no": "16580", + "xcode": "126.850132", + "stop_type": "마을버스", + "node_id": "115900054", + "nxtStn": "봉제산정상" + }, + { + "stop_nm": "롯데1차", + "ycode": "37.5544702163", + "stop_no": "16581", + "xcode": "126.8405796", + "stop_type": "마을버스", + "node_id": "115900053", + "nxtStn": "강서노인회관" + }, + { + "stop_nm": "개나리슈퍼", + "ycode": "37.53657", + "stop_no": "16583", + "xcode": "126.848043", + "stop_type": "마을버스", + "node_id": "115900052", + "nxtStn": "빨래터세탁소" + }, + { + "stop_nm": "강서노인회관", + "ycode": "37.5545324812", + "stop_no": "16586", + "xcode": "126.8399795935", + "stop_type": "마을버스", + "node_id": "115900049", + "nxtStn": "우장산월드메르디앙아파트" + }, + { + "stop_nm": "빨래터세탁소", + "ycode": "37.5369625024", + "stop_no": "16588", + "xcode": "126.8492383261", + "stop_type": "마을버스", + "node_id": "115900097", + "nxtStn": "삼거리" + }, + { + "stop_nm": "안골공원", + "ycode": "37.5359315073", + "stop_no": "16589", + "xcode": "126.8512590982", + "stop_type": "마을버스", + "node_id": "115900096", + "nxtStn": "강남슈퍼" + }, + { + "stop_nm": "우장산월드메르디앙아파트", + "ycode": "37.554791", + "stop_no": "16591", + "xcode": "126.837889", + "stop_type": "마을버스", + "node_id": "115900198", + "nxtStn": "명덕고등학교.서울스타병원" + }, + { + "stop_nm": "방화동동부센트레빌아파트", + "ycode": "37.573366", + "stop_no": "16592", + "xcode": "126.813811", + "stop_type": "마을버스", + "node_id": "115900248", + "nxtStn": "프라임마트" + }, + { + "stop_nm": "삼거리", + "ycode": "37.5373368223", + "stop_no": "16593", + "xcode": "126.8502333606", + "stop_type": "마을버스", + "node_id": "115900094", + "nxtStn": "태창아파트" + }, + { + "stop_nm": "강남슈퍼", + "ycode": "37.5351941142", + "stop_no": "16594", + "xcode": "126.8510240698", + "stop_type": "마을버스", + "node_id": "115900093", + "nxtStn": "신정초교" + }, + { + "stop_nm": "프라임마트", + "ycode": "37.572874", + "stop_no": "16595", + "xcode": "126.818237", + "stop_type": "마을버스", + "node_id": "115900249", + "nxtStn": "마곡우림필유아파트" + }, + { + "stop_nm": "태창아파트", + "ycode": "37.5375766335", + "stop_no": "16597", + "xcode": "126.8508560508", + "stop_type": "마을버스", + "node_id": "115900092", + "nxtStn": "약수터" + }, + { + "stop_nm": "신정초교", + "ycode": "37.5325973854", + "stop_no": "16598", + "xcode": "126.8512080132", + "stop_type": "마을버스", + "node_id": "115900091", + "nxtStn": "서울신정초등학교" + }, + { + "stop_nm": "정은파크빌", + "ycode": "37.5400282017", + "stop_no": "16599", + "xcode": "126.851506706", + "stop_type": "마을버스", + "node_id": "115900090", + "nxtStn": "대영마트" + }, + { + "stop_nm": "마곡한솔솔파크", + "ycode": "37.570045", + "stop_no": "16601", + "xcode": "126.82266", + "stop_type": "마을버스", + "node_id": "115900250", + "nxtStn": "길훈아파트" + }, + { + "stop_nm": "가양역", + "ycode": "37.560449", + "stop_no": "16602", + "xcode": "126.856651", + "stop_type": "일반차로", + "node_id": "115000610", + "nxtStn": "마곡철교(가상)" + }, + { + "stop_nm": "길훈아파트", + "ycode": "37.568681", + "stop_no": "16603", + "xcode": "126.822572", + "stop_type": "마을버스", + "node_id": "115900251", + "nxtStn": "마곡중학교" + }, + { + "stop_nm": "마곡중학교", + "ycode": "37.5686345859", + "stop_no": "16604", + "xcode": "126.8217565694", + "stop_type": "마을버스", + "node_id": "115900252", + "nxtStn": "마곡엠밸리1단지" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.5595403707", + "stop_no": "16605", + "xcode": "126.8033333929", + "stop_type": "일반차로", + "node_id": "115000601", + "nxtStn": "방화중학교" + }, + { + "stop_nm": "마곡나루역", + "ycode": "37.567223", + "stop_no": "16606", + "xcode": "126.82779", + "stop_type": "일반차로", + "node_id": "115000921", + "nxtStn": "마곡나루역5번출구.서울식물원" + }, + { + "stop_nm": "롯데R&D센터", + "ycode": "37.571318", + "stop_no": "16608", + "xcode": "126.828429", + "stop_type": "일반차로", + "node_id": "115000920", + "nxtStn": "마곡나루역" + }, + { + "stop_nm": "마곡나루역", + "ycode": "37.567163", + "stop_no": "16609", + "xcode": "126.828066", + "stop_type": "일반차로", + "node_id": "115000918", + "nxtStn": "롯데R&D센터" + }, + { + "stop_nm": "대한항공", + "ycode": "37.5499834076", + "stop_no": "16612", + "xcode": "126.8150621212", + "stop_type": "일반차로", + "node_id": "115000620", + "nxtStn": "대한항공훈련센터" + }, + { + "stop_nm": "LG사이언스파크", + "ycode": "37.562768", + "stop_no": "16613", + "xcode": "126.833982", + "stop_type": "일반차로", + "node_id": "115000943", + "nxtStn": "서울식물원.숲문화학교" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.559288", + "stop_no": "16614", + "xcode": "126.804054", + "stop_type": "일반차로", + "node_id": "115000621", + "nxtStn": "김포공항국제선" + }, + { + "stop_nm": "마곡엠밸리1단지", + "ycode": "37.56781", + "stop_no": "16615", + "xcode": "126.819153", + "stop_type": "마을버스", + "node_id": "115900253", + "nxtStn": "마곡나루역" + }, + { + "stop_nm": "마곡나루역", + "ycode": "37.566687", + "stop_no": "16616", + "xcode": "126.825813", + "stop_type": "마을버스", + "node_id": "115900254", + "nxtStn": "마곡나루역5번출구" + }, + { + "stop_nm": "마곡나루역5번출구", + "ycode": "37.565315", + "stop_no": "16617", + "xcode": "126.827481", + "stop_type": "마을버스", + "node_id": "115900282", + "nxtStn": "마곡역" + }, + { + "stop_nm": "대한항공", + "ycode": "37.549888549", + "stop_no": "16618", + "xcode": "126.8164830974", + "stop_type": "일반차로", + "node_id": "115000924", + "nxtStn": "대한항공훈련센터" + }, + { + "stop_nm": "서울식물원.숲문화학교", + "ycode": "37.566316", + "stop_no": "16619", + "xcode": "126.83451", + "stop_type": "일반차로", + "node_id": "115000944", + "nxtStn": "겸재정선미술관.서울식물원" + }, + { + "stop_nm": "마곡역2번출구", + "ycode": "37.559964", + "stop_no": "16621", + "xcode": "126.825997", + "stop_type": "마을버스", + "node_id": "115900256", + "nxtStn": "마곡나루역1번출구.웰튼병원" + }, + { + "stop_nm": "강서세무서.공항초교", + "ycode": "37.5619017064", + "stop_no": "16622", + "xcode": "126.8209337487", + "stop_type": "마을버스", + "node_id": "115900257", + "nxtStn": "강서세무서" + }, + { + "stop_nm": "강서세무서", + "ycode": "37.562354", + "stop_no": "16623", + "xcode": "126.821392", + "stop_type": "마을버스", + "node_id": "115900258", + "nxtStn": "마곡엠밸리7단지입구" + }, + { + "stop_nm": "마곡엠밸리7단지입구", + "ycode": "37.565005", + "stop_no": "16624", + "xcode": "126.824649", + "stop_type": "마을버스", + "node_id": "115900259", + "nxtStn": "마곡엠밸리7단지" + }, + { + "stop_nm": "마곡엠밸리7단지", + "ycode": "37.56717", + "stop_no": "16625", + "xcode": "126.823576", + "stop_type": "마을버스", + "node_id": "115900260", + "nxtStn": "마곡엠밸리3단지입구" + }, + { + "stop_nm": "마곡역", + "ycode": "37.561203", + "stop_no": "16626", + "xcode": "126.826841", + "stop_type": "마을버스", + "node_id": "115900255", + "nxtStn": "마곡역2번출구" + }, + { + "stop_nm": "마곡엠밸리3단지입구", + "ycode": "37.567457", + "stop_no": "16627", + "xcode": "126.819998", + "stop_type": "마을버스", + "node_id": "115900261", + "nxtStn": "마곡중학교후문" + }, + { + "stop_nm": "마곡중학교후문", + "ycode": "37.5684480939", + "stop_no": "16628", + "xcode": "126.8217854068", + "stop_type": "마을버스", + "node_id": "115900262", + "nxtStn": "길훈아파트" + }, + { + "stop_nm": "길훈아파트", + "ycode": "37.5688328966", + "stop_no": "16629", + "xcode": "126.8227000401", + "stop_type": "마을버스", + "node_id": "115900263", + "nxtStn": "마곡한솔솔파크" + }, + { + "stop_nm": "마곡한솔솔파크", + "ycode": "37.569673", + "stop_no": "16630", + "xcode": "126.822845", + "stop_type": "마을버스", + "node_id": "115900264", + "nxtStn": "마곡우림필유아파트" + }, + { + "stop_nm": "프라임마트", + "ycode": "37.572986", + "stop_no": "16631", + "xcode": "126.818187", + "stop_type": "마을버스", + "node_id": "115900265", + "nxtStn": "방화동동부센트레빌아파트" + }, + { + "stop_nm": "방화동동부센트레빌아파트", + "ycode": "37.573523", + "stop_no": "16632", + "xcode": "126.8142", + "stop_type": "마을버스", + "node_id": "115900266", + "nxtStn": "방신시장" + }, + { + "stop_nm": "방신시장", + "ycode": "37.5736123014", + "stop_no": "16633", + "xcode": "126.8129196261", + "stop_type": "마을버스", + "node_id": "115900267", + "nxtStn": "한서고등학교.보람아파트" + }, + { + "stop_nm": "한서고등학교.보람아파트", + "ycode": "37.575013", + "stop_no": "16634", + "xcode": "126.811744", + "stop_type": "마을버스", + "node_id": "115900268", + "nxtStn": "방화역2번출구" + }, + { + "stop_nm": "마곡역", + "ycode": "37.560473826", + "stop_no": "16635", + "xcode": "126.8271580485", + "stop_type": "마을버스", + "node_id": "115900242", + "nxtStn": "마곡나루역4번출구.서울식물원" + }, + { + "stop_nm": "동아1.2차아파트", + "ycode": "37.554667", + "stop_no": "16636", + "xcode": "126.871881", + "stop_type": "마을버스", + "node_id": "115900269", + "nxtStn": "염창동주민센터" + }, + { + "stop_nm": "약수터", + "ycode": "37.538286", + "stop_no": "16637", + "xcode": "126.851516", + "stop_type": "마을버스", + "node_id": "115900089", + "nxtStn": "정은파크빌" + }, + { + "stop_nm": "동아1.2차아파트", + "ycode": "37.5546585833", + "stop_no": "16638", + "xcode": "126.8720632484", + "stop_type": "마을버스", + "node_id": "115900270", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "화곡역7번출구", + "ycode": "37.5413298067", + "stop_no": "16639", + "xcode": "126.8387731991", + "stop_type": "일반차로", + "node_id": "115000604", + "nxtStn": "화곡푸르지오" + }, + { + "stop_nm": "마곡우림필유아파트", + "ycode": "37.5720190366", + "stop_no": "16640", + "xcode": "126.8206647683", + "stop_type": "마을버스", + "node_id": "115900284", + "nxtStn": "프라임마트" + }, + { + "stop_nm": "마곡우림필유아파트", + "ycode": "37.572048799", + "stop_no": "16641", + "xcode": "126.8202678013", + "stop_type": "마을버스", + "node_id": "115900283", + "nxtStn": "마곡한솔솔파크" + }, + { + "stop_nm": "대영마트", + "ycode": "37.540598138", + "stop_no": "16677", + "xcode": "126.851143455", + "stop_type": "마을버스", + "node_id": "115900179", + "nxtStn": "강서구립봉제산어르신복지센터" + }, + { + "stop_nm": "롯데R&D센터", + "ycode": "37.570309", + "stop_no": "16700", + "xcode": "126.828546", + "stop_type": "일반차로", + "node_id": "115000919", + "nxtStn": "마곡실내배드민턴장" + }, + { + "stop_nm": "마곡엠밸리7단지.712동", + "ycode": "37.5672382393", + "stop_no": "16702", + "xcode": "126.8235422464", + "stop_type": "일반차로", + "node_id": "115000644", + "nxtStn": "신방화역4번출구.마곡중학교" + }, + { + "stop_nm": "신방화역4번출구.마곡중학교", + "ycode": "37.567457", + "stop_no": "16703", + "xcode": "126.819928", + "stop_type": "일반차로", + "node_id": "115000643", + "nxtStn": "서울항공비즈니스고등학교" + }, + { + "stop_nm": "신방화역7번출구", + "ycode": "37.56661", + "stop_no": "16704", + "xcode": "126.816377", + "stop_type": "일반차로", + "node_id": "115000642", + "nxtStn": "공항중학교" + }, + { + "stop_nm": "마곡엠밸리4단지", + "ycode": "37.5689315825", + "stop_no": "16705", + "xcode": "126.8249811399", + "stop_type": "일반차로", + "node_id": "115000641", + "nxtStn": "마곡엠밸리7단지.712동" + }, + { + "stop_nm": "마곡엠밸리5단지", + "ycode": "37.566192", + "stop_no": "16706", + "xcode": "126.816778", + "stop_type": "일반차로", + "node_id": "115000647", + "nxtStn": "서울항공비즈니스고등학교" + }, + { + "stop_nm": "화곡중앙골목시장", + "ycode": "37.5347017814", + "stop_no": "16707", + "xcode": "126.837775875", + "stop_type": "일반차로", + "node_id": "115000648", + "nxtStn": "화곡대림아파트" + }, + { + "stop_nm": "송화시장", + "ycode": "37.5479822354", + "stop_no": "16718", + "xcode": "126.8352516144", + "stop_type": "마을버스", + "node_id": "115900086", + "nxtStn": "화곡중.고등학교" + }, + { + "stop_nm": "삼천리아파트", + "ycode": "37.5561118066", + "stop_no": "16721", + "xcode": "126.869805293", + "stop_type": "마을버스", + "node_id": "115900168", + "nxtStn": "우성아파트앞" + }, + { + "stop_nm": "LG주유소", + "ycode": "37.5314339892", + "stop_no": "16722", + "xcode": "126.8568371052", + "stop_type": "마을버스", + "node_id": "115900085", + "nxtStn": "종점" + }, + { + "stop_nm": "오쇠동꽃단지", + "ycode": "37.5382211674", + "stop_no": "16725", + "xcode": "126.7978638462", + "stop_type": "일반차로", + "node_id": "115000607", + "nxtStn": "대장동입구" + }, + { + "stop_nm": "오쇠동꽃단지", + "ycode": "37.5382088192", + "stop_no": "16726", + "xcode": "126.7974938496", + "stop_type": "일반차로", + "node_id": "115000606", + "nxtStn": "오정휴먼시아3단지" + }, + { + "stop_nm": "강서구립봉제산어르신복지센터", + "ycode": "37.5417776236", + "stop_no": "16727", + "xcode": "126.8503919612", + "stop_type": "마을버스", + "node_id": "115900084", + "nxtStn": "거성빌라" + }, + { + "stop_nm": "화곡중.고등학교", + "ycode": "37.548014", + "stop_no": "16729", + "xcode": "126.833278", + "stop_type": "마을버스", + "node_id": "115900082", + "nxtStn": "덕원여자고등학교.덕원예술고등학교" + }, + { + "stop_nm": "증미역", + "ycode": "37.556687", + "stop_no": "16730", + "xcode": "126.863636", + "stop_type": "일반차로", + "node_id": "115000615", + "nxtStn": "가양역" + }, + { + "stop_nm": "삼거리", + "ycode": "37.5371798683", + "stop_no": "16732", + "xcode": "126.850104675", + "stop_type": "마을버스", + "node_id": "115900081", + "nxtStn": "봉제산정상" + }, + { + "stop_nm": "남부시장", + "ycode": "37.5325361304", + "stop_no": "16734", + "xcode": "126.8578070724", + "stop_type": "마을버스", + "node_id": "115900080", + "nxtStn": "성우빌딩" + }, + { + "stop_nm": "송정역", + "ycode": "37.561345", + "stop_no": "16745", + "xcode": "126.809145", + "stop_type": "가로변시간", + "node_id": "115000449", + "nxtStn": "제과점앞" + }, + { + "stop_nm": "거성빌라", + "ycode": "37.542193", + "stop_no": "16778", + "xcode": "126.849595", + "stop_type": "마을버스", + "node_id": "115900079", + "nxtStn": "본동사무소" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.5597057577", + "stop_no": "16781", + "xcode": "126.8030850688", + "stop_type": "일반차로", + "node_id": "115000602", + "nxtStn": "개화역1번출구.개화검문소" + }, + { + "stop_nm": "강서면허시험장", + "ycode": "37.55027309", + "stop_no": "16800", + "xcode": "126.8188279446", + "stop_type": "일반차로", + "node_id": "115000640", + "nxtStn": "김포공항국제선" + }, + { + "stop_nm": "덕원여자고등학교.덕원예술고등학교", + "ycode": "37.5492511475", + "stop_no": "16812", + "xcode": "126.8321738366", + "stop_type": "마을버스", + "node_id": "115900078", + "nxtStn": "발산초등학교" + }, + { + "stop_nm": "증미역", + "ycode": "37.55629", + "stop_no": "16813", + "xcode": "126.86384", + "stop_type": "일반차로", + "node_id": "115000616", + "nxtStn": "염동초교.염창보람더하임아파트" + }, + { + "stop_nm": "봉제산정상", + "ycode": "37.5366775541", + "stop_no": "16814", + "xcode": "126.8516122813", + "stop_type": "마을버스", + "node_id": "115900077", + "nxtStn": "안골공원" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.5595085098", + "stop_no": "16817", + "xcode": "126.8036809737", + "stop_type": "일반차로", + "node_id": "115000520", + "nxtStn": "노오지JC(가상)" + }, + { + "stop_nm": "성우빌딩", + "ycode": "37.5335728691", + "stop_no": "16818", + "xcode": "126.8574554641", + "stop_type": "마을버스", + "node_id": "115900076", + "nxtStn": "대통마트" + }, + { + "stop_nm": "발산초등학교", + "ycode": "37.550788238", + "stop_no": "16820", + "xcode": "126.8314177559", + "stop_type": "마을버스", + "node_id": "115900075", + "nxtStn": "수명산근린공원" + }, + { + "stop_nm": "김포공항국내선", + "ycode": "37.5585727001", + "stop_no": "16829", + "xcode": "126.8044802852", + "stop_type": "일반차로", + "node_id": "115000603", + "nxtStn": "송정역" + }, + { + "stop_nm": "로미오이발클럽", + "ycode": "37.5360346554", + "stop_no": "16836", + "xcode": "126.8530365707", + "stop_type": "마을버스", + "node_id": "115900074", + "nxtStn": "청송평화아파트" + }, + { + "stop_nm": "방화대교남단(가상)", + "ycode": "37.5835811606", + "stop_no": "16838", + "xcode": "126.8160003494", + "stop_type": "가상정류장", + "node_id": "115000537", + "nxtStn": "마곡철교(가상)" + }, + { + "stop_nm": "강서면허시험장메이필트호텔", + "ycode": "37.5502477813", + "stop_no": "16839", + "xcode": "126.8181908181", + "stop_type": "일반차로", + "node_id": "115000538", + "nxtStn": "화곡입구" + }, + { + "stop_nm": "강서구의회", + "ycode": "37.5451836495", + "stop_no": "16841", + "xcode": "126.8621434783", + "stop_type": "가로변시간", + "node_id": "115000540", + "nxtStn": "대일고등학교" + }, + { + "stop_nm": "강서구의회", + "ycode": "37.5463487525", + "stop_no": "16842", + "xcode": "126.8629063713", + "stop_type": "가로변시간", + "node_id": "115000541", + "nxtStn": "등촌중학교.백석초등학교" + }, + { + "stop_nm": "대일고등학교", + "ycode": "37.5390090878", + "stop_no": "16843", + "xcode": "126.8634754278", + "stop_type": "가로변전일", + "node_id": "115000542", + "nxtStn": "목동사거리" + }, + { + "stop_nm": "목동사거리", + "ycode": "37.5306750816", + "stop_no": "16844", + "xcode": "126.8636807084", + "stop_type": "가로변시간", + "node_id": "115000543", + "nxtStn": "목동역" + }, + { + "stop_nm": "김포공항국제선", + "ycode": "37.5658713092", + "stop_no": "16848", + "xcode": "126.8021756851", + "stop_type": "일반차로", + "node_id": "115000547", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "강서면허시험장.강서농수산물시장", + "ycode": "37.5500977258", + "stop_no": "16849", + "xcode": "126.8184684663", + "stop_type": "일반차로", + "node_id": "115000558", + "nxtStn": "강서면허시험장.메이필드호텔" + }, + { + "stop_nm": "염창역2번출구", + "ycode": "37.547248", + "stop_no": "16851", + "xcode": "126.87631", + "stop_type": "일반차로", + "node_id": "115000557", + "nxtStn": "종점" + }, + { + "stop_nm": "태영송화아파트", + "ycode": "37.5538754466", + "stop_no": "16855", + "xcode": "126.867513837", + "stop_type": "일반차로", + "node_id": "115000587", + "nxtStn": "염창동관음삼성아파트" + }, + { + "stop_nm": "김포공항국제선", + "ycode": "37.565706006", + "stop_no": "16857", + "xcode": "126.801935005", + "stop_type": "일반차로", + "node_id": "115000600", + "nxtStn": "김포공항국내선" + }, + { + "stop_nm": "대통마트", + "ycode": "37.5348868564", + "stop_no": "16858", + "xcode": "126.8561245344", + "stop_type": "마을버스", + "node_id": "115900180", + "nxtStn": "아람마트" + }, + { + "stop_nm": "화곡초교", + "ycode": "37.5434282911", + "stop_no": "16859", + "xcode": "126.8467695833", + "stop_type": "마을버스", + "node_id": "115900073", + "nxtStn": "본동시장" + }, + { + "stop_nm": "수명산근린공원", + "ycode": "37.552012862", + "stop_no": "16861", + "xcode": "126.8308140121", + "stop_type": "마을버스", + "node_id": "115900120", + "nxtStn": "수명산파크1단지" + }, + { + "stop_nm": "관음삼성.보람더하임아파트", + "ycode": "37.5520520784", + "stop_no": "16862", + "xcode": "126.8703510926", + "stop_type": "마을버스", + "node_id": "115900119", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "청송평화아파트", + "ycode": "37.535303", + "stop_no": "16863", + "xcode": "126.853737", + "stop_type": "마을버스", + "node_id": "115900118", + "nxtStn": "성심사" + }, + { + "stop_nm": "아람마트", + "ycode": "37.5343394453", + "stop_no": "16864", + "xcode": "126.8550234736", + "stop_type": "마을버스", + "node_id": "115900117", + "nxtStn": "성심사" + }, + { + "stop_nm": "수명산파크1단지", + "ycode": "37.5534189491", + "stop_no": "16867", + "xcode": "126.8298250178", + "stop_type": "마을버스", + "node_id": "115900116", + "nxtStn": "마곡.수명산파크2단지" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.5503900089", + "stop_no": "16868", + "xcode": "126.8724183295", + "stop_type": "마을버스", + "node_id": "115900115", + "nxtStn": "핑크힐병원" + }, + { + "stop_nm": "성심사", + "ycode": "37.5335722297", + "stop_no": "16869", + "xcode": "126.8539816967", + "stop_type": "마을버스", + "node_id": "115900114", + "nxtStn": "아람마트" + }, + { + "stop_nm": "성심사", + "ycode": "37.5336487863", + "stop_no": "16870", + "xcode": "126.8539521279", + "stop_type": "마을버스", + "node_id": "115900113", + "nxtStn": "현대빌라" + }, + { + "stop_nm": "마곡.수명산파크2단지", + "ycode": "37.5536179453", + "stop_no": "16873", + "xcode": "126.8278597199", + "stop_type": "마을버스", + "node_id": "115900112", + "nxtStn": "마곡.수명산파크3단지" + }, + { + "stop_nm": "아람마트", + "ycode": "37.5342647114", + "stop_no": "16875", + "xcode": "126.855070011", + "stop_type": "마을버스", + "node_id": "115900111", + "nxtStn": "대통마트" + }, + { + "stop_nm": "현대빌라", + "ycode": "37.534434419", + "stop_no": "16876", + "xcode": "126.8538521523", + "stop_type": "마을버스", + "node_id": "115900110", + "nxtStn": "청송평화아파트" + }, + { + "stop_nm": "화곡역7번출구", + "ycode": "37.5412701723", + "stop_no": "16878", + "xcode": "126.8386545056", + "stop_type": "일반차로", + "node_id": "115000638", + "nxtStn": "화곡푸르지오" + }, + { + "stop_nm": "마곡.수명산파크3단지", + "ycode": "37.5531861489", + "stop_no": "16879", + "xcode": "126.8258981428", + "stop_type": "마을버스", + "node_id": "115900109", + "nxtStn": "마곡수명산파크3단지.4단지" + }, + { + "stop_nm": "가양대교남단(가상)", + "ycode": "37.5605598588", + "stop_no": "16881", + "xcode": "126.8668036012", + "stop_type": "가상정류장", + "node_id": "115000627", + "nxtStn": "성산대교남단(가상)" + }, + { + "stop_nm": "청송평화아파트", + "ycode": "37.53522", + "stop_no": "16882", + "xcode": "126.853823", + "stop_type": "마을버스", + "node_id": "115900108", + "nxtStn": "로미오이발클럽" + }, + { + "stop_nm": "가양대교남단(가상)", + "ycode": "37.5609413685", + "stop_no": "16883", + "xcode": "126.8671119402", + "stop_type": "가상정류장", + "node_id": "115000626", + "nxtStn": "장기동" + }, + { + "stop_nm": "마곡수명산파크3단지.4단지", + "ycode": "37.5517452299", + "stop_no": "16885", + "xcode": "126.8252405265", + "stop_type": "마을버스", + "node_id": "115900191", + "nxtStn": "마곡.수명산파크4단지" + }, + { + "stop_nm": "화곡보람3차아파트", + "ycode": "37.5363953179", + "stop_no": "16887", + "xcode": "126.8583824999", + "stop_type": "마을버스", + "node_id": "115900107", + "nxtStn": "에이엔케슬" + }, + { + "stop_nm": "로미오이발클럽", + "ycode": "37.536154", + "stop_no": "16888", + "xcode": "126.853115", + "stop_type": "마을버스", + "node_id": "115900106", + "nxtStn": "봉제산정상" + }, + { + "stop_nm": "푸르지오APT", + "ycode": "37.5418579682", + "stop_no": "16890", + "xcode": "126.8311221371", + "stop_type": "마을버스", + "node_id": "115900105", + "nxtStn": "수명산입구" + }, + { + "stop_nm": "염동초교.염창보람더하임아파트", + "ycode": "37.552059", + "stop_no": "16891", + "xcode": "126.870441", + "stop_type": "일반차로", + "node_id": "115000614", + "nxtStn": "나이아가라.리버파크.골든서울호텔" + }, + { + "stop_nm": "에이엔케슬", + "ycode": "37.5371695389", + "stop_no": "16892", + "xcode": "126.8592862958", + "stop_type": "마을버스", + "node_id": "115900104", + "nxtStn": "한광고" + }, + { + "stop_nm": "염동초교.염창보람더하임아파트", + "ycode": "37.552272", + "stop_no": "16893", + "xcode": "126.870603", + "stop_type": "일반차로", + "node_id": "115000613", + "nxtStn": "증미역" + }, + { + "stop_nm": "화곡유치원", + "ycode": "37.544244", + "stop_no": "16894", + "xcode": "126.846235", + "stop_type": "마을버스", + "node_id": "115900103", + "nxtStn": "수정빌딩" + }, + { + "stop_nm": "나이아가라.리버파크.골든서울호텔", + "ycode": "37.548858", + "stop_no": "16895", + "xcode": "126.877841", + "stop_type": "일반차로", + "node_id": "115000612", + "nxtStn": "신목동역-서울지방식품의약품안전청" + }, + { + "stop_nm": "한광고", + "ycode": "37.5378553482", + "stop_no": "16896", + "xcode": "126.8585947399", + "stop_type": "마을버스", + "node_id": "115900102", + "nxtStn": "신정여상" + }, + { + "stop_nm": "수정빌딩", + "ycode": "37.5456801149", + "stop_no": "16897", + "xcode": "126.8476445823", + "stop_type": "마을버스", + "node_id": "115900101", + "nxtStn": "SK브로드밴드강서방송" + }, + { + "stop_nm": "수명산파크7단지정문", + "ycode": "37.5479699462", + "stop_no": "16898", + "xcode": "126.8242285136", + "stop_type": "마을버스", + "node_id": "115900100", + "nxtStn": "신광명마을" + }, + { + "stop_nm": "신정여상", + "ycode": "37.5373926959", + "stop_no": "16899", + "xcode": "126.857520614", + "stop_type": "마을버스", + "node_id": "115900099", + "nxtStn": "명지해드는터아파트" + }, + { + "stop_nm": "SK브로드밴드강서방송", + "ycode": "37.5475872477", + "stop_no": "16900", + "xcode": "126.8491829775", + "stop_type": "마을버스", + "node_id": "115900098", + "nxtStn": "골목시장" + }, + { + "stop_nm": "나이아가라.리버파크.골든서울호텔", + "ycode": "37.549122", + "stop_no": "16902", + "xcode": "126.877891", + "stop_type": "일반차로", + "node_id": "115000611", + "nxtStn": "염동초교.염창보람더하임아파트" + }, + { + "stop_nm": "골목시장", + "ycode": "37.5484752506", + "stop_no": "16903", + "xcode": "126.850224658", + "stop_type": "마을버스", + "node_id": "115900144", + "nxtStn": "강서대학교" + }, + { + "stop_nm": "서울자동차학원", + "ycode": "37.5469045098", + "stop_no": "16905", + "xcode": "126.8215963672", + "stop_type": "마을버스", + "node_id": "115900192", + "nxtStn": "강서면허시험장.메이필드호텔" + }, + { + "stop_nm": "강서대학교", + "ycode": "37.5494011485", + "stop_no": "16907", + "xcode": "126.85131269", + "stop_type": "마을버스", + "node_id": "115900143", + "nxtStn": "백연공원" + }, + { + "stop_nm": "백연공원", + "ycode": "37.551068", + "stop_no": "16908", + "xcode": "126.852444", + "stop_type": "마을버스", + "node_id": "115900278", + "nxtStn": "하나마트" + }, + { + "stop_nm": "하나마트", + "ycode": "37.552447", + "stop_no": "16909", + "xcode": "126.853192", + "stop_type": "마을버스", + "node_id": "115900279", + "nxtStn": "화곡보람2차아파트" + }, + { + "stop_nm": "강서구청후문", + "ycode": "37.5504558566", + "stop_no": "16910", + "xcode": "126.8502252218", + "stop_type": "마을버스", + "node_id": "115900142", + "nxtStn": "강서아파트" + }, + { + "stop_nm": "화곡보람2차아파트", + "ycode": "37.553886", + "stop_no": "16911", + "xcode": "126.854029", + "stop_type": "마을버스", + "node_id": "115900280", + "nxtStn": "등촌중학교.한국임업진흥원" + }, + { + "stop_nm": "강서아파트", + "ycode": "37.5515729471", + "stop_no": "16912", + "xcode": "126.850726634", + "stop_type": "마을버스", + "node_id": "115900141", + "nxtStn": "황제참치" + }, + { + "stop_nm": "개화동상사마을종점(가상)", + "ycode": "37.5825740387", + "stop_no": "16913", + "xcode": "126.7985207144", + "stop_type": "가상정류장", + "node_id": "115000338", + "nxtStn": "일산IC(가상)" + }, + { + "stop_nm": "본동사무소", + "ycode": "37.542748", + "stop_no": "16914", + "xcode": "126.847717", + "stop_type": "마을버스", + "node_id": "115900140", + "nxtStn": "화곡초교" + }, + { + "stop_nm": "황제참치", + "ycode": "37.5527741489", + "stop_no": "16915", + "xcode": "126.8514757606", + "stop_type": "마을버스", + "node_id": "115900139", + "nxtStn": "콘티넨탈호텔" + }, + { + "stop_nm": "청과시장2", + "ycode": "37.551853645", + "stop_no": "16917", + "xcode": "126.8212167365", + "stop_type": "마을버스", + "node_id": "115900137", + "nxtStn": "강서면허시험장" + }, + { + "stop_nm": "콘티넨탈호텔", + "ycode": "37.5540907066", + "stop_no": "16918", + "xcode": "126.8522416609", + "stop_type": "마을버스", + "node_id": "115900183", + "nxtStn": "하이웨이주유소" + }, + { + "stop_nm": "강서면허시험장", + "ycode": "37.549503", + "stop_no": "16920", + "xcode": "126.819099", + "stop_type": "마을버스", + "node_id": "115900205", + "nxtStn": "수명산파크7단지상가" + }, + { + "stop_nm": "등촌역1번출구", + "ycode": "37.552202", + "stop_no": "16921", + "xcode": "126.862807", + "stop_type": "마을버스", + "node_id": "115900281", + "nxtStn": "하이웨이주유소" + }, + { + "stop_nm": "발산역3번출구", + "ycode": "37.5592460652", + "stop_no": "16922", + "xcode": "126.8386304653", + "stop_type": "마을버스", + "node_id": "115900135", + "nxtStn": "서울호서전문학교.등촌주공3단지아파트" + }, + { + "stop_nm": "수명산파크7단지상가", + "ycode": "37.5473830524", + "stop_no": "16923", + "xcode": "126.8222346535", + "stop_type": "마을버스", + "node_id": "115900134", + "nxtStn": "수명산파크7단지정문" + }, + { + "stop_nm": "수명산파크7단지정문", + "ycode": "37.5478510746", + "stop_no": "16925", + "xcode": "126.8242774574", + "stop_type": "마을버스", + "node_id": "115900132", + "nxtStn": "수명중.고등학교" + }, + { + "stop_nm": "수명중.고등학교", + "ycode": "37.5500676051", + "stop_no": "16927", + "xcode": "126.8241692626", + "stop_type": "마을버스", + "node_id": "115900131", + "nxtStn": "마곡수명산파크5단지.6단지" + }, + { + "stop_nm": "기업은행", + "ycode": "37.5660884052", + "stop_no": "16928", + "xcode": "126.8408606746", + "stop_type": "마을버스", + "node_id": "115900130", + "nxtStn": "양천초등학교.겸재정선미술관" + }, + { + "stop_nm": "마곡수명산파크5단지.6단지", + "ycode": "37.551408453", + "stop_no": "16929", + "xcode": "126.8253974999", + "stop_type": "마을버스", + "node_id": "115900194", + "nxtStn": "수명산파크상가" + }, + { + "stop_nm": "김포공항국내선(11-2번홈)", + "ycode": "37.5598552139", + "stop_no": "16930", + "xcode": "126.802733172", + "stop_type": "일반차로", + "node_id": "115507770", + "nxtStn": "개화IC(경유)" + }, + { + "stop_nm": "수명산파크상가", + "ycode": "37.553341", + "stop_no": "16931", + "xcode": "126.826193", + "stop_type": "마을버스", + "node_id": "115900129", + "nxtStn": "수명산파크5단지아파트" + }, + { + "stop_nm": "변전소", + "ycode": "37.5707078403", + "stop_no": "16932", + "xcode": "126.8378902625", + "stop_type": "마을버스", + "node_id": "115900128", + "nxtStn": "겸재정선미술관입구" + }, + { + "stop_nm": "수명산파크5단지아파트", + "ycode": "37.553482", + "stop_no": "16933", + "xcode": "126.828134", + "stop_type": "마을버스", + "node_id": "115900127", + "nxtStn": "수명산파크1단지아파트앞" + }, + { + "stop_nm": "김포공항국내선(11-3번홈)", + "ycode": "37.5600161723", + "stop_no": "16934", + "xcode": "126.8026139532", + "stop_type": "일반차로", + "node_id": "115507760", + "nxtStn": "오쇠삼거리(경유)" + }, + { + "stop_nm": "수명산파크1단지아파트앞", + "ycode": "37.5532575299", + "stop_no": "16935", + "xcode": "126.8297393667", + "stop_type": "마을버스", + "node_id": "115900126", + "nxtStn": "수명산근린공원" + }, + { + "stop_nm": "방화대교(가상)", + "ycode": "37.5835477465", + "stop_no": "16936", + "xcode": "126.820437898", + "stop_type": "가상정류장", + "node_id": "115000907", + "nxtStn": "마곡철교(가상)" + }, + { + "stop_nm": "수명산근린공원", + "ycode": "37.5515820854", + "stop_no": "16937", + "xcode": "126.830921692", + "stop_type": "마을버스", + "node_id": "115900125", + "nxtStn": "발산초등학교" + }, + { + "stop_nm": "방화대교(가상)", + "ycode": "37.5842449257", + "stop_no": "16938", + "xcode": "126.8217039006", + "stop_type": "가상정류장", + "node_id": "115000906", + "nxtStn": "김포공항IC(가상)" + }, + { + "stop_nm": "발산초등학교", + "ycode": "37.5496273238", + "stop_no": "16939", + "xcode": "126.8318357277", + "stop_type": "마을버스", + "node_id": "115900193", + "nxtStn": "화곡중.고등학교" + }, + { + "stop_nm": "변전소", + "ycode": "37.5707472783", + "stop_no": "16940", + "xcode": "126.8377373459", + "stop_type": "마을버스", + "node_id": "115900213", + "nxtStn": "양천초등학교.겸재정선미술관" + }, + { + "stop_nm": "화곡중.고등학교", + "ycode": "37.5478756223", + "stop_no": "16941", + "xcode": "126.8331241842", + "stop_type": "마을버스", + "node_id": "115900124", + "nxtStn": "송화시장" + }, + { + "stop_nm": "마곡철교(가상)", + "ycode": "37.5774689006", + "stop_no": "16942", + "xcode": "126.8368632901", + "stop_type": "가상정류장", + "node_id": "115000905", + "nxtStn": "가양대교(가상)" + }, + { + "stop_nm": "송화시장", + "ycode": "37.5478714943", + "stop_no": "16943", + "xcode": "126.8353186306", + "stop_type": "마을버스", + "node_id": "115900195", + "nxtStn": "우장산역1번출구" + }, + { + "stop_nm": "마곡철교(가상)", + "ycode": "37.5777606756", + "stop_no": "16944", + "xcode": "126.8370995698", + "stop_type": "가상정류장", + "node_id": "115000904", + "nxtStn": "방화대교(가상)" + }, + { + "stop_nm": "우장산월드메르디앙아파트", + "ycode": "37.5546252214", + "stop_no": "16946", + "xcode": "126.8379443491", + "stop_type": "마을버스", + "node_id": "115900200", + "nxtStn": "강서노인회관" + }, + { + "stop_nm": "강서노인회관", + "ycode": "37.5544705711", + "stop_no": "16948", + "xcode": "126.8395111456", + "stop_type": "마을버스", + "node_id": "115900199", + "nxtStn": "롯데1차" + }, + { + "stop_nm": "롯데1차", + "ycode": "37.5543709679", + "stop_no": "16950", + "xcode": "126.8404847373", + "stop_type": "마을버스", + "node_id": "115900121", + "nxtStn": "발산어린이집" + }, + { + "stop_nm": "김포공항국제선(1경기)", + "ycode": "37.5652767853", + "stop_no": "16951", + "xcode": "126.8013316631", + "stop_type": "일반차로", + "node_id": "115507730", + "nxtStn": "김포공항국내선(12번홈)" + }, + { + "stop_nm": "발산어린이집", + "ycode": "37.5542696867", + "stop_no": "16952", + "xcode": "126.8415567994", + "stop_type": "마을버스", + "node_id": "115900163", + "nxtStn": "강서구민회관" + }, + { + "stop_nm": "강서구민회관", + "ycode": "37.5528837238", + "stop_no": "16954", + "xcode": "126.8442047794", + "stop_type": "마을버스", + "node_id": "115900161", + "nxtStn": "롯데3차APT" + }, + { + "stop_nm": "방화3동주민센터", + "ycode": "37.578386307", + "stop_no": "16955", + "xcode": "126.8136547657", + "stop_type": "마을버스", + "node_id": "115900160", + "nxtStn": "방화동삼익아파트" + }, + { + "stop_nm": "롯데3차APT", + "ycode": "37.5527406972", + "stop_no": "16956", + "xcode": "126.8464573797", + "stop_type": "마을버스", + "node_id": "115900159", + "nxtStn": "공영주차장" + }, + { + "stop_nm": "방화동삼익아파트", + "ycode": "37.5768069244", + "stop_no": "16957", + "xcode": "126.8132284757", + "stop_type": "마을버스", + "node_id": "115900158", + "nxtStn": "정곡초교" + }, + { + "stop_nm": "공영주차장", + "ycode": "37.5531867241", + "stop_no": "16958", + "xcode": "126.8478384134", + "stop_type": "마을버스", + "node_id": "115900157", + "nxtStn": "강서구청입구" + }, + { + "stop_nm": "방화중학교(시외버스)", + "ycode": "37.5638654303", + "stop_no": "16959", + "xcode": "126.8066857249", + "stop_type": "일반차로", + "node_id": "115505500", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "강서구청입구", + "ycode": "37.5530951235", + "stop_no": "16960", + "xcode": "126.8498215069", + "stop_type": "마을버스", + "node_id": "115900156", + "nxtStn": "경복비즈니스고등학교" + }, + { + "stop_nm": "서광아파트", + "ycode": "37.5788326481", + "stop_no": "16961", + "xcode": "126.8196509419", + "stop_type": "마을버스", + "node_id": "115900155", + "nxtStn": "생태공원" + }, + { + "stop_nm": "생태공원", + "ycode": "37.5834824238", + "stop_no": "16962", + "xcode": "126.8185765185", + "stop_type": "마을버스", + "node_id": "115900204", + "nxtStn": "종점" + }, + { + "stop_nm": "등촌7단지", + "ycode": "37.561276", + "stop_no": "16963", + "xcode": "126.8532", + "stop_type": "마을버스", + "node_id": "115900154", + "nxtStn": "등촌동주공8단지" + }, + { + "stop_nm": "등촌10단지", + "ycode": "37.5615336843", + "stop_no": "16964", + "xcode": "126.8486443616", + "stop_type": "마을버스", + "node_id": "115900153", + "nxtStn": "등촌미주.진로아파트" + }, + { + "stop_nm": "등촌미주.진로아파트", + "ycode": "37.5599069591", + "stop_no": "16965", + "xcode": "126.8477466451", + "stop_type": "마을버스", + "node_id": "115900152", + "nxtStn": "등촌3동성당사거리" + }, + { + "stop_nm": "등촌3동성당사거리", + "ycode": "37.5589634783", + "stop_no": "16966", + "xcode": "126.8456364312", + "stop_type": "마을버스", + "node_id": "115900171", + "nxtStn": "등촌5단지" + }, + { + "stop_nm": "등촌5단지", + "ycode": "37.5591423356", + "stop_no": "16967", + "xcode": "126.8439155633", + "stop_type": "마을버스", + "node_id": "115900151", + "nxtStn": "원당근린공원앞" + }, + { + "stop_nm": "공원앞", + "ycode": "37.5593503403", + "stop_no": "16968", + "xcode": "126.8417735551", + "stop_type": "마을버스", + "node_id": "115900189", + "nxtStn": "발산역.NC백화점" + }, + { + "stop_nm": "발산역.NC백화점", + "ycode": "37.5597454044", + "stop_no": "16969", + "xcode": "126.8394594755", + "stop_type": "마을버스", + "node_id": "115900190", + "nxtStn": "NC백화점앞" + }, + { + "stop_nm": "동우아트빌", + "ycode": "37.5366514124", + "stop_no": "16970", + "xcode": "126.8560381111", + "stop_type": "마을버스", + "node_id": "115900150", + "nxtStn": "미주아파트" + }, + { + "stop_nm": "태창아파트", + "ycode": "37.537744", + "stop_no": "16971", + "xcode": "126.850788", + "stop_type": "마을버스", + "node_id": "115900149", + "nxtStn": "삼거리" + }, + { + "stop_nm": "김포공항역3번출구", + "ycode": "37.562495", + "stop_no": "16972", + "xcode": "126.80188", + "stop_type": "일반차로", + "node_id": "115000948", + "nxtStn": "김포공항입구(경유)" + }, + { + "stop_nm": "강서농수산물도매시장", + "ycode": "37.553498", + "stop_no": "16975", + "xcode": "126.818103", + "stop_type": "마을버스", + "node_id": "115900201", + "nxtStn": "강서농수산물도매시장종점" + }, + { + "stop_nm": "강서농수산물도매시장종점", + "ycode": "37.5545167694", + "stop_no": "16976", + "xcode": "126.8226727076", + "stop_type": "마을버스", + "node_id": "115900148", + "nxtStn": "청과시장2" + }, + { + "stop_nm": "등촌동주공9단지", + "ycode": "37.5629182758", + "stop_no": "16977", + "xcode": "126.8497520174", + "stop_type": "마을버스", + "node_id": "115900172", + "nxtStn": "등촌10단지" + }, + { + "stop_nm": "등촌주공9단지", + "ycode": "37.562737", + "stop_no": "16978", + "xcode": "126.849984", + "stop_type": "마을버스", + "node_id": "115900173", + "nxtStn": "등촌주공8단지" + }, + { + "stop_nm": "등촌동주공8단지", + "ycode": "37.5621012565", + "stop_no": "16979", + "xcode": "126.8513904609", + "stop_type": "마을버스", + "node_id": "115900174", + "nxtStn": "등촌동주공9단지" + }, + { + "stop_nm": "화훼단지", + "ycode": "37.5562932237", + "stop_no": "16980", + "xcode": "126.769200409", + "stop_type": "일반차로", + "node_id": "115000583", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "화훼단지", + "ycode": "37.5563989076", + "stop_no": "16981", + "xcode": "126.7688707105", + "stop_type": "일반차로", + "node_id": "115000582", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "국립항공박물관", + "ycode": "37.5563306325", + "stop_no": "16983", + "xcode": "126.8076813957", + "stop_type": "일반차로", + "node_id": "115000580", + "nxtStn": "방화중학교" + }, + { + "stop_nm": "등촌주공8단지", + "ycode": "37.5616236673", + "stop_no": "16986", + "xcode": "126.852100007", + "stop_type": "마을버스", + "node_id": "115900147", + "nxtStn": "등촌7단지아파트" + }, + { + "stop_nm": "대한항공화물청사", + "ycode": "37.5514321709", + "stop_no": "16987", + "xcode": "126.8132205142", + "stop_type": "일반차로", + "node_id": "115000574", + "nxtStn": "대한항공" + }, + { + "stop_nm": "대한항공훈련센터", + "ycode": "37.5462877526", + "stop_no": "16988", + "xcode": "126.8131745021", + "stop_type": "일반차로", + "node_id": "115000573", + "nxtStn": "대한항공빌딩" + }, + { + "stop_nm": "가양대교(가상)", + "ycode": "37.5654563252", + "stop_no": "16989", + "xcode": "126.8585762117", + "stop_type": "가상정류장", + "node_id": "115000903", + "nxtStn": "성산대교(가상)" + }, + { + "stop_nm": "가양대교(가상)", + "ycode": "37.5658687821", + "stop_no": "16990", + "xcode": "126.8585869405", + "stop_type": "가상정류장", + "node_id": "115000902", + "nxtStn": "마곡철교(가상)" + }, + { + "stop_nm": "김포공항화물청사", + "ycode": "37.5534204714", + "stop_no": "16992", + "xcode": "126.8112608986", + "stop_type": "일반차로", + "node_id": "115000572", + "nxtStn": "국립항공박물관" + }, + { + "stop_nm": "김포공항세관.국립항공박물관", + "ycode": "37.5556608484", + "stop_no": "16993", + "xcode": "126.8080679474", + "stop_type": "일반차로", + "node_id": "115000571", + "nxtStn": "대한항공화물청사" + }, + { + "stop_nm": "강원슈퍼", + "ycode": "37.5355160159", + "stop_no": "16994", + "xcode": "126.8570263026", + "stop_type": "마을버스", + "node_id": "115900146", + "nxtStn": "화곡보람3차아파트" + }, + { + "stop_nm": "대한항공빌딩", + "ycode": "37.5507341466", + "stop_no": "16995", + "xcode": "126.8145690738", + "stop_type": "일반차로", + "node_id": "115000568", + "nxtStn": "김포공항화물청사" + }, + { + "stop_nm": "대한항공", + "ycode": "37.5495780042", + "stop_no": "16996", + "xcode": "126.8168535705", + "stop_type": "일반차로", + "node_id": "115000563", + "nxtStn": "공항동송정중학교" + }, + { + "stop_nm": "김포공항국제선", + "ycode": "37.564885922", + "stop_no": "16997", + "xcode": "126.800809711", + "stop_type": "일반차로", + "node_id": "115000562", + "nxtStn": "한국공항공사" + }, + { + "stop_nm": "신도림역", + "ycode": "37.5097162979", + "stop_no": "17001", + "xcode": "126.8891800847", + "stop_type": "중앙차로", + "node_id": "116000001", + "nxtStn": "신도림동.구로역" + }, + { + "stop_nm": "신도림역", + "ycode": "37.509108047", + "stop_no": "17002", + "xcode": "126.8884638807", + "stop_type": "중앙차로", + "node_id": "116000002", + "nxtStn": "문래동남성아파트" + }, + { + "stop_nm": "신도림동.구로역", + "ycode": "37.506145", + "stop_no": "17003", + "xcode": "126.884125", + "stop_type": "중앙차로", + "node_id": "116000003", + "nxtStn": "구로역.구로기계공구상가" + }, + { + "stop_nm": "신도림동.구로역", + "ycode": "37.5053435935", + "stop_no": "17004", + "xcode": "126.883227988", + "stop_type": "중앙차로", + "node_id": "116000004", + "nxtStn": "신도림역" + }, + { + "stop_nm": "구일역.중앙유통상가", + "ycode": "37.499883", + "stop_no": "17005", + "xcode": "126.874701", + "stop_type": "중앙차로", + "node_id": "116000005", + "nxtStn": "구로주공.구일우성APT" + }, + { + "stop_nm": "구일역.제일제당", + "ycode": "37.49971", + "stop_no": "17006", + "xcode": "126.87453", + "stop_type": "중앙차로", + "node_id": "116000006", + "nxtStn": "구로역·NC신구로점" + }, + { + "stop_nm": "동양미래대학.구로성심병원", + "ycode": "37.4996343963", + "stop_no": "17007", + "xcode": "126.8679976691", + "stop_type": "중앙차로", + "node_id": "116000007", + "nxtStn": "개봉역.영화아파트" + }, + { + "stop_nm": "동양미래대학.구로성심병원", + "ycode": "37.4993764843", + "stop_no": "17008", + "xcode": "126.8670186731", + "stop_type": "중앙차로", + "node_id": "116000008", + "nxtStn": "구일역.제일제당" + }, + { + "stop_nm": "개봉역.영화아파트", + "ycode": "37.4969418239", + "stop_no": "17009", + "xcode": "126.8602005359", + "stop_type": "중앙차로", + "node_id": "116000009", + "nxtStn": "경인중학교.개봉사거리" + }, + { + "stop_nm": "개봉역.한마을아파트", + "ycode": "37.4964773551", + "stop_no": "17010", + "xcode": "126.8620566339", + "stop_type": "중앙차로", + "node_id": "116000010", + "nxtStn": "동양미래대학.구로성심병원" + }, + { + "stop_nm": "경인중학교.개봉사거리", + "ycode": "37.4974485938", + "stop_no": "17011", + "xcode": "126.8554373749", + "stop_type": "중앙차로", + "node_id": "116000011", + "nxtStn": "개봉1동사거리.개봉푸르지오아파트" + }, + { + "stop_nm": "경인중학교.개봉사거리", + "ycode": "37.4973068647", + "stop_no": "17012", + "xcode": "126.8551547189", + "stop_type": "중앙차로", + "node_id": "116000012", + "nxtStn": "개봉역.한마을아파트" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.4830994287", + "stop_no": "17013", + "xcode": "126.9015481288", + "stop_type": "중앙차로", + "node_id": "116000013", + "nxtStn": "문성초등학교" + }, + { + "stop_nm": "신도림역", + "ycode": "37.506549", + "stop_no": "17101", + "xcode": "126.892103", + "stop_type": "일반차로", + "node_id": "116000015", + "nxtStn": "대림동코오롱아파트" + }, + { + "stop_nm": "신도림역", + "ycode": "37.5070158798", + "stop_no": "17102", + "xcode": "126.8915707873", + "stop_type": "일반차로", + "node_id": "116000016", + "nxtStn": "서울미래초등학교" + }, + { + "stop_nm": "서울미래초등학교", + "ycode": "37.505102", + "stop_no": "17103", + "xcode": "126.889452", + "stop_type": "일반차로", + "node_id": "116000017", + "nxtStn": "신도림역" + }, + { + "stop_nm": "서울미래초등학교", + "ycode": "37.5052539407", + "stop_no": "17104", + "xcode": "126.8893190662", + "stop_type": "일반차로", + "node_id": "116000018", + "nxtStn": "거리공원.구로신협본점앞" + }, + { + "stop_nm": "한국SGI", + "ycode": "37.502477", + "stop_no": "17105", + "xcode": "126.889783", + "stop_type": "일반차로", + "node_id": "116000019", + "nxtStn": "신도림역" + }, + { + "stop_nm": "거리공원.구로신협본점앞", + "ycode": "37.502787", + "stop_no": "17106", + "xcode": "126.888566", + "stop_type": "일반차로", + "node_id": "116000020", + "nxtStn": "구로보건소.금호새솔아파트" + }, + { + "stop_nm": "거리공원", + "ycode": "37.499974", + "stop_no": "17107", + "xcode": "126.891835", + "stop_type": "일반차로", + "node_id": "116000021", + "nxtStn": "한국SGI" + }, + { + "stop_nm": "구로도서관.대성스카이렉스", + "ycode": "37.499565", + "stop_no": "17108", + "xcode": "126.891075", + "stop_type": "일반차로", + "node_id": "116000022", + "nxtStn": "대림역" + }, + { + "stop_nm": "구로고등학교", + "ycode": "37.496567", + "stop_no": "17109", + "xcode": "126.891578", + "stop_type": "일반차로", + "node_id": "116000023", + "nxtStn": "거리공원" + }, + { + "stop_nm": "영림중학교", + "ycode": "37.496915", + "stop_no": "17110", + "xcode": "126.891622", + "stop_type": "일반차로", + "node_id": "116000024", + "nxtStn": "국민은행.구로구민회관.구로아트밸리" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4945619511", + "stop_no": "17111", + "xcode": "126.8879268367", + "stop_type": "일반차로", + "node_id": "116000025", + "nxtStn": "구로고등학교" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4947508763", + "stop_no": "17112", + "xcode": "126.8876042378", + "stop_type": "일반차로", + "node_id": "116000026", + "nxtStn": "구로고대병원정문" + }, + { + "stop_nm": "고대구로병원후문", + "ycode": "37.493233", + "stop_no": "17113", + "xcode": "126.884567", + "stop_type": "일반차로", + "node_id": "116000027", + "nxtStn": "구로구청" + }, + { + "stop_nm": "대림역", + "ycode": "37.490945", + "stop_no": "17114", + "xcode": "126.893978", + "stop_type": "일반차로", + "node_id": "116000028", + "nxtStn": "대림역12번출구" + }, + { + "stop_nm": "대림역", + "ycode": "37.491138", + "stop_no": "17115", + "xcode": "126.893798", + "stop_type": "일반차로", + "node_id": "116000029", + "nxtStn": "구로중학교" + }, + { + "stop_nm": "영서중학교", + "ycode": "37.489831", + "stop_no": "17116", + "xcode": "126.892204", + "stop_type": "일반차로", + "node_id": "116000030", + "nxtStn": "대림역" + }, + { + "stop_nm": "영서중학교", + "ycode": "37.490202", + "stop_no": "17117", + "xcode": "126.89234", + "stop_type": "일반차로", + "node_id": "116000031", + "nxtStn": "구로두산아파트" + }, + { + "stop_nm": "구로두산아파트", + "ycode": "37.488807", + "stop_no": "17118", + "xcode": "126.890072", + "stop_type": "일반차로", + "node_id": "116000032", + "nxtStn": "남구로역6번출구" + }, + { + "stop_nm": "구로종합사회복지관", + "ycode": "37.487893", + "stop_no": "17119", + "xcode": "126.889168", + "stop_type": "일반차로", + "node_id": "116000033", + "nxtStn": "영서중학교" + }, + { + "stop_nm": "남구로역", + "ycode": "37.485278", + "stop_no": "17120", + "xcode": "126.886787", + "stop_type": "일반차로", + "node_id": "116000034", + "nxtStn": "구로종합사회복지관" + }, + { + "stop_nm": "남구로역", + "ycode": "37.48531", + "stop_no": "17121", + "xcode": "126.886453", + "stop_type": "일반차로", + "node_id": "116000035", + "nxtStn": "남구로역" + }, + { + "stop_nm": "한국산업단지공단.이마트구로점", + "ycode": "37.484138", + "stop_no": "17122", + "xcode": "126.896751", + "stop_type": "일반차로", + "node_id": "116000036", + "nxtStn": "에이스테크노타워" + }, + { + "stop_nm": "고용노동부관악지청.이마트구로점", + "ycode": "37.48365", + "stop_no": "17123", + "xcode": "126.89805", + "stop_type": "일반차로", + "node_id": "116000037", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "디지털산업1단지", + "ycode": "37.483846", + "stop_no": "17124", + "xcode": "126.895035", + "stop_type": "일반차로", + "node_id": "116000038", + "nxtStn": "고용노동부관악지청.이마트구로점" + }, + { + "stop_nm": "디지털산업1단지", + "ycode": "37.483965", + "stop_no": "17125", + "xcode": "126.894763", + "stop_type": "일반차로", + "node_id": "116000039", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "하이엔드1차·보건지소·치매센터", + "ycode": "37.481748", + "stop_no": "17126", + "xcode": "126.89293", + "stop_type": "일반차로", + "node_id": "116000040", + "nxtStn": "디지털산업1단지" + }, + { + "stop_nm": "지하이시티·보건지소·치매센터", + "ycode": "37.4816976566", + "stop_no": "17127", + "xcode": "126.8926352264", + "stop_type": "일반차로", + "node_id": "116000041", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.4798962168", + "stop_no": "17128", + "xcode": "126.8906988158", + "stop_type": "일반차로", + "node_id": "116000042", + "nxtStn": "한화비즈메트로" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.479933", + "stop_no": "17129", + "xcode": "126.890398", + "stop_type": "일반차로", + "node_id": "116000043", + "nxtStn": "패션단지" + }, + { + "stop_nm": "퀸즈빌", + "ycode": "37.487314", + "stop_no": "17130", + "xcode": "126.832802", + "stop_type": "일반차로", + "node_id": "116000044", + "nxtStn": "항동하버라인4단지.푸른수목원" + }, + { + "stop_nm": "가리봉시장", + "ycode": "37.48301", + "stop_no": "17131", + "xcode": "126.887123", + "stop_type": "일반차로", + "node_id": "116000045", + "nxtStn": "구로4동자치회관" + }, + { + "stop_nm": "가리봉시장", + "ycode": "37.4824285977", + "stop_no": "17132", + "xcode": "126.8869928718", + "stop_type": "일반차로", + "node_id": "116000046", + "nxtStn": "금천패션아울렛사거리.마리오" + }, + { + "stop_nm": "남구로역", + "ycode": "37.48418", + "stop_no": "17133", + "xcode": "126.886268", + "stop_type": "일반차로", + "node_id": "116000047", + "nxtStn": "가리봉시장" + }, + { + "stop_nm": "구로4동자치회관", + "ycode": "37.4860984011", + "stop_no": "17134", + "xcode": "126.8856450789", + "stop_type": "일반차로", + "node_id": "116000048", + "nxtStn": "구로시장" + }, + { + "stop_nm": "구로시장", + "ycode": "37.487987", + "stop_no": "17135", + "xcode": "126.88486", + "stop_type": "일반차로", + "node_id": "116000049", + "nxtStn": "구로4동우체국.고대구로병원정문" + }, + { + "stop_nm": "구로시장", + "ycode": "37.48798", + "stop_no": "17136", + "xcode": "126.88461", + "stop_type": "일반차로", + "node_id": "116000050", + "nxtStn": "남구로역" + }, + { + "stop_nm": "구로4동우체국.고대구로병원정문", + "ycode": "37.4902484188", + "stop_no": "17137", + "xcode": "126.8842398696", + "stop_type": "일반차로", + "node_id": "116000051", + "nxtStn": "구로119안전센터" + }, + { + "stop_nm": "구로4동우체국.고대구로병원정문", + "ycode": "37.4899022236", + "stop_no": "17138", + "xcode": "126.8840651203", + "stop_type": "일반차로", + "node_id": "116000052", + "nxtStn": "구로시장" + }, + { + "stop_nm": "구로119안전센터", + "ycode": "37.4937842571", + "stop_no": "17139", + "xcode": "126.8832312859", + "stop_type": "일반차로", + "node_id": "116000053", + "nxtStn": "우리유엔미아파트" + }, + { + "stop_nm": "구로119안전센터", + "ycode": "37.4938362491", + "stop_no": "17140", + "xcode": "126.8829563911", + "stop_type": "일반차로", + "node_id": "116000054", + "nxtStn": "구로4동우체국.고대구로병원정문" + }, + { + "stop_nm": "우리유앤미아파트", + "ycode": "37.4967741772", + "stop_no": "17141", + "xcode": "126.8823840611", + "stop_type": "일반차로", + "node_id": "116000055", + "nxtStn": "구로119안전센터" + }, + { + "stop_nm": "구로변전소.구로초등학교", + "ycode": "37.4977886895", + "stop_no": "17142", + "xcode": "126.8840766793", + "stop_type": "일반차로", + "node_id": "116000056", + "nxtStn": "구로역.나인스애비뉴" + }, + { + "stop_nm": "쌍용구로정비사업소", + "ycode": "37.4995738531", + "stop_no": "17143", + "xcode": "126.8823344295", + "stop_type": "일반차로", + "node_id": "116000057", + "nxtStn": "우리유앤미아파트" + }, + { + "stop_nm": "구로역·NC신구로점", + "ycode": "37.5000384326", + "stop_no": "17144", + "xcode": "126.8828494432", + "stop_type": "일반차로", + "node_id": "116000058", + "nxtStn": "항아리" + }, + { + "stop_nm": "구로역·NC신구로점", + "ycode": "37.500848", + "stop_no": "17145", + "xcode": "126.88258", + "stop_type": "일반차로", + "node_id": "116000059", + "nxtStn": "구로역.구로기계공구상가" + }, + { + "stop_nm": "구로역.구로기계공구상가", + "ycode": "37.5035680895", + "stop_no": "17146", + "xcode": "126.8793093405", + "stop_type": "일반차로", + "node_id": "116000060", + "nxtStn": "미성아파트" + }, + { + "stop_nm": "구로역.구로기계공구상가", + "ycode": "37.5034172875", + "stop_no": "17147", + "xcode": "126.8789985402", + "stop_type": "일반차로", + "node_id": "116000061", + "nxtStn": "구로역·NC신구로점" + }, + { + "stop_nm": "기업은행구로중앙지점", + "ycode": "37.5051655805", + "stop_no": "17148", + "xcode": "126.8774020097", + "stop_type": "일반차로", + "node_id": "116000062", + "nxtStn": "갈산초등학교정문" + }, + { + "stop_nm": "기업은행구로중앙지점", + "ycode": "37.5048734598", + "stop_no": "17149", + "xcode": "126.8772441351", + "stop_type": "일반차로", + "node_id": "116000063", + "nxtStn": "구로역.구로기계공구상가" + }, + { + "stop_nm": "두암빌라", + "ycode": "37.495086", + "stop_no": "17150", + "xcode": "126.825715", + "stop_type": "일반차로", + "node_id": "116000619", + "nxtStn": "우신고등학교" + }, + { + "stop_nm": "항동우남퍼스트빌", + "ycode": "37.476619", + "stop_no": "17151", + "xcode": "126.819012", + "stop_type": "일반차로", + "node_id": "116900306", + "nxtStn": "항동생활체육관" + }, + { + "stop_nm": "신도림중학교", + "ycode": "37.5064944251", + "stop_no": "17152", + "xcode": "126.8849526908", + "stop_type": "일반차로", + "node_id": "116000066", + "nxtStn": "신도림역" + }, + { + "stop_nm": "신도림중학교", + "ycode": "37.506772", + "stop_no": "17153", + "xcode": "126.884705", + "stop_type": "일반차로", + "node_id": "116000067", + "nxtStn": "구로역" + }, + { + "stop_nm": "구로역", + "ycode": "37.50455", + "stop_no": "17154", + "xcode": "126.882277", + "stop_type": "일반차로", + "node_id": "116000068", + "nxtStn": "신도림중학교" + }, + { + "stop_nm": "구로역", + "ycode": "37.5048451046", + "stop_no": "17155", + "xcode": "126.8821395273", + "stop_type": "일반차로", + "node_id": "116000069", + "nxtStn": "구로2동성당" + }, + { + "stop_nm": "초롱타운회전교차로", + "ycode": "37.495703", + "stop_no": "17156", + "xcode": "126.879839", + "stop_type": "일반차로", + "node_id": "116000618", + "nxtStn": "구로119안전센터" + }, + { + "stop_nm": "솔길공원", + "ycode": "37.489291", + "stop_no": "17157", + "xcode": "126.880367", + "stop_type": "일반차로", + "node_id": "116000616", + "nxtStn": "GS25" + }, + { + "stop_nm": "GS25", + "ycode": "37.492841", + "stop_no": "17158", + "xcode": "126.880194", + "stop_type": "일반차로", + "node_id": "116000617", + "nxtStn": "초롱타운아파트" + }, + { + "stop_nm": "한일유앤아이아파트", + "ycode": "37.4856462135", + "stop_no": "17159", + "xcode": "126.8760349245", + "stop_type": "일반차로", + "node_id": "117000928", + "nxtStn": "가산동종점" + }, + { + "stop_nm": "항동우남퍼스트빌", + "ycode": "37.476683", + "stop_no": "17160", + "xcode": "126.818752", + "stop_type": "일반차로", + "node_id": "116000627", + "nxtStn": "항동제일풍경채" + }, + { + "stop_nm": "구로SKV1지식산업센터", + "ycode": "37.4777467522", + "stop_no": "17161", + "xcode": "126.8172857213", + "stop_type": "일반차로", + "node_id": "116000645", + "nxtStn": "양지초교.부안초교" + }, + { + "stop_nm": "구로SKV1.제일풍경채포레스트", + "ycode": "37.477579", + "stop_no": "17162", + "xcode": "126.817092", + "stop_type": "일반차로", + "node_id": "116000649", + "nxtStn": "항동우남퍼스트빌" + }, + { + "stop_nm": "개봉사거리", + "ycode": "37.4972517923", + "stop_no": "17164", + "xcode": "126.8573774345", + "stop_type": "일반차로", + "node_id": "116000078", + "nxtStn": "개봉역.한마을아파트" + }, + { + "stop_nm": "경인중학교", + "ycode": "37.496893", + "stop_no": "17166", + "xcode": "126.8563", + "stop_type": "일반차로", + "node_id": "116000080", + "nxtStn": "현대아파트.개봉중앙시장" + }, + { + "stop_nm": "개봉치안센터", + "ycode": "37.4981960239", + "stop_no": "17168", + "xcode": "126.8518576272", + "stop_type": "일반차로", + "node_id": "116000082", + "nxtStn": "개봉1동사거리.개봉푸르지오아파트" + }, + { + "stop_nm": "오류1동주민센터.오류문화센터", + "ycode": "37.4968379665", + "stop_no": "17169", + "xcode": "126.8461421452", + "stop_type": "일반차로", + "node_id": "116000083", + "nxtStn": "경인중학교.개봉사거리" + }, + { + "stop_nm": "오류1동주민센터.오류문화센터", + "ycode": "37.4965241154", + "stop_no": "17170", + "xcode": "126.84458597", + "stop_type": "일반차로", + "node_id": "116000084", + "nxtStn": "오류동역" + }, + { + "stop_nm": "오류동역", + "ycode": "37.495698", + "stop_no": "17171", + "xcode": "126.843351", + "stop_type": "일반차로", + "node_id": "116000085", + "nxtStn": "오류1동주민센터.오류문화센터" + }, + { + "stop_nm": "오류동역", + "ycode": "37.4956023105", + "stop_no": "17172", + "xcode": "126.842536958", + "stop_type": "일반차로", + "node_id": "116000086", + "nxtStn": "오류동삼거리" + }, + { + "stop_nm": "씨티월드", + "ycode": "37.494463", + "stop_no": "17173", + "xcode": "126.840682", + "stop_type": "일반차로", + "node_id": "116000087", + "nxtStn": "오류동역" + }, + { + "stop_nm": "오류지구대.신오류주유소", + "ycode": "37.4942645442", + "stop_no": "17174", + "xcode": "126.8394647757", + "stop_type": "일반차로", + "node_id": "116000088", + "nxtStn": "연세중앙교회" + }, + { + "stop_nm": "서울가든빌라앞", + "ycode": "37.4911327081", + "stop_no": "17175", + "xcode": "126.8313415833", + "stop_type": "일반차로", + "node_id": "116000089", + "nxtStn": "동부그린아파트" + }, + { + "stop_nm": "서울가든빌라앞", + "ycode": "37.4915630038", + "stop_no": "17176", + "xcode": "126.8316708345", + "stop_type": "일반차로", + "node_id": "116000090", + "nxtStn": "럭비구장" + }, + { + "stop_nm": "성공회대학교유한공고앞", + "ycode": "37.4894827176", + "stop_no": "17177", + "xcode": "126.8251819712", + "stop_type": "가로변전일", + "node_id": "116000091", + "nxtStn": "럭비구장" + }, + { + "stop_nm": "영풍마드레빌아파트.소공원사거리", + "ycode": "37.4911309317", + "stop_no": "17178", + "xcode": "126.8395380549", + "stop_type": "일반차로", + "node_id": "116000647", + "nxtStn": "덕일전자공업고등학교" + }, + { + "stop_nm": "연세중앙교회", + "ycode": "37.4931082751", + "stop_no": "17179", + "xcode": "126.8354231175", + "stop_type": "일반차로", + "node_id": "116000093", + "nxtStn": "씨티월드" + }, + { + "stop_nm": "궁동청소년문화의집", + "ycode": "37.493319", + "stop_no": "17180", + "xcode": "126.832823", + "stop_type": "일반차로", + "node_id": "116000094", + "nxtStn": "우신고등학교" + }, + { + "stop_nm": "궁동청소년문화의집.구로검사소", + "ycode": "37.493133", + "stop_no": "17181", + "xcode": "126.833633", + "stop_type": "일반차로", + "node_id": "116000095", + "nxtStn": "연세중앙교회" + }, + { + "stop_nm": "우신고등학교", + "ycode": "37.4933", + "stop_no": "17182", + "xcode": "126.830847", + "stop_type": "일반차로", + "node_id": "116000096", + "nxtStn": "온수역" + }, + { + "stop_nm": "우신고등학교", + "ycode": "37.4930633974", + "stop_no": "17183", + "xcode": "126.8304506092", + "stop_type": "일반차로", + "node_id": "116000097", + "nxtStn": "궁동청소년문화의집.구로검사소" + }, + { + "stop_nm": "온수역", + "ycode": "37.4928265566", + "stop_no": "17184", + "xcode": "126.8238226092", + "stop_type": "일반차로", + "node_id": "116000098", + "nxtStn": "온수동종점" + }, + { + "stop_nm": "온수역", + "ycode": "37.492777021", + "stop_no": "17185", + "xcode": "126.8244009171", + "stop_type": "일반차로", + "node_id": "116000099", + "nxtStn": "우신고등학교" + }, + { + "stop_nm": "온수동새마을금고", + "ycode": "37.4960559471", + "stop_no": "17186", + "xcode": "126.8243871935", + "stop_type": "일반차로", + "node_id": "116000100", + "nxtStn": "온수초교후문" + }, + { + "stop_nm": "정진학교.온수힐스테이트아파트", + "ycode": "37.4969745872", + "stop_no": "17187", + "xcode": "126.8221461174", + "stop_type": "일반차로", + "node_id": "116000101", + "nxtStn": "우신중.고후문" + }, + { + "stop_nm": "수궁동주민센터", + "ycode": "37.494651", + "stop_no": "17188", + "xcode": "126.830866", + "stop_type": "일반차로", + "node_id": "116000102", + "nxtStn": "수궁119안전센터" + }, + { + "stop_nm": "수궁동주민센터", + "ycode": "37.494359", + "stop_no": "17189", + "xcode": "126.830852", + "stop_type": "일반차로", + "node_id": "116000103", + "nxtStn": "금강수목원아파트정문" + }, + { + "stop_nm": "수궁119안전센터", + "ycode": "37.496815", + "stop_no": "17190", + "xcode": "126.829596", + "stop_type": "일반차로", + "node_id": "116000104", + "nxtStn": "오류고등학교.수궁동복지회관" + }, + { + "stop_nm": "수궁119안전센터", + "ycode": "37.4967842434", + "stop_no": "17191", + "xcode": "126.8293338512", + "stop_type": "일반차로", + "node_id": "116000105", + "nxtStn": "수궁동주민센터" + }, + { + "stop_nm": "예림디자인고.오류고.서울공연예술고", + "ycode": "37.498605", + "stop_no": "17192", + "xcode": "126.829242", + "stop_type": "일반차로", + "node_id": "116000106", + "nxtStn": "원각사입구" + }, + { + "stop_nm": "예림디자인고.오류고.서울공연예술고", + "ycode": "37.4984", + "stop_no": "17193", + "xcode": "126.82904", + "stop_type": "일반차로", + "node_id": "116000107", + "nxtStn": "수궁119안전센터" + }, + { + "stop_nm": "서서울생활과학고.궁동도서관", + "ycode": "37.502837", + "stop_no": "17194", + "xcode": "126.828968", + "stop_type": "일반차로", + "node_id": "116000108", + "nxtStn": "예림디자인고.오류고.서울공연예술고" + }, + { + "stop_nm": "서서울생활과학고.궁동도서관", + "ycode": "37.502207", + "stop_no": "17195", + "xcode": "126.829187", + "stop_type": "일반차로", + "node_id": "116000177", + "nxtStn": "신정숲속마을아파트" + }, + { + "stop_nm": "오남중학교.삼미주택", + "ycode": "37.4885327485", + "stop_no": "17196", + "xcode": "126.8367978524", + "stop_type": "일반차로", + "node_id": "116000605", + "nxtStn": "금강수목원아파트정문.동도아트빌" + }, + { + "stop_nm": "오남중학교", + "ycode": "37.488103", + "stop_no": "17197", + "xcode": "126.837161", + "stop_type": "일반차로", + "node_id": "116000606", + "nxtStn": "오류2동주민센터" + }, + { + "stop_nm": "구로2동지하차도입구", + "ycode": "37.4902172822", + "stop_no": "17198", + "xcode": "126.8812188135", + "stop_type": "일반차로", + "node_id": "116000652", + "nxtStn": "가산디지털단지역1번출구" + }, + { + "stop_nm": "구로우체국.이펜하우스5단지후문", + "ycode": "37.481946", + "stop_no": "17201", + "xcode": "126.842284", + "stop_type": "일반차로", + "node_id": "116000111", + "nxtStn": "연지타운2단지" + }, + { + "stop_nm": "천왕역4번출구", + "ycode": "37.4859413996", + "stop_no": "17202", + "xcode": "126.8393714866", + "stop_type": "일반차로", + "node_id": "116900276", + "nxtStn": "천왕역3번출구" + }, + { + "stop_nm": "오류2동주민센터", + "ycode": "37.488647", + "stop_no": "17203", + "xcode": "126.839775", + "stop_type": "일반차로", + "node_id": "116000113", + "nxtStn": "오류2동새마을금고" + }, + { + "stop_nm": "오류2동주민센터", + "ycode": "37.488887", + "stop_no": "17204", + "xcode": "126.839681", + "stop_type": "일반차로", + "node_id": "116000114", + "nxtStn": "천왕역3번출구" + }, + { + "stop_nm": "오류2동새마을금고", + "ycode": "37.4905229687", + "stop_no": "17205", + "xcode": "126.8406511512", + "stop_type": "일반차로", + "node_id": "116000115", + "nxtStn": "오류동역.시장입구" + }, + { + "stop_nm": "오류2동새마을금고", + "ycode": "37.49062", + "stop_no": "17206", + "xcode": "126.840575", + "stop_type": "일반차로", + "node_id": "116000116", + "nxtStn": "오류2동주민센터" + }, + { + "stop_nm": "대원주유소", + "ycode": "37.4869343975", + "stop_no": "17207", + "xcode": "126.8565297879", + "stop_type": "일반차로", + "node_id": "116000117", + "nxtStn": "현대아파트.개봉중앙시장" + }, + { + "stop_nm": "대원주유소", + "ycode": "37.4873583985", + "stop_no": "17208", + "xcode": "126.8561852068", + "stop_type": "일반차로", + "node_id": "116000118", + "nxtStn": "개봉전화국" + }, + { + "stop_nm": "현대아파트.개봉중앙시장", + "ycode": "37.490752", + "stop_no": "17209", + "xcode": "126.856119", + "stop_type": "일반차로", + "node_id": "116000119", + "nxtStn": "개봉역" + }, + { + "stop_nm": "현대아파트.개봉중앙시장", + "ycode": "37.490533", + "stop_no": "17210", + "xcode": "126.855865", + "stop_type": "일반차로", + "node_id": "116000120", + "nxtStn": "대원주유소" + }, + { + "stop_nm": "덕의초등학교", + "ycode": "37.5063377311", + "stop_no": "17211", + "xcode": "126.8594403333", + "stop_type": "일반차로", + "node_id": "116000121", + "nxtStn": "고척시장" + }, + { + "stop_nm": "덕의초등학교", + "ycode": "37.5061580205", + "stop_no": "17212", + "xcode": "126.858358201", + "stop_type": "일반차로", + "node_id": "116000122", + "nxtStn": "양우아파트" + }, + { + "stop_nm": "고척근린공원", + "ycode": "37.5047224619", + "stop_no": "17213", + "xcode": "126.8552979346", + "stop_type": "일반차로", + "node_id": "116000123", + "nxtStn": "덕의초등학교" + }, + { + "stop_nm": "고척근린공원.고척도서관", + "ycode": "37.5046337292", + "stop_no": "17214", + "xcode": "126.854469381", + "stop_type": "일반차로", + "node_id": "116000124", + "nxtStn": "세곡초등학교" + }, + { + "stop_nm": "세곡초등학교", + "ycode": "37.5026683511", + "stop_no": "17215", + "xcode": "126.8498423009", + "stop_type": "일반차로", + "node_id": "116000125", + "nxtStn": "고척근린시장" + }, + { + "stop_nm": "세곡초등학교", + "ycode": "37.5031820473", + "stop_no": "17216", + "xcode": "126.8506070009", + "stop_type": "일반차로", + "node_id": "116000126", + "nxtStn": "개봉푸르지오아파트" + }, + { + "stop_nm": "개봉푸르지오아파트", + "ycode": "37.5021368312", + "stop_no": "17217", + "xcode": "126.8478312344", + "stop_type": "일반차로", + "node_id": "116000127", + "nxtStn": "개봉1치안센터" + }, + { + "stop_nm": "개봉푸르지오아파트", + "ycode": "37.5019938418", + "stop_no": "17218", + "xcode": "126.8480532092", + "stop_type": "일반차로", + "node_id": "116000128", + "nxtStn": "세곡초등학교" + }, + { + "stop_nm": "고척근린시장", + "ycode": "37.5011232856", + "stop_no": "17219", + "xcode": "126.8508090334", + "stop_type": "일반차로", + "node_id": "116000129", + "nxtStn": "용두연립" + }, + { + "stop_nm": "용두연립", + "ycode": "37.4990015306", + "stop_no": "17220", + "xcode": "126.8517949619", + "stop_type": "일반차로", + "node_id": "116000130", + "nxtStn": "개봉사거리" + }, + { + "stop_nm": "우리유엔미아파트", + "ycode": "37.497217", + "stop_no": "17221", + "xcode": "126.882629", + "stop_type": "일반차로", + "node_id": "116000622", + "nxtStn": "구로2동성당" + }, + { + "stop_nm": "쌍용구로정비사업소", + "ycode": "37.4998375728", + "stop_no": "17222", + "xcode": "126.8825792166", + "stop_type": "일반차로", + "node_id": "116000621", + "nxtStn": "신도림동.구로역" + }, + { + "stop_nm": "고척파크푸르지오아파트", + "ycode": "37.507543", + "stop_no": "17223", + "xcode": "126.859315", + "stop_type": "일반차로", + "node_id": "116000133", + "nxtStn": "고척시장" + }, + { + "stop_nm": "고척시장", + "ycode": "37.503852", + "stop_no": "17225", + "xcode": "126.861938", + "stop_type": "일반차로", + "node_id": "116000134", + "nxtStn": "덕의초등학교" + }, + { + "stop_nm": "고척시장", + "ycode": "37.503137", + "stop_no": "17226", + "xcode": "126.86199", + "stop_type": "일반차로", + "node_id": "116000135", + "nxtStn": "고척중학교" + }, + { + "stop_nm": "고척중학교", + "ycode": "37.500468", + "stop_no": "17227", + "xcode": "126.863863", + "stop_type": "일반차로", + "node_id": "116000136", + "nxtStn": "고척시장" + }, + { + "stop_nm": "고척중학교", + "ycode": "37.500962", + "stop_no": "17228", + "xcode": "126.863243", + "stop_type": "일반차로", + "node_id": "116000137", + "nxtStn": "동양미래대학.구로성심병원" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.4834896886", + "stop_no": "17229", + "xcode": "126.9016459933", + "stop_type": "일반차로", + "node_id": "116000138", + "nxtStn": "모두의학교.금천문화예술정보학교" + }, + { + "stop_nm": "삼부르네상스.효성아파트", + "ycode": "37.478747", + "stop_no": "17230", + "xcode": "126.894635", + "stop_type": "일반차로", + "node_id": "116000139", + "nxtStn": "금천패션아울렛사거리.마리오" + }, + { + "stop_nm": "구일우성아파트", + "ycode": "37.489495", + "stop_no": "17231", + "xcode": "126.8757", + "stop_type": "일반차로", + "node_id": "116000140", + "nxtStn": "디지털단지입구" + }, + { + "stop_nm": "구일우성아파트", + "ycode": "37.49013", + "stop_no": "17232", + "xcode": "126.875812", + "stop_type": "일반차로", + "node_id": "116000141", + "nxtStn": "구로주공.구일우성APT" + }, + { + "stop_nm": "개봉역", + "ycode": "37.493978", + "stop_no": "17233", + "xcode": "126.85672", + "stop_type": "일반차로", + "node_id": "116000142", + "nxtStn": "개봉1동사거리.개봉푸르지오아파트" + }, + { + "stop_nm": "개봉역", + "ycode": "37.493481", + "stop_no": "17234", + "xcode": "126.857569", + "stop_type": "일반차로", + "node_id": "116000143", + "nxtStn": "철산리버빌아파트" + }, + { + "stop_nm": "개봉1동사거리.개봉푸르지오아파트", + "ycode": "37.501413", + "stop_no": "17235", + "xcode": "126.846791", + "stop_type": "일반차로", + "node_id": "116000144", + "nxtStn": "서부트럭터미널" + }, + { + "stop_nm": "개봉1동사거리", + "ycode": "37.5004695107", + "stop_no": "17236", + "xcode": "126.8469150982", + "stop_type": "일반차로", + "node_id": "116000145", + "nxtStn": "개봉고가" + }, + { + "stop_nm": "구로1동우체국", + "ycode": "37.491568", + "stop_no": "17237", + "xcode": "126.874502", + "stop_type": "일반차로", + "node_id": "116000146", + "nxtStn": "1호선구일역" + }, + { + "stop_nm": "구일우성아파트", + "ycode": "37.4887147629", + "stop_no": "17238", + "xcode": "126.8762607392", + "stop_type": "일반차로", + "node_id": "116000147", + "nxtStn": "가산디지털단지역입구" + }, + { + "stop_nm": "디지털단지입구", + "ycode": "37.486425", + "stop_no": "17239", + "xcode": "126.876458", + "stop_type": "일반차로", + "node_id": "116000148", + "nxtStn": "구로시장.남구로시장입구" + }, + { + "stop_nm": "구로보건소", + "ycode": "37.50023", + "stop_no": "17240", + "xcode": "126.889167", + "stop_type": "일반차로", + "node_id": "116000149", + "nxtStn": "구로고.구로도서관" + }, + { + "stop_nm": "궁동삼거리", + "ycode": "37.5064013211", + "stop_no": "17241", + "xcode": "126.8284511846", + "stop_type": "일반차로", + "node_id": "116000453", + "nxtStn": "까치울역3번출구" + }, + { + "stop_nm": "구일우성아파트", + "ycode": "37.4897430284", + "stop_no": "17242", + "xcode": "126.8758256916", + "stop_type": "일반차로", + "node_id": "116000151", + "nxtStn": "철산리버빌아파트" + }, + { + "stop_nm": "개봉역", + "ycode": "37.4934472423", + "stop_no": "17243", + "xcode": "126.8570002311", + "stop_type": "일반차로", + "node_id": "116000609", + "nxtStn": "개봉역.림괄아파트" + }, + { + "stop_nm": "웰크론", + "ycode": "37.4827320851", + "stop_no": "17244", + "xcode": "126.893697169", + "stop_type": "일반차로", + "node_id": "116000650", + "nxtStn": "구로남초등학교" + }, + { + "stop_nm": "남구로역", + "ycode": "37.484932", + "stop_no": "17245", + "xcode": "126.88737", + "stop_type": "일반차로", + "node_id": "116000153", + "nxtStn": "구로4동자치회관" + }, + { + "stop_nm": "개봉고가", + "ycode": "37.493655", + "stop_no": "17246", + "xcode": "126.855587", + "stop_type": "일반차로", + "node_id": "116000612", + "nxtStn": "개봉역입구" + }, + { + "stop_nm": "구로남초등학교", + "ycode": "37.48399", + "stop_no": "17247", + "xcode": "126.89101", + "stop_type": "일반차로", + "node_id": "116000155", + "nxtStn": "남구로역" + }, + { + "stop_nm": "연세중앙교회", + "ycode": "37.4933027885", + "stop_no": "17248", + "xcode": "126.8359813615", + "stop_type": "일반차로", + "node_id": "116000156", + "nxtStn": "궁동청소년문화의집" + }, + { + "stop_nm": "가리봉파출소", + "ycode": "37.479247", + "stop_no": "17249", + "xcode": "126.891739", + "stop_type": "일반차로", + "node_id": "116000648", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "동양빌라", + "ycode": "37.4951898369", + "stop_no": "17251", + "xcode": "126.8315970998", + "stop_type": "일반차로", + "node_id": "116000157", + "nxtStn": "궁동입구" + }, + { + "stop_nm": "남구로역6번출구", + "ycode": "37.487735", + "stop_no": "17252", + "xcode": "126.888568", + "stop_type": "일반차로", + "node_id": "116000158", + "nxtStn": "남구로역" + }, + { + "stop_nm": "궁동입구", + "ycode": "37.4934389034", + "stop_no": "17253", + "xcode": "126.8340799962", + "stop_type": "일반차로", + "node_id": "116000159", + "nxtStn": "연세중앙교회" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.504635", + "stop_no": "17254", + "xcode": "126.886618", + "stop_type": "일반차로", + "node_id": "116000160", + "nxtStn": "롯데아파트" + }, + { + "stop_nm": "롯데아파트", + "ycode": "37.502823", + "stop_no": "17255", + "xcode": "126.884727", + "stop_type": "일반차로", + "node_id": "116000161", + "nxtStn": "구로역" + }, + { + "stop_nm": "구로역·NC신구로점", + "ycode": "37.5021312873", + "stop_no": "17256", + "xcode": "126.8832785142", + "stop_type": "일반차로", + "node_id": "116000162", + "nxtStn": "롯데아파트" + }, + { + "stop_nm": "롯데아파트", + "ycode": "37.5027211681", + "stop_no": "17257", + "xcode": "126.8847503711", + "stop_type": "일반차로", + "node_id": "116000163", + "nxtStn": "제중병원" + }, + { + "stop_nm": "제중병원", + "ycode": "37.5036149757", + "stop_no": "17258", + "xcode": "126.8866148382", + "stop_type": "일반차로", + "node_id": "116000164", + "nxtStn": "서울미래초등학교" + }, + { + "stop_nm": "구로역", + "ycode": "37.5020712449", + "stop_no": "17259", + "xcode": "126.8827750112", + "stop_type": "일반차로", + "node_id": "116000586", + "nxtStn": "초롱타운회전교차로" + }, + { + "stop_nm": "구로중앙하이츠아파트.화원복지관", + "ycode": "37.498288", + "stop_no": "17260", + "xcode": "126.87982", + "stop_type": "일반차로", + "node_id": "116000584", + "nxtStn": "신동아미래지움아파트" + }, + { + "stop_nm": "신동아미래지움아파트", + "ycode": "37.50012", + "stop_no": "17261", + "xcode": "126.880378", + "stop_type": "일반차로", + "node_id": "116000585", + "nxtStn": "구로역·NC신구로점" + }, + { + "stop_nm": "초롱타운아파트", + "ycode": "37.4958292381", + "stop_no": "17262", + "xcode": "126.8800116763", + "stop_type": "일반차로", + "node_id": "116000596", + "nxtStn": "구로중앙하이츠아파트.화원복지관" + }, + { + "stop_nm": "한양수자인아파트앞", + "ycode": "37.478107", + "stop_no": "17267", + "xcode": "126.824632", + "stop_type": "일반차로", + "node_id": "116000653", + "nxtStn": "항동하버라인10단지" + }, + { + "stop_nm": "온수동종점", + "ycode": "37.491642", + "stop_no": "17289", + "xcode": "126.821273", + "stop_type": "일반차로", + "node_id": "116000194", + "nxtStn": "온수역" + }, + { + "stop_nm": "온수동종점", + "ycode": "37.491968", + "stop_no": "17290", + "xcode": "126.82122", + "stop_type": "일반차로", + "node_id": "116000195", + "nxtStn": "역곡워시주유소" + }, + { + "stop_nm": "신도림생활체육관.우성3차아파트", + "ycode": "37.5131858502", + "stop_no": "17291", + "xcode": "126.8832044582", + "stop_type": "일반차로", + "node_id": "116000196", + "nxtStn": "우성3차아파트" + }, + { + "stop_nm": "우성3차아파트", + "ycode": "37.51285", + "stop_no": "17292", + "xcode": "126.885488", + "stop_type": "일반차로", + "node_id": "116000197", + "nxtStn": "신도림역" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4959285478", + "stop_no": "17293", + "xcode": "126.8884812232", + "stop_type": "일반차로", + "node_id": "116000198", + "nxtStn": "구로역·NC신구로점" + }, + { + "stop_nm": "대림역", + "ycode": "37.4935009845", + "stop_no": "17296", + "xcode": "126.8943735141", + "stop_type": "일반차로", + "node_id": "116000200", + "nxtStn": "대림역7호선" + }, + { + "stop_nm": "구로중학교", + "ycode": "37.4930931479", + "stop_no": "17297", + "xcode": "126.8908083287", + "stop_type": "일반차로", + "node_id": "116000201", + "nxtStn": "구로구청" + }, + { + "stop_nm": "우신고등학교후문", + "ycode": "37.4960440674", + "stop_no": "17298", + "xcode": "126.8249030466", + "stop_type": "일반차로", + "node_id": "116000202", + "nxtStn": "정진학교.온수힐스테이트아파트" + }, + { + "stop_nm": "동양빌라", + "ycode": "37.49532", + "stop_no": "17299", + "xcode": "126.831304", + "stop_type": "일반차로", + "node_id": "116000203", + "nxtStn": "수궁119안전센터" + }, + { + "stop_nm": "궁동입구", + "ycode": "37.4934553153", + "stop_no": "17300", + "xcode": "126.8342168006", + "stop_type": "일반차로", + "node_id": "116000204", + "nxtStn": "동양빌라" + }, + { + "stop_nm": "동부골든아파트", + "ycode": "37.49873", + "stop_no": "17304", + "xcode": "126.840162", + "stop_type": "일반차로", + "node_id": "116000445", + "nxtStn": "오류동교회" + }, + { + "stop_nm": "거성푸르뫼아파트", + "ycode": "37.5003224419", + "stop_no": "17305", + "xcode": "126.8433197716", + "stop_type": "일반차로", + "node_id": "116000288", + "nxtStn": "개봉1동사거리" + }, + { + "stop_nm": "거성푸르뫼아파트", + "ycode": "37.500614", + "stop_no": "17306", + "xcode": "126.843553", + "stop_type": "일반차로", + "node_id": "116000287", + "nxtStn": "동부골든아파트후문" + }, + { + "stop_nm": "오류동삼거리", + "ycode": "37.4953703071", + "stop_no": "17307", + "xcode": "126.8408783505", + "stop_type": "일반차로", + "node_id": "116000448", + "nxtStn": "오류동교회" + }, + { + "stop_nm": "오류동삼거리", + "ycode": "37.4957851203", + "stop_no": "17308", + "xcode": "126.840365622", + "stop_type": "일반차로", + "node_id": "116000447", + "nxtStn": "오류지구대.신오류주유소" + }, + { + "stop_nm": "동부골든.한신플러스타운", + "ycode": "37.49863", + "stop_no": "17309", + "xcode": "126.840383", + "stop_type": "일반차로", + "node_id": "116000446", + "nxtStn": "동부골든아파트후문" + }, + { + "stop_nm": "구로역.나인스애비뉴", + "ycode": "37.4998227914", + "stop_no": "17310", + "xcode": "126.8834797536", + "stop_type": "일반차로", + "node_id": "116000563", + "nxtStn": "구로역.구로기계공구상가" + }, + { + "stop_nm": "개봉1동사거리", + "ycode": "37.5012109084", + "stop_no": "17311", + "xcode": "126.8453708568", + "stop_type": "일반차로", + "node_id": "116000614", + "nxtStn": "거성푸르뫼아파트" + }, + { + "stop_nm": "개봉1동사거리", + "ycode": "37.5010678452", + "stop_no": "17312", + "xcode": "126.8455328891", + "stop_type": "일반차로", + "node_id": "116000613", + "nxtStn": "개봉푸르지오아파트" + }, + { + "stop_nm": "동부골든아파트후문", + "ycode": "37.499917", + "stop_no": "17314", + "xcode": "126.842048", + "stop_type": "일반차로", + "node_id": "116000611", + "nxtStn": "동부골든아파트" + }, + { + "stop_nm": "동부골든아파트후문", + "ycode": "37.4995684704", + "stop_no": "17315", + "xcode": "126.8419150635", + "stop_type": "일반차로", + "node_id": "116000591", + "nxtStn": "거성푸르뫼아파트" + }, + { + "stop_nm": "항동하버라인3단지", + "ycode": "37.478746", + "stop_no": "17359", + "xcode": "126.822944", + "stop_type": "일반차로", + "node_id": "116000633", + "nxtStn": "한양수자인아파트앞" + }, + { + "stop_nm": "항동하버라인3단지", + "ycode": "37.4791611089", + "stop_no": "17360", + "xcode": "126.8230450799", + "stop_type": "일반차로", + "node_id": "116000634", + "nxtStn": "항동하버라인2단지" + }, + { + "stop_nm": "푸른수목원", + "ycode": "37.481497", + "stop_no": "17361", + "xcode": "126.824438", + "stop_type": "일반차로", + "node_id": "116000628", + "nxtStn": "항동하버라인2단지" + }, + { + "stop_nm": "항동복합행정센터", + "ycode": "37.479629", + "stop_no": "17362", + "xcode": "126.822093", + "stop_type": "일반차로", + "node_id": "116000629", + "nxtStn": "항동우남퍼스트빌" + }, + { + "stop_nm": "푸른수목원", + "ycode": "37.4811903562", + "stop_no": "17363", + "xcode": "126.8245517616", + "stop_type": "일반차로", + "node_id": "116000630", + "nxtStn": "별장쉐르빌앞" + }, + { + "stop_nm": "항동복합행정센터", + "ycode": "37.479519", + "stop_no": "17364", + "xcode": "126.822276", + "stop_type": "일반차로", + "node_id": "116000631", + "nxtStn": "푸른수목원" + }, + { + "stop_nm": "푸른수목원후문.저수지앞", + "ycode": "37.4842895838", + "stop_no": "17365", + "xcode": "126.8224245449", + "stop_type": "일반차로", + "node_id": "116000296", + "nxtStn": "항동중학교" + }, + { + "stop_nm": "매화빌라", + "ycode": "37.476655", + "stop_no": "17366", + "xcode": "126.823154", + "stop_type": "일반차로", + "node_id": "116000305", + "nxtStn": "옥길장터식당" + }, + { + "stop_nm": "그린빌라정문", + "ycode": "37.486043", + "stop_no": "17367", + "xcode": "126.823435", + "stop_type": "마을버스", + "node_id": "116900208", + "nxtStn": "푸른수목원후문.저수지앞" + }, + { + "stop_nm": "매화빌라", + "ycode": "37.476712", + "stop_no": "17368", + "xcode": "126.82332", + "stop_type": "일반차로", + "node_id": "116000304", + "nxtStn": "항동하버라인3단지" + }, + { + "stop_nm": "푸른수목원후문.저수지앞", + "ycode": "37.483782", + "stop_no": "17369", + "xcode": "126.822295", + "stop_type": "일반차로", + "node_id": "116000297", + "nxtStn": "푸른수목원후문" + }, + { + "stop_nm": "항동중흥S클래스", + "ycode": "37.4810835927", + "stop_no": "17370", + "xcode": "126.8216009197", + "stop_type": "일반차로", + "node_id": "116000638", + "nxtStn": "항동복합행정센터" + }, + { + "stop_nm": "항동하버라인2단지", + "ycode": "37.481273", + "stop_no": "17371", + "xcode": "126.821658", + "stop_type": "일반차로", + "node_id": "116000637", + "nxtStn": "항동중학교" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.4801153252", + "stop_no": "17389", + "xcode": "126.8887534687", + "stop_type": "일반차로", + "node_id": "116000635", + "nxtStn": "가리봉시장" + }, + { + "stop_nm": "연지타운2단지", + "ycode": "37.4837306939", + "stop_no": "17397", + "xcode": "126.8408329321", + "stop_type": "일반차로", + "node_id": "116000598", + "nxtStn": "구로우체국.이펜하우스3단지후문" + }, + { + "stop_nm": "연지타운2단지", + "ycode": "37.4838", + "stop_no": "17399", + "xcode": "126.84123", + "stop_type": "일반차로", + "node_id": "116000597", + "nxtStn": "천왕역2번출구" + }, + { + "stop_nm": "원각사입구", + "ycode": "37.5005565854", + "stop_no": "17400", + "xcode": "126.8295257073", + "stop_type": "일반차로", + "node_id": "116000624", + "nxtStn": "예림디자인고.오류고.서울공연예술고" + }, + { + "stop_nm": "삼각공원", + "ycode": "37.50185", + "stop_no": "17401", + "xcode": "126.892516", + "stop_type": "일반차로", + "node_id": "118000603", + "nxtStn": "거리공원" + }, + { + "stop_nm": "고척고교.한일유앤아이.삼익아파트", + "ycode": "37.5082359497", + "stop_no": "17404", + "xcode": "126.8524610449", + "stop_type": "마을버스", + "node_id": "116900257", + "nxtStn": "삼덕마을입구" + }, + { + "stop_nm": "삼덕마을입구", + "ycode": "37.5074796322", + "stop_no": "17405", + "xcode": "126.8500803806", + "stop_type": "마을버스", + "node_id": "116900258", + "nxtStn": "그랜드아파트.홍진연립" + }, + { + "stop_nm": "삼덕마을입구", + "ycode": "37.5073408903", + "stop_no": "17406", + "xcode": "126.8501021495", + "stop_type": "마을버스", + "node_id": "116900259", + "nxtStn": "고척고교.한일유앤아이.삼익아파트" + }, + { + "stop_nm": "그랜드아파트.홍진연립", + "ycode": "37.508007651", + "stop_no": "17407", + "xcode": "126.8479448736", + "stop_type": "마을버스", + "node_id": "116900260", + "nxtStn": "종점" + }, + { + "stop_nm": "그랜드아파트.홍진연립", + "ycode": "37.5078617167", + "stop_no": "17408", + "xcode": "126.8479791035", + "stop_type": "마을버스", + "node_id": "116900261", + "nxtStn": "삼덕마을입구" + }, + { + "stop_nm": "오류중학교", + "ycode": "37.50797", + "stop_no": "17409", + "xcode": "126.846905", + "stop_type": "마을버스", + "node_id": "116900262", + "nxtStn": "그랜드아파트.홍진연립" + }, + { + "stop_nm": "연지마을", + "ycode": "37.4827630327", + "stop_no": "17410", + "xcode": "126.8422699115", + "stop_type": "일반차로", + "node_id": "116000583", + "nxtStn": "연지타운2단지" + }, + { + "stop_nm": "신도림역", + "ycode": "37.510456", + "stop_no": "17412", + "xcode": "126.890052", + "stop_type": "마을버스", + "node_id": "116900271", + "nxtStn": "신도림동.구로역" + }, + { + "stop_nm": "경남아너스빌아파트", + "ycode": "37.4908457534", + "stop_no": "17456", + "xcode": "126.8394522242", + "stop_type": "일반차로", + "node_id": "116000646", + "nxtStn": "씨티월드" + }, + { + "stop_nm": "서울남부교정시설", + "ycode": "37.476880812", + "stop_no": "17457", + "xcode": "126.8397337562", + "stop_type": "마을버스", + "node_id": "116900268", + "nxtStn": "서울남부교정시설입구" + }, + { + "stop_nm": "오류남초등학교후문", + "ycode": "37.489316", + "stop_no": "17458", + "xcode": "126.837192", + "stop_type": "마을버스", + "node_id": "116900264", + "nxtStn": "미래여성병원" + }, + { + "stop_nm": "서울남부교정시설입구", + "ycode": "37.476796", + "stop_no": "17459", + "xcode": "126.841643", + "stop_type": "마을버스", + "node_id": "116900265", + "nxtStn": "천왕이펜하우스5단지입구" + }, + { + "stop_nm": "천왕이펜하우스6단지후문", + "ycode": "37.477261", + "stop_no": "17460", + "xcode": "126.841953", + "stop_type": "일반차로", + "node_id": "116000593", + "nxtStn": "서울남부교정시설" + }, + { + "stop_nm": "미래여성병원", + "ycode": "37.491286", + "stop_no": "17461", + "xcode": "126.840201", + "stop_type": "마을버스", + "node_id": "116900263", + "nxtStn": "종점" + }, + { + "stop_nm": "동부그린아파트", + "ycode": "37.49005", + "stop_no": "17462", + "xcode": "126.832306", + "stop_type": "마을버스", + "node_id": "116900266", + "nxtStn": "금강수목원아파트정문" + }, + { + "stop_nm": "오류동푸르지오아파트.송기산내과의원", + "ycode": "37.4912984558", + "stop_no": "17463", + "xcode": "126.8415590556", + "stop_type": "마을버스", + "node_id": "116900267", + "nxtStn": "오류2동새마을금고" + }, + { + "stop_nm": "1호선구일역", + "ycode": "37.4954759601", + "stop_no": "17464", + "xcode": "126.8722335954", + "stop_type": "마을버스", + "node_id": "116900255", + "nxtStn": "구일역.제일제당" + }, + { + "stop_nm": "SK허브수.한신아파트", + "ycode": "37.4954827267", + "stop_no": "17465", + "xcode": "126.8733862133", + "stop_type": "마을버스", + "node_id": "116900256", + "nxtStn": "1호선구일역" + }, + { + "stop_nm": "그린빌라정문", + "ycode": "37.4858461022", + "stop_no": "17468", + "xcode": "126.8234378684", + "stop_type": "마을버스", + "node_id": "116900246", + "nxtStn": "동삼빌라" + }, + { + "stop_nm": "경서농협앞", + "ycode": "37.5026269302", + "stop_no": "17469", + "xcode": "126.8640031743", + "stop_type": "마을버스", + "node_id": "116900248", + "nxtStn": "한일한의원" + }, + { + "stop_nm": "고척고교.한일유앤아이.삼익아파트", + "ycode": "37.508044", + "stop_no": "17470", + "xcode": "126.852639", + "stop_type": "마을버스", + "node_id": "116900247", + "nxtStn": "구민체육관후문" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.4844843828", + "stop_no": "17472", + "xcode": "126.9014954263", + "stop_type": "마을버스", + "node_id": "116900093", + "nxtStn": "구.사조참치" + }, + { + "stop_nm": "천왕역3번출구", + "ycode": "37.4871929928", + "stop_no": "17473", + "xcode": "126.8386190723", + "stop_type": "일반차로", + "node_id": "116900242", + "nxtStn": "오남중학교.삼미주택" + }, + { + "stop_nm": "대림역4번출구", + "ycode": "37.494421", + "stop_no": "17474", + "xcode": "126.894201", + "stop_type": "마을버스", + "node_id": "116900094", + "nxtStn": "영림중학교" + }, + { + "stop_nm": "동아1차APT105동", + "ycode": "37.510083", + "stop_no": "17475", + "xcode": "126.882003", + "stop_type": "마을버스", + "node_id": "116900095", + "nxtStn": "신도림중학교" + }, + { + "stop_nm": "오류동역.시장입구", + "ycode": "37.493467", + "stop_no": "17476", + "xcode": "126.843812", + "stop_type": "마을버스", + "node_id": "116900096", + "nxtStn": "우림필유아파트" + }, + { + "stop_nm": "개봉한진아파트.기점", + "ycode": "37.4860467262", + "stop_no": "17477", + "xcode": "126.8520772506", + "stop_type": "마을버스", + "node_id": "116900106", + "nxtStn": "개봉3동주민센터" + }, + { + "stop_nm": "개봉역", + "ycode": "37.4951118049", + "stop_no": "17478", + "xcode": "126.8586855509", + "stop_type": "마을버스", + "node_id": "116900107", + "nxtStn": "개봉사거리" + }, + { + "stop_nm": "개봉역", + "ycode": "37.495033642", + "stop_no": "17479", + "xcode": "126.8581281453", + "stop_type": "마을버스", + "node_id": "116900097", + "nxtStn": "개봉사거리" + }, + { + "stop_nm": "구.사조참치", + "ycode": "37.4831747617", + "stop_no": "17481", + "xcode": "126.9000463797", + "stop_type": "마을버스", + "node_id": "116900098", + "nxtStn": "한국산업단지공단.이마트구로점" + }, + { + "stop_nm": "신도림중학교", + "ycode": "37.5106973286", + "stop_no": "17483", + "xcode": "126.8844435798", + "stop_type": "마을버스", + "node_id": "116900091", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "개봉사거리", + "ycode": "37.4974414153", + "stop_no": "17484", + "xcode": "126.8559170573", + "stop_type": "마을버스", + "node_id": "116900238", + "nxtStn": "용두연립" + }, + { + "stop_nm": "우리은행앞", + "ycode": "37.4922658527", + "stop_no": "17485", + "xcode": "126.8434599895", + "stop_type": "마을버스", + "node_id": "116900110", + "nxtStn": "남부종합상가" + }, + { + "stop_nm": "123전자타운.2001아울렛", + "ycode": "37.4970967423", + "stop_no": "17486", + "xcode": "126.8623393681", + "stop_type": "마을버스", + "node_id": "116900099", + "nxtStn": "고척공구상가" + }, + { + "stop_nm": "개봉3동주민센터", + "ycode": "37.4861608749", + "stop_no": "17488", + "xcode": "126.8540163564", + "stop_type": "마을버스", + "node_id": "116900100", + "nxtStn": "개봉전화국" + }, + { + "stop_nm": "국민은행.구로구민회관.구로아트밸리", + "ycode": "37.4958206432", + "stop_no": "17489", + "xcode": "126.8896835849", + "stop_type": "마을버스", + "node_id": "116900101", + "nxtStn": "구로구청" + }, + { + "stop_nm": "1호선구일역", + "ycode": "37.495307", + "stop_no": "17490", + "xcode": "126.872227", + "stop_type": "일반차로", + "node_id": "116000651", + "nxtStn": "구일우성아파트" + }, + { + "stop_nm": "용두연립", + "ycode": "37.4987991162", + "stop_no": "17491", + "xcode": "126.8520611459", + "stop_type": "마을버스", + "node_id": "116900092", + "nxtStn": "고척근린시장" + }, + { + "stop_nm": "남부종합상가", + "ycode": "37.491665", + "stop_no": "17492", + "xcode": "126.842483", + "stop_type": "마을버스", + "node_id": "116900103", + "nxtStn": "오류동푸르지오아파트.송기산내과의원" + }, + { + "stop_nm": "고척공구상가", + "ycode": "37.498677", + "stop_no": "17493", + "xcode": "126.860409", + "stop_type": "마을버스", + "node_id": "116900104", + "nxtStn": "고척초등학교" + }, + { + "stop_nm": "개봉전화국", + "ycode": "37.486357", + "stop_no": "17494", + "xcode": "126.856005", + "stop_type": "마을버스", + "node_id": "116900105", + "nxtStn": "대원주유소" + }, + { + "stop_nm": "세븐일레븐편의점", + "ycode": "37.4916515773", + "stop_no": "17497", + "xcode": "126.8557099187", + "stop_type": "마을버스", + "node_id": "116900090", + "nxtStn": "이마트" + }, + { + "stop_nm": "대림6차태영프라자", + "ycode": "37.5062518631", + "stop_no": "17499", + "xcode": "126.8831869844", + "stop_type": "마을버스", + "node_id": "116900088", + "nxtStn": "대림5차아파트.신도림주민센터" + }, + { + "stop_nm": "고척초등학교", + "ycode": "37.499641", + "stop_no": "17501", + "xcode": "126.858038", + "stop_type": "마을버스", + "node_id": "116900086", + "nxtStn": "삼환로노즈빌아파트" + }, + { + "stop_nm": "개봉1동주민센터", + "ycode": "37.5003864446", + "stop_no": "17502", + "xcode": "126.851015214", + "stop_type": "마을버스", + "node_id": "116900085", + "nxtStn": "낙원할인마트" + }, + { + "stop_nm": "보람아파트", + "ycode": "37.4862853517", + "stop_no": "17503", + "xcode": "126.8968737126", + "stop_type": "마을버스", + "node_id": "116900084", + "nxtStn": "신대림한솔솔파크아파트.충심교회" + }, + { + "stop_nm": "개봉역.림괄아파트", + "ycode": "37.4938820371", + "stop_no": "17504", + "xcode": "126.8586839524", + "stop_type": "마을버스", + "node_id": "116900281", + "nxtStn": "현대아파트.개봉중앙시장" + }, + { + "stop_nm": "덕의초등학교.고척동성당", + "ycode": "37.5056424974", + "stop_no": "17505", + "xcode": "126.8576518404", + "stop_type": "마을버스", + "node_id": "116900294", + "nxtStn": "고척2동주민센터.고척지구대" + }, + { + "stop_nm": "이마트", + "ycode": "37.4915710921", + "stop_no": "17506", + "xcode": "126.8540092198", + "stop_type": "마을버스", + "node_id": "116900083", + "nxtStn": "브라운스톤" + }, + { + "stop_nm": "구로고대병원정문", + "ycode": "37.492350833", + "stop_no": "17507", + "xcode": "126.8834653518", + "stop_type": "마을버스", + "node_id": "116900082", + "nxtStn": "구로시장.남구로시장입구" + }, + { + "stop_nm": "대림5차아파트.신도림주민센터", + "ycode": "37.5074485074", + "stop_no": "17508", + "xcode": "126.8813606125", + "stop_type": "마을버스", + "node_id": "116900215", + "nxtStn": "대림5차아파트702동" + }, + { + "stop_nm": "세곡초등학교", + "ycode": "37.5027164013", + "stop_no": "17509", + "xcode": "126.8493637685", + "stop_type": "마을버스", + "node_id": "116900081", + "nxtStn": "개봉푸르지오아파트" + }, + { + "stop_nm": "새마을금고사거리", + "ycode": "37.501699289", + "stop_no": "17511", + "xcode": "126.8590429861", + "stop_type": "마을버스", + "node_id": "116900079", + "nxtStn": "서울가든아파트" + }, + { + "stop_nm": "삼환로노즈빌아파트", + "ycode": "37.498884", + "stop_no": "17512", + "xcode": "126.856788", + "stop_type": "마을버스", + "node_id": "116900078", + "nxtStn": "성화단지앞" + }, + { + "stop_nm": "낙원할인마트", + "ycode": "37.4999376488", + "stop_no": "17513", + "xcode": "126.8495559681", + "stop_type": "마을버스", + "node_id": "116900077", + "nxtStn": "개봉푸르지오후문" + }, + { + "stop_nm": "오류고등학교.수궁동복지회관", + "ycode": "37.4987611751", + "stop_no": "17514", + "xcode": "126.828651886", + "stop_type": "마을버스", + "node_id": "116900076", + "nxtStn": "현대별장맨션타운4차.덕성교회" + }, + { + "stop_nm": "경북슈퍼마켓", + "ycode": "37.4881783244", + "stop_no": "17515", + "xcode": "126.856838177", + "stop_type": "일반차로", + "node_id": "116000620", + "nxtStn": "현대아파트.개봉중앙시장" + }, + { + "stop_nm": "오류동삼거리", + "ycode": "37.4956760571", + "stop_no": "17516", + "xcode": "126.8404273128", + "stop_type": "마을버스", + "node_id": "116900311", + "nxtStn": "오류동역" + }, + { + "stop_nm": "대림5차아파트702동", + "ycode": "37.5076585727", + "stop_no": "17517", + "xcode": "126.879686208", + "stop_type": "마을버스", + "node_id": "116900213", + "nxtStn": "대림3차아파트" + }, + { + "stop_nm": "서울가든아파트", + "ycode": "37.5010736844", + "stop_no": "17520", + "xcode": "126.8603584192", + "stop_type": "마을버스", + "node_id": "116900073", + "nxtStn": "고척1동주민센터.한효아파트" + }, + { + "stop_nm": "성화단지앞", + "ycode": "37.5004598987", + "stop_no": "17521", + "xcode": "126.8557461282", + "stop_type": "마을버스", + "node_id": "116900072", + "nxtStn": "대우아파트" + }, + { + "stop_nm": "현대별장맨션타운4차.덕성교회", + "ycode": "37.498153468", + "stop_no": "17524", + "xcode": "126.8265496413", + "stop_type": "마을버스", + "node_id": "116900070", + "nxtStn": "우신중.고후문" + }, + { + "stop_nm": "구로2동지하차도입구", + "ycode": "37.4901642749", + "stop_no": "17526", + "xcode": "126.8811730911", + "stop_type": "마을버스", + "node_id": "116900068", + "nxtStn": "한일유엔아이APT.현대로얄APT" + }, + { + "stop_nm": "대림3차아파트", + "ycode": "37.5068806092", + "stop_no": "17527", + "xcode": "126.8784997827", + "stop_type": "마을버스", + "node_id": "116900067", + "nxtStn": "신도림미성아파트" + }, + { + "stop_nm": "고척1동주민센터.한효아파트", + "ycode": "37.5007747419", + "stop_no": "17529", + "xcode": "126.8620826591", + "stop_type": "마을버스", + "node_id": "116900065", + "nxtStn": "청구아파트후문" + }, + { + "stop_nm": "대우아파트", + "ycode": "37.5023562812", + "stop_no": "17530", + "xcode": "126.8561270364", + "stop_type": "마을버스", + "node_id": "116900064", + "nxtStn": "경남아파트앞" + }, + { + "stop_nm": "개봉1치안센터", + "ycode": "37.5033774485", + "stop_no": "17532", + "xcode": "126.8469792868", + "stop_type": "마을버스", + "node_id": "116900230", + "nxtStn": "삼원목욕탕" + }, + { + "stop_nm": "우신중.고후문", + "ycode": "37.4960073153", + "stop_no": "17533", + "xcode": "126.8255107353", + "stop_type": "마을버스", + "node_id": "116900062", + "nxtStn": "정진학교.온수힐스테이트아파트" + }, + { + "stop_nm": "항동중학교", + "ycode": "37.483237", + "stop_no": "17534", + "xcode": "126.822022", + "stop_type": "마을버스", + "node_id": "116900308", + "nxtStn": "항동중흥S클래스" + }, + { + "stop_nm": "항동중학교", + "ycode": "37.482759", + "stop_no": "17535", + "xcode": "126.821535", + "stop_type": "마을버스", + "node_id": "116900307", + "nxtStn": "푸른수목원후문.저수지앞" + }, + { + "stop_nm": "한일유엔아이APT.현대로얄APT", + "ycode": "37.486463", + "stop_no": "17536", + "xcode": "126.876791", + "stop_type": "마을버스", + "node_id": "116900060", + "nxtStn": "구일우성아파트" + }, + { + "stop_nm": "신도림미성아파트", + "ycode": "37.5060035465", + "stop_no": "17537", + "xcode": "126.8764810511", + "stop_type": "마을버스", + "node_id": "116900216", + "nxtStn": "월드아파트" + }, + { + "stop_nm": "금강수목원아파트정문.동도아트빌", + "ycode": "37.4892249737", + "stop_no": "17539", + "xcode": "126.8325389207", + "stop_type": "마을버스", + "node_id": "116900059", + "nxtStn": "서해그랑블아파트.금강수목원아파트후문" + }, + { + "stop_nm": "청구아파트후문", + "ycode": "37.501145848", + "stop_no": "17540", + "xcode": "126.8635070759", + "stop_type": "마을버스", + "node_id": "116900058", + "nxtStn": "고척시장" + }, + { + "stop_nm": "경남아파트앞", + "ycode": "37.5039155326", + "stop_no": "17541", + "xcode": "126.8564113368", + "stop_type": "마을버스", + "node_id": "116900057", + "nxtStn": "양우아파트" + }, + { + "stop_nm": "삼원목욕탕", + "ycode": "37.5047237058", + "stop_no": "17543", + "xcode": "126.8462944948", + "stop_type": "마을버스", + "node_id": "116900231", + "nxtStn": "오류중학교" + }, + { + "stop_nm": "온수초교후문", + "ycode": "37.4943446088", + "stop_no": "17544", + "xcode": "126.8247851552", + "stop_type": "마을버스", + "node_id": "116900055", + "nxtStn": "온수역" + }, + { + "stop_nm": "월드아파트", + "ycode": "37.50539", + "stop_no": "17547", + "xcode": "126.876845", + "stop_type": "마을버스", + "node_id": "116900052", + "nxtStn": "구로역.구로기계공구상가" + }, + { + "stop_nm": "서해그랑블아파트.금강수목원아파트후문", + "ycode": "37.48832", + "stop_no": "17549", + "xcode": "126.830948", + "stop_type": "마을버스", + "node_id": "116900051", + "nxtStn": "금강수목원아파트정문" + }, + { + "stop_nm": "고척시장", + "ycode": "37.5031035319", + "stop_no": "17550", + "xcode": "126.8623769754", + "stop_type": "마을버스", + "node_id": "116900050", + "nxtStn": "센추리아파트" + }, + { + "stop_nm": "양우아파트", + "ycode": "37.5048737044", + "stop_no": "17551", + "xcode": "126.8559186097", + "stop_type": "마을버스", + "node_id": "116900049", + "nxtStn": "덕의초등학교.고척동성당" + }, + { + "stop_nm": "경북슈퍼마켓", + "ycode": "37.48811", + "stop_no": "17552", + "xcode": "126.856917", + "stop_type": "마을버스", + "node_id": "116900235", + "nxtStn": "철산교앞" + }, + { + "stop_nm": "오류중학교", + "ycode": "37.5064968072", + "stop_no": "17554", + "xcode": "126.8454006743", + "stop_type": "마을버스", + "node_id": "116900232", + "nxtStn": "학마을2단지아파트" + }, + { + "stop_nm": "온수역", + "ycode": "37.4929546615", + "stop_no": "17555", + "xcode": "126.8250914854", + "stop_type": "마을버스", + "node_id": "116900047", + "nxtStn": "우신고등학교후문" + }, + { + "stop_nm": "센추리아파트", + "ycode": "37.5049657103", + "stop_no": "17558", + "xcode": "126.861266221", + "stop_type": "마을버스", + "node_id": "116900043", + "nxtStn": "리가아파트" + }, + { + "stop_nm": "고척2동주민센터.고척지구대", + "ycode": "37.5065258668", + "stop_no": "17559", + "xcode": "126.8585226484", + "stop_type": "마을버스", + "node_id": "116900042", + "nxtStn": "덕의공원" + }, + { + "stop_nm": "철산교앞", + "ycode": "37.4880930845", + "stop_no": "17560", + "xcode": "126.8594179846", + "stop_type": "마을버스", + "node_id": "116900041", + "nxtStn": "현대IPARK후문" + }, + { + "stop_nm": "우신중.고후문", + "ycode": "37.4958721554", + "stop_no": "17563", + "xcode": "126.8255144427", + "stop_type": "마을버스", + "node_id": "116900038", + "nxtStn": "현대별장맨션타운4차.덕성교회" + }, + { + "stop_nm": "오류동교회", + "ycode": "37.4967301913", + "stop_no": "17566", + "xcode": "126.8396347971", + "stop_type": "마을버스", + "node_id": "116900036", + "nxtStn": "오류동삼거리" + }, + { + "stop_nm": "리가아파트", + "ycode": "37.506062", + "stop_no": "17568", + "xcode": "126.860804", + "stop_type": "마을버스", + "node_id": "116900035", + "nxtStn": "세양청마루아파트" + }, + { + "stop_nm": "덕의공원", + "ycode": "37.5069011166", + "stop_no": "17569", + "xcode": "126.8557780682", + "stop_type": "마을버스", + "node_id": "116900034", + "nxtStn": "진성아파트" + }, + { + "stop_nm": "현대IPARK후문", + "ycode": "37.488916585", + "stop_no": "17570", + "xcode": "126.8600859026", + "stop_type": "마을버스", + "node_id": "116900033", + "nxtStn": "현대IPARK정문" + }, + { + "stop_nm": "건강약국", + "ycode": "37.502795896", + "stop_no": "17572", + "xcode": "126.8446459743", + "stop_type": "마을버스", + "node_id": "116900032", + "nxtStn": "개봉중학교" + }, + { + "stop_nm": "현대별장맨션타운4차.덕성교회", + "ycode": "37.4981049614", + "stop_no": "17573", + "xcode": "126.8266538041", + "stop_type": "마을버스", + "node_id": "116900031", + "nxtStn": "오류고등학교.수궁동복지회관" + }, + { + "stop_nm": "항아리", + "ycode": "37.498675859", + "stop_no": "17575", + "xcode": "126.8864311689", + "stop_type": "마을버스", + "node_id": "116900220", + "nxtStn": "구로보건소" + }, + { + "stop_nm": "한일유엔아이APT", + "ycode": "37.4856182438", + "stop_no": "17576", + "xcode": "126.8759503543", + "stop_type": "마을버스", + "node_id": "117900141", + "nxtStn": "도덕초등학교" + }, + { + "stop_nm": "럭비구장", + "ycode": "37.491279", + "stop_no": "17577", + "xcode": "126.827002", + "stop_type": "마을버스", + "node_id": "116900029", + "nxtStn": "온수역" + }, + { + "stop_nm": "세양청마루아파트", + "ycode": "37.5067232768", + "stop_no": "17578", + "xcode": "126.8623952149", + "stop_type": "마을버스", + "node_id": "116900228", + "nxtStn": "경남1차.중앙하이츠아파트" + }, + { + "stop_nm": "진성아파트", + "ycode": "37.5070235315", + "stop_no": "17579", + "xcode": "126.8550186308", + "stop_type": "마을버스", + "node_id": "116900028", + "nxtStn": "구민체육센터후문" + }, + { + "stop_nm": "현대IPARK정문", + "ycode": "37.4910441607", + "stop_no": "17580", + "xcode": "126.8609086066", + "stop_type": "마을버스", + "node_id": "116900027", + "nxtStn": "현대2차APT" + }, + { + "stop_nm": "개봉전화국", + "ycode": "37.486438", + "stop_no": "17581", + "xcode": "126.85601", + "stop_type": "마을버스", + "node_id": "116900026", + "nxtStn": "개봉3동주민센터" + }, + { + "stop_nm": "개봉중학교", + "ycode": "37.502295605", + "stop_no": "17582", + "xcode": "126.8431461097", + "stop_type": "마을버스", + "node_id": "116900025", + "nxtStn": "건강약국" + }, + { + "stop_nm": "오류중학교", + "ycode": "37.5064984287", + "stop_no": "17583", + "xcode": "126.8452626754", + "stop_type": "마을버스", + "node_id": "116900024", + "nxtStn": "삼원목욕탕" + }, + { + "stop_nm": "오류고등학교.수궁동복지회관", + "ycode": "37.4986707024", + "stop_no": "17584", + "xcode": "126.8284021432", + "stop_type": "마을버스", + "node_id": "116900023", + "nxtStn": "수궁119안전센터" + }, + { + "stop_nm": "온수역", + "ycode": "37.4920372556", + "stop_no": "17588", + "xcode": "126.8238225007", + "stop_type": "마을버스", + "node_id": "116900020", + "nxtStn": "동진빌라.오정초등학교" + }, + { + "stop_nm": "경남1차.중앙하이츠아파트", + "ycode": "37.5053633498", + "stop_no": "17589", + "xcode": "126.8630129852", + "stop_type": "마을버스", + "node_id": "116900226", + "nxtStn": "마젤란아파트.예인학원앞" + }, + { + "stop_nm": "구민체육센터후문", + "ycode": "37.5075268453", + "stop_no": "17590", + "xcode": "126.8539611844", + "stop_type": "마을버스", + "node_id": "116900019", + "nxtStn": "고척고교.한일유앤아이.삼익아파트" + }, + { + "stop_nm": "현대2차APT", + "ycode": "37.4918808558", + "stop_no": "17591", + "xcode": "126.8605440388", + "stop_type": "마을버스", + "node_id": "116900018", + "nxtStn": "개봉역.림괄아파트" + }, + { + "stop_nm": "개봉3동주민센터", + "ycode": "37.4862735028", + "stop_no": "17592", + "xcode": "126.8540082216", + "stop_type": "마을버스", + "node_id": "116900017", + "nxtStn": "개봉한진아파트.기점" + }, + { + "stop_nm": "건강약국", + "ycode": "37.5026653155", + "stop_no": "17593", + "xcode": "126.8447061907", + "stop_type": "마을버스", + "node_id": "116900016", + "nxtStn": "작은굴다리" + }, + { + "stop_nm": "삼원목욕탕", + "ycode": "37.5047100465", + "stop_no": "17594", + "xcode": "126.8461848075", + "stop_type": "마을버스", + "node_id": "116900015", + "nxtStn": "개봉1치안센터" + }, + { + "stop_nm": "거성아파트", + "ycode": "37.489858", + "stop_no": "17596", + "xcode": "126.850769", + "stop_type": "마을버스", + "node_id": "116900014", + "nxtStn": "삼성그린빌라" + }, + { + "stop_nm": "GS25.한신아파트", + "ycode": "37.4957338159", + "stop_no": "17597", + "xcode": "126.8740426758", + "stop_type": "마을버스", + "node_id": "116900013", + "nxtStn": "하이츠.영화.우방.한국현대" + }, + { + "stop_nm": "구로고.구로도서관", + "ycode": "37.498569", + "stop_no": "17598", + "xcode": "126.890803", + "stop_type": "마을버스", + "node_id": "116900012", + "nxtStn": "영림중학교" + }, + { + "stop_nm": "천왕역1번출구", + "ycode": "37.485768", + "stop_no": "17600", + "xcode": "126.839171", + "stop_type": "일반차로", + "node_id": "116000565", + "nxtStn": "연지타운2단지" + }, + { + "stop_nm": "오류동역2번출구", + "ycode": "37.493629", + "stop_no": "17601", + "xcode": "126.84379", + "stop_type": "마을버스", + "node_id": "116900277", + "nxtStn": "미래빌라" + }, + { + "stop_nm": "미래빌라", + "ycode": "37.492708", + "stop_no": "17602", + "xcode": "126.84199", + "stop_type": "마을버스", + "node_id": "116900278", + "nxtStn": "오류2동새마을금고" + }, + { + "stop_nm": "우림필유아파트", + "ycode": "37.4942450511", + "stop_no": "17603", + "xcode": "126.8471890485", + "stop_type": "마을버스", + "node_id": "116900279", + "nxtStn": "동부에이스" + }, + { + "stop_nm": "동부에이스", + "ycode": "37.494906", + "stop_no": "17604", + "xcode": "126.849718", + "stop_type": "마을버스", + "node_id": "116900280", + "nxtStn": "종점" + }, + { + "stop_nm": "개봉푸르지오후문", + "ycode": "37.5001701123", + "stop_no": "17605", + "xcode": "126.8491644859", + "stop_type": "마을버스", + "node_id": "116900282", + "nxtStn": "개봉푸르지오정문" + }, + { + "stop_nm": "개봉푸르지오정문", + "ycode": "37.5010457523", + "stop_no": "17609", + "xcode": "126.8487500846", + "stop_type": "마을버스", + "node_id": "116900283", + "nxtStn": "개봉1동사거리" + }, + { + "stop_nm": "개봉1동사거리", + "ycode": "37.501416", + "stop_no": "17610", + "xcode": "126.845544", + "stop_type": "마을버스", + "node_id": "116900284", + "nxtStn": "건강약국" + }, + { + "stop_nm": "신도림역.아이파크아파트", + "ycode": "37.510607", + "stop_no": "17612", + "xcode": "126.888462", + "stop_type": "마을버스", + "node_id": "116900285", + "nxtStn": "동아2차아파트상가" + }, + { + "stop_nm": "동아2차아파트상가", + "ycode": "37.508611", + "stop_no": "17613", + "xcode": "126.886786", + "stop_type": "마을버스", + "node_id": "116900286", + "nxtStn": "대림6차태영프라자" + }, + { + "stop_nm": "동진빌라.오정초등학교", + "ycode": "37.4906689295", + "stop_no": "17615", + "xcode": "126.8253388224", + "stop_type": "마을버스", + "node_id": "116900011", + "nxtStn": "유한공고.성공회대앞" + }, + { + "stop_nm": "마젤란아파트.예인학원앞", + "ycode": "37.5044112672", + "stop_no": "17617", + "xcode": "126.8633574838", + "stop_type": "마을버스", + "node_id": "116900227", + "nxtStn": "우성꿈동산.산업인아파트" + }, + { + "stop_nm": "개봉한진아파트.기점", + "ycode": "37.486149449", + "stop_no": "17619", + "xcode": "126.8520747864", + "stop_type": "마을버스", + "node_id": "116900010", + "nxtStn": "종점" + }, + { + "stop_nm": "정도주택", + "ycode": "37.494105", + "stop_no": "17620", + "xcode": "126.851695", + "stop_type": "마을버스", + "node_id": "116900291", + "nxtStn": "신세기아파트" + }, + { + "stop_nm": "신세기아파트", + "ycode": "37.493909", + "stop_no": "17621", + "xcode": "126.853449", + "stop_type": "마을버스", + "node_id": "116900292", + "nxtStn": "개봉고가" + }, + { + "stop_nm": "브라운스톤", + "ycode": "37.490894", + "stop_no": "17622", + "xcode": "126.853149", + "stop_type": "마을버스", + "node_id": "116900287", + "nxtStn": "개웅어린이공원" + }, + { + "stop_nm": "개웅어린이공원", + "ycode": "37.489956", + "stop_no": "17623", + "xcode": "126.853242", + "stop_type": "마을버스", + "node_id": "116900288", + "nxtStn": "거성슈퍼" + }, + { + "stop_nm": "거성슈퍼", + "ycode": "37.489957", + "stop_no": "17624", + "xcode": "126.852691", + "stop_type": "마을버스", + "node_id": "116900289", + "nxtStn": "대림그린빌라" + }, + { + "stop_nm": "대림그린빌라", + "ycode": "37.489906", + "stop_no": "17625", + "xcode": "126.851854", + "stop_type": "마을버스", + "node_id": "116900290", + "nxtStn": "거성아파트" + }, + { + "stop_nm": "에덴맨션", + "ycode": "37.492712", + "stop_no": "17626", + "xcode": "126.851464", + "stop_type": "마을버스", + "node_id": "116900293", + "nxtStn": "크로바마트" + }, + { + "stop_nm": "구로보건소.금호새솔아파트", + "ycode": "37.500349", + "stop_no": "17629", + "xcode": "126.890564", + "stop_type": "일반차로", + "node_id": "116000233", + "nxtStn": "신동아아파트" + }, + { + "stop_nm": "구로공구상가", + "ycode": "37.5047168446", + "stop_no": "17631", + "xcode": "126.8774140543", + "stop_type": "일반차로", + "node_id": "116000235", + "nxtStn": "구로역(NC백화점)" + }, + { + "stop_nm": "한화비즈메트로", + "ycode": "37.48065", + "stop_no": "17632", + "xcode": "126.893565", + "stop_type": "마을버스", + "node_id": "116900295", + "nxtStn": "지타워.G밸리산업박물관" + }, + { + "stop_nm": "한국산업기술시험원.디지털탑프라자", + "ycode": "37.4816125117", + "stop_no": "17633", + "xcode": "126.8973623264", + "stop_type": "마을버스", + "node_id": "116900296", + "nxtStn": "구로디지털단지우체국" + }, + { + "stop_nm": "구로디지털단지우체국", + "ycode": "37.482986", + "stop_no": "17634", + "xcode": "126.898154", + "stop_type": "마을버스", + "node_id": "116900297", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "JNK디지털타워", + "ycode": "37.48209", + "stop_no": "17635", + "xcode": "126.897473", + "stop_type": "마을버스", + "node_id": "116900298", + "nxtStn": "에이스하이엔드타워2차.G밸리산업박물관" + }, + { + "stop_nm": "에이스하이엔드타워2차.G밸리산업박물관", + "ycode": "37.48081", + "stop_no": "17636", + "xcode": "126.895785", + "stop_type": "마을버스", + "node_id": "116900299", + "nxtStn": "대륭포스트타워8차" + }, + { + "stop_nm": "에이스하이엔드타워1차", + "ycode": "37.481225", + "stop_no": "17638", + "xcode": "126.892915", + "stop_type": "마을버스", + "node_id": "116900301", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "천왕이펜하우스6단지후문", + "ycode": "37.4779067636", + "stop_no": "17647", + "xcode": "126.8427844029", + "stop_type": "일반차로", + "node_id": "116000581", + "nxtStn": "구로우체국.이펜하우스5단지후문" + }, + { + "stop_nm": "천왕이펜하우스6단지후문", + "ycode": "37.4782066848", + "stop_no": "17648", + "xcode": "126.8426740981", + "stop_type": "일반차로", + "node_id": "116000580", + "nxtStn": "남부교도소" + }, + { + "stop_nm": "연지타운2단지", + "ycode": "37.4819347512", + "stop_no": "17650", + "xcode": "126.8448667042", + "stop_type": "마을버스", + "node_id": "116900274", + "nxtStn": "남부주유소(마을)" + }, + { + "stop_nm": "연지타운2단지", + "ycode": "37.482105537", + "stop_no": "17651", + "xcode": "126.8452304506", + "stop_type": "마을버스", + "node_id": "116900275", + "nxtStn": "연지타운2단지" + }, + { + "stop_nm": "남부교도소", + "ycode": "37.4764324674", + "stop_no": "17652", + "xcode": "126.840700296", + "stop_type": "일반차로", + "node_id": "116000573", + "nxtStn": "부평말.일신교회" + }, + { + "stop_nm": "남부교도소", + "ycode": "37.4762796029", + "stop_no": "17653", + "xcode": "126.8409403196", + "stop_type": "일반차로", + "node_id": "116000572", + "nxtStn": "천왕이펜하우스6단지후문" + }, + { + "stop_nm": "지타워.G밸리산업박물관", + "ycode": "37.480562", + "stop_no": "17655", + "xcode": "126.894942", + "stop_type": "마을버스", + "node_id": "116900313", + "nxtStn": "한국산업기술시험원.디지털탑프라자" + }, + { + "stop_nm": "개봉1치안센터", + "ycode": "37.5032887727", + "stop_no": "17675", + "xcode": "126.8466955709", + "stop_type": "마을버스", + "node_id": "116900233", + "nxtStn": "개봉푸르지오아파트" + }, + { + "stop_nm": "하이츠.영화.우방.한국현대", + "ycode": "37.496861", + "stop_no": "17677", + "xcode": "126.874964", + "stop_type": "마을버스", + "node_id": "116900008", + "nxtStn": "SK허브수.구로우성APT" + }, + { + "stop_nm": "영림중학교", + "ycode": "37.497675", + "stop_no": "17678", + "xcode": "126.891504", + "stop_type": "마을버스", + "node_id": "116900007", + "nxtStn": "구로구민회관" + }, + { + "stop_nm": "유한공고.성공회대앞", + "ycode": "37.488482", + "stop_no": "17682", + "xcode": "126.824599", + "stop_type": "마을버스", + "node_id": "116900006", + "nxtStn": "동삼빌라" + }, + { + "stop_nm": "우성꿈동산.산업인아파트", + "ycode": "37.5035347914", + "stop_no": "17684", + "xcode": "126.8636135714", + "stop_type": "마을버스", + "node_id": "116900005", + "nxtStn": "경서농협앞" + }, + { + "stop_nm": "삼성그린빌라", + "ycode": "37.4904850642", + "stop_no": "17689", + "xcode": "126.8516794789", + "stop_type": "마을버스", + "node_id": "116900003", + "nxtStn": "덕성빌라" + }, + { + "stop_nm": "SK허브수.구로우성APT", + "ycode": "37.4956839983", + "stop_no": "17690", + "xcode": "126.8738018673", + "stop_type": "마을버스", + "node_id": "116900002", + "nxtStn": "현대상선.구일중학교" + }, + { + "stop_nm": "구로구민회관", + "ycode": "37.496298", + "stop_no": "17694", + "xcode": "126.890557", + "stop_type": "마을버스", + "node_id": "116900001", + "nxtStn": "구로구청" + }, + { + "stop_nm": "KEB하나은행", + "ycode": "37.4844929907", + "stop_no": "17695", + "xcode": "126.8957736653", + "stop_type": "마을버스", + "node_id": "116900273", + "nxtStn": "보람아파트" + }, + { + "stop_nm": "동삼빌라", + "ycode": "37.4872651448", + "stop_no": "17697", + "xcode": "126.8239106044", + "stop_type": "일반차로", + "node_id": "116000592", + "nxtStn": "그린빌라정문" + }, + { + "stop_nm": "천왕이펜하우스2단지", + "ycode": "37.4856524684", + "stop_no": "17700", + "xcode": "126.8379747224", + "stop_type": "일반차로", + "node_id": "116000568", + "nxtStn": "천왕역3번출구" + }, + { + "stop_nm": "구로우체국.이펜하우스3단지후문", + "ycode": "37.481893", + "stop_no": "17701", + "xcode": "126.842149", + "stop_type": "일반차로", + "node_id": "116000579", + "nxtStn": "천왕이펜하우스5단지" + }, + { + "stop_nm": "금강수목원아파트", + "ycode": "37.489298", + "stop_no": "17704", + "xcode": "126.834398", + "stop_type": "일반차로", + "node_id": "116000590", + "nxtStn": "오남중학교" + }, + { + "stop_nm": "덕성빌라", + "ycode": "37.4911148827", + "stop_no": "17706", + "xcode": "126.8516375218", + "stop_type": "마을버스", + "node_id": "116900212", + "nxtStn": "선경아트빌라" + }, + { + "stop_nm": "현대상선.구일중학교", + "ycode": "37.4953252995", + "stop_no": "17707", + "xcode": "126.8745918696", + "stop_type": "마을버스", + "node_id": "116900211", + "nxtStn": "구일고교.구일초등학교" + }, + { + "stop_nm": "구로구청", + "ycode": "37.494691", + "stop_no": "17708", + "xcode": "126.889183", + "stop_type": "마을버스", + "node_id": "116900210", + "nxtStn": "구로중학교" + }, + { + "stop_nm": "오류동교회", + "ycode": "37.4969772246", + "stop_no": "17709", + "xcode": "126.8397315321", + "stop_type": "마을버스", + "node_id": "116900209", + "nxtStn": "동부골든.한신플러스타운" + }, + { + "stop_nm": "한일한의원", + "ycode": "37.5019399059", + "stop_no": "17711", + "xcode": "126.8644523136", + "stop_type": "마을버스", + "node_id": "116900207", + "nxtStn": "유풍약국" + }, + { + "stop_nm": "항동하버라인10단지", + "ycode": "37.479763", + "stop_no": "17712", + "xcode": "126.825695", + "stop_type": "일반차로", + "node_id": "116000632", + "nxtStn": "푸른수목원" + }, + { + "stop_nm": "항동제일풍경채", + "ycode": "37.4758934433", + "stop_no": "17715", + "xcode": "126.8168720063", + "stop_type": "마을버스", + "node_id": "116900312", + "nxtStn": "항동우남퍼스트빌" + }, + { + "stop_nm": "선경아트빌라", + "ycode": "37.492001", + "stop_no": "17716", + "xcode": "126.851535", + "stop_type": "마을버스", + "node_id": "116900206", + "nxtStn": "에덴맨션" + }, + { + "stop_nm": "구로중학교", + "ycode": "37.4932861016", + "stop_no": "17717", + "xcode": "126.8901809694", + "stop_type": "마을버스", + "node_id": "116900222", + "nxtStn": "동구로새마을금고" + }, + { + "stop_nm": "항동생활체육관", + "ycode": "37.4774", + "stop_no": "17718", + "xcode": "126.822707", + "stop_type": "마을버스", + "node_id": "116900310", + "nxtStn": "한양수자인아파트앞" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.479993", + "stop_no": "17723", + "xcode": "126.89081", + "stop_type": "일반차로", + "node_id": "116000444", + "nxtStn": "디지털1단지" + }, + { + "stop_nm": "디지털1단지", + "ycode": "37.4837488039", + "stop_no": "17725", + "xcode": "126.8948983529", + "stop_type": "일반차로", + "node_id": "116000441", + "nxtStn": "롯데시티호텔구로" + }, + { + "stop_nm": "코오롱싸이언스밸리.베스트웨스턴구로호텔", + "ycode": "37.4835182533", + "stop_no": "17726", + "xcode": "126.89918654", + "stop_type": "일반차로", + "node_id": "116000440", + "nxtStn": "롯데시티호텔구로" + }, + { + "stop_nm": "베스트웨스턴구로호텔코오롱싸이언스밸리", + "ycode": "37.483303", + "stop_no": "17727", + "xcode": "126.8992", + "stop_type": "일반차로", + "node_id": "116000439", + "nxtStn": "문성초등학교" + }, + { + "stop_nm": "유풍약국", + "ycode": "37.5012731714", + "stop_no": "17728", + "xcode": "126.8653108421", + "stop_type": "마을버스", + "node_id": "116900204", + "nxtStn": "동양미래대학교.구로성심병원" + }, + { + "stop_nm": "구민체육관후문", + "ycode": "37.5074094044", + "stop_no": "17729", + "xcode": "126.8537204834", + "stop_type": "마을버스", + "node_id": "116900203", + "nxtStn": "진성아파트" + }, + { + "stop_nm": "개봉교입구", + "ycode": "37.4859598389", + "stop_no": "17730", + "xcode": "126.856147179", + "stop_type": "마을버스", + "node_id": "116900202", + "nxtStn": "대원카센터" + }, + { + "stop_nm": "크로바마트", + "ycode": "37.4935475792", + "stop_no": "17733", + "xcode": "126.8514133118", + "stop_type": "마을버스", + "node_id": "116900200", + "nxtStn": "정도주택" + }, + { + "stop_nm": "동구로새마을금고", + "ycode": "37.491113", + "stop_no": "17734", + "xcode": "126.892158", + "stop_type": "마을버스", + "node_id": "116900223", + "nxtStn": "구로시장.남구로시장" + }, + { + "stop_nm": "동양미래대학교.구로성심병원", + "ycode": "37.500294065", + "stop_no": "17737", + "xcode": "126.8664492745", + "stop_type": "마을버스", + "node_id": "116900198", + "nxtStn": "청구아파트.동아한신아파트" + }, + { + "stop_nm": "진성아파트", + "ycode": "37.5069198246", + "stop_no": "17738", + "xcode": "126.8549532265", + "stop_type": "마을버스", + "node_id": "116900197", + "nxtStn": "덕의공원" + }, + { + "stop_nm": "대원카센터", + "ycode": "37.4851235277", + "stop_no": "17739", + "xcode": "126.854604124", + "stop_type": "마을버스", + "node_id": "116900196", + "nxtStn": "한진APT후문" + }, + { + "stop_nm": "낙원할인마트", + "ycode": "37.4998367818", + "stop_no": "17740", + "xcode": "126.8496002799", + "stop_type": "마을버스", + "node_id": "116900195", + "nxtStn": "개봉1동주민센터" + }, + { + "stop_nm": "개봉사거리", + "ycode": "37.497226", + "stop_no": "17741", + "xcode": "126.855836", + "stop_type": "마을버스", + "node_id": "116900194", + "nxtStn": "종점" + }, + { + "stop_nm": "구로주공APT", + "ycode": "37.4915573877", + "stop_no": "17743", + "xcode": "126.8759201764", + "stop_type": "마을버스", + "node_id": "116900192", + "nxtStn": "구일우성아파트" + }, + { + "stop_nm": "구로시장.남구로시장", + "ycode": "37.4892915192", + "stop_no": "17744", + "xcode": "126.8909461726", + "stop_type": "마을버스", + "node_id": "116900191", + "nxtStn": "구로3동주민센터.삼성래미안아파트" + }, + { + "stop_nm": "푸른수목원후문", + "ycode": "37.484203", + "stop_no": "17746", + "xcode": "126.822527", + "stop_type": "마을버스", + "node_id": "116900189", + "nxtStn": "그린빌라정문" + }, + { + "stop_nm": "청구아파트.동아한신아파트", + "ycode": "37.500508084", + "stop_no": "17747", + "xcode": "126.8644775225", + "stop_type": "마을버스", + "node_id": "116900188", + "nxtStn": "고척1동주민센터.한효아파트" + }, + { + "stop_nm": "덕의공원", + "ycode": "37.5065732115", + "stop_no": "17748", + "xcode": "126.8559436211", + "stop_type": "마을버스", + "node_id": "116900187", + "nxtStn": "고척2동주민센터.고척지구대" + }, + { + "stop_nm": "한진APT후문", + "ycode": "37.4838124632", + "stop_no": "17749", + "xcode": "126.853907849", + "stop_type": "마을버스", + "node_id": "116900186", + "nxtStn": "개명초교" + }, + { + "stop_nm": "개봉1동주민센터", + "ycode": "37.5003180166", + "stop_no": "17750", + "xcode": "126.8510594597", + "stop_type": "마을버스", + "node_id": "116900185", + "nxtStn": "용두연립" + }, + { + "stop_nm": "롯데시티호텔구로", + "ycode": "37.485089", + "stop_no": "17751", + "xcode": "126.897994", + "stop_type": "일반차로", + "node_id": "116000603", + "nxtStn": "디지털산업1단지" + }, + { + "stop_nm": "롯데시티호텔구로", + "ycode": "37.485405", + "stop_no": "17752", + "xcode": "126.897008", + "stop_type": "일반차로", + "node_id": "116000604", + "nxtStn": "베스트웨스턴구로호텔코오롱싸이언스밸리" + }, + { + "stop_nm": "알뜰슈퍼", + "ycode": "37.5083877831", + "stop_no": "17754", + "xcode": "126.8799022166", + "stop_type": "일반차로", + "node_id": "116000292", + "nxtStn": "세븐일레븐" + }, + { + "stop_nm": "성락교회크리스천선교센터", + "ycode": "37.509412", + "stop_no": "17755", + "xcode": "126.882139", + "stop_type": "일반차로", + "node_id": "116000607", + "nxtStn": "알뜰슈퍼" + }, + { + "stop_nm": "구일우성아파트", + "ycode": "37.4898288863", + "stop_no": "17772", + "xcode": "126.8757443597", + "stop_type": "마을버스", + "node_id": "116900183", + "nxtStn": "디지털단지입구" + }, + { + "stop_nm": "구로3동주민센터.삼성래미안아파트", + "ycode": "37.487409", + "stop_no": "17773", + "xcode": "126.890517", + "stop_type": "마을버스", + "node_id": "116900182", + "nxtStn": "구로3파출소" + }, + { + "stop_nm": "신도림역", + "ycode": "37.508551", + "stop_no": "17775", + "xcode": "126.887724", + "stop_type": "일반차로", + "node_id": "116000576", + "nxtStn": "신도림4차e편한세상" + }, + { + "stop_nm": "고척1동주민센터.한효아파트", + "ycode": "37.5008337327", + "stop_no": "17792", + "xcode": "126.8624422171", + "stop_type": "마을버스", + "node_id": "116900180", + "nxtStn": "서울가든아파트" + }, + { + "stop_nm": "금강수목원아파트", + "ycode": "37.489458", + "stop_no": "17801", + "xcode": "126.834458", + "stop_type": "일반차로", + "node_id": "116000589", + "nxtStn": "수궁동주민센터" + }, + { + "stop_nm": "항동하버라인4단지", + "ycode": "37.481904", + "stop_no": "17802", + "xcode": "126.825394", + "stop_type": "일반차로", + "node_id": "116000639", + "nxtStn": "별장쉐르빌앞" + }, + { + "stop_nm": "고척2동주민센터.고척지구대", + "ycode": "37.5064024799", + "stop_no": "17803", + "xcode": "126.8585760434", + "stop_type": "마을버스", + "node_id": "116900179", + "nxtStn": "고척사거리.고척파크프리지오" + }, + { + "stop_nm": "별장쉐르빌앞", + "ycode": "37.487297", + "stop_no": "17804", + "xcode": "126.83341", + "stop_type": "일반차로", + "node_id": "116000640", + "nxtStn": "오류남초등학교후문" + }, + { + "stop_nm": "덕일전자공업고등학교", + "ycode": "37.489847", + "stop_no": "17806", + "xcode": "126.83753", + "stop_type": "일반차로", + "node_id": "116000641", + "nxtStn": "퀸즈빌" + }, + { + "stop_nm": "개명초교", + "ycode": "37.482280857", + "stop_no": "17807", + "xcode": "126.852674925", + "stop_type": "마을버스", + "node_id": "116900178", + "nxtStn": "대상APT" + }, + { + "stop_nm": "항동하버라인4단지.푸른수목원", + "ycode": "37.482717", + "stop_no": "17808", + "xcode": "126.825953", + "stop_type": "일반차로", + "node_id": "116000643", + "nxtStn": "항동하버라인3단지아파트" + }, + { + "stop_nm": "항동하버라인3단지아파트", + "ycode": "37.479718", + "stop_no": "17809", + "xcode": "126.825543", + "stop_type": "일반차로", + "node_id": "116000644", + "nxtStn": "항동하버라인3단지" + }, + { + "stop_nm": "세븐일레븐", + "ycode": "37.5092442733", + "stop_no": "17819", + "xcode": "126.8785740011", + "stop_type": "일반차로", + "node_id": "116000346", + "nxtStn": "하나마트" + }, + { + "stop_nm": "하나마트", + "ycode": "37.5104365661", + "stop_no": "17825", + "xcode": "126.8795878618", + "stop_type": "일반차로", + "node_id": "116000352", + "nxtStn": "진흥슈퍼" + }, + { + "stop_nm": "진흥슈퍼", + "ycode": "37.5114475988", + "stop_no": "17827", + "xcode": "126.8804730881", + "stop_type": "일반차로", + "node_id": "116000354", + "nxtStn": "신도림자동차학원" + }, + { + "stop_nm": "신도림자동차학원", + "ycode": "37.512327", + "stop_no": "17830", + "xcode": "126.881548", + "stop_type": "일반차로", + "node_id": "116000357", + "nxtStn": "신도림생활체육관.우성3차아파트" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.511592", + "stop_no": "17831", + "xcode": "126.885607", + "stop_type": "일반차로", + "node_id": "116000358", + "nxtStn": "신도림역.아이파크아파트" + }, + { + "stop_nm": "신도림역", + "ycode": "37.510557", + "stop_no": "17834", + "xcode": "126.889775", + "stop_type": "일반차로", + "node_id": "116000361", + "nxtStn": "도림마을금고" + }, + { + "stop_nm": "도림천역2번출구", + "ycode": "37.5145732142", + "stop_no": "17835", + "xcode": "126.883116065", + "stop_type": "일반차로", + "node_id": "118000606", + "nxtStn": "신교정입구" + }, + { + "stop_nm": "구로3파출소", + "ycode": "37.4861491173", + "stop_no": "17838", + "xcode": "126.8916518401", + "stop_type": "마을버스", + "node_id": "116900175", + "nxtStn": "에이스테크노타워" + }, + { + "stop_nm": "동삼빌라", + "ycode": "37.4871985611", + "stop_no": "17846", + "xcode": "126.8239763483", + "stop_type": "마을버스", + "node_id": "116900174", + "nxtStn": "성공회대학교유한공고앞" + }, + { + "stop_nm": "천왕이펜하우스3단지입구", + "ycode": "37.482418", + "stop_no": "17848", + "xcode": "126.838209", + "stop_type": "마을버스", + "node_id": "116900252", + "nxtStn": "천왕이펜하우스4단지" + }, + { + "stop_nm": "신도림동아3차아파트", + "ycode": "37.510209", + "stop_no": "17855", + "xcode": "126.883688", + "stop_type": "일반차로", + "node_id": "116000381", + "nxtStn": "신도림중학교" + }, + { + "stop_nm": "구로보건소", + "ycode": "37.5003597239", + "stop_no": "17863", + "xcode": "126.8889643647", + "stop_type": "일반차로", + "node_id": "116000389", + "nxtStn": "항아리" + }, + { + "stop_nm": "서울가든아파트", + "ycode": "37.5011612274", + "stop_no": "17864", + "xcode": "126.8604736214", + "stop_type": "마을버스", + "node_id": "116900173", + "nxtStn": "새마을금고사거리" + }, + { + "stop_nm": "구로역(NC백화점)", + "ycode": "37.4996998999", + "stop_no": "17865", + "xcode": "126.8831338556", + "stop_type": "일반차로", + "node_id": "116000390", + "nxtStn": "구로구청" + }, + { + "stop_nm": "구로역(NC백화점)", + "ycode": "37.5004801132", + "stop_no": "17866", + "xcode": "126.8829912618", + "stop_type": "일반차로", + "node_id": "116000391", + "nxtStn": "구로공구상가" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4957878963", + "stop_no": "17867", + "xcode": "126.8903214893", + "stop_type": "일반차로", + "node_id": "116000392", + "nxtStn": "대림역" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4958700328", + "stop_no": "17868", + "xcode": "126.8885412507", + "stop_type": "일반차로", + "node_id": "116000393", + "nxtStn": "구로역(NC백화점)" + }, + { + "stop_nm": "오류동입구", + "ycode": "37.500482", + "stop_no": "17869", + "xcode": "126.846946", + "stop_type": "일반차로", + "node_id": "116000394", + "nxtStn": "개봉고가" + }, + { + "stop_nm": "개봉역입구", + "ycode": "37.491225", + "stop_no": "17877", + "xcode": "126.855844", + "stop_type": "일반차로", + "node_id": "116000402", + "nxtStn": "개봉교" + }, + { + "stop_nm": "개봉역입구", + "ycode": "37.4910330573", + "stop_no": "17878", + "xcode": "126.8561510204", + "stop_type": "일반차로", + "node_id": "116000403", + "nxtStn": "경인중학교.개봉사거리" + }, + { + "stop_nm": "개봉교", + "ycode": "37.4876466919", + "stop_no": "17879", + "xcode": "126.8561360285", + "stop_type": "일반차로", + "node_id": "116000404", + "nxtStn": "광명사거리역" + }, + { + "stop_nm": "개봉교", + "ycode": "37.4865803318", + "stop_no": "17880", + "xcode": "126.8565858749", + "stop_type": "일반차로", + "node_id": "116000405", + "nxtStn": "개봉역입구" + }, + { + "stop_nm": "대림역", + "ycode": "37.4933532412", + "stop_no": "17881", + "xcode": "126.894415566", + "stop_type": "일반차로", + "node_id": "116000406", + "nxtStn": "롯데백화점관악점" + }, + { + "stop_nm": "고척사거리.고척파크프리지오", + "ycode": "37.50682458", + "stop_no": "17886", + "xcode": "126.8596543326", + "stop_type": "마을버스", + "node_id": "116900172", + "nxtStn": "덕의초등학교" + }, + { + "stop_nm": "대상APT", + "ycode": "37.4819053285", + "stop_no": "17887", + "xcode": "126.8499946754", + "stop_type": "마을버스", + "node_id": "116900171", + "nxtStn": "영화APT" + }, + { + "stop_nm": "구로시장.남구로시장입구", + "ycode": "37.4901745492", + "stop_no": "17888", + "xcode": "126.8815338211", + "stop_type": "마을버스", + "node_id": "116900170", + "nxtStn": "대우자동차정비소" + }, + { + "stop_nm": "에이스테크노타워", + "ycode": "37.485025", + "stop_no": "17889", + "xcode": "126.894149", + "stop_type": "마을버스", + "node_id": "116900169", + "nxtStn": "KEB하나은행" + }, + { + "stop_nm": "구로공구상가", + "ycode": "37.5033556976", + "stop_no": "17897", + "xcode": "126.8795720894", + "stop_type": "일반차로", + "node_id": "116000417", + "nxtStn": "갈산초등학교" + }, + { + "stop_nm": "보성운수기종점", + "ycode": "37.490156", + "stop_no": "17899", + "xcode": "126.892827", + "stop_type": "일반차로", + "node_id": "116000587", + "nxtStn": "구로두산아파트" + }, + { + "stop_nm": "새마을금고사거리", + "ycode": "37.5015032543", + "stop_no": "17900", + "xcode": "126.8586282642", + "stop_type": "마을버스", + "node_id": "116900168", + "nxtStn": "고척초등학교" + }, + { + "stop_nm": "양우아파트", + "ycode": "37.5048176486", + "stop_no": "17901", + "xcode": "126.8557648896", + "stop_type": "마을버스", + "node_id": "116900167", + "nxtStn": "경남아파트" + }, + { + "stop_nm": "영화APT", + "ycode": "37.4822720576", + "stop_no": "17902", + "xcode": "126.8485658093", + "stop_type": "마을버스", + "node_id": "116900166", + "nxtStn": "남부주유소" + }, + { + "stop_nm": "천왕역", + "ycode": "37.4862992199", + "stop_no": "17903", + "xcode": "126.8386352471", + "stop_type": "마을버스", + "node_id": "116900251", + "nxtStn": "연지마을" + }, + { + "stop_nm": "대우자동차정비소", + "ycode": "37.4915421241", + "stop_no": "17904", + "xcode": "126.8821344238", + "stop_type": "마을버스", + "node_id": "116900165", + "nxtStn": "구로고대병원후문" + }, + { + "stop_nm": "고척초등학교", + "ycode": "37.499467", + "stop_no": "17906", + "xcode": "126.85815", + "stop_type": "마을버스", + "node_id": "116900164", + "nxtStn": "공구상가" + }, + { + "stop_nm": "경남아파트", + "ycode": "37.503879", + "stop_no": "17907", + "xcode": "126.856363", + "stop_type": "마을버스", + "node_id": "116900163", + "nxtStn": "대우아파트" + }, + { + "stop_nm": "남부주유소", + "ycode": "37.482341", + "stop_no": "17908", + "xcode": "126.847273", + "stop_type": "마을버스", + "node_id": "116900162", + "nxtStn": "연지타운2단지" + }, + { + "stop_nm": "신도림역2번출구", + "ycode": "37.507635", + "stop_no": "17909", + "xcode": "126.891884", + "stop_type": "마을버스", + "node_id": "116900161", + "nxtStn": "대림동코오롱아파트" + }, + { + "stop_nm": "구로고대병원후문", + "ycode": "37.4934775322", + "stop_no": "17910", + "xcode": "126.8856372215", + "stop_type": "마을버스", + "node_id": "116900160", + "nxtStn": "구로구청" + }, + { + "stop_nm": "구로3동현대아파트", + "ycode": "37.486987", + "stop_no": "17911", + "xcode": "126.897856", + "stop_type": "마을버스", + "node_id": "116900159", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "공구상가", + "ycode": "37.498624", + "stop_no": "17912", + "xcode": "126.860118", + "stop_type": "마을버스", + "node_id": "116900158", + "nxtStn": "123전자타운.2001아울렛" + }, + { + "stop_nm": "대우아파트", + "ycode": "37.5023525197", + "stop_no": "17913", + "xcode": "126.855998104", + "stop_type": "마을버스", + "node_id": "116900157", + "nxtStn": "성화단지앞" + }, + { + "stop_nm": "123전자타운.2001아울렛", + "ycode": "37.497292563", + "stop_no": "17917", + "xcode": "126.861808582", + "stop_type": "마을버스", + "node_id": "116900154", + "nxtStn": "개봉역" + }, + { + "stop_nm": "성화단지앞", + "ycode": "37.5005796345", + "stop_no": "17918", + "xcode": "126.855655416", + "stop_type": "마을버스", + "node_id": "116900153", + "nxtStn": "삼환로즈빌아파트" + }, + { + "stop_nm": "구로디지털단지입구", + "ycode": "37.4829265654", + "stop_no": "17920", + "xcode": "126.9006494039", + "stop_type": "마을버스", + "node_id": "116900151", + "nxtStn": "JNK디지털타워" + }, + { + "stop_nm": "삼환로즈빌아파트", + "ycode": "37.498706", + "stop_no": "17922", + "xcode": "126.856646", + "stop_type": "마을버스", + "node_id": "116900149", + "nxtStn": "고척초등학교" + }, + { + "stop_nm": "문성골", + "ycode": "37.4814923556", + "stop_no": "17923", + "xcode": "126.8999954764", + "stop_type": "마을버스", + "node_id": "116900272", + "nxtStn": "독산고개입구" + }, + { + "stop_nm": "에이스테크노타워", + "ycode": "37.4852697727", + "stop_no": "17925", + "xcode": "126.8937835226", + "stop_type": "마을버스", + "node_id": "116900147", + "nxtStn": "구로3파출소" + }, + { + "stop_nm": "구로3파출소", + "ycode": "37.4861834877", + "stop_no": "17927", + "xcode": "126.8917920104", + "stop_type": "마을버스", + "node_id": "116900145", + "nxtStn": "구로3동주민센터.삼성래미안아파트" + }, + { + "stop_nm": "구로3동주민센터.삼성래미안아파트", + "ycode": "37.4873871314", + "stop_no": "17929", + "xcode": "126.8905621992", + "stop_type": "마을버스", + "node_id": "116900143", + "nxtStn": "구로시장.남구로시장" + }, + { + "stop_nm": "구로시장.남구로시장", + "ycode": "37.4891691976", + "stop_no": "17931", + "xcode": "126.8911940068", + "stop_type": "마을버스", + "node_id": "116900141", + "nxtStn": "동구로새마을금고" + }, + { + "stop_nm": "구로구청후문", + "ycode": "37.496042", + "stop_no": "17932", + "xcode": "126.888052", + "stop_type": "마을버스", + "node_id": "116900269", + "nxtStn": "구로구청" + }, + { + "stop_nm": "동구로새마을금고", + "ycode": "37.4914076166", + "stop_no": "17933", + "xcode": "126.8922617076", + "stop_type": "마을버스", + "node_id": "116900140", + "nxtStn": "구로중학교" + }, + { + "stop_nm": "구로구청", + "ycode": "37.4947318776", + "stop_no": "17935", + "xcode": "126.8894341189", + "stop_type": "마을버스", + "node_id": "116900139", + "nxtStn": "강서수도사업소.민원센터" + }, + { + "stop_nm": "강서수도사업소.민원센터", + "ycode": "37.4960920442", + "stop_no": "17936", + "xcode": "126.8908356291", + "stop_type": "마을버스", + "node_id": "116900138", + "nxtStn": "영림중학교" + }, + { + "stop_nm": "영림중학교", + "ycode": "37.4976174721", + "stop_no": "17937", + "xcode": "126.8916635467", + "stop_type": "마을버스", + "node_id": "116900137", + "nxtStn": "구로고.구로도서관" + }, + { + "stop_nm": "구로고.구로도서관", + "ycode": "37.4986205714", + "stop_no": "17938", + "xcode": "126.890871533", + "stop_type": "마을버스", + "node_id": "116900136", + "nxtStn": "구로보건소" + }, + { + "stop_nm": "항아리", + "ycode": "37.4988532421", + "stop_no": "17940", + "xcode": "126.8862917876", + "stop_type": "마을버스", + "node_id": "116900221", + "nxtStn": "구로역·NC신구로점" + }, + { + "stop_nm": "미성아파트", + "ycode": "37.5058198494", + "stop_no": "17942", + "xcode": "126.8774688058", + "stop_type": "마을버스", + "node_id": "116900134", + "nxtStn": "대림1.2차아파트" + }, + { + "stop_nm": "대림1.2차아파트", + "ycode": "37.5063468892", + "stop_no": "17943", + "xcode": "126.8782393614", + "stop_type": "마을버스", + "node_id": "116900133", + "nxtStn": "대림5차아파트702동" + }, + { + "stop_nm": "대림5차아파트702동", + "ycode": "37.5074731027", + "stop_no": "17944", + "xcode": "126.8798403389", + "stop_type": "마을버스", + "node_id": "116900214", + "nxtStn": "대림5차아파트.신도림주민센터" + }, + { + "stop_nm": "대림5차아파트.신도림주민센터", + "ycode": "37.5073421413", + "stop_no": "17945", + "xcode": "126.8813245848", + "stop_type": "마을버스", + "node_id": "116900132", + "nxtStn": "대림6차태영프라자" + }, + { + "stop_nm": "대림6차태영프라자", + "ycode": "37.5062202183", + "stop_no": "17946", + "xcode": "126.8830795784", + "stop_type": "마을버스", + "node_id": "116900131", + "nxtStn": "신도림역" + }, + { + "stop_nm": "신도림역", + "ycode": "37.5106647809", + "stop_no": "17947", + "xcode": "126.8899931754", + "stop_type": "마을버스", + "node_id": "116900130", + "nxtStn": "현대우성아파트" + }, + { + "stop_nm": "현대우성아파트", + "ycode": "37.5117462798", + "stop_no": "17948", + "xcode": "126.8854408047", + "stop_type": "마을버스", + "node_id": "116900129", + "nxtStn": "동아1차아파트102동" + }, + { + "stop_nm": "동아1차아파트102동", + "ycode": "37.510818", + "stop_no": "17949", + "xcode": "126.884131", + "stop_type": "마을버스", + "node_id": "116900218", + "nxtStn": "동아1차아파트105동" + }, + { + "stop_nm": "동아1차아파트105동", + "ycode": "37.5100023717", + "stop_no": "17950", + "xcode": "126.8824062916", + "stop_type": "마을버스", + "node_id": "116900128", + "nxtStn": "종점" + }, + { + "stop_nm": "1호선구일역", + "ycode": "37.4952173233", + "stop_no": "17954", + "xcode": "126.8722148101", + "stop_type": "마을버스", + "node_id": "116900126", + "nxtStn": "GS25.한신아파트" + }, + { + "stop_nm": "금강수목원아파트정문", + "ycode": "37.4892057882", + "stop_no": "17955", + "xcode": "126.832990173", + "stop_type": "마을버스", + "node_id": "116900125", + "nxtStn": "오남중학교" + }, + { + "stop_nm": "고척근린시장", + "ycode": "37.5009847732", + "stop_no": "17956", + "xcode": "126.8510128941", + "stop_type": "마을버스", + "node_id": "116900124", + "nxtStn": "세곡초등학교" + }, + { + "stop_nm": "구로시장.남구로시장입구", + "ycode": "37.4907661875", + "stop_no": "17958", + "xcode": "126.8838670127", + "stop_type": "마을버스", + "node_id": "116900219", + "nxtStn": "구로2동지하차도입구" + }, + { + "stop_nm": "구로주공.구일우성APT", + "ycode": "37.4913781266", + "stop_no": "17959", + "xcode": "126.8759758863", + "stop_type": "마을버스", + "node_id": "116900123", + "nxtStn": "구로1동주민센터.연예인APT" + }, + { + "stop_nm": "구로1동주민센터.연예인APT", + "ycode": "37.4929561503", + "stop_no": "17960", + "xcode": "126.8761587458", + "stop_type": "마을버스", + "node_id": "116900122", + "nxtStn": "구일초등학교.구일고등학교" + }, + { + "stop_nm": "천왕이펜하우스5단지입구", + "ycode": "37.4794432441", + "stop_no": "17961", + "xcode": "126.8421807801", + "stop_type": "마을버스", + "node_id": "116900249", + "nxtStn": "천왕이펜하우스5단지" + }, + { + "stop_nm": "구일고교.구일초등학교", + "ycode": "37.493192", + "stop_no": "17962", + "xcode": "126.874768", + "stop_type": "마을버스", + "node_id": "116900121", + "nxtStn": "구로1동주민센터.연예인APT" + }, + { + "stop_nm": "구로1동주민센터.연예인APT", + "ycode": "37.493082", + "stop_no": "17963", + "xcode": "126.876008", + "stop_type": "마을버스", + "node_id": "116900120", + "nxtStn": "구로주공APT" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.484059", + "stop_no": "17967", + "xcode": "126.901827", + "stop_type": "마을버스", + "node_id": "116900118", + "nxtStn": "구.사조참치" + }, + { + "stop_nm": "구일초등학교.구일고등학교", + "ycode": "37.493264", + "stop_no": "17970", + "xcode": "126.874804", + "stop_type": "마을버스", + "node_id": "116900117", + "nxtStn": "1호선구일역" + }, + { + "stop_nm": "개봉역", + "ycode": "37.4952658606", + "stop_no": "17971", + "xcode": "126.858658118", + "stop_type": "마을버스", + "node_id": "116900239", + "nxtStn": "종점" + }, + { + "stop_nm": "개봉역", + "ycode": "37.4950163829", + "stop_no": "17972", + "xcode": "126.8587648964", + "stop_type": "마을버스", + "node_id": "116900240", + "nxtStn": "123전자타운.2001아울렛" + }, + { + "stop_nm": "KEB하나은행", + "ycode": "37.4849571278", + "stop_no": "17974", + "xcode": "126.8958510449", + "stop_type": "마을버스", + "node_id": "116900116", + "nxtStn": "구로3동현대아파트" + }, + { + "stop_nm": "천왕이펜하우스3단지입구", + "ycode": "37.482726", + "stop_no": "17975", + "xcode": "126.838378", + "stop_type": "마을버스", + "node_id": "116900250", + "nxtStn": "천왕역" + }, + { + "stop_nm": "천왕역2번출구", + "ycode": "37.486362", + "stop_no": "17982", + "xcode": "126.83834", + "stop_type": "마을버스", + "node_id": "116900113", + "nxtStn": "천왕이펜하우스3단지입구" + }, + { + "stop_nm": "천왕이펜하우스1단지", + "ycode": "37.4856296135", + "stop_no": "17983", + "xcode": "126.8377361736", + "stop_type": "마을버스", + "node_id": "116900243", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "천왕이펜하우스4단지", + "ycode": "37.481043", + "stop_no": "17984", + "xcode": "126.838628", + "stop_type": "마을버스", + "node_id": "116900112", + "nxtStn": "천왕이펜하우스6단지" + }, + { + "stop_nm": "천왕이펜하우스6단지", + "ycode": "37.4793763374", + "stop_no": "17985", + "xcode": "126.8406703019", + "stop_type": "마을버스", + "node_id": "116900111", + "nxtStn": "천왕이펜하우스6단지후문" + }, + { + "stop_nm": "천왕이펜하우스5단지", + "ycode": "37.479894", + "stop_no": "17986", + "xcode": "126.840309", + "stop_type": "일반차로", + "node_id": "116000594", + "nxtStn": "천왕이펜하우스3.4단지" + }, + { + "stop_nm": "천왕이펜하우스3.4단지", + "ycode": "37.481169506", + "stop_no": "17987", + "xcode": "126.8386560567", + "stop_type": "일반차로", + "node_id": "116000595", + "nxtStn": "천왕이펜하우스3단지입구" + }, + { + "stop_nm": "온수남부역", + "ycode": "37.4918431942", + "stop_no": "17989", + "xcode": "126.8242097211", + "stop_type": "일반차로", + "node_id": "116000459", + "nxtStn": "온수역입구(경유)" + }, + { + "stop_nm": "온수남부", + "ycode": "37.4919749011", + "stop_no": "17990", + "xcode": "126.8243078", + "stop_type": "일반차로", + "node_id": "116000458", + "nxtStn": "온수역입구(경유)" + }, + { + "stop_nm": "궁동사거리", + "ycode": "37.5060968631", + "stop_no": "17997", + "xcode": "126.8279100818", + "stop_type": "일반차로", + "node_id": "116000451", + "nxtStn": "신정숲속마을아파트" + }, + { + "stop_nm": "유한공고.성공회대학교", + "ycode": "37.4895452697", + "stop_no": "17999", + "xcode": "126.8247409544", + "stop_type": "일반차로", + "node_id": "116000449", + "nxtStn": "유한대학교" + }, + { + "stop_nm": "문성초등학교", + "ycode": "37.475363705", + "stop_no": "18001", + "xcode": "126.8986660928", + "stop_type": "중앙차로", + "node_id": "117000001", + "nxtStn": "코오롱싸이언스밸리.베스트웨스턴구로호텔" + }, + { + "stop_nm": "문성초등학교", + "ycode": "37.474034", + "stop_no": "18002", + "xcode": "126.89833", + "stop_type": "중앙차로", + "node_id": "117000002", + "nxtStn": "금천우체국" + }, + { + "stop_nm": "금천우체국", + "ycode": "37.468978", + "stop_no": "18003", + "xcode": "126.898028", + "stop_type": "중앙차로", + "node_id": "117000003", + "nxtStn": "문성초등학교" + }, + { + "stop_nm": "금천우체국", + "ycode": "37.470136", + "stop_no": "18004", + "xcode": "126.898003", + "stop_type": "중앙차로", + "node_id": "117000004", + "nxtStn": "말미고개.금천소방서" + }, + { + "stop_nm": "말미고개.금천소방서", + "ycode": "37.463604", + "stop_no": "18005", + "xcode": "126.897555", + "stop_type": "중앙차로", + "node_id": "117000005", + "nxtStn": "금천우체국" + }, + { + "stop_nm": "말미고개.금천소방서", + "ycode": "37.464832", + "stop_no": "18006", + "xcode": "126.897496", + "stop_type": "중앙차로", + "node_id": "117000006", + "nxtStn": "금천구청.금천경찰서" + }, + { + "stop_nm": "금천구청.금천경찰서", + "ycode": "37.4592088301", + "stop_no": "18007", + "xcode": "126.8988721519", + "stop_type": "중앙차로", + "node_id": "117000007", + "nxtStn": "말미고개.금천소방서" + }, + { + "stop_nm": "금천구청.금천경찰서", + "ycode": "37.457841", + "stop_no": "18008", + "xcode": "126.8993", + "stop_type": "중앙차로", + "node_id": "117000008", + "nxtStn": "시흥사거리" + }, + { + "stop_nm": "시흥사거리", + "ycode": "37.4521824331", + "stop_no": "18009", + "xcode": "126.9016519517", + "stop_type": "중앙차로", + "node_id": "117000009", + "nxtStn": "금천구청.금천경찰서" + }, + { + "stop_nm": "시흥사거리", + "ycode": "37.453086", + "stop_no": "18010", + "xcode": "126.901123", + "stop_type": "중앙차로", + "node_id": "117000010", + "nxtStn": "박미삼거리.국립전통예술중고" + }, + { + "stop_nm": "박미삼거리.국립전통예술중고", + "ycode": "37.4478432162", + "stop_no": "18011", + "xcode": "126.9032727409", + "stop_type": "중앙차로", + "node_id": "117000011", + "nxtStn": "시흥사거리" + }, + { + "stop_nm": "박미삼거리.국립전통예술중고", + "ycode": "37.449067", + "stop_no": "18012", + "xcode": "126.902663", + "stop_type": "중앙차로", + "node_id": "117000012", + "nxtStn": "시흥유통센터" + }, + { + "stop_nm": "시흥유통센터", + "ycode": "37.44019", + "stop_no": "18013", + "xcode": "126.903622", + "stop_type": "중앙차로", + "node_id": "117000013", + "nxtStn": "박미삼거리.국립전통예술중고" + }, + { + "stop_nm": "시흥유통센터", + "ycode": "37.440958", + "stop_no": "18014", + "xcode": "126.903369", + "stop_type": "중앙차로", + "node_id": "117000014", + "nxtStn": "석수역" + }, + { + "stop_nm": "한일유엔아이아파트", + "ycode": "37.4854590227", + "stop_no": "18101", + "xcode": "126.8762259351", + "stop_type": "일반차로", + "node_id": "117000320", + "nxtStn": "디지털3단지.롯데정보통신" + }, + { + "stop_nm": "디지털3단지.롯데정보통신", + "ycode": "37.48487", + "stop_no": "18102", + "xcode": "126.876718", + "stop_type": "일반차로", + "node_id": "117000016", + "nxtStn": "디지털3단지.영창실업" + }, + { + "stop_nm": "에이스하이엔드타워5차", + "ycode": "37.485702", + "stop_no": "18103", + "xcode": "126.879317", + "stop_type": "일반차로", + "node_id": "117000017", + "nxtStn": "구일우성아파트" + }, + { + "stop_nm": "디지털3단지.영창실업", + "ycode": "37.483259", + "stop_no": "18104", + "xcode": "126.879078", + "stop_type": "일반차로", + "node_id": "117000018", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "디지털3단지운동장", + "ycode": "37.4821627292", + "stop_no": "18105", + "xcode": "126.8778930341", + "stop_type": "일반차로", + "node_id": "117000019", + "nxtStn": "디지털3단지.(주)로옴코리아" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.481293", + "stop_no": "18106", + "xcode": "126.881042", + "stop_type": "일반차로", + "node_id": "117000020", + "nxtStn": "디지털3단지.월드벤처센터" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.4808039116", + "stop_no": "18107", + "xcode": "126.8814807737", + "stop_type": "일반차로", + "node_id": "117000021", + "nxtStn": "가산디지털단지역1호선" + }, + { + "stop_nm": "디지털3단지.월드벤처센터", + "ycode": "37.478902", + "stop_no": "18108", + "xcode": "126.879443", + "stop_type": "일반차로", + "node_id": "117000022", + "nxtStn": "한진택배" + }, + { + "stop_nm": "디지털3단지.(주)로옴코리아", + "ycode": "37.479611", + "stop_no": "18109", + "xcode": "126.88022", + "stop_type": "일반차로", + "node_id": "117000023", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "디지털3단지사거리", + "ycode": "37.4766714335", + "stop_no": "18110", + "xcode": "126.880577117", + "stop_type": "일반차로", + "node_id": "117000024", + "nxtStn": "디지털3단지.(주)로옴코리아" + }, + { + "stop_nm": "디지털3단지사거리", + "ycode": "37.4758449905", + "stop_no": "18111", + "xcode": "126.880449538", + "stop_type": "일반차로", + "node_id": "117000025", + "nxtStn": "광명성애병원" + }, + { + "stop_nm": "디지털3단지사거리", + "ycode": "37.4757765035", + "stop_no": "18112", + "xcode": "126.8813405986", + "stop_type": "일반차로", + "node_id": "117000026", + "nxtStn": "STXV타워" + }, + { + "stop_nm": "금천패션아울렛사거리.마리오", + "ycode": "37.478263", + "stop_no": "18113", + "xcode": "126.888333", + "stop_type": "일반차로", + "node_id": "117000027", + "nxtStn": "디지털3단지사거리" + }, + { + "stop_nm": "금천패션아울렛사거리.W몰", + "ycode": "37.4776616914", + "stop_no": "18114", + "xcode": "126.8878763257", + "stop_type": "일반차로", + "node_id": "117000028", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "금천패션아울렛사거리.현대아울렛", + "ycode": "37.478117", + "stop_no": "18115", + "xcode": "126.888492", + "stop_type": "일반차로", + "node_id": "117000927", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.4782104216", + "stop_no": "18116", + "xcode": "126.8907157886", + "stop_type": "일반차로", + "node_id": "117000030", + "nxtStn": "SG세계물산" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.47829", + "stop_no": "18117", + "xcode": "126.890965", + "stop_type": "일반차로", + "node_id": "117000031", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "디지털단지오거리", + "ycode": "37.478558", + "stop_no": "18118", + "xcode": "126.893432", + "stop_type": "일반차로", + "node_id": "117000032", + "nxtStn": "가산초등학교" + }, + { + "stop_nm": "가산초등학교", + "ycode": "37.4782346236", + "stop_no": "18119", + "xcode": "126.895556221", + "stop_type": "일반차로", + "node_id": "117000033", + "nxtStn": "모두의학교.금천문화예술정보학교" + }, + { + "stop_nm": "가산동주민센터.금천글로벌센터", + "ycode": "37.4766122299", + "stop_no": "18120", + "xcode": "126.8920986539", + "stop_type": "일반차로", + "node_id": "117000034", + "nxtStn": "구립가산도서관.두산위브아파트" + }, + { + "stop_nm": "가산동주민센터.금천글로벌센터", + "ycode": "37.4762442423", + "stop_no": "18121", + "xcode": "126.8927187826", + "stop_type": "일반차로", + "node_id": "117000035", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "구립가산도서관.두산위브아파트", + "ycode": "37.474622", + "stop_no": "18122", + "xcode": "126.893887", + "stop_type": "일반차로", + "node_id": "117000036", + "nxtStn": "독산사거리" + }, + { + "stop_nm": "구립가산도서관.두산위브아파트", + "ycode": "37.474095", + "stop_no": "18123", + "xcode": "126.894568", + "stop_type": "일반차로", + "node_id": "117000037", + "nxtStn": "가산동주민센터.금천글로벌센터" + }, + { + "stop_nm": "독산사거리", + "ycode": "37.472015", + "stop_no": "18124", + "xcode": "126.895962", + "stop_type": "일반차로", + "node_id": "117000038", + "nxtStn": "금천우체국.독산1동주민센터" + }, + { + "stop_nm": "독산사거리", + "ycode": "37.4717836217", + "stop_no": "18125", + "xcode": "126.8965996871", + "stop_type": "일반차로", + "node_id": "117000039", + "nxtStn": "서울디자인직업전문학교.청년취업사관학교" + }, + { + "stop_nm": "독산주공13단지", + "ycode": "37.4568440695", + "stop_no": "18126", + "xcode": "126.8876203011", + "stop_type": "일반차로", + "node_id": "117000040", + "nxtStn": "아파트형공장" + }, + { + "stop_nm": "독산1동한신코아", + "ycode": "37.4567130685", + "stop_no": "18127", + "xcode": "126.8882116765", + "stop_type": "일반차로", + "node_id": "117000041", + "nxtStn": "독산주공14단지" + }, + { + "stop_nm": "독산주공14단지", + "ycode": "37.4611353257", + "stop_no": "18128", + "xcode": "126.886862144", + "stop_type": "일반차로", + "node_id": "117000907", + "nxtStn": "독산주공13단지" + }, + { + "stop_nm": "독산주공14단지", + "ycode": "37.461371633", + "stop_no": "18129", + "xcode": "126.8870890048", + "stop_type": "일반차로", + "node_id": "117000906", + "nxtStn": "독산근린공원" + }, + { + "stop_nm": "독산근린공원", + "ycode": "37.464177", + "stop_no": "18130", + "xcode": "126.884413", + "stop_type": "일반차로", + "node_id": "117000044", + "nxtStn": "하안주공13단지" + }, + { + "stop_nm": "독산근린공원", + "ycode": "37.4645544555", + "stop_no": "18131", + "xcode": "126.884406111", + "stop_type": "일반차로", + "node_id": "117000045", + "nxtStn": "독산역" + }, + { + "stop_nm": "독산동우시장.금천50플러스센터", + "ycode": "37.4665936596", + "stop_no": "18132", + "xcode": "126.895025251", + "stop_type": "일반차로", + "node_id": "117000046", + "nxtStn": "독산근린공원" + }, + { + "stop_nm": "독산동우시장.금천50플러스센터", + "ycode": "37.46642", + "stop_no": "18133", + "xcode": "126.895487", + "stop_type": "일반차로", + "node_id": "117000047", + "nxtStn": "금천우체국" + }, + { + "stop_nm": "시흥사거리.시흥대교", + "ycode": "37.454485357", + "stop_no": "18134", + "xcode": "126.8995917841", + "stop_type": "일반차로", + "node_id": "117000048", + "nxtStn": "안양천로입구" + }, + { + "stop_nm": "시흥사거리.금천파출소", + "ycode": "37.4542966797", + "stop_no": "18135", + "xcode": "126.8996880795", + "stop_type": "일반차로", + "node_id": "117000049", + "nxtStn": "금빛공원앞" + }, + { + "stop_nm": "벽산아파트1단지.호압사입구", + "ycode": "37.4527573711", + "stop_no": "18136", + "xcode": "126.9207601084", + "stop_type": "일반차로", + "node_id": "117000050", + "nxtStn": "벽산아파트5단지" + }, + { + "stop_nm": "벽산아파트1단지.호압사입구", + "ycode": "37.453078", + "stop_no": "18137", + "xcode": "126.92119", + "stop_type": "일반차로", + "node_id": "117000051", + "nxtStn": "산복터널.관악산휴먼시아2단지" + }, + { + "stop_nm": "벽산아파트5단지", + "ycode": "37.446768", + "stop_no": "18138", + "xcode": "126.918953", + "stop_type": "일반차로", + "node_id": "117000052", + "nxtStn": "경인교육대후문" + }, + { + "stop_nm": "벽산아파트5단지", + "ycode": "37.446355", + "stop_no": "18139", + "xcode": "126.918683", + "stop_type": "일반차로", + "node_id": "117000053", + "nxtStn": "벽산아파트1단지.호압사입구" + }, + { + "stop_nm": "시흥동은행나무.은행나무시장", + "ycode": "37.4510305202", + "stop_no": "18140", + "xcode": "126.909045481", + "stop_type": "일반차로", + "node_id": "117000054", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "시흥동은행나무.은행나무시장", + "ycode": "37.450843", + "stop_no": "18141", + "xcode": "126.909058", + "stop_type": "일반차로", + "node_id": "117000055", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "은행나무입구사거리", + "ycode": "37.4517842218", + "stop_no": "18142", + "xcode": "126.9072078502", + "stop_type": "일반차로", + "node_id": "117000056", + "nxtStn": "금빛공원앞" + }, + { + "stop_nm": "은행나무입구사거리", + "ycode": "37.451855", + "stop_no": "18143", + "xcode": "126.906735", + "stop_type": "일반차로", + "node_id": "117000057", + "nxtStn": "시흥동은행나무" + }, + { + "stop_nm": "독산한신아파트", + "ycode": "37.456923", + "stop_no": "18144", + "xcode": "126.88995", + "stop_type": "일반차로", + "node_id": "117000929", + "nxtStn": "금하마을" + }, + { + "stop_nm": "금하마을", + "ycode": "37.454119", + "stop_no": "18145", + "xcode": "126.891509", + "stop_type": "일반차로", + "node_id": "117000930", + "nxtStn": "꿈나래어린이집" + }, + { + "stop_nm": "독산고개", + "ycode": "37.475516", + "stop_no": "18146", + "xcode": "126.898463", + "stop_type": "일반차로", + "node_id": "117000060", + "nxtStn": "문성초등학교" + }, + { + "stop_nm": "독산고개", + "ycode": "37.476441", + "stop_no": "18147", + "xcode": "126.898921", + "stop_type": "일반차로", + "node_id": "117000061", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "독산사거리.한국전력구로금천지사", + "ycode": "37.472075", + "stop_no": "18148", + "xcode": "126.898103", + "stop_type": "일반차로", + "node_id": "117000062", + "nxtStn": "독산사거리" + }, + { + "stop_nm": "남문시장.청춘삘딩", + "ycode": "37.47296493", + "stop_no": "18149", + "xcode": "126.8986308908", + "stop_type": "일반차로", + "node_id": "117000063", + "nxtStn": "독산고개" + }, + { + "stop_nm": "금천우체국.독산1동주민센터", + "ycode": "37.470191", + "stop_no": "18150", + "xcode": "126.897787", + "stop_type": "일반차로", + "node_id": "117000064", + "nxtStn": "금천우체국.독산1동주민센터" + }, + { + "stop_nm": "디지털단지오거리.가산파출소", + "ycode": "37.479826", + "stop_no": "18151", + "xcode": "126.888329", + "stop_type": "일반차로", + "node_id": "116000636", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "홈플러스금천점", + "ycode": "37.468914", + "stop_no": "18152", + "xcode": "126.897671", + "stop_type": "일반차로", + "node_id": "117000066", + "nxtStn": "말미고개.금천소방서" + }, + { + "stop_nm": "시흥사거리", + "ycode": "37.452863", + "stop_no": "18160", + "xcode": "126.900957", + "stop_type": "일반차로", + "node_id": "117000074", + "nxtStn": "문일고입구" + }, + { + "stop_nm": "문일고입구", + "ycode": "37.451115", + "stop_no": "18162", + "xcode": "126.90173", + "stop_type": "일반차로", + "node_id": "117000076", + "nxtStn": "백산초등학교" + }, + { + "stop_nm": "문일고입구", + "ycode": "37.4508025778", + "stop_no": "18163", + "xcode": "126.9023183704", + "stop_type": "일반차로", + "node_id": "117000077", + "nxtStn": "금천구청.금천경찰서" + }, + { + "stop_nm": "남서울힐스테이트.국립전통예술고", + "ycode": "37.446811", + "stop_no": "18164", + "xcode": "126.90338", + "stop_type": "일반차로", + "node_id": "117000078", + "nxtStn": "시흥유통상가.금천고" + }, + { + "stop_nm": "금천폭포공원.천주교시흥성당", + "ycode": "37.4477127549", + "stop_no": "18165", + "xcode": "126.9035170378", + "stop_type": "일반차로", + "node_id": "117000079", + "nxtStn": "문일고입구" + }, + { + "stop_nm": "박미마을", + "ycode": "37.441353", + "stop_no": "18166", + "xcode": "126.903205", + "stop_type": "일반차로", + "node_id": "117000080", + "nxtStn": "기아대교" + }, + { + "stop_nm": "박미마을.금천고등학교", + "ycode": "37.44301", + "stop_no": "18167", + "xcode": "126.903938", + "stop_type": "일반차로", + "node_id": "117000081", + "nxtStn": "금천폭포공원.천주교시흥성당" + }, + { + "stop_nm": "기아대교", + "ycode": "37.4394878782", + "stop_no": "18168", + "xcode": "126.9029828892", + "stop_type": "일반차로", + "node_id": "117000082", + "nxtStn": "기아대교" + }, + { + "stop_nm": "시흥3동주민센터앞", + "ycode": "37.4401670279", + "stop_no": "18169", + "xcode": "126.9036271602", + "stop_type": "일반차로", + "node_id": "117000083", + "nxtStn": "박미마을.금천고등학교" + }, + { + "stop_nm": "석수역", + "ycode": "37.4355241561", + "stop_no": "18170", + "xcode": "126.9033111984", + "stop_type": "일반차로", + "node_id": "117000084", + "nxtStn": "시흥3동주민센터앞" + }, + { + "stop_nm": "백산초등학교", + "ycode": "37.4487629236", + "stop_no": "18171", + "xcode": "126.9039779583", + "stop_type": "일반차로", + "node_id": "117000085", + "nxtStn": "남서울힐스테이트.국립전통예술고" + }, + { + "stop_nm": "백산초등학교", + "ycode": "37.448727", + "stop_no": "18172", + "xcode": "126.904297", + "stop_type": "일반차로", + "node_id": "117000086", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "은행나무입구사거리", + "ycode": "37.4511117717", + "stop_no": "18173", + "xcode": "126.9057879216", + "stop_type": "일반차로", + "node_id": "117000087", + "nxtStn": "백산초등학교" + }, + { + "stop_nm": "은행나무입구사거리", + "ycode": "37.451427", + "stop_no": "18174", + "xcode": "126.905973", + "stop_type": "일반차로", + "node_id": "117000088", + "nxtStn": "경남아파트" + }, + { + "stop_nm": "경남아파트", + "ycode": "37.4536154301", + "stop_no": "18175", + "xcode": "126.9062606441", + "stop_type": "일반차로", + "node_id": "117000089", + "nxtStn": "시흥초등학교.금천구보훈회관" + }, + { + "stop_nm": "시흥초등학교.금천구보훈회관", + "ycode": "37.4545675549", + "stop_no": "18176", + "xcode": "126.9058231484", + "stop_type": "일반차로", + "node_id": "117000090", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "시흥초등학교.금천구보훈회관", + "ycode": "37.4553525174", + "stop_no": "18177", + "xcode": "126.905944241", + "stop_type": "일반차로", + "node_id": "117000091", + "nxtStn": "동산교회앞" + }, + { + "stop_nm": "동산교회앞", + "ycode": "37.4573470454", + "stop_no": "18178", + "xcode": "126.9052838667", + "stop_type": "일반차로", + "node_id": "117000092", + "nxtStn": "시흥초등학교.금천구보훈회관" + }, + { + "stop_nm": "동산교회앞", + "ycode": "37.457026515", + "stop_no": "18179", + "xcode": "126.9056143381", + "stop_type": "일반차로", + "node_id": "117000093", + "nxtStn": "현대시장.시흥4동주민센터" + }, + { + "stop_nm": "현대시장.시흥4동주민센터", + "ycode": "37.4596021512", + "stop_no": "18180", + "xcode": "126.9048243385", + "stop_type": "일반차로", + "node_id": "117000094", + "nxtStn": "동산교회앞" + }, + { + "stop_nm": "현대시장.시흥4동주민센터", + "ycode": "37.4592401831", + "stop_no": "18181", + "xcode": "126.9051695693", + "stop_type": "일반차로", + "node_id": "117000095", + "nxtStn": "남부여성발전센터" + }, + { + "stop_nm": "남부여성발전센터", + "ycode": "37.462457", + "stop_no": "18182", + "xcode": "126.904105", + "stop_type": "일반차로", + "node_id": "117000096", + "nxtStn": "현대시장.시흥4동주민센터" + }, + { + "stop_nm": "남부여성발전센터", + "ycode": "37.4624573826", + "stop_no": "18183", + "xcode": "126.9043527136", + "stop_type": "일반차로", + "node_id": "117000097", + "nxtStn": "독산동정훈단지" + }, + { + "stop_nm": "독산동정훈단지", + "ycode": "37.465534", + "stop_no": "18184", + "xcode": "126.902145", + "stop_type": "일반차로", + "node_id": "117000098", + "nxtStn": "남부여성발전센터앞" + }, + { + "stop_nm": "독산동정훈단지", + "ycode": "37.464452239", + "stop_no": "18185", + "xcode": "126.9030060331", + "stop_type": "일반차로", + "node_id": "117000099", + "nxtStn": "독산초등학교" + }, + { + "stop_nm": "독산초등학교", + "ycode": "37.466593", + "stop_no": "18186", + "xcode": "126.899411", + "stop_type": "일반차로", + "node_id": "117000100", + "nxtStn": "금천우체국.독산1동주민센터" + }, + { + "stop_nm": "독산초등학교", + "ycode": "37.4663141528", + "stop_no": "18187", + "xcode": "126.900032656", + "stop_type": "일반차로", + "node_id": "117000101", + "nxtStn": "독산동정훈단지" + }, + { + "stop_nm": "독산4동주민센터", + "ycode": "37.46758", + "stop_no": "18188", + "xcode": "126.902037", + "stop_type": "일반차로", + "node_id": "117000102", + "nxtStn": "독산동성당앞" + }, + { + "stop_nm": "독산동성당앞", + "ycode": "37.4689156821", + "stop_no": "18189", + "xcode": "126.9022258423", + "stop_type": "일반차로", + "node_id": "117000103", + "nxtStn": "독산동정훈단지" + }, + { + "stop_nm": "독산동성당앞", + "ycode": "37.4697072815", + "stop_no": "18190", + "xcode": "126.9027437373", + "stop_type": "일반차로", + "node_id": "117000104", + "nxtStn": "독산동쌈지공원" + }, + { + "stop_nm": "독산동쌈지공원", + "ycode": "37.4712654618", + "stop_no": "18191", + "xcode": "126.9029463536", + "stop_type": "일반차로", + "node_id": "117000105", + "nxtStn": "독산동성당앞" + }, + { + "stop_nm": "독산동쌈지공원", + "ycode": "37.471413", + "stop_no": "18192", + "xcode": "126.903195", + "stop_type": "일반차로", + "node_id": "117000106", + "nxtStn": "독산동남문시장" + }, + { + "stop_nm": "독산3동주민센터", + "ycode": "37.4753270832", + "stop_no": "18193", + "xcode": "126.9033549166", + "stop_type": "일반차로", + "node_id": "117000107", + "nxtStn": "독산동남문시장" + }, + { + "stop_nm": "독산3동주민센터", + "ycode": "37.4758229255", + "stop_no": "18194", + "xcode": "126.9036414631", + "stop_type": "일반차로", + "node_id": "117000108", + "nxtStn": "모두의학교.금천문화예술정보학교" + }, + { + "stop_nm": "모두의학교.금천문화예술정보학교", + "ycode": "37.4788389714", + "stop_no": "18195", + "xcode": "126.9036963865", + "stop_type": "일반차로", + "node_id": "117000109", + "nxtStn": "독산3동주민센터" + }, + { + "stop_nm": "모두의학교.금천문화예술정보학교", + "ycode": "37.4786589447", + "stop_no": "18196", + "xcode": "126.9039351937", + "stop_type": "일반차로", + "node_id": "117000110", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "모두의학교.금천문화예술정보학교", + "ycode": "37.4799497631", + "stop_no": "18197", + "xcode": "126.9055934267", + "stop_type": "가로변시간", + "node_id": "117000111", + "nxtStn": "관악구보훈회관.신림푸르지오" + }, + { + "stop_nm": "관악구보훈회관.신림푸르지오", + "ycode": "37.48064", + "stop_no": "18198", + "xcode": "126.90914", + "stop_type": "가로변전일", + "node_id": "117000112", + "nxtStn": "난곡입구" + }, + { + "stop_nm": "독산고등학교", + "ycode": "37.477328", + "stop_no": "18199", + "xcode": "126.911463", + "stop_type": "일반차로", + "node_id": "117000113", + "nxtStn": "독산3치안센터.꿈꾸는나무" + }, + { + "stop_nm": "독산고등학교", + "ycode": "37.477132", + "stop_no": "18200", + "xcode": "126.911502", + "stop_type": "일반차로", + "node_id": "117000114", + "nxtStn": "신림청소년독서실.신림체육센터" + }, + { + "stop_nm": "독산3치안센터.꿈꾸는나무", + "ycode": "37.476766", + "stop_no": "18201", + "xcode": "126.907187", + "stop_type": "일반차로", + "node_id": "117000115", + "nxtStn": "문성중학교" + }, + { + "stop_nm": "독산3치안센터.꿈꾸는나무", + "ycode": "37.4765368492", + "stop_no": "18202", + "xcode": "126.9073310231", + "stop_type": "일반차로", + "node_id": "117000116", + "nxtStn": "독산고등학교" + }, + { + "stop_nm": "금천우체국.독산1동주민센터", + "ycode": "37.4697576129", + "stop_no": "18203", + "xcode": "126.8972649852", + "stop_type": "일반차로", + "node_id": "117000117", + "nxtStn": "빅마켓" + }, + { + "stop_nm": "진도아파트", + "ycode": "37.4704156228", + "stop_no": "18204", + "xcode": "126.8924286434", + "stop_type": "일반차로", + "node_id": "117000118", + "nxtStn": "시흥모터스" + }, + { + "stop_nm": "제일모직아울렛", + "ycode": "37.474538", + "stop_no": "18205", + "xcode": "126.88609", + "stop_type": "일반차로", + "node_id": "117000119", + "nxtStn": "벽산디지털밸리" + }, + { + "stop_nm": "벽산디지털밸리", + "ycode": "37.476722", + "stop_no": "18206", + "xcode": "126.885215", + "stop_type": "일반차로", + "node_id": "117000120", + "nxtStn": "마리오아울렛" + }, + { + "stop_nm": "마리오아울렛", + "ycode": "37.4785459121", + "stop_no": "18207", + "xcode": "126.8843811699", + "stop_type": "일반차로", + "node_id": "117000121", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "국민연금공단구로금천지사앞", + "ycode": "37.480692", + "stop_no": "18208", + "xcode": "126.884015", + "stop_type": "일반차로", + "node_id": "117000122", + "nxtStn": "한신IT타워" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.481143", + "stop_no": "18209", + "xcode": "126.882972", + "stop_type": "일반차로", + "node_id": "117000123", + "nxtStn": "마리오아울렛" + }, + { + "stop_nm": "마리오아울렛", + "ycode": "37.47882", + "stop_no": "18210", + "xcode": "126.884006", + "stop_type": "일반차로", + "node_id": "117000124", + "nxtStn": "벽산디지털밸리" + }, + { + "stop_nm": "벽산디지털밸리", + "ycode": "37.476226", + "stop_no": "18211", + "xcode": "126.885145", + "stop_type": "일반차로", + "node_id": "117000125", + "nxtStn": "제일모직아울렛" + }, + { + "stop_nm": "제일모직아울렛", + "ycode": "37.474504", + "stop_no": "18212", + "xcode": "126.885906", + "stop_type": "일반차로", + "node_id": "117000126", + "nxtStn": "온누리아파트" + }, + { + "stop_nm": "진도아파트", + "ycode": "37.4701992555", + "stop_no": "18213", + "xcode": "126.8923170276", + "stop_type": "일반차로", + "node_id": "117000127", + "nxtStn": "현대지식산업센터" + }, + { + "stop_nm": "현대지식산업센터", + "ycode": "37.469907", + "stop_no": "18214", + "xcode": "126.895545", + "stop_type": "일반차로", + "node_id": "117000128", + "nxtStn": "홈플러스금천점" + }, + { + "stop_nm": "가산디지털단지역입구", + "ycode": "37.481437", + "stop_no": "18215", + "xcode": "126.886717", + "stop_type": "일반차로", + "node_id": "117000129", + "nxtStn": "디지털단지오거리.가산파출소" + }, + { + "stop_nm": "가산동기점", + "ycode": "37.4852270318", + "stop_no": "18216", + "xcode": "126.8752549755", + "stop_type": "일반차로", + "node_id": "117000130", + "nxtStn": "한일유엔아이아파트" + }, + { + "stop_nm": "가산동종점", + "ycode": "37.485215", + "stop_no": "18217", + "xcode": "126.875163", + "stop_type": "일반차로", + "node_id": "117000131", + "nxtStn": "종점" + }, + { + "stop_nm": "가산디지털단지역1번출구", + "ycode": "37.4817380105", + "stop_no": "18218", + "xcode": "126.8834000543", + "stop_type": "일반차로", + "node_id": "117000935", + "nxtStn": "종점" + }, + { + "stop_nm": "범일운수종점", + "ycode": "37.450409", + "stop_no": "18219", + "xcode": "126.91173", + "stop_type": "일반차로", + "node_id": "117000132", + "nxtStn": "시흥동은행나무.은행나무시장" + }, + { + "stop_nm": "삼익아파트앞", + "ycode": "37.462545", + "stop_no": "18220", + "xcode": "126.909455", + "stop_type": "일반차로", + "node_id": "117000133", + "nxtStn": "한울중학교" + }, + { + "stop_nm": "삼익아파트", + "ycode": "37.462425", + "stop_no": "18221", + "xcode": "126.909395", + "stop_type": "일반차로", + "node_id": "117000921", + "nxtStn": "종점" + }, + { + "stop_nm": "디지털3단지.영창실업", + "ycode": "37.4833271564", + "stop_no": "18222", + "xcode": "126.8789631022", + "stop_type": "일반차로", + "node_id": "117000134", + "nxtStn": "한일유앤아이아파트" + }, + { + "stop_nm": "디지털3단지.가산비즈니스센터", + "ycode": "37.47961", + "stop_no": "18223", + "xcode": "126.879733", + "stop_type": "일반차로", + "node_id": "117000135", + "nxtStn": "디지털3단지운동장" + }, + { + "stop_nm": "디지털3단지운동장", + "ycode": "37.482523", + "stop_no": "18224", + "xcode": "126.878015", + "stop_type": "일반차로", + "node_id": "117000136", + "nxtStn": "한일유앤아이아파트" + }, + { + "stop_nm": "남문시장입구", + "ycode": "37.4712411911", + "stop_no": "18225", + "xcode": "126.9008468962", + "stop_type": "일반차로", + "node_id": "117000137", + "nxtStn": "남문시장.청춘삘딩" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.4814393846", + "stop_no": "18226", + "xcode": "126.8831991462", + "stop_type": "일반차로", + "node_id": "117000138", + "nxtStn": "솔길공원" + }, + { + "stop_nm": "스타밸리앞", + "ycode": "37.481157", + "stop_no": "18227", + "xcode": "126.884864", + "stop_type": "일반차로", + "node_id": "116000615", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "독산동남문시장", + "ycode": "37.473748", + "stop_no": "18228", + "xcode": "126.903198", + "stop_type": "일반차로", + "node_id": "117000140", + "nxtStn": "독산동쌈지공원" + }, + { + "stop_nm": "독산동남문시장", + "ycode": "37.4733474011", + "stop_no": "18229", + "xcode": "126.9034139964", + "stop_type": "일반차로", + "node_id": "117000141", + "nxtStn": "독산3동주민센터" + }, + { + "stop_nm": "금빛공원앞", + "ycode": "37.4531074327", + "stop_no": "18232", + "xcode": "126.9042968029", + "stop_type": "일반차로", + "node_id": "117000911", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "금빛공원앞", + "ycode": "37.4532796733", + "stop_no": "18233", + "xcode": "126.9044559572", + "stop_type": "일반차로", + "node_id": "117000910", + "nxtStn": "시흥사거리.대명시장" + }, + { + "stop_nm": "경동택배", + "ycode": "37.4502786838", + "stop_no": "18234", + "xcode": "126.9040103136", + "stop_type": "일반차로", + "node_id": "117000918", + "nxtStn": "문일고입구" + }, + { + "stop_nm": "삼화약국", + "ycode": "37.450172", + "stop_no": "18235", + "xcode": "126.904057", + "stop_type": "일반차로", + "node_id": "117000919", + "nxtStn": "대우당약국" + }, + { + "stop_nm": "대우당약국", + "ycode": "37.4507504041", + "stop_no": "18236", + "xcode": "126.9065092253", + "stop_type": "일반차로", + "node_id": "117000915", + "nxtStn": "시흥동은행나무.은행나무시장" + }, + { + "stop_nm": "화인전자산업", + "ycode": "37.4508696683", + "stop_no": "18237", + "xcode": "126.9061589552", + "stop_type": "일반차로", + "node_id": "117000916", + "nxtStn": "경동택배" + }, + { + "stop_nm": "은행나무로입구", + "ycode": "37.4509918205", + "stop_no": "18238", + "xcode": "126.9079435086", + "stop_type": "일반차로", + "node_id": "117000917", + "nxtStn": "화인전자산업" + }, + { + "stop_nm": "시흥대교", + "ycode": "37.4532803888", + "stop_no": "18239", + "xcode": "126.8972682538", + "stop_type": "일반차로", + "node_id": "117000924", + "nxtStn": "금천구청.금천경찰서" + }, + { + "stop_nm": "가산디지털단지역1호선", + "ycode": "37.481675", + "stop_no": "18240", + "xcode": "126.881153", + "stop_type": "일반차로", + "node_id": "117000926", + "nxtStn": "디지털3단지.영창실업" + }, + { + "stop_nm": "가산한화비즈메트로2차", + "ycode": "37.4725342446", + "stop_no": "18499", + "xcode": "126.8821620179", + "stop_type": "마을버스", + "node_id": "117900163", + "nxtStn": "아톰주식회사" + }, + { + "stop_nm": "RSM타워.르노코리아서부사업소", + "ycode": "37.471015", + "stop_no": "18500", + "xcode": "126.883112", + "stop_type": "마을버스", + "node_id": "117900224", + "nxtStn": "에이스태세라타워" + }, + { + "stop_nm": "시흥1동공영주차장.금천노인종합복지관", + "ycode": "37.4513152098", + "stop_no": "18501", + "xcode": "126.8968968764", + "stop_type": "마을버스", + "node_id": "117900121", + "nxtStn": "성지아파트" + }, + { + "stop_nm": "독산한신코아.한신아파트", + "ycode": "37.4565792288", + "stop_no": "18502", + "xcode": "126.8877099959", + "stop_type": "마을버스", + "node_id": "117900120", + "nxtStn": "하안주공1317동" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.481315", + "stop_no": "18503", + "xcode": "126.882956", + "stop_type": "마을버스", + "node_id": "117900140", + "nxtStn": "마리오아울렛" + }, + { + "stop_nm": "벽산3단지", + "ycode": "37.453382", + "stop_no": "18504", + "xcode": "126.917506", + "stop_type": "마을버스", + "node_id": "117900119", + "nxtStn": "벽산3단지앞" + }, + { + "stop_nm": "성지아파트", + "ycode": "37.4511851351", + "stop_no": "18506", + "xcode": "126.8986162093", + "stop_type": "마을버스", + "node_id": "117900118", + "nxtStn": "홈플러스.문일중고입구" + }, + { + "stop_nm": "롯데캐슬1차서문.해가든아파트", + "ycode": "37.460088", + "stop_no": "18507", + "xcode": "126.892449", + "stop_type": "마을버스", + "node_id": "117900117", + "nxtStn": "금천현대아파트" + }, + { + "stop_nm": "무지개아파트", + "ycode": "37.4568567561", + "stop_no": "18508", + "xcode": "126.8986616803", + "stop_type": "마을버스", + "node_id": "117900116", + "nxtStn": "시흥사거리.대명시장" + }, + { + "stop_nm": "벽산3단지앞", + "ycode": "37.452985", + "stop_no": "18510", + "xcode": "126.916912", + "stop_type": "마을버스", + "node_id": "117900114", + "nxtStn": "호남슈퍼" + }, + { + "stop_nm": "독산역", + "ycode": "37.4670001721", + "stop_no": "18511", + "xcode": "126.889226261", + "stop_type": "마을버스", + "node_id": "117900113", + "nxtStn": "금천현대아파트" + }, + { + "stop_nm": "문성중학교", + "ycode": "37.4756246737", + "stop_no": "18512", + "xcode": "126.905866831", + "stop_type": "마을버스", + "node_id": "117900112", + "nxtStn": "남문교회" + }, + { + "stop_nm": "홈플러스.문일중고입구", + "ycode": "37.4509197575", + "stop_no": "18513", + "xcode": "126.9002034735", + "stop_type": "마을버스", + "node_id": "117900111", + "nxtStn": "시흥사거리" + }, + { + "stop_nm": "금천현대아파트", + "ycode": "37.4617003128", + "stop_no": "18514", + "xcode": "126.8916622592", + "stop_type": "마을버스", + "node_id": "117900109", + "nxtStn": "독산역" + }, + { + "stop_nm": "독산주공1319동", + "ycode": "37.4584615691", + "stop_no": "18515", + "xcode": "126.8876303149", + "stop_type": "마을버스", + "node_id": "117900110", + "nxtStn": "독산주공14단지" + }, + { + "stop_nm": "시흥사거리", + "ycode": "37.4527569013", + "stop_no": "18516", + "xcode": "126.9010148506", + "stop_type": "마을버스", + "node_id": "117900156", + "nxtStn": "원시역2번출구" + }, + { + "stop_nm": "아톰주식회사", + "ycode": "37.470774", + "stop_no": "18517", + "xcode": "126.882985", + "stop_type": "마을버스", + "node_id": "117900225", + "nxtStn": "대륭테크노타운" + }, + { + "stop_nm": "호남슈퍼", + "ycode": "37.452221", + "stop_no": "18518", + "xcode": "126.915182", + "stop_type": "마을버스", + "node_id": "117900107", + "nxtStn": "탑동초등학교.청담종합사회복지관" + }, + { + "stop_nm": "남문교회", + "ycode": "37.473712", + "stop_no": "18519", + "xcode": "126.90599", + "stop_type": "마을버스", + "node_id": "117900106", + "nxtStn": "태영빌라" + }, + { + "stop_nm": "문일고입구", + "ycode": "37.4511228214", + "stop_no": "18522", + "xcode": "126.9016533505", + "stop_type": "마을버스", + "node_id": "117900105", + "nxtStn": "남서울힐스테이트.국립전통예술고" + }, + { + "stop_nm": "탑동초등학교.청담종합사회복지관", + "ycode": "37.452015", + "stop_no": "18524", + "xcode": "126.913913", + "stop_type": "마을버스", + "node_id": "117900103", + "nxtStn": "어울샘.동산중앙교회" + }, + { + "stop_nm": "태영빌라", + "ycode": "37.4718196531", + "stop_no": "18525", + "xcode": "126.9063091413", + "stop_type": "마을버스", + "node_id": "117900102", + "nxtStn": "구민문화체육센터" + }, + { + "stop_nm": "무지개아파트", + "ycode": "37.4569918767", + "stop_no": "18526", + "xcode": "126.8986083708", + "stop_type": "마을버스", + "node_id": "117900101", + "nxtStn": "금천구종합청사.금천구청역" + }, + { + "stop_nm": "두산초등학교", + "ycode": "37.466498", + "stop_no": "18527", + "xcode": "126.89164", + "stop_type": "마을버스", + "node_id": "117900147", + "nxtStn": "독산현대아파트.금천50플러스센터" + }, + { + "stop_nm": "독산주공14단지", + "ycode": "37.459399", + "stop_no": "18528", + "xcode": "126.885831", + "stop_type": "마을버스", + "node_id": "117900100", + "nxtStn": "하안주공12.14단지입구" + }, + { + "stop_nm": "온누리아파트", + "ycode": "37.4734920619", + "stop_no": "18530", + "xcode": "126.8867089769", + "stop_type": "마을버스", + "node_id": "117900099", + "nxtStn": "에이스하이엔드타워클래식" + }, + { + "stop_nm": "어울샘.동산중앙교회", + "ycode": "37.4520508795", + "stop_no": "18531", + "xcode": "126.9118509343", + "stop_type": "마을버스", + "node_id": "117900098", + "nxtStn": "새마을금고" + }, + { + "stop_nm": "구민문화체육센터", + "ycode": "37.4701790336", + "stop_no": "18532", + "xcode": "126.906683145", + "stop_type": "마을버스", + "node_id": "117900097", + "nxtStn": "해찬아파트" + }, + { + "stop_nm": "독산현대아파트.금천50플러스센터", + "ycode": "37.4671220994", + "stop_no": "18533", + "xcode": "126.8944524695", + "stop_type": "마을버스", + "node_id": "117900096", + "nxtStn": "진도3차아파트" + }, + { + "stop_nm": "시흥유통상가.금천고", + "ycode": "37.443249", + "stop_no": "18534", + "xcode": "126.903527", + "stop_type": "마을버스", + "node_id": "117900157", + "nxtStn": "박미마을" + }, + { + "stop_nm": "에이스하이엔드타워클래식", + "ycode": "37.473581", + "stop_no": "18535", + "xcode": "126.889316", + "stop_type": "마을버스", + "node_id": "117900095", + "nxtStn": "가산테라타워" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.451361", + "stop_no": "18536", + "xcode": "126.910498", + "stop_type": "마을버스", + "node_id": "117900094", + "nxtStn": "시흥동은행나무" + }, + { + "stop_nm": "해찬아파트", + "ycode": "37.4682464727", + "stop_no": "18537", + "xcode": "126.9070812349", + "stop_type": "마을버스", + "node_id": "117900093", + "nxtStn": "구립독산도서관" + }, + { + "stop_nm": "진도3차아파트", + "ycode": "37.4684083858", + "stop_no": "18538", + "xcode": "126.8939000889", + "stop_type": "마을버스", + "node_id": "117900092", + "nxtStn": "유창슈퍼" + }, + { + "stop_nm": "박미마을", + "ycode": "37.440931611", + "stop_no": "18540", + "xcode": "126.9031686259", + "stop_type": "마을버스", + "node_id": "117900091", + "nxtStn": "기아대교" + }, + { + "stop_nm": "가산테라타워", + "ycode": "37.4740268181", + "stop_no": "18541", + "xcode": "126.8900376518", + "stop_type": "마을버스", + "node_id": "117900090", + "nxtStn": "구립가산도서관.두산위브아파트" + }, + { + "stop_nm": "시흥동은행나무", + "ycode": "37.4514540858", + "stop_no": "18542", + "xcode": "126.9079384209", + "stop_type": "마을버스", + "node_id": "117900089", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "시흥사거리.대명시장", + "ycode": "37.4546629479", + "stop_no": "18543", + "xcode": "126.9012542295", + "stop_type": "마을버스", + "node_id": "117900088", + "nxtStn": "시흥초등학교.시흥1동주민센터" + }, + { + "stop_nm": "구립독산도서관", + "ycode": "37.4671936204", + "stop_no": "18544", + "xcode": "126.9077732858", + "stop_type": "마을버스", + "node_id": "117900087", + "nxtStn": "산기슭공원" + }, + { + "stop_nm": "유창슈퍼", + "ycode": "37.4685449644", + "stop_no": "18545", + "xcode": "126.8924720236", + "stop_type": "마을버스", + "node_id": "117900086", + "nxtStn": "진도2차아파트" + }, + { + "stop_nm": "구립가산도서관.두산위브아파트", + "ycode": "37.4735235187", + "stop_no": "18548", + "xcode": "126.8924060994", + "stop_type": "마을버스", + "node_id": "117900083", + "nxtStn": "두산어린이공원" + }, + { + "stop_nm": "은행나무입구사거리", + "ycode": "37.4526253772", + "stop_no": "18549", + "xcode": "126.9054638874", + "stop_type": "마을버스", + "node_id": "117900082", + "nxtStn": "시흥초등학교.금빛공원" + }, + { + "stop_nm": "시흥초등학교.시흥1동주민센터", + "ycode": "37.4535492973", + "stop_no": "18550", + "xcode": "126.9035830113", + "stop_type": "마을버스", + "node_id": "117900081", + "nxtStn": "금빛공원" + }, + { + "stop_nm": "산기슭공원", + "ycode": "37.4639767337", + "stop_no": "18552", + "xcode": "126.9067112027", + "stop_type": "마을버스", + "node_id": "117900037", + "nxtStn": "삼익APT.금강APT" + }, + { + "stop_nm": "독산역", + "ycode": "37.4660500537", + "stop_no": "18553", + "xcode": "126.8898143938", + "stop_type": "마을버스", + "node_id": "117900148", + "nxtStn": "두산초등학교" + }, + { + "stop_nm": "진도2차아파트", + "ycode": "37.4701338936", + "stop_no": "18554", + "xcode": "126.8917891479", + "stop_type": "마을버스", + "node_id": "117900080", + "nxtStn": "빅마켓.청광아파트" + }, + { + "stop_nm": "시흥초등학교.금빛공원", + "ycode": "37.4533678073", + "stop_no": "18556", + "xcode": "126.9042399555", + "stop_type": "마을버스", + "node_id": "117900078", + "nxtStn": "시흥사거리.대명시장" + }, + { + "stop_nm": "삼익APT.금강APT", + "ycode": "37.4627270693", + "stop_no": "18557", + "xcode": "126.9069298024", + "stop_type": "마을버스", + "node_id": "117900077", + "nxtStn": "남부여성발전센터" + }, + { + "stop_nm": "두산로입구", + "ycode": "37.4718560099", + "stop_no": "18558", + "xcode": "126.8872683557", + "stop_type": "마을버스", + "node_id": "117900076", + "nxtStn": "제일모직아울렛" + }, + { + "stop_nm": "빅마켓.청광아파트", + "ycode": "37.470518615", + "stop_no": "18559", + "xcode": "126.8937184762", + "stop_type": "마을버스", + "node_id": "117900075", + "nxtStn": "길상마트" + }, + { + "stop_nm": "대륭테크노2차", + "ycode": "37.4688662671", + "stop_no": "18560", + "xcode": "126.8844198216", + "stop_type": "마을버스", + "node_id": "117900074", + "nxtStn": "대륭테크노타운" + }, + { + "stop_nm": "두산위브아파트정문", + "ycode": "37.474880117", + "stop_no": "18561", + "xcode": "126.8938818954", + "stop_type": "마을버스", + "node_id": "117900073", + "nxtStn": "가산동주민센터.금천글로벌센터" + }, + { + "stop_nm": "남부여성발전센터", + "ycode": "37.4626914362", + "stop_no": "18562", + "xcode": "126.9051799065", + "stop_type": "마을버스", + "node_id": "117900158", + "nxtStn": "독산동정훈단지" + }, + { + "stop_nm": "길상마트", + "ycode": "37.4720209133", + "stop_no": "18564", + "xcode": "126.8938893297", + "stop_type": "마을버스", + "node_id": "117900071", + "nxtStn": "두산어린이공원" + }, + { + "stop_nm": "대륭테크노타운", + "ycode": "37.4694900501", + "stop_no": "18565", + "xcode": "126.8837224396", + "stop_type": "마을버스", + "node_id": "117900070", + "nxtStn": "RSM타워.르노코리아서부사업소" + }, + { + "stop_nm": "가산동주민센터.금천글로벌센터", + "ycode": "37.4760757114", + "stop_no": "18566", + "xcode": "126.8936891244", + "stop_type": "마을버스", + "node_id": "117900069", + "nxtStn": "고원약국" + }, + { + "stop_nm": "대륭테크노타운19차", + "ycode": "37.474269", + "stop_no": "18569", + "xcode": "126.881666", + "stop_type": "마을버스", + "node_id": "117900220", + "nxtStn": "디지털3단지사거리" + }, + { + "stop_nm": "에이스태세라타워", + "ycode": "37.472455257", + "stop_no": "18570", + "xcode": "126.8824730566", + "stop_type": "마을버스", + "node_id": "117900142", + "nxtStn": "대륭테크노타운19차" + }, + { + "stop_nm": "고원약국", + "ycode": "37.4767", + "stop_no": "18571", + "xcode": "126.894742", + "stop_type": "마을버스", + "node_id": "117900067", + "nxtStn": "가산초교" + }, + { + "stop_nm": "꿈나래어린이집", + "ycode": "37.4548280098", + "stop_no": "18572", + "xcode": "126.8972130692", + "stop_type": "마을버스", + "node_id": "117900066", + "nxtStn": "금천구종합청사.금천구청역" + }, + { + "stop_nm": "우방아파트.범일운수종점", + "ycode": "37.449984", + "stop_no": "18573", + "xcode": "126.913244", + "stop_type": "마을버스", + "node_id": "117900065", + "nxtStn": "시흥2동주민센터.동일여고" + }, + { + "stop_nm": "가산초교", + "ycode": "37.477082", + "stop_no": "18577", + "xcode": "126.896508", + "stop_type": "마을버스", + "node_id": "117900063", + "nxtStn": "독산고개입구" + }, + { + "stop_nm": "STXV타워", + "ycode": "37.476776835", + "stop_no": "18581", + "xcode": "126.883254362", + "stop_type": "마을버스", + "node_id": "117900061", + "nxtStn": "7호선가산디지털단지역" + }, + { + "stop_nm": "독산고개입구", + "ycode": "37.475903", + "stop_no": "18582", + "xcode": "126.897701", + "stop_type": "마을버스", + "node_id": "117900162", + "nxtStn": "독산고개" + }, + { + "stop_nm": "벽산아파트5단지", + "ycode": "37.450056", + "stop_no": "18583", + "xcode": "126.921016", + "stop_type": "마을버스", + "node_id": "117900060", + "nxtStn": "호압사입구" + }, + { + "stop_nm": "빅마켓", + "ycode": "37.4700299236", + "stop_no": "18585", + "xcode": "126.8954116204", + "stop_type": "마을버스", + "node_id": "117900059", + "nxtStn": "진도아파트" + }, + { + "stop_nm": "한신IT타워", + "ycode": "37.4799300143", + "stop_no": "18586", + "xcode": "126.8862424501", + "stop_type": "마을버스", + "node_id": "117900058", + "nxtStn": "LG전자.W몰" + }, + { + "stop_nm": "가산동주민센터", + "ycode": "37.476908", + "stop_no": "18587", + "xcode": "126.890959", + "stop_type": "마을버스", + "node_id": "117900215", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "SG세계물산", + "ycode": "37.4763040335", + "stop_no": "18588", + "xcode": "126.8894662101", + "stop_type": "마을버스", + "node_id": "117900216", + "nxtStn": "가산로데오거리" + }, + { + "stop_nm": "가산로데오거리", + "ycode": "37.478393", + "stop_no": "18589", + "xcode": "126.887811", + "stop_type": "마을버스", + "node_id": "117900217", + "nxtStn": "이앤씨드림타워7차" + }, + { + "stop_nm": "호압사입구", + "ycode": "37.4517227734", + "stop_no": "18590", + "xcode": "126.9205758327", + "stop_type": "마을버스", + "node_id": "117900057", + "nxtStn": "벽산1단지입구" + }, + { + "stop_nm": "이앤씨드림타워7차", + "ycode": "37.479796", + "stop_no": "18592", + "xcode": "126.886662", + "stop_type": "마을버스", + "node_id": "116900302", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "LG전자.W몰", + "ycode": "37.4769117974", + "stop_no": "18593", + "xcode": "126.8886451685", + "stop_type": "마을버스", + "node_id": "117900056", + "nxtStn": "가산동주민센터" + }, + { + "stop_nm": "가산디지털단지역1호선앞", + "ycode": "37.4809146873", + "stop_no": "18594", + "xcode": "126.8814206702", + "stop_type": "마을버스", + "node_id": "117900055", + "nxtStn": "KCC웰츠밸리" + }, + { + "stop_nm": "금천육교앞", + "ycode": "37.4554158552", + "stop_no": "18595", + "xcode": "126.8915243807", + "stop_type": "마을버스", + "node_id": "117900054", + "nxtStn": "하안주공13단지" + }, + { + "stop_nm": "벽산1단지입구", + "ycode": "37.4501429977", + "stop_no": "18596", + "xcode": "126.9198492816", + "stop_type": "마을버스", + "node_id": "117900053", + "nxtStn": "벽산6단지입구" + }, + { + "stop_nm": "시흥모터스", + "ycode": "37.470577", + "stop_no": "18598", + "xcode": "126.889442", + "stop_type": "마을버스", + "node_id": "117900052", + "nxtStn": "독산역" + }, + { + "stop_nm": "문성초등학교", + "ycode": "37.473974397", + "stop_no": "18600", + "xcode": "126.8981181055", + "stop_type": "마을버스", + "node_id": "117900212", + "nxtStn": "독산사거리.한국전력구로금천지사" + }, + { + "stop_nm": "섭리의집", + "ycode": "37.4463421176", + "stop_no": "18601", + "xcode": "126.908761999", + "stop_type": "마을버스", + "node_id": "117900213", + "nxtStn": "영일빌라" + }, + { + "stop_nm": "섭리의집", + "ycode": "37.4462280579", + "stop_no": "18602", + "xcode": "126.9087889887", + "stop_type": "마을버스", + "node_id": "117900214", + "nxtStn": "시흥계곡앞" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.4802047061", + "stop_no": "18603", + "xcode": "126.88331005", + "stop_type": "마을버스", + "node_id": "117900218", + "nxtStn": "마리오아울렛" + }, + { + "stop_nm": "KCC웰츠밸리", + "ycode": "37.4835533313", + "stop_no": "18617", + "xcode": "126.8798436042", + "stop_type": "마을버스", + "node_id": "117900050", + "nxtStn": "벽산디지털밸리2차" + }, + { + "stop_nm": "독산고개입구", + "ycode": "37.4771618769", + "stop_no": "18618", + "xcode": "126.8984628392", + "stop_type": "마을버스", + "node_id": "117900049", + "nxtStn": "가산초교" + }, + { + "stop_nm": "벽산6단지입구", + "ycode": "37.4499598725", + "stop_no": "18639", + "xcode": "126.9181165746", + "stop_type": "마을버스", + "node_id": "117900048", + "nxtStn": "동일여고.금천사이언스큐브" + }, + { + "stop_nm": "독산역", + "ycode": "37.4663102404", + "stop_no": "18643", + "xcode": "126.8876524834", + "stop_type": "일반차로", + "node_id": "117000181", + "nxtStn": "독산근린공원" + }, + { + "stop_nm": "독산역", + "ycode": "37.466501", + "stop_no": "18644", + "xcode": "126.887883", + "stop_type": "일반차로", + "node_id": "117000182", + "nxtStn": "에이스하이엔드10차" + }, + { + "stop_nm": "남부여성발전센터앞", + "ycode": "37.46264", + "stop_no": "18657", + "xcode": "126.905319", + "stop_type": "일반차로", + "node_id": "117000195", + "nxtStn": "삼익APT.금강APT" + }, + { + "stop_nm": "남부여성발전센터앞", + "ycode": "37.462753", + "stop_no": "18658", + "xcode": "126.90515", + "stop_type": "일반차로", + "node_id": "117000196", + "nxtStn": "독산동정훈단지" + }, + { + "stop_nm": "산업단지백양사", + "ycode": "37.4770089899", + "stop_no": "18671", + "xcode": "126.8829204538", + "stop_type": "일반차로", + "node_id": "117000209", + "nxtStn": "구로세관" + }, + { + "stop_nm": "에이스하이엔드10차", + "ycode": "37.4684956743", + "stop_no": "18688", + "xcode": "126.886968628", + "stop_type": "일반차로", + "node_id": "117000225", + "nxtStn": "대륭테크노2차" + }, + { + "stop_nm": "대륭테크노타운17차", + "ycode": "37.468514365", + "stop_no": "18689", + "xcode": "126.8866426914", + "stop_type": "일반차로", + "node_id": "117000226", + "nxtStn": "독산역" + }, + { + "stop_nm": "금천패션아울렛사거리.마리오", + "ycode": "37.4778165267", + "stop_no": "18699", + "xcode": "126.8874417824", + "stop_type": "일반차로", + "node_id": "117000931", + "nxtStn": "디지털3단지사거리" + }, + { + "stop_nm": "범일운수종점", + "ycode": "37.450285", + "stop_no": "18708", + "xcode": "126.911602", + "stop_type": "일반차로", + "node_id": "117000920", + "nxtStn": "종점" + }, + { + "stop_nm": "한울중학교", + "ycode": "37.462648", + "stop_no": "18740", + "xcode": "126.907372", + "stop_type": "일반차로", + "node_id": "117000276", + "nxtStn": "남부여성발전센터앞" + }, + { + "stop_nm": "한울중학교", + "ycode": "37.462522", + "stop_no": "18741", + "xcode": "126.907302", + "stop_type": "일반차로", + "node_id": "117000277", + "nxtStn": "삼익아파트" + }, + { + "stop_nm": "STXV타워", + "ycode": "37.4770470579", + "stop_no": "18742", + "xcode": "126.8831442668", + "stop_type": "일반차로", + "node_id": "117000278", + "nxtStn": "7호선가산디지털단지역" + }, + { + "stop_nm": "가산초교", + "ycode": "37.477164", + "stop_no": "18763", + "xcode": "126.896484", + "stop_type": "마을버스", + "node_id": "117900036", + "nxtStn": "고원약국" + }, + { + "stop_nm": "동일여고.금천사이언스큐브", + "ycode": "37.4500269983", + "stop_no": "18764", + "xcode": "126.9167740089", + "stop_type": "마을버스", + "node_id": "117900035", + "nxtStn": "제일교회" + }, + { + "stop_nm": "두산로입구", + "ycode": "37.47191", + "stop_no": "18772", + "xcode": "126.887058", + "stop_type": "마을버스", + "node_id": "117900034", + "nxtStn": "독산역" + }, + { + "stop_nm": "석수역", + "ycode": "37.434857", + "stop_no": "18776", + "xcode": "126.902775", + "stop_type": "일반차로", + "node_id": "117000310", + "nxtStn": "KTX광명역6번출구" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.480783", + "stop_no": "18778", + "xcode": "126.884208", + "stop_type": "일반차로", + "node_id": "117000314", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.4811603109", + "stop_no": "18779", + "xcode": "126.8828483943", + "stop_type": "일반차로", + "node_id": "117000299", + "nxtStn": "패션단지" + }, + { + "stop_nm": "패션단지", + "ycode": "37.4784904864", + "stop_no": "18780", + "xcode": "126.8885942062", + "stop_type": "일반차로", + "node_id": "117000312", + "nxtStn": "가산디지털단지역" + }, + { + "stop_nm": "패션단지", + "ycode": "37.47823922", + "stop_no": "18781", + "xcode": "126.8887449605", + "stop_type": "일반차로", + "node_id": "117000313", + "nxtStn": "디지털단지오거리" + }, + { + "stop_nm": "벽산디지털밸리2차", + "ycode": "37.4839499569", + "stop_no": "18783", + "xcode": "126.8773484856", + "stop_type": "마을버스", + "node_id": "117900144", + "nxtStn": "대륭테크노타운8차" + }, + { + "stop_nm": "고원약국", + "ycode": "37.4768694128", + "stop_no": "18784", + "xcode": "126.8946699691", + "stop_type": "마을버스", + "node_id": "117900033", + "nxtStn": "가산동주민센터.금천글로벌센터" + }, + { + "stop_nm": "안천중학교", + "ycode": "37.458656", + "stop_no": "18785", + "xcode": "126.887341", + "stop_type": "마을버스", + "node_id": "117900149", + "nxtStn": "안천초등학교" + }, + { + "stop_nm": "제일교회", + "ycode": "37.4502135346", + "stop_no": "18786", + "xcode": "126.9134643355", + "stop_type": "마을버스", + "node_id": "117900032", + "nxtStn": "범일운수종점" + }, + { + "stop_nm": "서울디자인직업전문학교.청년취업사관학교", + "ycode": "37.4723731984", + "stop_no": "18787", + "xcode": "126.895861725", + "stop_type": "마을버스", + "node_id": "117900150", + "nxtStn": "두산어린이공원" + }, + { + "stop_nm": "대륭테크노타운8차", + "ycode": "37.4848785249", + "stop_no": "18788", + "xcode": "126.8768957838", + "stop_type": "마을버스", + "node_id": "117900031", + "nxtStn": "벽산디지털밸리6차" + }, + { + "stop_nm": "가산동주민센터.금천글로벌센터", + "ycode": "37.476139", + "stop_no": "18790", + "xcode": "126.893529", + "stop_type": "마을버스", + "node_id": "117900029", + "nxtStn": "두산위브아파트정문" + }, + { + "stop_nm": "범일운수종점", + "ycode": "37.450593", + "stop_no": "18791", + "xcode": "126.911085", + "stop_type": "마을버스", + "node_id": "117900160", + "nxtStn": "시흥동은행나무" + }, + { + "stop_nm": "벽산디지털밸리6차", + "ycode": "37.48564", + "stop_no": "18792", + "xcode": "126.879154", + "stop_type": "마을버스", + "node_id": "117900028", + "nxtStn": "한국건설생활환경시험연구원" + }, + { + "stop_nm": "두산위브아파트정문", + "ycode": "37.4748870849", + "stop_no": "18794", + "xcode": "126.8936139249", + "stop_type": "마을버스", + "node_id": "117900026", + "nxtStn": "두산어린이공원" + }, + { + "stop_nm": "독산한신아파트", + "ycode": "37.4571907673", + "stop_no": "18795", + "xcode": "126.889287077", + "stop_type": "마을버스", + "node_id": "117900025", + "nxtStn": "금하마을" + }, + { + "stop_nm": "길상마트", + "ycode": "37.4720667742", + "stop_no": "18796", + "xcode": "126.8937829891", + "stop_type": "마을버스", + "node_id": "117900024", + "nxtStn": "빅마켓.청광아파트" + }, + { + "stop_nm": "가산디지털단지역1호선", + "ycode": "37.480969", + "stop_no": "18797", + "xcode": "126.881297", + "stop_type": "마을버스", + "node_id": "117900023", + "nxtStn": "디지털3단지.월드벤처센터" + }, + { + "stop_nm": "한국건설생활환경시험연구원", + "ycode": "37.4833144645", + "stop_no": "18798", + "xcode": "126.880092378", + "stop_type": "마을버스", + "node_id": "116900305", + "nxtStn": "가산디지털단지역1호선" + }, + { + "stop_nm": "빅마켓.청광아파트", + "ycode": "37.4705095093", + "stop_no": "18800", + "xcode": "126.8936133461", + "stop_type": "마을버스", + "node_id": "117900021", + "nxtStn": "진도2차아파트" + }, + { + "stop_nm": "롯데캐슬2차", + "ycode": "37.458024", + "stop_no": "18801", + "xcode": "126.893438", + "stop_type": "마을버스", + "node_id": "117900222", + "nxtStn": "롯데캐슬1차서문.해가든아파트" + }, + { + "stop_nm": "문일고입구", + "ycode": "37.4509358821", + "stop_no": "18802", + "xcode": "126.9022458595", + "stop_type": "마을버스", + "node_id": "117900020", + "nxtStn": "시흥사거리" + }, + { + "stop_nm": "구립가산도서관.두산위브아파트", + "ycode": "37.4736405707", + "stop_no": "18803", + "xcode": "126.8923053067", + "stop_type": "마을버스", + "node_id": "117900019", + "nxtStn": "가산테라타워" + }, + { + "stop_nm": "롯데캐슬2차", + "ycode": "37.457662", + "stop_no": "18804", + "xcode": "126.893469", + "stop_type": "마을버스", + "node_id": "117900223", + "nxtStn": "금천구종합청사.금천구청역" + }, + { + "stop_nm": "진도2차아파트", + "ycode": "37.470251", + "stop_no": "18805", + "xcode": "126.891707", + "stop_type": "마을버스", + "node_id": "117900151", + "nxtStn": "유창슈퍼" + }, + { + "stop_nm": "한진택배", + "ycode": "37.475086", + "stop_no": "18806", + "xcode": "126.881079", + "stop_type": "마을버스", + "node_id": "117900018", + "nxtStn": "가산한화비즈메트로2차" + }, + { + "stop_nm": "가산테라타워", + "ycode": "37.4741297901", + "stop_no": "18807", + "xcode": "126.8902581746", + "stop_type": "마을버스", + "node_id": "117900017", + "nxtStn": "성지아트빌" + }, + { + "stop_nm": "금천구종합청사.금천구청역", + "ycode": "37.4560402756", + "stop_no": "18808", + "xcode": "126.8953638801", + "stop_type": "마을버스", + "node_id": "117900016", + "nxtStn": "무지개아파트" + }, + { + "stop_nm": "유창슈퍼", + "ycode": "37.4684945707", + "stop_no": "18809", + "xcode": "126.8927663012", + "stop_type": "마을버스", + "node_id": "117900015", + "nxtStn": "진도3차아파트" + }, + { + "stop_nm": "마이크로오피스사거리앞", + "ycode": "37.4721139214", + "stop_no": "18810", + "xcode": "126.8826578779", + "stop_type": "일반차로", + "node_id": "117000914", + "nxtStn": "구로세관" + }, + { + "stop_nm": "성지아트빌", + "ycode": "37.473607", + "stop_no": "18812", + "xcode": "126.889197", + "stop_type": "마을버스", + "node_id": "117900014", + "nxtStn": "온누리아파트" + }, + { + "stop_nm": "시흥모터스", + "ycode": "37.470419", + "stop_no": "18814", + "xcode": "126.889171", + "stop_type": "마을버스", + "node_id": "117900152", + "nxtStn": "진도아파트" + }, + { + "stop_nm": "홈플러스.문일중고입구", + "ycode": "37.4509297326", + "stop_no": "18815", + "xcode": "126.8996929387", + "stop_type": "마을버스", + "node_id": "117900013", + "nxtStn": "성지아파트" + }, + { + "stop_nm": "진도3차아파트", + "ycode": "37.4685947359", + "stop_no": "18816", + "xcode": "126.8937008503", + "stop_type": "마을버스", + "node_id": "117900012", + "nxtStn": "독산현대아파트.금천50플러스센터" + }, + { + "stop_nm": "대륭테크노타운", + "ycode": "37.4691595954", + "stop_no": "18817", + "xcode": "126.88367035", + "stop_type": "마을버스", + "node_id": "117900011", + "nxtStn": "대륭테크노2차.12차" + }, + { + "stop_nm": "온누리아파트", + "ycode": "37.473662", + "stop_no": "18818", + "xcode": "126.887418", + "stop_type": "마을버스", + "node_id": "117900010", + "nxtStn": "제일모직아울렛" + }, + { + "stop_nm": "성지아파트", + "ycode": "37.4512627351", + "stop_no": "18820", + "xcode": "126.8987381748", + "stop_type": "마을버스", + "node_id": "117900008", + "nxtStn": "시흥1동공영주차장.금천노인종합복지관" + }, + { + "stop_nm": "독산현대아파트.금천50플러스센터", + "ycode": "37.4670373288", + "stop_no": "18821", + "xcode": "126.8943779746", + "stop_type": "마을버스", + "node_id": "117900007", + "nxtStn": "두산초등학교" + }, + { + "stop_nm": "대륭테크노2차.12차", + "ycode": "37.4688296905", + "stop_no": "18822", + "xcode": "126.8847974797", + "stop_type": "마을버스", + "node_id": "117900145", + "nxtStn": "교학사" + }, + { + "stop_nm": "시흥1동공영주차장.금천노인종합복지관", + "ycode": "37.4513872383", + "stop_no": "18824", + "xcode": "126.8968278304", + "stop_type": "마을버스", + "node_id": "117900006", + "nxtStn": "종점" + }, + { + "stop_nm": "두산초등학교", + "ycode": "37.4666374319", + "stop_no": "18825", + "xcode": "126.8916076535", + "stop_type": "마을버스", + "node_id": "117900153", + "nxtStn": "독산역" + }, + { + "stop_nm": "교학사", + "ycode": "37.4692410639", + "stop_no": "18826", + "xcode": "126.8862111673", + "stop_type": "마을버스", + "node_id": "117900005", + "nxtStn": "대륭테크노타운17차" + }, + { + "stop_nm": "홈플러스금천점", + "ycode": "37.4694911309", + "stop_no": "18828", + "xcode": "126.8975479886", + "stop_type": "마을버스", + "node_id": "117900003", + "nxtStn": "독산초등학교" + }, + { + "stop_nm": "독산역", + "ycode": "37.4660003578", + "stop_no": "18829", + "xcode": "126.8896697625", + "stop_type": "마을버스", + "node_id": "117900002", + "nxtStn": "금천현대아파트" + }, + { + "stop_nm": "서울디자인직업전문학교.청년취업사관학교", + "ycode": "37.4723792747", + "stop_no": "18833", + "xcode": "126.8955994178", + "stop_type": "마을버스", + "node_id": "117900045", + "nxtStn": "남문시장.청춘삘딩" + }, + { + "stop_nm": "가산디지털단지역", + "ycode": "37.4812885297", + "stop_no": "18834", + "xcode": "126.8831127854", + "stop_type": "마을버스", + "node_id": "117900044", + "nxtStn": "종점" + }, + { + "stop_nm": "새마을금고", + "ycode": "37.4512100674", + "stop_no": "18836", + "xcode": "126.9105225388", + "stop_type": "마을버스", + "node_id": "117900043", + "nxtStn": "어울샘.동산중앙교회" + }, + { + "stop_nm": "금천구종합청사.금천구청역", + "ycode": "37.4560610474", + "stop_no": "18838", + "xcode": "126.8945087092", + "stop_type": "마을버스", + "node_id": "117900042", + "nxtStn": "무지개아파트" + }, + { + "stop_nm": "어울샘.동산중앙교회", + "ycode": "37.451830181", + "stop_no": "18839", + "xcode": "126.9117005818", + "stop_type": "마을버스", + "node_id": "117900041", + "nxtStn": "탑동초등학교.청담종합사회복지관" + }, + { + "stop_nm": "삼익APT.금강APT", + "ycode": "37.4627235717", + "stop_no": "18840", + "xcode": "126.907065461", + "stop_type": "마을버스", + "node_id": "117900040", + "nxtStn": "산기슭공원B" + }, + { + "stop_nm": "탑동초등학교.청담종합사회복지관", + "ycode": "37.4518750005", + "stop_no": "18841", + "xcode": "126.9140493801", + "stop_type": "마을버스", + "node_id": "117900039", + "nxtStn": "호남슈퍼" + }, + { + "stop_nm": "산기슭공원B", + "ycode": "37.4639317515", + "stop_no": "18842", + "xcode": "126.9068039573", + "stop_type": "마을버스", + "node_id": "117900038", + "nxtStn": "구립독산도서관" + }, + { + "stop_nm": "안천초등학교", + "ycode": "37.4575384027", + "stop_no": "18843", + "xcode": "126.8881256699", + "stop_type": "마을버스", + "node_id": "117900139", + "nxtStn": "독산한신아파트" + }, + { + "stop_nm": "호남슈퍼", + "ycode": "37.4522114153", + "stop_no": "18844", + "xcode": "126.9157184402", + "stop_type": "마을버스", + "node_id": "117900138", + "nxtStn": "벽산3단지앞" + }, + { + "stop_nm": "구립독산도서관", + "ycode": "37.4672144587", + "stop_no": "18845", + "xcode": "126.9079179668", + "stop_type": "마을버스", + "node_id": "117900137", + "nxtStn": "해찬아파트" + }, + { + "stop_nm": "벽산3단지앞", + "ycode": "37.45302", + "stop_no": "18847", + "xcode": "126.91707", + "stop_type": "마을버스", + "node_id": "117900136", + "nxtStn": "종점" + }, + { + "stop_nm": "해찬아파트", + "ycode": "37.4682411948", + "stop_no": "18848", + "xcode": "126.9072451691", + "stop_type": "마을버스", + "node_id": "117900135", + "nxtStn": "구민문화체육센터" + }, + { + "stop_nm": "구민문화체육센터", + "ycode": "37.4701485004", + "stop_no": "18850", + "xcode": "126.906815459", + "stop_type": "마을버스", + "node_id": "117900134", + "nxtStn": "태영빌라" + }, + { + "stop_nm": "한일유엔아이", + "ycode": "37.485528", + "stop_no": "18851", + "xcode": "126.876009", + "stop_type": "마을버스", + "node_id": "117900146", + "nxtStn": "구로시장.남구로시장입구" + }, + { + "stop_nm": "태영빌라", + "ycode": "37.471726987", + "stop_no": "18852", + "xcode": "126.906495804", + "stop_type": "마을버스", + "node_id": "117900133", + "nxtStn": "남문교회" + }, + { + "stop_nm": "남문교회", + "ycode": "37.4736343111", + "stop_no": "18853", + "xcode": "126.9060943201", + "stop_type": "마을버스", + "node_id": "117900132", + "nxtStn": "문성중학교" + }, + { + "stop_nm": "문성중학교", + "ycode": "37.4756346993", + "stop_no": "18854", + "xcode": "126.9060092799", + "stop_type": "마을버스", + "node_id": "117900131", + "nxtStn": "독산3치안센터.꿈꾸는나무" + }, + { + "stop_nm": "난곡중학교", + "ycode": "37.477083", + "stop_no": "18856", + "xcode": "126.911018", + "stop_type": "마을버스", + "node_id": "117900130", + "nxtStn": "독산3치안센터.꿈꾸는나무" + }, + { + "stop_nm": "산기슭공원", + "ycode": "37.463855", + "stop_no": "18857", + "xcode": "126.906723", + "stop_type": "마을버스", + "node_id": "117900193", + "nxtStn": "한울중학교앞" + }, + { + "stop_nm": "하안주공1317동", + "ycode": "37.4576070259", + "stop_no": "18858", + "xcode": "126.8882725165", + "stop_type": "마을버스", + "node_id": "117900129", + "nxtStn": "독산주공1319동" + }, + { + "stop_nm": "금천현대아파트", + "ycode": "37.4616767565", + "stop_no": "18859", + "xcode": "126.8915232495", + "stop_type": "마을버스", + "node_id": "117900128", + "nxtStn": "롯데캐슬1차서문.해가든아파트" + }, + { + "stop_nm": "롯데캐슬1차서문.해가든아파트", + "ycode": "37.4599253406", + "stop_no": "18860", + "xcode": "126.8922978284", + "stop_type": "마을버스", + "node_id": "117900127", + "nxtStn": "롯데캐슬2차" + }, + { + "stop_nm": "금빛공원", + "ycode": "37.452724", + "stop_no": "18861", + "xcode": "126.905136", + "stop_type": "마을버스", + "node_id": "117900126", + "nxtStn": "은행나무입구사거리" + }, + { + "stop_nm": "시흥사거리.대명시장", + "ycode": "37.4547643438", + "stop_no": "18863", + "xcode": "126.9018203929", + "stop_type": "마을버스", + "node_id": "117900125", + "nxtStn": "무지개아파트" + }, + { + "stop_nm": "시흥동은행나무", + "ycode": "37.4506837601", + "stop_no": "18864", + "xcode": "126.909262913", + "stop_type": "마을버스", + "node_id": "117900161", + "nxtStn": "우방아파트.범일운수종점" + }, + { + "stop_nm": "시흥2동주민센터.동일여고", + "ycode": "37.4499249691", + "stop_no": "18865", + "xcode": "126.9140086615", + "stop_type": "마을버스", + "node_id": "117900124", + "nxtStn": "벽산아파트5단지" + }, + { + "stop_nm": "두산어린이공원", + "ycode": "37.4736278101", + "stop_no": "18866", + "xcode": "126.8941391855", + "stop_type": "마을버스", + "node_id": "117900123", + "nxtStn": "구립가산도서관.두산위브아파트" + }, + { + "stop_nm": "금천구종합청사.금천구청역", + "ycode": "37.456374558", + "stop_no": "18867", + "xcode": "126.8954899439", + "stop_type": "마을버스", + "node_id": "117900122", + "nxtStn": "롯데캐슬2차" + }, + { + "stop_nm": "두산어린이공원", + "ycode": "37.4735169965", + "stop_no": "18868", + "xcode": "126.8941642153", + "stop_type": "마을버스", + "node_id": "117900154", + "nxtStn": "두산위브아파트정문" + }, + { + "stop_nm": "롯데캐슬3차", + "ycode": "37.4599718531", + "stop_no": "18869", + "xcode": "126.8962925927", + "stop_type": "마을버스", + "node_id": "117900209", + "nxtStn": "롯데캐슬1차정문.해가든아파트" + }, + { + "stop_nm": "롯데캐슬1차정문.해가든아파트", + "ycode": "37.4608040223", + "stop_no": "18871", + "xcode": "126.894248153", + "stop_type": "마을버스", + "node_id": "117900211", + "nxtStn": "롯데캐슬1차동문" + }, + { + "stop_nm": "롯데캐슬1차동문", + "ycode": "37.459168", + "stop_no": "18872", + "xcode": "126.896464", + "stop_type": "마을버스", + "node_id": "117900210", + "nxtStn": "금천구종합청사.금천구청역" + }, + { + "stop_nm": "롯데캐슬1차정문.해가든아파트", + "ycode": "37.4610024925", + "stop_no": "18873", + "xcode": "126.8940923871", + "stop_type": "마을버스", + "node_id": "117900208", + "nxtStn": "롯데캐슬1차서문.해가든아파트" + }, + { + "stop_nm": "백운한비치.금광포란재아파트", + "ycode": "37.4512655226", + "stop_no": "18959", + "xcode": "126.9117159329", + "stop_type": "마을버스", + "node_id": "117900174", + "nxtStn": "시흥5동주민센터" + }, + { + "stop_nm": "시흥5동주민센터", + "ycode": "37.4513528541", + "stop_no": "18960", + "xcode": "126.9087037456", + "stop_type": "마을버스", + "node_id": "117900173", + "nxtStn": "삼성산자연공원.삼성체육공원" + }, + { + "stop_nm": "삼성산자연공원.삼성체육공원", + "ycode": "37.4548245367", + "stop_no": "18961", + "xcode": "126.9094952807", + "stop_type": "마을버스", + "node_id": "117900172", + "nxtStn": "시흥아파트앞" + }, + { + "stop_nm": "시흥아파트앞", + "ycode": "37.4564310534", + "stop_no": "18962", + "xcode": "126.9081188294", + "stop_type": "마을버스", + "node_id": "117900171", + "nxtStn": "신흥초등학교" + }, + { + "stop_nm": "신흥초등학교", + "ycode": "37.4593571341", + "stop_no": "18963", + "xcode": "126.9082692514", + "stop_type": "마을버스", + "node_id": "117900170", + "nxtStn": "한빛무궁화아파트" + }, + { + "stop_nm": "한빛무궁화아파트", + "ycode": "37.4604705729", + "stop_no": "18964", + "xcode": "126.9079251069", + "stop_type": "마을버스", + "node_id": "117900169", + "nxtStn": "한울중학교앞" + }, + { + "stop_nm": "한울중학교앞", + "ycode": "37.462615541", + "stop_no": "18965", + "xcode": "126.9071955966", + "stop_type": "마을버스", + "node_id": "117900168", + "nxtStn": "종점" + }, + { + "stop_nm": "금천폭포공원", + "ycode": "37.447211891", + "stop_no": "18967", + "xcode": "126.9037052975", + "stop_type": "마을버스", + "node_id": "117900178", + "nxtStn": "영일빌라" + }, + { + "stop_nm": "영일빌라", + "ycode": "37.4473501248", + "stop_no": "18968", + "xcode": "126.9064018284", + "stop_type": "마을버스", + "node_id": "117900177", + "nxtStn": "섭리의집" + }, + { + "stop_nm": "시흥계곡앞", + "ycode": "37.4466449121", + "stop_no": "18969", + "xcode": "126.9103494029", + "stop_type": "마을버스", + "node_id": "117900176", + "nxtStn": "시흥5동성당" + }, + { + "stop_nm": "시흥5동성당", + "ycode": "37.4483281695", + "stop_no": "18970", + "xcode": "126.9115228397", + "stop_type": "마을버스", + "node_id": "117900175", + "nxtStn": "우방아파트.범일운수종점" + }, + { + "stop_nm": "한울중학교앞", + "ycode": "37.462329", + "stop_no": "18972", + "xcode": "126.907784", + "stop_type": "마을버스", + "node_id": "117900192", + "nxtStn": "한빛무궁화아파트" + }, + { + "stop_nm": "한빛무궁화아파트", + "ycode": "37.460613", + "stop_no": "18973", + "xcode": "126.907927", + "stop_type": "마을버스", + "node_id": "117900191", + "nxtStn": "신흥초등학교" + }, + { + "stop_nm": "신흥초등학교", + "ycode": "37.459322", + "stop_no": "18974", + "xcode": "126.908134", + "stop_type": "마을버스", + "node_id": "117900190", + "nxtStn": "시흥아파트앞" + }, + { + "stop_nm": "시흥아파트앞", + "ycode": "37.4566174024", + "stop_no": "18975", + "xcode": "126.9078868775", + "stop_type": "마을버스", + "node_id": "117900194", + "nxtStn": "삼성체육공원.삼성산자연공원" + }, + { + "stop_nm": "삼성체육공원.삼성산자연공원", + "ycode": "37.454675697", + "stop_no": "18976", + "xcode": "126.9092908701", + "stop_type": "마을버스", + "node_id": "117900196", + "nxtStn": "시흥5동주민센터" + }, + { + "stop_nm": "시흥5동주민센터", + "ycode": "37.4516321", + "stop_no": "18977", + "xcode": "126.9085768142", + "stop_type": "마을버스", + "node_id": "117900207", + "nxtStn": "금광포란재.백운한비치아파트" + }, + { + "stop_nm": "금광포란재.백운한비치아파트", + "ycode": "37.4511323266", + "stop_no": "18978", + "xcode": "126.9113929457", + "stop_type": "마을버스", + "node_id": "117900189", + "nxtStn": "관악우방아파트" + }, + { + "stop_nm": "관악우방아파트", + "ycode": "37.4499083635", + "stop_no": "18979", + "xcode": "126.912257908", + "stop_type": "마을버스", + "node_id": "117900188", + "nxtStn": "시흥5동성당" + }, + { + "stop_nm": "시흥5동성당", + "ycode": "37.4486202245", + "stop_no": "18980", + "xcode": "126.9116502129", + "stop_type": "마을버스", + "node_id": "117900187", + "nxtStn": "시흥계곡앞" + }, + { + "stop_nm": "시흥계곡앞", + "ycode": "37.4467809866", + "stop_no": "18981", + "xcode": "126.9103582822", + "stop_type": "마을버스", + "node_id": "117900186", + "nxtStn": "섭리의집" + }, + { + "stop_nm": "영일빌라", + "ycode": "37.4475057487", + "stop_no": "18982", + "xcode": "126.9060636976", + "stop_type": "마을버스", + "node_id": "117900185", + "nxtStn": "금천문화원.국립전통예술중고" + }, + { + "stop_nm": "금천문화원.국립전통예술중고", + "ycode": "37.4464605893", + "stop_no": "18983", + "xcode": "126.9045191313", + "stop_type": "마을버스", + "node_id": "117900195", + "nxtStn": "금천고등학교" + }, + { + "stop_nm": "금천고등학교", + "ycode": "37.4447220355", + "stop_no": "18984", + "xcode": "126.9047098297", + "stop_type": "마을버스", + "node_id": "117900184", + "nxtStn": "시흥3동공영주차장앞" + }, + { + "stop_nm": "시흥3동공영주차장앞", + "ycode": "37.4428790713", + "stop_no": "18985", + "xcode": "126.9044714442", + "stop_type": "마을버스", + "node_id": "117900183", + "nxtStn": "기아대교앞" + }, + { + "stop_nm": "기아대교앞", + "ycode": "37.4379594347", + "stop_no": "18987", + "xcode": "126.9027904886", + "stop_type": "마을버스", + "node_id": "117900182", + "nxtStn": "석수역" + }, + { + "stop_nm": "석수역", + "ycode": "37.434974", + "stop_no": "18988", + "xcode": "126.902857", + "stop_type": "마을버스", + "node_id": "117900181", + "nxtStn": "석수역" + }, + { + "stop_nm": "석수역", + "ycode": "37.4350042057", + "stop_no": "18989", + "xcode": "126.9033005669", + "stop_type": "마을버스", + "node_id": "117900180", + "nxtStn": "시흥3동주민센터앞" + }, + { + "stop_nm": "시흥사거리", + "ycode": "37.4526734399", + "stop_no": "18992", + "xcode": "126.9016076387", + "stop_type": "마을버스", + "node_id": "117900166", + "nxtStn": "무지개아파트" + }, + { + "stop_nm": "안양천로입구", + "ycode": "37.4524815093", + "stop_no": "18993", + "xcode": "126.8931359029", + "stop_type": "마을버스", + "node_id": "117900165", + "nxtStn": "금천육교앞" + }, + { + "stop_nm": "남문시장입구.청춘삘딩", + "ycode": "37.471228", + "stop_no": "18994", + "xcode": "126.900008", + "stop_type": "일반차로", + "node_id": "117000922", + "nxtStn": "독산동쌈지공원" + }, + { + "stop_nm": "LG전자", + "ycode": "37.4710628529", + "stop_no": "18995", + "xcode": "126.885863639", + "stop_type": "일반차로", + "node_id": "117000319", + "nxtStn": "구로세관" + }, + { + "stop_nm": "LG전자", + "ycode": "37.4702518143", + "stop_no": "18996", + "xcode": "126.8859089046", + "stop_type": "일반차로", + "node_id": "117000318", + "nxtStn": "대륭테크노타운17차" + }, + { + "stop_nm": "구로세관", + "ycode": "37.4724228188", + "stop_no": "18997", + "xcode": "126.8852249843", + "stop_type": "일반차로", + "node_id": "117000317", + "nxtStn": "STXV타워" + }, + { + "stop_nm": "구로세관", + "ycode": "37.4724874213", + "stop_no": "18998", + "xcode": "126.8849399744", + "stop_type": "일반차로", + "node_id": "117000316", + "nxtStn": "LG전자" + }, + { + "stop_nm": "7호선가산디지털단지역", + "ycode": "37.4795024072", + "stop_no": "18999", + "xcode": "126.8820730575", + "stop_type": "일반차로", + "node_id": "117000315", + "nxtStn": "가산디지털단지역1호선앞" + }, + { + "stop_nm": "문래동남성아파트", + "ycode": "37.511828", + "stop_no": "19001", + "xcode": "126.893705", + "stop_type": "중앙차로", + "node_id": "118000001", + "nxtStn": "남부지방법원등기국.구로세무서(에이스하이테크시티)" + }, + { + "stop_nm": "문래동남성아파트", + "ycode": "37.511202", + "stop_no": "19002", + "xcode": "126.892312", + "stop_type": "중앙차로", + "node_id": "118000002", + "nxtStn": "신도림역" + }, + { + "stop_nm": "남부지방법원등기국.구로세무서(에이스하이테크시티)", + "ycode": "37.5144838858", + "stop_no": "19003", + "xcode": "126.9011873627", + "stop_type": "중앙차로", + "node_id": "118000003", + "nxtStn": "영등포역" + }, + { + "stop_nm": "남부지방법원등기국.구로세무서(에이스하이테크시티)", + "ycode": "37.5140403403", + "stop_no": "19004", + "xcode": "126.8997458122", + "stop_type": "중앙차로", + "node_id": "118000004", + "nxtStn": "남성아파트" + }, + { + "stop_nm": "영등포역", + "ycode": "37.515863", + "stop_no": "19005", + "xcode": "126.905092", + "stop_type": "중앙차로", + "node_id": "118000005", + "nxtStn": "한경협회관" + }, + { + "stop_nm": "영등포역", + "ycode": "37.516587933", + "stop_no": "19006", + "xcode": "126.9070303774", + "stop_type": "중앙차로", + "node_id": "118000006", + "nxtStn": "남부지방법원등기국.구로세무서(에이스하이테크시티)" + }, + { + "stop_nm": "여의도환승센터", + "ycode": "37.525517", + "stop_no": "19007", + "xcode": "126.924244", + "stop_type": "중앙차로", + "node_id": "118000007", + "nxtStn": "파크원타워.LG트윈타워" + }, + { + "stop_nm": "여의도환승센터", + "ycode": "37.5259231137", + "stop_no": "19008", + "xcode": "126.9243582037", + "stop_type": "중앙차로", + "node_id": "118000008", + "nxtStn": "여의도공원" + }, + { + "stop_nm": "서울영림초등학교", + "ycode": "37.487149", + "stop_no": "19009", + "xcode": "126.904837", + "stop_type": "중앙차로", + "node_id": "118000009", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "강남성심병원.대림성모병원", + "ycode": "37.490979", + "stop_no": "19010", + "xcode": "126.907999", + "stop_type": "중앙차로", + "node_id": "118000010", + "nxtStn": "서울영림초등학교" + }, + { + "stop_nm": "경남아너스빌아파트", + "ycode": "37.4955867471", + "stop_no": "19011", + "xcode": "126.9115745553", + "stop_type": "중앙차로", + "node_id": "118000011", + "nxtStn": "강남성심병원.대림성모병원" + }, + { + "stop_nm": "보라매공원", + "ycode": "37.4970138571", + "stop_no": "19012", + "xcode": "126.9163883691", + "stop_type": "중앙차로", + "node_id": "118000012", + "nxtStn": "경남아너스빌아파트" + }, + { + "stop_nm": "보라매역.동작세무서", + "ycode": "37.4989764909", + "stop_no": "19013", + "xcode": "126.9202610024", + "stop_type": "중앙차로", + "node_id": "118000013", + "nxtStn": "보라매공원" + }, + { + "stop_nm": "서울지방병무청", + "ycode": "37.5043933307", + "stop_no": "19014", + "xcode": "126.9219621952", + "stop_type": "중앙차로", + "node_id": "118000014", + "nxtStn": "보라매역.동작세무서" + }, + { + "stop_nm": "대방역", + "ycode": "37.5126573835", + "stop_no": "19015", + "xcode": "126.9248245911", + "stop_type": "중앙차로", + "node_id": "118000015", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "여의도환승센터", + "ycode": "37.5261696974", + "stop_no": "19016", + "xcode": "126.9243412576", + "stop_type": "중앙차로", + "node_id": "118000512", + "nxtStn": "여의도공원" + }, + { + "stop_nm": "여의도환승센터", + "ycode": "37.525316", + "stop_no": "19017", + "xcode": "126.9241", + "stop_type": "중앙차로", + "node_id": "118000513", + "nxtStn": "유진투자증권" + }, + { + "stop_nm": "대성병원", + "ycode": "37.5122856218", + "stop_no": "19101", + "xcode": "126.9099270612", + "stop_type": "일반차로", + "node_id": "118000016", + "nxtStn": "우신초등학교" + }, + { + "stop_nm": "영등포공원.영등포문화원", + "ycode": "37.5138042027", + "stop_no": "19102", + "xcode": "126.9114184502", + "stop_type": "일반차로", + "node_id": "118000017", + "nxtStn": "영등포로터리" + }, + { + "stop_nm": "영등포공원.영등포문화원", + "ycode": "37.5149507944", + "stop_no": "19103", + "xcode": "126.9119431216", + "stop_type": "일반차로", + "node_id": "118000018", + "nxtStn": "대성병원" + }, + { + "stop_nm": "영등포시장", + "ycode": "37.5218552056", + "stop_no": "19104", + "xcode": "126.9051989835", + "stop_type": "일반차로", + "node_id": "118000019", + "nxtStn": "신화병원" + }, + { + "stop_nm": "영등포시장입구", + "ycode": "37.519735", + "stop_no": "19105", + "xcode": "126.906653", + "stop_type": "가로변시간", + "node_id": "118000020", + "nxtStn": "김안과병원" + }, + { + "stop_nm": "영등포로터리", + "ycode": "37.519122401", + "stop_no": "19106", + "xcode": "126.9097732019", + "stop_type": "가로변시간", + "node_id": "118000021", + "nxtStn": "영등포시장입구" + }, + { + "stop_nm": "영등포시장로터리방면", + "ycode": "37.51892", + "stop_no": "19107", + "xcode": "126.909291", + "stop_type": "가로변시간", + "node_id": "118000023", + "nxtStn": "근로복지공단.서울남부지사" + }, + { + "stop_nm": "영등포시장", + "ycode": "37.5194457626", + "stop_no": "19109", + "xcode": "126.9064498646", + "stop_type": "가로변시간", + "node_id": "118000024", + "nxtStn": "영등포시장로터리방면" + }, + { + "stop_nm": "경방타임스퀘어.신세계백화점", + "ycode": "37.5183837379", + "stop_no": "19110", + "xcode": "126.9057837283", + "stop_type": "일반차로", + "node_id": "118000025", + "nxtStn": "영등포시장전철역" + }, + { + "stop_nm": "경방타임스퀘어.신세계백화점", + "ycode": "37.5175082319", + "stop_no": "19112", + "xcode": "126.9062396031", + "stop_type": "일반차로", + "node_id": "118000027", + "nxtStn": "영등포시장로터리방면" + }, + { + "stop_nm": "영등포역.패어필드호텔", + "ycode": "37.5168977418", + "stop_no": "19113", + "xcode": "126.9075734106", + "stop_type": "일반차로", + "node_id": "118000618", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "영등포역", + "ycode": "37.51706", + "stop_no": "19114", + "xcode": "126.909045", + "stop_type": "일반차로", + "node_id": "118000029", + "nxtStn": "신길역5호선" + }, + { + "stop_nm": "경방타임스퀘어.신세계백화점", + "ycode": "37.5183572987", + "stop_no": "19117", + "xcode": "126.9053991224", + "stop_type": "일반차로", + "node_id": "118000032", + "nxtStn": "영등포역" + }, + { + "stop_nm": "김안과병원", + "ycode": "37.5200710672", + "stop_no": "19118", + "xcode": "126.9030257176", + "stop_type": "가로변시간", + "node_id": "118000033", + "nxtStn": "영등포시장" + }, + { + "stop_nm": "김안과병원", + "ycode": "37.5204160307", + "stop_no": "19119", + "xcode": "126.9028340777", + "stop_type": "가로변시간", + "node_id": "118000034", + "nxtStn": "당산동진로아파트" + }, + { + "stop_nm": "영등포시장", + "ycode": "37.521318", + "stop_no": "19120", + "xcode": "126.904785", + "stop_type": "일반차로", + "node_id": "118000035", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "신화병원", + "ycode": "37.5245305326", + "stop_no": "19121", + "xcode": "126.9051548683", + "stop_type": "일반차로", + "node_id": "118000036", + "nxtStn": "영등포시장전철역" + }, + { + "stop_nm": "신화병원", + "ycode": "37.5248948852", + "stop_no": "19122", + "xcode": "126.9055402111", + "stop_type": "일반차로", + "node_id": "118000037", + "nxtStn": "영등포전화국" + }, + { + "stop_nm": "영동초교", + "ycode": "37.5251590221", + "stop_no": "19123", + "xcode": "126.9068194848", + "stop_type": "일반차로", + "node_id": "118000038", + "nxtStn": "국회의사당" + }, + { + "stop_nm": "영동초교.영등포평생학습관", + "ycode": "37.525498", + "stop_no": "19124", + "xcode": "126.907365", + "stop_type": "일반차로", + "node_id": "118000039", + "nxtStn": "당산푸르지오아파트" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.529082", + "stop_no": "19125", + "xcode": "126.905597", + "stop_type": "가로변시간", + "node_id": "118000040", + "nxtStn": "신화병원" + }, + { + "stop_nm": "당산푸르지오아파트", + "ycode": "37.529032", + "stop_no": "19126", + "xcode": "126.905958", + "stop_type": "가로변전일", + "node_id": "118000041", + "nxtStn": "당산역삼성래미안아파트" + }, + { + "stop_nm": "하이서울유스호스텔", + "ycode": "37.525637672", + "stop_no": "19127", + "xcode": "126.903657754", + "stop_type": "일반차로", + "node_id": "118000042", + "nxtStn": "신화병원" + }, + { + "stop_nm": "국회의사당", + "ycode": "37.5298980961", + "stop_no": "19129", + "xcode": "126.9180241528", + "stop_type": "일반차로", + "node_id": "118000044", + "nxtStn": "영등포아리수정수센터" + }, + { + "stop_nm": "KBS", + "ycode": "37.524653", + "stop_no": "19130", + "xcode": "126.918112", + "stop_type": "일반차로", + "node_id": "118000045", + "nxtStn": "한경협회관" + }, + { + "stop_nm": "국회의사당", + "ycode": "37.529418", + "stop_no": "19131", + "xcode": "126.917883", + "stop_type": "일반차로", + "node_id": "118000046", + "nxtStn": "광흥창역.서강동주민센터" + }, + { + "stop_nm": "국회의사당역.국민은행", + "ycode": "37.528518", + "stop_no": "19132", + "xcode": "126.918192", + "stop_type": "일반차로", + "node_id": "118000047", + "nxtStn": "국회의사당" + }, + { + "stop_nm": "국회의사당역", + "ycode": "37.527993", + "stop_no": "19133", + "xcode": "126.91758", + "stop_type": "일반차로", + "node_id": "118000048", + "nxtStn": "여의도역" + }, + { + "stop_nm": "여의도순복음교회", + "ycode": "37.53091", + "stop_no": "19136", + "xcode": "126.924752", + "stop_type": "일반차로", + "node_id": "118000051", + "nxtStn": "여의도공원" + }, + { + "stop_nm": "여의도순복음교회", + "ycode": "37.53169", + "stop_no": "19137", + "xcode": "126.922932", + "stop_type": "일반차로", + "node_id": "118000052", + "nxtStn": "광흥창역" + }, + { + "stop_nm": "여의도공원", + "ycode": "37.5295296763", + "stop_no": "19138", + "xcode": "126.9278920215", + "stop_type": "일반차로", + "node_id": "118000053", + "nxtStn": "여의나루역" + }, + { + "stop_nm": "여의나루역", + "ycode": "37.527457", + "stop_no": "19139", + "xcode": "126.93148", + "stop_type": "일반차로", + "node_id": "118000054", + "nxtStn": "페어몬트앰배서더" + }, + { + "stop_nm": "여의나루역", + "ycode": "37.527387513", + "stop_no": "19140", + "xcode": "126.9320237959", + "stop_type": "일반차로", + "node_id": "118000055", + "nxtStn": "켄싱턴호텔.여의도" + }, + { + "stop_nm": "여의도중학교", + "ycode": "37.5244095933", + "stop_no": "19141", + "xcode": "126.9356353384", + "stop_type": "일반차로", + "node_id": "118000056", + "nxtStn": "63빌딩.가톨릭대학교여의도성모병원" + }, + { + "stop_nm": "여의도중학교", + "ycode": "37.524458", + "stop_no": "19142", + "xcode": "126.935963", + "stop_type": "일반차로", + "node_id": "118000057", + "nxtStn": "여의나루역" + }, + { + "stop_nm": "63빌딩.가톨릭대학교여의도성모병원", + "ycode": "37.519404", + "stop_no": "19143", + "xcode": "126.937606", + "stop_type": "일반차로", + "node_id": "118000058", + "nxtStn": "여의동주민센터" + }, + { + "stop_nm": "63빌딩.가톨릭대학교여의도성모병원", + "ycode": "37.5191618125", + "stop_no": "19144", + "xcode": "126.9377092728", + "stop_type": "일반차로", + "node_id": "118000059", + "nxtStn": "여의도중학교" + }, + { + "stop_nm": "시범아파트", + "ycode": "37.5210428541", + "stop_no": "19145", + "xcode": "126.9351904947", + "stop_type": "일반차로", + "node_id": "118000060", + "nxtStn": "원효로3가" + }, + { + "stop_nm": "시범아파트.대교아파트", + "ycode": "37.521032", + "stop_no": "19146", + "xcode": "126.934428", + "stop_type": "가로변시간", + "node_id": "118000061", + "nxtStn": "KBS별관" + }, + { + "stop_nm": "여의동주민센터", + "ycode": "37.518704", + "stop_no": "19147", + "xcode": "126.934219", + "stop_type": "일반차로", + "node_id": "118000062", + "nxtStn": "KBS별관" + }, + { + "stop_nm": "여의동주민센터", + "ycode": "37.518519", + "stop_no": "19148", + "xcode": "126.933972", + "stop_type": "일반차로", + "node_id": "118000063", + "nxtStn": "63빌딩.가톨릭대학교여의도성모병원" + }, + { + "stop_nm": "진주아파트", + "ycode": "37.5192462487", + "stop_no": "19149", + "xcode": "126.9323106146", + "stop_type": "일반차로", + "node_id": "118000064", + "nxtStn": "시범아파트" + }, + { + "stop_nm": "KBS별관", + "ycode": "37.519192", + "stop_no": "19150", + "xcode": "126.931585", + "stop_type": "가로변시간", + "node_id": "118000065", + "nxtStn": "샛강역1번출구.여의도자이" + }, + { + "stop_nm": "샛강역.앙카라공원", + "ycode": "37.518109", + "stop_no": "19151", + "xcode": "126.930299", + "stop_type": "가로변전일", + "node_id": "118000066", + "nxtStn": "여의도한양아파트" + }, + { + "stop_nm": "여의도공원", + "ycode": "37.523605", + "stop_no": "19152", + "xcode": "126.920262", + "stop_type": "일반차로", + "node_id": "118000067", + "nxtStn": "영등포역" + }, + { + "stop_nm": "샛강역1번출구.여의도자이", + "ycode": "37.5188169961", + "stop_no": "19153", + "xcode": "126.9272111083", + "stop_type": "일반차로", + "node_id": "118000068", + "nxtStn": "여의도역" + }, + { + "stop_nm": "샛강역4번출구.여의도자이", + "ycode": "37.518679", + "stop_no": "19154", + "xcode": "126.926742", + "stop_type": "일반차로", + "node_id": "118000069", + "nxtStn": "샛강역.앙카라공원" + }, + { + "stop_nm": "여의도역", + "ycode": "37.520614", + "stop_no": "19155", + "xcode": "126.92492", + "stop_type": "일반차로", + "node_id": "118000070", + "nxtStn": "샛강역4번출구.여의도자이" + }, + { + "stop_nm": "여의도역", + "ycode": "37.521291", + "stop_no": "19156", + "xcode": "126.924816", + "stop_type": "일반차로", + "node_id": "118000071", + "nxtStn": "한국거래소" + }, + { + "stop_nm": "한국거래소", + "ycode": "37.523351", + "stop_no": "19157", + "xcode": "126.927069", + "stop_type": "일반차로", + "node_id": "118000072", + "nxtStn": "삼부아파트" + }, + { + "stop_nm": "한국거래소", + "ycode": "37.5236693289", + "stop_no": "19158", + "xcode": "126.9270706296", + "stop_type": "일반차로", + "node_id": "118000073", + "nxtStn": "여의도역" + }, + { + "stop_nm": "삼부아파트", + "ycode": "37.5251264453", + "stop_no": "19159", + "xcode": "126.9301171862", + "stop_type": "일반차로", + "node_id": "118000074", + "nxtStn": "여의나루역" + }, + { + "stop_nm": "여의도공작아파트", + "ycode": "37.5259920176", + "stop_no": "19160", + "xcode": "126.9309977447", + "stop_type": "일반차로", + "node_id": "118000075", + "nxtStn": "더현대서울" + }, + { + "stop_nm": "전경련회관", + "ycode": "37.5218906273", + "stop_no": "19161", + "xcode": "126.9188836862", + "stop_type": "일반차로", + "node_id": "118000076", + "nxtStn": "여의도환승센터" + }, + { + "stop_nm": "당산동진로아파트", + "ycode": "37.5213255961", + "stop_no": "19162", + "xcode": "126.8968775442", + "stop_type": "가로변전일", + "node_id": "118000077", + "nxtStn": "양남동로타리" + }, + { + "stop_nm": "당산동진로아파트", + "ycode": "37.5210022006", + "stop_no": "19163", + "xcode": "126.8969911224", + "stop_type": "가로변시간", + "node_id": "118000078", + "nxtStn": "김안과병원" + }, + { + "stop_nm": "필립메디컬센터", + "ycode": "37.5206987975", + "stop_no": "19164", + "xcode": "126.8952459024", + "stop_type": "일반차로", + "node_id": "118000079", + "nxtStn": "문래역" + }, + { + "stop_nm": "양남동로타리", + "ycode": "37.522120309", + "stop_no": "19165", + "xcode": "126.8917785954", + "stop_type": "가로변시간", + "node_id": "118000080", + "nxtStn": "양평1동주민센터" + }, + { + "stop_nm": "교보앞", + "ycode": "37.5217213888", + "stop_no": "19166", + "xcode": "126.8920699266", + "stop_type": "가로변시간", + "node_id": "118000081", + "nxtStn": "당산동진로아파트" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.5230559785", + "stop_no": "19167", + "xcode": "126.8961601415", + "stop_type": "일반차로", + "node_id": "118000082", + "nxtStn": "당산삼성아파트" + }, + { + "stop_nm": "영등포구청", + "ycode": "37.5262213165", + "stop_no": "19168", + "xcode": "126.8969364269", + "stop_type": "일반차로", + "node_id": "118000083", + "nxtStn": "당산삼성아파트" + }, + { + "stop_nm": "영등포구청", + "ycode": "37.5254134463", + "stop_no": "19169", + "xcode": "126.8963808906", + "stop_type": "일반차로", + "node_id": "118000084", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "영등포구민회관.영등포경찰서", + "ycode": "37.5267409499", + "stop_no": "19170", + "xcode": "126.8997280516", + "stop_type": "일반차로", + "node_id": "118000085", + "nxtStn": "하이서울유스호스텔" + }, + { + "stop_nm": "당산동삼익아파트", + "ycode": "37.528073103", + "stop_no": "19171", + "xcode": "126.8959427393", + "stop_type": "일반차로", + "node_id": "118000086", + "nxtStn": "영등포구청" + }, + { + "stop_nm": "당산역", + "ycode": "37.534729", + "stop_no": "19172", + "xcode": "126.900525", + "stop_type": "일반차로", + "node_id": "118000087", + "nxtStn": "선유도공원" + }, + { + "stop_nm": "당산119안전센터.당산역", + "ycode": "37.534925387", + "stop_no": "19173", + "xcode": "126.8994545764", + "stop_type": "가로변시간", + "node_id": "118000088", + "nxtStn": "당산역" + }, + { + "stop_nm": "당산역삼성래미안아파트", + "ycode": "37.533022", + "stop_no": "19174", + "xcode": "126.903388", + "stop_type": "가로변시간", + "node_id": "118000089", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "당산역삼성래미안아파트", + "ycode": "37.5331897116", + "stop_no": "19175", + "xcode": "126.9035824119", + "stop_type": "가로변시간", + "node_id": "118000090", + "nxtStn": "가양대교(가상)" + }, + { + "stop_nm": "당산역", + "ycode": "37.5348629874", + "stop_no": "19176", + "xcode": "126.9024102445", + "stop_type": "일반차로", + "node_id": "118000091", + "nxtStn": "선유도역.롯데제과" + }, + { + "stop_nm": "당산역", + "ycode": "37.5328062968", + "stop_no": "19177", + "xcode": "126.9008638878", + "stop_type": "일반차로", + "node_id": "118000092", + "nxtStn": "당산유원제일1차아파트" + }, + { + "stop_nm": "당산역", + "ycode": "37.532825", + "stop_no": "19178", + "xcode": "126.9013", + "stop_type": "일반차로", + "node_id": "118000093", + "nxtStn": "한신아파트.선유도역" + }, + { + "stop_nm": "페어몬트앰배서더", + "ycode": "37.524976", + "stop_no": "19180", + "xcode": "126.929282", + "stop_type": "일반차로", + "node_id": "118000617", + "nxtStn": "유진투자증권" + }, + { + "stop_nm": "당산삼성아파트", + "ycode": "37.528832", + "stop_no": "19181", + "xcode": "126.898133", + "stop_type": "일반차로", + "node_id": "118000096", + "nxtStn": "당산역" + }, + { + "stop_nm": "당산유원제일1차아파트", + "ycode": "37.5287170417", + "stop_no": "19182", + "xcode": "126.8976084675", + "stop_type": "일반차로", + "node_id": "118000097", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "서울영등포우체국", + "ycode": "37.5284831639", + "stop_no": "19183", + "xcode": "126.8960123192", + "stop_type": "일반차로", + "node_id": "118000098", + "nxtStn": "목동아파트5.6단지사잇길.경인초교" + }, + { + "stop_nm": "도림동자치회관", + "ycode": "37.5095969775", + "stop_no": "19184", + "xcode": "126.9074658059", + "stop_type": "일반차로", + "node_id": "118000099", + "nxtStn": "크라운사거리" + }, + { + "stop_nm": "도림마을금고", + "ycode": "37.508423", + "stop_no": "19186", + "xcode": "126.900315", + "stop_type": "일반차로", + "node_id": "118000101", + "nxtStn": "문래자이아파트" + }, + { + "stop_nm": "도림마을금고", + "ycode": "37.5082587788", + "stop_no": "19187", + "xcode": "126.9000627119", + "stop_type": "일반차로", + "node_id": "118000102", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "신길가마산로교차로", + "ycode": "37.5065149631", + "stop_no": "19188", + "xcode": "126.9111162984", + "stop_type": "일반차로", + "node_id": "118000595", + "nxtStn": "우신초등학교" + }, + { + "stop_nm": "문래역", + "ycode": "37.519234", + "stop_no": "19192", + "xcode": "126.894219", + "stop_type": "일반차로", + "node_id": "118000107", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "문래역", + "ycode": "37.519063", + "stop_no": "19193", + "xcode": "126.894412", + "stop_type": "일반차로", + "node_id": "118000108", + "nxtStn": "벽산메가트리움APT" + }, + { + "stop_nm": "문래동대림아파트", + "ycode": "37.5169082251", + "stop_no": "19194", + "xcode": "126.8896944058", + "stop_type": "일반차로", + "node_id": "118000109", + "nxtStn": "문래힐스테이트" + }, + { + "stop_nm": "국화아파트", + "ycode": "37.51565", + "stop_no": "19195", + "xcode": "126.89237", + "stop_type": "일반차로", + "node_id": "118000110", + "nxtStn": "동양볼링장" + }, + { + "stop_nm": "현대6차아파트", + "ycode": "37.518198", + "stop_no": "19196", + "xcode": "126.884328", + "stop_type": "일반차로", + "node_id": "118000111", + "nxtStn": "현대3차아파트" + }, + { + "stop_nm": "문래롯데캐슬", + "ycode": "37.51841", + "stop_no": "19197", + "xcode": "126.884568", + "stop_type": "일반차로", + "node_id": "118000112", + "nxtStn": "문래중학교" + }, + { + "stop_nm": "문래중학교", + "ycode": "37.5197635659", + "stop_no": "19198", + "xcode": "126.8847214778", + "stop_type": "일반차로", + "node_id": "118000113", + "nxtStn": "현대6차아파트" + }, + { + "stop_nm": "문래중학교", + "ycode": "37.519955", + "stop_no": "19199", + "xcode": "126.884948", + "stop_type": "일반차로", + "node_id": "118000114", + "nxtStn": "영문초등학교" + }, + { + "stop_nm": "문래동국화아파트", + "ycode": "37.515779821", + "stop_no": "19200", + "xcode": "126.8913940766", + "stop_type": "일반차로", + "node_id": "118000115", + "nxtStn": "문래자이아파트" + }, + { + "stop_nm": "대림아파트", + "ycode": "37.516857", + "stop_no": "19201", + "xcode": "126.889272", + "stop_type": "일반차로", + "node_id": "118000116", + "nxtStn": "문래동국화아파트" + }, + { + "stop_nm": "양평1동주민센터", + "ycode": "37.5227527711", + "stop_no": "19202", + "xcode": "126.8881931453", + "stop_type": "가로변시간", + "node_id": "118000117", + "nxtStn": "관악고등학교" + }, + { + "stop_nm": "양평신동아아파트", + "ycode": "37.5224802186", + "stop_no": "19203", + "xcode": "126.8873567458", + "stop_type": "가로변시간", + "node_id": "118000118", + "nxtStn": "교보앞" + }, + { + "stop_nm": "관악고등학교", + "ycode": "37.5229942584", + "stop_no": "19204", + "xcode": "126.8840591861", + "stop_type": "가로변시간", + "node_id": "118000119", + "nxtStn": "양평신동아아파트" + }, + { + "stop_nm": "관악고등학교", + "ycode": "37.523161734", + "stop_no": "19205", + "xcode": "126.8848486189", + "stop_type": "가로변시간", + "node_id": "118000120", + "nxtStn": "오목교역.동신한방병원" + }, + { + "stop_nm": "당중초등학교", + "ycode": "37.526998", + "stop_no": "19206", + "xcode": "126.890987", + "stop_type": "일반차로", + "node_id": "118000121", + "nxtStn": "남부고용노동지청" + }, + { + "stop_nm": "당중초등학교", + "ycode": "37.526904", + "stop_no": "19207", + "xcode": "126.891292", + "stop_type": "일반차로", + "node_id": "118000122", + "nxtStn": "현대6차아파트.거성아파트" + }, + { + "stop_nm": "남부고용노동지청", + "ycode": "37.52382", + "stop_no": "19208", + "xcode": "126.890208", + "stop_type": "일반차로", + "node_id": "118000123", + "nxtStn": "교보앞" + }, + { + "stop_nm": "남부고용노동지청", + "ycode": "37.5236879845", + "stop_no": "19209", + "xcode": "126.890544267", + "stop_type": "일반차로", + "node_id": "118000124", + "nxtStn": "당중초등학교" + }, + { + "stop_nm": "한신아파트.선유도역", + "ycode": "37.5383576111", + "stop_no": "19210", + "xcode": "126.8932341248", + "stop_type": "일반차로", + "node_id": "118000125", + "nxtStn": "염창역.서울도시가스" + }, + { + "stop_nm": "한신아파트.선유도역", + "ycode": "37.538037", + "stop_no": "19211", + "xcode": "126.893278", + "stop_type": "일반차로", + "node_id": "118000126", + "nxtStn": "당산역.지하철2호선" + }, + { + "stop_nm": "선유도역.롯데제과", + "ycode": "37.5371966691", + "stop_no": "19212", + "xcode": "126.8948754336", + "stop_type": "일반차로", + "node_id": "118000127", + "nxtStn": "당산역" + }, + { + "stop_nm": "선유도역.롯데제과", + "ycode": "37.53714501", + "stop_no": "19213", + "xcode": "126.8955567144", + "stop_type": "일반차로", + "node_id": "118000128", + "nxtStn": "한신아파트.선유도역" + }, + { + "stop_nm": "양평한신아파트.선유도공원입구", + "ycode": "37.5416485864", + "stop_no": "19214", + "xcode": "126.8944278421", + "stop_type": "일반차로", + "node_id": "118000129", + "nxtStn": "양화대교전망카페" + }, + { + "stop_nm": "영등포아리수정수센터", + "ycode": "37.547524111", + "stop_no": "19215", + "xcode": "126.8841131456", + "stop_type": "일반차로", + "node_id": "118000130", + "nxtStn": "신목동역" + }, + { + "stop_nm": "양평한신아파트.선유도공원입구", + "ycode": "37.542032", + "stop_no": "19216", + "xcode": "126.894667", + "stop_type": "일반차로", + "node_id": "118000131", + "nxtStn": "양평동한솔아파트" + }, + { + "stop_nm": "안양천입구", + "ycode": "37.54747", + "stop_no": "19217", + "xcode": "126.883465", + "stop_type": "일반차로", + "node_id": "118000132", + "nxtStn": "월드컵경기장남측.월드컵공원" + }, + { + "stop_nm": "양평동한솔아파트", + "ycode": "37.5439165302", + "stop_no": "19218", + "xcode": "126.89034721", + "stop_type": "일반차로", + "node_id": "118000133", + "nxtStn": "양평한신아파트.선유도공원입구" + }, + { + "stop_nm": "신풍역", + "ycode": "37.4999832177", + "stop_no": "19219", + "xcode": "126.9080213793", + "stop_type": "일반차로", + "node_id": "118000579", + "nxtStn": "구립복지관" + }, + { + "stop_nm": "당산초등학교앞", + "ycode": "37.538813", + "stop_no": "19220", + "xcode": "126.894498", + "stop_type": "일반차로", + "node_id": "118000135", + "nxtStn": "선유도역.롯데홈쇼핑" + }, + { + "stop_nm": "선유고등학교", + "ycode": "37.5342683978", + "stop_no": "19221", + "xcode": "126.8962260669", + "stop_type": "일반차로", + "node_id": "118000136", + "nxtStn": "선유중학교" + }, + { + "stop_nm": "선유고등학교", + "ycode": "37.534373", + "stop_no": "19222", + "xcode": "126.896787", + "stop_type": "일반차로", + "node_id": "118000137", + "nxtStn": "선유도공원" + }, + { + "stop_nm": "선유중학교", + "ycode": "37.532051991", + "stop_no": "19223", + "xcode": "126.8945217072", + "stop_type": "일반차로", + "node_id": "118000138", + "nxtStn": "코스트코" + }, + { + "stop_nm": "선유중학교", + "ycode": "37.531135", + "stop_no": "19224", + "xcode": "126.894225", + "stop_type": "일반차로", + "node_id": "118000139", + "nxtStn": "영등포세무서.선유고등학교" + }, + { + "stop_nm": "신길역1호선", + "ycode": "37.516815", + "stop_no": "19225", + "xcode": "126.916956", + "stop_type": "일반차로", + "node_id": "118000140", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "신길새마을금고", + "ycode": "37.5136409433", + "stop_no": "19226", + "xcode": "126.9200351486", + "stop_type": "일반차로", + "node_id": "118000141", + "nxtStn": "대방역" + }, + { + "stop_nm": "신길새마을금고", + "ycode": "37.5140830291", + "stop_no": "19227", + "xcode": "126.9195131812", + "stop_type": "일반차로", + "node_id": "118000142", + "nxtStn": "신길역1호선" + }, + { + "stop_nm": "대신시장", + "ycode": "37.5117299416", + "stop_no": "19228", + "xcode": "126.9164648846", + "stop_type": "일반차로", + "node_id": "118000143", + "nxtStn": "신길역1호선" + }, + { + "stop_nm": "대윤병원", + "ycode": "37.514525", + "stop_no": "19229", + "xcode": "126.918149", + "stop_type": "일반차로", + "node_id": "118000144", + "nxtStn": "대신시장" + }, + { + "stop_nm": "대신시장", + "ycode": "37.512068", + "stop_no": "19230", + "xcode": "126.916298", + "stop_type": "일반차로", + "node_id": "118000145", + "nxtStn": "영등포농협.신길2동새마을금고" + }, + { + "stop_nm": "영등포농협.신길2동새마을금고", + "ycode": "37.511377", + "stop_no": "19231", + "xcode": "126.913177", + "stop_type": "일반차로", + "node_id": "118000146", + "nxtStn": "우신초등학교" + }, + { + "stop_nm": "우신초등학교", + "ycode": "37.5093088964", + "stop_no": "19232", + "xcode": "126.910600282", + "stop_type": "일반차로", + "node_id": "118000147", + "nxtStn": "신길가마산로교차로" + }, + { + "stop_nm": "포레나신길아파트", + "ycode": "37.503411", + "stop_no": "19233", + "xcode": "126.910152", + "stop_type": "일반차로", + "node_id": "118000148", + "nxtStn": "신풍역.백악관웨딩문화원앞" + }, + { + "stop_nm": "성락교회", + "ycode": "37.504583", + "stop_no": "19234", + "xcode": "126.902587", + "stop_type": "일반차로", + "node_id": "118000149", + "nxtStn": "대영초중고" + }, + { + "stop_nm": "성락교회", + "ycode": "37.5047495305", + "stop_no": "19235", + "xcode": "126.9028724835", + "stop_type": "일반차로", + "node_id": "118000150", + "nxtStn": "도림마을금고" + }, + { + "stop_nm": "도림동자치회관", + "ycode": "37.5092940284", + "stop_no": "19236", + "xcode": "126.9076717402", + "stop_type": "일반차로", + "node_id": "118000151", + "nxtStn": "신길동홍어거리" + }, + { + "stop_nm": "우신초등학교", + "ycode": "37.50958", + "stop_no": "19238", + "xcode": "126.910838", + "stop_type": "일반차로", + "node_id": "118000153", + "nxtStn": "신길동홍어거리" + }, + { + "stop_nm": "신길힐스테이트클래시안아파트", + "ycode": "37.5049891763", + "stop_no": "19239", + "xcode": "126.9108112918", + "stop_type": "일반차로", + "node_id": "118000154", + "nxtStn": "코끼리유통" + }, + { + "stop_nm": "신길동홍어거리", + "ycode": "37.51082", + "stop_no": "19240", + "xcode": "126.911476", + "stop_type": "일반차로", + "node_id": "118000155", + "nxtStn": "약산약국" + }, + { + "stop_nm": "신풍역.백악관웨딩문화원앞", + "ycode": "37.501432", + "stop_no": "19241", + "xcode": "126.909775", + "stop_type": "일반차로", + "node_id": "118000156", + "nxtStn": "래미안에스티움" + }, + { + "stop_nm": "신길5동주민센터", + "ycode": "37.500959", + "stop_no": "19242", + "xcode": "126.905383", + "stop_type": "일반차로", + "node_id": "118000157", + "nxtStn": "대영초중고" + }, + { + "stop_nm": "신길5동주민센터", + "ycode": "37.5010548825", + "stop_no": "19243", + "xcode": "126.9049278277", + "stop_type": "일반차로", + "node_id": "118000158", + "nxtStn": "신풍역" + }, + { + "stop_nm": "신풍역", + "ycode": "37.5000120734", + "stop_no": "19244", + "xcode": "126.9068971154", + "stop_type": "일반차로", + "node_id": "118000159", + "nxtStn": "신풍역.백악관웨딩문화원앞" + }, + { + "stop_nm": "영등포농협도림로지점.우리시장", + "ycode": "37.4981782693", + "stop_no": "19245", + "xcode": "126.9045627731", + "stop_type": "일반차로", + "node_id": "118000160", + "nxtStn": "신풍역" + }, + { + "stop_nm": "영등포농협도림로지점", + "ycode": "37.4986696303", + "stop_no": "19246", + "xcode": "126.9045220701", + "stop_type": "일반차로", + "node_id": "118000161", + "nxtStn": "대림동우성아파트" + }, + { + "stop_nm": "태양의집.KT대방지사", + "ycode": "37.495092", + "stop_no": "19247", + "xcode": "126.908808", + "stop_type": "일반차로", + "node_id": "118000162", + "nxtStn": "신길주유소" + }, + { + "stop_nm": "신길주유소", + "ycode": "37.4984011732", + "stop_no": "19248", + "xcode": "126.9083965467", + "stop_type": "일반차로", + "node_id": "118000163", + "nxtStn": "신풍역.백악관웨딩문화원앞" + }, + { + "stop_nm": "신풍역.백악관웨딩문화원앞", + "ycode": "37.5013238443", + "stop_no": "19249", + "xcode": "126.9100850037", + "stop_type": "일반차로", + "node_id": "118000164", + "nxtStn": "신길힐스테이트클래시안아파트" + }, + { + "stop_nm": "레미안에스티움북문", + "ycode": "37.501245", + "stop_no": "19251", + "xcode": "126.916458", + "stop_type": "일반차로", + "node_id": "118000598", + "nxtStn": "영진시장" + }, + { + "stop_nm": "신길3동주민센터", + "ycode": "37.507364", + "stop_no": "19252", + "xcode": "126.90639", + "stop_type": "일반차로", + "node_id": "118000599", + "nxtStn": "도림동자치회관" + }, + { + "stop_nm": "대방역", + "ycode": "37.5127693585", + "stop_no": "19253", + "xcode": "126.9237905553", + "stop_type": "일반차로", + "node_id": "118000168", + "nxtStn": "성애병원" + }, + { + "stop_nm": "대방역", + "ycode": "37.5130048235", + "stop_no": "19254", + "xcode": "126.9242224384", + "stop_type": "가로변전일", + "node_id": "118000169", + "nxtStn": "신길새마을금고" + }, + { + "stop_nm": "공군호텔", + "ycode": "37.5098706868", + "stop_no": "19255", + "xcode": "126.9240536702", + "stop_type": "일반차로", + "node_id": "118000170", + "nxtStn": "오거리" + }, + { + "stop_nm": "서울지방병무청", + "ycode": "37.5051747159", + "stop_no": "19256", + "xcode": "126.9221593231", + "stop_type": "일반차로", + "node_id": "118000171", + "nxtStn": "대방초등학교" + }, + { + "stop_nm": "대방초등학교", + "ycode": "37.5023841407", + "stop_no": "19257", + "xcode": "126.9210085488", + "stop_type": "일반차로", + "node_id": "118000172", + "nxtStn": "서울공업고등학교" + }, + { + "stop_nm": "태양의집", + "ycode": "37.496148", + "stop_no": "19258", + "xcode": "126.908237", + "stop_type": "일반차로", + "node_id": "118000173", + "nxtStn": "강남성심병원.대림성모병원" + }, + { + "stop_nm": "대림동우체국", + "ycode": "37.4894382828", + "stop_no": "19260", + "xcode": "126.9054525686", + "stop_type": "일반차로", + "node_id": "118000175", + "nxtStn": "흰돌교회" + }, + { + "stop_nm": "흰돌교회", + "ycode": "37.491316", + "stop_no": "19261", + "xcode": "126.902954", + "stop_type": "일반차로", + "node_id": "118000176", + "nxtStn": "대동초등학교" + }, + { + "stop_nm": "대동초등학교", + "ycode": "37.494183", + "stop_no": "19262", + "xcode": "126.900633", + "stop_type": "일반차로", + "node_id": "118000177", + "nxtStn": "대림3동주민센터" + }, + { + "stop_nm": "대림역12번출구", + "ycode": "37.4925216728", + "stop_no": "19264", + "xcode": "126.8966231256", + "stop_type": "일반차로", + "node_id": "118000179", + "nxtStn": "대동초등학교.명지성모병원" + }, + { + "stop_nm": "대동초등학교.명지성모병원", + "ycode": "37.494301", + "stop_no": "19265", + "xcode": "126.899241", + "stop_type": "일반차로", + "node_id": "118000180", + "nxtStn": "대림동우성아파트" + }, + { + "stop_nm": "대동초등학교", + "ycode": "37.4936614284", + "stop_no": "19266", + "xcode": "126.9006611965", + "stop_type": "일반차로", + "node_id": "118000181", + "nxtStn": "흰돌교회" + }, + { + "stop_nm": "흰돌교회", + "ycode": "37.4905430612", + "stop_no": "19267", + "xcode": "126.9032572847", + "stop_type": "일반차로", + "node_id": "118000182", + "nxtStn": "대림동우체국" + }, + { + "stop_nm": "대림동우체국", + "ycode": "37.4896278351", + "stop_no": "19268", + "xcode": "126.9047297114", + "stop_type": "일반차로", + "node_id": "118000183", + "nxtStn": "서울영림초등학교" + }, + { + "stop_nm": "대림동우성아파트", + "ycode": "37.495993", + "stop_no": "19269", + "xcode": "126.902035", + "stop_type": "일반차로", + "node_id": "118000184", + "nxtStn": "영등포농협도림로지점.우리시장" + }, + { + "stop_nm": "대림역", + "ycode": "37.49288", + "stop_no": "19270", + "xcode": "126.896585", + "stop_type": "일반차로", + "node_id": "118000185", + "nxtStn": "대림역" + }, + { + "stop_nm": "대동초등학교.명지성모병원", + "ycode": "37.4941715864", + "stop_no": "19271", + "xcode": "126.8986961015", + "stop_type": "일반차로", + "node_id": "118000186", + "nxtStn": "대림역9번출구" + }, + { + "stop_nm": "대림동우성아파트", + "ycode": "37.496514", + "stop_no": "19272", + "xcode": "126.902348", + "stop_type": "일반차로", + "node_id": "118000187", + "nxtStn": "대동초등학교.명지성모병원" + }, + { + "stop_nm": "YDP미래평생학습관", + "ycode": "37.503784", + "stop_no": "19273", + "xcode": "126.895506", + "stop_type": "일반차로", + "node_id": "118000188", + "nxtStn": "현대2차아파트후문" + }, + { + "stop_nm": "대림동현대3차아파트", + "ycode": "37.5044926537", + "stop_no": "19274", + "xcode": "126.8964335655", + "stop_type": "일반차로", + "node_id": "118000189", + "nxtStn": "YDP미래평생학습관" + }, + { + "stop_nm": "신영초등학교", + "ycode": "37.5016268639", + "stop_no": "19275", + "xcode": "126.8971376372", + "stop_type": "일반차로", + "node_id": "118000190", + "nxtStn": "성원아파트.한국상하수도협회" + }, + { + "stop_nm": "YDP미래평생학습관", + "ycode": "37.5030128151", + "stop_no": "19276", + "xcode": "126.8961720728", + "stop_type": "일반차로", + "node_id": "118000191", + "nxtStn": "베뢰아국제대학원대학교" + }, + { + "stop_nm": "선유도공원", + "ycode": "37.542245", + "stop_no": "19277", + "xcode": "126.902595", + "stop_type": "가로변전일", + "node_id": "118000192", + "nxtStn": "당산역2번출구" + }, + { + "stop_nm": "선유도공원", + "ycode": "37.542025", + "stop_no": "19278", + "xcode": "126.902915", + "stop_type": "가로변전일", + "node_id": "118000193", + "nxtStn": "합정역(가상)" + }, + { + "stop_nm": "신길역5호선", + "ycode": "37.518563", + "stop_no": "19279", + "xcode": "126.914837", + "stop_type": "일반차로", + "node_id": "118000194", + "nxtStn": "신길역1호선" + }, + { + "stop_nm": "국회의사당", + "ycode": "37.5306422804", + "stop_no": "19280", + "xcode": "126.919153684", + "stop_type": "일반차로", + "node_id": "118000195", + "nxtStn": "국회의사당역" + }, + { + "stop_nm": "산업은행본점", + "ycode": "37.5279671701", + "stop_no": "19281", + "xcode": "126.9208525949", + "stop_type": "일반차로", + "node_id": "118000196", + "nxtStn": "국회의사당역" + }, + { + "stop_nm": "더현대서울", + "ycode": "37.5254868228", + "stop_no": "19282", + "xcode": "126.9277728103", + "stop_type": "일반차로", + "node_id": "118000197", + "nxtStn": "여의도환승센터" + }, + { + "stop_nm": "유진투자증권", + "ycode": "37.525532", + "stop_no": "19283", + "xcode": "126.926988", + "stop_type": "일반차로", + "node_id": "118000198", + "nxtStn": "삼부아파트" + }, + { + "stop_nm": "파크원타워.LG트윈타워", + "ycode": "37.527087", + "stop_no": "19284", + "xcode": "126.927207", + "stop_type": "일반차로", + "node_id": "118000199", + "nxtStn": "마포역" + }, + { + "stop_nm": "신길파크자이아파트", + "ycode": "37.50506", + "stop_no": "19285", + "xcode": "126.91325", + "stop_type": "일반차로", + "node_id": "118000610", + "nxtStn": "신길보라매SK뷰아파트" + }, + { + "stop_nm": "여의도한양아파트", + "ycode": "37.5209203503", + "stop_no": "19286", + "xcode": "126.9320647349", + "stop_type": "일반차로", + "node_id": "118000200", + "nxtStn": "여의도수정아파트" + }, + { + "stop_nm": "하나은행여의도지점", + "ycode": "37.521328", + "stop_no": "19287", + "xcode": "126.931147", + "stop_type": "일반차로", + "node_id": "118000201", + "nxtStn": "여의동주민센터" + }, + { + "stop_nm": "여의도수정아파트", + "ycode": "37.522464", + "stop_no": "19288", + "xcode": "126.930479", + "stop_type": "일반차로", + "node_id": "118000202", + "nxtStn": "삼부아파트" + }, + { + "stop_nm": "신풍역", + "ycode": "37.5003168268", + "stop_no": "19289", + "xcode": "126.9104304773", + "stop_type": "일반차로", + "node_id": "118000577", + "nxtStn": "영등포농협도림로지점" + }, + { + "stop_nm": "여의도지하차도입구", + "ycode": "37.523355", + "stop_no": "19290", + "xcode": "126.923253", + "stop_type": "일반차로", + "node_id": "118000203", + "nxtStn": "여의도환승센터" + }, + { + "stop_nm": "영진시장", + "ycode": "37.500155", + "stop_no": "19291", + "xcode": "126.9155", + "stop_type": "일반차로", + "node_id": "118000576", + "nxtStn": "래미안에스티움" + }, + { + "stop_nm": "문래우체국.문래예술공단", + "ycode": "37.5142585924", + "stop_no": "19292", + "xcode": "126.8951938185", + "stop_type": "일반차로", + "node_id": "118000204", + "nxtStn": "문래자이아파트" + }, + { + "stop_nm": "문래우체국.문래예술공단", + "ycode": "37.5141627048", + "stop_no": "19293", + "xcode": "126.8947765295", + "stop_type": "일반차로", + "node_id": "118000205", + "nxtStn": "도림마을금고" + }, + { + "stop_nm": "대림3동주민센터", + "ycode": "37.497847", + "stop_no": "19294", + "xcode": "126.898808", + "stop_type": "일반차로", + "node_id": "118000206", + "nxtStn": "베뢰아국제대학원대학교" + }, + { + "stop_nm": "대방역", + "ycode": "37.512907", + "stop_no": "19296", + "xcode": "126.923495", + "stop_type": "일반차로", + "node_id": "118000208", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "신길가마산로교차로", + "ycode": "37.506372", + "stop_no": "19297", + "xcode": "126.910908", + "stop_type": "일반차로", + "node_id": "118000209", + "nxtStn": "코끼리유통" + }, + { + "stop_nm": "대길초등학교", + "ycode": "37.4989132022", + "stop_no": "19298", + "xcode": "126.9122243497", + "stop_type": "일반차로", + "node_id": "118000210", + "nxtStn": "미보빌딩" + }, + { + "stop_nm": "미보빌딩", + "ycode": "37.498418", + "stop_no": "19299", + "xcode": "126.916713", + "stop_type": "일반차로", + "node_id": "118000211", + "nxtStn": "대방천사거리" + }, + { + "stop_nm": "신길역1호선", + "ycode": "37.5167591036", + "stop_no": "19300", + "xcode": "126.9166368877", + "stop_type": "일반차로", + "node_id": "118000563", + "nxtStn": "대윤병원" + }, + { + "stop_nm": "신길보라매SK뷰아파트", + "ycode": "37.50407", + "stop_no": "19301", + "xcode": "126.919364", + "stop_type": "일반차로", + "node_id": "118000611", + "nxtStn": "서울지방병무청앞" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.5229871573", + "stop_no": "19302", + "xcode": "126.8957767054", + "stop_type": "일반차로", + "node_id": "118000510", + "nxtStn": "필립메디컬센터" + }, + { + "stop_nm": "여의도순복음교회", + "ycode": "37.5300112247", + "stop_no": "19303", + "xcode": "126.9241543204", + "stop_type": "일반차로", + "node_id": "118000213", + "nxtStn": "기계회관" + }, + { + "stop_nm": "래미안에스티움", + "ycode": "37.500162", + "stop_no": "19304", + "xcode": "126.912767", + "stop_type": "일반차로", + "node_id": "118000597", + "nxtStn": "신풍역" + }, + { + "stop_nm": "문래자이아파트", + "ycode": "37.516625", + "stop_no": "19305", + "xcode": "126.894587", + "stop_type": "일반차로", + "node_id": "118000214", + "nxtStn": "진로A" + }, + { + "stop_nm": "대방역", + "ycode": "37.513747861", + "stop_no": "19306", + "xcode": "126.9265562252", + "stop_type": "일반차로", + "node_id": "118000215", + "nxtStn": "샛강역1번출구.여의도자이" + }, + { + "stop_nm": "대방역", + "ycode": "37.513513", + "stop_no": "19307", + "xcode": "126.926049", + "stop_type": "일반차로", + "node_id": "118000216", + "nxtStn": "샛강역.앙카라공원" + }, + { + "stop_nm": "대길초등학교", + "ycode": "37.498592", + "stop_no": "19309", + "xcode": "126.914572", + "stop_type": "일반차로", + "node_id": "118000218", + "nxtStn": "우성2차아파트" + }, + { + "stop_nm": "대방천사거리", + "ycode": "37.4987292795", + "stop_no": "19310", + "xcode": "126.9196868725", + "stop_type": "일반차로", + "node_id": "118000219", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "대방천사거리", + "ycode": "37.4984887613", + "stop_no": "19311", + "xcode": "126.9197990982", + "stop_type": "일반차로", + "node_id": "118000220", + "nxtStn": "보라매역.동작세무서" + }, + { + "stop_nm": "대림코오롱아파트", + "ycode": "37.506903", + "stop_no": "19312", + "xcode": "126.894291", + "stop_type": "일반차로", + "node_id": "118000221", + "nxtStn": "신도림역2번출구" + }, + { + "stop_nm": "영등포로터리", + "ycode": "37.5186134846", + "stop_no": "19313", + "xcode": "126.9103719734", + "stop_type": "가로변시간", + "node_id": "118000222", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "새길어린이집.신풍역3번출구", + "ycode": "37.499347", + "stop_no": "19314", + "xcode": "126.907408", + "stop_type": "일반차로", + "node_id": "118000223", + "nxtStn": "대길초등학교" + }, + { + "stop_nm": "새길어린이집.신풍역3번출구", + "ycode": "37.499578", + "stop_no": "19315", + "xcode": "126.906998", + "stop_type": "일반차로", + "node_id": "118000224", + "nxtStn": "신길광장공원" + }, + { + "stop_nm": "영문초등학교", + "ycode": "37.520197", + "stop_no": "19316", + "xcode": "126.887835", + "stop_type": "일반차로", + "node_id": "118000225", + "nxtStn": "e편한세상문래에듀플라츠" + }, + { + "stop_nm": "영문초등학교", + "ycode": "37.52004", + "stop_no": "19317", + "xcode": "126.887963", + "stop_type": "일반차로", + "node_id": "118000226", + "nxtStn": "문래힐스테이트아파트" + }, + { + "stop_nm": "문래역", + "ycode": "37.5166312538", + "stop_no": "19318", + "xcode": "126.8942560751", + "stop_type": "일반차로", + "node_id": "118000227", + "nxtStn": "도림마을금고" + }, + { + "stop_nm": "양화중학교.홈플러스", + "ycode": "37.5193690011", + "stop_no": "19319", + "xcode": "126.8952832738", + "stop_type": "일반차로", + "node_id": "118000228", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "기계회관", + "ycode": "37.5290992579", + "stop_no": "19320", + "xcode": "126.9226786966", + "stop_type": "일반차로", + "node_id": "118000229", + "nxtStn": "산업은행본점" + }, + { + "stop_nm": "신동아아파트", + "ycode": "37.4980725102", + "stop_no": "19321", + "xcode": "126.8946317256", + "stop_type": "일반차로", + "node_id": "118000230", + "nxtStn": "신영초교" + }, + { + "stop_nm": "신영초교", + "ycode": "37.4989309377", + "stop_no": "19322", + "xcode": "126.8963032658", + "stop_type": "일반차로", + "node_id": "118000231", + "nxtStn": "대림3동사거리.명지춘혜병원" + }, + { + "stop_nm": "우성5차아파트", + "ycode": "37.507604", + "stop_no": "19323", + "xcode": "126.903206", + "stop_type": "일반차로", + "node_id": "118000232", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "우성5차아파트", + "ycode": "37.507339", + "stop_no": "19324", + "xcode": "126.903033", + "stop_type": "일반차로", + "node_id": "118000233", + "nxtStn": "크라운사거리" + }, + { + "stop_nm": "현대3차성원아파트", + "ycode": "37.504293", + "stop_no": "19325", + "xcode": "126.896617", + "stop_type": "일반차로", + "node_id": "118000234", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "래미안에스티움(신길파크자이)", + "ycode": "37.5021641831", + "stop_no": "19326", + "xcode": "126.9129971343", + "stop_type": "일반차로", + "node_id": "118000616", + "nxtStn": "신길힐스테이트클래시안아파트" + }, + { + "stop_nm": "대림3동사거리.명지춘혜병원", + "ycode": "37.5004765901", + "stop_no": "19327", + "xcode": "126.8976368647", + "stop_type": "일반차로", + "node_id": "118000236", + "nxtStn": "성원아파트.한국상하수도협회" + }, + { + "stop_nm": "현대2차아파트", + "ycode": "37.503352", + "stop_no": "19328", + "xcode": "126.895203", + "stop_type": "일반차로", + "node_id": "118000237", + "nxtStn": "현대3차성원아파트" + }, + { + "stop_nm": "성원아파트.한국상하수도협회", + "ycode": "37.502577", + "stop_no": "19329", + "xcode": "126.896755", + "stop_type": "일반차로", + "node_id": "118000238", + "nxtStn": "현대3차성원아파트" + }, + { + "stop_nm": "베뢰아국제대학원대학교", + "ycode": "37.501072", + "stop_no": "19330", + "xcode": "126.898966", + "stop_type": "일반차로", + "node_id": "118000239", + "nxtStn": "대림요양병원" + }, + { + "stop_nm": "영등포역후문", + "ycode": "37.5146531153", + "stop_no": "19331", + "xcode": "126.9079818843", + "stop_type": "일반차로", + "node_id": "118000240", + "nxtStn": "고추말" + }, + { + "stop_nm": "성원아파트입구", + "ycode": "37.5049661894", + "stop_no": "19332", + "xcode": "126.8979949457", + "stop_type": "일반차로", + "node_id": "118000241", + "nxtStn": "건영아파트후문" + }, + { + "stop_nm": "신길우성1차.건영아파트", + "ycode": "37.506057", + "stop_no": "19333", + "xcode": "126.899589", + "stop_type": "일반차로", + "node_id": "118000242", + "nxtStn": "대림동현대3차아파트" + }, + { + "stop_nm": "건영아파트농협", + "ycode": "37.506357", + "stop_no": "19334", + "xcode": "126.900855", + "stop_type": "일반차로", + "node_id": "118000243", + "nxtStn": "우성5차아파트" + }, + { + "stop_nm": "영등포동.영등포푸르지오아파트", + "ycode": "37.50966", + "stop_no": "19335", + "xcode": "126.904673", + "stop_type": "일반차로", + "node_id": "118000244", + "nxtStn": "신길3동주민센터" + }, + { + "stop_nm": "신길바다마을아파트.보라매sk뷰", + "ycode": "37.502859", + "stop_no": "19336", + "xcode": "126.916049", + "stop_type": "일반차로", + "node_id": "118000601", + "nxtStn": "래미안에스티움(신길파크자이)" + }, + { + "stop_nm": "성애병원", + "ycode": "37.5115127712", + "stop_no": "19337", + "xcode": "126.9230916275", + "stop_type": "일반차로", + "node_id": "118000246", + "nxtStn": "종점" + }, + { + "stop_nm": "신길보라매sk뷰.바다마을아파트", + "ycode": "37.502907", + "stop_no": "19338", + "xcode": "126.916172", + "stop_type": "일반차로", + "node_id": "118000602", + "nxtStn": "서울해군호텔" + }, + { + "stop_nm": "우성2차아파트", + "ycode": "37.499258", + "stop_no": "19341", + "xcode": "126.910453", + "stop_type": "일반차로", + "node_id": "118000608", + "nxtStn": "새길어린이집.신풍역3번출구" + }, + { + "stop_nm": "보라매역", + "ycode": "37.499847", + "stop_no": "19346", + "xcode": "126.919317", + "stop_type": "일반차로", + "node_id": "118000255", + "nxtStn": "서울공업고등학교" + }, + { + "stop_nm": "영진시장", + "ycode": "37.49989", + "stop_no": "19347", + "xcode": "126.917065", + "stop_type": "일반차로", + "node_id": "118000256", + "nxtStn": "보라매역" + }, + { + "stop_nm": "신길광장공원", + "ycode": "37.499937", + "stop_no": "19350", + "xcode": "126.903993", + "stop_type": "일반차로", + "node_id": "118000259", + "nxtStn": "신풍역" + }, + { + "stop_nm": "대성아파트.건영아파트후문", + "ycode": "37.5032308592", + "stop_no": "19351", + "xcode": "126.9003306899", + "stop_type": "일반차로", + "node_id": "118000260", + "nxtStn": "대림동현대3차아파트" + }, + { + "stop_nm": "대성유니드아파트", + "ycode": "37.5008368106", + "stop_no": "19352", + "xcode": "126.9027078981", + "stop_type": "일반차로", + "node_id": "118000261", + "nxtStn": "신길광장공원" + }, + { + "stop_nm": "레미안에스티움북문", + "ycode": "37.50142", + "stop_no": "19353", + "xcode": "126.916628", + "stop_type": "일반차로", + "node_id": "118000600", + "nxtStn": "신길보라매sk뷰.바다마을아파트" + }, + { + "stop_nm": "건영아파트후문", + "ycode": "37.502692", + "stop_no": "19354", + "xcode": "126.90056", + "stop_type": "일반차로", + "node_id": "118000263", + "nxtStn": "신풍프라자" + }, + { + "stop_nm": "대림동코오롱아파트", + "ycode": "37.507695", + "stop_no": "19357", + "xcode": "126.894568", + "stop_type": "일반차로", + "node_id": "118000266", + "nxtStn": "도림동주민센터" + }, + { + "stop_nm": "문래동종점", + "ycode": "37.515676", + "stop_no": "19358", + "xcode": "126.886402", + "stop_type": "일반차로", + "node_id": "118000267", + "nxtStn": "종점" + }, + { + "stop_nm": "문래동시점", + "ycode": "37.515548", + "stop_no": "19359", + "xcode": "126.886709", + "stop_type": "일반차로", + "node_id": "118000268", + "nxtStn": "두산위브진주아파트" + }, + { + "stop_nm": "KT&G영등포지사.문래동종점", + "ycode": "37.515427", + "stop_no": "19360", + "xcode": "126.88726", + "stop_type": "일반차로", + "node_id": "118000596", + "nxtStn": "종점" + }, + { + "stop_nm": "신길1차우성아파트", + "ycode": "37.5058715996", + "stop_no": "19361", + "xcode": "126.8998713446", + "stop_type": "일반차로", + "node_id": "118000270", + "nxtStn": "도림사거리" + }, + { + "stop_nm": "보라매역.5번출구", + "ycode": "37.5000416572", + "stop_no": "19362", + "xcode": "126.9189129834", + "stop_type": "일반차로", + "node_id": "118000578", + "nxtStn": "영진시장" + }, + { + "stop_nm": "영등포동.영등포푸르지오아파트", + "ycode": "37.510141", + "stop_no": "19364", + "xcode": "126.904671", + "stop_type": "일반차로", + "node_id": "118000273", + "nxtStn": "고추말" + }, + { + "stop_nm": "우신사거리", + "ycode": "37.5109838266", + "stop_no": "19365", + "xcode": "126.9099821039", + "stop_type": "일반차로", + "node_id": "118000274", + "nxtStn": "도림동자치회관" + }, + { + "stop_nm": "크라운사거리", + "ycode": "37.508301905", + "stop_no": "19367", + "xcode": "126.905380142", + "stop_type": "일반차로", + "node_id": "118000276", + "nxtStn": "도림동자치회관" + }, + { + "stop_nm": "고추말", + "ycode": "37.511953", + "stop_no": "19386", + "xcode": "126.90627", + "stop_type": "일반차로", + "node_id": "118000295", + "nxtStn": "영등포역후문" + }, + { + "stop_nm": "코끼리유통", + "ycode": "37.505855", + "stop_no": "19389", + "xcode": "126.90704", + "stop_type": "일반차로", + "node_id": "118000298", + "nxtStn": "도림사거리" + }, + { + "stop_nm": "성락교회", + "ycode": "37.504783", + "stop_no": "19390", + "xcode": "126.904153", + "stop_type": "일반차로", + "node_id": "118000299", + "nxtStn": "신길건영아파트" + }, + { + "stop_nm": "동양볼링장", + "ycode": "37.5167682627", + "stop_no": "19392", + "xcode": "126.8884241986", + "stop_type": "일반차로", + "node_id": "118000301", + "nxtStn": "KT&G영등포지사.문래동종점" + }, + { + "stop_nm": "보라매공원입구", + "ycode": "37.498569", + "stop_no": "19393", + "xcode": "126.916577", + "stop_type": "일반차로", + "node_id": "118000302", + "nxtStn": "대길초등학교" + }, + { + "stop_nm": "현대2차아파트후문", + "ycode": "37.5030100625", + "stop_no": "19402", + "xcode": "126.8940864024", + "stop_type": "일반차로", + "node_id": "118000311", + "nxtStn": "대림코오롱아파트" + }, + { + "stop_nm": "크라운사거리", + "ycode": "37.509135", + "stop_no": "19403", + "xcode": "126.90517", + "stop_type": "일반차로", + "node_id": "118000312", + "nxtStn": "영등포동.영등포푸르지오아파트" + }, + { + "stop_nm": "신길3동주민센터", + "ycode": "37.506967", + "stop_no": "19404", + "xcode": "126.906498", + "stop_type": "일반차로", + "node_id": "118000313", + "nxtStn": "코끼리유통" + }, + { + "stop_nm": "꼬추말", + "ycode": "37.511958", + "stop_no": "19405", + "xcode": "126.90611", + "stop_type": "일반차로", + "node_id": "118000314", + "nxtStn": "영등포동.영등포푸르지오아파트" + }, + { + "stop_nm": "SG메디피움", + "ycode": "37.505080073", + "stop_no": "19406", + "xcode": "126.9047285685", + "stop_type": "일반차로", + "node_id": "118000315", + "nxtStn": "대영초중고" + }, + { + "stop_nm": "도림사거리", + "ycode": "37.5070505173", + "stop_no": "19407", + "xcode": "126.9012712286", + "stop_type": "일반차로", + "node_id": "118000316", + "nxtStn": "모랫말.도림새마을금고" + }, + { + "stop_nm": "기림약국", + "ycode": "37.4997728852", + "stop_no": "19416", + "xcode": "126.9008725167", + "stop_type": "일반차로", + "node_id": "118000325", + "nxtStn": "코사마트" + }, + { + "stop_nm": "신길광장공원", + "ycode": "37.499968", + "stop_no": "19418", + "xcode": "126.904502", + "stop_type": "일반차로", + "node_id": "118000326", + "nxtStn": "대성유니드아파트" + }, + { + "stop_nm": "코사마트", + "ycode": "37.4984", + "stop_no": "19423", + "xcode": "126.902027", + "stop_type": "일반차로", + "node_id": "118000331", + "nxtStn": "우리은행" + }, + { + "stop_nm": "해오름식당", + "ycode": "37.500908", + "stop_no": "19424", + "xcode": "126.89948", + "stop_type": "일반차로", + "node_id": "118000332", + "nxtStn": "기림약국" + }, + { + "stop_nm": "우리은행", + "ycode": "37.497463", + "stop_no": "19425", + "xcode": "126.903258", + "stop_type": "일반차로", + "node_id": "118000333", + "nxtStn": "대림동우성아파트" + }, + { + "stop_nm": "두산위브진주아파트", + "ycode": "37.5164206155", + "stop_no": "19427", + "xcode": "126.885309553", + "stop_type": "일반차로", + "node_id": "118000335", + "nxtStn": "문래롯데캐슬" + }, + { + "stop_nm": "현대3차아파트", + "ycode": "37.516298", + "stop_no": "19428", + "xcode": "126.884898", + "stop_type": "일반차로", + "node_id": "118000336", + "nxtStn": "문래동종점" + }, + { + "stop_nm": "CM충무병원", + "ycode": "37.5183527655", + "stop_no": "19429", + "xcode": "126.9027079039", + "stop_type": "일반차로", + "node_id": "118000524", + "nxtStn": "영등포시장" + }, + { + "stop_nm": "대방역", + "ycode": "37.5130200747", + "stop_no": "19430", + "xcode": "126.9241172204", + "stop_type": "일반차로", + "node_id": "118000525", + "nxtStn": "대신시장" + }, + { + "stop_nm": "타임스퀘어", + "ycode": "37.51801", + "stop_no": "19434", + "xcode": "126.904592", + "stop_type": "일반차로", + "node_id": "118000536", + "nxtStn": "영등포역" + }, + { + "stop_nm": "당산신동아파밀리에", + "ycode": "37.519678", + "stop_no": "19435", + "xcode": "126.900813", + "stop_type": "일반차로", + "node_id": "118000537", + "nxtStn": "타임스퀘어" + }, + { + "stop_nm": "영등포청과시장", + "ycode": "37.5236699556", + "stop_no": "19436", + "xcode": "126.9018127545", + "stop_type": "일반차로", + "node_id": "118000546", + "nxtStn": "당산신동아파밀리에" + }, + { + "stop_nm": "영등포청과시장", + "ycode": "37.522484979", + "stop_no": "19437", + "xcode": "126.9017747101", + "stop_type": "일반차로", + "node_id": "118000530", + "nxtStn": "서울시립청소년성문화센터" + }, + { + "stop_nm": "서울시립청소년성문화센터", + "ycode": "37.5251517776", + "stop_no": "19438", + "xcode": "126.9023142827", + "stop_type": "일반차로", + "node_id": "118000541", + "nxtStn": "영등포청과시장" + }, + { + "stop_nm": "서울시립청소년성문화센터", + "ycode": "37.52468", + "stop_no": "19439", + "xcode": "126.902386", + "stop_type": "일반차로", + "node_id": "118000542", + "nxtStn": "빅마켓영등포점" + }, + { + "stop_nm": "한강아파트", + "ycode": "37.5277478405", + "stop_no": "19450", + "xcode": "126.9034083876", + "stop_type": "일반차로", + "node_id": "118000540", + "nxtStn": "서울시립청소년성문화센터" + }, + { + "stop_nm": "빅마켓영등포점", + "ycode": "37.5280663072", + "stop_no": "19451", + "xcode": "126.903872998", + "stop_type": "일반차로", + "node_id": "118000543", + "nxtStn": "영등포농협당산역지점" + }, + { + "stop_nm": "당산센트럴아이파크아파트", + "ycode": "37.5300905669", + "stop_no": "19452", + "xcode": "126.9043580631", + "stop_type": "일반차로", + "node_id": "118000538", + "nxtStn": "한강아파트" + }, + { + "stop_nm": "영등포농협당산역지점", + "ycode": "37.530815", + "stop_no": "19453", + "xcode": "126.904965", + "stop_type": "일반차로", + "node_id": "118000539", + "nxtStn": "당산역삼성래미안아파트" + }, + { + "stop_nm": "신풍시장", + "ycode": "37.5057979066", + "stop_no": "19454", + "xcode": "126.9090858662", + "stop_type": "일반차로", + "node_id": "118000535", + "nxtStn": "신길힐스테이트클래시안아파트" + }, + { + "stop_nm": "신길건영아파트", + "ycode": "37.50344", + "stop_no": "19455", + "xcode": "126.901587", + "stop_type": "일반차로", + "node_id": "118000531", + "nxtStn": "성락교회" + }, + { + "stop_nm": "신길건영아파트", + "ycode": "37.503735", + "stop_no": "19456", + "xcode": "126.901688", + "stop_type": "일반차로", + "node_id": "118000532", + "nxtStn": "대림요양병원" + }, + { + "stop_nm": "수정교회", + "ycode": "37.501143", + "stop_no": "19457", + "xcode": "126.898662", + "stop_type": "일반차로", + "node_id": "118000534", + "nxtStn": "정현부페" + }, + { + "stop_nm": "대림3동주민센터", + "ycode": "37.4981672477", + "stop_no": "19458", + "xcode": "126.89831", + "stop_type": "일반차로", + "node_id": "118000533", + "nxtStn": "대동초등학교" + }, + { + "stop_nm": "대영중학교.신길센트럴아이파크", + "ycode": "37.5033158892", + "stop_no": "19483", + "xcode": "126.9037578728", + "stop_type": "일반차로", + "node_id": "118000607", + "nxtStn": "성락교회" + }, + { + "stop_nm": "당산역", + "ycode": "37.533321", + "stop_no": "19501", + "xcode": "126.901306", + "stop_type": "마을버스", + "node_id": "118900001", + "nxtStn": "현대3차유원아파트" + }, + { + "stop_nm": "대림역", + "ycode": "37.4941881707", + "stop_no": "19502", + "xcode": "126.8949855085", + "stop_type": "마을버스", + "node_id": "118900002", + "nxtStn": "대림역" + }, + { + "stop_nm": "현대2.3차아파트", + "ycode": "37.5317408698", + "stop_no": "19503", + "xcode": "126.8962827493", + "stop_type": "마을버스", + "node_id": "118900003", + "nxtStn": "당산우편물취급소" + }, + { + "stop_nm": "한국수자원연구소", + "ycode": "37.5439176005", + "stop_no": "19504", + "xcode": "126.8895618243", + "stop_type": "마을버스", + "node_id": "118900004", + "nxtStn": "기아자동차서비스센터" + }, + { + "stop_nm": "성애병원", + "ycode": "37.5117534209", + "stop_no": "19505", + "xcode": "126.9218040841", + "stop_type": "마을버스", + "node_id": "118900166", + "nxtStn": "놀이터" + }, + { + "stop_nm": "당산우편물취급소", + "ycode": "37.5295966069", + "stop_no": "19506", + "xcode": "126.8987624869", + "stop_type": "마을버스", + "node_id": "118900005", + "nxtStn": "효성아파트" + }, + { + "stop_nm": "기아자동차서비스센터", + "ycode": "37.5415448626", + "stop_no": "19507", + "xcode": "126.8913397384", + "stop_type": "마을버스", + "node_id": "118900006", + "nxtStn": "한신아파트.선유도공원" + }, + { + "stop_nm": "놀이터", + "ycode": "37.5102387979", + "stop_no": "19508", + "xcode": "126.9219968319", + "stop_type": "마을버스", + "node_id": "118900007", + "nxtStn": "오거리" + }, + { + "stop_nm": "대림역7호선", + "ycode": "37.4929638313", + "stop_no": "19509", + "xcode": "126.8973315956", + "stop_type": "마을버스", + "node_id": "118900008", + "nxtStn": "우성2차아파트" + }, + { + "stop_nm": "효성아파트", + "ycode": "37.5309951483", + "stop_no": "19510", + "xcode": "126.8998637918", + "stop_type": "마을버스", + "node_id": "118900009", + "nxtStn": "당산역.삼성래미안APT" + }, + { + "stop_nm": "한신아파트.선유도공원", + "ycode": "37.5406104569", + "stop_no": "19511", + "xcode": "126.892357296", + "stop_type": "마을버스", + "node_id": "118900010", + "nxtStn": "당산초등학교앞" + }, + { + "stop_nm": "돈보스코.홈플러스", + "ycode": "37.496651", + "stop_no": "19512", + "xcode": "126.913239", + "stop_type": "마을버스", + "node_id": "118900011", + "nxtStn": "경남아너스빌" + }, + { + "stop_nm": "오거리", + "ycode": "37.5088147597", + "stop_no": "19513", + "xcode": "126.9215458547", + "stop_type": "마을버스", + "node_id": "118900167", + "nxtStn": "골프장" + }, + { + "stop_nm": "우성2차아파트", + "ycode": "37.495361", + "stop_no": "19515", + "xcode": "126.899862", + "stop_type": "마을버스", + "node_id": "118900012", + "nxtStn": "대림3동주민센터" + }, + { + "stop_nm": "당산역.삼성래미안APT", + "ycode": "37.533225", + "stop_no": "19516", + "xcode": "126.901535", + "stop_type": "마을버스", + "node_id": "118900013", + "nxtStn": "삼성래미안4차아파트북문" + }, + { + "stop_nm": "경남아너스빌", + "ycode": "37.4946517549", + "stop_no": "19518", + "xcode": "126.9108450745", + "stop_type": "마을버스", + "node_id": "118900015", + "nxtStn": "강남성심병원.대림성모병원" + }, + { + "stop_nm": "골프장", + "ycode": "37.5091906882", + "stop_no": "19519", + "xcode": "126.9204516361", + "stop_type": "마을버스", + "node_id": "118900016", + "nxtStn": "대신시장.기업은행" + }, + { + "stop_nm": "코스트코", + "ycode": "37.5283666153", + "stop_no": "19520", + "xcode": "126.8916609531", + "stop_type": "마을버스", + "node_id": "118900017", + "nxtStn": "당중초등학교.노동부남부지청" + }, + { + "stop_nm": "대림3동주민센터", + "ycode": "37.4983606603", + "stop_no": "19521", + "xcode": "126.8985174011", + "stop_type": "마을버스", + "node_id": "118900187", + "nxtStn": "정현부페" + }, + { + "stop_nm": "삼성래미안4차아파트북문", + "ycode": "37.533228", + "stop_no": "19522", + "xcode": "126.903011", + "stop_type": "마을버스", + "node_id": "118900018", + "nxtStn": "당산중학교.한국소방안전원" + }, + { + "stop_nm": "선유도역.롯데홈쇼핑", + "ycode": "37.537028", + "stop_no": "19523", + "xcode": "126.893134", + "stop_type": "마을버스", + "node_id": "118900161", + "nxtStn": "SK엔카" + }, + { + "stop_nm": "강남성심병원.대림성모병원", + "ycode": "37.4913065278", + "stop_no": "19524", + "xcode": "126.9080614234", + "stop_type": "마을버스", + "node_id": "118900184", + "nxtStn": "동작상떼빌앞" + }, + { + "stop_nm": "대신시장.기업은행", + "ycode": "37.511861", + "stop_no": "19525", + "xcode": "126.917377", + "stop_type": "마을버스", + "node_id": "118900019", + "nxtStn": "선화약국" + }, + { + "stop_nm": "당중초등학교.노동부남부지청", + "ycode": "37.525423", + "stop_no": "19526", + "xcode": "126.890734", + "stop_type": "마을버스", + "node_id": "118900020", + "nxtStn": "영은교회" + }, + { + "stop_nm": "정현부페", + "ycode": "37.4995406902", + "stop_no": "19527", + "xcode": "126.898036257", + "stop_type": "마을버스", + "node_id": "118900021", + "nxtStn": "베뢰아국제대학원대학교" + }, + { + "stop_nm": "당산중학교.한국소방안전원", + "ycode": "37.5318890724", + "stop_no": "19528", + "xcode": "126.9065022141", + "stop_type": "마을버스", + "node_id": "118900148", + "nxtStn": "삼성래미안3차아파트" + }, + { + "stop_nm": "영등포동.영등포푸르지오아파트", + "ycode": "37.511019637", + "stop_no": "19529", + "xcode": "126.9053948102", + "stop_type": "마을버스", + "node_id": "118900197", + "nxtStn": "영등포푸르지오" + }, + { + "stop_nm": "신대림한솔솔파크아파트.충심교회", + "ycode": "37.4884697209", + "stop_no": "19530", + "xcode": "126.8990679328", + "stop_type": "마을버스", + "node_id": "118900022", + "nxtStn": "중앙시장" + }, + { + "stop_nm": "영은교회", + "ycode": "37.5253616898", + "stop_no": "19532", + "xcode": "126.8882070346", + "stop_type": "마을버스", + "node_id": "118900023", + "nxtStn": "양평역" + }, + { + "stop_nm": "삼성래미안3차아파트", + "ycode": "37.5300982551", + "stop_no": "19534", + "xcode": "126.9072184064", + "stop_type": "마을버스", + "node_id": "118900024", + "nxtStn": "한국산업인력공단" + }, + { + "stop_nm": "SK엔카", + "ycode": "37.5342360825", + "stop_no": "19535", + "xcode": "126.8923381705", + "stop_type": "마을버스", + "node_id": "118900025", + "nxtStn": "거성파스텔아파트" + }, + { + "stop_nm": "중앙시장", + "ycode": "37.4899047632", + "stop_no": "19536", + "xcode": "126.9007034903", + "stop_type": "마을버스", + "node_id": "118900026", + "nxtStn": "농협.대림2동주민센터" + }, + { + "stop_nm": "양평역", + "ycode": "37.525056", + "stop_no": "19538", + "xcode": "126.886085", + "stop_type": "마을버스", + "node_id": "118900027", + "nxtStn": "삼성아파트.오목교아래" + }, + { + "stop_nm": "대림요양병원", + "ycode": "37.5023314067", + "stop_no": "19539", + "xcode": "126.9001497866", + "stop_type": "마을버스", + "node_id": "118900028", + "nxtStn": "신길건영아파트" + }, + { + "stop_nm": "한국산업인력공단", + "ycode": "37.5287001541", + "stop_no": "19540", + "xcode": "126.907732684", + "stop_type": "마을버스", + "node_id": "118900029", + "nxtStn": "인구보건복지협회.제일빌딩" + }, + { + "stop_nm": "거성파스텔아파트", + "ycode": "37.5321168067", + "stop_no": "19541", + "xcode": "126.8924532355", + "stop_type": "마을버스", + "node_id": "118900030", + "nxtStn": "선유고등학교" + }, + { + "stop_nm": "농협.대림2동주민센터", + "ycode": "37.4908121312", + "stop_no": "19542", + "xcode": "126.9017291244", + "stop_type": "마을버스", + "node_id": "118900031", + "nxtStn": "대림포교원" + }, + { + "stop_nm": "삼성아파트.오목교아래", + "ycode": "37.523415383", + "stop_no": "19544", + "xcode": "126.8834600409", + "stop_type": "마을버스", + "node_id": "118900032", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "인구보건복지협회.제일빌딩", + "ycode": "37.5260382148", + "stop_no": "19546", + "xcode": "126.9087700692", + "stop_type": "마을버스", + "node_id": "118900033", + "nxtStn": "한강성심병원" + }, + { + "stop_nm": "선유고등학교", + "ycode": "37.533133368", + "stop_no": "19547", + "xcode": "126.8945892066", + "stop_type": "마을버스", + "node_id": "118900034", + "nxtStn": "현대2.3차아파트" + }, + { + "stop_nm": "대림포교원", + "ycode": "37.4920558755", + "stop_no": "19548", + "xcode": "126.9030879611", + "stop_type": "마을버스", + "node_id": "118900035", + "nxtStn": "대림1동새마을금고" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.523283", + "stop_no": "19550", + "xcode": "126.882439", + "stop_type": "마을버스", + "node_id": "118900158", + "nxtStn": "신동아아파트.관악고교" + }, + { + "stop_nm": "성락교회", + "ycode": "37.5044937034", + "stop_no": "19551", + "xcode": "126.9029768745", + "stop_type": "마을버스", + "node_id": "118900036", + "nxtStn": "도림사거리" + }, + { + "stop_nm": "한강성심병원", + "ycode": "37.5233299681", + "stop_no": "19552", + "xcode": "126.9105439558", + "stop_type": "마을버스", + "node_id": "118900037", + "nxtStn": "근로복지공단.서울남부지사" + }, + { + "stop_nm": "대림1동새마을금고", + "ycode": "37.4930894759", + "stop_no": "19553", + "xcode": "126.9042356303", + "stop_type": "마을버스", + "node_id": "118900038", + "nxtStn": "대림1동주민센터" + }, + { + "stop_nm": "신동아아파트.관악고교", + "ycode": "37.521661", + "stop_no": "19555", + "xcode": "126.885255", + "stop_type": "마을버스", + "node_id": "118900039", + "nxtStn": "e편한세상문래에듀플라츠" + }, + { + "stop_nm": "도림사거리", + "ycode": "37.5063174421", + "stop_no": "19556", + "xcode": "126.901776669", + "stop_type": "마을버스", + "node_id": "118900040", + "nxtStn": "도림마을금고" + }, + { + "stop_nm": "근로복지공단.서울남부지사", + "ycode": "37.5213296596", + "stop_no": "19557", + "xcode": "126.9119175238", + "stop_type": "마을버스", + "node_id": "118900147", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "대림1동주민센터", + "ycode": "37.4950637693", + "stop_no": "19558", + "xcode": "126.9064554065", + "stop_type": "마을버스", + "node_id": "118900185", + "nxtStn": "태양의집.썬프라자" + }, + { + "stop_nm": "e편한세상문래에듀플라츠", + "ycode": "37.5203116387", + "stop_no": "19560", + "xcode": "126.8858598746", + "stop_type": "마을버스", + "node_id": "118900041", + "nxtStn": "영문초등학교" + }, + { + "stop_nm": "선의원", + "ycode": "37.512505", + "stop_no": "19561", + "xcode": "126.90925", + "stop_type": "마을버스", + "node_id": "118900196", + "nxtStn": "우신초등학교" + }, + { + "stop_nm": "태양의집.썬프라자", + "ycode": "37.4958177593", + "stop_no": "19563", + "xcode": "126.9073026795", + "stop_type": "마을버스", + "node_id": "118900042", + "nxtStn": "영신고등학교" + }, + { + "stop_nm": "영신고등학교", + "ycode": "37.4975925264", + "stop_no": "19568", + "xcode": "126.9083813617", + "stop_type": "마을버스", + "node_id": "118900045", + "nxtStn": "신풍역.수녀원" + }, + { + "stop_nm": "신풍역.수녀원", + "ycode": "37.4994414051", + "stop_no": "19574", + "xcode": "126.9077008382", + "stop_type": "마을버스", + "node_id": "118900047", + "nxtStn": "신길5동주민센터" + }, + { + "stop_nm": "근로복지공단.서울남부지사", + "ycode": "37.521403714", + "stop_no": "19578", + "xcode": "126.9121380476", + "stop_type": "마을버스", + "node_id": "118900048", + "nxtStn": "한강성심병원" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.5234161815", + "stop_no": "19579", + "xcode": "126.8958915081", + "stop_type": "마을버스", + "node_id": "118900049", + "nxtStn": "필립메디컬센터" + }, + { + "stop_nm": "삼성래미안아파트1단지", + "ycode": "37.505206", + "stop_no": "19581", + "xcode": "126.916231", + "stop_type": "마을버스", + "node_id": "118900050", + "nxtStn": "신길GS자이아파트정문" + }, + { + "stop_nm": "벽산메가트리움APT", + "ycode": "37.518568", + "stop_no": "19582", + "xcode": "126.897913", + "stop_type": "마을버스", + "node_id": "118900051", + "nxtStn": "영일시장.록스" + }, + { + "stop_nm": "약산약국", + "ycode": "37.5113138822", + "stop_no": "19583", + "xcode": "126.9142968662", + "stop_type": "마을버스", + "node_id": "118900176", + "nxtStn": "대신시장" + }, + { + "stop_nm": "한강성심병원", + "ycode": "37.5233986262", + "stop_no": "19584", + "xcode": "126.9107746728", + "stop_type": "마을버스", + "node_id": "118900052", + "nxtStn": "인구보건복지협회.갤럭시관광호텔" + }, + { + "stop_nm": "문래역.홈플러스", + "ycode": "37.520453", + "stop_no": "19585", + "xcode": "126.895271", + "stop_type": "마을버스", + "node_id": "118900053", + "nxtStn": "교보생명" + }, + { + "stop_nm": "대영초중고", + "ycode": "37.5020836656", + "stop_no": "19586", + "xcode": "126.9045860784", + "stop_type": "마을버스", + "node_id": "118900054", + "nxtStn": "대영중학교.신길센트럴아이파크" + }, + { + "stop_nm": "삼성래미안아파트2단지", + "ycode": "37.50671281", + "stop_no": "19587", + "xcode": "126.914227473", + "stop_type": "마을버스", + "node_id": "118900055", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "영일시장.록스", + "ycode": "37.518355", + "stop_no": "19588", + "xcode": "126.900864", + "stop_type": "마을버스", + "node_id": "118900056", + "nxtStn": "타임스퀘어" + }, + { + "stop_nm": "인구보건복지협회.갤럭시관광호텔", + "ycode": "37.5262167779", + "stop_no": "19590", + "xcode": "126.9089587972", + "stop_type": "마을버스", + "node_id": "118900058", + "nxtStn": "한국산업인력공단" + }, + { + "stop_nm": "교보생명", + "ycode": "37.5206586901", + "stop_no": "19591", + "xcode": "126.8927264952", + "stop_type": "마을버스", + "node_id": "118900059", + "nxtStn": "GS홈쇼핑앞" + }, + { + "stop_nm": "한국산업인력공단", + "ycode": "37.528297", + "stop_no": "19595", + "xcode": "126.908186", + "stop_type": "마을버스", + "node_id": "118900062", + "nxtStn": "삼성래미안3차아파트" + }, + { + "stop_nm": "GS홈쇼핑앞", + "ycode": "37.5210328929", + "stop_no": "19596", + "xcode": "126.8900548852", + "stop_type": "마을버스", + "node_id": "118900157", + "nxtStn": "GS25앞" + }, + { + "stop_nm": "영등포역", + "ycode": "37.517156647", + "stop_no": "19599", + "xcode": "126.9060890397", + "stop_type": "마을버스", + "node_id": "118900064", + "nxtStn": "남부지방법원등기국.구로세무서(에이스하이테크시티)" + }, + { + "stop_nm": "마포대교(가상)", + "ycode": "37.5372385232", + "stop_no": "19600", + "xcode": "126.9408122078", + "stop_type": "가상정류장", + "node_id": "113000497", + "nxtStn": "원효대교북단(가상)" + }, + { + "stop_nm": "켄싱턴호텔.여의도", + "ycode": "37.5303964528", + "stop_no": "19604", + "xcode": "126.9220912543", + "stop_type": "일반차로", + "node_id": "118000523", + "nxtStn": "여의나루역" + }, + { + "stop_nm": "문래힐스테이트", + "ycode": "37.518962453", + "stop_no": "19619", + "xcode": "126.8893961124", + "stop_type": "일반차로", + "node_id": "118000353", + "nxtStn": "남부고용노동지청" + }, + { + "stop_nm": "래미안에스티움", + "ycode": "37.4998586582", + "stop_no": "19628", + "xcode": "126.9137184414", + "stop_type": "일반차로", + "node_id": "118000271", + "nxtStn": "신길보라매sk뷰.바다마을아파트" + }, + { + "stop_nm": "삼성래미안3차아파트", + "ycode": "37.5304101377", + "stop_no": "19630", + "xcode": "126.907349271", + "stop_type": "마을버스", + "node_id": "118900065", + "nxtStn": "당산중학교.한국소방안전원" + }, + { + "stop_nm": "GS25앞", + "ycode": "37.52137241", + "stop_no": "19631", + "xcode": "126.8879274737", + "stop_type": "마을버스", + "node_id": "118900066", + "nxtStn": "신동아아파트.관악고교" + }, + { + "stop_nm": "당산역.지하철2호선", + "ycode": "37.534696", + "stop_no": "19645", + "xcode": "126.902439", + "stop_type": "마을버스", + "node_id": "118900067", + "nxtStn": "한신아파트.선유도역" + }, + { + "stop_nm": "당산중학교.한국소방안전원", + "ycode": "37.5322315724", + "stop_no": "19662", + "xcode": "126.9066070161", + "stop_type": "마을버스", + "node_id": "118900068", + "nxtStn": "삼성래미안동문" + }, + { + "stop_nm": "모랫말.도림새마을금고", + "ycode": "37.5085202288", + "stop_no": "19663", + "xcode": "126.90021733", + "stop_type": "마을버스", + "node_id": "118900069", + "nxtStn": "도림고가.영등포아트자이" + }, + { + "stop_nm": "삼성래미안동문", + "ycode": "37.5311163277", + "stop_no": "19674", + "xcode": "126.9047437209", + "stop_type": "마을버스", + "node_id": "118900071", + "nxtStn": "당산센트럴아이파크아파트" + }, + { + "stop_nm": "양평역", + "ycode": "37.5253329419", + "stop_no": "19676", + "xcode": "126.8862550017", + "stop_type": "마을버스", + "node_id": "118900072", + "nxtStn": "영은교회" + }, + { + "stop_nm": "도림고가.영등포아트자이", + "ycode": "37.5104673394", + "stop_no": "19679", + "xcode": "126.8989591367", + "stop_type": "마을버스", + "node_id": "118900073", + "nxtStn": "도림교회" + }, + { + "stop_nm": "남성아파트", + "ycode": "37.5130251171", + "stop_no": "19682", + "xcode": "126.8923335799", + "stop_type": "마을버스", + "node_id": "118900074", + "nxtStn": "문래자이아파트상가" + }, + { + "stop_nm": "당산센트럴아이파크아파트", + "ycode": "37.5294473708", + "stop_no": "19684", + "xcode": "126.902510571", + "stop_type": "마을버스", + "node_id": "118900075", + "nxtStn": "효성아파트" + }, + { + "stop_nm": "영은교회", + "ycode": "37.5250867538", + "stop_no": "19685", + "xcode": "126.888897178", + "stop_type": "마을버스", + "node_id": "118900076", + "nxtStn": "노동부남부지청" + }, + { + "stop_nm": "도림교회", + "ycode": "37.5093467611", + "stop_no": "19687", + "xcode": "126.8973227342", + "stop_type": "마을버스", + "node_id": "118900077", + "nxtStn": "도림동주민센터" + }, + { + "stop_nm": "선화약국", + "ycode": "37.510655", + "stop_no": "19688", + "xcode": "126.917242", + "stop_type": "마을버스", + "node_id": "118900078", + "nxtStn": "신길동오거리" + }, + { + "stop_nm": "문래자이아파트상가", + "ycode": "37.5164386938", + "stop_no": "19693", + "xcode": "126.8945640502", + "stop_type": "마을버스", + "node_id": "118900079", + "nxtStn": "문래자이정문" + }, + { + "stop_nm": "효성아파트", + "ycode": "37.530173327", + "stop_no": "19697", + "xcode": "126.9009081058", + "stop_type": "마을버스", + "node_id": "118900080", + "nxtStn": "당산역11번출구" + }, + { + "stop_nm": "노동부남부지청.영등포세무서", + "ycode": "37.524638835", + "stop_no": "19698", + "xcode": "126.8917297019", + "stop_type": "마을버스", + "node_id": "118900081", + "nxtStn": "현대APT후문" + }, + { + "stop_nm": "도림동주민센터", + "ycode": "37.5087971934", + "stop_no": "19700", + "xcode": "126.8964095201", + "stop_type": "마을버스", + "node_id": "118900082", + "nxtStn": "코오롱아파트" + }, + { + "stop_nm": "푸른숲아파트", + "ycode": "37.5087029116", + "stop_no": "19701", + "xcode": "126.9174161583", + "stop_type": "마을버스", + "node_id": "118900083", + "nxtStn": "신길GS자이아파트정문" + }, + { + "stop_nm": "문래자이정문", + "ycode": "37.5169493984", + "stop_no": "19702", + "xcode": "126.896353001", + "stop_type": "마을버스", + "node_id": "118900084", + "nxtStn": "문래자이후문" + }, + { + "stop_nm": "대신시장", + "ycode": "37.5121237758", + "stop_no": "19703", + "xcode": "126.9165402359", + "stop_type": "마을버스", + "node_id": "118900085", + "nxtStn": "농협" + }, + { + "stop_nm": "현대APT후문", + "ycode": "37.524228566", + "stop_no": "19707", + "xcode": "126.8944184537", + "stop_type": "마을버스", + "node_id": "118900086", + "nxtStn": "영등포구청.우리은행" + }, + { + "stop_nm": "코오롱아파트", + "ycode": "37.50803", + "stop_no": "19708", + "xcode": "126.894832", + "stop_type": "마을버스", + "node_id": "118900087", + "nxtStn": "신도림역2번출구" + }, + { + "stop_nm": "대성유니드아파트", + "ycode": "37.5011675241", + "stop_no": "19709", + "xcode": "126.9027187793", + "stop_type": "일반차로", + "node_id": "118000407", + "nxtStn": "대성아파트.건영아파트후문" + }, + { + "stop_nm": "골프장", + "ycode": "37.5088334824", + "stop_no": "19710", + "xcode": "126.9199045396", + "stop_type": "마을버스", + "node_id": "118900088", + "nxtStn": "오거리" + }, + { + "stop_nm": "문래자이후문", + "ycode": "37.5168991207", + "stop_no": "19713", + "xcode": "126.8986416285", + "stop_type": "마을버스", + "node_id": "118900089", + "nxtStn": "문래주민센터" + }, + { + "stop_nm": "농협", + "ycode": "37.5113609279", + "stop_no": "19714", + "xcode": "126.9130016883", + "stop_type": "마을버스", + "node_id": "118900090", + "nxtStn": "도림동자치회관" + }, + { + "stop_nm": "영등포구청.우리은행", + "ycode": "37.5254398537", + "stop_no": "19729", + "xcode": "126.8966953828", + "stop_type": "마을버스", + "node_id": "118900091", + "nxtStn": "당산삼성아파트" + }, + { + "stop_nm": "오거리", + "ycode": "37.5090406202", + "stop_no": "19730", + "xcode": "126.9202843938", + "stop_type": "마을버스", + "node_id": "118900092", + "nxtStn": "오거리" + }, + { + "stop_nm": "문래주민센터", + "ycode": "37.517601684", + "stop_no": "19733", + "xcode": "126.899351122", + "stop_type": "마을버스", + "node_id": "118900093", + "nxtStn": "금호아파트" + }, + { + "stop_nm": "놀이터", + "ycode": "37.5100192088", + "stop_no": "19740", + "xcode": "126.9224212475", + "stop_type": "마을버스", + "node_id": "118900168", + "nxtStn": "성애병원" + }, + { + "stop_nm": "금호아파트", + "ycode": "37.5187718947", + "stop_no": "19741", + "xcode": "126.8979309029", + "stop_type": "마을버스", + "node_id": "118900096", + "nxtStn": "문래역" + }, + { + "stop_nm": "크라운사거리", + "ycode": "37.5083375721", + "stop_no": "19742", + "xcode": "126.9049106738", + "stop_type": "마을버스", + "node_id": "118900152", + "nxtStn": "우성5차아파트" + }, + { + "stop_nm": "도림동주민센터", + "ycode": "37.5084752668", + "stop_no": "19745", + "xcode": "126.8960876627", + "stop_type": "마을버스", + "node_id": "118900097", + "nxtStn": "도림교회" + }, + { + "stop_nm": "도림교회", + "ycode": "37.5092269217", + "stop_no": "19748", + "xcode": "126.8973308164", + "stop_type": "마을버스", + "node_id": "118900099", + "nxtStn": "도림고가.동아에코빌" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.5195771815", + "stop_no": "19750", + "xcode": "126.8915322491", + "stop_type": "마을버스", + "node_id": "118900100", + "nxtStn": "영문초등학교" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.5057686993", + "stop_no": "19751", + "xcode": "126.9018101899", + "stop_type": "마을버스", + "node_id": "118900146", + "nxtStn": "래미안영등포프레비뉴아파트" + }, + { + "stop_nm": "선유고등학교", + "ycode": "37.5332901567", + "stop_no": "19752", + "xcode": "126.8945867229", + "stop_type": "마을버스", + "node_id": "118900145", + "nxtStn": "거성현대6차아파트" + }, + { + "stop_nm": "도림고가.동아에코빌", + "ycode": "37.5101175984", + "stop_no": "19753", + "xcode": "126.8988261304", + "stop_type": "마을버스", + "node_id": "118900144", + "nxtStn": "도림새마을금고" + }, + { + "stop_nm": "거성현대6차아파트", + "ycode": "37.5327075965", + "stop_no": "19756", + "xcode": "126.892091436", + "stop_type": "마을버스", + "node_id": "118900141", + "nxtStn": "SK엔카" + }, + { + "stop_nm": "도림새마을금고", + "ycode": "37.5084857554", + "stop_no": "19757", + "xcode": "126.8999436394", + "stop_type": "마을버스", + "node_id": "118900140", + "nxtStn": "도림사거리" + }, + { + "stop_nm": "e편한세상문래에듀플라츠", + "ycode": "37.5204494891", + "stop_no": "19758", + "xcode": "126.8858415635", + "stop_type": "마을버스", + "node_id": "118900139", + "nxtStn": "신동아아파트.관악고교" + }, + { + "stop_nm": "SK엔카", + "ycode": "37.5343029295", + "stop_no": "19760", + "xcode": "126.8925202511", + "stop_type": "마을버스", + "node_id": "118900137", + "nxtStn": "선유도역.롯데홈쇼핑" + }, + { + "stop_nm": "도림사거리", + "ycode": "37.5070907884", + "stop_no": "19761", + "xcode": "126.9009386259", + "stop_type": "마을버스", + "node_id": "118900136", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "대림요양병원", + "ycode": "37.5025321694", + "stop_no": "19762", + "xcode": "126.8999334882", + "stop_type": "마을버스", + "node_id": "118900135", + "nxtStn": "수정교회" + }, + { + "stop_nm": "선유도역.롯데홈쇼핑", + "ycode": "37.5370485077", + "stop_no": "19765", + "xcode": "126.8934442009", + "stop_type": "마을버스", + "node_id": "118900133", + "nxtStn": "당산초등학교" + }, + { + "stop_nm": "정현부페", + "ycode": "37.4993863615", + "stop_no": "19770", + "xcode": "126.8977582395", + "stop_type": "마을버스", + "node_id": "118900132", + "nxtStn": "대림3동주민센터" + }, + { + "stop_nm": "당산초등학교", + "ycode": "37.5386977962", + "stop_no": "19773", + "xcode": "126.8947635611", + "stop_type": "마을버스", + "node_id": "118900163", + "nxtStn": "한신아파트.선유도공원" + }, + { + "stop_nm": "대영초중고", + "ycode": "37.502528", + "stop_no": "19774", + "xcode": "126.904047", + "stop_type": "마을버스", + "node_id": "118900131", + "nxtStn": "신길5동주민센터" + }, + { + "stop_nm": "노동부남부지청", + "ycode": "37.5253724672", + "stop_no": "19775", + "xcode": "126.8909004588", + "stop_type": "마을버스", + "node_id": "118900130", + "nxtStn": "당중초등학교" + }, + { + "stop_nm": "대림3동주민센터", + "ycode": "37.4980793659", + "stop_no": "19777", + "xcode": "126.8983424791", + "stop_type": "마을버스", + "node_id": "118900129", + "nxtStn": "우성2차아파트" + }, + { + "stop_nm": "한신아파트.선유도공원", + "ycode": "37.5406592181", + "stop_no": "19778", + "xcode": "126.8924692571", + "stop_type": "마을버스", + "node_id": "118900164", + "nxtStn": "동양아파트" + }, + { + "stop_nm": "우성2차아파트", + "ycode": "37.4955536164", + "stop_no": "19786", + "xcode": "126.8994440527", + "stop_type": "마을버스", + "node_id": "118900126", + "nxtStn": "대동초등학교.명지성모병원" + }, + { + "stop_nm": "동양아파트", + "ycode": "37.5417610376", + "stop_no": "19794", + "xcode": "126.8902700202", + "stop_type": "마을버스", + "node_id": "118900159", + "nxtStn": "한솔아파트" + }, + { + "stop_nm": "현대6차아파트.거성아파트", + "ycode": "37.530741", + "stop_no": "19799", + "xcode": "126.893948", + "stop_type": "마을버스", + "node_id": "118900124", + "nxtStn": "현대2.3차아파트" + }, + { + "stop_nm": "대동초등학교.명지성모병원", + "ycode": "37.49420138", + "stop_no": "19800", + "xcode": "126.8987627859", + "stop_type": "마을버스", + "node_id": "118900189", + "nxtStn": "대림역7호선" + }, + { + "stop_nm": "지적공사.여의도자이", + "ycode": "37.518791", + "stop_no": "19801", + "xcode": "126.927352", + "stop_type": "일반차로", + "node_id": "118000594", + "nxtStn": "여의도메리어트호텔" + }, + { + "stop_nm": "지적공사.여의도자이", + "ycode": "37.5189481008", + "stop_no": "19802", + "xcode": "126.9264910134", + "stop_type": "일반차로", + "node_id": "118000592", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "여의도메리어트호텔", + "ycode": "37.521715", + "stop_no": "19803", + "xcode": "126.918463", + "stop_type": "일반차로", + "node_id": "118000591", + "nxtStn": "지적공사.여의도자이" + }, + { + "stop_nm": "여의도메리어트호텔", + "ycode": "37.521042", + "stop_no": "19804", + "xcode": "126.919287", + "stop_type": "일반차로", + "node_id": "118000593", + "nxtStn": "성산대교(가상)" + }, + { + "stop_nm": "구립복지관", + "ycode": "37.4980404548", + "stop_no": "19806", + "xcode": "126.9080395961", + "stop_type": "마을버스", + "node_id": "118900123", + "nxtStn": "태양의집.썬프라자" + }, + { + "stop_nm": "대림역7호선", + "ycode": "37.492822639", + "stop_no": "19807", + "xcode": "126.896620449", + "stop_type": "마을버스", + "node_id": "118900122", + "nxtStn": "종점" + }, + { + "stop_nm": "한솔아파트", + "ycode": "37.5438918495", + "stop_no": "19809", + "xcode": "126.8880522051", + "stop_type": "마을버스", + "node_id": "118900121", + "nxtStn": "종점" + }, + { + "stop_nm": "문래주민자치센터", + "ycode": "37.516952", + "stop_no": "19811", + "xcode": "126.898688", + "stop_type": "일반차로", + "node_id": "118000457", + "nxtStn": "문래역" + }, + { + "stop_nm": "태양의집.썬프라자", + "ycode": "37.4961223744", + "stop_no": "19812", + "xcode": "126.9073565889", + "stop_type": "마을버스", + "node_id": "118900120", + "nxtStn": "대림1동주민센터" + }, + { + "stop_nm": "신길동오거리", + "ycode": "37.510392", + "stop_no": "19813", + "xcode": "126.915945", + "stop_type": "마을버스", + "node_id": "118900205", + "nxtStn": "신기목련아파트" + }, + { + "stop_nm": "신기목련아파트", + "ycode": "37.509015", + "stop_no": "19814", + "xcode": "126.915823", + "stop_type": "마을버스", + "node_id": "118900206", + "nxtStn": "푸른숲아파트" + }, + { + "stop_nm": "영등포역.페어필드메리어트", + "ycode": "37.516727545", + "stop_no": "19819", + "xcode": "126.9081071702", + "stop_type": "일반차로", + "node_id": "118000463", + "nxtStn": "유진투자증권" + }, + { + "stop_nm": "영등포시장전철역", + "ycode": "37.5216821884", + "stop_no": "19820", + "xcode": "126.905191283", + "stop_type": "일반차로", + "node_id": "118000464", + "nxtStn": "신화병원" + }, + { + "stop_nm": "경방타임스퀘어.신세계백화점", + "ycode": "37.5172980312", + "stop_no": "19821", + "xcode": "126.9059321592", + "stop_type": "일반차로", + "node_id": "118000465", + "nxtStn": "영등포역.페어필드메리어트" + }, + { + "stop_nm": "영등포전화국", + "ycode": "37.5290753891", + "stop_no": "19822", + "xcode": "126.9059275537", + "stop_type": "일반차로", + "node_id": "118000466", + "nxtStn": "당산역삼성래미안아파트" + }, + { + "stop_nm": "영등포전화국", + "ycode": "37.5288723804", + "stop_no": "19823", + "xcode": "126.9055996881", + "stop_type": "일반차로", + "node_id": "118000575", + "nxtStn": "신화병원" + }, + { + "stop_nm": "영등포시장전철역", + "ycode": "37.5214106275", + "stop_no": "19824", + "xcode": "126.9047809511", + "stop_type": "일반차로", + "node_id": "118000468", + "nxtStn": "경방타임스퀘어.신세계백화점" + }, + { + "stop_nm": "당산역", + "ycode": "37.5326565825", + "stop_no": "19826", + "xcode": "126.9039757313", + "stop_type": "가로변시간", + "node_id": "118000470", + "nxtStn": "영등포전화국" + }, + { + "stop_nm": "대영고등학교.신길센트럴아이파크", + "ycode": "37.504883", + "stop_no": "19827", + "xcode": "126.904912", + "stop_type": "일반차로", + "node_id": "118000492", + "nxtStn": "래미안영등포프레비뉴아파트" + }, + { + "stop_nm": "대림1동주민센터", + "ycode": "37.4950914919", + "stop_no": "19833", + "xcode": "126.90618847", + "stop_type": "마을버스", + "node_id": "118900119", + "nxtStn": "대림1동새마을금고" + }, + { + "stop_nm": "대림1동새마을금고", + "ycode": "37.4933580173", + "stop_no": "19834", + "xcode": "126.9042511202", + "stop_type": "마을버스", + "node_id": "118900118", + "nxtStn": "대림포교원" + }, + { + "stop_nm": "대림포교원", + "ycode": "37.4924371503", + "stop_no": "19835", + "xcode": "126.9032197838", + "stop_type": "마을버스", + "node_id": "118900117", + "nxtStn": "농협.대림2동주민센터" + }, + { + "stop_nm": "농협.대림2동주민센터", + "ycode": "37.4908109691", + "stop_no": "19836", + "xcode": "126.9014158733", + "stop_type": "마을버스", + "node_id": "118900116", + "nxtStn": "신대림한솔솔파크아파트.충심교회" + }, + { + "stop_nm": "신대림한솔솔파크아파트.충심교회", + "ycode": "37.4888933803", + "stop_no": "19837", + "xcode": "126.8992324664", + "stop_type": "마을버스", + "node_id": "118900186", + "nxtStn": "구로3동현대아파트" + }, + { + "stop_nm": "대림역", + "ycode": "37.4937954158", + "stop_no": "19839", + "xcode": "126.8951274236", + "stop_type": "일반차로", + "node_id": "118000474", + "nxtStn": "구로구청" + }, + { + "stop_nm": "당서초교", + "ycode": "37.531111114", + "stop_no": "19840", + "xcode": "126.8995389009", + "stop_type": "마을버스", + "node_id": "118900114", + "nxtStn": "현대3차유원아파트" + }, + { + "stop_nm": "국회의사당", + "ycode": "37.5282753148", + "stop_no": "19842", + "xcode": "126.9181628332", + "stop_type": "일반차로", + "node_id": "118000564", + "nxtStn": "켄싱턴호텔.여의도" + }, + { + "stop_nm": "현대3차유원아파트", + "ycode": "37.5319345944", + "stop_no": "19844", + "xcode": "126.8973008278", + "stop_type": "마을버스", + "node_id": "118900113", + "nxtStn": "선유고등학교" + }, + { + "stop_nm": "양화대교전망카페", + "ycode": "37.53982", + "stop_no": "19846", + "xcode": "126.901182", + "stop_type": "일반차로", + "node_id": "118000489", + "nxtStn": "합정역(가상)" + }, + { + "stop_nm": "신풍프라자", + "ycode": "37.5017864827", + "stop_no": "19847", + "xcode": "126.9015122861", + "stop_type": "일반차로", + "node_id": "118000480", + "nxtStn": "대성유니드아파트" + }, + { + "stop_nm": "양화대교전망카페", + "ycode": "37.539938", + "stop_no": "19848", + "xcode": "126.900755", + "stop_type": "일반차로", + "node_id": "118000490", + "nxtStn": "양평한신아파트.선유도공원입구" + }, + { + "stop_nm": "문래힐스테이트아파트", + "ycode": "37.5194239626", + "stop_no": "19849", + "xcode": "126.8914974004", + "stop_type": "일반차로", + "node_id": "118000515", + "nxtStn": "문래역" + }, + { + "stop_nm": "문래힐스테이트아파트", + "ycode": "37.519647", + "stop_no": "19850", + "xcode": "126.891508", + "stop_type": "일반차로", + "node_id": "118000514", + "nxtStn": "영문초등학교" + }, + { + "stop_nm": "영등포소방서.타임스퀘어", + "ycode": "37.518273873", + "stop_no": "19851", + "xcode": "126.9036355463", + "stop_type": "일반차로", + "node_id": "118000511", + "nxtStn": "영등포시장" + }, + { + "stop_nm": "영등포구청", + "ycode": "37.524315", + "stop_no": "19852", + "xcode": "126.895222", + "stop_type": "일반차로", + "node_id": "118000517", + "nxtStn": "당중초등학교" + }, + { + "stop_nm": "해군호텔", + "ycode": "37.504339", + "stop_no": "19853", + "xcode": "126.916046", + "stop_type": "일반차로", + "node_id": "118000614", + "nxtStn": "신길바다마을아파트.보라매sk뷰" + }, + { + "stop_nm": "진로A", + "ycode": "37.5206433053", + "stop_no": "19854", + "xcode": "126.8956157712", + "stop_type": "일반차로", + "node_id": "118000615", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "현대2.3차아파트", + "ycode": "37.5326083", + "stop_no": "19857", + "xcode": "126.8969389534", + "stop_type": "마을버스", + "node_id": "118900112", + "nxtStn": "당산119안전센터.당산역" + }, + { + "stop_nm": "신동아아파트.관악고교", + "ycode": "37.5223558864", + "stop_no": "19858", + "xcode": "126.8855026473", + "stop_type": "마을버스", + "node_id": "118900111", + "nxtStn": "양평역" + }, + { + "stop_nm": "한국거래소공항방면", + "ycode": "37.5235034611", + "stop_no": "19861", + "xcode": "126.9269644423", + "stop_type": "일반차로", + "node_id": "118000518", + "nxtStn": "영등포역.패어필드호텔" + }, + { + "stop_nm": "당산역", + "ycode": "37.5330028905", + "stop_no": "19862", + "xcode": "126.9010480642", + "stop_type": "마을버스", + "node_id": "118900110", + "nxtStn": "당산유원제일1차아파트" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.507407", + "stop_no": "19865", + "xcode": "126.913044", + "stop_type": "마을버스", + "node_id": "118900177", + "nxtStn": "신길4동주민센터" + }, + { + "stop_nm": "골프장", + "ycode": "37.508689", + "stop_no": "19867", + "xcode": "126.919914", + "stop_type": "마을버스", + "node_id": "118900165", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.5071313862", + "stop_no": "19868", + "xcode": "126.9200285195", + "stop_type": "마을버스", + "node_id": "118900169", + "nxtStn": "병무청" + }, + { + "stop_nm": "병무청", + "ycode": "37.5063656176", + "stop_no": "19869", + "xcode": "126.9216230712", + "stop_type": "마을버스", + "node_id": "118900108", + "nxtStn": "성당" + }, + { + "stop_nm": "성당", + "ycode": "37.5051599656", + "stop_no": "19870", + "xcode": "126.9216560023", + "stop_type": "마을버스", + "node_id": "118900182", + "nxtStn": "신길한성아파트" + }, + { + "stop_nm": "신길한성아파트", + "ycode": "37.5041513635", + "stop_no": "19871", + "xcode": "126.9199106731", + "stop_type": "마을버스", + "node_id": "118900107", + "nxtStn": "서울해군호텔" + }, + { + "stop_nm": "신길중앙새마을금고신길4동지점", + "ycode": "37.5054257948", + "stop_no": "19872", + "xcode": "126.9126669015", + "stop_type": "마을버스", + "node_id": "118900178", + "nxtStn": "포레나신길아파트" + }, + { + "stop_nm": "래미안영등포프레비뉴아파트", + "ycode": "37.5056353604", + "stop_no": "19877", + "xcode": "126.9069364632", + "stop_type": "마을버스", + "node_id": "118900174", + "nxtStn": "포레나신길아파트" + }, + { + "stop_nm": "신길힐스테이트클래시안아파트", + "ycode": "37.5055906938", + "stop_no": "19878", + "xcode": "126.9114530403", + "stop_type": "마을버스", + "node_id": "118900105", + "nxtStn": "신길파크자이아파트" + }, + { + "stop_nm": "신길파크자이아파트", + "ycode": "37.504935", + "stop_no": "19879", + "xcode": "126.913562", + "stop_type": "마을버스", + "node_id": "118900179", + "nxtStn": "삼성래미안아파트1단지" + }, + { + "stop_nm": "서울해군호텔", + "ycode": "37.5042266783", + "stop_no": "19880", + "xcode": "126.9159722388", + "stop_type": "일반차로", + "node_id": "118900104", + "nxtStn": "신길보라매SK뷰아파트" + }, + { + "stop_nm": "신길보라매SK뷰아파트", + "ycode": "37.5039954584", + "stop_no": "19881", + "xcode": "126.9198893492", + "stop_type": "마을버스", + "node_id": "118900183", + "nxtStn": "성당" + }, + { + "stop_nm": "성당", + "ycode": "37.5050446711", + "stop_no": "19882", + "xcode": "126.9217262504", + "stop_type": "마을버스", + "node_id": "118900103", + "nxtStn": "병무청" + }, + { + "stop_nm": "병무청", + "ycode": "37.5063629983", + "stop_no": "19883", + "xcode": "126.9217497583", + "stop_type": "마을버스", + "node_id": "118900102", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.507491", + "stop_no": "19884", + "xcode": "126.919882", + "stop_type": "마을버스", + "node_id": "118900170", + "nxtStn": "골프장" + }, + { + "stop_nm": "오거리", + "ycode": "37.5086678983", + "stop_no": "19885", + "xcode": "126.9215731559", + "stop_type": "마을버스", + "node_id": "118900171", + "nxtStn": "놀이터" + }, + { + "stop_nm": "서울해군호텔", + "ycode": "37.504543", + "stop_no": "19888", + "xcode": "126.915978", + "stop_type": "마을버스", + "node_id": "118900101", + "nxtStn": "신길중앙새마을금고신길4동지점" + }, + { + "stop_nm": "영등포역후문", + "ycode": "37.514591", + "stop_no": "19893", + "xcode": "126.907824", + "stop_type": "일반차로", + "node_id": "118000560", + "nxtStn": "선의원" + }, + { + "stop_nm": "신길GS자이아파트정문", + "ycode": "37.5062985565", + "stop_no": "19894", + "xcode": "126.9171066208", + "stop_type": "마을버스", + "node_id": "118900198", + "nxtStn": "신길GS자이아파트후문" + }, + { + "stop_nm": "신길GS자이아파트후문", + "ycode": "37.5061002907", + "stop_no": "19895", + "xcode": "126.9157992808", + "stop_type": "마을버스", + "node_id": "118900199", + "nxtStn": "삼성래미안아파트2단지" + }, + { + "stop_nm": "신길4동주민센터", + "ycode": "37.5081805356", + "stop_no": "19896", + "xcode": "126.911555177", + "stop_type": "마을버스", + "node_id": "118900200", + "nxtStn": "우신초등학교" + }, + { + "stop_nm": "우신초등학교", + "ycode": "37.5095929088", + "stop_no": "19897", + "xcode": "126.9108193881", + "stop_type": "마을버스", + "node_id": "118900201", + "nxtStn": "영등포역후문" + }, + { + "stop_nm": "우신초등학교", + "ycode": "37.509377", + "stop_no": "19898", + "xcode": "126.910685", + "stop_type": "마을버스", + "node_id": "118900202", + "nxtStn": "신길힐스테이트클래시안아파트" + }, + { + "stop_nm": "신길GS자이아파트정문", + "ycode": "37.5061310478", + "stop_no": "19899", + "xcode": "126.91724367", + "stop_type": "마을버스", + "node_id": "118900203", + "nxtStn": "푸른숲아파트" + }, + { + "stop_nm": "63빌딩.한강유람선", + "ycode": "37.5212987463", + "stop_no": "19900", + "xcode": "126.940164018", + "stop_type": "일반차로", + "node_id": "119000318", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "여의나루역", + "ycode": "37.5272703449", + "stop_no": "19901", + "xcode": "126.932128085", + "stop_type": "일반차로", + "node_id": "118000604", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "성산대교남단(가상)", + "ycode": "37.5468335281", + "stop_no": "19902", + "xcode": "126.8890059514", + "stop_type": "가상정류장", + "node_id": "118000553", + "nxtStn": "월드컵경기장남측.월드컵공원" + }, + { + "stop_nm": "여의2교(가상)", + "ycode": "37.5251676878", + "stop_no": "19903", + "xcode": "126.9110463633", + "stop_type": "가상정류장", + "node_id": "118000552", + "nxtStn": "서울역버스환승센터" + }, + { + "stop_nm": "여의2교(가상)", + "ycode": "37.5252913916", + "stop_no": "19904", + "xcode": "126.9113833725", + "stop_type": "가상정류장", + "node_id": "118000551", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "근로복지공단(가상)", + "ycode": "37.5199992313", + "stop_no": "19908", + "xcode": "126.9163165144", + "stop_type": "가상정류장", + "node_id": "118000557", + "nxtStn": "여의2교(가상)" + }, + { + "stop_nm": "양화한강공원(가상)", + "ycode": "37.5364218869", + "stop_no": "19909", + "xcode": "126.903509225", + "stop_type": "가상정류장", + "node_id": "118000556", + "nxtStn": "성산대교남단(가상)" + }, + { + "stop_nm": "양화한강공원(가상)", + "ycode": "37.5370043978", + "stop_no": "19910", + "xcode": "126.9040029719", + "stop_type": "가상정류장", + "node_id": "118000555", + "nxtStn": "합정역" + }, + { + "stop_nm": "푸른숲아파트", + "ycode": "37.5087156723", + "stop_no": "19911", + "xcode": "126.9176242751", + "stop_type": "마을버스", + "node_id": "118900204", + "nxtStn": "골프장" + }, + { + "stop_nm": "공군호텔", + "ycode": "37.5100455483", + "stop_no": "19963", + "xcode": "126.92412815", + "stop_type": "일반차로", + "node_id": "118000529", + "nxtStn": "서울지방병무청" + }, + { + "stop_nm": "공군호텔", + "ycode": "37.5102017522", + "stop_no": "19964", + "xcode": "126.9246177878", + "stop_type": "일반차로", + "node_id": "119000292", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "성산대교(가상)", + "ycode": "37.5475398826", + "stop_no": "19976", + "xcode": "126.8887430165", + "stop_type": "가상정류장", + "node_id": "118000590", + "nxtStn": "양화대교(가상)" + }, + { + "stop_nm": "성산대교(가상)", + "ycode": "37.547882782", + "stop_no": "19977", + "xcode": "126.8887538574", + "stop_type": "가상정류장", + "node_id": "118000589", + "nxtStn": "가양대교(가상)" + }, + { + "stop_nm": "양화대교(가상)", + "ycode": "37.5388134548", + "stop_no": "19978", + "xcode": "126.9004415832", + "stop_type": "가상정류장", + "node_id": "118000588", + "nxtStn": "여의하류IC(가상)" + }, + { + "stop_nm": "양화대교(가상)", + "ycode": "37.5391916803", + "stop_no": "19979", + "xcode": "126.9006838645", + "stop_type": "가상정류장", + "node_id": "118000587", + "nxtStn": "성산대교(가상)" + }, + { + "stop_nm": "여의하류IC(가상)", + "ycode": "37.5318707992", + "stop_no": "19980", + "xcode": "126.9090791787", + "stop_type": "가상정류장", + "node_id": "118000586", + "nxtStn": "여의2교(가상)" + }, + { + "stop_nm": "여의하류IC(가상)", + "ycode": "37.5320281993", + "stop_no": "19981", + "xcode": "126.9095941629", + "stop_type": "가상정류장", + "node_id": "118000585", + "nxtStn": "양화대교(가상)" + }, + { + "stop_nm": "여의2교(가상)", + "ycode": "37.5262913886", + "stop_no": "19982", + "xcode": "126.9107877459", + "stop_type": "가상정류장", + "node_id": "118000584", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "영등포푸르지오", + "ycode": "37.5117732064", + "stop_no": "19984", + "xcode": "126.9034753573", + "stop_type": "마을버스", + "node_id": "118900193", + "nxtStn": "대우미래사랑" + }, + { + "stop_nm": "대우미래사랑", + "ycode": "37.5123000589", + "stop_no": "19985", + "xcode": "126.9009464467", + "stop_type": "마을버스", + "node_id": "118900192", + "nxtStn": "영등포아트자이" + }, + { + "stop_nm": "영등포아트자이", + "ycode": "37.51099", + "stop_no": "19986", + "xcode": "126.898855", + "stop_type": "마을버스", + "node_id": "118900191", + "nxtStn": "도림교회" + }, + { + "stop_nm": "영등포아트자이", + "ycode": "37.51146", + "stop_no": "19987", + "xcode": "126.899518", + "stop_type": "일반차로", + "node_id": "118000562", + "nxtStn": "대우미래사랑" + }, + { + "stop_nm": "대우미래사랑", + "ycode": "37.5118103168", + "stop_no": "19988", + "xcode": "126.9004176959", + "stop_type": "마을버스", + "node_id": "118900190", + "nxtStn": "종점" + }, + { + "stop_nm": "영등포푸르지오후문", + "ycode": "37.513267", + "stop_no": "19990", + "xcode": "126.904886", + "stop_type": "마을버스", + "node_id": "118900195", + "nxtStn": "고추말" + }, + { + "stop_nm": "대한항공훈련센터", + "ycode": "37.5458862811", + "stop_no": "19992", + "xcode": "126.8123006952", + "stop_type": "일반차로", + "node_id": "115000575", + "nxtStn": "오쇠동삼거리" + }, + { + "stop_nm": "여의나루역", + "ycode": "37.5264706671", + "stop_no": "19993", + "xcode": "126.9328494288", + "stop_type": "일반차로", + "node_id": "118000504", + "nxtStn": "63빌딩.가톨릭대학교여의도성모병원" + }, + { + "stop_nm": "여의2교(가상)", + "ycode": "37.5266083392", + "stop_no": "19994", + "xcode": "126.9116111841", + "stop_type": "가상정류장", + "node_id": "118000583", + "nxtStn": "여의하류IC(가상)" + }, + { + "stop_nm": "당산역", + "ycode": "37.53502216", + "stop_no": "19996", + "xcode": "126.8998731174", + "stop_type": "가로변시간", + "node_id": "118000501", + "nxtStn": "양평한신아파트.선유도공원입구" + }, + { + "stop_nm": "여의도지하차도(가상)", + "ycode": "37.5267900417", + "stop_no": "19997", + "xcode": "126.9185466683", + "stop_type": "가상정류장", + "node_id": "118000612", + "nxtStn": "여의도역" + }, + { + "stop_nm": "은성병원", + "ycode": "37.5270658414", + "stop_no": "19999", + "xcode": "126.905803358", + "stop_type": "가로변전일", + "node_id": "118000495", + "nxtStn": "당산푸르지오아파트" + }, + { + "stop_nm": "동작상떼빌아파트", + "ycode": "37.486449", + "stop_no": "20001", + "xcode": "126.904448", + "stop_type": "중앙차로", + "node_id": "119000001", + "nxtStn": "신대방경남아파트" + }, + { + "stop_nm": "신대방경남아파트", + "ycode": "37.490249", + "stop_no": "20002", + "xcode": "126.907593", + "stop_type": "중앙차로", + "node_id": "119000002", + "nxtStn": "신대방현대아파트" + }, + { + "stop_nm": "신대방현대아파트", + "ycode": "37.495282", + "stop_no": "20003", + "xcode": "126.911479", + "stop_type": "중앙차로", + "node_id": "119000003", + "nxtStn": "보라매공원" + }, + { + "stop_nm": "보라매공원", + "ycode": "37.496899", + "stop_no": "20004", + "xcode": "126.916221", + "stop_type": "중앙차로", + "node_id": "119000004", + "nxtStn": "보라매역.동작세무서" + }, + { + "stop_nm": "보라매역.동작세무서", + "ycode": "37.4981412047", + "stop_no": "20005", + "xcode": "126.9201964462", + "stop_type": "중앙차로", + "node_id": "119000005", + "nxtStn": "강남중학교" + }, + { + "stop_nm": "강남중학교", + "ycode": "37.5037895503", + "stop_no": "20006", + "xcode": "126.9218983526", + "stop_type": "중앙차로", + "node_id": "119000006", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.513174", + "stop_no": "20007", + "xcode": "126.931437", + "stop_type": "중앙차로", + "node_id": "119000007", + "nxtStn": "노량진수산시장.CTS기독교TV" + }, + { + "stop_nm": "현대아파트.유한양행", + "ycode": "37.5132368488", + "stop_no": "20008", + "xcode": "126.9323737344", + "stop_type": "중앙차로", + "node_id": "119000008", + "nxtStn": "대방역2번출구앞" + }, + { + "stop_nm": "노량진수산시장.CTS기독교TV", + "ycode": "37.513423", + "stop_no": "20009", + "xcode": "126.938456", + "stop_type": "중앙차로", + "node_id": "119000009", + "nxtStn": "노량진역" + }, + { + "stop_nm": "노량진수산시장.CTS기독교TV", + "ycode": "37.5134800797", + "stop_no": "20010", + "xcode": "126.9388655754", + "stop_type": "중앙차로", + "node_id": "119000010", + "nxtStn": "현대아파트.유한양행" + }, + { + "stop_nm": "노량진역", + "ycode": "37.513733", + "stop_no": "20011", + "xcode": "126.943811", + "stop_type": "중앙차로", + "node_id": "119000011", + "nxtStn": "노들역" + }, + { + "stop_nm": "노량진역", + "ycode": "37.5138325876", + "stop_no": "20012", + "xcode": "126.9447114504", + "stop_type": "중앙차로", + "node_id": "119000012", + "nxtStn": "노량진수산시장.CTS기독교TV" + }, + { + "stop_nm": "노들역", + "ycode": "37.512825", + "stop_no": "20013", + "xcode": "126.949256", + "stop_type": "중앙차로", + "node_id": "119000013", + "nxtStn": "노들역5번출구앞" + }, + { + "stop_nm": "노들역", + "ycode": "37.512734203", + "stop_no": "20014", + "xcode": "126.9509621786", + "stop_type": "중앙차로", + "node_id": "119000014", + "nxtStn": "노량진역" + }, + { + "stop_nm": "갯마을앞", + "ycode": "37.4975550541", + "stop_no": "20015", + "xcode": "126.983311749", + "stop_type": "중앙차로", + "node_id": "119000289", + "nxtStn": "정금마을.방배경찰서" + }, + { + "stop_nm": "정금마을.방배경찰서", + "ycode": "37.4942338943", + "stop_no": "20016", + "xcode": "126.9826144422", + "stop_type": "중앙차로", + "node_id": "119000288", + "nxtStn": "경문고교.배나무골앞" + }, + { + "stop_nm": "경문고교.배나무골앞", + "ycode": "37.4915946786", + "stop_no": "20017", + "xcode": "126.9825870522", + "stop_type": "중앙차로", + "node_id": "119000287", + "nxtStn": "총신대입구역.남성사계시장입구앞" + }, + { + "stop_nm": "총신대입구역.남성시장입구앞", + "ycode": "37.4882168341", + "stop_no": "20018", + "xcode": "126.9822243706", + "stop_type": "중앙차로", + "node_id": "119000286", + "nxtStn": "사당동우체국앞" + }, + { + "stop_nm": "사당동우체국앞", + "ycode": "37.4832273743", + "stop_no": "20019", + "xcode": "126.9819451238", + "stop_type": "중앙차로", + "node_id": "119000285", + "nxtStn": "방배노인종합복지관" + }, + { + "stop_nm": "방배노인종합복지관", + "ycode": "37.4806790282", + "stop_no": "20020", + "xcode": "126.9818145731", + "stop_type": "중앙차로", + "node_id": "119000284", + "nxtStn": "방배동래미안아파트" + }, + { + "stop_nm": "서울지방병무청앞", + "ycode": "37.506935", + "stop_no": "20106", + "xcode": "126.923275", + "stop_type": "일반차로", + "node_id": "119000020", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "공군호텔", + "ycode": "37.5100106698", + "stop_no": "20107", + "xcode": "126.9245410607", + "stop_type": "일반차로", + "node_id": "119000021", + "nxtStn": "대방역" + }, + { + "stop_nm": "대방역", + "ycode": "37.5125881335", + "stop_no": "20108", + "xcode": "126.926363433", + "stop_type": "일반차로", + "node_id": "119000022", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "KT동작지사", + "ycode": "37.5130395413", + "stop_no": "20111", + "xcode": "126.9356600816", + "stop_type": "일반차로", + "node_id": "119000023", + "nxtStn": "동작구청정문" + }, + { + "stop_nm": "노량진역3번출구", + "ycode": "37.513495", + "stop_no": "20114", + "xcode": "126.941878", + "stop_type": "일반차로", + "node_id": "119000024", + "nxtStn": "노들역" + }, + { + "stop_nm": "노량진역2번출구", + "ycode": "37.513905", + "stop_no": "20115", + "xcode": "126.943467", + "stop_type": "일반차로", + "node_id": "119000025", + "nxtStn": "동작구청.노량진초등학교앞" + }, + { + "stop_nm": "사육신공원", + "ycode": "37.513367", + "stop_no": "20117", + "xcode": "126.946297", + "stop_type": "일반차로", + "node_id": "119000026", + "nxtStn": "노들역" + }, + { + "stop_nm": "사육신공원", + "ycode": "37.513315", + "stop_no": "20119", + "xcode": "126.947977", + "stop_type": "일반차로", + "node_id": "119000027", + "nxtStn": "노량진역2번출구" + }, + { + "stop_nm": "노들역", + "ycode": "37.512865", + "stop_no": "20121", + "xcode": "126.951048", + "stop_type": "일반차로", + "node_id": "119000028", + "nxtStn": "사육신공원" + }, + { + "stop_nm": "노들역", + "ycode": "37.512565", + "stop_no": "20122", + "xcode": "126.951007", + "stop_type": "일반차로", + "node_id": "119000029", + "nxtStn": "상도터널노량진동" + }, + { + "stop_nm": "흑석동효사정앞", + "ycode": "37.511554", + "stop_no": "20123", + "xcode": "126.960745", + "stop_type": "일반차로", + "node_id": "119000030", + "nxtStn": "흑석역.흑석동빗물펌프장" + }, + { + "stop_nm": "흑석동효사정앞", + "ycode": "37.5115728985", + "stop_no": "20124", + "xcode": "126.9612375315", + "stop_type": "가로변전일", + "node_id": "119000031", + "nxtStn": "본동시장" + }, + { + "stop_nm": "흑석역.흑석동빗물펌프장", + "ycode": "37.508297", + "stop_no": "20125", + "xcode": "126.963213", + "stop_type": "일반차로", + "node_id": "119000032", + "nxtStn": "중앙대병원" + }, + { + "stop_nm": "흑석역.명수대현대아파트", + "ycode": "37.5074984059", + "stop_no": "20126", + "xcode": "126.9650447528", + "stop_type": "가로변시간", + "node_id": "119000033", + "nxtStn": "비계" + }, + { + "stop_nm": "흑석역.명수대현대아파트", + "ycode": "37.5075850724", + "stop_no": "20127", + "xcode": "126.9655921789", + "stop_type": "가로변시간", + "node_id": "119000034", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "흑석동명수대현대아파트", + "ycode": "37.507348", + "stop_no": "20128", + "xcode": "126.966272", + "stop_type": "가로변시간", + "node_id": "119000035", + "nxtStn": "흑석역.흑석동빗물펌프장" + }, + { + "stop_nm": "비계", + "ycode": "37.5063016864", + "stop_no": "20129", + "xcode": "126.9680257853", + "stop_type": "가로변시간", + "node_id": "119000036", + "nxtStn": "흑석동한강현대아파트" + }, + { + "stop_nm": "비계", + "ycode": "37.5064370015", + "stop_no": "20130", + "xcode": "126.9685844969", + "stop_type": "가로변전일", + "node_id": "119000037", + "nxtStn": "흑석역.명수대현대아파트" + }, + { + "stop_nm": "흑석동한강현대아파트", + "ycode": "37.505867", + "stop_no": "20131", + "xcode": "126.971748", + "stop_type": "가로변시간", + "node_id": "119000038", + "nxtStn": "비계" + }, + { + "stop_nm": "흑석동한강현대아파트", + "ycode": "37.5054978005", + "stop_no": "20132", + "xcode": "126.9711242049", + "stop_type": "일반차로", + "node_id": "119000039", + "nxtStn": "동작역.국립현충원" + }, + { + "stop_nm": "동작역.국립현충원", + "ycode": "37.502586", + "stop_no": "20133", + "xcode": "126.976865", + "stop_type": "일반차로", + "node_id": "119000040", + "nxtStn": "갯마을앞" + }, + { + "stop_nm": "동작역.국립현충원", + "ycode": "37.503188597", + "stop_no": "20134", + "xcode": "126.9766525988", + "stop_type": "일반차로", + "node_id": "119000041", + "nxtStn": "흑석동한강현대아파트" + }, + { + "stop_nm": "부평IC(미정차)", + "ycode": "37.5208612058", + "stop_no": "20135", + "xcode": "126.7210313414", + "stop_type": "가상정류장", + "node_id": "167000640", + "nxtStn": "부천IC진입(경유)" + }, + { + "stop_nm": "사당1동관악시장앞", + "ycode": "37.476833", + "stop_no": "20141", + "xcode": "126.977827", + "stop_type": "일반차로", + "node_id": "119000048", + "nxtStn": "예술인마을" + }, + { + "stop_nm": "예술인마을", + "ycode": "37.4760492272", + "stop_no": "20142", + "xcode": "126.972845088", + "stop_type": "일반차로", + "node_id": "119000049", + "nxtStn": "서울미술고.인헌중고" + }, + { + "stop_nm": "서울공업고등학교", + "ycode": "37.499775", + "stop_no": "20143", + "xcode": "126.922337", + "stop_type": "일반차로", + "node_id": "119000050", + "nxtStn": "대림초등학교" + }, + { + "stop_nm": "서울공업고등학교", + "ycode": "37.4999614514", + "stop_no": "20144", + "xcode": "126.921570953", + "stop_type": "일반차로", + "node_id": "119000051", + "nxtStn": "강남중학교" + }, + { + "stop_nm": "대림초등학교", + "ycode": "37.4996077724", + "stop_no": "20145", + "xcode": "126.9264810316", + "stop_type": "일반차로", + "node_id": "119000052", + "nxtStn": "핸드픽트호텔" + }, + { + "stop_nm": "대림초등학교", + "ycode": "37.4998553553", + "stop_no": "20146", + "xcode": "126.926127913", + "stop_type": "일반차로", + "node_id": "119000053", + "nxtStn": "서울공업고등학교" + }, + { + "stop_nm": "성대시장", + "ycode": "37.4999961167", + "stop_no": "20147", + "xcode": "126.9309085729", + "stop_type": "일반차로", + "node_id": "119000054", + "nxtStn": "신대방삼거리" + }, + { + "stop_nm": "성대시장", + "ycode": "37.500285", + "stop_no": "20148", + "xcode": "126.931693", + "stop_type": "일반차로", + "node_id": "119000055", + "nxtStn": "상도초등학교입구" + }, + { + "stop_nm": "상도초등학교입구", + "ycode": "37.5033055411", + "stop_no": "20149", + "xcode": "126.9367655685", + "stop_type": "일반차로", + "node_id": "119000056", + "nxtStn": "청화병원" + }, + { + "stop_nm": "상도초등학교입구", + "ycode": "37.502959881", + "stop_no": "20150", + "xcode": "126.9357682657", + "stop_type": "일반차로", + "node_id": "119000057", + "nxtStn": "성대시장" + }, + { + "stop_nm": "장승배기역", + "ycode": "37.5046761432", + "stop_no": "20151", + "xcode": "126.9385221188", + "stop_type": "일반차로", + "node_id": "119000058", + "nxtStn": "핸드픽트호텔" + }, + { + "stop_nm": "동작문화복지센터.동작보건소", + "ycode": "37.5049377205", + "stop_no": "20152", + "xcode": "126.9407908692", + "stop_type": "일반차로", + "node_id": "119000059", + "nxtStn": "상도역1번출구" + }, + { + "stop_nm": "동작문화복지센터.동작보건소", + "ycode": "37.505327", + "stop_no": "20153", + "xcode": "126.94173", + "stop_type": "일반차로", + "node_id": "119000060", + "nxtStn": "장승배기역" + }, + { + "stop_nm": "상도노빌리티아파트", + "ycode": "37.504793", + "stop_no": "20154", + "xcode": "126.94594", + "stop_type": "일반차로", + "node_id": "119000061", + "nxtStn": "상도역" + }, + { + "stop_nm": "상도노빌리티아파트", + "ycode": "37.5043269596", + "stop_no": "20155", + "xcode": "126.9468675132", + "stop_type": "일반차로", + "node_id": "119000062", + "nxtStn": "동작문화복지센터.동작보건소" + }, + { + "stop_nm": "상도터널노량진동", + "ycode": "37.512057", + "stop_no": "20156", + "xcode": "126.954114", + "stop_type": "일반차로", + "node_id": "119000063", + "nxtStn": "노들섬" + }, + { + "stop_nm": "상도터널노량진동", + "ycode": "37.5120063166", + "stop_no": "20157", + "xcode": "126.9536978866", + "stop_type": "일반차로", + "node_id": "119000064", + "nxtStn": "상도터널상도동" + }, + { + "stop_nm": "상도터널상도동", + "ycode": "37.5045988081", + "stop_no": "20158", + "xcode": "126.9495037012", + "stop_type": "일반차로", + "node_id": "119000065", + "nxtStn": "상도역.하나은행" + }, + { + "stop_nm": "상도터널상도동", + "ycode": "37.5038586483", + "stop_no": "20159", + "xcode": "126.9495190801", + "stop_type": "일반차로", + "node_id": "119000066", + "nxtStn": "상도터널노량진동" + }, + { + "stop_nm": "상도역", + "ycode": "37.5016271328", + "stop_no": "20160", + "xcode": "126.9486225374", + "stop_type": "일반차로", + "node_id": "119000067", + "nxtStn": "상도동중앙하이츠빌.상도전통시장" + }, + { + "stop_nm": "상도역", + "ycode": "37.5012490566", + "stop_no": "20161", + "xcode": "126.9495197061", + "stop_type": "일반차로", + "node_id": "119000068", + "nxtStn": "상도터널상도동" + }, + { + "stop_nm": "상도동중앙하이츠빌.상도전통시장", + "ycode": "37.4988131751", + "stop_no": "20162", + "xcode": "126.9511850423", + "stop_type": "일반차로", + "node_id": "119000069", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "상도동중앙하이츠빌.상도전통시장", + "ycode": "37.4986899661", + "stop_no": "20163", + "xcode": "126.9517743709", + "stop_type": "일반차로", + "node_id": "119000070", + "nxtStn": "상도역" + }, + { + "stop_nm": "숭실대입구역", + "ycode": "37.496923", + "stop_no": "20164", + "xcode": "126.9528", + "stop_type": "일반차로", + "node_id": "119000071", + "nxtStn": "숭실대별관앞" + }, + { + "stop_nm": "숭실대입구역", + "ycode": "37.4961666089", + "stop_no": "20165", + "xcode": "126.9533491547", + "stop_type": "일반차로", + "node_id": "119000072", + "nxtStn": "봉현초등학교" + }, + { + "stop_nm": "숭실대입구역", + "ycode": "37.4964614208", + "stop_no": "20166", + "xcode": "126.9537334982", + "stop_type": "일반차로", + "node_id": "119000073", + "nxtStn": "상도역.하나은행" + }, + { + "stop_nm": "봉현초등학교", + "ycode": "37.491679", + "stop_no": "20167", + "xcode": "126.956215", + "stop_type": "가로변시간", + "node_id": "119000074", + "nxtStn": "봉현초등학교" + }, + { + "stop_nm": "봉천고개.관악현대아파트", + "ycode": "37.4917326146", + "stop_no": "20168", + "xcode": "126.9565953054", + "stop_type": "일반차로", + "node_id": "119000075", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "숭실대정문앞", + "ycode": "37.49515", + "stop_no": "20169", + "xcode": "126.957055", + "stop_type": "일반차로", + "node_id": "119000076", + "nxtStn": "숭실대별관앞" + }, + { + "stop_nm": "숭실대정문앞", + "ycode": "37.4953183557", + "stop_no": "20170", + "xcode": "126.9572808442", + "stop_type": "일반차로", + "node_id": "119000077", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "숭실대별관앞", + "ycode": "37.4946390733", + "stop_no": "20171", + "xcode": "126.9602929082", + "stop_type": "일반차로", + "node_id": "119000078", + "nxtStn": "총신대" + }, + { + "stop_nm": "숭실대별관앞", + "ycode": "37.494983", + "stop_no": "20172", + "xcode": "126.959895", + "stop_type": "일반차로", + "node_id": "119000079", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "사당5치안센터", + "ycode": "37.4890277761", + "stop_no": "20173", + "xcode": "126.9656493194", + "stop_type": "일반차로", + "node_id": "119000080", + "nxtStn": "총신대" + }, + { + "stop_nm": "총신대", + "ycode": "37.4887422791", + "stop_no": "20174", + "xcode": "126.9661798164", + "stop_type": "일반차로", + "node_id": "119000081", + "nxtStn": "사당롯데캐슬골든포레.사당해그린" + }, + { + "stop_nm": "총신대", + "ycode": "37.487863", + "stop_no": "20175", + "xcode": "126.966476", + "stop_type": "일반차로", + "node_id": "119000082", + "nxtStn": "남성역" + }, + { + "stop_nm": "사당중학교", + "ycode": "37.486355", + "stop_no": "20176", + "xcode": "126.968275", + "stop_type": "일반차로", + "node_id": "119000083", + "nxtStn": "삼거리" + }, + { + "stop_nm": "사당중학교", + "ycode": "37.4866369532", + "stop_no": "20177", + "xcode": "126.9681789127", + "stop_type": "일반차로", + "node_id": "119000084", + "nxtStn": "총신대" + }, + { + "stop_nm": "남성역", + "ycode": "37.4849291221", + "stop_no": "20178", + "xcode": "126.9707465249", + "stop_type": "일반차로", + "node_id": "119000085", + "nxtStn": "총신대" + }, + { + "stop_nm": "남성역", + "ycode": "37.484588", + "stop_no": "20179", + "xcode": "126.971093", + "stop_type": "일반차로", + "node_id": "119000086", + "nxtStn": "사당동대아신협앞" + }, + { + "stop_nm": "남성역골목시장", + "ycode": "37.483805", + "stop_no": "20180", + "xcode": "126.973014", + "stop_type": "일반차로", + "node_id": "119000087", + "nxtStn": "두산위브아파트" + }, + { + "stop_nm": "남성역골목시장", + "ycode": "37.483676", + "stop_no": "20181", + "xcode": "126.972782", + "stop_type": "일반차로", + "node_id": "119000088", + "nxtStn": "사당동대아신협앞" + }, + { + "stop_nm": "남성초등학교", + "ycode": "37.484075", + "stop_no": "20182", + "xcode": "126.978585", + "stop_type": "일반차로", + "node_id": "119000089", + "nxtStn": "이수역9번출구" + }, + { + "stop_nm": "남성초등학교", + "ycode": "37.4842992298", + "stop_no": "20183", + "xcode": "126.9784299949", + "stop_type": "일반차로", + "node_id": "119000090", + "nxtStn": "남성역골목시장" + }, + { + "stop_nm": "이수역9번출구", + "ycode": "37.484445", + "stop_no": "20184", + "xcode": "126.979895", + "stop_type": "일반차로", + "node_id": "119000091", + "nxtStn": "이수역" + }, + { + "stop_nm": "이수역10번출구", + "ycode": "37.4848328619", + "stop_no": "20185", + "xcode": "126.9801874958", + "stop_type": "일반차로", + "node_id": "119000092", + "nxtStn": "남성초등학교" + }, + { + "stop_nm": "신대방삼거리", + "ycode": "37.4977748671", + "stop_no": "20186", + "xcode": "126.9278411369", + "stop_type": "일반차로", + "node_id": "119000093", + "nxtStn": "보라매병원입구" + }, + { + "stop_nm": "신대방삼거리", + "ycode": "37.498328", + "stop_no": "20187", + "xcode": "126.928253", + "stop_type": "일반차로", + "node_id": "119000094", + "nxtStn": "7호선신대방삼거리역4번출구" + }, + { + "stop_nm": "보라매병원입구", + "ycode": "37.494757", + "stop_no": "20188", + "xcode": "126.927191", + "stop_type": "일반차로", + "node_id": "119000095", + "nxtStn": "보라매노인복지회관" + }, + { + "stop_nm": "동작구청.노량진초등학교앞", + "ycode": "37.51055", + "stop_no": "20190", + "xcode": "126.940053", + "stop_type": "일반차로", + "node_id": "119000097", + "nxtStn": "장성교회" + }, + { + "stop_nm": "동작구청.노량진초등학교앞", + "ycode": "37.510453", + "stop_no": "20191", + "xcode": "126.940337", + "stop_type": "일반차로", + "node_id": "119000098", + "nxtStn": "노량진역3번출구" + }, + { + "stop_nm": "장성교회", + "ycode": "37.5082110072", + "stop_no": "20192", + "xcode": "126.9399682084", + "stop_type": "일반차로", + "node_id": "119000099", + "nxtStn": "장승배기역" + }, + { + "stop_nm": "청화병원", + "ycode": "37.5072450833", + "stop_no": "20193", + "xcode": "126.9400798321", + "stop_type": "일반차로", + "node_id": "119000100", + "nxtStn": "동작구청.노량진초등학교앞" + }, + { + "stop_nm": "중앙대학교", + "ycode": "37.508167", + "stop_no": "20194", + "xcode": "126.961323", + "stop_type": "일반차로", + "node_id": "119000101", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "중앙대학교", + "ycode": "37.508509243", + "stop_no": "20195", + "xcode": "126.9615071968", + "stop_type": "일반차로", + "node_id": "119000102", + "nxtStn": "흑석역.흑석동빗물펌프장" + }, + { + "stop_nm": "중앙대학교", + "ycode": "37.5083452201", + "stop_no": "20196", + "xcode": "126.9614382814", + "stop_type": "일반차로", + "node_id": "119000103", + "nxtStn": "흑석역.명수대현대아파트" + }, + { + "stop_nm": "7호선장승배기역.상도2치안센터", + "ycode": "37.5041718438", + "stop_no": "20197", + "xcode": "126.9391355764", + "stop_type": "일반차로", + "node_id": "119000104", + "nxtStn": "상도2동아이파크.포스코더샵아파트" + }, + { + "stop_nm": "7호선장승배기역.상도2치안센터", + "ycode": "37.5043404476", + "stop_no": "20198", + "xcode": "126.939325461", + "stop_type": "일반차로", + "node_id": "119000105", + "nxtStn": "장승배기역4번출구" + }, + { + "stop_nm": "상도2동아이파크.포스코더샵아파트", + "ycode": "37.5014793109", + "stop_no": "20199", + "xcode": "126.9408309246", + "stop_type": "일반차로", + "node_id": "119000106", + "nxtStn": "더크는킨더어린이집" + }, + { + "stop_nm": "상도2동아이파크.포스코더샵아파트", + "ycode": "37.501514", + "stop_no": "20200", + "xcode": "126.941136", + "stop_type": "일반차로", + "node_id": "119000107", + "nxtStn": "7호선장승배기역.상도2치안센터" + }, + { + "stop_nm": "신상도초등학교", + "ycode": "37.499316", + "stop_no": "20201", + "xcode": "126.943532", + "stop_type": "일반차로", + "node_id": "119000108", + "nxtStn": "상도4동약수맨션" + }, + { + "stop_nm": "중앙대후문", + "ycode": "37.5048082949", + "stop_no": "20202", + "xcode": "126.9536355983", + "stop_type": "일반차로", + "node_id": "119000109", + "nxtStn": "중앙대정문" + }, + { + "stop_nm": "중앙대후문", + "ycode": "37.5045504993", + "stop_no": "20203", + "xcode": "126.9534310317", + "stop_type": "일반차로", + "node_id": "119000110", + "nxtStn": "상도SH빌아파트상도팰리스후문" + }, + { + "stop_nm": "중앙대정문", + "ycode": "37.506811", + "stop_no": "20204", + "xcode": "126.958294", + "stop_type": "일반차로", + "node_id": "119000111", + "nxtStn": "중앙대학교" + }, + { + "stop_nm": "중앙대중문", + "ycode": "37.50664", + "stop_no": "20205", + "xcode": "126.957272", + "stop_type": "일반차로", + "node_id": "119000112", + "nxtStn": "중앙대후문" + }, + { + "stop_nm": "중앙대정문", + "ycode": "37.507237", + "stop_no": "20206", + "xcode": "126.959113", + "stop_type": "일반차로", + "node_id": "119000113", + "nxtStn": "중앙대중문" + }, + { + "stop_nm": "신대방역", + "ycode": "37.4873791461", + "stop_no": "20207", + "xcode": "126.9123158741", + "stop_type": "일반차로", + "node_id": "119000114", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "신대방역", + "ycode": "37.487413", + "stop_no": "20208", + "xcode": "126.911743", + "stop_type": "일반차로", + "node_id": "119000115", + "nxtStn": "신대방경남아파트" + }, + { + "stop_nm": "동작상떼빌아파트", + "ycode": "37.488253739", + "stop_no": "20209", + "xcode": "126.9071028224", + "stop_type": "일반차로", + "node_id": "119000116", + "nxtStn": "신대방역" + }, + { + "stop_nm": "신대방경남아파트", + "ycode": "37.4884286507", + "stop_no": "20210", + "xcode": "126.9072269982", + "stop_type": "일반차로", + "node_id": "119000117", + "nxtStn": "신대방1동경남아파트" + }, + { + "stop_nm": "서울특별시.보라매병원", + "ycode": "37.492755", + "stop_no": "20217", + "xcode": "126.924482", + "stop_type": "일반차로", + "node_id": "119000123", + "nxtStn": "보라매삼성아파트.모자원고개" + }, + { + "stop_nm": "신상도초등학교", + "ycode": "37.4993739229", + "stop_no": "20219", + "xcode": "126.9436736712", + "stop_type": "일반차로", + "node_id": "119000124", + "nxtStn": "상도2동아이파크.포스코더샵아파트" + }, + { + "stop_nm": "상도4동약수맨션", + "ycode": "37.497943", + "stop_no": "20220", + "xcode": "126.943548", + "stop_type": "일반차로", + "node_id": "119000125", + "nxtStn": "밤골터널.상도역롯데캐슬파크엘" + }, + { + "stop_nm": "경향렉스빌.롯데캐슬비엔", + "ycode": "37.4959295429", + "stop_no": "20221", + "xcode": "126.9429139957", + "stop_type": "일반차로", + "node_id": "119000126", + "nxtStn": "롯데캐슬비엔" + }, + { + "stop_nm": "경향렉스빌.롯데캐슬비엔", + "ycode": "37.4959853248", + "stop_no": "20222", + "xcode": "126.9427352625", + "stop_type": "일반차로", + "node_id": "119000127", + "nxtStn": "은천동벽산블루밍아파트105동" + }, + { + "stop_nm": "상도4동약수맨션", + "ycode": "37.4979590401", + "stop_no": "20228", + "xcode": "126.9433569275", + "stop_type": "일반차로", + "node_id": "119000131", + "nxtStn": "경향렉스빌.롯데캐슬비엔" + }, + { + "stop_nm": "래미안상도3차중문", + "ycode": "37.499874", + "stop_no": "20233", + "xcode": "126.953869", + "stop_type": "일반차로", + "node_id": "119000317", + "nxtStn": "상도3차삼성래미안후문" + }, + { + "stop_nm": "금양빌딩", + "ycode": "37.4995065114", + "stop_no": "20235", + "xcode": "126.953501942", + "stop_type": "일반차로", + "node_id": "119000316", + "nxtStn": "상도1동주민센터.상도3차래미안" + }, + { + "stop_nm": "동작구청정문", + "ycode": "37.5123768448", + "stop_no": "20240", + "xcode": "126.9400621552", + "stop_type": "일반차로", + "node_id": "119000134", + "nxtStn": "동작구청.노량진초등학교앞" + }, + { + "stop_nm": "상도SH빌아파트상도팰리스후문", + "ycode": "37.502655", + "stop_no": "20241", + "xcode": "126.953972", + "stop_type": "일반차로", + "node_id": "119000135", + "nxtStn": "중앙대후문" + }, + { + "stop_nm": "상도SH빌아파트상도팰리스후문", + "ycode": "37.5031415122", + "stop_no": "20242", + "xcode": "126.9542926452", + "stop_type": "일반차로", + "node_id": "119000136", + "nxtStn": "상도3차삼성래미안후문" + }, + { + "stop_nm": "상도3차삼성래미안후문", + "ycode": "37.5010547638", + "stop_no": "20243", + "xcode": "126.9538226802", + "stop_type": "일반차로", + "node_id": "119000137", + "nxtStn": "상도SH빌아파트상도팰리스후문" + }, + { + "stop_nm": "상도3차삼성래미안후문", + "ycode": "37.5009407383", + "stop_no": "20244", + "xcode": "126.9535689972", + "stop_type": "일반차로", + "node_id": "119000138", + "nxtStn": "금양빌딩" + }, + { + "stop_nm": "상도1동주민센터.상도3차래미안", + "ycode": "37.498407", + "stop_no": "20245", + "xcode": "126.953358", + "stop_type": "일반차로", + "node_id": "119000139", + "nxtStn": "래미안상도3차중문" + }, + { + "stop_nm": "상도1동주민센터.상도3차래미안", + "ycode": "37.49822", + "stop_no": "20246", + "xcode": "126.953262", + "stop_type": "일반차로", + "node_id": "119000140", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "노들역앞", + "ycode": "37.5132618801", + "stop_no": "20247", + "xcode": "126.9522638617", + "stop_type": "일반차로", + "node_id": "119000290", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "대방역1번출구앞", + "ycode": "37.513095", + "stop_no": "20248", + "xcode": "126.927473", + "stop_type": "일반차로", + "node_id": "119000295", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "대방역.여의교앞", + "ycode": "37.514757", + "stop_no": "20249", + "xcode": "126.92733", + "stop_type": "일반차로", + "node_id": "119000291", + "nxtStn": "샛강역1번출구.여의도자이" + }, + { + "stop_nm": "노들역4번출구앞", + "ycode": "37.5124572784", + "stop_no": "20250", + "xcode": "126.9533594381", + "stop_type": "일반차로", + "node_id": "119000294", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "동작실버센터입구", + "ycode": "37.513122", + "stop_no": "20251", + "xcode": "126.956612", + "stop_type": "일반차로", + "node_id": "119000293", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "사당동대아신협앞", + "ycode": "37.483377", + "stop_no": "20252", + "xcode": "126.97629", + "stop_type": "일반차로", + "node_id": "119000296", + "nxtStn": "이수역5번출구" + }, + { + "stop_nm": "사당역9번출구앞", + "ycode": "37.47739263", + "stop_no": "20253", + "xcode": "126.9813958895", + "stop_type": "일반차로", + "node_id": "119000302", + "nxtStn": "사당1동관악시장앞" + }, + { + "stop_nm": "사당롯데캐슬골든포레.사당해그린", + "ycode": "37.492436", + "stop_no": "20254", + "xcode": "126.963072", + "stop_type": "일반차로", + "node_id": "119000319", + "nxtStn": "사당5치안센터" + }, + { + "stop_nm": "사당솔밭도서관", + "ycode": "37.4840171336", + "stop_no": "20494", + "xcode": "126.9670560347", + "stop_type": "마을버스", + "node_id": "119900312", + "nxtStn": "갑을명가" + }, + { + "stop_nm": "효주파크빌", + "ycode": "37.5027284564", + "stop_no": "20495", + "xcode": "126.926749425", + "stop_type": "마을버스", + "node_id": "119900311", + "nxtStn": "대방어린이도서관" + }, + { + "stop_nm": "남성초등학교입구", + "ycode": "37.4837563501", + "stop_no": "20496", + "xcode": "126.9769232473", + "stop_type": "마을버스", + "node_id": "119900310", + "nxtStn": "남성역" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.497733194", + "stop_no": "20497", + "xcode": "126.9218266232", + "stop_type": "마을버스", + "node_id": "119900308", + "nxtStn": "보라매역.동작세무서" + }, + { + "stop_nm": "정금마을", + "ycode": "37.4937440545", + "stop_no": "20498", + "xcode": "126.9812425527", + "stop_type": "마을버스", + "node_id": "119900306", + "nxtStn": "경문고등학교" + }, + { + "stop_nm": "이수힐스테이트", + "ycode": "37.4941844461", + "stop_no": "20499", + "xcode": "126.9797405713", + "stop_type": "마을버스", + "node_id": "119900307", + "nxtStn": "정금마을" + }, + { + "stop_nm": "사당역10번출구", + "ycode": "37.4786874149", + "stop_no": "20500", + "xcode": "126.9815810731", + "stop_type": "마을버스", + "node_id": "119900083", + "nxtStn": "사당역1번출구" + }, + { + "stop_nm": "현대2차아파트후문", + "ycode": "37.510707", + "stop_no": "20501", + "xcode": "126.932045", + "stop_type": "마을버스", + "node_id": "119900313", + "nxtStn": "남부교회" + }, + { + "stop_nm": "극동상가", + "ycode": "37.491687286", + "stop_no": "20502", + "xcode": "126.9740958456", + "stop_type": "마을버스", + "node_id": "119900256", + "nxtStn": "극동아파트110동" + }, + { + "stop_nm": "삼성래미안.롯데캐슬", + "ycode": "37.489628", + "stop_no": "20503", + "xcode": "126.97115", + "stop_type": "마을버스", + "node_id": "119900082", + "nxtStn": "대림아파트후문.래미안로이파크" + }, + { + "stop_nm": "자이아파트정문앞", + "ycode": "37.4891368419", + "stop_no": "20504", + "xcode": "126.9627803005", + "stop_type": "마을버스", + "node_id": "119900081", + "nxtStn": "자이아파트상가앞" + }, + { + "stop_nm": "달마사", + "ycode": "37.500332", + "stop_no": "20505", + "xcode": "126.960569", + "stop_type": "마을버스", + "node_id": "119900080", + "nxtStn": "유앤미아파트" + }, + { + "stop_nm": "상도4동성문교회", + "ycode": "37.4986599886", + "stop_no": "20506", + "xcode": "126.9395008378", + "stop_type": "마을버스", + "node_id": "119900079", + "nxtStn": "충남정육점" + }, + { + "stop_nm": "사자암", + "ycode": "37.4937689308", + "stop_no": "20507", + "xcode": "126.9363189798", + "stop_type": "마을버스", + "node_id": "119900078", + "nxtStn": "구중앙슈퍼앞" + }, + { + "stop_nm": "노들역.노량진교회", + "ycode": "37.512428", + "stop_no": "20508", + "xcode": "126.954474", + "stop_type": "마을버스", + "node_id": "119900156", + "nxtStn": "동작실버센터입구" + }, + { + "stop_nm": "대림현대아파트", + "ycode": "37.4861568443", + "stop_no": "20509", + "xcode": "126.9724840951", + "stop_type": "마을버스", + "node_id": "119900077", + "nxtStn": "대림프라자.사당3동주민센터" + }, + { + "stop_nm": "행복유치원", + "ycode": "37.4961660043", + "stop_no": "20510", + "xcode": "126.9408686105", + "stop_type": "마을버스", + "node_id": "119900076", + "nxtStn": "경향렉스빌.롯데캐슬비엔" + }, + { + "stop_nm": "이수역", + "ycode": "37.4850014413", + "stop_no": "20511", + "xcode": "126.9806261973", + "stop_type": "마을버스", + "node_id": "119900075", + "nxtStn": "남성초등학교입구" + }, + { + "stop_nm": "보라매공원", + "ycode": "37.49462", + "stop_no": "20512", + "xcode": "126.918577", + "stop_type": "마을버스", + "node_id": "119900074", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "신대방삼거리역", + "ycode": "37.4999673048", + "stop_no": "20513", + "xcode": "126.9281819736", + "stop_type": "마을버스", + "node_id": "119900073", + "nxtStn": "강현중학교" + }, + { + "stop_nm": "현대2차아파트후문", + "ycode": "37.5110632602", + "stop_no": "20515", + "xcode": "126.9321404098", + "stop_type": "마을버스", + "node_id": "119900314", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "극동아파트110동", + "ycode": "37.4903636891", + "stop_no": "20516", + "xcode": "126.9746719153", + "stop_type": "마을버스", + "node_id": "119900257", + "nxtStn": "극동아파트112동" + }, + { + "stop_nm": "극동아파트110동", + "ycode": "37.4908474626", + "stop_no": "20517", + "xcode": "126.9741210149", + "stop_type": "마을버스", + "node_id": "119900258", + "nxtStn": "극동아파트112동" + }, + { + "stop_nm": "대림아파트후문", + "ycode": "37.4886519328", + "stop_no": "20518", + "xcode": "126.9721846371", + "stop_type": "마을버스", + "node_id": "119900071", + "nxtStn": "삼일공원" + }, + { + "stop_nm": "자이아파트상가앞", + "ycode": "37.4886828031", + "stop_no": "20519", + "xcode": "126.963155966", + "stop_type": "마을버스", + "node_id": "119900070", + "nxtStn": "신남성초교입구" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.497806", + "stop_no": "20520", + "xcode": "126.959261", + "stop_type": "마을버스", + "node_id": "119900069", + "nxtStn": "숭실대후문" + }, + { + "stop_nm": "충남정육점", + "ycode": "37.4989765149", + "stop_no": "20521", + "xcode": "126.9399699471", + "stop_type": "마을버스", + "node_id": "119900068", + "nxtStn": "더크는킨더어린이집" + }, + { + "stop_nm": "당곡중.고등학교", + "ycode": "37.4929709888", + "stop_no": "20522", + "xcode": "126.9354612976", + "stop_type": "마을버스", + "node_id": "119900067", + "nxtStn": "갑을명가아파트" + }, + { + "stop_nm": "대림프라자.사당3동주민센터", + "ycode": "37.4839260244", + "stop_no": "20524", + "xcode": "126.9738757634", + "stop_type": "마을버스", + "node_id": "119900065", + "nxtStn": "사당시장" + }, + { + "stop_nm": "롯데캐슬", + "ycode": "37.4898234441", + "stop_no": "20526", + "xcode": "126.9712716065", + "stop_type": "마을버스", + "node_id": "119900315", + "nxtStn": "삼성래미안.롯데캐슬" + }, + { + "stop_nm": "보라매공원입구", + "ycode": "37.496008", + "stop_no": "20527", + "xcode": "126.918086", + "stop_type": "마을버스", + "node_id": "119900063", + "nxtStn": "보라매역.동작세무서" + }, + { + "stop_nm": "강현중학교", + "ycode": "37.5020677375", + "stop_no": "20528", + "xcode": "126.9278709369", + "stop_type": "마을버스", + "node_id": "119900264", + "nxtStn": "효주파크빌" + }, + { + "stop_nm": "구중앙슈퍼앞", + "ycode": "37.4946119215", + "stop_no": "20529", + "xcode": "126.935503992", + "stop_type": "마을버스", + "node_id": "119900062", + "nxtStn": "성심슈퍼" + }, + { + "stop_nm": "유앤미아파트", + "ycode": "37.500707", + "stop_no": "20530", + "xcode": "126.960459", + "stop_type": "마을버스", + "node_id": "119900061", + "nxtStn": "흑석자이.동부센트레빌" + }, + { + "stop_nm": "로고스교회", + "ycode": "37.497757", + "stop_no": "20531", + "xcode": "126.931715", + "stop_type": "마을버스", + "node_id": "119900318", + "nxtStn": "상도3동주민센터" + }, + { + "stop_nm": "극동아파트112동", + "ycode": "37.488596", + "stop_no": "20532", + "xcode": "126.976344", + "stop_type": "마을버스", + "node_id": "119900260", + "nxtStn": "삼일초등학교앞" + }, + { + "stop_nm": "삼일공원", + "ycode": "37.4868510064", + "stop_no": "20533", + "xcode": "126.9738555209", + "stop_type": "마을버스", + "node_id": "119900060", + "nxtStn": "남성초등학교.사당청소년문화의집" + }, + { + "stop_nm": "사당종합체육관", + "ycode": "37.4925240349", + "stop_no": "20534", + "xcode": "126.9696348409", + "stop_type": "마을버스", + "node_id": "119900320", + "nxtStn": "롯데캐슬.샤인" + }, + { + "stop_nm": "숭실대후문", + "ycode": "37.4950952786", + "stop_no": "20535", + "xcode": "126.9610345638", + "stop_type": "마을버스", + "node_id": "119900059", + "nxtStn": "사당롯데캐슬골든포레.사당해그린" + }, + { + "stop_nm": "화성목욕탕", + "ycode": "37.4996265622", + "stop_no": "20536", + "xcode": "126.9406672593", + "stop_type": "마을버스", + "node_id": "119900058", + "nxtStn": "현대아이파크" + }, + { + "stop_nm": "갑을명가아파트", + "ycode": "37.4936940869", + "stop_no": "20537", + "xcode": "126.9345740345", + "stop_type": "마을버스", + "node_id": "119900057", + "nxtStn": "영은교회" + }, + { + "stop_nm": "사당시장", + "ycode": "37.4830900688", + "stop_no": "20539", + "xcode": "126.9751266748", + "stop_type": "마을버스", + "node_id": "119900055", + "nxtStn": "사당1동주민센터입구" + }, + { + "stop_nm": "롯데캐슬비엔", + "ycode": "37.4968433468", + "stop_no": "20540", + "xcode": "126.9430908619", + "stop_type": "마을버스", + "node_id": "119900054", + "nxtStn": "상도4동약수맨션" + }, + { + "stop_nm": "삼거리", + "ycode": "37.4855998149", + "stop_no": "20541", + "xcode": "126.9683026096", + "stop_type": "마을버스", + "node_id": "119900263", + "nxtStn": "사당솔밭도서관" + }, + { + "stop_nm": "대방어린이도서관", + "ycode": "37.5029619498", + "stop_no": "20542", + "xcode": "126.9254812795", + "stop_type": "마을버스", + "node_id": "119900053", + "nxtStn": "성남중고" + }, + { + "stop_nm": "성심슈퍼", + "ycode": "37.4951429733", + "stop_no": "20543", + "xcode": "126.9344155696", + "stop_type": "마을버스", + "node_id": "119900052", + "nxtStn": "청운종합복지관" + }, + { + "stop_nm": "중앙빌리지.동부센트레빌", + "ycode": "37.502722", + "stop_no": "20544", + "xcode": "126.960711", + "stop_type": "마을버스", + "node_id": "119900051", + "nxtStn": "중대부속초등학교" + }, + { + "stop_nm": "롯데캐슬.샤인", + "ycode": "37.490918", + "stop_no": "20545", + "xcode": "126.971489", + "stop_type": "마을버스", + "node_id": "119900319", + "nxtStn": "사당종합체육관" + }, + { + "stop_nm": "남성초등학교.사당청소년문화의집", + "ycode": "37.4860104896", + "stop_no": "20546", + "xcode": "126.974840744", + "stop_type": "마을버스", + "node_id": "119900050", + "nxtStn": "삼거리우편물취급소" + }, + { + "stop_nm": "신남성초교후문", + "ycode": "37.4890283675", + "stop_no": "20547", + "xcode": "126.9645998909", + "stop_type": "마을버스", + "node_id": "119900049", + "nxtStn": "사당.인정아파트" + }, + { + "stop_nm": "현대아이파크", + "ycode": "37.5008885718", + "stop_no": "20549", + "xcode": "126.9416027519", + "stop_type": "마을버스", + "node_id": "119900047", + "nxtStn": "7호선장승배기역.상도2치안센터" + }, + { + "stop_nm": "영은교회", + "ycode": "37.4943957803", + "stop_no": "20550", + "xcode": "126.9340950389", + "stop_type": "마을버스", + "node_id": "119900046", + "nxtStn": "선재유통" + }, + { + "stop_nm": "이수시너스.이수역7번출구", + "ycode": "37.483918", + "stop_no": "20552", + "xcode": "126.981878", + "stop_type": "마을버스", + "node_id": "119900044", + "nxtStn": "방배노인종합복지관" + }, + { + "stop_nm": "갑을명가", + "ycode": "37.482572", + "stop_no": "20554", + "xcode": "126.966767", + "stop_type": "마을버스", + "node_id": "119900043", + "nxtStn": "동작고교" + }, + { + "stop_nm": "성남중고", + "ycode": "37.5045784206", + "stop_no": "20555", + "xcode": "126.9253134035", + "stop_type": "마을버스", + "node_id": "119900042", + "nxtStn": "대림아파트후문.성남중.고교" + }, + { + "stop_nm": "청운종합복지관", + "ycode": "37.4955668475", + "stop_no": "20556", + "xcode": "126.933440322", + "stop_type": "마을버스", + "node_id": "119900041", + "nxtStn": "구동사무소" + }, + { + "stop_nm": "은로초등학교", + "ycode": "37.503266", + "stop_no": "20557", + "xcode": "126.960921", + "stop_type": "마을버스", + "node_id": "119900040", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "롯데캐슬.샤인", + "ycode": "37.491098", + "stop_no": "20558", + "xcode": "126.971203", + "stop_type": "마을버스", + "node_id": "119900321", + "nxtStn": "삼성래미안.롯데캐슬" + }, + { + "stop_nm": "동작삼일수영장", + "ycode": "37.4873936762", + "stop_no": "20559", + "xcode": "126.9747984396", + "stop_type": "마을버스", + "node_id": "119900039", + "nxtStn": "남성초등학교.사당청소년문화의집" + }, + { + "stop_nm": "삼거리우편물취급소", + "ycode": "37.4841645764", + "stop_no": "20560", + "xcode": "126.9770554226", + "stop_type": "마을버스", + "node_id": "119900038", + "nxtStn": "사당1동주민센터입구" + }, + { + "stop_nm": "사당.인정아파트", + "ycode": "37.4899710309", + "stop_no": "20561", + "xcode": "126.9649635841", + "stop_type": "마을버스", + "node_id": "119900037", + "nxtStn": "사당5치안센터" + }, + { + "stop_nm": "선재유통", + "ycode": "37.4946581742", + "stop_no": "20564", + "xcode": "126.9328021506", + "stop_type": "마을버스", + "node_id": "119900034", + "nxtStn": "빙수골공영주차장" + }, + { + "stop_nm": "중앙대병원", + "ycode": "37.507689887", + "stop_no": "20565", + "xcode": "126.9607327929", + "stop_type": "마을버스", + "node_id": "119900033", + "nxtStn": "중앙대정문" + }, + { + "stop_nm": "밤골터널.상도역롯데캐슬파크엘", + "ycode": "37.501866", + "stop_no": "20567", + "xcode": "126.946013", + "stop_type": "마을버스", + "node_id": "119900031", + "nxtStn": "상도역7호선" + }, + { + "stop_nm": "동작고교", + "ycode": "37.4818218649", + "stop_no": "20568", + "xcode": "126.9664294375", + "stop_type": "마을버스", + "node_id": "119900261", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "대림아파트후문.성남중.고교", + "ycode": "37.505674745", + "stop_no": "20569", + "xcode": "126.9248146272", + "stop_type": "마을버스", + "node_id": "119900030", + "nxtStn": "대방동주민센터" + }, + { + "stop_nm": "구동사무소", + "ycode": "37.4961096391", + "stop_no": "20570", + "xcode": "126.9324298965", + "stop_type": "마을버스", + "node_id": "119900029", + "nxtStn": "빙수골마을공원" + }, + { + "stop_nm": "중대부속초등학교", + "ycode": "37.5053724551", + "stop_no": "20571", + "xcode": "126.9610502124", + "stop_type": "마을버스", + "node_id": "119900028", + "nxtStn": "중앙대병원후문.흑석시장" + }, + { + "stop_nm": "국사봉중학교", + "ycode": "37.4931806671", + "stop_no": "20573", + "xcode": "126.9437280828", + "stop_type": "마을버스", + "node_id": "119900027", + "nxtStn": "방범초소" + }, + { + "stop_nm": "국민은행4번출구", + "ycode": "37.5044810859", + "stop_no": "20574", + "xcode": "126.9377214725", + "stop_type": "마을버스", + "node_id": "119900026", + "nxtStn": "주택가" + }, + { + "stop_nm": "빙수골공영주차장", + "ycode": "37.4952795673", + "stop_no": "20575", + "xcode": "126.932158087", + "stop_type": "마을버스", + "node_id": "119900025", + "nxtStn": "백경세탁소" + }, + { + "stop_nm": "상도역7호선", + "ycode": "37.5027474813", + "stop_no": "20577", + "xcode": "126.9472102115", + "stop_type": "마을버스", + "node_id": "119900023", + "nxtStn": "중대후문입구" + }, + { + "stop_nm": "이수역", + "ycode": "37.484516", + "stop_no": "20578", + "xcode": "126.979985", + "stop_type": "마을버스", + "node_id": "119900022", + "nxtStn": "총신대입구역.남성사계시장입구앞" + }, + { + "stop_nm": "성원샹떼빌앞", + "ycode": "37.4877057013", + "stop_no": "20579", + "xcode": "126.9080420892", + "stop_type": "마을버스", + "node_id": "119900021", + "nxtStn": "신대방1동주민센터" + }, + { + "stop_nm": "대방동주민센터", + "ycode": "37.508177", + "stop_no": "20580", + "xcode": "126.926167", + "stop_type": "마을버스", + "node_id": "119900020", + "nxtStn": "주공아파트.남도학숙" + }, + { + "stop_nm": "빙수골마을공원", + "ycode": "37.4965518983", + "stop_no": "20581", + "xcode": "126.9321116975", + "stop_type": "마을버스", + "node_id": "119900019", + "nxtStn": "로고스교회" + }, + { + "stop_nm": "중앙대병원후문.흑석시장", + "ycode": "37.507138", + "stop_no": "20582", + "xcode": "126.961844", + "stop_type": "마을버스", + "node_id": "119900018", + "nxtStn": "중앙대병원" + }, + { + "stop_nm": "방범초소", + "ycode": "37.4941682832", + "stop_no": "20584", + "xcode": "126.9437420438", + "stop_type": "마을버스", + "node_id": "119900017", + "nxtStn": "경향렉스빌.롯데캐슬비엔" + }, + { + "stop_nm": "주택가", + "ycode": "37.5053600875", + "stop_no": "20585", + "xcode": "126.9368294391", + "stop_type": "마을버스", + "node_id": "119900016", + "nxtStn": "삼성래미안.동작청소년문화의집" + }, + { + "stop_nm": "백경세탁소", + "ycode": "37.4966448723", + "stop_no": "20586", + "xcode": "126.930834755", + "stop_type": "마을버스", + "node_id": "119900015", + "nxtStn": "푸른초장교회" + }, + { + "stop_nm": "중앙대중문", + "ycode": "37.5067385205", + "stop_no": "20587", + "xcode": "126.95728804", + "stop_type": "마을버스", + "node_id": "119900014", + "nxtStn": "중앙대후문" + }, + { + "stop_nm": "중대후문입구", + "ycode": "37.5043455055", + "stop_no": "20588", + "xcode": "126.9501363221", + "stop_type": "마을버스", + "node_id": "119900013", + "nxtStn": "중앙대후문" + }, + { + "stop_nm": "신대방1동주민센터", + "ycode": "37.487040971", + "stop_no": "20589", + "xcode": "126.9095785564", + "stop_type": "마을버스", + "node_id": "119900012", + "nxtStn": "신대방역" + }, + { + "stop_nm": "주공아파트.남도학숙", + "ycode": "37.5087023253", + "stop_no": "20590", + "xcode": "126.9289889124", + "stop_type": "마을버스", + "node_id": "119900265", + "nxtStn": "숭의여중.고교" + }, + { + "stop_nm": "상도3동주민센터", + "ycode": "37.4991727218", + "stop_no": "20591", + "xcode": "126.9312735142", + "stop_type": "마을버스", + "node_id": "119900248", + "nxtStn": "현대한의원" + }, + { + "stop_nm": "삼성래미안.동작청소년문화의집", + "ycode": "37.505625", + "stop_no": "20593", + "xcode": "126.934549", + "stop_type": "마을버스", + "node_id": "119900266", + "nxtStn": "사회복지관앞" + }, + { + "stop_nm": "푸른초장교회", + "ycode": "37.4978176529", + "stop_no": "20594", + "xcode": "126.9300612128", + "stop_type": "마을버스", + "node_id": "119900011", + "nxtStn": "7호선신대방삼거리역2번출구.국민은행" + }, + { + "stop_nm": "중앙대후문", + "ycode": "37.50505", + "stop_no": "20595", + "xcode": "126.953542", + "stop_type": "마을버스", + "node_id": "119900010", + "nxtStn": "이화약국" + }, + { + "stop_nm": "이화약국", + "ycode": "37.5049512146", + "stop_no": "20596", + "xcode": "126.950537456", + "stop_type": "마을버스", + "node_id": "119900009", + "nxtStn": "상도은빛어르신복지관" + }, + { + "stop_nm": "숭의여중.고교", + "ycode": "37.5079144369", + "stop_no": "20598", + "xcode": "126.9299522538", + "stop_type": "마을버스", + "node_id": "119900008", + "nxtStn": "남부교회" + }, + { + "stop_nm": "현대한의원", + "ycode": "37.5001592705", + "stop_no": "20599", + "xcode": "126.9325619694", + "stop_type": "마을버스", + "node_id": "119900007", + "nxtStn": "동광교회" + }, + { + "stop_nm": "사당문화복지관", + "ycode": "37.485346", + "stop_no": "20600", + "xcode": "126.969576", + "stop_type": "마을버스", + "node_id": "119900006", + "nxtStn": "남성역.남성역골목시장" + }, + { + "stop_nm": "효사정앞", + "ycode": "37.5115070338", + "stop_no": "20659", + "xcode": "126.9608619342", + "stop_type": "일반차로", + "node_id": "119000199", + "nxtStn": "흑석역.명수현대아파트" + }, + { + "stop_nm": "효사정앞", + "ycode": "37.5115368204", + "stop_no": "20660", + "xcode": "126.9613179097", + "stop_type": "가로변전일", + "node_id": "119000200", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "사회복지관앞", + "ycode": "37.506067189", + "stop_no": "20673", + "xcode": "126.9330780951", + "stop_type": "마을버스", + "node_id": "119900005", + "nxtStn": "대방목욕탕" + }, + { + "stop_nm": "7호선신대방삼거리역2번출구.국민은행", + "ycode": "37.498966", + "stop_no": "20674", + "xcode": "126.928419", + "stop_type": "마을버스", + "node_id": "119900004", + "nxtStn": "상도3동주민센터" + }, + { + "stop_nm": "대림프라자.사당3동주민센터", + "ycode": "37.483807", + "stop_no": "20675", + "xcode": "126.974379", + "stop_type": "마을버스", + "node_id": "119900003", + "nxtStn": "종점" + }, + { + "stop_nm": "상도은빛어르신복지관.터널경로당", + "ycode": "37.5065716922", + "stop_no": "20676", + "xcode": "126.9512512508", + "stop_type": "마을버스", + "node_id": "119900002", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "동광교회", + "ycode": "37.5015543584", + "stop_no": "20681", + "xcode": "126.9344857415", + "stop_type": "마을버스", + "node_id": "119900249", + "nxtStn": "동작경희병원" + }, + { + "stop_nm": "남성역.남성역골목시장", + "ycode": "37.484187", + "stop_no": "20682", + "xcode": "126.972224", + "stop_type": "마을버스", + "node_id": "119900001", + "nxtStn": "사당시장" + }, + { + "stop_nm": "대방목욕탕", + "ycode": "37.5071048664", + "stop_no": "20684", + "xcode": "126.9323905778", + "stop_type": "마을버스", + "node_id": "119900206", + "nxtStn": "남부교회" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.5078829377", + "stop_no": "20686", + "xcode": "126.9515987872", + "stop_type": "마을버스", + "node_id": "119900205", + "nxtStn": "신동아상가" + }, + { + "stop_nm": "갯마을", + "ycode": "37.496232", + "stop_no": "20694", + "xcode": "126.982546", + "stop_type": "마을버스", + "node_id": "119900204", + "nxtStn": "정금마을" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.512052615", + "stop_no": "20695", + "xcode": "126.9320467559", + "stop_type": "마을버스", + "node_id": "119900203", + "nxtStn": "KT동작지사" + }, + { + "stop_nm": "경문고등학교", + "ycode": "37.49018", + "stop_no": "20697", + "xcode": "126.982453", + "stop_type": "마을버스", + "node_id": "119900202", + "nxtStn": "총신대역" + }, + { + "stop_nm": "삼거리우편물취급소", + "ycode": "37.4842177829", + "stop_no": "20698", + "xcode": "126.9772691231", + "stop_type": "마을버스", + "node_id": "119900201", + "nxtStn": "남성초등학교.사당청소년문화의집" + }, + { + "stop_nm": "밤골.상도역롯데캐슬파크엘", + "ycode": "37.5021520208", + "stop_no": "20699", + "xcode": "126.9455943644", + "stop_type": "마을버스", + "node_id": "119900309", + "nxtStn": "동원베네스트" + }, + { + "stop_nm": "남부교회", + "ycode": "37.5089709879", + "stop_no": "20700", + "xcode": "126.9322870912", + "stop_type": "마을버스", + "node_id": "119900200", + "nxtStn": "현대2차아파트후문" + }, + { + "stop_nm": "정금마을", + "ycode": "37.494339", + "stop_no": "20701", + "xcode": "126.982565", + "stop_type": "마을버스", + "node_id": "119900199", + "nxtStn": "경문고등학교" + }, + { + "stop_nm": "동작고등학교", + "ycode": "37.4815722629", + "stop_no": "20702", + "xcode": "126.9664442487", + "stop_type": "마을버스", + "node_id": "119900198", + "nxtStn": "사당솔밭도서관" + }, + { + "stop_nm": "KT동작지사", + "ycode": "37.5121801399", + "stop_no": "20703", + "xcode": "126.9344730609", + "stop_type": "마을버스", + "node_id": "119900197", + "nxtStn": "경성의원.새마을금고앞" + }, + { + "stop_nm": "7호선장승배기역2번출구", + "ycode": "37.5039320639", + "stop_no": "20704", + "xcode": "126.9389672411", + "stop_type": "마을버스", + "node_id": "119900246", + "nxtStn": "상도2동주민센터" + }, + { + "stop_nm": "총신대역", + "ycode": "37.487354", + "stop_no": "20705", + "xcode": "126.982049", + "stop_type": "마을버스", + "node_id": "119900196", + "nxtStn": "이수역" + }, + { + "stop_nm": "남성초등학교.사당청소년문화의집", + "ycode": "37.4861375742", + "stop_no": "20706", + "xcode": "126.9749763981", + "stop_type": "마을버스", + "node_id": "119900195", + "nxtStn": "삼일공원" + }, + { + "stop_nm": "동원베네스트", + "ycode": "37.5034539195", + "stop_no": "20725", + "xcode": "126.9451749249", + "stop_type": "마을버스", + "node_id": "119900194", + "nxtStn": "부강탕" + }, + { + "stop_nm": "신동아정문", + "ycode": "37.5101499659", + "stop_no": "20726", + "xcode": "126.9512523172", + "stop_type": "마을버스", + "node_id": "119900193", + "nxtStn": "극동아파트앞" + }, + { + "stop_nm": "사당솔밭도서관", + "ycode": "37.4834269187", + "stop_no": "20727", + "xcode": "126.9670879553", + "stop_type": "마을버스", + "node_id": "119900192", + "nxtStn": "삼거리" + }, + { + "stop_nm": "해태타워앞", + "ycode": "37.4910939039", + "stop_no": "20728", + "xcode": "126.9246607439", + "stop_type": "마을버스", + "node_id": "119900191", + "nxtStn": "전문건설회관.보라매병원" + }, + { + "stop_nm": "경성의원.새마을금고앞", + "ycode": "37.5126188873", + "stop_no": "20729", + "xcode": "126.935954556", + "stop_type": "마을버스", + "node_id": "119900190", + "nxtStn": "노량진수산시장.CTS기독교TV" + }, + { + "stop_nm": "상도2동주민센터", + "ycode": "37.5050526535", + "stop_no": "20730", + "xcode": "126.9417827452", + "stop_type": "마을버스", + "node_id": "119900189", + "nxtStn": "도시가스.두산아파트" + }, + { + "stop_nm": "상도은빛어르신복지관", + "ycode": "37.5063885967", + "stop_no": "20731", + "xcode": "126.9505398317", + "stop_type": "마을버스", + "node_id": "119900188", + "nxtStn": "상도터널상도동" + }, + { + "stop_nm": "삼일공원", + "ycode": "37.4869726909", + "stop_no": "20732", + "xcode": "126.9740160547", + "stop_type": "마을버스", + "node_id": "119900187", + "nxtStn": "대림아파트후문.래미안로이파크" + }, + { + "stop_nm": "부강탕", + "ycode": "37.5043671116", + "stop_no": "20740", + "xcode": "126.9459908973", + "stop_type": "마을버스", + "node_id": "119900247", + "nxtStn": "상도브라운스톤" + }, + { + "stop_nm": "대방역1번출구", + "ycode": "37.5130699136", + "stop_no": "20741", + "xcode": "126.9274282269", + "stop_type": "마을버스", + "node_id": "119900186", + "nxtStn": "대방역" + }, + { + "stop_nm": "극동아파트앞", + "ycode": "37.5110727392", + "stop_no": "20745", + "xcode": "126.951363704", + "stop_type": "마을버스", + "node_id": "119900185", + "nxtStn": "노들역5번출구" + }, + { + "stop_nm": "이수역", + "ycode": "37.486574", + "stop_no": "20746", + "xcode": "126.982089", + "stop_type": "마을버스", + "node_id": "119900184", + "nxtStn": "삼거리우편물취급소" + }, + { + "stop_nm": "삼거리", + "ycode": "37.4855349747", + "stop_no": "20747", + "xcode": "126.9684496405", + "stop_type": "마을버스", + "node_id": "119900183", + "nxtStn": "사당문화복지관" + }, + { + "stop_nm": "전문건설회관.보라매병원", + "ycode": "37.4923592428", + "stop_no": "20748", + "xcode": "126.9249580304", + "stop_type": "마을버스", + "node_id": "119900272", + "nxtStn": "삼성아파트" + }, + { + "stop_nm": "대림아파트후문", + "ycode": "37.4884618946", + "stop_no": "20751", + "xcode": "126.9725906795", + "stop_type": "마을버스", + "node_id": "119900182", + "nxtStn": "롯데캐슬" + }, + { + "stop_nm": "상도브라운스톤", + "ycode": "37.505286117", + "stop_no": "20756", + "xcode": "126.9438049608", + "stop_type": "마을버스", + "node_id": "119900181", + "nxtStn": "동작문화복지센터.동작보건소" + }, + { + "stop_nm": "흑석동", + "ycode": "37.5076760417", + "stop_no": "20782", + "xcode": "126.9654484836", + "stop_type": "가로변시간", + "node_id": "119000279", + "nxtStn": "효사정앞" + }, + { + "stop_nm": "흑석역.명수현대아파트", + "ycode": "37.5074560685", + "stop_no": "20783", + "xcode": "126.965093411", + "stop_type": "가로변시간", + "node_id": "119000280", + "nxtStn": "갯마을앞" + }, + { + "stop_nm": "노들역5번출구", + "ycode": "37.5122904513", + "stop_no": "20787", + "xcode": "126.9521592788", + "stop_type": "마을버스", + "node_id": "119900254", + "nxtStn": "노들역" + }, + { + "stop_nm": "대림아파트", + "ycode": "37.5051800181", + "stop_no": "20789", + "xcode": "126.9466710231", + "stop_type": "마을버스", + "node_id": "119900180", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "상도역.하나은행", + "ycode": "37.5038198475", + "stop_no": "20790", + "xcode": "126.9473327434", + "stop_type": "마을버스", + "node_id": "119900244", + "nxtStn": "동작문화복지센터.동작보건소" + }, + { + "stop_nm": "봉천고개관악현대아파트", + "ycode": "37.4921183007", + "stop_no": "20791", + "xcode": "126.9566324017", + "stop_type": "마을버스", + "node_id": "119900179", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "동작삼일수영장", + "ycode": "37.4871765076", + "stop_no": "20792", + "xcode": "126.9747872044", + "stop_type": "마을버스", + "node_id": "119900178", + "nxtStn": "우성201동.극동112동" + }, + { + "stop_nm": "동작고교.사당5동주민센터", + "ycode": "37.4850994802", + "stop_no": "20794", + "xcode": "126.9674875213", + "stop_type": "마을버스", + "node_id": "119900177", + "nxtStn": "삼호APT.오네뜨아파트" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.506971", + "stop_no": "20799", + "xcode": "126.948004", + "stop_type": "마을버스", + "node_id": "119900175", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "우성201동.극동112동", + "ycode": "37.4881706827", + "stop_no": "20801", + "xcode": "126.9760206128", + "stop_type": "마을버스", + "node_id": "119900174", + "nxtStn": "시장입구" + }, + { + "stop_nm": "삼호APT.오네뜨아파트", + "ycode": "37.4865452277", + "stop_no": "20802", + "xcode": "126.9656301015", + "stop_type": "마을버스", + "node_id": "119900173", + "nxtStn": "신남성초교입구" + }, + { + "stop_nm": "상도감리교회", + "ycode": "37.5054913714", + "stop_no": "20803", + "xcode": "126.9415426118", + "stop_type": "마을버스", + "node_id": "119900172", + "nxtStn": "새소망교회" + }, + { + "stop_nm": "남부교회", + "ycode": "37.5091952385", + "stop_no": "20804", + "xcode": "126.9320719695", + "stop_type": "마을버스", + "node_id": "119900171", + "nxtStn": "숭의여중고교.공군항공안전단" + }, + { + "stop_nm": "도시가스.두산아파트", + "ycode": "37.505053155", + "stop_no": "20805", + "xcode": "126.9447020905", + "stop_type": "마을버스", + "node_id": "119900170", + "nxtStn": "상도노빌리티" + }, + { + "stop_nm": "핸드픽트호텔", + "ycode": "37.501295738", + "stop_no": "20806", + "xcode": "126.9334329321", + "stop_type": "일반차로", + "node_id": "119000312", + "nxtStn": "동작문화복지센터.동작보건소" + }, + { + "stop_nm": "핸드픽트호텔", + "ycode": "37.501611", + "stop_no": "20807", + "xcode": "126.93353", + "stop_type": "일반차로", + "node_id": "119000313", + "nxtStn": "7호선신대방삼거리역4번출구" + }, + { + "stop_nm": "7호선신대방삼거리역4번출구", + "ycode": "37.4998232995", + "stop_no": "20808", + "xcode": "126.9267443461", + "stop_type": "마을버스", + "node_id": "119900169", + "nxtStn": "서울공업고등학교" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.5083531944", + "stop_no": "20809", + "xcode": "126.9471191662", + "stop_type": "마을버스", + "node_id": "119900168", + "nxtStn": "강남교회.오거리" + }, + { + "stop_nm": "숭실대입구역2번출구", + "ycode": "37.496203", + "stop_no": "20810", + "xcode": "126.953556", + "stop_type": "마을버스", + "node_id": "119900253", + "nxtStn": "봉천고개현대아파트" + }, + { + "stop_nm": "시장입구", + "ycode": "37.4894721027", + "stop_no": "20811", + "xcode": "126.977157838", + "stop_type": "마을버스", + "node_id": "119900167", + "nxtStn": "신동아아파트" + }, + { + "stop_nm": "신남성초교입구", + "ycode": "37.4879028591", + "stop_no": "20812", + "xcode": "126.9645031705", + "stop_type": "마을버스", + "node_id": "119900262", + "nxtStn": "LG아파트상가" + }, + { + "stop_nm": "새소망교회", + "ycode": "37.5063972057", + "stop_no": "20813", + "xcode": "126.9420033988", + "stop_type": "마을버스", + "node_id": "119900166", + "nxtStn": "신동아아파트701동앞" + }, + { + "stop_nm": "대방목욕탕", + "ycode": "37.506937", + "stop_no": "20814", + "xcode": "126.932243", + "stop_type": "마을버스", + "node_id": "119900165", + "nxtStn": "사회복지관앞" + }, + { + "stop_nm": "본동초등학교", + "ycode": "37.5107266973", + "stop_no": "20815", + "xcode": "126.9535550176", + "stop_type": "마을버스", + "node_id": "119900164", + "nxtStn": "종점" + }, + { + "stop_nm": "코오롱하늘채아파트", + "ycode": "37.4991700746", + "stop_no": "20818", + "xcode": "126.9240090902", + "stop_type": "마을버스", + "node_id": "119900163", + "nxtStn": "보라매어린이집.문창중학교" + }, + { + "stop_nm": "강남교회.오거리", + "ycode": "37.5102778468", + "stop_no": "20819", + "xcode": "126.9449289949", + "stop_type": "마을버스", + "node_id": "119900162", + "nxtStn": "노량진한국법학교육원" + }, + { + "stop_nm": "봉천고개현대아파트", + "ycode": "37.491908", + "stop_no": "20820", + "xcode": "126.956251", + "stop_type": "마을버스", + "node_id": "119900161", + "nxtStn": "봉현초등학교" + }, + { + "stop_nm": "신동아아파트", + "ycode": "37.4900072452", + "stop_no": "20822", + "xcode": "126.9765786726", + "stop_type": "마을버스", + "node_id": "119900160", + "nxtStn": "테니스장.우성아파트304동" + }, + { + "stop_nm": "LG아파트상가", + "ycode": "37.4886009282", + "stop_no": "20823", + "xcode": "126.963560848", + "stop_type": "마을버스", + "node_id": "119900159", + "nxtStn": "자이아파트정문앞" + }, + { + "stop_nm": "신동아아파트701동앞", + "ycode": "37.5074809233", + "stop_no": "20824", + "xcode": "126.9432253093", + "stop_type": "마을버스", + "node_id": "119900158", + "nxtStn": "신동아관리사무소" + }, + { + "stop_nm": "사회복지관앞", + "ycode": "37.505902297", + "stop_no": "20825", + "xcode": "126.9330952089", + "stop_type": "마을버스", + "node_id": "119900157", + "nxtStn": "삼성래미안.동작청소년문화의집" + }, + { + "stop_nm": "동작우체국", + "ycode": "37.4978102285", + "stop_no": "20828", + "xcode": "126.9238815363", + "stop_type": "마을버스", + "node_id": "119900155", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "테니스장.우성아파트304동", + "ycode": "37.4906189658", + "stop_no": "20829", + "xcode": "126.9759361455", + "stop_type": "마을버스", + "node_id": "119900259", + "nxtStn": "종점" + }, + { + "stop_nm": "자이아파트정문앞", + "ycode": "37.4893053683", + "stop_no": "20830", + "xcode": "126.9628435447", + "stop_type": "마을버스", + "node_id": "119900154", + "nxtStn": "종점" + }, + { + "stop_nm": "신동아관리사무소", + "ycode": "37.5083076038", + "stop_no": "20832", + "xcode": "126.9440017764", + "stop_type": "마을버스", + "node_id": "119900153", + "nxtStn": "신동아상가" + }, + { + "stop_nm": "삼성래미안.동작청소년문화의집", + "ycode": "37.5055356102", + "stop_no": "20833", + "xcode": "126.9348170675", + "stop_type": "마을버스", + "node_id": "119900152", + "nxtStn": "주택가" + }, + { + "stop_nm": "대방역2번출구앞", + "ycode": "37.5127789562", + "stop_no": "20834", + "xcode": "126.9275880089", + "stop_type": "마을버스", + "node_id": "119900151", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "경성의원.새마을금고앞", + "ycode": "37.5127937149", + "stop_no": "20836", + "xcode": "126.9359804244", + "stop_type": "마을버스", + "node_id": "119900150", + "nxtStn": "KT동작전화국" + }, + { + "stop_nm": "노량진역", + "ycode": "37.5137237868", + "stop_no": "20837", + "xcode": "126.941453612", + "stop_type": "마을버스", + "node_id": "119900149", + "nxtStn": "노량진수산시장.CTS기독교TV" + }, + { + "stop_nm": "신동아상가", + "ycode": "37.5079978025", + "stop_no": "20839", + "xcode": "126.9463253599", + "stop_type": "마을버스", + "node_id": "119900148", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "주택가", + "ycode": "37.5055040763", + "stop_no": "20840", + "xcode": "126.9364798085", + "stop_type": "마을버스", + "node_id": "119900147", + "nxtStn": "장승배기역4번출구" + }, + { + "stop_nm": "예스플러스", + "ycode": "37.5039638554", + "stop_no": "20842", + "xcode": "126.9224942472", + "stop_type": "마을버스", + "node_id": "119900146", + "nxtStn": "대림아파트후문.성남중.고교" + }, + { + "stop_nm": "KT동작전화국", + "ycode": "37.5123694199", + "stop_no": "20843", + "xcode": "126.9345611292", + "stop_type": "마을버스", + "node_id": "119900145", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "9호선노량진역.동작구청", + "ycode": "37.5130148375", + "stop_no": "20844", + "xcode": "126.940088794", + "stop_type": "마을버스", + "node_id": "119900144", + "nxtStn": "장성교회" + }, + { + "stop_nm": "숭실대후문", + "ycode": "37.4950484626", + "stop_no": "20845", + "xcode": "126.9611601225", + "stop_type": "마을버스", + "node_id": "119900143", + "nxtStn": "테니스장앞" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.507372", + "stop_no": "20846", + "xcode": "126.947662", + "stop_type": "마을버스", + "node_id": "119900142", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5044197304", + "stop_no": "20847", + "xcode": "126.9375688275", + "stop_type": "마을버스", + "node_id": "119900141", + "nxtStn": "7호선장승배기역.상도2치안센터" + }, + { + "stop_nm": "테니스장앞", + "ycode": "37.4981116101", + "stop_no": "20848", + "xcode": "126.9593670537", + "stop_type": "마을버스", + "node_id": "119900140", + "nxtStn": "달마사" + }, + { + "stop_nm": "동작대교(가상)", + "ycode": "37.5045197145", + "stop_no": "20849", + "xcode": "126.9796763448", + "stop_type": "가상정류장", + "node_id": "119000305", + "nxtStn": "반포대교(가상)" + }, + { + "stop_nm": "숭의여중고교.공군항공안전단", + "ycode": "37.5073826349", + "stop_no": "20850", + "xcode": "126.9296959851", + "stop_type": "마을버스", + "node_id": "119900139", + "nxtStn": "대방동주공아파트" + }, + { + "stop_nm": "7호선장승배기역5번출구", + "ycode": "37.5050962917", + "stop_no": "20851", + "xcode": "126.938975342", + "stop_type": "마을버스", + "node_id": "119900138", + "nxtStn": "명창빌딩" + }, + { + "stop_nm": "명창빌딩", + "ycode": "37.504496659", + "stop_no": "20854", + "xcode": "126.936506677", + "stop_type": "마을버스", + "node_id": "119900136", + "nxtStn": "강현중학교.동작청소년문화의집" + }, + { + "stop_nm": "화성목욕탕", + "ycode": "37.4997752435", + "stop_no": "20855", + "xcode": "126.9406660106", + "stop_type": "마을버스", + "node_id": "119900135", + "nxtStn": "충남정육점" + }, + { + "stop_nm": "본동시장", + "ycode": "37.5122399144", + "stop_no": "20856", + "xcode": "126.9519737943", + "stop_type": "마을버스", + "node_id": "119900134", + "nxtStn": "극동아파트" + }, + { + "stop_nm": "성원아파트", + "ycode": "37.508821774", + "stop_no": "20857", + "xcode": "126.925418897", + "stop_type": "마을버스", + "node_id": "119900133", + "nxtStn": "공군호텔" + }, + { + "stop_nm": "충남정육점", + "ycode": "37.4991450337", + "stop_no": "20858", + "xcode": "126.9399946942", + "stop_type": "마을버스", + "node_id": "119900132", + "nxtStn": "종점" + }, + { + "stop_nm": "극동아파트", + "ycode": "37.511110522", + "stop_no": "20859", + "xcode": "126.9512098387", + "stop_type": "마을버스", + "node_id": "119900131", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "대방동주민센터", + "ycode": "37.508388", + "stop_no": "20861", + "xcode": "126.926169", + "stop_type": "마을버스", + "node_id": "119900267", + "nxtStn": "대림아파트후문.성남중.고교" + }, + { + "stop_nm": "쌍용아파트", + "ycode": "37.5015039566", + "stop_no": "20862", + "xcode": "126.93298603", + "stop_type": "마을버스", + "node_id": "119900130", + "nxtStn": "성대시장" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.5103454356", + "stop_no": "20864", + "xcode": "126.9510847768", + "stop_type": "마을버스", + "node_id": "119900129", + "nxtStn": "한신아파트" + }, + { + "stop_nm": "대림아파트후문.성남중.고교", + "ycode": "37.5058658913", + "stop_no": "20865", + "xcode": "126.9249920186", + "stop_type": "마을버스", + "node_id": "119900128", + "nxtStn": "대방교회" + }, + { + "stop_nm": "성대시장", + "ycode": "37.500081", + "stop_no": "20866", + "xcode": "126.932299", + "stop_type": "마을버스", + "node_id": "119900127", + "nxtStn": "김한욱치과의원.대륙서점" + }, + { + "stop_nm": "노량진역", + "ycode": "37.5135038929", + "stop_no": "20867", + "xcode": "126.9432478962", + "stop_type": "마을버스", + "node_id": "119900126", + "nxtStn": "노량진신한은행" + }, + { + "stop_nm": "강현중학교.동작청소년문화의집", + "ycode": "37.5030004211", + "stop_no": "20868", + "xcode": "126.9345122587", + "stop_type": "마을버스", + "node_id": "119900125", + "nxtStn": "쌍용아파트" + }, + { + "stop_nm": "한신아파트", + "ycode": "37.5087397453", + "stop_no": "20869", + "xcode": "126.95125889", + "stop_type": "마을버스", + "node_id": "119900124", + "nxtStn": "건영아파트후문" + }, + { + "stop_nm": "대방교회", + "ycode": "37.5039714206", + "stop_no": "20870", + "xcode": "126.9230394173", + "stop_type": "마을버스", + "node_id": "119900123", + "nxtStn": "홍원사" + }, + { + "stop_nm": "계령약국", + "ycode": "37.498978", + "stop_no": "20871", + "xcode": "126.933383", + "stop_type": "마을버스", + "node_id": "119900122", + "nxtStn": "안일약국" + }, + { + "stop_nm": "건영아파트후문", + "ycode": "37.5078063047", + "stop_no": "20872", + "xcode": "126.9515026905", + "stop_type": "마을버스", + "node_id": "119900121", + "nxtStn": "상도은빛어르신복지관.터널경로당" + }, + { + "stop_nm": "홍원사", + "ycode": "37.5039451009", + "stop_no": "20873", + "xcode": "126.9241422416", + "stop_type": "마을버스", + "node_id": "119900268", + "nxtStn": "영동슈퍼" + }, + { + "stop_nm": "강남교회.오거리", + "ycode": "37.5102462423", + "stop_no": "20874", + "xcode": "126.9447876219", + "stop_type": "마을버스", + "node_id": "119900120", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "상도은빛어르신복지관.터널경로당", + "ycode": "37.5065409316", + "stop_no": "20875", + "xcode": "126.950953788", + "stop_type": "마을버스", + "node_id": "119900245", + "nxtStn": "상도터널상도동" + }, + { + "stop_nm": "영동슈퍼", + "ycode": "37.5028691648", + "stop_no": "20876", + "xcode": "126.9241105295", + "stop_type": "마을버스", + "node_id": "119900119", + "nxtStn": "범한택시" + }, + { + "stop_nm": "사거리", + "ycode": "37.496036362", + "stop_no": "20877", + "xcode": "126.9367943174", + "stop_type": "마을버스", + "node_id": "119900118", + "nxtStn": "제일성민교회" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.5083026689", + "stop_no": "20878", + "xcode": "126.9469766782", + "stop_type": "마을버스", + "node_id": "119900117", + "nxtStn": "신동아리버파크" + }, + { + "stop_nm": "범한택시", + "ycode": "37.500061271", + "stop_no": "20880", + "xcode": "126.9240183662", + "stop_type": "마을버스", + "node_id": "119900116", + "nxtStn": "대림초등학교" + }, + { + "stop_nm": "제일성민교회", + "ycode": "37.495391458", + "stop_no": "20881", + "xcode": "126.9373309289", + "stop_type": "마을버스", + "node_id": "119900115", + "nxtStn": "동작하이슈퍼" + }, + { + "stop_nm": "신동아리버파크", + "ycode": "37.5066765081", + "stop_no": "20882", + "xcode": "126.9477107912", + "stop_type": "마을버스", + "node_id": "119900114", + "nxtStn": "상도노빌리티" + }, + { + "stop_nm": "안일약국", + "ycode": "37.4977616565", + "stop_no": "20883", + "xcode": "126.934555783", + "stop_type": "마을버스", + "node_id": "119900113", + "nxtStn": "양녕공영주차장" + }, + { + "stop_nm": "상도역7호선", + "ycode": "37.5029069167", + "stop_no": "20884", + "xcode": "126.9470766344", + "stop_type": "마을버스", + "node_id": "119900112", + "nxtStn": "밤골.상도역롯데캐슬파크엘" + }, + { + "stop_nm": "달마사", + "ycode": "37.499535", + "stop_no": "20885", + "xcode": "126.960694", + "stop_type": "마을버스", + "node_id": "119900298", + "nxtStn": "서달산약수터" + }, + { + "stop_nm": "동작하이슈퍼", + "ycode": "37.4949423396", + "stop_no": "20886", + "xcode": "126.93663917", + "stop_type": "마을버스", + "node_id": "119900111", + "nxtStn": "종점" + }, + { + "stop_nm": "대림아파트", + "ycode": "37.5053838502", + "stop_no": "20887", + "xcode": "126.9466416761", + "stop_type": "마을버스", + "node_id": "119900110", + "nxtStn": "상도역" + }, + { + "stop_nm": "밤골.상도역롯데캐슬파크엘", + "ycode": "37.50196", + "stop_no": "20888", + "xcode": "126.945916", + "stop_type": "마을버스", + "node_id": "119900109", + "nxtStn": "약수맨션.약수당약국" + }, + { + "stop_nm": "한강대교(가상)", + "ycode": "37.5137368213", + "stop_no": "20889", + "xcode": "126.9567810087", + "stop_type": "가상정류장", + "node_id": "119000307", + "nxtStn": "동작대교(가상)" + }, + { + "stop_nm": "상도역", + "ycode": "37.5035799614", + "stop_no": "20890", + "xcode": "126.9489458159", + "stop_type": "마을버스", + "node_id": "119900108", + "nxtStn": "중대후문입구" + }, + { + "stop_nm": "약수맨션.약수당약국", + "ycode": "37.498251", + "stop_no": "20891", + "xcode": "126.943517", + "stop_type": "마을버스", + "node_id": "119900107", + "nxtStn": "현진빌라.고마트" + }, + { + "stop_nm": "현진빌라.고마트", + "ycode": "37.4972109542", + "stop_no": "20892", + "xcode": "126.9430023671", + "stop_type": "마을버스", + "node_id": "119900106", + "nxtStn": "경향렉스빌.롯데캐슬비엔" + }, + { + "stop_nm": "중앙대후문", + "ycode": "37.5050129803", + "stop_no": "20893", + "xcode": "126.9539815854", + "stop_type": "마을버스", + "node_id": "119900105", + "nxtStn": "중앙대중문" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.5074478171", + "stop_no": "20894", + "xcode": "126.9476344677", + "stop_type": "마을버스", + "node_id": "119900104", + "nxtStn": "신동아상가" + }, + { + "stop_nm": "중앙대중문", + "ycode": "37.5064893501", + "stop_no": "20896", + "xcode": "126.9573559193", + "stop_type": "마을버스", + "node_id": "119900255", + "nxtStn": "중앙대정문" + }, + { + "stop_nm": "신동아상가", + "ycode": "37.50813015", + "stop_no": "20897", + "xcode": "126.9460741526", + "stop_type": "마을버스", + "node_id": "119900103", + "nxtStn": "신동아관리사무소" + }, + { + "stop_nm": "중앙대정문", + "ycode": "37.5067437707", + "stop_no": "20898", + "xcode": "126.958223341", + "stop_type": "마을버스", + "node_id": "119900101", + "nxtStn": "중앙대병원" + }, + { + "stop_nm": "신동아관리사무소", + "ycode": "37.5084979923", + "stop_no": "20899", + "xcode": "126.9445445828", + "stop_type": "마을버스", + "node_id": "119900102", + "nxtStn": "신동아아파트701동앞" + }, + { + "stop_nm": "여의상류(가상)", + "ycode": "37.5165621515", + "stop_no": "20900", + "xcode": "126.9406099705", + "stop_type": "가상정류장", + "node_id": "119000309", + "nxtStn": "한강대교남단(가상)" + }, + { + "stop_nm": "중앙대병원", + "ycode": "37.5075405164", + "stop_no": "20901", + "xcode": "126.9613764833", + "stop_type": "마을버스", + "node_id": "119900100", + "nxtStn": "중앙대병원후문.흑석시장" + }, + { + "stop_nm": "신동아아파트701동앞", + "ycode": "37.5075024276", + "stop_no": "20902", + "xcode": "126.9429719204", + "stop_type": "마을버스", + "node_id": "119900099", + "nxtStn": "새소망교회" + }, + { + "stop_nm": "보라매어린이집.문창중학교", + "ycode": "37.497719", + "stop_no": "20903", + "xcode": "126.923186", + "stop_type": "마을버스", + "node_id": "119900098", + "nxtStn": "동작우체국" + }, + { + "stop_nm": "중앙대병원후문.흑석시장", + "ycode": "37.5064627639", + "stop_no": "20904", + "xcode": "126.9612695829", + "stop_type": "마을버스", + "node_id": "119900097", + "nxtStn": "중앙대부속초등학교.롯데캐슬에듀포레" + }, + { + "stop_nm": "여의교(가상)", + "ycode": "37.5148027152", + "stop_no": "20905", + "xcode": "126.927668312", + "stop_type": "가상정류장", + "node_id": "119000311", + "nxtStn": "한강대교북단.LG유플러스" + }, + { + "stop_nm": "새소망교회", + "ycode": "37.5062095609", + "stop_no": "20906", + "xcode": "126.9415658051", + "stop_type": "마을버스", + "node_id": "119900096", + "nxtStn": "상도감리교회.보건소" + }, + { + "stop_nm": "동작우체국", + "ycode": "37.4977295307", + "stop_no": "20907", + "xcode": "126.9245070504", + "stop_type": "마을버스", + "node_id": "119900095", + "nxtStn": "신대방삼거리역.성대시장" + }, + { + "stop_nm": "중앙대부속초등학교.롯데캐슬에듀포레", + "ycode": "37.504918", + "stop_no": "20908", + "xcode": "126.960786", + "stop_type": "마을버스", + "node_id": "119900094", + "nxtStn": "은로초등학교" + }, + { + "stop_nm": "신대방삼거리역.성대시장", + "ycode": "37.4982254734", + "stop_no": "20909", + "xcode": "126.9279311823", + "stop_type": "마을버스", + "node_id": "119900093", + "nxtStn": "보라매병원입구" + }, + { + "stop_nm": "은로초등학교", + "ycode": "37.5032573835", + "stop_no": "20910", + "xcode": "126.9607814881", + "stop_type": "마을버스", + "node_id": "119900092", + "nxtStn": "흑석자이.동부센트레빌" + }, + { + "stop_nm": "신대방1동경남아파트", + "ycode": "37.489931954", + "stop_no": "20911", + "xcode": "126.9075610052", + "stop_type": "마을버스", + "node_id": "118900115", + "nxtStn": "신대방우성아파트앞" + }, + { + "stop_nm": "중앙빌리지.동부센트레빌", + "ycode": "37.502218", + "stop_no": "20912", + "xcode": "126.96033", + "stop_type": "마을버스", + "node_id": "119900091", + "nxtStn": "유앤미아파트" + }, + { + "stop_nm": "부강탕", + "ycode": "37.5045473263", + "stop_no": "20913", + "xcode": "126.9459783256", + "stop_type": "마을버스", + "node_id": "119900090", + "nxtStn": "동원베네스트" + }, + { + "stop_nm": "유앤미아파트", + "ycode": "37.500922", + "stop_no": "20914", + "xcode": "126.960133", + "stop_type": "마을버스", + "node_id": "119900089", + "nxtStn": "동양아파트" + }, + { + "stop_nm": "동원베네스트", + "ycode": "37.5032059252", + "stop_no": "20915", + "xcode": "126.9447645304", + "stop_type": "마을버스", + "node_id": "119900088", + "nxtStn": "밤골.상도역롯데캐슬파크엘" + }, + { + "stop_nm": "전문건설회관.보라매병원", + "ycode": "37.492411", + "stop_no": "20916", + "xcode": "126.924779", + "stop_type": "마을버스", + "node_id": "119900087", + "nxtStn": "아카데미타워" + }, + { + "stop_nm": "동양아파트", + "ycode": "37.499561", + "stop_no": "20917", + "xcode": "126.959859", + "stop_type": "마을버스", + "node_id": "119900086", + "nxtStn": "삼성래미안아파트" + }, + { + "stop_nm": "밤골.상도역롯데캐슬파크엘", + "ycode": "37.5019654526", + "stop_no": "20918", + "xcode": "126.9455074093", + "stop_type": "마을버스", + "node_id": "119900085", + "nxtStn": "약수맨션.약수당약국" + }, + { + "stop_nm": "아카데미타워", + "ycode": "37.4912126935", + "stop_no": "20919", + "xcode": "126.9244163541", + "stop_type": "마을버스", + "node_id": "119900084", + "nxtStn": "신한은행앞.롯데백화점" + }, + { + "stop_nm": "서울교(가상)", + "ycode": "37.5198553983", + "stop_no": "20920", + "xcode": "126.9151853112", + "stop_type": "가상정류장", + "node_id": "118000582", + "nxtStn": "염창역.서울도시가스" + }, + { + "stop_nm": "신대방역", + "ycode": "37.487502", + "stop_no": "20921", + "xcode": "126.913014", + "stop_type": "마을버스", + "node_id": "119900242", + "nxtStn": "신대방1동주민센터" + }, + { + "stop_nm": "빌라삼거리.영도교회.약수터", + "ycode": "37.4953540701", + "stop_no": "20922", + "xcode": "126.9436054409", + "stop_type": "마을버스", + "node_id": "119900241", + "nxtStn": "방범초소" + }, + { + "stop_nm": "신대방1동주민센터", + "ycode": "37.4872123087", + "stop_no": "20923", + "xcode": "126.9097457115", + "stop_type": "마을버스", + "node_id": "119900271", + "nxtStn": "신대방경남아파트" + }, + { + "stop_nm": "방범초소", + "ycode": "37.4943394383", + "stop_no": "20924", + "xcode": "126.9436276916", + "stop_type": "마을버스", + "node_id": "119900240", + "nxtStn": "국사봉중학교" + }, + { + "stop_nm": "신대방현대아파트", + "ycode": "37.4952280357", + "stop_no": "20925", + "xcode": "126.9115433628", + "stop_type": "마을버스", + "node_id": "119900327", + "nxtStn": "교수아파트" + }, + { + "stop_nm": "국사봉중학교", + "ycode": "37.4933842425", + "stop_no": "20926", + "xcode": "126.9435729947", + "stop_type": "마을버스", + "node_id": "119900238", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "신대방우성아파트앞", + "ycode": "37.4933430025", + "stop_no": "20927", + "xcode": "126.9103818246", + "stop_type": "마을버스", + "node_id": "119900237", + "nxtStn": "신대방현대아파트" + }, + { + "stop_nm": "교수아파트", + "ycode": "37.496296383", + "stop_no": "20928", + "xcode": "126.913422836", + "stop_type": "마을버스", + "node_id": "119900236", + "nxtStn": "대방중학교" + }, + { + "stop_nm": "보라매공원입구", + "ycode": "37.495679", + "stop_no": "20929", + "xcode": "126.917914", + "stop_type": "마을버스", + "node_id": "119900235", + "nxtStn": "보라매공원" + }, + { + "stop_nm": "보라매공원", + "ycode": "37.494769", + "stop_no": "20930", + "xcode": "126.918239", + "stop_type": "마을버스", + "node_id": "119900234", + "nxtStn": "동작구민체육센터.기상청" + }, + { + "stop_nm": "삼일초등학교앞", + "ycode": "37.4881057301", + "stop_no": "20931", + "xcode": "126.9756632895", + "stop_type": "마을버스", + "node_id": "119900233", + "nxtStn": "동작삼일수영장" + }, + { + "stop_nm": "동작경희병원", + "ycode": "37.5028527874", + "stop_no": "20932", + "xcode": "126.9360217143", + "stop_type": "마을버스", + "node_id": "119900232", + "nxtStn": "7호선장승배기역2번출구" + }, + { + "stop_nm": "신동아상가", + "ycode": "37.5087596306", + "stop_no": "20933", + "xcode": "126.9514070573", + "stop_type": "마을버스", + "node_id": "119900231", + "nxtStn": "신동아정문" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.512343", + "stop_no": "20934", + "xcode": "126.931932", + "stop_type": "마을버스", + "node_id": "119900230", + "nxtStn": "현대2차아파트후문" + }, + { + "stop_nm": "서달산약수터", + "ycode": "37.4998489184", + "stop_no": "20935", + "xcode": "126.9620217296", + "stop_type": "마을버스", + "node_id": "119900297", + "nxtStn": "청호아파트" + }, + { + "stop_nm": "신대방역", + "ycode": "37.4866047302", + "stop_no": "20936", + "xcode": "126.9130382377", + "stop_type": "일반차로", + "node_id": "120000435", + "nxtStn": "롯데백화점관악점" + }, + { + "stop_nm": "신대방역", + "ycode": "37.486768682", + "stop_no": "20937", + "xcode": "126.9129713295", + "stop_type": "일반차로", + "node_id": "120000427", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "장성교회", + "ycode": "37.507439", + "stop_no": "20938", + "xcode": "126.939904", + "stop_type": "마을버스", + "node_id": "119900229", + "nxtStn": "7호선장승배기역5번출구" + }, + { + "stop_nm": "숭의여중고교.공군항공안전단", + "ycode": "37.5079992556", + "stop_no": "20939", + "xcode": "126.9301467298", + "stop_type": "마을버스", + "node_id": "119900228", + "nxtStn": "대방동주공아파트" + }, + { + "stop_nm": "대방동주공아파트", + "ycode": "37.5090527881", + "stop_no": "20940", + "xcode": "126.9288799898", + "stop_type": "마을버스", + "node_id": "119900269", + "nxtStn": "대방동주민센터" + }, + { + "stop_nm": "노량진신한은행", + "ycode": "37.5121553851", + "stop_no": "20941", + "xcode": "126.9441708438", + "stop_type": "마을버스", + "node_id": "119900227", + "nxtStn": "강남교회.오거리" + }, + { + "stop_nm": "노량진한국법학교육원", + "ycode": "37.512353703", + "stop_no": "20942", + "xcode": "126.9443313266", + "stop_type": "마을버스", + "node_id": "119900226", + "nxtStn": "노량진역" + }, + { + "stop_nm": "7호선신대방삼거리역2번출구.국민은행", + "ycode": "37.498836", + "stop_no": "20943", + "xcode": "126.928523", + "stop_type": "마을버스", + "node_id": "119900225", + "nxtStn": "푸른초장교회" + }, + { + "stop_nm": "푸른초장교회", + "ycode": "37.4977131036", + "stop_no": "20944", + "xcode": "126.9300251189", + "stop_type": "마을버스", + "node_id": "119900224", + "nxtStn": "백경세탁소" + }, + { + "stop_nm": "백경세탁소", + "ycode": "37.4965907359", + "stop_no": "20945", + "xcode": "126.9307149228", + "stop_type": "마을버스", + "node_id": "119900223", + "nxtStn": "빙수골공영주차장" + }, + { + "stop_nm": "빙수골공영주차장", + "ycode": "37.4952993071", + "stop_no": "20946", + "xcode": "126.9320110465", + "stop_type": "마을버스", + "node_id": "119900222", + "nxtStn": "선재유통" + }, + { + "stop_nm": "선재유통", + "ycode": "37.4945545203", + "stop_no": "20947", + "xcode": "126.9327547444", + "stop_type": "마을버스", + "node_id": "119900221", + "nxtStn": "영은교회" + }, + { + "stop_nm": "영은교회", + "ycode": "37.494379503", + "stop_no": "20948", + "xcode": "126.9339921386", + "stop_type": "마을버스", + "node_id": "119900220", + "nxtStn": "갑을명가아파트" + }, + { + "stop_nm": "갑을명가아파트", + "ycode": "37.4936012213", + "stop_no": "20949", + "xcode": "126.9344802493", + "stop_type": "마을버스", + "node_id": "119900219", + "nxtStn": "당곡중.고등학교" + }, + { + "stop_nm": "당곡중.고등학교", + "ycode": "37.4928980204", + "stop_no": "20950", + "xcode": "126.9354998113", + "stop_type": "마을버스", + "node_id": "119900218", + "nxtStn": "사자암" + }, + { + "stop_nm": "사자암", + "ycode": "37.4937167132", + "stop_no": "20951", + "xcode": "126.936404974", + "stop_type": "마을버스", + "node_id": "119900217", + "nxtStn": "동작하이슈퍼" + }, + { + "stop_nm": "동작하이슈퍼", + "ycode": "37.4949180583", + "stop_no": "20952", + "xcode": "126.9367296655", + "stop_type": "마을버스", + "node_id": "119900216", + "nxtStn": "제일성민교회" + }, + { + "stop_nm": "제일성민교회", + "ycode": "37.495337429", + "stop_no": "20953", + "xcode": "126.9374010926", + "stop_type": "마을버스", + "node_id": "119900215", + "nxtStn": "보문사" + }, + { + "stop_nm": "보문사", + "ycode": "37.4961202394", + "stop_no": "20954", + "xcode": "126.938645622", + "stop_type": "마을버스", + "node_id": "119900214", + "nxtStn": "동아아파트" + }, + { + "stop_nm": "동아아파트", + "ycode": "37.4963534961", + "stop_no": "20955", + "xcode": "126.9401507385", + "stop_type": "마을버스", + "node_id": "119900213", + "nxtStn": "행복유치원" + }, + { + "stop_nm": "행복유치원", + "ycode": "37.4957521106", + "stop_no": "20956", + "xcode": "126.9412493715", + "stop_type": "마을버스", + "node_id": "119900212", + "nxtStn": "빌라삼거리.영도교회.약수터" + }, + { + "stop_nm": "동아아파트", + "ycode": "37.4966058593", + "stop_no": "20957", + "xcode": "126.9401307074", + "stop_type": "마을버스", + "node_id": "119900211", + "nxtStn": "보문사" + }, + { + "stop_nm": "보문사", + "ycode": "37.4961868899", + "stop_no": "20958", + "xcode": "126.9385856267", + "stop_type": "마을버스", + "node_id": "119900210", + "nxtStn": "제일성민교회" + }, + { + "stop_nm": "사당1동주민센터입구", + "ycode": "37.484087397", + "stop_no": "20959", + "xcode": "126.9787425623", + "stop_type": "마을버스", + "node_id": "119900209", + "nxtStn": "이수역" + }, + { + "stop_nm": "노들역5번출구앞", + "ycode": "37.512541", + "stop_no": "20960", + "xcode": "126.952533", + "stop_type": "마을버스", + "node_id": "119900208", + "nxtStn": "노들역" + }, + { + "stop_nm": "한강대교남단(가상)", + "ycode": "37.5142155883", + "stop_no": "20962", + "xcode": "126.9554510582", + "stop_type": "가상정류장", + "node_id": "119000300", + "nxtStn": "동작대교(가상)" + }, + { + "stop_nm": "한강대교남단(가상)", + "ycode": "37.5146166269", + "stop_no": "20963", + "xcode": "126.9555809119", + "stop_type": "가상정류장", + "node_id": "119000299", + "nxtStn": "여의2교(가상)" + }, + { + "stop_nm": "동작대교남단(가상)", + "ycode": "37.505723652", + "stop_no": "20964", + "xcode": "126.973585394", + "stop_type": "가상정류장", + "node_id": "119000298", + "nxtStn": "이수화학" + }, + { + "stop_nm": "동작대교남단(가상)", + "ycode": "37.5061409451", + "stop_no": "20965", + "xcode": "126.9739596436", + "stop_type": "가상정류장", + "node_id": "119000297", + "nxtStn": "한강대교(가상)" + }, + { + "stop_nm": "청호아파트", + "ycode": "37.500751", + "stop_no": "20966", + "xcode": "126.963789", + "stop_type": "마을버스", + "node_id": "119900296", + "nxtStn": "푸르지오후문" + }, + { + "stop_nm": "푸르지오후문", + "ycode": "37.501598", + "stop_no": "20967", + "xcode": "126.964318", + "stop_type": "마을버스", + "node_id": "119900295", + "nxtStn": "푸르지오상가" + }, + { + "stop_nm": "푸르지오상가", + "ycode": "37.503417", + "stop_no": "20968", + "xcode": "126.965036", + "stop_type": "마을버스", + "node_id": "119900294", + "nxtStn": "흑석한강푸르지오" + }, + { + "stop_nm": "흑석한강푸르지오", + "ycode": "37.504296", + "stop_no": "20969", + "xcode": "126.965352", + "stop_type": "마을버스", + "node_id": "119900293", + "nxtStn": "흑석동주민센터" + }, + { + "stop_nm": "흑석동주민센터", + "ycode": "37.5058669213", + "stop_no": "20970", + "xcode": "126.9664605238", + "stop_type": "마을버스", + "node_id": "119900292", + "nxtStn": "흑석역.흑석동빗물펌프장" + }, + { + "stop_nm": "대방중학교", + "ycode": "37.495492", + "stop_no": "20971", + "xcode": "126.914493", + "stop_type": "마을버스", + "node_id": "119900299", + "nxtStn": "수도여고" + }, + { + "stop_nm": "상도감리교회.보건소", + "ycode": "37.5054948614", + "stop_no": "20972", + "xcode": "126.9413118652", + "stop_type": "마을버스", + "node_id": "119900291", + "nxtStn": "상도2동주민센터" + }, + { + "stop_nm": "수도여고", + "ycode": "37.4935547507", + "stop_no": "20973", + "xcode": "126.9152513015", + "stop_type": "마을버스", + "node_id": "119900300", + "nxtStn": "동작구민체육센터.기상청" + }, + { + "stop_nm": "동작구민체육센터.기상청", + "ycode": "37.4942400994", + "stop_no": "20974", + "xcode": "126.9172420906", + "stop_type": "마을버스", + "node_id": "119900301", + "nxtStn": "보라매공원" + }, + { + "stop_nm": "동작구민체육센터.기상청", + "ycode": "37.4944139686", + "stop_no": "20975", + "xcode": "126.9171796976", + "stop_type": "마을버스", + "node_id": "119900302", + "nxtStn": "수도여고" + }, + { + "stop_nm": "수도여고", + "ycode": "37.493877", + "stop_no": "20976", + "xcode": "126.91488", + "stop_type": "마을버스", + "node_id": "119900303", + "nxtStn": "대방중학교" + }, + { + "stop_nm": "대방중학교", + "ycode": "37.495531285", + "stop_no": "20977", + "xcode": "126.9145761544", + "stop_type": "마을버스", + "node_id": "119900304", + "nxtStn": "돈보스코.홈플러스" + }, + { + "stop_nm": "정금마을", + "ycode": "37.4938386664", + "stop_no": "20978", + "xcode": "126.9812176487", + "stop_type": "마을버스", + "node_id": "119900305", + "nxtStn": "이수힐스테이트.이수푸르지오" + }, + { + "stop_nm": "경동아파트", + "ycode": "37.5094841427", + "stop_no": "20979", + "xcode": "126.9537175431", + "stop_type": "마을버스", + "node_id": "119900290", + "nxtStn": "본동초등학교" + }, + { + "stop_nm": "동양중학교", + "ycode": "37.5091142107", + "stop_no": "20980", + "xcode": "126.9548036777", + "stop_type": "마을버스", + "node_id": "119900289", + "nxtStn": "경동아파트" + }, + { + "stop_nm": "극락정사", + "ycode": "37.5080479239", + "stop_no": "20981", + "xcode": "126.9518056786", + "stop_type": "마을버스", + "node_id": "119900288", + "nxtStn": "동양중학교" + }, + { + "stop_nm": "흑석역", + "ycode": "37.509202", + "stop_no": "20983", + "xcode": "126.962302", + "stop_type": "마을버스", + "node_id": "119900286", + "nxtStn": "흑석동효사정앞" + }, + { + "stop_nm": "중앙대병원", + "ycode": "37.5074356533", + "stop_no": "20984", + "xcode": "126.9603641787", + "stop_type": "마을버스", + "node_id": "119900285", + "nxtStn": "흑석역" + }, + { + "stop_nm": "상도역1번출구", + "ycode": "37.5025855614", + "stop_no": "20985", + "xcode": "126.9478369293", + "stop_type": "마을버스", + "node_id": "119900284", + "nxtStn": "숭실대입구역" + }, + { + "stop_nm": "봉천고개관악현대아파트", + "ycode": "37.4913451421", + "stop_no": "20986", + "xcode": "126.956601184", + "stop_type": "마을버스", + "node_id": "119900281", + "nxtStn": "종점" + }, + { + "stop_nm": "동작대교(가상)", + "ycode": "37.5051188428", + "stop_no": "20987", + "xcode": "126.9797337356", + "stop_type": "가상정류장", + "node_id": "119000304", + "nxtStn": "한강대교(가상)" + }, + { + "stop_nm": "상도3동주민센터", + "ycode": "37.4995035166", + "stop_no": "20988", + "xcode": "126.9298933823", + "stop_type": "마을버스", + "node_id": "119900282", + "nxtStn": "현대한의원" + }, + { + "stop_nm": "양녕공영주차장", + "ycode": "37.4967192504", + "stop_no": "20989", + "xcode": "126.9361449852", + "stop_type": "마을버스", + "node_id": "119900283", + "nxtStn": "사거리" + }, + { + "stop_nm": "두산위브아파트", + "ycode": "37.484877791", + "stop_no": "20990", + "xcode": "126.9708754546", + "stop_type": "마을버스", + "node_id": "119900280", + "nxtStn": "삼거리" + }, + { + "stop_nm": "서울교(가상)", + "ycode": "37.5203446927", + "stop_no": "20991", + "xcode": "126.9159846095", + "stop_type": "가상정류장", + "node_id": "118000581", + "nxtStn": "여의하류IC(가상)" + }, + { + "stop_nm": "보라매역.동작세무서", + "ycode": "37.499231", + "stop_no": "20992", + "xcode": "126.920193", + "stop_type": "마을버스", + "node_id": "119900278", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "여의교(가상)", + "ycode": "37.5155175577", + "stop_no": "20993", + "xcode": "126.9279150752", + "stop_type": "가상정류장", + "node_id": "119000310", + "nxtStn": "여의2교(가상)" + }, + { + "stop_nm": "보라매역.동작세무서", + "ycode": "37.4979925451", + "stop_no": "20995", + "xcode": "126.920229403", + "stop_type": "마을버스", + "node_id": "119900279", + "nxtStn": "예스플러스" + }, + { + "stop_nm": "한강대교(가상)", + "ycode": "37.5141197789", + "stop_no": "20996", + "xcode": "126.9571940689", + "stop_type": "가상정류장", + "node_id": "119000306", + "nxtStn": "여의교(가상)" + }, + { + "stop_nm": "신남성초교입구", + "ycode": "37.4877091329", + "stop_no": "20997", + "xcode": "126.9645405795", + "stop_type": "마을버스", + "node_id": "119900275", + "nxtStn": "신남성초교후문" + }, + { + "stop_nm": "삼호.오네뜨아파트", + "ycode": "37.4866037163", + "stop_no": "20998", + "xcode": "126.9653451099", + "stop_type": "마을버스", + "node_id": "119900276", + "nxtStn": "사당5동주민센터" + }, + { + "stop_nm": "사당5동주민센터", + "ycode": "37.485085", + "stop_no": "20999", + "xcode": "126.967507", + "stop_type": "마을버스", + "node_id": "119900277", + "nxtStn": "사당솔밭도서관" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.4839345974", + "stop_no": "21001", + "xcode": "126.9024471276", + "stop_type": "중앙차로", + "node_id": "120000001", + "nxtStn": "동작상떼빌아파트" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.483978", + "stop_no": "21002", + "xcode": "126.902468", + "stop_type": "중앙차로", + "node_id": "120000674", + "nxtStn": "문성골" + }, + { + "stop_nm": "사당자동차학원", + "ycode": "37.471303", + "stop_no": "21027", + "xcode": "126.983297", + "stop_type": "중앙차로", + "node_id": "120000672", + "nxtStn": "남태령역" + }, + { + "stop_nm": "사당역", + "ycode": "37.474823", + "stop_no": "21028", + "xcode": "126.981722", + "stop_type": "중앙차로", + "node_id": "121001314", + "nxtStn": "주암동" + }, + { + "stop_nm": "서울미술고.인헌중고", + "ycode": "37.4764663412", + "stop_no": "21101", + "xcode": "126.9655544411", + "stop_type": "일반차로", + "node_id": "120000002", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4779096847", + "stop_no": "21102", + "xcode": "126.9618756708", + "stop_type": "일반차로", + "node_id": "120000003", + "nxtStn": "행운동주민센터" + }, + { + "stop_nm": "행운동주민센터", + "ycode": "37.4798444396", + "stop_no": "21103", + "xcode": "126.9568690307", + "stop_type": "일반차로", + "node_id": "120000004", + "nxtStn": "서울대입구역5번출구" + }, + { + "stop_nm": "서울대입구역5번출구", + "ycode": "37.4816281486", + "stop_no": "21104", + "xcode": "126.951014176", + "stop_type": "가로변시간", + "node_id": "120000005", + "nxtStn": "KT관악지점" + }, + { + "stop_nm": "KT관악지점", + "ycode": "37.482039", + "stop_no": "21105", + "xcode": "126.947188", + "stop_type": "가로변전일", + "node_id": "120000006", + "nxtStn": "봉천역.관악초등학교" + }, + { + "stop_nm": "봉천역.관악초등학교", + "ycode": "37.48244", + "stop_no": "21106", + "xcode": "126.943153", + "stop_type": "가로변전일", + "node_id": "120000007", + "nxtStn": "KT&G관악지점" + }, + { + "stop_nm": "KT&G관악지점", + "ycode": "37.4844754738", + "stop_no": "21107", + "xcode": "126.9373129096", + "stop_type": "가로변시간", + "node_id": "120000008", + "nxtStn": "관악우체국.에이치플러스양지병원" + }, + { + "stop_nm": "신림사거리.신림역", + "ycode": "37.4841492836", + "stop_no": "21108", + "xcode": "126.9278542438", + "stop_type": "일반차로", + "node_id": "120000009", + "nxtStn": "남부초등학교" + }, + { + "stop_nm": "남부초등학교", + "ycode": "37.483405", + "stop_no": "21109", + "xcode": "126.922045", + "stop_type": "가로변시간", + "node_id": "120000010", + "nxtStn": "호림박물관" + }, + { + "stop_nm": "호림박물관", + "ycode": "37.482723", + "stop_no": "21110", + "xcode": "126.918377", + "stop_type": "가로변시간", + "node_id": "120000011", + "nxtStn": "난곡입구" + }, + { + "stop_nm": "난곡입구", + "ycode": "37.482236", + "stop_no": "21111", + "xcode": "126.915721", + "stop_type": "가로변시간", + "node_id": "120000012", + "nxtStn": "관악구보훈회관.신림푸르지오" + }, + { + "stop_nm": "관악구보훈회관.신림푸르지오", + "ycode": "37.481361666", + "stop_no": "21112", + "xcode": "126.9112396639", + "stop_type": "가로변시간", + "node_id": "120000013", + "nxtStn": "천주교성령봉사회관.등불교회" + }, + { + "stop_nm": "천주교성령봉사회관.등불교회", + "ycode": "37.4807554146", + "stop_no": "21113", + "xcode": "126.9079578883", + "stop_type": "가로변시간", + "node_id": "120000014", + "nxtStn": "KT구로지사" + }, + { + "stop_nm": "KT구로지사", + "ycode": "37.480267", + "stop_no": "21114", + "xcode": "126.904998", + "stop_type": "가로변시간", + "node_id": "120000015", + "nxtStn": "문성초등학교" + }, + { + "stop_nm": "난곡입구", + "ycode": "37.481941", + "stop_no": "21115", + "xcode": "126.916138", + "stop_type": "가로변전일", + "node_id": "120000016", + "nxtStn": "호림박물관" + }, + { + "stop_nm": "남서울중학교.성보중고등학교", + "ycode": "37.482817", + "stop_no": "21116", + "xcode": "126.921012", + "stop_type": "가로변전일", + "node_id": "120000017", + "nxtStn": "신림사거리.신원시장" + }, + { + "stop_nm": "신림사거리.신림역", + "ycode": "37.483817804", + "stop_no": "21117", + "xcode": "126.9280626243", + "stop_type": "일반차로", + "node_id": "120000018", + "nxtStn": "관악우체국.에이치플러스양지병원" + }, + { + "stop_nm": "KT&G관악지점", + "ycode": "37.484533", + "stop_no": "21118", + "xcode": "126.936125", + "stop_type": "일반차로", + "node_id": "120000019", + "nxtStn": "네이처힐.LH서초아파트" + }, + { + "stop_nm": "봉천역.관악초등학교", + "ycode": "37.482057", + "stop_no": "21119", + "xcode": "126.943115", + "stop_type": "가로변시간", + "node_id": "120000020", + "nxtStn": "KT관악지점" + }, + { + "stop_nm": "KT관악지점", + "ycode": "37.4814828857", + "stop_no": "21120", + "xcode": "126.9484610699", + "stop_type": "가로변시간", + "node_id": "120000021", + "nxtStn": "봉천사거리" + }, + { + "stop_nm": "봉천사거리", + "ycode": "37.480368", + "stop_no": "21121", + "xcode": "126.954587", + "stop_type": "가로변시간", + "node_id": "120000022", + "nxtStn": "낙성대동" + }, + { + "stop_nm": "낙성대동", + "ycode": "37.479278", + "stop_no": "21122", + "xcode": "126.957392", + "stop_type": "가로변시간", + "node_id": "120000023", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4778444821", + "stop_no": "21123", + "xcode": "126.9608874889", + "stop_type": "가로변시간", + "node_id": "120000024", + "nxtStn": "인헌중고.서울미술고" + }, + { + "stop_nm": "인헌중고.서울미술고", + "ycode": "37.475655", + "stop_no": "21124", + "xcode": "126.966623", + "stop_type": "일반차로", + "node_id": "120000025", + "nxtStn": "예술인마을.사당초등학교" + }, + { + "stop_nm": "예술인마을.사당초등학교", + "ycode": "37.475937", + "stop_no": "21125", + "xcode": "126.973885", + "stop_type": "일반차로", + "node_id": "120000026", + "nxtStn": "남서울농협남현동지점" + }, + { + "stop_nm": "남서울농협남현동지점", + "ycode": "37.476370961", + "stop_no": "21126", + "xcode": "126.9773008972", + "stop_type": "일반차로", + "node_id": "120000027", + "nxtStn": "방배동래미안타워.동덕여중고" + }, + { + "stop_nm": "서울대학교", + "ycode": "37.4667414611", + "stop_no": "21127", + "xcode": "126.9479522861", + "stop_type": "일반차로", + "node_id": "120000028", + "nxtStn": "신림중.삼성고.관악아트홀·도서관" + }, + { + "stop_nm": "서울대학교", + "ycode": "37.466827", + "stop_no": "21128", + "xcode": "126.948727", + "stop_type": "일반차로", + "node_id": "120000029", + "nxtStn": "서울대학교.치과병원.동물병원" + }, + { + "stop_nm": "서울여상.서울문영여중고앞", + "ycode": "37.4731604796", + "stop_no": "21129", + "xcode": "126.9533001437", + "stop_type": "일반차로", + "node_id": "120000030", + "nxtStn": "관악구청" + }, + { + "stop_nm": "관악구청", + "ycode": "37.4779819797", + "stop_no": "21130", + "xcode": "126.9524977507", + "stop_type": "일반차로", + "node_id": "120000031", + "nxtStn": "봉천사거리.봉천중앙시장" + }, + { + "stop_nm": "봉천사거리.봉천중앙시장", + "ycode": "37.4828873794", + "stop_no": "21131", + "xcode": "126.9542258337", + "stop_type": "가로변전일", + "node_id": "120000032", + "nxtStn": "봉원중학교.행운동우성아파트" + }, + { + "stop_nm": "봉원중학교.행운동우성아파트", + "ycode": "37.4849010896", + "stop_no": "21132", + "xcode": "126.9559128703", + "stop_type": "가로변시간", + "node_id": "120000033", + "nxtStn": "관악로입구" + }, + { + "stop_nm": "관악푸르지오아파트", + "ycode": "37.4877034434", + "stop_no": "21133", + "xcode": "126.9581660971", + "stop_type": "일반차로", + "node_id": "120000034", + "nxtStn": "봉천고개.관악현대아파트" + }, + { + "stop_nm": "성현동동아아파트", + "ycode": "37.488401645", + "stop_no": "21136", + "xcode": "126.957732596", + "stop_type": "일반차로", + "node_id": "120000035", + "nxtStn": "봉원중학교.행운동우성아파트" + }, + { + "stop_nm": "봉원중학교.행운동우성아파트", + "ycode": "37.484857", + "stop_no": "21137", + "xcode": "126.955342", + "stop_type": "가로변시간", + "node_id": "120000036", + "nxtStn": "서울대입구역2호선" + }, + { + "stop_nm": "봉천사거리.봉천중앙시장", + "ycode": "37.483155", + "stop_no": "21138", + "xcode": "126.953838", + "stop_type": "일반차로", + "node_id": "120000037", + "nxtStn": "봉천사거리" + }, + { + "stop_nm": "관악구청", + "ycode": "37.47935", + "stop_no": "21139", + "xcode": "126.952188", + "stop_type": "일반차로", + "node_id": "120000038", + "nxtStn": "관악경찰서.관악소방서" + }, + { + "stop_nm": "관악경찰서.관악소방서", + "ycode": "37.475253", + "stop_no": "21140", + "xcode": "126.952572", + "stop_type": "일반차로", + "node_id": "120000039", + "nxtStn": "서울여상.서울문영여중고앞" + }, + { + "stop_nm": "서울여상.서울문영여중고앞", + "ycode": "37.473002", + "stop_no": "21141", + "xcode": "126.952845", + "stop_type": "일반차로", + "node_id": "120000040", + "nxtStn": "서울대학교.치과병원.동물병원" + }, + { + "stop_nm": "신림중.삼성고.관악아트홀·도서관", + "ycode": "37.47055", + "stop_no": "21142", + "xcode": "126.944132", + "stop_type": "일반차로", + "node_id": "120000041", + "nxtStn": "한남운수대학동차고지" + }, + { + "stop_nm": "서울산업정보학교.삼성교", + "ycode": "37.4710142867", + "stop_no": "21143", + "xcode": "126.941124806", + "stop_type": "일반차로", + "node_id": "120000042", + "nxtStn": "신림2동차고지" + }, + { + "stop_nm": "신성초등학교", + "ycode": "37.471078", + "stop_no": "21144", + "xcode": "126.937427", + "stop_type": "일반차로", + "node_id": "120000043", + "nxtStn": "삼성동주민센터" + }, + { + "stop_nm": "서울대벤처타운역1번출구", + "ycode": "37.473206969", + "stop_no": "21145", + "xcode": "126.933686278", + "stop_type": "일반차로", + "node_id": "120000044", + "nxtStn": "쑥고개입구" + }, + { + "stop_nm": "쑥고개입구", + "ycode": "37.4761917072", + "stop_no": "21146", + "xcode": "126.9374950813", + "stop_type": "일반차로", + "node_id": "120000045", + "nxtStn": "서원역2번출구.서원동성당앞" + }, + { + "stop_nm": "서원역1번출구", + "ycode": "37.4786498144", + "stop_no": "21147", + "xcode": "126.9323856945", + "stop_type": "일반차로", + "node_id": "120000046", + "nxtStn": "신림역2번출구" + }, + { + "stop_nm": "신림사거리", + "ycode": "37.4819257882", + "stop_no": "21148", + "xcode": "126.9300715056", + "stop_type": "일반차로", + "node_id": "120000047", + "nxtStn": "신림사거리.신림역" + }, + { + "stop_nm": "신림동별빛거리입구", + "ycode": "37.485847", + "stop_no": "21149", + "xcode": "126.929633", + "stop_type": "일반차로", + "node_id": "120000048", + "nxtStn": "당곡역.보라매공원.보라매병원" + }, + { + "stop_nm": "당곡역.보라매공원.보라매병원", + "ycode": "37.49044", + "stop_no": "21150", + "xcode": "126.92762", + "stop_type": "일반차로", + "node_id": "120000049", + "nxtStn": "보라매삼성아파트.모자원고개" + }, + { + "stop_nm": "당곡역2번출구.롯데백화점관악점", + "ycode": "37.490008", + "stop_no": "21151", + "xcode": "126.927485", + "stop_type": "일반차로", + "node_id": "120000050", + "nxtStn": "신림동별빛거리입구" + }, + { + "stop_nm": "신림동별빛거리입구", + "ycode": "37.486415", + "stop_no": "21152", + "xcode": "126.929057", + "stop_type": "일반차로", + "node_id": "120000051", + "nxtStn": "신림사거리" + }, + { + "stop_nm": "신림사거리", + "ycode": "37.482767098", + "stop_no": "21153", + "xcode": "126.9296377666", + "stop_type": "일반차로", + "node_id": "120000052", + "nxtStn": "서원동승리교앞" + }, + { + "stop_nm": "서원역", + "ycode": "37.477918", + "stop_no": "21154", + "xcode": "126.932724", + "stop_type": "일반차로", + "node_id": "120000053", + "nxtStn": "서림동주민센터.신화단지" + }, + { + "stop_nm": "서림동주민센터.신화단지", + "ycode": "37.475874", + "stop_no": "21155", + "xcode": "126.936618", + "stop_type": "일반차로", + "node_id": "120000054", + "nxtStn": "서림동주민센터" + }, + { + "stop_nm": "서울대벤처타운역.삼성동시장", + "ycode": "37.4727127526", + "stop_no": "21156", + "xcode": "126.9329597367", + "stop_type": "일반차로", + "node_id": "120000055", + "nxtStn": "삼성동주민센터" + }, + { + "stop_nm": "대학동고시촌입구", + "ycode": "37.470773", + "stop_no": "21157", + "xcode": "126.936456", + "stop_type": "일반차로", + "node_id": "120000056", + "nxtStn": "서울산업정보학교.삼성교" + }, + { + "stop_nm": "서울산업정보학교.삼성교", + "ycode": "37.470573816", + "stop_no": "21158", + "xcode": "126.9420276971", + "stop_type": "일반차로", + "node_id": "120000057", + "nxtStn": "관악산입구.관악아트홀·중앙도서관" + }, + { + "stop_nm": "관악산입구.관악아트홀·중앙도서관", + "ycode": "37.467758", + "stop_no": "21159", + "xcode": "126.946871", + "stop_type": "일반차로", + "node_id": "120000058", + "nxtStn": "서울대학교" + }, + { + "stop_nm": "당곡역.당곡사거리.롯데백화점", + "ycode": "37.4910041432", + "stop_no": "21160", + "xcode": "126.9270746638", + "stop_type": "일반차로", + "node_id": "119000303", + "nxtStn": "당곡중학교" + }, + { + "stop_nm": "사당역4번출구", + "ycode": "37.4755408508", + "stop_no": "21161", + "xcode": "126.9813590372", + "stop_type": "가로변시간", + "node_id": "120000059", + "nxtStn": "사당자동차학원" + }, + { + "stop_nm": "남현동홈플러스앞", + "ycode": "37.472373", + "stop_no": "21162", + "xcode": "126.98253", + "stop_type": "일반차로", + "node_id": "120000060", + "nxtStn": "사당IC진입(경유)" + }, + { + "stop_nm": "남태령역", + "ycode": "37.46557", + "stop_no": "21163", + "xcode": "126.987784", + "stop_type": "일반차로", + "node_id": "120000061", + "nxtStn": "남태령고개" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4782931407", + "stop_no": "21164", + "xcode": "126.9579938257", + "stop_type": "일반차로", + "node_id": "120000062", + "nxtStn": "서울대호암교수회관" + }, + { + "stop_nm": "삼성동주민센터", + "ycode": "37.470005", + "stop_no": "21165", + "xcode": "126.933025", + "stop_type": "일반차로", + "node_id": "120000063", + "nxtStn": "미림고개" + }, + { + "stop_nm": "미림고개", + "ycode": "37.468114", + "stop_no": "21166", + "xcode": "126.931983", + "stop_type": "일반차로", + "node_id": "120000064", + "nxtStn": "미림여고.미림여자정보과학고" + }, + { + "stop_nm": "미림여고.미림여자정보과학고", + "ycode": "37.465575", + "stop_no": "21167", + "xcode": "126.931333", + "stop_type": "일반차로", + "node_id": "120000065", + "nxtStn": "신우초등학교" + }, + { + "stop_nm": "신우초등학교", + "ycode": "37.462721", + "stop_no": "21168", + "xcode": "126.931693", + "stop_type": "일반차로", + "node_id": "120000066", + "nxtStn": "삼성산성지" + }, + { + "stop_nm": "삼성산성지", + "ycode": "37.458825", + "stop_no": "21169", + "xcode": "126.929865", + "stop_type": "일반차로", + "node_id": "120000067", + "nxtStn": "산장아파트" + }, + { + "stop_nm": "산장아파트", + "ycode": "37.459955", + "stop_no": "21170", + "xcode": "126.927725", + "stop_type": "일반차로", + "node_id": "120000068", + "nxtStn": "삼성산주공아파트" + }, + { + "stop_nm": "삼성산주공아파트", + "ycode": "37.461345", + "stop_no": "21171", + "xcode": "126.925109", + "stop_type": "일반차로", + "node_id": "120000069", + "nxtStn": "산복터널.관악산휴먼시아2단지" + }, + { + "stop_nm": "산복터널.관악산휴먼시아2단지", + "ycode": "37.458697", + "stop_no": "21172", + "xcode": "126.922015", + "stop_type": "일반차로", + "node_id": "120000070", + "nxtStn": "벽산아파트1단지.호압사입구" + }, + { + "stop_nm": "산복터널.관악산휴먼시아2단지", + "ycode": "37.459082", + "stop_no": "21173", + "xcode": "126.922572", + "stop_type": "일반차로", + "node_id": "120000071", + "nxtStn": "삼성산주공아파트" + }, + { + "stop_nm": "삼성산주공아파트", + "ycode": "37.4611062672", + "stop_no": "21174", + "xcode": "126.9250910137", + "stop_type": "일반차로", + "node_id": "120000072", + "nxtStn": "산장아파트" + }, + { + "stop_nm": "산장아파트", + "ycode": "37.459798", + "stop_no": "21175", + "xcode": "126.9275", + "stop_type": "일반차로", + "node_id": "120000073", + "nxtStn": "삼성산성지" + }, + { + "stop_nm": "삼성산성지", + "ycode": "37.458613", + "stop_no": "21176", + "xcode": "126.92989", + "stop_type": "일반차로", + "node_id": "120000074", + "nxtStn": "신우초등학교" + }, + { + "stop_nm": "신우초등학교", + "ycode": "37.4624107186", + "stop_no": "21177", + "xcode": "126.9319560545", + "stop_type": "일반차로", + "node_id": "120000075", + "nxtStn": "미림여고.미림여자정보과학고" + }, + { + "stop_nm": "미림여고.미림여자정보과학고", + "ycode": "37.4651129483", + "stop_no": "21178", + "xcode": "126.9316212418", + "stop_type": "일반차로", + "node_id": "120000076", + "nxtStn": "미림고개.고시촌입구" + }, + { + "stop_nm": "미림고개.고시촌입구", + "ycode": "37.467637", + "stop_no": "21179", + "xcode": "126.932", + "stop_type": "일반차로", + "node_id": "120000077", + "nxtStn": "서울대벤처타운역" + }, + { + "stop_nm": "서울대벤처타운역", + "ycode": "37.470692", + "stop_no": "21180", + "xcode": "126.933592", + "stop_type": "일반차로", + "node_id": "120000078", + "nxtStn": "서울대벤처타운역1번출구" + }, + { + "stop_nm": "쑥고개", + "ycode": "37.478535389", + "stop_no": "21181", + "xcode": "126.9403975075", + "stop_type": "일반차로", + "node_id": "120000079", + "nxtStn": "e편한세상서울대입구아파트" + }, + { + "stop_nm": "e편한세상서울대입구아파트", + "ycode": "37.47953", + "stop_no": "21182", + "xcode": "126.942828", + "stop_type": "일반차로", + "node_id": "120000080", + "nxtStn": "영락고교.영락의료과학고" + }, + { + "stop_nm": "영락고교.영락의료과학고", + "ycode": "37.4792126295", + "stop_no": "21183", + "xcode": "126.9456223075", + "stop_type": "일반차로", + "node_id": "120000081", + "nxtStn": "생모리츠타운" + }, + { + "stop_nm": "생모리츠타운", + "ycode": "37.479052", + "stop_no": "21184", + "xcode": "126.94776", + "stop_type": "일반차로", + "node_id": "120000082", + "nxtStn": "관악구청" + }, + { + "stop_nm": "관악구청", + "ycode": "37.478727", + "stop_no": "21185", + "xcode": "126.950798", + "stop_type": "일반차로", + "node_id": "120000083", + "nxtStn": "서울대입구역" + }, + { + "stop_nm": "생모리츠타운", + "ycode": "37.479247", + "stop_no": "21186", + "xcode": "126.947667", + "stop_type": "일반차로", + "node_id": "120000084", + "nxtStn": "영락고교.영락의료과학고" + }, + { + "stop_nm": "영락고교.영락의료과학고", + "ycode": "37.479465", + "stop_no": "21187", + "xcode": "126.945438", + "stop_type": "일반차로", + "node_id": "120000085", + "nxtStn": "e편한세상서울대입구아파트" + }, + { + "stop_nm": "e편한세상서울대입구아파트", + "ycode": "37.479723", + "stop_no": "21188", + "xcode": "126.942933", + "stop_type": "일반차로", + "node_id": "120000086", + "nxtStn": "쑥고개" + }, + { + "stop_nm": "쑥고개", + "ycode": "37.4786269166", + "stop_no": "21189", + "xcode": "126.94012124", + "stop_type": "일반차로", + "node_id": "120000087", + "nxtStn": "서림동주민센터.신화단지" + }, + { + "stop_nm": "은천교", + "ycode": "37.4862300225", + "stop_no": "21190", + "xcode": "126.9358165166", + "stop_type": "일반차로", + "node_id": "120000088", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "봉일시장", + "ycode": "37.486138", + "stop_no": "21191", + "xcode": "126.938717", + "stop_type": "일반차로", + "node_id": "120000089", + "nxtStn": "은천초등학교" + }, + { + "stop_nm": "은천초등학교", + "ycode": "37.486084336", + "stop_no": "21192", + "xcode": "126.9424344854", + "stop_type": "일반차로", + "node_id": "120000090", + "nxtStn": "두산.벽산아파트.서울관광고등학교" + }, + { + "stop_nm": "두산.벽산아파트.서울관광고등학교", + "ycode": "37.4867862492", + "stop_no": "21193", + "xcode": "126.945256088", + "stop_type": "일반차로", + "node_id": "120000091", + "nxtStn": "현대시장앞" + }, + { + "stop_nm": "현대시장앞", + "ycode": "37.486675", + "stop_no": "21194", + "xcode": "126.948496", + "stop_type": "일반차로", + "node_id": "120000092", + "nxtStn": "관악동부센트레빌아파트앞" + }, + { + "stop_nm": "관악동부센트레빌아파트앞", + "ycode": "37.4862395065", + "stop_no": "21195", + "xcode": "126.951997229", + "stop_type": "일반차로", + "node_id": "120000093", + "nxtStn": "중앙동성당앞" + }, + { + "stop_nm": "중앙동성당앞", + "ycode": "37.485802", + "stop_no": "21196", + "xcode": "126.954663", + "stop_type": "일반차로", + "node_id": "120000094", + "nxtStn": "봉원중학교.행운동우성아파트" + }, + { + "stop_nm": "중앙동성당앞", + "ycode": "37.485921", + "stop_no": "21197", + "xcode": "126.955195", + "stop_type": "일반차로", + "node_id": "120000095", + "nxtStn": "관악동부센트레빌아파트앞" + }, + { + "stop_nm": "관악동부센트레빌아파트앞", + "ycode": "37.4864744102", + "stop_no": "21198", + "xcode": "126.95130163", + "stop_type": "일반차로", + "node_id": "120000096", + "nxtStn": "현대시장" + }, + { + "stop_nm": "대학동고시촌입구", + "ycode": "37.470437", + "stop_no": "21199", + "xcode": "126.939236", + "stop_type": "일반차로", + "node_id": "120000675", + "nxtStn": "서울산업정보학교.삼성교" + }, + { + "stop_nm": "벽산.두산아파트.서울관광고등학교", + "ycode": "37.4869646301", + "stop_no": "21200", + "xcode": "126.9451745389", + "stop_type": "일반차로", + "node_id": "120000098", + "nxtStn": "은천초등학교" + }, + { + "stop_nm": "은천초등학교", + "ycode": "37.48632", + "stop_no": "21201", + "xcode": "126.942447", + "stop_type": "일반차로", + "node_id": "120000099", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "봉일시장", + "ycode": "37.4862623399", + "stop_no": "21202", + "xcode": "126.9389872733", + "stop_type": "일반차로", + "node_id": "120000100", + "nxtStn": "은천교" + }, + { + "stop_nm": "은천교", + "ycode": "37.486487", + "stop_no": "21203", + "xcode": "126.93555", + "stop_type": "일반차로", + "node_id": "120000101", + "nxtStn": "당곡중학교" + }, + { + "stop_nm": "신림청소년독서실.신림체육센터", + "ycode": "37.480922", + "stop_no": "21204", + "xcode": "126.914797", + "stop_type": "일반차로", + "node_id": "120000102", + "nxtStn": "난곡입구" + }, + { + "stop_nm": "난곡우체국사거리", + "ycode": "37.477188", + "stop_no": "21205", + "xcode": "126.915602", + "stop_type": "일반차로", + "node_id": "120000103", + "nxtStn": "신림청소년독서실.신림체육센터" + }, + { + "stop_nm": "신일교회앞", + "ycode": "37.475448", + "stop_no": "21206", + "xcode": "126.916767", + "stop_type": "일반차로", + "node_id": "120000104", + "nxtStn": "난곡우체국사거리" + }, + { + "stop_nm": "세이브마트앞", + "ycode": "37.473862", + "stop_no": "21207", + "xcode": "126.918037", + "stop_type": "일반차로", + "node_id": "120000105", + "nxtStn": "신일교회앞" + }, + { + "stop_nm": "남강중고등학교입구", + "ycode": "37.4722574159", + "stop_no": "21208", + "xcode": "126.9195218742", + "stop_type": "일반차로", + "node_id": "120000106", + "nxtStn": "세이브마트앞" + }, + { + "stop_nm": "우림시장.난곡보건분소", + "ycode": "37.470547", + "stop_no": "21209", + "xcode": "126.919998", + "stop_type": "일반차로", + "node_id": "120000107", + "nxtStn": "남강중고등학교입구" + }, + { + "stop_nm": "난우중학교입구", + "ycode": "37.4666919669", + "stop_no": "21210", + "xcode": "126.92054078", + "stop_type": "일반차로", + "node_id": "120000108", + "nxtStn": "우림시장.난곡보건분소" + }, + { + "stop_nm": "신림복지관앞", + "ycode": "37.4652824875", + "stop_no": "21211", + "xcode": "126.9196773902", + "stop_type": "일반차로", + "node_id": "120000109", + "nxtStn": "난우중학교입구" + }, + { + "stop_nm": "신림복지관앞", + "ycode": "37.465357", + "stop_no": "21212", + "xcode": "126.919495", + "stop_type": "일반차로", + "node_id": "120000110", + "nxtStn": "서울난향초등학교.난향동주민센터" + }, + { + "stop_nm": "난우중학교입구", + "ycode": "37.467392", + "stop_no": "21213", + "xcode": "126.920348", + "stop_type": "일반차로", + "node_id": "120000111", + "nxtStn": "신림복지관앞" + }, + { + "stop_nm": "우림시장.난곡보건분소", + "ycode": "37.470667112", + "stop_no": "21214", + "xcode": "126.9197417798", + "stop_type": "일반차로", + "node_id": "120000112", + "nxtStn": "난우중학교입구" + }, + { + "stop_nm": "남강중고등학교입구", + "ycode": "37.472558", + "stop_no": "21215", + "xcode": "126.919146", + "stop_type": "일반차로", + "node_id": "120000113", + "nxtStn": "우림시장.난곡보건분소" + }, + { + "stop_nm": "세이브마트앞", + "ycode": "37.473958", + "stop_no": "21216", + "xcode": "126.917433", + "stop_type": "일반차로", + "node_id": "120000114", + "nxtStn": "남강중고등학교입구" + }, + { + "stop_nm": "신일교회앞", + "ycode": "37.475399", + "stop_no": "21217", + "xcode": "126.916574", + "stop_type": "일반차로", + "node_id": "120000115", + "nxtStn": "세이브마트앞" + }, + { + "stop_nm": "난곡우체국사거리", + "ycode": "37.4769808612", + "stop_no": "21218", + "xcode": "126.9154305767", + "stop_type": "일반차로", + "node_id": "120000116", + "nxtStn": "신일교회앞" + }, + { + "stop_nm": "신림청소년독서실.신림체육센터", + "ycode": "37.480315301", + "stop_no": "21219", + "xcode": "126.9146624536", + "stop_type": "일반차로", + "node_id": "120000117", + "nxtStn": "난곡우체국사거리" + }, + { + "stop_nm": "KT구로지사", + "ycode": "37.4812745555", + "stop_no": "21220", + "xcode": "126.90539986", + "stop_type": "일반차로", + "node_id": "120000118", + "nxtStn": "조원동주민센터" + }, + { + "stop_nm": "골목시장앞", + "ycode": "37.4815094057", + "stop_no": "21221", + "xcode": "126.9053800168", + "stop_type": "일반차로", + "node_id": "120000119", + "nxtStn": "모두의학교.금천문화예술정보학교" + }, + { + "stop_nm": "조원동주민센터", + "ycode": "37.483437", + "stop_no": "21222", + "xcode": "126.907417", + "stop_type": "일반차로", + "node_id": "120000120", + "nxtStn": "신대방역" + }, + { + "stop_nm": "조원동주민센터", + "ycode": "37.483185", + "stop_no": "21223", + "xcode": "126.907055", + "stop_type": "일반차로", + "node_id": "120000121", + "nxtStn": "골목시장앞" + }, + { + "stop_nm": "신대방역", + "ycode": "37.4865794735", + "stop_no": "21224", + "xcode": "126.9130032118", + "stop_type": "일반차로", + "node_id": "120000122", + "nxtStn": "신사동진양빌딩앞" + }, + { + "stop_nm": "신대방역", + "ycode": "37.48667", + "stop_no": "21225", + "xcode": "126.912694", + "stop_type": "일반차로", + "node_id": "120000123", + "nxtStn": "조원경로당" + }, + { + "stop_nm": "보라매공원입구", + "ycode": "37.4891229048", + "stop_no": "21226", + "xcode": "126.9174897386", + "stop_type": "일반차로", + "node_id": "120000124", + "nxtStn": "갑을아파트" + }, + { + "stop_nm": "보라매공원입구", + "ycode": "37.489435", + "stop_no": "21227", + "xcode": "126.917802", + "stop_type": "일반차로", + "node_id": "120000125", + "nxtStn": "신대방역" + }, + { + "stop_nm": "보라매갑을아파트", + "ycode": "37.4896486343", + "stop_no": "21228", + "xcode": "126.9220386039", + "stop_type": "일반차로", + "node_id": "120000126", + "nxtStn": "롯데관악점" + }, + { + "stop_nm": "롯데관악점", + "ycode": "37.48973", + "stop_no": "21229", + "xcode": "126.925162", + "stop_type": "일반차로", + "node_id": "120000127", + "nxtStn": "신림동별빛거리입구" + }, + { + "stop_nm": "롯데관악점", + "ycode": "37.49013", + "stop_no": "21230", + "xcode": "126.925707", + "stop_type": "일반차로", + "node_id": "120000128", + "nxtStn": "서울특별시.보라매병원" + }, + { + "stop_nm": "당곡역", + "ycode": "37.4892995107", + "stop_no": "21231", + "xcode": "126.9270622168", + "stop_type": "일반차로", + "node_id": "120000129", + "nxtStn": "당곡중학교" + }, + { + "stop_nm": "당곡중학교", + "ycode": "37.4879733454", + "stop_no": "21232", + "xcode": "126.930483146", + "stop_type": "일반차로", + "node_id": "120000130", + "nxtStn": "은천길입구" + }, + { + "stop_nm": "당곡중학교", + "ycode": "37.48795", + "stop_no": "21233", + "xcode": "126.93191", + "stop_type": "일반차로", + "node_id": "120000131", + "nxtStn": "롯데관악점" + }, + { + "stop_nm": "봉현초등학교", + "ycode": "37.4907157496", + "stop_no": "21236", + "xcode": "126.9554672808", + "stop_type": "일반차로", + "node_id": "120000134", + "nxtStn": "관악드림타운115동" + }, + { + "stop_nm": "동아아파트105동앞", + "ycode": "37.49053", + "stop_no": "21237", + "xcode": "126.955413", + "stop_type": "일반차로", + "node_id": "120000135", + "nxtStn": "봉천고개관악현대아파트" + }, + { + "stop_nm": "관악드림타운115동", + "ycode": "37.490522", + "stop_no": "21239", + "xcode": "126.952787", + "stop_type": "일반차로", + "node_id": "120000137", + "nxtStn": "관악드림타운북문" + }, + { + "stop_nm": "관악드림타운115동", + "ycode": "37.490144", + "stop_no": "21240", + "xcode": "126.953011", + "stop_type": "일반차로", + "node_id": "120000138", + "nxtStn": "동아아파트105동앞" + }, + { + "stop_nm": "관악드림타운북문", + "ycode": "37.491600782", + "stop_no": "21241", + "xcode": "126.951276815", + "stop_type": "일반차로", + "node_id": "120000139", + "nxtStn": "구암중학교" + }, + { + "stop_nm": "관악드림타운북문", + "ycode": "37.491545", + "stop_no": "21242", + "xcode": "126.951076", + "stop_type": "일반차로", + "node_id": "120000140", + "nxtStn": "관악드림타운115동" + }, + { + "stop_nm": "구암중학교", + "ycode": "37.492466", + "stop_no": "21243", + "xcode": "126.948341", + "stop_type": "일반차로", + "node_id": "120000141", + "nxtStn": "관악드림타운2단지.관악선의복지관" + }, + { + "stop_nm": "구암중학교", + "ycode": "37.492287", + "stop_no": "21244", + "xcode": "126.948465", + "stop_type": "일반차로", + "node_id": "120000142", + "nxtStn": "관악드림타운북문" + }, + { + "stop_nm": "벽산아파트.적십자남부봉사관", + "ycode": "37.492953", + "stop_no": "21245", + "xcode": "126.946532", + "stop_type": "일반차로", + "node_id": "120000143", + "nxtStn": "벽산블루밍아파트종점" + }, + { + "stop_nm": "벽산아파트.적십자남부봉사관", + "ycode": "37.493053", + "stop_no": "21246", + "xcode": "126.946158", + "stop_type": "일반차로", + "node_id": "120000144", + "nxtStn": "구암중학교" + }, + { + "stop_nm": "벽산블루밍벽산아파트303동앞", + "ycode": "37.491943", + "stop_no": "21247", + "xcode": "126.94437", + "stop_type": "일반차로", + "node_id": "120000145", + "nxtStn": "벽산아파트.적십자남부봉사관" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.483824", + "stop_no": "21248", + "xcode": "126.902687", + "stop_type": "일반차로", + "node_id": "120000146", + "nxtStn": "신림빗물펌프장" + }, + { + "stop_nm": "현대시장", + "ycode": "37.4868811315", + "stop_no": "21251", + "xcode": "126.947836543", + "stop_type": "일반차로", + "node_id": "120000149", + "nxtStn": "벽산.두산아파트.서울관광고등학교" + }, + { + "stop_nm": "서울대입구역", + "ycode": "37.480108", + "stop_no": "21252", + "xcode": "126.95273", + "stop_type": "일반차로", + "node_id": "120000150", + "nxtStn": "서울대입구역5번출구" + }, + { + "stop_nm": "신봉초등학교입구", + "ycode": "37.48419", + "stop_no": "21253", + "xcode": "126.946823", + "stop_type": "일반차로", + "node_id": "120000151", + "nxtStn": "현대시장" + }, + { + "stop_nm": "구암초등학교", + "ycode": "37.4891880904", + "stop_no": "21254", + "xcode": "126.9461216984", + "stop_type": "일반차로", + "node_id": "120000152", + "nxtStn": "경향렉스빌.롯데캐슬비엔" + }, + { + "stop_nm": "은천동벽산블루밍아파트105동", + "ycode": "37.4893681933", + "stop_no": "21255", + "xcode": "126.9458637343", + "stop_type": "일반차로", + "node_id": "120000153", + "nxtStn": "현대시장" + }, + { + "stop_nm": "은천동두산아파트3단지", + "ycode": "37.484362", + "stop_no": "21256", + "xcode": "126.946547", + "stop_type": "일반차로", + "node_id": "120000154", + "nxtStn": "봉천역.관악초등학교" + }, + { + "stop_nm": "봉일시장", + "ycode": "37.4850728694", + "stop_no": "21257", + "xcode": "126.9372434322", + "stop_type": "일반차로", + "node_id": "120000155", + "nxtStn": "봉천역" + }, + { + "stop_nm": "봉천역", + "ycode": "37.4830217223", + "stop_no": "21258", + "xcode": "126.9420825336", + "stop_type": "일반차로", + "node_id": "120000156", + "nxtStn": "신봉초등학교입구" + }, + { + "stop_nm": "현대시장", + "ycode": "37.4876789537", + "stop_no": "21259", + "xcode": "126.9465909455", + "stop_type": "일반차로", + "node_id": "120000157", + "nxtStn": "구암초등학교" + }, + { + "stop_nm": "현대시장", + "ycode": "37.487438", + "stop_no": "21260", + "xcode": "126.946518", + "stop_type": "일반차로", + "node_id": "120000158", + "nxtStn": "은천동두산아파트3단지" + }, + { + "stop_nm": "관악우체국.에이치플러스양지병원", + "ycode": "37.4848480554", + "stop_no": "21261", + "xcode": "126.933156959", + "stop_type": "가로변전일", + "node_id": "120000159", + "nxtStn": "신림동별빛거리입구" + }, + { + "stop_nm": "관악우체국.에이치플러스양지병원", + "ycode": "37.4844524654", + "stop_no": "21262", + "xcode": "126.9331482652", + "stop_type": "가로변시간", + "node_id": "120000160", + "nxtStn": "KT&G관악지점" + }, + { + "stop_nm": "보라매삼성아파트.모자원고개", + "ycode": "37.4945144044", + "stop_no": "21263", + "xcode": "126.9273975559", + "stop_type": "일반차로", + "node_id": "120000161", + "nxtStn": "신대방삼거리" + }, + { + "stop_nm": "조원동기점", + "ycode": "37.4835296114", + "stop_no": "21264", + "xcode": "126.9058408589", + "stop_type": "일반차로", + "node_id": "120000162", + "nxtStn": "구로디지털단지역" + }, + { + "stop_nm": "관악산휴먼시아.신림푸르지오2차", + "ycode": "37.46038", + "stop_no": "21265", + "xcode": "126.919524", + "stop_type": "일반차로", + "node_id": "120000163", + "nxtStn": "관악산휴먼시아아파트1단지입구" + }, + { + "stop_nm": "관악산휴먼시아아파트1단지입구", + "ycode": "37.4609276261", + "stop_no": "21266", + "xcode": "126.9219633037", + "stop_type": "일반차로", + "node_id": "120000164", + "nxtStn": "삼성산주공정문" + }, + { + "stop_nm": "관악산휴먼시아아파트1단지입구", + "ycode": "37.460993", + "stop_no": "21267", + "xcode": "126.92163", + "stop_type": "일반차로", + "node_id": "120000165", + "nxtStn": "난향동주민센터" + }, + { + "stop_nm": "난향동주민센터", + "ycode": "37.461001", + "stop_no": "21268", + "xcode": "126.919167", + "stop_type": "일반차로", + "node_id": "120000166", + "nxtStn": "난곡종점" + }, + { + "stop_nm": "서울대정문", + "ycode": "37.465733", + "stop_no": "21269", + "xcode": "126.94839", + "stop_type": "일반차로", + "node_id": "120000167", + "nxtStn": "법대.사회대입구" + }, + { + "stop_nm": "법대.사회대입구", + "ycode": "37.462798", + "stop_no": "21270", + "xcode": "126.948992", + "stop_type": "일반차로", + "node_id": "120000168", + "nxtStn": "자연대.행정관입구" + }, + { + "stop_nm": "자연대.행정관입구", + "ycode": "37.4602745925", + "stop_no": "21271", + "xcode": "126.9488328413", + "stop_type": "일반차로", + "node_id": "120000169", + "nxtStn": "농생대" + }, + { + "stop_nm": "농생대", + "ycode": "37.457163", + "stop_no": "21272", + "xcode": "126.94917", + "stop_type": "일반차로", + "node_id": "120000170", + "nxtStn": "공대입구" + }, + { + "stop_nm": "공대입구", + "ycode": "37.454936", + "stop_no": "21273", + "xcode": "126.949846", + "stop_type": "일반차로", + "node_id": "120000171", + "nxtStn": "신소재" + }, + { + "stop_nm": "신소재", + "ycode": "37.453496", + "stop_no": "21274", + "xcode": "126.950227", + "stop_type": "일반차로", + "node_id": "120000172", + "nxtStn": "제2파워플랜트" + }, + { + "stop_nm": "제2공학관", + "ycode": "37.448828", + "stop_no": "21275", + "xcode": "126.95205", + "stop_type": "일반차로", + "node_id": "120000173", + "nxtStn": "유회진학술정보관.제1공학관" + }, + { + "stop_nm": "유회진학술정보관.제1공학관", + "ycode": "37.451283", + "stop_no": "21276", + "xcode": "126.952595", + "stop_type": "일반차로", + "node_id": "120000174", + "nxtStn": "유전공학연구소.반도체공동연구소" + }, + { + "stop_nm": "유전공학연구소.반도체공동연구소", + "ycode": "37.4540103657", + "stop_no": "21277", + "xcode": "126.9539020813", + "stop_type": "일반차로", + "node_id": "120000175", + "nxtStn": "교수회관입구" + }, + { + "stop_nm": "교수회관입구", + "ycode": "37.4560708573", + "stop_no": "21278", + "xcode": "126.9553487986", + "stop_type": "일반차로", + "node_id": "120000176", + "nxtStn": "노천강당" + }, + { + "stop_nm": "관악사삼거리", + "ycode": "37.460787", + "stop_no": "21279", + "xcode": "126.956725", + "stop_type": "일반차로", + "node_id": "120000177", + "nxtStn": "대학원생활관" + }, + { + "stop_nm": "국제대학원", + "ycode": "37.4641772176", + "stop_no": "21280", + "xcode": "126.9553134553", + "stop_type": "일반차로", + "node_id": "120000178", + "nxtStn": "수의대입구.보건대학원앞" + }, + { + "stop_nm": "수의대입구.보건대학원앞", + "ycode": "37.466119", + "stop_no": "21281", + "xcode": "126.954632", + "stop_type": "일반차로", + "node_id": "120000179", + "nxtStn": "경영대.행정대학원" + }, + { + "stop_nm": "경영대.행정대학원", + "ycode": "37.466135", + "stop_no": "21282", + "xcode": "126.952053", + "stop_type": "일반차로", + "node_id": "120000180", + "nxtStn": "서울대학교" + }, + { + "stop_nm": "경영대.행정대학원", + "ycode": "37.4658058493", + "stop_no": "21283", + "xcode": "126.9509996213", + "stop_type": "일반차로", + "node_id": "120000181", + "nxtStn": "수의대입구.보건대학원앞" + }, + { + "stop_nm": "수의대입구.보건대학원앞", + "ycode": "37.4658377051", + "stop_no": "21284", + "xcode": "126.954645472", + "stop_type": "일반차로", + "node_id": "120000182", + "nxtStn": "국제대학원" + }, + { + "stop_nm": "국제대학원", + "ycode": "37.46371", + "stop_no": "21285", + "xcode": "126.954927", + "stop_type": "일반차로", + "node_id": "120000183", + "nxtStn": "관악사삼거리" + }, + { + "stop_nm": "관악사삼거리", + "ycode": "37.460528", + "stop_no": "21286", + "xcode": "126.95666", + "stop_type": "일반차로", + "node_id": "120000184", + "nxtStn": "공동기기원" + }, + { + "stop_nm": "공동기기원", + "ycode": "37.4551189492", + "stop_no": "21288", + "xcode": "126.9544665701", + "stop_type": "일반차로", + "node_id": "120000186", + "nxtStn": "유전공학연구소.반도체공동연구소" + }, + { + "stop_nm": "유전공학연구소.반도체공동연구소", + "ycode": "37.453746", + "stop_no": "21289", + "xcode": "126.953553", + "stop_type": "일반차로", + "node_id": "120000187", + "nxtStn": "에너지자원연구소" + }, + { + "stop_nm": "에너지자원연구소", + "ycode": "37.4535952522", + "stop_no": "21290", + "xcode": "126.9522141729", + "stop_type": "일반차로", + "node_id": "120000188", + "nxtStn": "신소재" + }, + { + "stop_nm": "공대입구", + "ycode": "37.4553640041", + "stop_no": "21292", + "xcode": "126.949896448", + "stop_type": "일반차로", + "node_id": "120000190", + "nxtStn": "농생대" + }, + { + "stop_nm": "농생대", + "ycode": "37.4571128404", + "stop_no": "21293", + "xcode": "126.9493877458", + "stop_type": "일반차로", + "node_id": "120000191", + "nxtStn": "자연대.행정관입구" + }, + { + "stop_nm": "자연대.행정관입구", + "ycode": "37.45999", + "stop_no": "21294", + "xcode": "126.948957", + "stop_type": "일반차로", + "node_id": "120000192", + "nxtStn": "문화관입구" + }, + { + "stop_nm": "문화관입구", + "ycode": "37.4614868493", + "stop_no": "21297", + "xcode": "126.9494503629", + "stop_type": "일반차로", + "node_id": "120000195", + "nxtStn": "법대.사회대입구" + }, + { + "stop_nm": "법대.사회대입구", + "ycode": "37.46326", + "stop_no": "21298", + "xcode": "126.949075", + "stop_type": "일반차로", + "node_id": "120000196", + "nxtStn": "서울대정문" + }, + { + "stop_nm": "서울대정문", + "ycode": "37.465375", + "stop_no": "21299", + "xcode": "126.948633", + "stop_type": "일반차로", + "node_id": "120000197", + "nxtStn": "서울대학교" + }, + { + "stop_nm": "우방아파트", + "ycode": "37.489233", + "stop_no": "21300", + "xcode": "126.919247", + "stop_type": "일반차로", + "node_id": "120000198", + "nxtStn": "은천성결교회" + }, + { + "stop_nm": "은천성결교회", + "ycode": "37.488327", + "stop_no": "21301", + "xcode": "126.921427", + "stop_type": "일반차로", + "node_id": "120000199", + "nxtStn": "남부초교후문" + }, + { + "stop_nm": "남부초교후문", + "ycode": "37.486717", + "stop_no": "21302", + "xcode": "126.92264", + "stop_type": "일반차로", + "node_id": "120000200", + "nxtStn": "봉림교" + }, + { + "stop_nm": "봉림교", + "ycode": "37.4847770708", + "stop_no": "21303", + "xcode": "126.9245166934", + "stop_type": "일반차로", + "node_id": "120000201", + "nxtStn": "신림사거리.신림역" + }, + { + "stop_nm": "봉림교", + "ycode": "37.4849717829", + "stop_no": "21304", + "xcode": "126.9246318378", + "stop_type": "일반차로", + "node_id": "120000202", + "nxtStn": "남부초교후문" + }, + { + "stop_nm": "남부초교후문", + "ycode": "37.486452", + "stop_no": "21305", + "xcode": "126.922237", + "stop_type": "일반차로", + "node_id": "120000203", + "nxtStn": "신사동주민센터.신사시장" + }, + { + "stop_nm": "청담고시원", + "ycode": "37.471038", + "stop_no": "21309", + "xcode": "126.940757", + "stop_type": "일반차로", + "node_id": "120000207", + "nxtStn": "우리슈퍼" + }, + { + "stop_nm": "우리슈퍼", + "ycode": "37.472345", + "stop_no": "21310", + "xcode": "126.939338", + "stop_type": "일반차로", + "node_id": "120000208", + "nxtStn": "명호고시원" + }, + { + "stop_nm": "명호고시원", + "ycode": "37.473505", + "stop_no": "21311", + "xcode": "126.938728", + "stop_type": "일반차로", + "node_id": "120000209", + "nxtStn": "동작마트" + }, + { + "stop_nm": "동작마트", + "ycode": "37.474283", + "stop_no": "21312", + "xcode": "126.93835", + "stop_type": "일반차로", + "node_id": "120000210", + "nxtStn": "제일성도교회" + }, + { + "stop_nm": "제일성도교회", + "ycode": "37.4748334585", + "stop_no": "21313", + "xcode": "126.9404392562", + "stop_type": "일반차로", + "node_id": "120000211", + "nxtStn": "동작마트" + }, + { + "stop_nm": "삼양슈퍼", + "ycode": "37.4750244163", + "stop_no": "21314", + "xcode": "126.9420977509", + "stop_type": "일반차로", + "node_id": "120000212", + "nxtStn": "제일성도교회" + }, + { + "stop_nm": "금성마트용천사", + "ycode": "37.4750292676", + "stop_no": "21315", + "xcode": "126.942807788", + "stop_type": "일반차로", + "node_id": "120000213", + "nxtStn": "삼양슈퍼" + }, + { + "stop_nm": "삼양슈퍼", + "ycode": "37.4749343135", + "stop_no": "21316", + "xcode": "126.9421136493", + "stop_type": "일반차로", + "node_id": "120000214", + "nxtStn": "금성마트용천사" + }, + { + "stop_nm": "제일성도교회", + "ycode": "37.4746577628", + "stop_no": "21317", + "xcode": "126.9404789678", + "stop_type": "일반차로", + "node_id": "120000215", + "nxtStn": "삼양슈퍼" + }, + { + "stop_nm": "동작마트", + "ycode": "37.474938", + "stop_no": "21318", + "xcode": "126.938032", + "stop_type": "일반차로", + "node_id": "120000216", + "nxtStn": "쑥고개입구" + }, + { + "stop_nm": "고시촌입구", + "ycode": "37.470302", + "stop_no": "21319", + "xcode": "126.93784", + "stop_type": "일반차로", + "node_id": "120000217", + "nxtStn": "대학동치안센터" + }, + { + "stop_nm": "대학동치안센터", + "ycode": "37.46904", + "stop_no": "21320", + "xcode": "126.93765", + "stop_type": "일반차로", + "node_id": "120000218", + "nxtStn": "대학동노인정" + }, + { + "stop_nm": "대학동노인정", + "ycode": "37.46735", + "stop_no": "21321", + "xcode": "126.93757", + "stop_type": "일반차로", + "node_id": "120000219", + "nxtStn": "금호타운아파트" + }, + { + "stop_nm": "금호타운아파트", + "ycode": "37.46574", + "stop_no": "21322", + "xcode": "126.93766", + "stop_type": "일반차로", + "node_id": "120000220", + "nxtStn": "대학동샘말공원" + }, + { + "stop_nm": "금호타운아파트", + "ycode": "37.46571", + "stop_no": "21327", + "xcode": "126.93783", + "stop_type": "일반차로", + "node_id": "120000225", + "nxtStn": "대학동노인정" + }, + { + "stop_nm": "대학동노인정", + "ycode": "37.4671591135", + "stop_no": "21328", + "xcode": "126.9376868773", + "stop_type": "일반차로", + "node_id": "120000226", + "nxtStn": "대학동치안센터" + }, + { + "stop_nm": "대학동치안센터", + "ycode": "37.4689379452", + "stop_no": "21329", + "xcode": "126.9377735833", + "stop_type": "일반차로", + "node_id": "120000227", + "nxtStn": "대학동고시촌입구" + }, + { + "stop_nm": "서울대입구역", + "ycode": "37.4807005941", + "stop_no": "21330", + "xcode": "126.9524440164", + "stop_type": "일반차로", + "node_id": "120000228", + "nxtStn": "관악경찰서.관악소방서" + }, + { + "stop_nm": "청림동현대아파트", + "ycode": "37.491334", + "stop_no": "21332", + "xcode": "126.957561", + "stop_type": "일반차로", + "node_id": "120000230", + "nxtStn": "성현동동아아파트" + }, + { + "stop_nm": "청림동현대아파트", + "ycode": "37.491948", + "stop_no": "21333", + "xcode": "126.959384", + "stop_type": "일반차로", + "node_id": "120000231", + "nxtStn": "청림동현대아파트" + }, + { + "stop_nm": "보성운수기종점", + "ycode": "37.464132", + "stop_no": "21335", + "xcode": "126.919021", + "stop_type": "일반차로", + "node_id": "120000233", + "nxtStn": "신림복지관앞" + }, + { + "stop_nm": "난곡공영차고지", + "ycode": "37.463938", + "stop_no": "21337", + "xcode": "126.918963", + "stop_type": "일반차로", + "node_id": "120000235", + "nxtStn": "난곡종점" + }, + { + "stop_nm": "한남운수대학동차고지", + "ycode": "37.4703789731", + "stop_no": "21338", + "xcode": "126.9398175867", + "stop_type": "일반차로", + "node_id": "120000236", + "nxtStn": "서울산업정보학교.삼성교" + }, + { + "stop_nm": "한남운수대학동차고지", + "ycode": "37.470195", + "stop_no": "21339", + "xcode": "126.93969", + "stop_type": "일반차로", + "node_id": "120000237", + "nxtStn": "종점" + }, + { + "stop_nm": "제2공학관", + "ycode": "37.4480848677", + "stop_no": "21340", + "xcode": "126.9521425546", + "stop_type": "일반차로", + "node_id": "120000238", + "nxtStn": "유회진학술정보관.제1공학관" + }, + { + "stop_nm": "건설환경종합연구소앞", + "ycode": "37.447203", + "stop_no": "21341", + "xcode": "126.949693", + "stop_type": "일반차로", + "node_id": "110000654", + "nxtStn": "제2공학관" + }, + { + "stop_nm": "봉일시장", + "ycode": "37.485532", + "stop_no": "21342", + "xcode": "126.937288", + "stop_type": "일반차로", + "node_id": "120000420", + "nxtStn": "은천교입구" + }, + { + "stop_nm": "보라매공영주차장", + "ycode": "37.4887044852", + "stop_no": "21343", + "xcode": "126.9342323482", + "stop_type": "일반차로", + "node_id": "120000419", + "nxtStn": "성원홈아파트" + }, + { + "stop_nm": "당곡중고교", + "ycode": "37.4911229426", + "stop_no": "21344", + "xcode": "126.9340425015", + "stop_type": "일반차로", + "node_id": "120000417", + "nxtStn": "연희빌라" + }, + { + "stop_nm": "연희빌라", + "ycode": "37.492583", + "stop_no": "21345", + "xcode": "126.933808", + "stop_type": "일반차로", + "node_id": "120000415", + "nxtStn": "재넘이고개" + }, + { + "stop_nm": "재넘이고개", + "ycode": "37.492825", + "stop_no": "21346", + "xcode": "126.935368", + "stop_type": "일반차로", + "node_id": "120000413", + "nxtStn": "연희빌라" + }, + { + "stop_nm": "연희빌라", + "ycode": "37.49253", + "stop_no": "21347", + "xcode": "126.933738", + "stop_type": "일반차로", + "node_id": "120000414", + "nxtStn": "당곡중고교" + }, + { + "stop_nm": "당곡중고교", + "ycode": "37.4911327656", + "stop_no": "21348", + "xcode": "126.9338830387", + "stop_type": "일반차로", + "node_id": "120000416", + "nxtStn": "성원홈아파트" + }, + { + "stop_nm": "보라매공영주차장", + "ycode": "37.4887260569", + "stop_no": "21349", + "xcode": "126.9341339458", + "stop_type": "일반차로", + "node_id": "120000418", + "nxtStn": "은천교입구" + }, + { + "stop_nm": "신림사거리.신림역", + "ycode": "37.4841991011", + "stop_no": "21350", + "xcode": "126.9282759755", + "stop_type": "일반차로", + "node_id": "120000421", + "nxtStn": "남부초등학교" + }, + { + "stop_nm": "신사동주민센터.신사시장", + "ycode": "37.4855925982", + "stop_no": "21351", + "xcode": "126.9178057215", + "stop_type": "일반차로", + "node_id": "120000424", + "nxtStn": "건영유치원" + }, + { + "stop_nm": "건영유치원", + "ycode": "37.48505", + "stop_no": "21352", + "xcode": "126.914593", + "stop_type": "일반차로", + "node_id": "120000423", + "nxtStn": "신대방역" + }, + { + "stop_nm": "신대방역", + "ycode": "37.4864484117", + "stop_no": "21353", + "xcode": "126.9136841115", + "stop_type": "일반차로", + "node_id": "120000422", + "nxtStn": "신사동진양빌딩앞" + }, + { + "stop_nm": "난곡사거리", + "ycode": "37.4832740413", + "stop_no": "21354", + "xcode": "126.9143778247", + "stop_type": "일반차로", + "node_id": "120900115", + "nxtStn": "신사시장.선한이웃교회" + }, + { + "stop_nm": "난곡사거리", + "ycode": "37.48277", + "stop_no": "21355", + "xcode": "126.914237", + "stop_type": "일반차로", + "node_id": "120900204", + "nxtStn": "신림청소년독서실.신림체육센터" + }, + { + "stop_nm": "신대방역", + "ycode": "37.4863653637", + "stop_no": "21356", + "xcode": "126.9134840538", + "stop_type": "일반차로", + "node_id": "120000438", + "nxtStn": "신사시장.평화교회" + }, + { + "stop_nm": "신사시장.평화교회", + "ycode": "37.484465", + "stop_no": "21357", + "xcode": "126.913877", + "stop_type": "일반차로", + "node_id": "120000437", + "nxtStn": "난곡사거리" + }, + { + "stop_nm": "신사시장.선한이웃교회", + "ycode": "37.4845275146", + "stop_no": "21358", + "xcode": "126.9140379945", + "stop_type": "일반차로", + "node_id": "120000436", + "nxtStn": "신대방역" + }, + { + "stop_nm": "신림청소년독서실.신림체육센터", + "ycode": "37.4804004301", + "stop_no": "21359", + "xcode": "126.9148890933", + "stop_type": "일반차로", + "node_id": "120000439", + "nxtStn": "관악구보훈회관.신림푸르지오" + }, + { + "stop_nm": "신사동진양빌딩앞", + "ycode": "37.487695", + "stop_no": "21360", + "xcode": "126.914612", + "stop_type": "일반차로", + "node_id": "120000446", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "호림박물관", + "ycode": "37.4823672056", + "stop_no": "21361", + "xcode": "126.918618871", + "stop_type": "일반차로", + "node_id": "120000445", + "nxtStn": "남서울중학교.성보중고등학교" + }, + { + "stop_nm": "보성운수차고지맞은편", + "ycode": "37.4646708176", + "stop_no": "21363", + "xcode": "126.9192632133", + "stop_type": "일반차로", + "node_id": "120000447", + "nxtStn": "신림복지관앞" + }, + { + "stop_nm": "조원아파트", + "ycode": "37.484088", + "stop_no": "21364", + "xcode": "126.90782", + "stop_type": "일반차로", + "node_id": "120000451", + "nxtStn": "조원동기점" + }, + { + "stop_nm": "성원홈아파트", + "ycode": "37.4902310566", + "stop_no": "21365", + "xcode": "126.9344142103", + "stop_type": "일반차로", + "node_id": "120000450", + "nxtStn": "당곡중고교" + }, + { + "stop_nm": "성원홈아파트", + "ycode": "37.4902039601", + "stop_no": "21366", + "xcode": "126.9343000164", + "stop_type": "일반차로", + "node_id": "120000449", + "nxtStn": "보라매공영주차장" + }, + { + "stop_nm": "신림빗물펌프장", + "ycode": "37.484773", + "stop_no": "21367", + "xcode": "126.907633", + "stop_type": "일반차로", + "node_id": "120000455", + "nxtStn": "신대방역" + }, + { + "stop_nm": "봉천사거리.위버폴리스", + "ycode": "37.4827934095", + "stop_no": "21368", + "xcode": "126.9535723145", + "stop_type": "일반차로", + "node_id": "120000456", + "nxtStn": "관악구청" + }, + { + "stop_nm": "서원동승리교앞", + "ycode": "37.481586", + "stop_no": "21369", + "xcode": "126.929906", + "stop_type": "일반차로", + "node_id": "120000457", + "nxtStn": "서원역" + }, + { + "stop_nm": "서울난향초등학교.난향동주민센터", + "ycode": "37.4627367836", + "stop_no": "21370", + "xcode": "126.9188888522", + "stop_type": "일반차로", + "node_id": "120000458", + "nxtStn": "관악산휴먼시아.신림푸르지오2차" + }, + { + "stop_nm": "은천길입구", + "ycode": "37.486647", + "stop_no": "21371", + "xcode": "126.93361", + "stop_type": "일반차로", + "node_id": "120000459", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "대학동샘말공원", + "ycode": "37.4651382749", + "stop_no": "21372", + "xcode": "126.9383464994", + "stop_type": "일반차로", + "node_id": "120000664", + "nxtStn": "종점" + }, + { + "stop_nm": "서울대학교.치과병원.동물병원", + "ycode": "37.4692744185", + "stop_no": "21373", + "xcode": "126.9520815656", + "stop_type": "일반차로", + "node_id": "120000665", + "nxtStn": "서울여상.서울문영여중고앞" + }, + { + "stop_nm": "서울대학교.치과병원.동물병원", + "ycode": "37.470034", + "stop_no": "21374", + "xcode": "126.951937", + "stop_type": "일반차로", + "node_id": "120000668", + "nxtStn": "서울대학교" + }, + { + "stop_nm": "신림2교", + "ycode": "37.477526", + "stop_no": "21375", + "xcode": "126.93678", + "stop_type": "일반차로", + "node_id": "120000669", + "nxtStn": "서원역1번출구" + }, + { + "stop_nm": "서울대학교", + "ycode": "37.4676609636", + "stop_no": "21376", + "xcode": "126.9496319032", + "stop_type": "일반차로", + "node_id": "120000670", + "nxtStn": "신림중.삼성고.관악아트홀·도서관" + }, + { + "stop_nm": "신림역2번출구", + "ycode": "37.4833220413", + "stop_no": "21377", + "xcode": "126.929897162", + "stop_type": "일반차로", + "node_id": "119000314", + "nxtStn": "신림동별빛거리입구" + }, + { + "stop_nm": "벽산블루밍아파트종점", + "ycode": "37.492105", + "stop_no": "21378", + "xcode": "126.944636", + "stop_type": "일반차로", + "node_id": "119000315", + "nxtStn": "벽산블루밍벽산아파트303동앞" + }, + { + "stop_nm": "청림동현대아파트입구", + "ycode": "37.491076", + "stop_no": "21379", + "xcode": "126.957416", + "stop_type": "일반차로", + "node_id": "120000673", + "nxtStn": "청림동현대아파트" + }, + { + "stop_nm": "아카시아마을.민방위교육장", + "ycode": "37.4720765376", + "stop_no": "21501", + "xcode": "126.9110629666", + "stop_type": "마을버스", + "node_id": "120900083", + "nxtStn": "뉴서울아파트" + }, + { + "stop_nm": "난향동공영차고지", + "ycode": "37.4634784081", + "stop_no": "21502", + "xcode": "126.9189072689", + "stop_type": "마을버스", + "node_id": "120900082", + "nxtStn": "서울난향초등학교.난향동주민센터" + }, + { + "stop_nm": "청림동푸르지오아파트121동앞", + "ycode": "37.4855867055", + "stop_no": "21503", + "xcode": "126.9606640782", + "stop_type": "마을버스", + "node_id": "120900081", + "nxtStn": "푸르지오122동" + }, + { + "stop_nm": "보명사.법화사", + "ycode": "37.4760734942", + "stop_no": "21504", + "xcode": "126.9248318555", + "stop_type": "마을버스", + "node_id": "120900066", + "nxtStn": "승산밝은빛교회.구무림비디오" + }, + { + "stop_nm": "현대아파트후문", + "ycode": "37.4752551368", + "stop_no": "21505", + "xcode": "126.9304689235", + "stop_type": "마을버스", + "node_id": "120900080", + "nxtStn": "코사마트" + }, + { + "stop_nm": "GS편의점.소망유통", + "ycode": "37.4693187251", + "stop_no": "21506", + "xcode": "126.9686576958", + "stop_type": "마을버스", + "node_id": "120900079", + "nxtStn": "인수당약국" + }, + { + "stop_nm": "국사봉", + "ycode": "37.491065", + "stop_no": "21507", + "xcode": "126.941744", + "stop_type": "마을버스", + "node_id": "120900078", + "nxtStn": "벽산아파트후문.만물슈퍼" + }, + { + "stop_nm": "봉천역", + "ycode": "37.483597", + "stop_no": "21508", + "xcode": "126.940902", + "stop_type": "마을버스", + "node_id": "120900077", + "nxtStn": "신협" + }, + { + "stop_nm": "뉴서울아파트", + "ycode": "37.471416", + "stop_no": "21509", + "xcode": "126.911122", + "stop_type": "마을버스", + "node_id": "120900076", + "nxtStn": "쌍용아파트후문" + }, + { + "stop_nm": "푸르지오122동", + "ycode": "37.4860981959", + "stop_no": "21511", + "xcode": "126.9596641783", + "stop_type": "마을버스", + "node_id": "120900074", + "nxtStn": "관악로입구" + }, + { + "stop_nm": "승산밝은빛교회.구무림비디오", + "ycode": "37.4757279844", + "stop_no": "21512", + "xcode": "126.9242273045", + "stop_type": "마을버스", + "node_id": "120900065", + "nxtStn": "한마음슈퍼" + }, + { + "stop_nm": "코사마트", + "ycode": "37.4762191632", + "stop_no": "21513", + "xcode": "126.9302023262", + "stop_type": "마을버스", + "node_id": "120900073", + "nxtStn": "미성빌라" + }, + { + "stop_nm": "인수당약국", + "ycode": "37.4701674287", + "stop_no": "21514", + "xcode": "126.9681361509", + "stop_type": "마을버스", + "node_id": "120900072", + "nxtStn": "우리현대마트" + }, + { + "stop_nm": "벽산아파트후문.만물슈퍼", + "ycode": "37.4907882284", + "stop_no": "21515", + "xcode": "126.9418503621", + "stop_type": "마을버스", + "node_id": "120900071", + "nxtStn": "우리슈퍼" + }, + { + "stop_nm": "신협", + "ycode": "37.4831950485", + "stop_no": "21517", + "xcode": "126.9465737839", + "stop_type": "마을버스", + "node_id": "120900175", + "nxtStn": "두산아파트입구" + }, + { + "stop_nm": "쌍용아파트후문", + "ycode": "37.4726771928", + "stop_no": "21518", + "xcode": "126.9117541837", + "stop_type": "마을버스", + "node_id": "120900068", + "nxtStn": "신라놀이터" + }, + { + "stop_nm": "관악로입구", + "ycode": "37.4864265271", + "stop_no": "21520", + "xcode": "126.9580220655", + "stop_type": "마을버스", + "node_id": "120900067", + "nxtStn": "봉원중학교.행운동우성아파트" + }, + { + "stop_nm": "한마음슈퍼", + "ycode": "37.4753175115", + "stop_no": "21521", + "xcode": "126.9234984545", + "stop_type": "마을버스", + "node_id": "120900064", + "nxtStn": "충남슈퍼.생각대로통신" + }, + { + "stop_nm": "미성빌라", + "ycode": "37.4770770731", + "stop_no": "21522", + "xcode": "126.9302987658", + "stop_type": "마을버스", + "node_id": "120900069", + "nxtStn": "혜성세탁소" + }, + { + "stop_nm": "우리현대마트", + "ycode": "37.4710782857", + "stop_no": "21523", + "xcode": "126.9675399492", + "stop_type": "마을버스", + "node_id": "120900063", + "nxtStn": "동인약국.인헌중고입구" + }, + { + "stop_nm": "우리슈퍼", + "ycode": "37.4903837611", + "stop_no": "21524", + "xcode": "126.9421119066", + "stop_type": "마을버스", + "node_id": "120900062", + "nxtStn": "수정슈퍼" + }, + { + "stop_nm": "두산아파트입구", + "ycode": "37.4847729966", + "stop_no": "21526", + "xcode": "126.9468248253", + "stop_type": "마을버스", + "node_id": "120900061", + "nxtStn": "현대시장" + }, + { + "stop_nm": "벽산아파트501동.적십자센터", + "ycode": "37.4929053524", + "stop_no": "21527", + "xcode": "126.9465804386", + "stop_type": "마을버스", + "node_id": "120900060", + "nxtStn": "벽산아파트" + }, + { + "stop_nm": "신라놀이터", + "ycode": "37.4732481844", + "stop_no": "21528", + "xcode": "126.9125494627", + "stop_type": "마을버스", + "node_id": "120900059", + "nxtStn": "두영아파트" + }, + { + "stop_nm": "충남슈퍼.생각대로통신", + "ycode": "37.4749187609", + "stop_no": "21531", + "xcode": "126.9227888212", + "stop_type": "마을버스", + "node_id": "120900058", + "nxtStn": "제일교회입구" + }, + { + "stop_nm": "혜성세탁소", + "ycode": "37.4773834603", + "stop_no": "21532", + "xcode": "126.9303177027", + "stop_type": "마을버스", + "node_id": "120900057", + "nxtStn": "GS편의점" + }, + { + "stop_nm": "동인약국.인헌중고입구", + "ycode": "37.4719720293", + "stop_no": "21533", + "xcode": "126.9669821806", + "stop_type": "마을버스", + "node_id": "120900056", + "nxtStn": "오리사랑" + }, + { + "stop_nm": "수정슈퍼", + "ycode": "37.4898025437", + "stop_no": "21534", + "xcode": "126.9421010465", + "stop_type": "마을버스", + "node_id": "120900055", + "nxtStn": "서울관광고등학교" + }, + { + "stop_nm": "현대시장", + "ycode": "37.4870735721", + "stop_no": "21536", + "xcode": "126.9469475848", + "stop_type": "마을버스", + "node_id": "120900054", + "nxtStn": "구암초등학교정문" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.4922931588", + "stop_no": "21537", + "xcode": "126.9438938598", + "stop_type": "마을버스", + "node_id": "120900053", + "nxtStn": "국사봉중학교" + }, + { + "stop_nm": "두영아파트", + "ycode": "37.474298874", + "stop_no": "21538", + "xcode": "126.9137749689", + "stop_type": "마을버스", + "node_id": "120900052", + "nxtStn": "미성중학교" + }, + { + "stop_nm": "삼성산주공정문", + "ycode": "37.461062865", + "stop_no": "21539", + "xcode": "126.9262870497", + "stop_type": "마을버스", + "node_id": "120900051", + "nxtStn": "삼성산주공307동앞" + }, + { + "stop_nm": "서울대입구역2호선", + "ycode": "37.4824664116", + "stop_no": "21540", + "xcode": "126.9538359816", + "stop_type": "마을버스", + "node_id": "120900050", + "nxtStn": "관악프라자" + }, + { + "stop_nm": "제일교회입구", + "ycode": "37.4745263191", + "stop_no": "21541", + "xcode": "126.9220871034", + "stop_type": "마을버스", + "node_id": "120900049", + "nxtStn": "남강중고등학교입구" + }, + { + "stop_nm": "GS편의점", + "ycode": "37.4784379432", + "stop_no": "21542", + "xcode": "126.93063897", + "stop_type": "마을버스", + "node_id": "120900048", + "nxtStn": "동산교회" + }, + { + "stop_nm": "오리사랑", + "ycode": "37.4737417629", + "stop_no": "21543", + "xcode": "126.9668389441", + "stop_type": "마을버스", + "node_id": "120900047", + "nxtStn": "인헌연세약국" + }, + { + "stop_nm": "서울관광고등학교", + "ycode": "37.4890752374", + "stop_no": "21544", + "xcode": "126.9418663911", + "stop_type": "마을버스", + "node_id": "120900046", + "nxtStn": "산성교회" + }, + { + "stop_nm": "구암초등학교정문", + "ycode": "37.4881663803", + "stop_no": "21545", + "xcode": "126.9464345431", + "stop_type": "마을버스", + "node_id": "120900045", + "nxtStn": "방앗간" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.4796863627", + "stop_no": "21546", + "xcode": "126.9637777506", + "stop_type": "마을버스", + "node_id": "120900044", + "nxtStn": "낙성대역" + }, + { + "stop_nm": "미성중학교", + "ycode": "37.4755708036", + "stop_no": "21547", + "xcode": "126.9131844409", + "stop_type": "마을버스", + "node_id": "120900043", + "nxtStn": "라이프아파트" + }, + { + "stop_nm": "삼성산주공307동앞", + "ycode": "37.4617159167", + "stop_no": "21548", + "xcode": "126.9273354547", + "stop_type": "마을버스", + "node_id": "120900042", + "nxtStn": "2단지종합상가" + }, + { + "stop_nm": "관악프라자", + "ycode": "37.4835760192", + "stop_no": "21549", + "xcode": "126.954733128", + "stop_type": "마을버스", + "node_id": "120900041", + "nxtStn": "봉원중학교.행운동우성아파트" + }, + { + "stop_nm": "남강중고등학교입구", + "ycode": "37.4741455935", + "stop_no": "21550", + "xcode": "126.9213944256", + "stop_type": "마을버스", + "node_id": "120900040", + "nxtStn": "애동유치원" + }, + { + "stop_nm": "동산교회", + "ycode": "37.4790015356", + "stop_no": "21551", + "xcode": "126.929792687", + "stop_type": "마을버스", + "node_id": "120900039", + "nxtStn": "서강약국" + }, + { + "stop_nm": "인헌연세약국", + "ycode": "37.4750663629", + "stop_no": "21552", + "xcode": "126.9667445158", + "stop_type": "마을버스", + "node_id": "120900038", + "nxtStn": "인헌시장입구" + }, + { + "stop_nm": "산성교회", + "ycode": "37.4886722866", + "stop_no": "21553", + "xcode": "126.9415478054", + "stop_type": "마을버스", + "node_id": "120900037", + "nxtStn": "경천교회" + }, + { + "stop_nm": "방앗간", + "ycode": "37.4899711367", + "stop_no": "21555", + "xcode": "126.9460928644", + "stop_type": "마을버스", + "node_id": "120900035", + "nxtStn": "성현동주민센터" + }, + { + "stop_nm": "낙성대역", + "ycode": "37.4777900122", + "stop_no": "21556", + "xcode": "126.9624207194", + "stop_type": "마을버스", + "node_id": "120900034", + "nxtStn": "사랑의병원" + }, + { + "stop_nm": "라이프아파트", + "ycode": "37.4771733447", + "stop_no": "21557", + "xcode": "126.9136959114", + "stop_type": "마을버스", + "node_id": "120900033", + "nxtStn": "신림고등학교" + }, + { + "stop_nm": "2단지종합상가", + "ycode": "37.463576", + "stop_no": "21558", + "xcode": "126.926319", + "stop_type": "마을버스", + "node_id": "120900032", + "nxtStn": "203동앞" + }, + { + "stop_nm": "애동유치원", + "ycode": "37.4742691695", + "stop_no": "21560", + "xcode": "126.9202354038", + "stop_type": "마을버스", + "node_id": "120900031", + "nxtStn": "세이브마트" + }, + { + "stop_nm": "서강약국", + "ycode": "37.4794709098", + "stop_no": "21561", + "xcode": "126.9281244578", + "stop_type": "마을버스", + "node_id": "120900030", + "nxtStn": "동부아파트" + }, + { + "stop_nm": "인헌시장입구", + "ycode": "37.47542833", + "stop_no": "21562", + "xcode": "126.9657720013", + "stop_type": "마을버스", + "node_id": "120900029", + "nxtStn": "파리바게트.낙성대지하철" + }, + { + "stop_nm": "경천교회", + "ycode": "37.4880274638", + "stop_no": "21563", + "xcode": "126.9404796696", + "stop_type": "마을버스", + "node_id": "120900028", + "nxtStn": "국회단지입구" + }, + { + "stop_nm": "대학원생활관", + "ycode": "37.4623361202", + "stop_no": "21564", + "xcode": "126.9573923129", + "stop_type": "마을버스", + "node_id": "120900027", + "nxtStn": "학부생활관" + }, + { + "stop_nm": "성현동주민센터", + "ycode": "37.489861", + "stop_no": "21565", + "xcode": "126.947285", + "stop_type": "마을버스", + "node_id": "120900026", + "nxtStn": "구암어린이집앞" + }, + { + "stop_nm": "사랑의병원", + "ycode": "37.4796244089", + "stop_no": "21566", + "xcode": "126.9564304426", + "stop_type": "마을버스", + "node_id": "120900025", + "nxtStn": "낙성대역" + }, + { + "stop_nm": "신림고등학교", + "ycode": "37.4776805895", + "stop_no": "21567", + "xcode": "126.9160901041", + "stop_type": "마을버스", + "node_id": "120900024", + "nxtStn": "난우초등학교" + }, + { + "stop_nm": "203동앞", + "ycode": "37.4644446975", + "stop_no": "21568", + "xcode": "126.9264976658", + "stop_type": "마을버스", + "node_id": "120900023", + "nxtStn": "광신고등학교.주공1단지" + }, + { + "stop_nm": "관악로입구", + "ycode": "37.4862759617", + "stop_no": "21569", + "xcode": "126.9577948573", + "stop_type": "마을버스", + "node_id": "120900022", + "nxtStn": "우성아파트103동" + }, + { + "stop_nm": "세이브마트", + "ycode": "37.4741762919", + "stop_no": "21570", + "xcode": "126.918818829", + "stop_type": "마을버스", + "node_id": "120900021", + "nxtStn": "난우초등학교" + }, + { + "stop_nm": "동부아파트", + "ycode": "37.4813012413", + "stop_no": "21571", + "xcode": "126.9284313945", + "stop_type": "마을버스", + "node_id": "120900020", + "nxtStn": "삼모타워앞.건강보험관악지사" + }, + { + "stop_nm": "파리바게트.낙성대지하철", + "ycode": "37.476139", + "stop_no": "21572", + "xcode": "126.964373", + "stop_type": "마을버스", + "node_id": "120900189", + "nxtStn": "인헌초등학교" + }, + { + "stop_nm": "국회단지입구", + "ycode": "37.4865995241", + "stop_no": "21573", + "xcode": "126.9393194579", + "stop_type": "마을버스", + "node_id": "120900019", + "nxtStn": "은천교앞" + }, + { + "stop_nm": "학부생활관", + "ycode": "37.463749", + "stop_no": "21574", + "xcode": "126.958073", + "stop_type": "마을버스", + "node_id": "120900196", + "nxtStn": "BK국제관" + }, + { + "stop_nm": "구암어린이집앞", + "ycode": "37.4909558362", + "stop_no": "21575", + "xcode": "126.9476358057", + "stop_type": "마을버스", + "node_id": "120900018", + "nxtStn": "관악드림타운2단지.관악선의복지관" + }, + { + "stop_nm": "낙성대역", + "ycode": "37.4778756928", + "stop_no": "21576", + "xcode": "126.9626592502", + "stop_type": "마을버스", + "node_id": "120900017", + "nxtStn": "현대홈타운아파트" + }, + { + "stop_nm": "난곡터널", + "ycode": "37.478035", + "stop_no": "21578", + "xcode": "126.918397", + "stop_type": "마을버스", + "node_id": "120900016", + "nxtStn": "신원동치안센터" + }, + { + "stop_nm": "광신고등학교.주공1단지", + "ycode": "37.466028", + "stop_no": "21579", + "xcode": "126.927109", + "stop_type": "마을버스", + "node_id": "120900015", + "nxtStn": "유완약국.성림교회" + }, + { + "stop_nm": "우성아파트103동", + "ycode": "37.4860917446", + "stop_no": "21580", + "xcode": "126.9592457839", + "stop_type": "마을버스", + "node_id": "120900014", + "nxtStn": "행운동우성아파트109동앞" + }, + { + "stop_nm": "난우초등학교", + "ycode": "37.475947114", + "stop_no": "21581", + "xcode": "126.917730357", + "stop_type": "마을버스", + "node_id": "120900013", + "nxtStn": "신림고등학교" + }, + { + "stop_nm": "삼모타워앞.건강보험관악지사", + "ycode": "37.4824006069", + "stop_no": "21582", + "xcode": "126.9284597454", + "stop_type": "마을버스", + "node_id": "120900012", + "nxtStn": "봉림교" + }, + { + "stop_nm": "인헌초등학교", + "ycode": "37.4771072368", + "stop_no": "21583", + "xcode": "126.9617606091", + "stop_type": "마을버스", + "node_id": "120900011", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "은천교앞", + "ycode": "37.4864003668", + "stop_no": "21584", + "xcode": "126.9358819578", + "stop_type": "마을버스", + "node_id": "120900010", + "nxtStn": "신림성모성당앞" + }, + { + "stop_nm": "BK국제관", + "ycode": "37.465448", + "stop_no": "21585", + "xcode": "126.95791", + "stop_type": "마을버스", + "node_id": "120900009", + "nxtStn": "가족생활동" + }, + { + "stop_nm": "관악드림타운2단지.관악선의복지관", + "ycode": "37.4919395356", + "stop_no": "21586", + "xcode": "126.9469497976", + "stop_type": "마을버스", + "node_id": "120900008", + "nxtStn": "구암중학교" + }, + { + "stop_nm": "현대홈타운아파트", + "ycode": "37.4791296644", + "stop_no": "21587", + "xcode": "126.9634796509", + "stop_type": "마을버스", + "node_id": "120900007", + "nxtStn": "동작고등학교" + }, + { + "stop_nm": "갑을아파트", + "ycode": "37.489754", + "stop_no": "21588", + "xcode": "126.922047", + "stop_type": "마을버스", + "node_id": "120900194", + "nxtStn": "롯데백화점" + }, + { + "stop_nm": "신원동치안센터", + "ycode": "37.4790908751", + "stop_no": "21589", + "xcode": "126.9270325662", + "stop_type": "마을버스", + "node_id": "120900006", + "nxtStn": "서강약국" + }, + { + "stop_nm": "유완약국.성림교회", + "ycode": "37.4668475117", + "stop_no": "21590", + "xcode": "126.9300283425", + "stop_type": "마을버스", + "node_id": "120900197", + "nxtStn": "삼성전자" + }, + { + "stop_nm": "행운동우성아파트109동앞", + "ycode": "37.485287", + "stop_no": "21591", + "xcode": "126.961219", + "stop_type": "마을버스", + "node_id": "120900005", + "nxtStn": "종점" + }, + { + "stop_nm": "신림고등학교", + "ycode": "37.477891", + "stop_no": "21592", + "xcode": "126.916073", + "stop_type": "마을버스", + "node_id": "120900199", + "nxtStn": "신림청소년독서실.신림체육센터" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4778081338", + "stop_no": "21593", + "xcode": "126.9599795717", + "stop_type": "마을버스", + "node_id": "120900200", + "nxtStn": "낙성대동시장입구" + }, + { + "stop_nm": "신림성모성당앞", + "ycode": "37.4870744065", + "stop_no": "21594", + "xcode": "126.9326664612", + "stop_type": "마을버스", + "node_id": "120900004", + "nxtStn": "관악우체국" + }, + { + "stop_nm": "가족생활동", + "ycode": "37.466978", + "stop_no": "21595", + "xcode": "126.957872", + "stop_type": "마을버스", + "node_id": "120900003", + "nxtStn": "호암교수회관" + }, + { + "stop_nm": "롯데백화점", + "ycode": "37.4904278745", + "stop_no": "21597", + "xcode": "126.9244827354", + "stop_type": "마을버스", + "node_id": "120900002", + "nxtStn": "해태타워앞" + }, + { + "stop_nm": "삼성전자", + "ycode": "37.4676943096", + "stop_no": "21598", + "xcode": "126.931084151", + "stop_type": "마을버스", + "node_id": "120900001", + "nxtStn": "삼성동시장" + }, + { + "stop_nm": "신림청소년독서실.신림체육센터", + "ycode": "37.4804996928", + "stop_no": "21599", + "xcode": "126.9148759246", + "stop_type": "마을버스", + "node_id": "120900084", + "nxtStn": "난곡사거리" + }, + { + "stop_nm": "낙성대동시장입구", + "ycode": "37.4787543427", + "stop_no": "21600", + "xcode": "126.9575345056", + "stop_type": "마을버스", + "node_id": "120900085", + "nxtStn": "사랑의병원" + }, + { + "stop_nm": "관악우체국", + "ycode": "37.485139", + "stop_no": "21601", + "xcode": "126.934147", + "stop_type": "마을버스", + "node_id": "120900086", + "nxtStn": "신림역" + }, + { + "stop_nm": "신림고등학교", + "ycode": "37.4779810811", + "stop_no": "21602", + "xcode": "126.9168167167", + "stop_type": "마을버스", + "node_id": "120900207", + "nxtStn": "라이프아파트" + }, + { + "stop_nm": "신림사거리.신원시장", + "ycode": "37.483709205", + "stop_no": "21604", + "xcode": "126.9273005902", + "stop_type": "가로변전일", + "node_id": "120000241", + "nxtStn": "신림동별빛거리입구" + }, + { + "stop_nm": "삼성동시장", + "ycode": "37.4692039821", + "stop_no": "21649", + "xcode": "126.931631082", + "stop_type": "마을버스", + "node_id": "120900087", + "nxtStn": "서울대벤처타운역.삼성동시장입구" + }, + { + "stop_nm": "난곡사거리", + "ycode": "37.4823011931", + "stop_no": "21650", + "xcode": "126.9144634448", + "stop_type": "마을버스", + "node_id": "120900088", + "nxtStn": "신대방역" + }, + { + "stop_nm": "신림역", + "ycode": "37.4854883196", + "stop_no": "21651", + "xcode": "126.9296506944", + "stop_type": "마을버스", + "node_id": "120900089", + "nxtStn": "당곡역.당곡사거리" + }, + { + "stop_nm": "인헌아파트", + "ycode": "37.468020748", + "stop_no": "21663", + "xcode": "126.9612871638", + "stop_type": "마을버스", + "node_id": "120900090", + "nxtStn": "호암교수회관" + }, + { + "stop_nm": "서울대벤처타운역.삼성동시장입구", + "ycode": "37.4718550422", + "stop_no": "21675", + "xcode": "126.9332126245", + "stop_type": "마을버스", + "node_id": "120900091", + "nxtStn": "서울대벤처타운역1번출구" + }, + { + "stop_nm": "동부아파트", + "ycode": "37.4813200328", + "stop_no": "21677", + "xcode": "126.9282142759", + "stop_type": "마을버스", + "node_id": "120900092", + "nxtStn": "서강약국" + }, + { + "stop_nm": "낙성대역", + "ycode": "37.4763210574", + "stop_no": "21678", + "xcode": "126.9648557613", + "stop_type": "마을버스", + "node_id": "120900093", + "nxtStn": "인헌연세약국" + }, + { + "stop_nm": "당곡역.당곡사거리", + "ycode": "37.4887310522", + "stop_no": "21686", + "xcode": "126.9287658216", + "stop_type": "마을버스", + "node_id": "120900094", + "nxtStn": "은천교" + }, + { + "stop_nm": "서울과학전시관", + "ycode": "37.4687224889", + "stop_no": "21689", + "xcode": "126.9579991818", + "stop_type": "마을버스", + "node_id": "120900095", + "nxtStn": "낙성대공원.관악복합평생교육센터" + }, + { + "stop_nm": "은천교입구", + "ycode": "37.4868362979", + "stop_no": "21700", + "xcode": "126.9342753266", + "stop_type": "마을버스", + "node_id": "120900205", + "nxtStn": "보라매공영주차장" + }, + { + "stop_nm": "은천교입구", + "ycode": "37.4869363286", + "stop_no": "21701", + "xcode": "126.9340848898", + "stop_type": "마을버스", + "node_id": "120900206", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "삼성아파트", + "ycode": "37.494576", + "stop_no": "21722", + "xcode": "126.927383", + "stop_type": "마을버스", + "node_id": "120900096", + "nxtStn": "신대방삼거리" + }, + { + "stop_nm": "조원경로당", + "ycode": "37.4835391709", + "stop_no": "21732", + "xcode": "126.9082699572", + "stop_type": "마을버스", + "node_id": "120900195", + "nxtStn": "신도브래뉴.구펭귄아파트" + }, + { + "stop_nm": "서강약국", + "ycode": "37.4794735167", + "stop_no": "21733", + "xcode": "126.9279661565", + "stop_type": "마을버스", + "node_id": "120900097", + "nxtStn": "동산교회" + }, + { + "stop_nm": "인헌연세약국", + "ycode": "37.4748483171", + "stop_no": "21734", + "xcode": "126.9668226263", + "stop_type": "마을버스", + "node_id": "120900098", + "nxtStn": "오리사랑" + }, + { + "stop_nm": "낙성대공원.관악복합평생교육센터", + "ycode": "37.472205", + "stop_no": "21738", + "xcode": "126.958766", + "stop_type": "마을버스", + "node_id": "120900181", + "nxtStn": "낙성대현대아파트" + }, + { + "stop_nm": "신도브래뉴.구펭귄아파트", + "ycode": "37.484211", + "stop_no": "21742", + "xcode": "126.911039", + "stop_type": "마을버스", + "node_id": "120900099", + "nxtStn": "펭귄시장" + }, + { + "stop_nm": "동산교회", + "ycode": "37.478779025", + "stop_no": "21743", + "xcode": "126.9298980497", + "stop_type": "마을버스", + "node_id": "120900100", + "nxtStn": "서원역" + }, + { + "stop_nm": "오리사랑", + "ycode": "37.4736845489", + "stop_no": "21744", + "xcode": "126.9666847747", + "stop_type": "마을버스", + "node_id": "120900101", + "nxtStn": "동인약국.인헌중고입구" + }, + { + "stop_nm": "봉일시장", + "ycode": "37.4860927573", + "stop_no": "21745", + "xcode": "126.9386493005", + "stop_type": "마을버스", + "node_id": "120900179", + "nxtStn": "국회단지입구" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4787451506", + "stop_no": "21751", + "xcode": "126.9595878517", + "stop_type": "일반차로", + "node_id": "120000430", + "nxtStn": "봉천로사거리" + }, + { + "stop_nm": "낙성대현대아파트", + "ycode": "37.474872947", + "stop_no": "21752", + "xcode": "126.9591501194", + "stop_type": "마을버스", + "node_id": "120900102", + "nxtStn": "인헌초등학교" + }, + { + "stop_nm": "성지빌딩", + "ycode": "37.4786119699", + "stop_no": "21753", + "xcode": "126.9308321576", + "stop_type": "마을버스", + "node_id": "120900103", + "nxtStn": "서강약국" + }, + { + "stop_nm": "펭귄시장", + "ycode": "37.483576", + "stop_no": "21756", + "xcode": "126.912358", + "stop_type": "마을버스", + "node_id": "120900104", + "nxtStn": "난곡사거리" + }, + { + "stop_nm": "동인약국.인헌중고입구", + "ycode": "37.4719152228", + "stop_no": "21760", + "xcode": "126.966851057", + "stop_type": "마을버스", + "node_id": "120900105", + "nxtStn": "우리현대마트" + }, + { + "stop_nm": "국회단지입구", + "ycode": "37.486535598", + "stop_no": "21761", + "xcode": "126.9394212827", + "stop_type": "마을버스", + "node_id": "120900106", + "nxtStn": "경천교회" + }, + { + "stop_nm": "봉천역", + "ycode": "37.483129", + "stop_no": "21763", + "xcode": "126.941979", + "stop_type": "일반차로", + "node_id": "120000426", + "nxtStn": "봉천로사거리" + }, + { + "stop_nm": "봉천역", + "ycode": "37.4835774014", + "stop_no": "21764", + "xcode": "126.9414680982", + "stop_type": "일반차로", + "node_id": "120000428", + "nxtStn": "롯데백화점관악점" + }, + { + "stop_nm": "인헌초등학교", + "ycode": "37.4765877555", + "stop_no": "21765", + "xcode": "126.959159362", + "stop_type": "마을버스", + "node_id": "120900182", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "난곡사거리", + "ycode": "37.4825153663", + "stop_no": "21766", + "xcode": "126.9140640456", + "stop_type": "마을버스", + "node_id": "120900107", + "nxtStn": "신림체육센터" + }, + { + "stop_nm": "우리현대마트", + "ycode": "37.4711205873", + "stop_no": "21768", + "xcode": "126.967356777", + "stop_type": "마을버스", + "node_id": "120900108", + "nxtStn": "인수당약국" + }, + { + "stop_nm": "경천교회", + "ycode": "37.4879473031", + "stop_no": "21770", + "xcode": "126.9405543681", + "stop_type": "마을버스", + "node_id": "120900109", + "nxtStn": "산성교회" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4775168997", + "stop_no": "21771", + "xcode": "126.9594607468", + "stop_type": "마을버스", + "node_id": "120900110", + "nxtStn": "종점" + }, + { + "stop_nm": "신림체육센터", + "ycode": "37.481016", + "stop_no": "21772", + "xcode": "126.914615", + "stop_type": "마을버스", + "node_id": "120900201", + "nxtStn": "신림고등학교" + }, + { + "stop_nm": "서림동주민센터", + "ycode": "37.4748531074", + "stop_no": "21773", + "xcode": "126.9349782707", + "stop_type": "마을버스", + "node_id": "120900111", + "nxtStn": "현대아파트109동" + }, + { + "stop_nm": "인수당약국", + "ycode": "37.4704430749", + "stop_no": "21774", + "xcode": "126.9677946019", + "stop_type": "마을버스", + "node_id": "120900112", + "nxtStn": "개미유통" + }, + { + "stop_nm": "산성교회", + "ycode": "37.4885912136", + "stop_no": "21775", + "xcode": "126.9416010182", + "stop_type": "마을버스", + "node_id": "120900113", + "nxtStn": "서울관광고등학교" + }, + { + "stop_nm": "신원동치안센터", + "ycode": "37.479222", + "stop_no": "21778", + "xcode": "126.926202", + "stop_type": "마을버스", + "node_id": "120900114", + "nxtStn": "관악세무서" + }, + { + "stop_nm": "현대아파트109동", + "ycode": "37.474872", + "stop_no": "21782", + "xcode": "126.933312", + "stop_type": "마을버스", + "node_id": "120900116", + "nxtStn": "현대아파트106동" + }, + { + "stop_nm": "개미유통", + "ycode": "37.4699868514", + "stop_no": "21783", + "xcode": "126.9668428641", + "stop_type": "마을버스", + "node_id": "120900117", + "nxtStn": "세진아파트" + }, + { + "stop_nm": "서울관광고등학교", + "ycode": "37.4890410488", + "stop_no": "21784", + "xcode": "126.9419749791", + "stop_type": "마을버스", + "node_id": "120900118", + "nxtStn": "수정슈퍼" + }, + { + "stop_nm": "낙성대역", + "ycode": "37.4770791769", + "stop_no": "21785", + "xcode": "126.9619751956", + "stop_type": "마을버스", + "node_id": "120900119", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "서울대호암교수회관", + "ycode": "37.4677295812", + "stop_no": "21789", + "xcode": "126.9583174158", + "stop_type": "일반차로", + "node_id": "120000431", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "봉천로사거리", + "ycode": "37.4823421716", + "stop_no": "21790", + "xcode": "126.9524254566", + "stop_type": "일반차로", + "node_id": "120000429", + "nxtStn": "봉천역" + }, + { + "stop_nm": "관악세무서", + "ycode": "37.4790379194", + "stop_no": "21792", + "xcode": "126.9244975914", + "stop_type": "마을버스", + "node_id": "120900120", + "nxtStn": "난곡터널" + }, + { + "stop_nm": "난우초등학교", + "ycode": "37.4764738791", + "stop_no": "21793", + "xcode": "126.9171836708", + "stop_type": "마을버스", + "node_id": "120900121", + "nxtStn": "세이브마트" + }, + { + "stop_nm": "현대아파트106동", + "ycode": "37.4750977377", + "stop_no": "21794", + "xcode": "126.9325313553", + "stop_type": "마을버스", + "node_id": "120900122", + "nxtStn": "종점" + }, + { + "stop_nm": "세진아파트", + "ycode": "37.46963157", + "stop_no": "21795", + "xcode": "126.965980406", + "stop_type": "마을버스", + "node_id": "120900123", + "nxtStn": "은천아파트" + }, + { + "stop_nm": "수정슈퍼", + "ycode": "37.489563775", + "stop_no": "21796", + "xcode": "126.9421498576", + "stop_type": "마을버스", + "node_id": "120900124", + "nxtStn": "우리슈퍼" + }, + { + "stop_nm": "낙성대입구", + "ycode": "37.4775942987", + "stop_no": "21800", + "xcode": "126.9591814277", + "stop_type": "마을버스", + "node_id": "120900183", + "nxtStn": "인헌초등학교" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.484549", + "stop_no": "21801", + "xcode": "126.905796", + "stop_type": "일반차로", + "node_id": "120000440", + "nxtStn": "동작상떼빌아파트" + }, + { + "stop_nm": "구로디지털단지역", + "ycode": "37.484369", + "stop_no": "21802", + "xcode": "126.905813", + "stop_type": "일반차로", + "node_id": "120000441", + "nxtStn": "신대방역" + }, + { + "stop_nm": "난곡터널", + "ycode": "37.478276", + "stop_no": "21803", + "xcode": "126.919017", + "stop_type": "마을버스", + "node_id": "120900125", + "nxtStn": "신림고등학교" + }, + { + "stop_nm": "난곡종점", + "ycode": "37.4641100726", + "stop_no": "21809", + "xcode": "126.9192837982", + "stop_type": "일반차로", + "node_id": "120000444", + "nxtStn": "신림복지관앞" + }, + { + "stop_nm": "세이브마트", + "ycode": "37.4742473112", + "stop_no": "21810", + "xcode": "126.9185745369", + "stop_type": "마을버스", + "node_id": "120900126", + "nxtStn": "애동유치원" + }, + { + "stop_nm": "봉천역", + "ycode": "37.4835908978", + "stop_no": "21812", + "xcode": "126.94142738", + "stop_type": "일반차로", + "node_id": "120000454", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "은천아파트", + "ycode": "37.469304232", + "stop_no": "21817", + "xcode": "126.9651699485", + "stop_type": "마을버스", + "node_id": "120900127", + "nxtStn": "인헌아파트" + }, + { + "stop_nm": "우리슈퍼", + "ycode": "37.4901513787", + "stop_no": "21818", + "xcode": "126.9423212961", + "stop_type": "마을버스", + "node_id": "120900186", + "nxtStn": "벽산아파트후문.만물슈퍼" + }, + { + "stop_nm": "인헌초등학교", + "ycode": "37.476522", + "stop_no": "21819", + "xcode": "126.958967", + "stop_type": "마을버스", + "node_id": "120900184", + "nxtStn": "낙성대현대아파트" + }, + { + "stop_nm": "서울대벤처타운역.삼성동시장입구", + "ycode": "37.4716882063", + "stop_no": "21820", + "xcode": "126.9329810024", + "stop_type": "마을버스", + "node_id": "120900128", + "nxtStn": "삼성동시장" + }, + { + "stop_nm": "애동유치원", + "ycode": "37.4741556134", + "stop_no": "21821", + "xcode": "126.9202106507", + "stop_type": "마을버스", + "node_id": "120900129", + "nxtStn": "남강중고등학교입구" + }, + { + "stop_nm": "인헌아파트", + "ycode": "37.46826", + "stop_no": "21823", + "xcode": "126.961683", + "stop_type": "마을버스", + "node_id": "120900180", + "nxtStn": "은천아파트" + }, + { + "stop_nm": "롯데백화점관악점", + "ycode": "37.489744", + "stop_no": "21827", + "xcode": "126.924916", + "stop_type": "일반차로", + "node_id": "120000390", + "nxtStn": "신림역" + }, + { + "stop_nm": "롯데백화점관악점", + "ycode": "37.49009", + "stop_no": "21828", + "xcode": "126.925983", + "stop_type": "일반차로", + "node_id": "120000391", + "nxtStn": "대림역" + }, + { + "stop_nm": "신림역", + "ycode": "37.484495", + "stop_no": "21829", + "xcode": "126.932989", + "stop_type": "가로변시간", + "node_id": "120000392", + "nxtStn": "봉천역" + }, + { + "stop_nm": "신림역", + "ycode": "37.4844651744", + "stop_no": "21830", + "xcode": "126.9301935247", + "stop_type": "가로변전일", + "node_id": "120000393", + "nxtStn": "롯데백화점관악점" + }, + { + "stop_nm": "봉천역", + "ycode": "37.481993", + "stop_no": "21831", + "xcode": "126.944142", + "stop_type": "가로변전일", + "node_id": "120000394", + "nxtStn": "관악구청" + }, + { + "stop_nm": "봉천역", + "ycode": "37.482711", + "stop_no": "21832", + "xcode": "126.941497", + "stop_type": "가로변시간", + "node_id": "120000395", + "nxtStn": "신림역" + }, + { + "stop_nm": "서울대학교입구전철역", + "ycode": "37.4815931763", + "stop_no": "21833", + "xcode": "126.9514280486", + "stop_type": "가로변전일", + "node_id": "120000396", + "nxtStn": "봉천역" + }, + { + "stop_nm": "관악구청", + "ycode": "37.479909357", + "stop_no": "21834", + "xcode": "126.9522794339", + "stop_type": "일반차로", + "node_id": "120000397", + "nxtStn": "서울대학교" + }, + { + "stop_nm": "관악구청", + "ycode": "37.4782514112", + "stop_no": "21835", + "xcode": "126.9524998415", + "stop_type": "일반차로", + "node_id": "120000398", + "nxtStn": "서울대학교입구전철역" + }, + { + "stop_nm": "서울대학교", + "ycode": "37.4668572388", + "stop_no": "21837", + "xcode": "126.9489515813", + "stop_type": "일반차로", + "node_id": "120000400", + "nxtStn": "관악구청" + }, + { + "stop_nm": "신림2동차고지", + "ycode": "37.470982", + "stop_no": "21841", + "xcode": "126.938321", + "stop_type": "일반차로", + "node_id": "120000452", + "nxtStn": "신성초등학교" + }, + { + "stop_nm": "신림2동차고지", + "ycode": "37.470929", + "stop_no": "21842", + "xcode": "126.938768", + "stop_type": "일반차로", + "node_id": "120000453", + "nxtStn": "신림2동차고지" + }, + { + "stop_nm": "벽산아파트후문.만물슈퍼", + "ycode": "37.491067", + "stop_no": "21843", + "xcode": "126.941856", + "stop_type": "마을버스", + "node_id": "120900130", + "nxtStn": "종점" + }, + { + "stop_nm": "낙성대현대아파트", + "ycode": "37.474424", + "stop_no": "21844", + "xcode": "126.959068", + "stop_type": "마을버스", + "node_id": "120900131", + "nxtStn": "낙성대공원.관악복합평생교육센터" + }, + { + "stop_nm": "사당역4번출구A", + "ycode": "37.4750015212", + "stop_no": "21845", + "xcode": "126.9814839831", + "stop_type": "일반차로", + "node_id": "120000676", + "nxtStn": "남현동(경유)" + }, + { + "stop_nm": "사당역4번출구B", + "ycode": "37.4748085963", + "stop_no": "21846", + "xcode": "126.9815172875", + "stop_type": "일반차로", + "node_id": "120000677", + "nxtStn": "남현동(경유)" + }, + { + "stop_nm": "봉천역", + "ycode": "37.4831372885", + "stop_no": "21851", + "xcode": "126.9416183085", + "stop_type": "일반차로", + "node_id": "120000412", + "nxtStn": "봉천역4번출구" + }, + { + "stop_nm": "관악드림타운2단지.관악선의복지관", + "ycode": "37.491928", + "stop_no": "21852", + "xcode": "126.946875", + "stop_type": "마을버스", + "node_id": "120900132", + "nxtStn": "구암어린이집앞" + }, + { + "stop_nm": "라이프아파트", + "ycode": "37.4771669403", + "stop_no": "21853", + "xcode": "126.9135636303", + "stop_type": "마을버스", + "node_id": "120900133", + "nxtStn": "미성중학교" + }, + { + "stop_nm": "삼성동시장", + "ycode": "37.469153", + "stop_no": "21854", + "xcode": "126.931472", + "stop_type": "마을버스", + "node_id": "120900134", + "nxtStn": "삼성전자" + }, + { + "stop_nm": "남강중고등학교입구", + "ycode": "37.4740843566", + "stop_no": "21855", + "xcode": "126.9214521515", + "stop_type": "마을버스", + "node_id": "120900135", + "nxtStn": "제일교회입구" + }, + { + "stop_nm": "은천아파트", + "ycode": "37.4691834753", + "stop_no": "21856", + "xcode": "126.9651417407", + "stop_type": "마을버스", + "node_id": "120900188", + "nxtStn": "세진아파트" + }, + { + "stop_nm": "낙성대공원.관악복합평생교육센터", + "ycode": "37.471697", + "stop_no": "21858", + "xcode": "126.958413", + "stop_type": "마을버스", + "node_id": "120900136", + "nxtStn": "서울융합과학교육원" + }, + { + "stop_nm": "구암어린이집앞", + "ycode": "37.491085", + "stop_no": "21859", + "xcode": "126.947528", + "stop_type": "마을버스", + "node_id": "120900137", + "nxtStn": "성현동주민센터" + }, + { + "stop_nm": "미성중학교", + "ycode": "37.4756040638", + "stop_no": "21860", + "xcode": "126.9130747297", + "stop_type": "마을버스", + "node_id": "120900202", + "nxtStn": "두영아파트" + }, + { + "stop_nm": "삼성전자", + "ycode": "37.467902", + "stop_no": "21861", + "xcode": "126.931094", + "stop_type": "마을버스", + "node_id": "120900138", + "nxtStn": "유완약국.성림교회" + }, + { + "stop_nm": "제일교회입구", + "ycode": "37.4744767955", + "stop_no": "21862", + "xcode": "126.9221436863", + "stop_type": "마을버스", + "node_id": "120900139", + "nxtStn": "충남슈퍼.생각대로통신" + }, + { + "stop_nm": "세진아파트", + "ycode": "37.469516228", + "stop_no": "21863", + "xcode": "126.9659793277", + "stop_type": "마을버스", + "node_id": "120900190", + "nxtStn": "개미유통" + }, + { + "stop_nm": "서울과학전시관", + "ycode": "37.469566", + "stop_no": "21864", + "xcode": "126.957989", + "stop_type": "마을버스", + "node_id": "120900140", + "nxtStn": "호암교수회관" + }, + { + "stop_nm": "성현동주민센터", + "ycode": "37.490021", + "stop_no": "21865", + "xcode": "126.947986", + "stop_type": "마을버스", + "node_id": "120900141", + "nxtStn": "현대시장" + }, + { + "stop_nm": "두영아파트", + "ycode": "37.474346", + "stop_no": "21866", + "xcode": "126.913664", + "stop_type": "마을버스", + "node_id": "120900142", + "nxtStn": "신라놀이터" + }, + { + "stop_nm": "유완약국.성림교회", + "ycode": "37.4669079232", + "stop_no": "21867", + "xcode": "126.9300278405", + "stop_type": "마을버스", + "node_id": "120900198", + "nxtStn": "광신고등학교.주공1단지" + }, + { + "stop_nm": "충남슈퍼.생각대로통신", + "ycode": "37.4748593293", + "stop_no": "21868", + "xcode": "126.922852198", + "stop_type": "마을버스", + "node_id": "120900143", + "nxtStn": "한마음슈퍼" + }, + { + "stop_nm": "개미유통", + "ycode": "37.4698796222", + "stop_no": "21869", + "xcode": "126.966851956", + "stop_type": "마을버스", + "node_id": "120900191", + "nxtStn": "소망유통" + }, + { + "stop_nm": "호암교수회관", + "ycode": "37.4684117254", + "stop_no": "21870", + "xcode": "126.9583339951", + "stop_type": "마을버스", + "node_id": "120900185", + "nxtStn": "인헌아파트" + }, + { + "stop_nm": "현대시장", + "ycode": "37.4872239236", + "stop_no": "21871", + "xcode": "126.9466523339", + "stop_type": "마을버스", + "node_id": "120900187", + "nxtStn": "두산아파트" + }, + { + "stop_nm": "신라놀이터", + "ycode": "37.4733130222", + "stop_no": "21872", + "xcode": "126.9124928566", + "stop_type": "마을버스", + "node_id": "120900144", + "nxtStn": "쌍용아파트후문" + }, + { + "stop_nm": "광신고등학교.주공1단지", + "ycode": "37.4655416947", + "stop_no": "21873", + "xcode": "126.9268060717", + "stop_type": "마을버스", + "node_id": "120900145", + "nxtStn": "201동.동신교회" + }, + { + "stop_nm": "한마음슈퍼", + "ycode": "37.4752553681", + "stop_no": "21874", + "xcode": "126.9235493967", + "stop_type": "마을버스", + "node_id": "120900146", + "nxtStn": "승산밝은빛교회.구무림비디오" + }, + { + "stop_nm": "소망유통", + "ycode": "37.4694700428", + "stop_no": "21875", + "xcode": "126.9684009967", + "stop_type": "마을버스", + "node_id": "120900147", + "nxtStn": "군인아파트" + }, + { + "stop_nm": "두산아파트", + "ycode": "37.4847359856", + "stop_no": "21877", + "xcode": "126.9466789803", + "stop_type": "마을버스", + "node_id": "120900148", + "nxtStn": "신협" + }, + { + "stop_nm": "쌍용아파트후문", + "ycode": "37.4727366024", + "stop_no": "21878", + "xcode": "126.9116693186", + "stop_type": "마을버스", + "node_id": "120900149", + "nxtStn": "뉴서울아파트" + }, + { + "stop_nm": "201동.동신교회", + "ycode": "37.4642155732", + "stop_no": "21879", + "xcode": "126.9258566348", + "stop_type": "마을버스", + "node_id": "120900150", + "nxtStn": "3단지종합상가" + }, + { + "stop_nm": "승산밝은빛교회.구무림비디오", + "ycode": "37.4756424004", + "stop_no": "21880", + "xcode": "126.9242601797", + "stop_type": "마을버스", + "node_id": "120900151", + "nxtStn": "보명사.법화사" + }, + { + "stop_nm": "군인아파트", + "ycode": "37.4689672354", + "stop_no": "21881", + "xcode": "126.9686942163", + "stop_type": "마을버스", + "node_id": "120900152", + "nxtStn": "종점" + }, + { + "stop_nm": "호암교수회관", + "ycode": "37.468262", + "stop_no": "21882", + "xcode": "126.957816", + "stop_type": "마을버스", + "node_id": "120900153", + "nxtStn": "가족생활동" + }, + { + "stop_nm": "신협", + "ycode": "37.4832139179", + "stop_no": "21883", + "xcode": "126.9464550405", + "stop_type": "마을버스", + "node_id": "120900176", + "nxtStn": "봉천역6번출구" + }, + { + "stop_nm": "뉴서울아파트", + "ycode": "37.4715124546", + "stop_no": "21884", + "xcode": "126.9110760714", + "stop_type": "마을버스", + "node_id": "120900154", + "nxtStn": "아카시아마을.민방위교육장" + }, + { + "stop_nm": "3단지종합상가", + "ycode": "37.4632446739", + "stop_no": "21885", + "xcode": "126.9266500465", + "stop_type": "마을버스", + "node_id": "120900155", + "nxtStn": "삼성산주공307동앞" + }, + { + "stop_nm": "보명사.법화사", + "ycode": "37.4759816008", + "stop_no": "21886", + "xcode": "126.9248624752", + "stop_type": "마을버스", + "node_id": "120900156", + "nxtStn": "종점" + }, + { + "stop_nm": "가족생활동", + "ycode": "37.466361", + "stop_no": "21887", + "xcode": "126.957684", + "stop_type": "마을버스", + "node_id": "120900157", + "nxtStn": "서울대후문.연구공원" + }, + { + "stop_nm": "봉천로사거리", + "ycode": "37.482044656", + "stop_no": "21888", + "xcode": "126.951491078", + "stop_type": "일반차로", + "node_id": "120000434", + "nxtStn": "낙성대입구" + }, + { + "stop_nm": "봉천역6번출구", + "ycode": "37.483212", + "stop_no": "21889", + "xcode": "126.943536", + "stop_type": "마을버스", + "node_id": "120900177", + "nxtStn": "봉천역4번출구" + }, + { + "stop_nm": "아카시아마을.민방위교육장", + "ycode": "37.4720991366", + "stop_no": "21890", + "xcode": "126.9111579098", + "stop_type": "마을버스", + "node_id": "120900173", + "nxtStn": "종점" + }, + { + "stop_nm": "삼성산주공307동앞", + "ycode": "37.4618249334", + "stop_no": "21891", + "xcode": "126.9273070883", + "stop_type": "마을버스", + "node_id": "120900158", + "nxtStn": "삼성산주공아파트정문" + }, + { + "stop_nm": "서울대후문.연구공원", + "ycode": "37.465104", + "stop_no": "21892", + "xcode": "126.957782", + "stop_type": "마을버스", + "node_id": "120900159", + "nxtStn": "학부생활관" + }, + { + "stop_nm": "봉천역4번출구", + "ycode": "37.483584", + "stop_no": "21893", + "xcode": "126.941515", + "stop_type": "마을버스", + "node_id": "120900178", + "nxtStn": "봉일시장" + }, + { + "stop_nm": "삼성산주공아파트정문", + "ycode": "37.4612183906", + "stop_no": "21894", + "xcode": "126.9257024646", + "stop_type": "마을버스", + "node_id": "120900160", + "nxtStn": "관악산휴먼시아아파트1단지입구" + }, + { + "stop_nm": "학부생활관", + "ycode": "37.4631418278", + "stop_no": "21895", + "xcode": "126.957717428", + "stop_type": "마을버스", + "node_id": "120900161", + "nxtStn": "대학원생활관" + }, + { + "stop_nm": "대학원생활관", + "ycode": "37.461972752", + "stop_no": "21897", + "xcode": "126.9567820806", + "stop_type": "마을버스", + "node_id": "120900162", + "nxtStn": "기숙사삼거리" + }, + { + "stop_nm": "기숙사삼거리", + "ycode": "37.460463", + "stop_no": "21899", + "xcode": "126.956764", + "stop_type": "마을버스", + "node_id": "120900163", + "nxtStn": "노천강당" + }, + { + "stop_nm": "제2파워플랜트", + "ycode": "37.449125", + "stop_no": "21904", + "xcode": "126.949654", + "stop_type": "마을버스", + "node_id": "120900164", + "nxtStn": "건설환경종합연구소" + }, + { + "stop_nm": "건설환경종합연구소", + "ycode": "37.447194", + "stop_no": "21905", + "xcode": "126.949997", + "stop_type": "마을버스", + "node_id": "120900165", + "nxtStn": "제2공학관" + }, + { + "stop_nm": "보라매노인복지회관", + "ycode": "37.492677921", + "stop_no": "21907", + "xcode": "126.9258907075", + "stop_type": "마을버스", + "node_id": "120900166", + "nxtStn": "전문건설회관.보라매병원" + }, + { + "stop_nm": "신한은행앞.롯데백화점", + "ycode": "37.490522", + "stop_no": "21908", + "xcode": "126.924334", + "stop_type": "마을버스", + "node_id": "120900167", + "nxtStn": "보라매공원입구" + }, + { + "stop_nm": "벽산아파트", + "ycode": "37.492322", + "stop_no": "21910", + "xcode": "126.943717", + "stop_type": "마을버스", + "node_id": "120900169", + "nxtStn": "적십자센터" + }, + { + "stop_nm": "적십자센터", + "ycode": "37.493009", + "stop_no": "21911", + "xcode": "126.946361", + "stop_type": "마을버스", + "node_id": "120900174", + "nxtStn": "구암중학교" + }, + { + "stop_nm": "봉림교", + "ycode": "37.4836879715", + "stop_no": "21912", + "xcode": "126.9269360965", + "stop_type": "마을버스", + "node_id": "120900170", + "nxtStn": "신림역4번출구" + }, + { + "stop_nm": "서원치안센터.건강보험관악지사", + "ycode": "37.4819928275", + "stop_no": "21913", + "xcode": "126.9291589334", + "stop_type": "마을버스", + "node_id": "120900171", + "nxtStn": "동부아파트" + }, + { + "stop_nm": "노천강당", + "ycode": "37.4587949022", + "stop_no": "21915", + "xcode": "126.9553279623", + "stop_type": "마을버스", + "node_id": "120900172", + "nxtStn": "관악사삼거리" + }, + { + "stop_nm": "신림역4번출구", + "ycode": "37.4839130162", + "stop_no": "21916", + "xcode": "126.9290485663", + "stop_type": "마을버스", + "node_id": "120900192", + "nxtStn": "서원치안센터.건강보험관악지사" + }, + { + "stop_nm": "서원역2번출구.서원동성당앞", + "ycode": "37.4778363867", + "stop_no": "21919", + "xcode": "126.9344657489", + "stop_type": "마을버스", + "node_id": "120900203", + "nxtStn": "성지빌딩" + }, + { + "stop_nm": "신림복지관앞", + "ycode": "37.4653", + "stop_no": "21920", + "xcode": "126.919765", + "stop_type": "일반차로", + "node_id": "120000443", + "nxtStn": "난우중학교입구" + }, + { + "stop_nm": "교육개발원입구", + "ycode": "37.47859", + "stop_no": "22001", + "xcode": "127.038482", + "stop_type": "중앙차로", + "node_id": "121000001", + "nxtStn": "매헌시민의숲" + }, + { + "stop_nm": "교육개발원입구", + "ycode": "37.477818", + "stop_no": "22002", + "xcode": "127.038758", + "stop_type": "중앙차로", + "node_id": "121000002", + "nxtStn": "양재역.서초문화예술회관" + }, + { + "stop_nm": "양재역.서초문화예술회관", + "ycode": "37.48261", + "stop_no": "22003", + "xcode": "127.035902", + "stop_type": "중앙차로", + "node_id": "121000003", + "nxtStn": "교육개발원입구" + }, + { + "stop_nm": "양재역.서초문화예술회관", + "ycode": "37.481927", + "stop_no": "22004", + "xcode": "127.036827", + "stop_type": "중앙차로", + "node_id": "121000004", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "뱅뱅사거리", + "ycode": "37.487667", + "stop_no": "22005", + "xcode": "127.032432", + "stop_type": "중앙차로", + "node_id": "121000005", + "nxtStn": "양재역" + }, + { + "stop_nm": "뱅뱅사거리", + "ycode": "37.486653", + "stop_no": "22006", + "xcode": "127.033097", + "stop_type": "중앙차로", + "node_id": "121000006", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "래미안아파트.파이낸셜뉴스", + "ycode": "37.491895", + "stop_no": "22007", + "xcode": "127.030405", + "stop_type": "중앙차로", + "node_id": "121000007", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "래미안아파트.파이낸셜뉴스", + "ycode": "37.491087", + "stop_no": "22008", + "xcode": "127.030987", + "stop_type": "중앙차로", + "node_id": "121000008", + "nxtStn": "신분당선강남역" + }, + { + "stop_nm": "신분당선강남역", + "ycode": "37.495848", + "stop_no": "22009", + "xcode": "127.028538", + "stop_type": "중앙차로", + "node_id": "121000009", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "신분당선강남역", + "ycode": "37.494993", + "stop_no": "22010", + "xcode": "127.029112", + "stop_type": "중앙차로", + "node_id": "121000010", + "nxtStn": "지하철2호선강남역" + }, + { + "stop_nm": "지하철2호선강남역", + "ycode": "37.501795", + "stop_no": "22011", + "xcode": "127.02574", + "stop_type": "중앙차로", + "node_id": "121000011", + "nxtStn": "신분당선강남역" + }, + { + "stop_nm": "지하철2호선강남역", + "ycode": "37.500785", + "stop_no": "22012", + "xcode": "127.02637", + "stop_type": "중앙차로", + "node_id": "121000012", + "nxtStn": "논현역" + }, + { + "stop_nm": "논현역", + "ycode": "37.5072264964", + "stop_no": "22013", + "xcode": "127.0230319441", + "stop_type": "중앙차로", + "node_id": "121000013", + "nxtStn": "지하철2호선강남역" + }, + { + "stop_nm": "논현역", + "ycode": "37.506367", + "stop_no": "22014", + "xcode": "127.023728", + "stop_type": "중앙차로", + "node_id": "121000014", + "nxtStn": "신사역" + }, + { + "stop_nm": "신사역.푸른저축은행", + "ycode": "37.5141369914", + "stop_no": "22015", + "xcode": "127.0200636589", + "stop_type": "중앙차로", + "node_id": "121000015", + "nxtStn": "논현역" + }, + { + "stop_nm": "신사역", + "ycode": "37.512972", + "stop_no": "22016", + "xcode": "127.020607", + "stop_type": "중앙차로", + "node_id": "121000016", + "nxtStn": "신사동" + }, + { + "stop_nm": "반포역", + "ycode": "37.5083481993", + "stop_no": "22017", + "xcode": "127.0120079425", + "stop_type": "중앙차로", + "node_id": "121000017", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "반포역", + "ycode": "37.507995", + "stop_no": "22018", + "xcode": "127.011155", + "stop_type": "중앙차로", + "node_id": "121000018", + "nxtStn": "논현역6번출구" + }, + { + "stop_nm": "고속터미널", + "ycode": "37.506295", + "stop_no": "22019", + "xcode": "127.005137", + "stop_type": "중앙차로", + "node_id": "121000019", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "고속터미널", + "ycode": "37.505843", + "stop_no": "22020", + "xcode": "127.003922", + "stop_type": "중앙차로", + "node_id": "121000020", + "nxtStn": "반포자이아파트" + }, + { + "stop_nm": "신반포역.세화여중고", + "ycode": "37.5034578584", + "stop_no": "22021", + "xcode": "126.9956954487", + "stop_type": "중앙차로", + "node_id": "121000021", + "nxtStn": "구반포역.세화고등학교" + }, + { + "stop_nm": "신반포역.세화여중고", + "ycode": "37.503052", + "stop_no": "22022", + "xcode": "126.994697", + "stop_type": "중앙차로", + "node_id": "121000022", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "구반포역.세화고등학교", + "ycode": "37.5020371598", + "stop_no": "22023", + "xcode": "126.9899765867", + "stop_type": "중앙차로", + "node_id": "121000023", + "nxtStn": "한강대교(가상)" + }, + { + "stop_nm": "구반포역.세화고등학교", + "ycode": "37.501735", + "stop_no": "22024", + "xcode": "126.98907", + "stop_type": "중앙차로", + "node_id": "121000024", + "nxtStn": "신반포역.세화여중고" + }, + { + "stop_nm": "아리랑TV.국립국악원", + "ycode": "37.4788364163", + "stop_no": "22025", + "xcode": "127.0090806179", + "stop_type": "마을버스", + "node_id": "121900303", + "nxtStn": "국립국악원" + }, + { + "stop_nm": "남태령역", + "ycode": "37.4656951829", + "stop_no": "22026", + "xcode": "126.9880882012", + "stop_type": "중앙차로", + "node_id": "120000671", + "nxtStn": "사당역" + }, + { + "stop_nm": "이수역", + "ycode": "37.4823316953", + "stop_no": "22027", + "xcode": "126.9820742447", + "stop_type": "중앙차로", + "node_id": "121000533", + "nxtStn": "총신대입구역.남성사계시장입구앞" + }, + { + "stop_nm": "사당역", + "ycode": "37.4742189784", + "stop_no": "22028", + "xcode": "126.9820504247", + "stop_type": "중앙차로", + "node_id": "121001315", + "nxtStn": "이수역" + }, + { + "stop_nm": "총신대입구역.남성시장입구앞", + "ycode": "37.487308", + "stop_no": "22029", + "xcode": "126.982301", + "stop_type": "중앙차로", + "node_id": "121000532", + "nxtStn": "경문고등학교" + }, + { + "stop_nm": "경문고등학교", + "ycode": "37.4904372318", + "stop_no": "22031", + "xcode": "126.9827417832", + "stop_type": "중앙차로", + "node_id": "121000531", + "nxtStn": "정금마을" + }, + { + "stop_nm": "정금마을", + "ycode": "37.4932972024", + "stop_no": "22033", + "xcode": "126.9827479847", + "stop_type": "중앙차로", + "node_id": "121000530", + "nxtStn": "이수교(방배본동)" + }, + { + "stop_nm": "염곡마을.서초50플러스센터", + "ycode": "37.461125", + "stop_no": "22035", + "xcode": "127.05081", + "stop_type": "중앙차로", + "node_id": "121001333", + "nxtStn": "코트라" + }, + { + "stop_nm": "염곡마을.서초50플러스센터", + "ycode": "37.46156", + "stop_no": "22036", + "xcode": "127.049473", + "stop_type": "중앙차로", + "node_id": "121001332", + "nxtStn": "탑성마을.서초포레스타입구" + }, + { + "stop_nm": "탑성마을.서초포레스타입구", + "ycode": "37.457758", + "stop_no": "22037", + "xcode": "127.05869", + "stop_type": "중앙차로", + "node_id": "121001335", + "nxtStn": "염곡마을.서초50플러스센터" + }, + { + "stop_nm": "탑성마을.서초포레스타입구", + "ycode": "37.457572", + "stop_no": "22038", + "xcode": "127.058726", + "stop_type": "중앙차로", + "node_id": "121001334", + "nxtStn": "안골마을.서울언남초등학교" + }, + { + "stop_nm": "안골마을.서울언남초등학교", + "ycode": "37.45575", + "stop_no": "22039", + "xcode": "127.063306", + "stop_type": "중앙차로", + "node_id": "121001337", + "nxtStn": "탑성마을.서초포레스타입구" + }, + { + "stop_nm": "안골마을.서울언남초등학교", + "ycode": "37.455708", + "stop_no": "22040", + "xcode": "127.063129", + "stop_type": "중앙차로", + "node_id": "121001336", + "nxtStn": "샘마을.서울특별시어린이병원" + }, + { + "stop_nm": "샘마을.서울특별시어린이병원", + "ycode": "37.457177", + "stop_no": "22041", + "xcode": "127.070905", + "stop_type": "중앙차로", + "node_id": "121001339", + "nxtStn": "안골마을.서울언남초등학교" + }, + { + "stop_nm": "샘마을.서울특별시어린이병원", + "ycode": "37.456805", + "stop_no": "22042", + "xcode": "127.070106", + "stop_type": "중앙차로", + "node_id": "121001338", + "nxtStn": "헌인릉.강남서초과학화예비군훈련장" + }, + { + "stop_nm": "서초포레스타5단지정문", + "ycode": "37.451777", + "stop_no": "22068", + "xcode": "127.058395", + "stop_type": "마을버스", + "node_id": "121900317", + "nxtStn": "청계산입구역" + }, + { + "stop_nm": "서초종합체육관", + "ycode": "37.45851", + "stop_no": "22095", + "xcode": "127.042175", + "stop_type": "마을버스", + "node_id": "121900331", + "nxtStn": "양재동화물터미널" + }, + { + "stop_nm": "서울추모공원", + "ycode": "37.4541558204", + "stop_no": "22096", + "xcode": "127.0426979933", + "stop_type": "마을버스", + "node_id": "121900299", + "nxtStn": "종점" + }, + { + "stop_nm": "양재동화물터미널", + "ycode": "37.460125", + "stop_no": "22097", + "xcode": "127.036776", + "stop_type": "마을버스", + "node_id": "121900302", + "nxtStn": "추모공원입구" + }, + { + "stop_nm": "양재동화물터미널", + "ycode": "37.4602", + "stop_no": "22098", + "xcode": "127.037076", + "stop_type": "마을버스", + "node_id": "121900301", + "nxtStn": "하이브랜드" + }, + { + "stop_nm": "서울추모공원", + "ycode": "37.4542683928", + "stop_no": "22099", + "xcode": "127.04288117", + "stop_type": "마을버스", + "node_id": "121900300", + "nxtStn": "서초종합체육관" + }, + { + "stop_nm": "한국소비자원", + "ycode": "37.466093", + "stop_no": "22100", + "xcode": "127.043825", + "stop_type": "마을버스", + "node_id": "121900002", + "nxtStn": "염곡동구룡사" + }, + { + "stop_nm": "지하철3호선교대역", + "ycode": "37.4917820873", + "stop_no": "22101", + "xcode": "127.0141904192", + "stop_type": "일반차로", + "node_id": "121000025", + "nxtStn": "지하철2호선교대역2" + }, + { + "stop_nm": "서울교대사거리", + "ycode": "37.4873287224", + "stop_no": "22102", + "xcode": "127.0150603111", + "stop_type": "일반차로", + "node_id": "121000026", + "nxtStn": "지하철3호선교대역" + }, + { + "stop_nm": "지하철2호선교대역2", + "ycode": "37.494022", + "stop_no": "22103", + "xcode": "127.01538", + "stop_type": "일반차로", + "node_id": "121000027", + "nxtStn": "서초동유원아파트" + }, + { + "stop_nm": "서초동유원아파트", + "ycode": "37.495456936", + "stop_no": "22104", + "xcode": "127.020216043", + "stop_type": "일반차로", + "node_id": "121000028", + "nxtStn": "롯데칠성" + }, + { + "stop_nm": "창신교회앞.서리풀노리학교", + "ycode": "37.4904906242", + "stop_no": "22105", + "xcode": "127.0213791246", + "stop_type": "일반차로", + "node_id": "121000029", + "nxtStn": "서초1동사무소" + }, + { + "stop_nm": "창신교회.서리풀노리학교", + "ycode": "37.490303", + "stop_no": "22106", + "xcode": "127.02128", + "stop_type": "일반차로", + "node_id": "121000030", + "nxtStn": "서초2동주민센터서이초등학교" + }, + { + "stop_nm": "서울교대정문앞", + "ycode": "37.4889343385", + "stop_no": "22107", + "xcode": "127.016209575", + "stop_type": "일반차로", + "node_id": "121000031", + "nxtStn": "지하철3호선교대역" + }, + { + "stop_nm": "서울교대정문앞", + "ycode": "37.488798", + "stop_no": "22108", + "xcode": "127.016373", + "stop_type": "일반차로", + "node_id": "121000032", + "nxtStn": "창신교회.서리풀노리학교" + }, + { + "stop_nm": "남부터미널", + "ycode": "37.4833491071", + "stop_no": "22109", + "xcode": "127.0174997004", + "stop_type": "일반차로", + "node_id": "121000033", + "nxtStn": "교대역" + }, + { + "stop_nm": "서울시인재개발원입구", + "ycode": "37.483108", + "stop_no": "22110", + "xcode": "127.022222", + "stop_type": "일반차로", + "node_id": "121000034", + "nxtStn": "남부터미널.기쁨병원" + }, + { + "stop_nm": "서울시인재개발원.한우리문화센터", + "ycode": "37.482652", + "stop_no": "22111", + "xcode": "127.021742", + "stop_type": "가로변전일", + "node_id": "121000035", + "nxtStn": "서초구청" + }, + { + "stop_nm": "서일초등학교", + "ycode": "37.4865068533", + "stop_no": "22112", + "xcode": "127.0213146638", + "stop_type": "일반차로", + "node_id": "121000036", + "nxtStn": "국제전자센터" + }, + { + "stop_nm": "서일초등학교", + "ycode": "37.486141046", + "stop_no": "22113", + "xcode": "127.0210850063", + "stop_type": "일반차로", + "node_id": "121000037", + "nxtStn": "서초그랑자이아파트" + }, + { + "stop_nm": "롯데칠성", + "ycode": "37.4966572734", + "stop_no": "22114", + "xcode": "127.0240035889", + "stop_type": "일반차로", + "node_id": "121000038", + "nxtStn": "강남역9번출구" + }, + { + "stop_nm": "롯데칠성", + "ycode": "37.495077386", + "stop_no": "22115", + "xcode": "127.0252199753", + "stop_type": "일반차로", + "node_id": "121000039", + "nxtStn": "강남역9번출구" + }, + { + "stop_nm": "서초포레스타2단지앞", + "ycode": "37.455488", + "stop_no": "22116", + "xcode": "127.063037", + "stop_type": "일반차로", + "node_id": "121000986", + "nxtStn": "세곡푸르지오.은곡삼거리" + }, + { + "stop_nm": "래미안에스티지에스", + "ycode": "37.492538", + "stop_no": "22117", + "xcode": "127.026468", + "stop_type": "일반차로", + "node_id": "121000041", + "nxtStn": "롯데칠성" + }, + { + "stop_nm": "래미안에스티지", + "ycode": "37.493118", + "stop_no": "22118", + "xcode": "127.025942", + "stop_type": "일반차로", + "node_id": "121000042", + "nxtStn": "서이초등학교" + }, + { + "stop_nm": "서초청소년도서관", + "ycode": "37.4926733807", + "stop_no": "22119", + "xcode": "127.0285677747", + "stop_type": "일반차로", + "node_id": "121000043", + "nxtStn": "서초동신동아아파트" + }, + { + "stop_nm": "서초청소년도서관", + "ycode": "37.492622", + "stop_no": "22120", + "xcode": "127.028881", + "stop_type": "일반차로", + "node_id": "121000044", + "nxtStn": "신분당선.강남역4번출구" + }, + { + "stop_nm": "서초동신동아아파트", + "ycode": "37.491745", + "stop_no": "22121", + "xcode": "127.025385", + "stop_type": "일반차로", + "node_id": "121000045", + "nxtStn": "창신교회앞.서리풀노리학교" + }, + { + "stop_nm": "서초2동주민센터서이초등학교", + "ycode": "37.491595", + "stop_no": "22122", + "xcode": "127.025548", + "stop_type": "일반차로", + "node_id": "121000046", + "nxtStn": "서초청소년도서관" + }, + { + "stop_nm": "래미안리더스원아파트", + "ycode": "37.490217554", + "stop_no": "22123", + "xcode": "127.0275566247", + "stop_type": "일반차로", + "node_id": "121000047", + "nxtStn": "서초2동주민센터" + }, + { + "stop_nm": "추모공원입구", + "ycode": "37.458317", + "stop_no": "22124", + "xcode": "127.038906", + "stop_type": "마을버스", + "node_id": "121900330", + "nxtStn": "서초종합체육관" + }, + { + "stop_nm": "뱅뱅사거리", + "ycode": "37.489022", + "stop_no": "22125", + "xcode": "127.0294", + "stop_type": "일반차로", + "node_id": "121000049", + "nxtStn": "래미안리더스원아파트" + }, + { + "stop_nm": "뱅뱅사거리", + "ycode": "37.4888154264", + "stop_no": "22126", + "xcode": "127.0298927879", + "stop_type": "일반차로", + "node_id": "121000050", + "nxtStn": "뱅뱅사거리뱅뱅프라자" + }, + { + "stop_nm": "서초그랑자이아파트", + "ycode": "37.488001", + "stop_no": "22127", + "xcode": "127.026038", + "stop_type": "일반차로", + "node_id": "121000051", + "nxtStn": "서일초등학교" + }, + { + "stop_nm": "서초그랑자이아파트", + "ycode": "37.4876295809", + "stop_no": "22128", + "xcode": "127.0260531533", + "stop_type": "일반차로", + "node_id": "121000052", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "서초구청", + "ycode": "37.484277", + "stop_no": "22129", + "xcode": "127.030748", + "stop_type": "일반차로", + "node_id": "121000053", + "nxtStn": "서울시인재개발원입구" + }, + { + "stop_nm": "서초구청", + "ycode": "37.483857", + "stop_no": "22130", + "xcode": "127.030587", + "stop_type": "일반차로", + "node_id": "121000054", + "nxtStn": "양재역" + }, + { + "stop_nm": "수협서초지점", + "ycode": "37.493517", + "stop_no": "22131", + "xcode": "127.029385", + "stop_type": "일반차로", + "node_id": "121000055", + "nxtStn": "서초청소년도서관" + }, + { + "stop_nm": "서초문화예술정보학교", + "ycode": "37.4880209971", + "stop_no": "22132", + "xcode": "127.0320161779", + "stop_type": "일반차로", + "node_id": "121000056", + "nxtStn": "양재역.양재1동민원분소" + }, + { + "stop_nm": "법조단지", + "ycode": "37.496385", + "stop_no": "22133", + "xcode": "127.013", + "stop_type": "일반차로", + "node_id": "121000057", + "nxtStn": "교대역5번출구" + }, + { + "stop_nm": "교대역10번출구", + "ycode": "37.493554", + "stop_no": "22134", + "xcode": "127.012781", + "stop_type": "일반차로", + "node_id": "121000058", + "nxtStn": "서초역3번출구" + }, + { + "stop_nm": "서초역.서울중앙지법등기국", + "ycode": "37.4931", + "stop_no": "22135", + "xcode": "127.007328", + "stop_type": "일반차로", + "node_id": "121000059", + "nxtStn": "서초경찰서" + }, + { + "stop_nm": "서초역1번출구", + "ycode": "37.492017", + "stop_no": "22136", + "xcode": "127.00891", + "stop_type": "일반차로", + "node_id": "121000060", + "nxtStn": "지하철2호선교대역2" + }, + { + "stop_nm": "서울중앙지방검찰청", + "ycode": "37.494768", + "stop_no": "22137", + "xcode": "127.006543", + "stop_type": "일반차로", + "node_id": "121000061", + "nxtStn": "서울지방조달청.서울성모병원" + }, + { + "stop_nm": "서울중앙지방검찰청대검찰청", + "ycode": "37.494383", + "stop_no": "22138", + "xcode": "127.006115", + "stop_type": "일반차로", + "node_id": "121000062", + "nxtStn": "서초역3번출구" + }, + { + "stop_nm": "서초아트자이아파트", + "ycode": "37.485861", + "stop_no": "22139", + "xcode": "127.010842", + "stop_type": "일반차로", + "node_id": "121000063", + "nxtStn": "서울교대사거리" + }, + { + "stop_nm": "서초동삼성아파트", + "ycode": "37.488918", + "stop_no": "22140", + "xcode": "127.009342", + "stop_type": "일반차로", + "node_id": "121000064", + "nxtStn": "서초역2번출구" + }, + { + "stop_nm": "서초유스센터.서초아트자이", + "ycode": "37.4854801487", + "stop_no": "22141", + "xcode": "127.0105005709", + "stop_type": "일반차로", + "node_id": "121000065", + "nxtStn": "서초중학교" + }, + { + "stop_nm": "서초동삼성아파트", + "ycode": "37.4885115912", + "stop_no": "22142", + "xcode": "127.0089653123", + "stop_type": "일반차로", + "node_id": "121000066", + "nxtStn": "서초유스센터" + }, + { + "stop_nm": "서초3동주민센터", + "ycode": "37.4831290593", + "stop_no": "22143", + "xcode": "127.0116355253", + "stop_type": "일반차로", + "node_id": "121000067", + "nxtStn": "남부터미널.기쁨병원" + }, + { + "stop_nm": "서초3동주민센터", + "ycode": "37.4832218285", + "stop_no": "22144", + "xcode": "127.0120799291", + "stop_type": "일반차로", + "node_id": "121000068", + "nxtStn": "남부터미널" + }, + { + "stop_nm": "서초동예술의전당", + "ycode": "37.4816857308", + "stop_no": "22145", + "xcode": "127.0128860369", + "stop_type": "일반차로", + "node_id": "121000069", + "nxtStn": "서초3동주민센터" + }, + { + "stop_nm": "서초중학교", + "ycode": "37.4836051072", + "stop_no": "22146", + "xcode": "127.0085384266", + "stop_type": "가로변시간", + "node_id": "121000070", + "nxtStn": "서울고등학교" + }, + { + "stop_nm": "서초중학교", + "ycode": "37.4833879213", + "stop_no": "22147", + "xcode": "127.0088052622", + "stop_type": "가로변시간", + "node_id": "121000071", + "nxtStn": "서초아트자이아파트" + }, + { + "stop_nm": "서울고등학교", + "ycode": "37.4829303821", + "stop_no": "22148", + "xcode": "127.0050002096", + "stop_type": "가로변시간", + "node_id": "121000072", + "nxtStn": "서울고사거리" + }, + { + "stop_nm": "서울고등학교", + "ycode": "37.4827474318", + "stop_no": "22149", + "xcode": "127.0055791438", + "stop_type": "가로변시간", + "node_id": "121000073", + "nxtStn": "서초중학교" + }, + { + "stop_nm": "상문고교", + "ycode": "37.4819049356", + "stop_no": "22150", + "xcode": "127.0047242402", + "stop_type": "일반차로", + "node_id": "121000074", + "nxtStn": "방배동래미안아트힐.국립국악원" + }, + { + "stop_nm": "서초동예술의전당", + "ycode": "37.479433", + "stop_no": "22151", + "xcode": "127.011232", + "stop_type": "일반차로", + "node_id": "121000075", + "nxtStn": "남부터미널.기쁨병원" + }, + { + "stop_nm": "서초동예술의전당", + "ycode": "37.4796986297", + "stop_no": "22152", + "xcode": "127.0108027917", + "stop_type": "일반차로", + "node_id": "121000076", + "nxtStn": "방배동래미안아트힐.국립국악원" + }, + { + "stop_nm": "남부터미널.기쁨병원", + "ycode": "37.4819578926", + "stop_no": "22153", + "xcode": "127.01686616", + "stop_type": "일반차로", + "node_id": "121000077", + "nxtStn": "서초동예술의전당" + }, + { + "stop_nm": "남부터미널.기쁨병원", + "ycode": "37.4817361133", + "stop_no": "22154", + "xcode": "127.0176022215", + "stop_type": "일반차로", + "node_id": "121000078", + "nxtStn": "서울시인재개발원.한우리문화센터" + }, + { + "stop_nm": "남부터미널", + "ycode": "37.4842", + "stop_no": "22155", + "xcode": "127.0156", + "stop_type": "일반차로", + "node_id": "121500100", + "nxtStn": "서초IC(경유)" + }, + { + "stop_nm": "남부터미널.한일시멘트", + "ycode": "37.4847318427", + "stop_no": "22156", + "xcode": "127.014218486", + "stop_type": "일반차로", + "node_id": "121000080", + "nxtStn": "서초중학교" + }, + { + "stop_nm": "남부터미널", + "ycode": "37.484755", + "stop_no": "22157", + "xcode": "127.015601", + "stop_type": "일반차로", + "node_id": "121000081", + "nxtStn": "남부터미널.기쁨병원" + }, + { + "stop_nm": "서울교대사거리", + "ycode": "37.4873846428", + "stop_no": "22158", + "xcode": "127.0146475713", + "stop_type": "일반차로", + "node_id": "121000082", + "nxtStn": "남부터미널.한일시멘트" + }, + { + "stop_nm": "서울교대사거리", + "ycode": "37.4880507136", + "stop_no": "22159", + "xcode": "127.0133427182", + "stop_type": "일반차로", + "node_id": "121000083", + "nxtStn": "서초유스센터.서초아트자이" + }, + { + "stop_nm": "서울교대사거리", + "ycode": "37.487837", + "stop_no": "22160", + "xcode": "127.01314", + "stop_type": "일반차로", + "node_id": "121000084", + "nxtStn": "서울교대정문앞" + }, + { + "stop_nm": "지하철3호선교대역", + "ycode": "37.4918244833", + "stop_no": "22161", + "xcode": "127.0138183639", + "stop_type": "일반차로", + "node_id": "121000085", + "nxtStn": "서울교대사거리" + }, + { + "stop_nm": "KCC사옥", + "ycode": "37.503035", + "stop_no": "22162", + "xcode": "127.020282", + "stop_type": "일반차로", + "node_id": "121000086", + "nxtStn": "서초푸르지오써밋" + }, + { + "stop_nm": "서초푸르지오써밋", + "ycode": "37.502037", + "stop_no": "22163", + "xcode": "127.021736", + "stop_type": "일반차로", + "node_id": "121000087", + "nxtStn": "진흥아파트" + }, + { + "stop_nm": "서초푸르지오써밋.롯데캐슬클래식", + "ycode": "37.5014758287", + "stop_no": "22164", + "xcode": "127.0221683272", + "stop_type": "일반차로", + "node_id": "121000088", + "nxtStn": "제일약품사옥" + }, + { + "stop_nm": "진흥아파트", + "ycode": "37.497723339", + "stop_no": "22165", + "xcode": "127.0237030894", + "stop_type": "일반차로", + "node_id": "121000089", + "nxtStn": "롯데칠성" + }, + { + "stop_nm": "진흥아파트", + "ycode": "37.497889", + "stop_no": "22166", + "xcode": "127.023901", + "stop_type": "일반차로", + "node_id": "121000090", + "nxtStn": "롯데캐슬클래식.사랑의교회" + }, + { + "stop_nm": "강남역.강남역사거리", + "ycode": "37.4977839964", + "stop_no": "22167", + "xcode": "127.0266040758", + "stop_type": "일반차로", + "node_id": "121000091", + "nxtStn": "진흥아파트" + }, + { + "stop_nm": "서초동진흥아파트", + "ycode": "37.4965791206", + "stop_no": "22168", + "xcode": "127.0227753379", + "stop_type": "일반차로", + "node_id": "121000092", + "nxtStn": "서초동유원아파트" + }, + { + "stop_nm": "서초동유원아파트", + "ycode": "37.49575", + "stop_no": "22169", + "xcode": "127.01977", + "stop_type": "일반차로", + "node_id": "121000093", + "nxtStn": "지하철2호선교대역4출구" + }, + { + "stop_nm": "지하철2호선교대역4출구", + "ycode": "37.4944725735", + "stop_no": "22170", + "xcode": "127.0158386954", + "stop_type": "일반차로", + "node_id": "121000094", + "nxtStn": "2호선교대역7번출구" + }, + { + "stop_nm": "법조단지", + "ycode": "37.4962850117", + "stop_no": "22171", + "xcode": "127.0132446587", + "stop_type": "일반차로", + "node_id": "121000095", + "nxtStn": "아크로비스타" + }, + { + "stop_nm": "신논현역.구교보타워사거리", + "ycode": "37.50262", + "stop_no": "22172", + "xcode": "127.02511", + "stop_type": "일반차로", + "node_id": "121000096", + "nxtStn": "강남역1번출구.역삼세무서" + }, + { + "stop_nm": "강남역", + "ycode": "37.499878", + "stop_no": "22173", + "xcode": "127.026407", + "stop_type": "일반차로", + "node_id": "121000097", + "nxtStn": "강남역.강남역사거리" + }, + { + "stop_nm": "잠원한신아파트", + "ycode": "37.5165006388", + "stop_no": "22174", + "xcode": "127.0100874797", + "stop_type": "일반차로", + "node_id": "121000098", + "nxtStn": "신동중학교" + }, + { + "stop_nm": "래미안신반포리오센트아파트", + "ycode": "37.519627", + "stop_no": "22175", + "xcode": "127.013905", + "stop_type": "일반차로", + "node_id": "121000099", + "nxtStn": "신사중학교" + }, + { + "stop_nm": "신반포18차아파트", + "ycode": "37.520158", + "stop_no": "22176", + "xcode": "127.014195", + "stop_type": "일반차로", + "node_id": "121000100", + "nxtStn": "잠원한신아파트" + }, + { + "stop_nm": "롯데캐슬아파트", + "ycode": "37.5196944471", + "stop_no": "22177", + "xcode": "127.0155351771", + "stop_type": "일반차로", + "node_id": "121000101", + "nxtStn": "신사중학교" + }, + { + "stop_nm": "롯데캐슬아파트", + "ycode": "37.519963891", + "stop_no": "22178", + "xcode": "127.0154198388", + "stop_type": "일반차로", + "node_id": "121000102", + "nxtStn": "신반포13차아파트" + }, + { + "stop_nm": "신반포13차아파트", + "ycode": "37.5167118764", + "stop_no": "22179", + "xcode": "127.0144201641", + "stop_type": "일반차로", + "node_id": "121000103", + "nxtStn": "롯데캐슬아파트" + }, + { + "stop_nm": "신반포13차아파트", + "ycode": "37.517147", + "stop_no": "22180", + "xcode": "127.014347", + "stop_type": "일반차로", + "node_id": "121000104", + "nxtStn": "신동중학교" + }, + { + "stop_nm": "신동중학교", + "ycode": "37.5155920192", + "stop_no": "22181", + "xcode": "127.0132333639", + "stop_type": "일반차로", + "node_id": "121000105", + "nxtStn": "잠원한신아파트" + }, + { + "stop_nm": "신동중학교", + "ycode": "37.515502", + "stop_no": "22182", + "xcode": "127.013018", + "stop_type": "일반차로", + "node_id": "121000106", + "nxtStn": "신반포13차아파트" + }, + { + "stop_nm": "논현역7번출구", + "ycode": "37.51066", + "stop_no": "22183", + "xcode": "127.019358", + "stop_type": "일반차로", + "node_id": "121000107", + "nxtStn": "반포역" + }, + { + "stop_nm": "신사역4번출구", + "ycode": "37.514985", + "stop_no": "22185", + "xcode": "127.019707", + "stop_type": "일반차로", + "node_id": "121000109", + "nxtStn": "논현역7번출구" + }, + { + "stop_nm": "신사역5번출구", + "ycode": "37.5169785253", + "stop_no": "22186", + "xcode": "127.0189942083", + "stop_type": "일반차로", + "node_id": "121000110", + "nxtStn": "신사역4번출구" + }, + { + "stop_nm": "논현역6번출구", + "ycode": "37.5102908187", + "stop_no": "22190", + "xcode": "127.0192130073", + "stop_type": "일반차로", + "node_id": "121000114", + "nxtStn": "신사역" + }, + { + "stop_nm": "논현역", + "ycode": "37.5091091024", + "stop_no": "22191", + "xcode": "127.0219545344", + "stop_type": "일반차로", + "node_id": "121000115", + "nxtStn": "반포동" + }, + { + "stop_nm": "반포동", + "ycode": "37.505962", + "stop_no": "22192", + "xcode": "127.023498", + "stop_type": "일반차로", + "node_id": "121000116", + "nxtStn": "신논현역.구교보타워사거리" + }, + { + "stop_nm": "신논현역.구교보타워사거리", + "ycode": "37.504227", + "stop_no": "22193", + "xcode": "127.023023", + "stop_type": "일반차로", + "node_id": "121000117", + "nxtStn": "제일약품사옥" + }, + { + "stop_nm": "제일약품사옥", + "ycode": "37.503387", + "stop_no": "22194", + "xcode": "127.02025", + "stop_type": "일반차로", + "node_id": "121000118", + "nxtStn": "반포1동성당" + }, + { + "stop_nm": "사평역", + "ycode": "37.504917", + "stop_no": "22195", + "xcode": "127.013887", + "stop_type": "가로변시간", + "node_id": "121000119", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "사평역", + "ycode": "37.503816", + "stop_no": "22196", + "xcode": "127.015802", + "stop_type": "일반차로", + "node_id": "121000120", + "nxtStn": "KCC사옥" + }, + { + "stop_nm": "디에이치반포라클라스", + "ycode": "37.4996628214", + "stop_no": "22197", + "xcode": "127.012449163", + "stop_type": "일반차로", + "node_id": "121000121", + "nxtStn": "반포래미안아이파크아파트" + }, + { + "stop_nm": "삼호가든사거리.반포도서관", + "ycode": "37.5027974539", + "stop_no": "22199", + "xcode": "127.0116012521", + "stop_type": "일반차로", + "node_id": "121000123", + "nxtStn": "반포자이아파트" + }, + { + "stop_nm": "삼성래미안", + "ycode": "37.502853", + "stop_no": "22200", + "xcode": "126.995162", + "stop_type": "일반차로", + "node_id": "121001326", + "nxtStn": "반포종합운동장" + }, + { + "stop_nm": "서초구민체육센터.심산문화센터", + "ycode": "37.498388", + "stop_no": "22203", + "xcode": "126.990517", + "stop_type": "일반차로", + "node_id": "121000127", + "nxtStn": "삼호아파트" + }, + { + "stop_nm": "잠원한신아파트", + "ycode": "37.516795", + "stop_no": "22204", + "xcode": "127.00984", + "stop_type": "일반차로", + "node_id": "121000128", + "nxtStn": "잠원성당.아크로리버뷰아파트" + }, + { + "stop_nm": "잠원성당.아크로리버뷰아파트", + "ycode": "37.513683", + "stop_no": "22205", + "xcode": "127.006645", + "stop_type": "일반차로", + "node_id": "121000129", + "nxtStn": "뉴코아아울렛" + }, + { + "stop_nm": "잠원성당", + "ycode": "37.5134704636", + "stop_no": "22206", + "xcode": "127.0069649098", + "stop_type": "일반차로", + "node_id": "121000130", + "nxtStn": "잠원한신아파트" + }, + { + "stop_nm": "뉴코아아울렛", + "ycode": "37.5092091078", + "stop_no": "22207", + "xcode": "127.0077585838", + "stop_type": "일반차로", + "node_id": "121000131", + "nxtStn": "반포자이아파트" + }, + { + "stop_nm": "신반포자이아파트", + "ycode": "37.5094758176", + "stop_no": "22208", + "xcode": "127.0080006792", + "stop_type": "일반차로", + "node_id": "121000132", + "nxtStn": "잠원성당" + }, + { + "stop_nm": "고속터미널", + "ycode": "37.5062641926", + "stop_no": "22211", + "xcode": "127.0093531432", + "stop_type": "일반차로", + "node_id": "121000135", + "nxtStn": "센트럴시티" + }, + { + "stop_nm": "서울지방조달청.서울성모병원", + "ycode": "37.49926", + "stop_no": "22212", + "xcode": "127.003934", + "stop_type": "일반차로", + "node_id": "121000136", + "nxtStn": "서울중앙지방검찰청대검찰청" + }, + { + "stop_nm": "센트럴시티", + "ycode": "37.503553", + "stop_no": "22213", + "xcode": "127.00634", + "stop_type": "일반차로", + "node_id": "121000137", + "nxtStn": "서울지방조달청.서울성모병원" + }, + { + "stop_nm": "서울지방조달청.서울성모병원", + "ycode": "37.500676", + "stop_no": "22214", + "xcode": "127.004092", + "stop_type": "일반차로", + "node_id": "121000138", + "nxtStn": "한강중학교" + }, + { + "stop_nm": "서울성모병원", + "ycode": "37.502675", + "stop_no": "22215", + "xcode": "127.005395", + "stop_type": "일반차로", + "node_id": "121000139", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "서초구민체육센터.심산문화센터", + "ycode": "37.4979605693", + "stop_no": "22217", + "xcode": "126.9910968933", + "stop_type": "일반차로", + "node_id": "121000141", + "nxtStn": "반포종합운동장" + }, + { + "stop_nm": "반포미도아파트앞", + "ycode": "37.5017017153", + "stop_no": "22218", + "xcode": "127.0115829859", + "stop_type": "일반차로", + "node_id": "121000142", + "nxtStn": "법조단지" + }, + { + "stop_nm": "고속터미널호남선", + "ycode": "37.5053517067", + "stop_no": "22220", + "xcode": "127.0030788422", + "stop_type": "일반차로", + "node_id": "121000144", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "삼호아파트", + "ycode": "37.496634", + "stop_no": "22221", + "xcode": "126.987806", + "stop_type": "일반차로", + "node_id": "121000145", + "nxtStn": "가야메디컬센터" + }, + { + "stop_nm": "방배사이길", + "ycode": "37.493328", + "stop_no": "22222", + "xcode": "126.990277", + "stop_type": "일반차로", + "node_id": "121000146", + "nxtStn": "서래초교" + }, + { + "stop_nm": "방배동삼호아파트", + "ycode": "37.49653", + "stop_no": "22223", + "xcode": "126.988245", + "stop_type": "일반차로", + "node_id": "121000147", + "nxtStn": "서초구민체육센터.심산문화센터" + }, + { + "stop_nm": "가야메디컬센터", + "ycode": "37.493391877", + "stop_no": "22224", + "xcode": "126.9898749163", + "stop_type": "일반차로", + "node_id": "121000148", + "nxtStn": "빛교회.이수중앙시장" + }, + { + "stop_nm": "이수교", + "ycode": "37.4966197869", + "stop_no": "22225", + "xcode": "126.983319414", + "stop_type": "일반차로", + "node_id": "121000149", + "nxtStn": "동작역.국립현충원" + }, + { + "stop_nm": "롯데캐슬헤론아파트", + "ycode": "37.4972742389", + "stop_no": "22227", + "xcode": "126.9852046016", + "stop_type": "마을버스", + "node_id": "121900003", + "nxtStn": "남부시장" + }, + { + "stop_nm": "방배동신동아아파트", + "ycode": "37.4823078119", + "stop_no": "22228", + "xcode": "127.0016995144", + "stop_type": "가로변전일", + "node_id": "121000152", + "nxtStn": "지하철2호선방배역" + }, + { + "stop_nm": "방배역.방배서리풀이편한세상", + "ycode": "37.483588", + "stop_no": "22229", + "xcode": "126.99647", + "stop_type": "일반차로", + "node_id": "121000153", + "nxtStn": "내방역2번출구" + }, + { + "stop_nm": "내방역2번출구", + "ycode": "37.4867753694", + "stop_no": "22230", + "xcode": "126.9943843705", + "stop_type": "일반차로", + "node_id": "121000154", + "nxtStn": "방배열린문화센터(방배4동주민센터)" + }, + { + "stop_nm": "내방역", + "ycode": "37.4866230686", + "stop_no": "22231", + "xcode": "126.9940948938", + "stop_type": "일반차로", + "node_id": "121000155", + "nxtStn": "방배1동주민센터.방배아크로타워" + }, + { + "stop_nm": "방배1동주민센터.방배아크로타워", + "ycode": "37.4834494617", + "stop_no": "22232", + "xcode": "126.9961463518", + "stop_type": "일반차로", + "node_id": "121000156", + "nxtStn": "신동아아파트앞" + }, + { + "stop_nm": "지하철2호선방배역", + "ycode": "37.481352", + "stop_no": "22233", + "xcode": "126.996712", + "stop_type": "가로변시간", + "node_id": "121000157", + "nxtStn": "대우효령아파트" + }, + { + "stop_nm": "서울교통공사", + "ycode": "37.4767111473", + "stop_no": "22234", + "xcode": "126.9861651981", + "stop_type": "일반차로", + "node_id": "121000158", + "nxtStn": "사당역" + }, + { + "stop_nm": "종로교회", + "ycode": "37.4786416232", + "stop_no": "22235", + "xcode": "126.9890955981", + "stop_type": "일반차로", + "node_id": "121000159", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "대우효령아파트", + "ycode": "37.4802035565", + "stop_no": "22236", + "xcode": "126.9933660869", + "stop_type": "일반차로", + "node_id": "121000160", + "nxtStn": "종로교회" + }, + { + "stop_nm": "이수중학교", + "ycode": "37.4809100052", + "stop_no": "22237", + "xcode": "126.9930505516", + "stop_type": "일반차로", + "node_id": "121000161", + "nxtStn": "방배역.백석예술대학교" + }, + { + "stop_nm": "방배브라운가아파트", + "ycode": "37.4840628359", + "stop_no": "22238", + "xcode": "126.9910193885", + "stop_type": "일반차로", + "node_id": "121000162", + "nxtStn": "이수중학교" + }, + { + "stop_nm": "사당역", + "ycode": "37.479003", + "stop_no": "22241", + "xcode": "126.98209", + "stop_type": "일반차로", + "node_id": "121000165", + "nxtStn": "이수역" + }, + { + "stop_nm": "사당역3번출구", + "ycode": "37.4750794918", + "stop_no": "22242", + "xcode": "126.9820179252", + "stop_type": "가로변시간", + "node_id": "121000166", + "nxtStn": "대항병원.연세사랑병원" + }, + { + "stop_nm": "경남임광아파트", + "ycode": "37.4772", + "stop_no": "22244", + "xcode": "127.000632", + "stop_type": "일반차로", + "node_id": "121000168", + "nxtStn": "서울지방법무사회" + }, + { + "stop_nm": "방배그랑자이아파트", + "ycode": "37.477254", + "stop_no": "22245", + "xcode": "127.000283", + "stop_type": "일반차로", + "node_id": "121000169", + "nxtStn": "방배동래미안아트힐.국립국악원" + }, + { + "stop_nm": "서울지방법무사회", + "ycode": "37.4800397349", + "stop_no": "22246", + "xcode": "126.998755084", + "stop_type": "일반차로", + "node_id": "121000170", + "nxtStn": "방배역.방배서리풀이편한세상" + }, + { + "stop_nm": "현대멤피스2차아파트", + "ycode": "37.4798144548", + "stop_no": "22247", + "xcode": "126.998445273", + "stop_type": "일반차로", + "node_id": "121000171", + "nxtStn": "방배그랑자이아파트" + }, + { + "stop_nm": "신동아아파트앞", + "ycode": "37.4820050376", + "stop_no": "22248", + "xcode": "127.0018917339", + "stop_type": "가로변시간", + "node_id": "121000172", + "nxtStn": "상문고등학교" + }, + { + "stop_nm": "방배역.백석예술대학교", + "ycode": "37.481038", + "stop_no": "22249", + "xcode": "126.996763", + "stop_type": "가로변시간", + "node_id": "121000173", + "nxtStn": "방배역.방배서리풀이편한세상" + }, + { + "stop_nm": "방배동대우효령아파트앞", + "ycode": "37.480167", + "stop_no": "22250", + "xcode": "126.994093", + "stop_type": "일반차로", + "node_id": "121000174", + "nxtStn": "방배역.백석예술대학교" + }, + { + "stop_nm": "종로교회앞", + "ycode": "37.4780946163", + "stop_no": "22251", + "xcode": "126.9887157676", + "stop_type": "일반차로", + "node_id": "121000175", + "nxtStn": "방현초교" + }, + { + "stop_nm": "서울교통공사", + "ycode": "37.4763264038", + "stop_no": "22252", + "xcode": "126.9864140138", + "stop_type": "일반차로", + "node_id": "121000176", + "nxtStn": "종로교회앞" + }, + { + "stop_nm": "방배동래미안아트힐.국립국악원", + "ycode": "37.477503", + "stop_no": "22253", + "xcode": "127.006302", + "stop_type": "일반차로", + "node_id": "121000177", + "nxtStn": "임광아파트후문" + }, + { + "stop_nm": "방배그랑자이아파트", + "ycode": "37.4748187293", + "stop_no": "22254", + "xcode": "127.0008920712", + "stop_type": "일반차로", + "node_id": "121000178", + "nxtStn": "성뒤마을.교육연수원" + }, + { + "stop_nm": "성뒤마을.교육연수원", + "ycode": "37.4737471951", + "stop_no": "22255", + "xcode": "126.994632951", + "stop_type": "일반차로", + "node_id": "121000179", + "nxtStn": "방배동래미안타워.동덕여중고" + }, + { + "stop_nm": "방배동래미안타워", + "ycode": "37.4746741807", + "stop_no": "22256", + "xcode": "126.990586349", + "stop_type": "일반차로", + "node_id": "121900001", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "대항병원.연세사랑병원", + "ycode": "37.4756416406", + "stop_no": "22257", + "xcode": "126.9871072248", + "stop_type": "일반차로", + "node_id": "121000181", + "nxtStn": "사당역12번출구" + }, + { + "stop_nm": "대항병원.연세사랑병원", + "ycode": "37.4753865896", + "stop_no": "22258", + "xcode": "126.9867646835", + "stop_type": "일반차로", + "node_id": "121000182", + "nxtStn": "방배동래미안타워.동덕여중고" + }, + { + "stop_nm": "방배동래미안타워.동덕여중고", + "ycode": "37.4742876115", + "stop_no": "22259", + "xcode": "126.9906564963", + "stop_type": "일반차로", + "node_id": "121000183", + "nxtStn": "성뒤마을.교육연수원" + }, + { + "stop_nm": "성뒤마을.교육연수원", + "ycode": "37.473395", + "stop_no": "22260", + "xcode": "126.997146", + "stop_type": "일반차로", + "node_id": "121000184", + "nxtStn": "임광아파트정문" + }, + { + "stop_nm": "방배그랑자이아파트", + "ycode": "37.4747736656", + "stop_no": "22261", + "xcode": "127.0016642941", + "stop_type": "일반차로", + "node_id": "121000185", + "nxtStn": "방배동래미안아트힐.국립국악원" + }, + { + "stop_nm": "방배동래미안아트힐.국립국악원", + "ycode": "37.477275", + "stop_no": "22262", + "xcode": "127.006845", + "stop_type": "일반차로", + "node_id": "121000186", + "nxtStn": "서초동예술의전당" + }, + { + "stop_nm": "서문여고입구", + "ycode": "37.490238", + "stop_no": "22263", + "xcode": "126.987153", + "stop_type": "일반차로", + "node_id": "121000187", + "nxtStn": "방배동고개" + }, + { + "stop_nm": "방배동고개", + "ycode": "37.486753", + "stop_no": "22264", + "xcode": "126.989307", + "stop_type": "일반차로", + "node_id": "121000188", + "nxtStn": "방배브라운가아파트" + }, + { + "stop_nm": "예술의전당", + "ycode": "37.48042", + "stop_no": "22267", + "xcode": "127.013341", + "stop_type": "마을버스", + "node_id": "121900008", + "nxtStn": "서초3동주민센터" + }, + { + "stop_nm": "방배열린문화센터(방배4동주민센터)", + "ycode": "37.4905049074", + "stop_no": "22268", + "xcode": "126.9920624118", + "stop_type": "일반차로", + "node_id": "121000192", + "nxtStn": "방배사이길" + }, + { + "stop_nm": "방배열린문화센터(방배4동주민센터)", + "ycode": "37.4906184149", + "stop_no": "22269", + "xcode": "126.991605527", + "stop_type": "일반차로", + "node_id": "121000193", + "nxtStn": "방배열린문화센터.가야치과병원" + }, + { + "stop_nm": "양재역.양재1동민원분소", + "ycode": "37.484769125", + "stop_no": "22270", + "xcode": "127.0374188123", + "stop_type": "가로변시간", + "node_id": "121000194", + "nxtStn": "매봉역" + }, + { + "stop_nm": "양재노인종합복지관", + "ycode": "37.4833239776", + "stop_no": "22271", + "xcode": "127.0421051056", + "stop_type": "일반차로", + "node_id": "121000195", + "nxtStn": "동원산업앞" + }, + { + "stop_nm": "블랙야크양재사옥", + "ycode": "37.4801407005", + "stop_no": "22272", + "xcode": "127.0411738713", + "stop_type": "일반차로", + "node_id": "121000196", + "nxtStn": "교육개발원입구사거리" + }, + { + "stop_nm": "현대빌라.에코맘코리아", + "ycode": "37.4761397871", + "stop_no": "22273", + "xcode": "127.0356382501", + "stop_type": "일반차로", + "node_id": "121000197", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "현대빌라.에코맘코리아", + "ycode": "37.476303", + "stop_no": "22274", + "xcode": "127.036092", + "stop_type": "일반차로", + "node_id": "121000198", + "nxtStn": "양재역.서초문화예술회관" + }, + { + "stop_nm": "우성아파트.양재초등학교", + "ycode": "37.474572", + "stop_no": "22275", + "xcode": "127.031828", + "stop_type": "일반차로", + "node_id": "121000199", + "nxtStn": "코오롱아파트.양재1동주민센터" + }, + { + "stop_nm": "우성아파트.양재초등학교", + "ycode": "37.474668", + "stop_no": "22276", + "xcode": "127.032753", + "stop_type": "일반차로", + "node_id": "121000200", + "nxtStn": "현대빌라.에코맘코리아" + }, + { + "stop_nm": "코오롱아파트.양재1동주민센터", + "ycode": "37.4723552457", + "stop_no": "22277", + "xcode": "127.0281898414", + "stop_type": "일반차로", + "node_id": "121000201", + "nxtStn": "우면주공아파트.우면한라아파트" + }, + { + "stop_nm": "우면코오롱아파트", + "ycode": "37.4720372808", + "stop_no": "22278", + "xcode": "127.0280952447", + "stop_type": "일반차로", + "node_id": "121000202", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "우면주공아파트.우면한라아파트", + "ycode": "37.4707123", + "stop_no": "22279", + "xcode": "127.0256888887", + "stop_type": "일반차로", + "node_id": "121000203", + "nxtStn": "삽준네마을" + }, + { + "stop_nm": "우면주공아파트.양재1동주민센터", + "ycode": "37.470782", + "stop_no": "22280", + "xcode": "127.026143", + "stop_type": "일반차로", + "node_id": "121000204", + "nxtStn": "우면코오롱아파트" + }, + { + "stop_nm": "서울시품질시험소한국교원단체총연합회", + "ycode": "37.4674326438", + "stop_no": "22281", + "xcode": "127.028006471", + "stop_type": "일반차로", + "node_id": "121000205", + "nxtStn": "성촌마을입구" + }, + { + "stop_nm": "서울시품질시험소한국교원단체총연합회", + "ycode": "37.4674469714", + "stop_no": "22282", + "xcode": "127.0283840715", + "stop_type": "일반차로", + "node_id": "121000206", + "nxtStn": "우면주공아파트.양재1동주민센터" + }, + { + "stop_nm": "네이처힐3.4단지", + "ycode": "37.465352", + "stop_no": "22283", + "xcode": "127.026143", + "stop_type": "일반차로", + "node_id": "121000207", + "nxtStn": "교총회관" + }, + { + "stop_nm": "성촌마을입구", + "ycode": "37.465357", + "stop_no": "22284", + "xcode": "127.024963", + "stop_type": "일반차로", + "node_id": "121000208", + "nxtStn": "삼성전자서울R&D" + }, + { + "stop_nm": "송동마을.서초힐스아파트", + "ycode": "37.459029969", + "stop_no": "22285", + "xcode": "127.0179066267", + "stop_type": "일반차로", + "node_id": "121000209", + "nxtStn": "서초호반써밋" + }, + { + "stop_nm": "송동마을.서초힐스아파트", + "ycode": "37.45850283", + "stop_no": "22286", + "xcode": "127.0178420688", + "stop_type": "일반차로", + "node_id": "121000210", + "nxtStn": "네이처힐5단지" + }, + { + "stop_nm": "식유촌우면성당.서초호반써밋", + "ycode": "37.4574383814", + "stop_no": "22287", + "xcode": "127.0127200934", + "stop_type": "일반차로", + "node_id": "121000211", + "nxtStn": "안골" + }, + { + "stop_nm": "식유촌우면성당.서초호반써밋", + "ycode": "37.4572390563", + "stop_no": "22288", + "xcode": "127.0142946658", + "stop_type": "일반차로", + "node_id": "121000212", + "nxtStn": "서초힐스아파트" + }, + { + "stop_nm": "양재역", + "ycode": "37.483686", + "stop_no": "22289", + "xcode": "127.03471", + "stop_type": "일반차로", + "node_id": "121000213", + "nxtStn": "일동제약사거리" + }, + { + "stop_nm": "양재역", + "ycode": "37.483427", + "stop_no": "22290", + "xcode": "127.035493", + "stop_type": "일반차로", + "node_id": "121000214", + "nxtStn": "서초구청" + }, + { + "stop_nm": "일동제약사거리", + "ycode": "37.478931", + "stop_no": "22291", + "xcode": "127.038295", + "stop_type": "일반차로", + "node_id": "121000215", + "nxtStn": "일동제약" + }, + { + "stop_nm": "일동제약사거리", + "ycode": "37.479563", + "stop_no": "22292", + "xcode": "127.038605", + "stop_type": "일반차로", + "node_id": "121000216", + "nxtStn": "양재역" + }, + { + "stop_nm": "양재2동주민센터.양재꽃시장", + "ycode": "37.4695857229", + "stop_no": "22293", + "xcode": "127.0394643327", + "stop_type": "가로변시간", + "node_id": "121000217", + "nxtStn": "언남고교" + }, + { + "stop_nm": "매헌시민의숲", + "ycode": "37.473135", + "stop_no": "22294", + "xcode": "127.038353", + "stop_type": "가로변시간", + "node_id": "121000218", + "nxtStn": "AT센터.양재꽃시장" + }, + { + "stop_nm": "언남고교", + "ycode": "37.4732795382", + "stop_no": "22295", + "xcode": "127.0389281035", + "stop_type": "가로변전일", + "node_id": "121000219", + "nxtStn": "교육개발원입구" + }, + { + "stop_nm": "매헌시민의숲.양재꽃시장", + "ycode": "37.470867", + "stop_no": "22296", + "xcode": "127.03836", + "stop_type": "가로변시간", + "node_id": "121000220", + "nxtStn": "염곡마을.서초50플러스센터" + }, + { + "stop_nm": "매헌시민의숲.양재꽃시장", + "ycode": "37.471255", + "stop_no": "22297", + "xcode": "127.039043", + "stop_type": "가로변전일", + "node_id": "121000221", + "nxtStn": "교육개발원입구" + }, + { + "stop_nm": "AT센터.양재꽃시장", + "ycode": "37.468707", + "stop_no": "22298", + "xcode": "127.039655", + "stop_type": "가로변시간", + "node_id": "121000222", + "nxtStn": "염곡지하차도북측(가상)" + }, + { + "stop_nm": "양곡도매시장", + "ycode": "37.460342", + "stop_no": "22299", + "xcode": "127.035197", + "stop_type": "일반차로", + "node_id": "121000223", + "nxtStn": "주암동" + }, + { + "stop_nm": "양곡도매시장", + "ycode": "37.460023", + "stop_no": "22300", + "xcode": "127.035252", + "stop_type": "일반차로", + "node_id": "121000224", + "nxtStn": "양재2동주민센터.양재꽃시장" + }, + { + "stop_nm": "하나로마트.코트라", + "ycode": "37.4638411943", + "stop_no": "22301", + "xcode": "127.0444478156", + "stop_type": "일반차로", + "node_id": "121000225", + "nxtStn": "서초포레스타2단지앞" + }, + { + "stop_nm": "코트라", + "ycode": "37.464867", + "stop_no": "22302", + "xcode": "127.044273", + "stop_type": "일반차로", + "node_id": "121000226", + "nxtStn": "서초IC(가상)" + }, + { + "stop_nm": "구룡사앞", + "ycode": "37.47021", + "stop_no": "22303", + "xcode": "127.048848", + "stop_type": "일반차로", + "node_id": "121000227", + "nxtStn": "도로교통공단서울지부.코트라" + }, + { + "stop_nm": "구룡사", + "ycode": "37.474022", + "stop_no": "22304", + "xcode": "127.048132", + "stop_type": "일반차로", + "node_id": "121000228", + "nxtStn": "구룡사입구" + }, + { + "stop_nm": "구룡사입구", + "ycode": "37.472103", + "stop_no": "22305", + "xcode": "127.050237", + "stop_type": "일반차로", + "node_id": "121000229", + "nxtStn": "능인선원앞" + }, + { + "stop_nm": "동원산업앞", + "ycode": "37.4766473684", + "stop_no": "22306", + "xcode": "127.0453961106", + "stop_type": "일반차로", + "node_id": "121000230", + "nxtStn": "구룡사" + }, + { + "stop_nm": "언남고포이성당앞", + "ycode": "37.4720326359", + "stop_no": "22307", + "xcode": "127.0458263366", + "stop_type": "일반차로", + "node_id": "121000231", + "nxtStn": "소방서앞" + }, + { + "stop_nm": "양재119안전센터앞", + "ycode": "37.469496", + "stop_no": "22308", + "xcode": "127.041248", + "stop_type": "일반차로", + "node_id": "121000232", + "nxtStn": "언남중고교" + }, + { + "stop_nm": "소방서앞", + "ycode": "37.4699309709", + "stop_no": "22309", + "xcode": "127.0417267679", + "stop_type": "일반차로", + "node_id": "121000233", + "nxtStn": "하나로마트.코트라" + }, + { + "stop_nm": "꽃마을", + "ycode": "37.460633", + "stop_no": "22310", + "xcode": "127.046364", + "stop_type": "일반차로", + "node_id": "121000234", + "nxtStn": "개나리골입구" + }, + { + "stop_nm": "꽃마을", + "ycode": "37.4604305782", + "stop_no": "22311", + "xcode": "127.0465822876", + "stop_type": "일반차로", + "node_id": "121000235", + "nxtStn": "코트라" + }, + { + "stop_nm": "개나리골입구", + "ycode": "37.4574411837", + "stop_no": "22312", + "xcode": "127.0476271592", + "stop_type": "일반차로", + "node_id": "121000236", + "nxtStn": "새원마을" + }, + { + "stop_nm": "개나리골입구", + "ycode": "37.457284", + "stop_no": "22313", + "xcode": "127.048026", + "stop_type": "일반차로", + "node_id": "121000237", + "nxtStn": "꽃마을" + }, + { + "stop_nm": "새원마을", + "ycode": "37.4542914263", + "stop_no": "22314", + "xcode": "127.0507075609", + "stop_type": "일반차로", + "node_id": "121000238", + "nxtStn": "본마을" + }, + { + "stop_nm": "새원마을", + "ycode": "37.4544761173", + "stop_no": "22315", + "xcode": "127.0507924603", + "stop_type": "일반차로", + "node_id": "121000239", + "nxtStn": "개나리골입구" + }, + { + "stop_nm": "본마을", + "ycode": "37.4532630544", + "stop_no": "22316", + "xcode": "127.051184988", + "stop_type": "일반차로", + "node_id": "121000240", + "nxtStn": "본마을노인복지센터" + }, + { + "stop_nm": "본마을", + "ycode": "37.453454", + "stop_no": "22317", + "xcode": "127.051343", + "stop_type": "일반차로", + "node_id": "121000241", + "nxtStn": "새원마을" + }, + { + "stop_nm": "청계산.원터골", + "ycode": "37.4444526002", + "stop_no": "22318", + "xcode": "127.0577012426", + "stop_type": "일반차로", + "node_id": "121000242", + "nxtStn": "관현사입구" + }, + { + "stop_nm": "청계산.원터골", + "ycode": "37.4448950615", + "stop_no": "22319", + "xcode": "127.0576688071", + "stop_type": "일반차로", + "node_id": "121000243", + "nxtStn": "서초포레스타7단지" + }, + { + "stop_nm": "관현사입구", + "ycode": "37.4373210738", + "stop_no": "22320", + "xcode": "127.0632387636", + "stop_type": "일반차로", + "node_id": "121000244", + "nxtStn": "새쟁이마을" + }, + { + "stop_nm": "관현사입구", + "ycode": "37.437154", + "stop_no": "22321", + "xcode": "127.063704", + "stop_type": "일반차로", + "node_id": "121000245", + "nxtStn": "청계산.원터골" + }, + { + "stop_nm": "새쟁이마을", + "ycode": "37.434511", + "stop_no": "22322", + "xcode": "127.066179", + "stop_type": "일반차로", + "node_id": "121000246", + "nxtStn": "옛골" + }, + { + "stop_nm": "새쟁이마을", + "ycode": "37.4347964213", + "stop_no": "22323", + "xcode": "127.0660515509", + "stop_type": "일반차로", + "node_id": "121000247", + "nxtStn": "관현사입구" + }, + { + "stop_nm": "옛골", + "ycode": "37.430946", + "stop_no": "22324", + "xcode": "127.070438", + "stop_type": "일반차로", + "node_id": "121000248", + "nxtStn": "새쟁이마을" + }, + { + "stop_nm": "염곡마을.서초50플러스센터", + "ycode": "37.4616076133", + "stop_no": "22325", + "xcode": "127.0488630085", + "stop_type": "가로변전일", + "node_id": "121000249", + "nxtStn": "탑성마을" + }, + { + "stop_nm": "염곡마을.서초50플러스센터", + "ycode": "37.46200197", + "stop_no": "22326", + "xcode": "127.0491561488", + "stop_type": "가로변시간", + "node_id": "121000250", + "nxtStn": "코트라" + }, + { + "stop_nm": "탑성마을", + "ycode": "37.458377", + "stop_no": "22327", + "xcode": "127.056619", + "stop_type": "일반차로", + "node_id": "121000251", + "nxtStn": "서초포레스타3단지정문" + }, + { + "stop_nm": "탑성마을", + "ycode": "37.459469", + "stop_no": "22328", + "xcode": "127.054865", + "stop_type": "일반차로", + "node_id": "121000252", + "nxtStn": "염곡마을.서초50플러스센터" + }, + { + "stop_nm": "안골마을", + "ycode": "37.4562835966", + "stop_no": "22330", + "xcode": "127.0623888747", + "stop_type": "일반차로", + "node_id": "121000254", + "nxtStn": "코트라" + }, + { + "stop_nm": "서울특별시어린이병원.강동송파과학화예비군훈련장", + "ycode": "37.456646", + "stop_no": "22331", + "xcode": "127.070208", + "stop_type": "일반차로", + "node_id": "121000255", + "nxtStn": "헌인릉.강남서초과학화예비군훈련장" + }, + { + "stop_nm": "서울특별시어린이병원.강동송파과학화예비군훈련장", + "ycode": "37.4575866482", + "stop_no": "22332", + "xcode": "127.0718263325", + "stop_type": "일반차로", + "node_id": "121000256", + "nxtStn": "서초더샵포레" + }, + { + "stop_nm": "헌인릉.강남서초과학화예비군훈련장", + "ycode": "37.459744", + "stop_no": "22333", + "xcode": "127.079544", + "stop_type": "일반차로", + "node_id": "121000257", + "nxtStn": "예비군훈련장" + }, + { + "stop_nm": "헌인릉.강남서초과학화예비군훈련장", + "ycode": "37.4611155017", + "stop_no": "22334", + "xcode": "127.0826829531", + "stop_type": "일반차로", + "node_id": "121000258", + "nxtStn": "샘마을.서울특별시어린이병원" + }, + { + "stop_nm": "헌인농장", + "ycode": "37.4614213099", + "stop_no": "22335", + "xcode": "127.0847576347", + "stop_type": "일반차로", + "node_id": "121000259", + "nxtStn": "헌인마을.서울농업기술센터" + }, + { + "stop_nm": "헌인마을.서울농업기술센터", + "ycode": "37.4636402535", + "stop_no": "22336", + "xcode": "127.0914525016", + "stop_type": "일반차로", + "node_id": "121000260", + "nxtStn": "강남효성해링턴코트" + }, + { + "stop_nm": "헌인마을.서울농업기술센터", + "ycode": "37.463344", + "stop_no": "22337", + "xcode": "127.08959", + "stop_type": "일반차로", + "node_id": "121000261", + "nxtStn": "헌인릉.강남서초과학화예비군훈련장" + }, + { + "stop_nm": "서초소방서", + "ycode": "37.4983505745", + "stop_no": "22338", + "xcode": "126.992551994", + "stop_type": "마을버스", + "node_id": "121900004", + "nxtStn": "서초구민체육센터" + }, + { + "stop_nm": "강남역", + "ycode": "37.4975009943", + "stop_no": "22339", + "xcode": "127.0268505284", + "stop_type": "일반차로", + "node_id": "121000262", + "nxtStn": "수협서초지점" + }, + { + "stop_nm": "방배동래미안타워.동덕여중고", + "ycode": "37.474758", + "stop_no": "22340", + "xcode": "126.990623", + "stop_type": "일반차로", + "node_id": "121000263", + "nxtStn": "대항병원.연세사랑병원" + }, + { + "stop_nm": "옛골", + "ycode": "37.4305370286", + "stop_no": "22341", + "xcode": "127.0707733294", + "stop_type": "일반차로", + "node_id": "121001330", + "nxtStn": "청계산옛골" + }, + { + "stop_nm": "헌인가구단지", + "ycode": "37.459688", + "stop_no": "22343", + "xcode": "127.086699", + "stop_type": "마을버스", + "node_id": "121900005", + "nxtStn": "헌인마을" + }, + { + "stop_nm": "내방역8번출구", + "ycode": "37.4880351307", + "stop_no": "22344", + "xcode": "126.9947563208", + "stop_type": "마을버스", + "node_id": "121900006", + "nxtStn": "이수역" + }, + { + "stop_nm": "교대역5번출구", + "ycode": "37.4937995917", + "stop_no": "22345", + "xcode": "127.0147370359", + "stop_type": "마을버스", + "node_id": "121900007", + "nxtStn": "프로비스타호텔.서초동유원아파트" + }, + { + "stop_nm": "서초힐스아파트", + "ycode": "37.4577874974", + "stop_no": "22347", + "xcode": "127.016833601", + "stop_type": "일반차로", + "node_id": "121000985", + "nxtStn": "송동마을.서초힐스아파트" + }, + { + "stop_nm": "강남역하나은행", + "ycode": "37.4969583114", + "stop_no": "22348", + "xcode": "127.0277969551", + "stop_type": "일반차로", + "node_id": "121000271", + "nxtStn": "수협서초지점" + }, + { + "stop_nm": "사당역1번출구", + "ycode": "37.4761745327", + "stop_no": "22363", + "xcode": "126.9827009681", + "stop_type": "마을버스", + "node_id": "121900009", + "nxtStn": "동덕여중고" + }, + { + "stop_nm": "남부시장", + "ycode": "37.4950765232", + "stop_no": "22364", + "xcode": "126.985816874", + "stop_type": "마을버스", + "node_id": "121900010", + "nxtStn": "유경약국" + }, + { + "stop_nm": "강남의림한방병원", + "ycode": "37.490811", + "stop_no": "22365", + "xcode": "126.983416", + "stop_type": "마을버스", + "node_id": "121900255", + "nxtStn": "카페골목입구" + }, + { + "stop_nm": "염곡동구룡사", + "ycode": "37.468475", + "stop_no": "22367", + "xcode": "127.047211", + "stop_type": "일반차로", + "node_id": "121000289", + "nxtStn": "능인선원앞" + }, + { + "stop_nm": "국제전자센터", + "ycode": "37.485159", + "stop_no": "22368", + "xcode": "127.017723", + "stop_type": "일반차로", + "node_id": "121000290", + "nxtStn": "서일초등학교" + }, + { + "stop_nm": "염곡동구룡사", + "ycode": "37.4683281101", + "stop_no": "22369", + "xcode": "127.0471332159", + "stop_type": "마을버스", + "node_id": "121900333", + "nxtStn": "구룡사입구" + }, + { + "stop_nm": "형촌마을입구(서초네이처힐1.2단지)", + "ycode": "37.463688", + "stop_no": "22372", + "xcode": "127.021443", + "stop_type": "일반차로", + "node_id": "121000294", + "nxtStn": "네이처힐5단지" + }, + { + "stop_nm": "국제전자센터", + "ycode": "37.4854351267", + "stop_no": "22376", + "xcode": "127.0177580083", + "stop_type": "일반차로", + "node_id": "121000297", + "nxtStn": "남부터미널.한일시멘트" + }, + { + "stop_nm": "도로교통공단서울지부.코트라", + "ycode": "37.4662408667", + "stop_no": "22378", + "xcode": "127.0443893195", + "stop_type": "일반차로", + "node_id": "121000299", + "nxtStn": "염곡동구룡사" + }, + { + "stop_nm": "서초역3번출구", + "ycode": "37.491127", + "stop_no": "22379", + "xcode": "127.007737", + "stop_type": "일반차로", + "node_id": "121000300", + "nxtStn": "서초동삼성아파트" + }, + { + "stop_nm": "서초구민체육센터", + "ycode": "37.498382", + "stop_no": "22380", + "xcode": "126.990307", + "stop_type": "마을버스", + "node_id": "121900011", + "nxtStn": "동부센트레빌2" + }, + { + "stop_nm": "반포대교남단.한강시민공원입구", + "ycode": "37.507812", + "stop_no": "22381", + "xcode": "126.999468", + "stop_type": "일반차로", + "node_id": "121000302", + "nxtStn": "고속터미널" + }, + { + "stop_nm": "반포대교남단.한강시민공원입구", + "ycode": "37.5069439929", + "stop_no": "22382", + "xcode": "127.0003902363", + "stop_type": "일반차로", + "node_id": "121000303", + "nxtStn": "한강중학교" + }, + { + "stop_nm": "헌인마을", + "ycode": "37.4615398772", + "stop_no": "22383", + "xcode": "127.0901408997", + "stop_type": "마을버스", + "node_id": "121900012", + "nxtStn": "헌인마을.서울농업기술센터" + }, + { + "stop_nm": "하이브랜드", + "ycode": "37.4620911714", + "stop_no": "22384", + "xcode": "127.0367880249", + "stop_type": "마을버스", + "node_id": "121900013", + "nxtStn": "잔디마을" + }, + { + "stop_nm": "이수역", + "ycode": "37.485494", + "stop_no": "22385", + "xcode": "126.984201", + "stop_type": "일반차로", + "node_id": "121000304", + "nxtStn": "방배초등학교" + }, + { + "stop_nm": "방배초등학교", + "ycode": "37.4857402567", + "stop_no": "22386", + "xcode": "126.9864538307", + "stop_type": "일반차로", + "node_id": "121000305", + "nxtStn": "방배고개" + }, + { + "stop_nm": "방배고개", + "ycode": "37.486497", + "stop_no": "22387", + "xcode": "126.99018", + "stop_type": "일반차로", + "node_id": "121000306", + "nxtStn": "내방역1번출구" + }, + { + "stop_nm": "방배역", + "ycode": "37.481445", + "stop_no": "22388", + "xcode": "126.998422", + "stop_type": "가로변시간", + "node_id": "121000307", + "nxtStn": "서울고교" + }, + { + "stop_nm": "내방역3번출구", + "ycode": "37.4867762516", + "stop_no": "22389", + "xcode": "126.9939998932", + "stop_type": "마을버스", + "node_id": "121900014", + "nxtStn": "방일초등학교" + }, + { + "stop_nm": "방일초교", + "ycode": "37.485952", + "stop_no": "22390", + "xcode": "126.994948", + "stop_type": "일반차로", + "node_id": "121000308", + "nxtStn": "내방역" + }, + { + "stop_nm": "내방역", + "ycode": "37.487527", + "stop_no": "22391", + "xcode": "126.992748", + "stop_type": "일반차로", + "node_id": "121000309", + "nxtStn": "방배고개" + }, + { + "stop_nm": "방배고개", + "ycode": "37.486386", + "stop_no": "22392", + "xcode": "126.988805", + "stop_type": "일반차로", + "node_id": "121000310", + "nxtStn": "이수역" + }, + { + "stop_nm": "이수역", + "ycode": "37.485864", + "stop_no": "22393", + "xcode": "126.984646", + "stop_type": "일반차로", + "node_id": "121000311", + "nxtStn": "남성초등학교입구" + }, + { + "stop_nm": "방배역", + "ycode": "37.4814407431", + "stop_no": "22394", + "xcode": "126.9983468981", + "stop_type": "가로변시간", + "node_id": "121000312", + "nxtStn": "신동아아파트앞" + }, + { + "stop_nm": "방배역", + "ycode": "37.482326", + "stop_no": "22395", + "xcode": "126.997238", + "stop_type": "일반차로", + "node_id": "121000313", + "nxtStn": "방배역.방배서리풀이편한세상" + }, + { + "stop_nm": "동작대교전망카페", + "ycode": "37.5057628053", + "stop_no": "22396", + "xcode": "126.9802792405", + "stop_type": "일반차로", + "node_id": "121000314", + "nxtStn": "갯마을앞" + }, + { + "stop_nm": "동작대교전망카페", + "ycode": "37.505858", + "stop_no": "22397", + "xcode": "126.980812", + "stop_type": "일반차로", + "node_id": "121000315", + "nxtStn": "서빙고역1번출구" + }, + { + "stop_nm": "서초포레스타입구", + "ycode": "37.456753", + "stop_no": "22399", + "xcode": "127.06016", + "stop_type": "일반차로", + "node_id": "121000987", + "nxtStn": "서초포레스타2단지앞" + }, + { + "stop_nm": "삼성래미안아파트", + "ycode": "37.4949659925", + "stop_no": "22400", + "xcode": "127.0184931133", + "stop_type": "마을버스", + "node_id": "121900015", + "nxtStn": "서초성당" + }, + { + "stop_nm": "청계산입구역", + "ycode": "37.448455", + "stop_no": "22401", + "xcode": "127.054443", + "stop_type": "일반차로", + "node_id": "121000962", + "nxtStn": "청계산.원터골" + }, + { + "stop_nm": "청계산입구역", + "ycode": "37.449475", + "stop_no": "22402", + "xcode": "127.053685", + "stop_type": "일반차로", + "node_id": "121000961", + "nxtStn": "본마을" + }, + { + "stop_nm": "서초포레스타7단지", + "ycode": "37.447572", + "stop_no": "22403", + "xcode": "127.055573", + "stop_type": "일반차로", + "node_id": "121000981", + "nxtStn": "청계산입구역" + }, + { + "stop_nm": "반포한강공원.세빛섬", + "ycode": "37.512668", + "stop_no": "22404", + "xcode": "126.997266", + "stop_type": "일반차로", + "node_id": "121000939", + "nxtStn": "서울지방조달청.서울성모병원" + }, + { + "stop_nm": "반포한강공원.세빛섬", + "ycode": "37.51225", + "stop_no": "22405", + "xcode": "126.99776", + "stop_type": "일반차로", + "node_id": "121000938", + "nxtStn": "한강중학교" + }, + { + "stop_nm": "신논현역.주류성빌딩", + "ycode": "37.501058785", + "stop_no": "22406", + "xcode": "127.0257863714", + "stop_type": "일반차로", + "node_id": "121000944", + "nxtStn": "강남역10번출구(경유)" + }, + { + "stop_nm": "신논현역.BSX빌딩", + "ycode": "37.5012831839", + "stop_no": "22407", + "xcode": "127.0256744762", + "stop_type": "일반차로", + "node_id": "121000945", + "nxtStn": "강남역.지오다노(경유)" + }, + { + "stop_nm": "신논현역.유화빌딩", + "ycode": "37.5015319154", + "stop_no": "22408", + "xcode": "127.0255490162", + "stop_type": "일반차로", + "node_id": "121000947", + "nxtStn": "강남역.지오다노(경유)" + }, + { + "stop_nm": "신논현역.금강빌딩", + "ycode": "37.5017311633", + "stop_no": "22409", + "xcode": "127.0255227411", + "stop_type": "일반차로", + "node_id": "121000946", + "nxtStn": "강남역.지오다노(경유)" + }, + { + "stop_nm": "신논현역.우신빌딩", + "ycode": "37.5019951314", + "stop_no": "22410", + "xcode": "127.0253195719", + "stop_type": "일반차로", + "node_id": "121000943", + "nxtStn": "강남역도시에빛" + }, + { + "stop_nm": "신논현역.인터파크", + "ycode": "37.5021717639", + "stop_no": "22411", + "xcode": "127.0252427203", + "stop_type": "일반차로", + "node_id": "121000942", + "nxtStn": "강남역.지오다노(경유)" + }, + { + "stop_nm": "신논현역.영신빌딩", + "ycode": "37.5023781366", + "stop_no": "22412", + "xcode": "127.0251477815", + "stop_type": "일반차로", + "node_id": "121000941", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "신논현역.씨티은행", + "ycode": "37.5027683529", + "stop_no": "22413", + "xcode": "127.0249635502", + "stop_type": "일반차로", + "node_id": "121000940", + "nxtStn": "강남역티월드" + }, + { + "stop_nm": "내방역1번출구", + "ycode": "37.487993", + "stop_no": "22415", + "xcode": "126.995335", + "stop_type": "일반차로", + "node_id": "121001327", + "nxtStn": "서리풀문화광장" + }, + { + "stop_nm": "매헌시민의숲", + "ycode": "37.4730822004", + "stop_no": "22416", + "xcode": "127.0389144339", + "stop_type": "마을버스", + "node_id": "121900016", + "nxtStn": "교육개발원입구사거리" + }, + { + "stop_nm": "동덕여중고", + "ycode": "37.4741687951", + "stop_no": "22417", + "xcode": "126.9924722956", + "stop_type": "마을버스", + "node_id": "121900017", + "nxtStn": "방배래미안타워" + }, + { + "stop_nm": "유경약국", + "ycode": "37.4936654408", + "stop_no": "22418", + "xcode": "126.9862027844", + "stop_type": "마을버스", + "node_id": "121900018", + "nxtStn": "카페골목입구" + }, + { + "stop_nm": "남부터미널", + "ycode": "37.4846839172", + "stop_no": "22419", + "xcode": "127.0155437556", + "stop_type": "마을버스", + "node_id": "121900226", + "nxtStn": "국제전자센터" + }, + { + "stop_nm": "동부센트레빌2", + "ycode": "37.4980323894", + "stop_no": "22420", + "xcode": "126.9880579276", + "stop_type": "마을버스", + "node_id": "121900019", + "nxtStn": "방배신삼호아파트" + }, + { + "stop_nm": "헌인마을.서울농업기술센터", + "ycode": "37.463382", + "stop_no": "22421", + "xcode": "127.089608", + "stop_type": "마을버스", + "node_id": "121900020", + "nxtStn": "헌인릉.꽃시장" + }, + { + "stop_nm": "잔디마을", + "ycode": "37.4635271111", + "stop_no": "22422", + "xcode": "127.0352320779", + "stop_type": "마을버스", + "node_id": "121900021", + "nxtStn": "더케이호텔후문" + }, + { + "stop_nm": "방일초등학교", + "ycode": "37.4852218926", + "stop_no": "22423", + "xcode": "126.9950041608", + "stop_type": "마을버스", + "node_id": "121900022", + "nxtStn": "방배1동주민센터.방배아크로타워" + }, + { + "stop_nm": "네이처힐5단지", + "ycode": "37.463322", + "stop_no": "22424", + "xcode": "127.023893", + "stop_type": "일반차로", + "node_id": "121000956", + "nxtStn": "네이처힐3.4단지" + }, + { + "stop_nm": "대법원앞", + "ycode": "37.49167", + "stop_no": "22426", + "xcode": "127.006529", + "stop_type": "일반차로", + "node_id": "121001328", + "nxtStn": "내방역" + }, + { + "stop_nm": "교육개발원입구사거리", + "ycode": "37.4795630391", + "stop_no": "22427", + "xcode": "127.0386622548", + "stop_type": "마을버스", + "node_id": "121900273", + "nxtStn": "양재역.종합복지관" + }, + { + "stop_nm": "방배래미안타워", + "ycode": "37.4746336482", + "stop_no": "22429", + "xcode": "126.9908068274", + "stop_type": "마을버스", + "node_id": "121900266", + "nxtStn": "대항병원.연세사랑병원" + }, + { + "stop_nm": "이수역5번출구", + "ycode": "37.4854678425", + "stop_no": "22430", + "xcode": "126.984184691", + "stop_type": "마을버스", + "node_id": "121900024", + "nxtStn": "내방역제일병원" + }, + { + "stop_nm": "이수중앙시장", + "ycode": "37.4921140295", + "stop_no": "22431", + "xcode": "126.9889556704", + "stop_type": "마을버스", + "node_id": "121900025", + "nxtStn": "함지박사거리" + }, + { + "stop_nm": "국제전자센터", + "ycode": "37.485082815", + "stop_no": "22432", + "xcode": "127.0176222301", + "stop_type": "마을버스", + "node_id": "121900026", + "nxtStn": "서일초등학교" + }, + { + "stop_nm": "방배신삼호아파트", + "ycode": "37.4979488983", + "stop_no": "22433", + "xcode": "126.9916917922", + "stop_type": "마을버스", + "node_id": "121900027", + "nxtStn": "이수화학" + }, + { + "stop_nm": "헌인릉.꽃시장", + "ycode": "37.461503", + "stop_no": "22434", + "xcode": "127.08362", + "stop_type": "마을버스", + "node_id": "121900288", + "nxtStn": "예비군훈련장" + }, + { + "stop_nm": "더케이호텔후문", + "ycode": "37.4653349981", + "stop_no": "22435", + "xcode": "127.0343341849", + "stop_type": "마을버스", + "node_id": "121900028", + "nxtStn": "더케이호텔정문" + }, + { + "stop_nm": "방배1동주민센터.방배아크로타워", + "ycode": "37.483491", + "stop_no": "22436", + "xcode": "126.996256", + "stop_type": "마을버스", + "node_id": "121900259", + "nxtStn": "방배역1번출구" + }, + { + "stop_nm": "삼성레포츠", + "ycode": "37.4922064267", + "stop_no": "22437", + "xcode": "127.0208164268", + "stop_type": "마을버스", + "node_id": "121900029", + "nxtStn": "대림약국" + }, + { + "stop_nm": "원불교", + "ycode": "37.4833310663", + "stop_no": "22439", + "xcode": "127.0424409464", + "stop_type": "마을버스", + "node_id": "121900030", + "nxtStn": "양재역4번출구" + }, + { + "stop_nm": "양재역7번출구.프라자약국", + "ycode": "37.4837218339", + "stop_no": "22440", + "xcode": "127.0351590128", + "stop_type": "마을버스", + "node_id": "121900031", + "nxtStn": "뱅뱅사거리.구영동중학교" + }, + { + "stop_nm": "연세사랑병원", + "ycode": "37.476277741", + "stop_no": "22442", + "xcode": "126.9863880175", + "stop_type": "마을버스", + "node_id": "121900267", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "방배초등학교", + "ycode": "37.485736", + "stop_no": "22443", + "xcode": "126.986368", + "stop_type": "마을버스", + "node_id": "121900032", + "nxtStn": "방배고개" + }, + { + "stop_nm": "함지박사거리", + "ycode": "37.4930288433", + "stop_no": "22445", + "xcode": "126.9912671152", + "stop_type": "마을버스", + "node_id": "121900033", + "nxtStn": "방배성당앞" + }, + { + "stop_nm": "서일초등학교", + "ycode": "37.4861131293", + "stop_no": "22446", + "xcode": "127.0209866183", + "stop_type": "마을버스", + "node_id": "121900223", + "nxtStn": "현대아파트.한국상담대학원대학교" + }, + { + "stop_nm": "이수화학", + "ycode": "37.4980301028", + "stop_no": "22447", + "xcode": "126.9933543313", + "stop_type": "마을버스", + "node_id": "121900034", + "nxtStn": "서래마을입구" + }, + { + "stop_nm": "예비군훈련장", + "ycode": "37.455543466", + "stop_no": "22448", + "xcode": "127.0807710572", + "stop_type": "마을버스", + "node_id": "121900286", + "nxtStn": "신흥마을입구" + }, + { + "stop_nm": "더케이호텔정문", + "ycode": "37.468301508", + "stop_no": "22449", + "xcode": "127.0341150869", + "stop_type": "마을버스", + "node_id": "121900284", + "nxtStn": "예술공원" + }, + { + "stop_nm": "방배역1번출구", + "ycode": "37.4814662847", + "stop_no": "22450", + "xcode": "126.9985453816", + "stop_type": "마을버스", + "node_id": "121900035", + "nxtStn": "신동아아파트앞" + }, + { + "stop_nm": "대림약국", + "ycode": "37.4904357473", + "stop_no": "22451", + "xcode": "127.0208736098", + "stop_type": "마을버스", + "node_id": "121900036", + "nxtStn": "창신교회.서리풀노리학교" + }, + { + "stop_nm": "반포래미안아이파크아파트", + "ycode": "37.5009627535", + "stop_no": "22452", + "xcode": "127.0121585657", + "stop_type": "마을버스", + "node_id": "121900037", + "nxtStn": "서초구립반포도서관.반포리체" + }, + { + "stop_nm": "방배고개", + "ycode": "37.4862118385", + "stop_no": "22455", + "xcode": "126.9894179086", + "stop_type": "마을버스", + "node_id": "121900038", + "nxtStn": "장자터빌딩" + }, + { + "stop_nm": "함지박사거리", + "ycode": "37.4922655561", + "stop_no": "22456", + "xcode": "126.9905852724", + "stop_type": "마을버스", + "node_id": "121900039", + "nxtStn": "방배열린문화센터(방배4동주민센터)" + }, + { + "stop_nm": "서래초교", + "ycode": "37.4952967316", + "stop_no": "22457", + "xcode": "126.9889993086", + "stop_type": "마을버스", + "node_id": "121900040", + "nxtStn": "동부센트레빌1" + }, + { + "stop_nm": "방배성당앞", + "ycode": "37.4936363379", + "stop_no": "22458", + "xcode": "126.9936238794", + "stop_type": "마을버스", + "node_id": "121900041", + "nxtStn": "필리핀대사관" + }, + { + "stop_nm": "현대아파트.한국상담대학원대학교", + "ycode": "37.4868903084", + "stop_no": "22459", + "xcode": "127.0235051656", + "stop_type": "마을버스", + "node_id": "121900224", + "nxtStn": "서초그랑자이아파트" + }, + { + "stop_nm": "한국회관.ROTC중앙회", + "ycode": "37.4987042254", + "stop_no": "22460", + "xcode": "126.9954070281", + "stop_type": "마을버스", + "node_id": "121900042", + "nxtStn": "반포종합운동장" + }, + { + "stop_nm": "신흥마을입구", + "ycode": "37.4586102133", + "stop_no": "22461", + "xcode": "127.0816843202", + "stop_type": "마을버스", + "node_id": "121900287", + "nxtStn": "서울특별시어린이병원.강동송파과학화예비군훈련장" + }, + { + "stop_nm": "예술공원", + "ycode": "37.4699888265", + "stop_no": "22462", + "xcode": "127.0325353274", + "stop_type": "마을버스", + "node_id": "121900043", + "nxtStn": "kt연구소" + }, + { + "stop_nm": "사당역13번출구", + "ycode": "37.477118", + "stop_no": "22464", + "xcode": "126.982641", + "stop_type": "마을버스", + "node_id": "121900044", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "서초구립반포도서관.반포리체", + "ycode": "37.5026207465", + "stop_no": "22466", + "xcode": "127.0124970198", + "stop_type": "마을버스", + "node_id": "121900046", + "nxtStn": "반포리체" + }, + { + "stop_nm": "서초문화예술정보학교후문", + "ycode": "37.4867142254", + "stop_no": "22468", + "xcode": "127.0291942381", + "stop_type": "마을버스", + "node_id": "121900047", + "nxtStn": "래미안리더스원아파트" + }, + { + "stop_nm": "장자터빌딩", + "ycode": "37.485106263", + "stop_no": "22471", + "xcode": "126.9903543589", + "stop_type": "마을버스", + "node_id": "121900048", + "nxtStn": "방배브라운가아파트" + }, + { + "stop_nm": "동부센트레빌1", + "ycode": "37.4976529669", + "stop_no": "22473", + "xcode": "126.9874958912", + "stop_type": "마을버스", + "node_id": "121900050", + "nxtStn": "동부센트레빌2" + }, + { + "stop_nm": "필리핀대사관", + "ycode": "37.4939491206", + "stop_no": "22474", + "xcode": "126.9958664743", + "stop_type": "마을버스", + "node_id": "121900051", + "nxtStn": "방배중학교" + }, + { + "stop_nm": "서초그랑자이아파트", + "ycode": "37.4877448571", + "stop_no": "22475", + "xcode": "127.0263472092", + "stop_type": "마을버스", + "node_id": "121900052", + "nxtStn": "래미안리더스원아파트" + }, + { + "stop_nm": "삼성래미안", + "ycode": "37.502693", + "stop_no": "22476", + "xcode": "126.995422", + "stop_type": "마을버스", + "node_id": "121900053", + "nxtStn": "반포래미안" + }, + { + "stop_nm": "kt연구소", + "ycode": "37.4717085715", + "stop_no": "22478", + "xcode": "127.0309238538", + "stop_type": "일반차로", + "node_id": "121000984", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "상문고등학교", + "ycode": "37.4821455353", + "stop_no": "22479", + "xcode": "127.0046089193", + "stop_type": "마을버스", + "node_id": "121900054", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "반포리체", + "ycode": "37.5023844886", + "stop_no": "22480", + "xcode": "127.0140046712", + "stop_type": "마을버스", + "node_id": "121900055", + "nxtStn": "반포래미안아이파크아파트후문" + }, + { + "stop_nm": "백산빌딩", + "ycode": "37.4791373946", + "stop_no": "22486", + "xcode": "126.9910358078", + "stop_type": "마을버스", + "node_id": "121900058", + "nxtStn": "대우효령아파트" + }, + { + "stop_nm": "방배브라운가아파트", + "ycode": "37.4841087897", + "stop_no": "22487", + "xcode": "126.9909865905", + "stop_type": "마을버스", + "node_id": "121900260", + "nxtStn": "동문빌라" + }, + { + "stop_nm": "방배열린문화센터.가야치과병원", + "ycode": "37.4893578225", + "stop_no": "22488", + "xcode": "126.9923780416", + "stop_type": "마을버스", + "node_id": "121900059", + "nxtStn": "내방역3번출구" + }, + { + "stop_nm": "방배중학교", + "ycode": "37.495387339", + "stop_no": "22489", + "xcode": "126.9981113214", + "stop_type": "마을버스", + "node_id": "121900060", + "nxtStn": "효성빌라" + }, + { + "stop_nm": "반포래미안", + "ycode": "37.5045840073", + "stop_no": "22491", + "xcode": "127.0003970105", + "stop_type": "마을버스", + "node_id": "121900062", + "nxtStn": "호남고속터미널" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.4746627796", + "stop_no": "22493", + "xcode": "127.0328539307", + "stop_type": "마을버스", + "node_id": "121900063", + "nxtStn": "현대빌라" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.4800296953", + "stop_no": "22494", + "xcode": "127.0056275624", + "stop_type": "마을버스", + "node_id": "121900064", + "nxtStn": "방배빌딩.방배아트힐아파트정문" + }, + { + "stop_nm": "반포래미안아이파크아파트후문", + "ycode": "37.5020978707", + "stop_no": "22496", + "xcode": "127.0145622236", + "stop_type": "마을버스", + "node_id": "121900066", + "nxtStn": "반포고교" + }, + { + "stop_nm": "반포고교", + "ycode": "37.5017030173", + "stop_no": "22497", + "xcode": "127.0158854643", + "stop_type": "마을버스", + "node_id": "121900067", + "nxtStn": "반포리체" + }, + { + "stop_nm": "서초문화예술정보학교", + "ycode": "37.488067", + "stop_no": "22499", + "xcode": "127.03217", + "stop_type": "마을버스", + "node_id": "121900069", + "nxtStn": "양재역" + }, + { + "stop_nm": "교총회관", + "ycode": "37.4673929326", + "stop_no": "22500", + "xcode": "127.0282687376", + "stop_type": "마을버스", + "node_id": "121900070", + "nxtStn": "삽준네마을" + }, + { + "stop_nm": "대우효령아파트", + "ycode": "37.4799386393", + "stop_no": "22501", + "xcode": "126.9935074494", + "stop_type": "마을버스", + "node_id": "121900071", + "nxtStn": "방배(백석예술대)역.서초프라자약국" + }, + { + "stop_nm": "동문빌라", + "ycode": "37.48299", + "stop_no": "22502", + "xcode": "126.991841", + "stop_type": "마을버스", + "node_id": "121900072", + "nxtStn": "이수중학교" + }, + { + "stop_nm": "효성빌라", + "ycode": "37.496675", + "stop_no": "22503", + "xcode": "126.998332", + "stop_type": "마을버스", + "node_id": "121900073", + "nxtStn": "서래마을.서래글로벌빌리지센터" + }, + { + "stop_nm": "서초포레스타3단지정문", + "ycode": "37.4554282126", + "stop_no": "22504", + "xcode": "127.0593384984", + "stop_type": "마을버스", + "node_id": "121900310", + "nxtStn": "언남초등학교" + }, + { + "stop_nm": "호남고속터미널", + "ycode": "37.5054364064", + "stop_no": "22505", + "xcode": "127.0032236261", + "stop_type": "마을버스", + "node_id": "121900074", + "nxtStn": "경부고속터미널" + }, + { + "stop_nm": "서초포레스타3단지정문", + "ycode": "37.455326281", + "stop_no": "22506", + "xcode": "127.0595497917", + "stop_type": "마을버스", + "node_id": "121900311", + "nxtStn": "탑성마을" + }, + { + "stop_nm": "현대빌라", + "ycode": "37.476304", + "stop_no": "22507", + "xcode": "127.036092", + "stop_type": "마을버스", + "node_id": "121900075", + "nxtStn": "일동제약" + }, + { + "stop_nm": "방배빌딩.방배아트힐아파트정문", + "ycode": "37.4782806055", + "stop_no": "22508", + "xcode": "127.0064743162", + "stop_type": "마을버스", + "node_id": "121900076", + "nxtStn": "방배동래미안아트힐.국립국악원" + }, + { + "stop_nm": "반포고교", + "ycode": "37.5012857723", + "stop_no": "22510", + "xcode": "127.0161409896", + "stop_type": "마을버스", + "node_id": "121900078", + "nxtStn": "반포센트럴푸르지오써밋아파트" + }, + { + "stop_nm": "반포리체", + "ycode": "37.5025241354", + "stop_no": "22511", + "xcode": "127.0142060247", + "stop_type": "마을버스", + "node_id": "121900079", + "nxtStn": "삼호가든사거리.반포도서관" + }, + { + "stop_nm": "언남초등학교", + "ycode": "37.4543079703", + "stop_no": "22512", + "xcode": "127.061421935", + "stop_type": "마을버스", + "node_id": "121900308", + "nxtStn": "서초더샵포레" + }, + { + "stop_nm": "서초2동주민센터", + "ycode": "37.4917135401", + "stop_no": "22513", + "xcode": "127.0253409803", + "stop_type": "마을버스", + "node_id": "121900080", + "nxtStn": "창신교회앞.서리풀노리학교" + }, + { + "stop_nm": "삽준네마을", + "ycode": "37.4692693783", + "stop_no": "22515", + "xcode": "127.0268099021", + "stop_type": "마을버스", + "node_id": "121900274", + "nxtStn": "우면주공아파트.양재1동주민센터" + }, + { + "stop_nm": "방배역.백석대", + "ycode": "37.4809786482", + "stop_no": "22516", + "xcode": "126.9967265422", + "stop_type": "마을버스", + "node_id": "121900269", + "nxtStn": "방배(백석예술대)역.3번출구" + }, + { + "stop_nm": "이수중학교", + "ycode": "37.4818561289", + "stop_no": "22517", + "xcode": "126.9924466481", + "stop_type": "마을버스", + "node_id": "121900082", + "nxtStn": "대우효령아파트" + }, + { + "stop_nm": "서래마을.서래글로벌빌리지센터", + "ycode": "37.4978969161", + "stop_no": "22518", + "xcode": "126.9984381123", + "stop_type": "마을버스", + "node_id": "121900250", + "nxtStn": "서래마을입구" + }, + { + "stop_nm": "언남초등학교", + "ycode": "37.4544583591", + "stop_no": "22519", + "xcode": "127.0616074318", + "stop_type": "마을버스", + "node_id": "121900312", + "nxtStn": "서초포레스타3단지정문" + }, + { + "stop_nm": "경부고속터미널", + "ycode": "37.5065337938", + "stop_no": "22520", + "xcode": "127.0068477606", + "stop_type": "마을버스", + "node_id": "121900251", + "nxtStn": "반포자이아파트" + }, + { + "stop_nm": "서초더샵포레", + "ycode": "37.454499", + "stop_no": "22521", + "xcode": "127.064302", + "stop_type": "마을버스", + "node_id": "121900309", + "nxtStn": "서울특별시어린이병원.강동송파과학화예비군훈련장" + }, + { + "stop_nm": "반포센트럴푸르지오써밋아파트", + "ycode": "37.5009216068", + "stop_no": "22525", + "xcode": "127.0169971", + "stop_type": "마을버스", + "node_id": "121900086", + "nxtStn": "현대4차아파트" + }, + { + "stop_nm": "서초더샵포레", + "ycode": "37.4547100295", + "stop_no": "22526", + "xcode": "127.0636983185", + "stop_type": "마을버스", + "node_id": "121900313", + "nxtStn": "언남초등학교" + }, + { + "stop_nm": "양재시민의숲매헌역입구", + "ycode": "37.469172", + "stop_no": "22528", + "xcode": "127.037521", + "stop_type": "마을버스", + "node_id": "121900324", + "nxtStn": "매헌시민의숲" + }, + { + "stop_nm": "대우효령아파트", + "ycode": "37.4801576456", + "stop_no": "22530", + "xcode": "126.9942333499", + "stop_type": "마을버스", + "node_id": "121900270", + "nxtStn": "방배역.백석대" + }, + { + "stop_nm": "서래마을입구", + "ycode": "37.4991235327", + "stop_no": "22531", + "xcode": "126.998452337", + "stop_type": "마을버스", + "node_id": "121900087", + "nxtStn": "팔래스호텔" + }, + { + "stop_nm": "강남역9번출구", + "ycode": "37.4977272396", + "stop_no": "22532", + "xcode": "127.0265475067", + "stop_type": "마을버스", + "node_id": "121900088", + "nxtStn": "강남역10번출구" + }, + { + "stop_nm": "반포자이아파트", + "ycode": "37.5061939043", + "stop_no": "22533", + "xcode": "127.0093836744", + "stop_type": "일반차로", + "node_id": "121000979", + "nxtStn": "반포미도아파트앞" + }, + { + "stop_nm": "임광아파트후문", + "ycode": "37.4758189221", + "stop_no": "22535", + "xcode": "127.0030267509", + "stop_type": "마을버스", + "node_id": "121900089", + "nxtStn": "임광아파트정문" + }, + { + "stop_nm": "방현초교", + "ycode": "37.475831", + "stop_no": "22536", + "xcode": "126.988713", + "stop_type": "마을버스", + "node_id": "121900090", + "nxtStn": "동덕여고" + }, + { + "stop_nm": "세탁소", + "ycode": "37.4825486576", + "stop_no": "22537", + "xcode": "126.9874848398", + "stop_type": "마을버스", + "node_id": "121900091", + "nxtStn": "대성유니드아파트" + }, + { + "stop_nm": "현대4차아파트", + "ycode": "37.5005700292", + "stop_no": "22538", + "xcode": "127.0179934519", + "stop_type": "마을버스", + "node_id": "121900092", + "nxtStn": "서초래미안아파트정문" + }, + { + "stop_nm": "반포자이아파트", + "ycode": "37.5056333558", + "stop_no": "22539", + "xcode": "127.0101482277", + "stop_type": "일반차로", + "node_id": "121000976", + "nxtStn": "강남고속버스터미널" + }, + { + "stop_nm": "서초1동주민센터", + "ycode": "37.4895945167", + "stop_no": "22540", + "xcode": "127.01846691", + "stop_type": "마을버스", + "node_id": "121900093", + "nxtStn": "서울교대정문" + }, + { + "stop_nm": "매헌시민의숲", + "ycode": "37.472966", + "stop_no": "22541", + "xcode": "127.038547", + "stop_type": "마을버스", + "node_id": "121900094", + "nxtStn": "양재시민의숲매헌역입구" + }, + { + "stop_nm": "서래마을입구", + "ycode": "37.4999036726", + "stop_no": "22543", + "xcode": "126.9984708699", + "stop_type": "마을버스", + "node_id": "121900252", + "nxtStn": "신논현역4번출구" + }, + { + "stop_nm": "팔래스호텔", + "ycode": "37.5005416631", + "stop_no": "22544", + "xcode": "127.0000689924", + "stop_type": "마을버스", + "node_id": "121900095", + "nxtStn": "삼성래미안.이수역방향" + }, + { + "stop_nm": "반포미도아파트앞", + "ycode": "37.5018431861", + "stop_no": "22546", + "xcode": "127.0116067597", + "stop_type": "마을버스", + "node_id": "121900096", + "nxtStn": "반포래미안아이파크아파트" + }, + { + "stop_nm": "여의3교", + "ycode": "37.452533", + "stop_no": "22547", + "xcode": "127.055801", + "stop_type": "마을버스", + "node_id": "121900321", + "nxtStn": "본마을노인복지센터" + }, + { + "stop_nm": "임광아파트정문", + "ycode": "37.4765668747", + "stop_no": "22548", + "xcode": "127.0010130728", + "stop_type": "마을버스", + "node_id": "121900097", + "nxtStn": "방배3동주민센터" + }, + { + "stop_nm": "대성유니드아파트", + "ycode": "37.4834866466", + "stop_no": "22549", + "xcode": "126.9869170389", + "stop_type": "마을버스", + "node_id": "121900098", + "nxtStn": "우리수퍼" + }, + { + "stop_nm": "서초래미안아파트정문", + "ycode": "37.500285166", + "stop_no": "22550", + "xcode": "127.0187319391", + "stop_type": "마을버스", + "node_id": "121900099", + "nxtStn": "서초래미안아파트남문" + }, + { + "stop_nm": "뉴코아백화점", + "ycode": "37.5093091088", + "stop_no": "22551", + "xcode": "127.0080753177", + "stop_type": "마을버스", + "node_id": "121900100", + "nxtStn": "경원중학교" + }, + { + "stop_nm": "서울교대정문", + "ycode": "37.4889577449", + "stop_no": "22552", + "xcode": "127.0163712913", + "stop_type": "마을버스", + "node_id": "121900101", + "nxtStn": "청호나이스" + }, + { + "stop_nm": "일동제약", + "ycode": "37.4773511613", + "stop_no": "22553", + "xcode": "127.0376175038", + "stop_type": "마을버스", + "node_id": "121900298", + "nxtStn": "교육개발원입구사거리" + }, + { + "stop_nm": "롯데캐슬클래식.사랑의교회", + "ycode": "37.4997374512", + "stop_no": "22554", + "xcode": "127.0229572589", + "stop_type": "마을버스", + "node_id": "121900102", + "nxtStn": "서초푸르지오써밋.롯데캐슬클래식" + }, + { + "stop_nm": "반포래미안아이파크아파트", + "ycode": "37.5003518259", + "stop_no": "22555", + "xcode": "127.0120274955", + "stop_type": "마을버스", + "node_id": "121900103", + "nxtStn": "아크로비스타.미도아파트" + }, + { + "stop_nm": "언남중고교", + "ycode": "37.4718794592", + "stop_no": "22556", + "xcode": "127.0457968477", + "stop_type": "마을버스", + "node_id": "121900104", + "nxtStn": "국악고교사거리" + }, + { + "stop_nm": "방배3동주민센터", + "ycode": "37.47845", + "stop_no": "22557", + "xcode": "126.999815", + "stop_type": "마을버스", + "node_id": "121900105", + "nxtStn": "방배(백석예술대)역" + }, + { + "stop_nm": "우리수퍼", + "ycode": "37.4846706169", + "stop_no": "22558", + "xcode": "126.986197654", + "stop_type": "마을버스", + "node_id": "121900106", + "nxtStn": "이수역" + }, + { + "stop_nm": "서초래미안아파트남문", + "ycode": "37.4974383029", + "stop_no": "22559", + "xcode": "127.0204175134", + "stop_type": "마을버스", + "node_id": "121900107", + "nxtStn": "서초롯데캐슬프레지던트아파트" + }, + { + "stop_nm": "경원중학교", + "ycode": "37.5118733237", + "stop_no": "22560", + "xcode": "127.00955354", + "stop_type": "마을버스", + "node_id": "121900108", + "nxtStn": "종점" + }, + { + "stop_nm": "청호나이스", + "ycode": "37.4879588324", + "stop_no": "22561", + "xcode": "127.0130611243", + "stop_type": "마을버스", + "node_id": "121900109", + "nxtStn": "서초동삼성아파트" + }, + { + "stop_nm": "구름다리", + "ycode": "37.4797997912", + "stop_no": "22562", + "xcode": "126.9922195824", + "stop_type": "마을버스", + "node_id": "121900110", + "nxtStn": "주택단지" + }, + { + "stop_nm": "서울지방조달청.서울성모병원", + "ycode": "37.499527", + "stop_no": "22563", + "xcode": "127.003962", + "stop_type": "마을버스", + "node_id": "121900111", + "nxtStn": "국립중앙도서관" + }, + { + "stop_nm": "아크로비스타.미도아파트", + "ycode": "37.4980458485", + "stop_no": "22565", + "xcode": "127.0124973884", + "stop_type": "마을버스", + "node_id": "121900112", + "nxtStn": "법조단지" + }, + { + "stop_nm": "방배(백석예술대)역", + "ycode": "37.4809786782", + "stop_no": "22566", + "xcode": "126.9980947232", + "stop_type": "마을버스", + "node_id": "121900113", + "nxtStn": "방배(백석예술대)역.서초프라자약국" + }, + { + "stop_nm": "잠원역", + "ycode": "37.5129294245", + "stop_no": "22567", + "xcode": "127.0117464839", + "stop_type": "마을버스", + "node_id": "121900114", + "nxtStn": "매일상가" + }, + { + "stop_nm": "주택단지", + "ycode": "37.4786803776", + "stop_no": "22570", + "xcode": "126.9891702182", + "stop_type": "마을버스", + "node_id": "121900265", + "nxtStn": "종로교회" + }, + { + "stop_nm": "국립중앙도서관", + "ycode": "37.4979220747", + "stop_no": "22571", + "xcode": "127.0044198835", + "stop_type": "마을버스", + "node_id": "121900117", + "nxtStn": "대검찰청.서초경찰서" + }, + { + "stop_nm": "반포1동성당", + "ycode": "37.5041168276", + "stop_no": "22572", + "xcode": "127.0207027838", + "stop_type": "마을버스", + "node_id": "121900245", + "nxtStn": "서초푸르지오써밋" + }, + { + "stop_nm": "여의3교", + "ycode": "37.45251", + "stop_no": "22573", + "xcode": "127.055672", + "stop_type": "마을버스", + "node_id": "121900322", + "nxtStn": "청계산입구역" + }, + { + "stop_nm": "방배(백석예술대)역.서초프라자약국", + "ycode": "37.4822348038", + "stop_no": "22574", + "xcode": "126.9973009069", + "stop_type": "마을버스", + "node_id": "121900118", + "nxtStn": "방일초등학교" + }, + { + "stop_nm": "동덕여고", + "ycode": "37.474535574", + "stop_no": "22575", + "xcode": "126.9929346869", + "stop_type": "마을버스", + "node_id": "121900119", + "nxtStn": "방배래미안타워" + }, + { + "stop_nm": "이수역4번출구", + "ycode": "37.4855775952", + "stop_no": "22576", + "xcode": "126.9828785969", + "stop_type": "마을버스", + "node_id": "121900120", + "nxtStn": "총신대입구역.남성사계시장입구앞" + }, + { + "stop_nm": "신사역", + "ycode": "37.51535", + "stop_no": "22577", + "xcode": "127.019599", + "stop_type": "마을버스", + "node_id": "121900121", + "nxtStn": "논현역" + }, + { + "stop_nm": "유원아파트", + "ycode": "37.4953796962", + "stop_no": "22578", + "xcode": "127.0178610169", + "stop_type": "마을버스", + "node_id": "121900122", + "nxtStn": "지하철2호선교대역4출구" + }, + { + "stop_nm": "서초역2번출구", + "ycode": "37.4912987658", + "stop_no": "22579", + "xcode": "127.0081468857", + "stop_type": "마을버스", + "node_id": "121900123", + "nxtStn": "서초역.서울중앙지법등기국" + }, + { + "stop_nm": "국립국악원", + "ycode": "37.478170527", + "stop_no": "22581", + "xcode": "127.0087096724", + "stop_type": "마을버스", + "node_id": "121900296", + "nxtStn": "예술의전당" + }, + { + "stop_nm": "종로교회", + "ycode": "37.4781116779", + "stop_no": "22582", + "xcode": "126.9881108486", + "stop_type": "마을버스", + "node_id": "121900295", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "서초푸르지오써밋", + "ycode": "37.5019661186", + "stop_no": "22583", + "xcode": "127.0216821231", + "stop_type": "마을버스", + "node_id": "121900294", + "nxtStn": "롯데캐슬클래식" + }, + { + "stop_nm": "원불교", + "ycode": "37.4809910796", + "stop_no": "22584", + "xcode": "127.0419262722", + "stop_type": "마을버스", + "node_id": "121900292", + "nxtStn": "블랙야크양재사옥" + }, + { + "stop_nm": "일동제약", + "ycode": "37.4771882391", + "stop_no": "22585", + "xcode": "127.037054348", + "stop_type": "마을버스", + "node_id": "121900290", + "nxtStn": "현대빌라.에코맘코리아" + }, + { + "stop_nm": "방일초등학교", + "ycode": "37.4858436536", + "stop_no": "22586", + "xcode": "126.9949735878", + "stop_type": "마을버스", + "node_id": "121900261", + "nxtStn": "내방역" + }, + { + "stop_nm": "논현역", + "ycode": "37.510289", + "stop_no": "22587", + "xcode": "127.021496", + "stop_type": "마을버스", + "node_id": "121900246", + "nxtStn": "교보사거리" + }, + { + "stop_nm": "매일상가", + "ycode": "37.513269", + "stop_no": "22589", + "xcode": "127.013197", + "stop_type": "마을버스", + "node_id": "121900242", + "nxtStn": "잠원역" + }, + { + "stop_nm": "청계산입구역", + "ycode": "37.448959", + "stop_no": "22591", + "xcode": "127.055303", + "stop_type": "마을버스", + "node_id": "121900319", + "nxtStn": "여의3교" + }, + { + "stop_nm": "예술의전당", + "ycode": "37.480583233", + "stop_no": "22592", + "xcode": "127.0135449202", + "stop_type": "마을버스", + "node_id": "121900281", + "nxtStn": "남부터미널.기쁨병원" + }, + { + "stop_nm": "서울교통공사", + "ycode": "37.4774465285", + "stop_no": "22593", + "xcode": "126.9868536435", + "stop_type": "마을버스", + "node_id": "121900263", + "nxtStn": "사당역13번출구" + }, + { + "stop_nm": "경원중학교", + "ycode": "37.5114970568", + "stop_no": "22594", + "xcode": "127.0068991175", + "stop_type": "마을버스", + "node_id": "121900241", + "nxtStn": "한신2차후문" + }, + { + "stop_nm": "대법원", + "ycode": "37.4916070459", + "stop_no": "22595", + "xcode": "127.0064912987", + "stop_type": "마을버스", + "node_id": "121900221", + "nxtStn": "서초고후문" + }, + { + "stop_nm": "롯데캐슬클래식", + "ycode": "37.5000832395", + "stop_no": "22596", + "xcode": "127.0225773213", + "stop_type": "마을버스", + "node_id": "121900220", + "nxtStn": "진흥아파트" + }, + { + "stop_nm": "청계산입구역", + "ycode": "37.449126", + "stop_no": "22598", + "xcode": "127.055016", + "stop_type": "마을버스", + "node_id": "121900320", + "nxtStn": "서초포레스타5단지정문" + }, + { + "stop_nm": "내방역", + "ycode": "37.4868492575", + "stop_no": "22599", + "xcode": "126.9943312166", + "stop_type": "마을버스", + "node_id": "121900262", + "nxtStn": "내방역1번출구" + }, + { + "stop_nm": "강남역도시에빛", + "ycode": "37.4948298181", + "stop_no": "22600", + "xcode": "127.028862784", + "stop_type": "일반차로", + "node_id": "121000937", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "KT삼거리", + "ycode": "37.472187", + "stop_no": "22601", + "xcode": "127.03021", + "stop_type": "일반차로", + "node_id": "121000957", + "nxtStn": "KT연구개발센터정문" + }, + { + "stop_nm": "KT연구개발센터정문", + "ycode": "37.470431", + "stop_no": "22602", + "xcode": "127.030017", + "stop_type": "일반차로", + "node_id": "121000958", + "nxtStn": "서울시품질시험소한국교원단체총연합회" + }, + { + "stop_nm": "형촌마을입구", + "ycode": "37.4623284779", + "stop_no": "22604", + "xcode": "127.0221930408", + "stop_type": "일반차로", + "node_id": "121000959", + "nxtStn": "송동마을.서초힐스아파트" + }, + { + "stop_nm": "서초호반써밋", + "ycode": "37.457567017", + "stop_no": "22605", + "xcode": "127.014646275", + "stop_type": "일반차로", + "node_id": "121000983", + "nxtStn": "식유촌우면성당.서초호반써밋" + }, + { + "stop_nm": "LH서초아파트", + "ycode": "37.460042", + "stop_no": "22607", + "xcode": "127.025622", + "stop_type": "일반차로", + "node_id": "121000982", + "nxtStn": "화훼단지" + }, + { + "stop_nm": "서리풀문화광장", + "ycode": "37.491003", + "stop_no": "22608", + "xcode": "127.005496", + "stop_type": "일반차로", + "node_id": "121001329", + "nxtStn": "서초역3번출구" + }, + { + "stop_nm": "서초포레스타5단지정문", + "ycode": "37.451765", + "stop_no": "22609", + "xcode": "127.058457", + "stop_type": "마을버스", + "node_id": "121900318", + "nxtStn": "서초포레스타3단지후문" + }, + { + "stop_nm": "한남대교남단(가상)", + "ycode": "37.5198751165", + "stop_no": "22612", + "xcode": "127.0116253907", + "stop_type": "가상정류장", + "node_id": "121000963", + "nxtStn": "반포대교(가상)" + }, + { + "stop_nm": "서초호반써밋", + "ycode": "37.4563449238", + "stop_no": "22613", + "xcode": "127.0151305788", + "stop_type": "마을버스", + "node_id": "121900327", + "nxtStn": "서초힐스아파트" + }, + { + "stop_nm": "서초포레스타3단지후문", + "ycode": "37.453804", + "stop_no": "22614", + "xcode": "127.059588", + "stop_type": "마을버스", + "node_id": "121900316", + "nxtStn": "언남초등학교" + }, + { + "stop_nm": "서초힐스아파트", + "ycode": "37.456464", + "stop_no": "22615", + "xcode": "127.019578", + "stop_type": "마을버스", + "node_id": "121900328", + "nxtStn": "LH3.4단지" + }, + { + "stop_nm": "LH3.4단지", + "ycode": "37.4579545688", + "stop_no": "22616", + "xcode": "127.0229572647", + "stop_type": "마을버스", + "node_id": "121900329", + "nxtStn": "종점" + }, + { + "stop_nm": "교보사거리", + "ycode": "37.506063", + "stop_no": "22631", + "xcode": "127.023557", + "stop_type": "마을버스", + "node_id": "121900218", + "nxtStn": "교보타워앞" + }, + { + "stop_nm": "서초IC(가상)", + "ycode": "37.4823193637", + "stop_no": "22640", + "xcode": "127.026079578", + "stop_type": "가상정류장", + "node_id": "121000966", + "nxtStn": "하나로마트.코트라" + }, + { + "stop_nm": "서초IC(가상)", + "ycode": "37.4823590858", + "stop_no": "22641", + "xcode": "127.0266045342", + "stop_type": "가상정류장", + "node_id": "121000965", + "nxtStn": "반포대교(가상)" + }, + { + "stop_nm": "강남역서초현대타워앞", + "ycode": "37.4964688083", + "stop_no": "22652", + "xcode": "127.0280084862", + "stop_type": "일반차로", + "node_id": "121000541", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "강남역우리은행", + "ycode": "37.4956209364", + "stop_no": "22653", + "xcode": "127.0283766361", + "stop_type": "일반차로", + "node_id": "121000974", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "강남역티월드", + "ycode": "37.4947", + "stop_no": "22654", + "xcode": "127.02887", + "stop_type": "일반차로", + "node_id": "121000973", + "nxtStn": "래미안아파트.파이낸셜뉴스" + }, + { + "stop_nm": "LH5단지", + "ycode": "37.4595010532", + "stop_no": "22655", + "xcode": "127.0240810088", + "stop_type": "마을버스", + "node_id": "121900307", + "nxtStn": "LH3.4단지" + }, + { + "stop_nm": "LH3.4단지", + "ycode": "37.4579865593", + "stop_no": "22656", + "xcode": "127.0227161524", + "stop_type": "마을버스", + "node_id": "121900306", + "nxtStn": "서초힐스아파트" + }, + { + "stop_nm": "서초힐스아파트", + "ycode": "37.4561419958", + "stop_no": "22657", + "xcode": "127.0173599771", + "stop_type": "마을버스", + "node_id": "121900305", + "nxtStn": "서초호반써밋" + }, + { + "stop_nm": "성촌마을입구", + "ycode": "37.464327", + "stop_no": "22667", + "xcode": "127.0246", + "stop_type": "일반차로", + "node_id": "121000960", + "nxtStn": "형촌마을입구" + }, + { + "stop_nm": "2호선교대역7번출구", + "ycode": "37.4940798561", + "stop_no": "22694", + "xcode": "127.0145663212", + "stop_type": "마을버스", + "node_id": "121900217", + "nxtStn": "교대역10번출구" + }, + { + "stop_nm": "교대역", + "ycode": "37.4940321203", + "stop_no": "22711", + "xcode": "127.0143808403", + "stop_type": "일반차로", + "node_id": "121000975", + "nxtStn": "삼풍아파트" + }, + { + "stop_nm": "서초경찰서", + "ycode": "37.4956827639", + "stop_no": "22742", + "xcode": "127.0059940336", + "stop_type": "마을버스", + "node_id": "121900216", + "nxtStn": "서울성모병원.서울지방조달청" + }, + { + "stop_nm": "원불교", + "ycode": "37.4834141055", + "stop_no": "22743", + "xcode": "127.0420565333", + "stop_type": "마을버스", + "node_id": "121900291", + "nxtStn": "동원산업" + }, + { + "stop_nm": "남부터미널.기쁨병원", + "ycode": "37.4818370058", + "stop_no": "22759", + "xcode": "127.0178114323", + "stop_type": "마을버스", + "node_id": "121900215", + "nxtStn": "서울시인재개발원" + }, + { + "stop_nm": "이수교(방배본동)", + "ycode": "37.4968964454", + "stop_no": "22762", + "xcode": "126.9834607234", + "stop_type": "일반차로", + "node_id": "121000472", + "nxtStn": "흑석동" + }, + { + "stop_nm": "사당역", + "ycode": "37.4788660436", + "stop_no": "22763", + "xcode": "126.982077334", + "stop_type": "일반차로", + "node_id": "121000473", + "nxtStn": "이수역" + }, + { + "stop_nm": "서울교통공사", + "ycode": "37.47662", + "stop_no": "22765", + "xcode": "126.986117", + "stop_type": "일반차로", + "node_id": "121000475", + "nxtStn": "사당역" + }, + { + "stop_nm": "임광아파트", + "ycode": "37.4767398875", + "stop_no": "22766", + "xcode": "127.0009712406", + "stop_type": "일반차로", + "node_id": "121000476", + "nxtStn": "방배역" + }, + { + "stop_nm": "방배동래미안아파트", + "ycode": "37.4757117127", + "stop_no": "22769", + "xcode": "126.9852744312", + "stop_type": "일반차로", + "node_id": "121000479", + "nxtStn": "임광아파트" + }, + { + "stop_nm": "삼성전자서울R&D", + "ycode": "37.465844", + "stop_no": "22774", + "xcode": "127.023308", + "stop_type": "일반차로", + "node_id": "121001309", + "nxtStn": "형촌마을입구(서초네이처힐1.2단지)" + }, + { + "stop_nm": "사당역13번출구", + "ycode": "37.4770820069", + "stop_no": "22776", + "xcode": "126.9831179759", + "stop_type": "마을버스", + "node_id": "121900214", + "nxtStn": "사당역12번출구" + }, + { + "stop_nm": "KT연구개발센터", + "ycode": "37.470634", + "stop_no": "22777", + "xcode": "127.030494", + "stop_type": "일반차로", + "node_id": "121001308", + "nxtStn": "kt연구소" + }, + { + "stop_nm": "네이처힐.LH서초아파트", + "ycode": "37.460467", + "stop_no": "22779", + "xcode": "127.024156", + "stop_type": "일반차로", + "node_id": "121001313", + "nxtStn": "송동마을.서초힐스아파트" + }, + { + "stop_nm": "서초호반써밋", + "ycode": "37.4564279225", + "stop_no": "22785", + "xcode": "127.0153740036", + "stop_type": "마을버스", + "node_id": "121900304", + "nxtStn": "서초힐스아파트" + }, + { + "stop_nm": "도심공항터미널(가상)", + "ycode": "37.5086936718", + "stop_no": "22790", + "xcode": "127.0590297949", + "stop_type": "가상정류장", + "node_id": "122000715", + "nxtStn": "종점" + }, + { + "stop_nm": "강남고속버스터미널", + "ycode": "37.5060680574", + "stop_no": "22793", + "xcode": "127.0039283325", + "stop_type": "일반차로", + "node_id": "121000977", + "nxtStn": "신반포역.세화여중고" + }, + { + "stop_nm": "내방역제일병원", + "ycode": "37.488025", + "stop_no": "22801", + "xcode": "126.995317", + "stop_type": "일반차로", + "node_id": "121001318", + "nxtStn": "내방역8번출구" + }, + { + "stop_nm": "대우효령아파트", + "ycode": "37.4801666043", + "stop_no": "22802", + "xcode": "126.9932439729", + "stop_type": "일반차로", + "node_id": "121000511", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "한신2차후문", + "ycode": "37.512161", + "stop_no": "22807", + "xcode": "127.005228", + "stop_type": "마을버스", + "node_id": "121900213", + "nxtStn": "한신2차정문" + }, + { + "stop_nm": "방배역", + "ycode": "37.4811876954", + "stop_no": "22808", + "xcode": "126.9964065362", + "stop_type": "가로변시간", + "node_id": "121000516", + "nxtStn": "대우효령아파트" + }, + { + "stop_nm": "서울고교", + "ycode": "37.4827140991", + "stop_no": "22809", + "xcode": "127.0054038744", + "stop_type": "가로변시간", + "node_id": "121000517", + "nxtStn": "서초아트자이아파트" + }, + { + "stop_nm": "서울고교", + "ycode": "37.483001", + "stop_no": "22810", + "xcode": "127.004991", + "stop_type": "가로변시간", + "node_id": "121000518", + "nxtStn": "방배역" + }, + { + "stop_nm": "서초아트자이아파트", + "ycode": "37.4851556879", + "stop_no": "22812", + "xcode": "127.0111869156", + "stop_type": "일반차로", + "node_id": "121000520", + "nxtStn": "서초역1번출구" + }, + { + "stop_nm": "서울교육대앞", + "ycode": "37.4878433219", + "stop_no": "22813", + "xcode": "127.0145108302", + "stop_type": "일반차로", + "node_id": "121000521", + "nxtStn": "남부터미널" + }, + { + "stop_nm": "남부터미널", + "ycode": "37.4847444476", + "stop_no": "22816", + "xcode": "127.0143055588", + "stop_type": "일반차로", + "node_id": "121000524", + "nxtStn": "서울고교" + }, + { + "stop_nm": "신사동.더리버사이드호텔", + "ycode": "37.5177929823", + "stop_no": "22822", + "xcode": "127.0186555368", + "stop_type": "일반차로", + "node_id": "122000631", + "nxtStn": "신사역.푸른저축은행" + }, + { + "stop_nm": "반포미도아파트앞", + "ycode": "37.501834", + "stop_no": "22823", + "xcode": "127.011655", + "stop_type": "일반차로", + "node_id": "121000924", + "nxtStn": "삼풍아파트" + }, + { + "stop_nm": "삼풍아파트", + "ycode": "37.496331007", + "stop_no": "22824", + "xcode": "127.0128918075", + "stop_type": "일반차로", + "node_id": "121000930", + "nxtStn": "교대역5번출구" + }, + { + "stop_nm": "교대역", + "ycode": "37.494083312", + "stop_no": "22825", + "xcode": "127.0157243897", + "stop_type": "일반차로", + "node_id": "121000929", + "nxtStn": "강남역서초현대타워앞" + }, + { + "stop_nm": "프로비스타호텔.서초동유원아파트", + "ycode": "37.495429", + "stop_no": "22826", + "xcode": "127.019981", + "stop_type": "일반차로", + "node_id": "121000928", + "nxtStn": "강남역" + }, + { + "stop_nm": "서초아르누보호텔.유원아파트", + "ycode": "37.495707393", + "stop_no": "22827", + "xcode": "127.0197746625", + "stop_type": "일반차로", + "node_id": "121000927", + "nxtStn": "교대역" + }, + { + "stop_nm": "삼풍아파트", + "ycode": "37.497139", + "stop_no": "22828", + "xcode": "127.013095", + "stop_type": "일반차로", + "node_id": "121000926", + "nxtStn": "반포래미안아이파크아파트" + }, + { + "stop_nm": "반포래미안아이파크아파트", + "ycode": "37.5014574649", + "stop_no": "22829", + "xcode": "127.012098701", + "stop_type": "일반차로", + "node_id": "121000925", + "nxtStn": "반포자이아파트" + }, + { + "stop_nm": "서초고후문", + "ycode": "37.48912", + "stop_no": "22832", + "xcode": "127.004482", + "stop_type": "마을버스", + "node_id": "121900212", + "nxtStn": "미켈란아파트" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.474539", + "stop_no": "22835", + "xcode": "127.031816", + "stop_type": "마을버스", + "node_id": "121900277", + "nxtStn": "kt연구소" + }, + { + "stop_nm": "내방역1번출구", + "ycode": "37.487795", + "stop_no": "22836", + "xcode": "126.994578", + "stop_type": "마을버스", + "node_id": "121900211", + "nxtStn": "서초역4번출구" + }, + { + "stop_nm": "내방역8번출구", + "ycode": "37.4883288328", + "stop_no": "22837", + "xcode": "126.9951881564", + "stop_type": "마을버스", + "node_id": "121900335", + "nxtStn": "내방역3번출구" + }, + { + "stop_nm": "교보타워앞", + "ycode": "37.503279", + "stop_no": "22838", + "xcode": "127.02488", + "stop_type": "마을버스", + "node_id": "121900210", + "nxtStn": "강남역.서초초교앞" + }, + { + "stop_nm": "잠원역", + "ycode": "37.5130042435", + "stop_no": "22840", + "xcode": "127.0114648241", + "stop_type": "마을버스", + "node_id": "121900243", + "nxtStn": "경원중학교" + }, + { + "stop_nm": "동원산업", + "ycode": "37.4765950873", + "stop_no": "22841", + "xcode": "127.0454401748", + "stop_type": "마을버스", + "node_id": "121900293", + "nxtStn": "구룡사거리" + }, + { + "stop_nm": "서울시인재개발원", + "ycode": "37.4826059016", + "stop_no": "22842", + "xcode": "127.0216889654", + "stop_type": "마을버스", + "node_id": "121900225", + "nxtStn": "외교안보연구원.서초구청" + }, + { + "stop_nm": "한신2차정문", + "ycode": "37.508651", + "stop_no": "22843", + "xcode": "127.003086", + "stop_type": "마을버스", + "node_id": "121900209", + "nxtStn": "호남고속.신세계" + }, + { + "stop_nm": "미켈란아파트", + "ycode": "37.4862032326", + "stop_no": "22844", + "xcode": "127.0040324571", + "stop_type": "마을버스", + "node_id": "121900208", + "nxtStn": "서울고사거리" + }, + { + "stop_nm": "롯데칠성", + "ycode": "37.4954027722", + "stop_no": "22845", + "xcode": "127.0248050278", + "stop_type": "마을버스", + "node_id": "121900207", + "nxtStn": "래미안에스티지" + }, + { + "stop_nm": "kt연구소", + "ycode": "37.471705038", + "stop_no": "22847", + "xcode": "127.0306513806", + "stop_type": "마을버스", + "node_id": "121900206", + "nxtStn": "문화예술공원" + }, + { + "stop_nm": "오거리", + "ycode": "37.48849", + "stop_no": "22848", + "xcode": "126.996936", + "stop_type": "마을버스", + "node_id": "121900205", + "nxtStn": "황실자이아파트" + }, + { + "stop_nm": "사당역", + "ycode": "37.4765962586", + "stop_no": "22849", + "xcode": "126.982757404", + "stop_type": "마을버스", + "node_id": "121900204", + "nxtStn": "서울교통공사" + }, + { + "stop_nm": "강남역.서초초교앞", + "ycode": "37.499836", + "stop_no": "22850", + "xcode": "127.0265", + "stop_type": "마을버스", + "node_id": "121900203", + "nxtStn": "강남역.삼성전자" + }, + { + "stop_nm": "사당역14번출구", + "ycode": "37.4766633346", + "stop_no": "22851", + "xcode": "126.9829132259", + "stop_type": "일반차로", + "node_id": "121001325", + "nxtStn": "사당IC진입(경유)" + }, + { + "stop_nm": "경원중학교", + "ycode": "37.5119708712", + "stop_no": "22852", + "xcode": "127.0092995579", + "stop_type": "마을버스", + "node_id": "121900244", + "nxtStn": "뉴코아아울렛" + }, + { + "stop_nm": "외교안보연구원.서초구청", + "ycode": "37.4837943042", + "stop_no": "22854", + "xcode": "127.0305443725", + "stop_type": "마을버스", + "node_id": "121900202", + "nxtStn": "서초구청" + }, + { + "stop_nm": "호남고속.신세계", + "ycode": "37.5058391969", + "stop_no": "22855", + "xcode": "127.0032971651", + "stop_type": "마을버스", + "node_id": "121900201", + "nxtStn": "경남상가" + }, + { + "stop_nm": "서울고사거리", + "ycode": "37.4830538656", + "stop_no": "22856", + "xcode": "127.0041758943", + "stop_type": "마을버스", + "node_id": "121900200", + "nxtStn": "제약회관" + }, + { + "stop_nm": "문화예술공원", + "ycode": "37.4701430308", + "stop_no": "22858", + "xcode": "127.0321148241", + "stop_type": "마을버스", + "node_id": "121900199", + "nxtStn": "더케이호텔정문" + }, + { + "stop_nm": "강남역.삼성전자", + "ycode": "37.497056", + "stop_no": "22859", + "xcode": "127.027872", + "stop_type": "마을버스", + "node_id": "121900198", + "nxtStn": "우성아파트사거리" + }, + { + "stop_nm": "반포종합운동장", + "ycode": "37.500511", + "stop_no": "22860", + "xcode": "126.996503", + "stop_type": "마을버스", + "node_id": "121900332", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "반포종합운동장", + "ycode": "37.499477", + "stop_no": "22861", + "xcode": "126.996274", + "stop_type": "마을버스", + "node_id": "121900253", + "nxtStn": "동작대교남단(가상)" + }, + { + "stop_nm": "언남중고교", + "ycode": "37.471986729", + "stop_no": "22862", + "xcode": "127.0456985516", + "stop_type": "마을버스", + "node_id": "121900197", + "nxtStn": "소방서앞" + }, + { + "stop_nm": "서초구청", + "ycode": "37.4840614372", + "stop_no": "22863", + "xcode": "127.0324034746", + "stop_type": "마을버스", + "node_id": "121900196", + "nxtStn": "서초구청맞은편" + }, + { + "stop_nm": "경남상가", + "ycode": "37.5047243828", + "stop_no": "22864", + "xcode": "126.9997732998", + "stop_type": "마을버스", + "node_id": "121900195", + "nxtStn": "반포2동주민센터" + }, + { + "stop_nm": "제약회관", + "ycode": "37.482328536", + "stop_no": "22865", + "xcode": "127.001793367", + "stop_type": "마을버스", + "node_id": "121900228", + "nxtStn": "방배(백석예술대)역2번출구" + }, + { + "stop_nm": "진흥아파트", + "ycode": "37.4965521036", + "stop_no": "22866", + "xcode": "127.0226916384", + "stop_type": "마을버스", + "node_id": "121900239", + "nxtStn": "유원아파트" + }, + { + "stop_nm": "더케이호텔정문", + "ycode": "37.4677292302", + "stop_no": "22867", + "xcode": "127.0343725873", + "stop_type": "마을버스", + "node_id": "121900194", + "nxtStn": "더케이호텔후문" + }, + { + "stop_nm": "황실자이아파트", + "ycode": "37.489275", + "stop_no": "22868", + "xcode": "126.998635", + "stop_type": "마을버스", + "node_id": "121900193", + "nxtStn": "오거리" + }, + { + "stop_nm": "우성아파트사거리", + "ycode": "37.493708", + "stop_no": "22869", + "xcode": "127.029447", + "stop_type": "마을버스", + "node_id": "121900192", + "nxtStn": "현대렉시온오피스텔.파이낸셜뉴스" + }, + { + "stop_nm": "서초역4번출구", + "ycode": "37.4913844544", + "stop_no": "22870", + "xcode": "127.0068260214", + "stop_type": "마을버스", + "node_id": "121900191", + "nxtStn": "종점" + }, + { + "stop_nm": "매헌초교", + "ycode": "37.4704687607", + "stop_no": "22871", + "xcode": "127.0422086895", + "stop_type": "마을버스", + "node_id": "121900190", + "nxtStn": "양재근린공원" + }, + { + "stop_nm": "반포2동주민센터", + "ycode": "37.5038531775", + "stop_no": "22872", + "xcode": "126.9970535549", + "stop_type": "마을버스", + "node_id": "121900189", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "방배(백석예술대)역2번출구", + "ycode": "37.480727", + "stop_no": "22873", + "xcode": "126.998062", + "stop_type": "마을버스", + "node_id": "121900188", + "nxtStn": "방배누리시아웨딩홀" + }, + { + "stop_nm": "서초그랑자이후문", + "ycode": "37.489782", + "stop_no": "22874", + "xcode": "127.027541", + "stop_type": "마을버스", + "node_id": "121900187", + "nxtStn": "서초그랑자이정문" + }, + { + "stop_nm": "유원아파트", + "ycode": "37.495649", + "stop_no": "22875", + "xcode": "127.019434", + "stop_type": "마을버스", + "node_id": "121900240", + "nxtStn": "지하철2호선교대역4출구" + }, + { + "stop_nm": "더케이호텔후문", + "ycode": "37.465992", + "stop_no": "22876", + "xcode": "127.034187", + "stop_type": "마을버스", + "node_id": "121900186", + "nxtStn": "잔디마을" + }, + { + "stop_nm": "오거리", + "ycode": "37.488814", + "stop_no": "22877", + "xcode": "126.996798", + "stop_type": "마을버스", + "node_id": "121900178", + "nxtStn": "종점" + }, + { + "stop_nm": "현대렉시온오피스텔.파이낸셜뉴스", + "ycode": "37.491002", + "stop_no": "22878", + "xcode": "127.030732", + "stop_type": "마을버스", + "node_id": "121900139", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "서초역3번출구", + "ycode": "37.4910843274", + "stop_no": "22879", + "xcode": "127.0077861115", + "stop_type": "마을버스", + "node_id": "121900125", + "nxtStn": "서초동삼성아파트" + }, + { + "stop_nm": "양재근린공원", + "ycode": "37.4724090919", + "stop_no": "22880", + "xcode": "127.0415088094", + "stop_type": "마을버스", + "node_id": "121900124", + "nxtStn": "언남고" + }, + { + "stop_nm": "방배누리시아웨딩홀", + "ycode": "37.478885422", + "stop_no": "22883", + "xcode": "126.9991553697", + "stop_type": "마을버스", + "node_id": "121900127", + "nxtStn": "방배그랑자이아파트" + }, + { + "stop_nm": "서초그랑자이정문", + "ycode": "37.4879626909", + "stop_no": "22884", + "xcode": "127.0259360761", + "stop_type": "마을버스", + "node_id": "121900128", + "nxtStn": "풍림아이원" + }, + { + "stop_nm": "강남역10번출구", + "ycode": "37.4992095778", + "stop_no": "22885", + "xcode": "127.0264405862", + "stop_type": "마을버스", + "node_id": "121900129", + "nxtStn": "강남역.삼성전자" + }, + { + "stop_nm": "뱅뱅사거리", + "ycode": "37.4892316317", + "stop_no": "22887", + "xcode": "127.030304584", + "stop_type": "마을버스", + "node_id": "121900130", + "nxtStn": "래미안리더스원아파트" + }, + { + "stop_nm": "언남고", + "ycode": "37.4735942872", + "stop_no": "22889", + "xcode": "127.0433501089", + "stop_type": "마을버스", + "node_id": "121900131", + "nxtStn": "언남중고교" + }, + { + "stop_nm": "남부터미널.기쁨병원", + "ycode": "37.4819795068", + "stop_no": "22890", + "xcode": "127.0169521013", + "stop_type": "마을버스", + "node_id": "121900230", + "nxtStn": "예술의전당" + }, + { + "stop_nm": "방배그랑자이아파트", + "ycode": "37.477194", + "stop_no": "22891", + "xcode": "127.000412", + "stop_type": "마을버스", + "node_id": "121900271", + "nxtStn": "불교TV.서초어린이집" + }, + { + "stop_nm": "풍림아이원", + "ycode": "37.4872479803", + "stop_no": "22892", + "xcode": "127.0238377395", + "stop_type": "마을버스", + "node_id": "121900132", + "nxtStn": "서일초등학교" + }, + { + "stop_nm": "하이브랜드.코스트코.이마트", + "ycode": "37.4623679984", + "stop_no": "22893", + "xcode": "127.036183371", + "stop_type": "마을버스", + "node_id": "121900133", + "nxtStn": "양재동화물터미널" + }, + { + "stop_nm": "서초유스센터", + "ycode": "37.4861722268", + "stop_no": "22894", + "xcode": "127.0101625566", + "stop_type": "마을버스", + "node_id": "121900134", + "nxtStn": "서초중학교" + }, + { + "stop_nm": "예술의전당", + "ycode": "37.4811103218", + "stop_no": "22895", + "xcode": "127.0140414058", + "stop_type": "마을버스", + "node_id": "121900231", + "nxtStn": "신중초등학교" + }, + { + "stop_nm": "교대역6번출구", + "ycode": "37.494171868", + "stop_no": "22897", + "xcode": "127.0137373697", + "stop_type": "마을버스", + "node_id": "121900135", + "nxtStn": "법조단지" + }, + { + "stop_nm": "신중초등학교", + "ycode": "37.4796463752", + "stop_no": "22899", + "xcode": "127.0106964976", + "stop_type": "마을버스", + "node_id": "121900232", + "nxtStn": "아리랑TV.국립국악원" + }, + { + "stop_nm": "동덕여고", + "ycode": "37.4740399658", + "stop_no": "22900", + "xcode": "126.9929415173", + "stop_type": "마을버스", + "node_id": "121900136", + "nxtStn": "성지마을입구" + }, + { + "stop_nm": "국제전자센터", + "ycode": "37.4854513228", + "stop_no": "22901", + "xcode": "127.0179151927", + "stop_type": "마을버스", + "node_id": "121900137", + "nxtStn": "남부터미널.한일시멘트" + }, + { + "stop_nm": "양재역9번출구", + "ycode": "37.4826638191", + "stop_no": "22903", + "xcode": "127.0355508885", + "stop_type": "일반차로", + "node_id": "121000970", + "nxtStn": "교육개발원입구교차로(경유)" + }, + { + "stop_nm": "국립국악원", + "ycode": "37.4779435387", + "stop_no": "22904", + "xcode": "127.0073810943", + "stop_type": "마을버스", + "node_id": "121900138", + "nxtStn": "방배빌딩" + }, + { + "stop_nm": "래미안아파트.파이낸셜뉴스", + "ycode": "37.4916709399", + "stop_no": "22905", + "xcode": "127.0302286691", + "stop_type": "일반차로", + "node_id": "121000920", + "nxtStn": "서초문화예술정보학교" + }, + { + "stop_nm": "삼호아파트", + "ycode": "37.497333961", + "stop_no": "22906", + "xcode": "126.9873511797", + "stop_type": "마을버스", + "node_id": "121900140", + "nxtStn": "서래초등학교" + }, + { + "stop_nm": "성지마을입구", + "ycode": "37.4738714165", + "stop_no": "22907", + "xcode": "126.9922654218", + "stop_type": "마을버스", + "node_id": "121900141", + "nxtStn": "성뒤마을.교육연수원" + }, + { + "stop_nm": "남부터미널.한일시멘트", + "ycode": "37.4847552499", + "stop_no": "22908", + "xcode": "127.0143960237", + "stop_type": "마을버스", + "node_id": "121900233", + "nxtStn": "서초중학교" + }, + { + "stop_nm": "양재역엘타워빌딩", + "ycode": "37.4825610693", + "stop_no": "22909", + "xcode": "127.0356299924", + "stop_type": "일반차로", + "node_id": "121000969", + "nxtStn": "교육개발원입구교차로(경유)" + }, + { + "stop_nm": "서초1동사무소", + "ycode": "37.4903557536", + "stop_no": "22910", + "xcode": "127.0196816512", + "stop_type": "마을버스", + "node_id": "121900222", + "nxtStn": "복지관" + }, + { + "stop_nm": "양재시민의숲매헌역입구", + "ycode": "37.469293", + "stop_no": "22911", + "xcode": "127.037376", + "stop_type": "마을버스", + "node_id": "121900323", + "nxtStn": "더케이호텔후문" + }, + { + "stop_nm": "방배빌딩", + "ycode": "37.478281", + "stop_no": "22912", + "xcode": "127.006759", + "stop_type": "마을버스", + "node_id": "121900234", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "서래초등학교", + "ycode": "37.49573641", + "stop_no": "22913", + "xcode": "126.9883726975", + "stop_type": "마을버스", + "node_id": "121900142", + "nxtStn": "가야메디컬센터" + }, + { + "stop_nm": "복지관", + "ycode": "37.4915717993", + "stop_no": "22915", + "xcode": "127.0167190444", + "stop_type": "마을버스", + "node_id": "121900143", + "nxtStn": "지하철3호선교대역" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.4800107592", + "stop_no": "22916", + "xcode": "127.0058932787", + "stop_type": "마을버스", + "node_id": "121900235", + "nxtStn": "상문고등학교.수표교교회" + }, + { + "stop_nm": "세빛섬", + "ycode": "37.5105823055", + "stop_no": "22917", + "xcode": "126.9980214947", + "stop_type": "일반차로", + "node_id": "121001321", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "세빛섬", + "ycode": "37.5087482591", + "stop_no": "22918", + "xcode": "126.9945426696", + "stop_type": "일반차로", + "node_id": "121001319", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "양재역커피빈앞", + "ycode": "37.4828368944", + "stop_no": "22919", + "xcode": "127.0353406498", + "stop_type": "일반차로", + "node_id": "121000971", + "nxtStn": "교육개발원입구교차로(경유)" + }, + { + "stop_nm": "교육개발원입구사거리", + "ycode": "37.4782102141", + "stop_no": "22920", + "xcode": "127.0394643451", + "stop_type": "마을버스", + "node_id": "121900144", + "nxtStn": "현대캐피탈" + }, + { + "stop_nm": "교대역.법원검찰청", + "ycode": "37.4932788828", + "stop_no": "22921", + "xcode": "127.0127927352", + "stop_type": "일반차로", + "node_id": "121001320", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "서초고후문", + "ycode": "37.4893768961", + "stop_no": "22922", + "xcode": "127.0047484587", + "stop_type": "마을버스", + "node_id": "121900145", + "nxtStn": "서초역3번출구" + }, + { + "stop_nm": "상문고등학교.수표교교회", + "ycode": "37.4818562644", + "stop_no": "22923", + "xcode": "127.0050035302", + "stop_type": "마을버스", + "node_id": "121900236", + "nxtStn": "제약회관" + }, + { + "stop_nm": "빛교회.이수중앙시장", + "ycode": "37.4922933558", + "stop_no": "22924", + "xcode": "126.9890268906", + "stop_type": "마을버스", + "node_id": "121900146", + "nxtStn": "카페골목입구" + }, + { + "stop_nm": "현대캐피탈", + "ycode": "37.4797190114", + "stop_no": "22925", + "xcode": "127.0410922289", + "stop_type": "마을버스", + "node_id": "121900147", + "nxtStn": "원불교" + }, + { + "stop_nm": "본마을노인복지센터", + "ycode": "37.4544488022", + "stop_no": "22926", + "xcode": "127.0529739742", + "stop_type": "마을버스", + "node_id": "121900326", + "nxtStn": "여의3교" + }, + { + "stop_nm": "본마을노인복지센터", + "ycode": "37.454582377", + "stop_no": "22927", + "xcode": "127.0530735979", + "stop_type": "마을버스", + "node_id": "121900325", + "nxtStn": "본마을" + }, + { + "stop_nm": "방배열린문화센터.가야치과병원", + "ycode": "37.4891551044", + "stop_no": "22928", + "xcode": "126.9928643282", + "stop_type": "마을버스", + "node_id": "121900148", + "nxtStn": "방배열린문화센터(방배4동주민센터)" + }, + { + "stop_nm": "카페골목입구", + "ycode": "37.4916137524", + "stop_no": "22929", + "xcode": "126.9873182177", + "stop_type": "마을버스", + "node_id": "121900149", + "nxtStn": "노인정" + }, + { + "stop_nm": "원불교", + "ycode": "37.481430551", + "stop_no": "22930", + "xcode": "127.0426750642", + "stop_type": "마을버스", + "node_id": "121900150", + "nxtStn": "동원산업" + }, + { + "stop_nm": "방배열린문화센터(방배4동주민센터)", + "ycode": "37.490394075", + "stop_no": "22931", + "xcode": "126.9921144436", + "stop_type": "마을버스", + "node_id": "121900151", + "nxtStn": "함지박사거리" + }, + { + "stop_nm": "노인정", + "ycode": "37.4893925216", + "stop_no": "22932", + "xcode": "126.9872326483", + "stop_type": "마을버스", + "node_id": "121900152", + "nxtStn": "서문여고" + }, + { + "stop_nm": "뉴코아백화점", + "ycode": "37.5072825331", + "stop_no": "22933", + "xcode": "127.0080547391", + "stop_type": "마을버스", + "node_id": "121900153", + "nxtStn": "호남고속.신세계" + }, + { + "stop_nm": "함지박사거리", + "ycode": "37.4915969962", + "stop_no": "22934", + "xcode": "126.9913600147", + "stop_type": "마을버스", + "node_id": "121900154", + "nxtStn": "빛교회.이수중앙시장" + }, + { + "stop_nm": "청호나이스", + "ycode": "37.4877164521", + "stop_no": "22935", + "xcode": "127.0129084201", + "stop_type": "마을버스", + "node_id": "121900237", + "nxtStn": "서울교대" + }, + { + "stop_nm": "코오롱아파트", + "ycode": "37.4723103108", + "stop_no": "22936", + "xcode": "127.0281179589", + "stop_type": "마을버스", + "node_id": "121900278", + "nxtStn": "우면주공아파트.우면한라아파트" + }, + { + "stop_nm": "이수역2번출구", + "ycode": "37.48721", + "stop_no": "22937", + "xcode": "126.98242", + "stop_type": "마을버스", + "node_id": "121900258", + "nxtStn": "강남의림한방병원" + }, + { + "stop_nm": "HCN서초방송", + "ycode": "37.4822972976", + "stop_no": "22938", + "xcode": "127.0120492501", + "stop_type": "마을버스", + "node_id": "121900155", + "nxtStn": "종점" + }, + { + "stop_nm": "서초포레스타3단지후문", + "ycode": "37.453882", + "stop_no": "22939", + "xcode": "127.059523", + "stop_type": "마을버스", + "node_id": "121900315", + "nxtStn": "서초포레스타5단지정문" + }, + { + "stop_nm": "서울교대", + "ycode": "37.4887252807", + "stop_no": "22940", + "xcode": "127.0162208382", + "stop_type": "마을버스", + "node_id": "121900156", + "nxtStn": "서초1동주민센터" + }, + { + "stop_nm": "삼성딜라이트", + "ycode": "37.497432879", + "stop_no": "22941", + "xcode": "127.0264934589", + "stop_type": "일반차로", + "node_id": "122000732", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "유경약국", + "ycode": "37.4936339225", + "stop_no": "22942", + "xcode": "126.9863780826", + "stop_type": "마을버스", + "node_id": "121900157", + "nxtStn": "남부시장" + }, + { + "stop_nm": "고속터미널", + "ycode": "37.5043838689", + "stop_no": "22943", + "xcode": "127.0012438189", + "stop_type": "일반차로", + "node_id": "121001322", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "서래마을", + "ycode": "37.5001774601", + "stop_no": "22944", + "xcode": "127.0038070803", + "stop_type": "일반차로", + "node_id": "121001323", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "서초1동주민센터", + "ycode": "37.4896367481", + "stop_no": "22945", + "xcode": "127.0192223339", + "stop_type": "마을버스", + "node_id": "121900158", + "nxtStn": "창신교회.서리풀노리학교" + }, + { + "stop_nm": "삽준네마을", + "ycode": "37.4691973046", + "stop_no": "22946", + "xcode": "127.0267443044", + "stop_type": "마을버스", + "node_id": "121900279", + "nxtStn": "교총회관" + }, + { + "stop_nm": "남부시장", + "ycode": "37.4953901154", + "stop_no": "22947", + "xcode": "126.9858858024", + "stop_type": "마을버스", + "node_id": "121900159", + "nxtStn": "롯데캐슬헤론아파트" + }, + { + "stop_nm": "교총회관", + "ycode": "37.4673857939", + "stop_no": "22949", + "xcode": "127.0279736684", + "stop_type": "마을버스", + "node_id": "121900280", + "nxtStn": "성촌마을입구" + }, + { + "stop_nm": "롯데캐슬헤론아파트", + "ycode": "37.4973301255", + "stop_no": "22950", + "xcode": "126.9853504863", + "stop_type": "마을버스", + "node_id": "121900160", + "nxtStn": "종점" + }, + { + "stop_nm": "서래마을입구", + "ycode": "37.49922", + "stop_no": "22956", + "xcode": "126.998353", + "stop_type": "마을버스", + "node_id": "121900161", + "nxtStn": "서래마을.서래글로벌빌리지센터" + }, + { + "stop_nm": "서래마을.서래글로벌빌리지센터", + "ycode": "37.4979248474", + "stop_no": "22959", + "xcode": "126.9982345347", + "stop_type": "마을버스", + "node_id": "121900254", + "nxtStn": "효성빌라" + }, + { + "stop_nm": "서초문화예술정보학교후문", + "ycode": "37.4866818374", + "stop_no": "22961", + "xcode": "127.0289838941", + "stop_type": "마을버스", + "node_id": "121900162", + "nxtStn": "외교안보연구원.서초구청" + }, + { + "stop_nm": "송동마을.서초힐스아파트", + "ycode": "37.4589669003", + "stop_no": "22962", + "xcode": "127.017847831", + "stop_type": "마을버스", + "node_id": "121900163", + "nxtStn": "선바위역2번출구" + }, + { + "stop_nm": "효성빌라", + "ycode": "37.4962866403", + "stop_no": "22963", + "xcode": "126.9981271322", + "stop_type": "마을버스", + "node_id": "121900164", + "nxtStn": "방배중학교" + }, + { + "stop_nm": "방배중학교", + "ycode": "37.4949403792", + "stop_no": "22966", + "xcode": "126.9974474717", + "stop_type": "마을버스", + "node_id": "121900165", + "nxtStn": "필리핀대사관" + }, + { + "stop_nm": "필리핀대사관", + "ycode": "37.4940689638", + "stop_no": "22968", + "xcode": "126.9957646844", + "stop_type": "마을버스", + "node_id": "121900166", + "nxtStn": "방배4동성당" + }, + { + "stop_nm": "서초고후문", + "ycode": "37.4889221759", + "stop_no": "22969", + "xcode": "127.0046620261", + "stop_type": "마을버스", + "node_id": "121900334", + "nxtStn": "내방역1번출구" + }, + { + "stop_nm": "방배4동성당", + "ycode": "37.4937462678", + "stop_no": "22970", + "xcode": "126.9935356582", + "stop_type": "마을버스", + "node_id": "121900167", + "nxtStn": "함지박사거리" + }, + { + "stop_nm": "함지박사거리", + "ycode": "37.493124351", + "stop_no": "22972", + "xcode": "126.9911415729", + "stop_type": "마을버스", + "node_id": "121900168", + "nxtStn": "빛교회.이수중앙시장" + }, + { + "stop_nm": "구룡사입구", + "ycode": "37.472057", + "stop_no": "22973", + "xcode": "127.050231", + "stop_type": "마을버스", + "node_id": "121900169", + "nxtStn": "종점" + }, + { + "stop_nm": "서울남부터미널", + "ycode": "37.4843", + "stop_no": "22974", + "xcode": "127.0159", + "stop_type": "일반차로", + "node_id": "121500090", + "nxtStn": "종점" + }, + { + "stop_nm": "서문여고", + "ycode": "37.487456", + "stop_no": "22975", + "xcode": "126.98502", + "stop_type": "마을버스", + "node_id": "121900170", + "nxtStn": "이수역4번출구" + }, + { + "stop_nm": "카페골목입구", + "ycode": "37.4914704762", + "stop_no": "22976", + "xcode": "126.9873114566", + "stop_type": "마을버스", + "node_id": "121900171", + "nxtStn": "이수중앙시장" + }, + { + "stop_nm": "반포종합운동장", + "ycode": "37.500218", + "stop_no": "22977", + "xcode": "126.996671", + "stop_type": "일반차로", + "node_id": "121001302", + "nxtStn": "삼성래미안" + }, + { + "stop_nm": "서울교통공사", + "ycode": "37.477477", + "stop_no": "22979", + "xcode": "126.987351", + "stop_type": "마을버스", + "node_id": "121900172", + "nxtStn": "종로교회앞" + }, + { + "stop_nm": "서초구청맞은편", + "ycode": "37.4841889736", + "stop_no": "22980", + "xcode": "127.030601072", + "stop_type": "마을버스", + "node_id": "121900173", + "nxtStn": "서울시인재개발원입구" + }, + { + "stop_nm": "방배(백석예술대)역.3번출구", + "ycode": "37.4812111266", + "stop_no": "22981", + "xcode": "126.9964879477", + "stop_type": "마을버스", + "node_id": "121900264", + "nxtStn": "구름다리" + }, + { + "stop_nm": "서초롯데캐슬프레지던트아파트", + "ycode": "37.4960642297", + "stop_no": "22982", + "xcode": "127.0197758876", + "stop_type": "마을버스", + "node_id": "121900174", + "nxtStn": "유원아파트" + }, + { + "stop_nm": "대검찰청.서초경찰서", + "ycode": "37.494511", + "stop_no": "22983", + "xcode": "127.006246", + "stop_type": "마을버스", + "node_id": "121900238", + "nxtStn": "대법원" + }, + { + "stop_nm": "불교TV.서초어린이집", + "ycode": "37.4745006419", + "stop_no": "22984", + "xcode": "127.0002023829", + "stop_type": "마을버스", + "node_id": "121900175", + "nxtStn": "동덕여고" + }, + { + "stop_nm": "구룡사거리", + "ycode": "37.4739943247", + "stop_no": "22985", + "xcode": "127.0481441804", + "stop_type": "마을버스", + "node_id": "121900176", + "nxtStn": "구룡사입구" + }, + { + "stop_nm": "서이초등학교", + "ycode": "37.4911635361", + "stop_no": "22986", + "xcode": "127.0268380817", + "stop_type": "마을버스", + "node_id": "121900177", + "nxtStn": "서초그랑자이후문" + }, + { + "stop_nm": "서울고사거리", + "ycode": "37.4832169599", + "stop_no": "22987", + "xcode": "127.0043330792", + "stop_type": "마을버스", + "node_id": "121900179", + "nxtStn": "더미켈란아파트" + }, + { + "stop_nm": "반포대교(가상)", + "ycode": "37.5090191336", + "stop_no": "22988", + "xcode": "126.9974278062", + "stop_type": "가상정류장", + "node_id": "121001312", + "nxtStn": "미성아파트" + }, + { + "stop_nm": "사당역12번출구", + "ycode": "37.4778342637", + "stop_no": "22989", + "xcode": "126.9819882566", + "stop_type": "마을버스", + "node_id": "121900180", + "nxtStn": "이수역" + }, + { + "stop_nm": "삼성래미안.이수역방향", + "ycode": "37.503804", + "stop_no": "22990", + "xcode": "127.001955", + "stop_type": "마을버스", + "node_id": "121900248", + "nxtStn": "서래마을입구" + }, + { + "stop_nm": "더미켈란아파트", + "ycode": "37.4855580371", + "stop_no": "22992", + "xcode": "127.0041602025", + "stop_type": "마을버스", + "node_id": "121900182", + "nxtStn": "서초고후문" + }, + { + "stop_nm": "서울성모병원.서울지방조달청", + "ycode": "37.5003496563", + "stop_no": "22993", + "xcode": "127.0041236994", + "stop_type": "마을버스", + "node_id": "121900183", + "nxtStn": "삼성래미안.이수역방향" + }, + { + "stop_nm": "아크로비스타", + "ycode": "37.4980214836", + "stop_no": "22994", + "xcode": "127.01282537", + "stop_type": "마을버스", + "node_id": "121900184", + "nxtStn": "디에이치반포라클라스" + }, + { + "stop_nm": "서초성당", + "ycode": "37.493191", + "stop_no": "22996", + "xcode": "127.021284", + "stop_type": "마을버스", + "node_id": "121900023", + "nxtStn": "삼성레포츠" + }, + { + "stop_nm": "강남역나라빌딩앞", + "ycode": "37.49581459", + "stop_no": "22997", + "xcode": "127.0283310385", + "stop_type": "일반차로", + "node_id": "121000921", + "nxtStn": "우성아파트앞사거리(경유)" + }, + { + "stop_nm": "반포대교(가상)", + "ycode": "37.5098276485", + "stop_no": "22998", + "xcode": "126.9969557374", + "stop_type": "가상정류장", + "node_id": "121001311", + "nxtStn": "동작대교(가상)" + }, + { + "stop_nm": "양재역신한은행앞", + "ycode": "37.4829090136", + "stop_no": "22999", + "xcode": "127.0352377849", + "stop_type": "일반차로", + "node_id": "121000972", + "nxtStn": "일동제약사거리" + }, + { + "stop_nm": "신사중학교", + "ycode": "37.5229277357", + "stop_no": "23101", + "xcode": "127.0204991277", + "stop_type": "가로변시간", + "node_id": "122000001", + "nxtStn": "광림교회.현대고등학교" + }, + { + "stop_nm": "신사중학교", + "ycode": "37.52386", + "stop_no": "23102", + "xcode": "127.02155", + "stop_type": "가로변시간", + "node_id": "122000002", + "nxtStn": "한남대교(가상)" + }, + { + "stop_nm": "광림교회.현대고등학교", + "ycode": "37.5253868122", + "stop_no": "23103", + "xcode": "127.0252663803", + "stop_type": "일반차로", + "node_id": "122000003", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "광림교회.현대고등학교", + "ycode": "37.5252779533", + "stop_no": "23104", + "xcode": "127.0244392928", + "stop_type": "가로변시간", + "node_id": "122000004", + "nxtStn": "신사중학교" + }, + { + "stop_nm": "압구정역4번출구", + "ycode": "37.525735", + "stop_no": "23105", + "xcode": "127.02819", + "stop_type": "일반차로", + "node_id": "122000005", + "nxtStn": "국민은행압구정종합금융센터" + }, + { + "stop_nm": "국민은행", + "ycode": "37.5230982773", + "stop_no": "23106", + "xcode": "127.028118907", + "stop_type": "일반차로", + "node_id": "122000006", + "nxtStn": "강남을지병원" + }, + { + "stop_nm": "신사동고개", + "ycode": "37.518898", + "stop_no": "23107", + "xcode": "127.025755", + "stop_type": "가로변시간", + "node_id": "122000007", + "nxtStn": "신사역8번출구.가로수길" + }, + { + "stop_nm": "신사역8번출구.가로수길", + "ycode": "37.5174397364", + "stop_no": "23108", + "xcode": "127.0221753116", + "stop_type": "가로변전일", + "node_id": "122000008", + "nxtStn": "신사역" + }, + { + "stop_nm": "신사역6번출구", + "ycode": "37.517422", + "stop_no": "23109", + "xcode": "127.019435", + "stop_type": "일반차로", + "node_id": "122000009", + "nxtStn": "신사중학교" + }, + { + "stop_nm": "신사역3번출구", + "ycode": "37.515232", + "stop_no": "23110", + "xcode": "127.020079", + "stop_type": "일반차로", + "node_id": "122000010", + "nxtStn": "신사역1번출구" + }, + { + "stop_nm": "신사역1번출구", + "ycode": "37.5167928115", + "stop_no": "23111", + "xcode": "127.0218266895", + "stop_type": "가로변시간", + "node_id": "122000011", + "nxtStn": "신사동고개" + }, + { + "stop_nm": "신사동고개", + "ycode": "37.5185545148", + "stop_no": "23112", + "xcode": "127.0260152561", + "stop_type": "가로변전일", + "node_id": "122000012", + "nxtStn": "강남을지병원" + }, + { + "stop_nm": "강남을지병원", + "ycode": "37.518221", + "stop_no": "23113", + "xcode": "127.028629", + "stop_type": "일반차로", + "node_id": "122000013", + "nxtStn": "학동역" + }, + { + "stop_nm": "학동역", + "ycode": "37.5147842255", + "stop_no": "23114", + "xcode": "127.0301678528", + "stop_type": "일반차로", + "node_id": "122000014", + "nxtStn": "논현동고개" + }, + { + "stop_nm": "학동역6번출구", + "ycode": "37.51378", + "stop_no": "23115", + "xcode": "127.029634", + "stop_type": "일반차로", + "node_id": "122000015", + "nxtStn": "영동시장" + }, + { + "stop_nm": "영동시장", + "ycode": "37.5118508617", + "stop_no": "23116", + "xcode": "127.0234688746", + "stop_type": "일반차로", + "node_id": "122000016", + "nxtStn": "신사역3번출구" + }, + { + "stop_nm": "영동시장", + "ycode": "37.5112644378", + "stop_no": "23117", + "xcode": "127.0224777731", + "stop_type": "일반차로", + "node_id": "122000017", + "nxtStn": "학동역5번출구" + }, + { + "stop_nm": "학동역5번출구", + "ycode": "37.5135731512", + "stop_no": "23118", + "xcode": "127.0301492658", + "stop_type": "일반차로", + "node_id": "122000018", + "nxtStn": "논현동고개" + }, + { + "stop_nm": "논현동고개", + "ycode": "37.5102565309", + "stop_no": "23119", + "xcode": "127.0323028097", + "stop_type": "일반차로", + "node_id": "122000019", + "nxtStn": "언주역2번출구.차병원사거리" + }, + { + "stop_nm": "삼정호텔", + "ycode": "37.5067856544", + "stop_no": "23120", + "xcode": "127.0316905107", + "stop_type": "일반차로", + "node_id": "122000020", + "nxtStn": "신논현역3번출구" + }, + { + "stop_nm": "신논현역", + "ycode": "37.505076", + "stop_no": "23121", + "xcode": "127.025847", + "stop_type": "일반차로", + "node_id": "122000021", + "nxtStn": "논현역" + }, + { + "stop_nm": "교보타워", + "ycode": "37.5057773025", + "stop_no": "23122", + "xcode": "127.0241456343", + "stop_type": "일반차로", + "node_id": "122000022", + "nxtStn": "영동시장.논현역3번출구" + }, + { + "stop_nm": "영동시장논현역", + "ycode": "37.509376", + "stop_no": "23123", + "xcode": "127.022458", + "stop_type": "일반차로", + "node_id": "122000023", + "nxtStn": "신사역8번출구.가로수길" + }, + { + "stop_nm": "언북중학교입구", + "ycode": "37.5202978876", + "stop_no": "23124", + "xcode": "127.0308205822", + "stop_type": "일반차로", + "node_id": "122000024", + "nxtStn": "제일은행.호림아트센터앞" + }, + { + "stop_nm": "제일은행.호림아트센터앞", + "ycode": "37.5215790063", + "stop_no": "23125", + "xcode": "127.0349369258", + "stop_type": "일반차로", + "node_id": "122000025", + "nxtStn": "일지아트홀.압구정노인복지관" + }, + { + "stop_nm": "영동119안전센터", + "ycode": "37.5225557208", + "stop_no": "23126", + "xcode": "127.0381006504", + "stop_type": "일반차로", + "node_id": "122000026", + "nxtStn": "영동고등학교현대아파트" + }, + { + "stop_nm": "강남구청역", + "ycode": "37.5184656847", + "stop_no": "23127", + "xcode": "127.040640587", + "stop_type": "일반차로", + "node_id": "122000027", + "nxtStn": "삼성동서광아파트" + }, + { + "stop_nm": "강남구청역", + "ycode": "37.516954", + "stop_no": "23128", + "xcode": "127.039948", + "stop_type": "일반차로", + "node_id": "122000028", + "nxtStn": "세관앞" + }, + { + "stop_nm": "세관앞", + "ycode": "37.5157593644", + "stop_no": "23129", + "xcode": "127.0360665964", + "stop_type": "일반차로", + "node_id": "122000029", + "nxtStn": "서울세관사거리" + }, + { + "stop_nm": "서울세관", + "ycode": "37.5170273453", + "stop_no": "23130", + "xcode": "127.0356282732", + "stop_type": "일반차로", + "node_id": "122000030", + "nxtStn": "을지병원포포인츠강남&호텔선샤인" + }, + { + "stop_nm": "서울세관", + "ycode": "37.517333", + "stop_no": "23131", + "xcode": "127.035172", + "stop_type": "일반차로", + "node_id": "122000031", + "nxtStn": "펜트힐루논현.임피리얼팰리스호텔" + }, + { + "stop_nm": "학동역", + "ycode": "37.515158129", + "stop_no": "23132", + "xcode": "127.0303750209", + "stop_type": "일반차로", + "node_id": "122000032", + "nxtStn": "강남을지병원" + }, + { + "stop_nm": "강남을지병원", + "ycode": "37.5185664886", + "stop_no": "23133", + "xcode": "127.0287812765", + "stop_type": "일반차로", + "node_id": "122000033", + "nxtStn": "신사동고개" + }, + { + "stop_nm": "세관앞", + "ycode": "37.515601", + "stop_no": "23134", + "xcode": "127.036421", + "stop_type": "일반차로", + "node_id": "122000034", + "nxtStn": "강남구청역" + }, + { + "stop_nm": "강남구청역", + "ycode": "37.51677", + "stop_no": "23135", + "xcode": "127.040165", + "stop_type": "일반차로", + "node_id": "122000035", + "nxtStn": "삼성동서광아파트" + }, + { + "stop_nm": "한국토지주택공사앞", + "ycode": "37.51319", + "stop_no": "23136", + "xcode": "127.042662", + "stop_type": "일반차로", + "node_id": "122000036", + "nxtStn": "삼성2문화센터" + }, + { + "stop_nm": "선정릉역1번출구.시니어플라자", + "ycode": "37.510235", + "stop_no": "23137", + "xcode": "127.0431", + "stop_type": "일반차로", + "node_id": "122000037", + "nxtStn": "아크로힐스논현" + }, + { + "stop_nm": "아크로힐스논현", + "ycode": "37.5092228723", + "stop_no": "23138", + "xcode": "127.0396748981", + "stop_type": "일반차로", + "node_id": "122000038", + "nxtStn": "국민은행논현동지점" + }, + { + "stop_nm": "논현아이파크", + "ycode": "37.511223", + "stop_no": "23139", + "xcode": "127.036438", + "stop_type": "일반차로", + "node_id": "122000039", + "nxtStn": "임피리얼팰리스호텔.펜트힐루논현" + }, + { + "stop_nm": "임피리얼팰리스호텔.펜트힐루논현", + "ycode": "37.5143285583", + "stop_no": "23140", + "xcode": "127.0356009719", + "stop_type": "일반차로", + "node_id": "122000040", + "nxtStn": "서울세관" + }, + { + "stop_nm": "펜트힐루논현.임피리얼팰리스호텔", + "ycode": "37.5135465374", + "stop_no": "23141", + "xcode": "127.0351526376", + "stop_type": "일반차로", + "node_id": "122000041", + "nxtStn": "논현아이파크" + }, + { + "stop_nm": "논현아이파크", + "ycode": "37.511143", + "stop_no": "23142", + "xcode": "127.03592", + "stop_type": "일반차로", + "node_id": "122000042", + "nxtStn": "시티프라디움더강남.라움아트센터" + }, + { + "stop_nm": "국민은행논현동지점", + "ycode": "37.508573", + "stop_no": "23143", + "xcode": "127.037383", + "stop_type": "일반차로", + "node_id": "122000043", + "nxtStn": "언주역4번출구.차병원사거리" + }, + { + "stop_nm": "언주역4번출구.차병원사거리", + "ycode": "37.507842", + "stop_no": "23144", + "xcode": "127.03515", + "stop_type": "일반차로", + "node_id": "122000044", + "nxtStn": "삼정호텔" + }, + { + "stop_nm": "언주역3번출구", + "ycode": "37.5084783232", + "stop_no": "23145", + "xcode": "127.0335055792", + "stop_type": "일반차로", + "node_id": "122000045", + "nxtStn": "논현고개" + }, + { + "stop_nm": "논현고개", + "ycode": "37.5114460374", + "stop_no": "23146", + "xcode": "127.0321076269", + "stop_type": "일반차로", + "node_id": "122000046", + "nxtStn": "학동역" + }, + { + "stop_nm": "서울세관사거리", + "ycode": "37.515313", + "stop_no": "23147", + "xcode": "127.034607", + "stop_type": "일반차로", + "node_id": "122000047", + "nxtStn": "학동역" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.5284384777", + "stop_no": "23148", + "xcode": "127.030580671", + "stop_type": "일반차로", + "node_id": "122000048", + "nxtStn": "광림교회.현대고등학교" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.5282986659", + "stop_no": "23149", + "xcode": "127.0311225746", + "stop_type": "가로변시간", + "node_id": "122000049", + "nxtStn": "한양아파트.압구정로데오역" + }, + { + "stop_nm": "고속철도수서역", + "ycode": "37.484874", + "stop_no": "23150", + "xcode": "127.104391", + "stop_type": "일반차로", + "node_id": "122000718", + "nxtStn": "수서역5번출구.이마트앞" + }, + { + "stop_nm": "신사동교회", + "ycode": "37.5206998289", + "stop_no": "23151", + "xcode": "127.030625028", + "stop_type": "일반차로", + "node_id": "122000050", + "nxtStn": "신사동고개" + }, + { + "stop_nm": "도산공원.호림아트센터앞", + "ycode": "37.5221138227", + "stop_no": "23152", + "xcode": "127.0333295289", + "stop_type": "일반차로", + "node_id": "122000051", + "nxtStn": "서울세관" + }, + { + "stop_nm": "신구중학교", + "ycode": "37.5267319814", + "stop_no": "23153", + "xcode": "127.0332342816", + "stop_type": "일반차로", + "node_id": "122000052", + "nxtStn": "도산공원.호림아트센터앞" + }, + { + "stop_nm": "압구정중고등학교.현대아파트", + "ycode": "37.529758", + "stop_no": "23154", + "xcode": "127.033683", + "stop_type": "일반차로", + "node_id": "122000053", + "nxtStn": "신구중학교" + }, + { + "stop_nm": "도산공원사거리", + "ycode": "37.52203", + "stop_no": "23155", + "xcode": "127.034595", + "stop_type": "일반차로", + "node_id": "122000651", + "nxtStn": "신사동교회" + }, + { + "stop_nm": "압구정파출소", + "ycode": "37.529112", + "stop_no": "23156", + "xcode": "127.036279", + "stop_type": "가로변시간", + "node_id": "122000054", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "압구정파출소", + "ycode": "37.5287469102", + "stop_no": "23157", + "xcode": "127.0360581401", + "stop_type": "가로변시간", + "node_id": "122000055", + "nxtStn": "한양아파트.압구정로데오역" + }, + { + "stop_nm": "한양아파트.압구정로데오역", + "ycode": "37.5282700029", + "stop_no": "23158", + "xcode": "127.0395789565", + "stop_type": "일반차로", + "node_id": "122000056", + "nxtStn": "압구정역" + }, + { + "stop_nm": "한양아파트.압구정로데오역", + "ycode": "37.527929495", + "stop_no": "23159", + "xcode": "127.0392574486", + "stop_type": "가로변시간", + "node_id": "122000057", + "nxtStn": "청담동주민센터" + }, + { + "stop_nm": "일지아트홀", + "ycode": "37.524912", + "stop_no": "23160", + "xcode": "127.039498", + "stop_type": "일반차로", + "node_id": "122000058", + "nxtStn": "씨네시티앞" + }, + { + "stop_nm": "씨네시티앞", + "ycode": "37.522898", + "stop_no": "23161", + "xcode": "127.037602", + "stop_type": "일반차로", + "node_id": "122000059", + "nxtStn": "도산공원사거리" + }, + { + "stop_nm": "도산공원", + "ycode": "37.5228130189", + "stop_no": "23162", + "xcode": "127.0335300905", + "stop_type": "일반차로", + "node_id": "122000060", + "nxtStn": "신구중학교" + }, + { + "stop_nm": "신구중학교", + "ycode": "37.5256460711", + "stop_no": "23163", + "xcode": "127.0335404098", + "stop_type": "일반차로", + "node_id": "122000061", + "nxtStn": "성수대교남단.현대아파트" + }, + { + "stop_nm": "성수대교남단.현대아파트", + "ycode": "37.5299198087", + "stop_no": "23164", + "xcode": "127.0341408692", + "stop_type": "일반차로", + "node_id": "122000062", + "nxtStn": "뚝섬서울숲" + }, + { + "stop_nm": "청담초등학교", + "ycode": "37.5268028293", + "stop_no": "23165", + "xcode": "127.045122136", + "stop_type": "일반차로", + "node_id": "122000063", + "nxtStn": "한양아파트.압구정로데오역" + }, + { + "stop_nm": "청담동주민센터", + "ycode": "37.524615", + "stop_no": "23166", + "xcode": "127.049332", + "stop_type": "일반차로", + "node_id": "122000064", + "nxtStn": "청담초등학교" + }, + { + "stop_nm": "청담동주민센터", + "ycode": "37.524522", + "stop_no": "23167", + "xcode": "127.051348", + "stop_type": "일반차로", + "node_id": "122000065", + "nxtStn": "리베라호텔" + }, + { + "stop_nm": "영동교입구.청담자이아파트", + "ycode": "37.5227837764", + "stop_no": "23168", + "xcode": "127.0560022536", + "stop_type": "일반차로", + "node_id": "122000066", + "nxtStn": "프라마호텔" + }, + { + "stop_nm": "영동교입구", + "ycode": "37.522278", + "stop_no": "23169", + "xcode": "127.055452", + "stop_type": "가로변시간", + "node_id": "122000067", + "nxtStn": "청담역.경기고교" + }, + { + "stop_nm": "청담역.경기고교", + "ycode": "37.520982", + "stop_no": "23170", + "xcode": "127.056165", + "stop_type": "가로변시간", + "node_id": "122000068", + "nxtStn": "봉은사.삼성1파출소앞" + }, + { + "stop_nm": "우리은행청담지점.청담삼익아파트", + "ycode": "37.521076", + "stop_no": "23171", + "xcode": "127.056898", + "stop_type": "가로변전일", + "node_id": "122000069", + "nxtStn": "청담동주민센터" + }, + { + "stop_nm": "청담역.경기고교", + "ycode": "37.520026", + "stop_no": "23172", + "xcode": "127.056114", + "stop_type": "일반차로", + "node_id": "122000070", + "nxtStn": "진흥아파트" + }, + { + "stop_nm": "진흥아파트", + "ycode": "37.5192911033", + "stop_no": "23173", + "xcode": "127.0520898501", + "stop_type": "일반차로", + "node_id": "122000071", + "nxtStn": "강남구청.강남세무서" + }, + { + "stop_nm": "청담천주교회", + "ycode": "37.5204992022", + "stop_no": "23174", + "xcode": "127.0495735347", + "stop_type": "일반차로", + "node_id": "122000072", + "nxtStn": "청담2치안센터" + }, + { + "stop_nm": "청담2치안센터", + "ycode": "37.523026", + "stop_no": "23175", + "xcode": "127.048215", + "stop_type": "일반차로", + "node_id": "122000073", + "nxtStn": "청담동주민센터" + }, + { + "stop_nm": "강남구청.강남세무서", + "ycode": "37.518429", + "stop_no": "23176", + "xcode": "127.047293", + "stop_type": "일반차로", + "node_id": "122000074", + "nxtStn": "청담동래미안아파트" + }, + { + "stop_nm": "청담동래미안아파트", + "ycode": "37.517654", + "stop_no": "23177", + "xcode": "127.042911", + "stop_type": "일반차로", + "node_id": "122000075", + "nxtStn": "강남구청역" + }, + { + "stop_nm": "강남구청역", + "ycode": "37.518505", + "stop_no": "23178", + "xcode": "127.04094", + "stop_type": "일반차로", + "node_id": "122000076", + "nxtStn": "영동고교앞" + }, + { + "stop_nm": "프라마호텔", + "ycode": "37.5248729196", + "stop_no": "23179", + "xcode": "127.05115694", + "stop_type": "일반차로", + "node_id": "122000697", + "nxtStn": "한양아파트.압구정로데오역" + }, + { + "stop_nm": "농협앞", + "ycode": "37.5240778005", + "stop_no": "23180", + "xcode": "127.0443867144", + "stop_type": "일반차로", + "node_id": "122000077", + "nxtStn": "씨네시티앞" + }, + { + "stop_nm": "일지아트홀.압구정동노인복지관", + "ycode": "37.5243159636", + "stop_no": "23181", + "xcode": "127.0396345679", + "stop_type": "일반차로", + "node_id": "122000078", + "nxtStn": "한양아파트.압구정로데오역" + }, + { + "stop_nm": "청담초등학교앞", + "ycode": "37.5264613268", + "stop_no": "23182", + "xcode": "127.045085725", + "stop_type": "일반차로", + "node_id": "122000079", + "nxtStn": "청담동주민센터" + }, + { + "stop_nm": "청담2치안센터", + "ycode": "37.5229351646", + "stop_no": "23183", + "xcode": "127.0477909496", + "stop_type": "일반차로", + "node_id": "122000080", + "nxtStn": "청담동성당" + }, + { + "stop_nm": "청담동성당앞", + "ycode": "37.5202583193", + "stop_no": "23184", + "xcode": "127.0492045241", + "stop_type": "일반차로", + "node_id": "122000081", + "nxtStn": "강남구청.강남세무서" + }, + { + "stop_nm": "차병원차움", + "ycode": "37.523668", + "stop_no": "23185", + "xcode": "127.04417", + "stop_type": "가로변전일", + "node_id": "122000082", + "nxtStn": "청담동주민센터" + }, + { + "stop_nm": "진흥아파트청담역", + "ycode": "37.519045", + "stop_no": "23186", + "xcode": "127.05213", + "stop_type": "일반차로", + "node_id": "122000083", + "nxtStn": "청담역.경기고교" + }, + { + "stop_nm": "청담역.경기고교", + "ycode": "37.519823", + "stop_no": "23187", + "xcode": "127.056455", + "stop_type": "일반차로", + "node_id": "122000084", + "nxtStn": "봉은사.삼성1파출소앞" + }, + { + "stop_nm": "청담역.경기고교", + "ycode": "37.519306", + "stop_no": "23188", + "xcode": "127.057852", + "stop_type": "가로변시간", + "node_id": "122000085", + "nxtStn": "우리은행청담지점.청담삼익아파트" + }, + { + "stop_nm": "봉은사.삼성1파출소앞", + "ycode": "37.5149677625", + "stop_no": "23189", + "xcode": "127.0594353837", + "stop_type": "가로변시간", + "node_id": "122000086", + "nxtStn": "무역센터" + }, + { + "stop_nm": "봉은사.코엑스북문", + "ycode": "37.51417", + "stop_no": "23190", + "xcode": "127.058828", + "stop_type": "가로변시간", + "node_id": "122000087", + "nxtStn": "삼성중앙역.플래티넘아파트" + }, + { + "stop_nm": "봉은사.코엑스북문", + "ycode": "37.5135467163", + "stop_no": "23191", + "xcode": "127.057639012", + "stop_type": "일반차로", + "node_id": "122000088", + "nxtStn": "무역센터" + }, + { + "stop_nm": "봉은사역3번출구.삼성1파출소", + "ycode": "37.5151079658", + "stop_no": "23192", + "xcode": "127.0601628839", + "stop_type": "가로변전일", + "node_id": "122000089", + "nxtStn": "청담역.경기고교" + }, + { + "stop_nm": "봉은사역5번출구.광동한방병원", + "ycode": "37.514458", + "stop_no": "23193", + "xcode": "127.062201", + "stop_type": "일반차로", + "node_id": "122000090", + "nxtStn": "노블발렌티웨딩홀" + }, + { + "stop_nm": "노블발렌티웨딩홀", + "ycode": "37.5148306999", + "stop_no": "23194", + "xcode": "127.0647588832", + "stop_type": "일반차로", + "node_id": "122000091", + "nxtStn": "시내산기도원입구" + }, + { + "stop_nm": "서울의료원강남분원", + "ycode": "37.512568", + "stop_no": "23195", + "xcode": "127.065604", + "stop_type": "일반차로", + "node_id": "122000092", + "nxtStn": "강남경찰서면허시험장" + }, + { + "stop_nm": "강남경찰서면허시험장", + "ycode": "37.509894", + "stop_no": "23196", + "xcode": "127.06591", + "stop_type": "일반차로", + "node_id": "122000093", + "nxtStn": "한국무역센터.삼성역" + }, + { + "stop_nm": "삼성역7번출구", + "ycode": "37.5111248917", + "stop_no": "23197", + "xcode": "127.0622993092", + "stop_type": "일반차로", + "node_id": "122000094", + "nxtStn": "봉은사역3번출구.삼성1파출소" + }, + { + "stop_nm": "무역센터", + "ycode": "37.5124628796", + "stop_no": "23198", + "xcode": "127.0608284673", + "stop_type": "일반차로", + "node_id": "122000095", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "무역센터", + "ycode": "37.5105673268", + "stop_no": "23199", + "xcode": "127.0618556161", + "stop_type": "일반차로", + "node_id": "122000096", + "nxtStn": "삼성역" + }, + { + "stop_nm": "강남구보건소", + "ycode": "37.515478", + "stop_no": "23200", + "xcode": "127.041773", + "stop_type": "일반차로", + "node_id": "122000665", + "nxtStn": "한국토지주택공사앞" + }, + { + "stop_nm": "한국무역센터.삼성역", + "ycode": "37.5086670057", + "stop_no": "23201", + "xcode": "127.0617005963", + "stop_type": "일반차로", + "node_id": "122000098", + "nxtStn": "포스코사거리" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.5078226593", + "stop_no": "23202", + "xcode": "127.0563179719", + "stop_type": "일반차로", + "node_id": "122000099", + "nxtStn": "한별구립어린이집" + }, + { + "stop_nm": "한별구립어린이집", + "ycode": "37.5104103876", + "stop_no": "23203", + "xcode": "127.0549014268", + "stop_type": "일반차로", + "node_id": "122000100", + "nxtStn": "삼성중앙역.플래티넘아파트" + }, + { + "stop_nm": "센트럴아이파크.강남구도시관리공단", + "ycode": "37.5157795361", + "stop_no": "23204", + "xcode": "127.0520466841", + "stop_type": "일반차로", + "node_id": "122000101", + "nxtStn": "강남구청.강남세무서" + }, + { + "stop_nm": "삼성동서광아파트", + "ycode": "37.517323", + "stop_no": "23205", + "xcode": "127.042455", + "stop_type": "일반차로", + "node_id": "122000102", + "nxtStn": "강남구청.강남세무서" + }, + { + "stop_nm": "강남구청.강남세무서", + "ycode": "37.518249", + "stop_no": "23206", + "xcode": "127.047658", + "stop_type": "일반차로", + "node_id": "122000103", + "nxtStn": "진흥아파트청담역" + }, + { + "stop_nm": "청담역7번출구", + "ycode": "37.5176356522", + "stop_no": "23207", + "xcode": "127.0506188246", + "stop_type": "일반차로", + "node_id": "122000104", + "nxtStn": "센트럴아이파크.강남구도시관리공단" + }, + { + "stop_nm": "센트럴아이파크.강남구도시관리공단", + "ycode": "37.5153174045", + "stop_no": "23208", + "xcode": "127.0518696115", + "stop_type": "일반차로", + "node_id": "122000105", + "nxtStn": "한별구립어린이집" + }, + { + "stop_nm": "한별구립어린이집", + "ycode": "37.5102276026", + "stop_no": "23209", + "xcode": "127.0546026643", + "stop_type": "일반차로", + "node_id": "122000106", + "nxtStn": "포스코사거리" + }, + { + "stop_nm": "삼성중앙역.플래티넘아파트", + "ycode": "37.512663758", + "stop_no": "23210", + "xcode": "127.0515286905", + "stop_type": "일반차로", + "node_id": "122000107", + "nxtStn": "강남교육청" + }, + { + "stop_nm": "삼성중앙역.플래티넘아파트", + "ycode": "37.5123779785", + "stop_no": "23211", + "xcode": "127.0518271312", + "stop_type": "일반차로", + "node_id": "122000108", + "nxtStn": "한별구립어린이집" + }, + { + "stop_nm": "삼성2문화센터", + "ycode": "37.5110917636", + "stop_no": "23212", + "xcode": "127.0461375271", + "stop_type": "가로변시간", + "node_id": "122000109", + "nxtStn": "선정릉역.무형문화재전수회관" + }, + { + "stop_nm": "삼성2문화센터", + "ycode": "37.5108104729", + "stop_no": "23213", + "xcode": "127.046512905", + "stop_type": "일반차로", + "node_id": "122000110", + "nxtStn": "삼성중앙역.플래티넘아파트" + }, + { + "stop_nm": "선릉역8번출구.선정릉", + "ycode": "37.506203", + "stop_no": "23214", + "xcode": "127.048337", + "stop_type": "일반차로", + "node_id": "122000111", + "nxtStn": "선정릉역.무형문화재전수회관" + }, + { + "stop_nm": "선정릉역.무형문화재전수회관", + "ycode": "37.5096985003", + "stop_no": "23215", + "xcode": "127.044202384", + "stop_type": "일반차로", + "node_id": "122000112", + "nxtStn": "삼성2문화센터" + }, + { + "stop_nm": "한국토지주택공사앞", + "ycode": "37.512637", + "stop_no": "23216", + "xcode": "127.043208", + "stop_type": "일반차로", + "node_id": "122000113", + "nxtStn": "강남구보건소" + }, + { + "stop_nm": "포스코건너편", + "ycode": "37.5066831874", + "stop_no": "23217", + "xcode": "127.0554269279", + "stop_type": "일반차로", + "node_id": "122000114", + "nxtStn": "선릉역" + }, + { + "stop_nm": "선릉역", + "ycode": "37.505143", + "stop_no": "23218", + "xcode": "127.050205", + "stop_type": "일반차로", + "node_id": "122000115", + "nxtStn": "서울상록회관.한국기술센터" + }, + { + "stop_nm": "도곡역2번출구.동부센트레빌", + "ycode": "37.4915855937", + "stop_no": "23219", + "xcode": "127.0565229085", + "stop_type": "가로변전일", + "node_id": "122000116", + "nxtStn": "타워펠리스" + }, + { + "stop_nm": "중대부고", + "ycode": "37.4918872375", + "stop_no": "23220", + "xcode": "127.0550936879", + "stop_type": "일반차로", + "node_id": "122000117", + "nxtStn": "단대부고.대치아이파크아파트" + }, + { + "stop_nm": "단대부고.대치아이파크아파트", + "ycode": "37.4946749575", + "stop_no": "23221", + "xcode": "127.0537770662", + "stop_type": "일반차로", + "node_id": "122000118", + "nxtStn": "한티역" + }, + { + "stop_nm": "한티역3번출구.서울강남고용노동지청", + "ycode": "37.4964463596", + "stop_no": "23222", + "xcode": "127.0541425059", + "stop_type": "일반차로", + "node_id": "122000119", + "nxtStn": "삼성아파트입구" + }, + { + "stop_nm": "삼성아파트입구", + "ycode": "37.4981982", + "stop_no": "23223", + "xcode": "127.05956007", + "stop_type": "일반차로", + "node_id": "122000120", + "nxtStn": "농협대치지점" + }, + { + "stop_nm": "농협대치지점", + "ycode": "37.4979369667", + "stop_no": "23224", + "xcode": "127.0611545494", + "stop_type": "일반차로", + "node_id": "122000121", + "nxtStn": "대치SK.VIEW아파트.서울교회" + }, + { + "stop_nm": "대치SK.VIEW아파트.서울교회", + "ycode": "37.4962613463", + "stop_no": "23225", + "xcode": "127.0620556876", + "stop_type": "일반차로", + "node_id": "122000122", + "nxtStn": "대치역7번출구.선경아파트" + }, + { + "stop_nm": "대치역1번출구", + "ycode": "37.4938592964", + "stop_no": "23226", + "xcode": "127.0614984174", + "stop_type": "가로변전일", + "node_id": "122000123", + "nxtStn": "래미안대치팰리스" + }, + { + "stop_nm": "래미안대치팰리스", + "ycode": "37.4925595861", + "stop_no": "23227", + "xcode": "127.0585796232", + "stop_type": "가로변전일", + "node_id": "122000124", + "nxtStn": "그랑프리백화점" + }, + { + "stop_nm": "도곡역3번출구", + "ycode": "37.4911818874", + "stop_no": "23228", + "xcode": "127.0565474837", + "stop_type": "가로변전일", + "node_id": "122000125", + "nxtStn": "대치동" + }, + { + "stop_nm": "대치동우성아파트", + "ycode": "37.4925770923", + "stop_no": "23229", + "xcode": "127.0596110202", + "stop_type": "가로변전일", + "node_id": "122000126", + "nxtStn": "대치역8번출구" + }, + { + "stop_nm": "대치역8번출구", + "ycode": "37.493865", + "stop_no": "23230", + "xcode": "127.06223", + "stop_type": "가로변전일", + "node_id": "122000127", + "nxtStn": "대치역7번출구.선경아파트" + }, + { + "stop_nm": "대치역7번출구.선경아파트", + "ycode": "37.492458", + "stop_no": "23231", + "xcode": "127.06408", + "stop_type": "일반차로", + "node_id": "122000128", + "nxtStn": "개포동역7번출구.개포시장" + }, + { + "stop_nm": "그랑프리백화점", + "ycode": "37.4902578609", + "stop_no": "23232", + "xcode": "127.0557033053", + "stop_type": "일반차로", + "node_id": "122000129", + "nxtStn": "도곡역3번출구" + }, + { + "stop_nm": "은마아파트", + "ycode": "37.4955959062", + "stop_no": "23233", + "xcode": "127.0628615031", + "stop_type": "일반차로", + "node_id": "122000130", + "nxtStn": "은마파출소" + }, + { + "stop_nm": "은마파출소", + "ycode": "37.4980989737", + "stop_no": "23234", + "xcode": "127.0615233829", + "stop_type": "일반차로", + "node_id": "122000131", + "nxtStn": "대치현대아파트" + }, + { + "stop_nm": "은마아파트", + "ycode": "37.499483", + "stop_no": "23235", + "xcode": "127.063132", + "stop_type": "일반차로", + "node_id": "122000132", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "대치동은마아파트", + "ycode": "37.498904", + "stop_no": "23236", + "xcode": "127.068456", + "stop_type": "일반차로", + "node_id": "122000133", + "nxtStn": "디에이치자이개포아파트" + }, + { + "stop_nm": "은마아파트", + "ycode": "37.4957666584", + "stop_no": "23237", + "xcode": "127.0669737834", + "stop_type": "가로변전일", + "node_id": "122000134", + "nxtStn": "은마아파트" + }, + { + "stop_nm": "대치동미도아파트", + "ycode": "37.4956049426", + "stop_no": "23238", + "xcode": "127.0677076244", + "stop_type": "가로변전일", + "node_id": "122000135", + "nxtStn": "개원중학교.대모산입구역2번출구" + }, + { + "stop_nm": "대치역6번출구.강남구민회관", + "ycode": "37.492785", + "stop_no": "23239", + "xcode": "127.064278", + "stop_type": "일반차로", + "node_id": "122000136", + "nxtStn": "대치역1번출구" + }, + { + "stop_nm": "쌍용아파트", + "ycode": "37.498082", + "stop_no": "23240", + "xcode": "127.069323", + "stop_type": "가로변시간", + "node_id": "122000137", + "nxtStn": "새마을운동중앙회" + }, + { + "stop_nm": "선릉역", + "ycode": "37.505447", + "stop_no": "23241", + "xcode": "127.051217", + "stop_type": "일반차로", + "node_id": "122000645", + "nxtStn": "역삼아르누보&조선팰리스강남" + }, + { + "stop_nm": "삼성역", + "ycode": "37.5073182086", + "stop_no": "23242", + "xcode": "127.0643833115", + "stop_type": "가로변시간", + "node_id": "122000139", + "nxtStn": "삼성역7번출구" + }, + { + "stop_nm": "강남경찰서.강남운전면허시험장", + "ycode": "37.509799", + "stop_no": "23243", + "xcode": "127.067028", + "stop_type": "가로변전일", + "node_id": "122000140", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "삼성역", + "ycode": "37.507145", + "stop_no": "23244", + "xcode": "127.063686", + "stop_type": "가로변시간", + "node_id": "122000141", + "nxtStn": "대치2동주민센터.래미안하이스턴" + }, + { + "stop_nm": "휘문고.대치2동주민센터", + "ycode": "37.5035340192", + "stop_no": "23245", + "xcode": "127.0656234398", + "stop_type": "가로변전일", + "node_id": "122000142", + "nxtStn": "대치동은마아파트" + }, + { + "stop_nm": "래미안하이스턴.대치순복음교회", + "ycode": "37.4999449909", + "stop_no": "23246", + "xcode": "127.0638660962", + "stop_type": "일반차로", + "node_id": "122000143", + "nxtStn": "은마아파트입구사거리" + }, + { + "stop_nm": "대치현대아파트", + "ycode": "37.500825", + "stop_no": "23247", + "xcode": "127.060062", + "stop_type": "일반차로", + "node_id": "122000144", + "nxtStn": "휘문중고등학교" + }, + { + "stop_nm": "휘문중고등학교", + "ycode": "37.5039658555", + "stop_no": "23248", + "xcode": "127.0618980584", + "stop_type": "일반차로", + "node_id": "122000145", + "nxtStn": "삼성역" + }, + { + "stop_nm": "휘문중고등학교", + "ycode": "37.5040741974", + "stop_no": "23249", + "xcode": "127.0614966158", + "stop_type": "일반차로", + "node_id": "122000146", + "nxtStn": "대치동현대아파트" + }, + { + "stop_nm": "대치사거리", + "ycode": "37.50366", + "stop_no": "23250", + "xcode": "127.058578", + "stop_type": "일반차로", + "node_id": "122000147", + "nxtStn": "포스코사거리" + }, + { + "stop_nm": "한국무역센터.삼성역", + "ycode": "37.507841", + "stop_no": "23251", + "xcode": "127.060548", + "stop_type": "일반차로", + "node_id": "122000148", + "nxtStn": "강남경찰서.강남운전면허시험장" + }, + { + "stop_nm": "한티역", + "ycode": "37.4981160997", + "stop_no": "23252", + "xcode": "127.0521475206", + "stop_type": "일반차로", + "node_id": "122000149", + "nxtStn": "역삼동개나리아파트" + }, + { + "stop_nm": "도성초등학교", + "ycode": "37.5001223629", + "stop_no": "23253", + "xcode": "127.0512135652", + "stop_type": "일반차로", + "node_id": "122000150", + "nxtStn": "진선여자중고등학교" + }, + { + "stop_nm": "도성초교사거리", + "ycode": "37.50082", + "stop_no": "23254", + "xcode": "127.051957", + "stop_type": "일반차로", + "node_id": "122000151", + "nxtStn": "영동농협풍림아이원아파트" + }, + { + "stop_nm": "영동농협풍림아이원아파트", + "ycode": "37.5021979661", + "stop_no": "23255", + "xcode": "127.0563510713", + "stop_type": "일반차로", + "node_id": "122000152", + "nxtStn": "휘문중고등학교" + }, + { + "stop_nm": "영동농협풍림아이원아파트", + "ycode": "37.502615", + "stop_no": "23256", + "xcode": "127.056883", + "stop_type": "일반차로", + "node_id": "122000153", + "nxtStn": "도성초교사거리" + }, + { + "stop_nm": "도성초교사거리", + "ycode": "37.500882", + "stop_no": "23257", + "xcode": "127.051612", + "stop_type": "일반차로", + "node_id": "122000154", + "nxtStn": "역삼동개나리아파트" + }, + { + "stop_nm": "진선여자중고등학교", + "ycode": "37.5027442041", + "stop_no": "23258", + "xcode": "127.049965539", + "stop_type": "일반차로", + "node_id": "122000155", + "nxtStn": "선릉역8번출구.선정릉" + }, + { + "stop_nm": "선릉역", + "ycode": "37.5047611955", + "stop_no": "23259", + "xcode": "127.050462265", + "stop_type": "일반차로", + "node_id": "122000156", + "nxtStn": "포스코빌딩" + }, + { + "stop_nm": "포스코빌딩", + "ycode": "37.5060493833", + "stop_no": "23260", + "xcode": "127.0548888307", + "stop_type": "일반차로", + "node_id": "122000157", + "nxtStn": "한국무역센터.삼성역" + }, + { + "stop_nm": "대치사거리", + "ycode": "37.5034252657", + "stop_no": "23261", + "xcode": "127.0582125979", + "stop_type": "일반차로", + "node_id": "122000158", + "nxtStn": "대치동현대아파트" + }, + { + "stop_nm": "대치동현대아파트", + "ycode": "37.501646012", + "stop_no": "23262", + "xcode": "127.0591748622", + "stop_type": "일반차로", + "node_id": "122000159", + "nxtStn": "농협대치지점" + }, + { + "stop_nm": "은마아파트입구사거리", + "ycode": "37.4987273789", + "stop_no": "23263", + "xcode": "127.0600675492", + "stop_type": "일반차로", + "node_id": "122000160", + "nxtStn": "도곡초등학교" + }, + { + "stop_nm": "도곡초등학교", + "ycode": "37.4976896078", + "stop_no": "23264", + "xcode": "127.0566485239", + "stop_type": "일반차로", + "node_id": "122000161", + "nxtStn": "한티역2번출구.서울강남고용노동지청" + }, + { + "stop_nm": "한티역2번출구.서울강남고용노동지청", + "ycode": "37.4967735576", + "stop_no": "23265", + "xcode": "127.0539289896", + "stop_type": "일반차로", + "node_id": "122000162", + "nxtStn": "한티역" + }, + { + "stop_nm": "신논현역", + "ycode": "37.5046361677", + "stop_no": "23266", + "xcode": "127.0257548004", + "stop_type": "일반차로", + "node_id": "122000163", + "nxtStn": "노보텔앰배서더호텔" + }, + { + "stop_nm": "삼정호텔앞", + "ycode": "37.5062420273", + "stop_no": "23267", + "xcode": "127.0311108359", + "stop_type": "일반차로", + "node_id": "122000164", + "nxtStn": "언주역5번출구.차병원사거리" + }, + { + "stop_nm": "차병원", + "ycode": "37.50553234", + "stop_no": "23268", + "xcode": "127.0344860558", + "stop_type": "일반차로", + "node_id": "122000165", + "nxtStn": "역삼역6번출구" + }, + { + "stop_nm": "차병원", + "ycode": "37.506356", + "stop_no": "23269", + "xcode": "127.034549", + "stop_type": "일반차로", + "node_id": "122000166", + "nxtStn": "언주역3번출구" + }, + { + "stop_nm": "언주역5번출구.차병원사거리", + "ycode": "37.507558", + "stop_no": "23270", + "xcode": "127.035323", + "stop_type": "일반차로", + "node_id": "122000167", + "nxtStn": "시티프라디움더강남.라움아트센터" + }, + { + "stop_nm": "시티프라디움더강남.라움아트센터", + "ycode": "37.507862", + "stop_no": "23271", + "xcode": "127.03893", + "stop_type": "일반차로", + "node_id": "122000168", + "nxtStn": "KT강남지사" + }, + { + "stop_nm": "라움아트센터.시티프라디움더강남", + "ycode": "37.507745", + "stop_no": "23272", + "xcode": "127.039648", + "stop_type": "일반차로", + "node_id": "122000169", + "nxtStn": "논현아이파크" + }, + { + "stop_nm": "아크로힐스논현", + "ycode": "37.5091077534", + "stop_no": "23273", + "xcode": "127.0406479555", + "stop_type": "일반차로", + "node_id": "122000170", + "nxtStn": "선정릉역4번출구.시니어플라자" + }, + { + "stop_nm": "선정릉역4번출구.시니어플라자", + "ycode": "37.509842", + "stop_no": "23274", + "xcode": "127.042892", + "stop_type": "일반차로", + "node_id": "122000171", + "nxtStn": "삼성2문화센터" + }, + { + "stop_nm": "선정릉역.무형문화재전수회관", + "ycode": "37.5092335728", + "stop_no": "23275", + "xcode": "127.0440935191", + "stop_type": "일반차로", + "node_id": "122000172", + "nxtStn": "선릉역" + }, + { + "stop_nm": "선릉역", + "ycode": "37.5058843866", + "stop_no": "23276", + "xcode": "127.0481759639", + "stop_type": "일반차로", + "node_id": "122000173", + "nxtStn": "진선여자중고등학교" + }, + { + "stop_nm": "서울상록회관.한국기술센터", + "ycode": "37.503232", + "stop_no": "23277", + "xcode": "127.044057", + "stop_type": "일반차로", + "node_id": "122000174", + "nxtStn": "아가방빌딩.하나은행" + }, + { + "stop_nm": "KT강남지사", + "ycode": "37.5047549674", + "stop_no": "23278", + "xcode": "127.0419791463", + "stop_type": "일반차로", + "node_id": "122000175", + "nxtStn": "라움아트센터.시티프라디움더강남" + }, + { + "stop_nm": "KT강남지사", + "ycode": "37.5047578524", + "stop_no": "23279", + "xcode": "127.0414645036", + "stop_type": "일반차로", + "node_id": "122000176", + "nxtStn": "역삼동성당.역삼자이아파트" + }, + { + "stop_nm": "아가방빌딩.하나은행", + "ycode": "37.50164", + "stop_no": "23280", + "xcode": "127.038772", + "stop_type": "일반차로", + "node_id": "122000177", + "nxtStn": "역삼역4번출구" + }, + { + "stop_nm": "역삼역7번출구.GS타워", + "ycode": "37.501505", + "stop_no": "23281", + "xcode": "127.036765", + "stop_type": "일반차로", + "node_id": "122000178", + "nxtStn": "차병원" + }, + { + "stop_nm": "역삼역6번출구", + "ycode": "37.501542", + "stop_no": "23282", + "xcode": "127.036385", + "stop_type": "일반차로", + "node_id": "122000179", + "nxtStn": "영동중앙교회" + }, + { + "stop_nm": "역삼역4번출구", + "ycode": "37.500428", + "stop_no": "23283", + "xcode": "127.034735", + "stop_type": "일반차로", + "node_id": "122000180", + "nxtStn": "강남역12번출구" + }, + { + "stop_nm": "강남역12번출구", + "ycode": "37.49881", + "stop_no": "23284", + "xcode": "127.029558", + "stop_type": "일반차로", + "node_id": "122000181", + "nxtStn": "강남역.강남역사거리" + }, + { + "stop_nm": "강남역", + "ycode": "37.4999348463", + "stop_no": "23285", + "xcode": "127.0269678944", + "stop_type": "일반차로", + "node_id": "122000182", + "nxtStn": "신논현역6번출구" + }, + { + "stop_nm": "신논현역.구교보타워사거리", + "ycode": "37.502359976", + "stop_no": "23286", + "xcode": "127.0257902121", + "stop_type": "일반차로", + "node_id": "122000183", + "nxtStn": "신논현역3번출구.교보타워사거리" + }, + { + "stop_nm": "강남역.역삼세무서", + "ycode": "37.4981357274", + "stop_no": "23287", + "xcode": "127.0291477897", + "stop_type": "일반차로", + "node_id": "122000184", + "nxtStn": "역삼역.포스코타워역삼" + }, + { + "stop_nm": "역삼역.포스코타워역삼", + "ycode": "37.49949", + "stop_no": "23288", + "xcode": "127.033598", + "stop_type": "일반차로", + "node_id": "122000185", + "nxtStn": "대한사회복지회" + }, + { + "stop_nm": "영동중앙교회", + "ycode": "37.4981539451", + "stop_no": "23289", + "xcode": "127.0379751499", + "stop_type": "일반차로", + "node_id": "122000186", + "nxtStn": "총지사" + }, + { + "stop_nm": "강남구보건소", + "ycode": "37.515333", + "stop_no": "23290", + "xcode": "127.042155", + "stop_type": "일반차로", + "node_id": "122000666", + "nxtStn": "강남구청역" + }, + { + "stop_nm": "역삼럭키아파트.역삼월드메르디앙아파트", + "ycode": "37.491838771", + "stop_no": "23291", + "xcode": "127.0387194718", + "stop_type": "일반차로", + "node_id": "122000187", + "nxtStn": "뱅뱅사거리.역삼동" + }, + { + "stop_nm": "역삼초등학교", + "ycode": "37.494218", + "stop_no": "23292", + "xcode": "127.034183", + "stop_type": "일반차로", + "node_id": "122000188", + "nxtStn": "총지사" + }, + { + "stop_nm": "역삼초등학교", + "ycode": "37.4943308436", + "stop_no": "23293", + "xcode": "127.0341054359", + "stop_type": "일반차로", + "node_id": "122000189", + "nxtStn": "서초청소년도서관" + }, + { + "stop_nm": "뱅뱅사거리.역삼동", + "ycode": "37.4902625053", + "stop_no": "23294", + "xcode": "127.033598088", + "stop_type": "일반차로", + "node_id": "122000190", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "역삼초등학교", + "ycode": "37.492195273", + "stop_no": "23295", + "xcode": "127.0306529668", + "stop_type": "일반차로", + "node_id": "122000191", + "nxtStn": "강남역9번출구" + }, + { + "stop_nm": "역삼2동주민센터.대림역삼아파트", + "ycode": "37.496245263", + "stop_no": "23296", + "xcode": "127.0459926766", + "stop_type": "일반차로", + "node_id": "122000192", + "nxtStn": "동영문화센터" + }, + { + "stop_nm": "래미안.그레이튼.아파트", + "ycode": "37.496049", + "stop_no": "23297", + "xcode": "127.045708", + "stop_type": "일반차로", + "node_id": "122000193", + "nxtStn": "강남세브란스병원" + }, + { + "stop_nm": "역삼자이아파트", + "ycode": "37.499811", + "stop_no": "23298", + "xcode": "127.044322", + "stop_type": "일반차로", + "node_id": "122000194", + "nxtStn": "KT강남지사" + }, + { + "stop_nm": "역삼동성당.역삼자이아파트", + "ycode": "37.4998793449", + "stop_no": "23299", + "xcode": "127.0437950854", + "stop_type": "일반차로", + "node_id": "122000195", + "nxtStn": "래미안그레이튼아파트" + }, + { + "stop_nm": "역삼동개나리아파트", + "ycode": "37.499378", + "stop_no": "23300", + "xcode": "127.047595", + "stop_type": "일반차로", + "node_id": "122000196", + "nxtStn": "강남더드림병원.도성초등학교" + }, + { + "stop_nm": "역삼동개나리아파트", + "ycode": "37.4994508516", + "stop_no": "23301", + "xcode": "127.0473484575", + "stop_type": "일반차로", + "node_id": "122000197", + "nxtStn": "동영문화센터" + }, + { + "stop_nm": "총지사", + "ycode": "37.496322", + "stop_no": "23302", + "xcode": "127.040453", + "stop_type": "일반차로", + "node_id": "122000198", + "nxtStn": "예림당아트홀.신한은행전산센터" + }, + { + "stop_nm": "총지사", + "ycode": "37.4966904984", + "stop_no": "23303", + "xcode": "127.0408425358", + "stop_type": "일반차로", + "node_id": "122000199", + "nxtStn": "영동중앙교회" + }, + { + "stop_nm": "영동중앙교회", + "ycode": "37.4977185179", + "stop_no": "23304", + "xcode": "127.03857548", + "stop_type": "일반차로", + "node_id": "122000200", + "nxtStn": "역삼역7번출구.GS타워" + }, + { + "stop_nm": "대한사회복지회", + "ycode": "37.501137", + "stop_no": "23305", + "xcode": "127.038818", + "stop_type": "일반차로", + "node_id": "122000201", + "nxtStn": "한국자산신탁.센터필드" + }, + { + "stop_nm": "한국자산신탁.센터필드", + "ycode": "37.502783", + "stop_no": "23306", + "xcode": "127.044247", + "stop_type": "일반차로", + "node_id": "122000202", + "nxtStn": "선릉역" + }, + { + "stop_nm": "진선여자중고등학교", + "ycode": "37.5022648571", + "stop_no": "23307", + "xcode": "127.0498724735", + "stop_type": "일반차로", + "node_id": "122000203", + "nxtStn": "도성초등학교앞" + }, + { + "stop_nm": "역삼e-편한세상아파트", + "ycode": "37.4992545645", + "stop_no": "23308", + "xcode": "127.0512977977", + "stop_type": "일반차로", + "node_id": "122000204", + "nxtStn": "한티역" + }, + { + "stop_nm": "한티역", + "ycode": "37.4972023372", + "stop_no": "23309", + "xcode": "127.0522475418", + "stop_type": "일반차로", + "node_id": "122000205", + "nxtStn": "한티역7번출구" + }, + { + "stop_nm": "한티역7번출구", + "ycode": "37.49601", + "stop_no": "23310", + "xcode": "127.05148", + "stop_type": "일반차로", + "node_id": "122000206", + "nxtStn": "역삼중학교.강남세브란스병원" + }, + { + "stop_nm": "역삼중학교.강남세브란스병원", + "ycode": "37.49471181", + "stop_no": "23311", + "xcode": "127.0476983171", + "stop_type": "일반차로", + "node_id": "122000207", + "nxtStn": "도곡1차아이파크.역삼청소년수련관" + }, + { + "stop_nm": "도곡1차아이파크.역삼청소년수련관", + "ycode": "37.4928082151", + "stop_no": "23312", + "xcode": "127.0417858592", + "stop_type": "일반차로", + "node_id": "122000208", + "nxtStn": "총지사" + }, + { + "stop_nm": "총지사", + "ycode": "37.4949426926", + "stop_no": "23313", + "xcode": "127.0398633221", + "stop_type": "일반차로", + "node_id": "122000209", + "nxtStn": "영동중앙교회" + }, + { + "stop_nm": "도곡1동주민센터.역삼럭키아파트", + "ycode": "37.4915800523", + "stop_no": "23314", + "xcode": "127.0390292015", + "stop_type": "일반차로", + "node_id": "122000210", + "nxtStn": "도곡1차아이파크.도곡중학교" + }, + { + "stop_nm": "도곡1차아이파크.도곡중학교", + "ycode": "37.4926349836", + "stop_no": "23315", + "xcode": "127.0424021052", + "stop_type": "일반차로", + "node_id": "122000211", + "nxtStn": "도곡중학교.강남세브란스병원" + }, + { + "stop_nm": "매봉삼성아파트SK리더스뷰", + "ycode": "37.4881449495", + "stop_no": "23316", + "xcode": "127.0489606775", + "stop_type": "가로변시간", + "node_id": "122000212", + "nxtStn": "양재역" + }, + { + "stop_nm": "매봉역양재최의원", + "ycode": "37.4861642605", + "stop_no": "23317", + "xcode": "127.0445616798", + "stop_type": "가로변전일", + "node_id": "122000213", + "nxtStn": "양재역4번출구" + }, + { + "stop_nm": "양재역말죽거리.강남베드로병원", + "ycode": "37.4852510407", + "stop_no": "23318", + "xcode": "127.0379686178", + "stop_type": "가로변시간", + "node_id": "122000214", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "뱅뱅사거리.구영동중학교", + "ycode": "37.4877243166", + "stop_no": "23319", + "xcode": "127.032807632", + "stop_type": "일반차로", + "node_id": "122000215", + "nxtStn": "뱅뱅사거리뱅뱅프라자" + }, + { + "stop_nm": "고속철도수서역", + "ycode": "37.484498", + "stop_no": "23320", + "xcode": "127.103737", + "stop_type": "일반차로", + "node_id": "122000717", + "nxtStn": "쟁골마을" + }, + { + "stop_nm": "뱅뱅사거리뱅뱅프라자", + "ycode": "37.4897472768", + "stop_no": "23321", + "xcode": "127.0328763684", + "stop_type": "일반차로", + "node_id": "122000217", + "nxtStn": "LPG가스충전소" + }, + { + "stop_nm": "원불교앞", + "ycode": "37.4835581756", + "stop_no": "23322", + "xcode": "127.0423551365", + "stop_type": "일반차로", + "node_id": "122000218", + "nxtStn": "도곡한신아파트" + }, + { + "stop_nm": "매봉역", + "ycode": "37.485917", + "stop_no": "23323", + "xcode": "127.044855", + "stop_type": "일반차로", + "node_id": "122000219", + "nxtStn": "도곡2동주민센터대치중학교" + }, + { + "stop_nm": "도곡개포한신아파트", + "ycode": "37.487972", + "stop_no": "23324", + "xcode": "127.04938", + "stop_type": "가로변시간", + "node_id": "122000220", + "nxtStn": "군인공제회관" + }, + { + "stop_nm": "도곡동개포한신아파트", + "ycode": "37.487046846", + "stop_no": "23325", + "xcode": "127.0502898045", + "stop_type": "일반차로", + "node_id": "122000221", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "우성캐릭터빌아파트", + "ycode": "37.4870096821", + "stop_no": "23326", + "xcode": "127.0508009097", + "stop_type": "일반차로", + "node_id": "122000222", + "nxtStn": "강남세브란스병원" + }, + { + "stop_nm": "군인공제회관", + "ycode": "37.489211", + "stop_no": "23327", + "xcode": "127.052019", + "stop_type": "가로변시간", + "node_id": "122000223", + "nxtStn": "도곡역3번출구" + }, + { + "stop_nm": "선정릉역라마다서울호텔", + "ycode": "37.510554", + "stop_no": "23328", + "xcode": "127.045337", + "stop_type": "일반차로", + "node_id": "122000657", + "nxtStn": "봉은사역코엑스인터컨티넨탈" + }, + { + "stop_nm": "숙명여고", + "ycode": "37.489722", + "stop_no": "23329", + "xcode": "127.05237", + "stop_type": "가로변시간", + "node_id": "122000225", + "nxtStn": "매봉삼성아파트SK리더스뷰" + }, + { + "stop_nm": "도곡렉슬아파트.강남세브란스병원", + "ycode": "37.4944367753", + "stop_no": "23330", + "xcode": "127.0481867043", + "stop_type": "일반차로", + "node_id": "122000226", + "nxtStn": "한티역6번출구" + }, + { + "stop_nm": "한티역6번출구", + "ycode": "37.495722", + "stop_no": "23331", + "xcode": "127.05194", + "stop_type": "일반차로", + "node_id": "122000227", + "nxtStn": "한티역3번출구.서울강남고용노동지청" + }, + { + "stop_nm": "도곡렉슬아파트정문", + "ycode": "37.4947508051", + "stop_no": "23332", + "xcode": "127.053435578", + "stop_type": "일반차로", + "node_id": "122000228", + "nxtStn": "중대부고앞" + }, + { + "stop_nm": "중대부고앞", + "ycode": "37.492538", + "stop_no": "23333", + "xcode": "127.054525", + "stop_type": "일반차로", + "node_id": "122000229", + "nxtStn": "그랑프리백화점" + }, + { + "stop_nm": "구룡중학교앞", + "ycode": "37.485803", + "stop_no": "23334", + "xcode": "127.057243", + "stop_type": "일반차로", + "node_id": "122000230", + "nxtStn": "개포고등학교앞" + }, + { + "stop_nm": "개포고등학교앞", + "ycode": "37.484231", + "stop_no": "23335", + "xcode": "127.058605", + "stop_type": "일반차로", + "node_id": "122000231", + "nxtStn": "개포도서관" + }, + { + "stop_nm": "개포1단지", + "ycode": "37.4825833935", + "stop_no": "23336", + "xcode": "127.060589185", + "stop_type": "일반차로", + "node_id": "122000232", + "nxtStn": "개포중학교" + }, + { + "stop_nm": "개포파크빌리지", + "ycode": "37.4767507104", + "stop_no": "23338", + "xcode": "127.0583603693", + "stop_type": "일반차로", + "node_id": "122000234", + "nxtStn": "개포주공1단지아파트" + }, + { + "stop_nm": "하나은행사거리", + "ycode": "37.4808563189", + "stop_no": "23339", + "xcode": "127.0542194513", + "stop_type": "일반차로", + "node_id": "122000235", + "nxtStn": "현대1차.우성3차아파트" + }, + { + "stop_nm": "현대아파트경남아파트", + "ycode": "37.482875", + "stop_no": "23340", + "xcode": "127.053115", + "stop_type": "일반차로", + "node_id": "122000236", + "nxtStn": "우성캐릭터빌아파트" + }, + { + "stop_nm": "우성3차아파트", + "ycode": "37.4831736073", + "stop_no": "23341", + "xcode": "127.0568897219", + "stop_type": "일반차로", + "node_id": "122000237", + "nxtStn": "개포고등학교앞" + }, + { + "stop_nm": "개일초등학교앞", + "ycode": "37.486174", + "stop_no": "23342", + "xcode": "127.057216", + "stop_type": "일반차로", + "node_id": "122000238", + "nxtStn": "그랑프리백화점" + }, + { + "stop_nm": "개포고등학교", + "ycode": "37.484374823", + "stop_no": "23343", + "xcode": "127.0586456019", + "stop_type": "일반차로", + "node_id": "122000239", + "nxtStn": "우성3차아파트" + }, + { + "stop_nm": "개포1단지연금매장", + "ycode": "37.482501", + "stop_no": "23344", + "xcode": "127.06097", + "stop_type": "일반차로", + "node_id": "122000240", + "nxtStn": "개포고등학교" + }, + { + "stop_nm": "래미안블레스티지아파트", + "ycode": "37.480651", + "stop_no": "23345", + "xcode": "127.063217", + "stop_type": "일반차로", + "node_id": "122000241", + "nxtStn": "개포1단지연금매장" + }, + { + "stop_nm": "개포도서관", + "ycode": "37.483697", + "stop_no": "23346", + "xcode": "127.063897", + "stop_type": "일반차로", + "node_id": "122000242", + "nxtStn": "수도전기공고후문" + }, + { + "stop_nm": "수도전기공고후문", + "ycode": "37.484782057", + "stop_no": "23347", + "xcode": "127.0656239958", + "stop_type": "일반차로", + "node_id": "122000243", + "nxtStn": "개포주공5단지경기여고" + }, + { + "stop_nm": "수도전기공고후문", + "ycode": "37.485273", + "stop_no": "23348", + "xcode": "127.065984", + "stop_type": "일반차로", + "node_id": "122000244", + "nxtStn": "개포도서관" + }, + { + "stop_nm": "디에이치아너힐즈", + "ycode": "37.48373", + "stop_no": "23349", + "xcode": "127.068697", + "stop_type": "일반차로", + "node_id": "122000245", + "nxtStn": "래미안블레스티지아파트" + }, + { + "stop_nm": "개포자이프레지던스", + "ycode": "37.4837442298", + "stop_no": "23350", + "xcode": "127.0692035802", + "stop_type": "일반차로", + "node_id": "122000246", + "nxtStn": "개포주공5단지경기여고" + }, + { + "stop_nm": "경기여고", + "ycode": "37.48653", + "stop_no": "23351", + "xcode": "127.067244", + "stop_type": "일반차로", + "node_id": "122000247", + "nxtStn": "수도전기공고후문" + }, + { + "stop_nm": "개포동역7번출구.개포시장", + "ycode": "37.488648", + "stop_no": "23352", + "xcode": "127.066165", + "stop_type": "일반차로", + "node_id": "122000248", + "nxtStn": "경기여고" + }, + { + "stop_nm": "개포주공5단지경기여고", + "ycode": "37.4867075784", + "stop_no": "23353", + "xcode": "127.0674711689", + "stop_type": "일반차로", + "node_id": "122000249", + "nxtStn": "개포동역6번출구.개포시장" + }, + { + "stop_nm": "개포동역6번출구.개포시장", + "ycode": "37.488545", + "stop_no": "23354", + "xcode": "127.06658", + "stop_type": "일반차로", + "node_id": "122000250", + "nxtStn": "개포시장.개포5단지상가" + }, + { + "stop_nm": "개포시장.개포5단지상가", + "ycode": "37.48952", + "stop_no": "23355", + "xcode": "127.068071", + "stop_type": "일반차로", + "node_id": "122000251", + "nxtStn": "개포동역7번출구.개포시장" + }, + { + "stop_nm": "개포시장.개포5단지상가", + "ycode": "37.4893130095", + "stop_no": "23356", + "xcode": "127.0684494389", + "stop_type": "일반차로", + "node_id": "122000252", + "nxtStn": "개포6단지앞" + }, + { + "stop_nm": "양전초등학교", + "ycode": "37.490243", + "stop_no": "23357", + "xcode": "127.070593", + "stop_type": "일반차로", + "node_id": "122000253", + "nxtStn": "개포시장.개포5단지상가" + }, + { + "stop_nm": "개포6단지앞", + "ycode": "37.489962", + "stop_no": "23358", + "xcode": "127.07042", + "stop_type": "일반차로", + "node_id": "122000254", + "nxtStn": "디에이치자이개포아파트" + }, + { + "stop_nm": "디에이치자이개포아파트", + "ycode": "37.4923", + "stop_no": "23359", + "xcode": "127.075568", + "stop_type": "일반차로", + "node_id": "122000255", + "nxtStn": "대청역" + }, + { + "stop_nm": "개원중학교.대모산입구역2번출구", + "ycode": "37.492262", + "stop_no": "23360", + "xcode": "127.072156", + "stop_type": "일반차로", + "node_id": "122000256", + "nxtStn": "개포주공7단지앞" + }, + { + "stop_nm": "개포주공7단지앞", + "ycode": "37.489156", + "stop_no": "23361", + "xcode": "127.073811", + "stop_type": "일반차로", + "node_id": "122000257", + "nxtStn": "삼성서울병원사거리" + }, + { + "stop_nm": "일원초등학교", + "ycode": "37.488338", + "stop_no": "23362", + "xcode": "127.074692", + "stop_type": "일반차로", + "node_id": "122000258", + "nxtStn": "학여울역" + }, + { + "stop_nm": "현대아파트", + "ycode": "37.4822653767", + "stop_no": "23363", + "xcode": "127.0528285196", + "stop_type": "일반차로", + "node_id": "122000259", + "nxtStn": "개포래미안포레스트" + }, + { + "stop_nm": "개포래미안포레스트", + "ycode": "37.479942", + "stop_no": "23364", + "xcode": "127.054609", + "stop_type": "일반차로", + "node_id": "122000260", + "nxtStn": "우성6차아파트" + }, + { + "stop_nm": "능인선원앞", + "ycode": "37.4724246532", + "stop_no": "23365", + "xcode": "127.0522540318", + "stop_type": "일반차로", + "node_id": "122000261", + "nxtStn": "구룡사입구" + }, + { + "stop_nm": "구룡산입구", + "ycode": "37.477298", + "stop_no": "23366", + "xcode": "127.061771", + "stop_type": "일반차로", + "node_id": "122000262", + "nxtStn": "종점" + }, + { + "stop_nm": "능인선원앞", + "ycode": "37.47206", + "stop_no": "23367", + "xcode": "127.052327", + "stop_type": "일반차로", + "node_id": "122000263", + "nxtStn": "도곡교회.인바디빌딩.건너" + }, + { + "stop_nm": "구룡사입구", + "ycode": "37.4719206884", + "stop_no": "23368", + "xcode": "127.0507511248", + "stop_type": "일반차로", + "node_id": "122000264", + "nxtStn": "국악고교사거리" + }, + { + "stop_nm": "국악고교사거리", + "ycode": "37.474526919", + "stop_no": "23369", + "xcode": "127.0480450265", + "stop_type": "일반차로", + "node_id": "122000265", + "nxtStn": "삼호물산" + }, + { + "stop_nm": "삼호물산", + "ycode": "37.4772430549", + "stop_no": "23370", + "xcode": "127.0452517449", + "stop_type": "일반차로", + "node_id": "122000266", + "nxtStn": "원불교" + }, + { + "stop_nm": "구룡초등학교", + "ycode": "37.480753935", + "stop_no": "23371", + "xcode": "127.0530683183", + "stop_type": "일반차로", + "node_id": "122000267", + "nxtStn": "광수빌딩" + }, + { + "stop_nm": "광수빌딩", + "ycode": "37.4790607546", + "stop_no": "23372", + "xcode": "127.0493324033", + "stop_type": "일반차로", + "node_id": "122000268", + "nxtStn": "국민은행그린공원" + }, + { + "stop_nm": "국민은행그린공원", + "ycode": "37.4787698164", + "stop_no": "23373", + "xcode": "127.0468254619", + "stop_type": "일반차로", + "node_id": "122000269", + "nxtStn": "포이사거리삼호물산" + }, + { + "stop_nm": "포이사거리삼호물산", + "ycode": "37.4784379636", + "stop_no": "23374", + "xcode": "127.0451416579", + "stop_type": "일반차로", + "node_id": "122000270", + "nxtStn": "영동2교" + }, + { + "stop_nm": "포이사거리삼호물산", + "ycode": "37.4782848028", + "stop_no": "23375", + "xcode": "127.0451927037", + "stop_type": "일반차로", + "node_id": "122000271", + "nxtStn": "국민은행그린공원" + }, + { + "stop_nm": "국민은행그린공원", + "ycode": "37.4785641982", + "stop_no": "23376", + "xcode": "127.0472425588", + "stop_type": "일반차로", + "node_id": "122000272", + "nxtStn": "광수빌딩" + }, + { + "stop_nm": "광수빌딩", + "ycode": "37.478898", + "stop_no": "23377", + "xcode": "127.049378", + "stop_type": "일반차로", + "node_id": "122000273", + "nxtStn": "개포지구대" + }, + { + "stop_nm": "개포지구대", + "ycode": "37.4794452914", + "stop_no": "23378", + "xcode": "127.0512070611", + "stop_type": "일반차로", + "node_id": "122000274", + "nxtStn": "구룡초등학교" + }, + { + "stop_nm": "구룡초등학교", + "ycode": "37.480467", + "stop_no": "23379", + "xcode": "127.052903", + "stop_type": "일반차로", + "node_id": "122000275", + "nxtStn": "개포래미안포레스트" + }, + { + "stop_nm": "수서삼성아파트앞", + "ycode": "37.4843993977", + "stop_no": "23380", + "xcode": "127.0909893034", + "stop_type": "일반차로", + "node_id": "122000276", + "nxtStn": "일원본동주민센터" + }, + { + "stop_nm": "일원본동주민센터", + "ycode": "37.4834885153", + "stop_no": "23381", + "xcode": "127.0847497652", + "stop_type": "일반차로", + "node_id": "122000277", + "nxtStn": "푸른마을아파트앞" + }, + { + "stop_nm": "푸른마을아파트앞", + "ycode": "37.4829129209", + "stop_no": "23382", + "xcode": "127.0805834065", + "stop_type": "일반차로", + "node_id": "122000278", + "nxtStn": "일원초등학교" + }, + { + "stop_nm": "상록수아파트앞", + "ycode": "37.4828046299", + "stop_no": "23383", + "xcode": "127.0821222482", + "stop_type": "일반차로", + "node_id": "122000279", + "nxtStn": "삼성서울병원정문" + }, + { + "stop_nm": "일원본동주민센터", + "ycode": "37.4833831017", + "stop_no": "23384", + "xcode": "127.0859753943", + "stop_type": "일반차로", + "node_id": "122000280", + "nxtStn": "시립수서청소년수련관" + }, + { + "stop_nm": "수서119.안전센터앞", + "ycode": "37.484246", + "stop_no": "23385", + "xcode": "127.093848", + "stop_type": "일반차로", + "node_id": "122000281", + "nxtStn": "궁마을" + }, + { + "stop_nm": "삼성서울병원정문", + "ycode": "37.4865445092", + "stop_no": "23386", + "xcode": "127.0829902821", + "stop_type": "일반차로", + "node_id": "122000282", + "nxtStn": "일원초등학교" + }, + { + "stop_nm": "삼성서울병원정문건너편", + "ycode": "37.4870251768", + "stop_no": "23387", + "xcode": "127.0824491516", + "stop_type": "일반차로", + "node_id": "122000283", + "nxtStn": "푸른마을아파트앞" + }, + { + "stop_nm": "일원역", + "ycode": "37.484912", + "stop_no": "23388", + "xcode": "127.083302", + "stop_type": "일반차로", + "node_id": "122000284", + "nxtStn": "일원본동주민센터" + }, + { + "stop_nm": "삼성서울병원후문", + "ycode": "37.4901997236", + "stop_no": "23389", + "xcode": "127.0875200547", + "stop_type": "일반차로", + "node_id": "122000285", + "nxtStn": "수서역" + }, + { + "stop_nm": "글래드라이브강남호텔", + "ycode": "37.508085", + "stop_no": "23390", + "xcode": "127.036999", + "stop_type": "일반차로", + "node_id": "122000716", + "nxtStn": "선정릉역라마다서울호텔" + }, + { + "stop_nm": "을지병원포포인츠강남&호텔선샤인", + "ycode": "37.5201296971", + "stop_no": "23391", + "xcode": "127.0288547701", + "stop_type": "일반차로", + "node_id": "122000739", + "nxtStn": "동작대교남단(가상)" + }, + { + "stop_nm": "삼성서울병원사거리", + "ycode": "37.489117", + "stop_no": "23392", + "xcode": "127.082446", + "stop_type": "일반차로", + "node_id": "122000288", + "nxtStn": "일원초등학교" + }, + { + "stop_nm": "강남한양수자인아파트", + "ycode": "37.478158", + "stop_no": "23393", + "xcode": "127.11335", + "stop_type": "일반차로", + "node_id": "122000696", + "nxtStn": "세곡2지구3.4단지" + }, + { + "stop_nm": "강남한양수자인아파트", + "ycode": "37.477818", + "stop_no": "23394", + "xcode": "127.113478", + "stop_type": "일반차로", + "node_id": "122000695", + "nxtStn": "가든파이브툴동" + }, + { + "stop_nm": "대치아파트.대모산입구역3번출구", + "ycode": "37.4924140029", + "stop_no": "23395", + "xcode": "127.0724873208", + "stop_type": "일반차로", + "node_id": "122000291", + "nxtStn": "쌍용아파트" + }, + { + "stop_nm": "삼성서초역삼세무서", + "ycode": "37.4984123659", + "stop_no": "23396", + "xcode": "127.0297942021", + "stop_type": "일반차로", + "node_id": "122000742", + "nxtStn": "역삼역.포스코타워역삼" + }, + { + "stop_nm": "대청역", + "ycode": "37.493243", + "stop_no": "23397", + "xcode": "127.078603", + "stop_type": "일반차로", + "node_id": "122000293", + "nxtStn": "영희초등학교" + }, + { + "stop_nm": "마루공원", + "ycode": "37.494823", + "stop_no": "23398", + "xcode": "127.083308", + "stop_type": "일반차로", + "node_id": "122000640", + "nxtStn": "대청초등학교" + }, + { + "stop_nm": "대청초등학교", + "ycode": "37.493870617", + "stop_no": "23399", + "xcode": "127.0865721019", + "stop_type": "일반차로", + "node_id": "122000641", + "nxtStn": "일원1동주민센터" + }, + { + "stop_nm": "일원1동주민센터", + "ycode": "37.491997", + "stop_no": "23400", + "xcode": "127.08763", + "stop_type": "일반차로", + "node_id": "122000642", + "nxtStn": "가락시장?헬리오시티" + }, + { + "stop_nm": "수서역현대벤쳐빌", + "ycode": "37.487678", + "stop_no": "23401", + "xcode": "127.102118", + "stop_type": "일반차로", + "node_id": "122000294", + "nxtStn": "탄천교(가상)" + }, + { + "stop_nm": "수서역", + "ycode": "37.4884601986", + "stop_no": "23402", + "xcode": "127.1006809403", + "stop_type": "일반차로", + "node_id": "122000295", + "nxtStn": "일원주유소.삼성서울병원후문" + }, + { + "stop_nm": "수서역KT수서지점", + "ycode": "37.488547", + "stop_no": "23403", + "xcode": "127.099868", + "stop_type": "일반차로", + "node_id": "122000296", + "nxtStn": "수서역" + }, + { + "stop_nm": "수서역KT수서지점", + "ycode": "37.4871885183", + "stop_no": "23404", + "xcode": "127.1007358421", + "stop_type": "일반차로", + "node_id": "122000297", + "nxtStn": "궁마을" + }, + { + "stop_nm": "세곡동주민센터", + "ycode": "37.469635", + "stop_no": "23405", + "xcode": "127.108095", + "stop_type": "일반차로", + "node_id": "122000719", + "nxtStn": "방죽마을" + }, + { + "stop_nm": "궁마을", + "ycode": "37.485427", + "stop_no": "23406", + "xcode": "127.097328", + "stop_type": "일반차로", + "node_id": "122000299", + "nxtStn": "수서교회.수서동성당앞" + }, + { + "stop_nm": "궁마을", + "ycode": "37.4852808034", + "stop_no": "23407", + "xcode": "127.0976066393", + "stop_type": "일반차로", + "node_id": "122000300", + "nxtStn": "수서역" + }, + { + "stop_nm": "수서역", + "ycode": "37.486788", + "stop_no": "23408", + "xcode": "127.102045", + "stop_type": "일반차로", + "node_id": "122000301", + "nxtStn": "쟁골마을" + }, + { + "stop_nm": "수서역5번출구", + "ycode": "37.486861", + "stop_no": "23409", + "xcode": "127.102594", + "stop_type": "일반차로", + "node_id": "122000302", + "nxtStn": "수서역" + }, + { + "stop_nm": "수서역.로즈데일빌딩", + "ycode": "37.4873984409", + "stop_no": "23410", + "xcode": "127.1028677279", + "stop_type": "일반차로", + "node_id": "122000303", + "nxtStn": "가락동" + }, + { + "stop_nm": "세곡동주민센터", + "ycode": "37.469462", + "stop_no": "23411", + "xcode": "127.107673", + "stop_type": "일반차로", + "node_id": "122000304", + "nxtStn": "대왕파출소" + }, + { + "stop_nm": "은곡마을.LH이편한세상", + "ycode": "37.465344", + "stop_no": "23412", + "xcode": "127.102535", + "stop_type": "일반차로", + "node_id": "122000305", + "nxtStn": "세곡푸르지오.은곡삼거리" + }, + { + "stop_nm": "강남신동아파밀리에1단지", + "ycode": "37.465433", + "stop_no": "23413", + "xcode": "127.099922", + "stop_type": "일반차로", + "node_id": "122000306", + "nxtStn": "은곡마을.강남신동아파밀리에" + }, + { + "stop_nm": "대왕초등학교", + "ycode": "37.4646708281", + "stop_no": "23414", + "xcode": "127.1068384861", + "stop_type": "일반차로", + "node_id": "122000307", + "nxtStn": "광연자동차학원앞" + }, + { + "stop_nm": "세곡동사거리", + "ycode": "37.4635777855", + "stop_no": "23415", + "xcode": "127.1078294794", + "stop_type": "일반차로", + "node_id": "122000308", + "nxtStn": "오야동.신촌동행정복지센터" + }, + { + "stop_nm": "세곡동", + "ycode": "37.464611", + "stop_no": "23416", + "xcode": "127.109506", + "stop_type": "일반차로", + "node_id": "122000309", + "nxtStn": "광연자동차학원앞" + }, + { + "stop_nm": "광연자동차학원앞", + "ycode": "37.4656909003", + "stop_no": "23417", + "xcode": "127.1163609853", + "stop_type": "일반차로", + "node_id": "122000310", + "nxtStn": "삼일자동차학원.강남자동차검사소" + }, + { + "stop_nm": "삼일자동차학원.강남자동차검사소", + "ycode": "37.4679153957", + "stop_no": "23418", + "xcode": "127.1211804938", + "stop_type": "일반차로", + "node_id": "122000311", + "nxtStn": "복정역환승주차장" + }, + { + "stop_nm": "삼일자동차학원.강남자동차검사소", + "ycode": "37.4679987199", + "stop_no": "23419", + "xcode": "127.1207679842", + "stop_type": "일반차로", + "node_id": "122000312", + "nxtStn": "광연자동차학원앞" + }, + { + "stop_nm": "광연자동차학원앞", + "ycode": "37.4670229687", + "stop_no": "23420", + "xcode": "127.1188445352", + "stop_type": "일반차로", + "node_id": "122000313", + "nxtStn": "강남세곡체육공원" + }, + { + "stop_nm": "세곡동", + "ycode": "37.464935", + "stop_no": "23421", + "xcode": "127.109393", + "stop_type": "일반차로", + "node_id": "122000314", + "nxtStn": "세곡동주민센터" + }, + { + "stop_nm": "세곡동사거리", + "ycode": "37.465806", + "stop_no": "23422", + "xcode": "127.108547", + "stop_type": "일반차로", + "node_id": "122000315", + "nxtStn": "세곡동주민센터" + }, + { + "stop_nm": "방죽마을", + "ycode": "37.472383", + "stop_no": "23423", + "xcode": "127.10735", + "stop_type": "일반차로", + "node_id": "122000316", + "nxtStn": "래미안포레아파트" + }, + { + "stop_nm": "래미안포레아파트", + "ycode": "37.474548", + "stop_no": "23424", + "xcode": "127.106784", + "stop_type": "일반차로", + "node_id": "122000317", + "nxtStn": "LH수서아파트" + }, + { + "stop_nm": "쟁골마을", + "ycode": "37.481887", + "stop_no": "23425", + "xcode": "127.105076", + "stop_type": "일반차로", + "node_id": "122000318", + "nxtStn": "고속철도수서역" + }, + { + "stop_nm": "쟁골마을", + "ycode": "37.4826545844", + "stop_no": "23426", + "xcode": "127.1043990475", + "stop_type": "일반차로", + "node_id": "122000319", + "nxtStn": "LH수서아파트" + }, + { + "stop_nm": "래미안포레아파트", + "ycode": "37.475134", + "stop_no": "23427", + "xcode": "127.106266", + "stop_type": "일반차로", + "node_id": "122000320", + "nxtStn": "방죽마을" + }, + { + "stop_nm": "방죽마을", + "ycode": "37.4722247345", + "stop_no": "23428", + "xcode": "127.106920465", + "stop_type": "일반차로", + "node_id": "122000321", + "nxtStn": "세곡동주민센터" + }, + { + "stop_nm": "압구정역3번출구", + "ycode": "37.5260014748", + "stop_no": "23429", + "xcode": "127.0287139855", + "stop_type": "일반차로", + "node_id": "122000322", + "nxtStn": "금호역" + }, + { + "stop_nm": "국민은행압구정지점", + "ycode": "37.52327", + "stop_no": "23430", + "xcode": "127.02851", + "stop_type": "일반차로", + "node_id": "122000323", + "nxtStn": "압구정역3번출구" + }, + { + "stop_nm": "언주역2번출구.차병원사거리", + "ycode": "37.5079530218", + "stop_no": "23431", + "xcode": "127.0333616903", + "stop_type": "일반차로", + "node_id": "122000324", + "nxtStn": "차병원" + }, + { + "stop_nm": "영동고교앞", + "ycode": "37.5215035461", + "stop_no": "23432", + "xcode": "127.0398932882", + "stop_type": "일반차로", + "node_id": "122000325", + "nxtStn": "일지아트홀.압구정노인복지관" + }, + { + "stop_nm": "개포우성6차아파트", + "ycode": "37.475732", + "stop_no": "23433", + "xcode": "127.057883", + "stop_type": "일반차로", + "node_id": "122000326", + "nxtStn": "도곡교회.인바디빌딩" + }, + { + "stop_nm": "은곡마을진입로", + "ycode": "37.465764", + "stop_no": "23434", + "xcode": "127.098699", + "stop_type": "일반차로", + "node_id": "122000664", + "nxtStn": "세곡푸르지오.은곡삼거리" + }, + { + "stop_nm": "대치유수지체육공원", + "ycode": "37.501358", + "stop_no": "23435", + "xcode": "127.068123", + "stop_type": "일반차로", + "node_id": "122000327", + "nxtStn": "래미안하이스턴.대치순복음교회" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.501145", + "stop_no": "23436", + "xcode": "127.06841", + "stop_type": "일반차로", + "node_id": "122000328", + "nxtStn": "아주중학교" + }, + { + "stop_nm": "세곡푸르지오.은곡삼거리", + "ycode": "37.464972", + "stop_no": "23437", + "xcode": "127.094703", + "stop_type": "일반차로", + "node_id": "122000674", + "nxtStn": "안골마을" + }, + { + "stop_nm": "삼성역3번출구", + "ycode": "37.507158", + "stop_no": "23438", + "xcode": "127.063711", + "stop_type": "가로변시간", + "node_id": "122000330", + "nxtStn": "휘문중고등학교" + }, + { + "stop_nm": "세곡푸르지오.은곡삼거리", + "ycode": "37.465062", + "stop_no": "23439", + "xcode": "127.096478", + "stop_type": "일반차로", + "node_id": "122000673", + "nxtStn": "은곡마을.강남신동아파밀리에" + }, + { + "stop_nm": "LH수서아파트", + "ycode": "37.478021", + "stop_no": "23440", + "xcode": "127.105958", + "stop_type": "일반차로", + "node_id": "122000743", + "nxtStn": "쟁골마을" + }, + { + "stop_nm": "LH수서아파트", + "ycode": "37.478608", + "stop_no": "23441", + "xcode": "127.105347", + "stop_type": "일반차로", + "node_id": "122000744", + "nxtStn": "강남더샵라르고오피스텔" + }, + { + "stop_nm": "세곡2지구3.4단지", + "ycode": "37.47693", + "stop_no": "23442", + "xcode": "127.110063", + "stop_type": "일반차로", + "node_id": "122000720", + "nxtStn": "은곡마을.LH이편한세상" + }, + { + "stop_nm": "개포우성아파트", + "ycode": "37.4765644257", + "stop_no": "23445", + "xcode": "127.0578638641", + "stop_type": "일반차로", + "node_id": "122000333", + "nxtStn": "도곡교회.인바디빌딩" + }, + { + "stop_nm": "래미안강남힐즈", + "ycode": "37.4723483229", + "stop_no": "23446", + "xcode": "127.0973806587", + "stop_type": "일반차로", + "node_id": "122000692", + "nxtStn": "못골마을" + }, + { + "stop_nm": "세곡중학교.세명초등학교", + "ycode": "37.470248", + "stop_no": "23447", + "xcode": "127.091797", + "stop_type": "일반차로", + "node_id": "122000691", + "nxtStn": "세곡푸르지오" + }, + { + "stop_nm": "세곡중학교.세명초등학교", + "ycode": "37.470412", + "stop_no": "23448", + "xcode": "127.092048", + "stop_type": "일반차로", + "node_id": "122000690", + "nxtStn": "래미안강남힐즈" + }, + { + "stop_nm": "일원동한솔아파트", + "ycode": "37.482544", + "stop_no": "23449", + "xcode": "127.079314", + "stop_type": "일반차로", + "node_id": "122000337", + "nxtStn": "상록수아파트앞" + }, + { + "stop_nm": "시립수서청소년수련관", + "ycode": "37.483863", + "stop_no": "23450", + "xcode": "127.089107", + "stop_type": "일반차로", + "node_id": "122000338", + "nxtStn": "수서119.안전센터앞" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.50808", + "stop_no": "23453", + "xcode": "127.05574", + "stop_type": "일반차로", + "node_id": "122000340", + "nxtStn": "대치사거리" + }, + { + "stop_nm": "대왕초등학교", + "ycode": "37.465069", + "stop_no": "23454", + "xcode": "127.106555", + "stop_type": "일반차로", + "node_id": "122000699", + "nxtStn": "강남신동아파밀리에2단지" + }, + { + "stop_nm": "그랑프리백화점", + "ycode": "37.489975", + "stop_no": "23456", + "xcode": "127.055608", + "stop_type": "일반차로", + "node_id": "122000342", + "nxtStn": "구룡중학교앞" + }, + { + "stop_nm": "개포중학교", + "ycode": "37.480169", + "stop_no": "23457", + "xcode": "127.063512", + "stop_type": "일반차로", + "node_id": "122000343", + "nxtStn": "구룡마을" + }, + { + "stop_nm": "구룡마을", + "ycode": "37.478975", + "stop_no": "23458", + "xcode": "127.064041", + "stop_type": "일반차로", + "node_id": "122000344", + "nxtStn": "개포우성6차아파트" + }, + { + "stop_nm": "개포주공1단지아파트", + "ycode": "37.4783919519", + "stop_no": "23459", + "xcode": "127.0567996147", + "stop_type": "일반차로", + "node_id": "122000345", + "nxtStn": "구룡초교사거리" + }, + { + "stop_nm": "영희초등학교", + "ycode": "37.4911914327", + "stop_no": "23462", + "xcode": "127.0804871277", + "stop_type": "일반차로", + "node_id": "122000346", + "nxtStn": "래미안개포루체하임아파트" + }, + { + "stop_nm": "못골마을.강남자곡아이파크", + "ycode": "37.47326", + "stop_no": "23463", + "xcode": "127.101727", + "stop_type": "일반차로", + "node_id": "122000686", + "nxtStn": "래미안강남힐즈" + }, + { + "stop_nm": "못골마을", + "ycode": "37.4731023528", + "stop_no": "23464", + "xcode": "127.1018882443", + "stop_type": "일반차로", + "node_id": "122000687", + "nxtStn": "강남현대힐스테이트에코" + }, + { + "stop_nm": "태화기독교.사회복지관", + "ycode": "37.4845282141", + "stop_no": "23465", + "xcode": "127.0933527923", + "stop_type": "일반차로", + "node_id": "122000348", + "nxtStn": "수서삼성아파트앞" + }, + { + "stop_nm": "개포도서관", + "ycode": "37.483553", + "stop_no": "23466", + "xcode": "127.063564", + "stop_type": "일반차로", + "node_id": "122000349", + "nxtStn": "개포1단지연금매장" + }, + { + "stop_nm": "도곡교회.인바디빌딩", + "ycode": "37.4744335616", + "stop_no": "23468", + "xcode": "127.0554585033", + "stop_type": "일반차로", + "node_id": "122000351", + "nxtStn": "능인선원앞" + }, + { + "stop_nm": "강남세브란스병원", + "ycode": "37.493352", + "stop_no": "23469", + "xcode": "127.04746", + "stop_type": "일반차로", + "node_id": "122000352", + "nxtStn": "역삼2동주민센터.대림역삼아파트" + }, + { + "stop_nm": "도곡교회.인바디빌딩.건너", + "ycode": "37.474276", + "stop_no": "23470", + "xcode": "127.055993", + "stop_type": "일반차로", + "node_id": "122000353", + "nxtStn": "구룡마을" + }, + { + "stop_nm": "래미안강남힐즈", + "ycode": "37.472291", + "stop_no": "23471", + "xcode": "127.09525", + "stop_type": "일반차로", + "node_id": "122000693", + "nxtStn": "세곡중학교.세명초등학교" + }, + { + "stop_nm": "도곡중학교.강남세브란스병원", + "ycode": "37.4936020408", + "stop_no": "23472", + "xcode": "127.0467216289", + "stop_type": "일반차로", + "node_id": "122000355", + "nxtStn": "개포한신.우성4차아파트" + }, + { + "stop_nm": "강남경찰서.강남운전면허시험장", + "ycode": "37.5095036021", + "stop_no": "23473", + "xcode": "127.0660087348", + "stop_type": "가로변시간", + "node_id": "122000356", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "수도공고앞", + "ycode": "37.4871674571", + "stop_no": "23474", + "xcode": "127.0619599602", + "stop_type": "일반차로", + "node_id": "122000357", + "nxtStn": "개포동역8번출구" + }, + { + "stop_nm": "개포4단지5단지", + "ycode": "37.486307", + "stop_no": "23475", + "xcode": "127.068121", + "stop_type": "일반차로", + "node_id": "122000358", + "nxtStn": "개포4단지6단지" + }, + { + "stop_nm": "개포4단지6단지", + "ycode": "37.486853", + "stop_no": "23476", + "xcode": "127.072076", + "stop_type": "일반차로", + "node_id": "122000359", + "nxtStn": "개포4단지7단지" + }, + { + "stop_nm": "개포4단지7단지", + "ycode": "37.4878829588", + "stop_no": "23477", + "xcode": "127.0736027384", + "stop_type": "일반차로", + "node_id": "122000360", + "nxtStn": "종점" + }, + { + "stop_nm": "개포동역1번출구", + "ycode": "37.488967804", + "stop_no": "23479", + "xcode": "127.0654139271", + "stop_type": "일반차로", + "node_id": "122000362", + "nxtStn": "수도공고" + }, + { + "stop_nm": "세곡푸르지오", + "ycode": "37.467538", + "stop_no": "23480", + "xcode": "127.093839", + "stop_type": "일반차로", + "node_id": "122000688", + "nxtStn": "은곡마을" + }, + { + "stop_nm": "경남아파트", + "ycode": "37.4889759836", + "stop_no": "23481", + "xcode": "127.0413200765", + "stop_type": "일반차로", + "node_id": "122000364", + "nxtStn": "도곡한신아파트" + }, + { + "stop_nm": "세곡푸르지오", + "ycode": "37.467688", + "stop_no": "23482", + "xcode": "127.093912", + "stop_type": "일반차로", + "node_id": "122000689", + "nxtStn": "세곡중학교.세명초등학교" + }, + { + "stop_nm": "구룡역5번출구", + "ycode": "37.486106", + "stop_no": "23483", + "xcode": "127.059199", + "stop_type": "일반차로", + "node_id": "122000365", + "nxtStn": "수도공고앞" + }, + { + "stop_nm": "구룡역1번출구", + "ycode": "37.4861696665", + "stop_no": "23484", + "xcode": "127.058961369", + "stop_type": "일반차로", + "node_id": "122000366", + "nxtStn": "개포고등학교앞" + }, + { + "stop_nm": "럭키아파트", + "ycode": "37.491638", + "stop_no": "23488", + "xcode": "127.041126", + "stop_type": "일반차로", + "node_id": "122000368", + "nxtStn": "경남아파트" + }, + { + "stop_nm": "래미안개포루체하임아파트", + "ycode": "37.4893", + "stop_no": "23489", + "xcode": "127.081473", + "stop_type": "일반차로", + "node_id": "122000724", + "nxtStn": "삼성서울병원정문건너편" + }, + { + "stop_nm": "수도공고", + "ycode": "37.4875628407", + "stop_no": "23491", + "xcode": "127.0623425063", + "stop_type": "일반차로", + "node_id": "122000370", + "nxtStn": "구룡역1번출구" + }, + { + "stop_nm": "개포4단지6단지", + "ycode": "37.486918", + "stop_no": "23492", + "xcode": "127.071998", + "stop_type": "일반차로", + "node_id": "122000371", + "nxtStn": "개포4단지5단지" + }, + { + "stop_nm": "개포4단지5단지", + "ycode": "37.486497", + "stop_no": "23493", + "xcode": "127.068237", + "stop_type": "일반차로", + "node_id": "122000372", + "nxtStn": "개포주공5단지경기여고" + }, + { + "stop_nm": "강남역12번출구A", + "ycode": "37.4987376489", + "stop_no": "23494", + "xcode": "127.0294748515", + "stop_type": "일반차로", + "node_id": "122000745", + "nxtStn": "지하철2호선강남역" + }, + { + "stop_nm": "학여울역", + "ycode": "37.497144", + "stop_no": "23500", + "xcode": "127.071451", + "stop_type": "일반차로", + "node_id": "122000643", + "nxtStn": "은마아파트" + }, + { + "stop_nm": "학여울역", + "ycode": "37.4966786872", + "stop_no": "23501", + "xcode": "127.0713978002", + "stop_type": "일반차로", + "node_id": "122000644", + "nxtStn": "코원에너지서비스" + }, + { + "stop_nm": "도곡한신아파트", + "ycode": "37.4868758329", + "stop_no": "23504", + "xcode": "127.0411576487", + "stop_type": "일반차로", + "node_id": "122000381", + "nxtStn": "양재전화국" + }, + { + "stop_nm": "현대1차아파트", + "ycode": "37.482117469", + "stop_no": "23505", + "xcode": "127.0550785982", + "stop_type": "일반차로", + "node_id": "122000382", + "nxtStn": "개포래미안포레스트" + }, + { + "stop_nm": "영동고등학교현대아파트", + "ycode": "37.5213549869", + "stop_no": "23507", + "xcode": "127.0395300499", + "stop_type": "일반차로", + "node_id": "122000384", + "nxtStn": "강남구청역" + }, + { + "stop_nm": "개포4단지7단지", + "ycode": "37.487433", + "stop_no": "23508", + "xcode": "127.072767", + "stop_type": "일반차로", + "node_id": "122000385", + "nxtStn": "개포4단지6단지" + }, + { + "stop_nm": "총회회관.휘문고입구", + "ycode": "37.504256", + "stop_no": "23509", + "xcode": "127.065961", + "stop_type": "가로변시간", + "node_id": "122000386", + "nxtStn": "삼성역" + }, + { + "stop_nm": "예림당아트홀.신한은행전산센터", + "ycode": "37.498223", + "stop_no": "23510", + "xcode": "127.044293", + "stop_type": "일반차로", + "node_id": "122000387", + "nxtStn": "역삼동개나리아파트" + }, + { + "stop_nm": "새마을운동중앙회", + "ycode": "37.501889", + "stop_no": "23511", + "xcode": "127.067238", + "stop_type": "가로변전일", + "node_id": "122000388", + "nxtStn": "총회회관.휘문고입구" + }, + { + "stop_nm": "총지사", + "ycode": "37.49471", + "stop_no": "23512", + "xcode": "127.039592", + "stop_type": "일반차로", + "node_id": "122000389", + "nxtStn": "럭키아파트" + }, + { + "stop_nm": "신한은행데이터센터", + "ycode": "37.498146", + "stop_no": "23513", + "xcode": "127.043699", + "stop_type": "일반차로", + "node_id": "122000390", + "nxtStn": "총지사" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.5073192617", + "stop_no": "23514", + "xcode": "127.0575278976", + "stop_type": "일반차로", + "node_id": "122000391", + "nxtStn": "포스코사거리" + }, + { + "stop_nm": "우성3차아파트", + "ycode": "37.483822", + "stop_no": "23515", + "xcode": "127.057183", + "stop_type": "일반차로", + "node_id": "122000392", + "nxtStn": "현대1차아파트" + }, + { + "stop_nm": "우성6차아파트", + "ycode": "37.477546", + "stop_no": "23516", + "xcode": "127.0552", + "stop_type": "일반차로", + "node_id": "122000393", + "nxtStn": "포이초교" + }, + { + "stop_nm": "포이초교", + "ycode": "37.475212", + "stop_no": "23517", + "xcode": "127.052693", + "stop_type": "일반차로", + "node_id": "122000394", + "nxtStn": "국악중고교" + }, + { + "stop_nm": "국악중고교", + "ycode": "37.475652", + "stop_no": "23518", + "xcode": "127.050648", + "stop_type": "일반차로", + "node_id": "122000395", + "nxtStn": "개포4복합문화센터.달터공원" + }, + { + "stop_nm": "풍양빌딩", + "ycode": "37.47739", + "stop_no": "23519", + "xcode": "127.048815", + "stop_type": "일반차로", + "node_id": "122000396", + "nxtStn": "국민은행" + }, + { + "stop_nm": "코원에너지서비스", + "ycode": "37.4980697598", + "stop_no": "23520", + "xcode": "127.0760972384", + "stop_type": "일반차로", + "node_id": "122000397", + "nxtStn": "삼전역.잠실현대아파트" + }, + { + "stop_nm": "코원에너지서비스", + "ycode": "37.4984896319", + "stop_no": "23521", + "xcode": "127.076162131", + "stop_type": "일반차로", + "node_id": "122000398", + "nxtStn": "학여울역" + }, + { + "stop_nm": "현대1차우성아파트", + "ycode": "37.48195", + "stop_no": "23522", + "xcode": "127.055112", + "stop_type": "일반차로", + "node_id": "122000399", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.507031", + "stop_no": "23523", + "xcode": "127.057907", + "stop_type": "일반차로", + "node_id": "122000400", + "nxtStn": "한국무역센터.삼성역" + }, + { + "stop_nm": "국민은행그린공원", + "ycode": "37.478785", + "stop_no": "23524", + "xcode": "127.047966", + "stop_type": "일반차로", + "node_id": "122000401", + "nxtStn": "광수빌딩" + }, + { + "stop_nm": "삼익아파트앞", + "ycode": "37.489895", + "stop_no": "23525", + "xcode": "127.0417", + "stop_type": "일반차로", + "node_id": "122000402", + "nxtStn": "총지사" + }, + { + "stop_nm": "래미안포레아파트", + "ycode": "37.4756585108", + "stop_no": "23526", + "xcode": "127.1072950785", + "stop_type": "일반차로", + "node_id": "122000403", + "nxtStn": "세곡2지구3.4단지" + }, + { + "stop_nm": "래미안포레아파트", + "ycode": "37.4760978962", + "stop_no": "23527", + "xcode": "127.1076846516", + "stop_type": "일반차로", + "node_id": "122000404", + "nxtStn": "LH수서아파트" + }, + { + "stop_nm": "세곡2지구3.4단지", + "ycode": "37.476668", + "stop_no": "23528", + "xcode": "127.110393", + "stop_type": "일반차로", + "node_id": "122000698", + "nxtStn": "송파푸르지오시티.한화오벨리스크" + }, + { + "stop_nm": "도곡한신아파트", + "ycode": "37.4865461779", + "stop_no": "23529", + "xcode": "127.0414335753", + "stop_type": "일반차로", + "node_id": "122000703", + "nxtStn": "삼익아파트앞" + }, + { + "stop_nm": "강남더샵라르고오피스텔", + "ycode": "37.4752274507", + "stop_no": "23530", + "xcode": "127.1048166174", + "stop_type": "일반차로", + "node_id": "122000702", + "nxtStn": "못골마을.강남자곡아이파크" + }, + { + "stop_nm": "한남대교전망카페", + "ycode": "37.524552", + "stop_no": "23531", + "xcode": "127.015683", + "stop_type": "일반차로", + "node_id": "122000408", + "nxtStn": "한남5거리" + }, + { + "stop_nm": "서울의료원후문", + "ycode": "37.512854221", + "stop_no": "23532", + "xcode": "127.0670297734", + "stop_type": "마을버스", + "node_id": "122900035", + "nxtStn": "서울의료원강남분원" + }, + { + "stop_nm": "구룡마을", + "ycode": "37.476907", + "stop_no": "23533", + "xcode": "127.061071", + "stop_type": "마을버스", + "node_id": "122900052", + "nxtStn": "개포파크빌리지" + }, + { + "stop_nm": "학동역", + "ycode": "37.515378", + "stop_no": "23536", + "xcode": "127.03", + "stop_type": "마을버스", + "node_id": "122900036", + "nxtStn": "세관앞" + }, + { + "stop_nm": "은곡마을.강남신동아파밀리에", + "ycode": "37.465026", + "stop_no": "23537", + "xcode": "127.102457", + "stop_type": "일반차로", + "node_id": "122000675", + "nxtStn": "세곡2지구3.4단지" + }, + { + "stop_nm": "강남현대힐스테이트에코", + "ycode": "37.4750109081", + "stop_no": "23538", + "xcode": "127.1049627778", + "stop_type": "일반차로", + "node_id": "122000701", + "nxtStn": "LH수서아파트" + }, + { + "stop_nm": "대왕초등학교", + "ycode": "37.4647336817", + "stop_no": "23543", + "xcode": "127.1060868044", + "stop_type": "마을버스", + "node_id": "122900070", + "nxtStn": "세곡동사거리" + }, + { + "stop_nm": "수서역5번출구.이마트앞", + "ycode": "37.4867890817", + "stop_no": "23544", + "xcode": "127.1026711271", + "stop_type": "마을버스", + "node_id": "122900002", + "nxtStn": "강남스포츠문화센터" + }, + { + "stop_nm": "개포4복합문화센터.달터공원", + "ycode": "37.4765501377", + "stop_no": "23545", + "xcode": "127.0496563833", + "stop_type": "마을버스", + "node_id": "122900003", + "nxtStn": "풍양빌딩" + }, + { + "stop_nm": "일원역", + "ycode": "37.4842740914", + "stop_no": "23546", + "xcode": "127.0837487838", + "stop_type": "마을버스", + "node_id": "122900004", + "nxtStn": "삼성서울병원정문" + }, + { + "stop_nm": "삼성서울병원정문", + "ycode": "37.486220916", + "stop_no": "23552", + "xcode": "127.0831278825", + "stop_type": "마을버스", + "node_id": "122900005", + "nxtStn": "삼성서울병원본관" + }, + { + "stop_nm": "국민은행", + "ycode": "37.478396", + "stop_no": "23557", + "xcode": "127.047728", + "stop_type": "마을버스", + "node_id": "122900057", + "nxtStn": "국민은행그린공원" + }, + { + "stop_nm": "삼성의료원", + "ycode": "37.4880871291", + "stop_no": "23558", + "xcode": "127.0843625606", + "stop_type": "마을버스", + "node_id": "122900006", + "nxtStn": "암센터후문.장례식장" + }, + { + "stop_nm": "한아름아파트.사이룩스오피스텔", + "ycode": "37.4882883158", + "stop_no": "23562", + "xcode": "127.1043695699", + "stop_type": "마을버스", + "node_id": "122900007", + "nxtStn": "수서역" + }, + { + "stop_nm": "암센터후문.장례식장", + "ycode": "37.489905", + "stop_no": "23564", + "xcode": "127.087704", + "stop_type": "마을버스", + "node_id": "122900100", + "nxtStn": "암센터정문" + }, + { + "stop_nm": "암센터정문", + "ycode": "37.4887280795", + "stop_no": "23569", + "xcode": "127.0877105812", + "stop_type": "마을버스", + "node_id": "122900008", + "nxtStn": "래미안루체하임.일원동맛의거리" + }, + { + "stop_nm": "신분당선.강남역4번출구", + "ycode": "37.494539", + "stop_no": "23572", + "xcode": "127.029565", + "stop_type": "일반차로", + "node_id": "122900101", + "nxtStn": "강남역11번출구" + }, + { + "stop_nm": "영동2교", + "ycode": "37.4824106082", + "stop_no": "23573", + "xcode": "127.0436209282", + "stop_type": "마을버스", + "node_id": "122900047", + "nxtStn": "도곡2동주민센터대치중학교" + }, + { + "stop_nm": "강남교육청", + "ycode": "37.5114525879", + "stop_no": "23575", + "xcode": "127.0474431396", + "stop_type": "마을버스", + "node_id": "122900010", + "nxtStn": "삼성2문화센터" + }, + { + "stop_nm": "래미안루체하임.일원동맛의거리", + "ycode": "37.4895038011", + "stop_no": "23579", + "xcode": "127.0816026028", + "stop_type": "마을버스", + "node_id": "122900061", + "nxtStn": "영희초등학교" + }, + { + "stop_nm": "신논현역", + "ycode": "37.5019598458", + "stop_no": "23580", + "xcode": "127.0259766968", + "stop_type": "일반차로", + "node_id": "122000654", + "nxtStn": "논현역" + }, + { + "stop_nm": "영희초등학교", + "ycode": "37.4913516516", + "stop_no": "23586", + "xcode": "127.080747403", + "stop_type": "마을버스", + "node_id": "122900062", + "nxtStn": "중동고등학교" + }, + { + "stop_nm": "개포동역8번출구", + "ycode": "37.488685801", + "stop_no": "23595", + "xcode": "127.0653367838", + "stop_type": "일반차로", + "node_id": "122900053", + "nxtStn": "대치역6번출구.강남구민회관" + }, + { + "stop_nm": "강남우체국", + "ycode": "37.4933177303", + "stop_no": "23597", + "xcode": "127.0782615093", + "stop_type": "마을버스", + "node_id": "122900065", + "nxtStn": "개포3동주민센터" + }, + { + "stop_nm": "도성초등학교앞", + "ycode": "37.5004642646", + "stop_no": "23598", + "xcode": "127.0503202915", + "stop_type": "마을버스", + "node_id": "122900012", + "nxtStn": "역삼동개나리아파트" + }, + { + "stop_nm": "개포3동주민센터", + "ycode": "37.4923887632", + "stop_no": "23600", + "xcode": "127.0753812691", + "stop_type": "마을버스", + "node_id": "122900066", + "nxtStn": "대치아파트.대모산입구역3번출구" + }, + { + "stop_nm": "LH이-편한세상", + "ycode": "37.467409", + "stop_no": "23629", + "xcode": "127.101834", + "stop_type": "마을버스", + "node_id": "122900103", + "nxtStn": "한신휴플러스6단지" + }, + { + "stop_nm": "신논현역", + "ycode": "37.500755", + "stop_no": "23641", + "xcode": "127.026579", + "stop_type": "일반차로", + "node_id": "122000616", + "nxtStn": "신논현역6번출구" + }, + { + "stop_nm": "동영문화센터", + "ycode": "37.498017", + "stop_no": "23697", + "xcode": "127.044823", + "stop_type": "마을버스", + "node_id": "122900040", + "nxtStn": "래미안그레이튼아파트" + }, + { + "stop_nm": "도곡2동주민센터대치중학교", + "ycode": "37.484253", + "stop_no": "23698", + "xcode": "127.045402", + "stop_type": "일반차로", + "node_id": "122000503", + "nxtStn": "매봉역입구" + }, + { + "stop_nm": "도곡2동주민센터대치중학교", + "ycode": "37.484487", + "stop_no": "23720", + "xcode": "127.045332", + "stop_type": "일반차로", + "node_id": "122000524", + "nxtStn": "영동2교" + }, + { + "stop_nm": "대청역", + "ycode": "37.493292", + "stop_no": "23728", + "xcode": "127.079653", + "stop_type": "마을버스", + "node_id": "122900067", + "nxtStn": "영희초등학교" + }, + { + "stop_nm": "영동2교", + "ycode": "37.482774", + "stop_no": "23731", + "xcode": "127.043651", + "stop_type": "마을버스", + "node_id": "122900051", + "nxtStn": "포이사거리삼호물산" + }, + { + "stop_nm": "강남세브란스병원", + "ycode": "37.4941024226", + "stop_no": "23738", + "xcode": "127.0460354686", + "stop_type": "마을버스", + "node_id": "122900041", + "nxtStn": "역삼청소년수련관.도곡1차아이파크" + }, + { + "stop_nm": "삼성역", + "ycode": "37.5073607632", + "stop_no": "23741", + "xcode": "127.0643377139", + "stop_type": "마을버스", + "node_id": "122900038", + "nxtStn": "삼성역7번출구" + }, + { + "stop_nm": "매봉역입구", + "ycode": "37.485055", + "stop_no": "23749", + "xcode": "127.046452", + "stop_type": "일반차로", + "node_id": "122000544", + "nxtStn": "매봉역양재최의원" + }, + { + "stop_nm": "역삼청소년수련관.도곡1차아이파크", + "ycode": "37.4931043457", + "stop_no": "23756", + "xcode": "127.0427156329", + "stop_type": "마을버스", + "node_id": "122900042", + "nxtStn": "럭키아파트" + }, + { + "stop_nm": "ST송은빌딩", + "ycode": "37.5240522735", + "stop_no": "23766", + "xcode": "127.0440702137", + "stop_type": "일반차로", + "node_id": "122000559", + "nxtStn": "일지아트홀.압구정노인복지관" + }, + { + "stop_nm": "삼성역", + "ycode": "37.509754783", + "stop_no": "23781", + "xcode": "127.0631256245", + "stop_type": "일반차로", + "node_id": "122000676", + "nxtStn": "영동교입구.청담자이아파트" + }, + { + "stop_nm": "코엑스도심공항", + "ycode": "37.509275", + "stop_no": "23801", + "xcode": "127.058892", + "stop_type": "일반차로", + "node_id": "122000723", + "nxtStn": "영동대교(가상)" + }, + { + "stop_nm": "삼성역그랜드인터컨티넨탈", + "ycode": "37.5084898455", + "stop_no": "23804", + "xcode": "127.0610138468", + "stop_type": "일반차로", + "node_id": "122000597", + "nxtStn": "도심공항터미널(가상)" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.5066283272", + "stop_no": "23806", + "xcode": "127.0551984022", + "stop_type": "일반차로", + "node_id": "122000599", + "nxtStn": "선릉역" + }, + { + "stop_nm": "역삼역", + "ycode": "37.500375", + "stop_no": "23811", + "xcode": "127.036278", + "stop_type": "일반차로", + "node_id": "122000604", + "nxtStn": "종점" + }, + { + "stop_nm": "역삼역", + "ycode": "37.5003770293", + "stop_no": "23812", + "xcode": "127.0348444801", + "stop_type": "일반차로", + "node_id": "122000605", + "nxtStn": "강남역12번출구" + }, + { + "stop_nm": "강남역", + "ycode": "37.4983670689", + "stop_no": "23813", + "xcode": "127.0301126142", + "stop_type": "일반차로", + "node_id": "122000606", + "nxtStn": "역삼역" + }, + { + "stop_nm": "강남역12번출구", + "ycode": "37.4987123716", + "stop_no": "23814", + "xcode": "127.0293968328", + "stop_type": "일반차로", + "node_id": "122000607", + "nxtStn": "서초아르누보호텔.유원아파트" + }, + { + "stop_nm": "영희초등학교정문", + "ycode": "37.4917702392", + "stop_no": "23815", + "xcode": "127.0826658438", + "stop_type": "마을버스", + "node_id": "122900014", + "nxtStn": "일원지구대" + }, + { + "stop_nm": "봉은사역코엑스인터컨티넨탈", + "ycode": "37.513612", + "stop_no": "23816", + "xcode": "127.057443", + "stop_type": "일반차로", + "node_id": "122000741", + "nxtStn": "삼성역그랜드인터컨티넨탈" + }, + { + "stop_nm": "코엑스동문", + "ycode": "37.5123653782", + "stop_no": "23818", + "xcode": "127.0608106575", + "stop_type": "마을버스", + "node_id": "122900015", + "nxtStn": "잠실롯데월드호텔롯데타워" + }, + { + "stop_nm": "일원지구대", + "ycode": "37.4925024781", + "stop_no": "23819", + "xcode": "127.0844466897", + "stop_type": "마을버스", + "node_id": "122900063", + "nxtStn": "대청초교삼거리" + }, + { + "stop_nm": "대청초교삼거리", + "ycode": "37.4933069756", + "stop_no": "23822", + "xcode": "127.0862704324", + "stop_type": "마을버스", + "node_id": "122900109", + "nxtStn": "일원지구대" + }, + { + "stop_nm": "대청초교삼거리", + "ycode": "37.4931669875", + "stop_no": "23823", + "xcode": "127.0863914747", + "stop_type": "마을버스", + "node_id": "122900016", + "nxtStn": "일원1동주민센터" + }, + { + "stop_nm": "양재역", + "ycode": "37.485", + "stop_no": "23827", + "xcode": "127.038498", + "stop_type": "일반차로", + "node_id": "121000923", + "nxtStn": "도곡동" + }, + { + "stop_nm": "도곡동", + "ycode": "37.4878492793", + "stop_no": "23828", + "xcode": "127.0492205758", + "stop_type": "가로변시간", + "node_id": "122000630", + "nxtStn": "타워펠리스" + }, + { + "stop_nm": "타워펠리스", + "ycode": "37.4892407955", + "stop_no": "23829", + "xcode": "127.0520994663", + "stop_type": "일반차로", + "node_id": "122000629", + "nxtStn": "도곡역3번출구" + }, + { + "stop_nm": "대치동", + "ycode": "37.493578", + "stop_no": "23830", + "xcode": "127.061606", + "stop_type": "가로변전일", + "node_id": "122000628", + "nxtStn": "학여울역" + }, + { + "stop_nm": "학여울역", + "ycode": "37.495636", + "stop_no": "23831", + "xcode": "127.067629", + "stop_type": "가로변전일", + "node_id": "122000627", + "nxtStn": "개포동" + }, + { + "stop_nm": "개포동", + "ycode": "37.4888592582", + "stop_no": "23832", + "xcode": "127.0737651349", + "stop_type": "일반차로", + "node_id": "122000626", + "nxtStn": "상록수아파트앞" + }, + { + "stop_nm": "학여울역", + "ycode": "37.4958593062", + "stop_no": "23838", + "xcode": "127.0672656518", + "stop_type": "가로변전일", + "node_id": "122000620", + "nxtStn": "대치동" + }, + { + "stop_nm": "대치동", + "ycode": "37.493886", + "stop_no": "23839", + "xcode": "127.061372", + "stop_type": "가로변전일", + "node_id": "122000619", + "nxtStn": "도곡역2번출구.동부센트레빌" + }, + { + "stop_nm": "타워펠리스", + "ycode": "37.489825", + "stop_no": "23840", + "xcode": "127.052447", + "stop_type": "가로변시간", + "node_id": "122000618", + "nxtStn": "매봉삼성아파트SK리더스뷰" + }, + { + "stop_nm": "양재역", + "ycode": "37.485411", + "stop_no": "23841", + "xcode": "127.03885", + "stop_type": "일반차로", + "node_id": "121000922", + "nxtStn": "뱅뱅사거리" + }, + { + "stop_nm": "신사동", + "ycode": "37.517654", + "stop_no": "23842", + "xcode": "127.019358", + "stop_type": "일반차로", + "node_id": "122000617", + "nxtStn": "한남대교(가상)" + }, + { + "stop_nm": "미성아파트", + "ycode": "37.523524", + "stop_no": "23843", + "xcode": "127.021536", + "stop_type": "가로변시간", + "node_id": "122000638", + "nxtStn": "현대아파트" + }, + { + "stop_nm": "리베라호텔", + "ycode": "37.52377", + "stop_no": "23844", + "xcode": "127.05463", + "stop_type": "가로변시간", + "node_id": "122000637", + "nxtStn": "무역센터" + }, + { + "stop_nm": "압구정역", + "ycode": "37.528598", + "stop_no": "23848", + "xcode": "127.03092", + "stop_type": "가로변시간", + "node_id": "122000633", + "nxtStn": "신사중학교" + }, + { + "stop_nm": "한남대교(가상)", + "ycode": "37.528851", + "stop_no": "23849", + "xcode": "127.010968", + "stop_type": "가상정류장", + "node_id": "102000307", + "nxtStn": "서초IC(가상)" + }, + { + "stop_nm": "한남대교(가상)", + "ycode": "37.5292208753", + "stop_no": "23850", + "xcode": "127.0113976166", + "stop_type": "가상정류장", + "node_id": "102000308", + "nxtStn": "순천향대학병원" + }, + { + "stop_nm": "노블발렌티웨딩홀", + "ycode": "37.5151343457", + "stop_no": "23855", + "xcode": "127.0648043953", + "stop_type": "마을버스", + "node_id": "122900037", + "nxtStn": "봉은사역.삼성래미안아파트" + }, + { + "stop_nm": "양재전화국", + "ycode": "37.485645", + "stop_no": "23856", + "xcode": "127.04079", + "stop_type": "마을버스", + "node_id": "122900044", + "nxtStn": "양재역4번출구" + }, + { + "stop_nm": "대치2동주민센터.래미안하이스턴", + "ycode": "37.50199", + "stop_no": "23857", + "xcode": "127.066772", + "stop_type": "마을버스", + "node_id": "122900017", + "nxtStn": "대치동은마아파트" + }, + { + "stop_nm": "봉은사역.삼성래미안아파트", + "ycode": "37.514719", + "stop_no": "23858", + "xcode": "127.062293", + "stop_type": "마을버스", + "node_id": "122900018", + "nxtStn": "코엑스동문" + }, + { + "stop_nm": "강남구민체육관", + "ycode": "37.47599", + "stop_no": "23863", + "xcode": "127.053878", + "stop_type": "마을버스", + "node_id": "122900087", + "nxtStn": "포이초교" + }, + { + "stop_nm": "LPG가스충전소", + "ycode": "37.4906376166", + "stop_no": "23866", + "xcode": "127.0358079831", + "stop_type": "마을버스", + "node_id": "122900045", + "nxtStn": "도곡1동주민센터.역삼럭키아파트" + }, + { + "stop_nm": "수서역", + "ycode": "37.488706", + "stop_no": "23871", + "xcode": "127.099809", + "stop_type": "마을버스", + "node_id": "122900021", + "nxtStn": "수서역" + }, + { + "stop_nm": "일원1동주민센터", + "ycode": "37.49202", + "stop_no": "23872", + "xcode": "127.087793", + "stop_type": "마을버스", + "node_id": "122900022", + "nxtStn": "대청초교삼거리" + }, + { + "stop_nm": "일원지구대", + "ycode": "37.4925603569", + "stop_no": "23874", + "xcode": "127.0841549821", + "stop_type": "마을버스", + "node_id": "122900023", + "nxtStn": "영희초등학교" + }, + { + "stop_nm": "동영문화센터", + "ycode": "37.4982163309", + "stop_no": "23876", + "xcode": "127.0450698684", + "stop_type": "마을버스", + "node_id": "122900043", + "nxtStn": "역삼동개나리아파트" + }, + { + "stop_nm": "영희초등학교", + "ycode": "37.4918172767", + "stop_no": "23877", + "xcode": "127.0824080525", + "stop_type": "마을버스", + "node_id": "122900024", + "nxtStn": "영희초등학교" + }, + { + "stop_nm": "삼성서울병원정문건너편", + "ycode": "37.4864455837", + "stop_no": "23878", + "xcode": "127.0827108625", + "stop_type": "마을버스", + "node_id": "122900025", + "nxtStn": "일원역" + }, + { + "stop_nm": "일원역", + "ycode": "37.484031", + "stop_no": "23880", + "xcode": "127.083599", + "stop_type": "마을버스", + "node_id": "122900026", + "nxtStn": "푸른마을아파트앞" + }, + { + "stop_nm": "탄천교(가상)", + "ycode": "37.5015363095", + "stop_no": "23881", + "xcode": "127.0732324447", + "stop_type": "가상정류장", + "node_id": "122000649", + "nxtStn": "영동대교(가상)" + }, + { + "stop_nm": "탄천교(가상)", + "ycode": "37.5013185664", + "stop_no": "23882", + "xcode": "127.0727085631", + "stop_type": "가상정류장", + "node_id": "122000648", + "nxtStn": "수서역.로즈데일빌딩" + }, + { + "stop_nm": "강남더드림병원.도성초등학교", + "ycode": "37.5010137322", + "stop_no": "23883", + "xcode": "127.050799086", + "stop_type": "마을버스", + "node_id": "122900039", + "nxtStn": "진선여자중고등학교" + }, + { + "stop_nm": "대왕파출소", + "ycode": "37.465202563", + "stop_no": "23884", + "xcode": "127.1077413737", + "stop_type": "마을버스", + "node_id": "122900027", + "nxtStn": "은곡마을.LH이편한세상" + }, + { + "stop_nm": "언주역삼정&베스트웨스턴강남", + "ycode": "37.506341", + "stop_no": "23885", + "xcode": "127.03114", + "stop_type": "일반차로", + "node_id": "122000722", + "nxtStn": "글래드라이브강남호텔" + }, + { + "stop_nm": "강남신동아파밀리에2단지", + "ycode": "37.464601", + "stop_no": "23893", + "xcode": "127.101708", + "stop_type": "마을버스", + "node_id": "122900102", + "nxtStn": "LH이-편한세상" + }, + { + "stop_nm": "한신휴플러스6단지", + "ycode": "37.4689755358", + "stop_no": "23896", + "xcode": "127.1039561716", + "stop_type": "마을버스", + "node_id": "122900104", + "nxtStn": "방죽마을입구" + }, + { + "stop_nm": "강남역", + "ycode": "37.5002114782", + "stop_no": "23900", + "xcode": "127.0267345422", + "stop_type": "일반차로", + "node_id": "122000726", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "르메르디앙호텔.노보텔", + "ycode": "37.5053577485", + "stop_no": "23901", + "xcode": "127.0278320298", + "stop_type": "일반차로", + "node_id": "122000733", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "삼정호텔", + "ycode": "37.5064023297", + "stop_no": "23902", + "xcode": "127.0313097165", + "stop_type": "일반차로", + "node_id": "122000727", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "선릉과정릉.라마다서울호텔", + "ycode": "37.510575802", + "stop_no": "23903", + "xcode": "127.0454157102", + "stop_type": "일반차로", + "node_id": "122000734", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "봉은사.롯데면세점", + "ycode": "37.5137273488", + "stop_no": "23904", + "xcode": "127.0583371175", + "stop_type": "일반차로", + "node_id": "122000728", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "코엑스.에스엠타운", + "ycode": "37.5104504405", + "stop_no": "23905", + "xcode": "127.0619369794", + "stop_type": "일반차로", + "node_id": "122000735", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "삼성역", + "ycode": "37.5101888247", + "stop_no": "23906", + "xcode": "127.0626911066", + "stop_type": "일반차로", + "node_id": "122000736", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "SM엔터테인먼트", + "ycode": "37.518545662", + "stop_no": "23907", + "xcode": "127.0507759684", + "stop_type": "일반차로", + "node_id": "122000740", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "한류스타거리", + "ycode": "37.5272518736", + "stop_no": "23908", + "xcode": "127.0433500025", + "stop_type": "일반차로", + "node_id": "122000729", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "압구정로데오", + "ycode": "37.5284260581", + "stop_no": "23909", + "xcode": "127.0388063405", + "stop_type": "일반차로", + "node_id": "122000730", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "강남관광정보센터", + "ycode": "37.5266264851", + "stop_no": "23910", + "xcode": "127.0270046208", + "stop_type": "일반차로", + "node_id": "122000731", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "중동고등학교", + "ycode": "37.4928867094", + "stop_no": "23911", + "xcode": "127.0800445003", + "stop_type": "마을버스", + "node_id": "122900069", + "nxtStn": "강남우체국" + }, + { + "stop_nm": "역삼아르누보&조선팰리스강남", + "ycode": "37.5032714481", + "stop_no": "23912", + "xcode": "127.0426789882", + "stop_type": "일반차로", + "node_id": "122000721", + "nxtStn": "논현아이파크" + }, + { + "stop_nm": "가로수길", + "ycode": "37.524538102", + "stop_no": "23913", + "xcode": "127.0230095118", + "stop_type": "일반차로", + "node_id": "122000738", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "영희초등학교후문", + "ycode": "37.491521", + "stop_no": "23917", + "xcode": "127.080479", + "stop_type": "마을버스", + "node_id": "122900028", + "nxtStn": "영희초등학교정문" + }, + { + "stop_nm": "양재역4번출구", + "ycode": "37.4850648693", + "stop_no": "23918", + "xcode": "127.0368399956", + "stop_type": "마을버스", + "node_id": "122900034", + "nxtStn": "양재역.종합복지관" + }, + { + "stop_nm": "양재역.종합복지관", + "ycode": "37.48471", + "stop_no": "23920", + "xcode": "127.036193", + "stop_type": "마을버스", + "node_id": "122900029", + "nxtStn": "매봉역" + }, + { + "stop_nm": "양재역5번출구", + "ycode": "37.484670255", + "stop_no": "23921", + "xcode": "127.0366159066", + "stop_type": "마을버스", + "node_id": "122900030", + "nxtStn": "원불교" + }, + { + "stop_nm": "삼성역7번출구", + "ycode": "37.5109836156", + "stop_no": "23922", + "xcode": "127.0626120724", + "stop_type": "마을버스", + "node_id": "122900031", + "nxtStn": "코엑스동문" + }, + { + "stop_nm": "삼성역7번출구", + "ycode": "37.5110021581", + "stop_no": "23923", + "xcode": "127.062391248", + "stop_type": "마을버스", + "node_id": "122900032", + "nxtStn": "봉은사역5번출구.광동한방병원" + }, + { + "stop_nm": "도곡중학교.강남세브란스병원", + "ycode": "37.49315", + "stop_no": "23924", + "xcode": "127.043781", + "stop_type": "마을버스", + "node_id": "122900046", + "nxtStn": "역삼2동주민센터.래미안그레이튼아파트" + }, + { + "stop_nm": "역삼2동주민센터.래미안그레이튼아파트", + "ycode": "37.494825", + "stop_no": "23925", + "xcode": "127.046636", + "stop_type": "마을버스", + "node_id": "122900033", + "nxtStn": "역삼2동주민센터.대림역삼아파트" + }, + { + "stop_nm": "신논현역르메르디앙서울호텔", + "ycode": "37.5049413383", + "stop_no": "23930", + "xcode": "127.0271088192", + "stop_type": "일반차로", + "node_id": "122000661", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "노보텔앰배서더호텔", + "ycode": "37.5055113436", + "stop_no": "23931", + "xcode": "127.0287672149", + "stop_type": "일반차로", + "node_id": "122000660", + "nxtStn": "언주역삼정&베스트웨스턴강남" + }, + { + "stop_nm": "방죽마을입구", + "ycode": "37.47122", + "stop_no": "23933", + "xcode": "127.106467", + "stop_type": "마을버스", + "node_id": "122900105", + "nxtStn": "방죽마을" + }, + { + "stop_nm": "방죽마을입구", + "ycode": "37.471284", + "stop_no": "23937", + "xcode": "127.106377", + "stop_type": "마을버스", + "node_id": "122900106", + "nxtStn": "한신휴플러스6단지" + }, + { + "stop_nm": "한신휴플러스6단지", + "ycode": "37.469051", + "stop_no": "23938", + "xcode": "127.103892", + "stop_type": "마을버스", + "node_id": "122900107", + "nxtStn": "LH이-편한세상" + }, + { + "stop_nm": "LH이-편한세상", + "ycode": "37.46752", + "stop_no": "23940", + "xcode": "127.101745", + "stop_type": "마을버스", + "node_id": "122900108", + "nxtStn": "강남신동아파밀리에2단지" + }, + { + "stop_nm": "은곡마을", + "ycode": "37.466996", + "stop_no": "23941", + "xcode": "127.097637", + "stop_type": "마을버스", + "node_id": "122900081", + "nxtStn": "상업지역" + }, + { + "stop_nm": "상업지역", + "ycode": "37.466983", + "stop_no": "23942", + "xcode": "127.10091", + "stop_type": "마을버스", + "node_id": "122900082", + "nxtStn": "강남신동아파밀리에" + }, + { + "stop_nm": "강남신동아파밀리에", + "ycode": "37.465498", + "stop_no": "23943", + "xcode": "127.101311", + "stop_type": "마을버스", + "node_id": "122900083", + "nxtStn": "강남효성해링턴코트" + }, + { + "stop_nm": "세종고등학교", + "ycode": "37.4878639673", + "stop_no": "23944", + "xcode": "127.1029015023", + "stop_type": "마을버스", + "node_id": "122900080", + "nxtStn": "수서역1번출구" + }, + { + "stop_nm": "세곡푸르지오", + "ycode": "37.466836", + "stop_no": "23946", + "xcode": "127.094527", + "stop_type": "마을버스", + "node_id": "122900078", + "nxtStn": "은곡마을" + }, + { + "stop_nm": "세곡푸르지오", + "ycode": "37.466784", + "stop_no": "23947", + "xcode": "127.094374", + "stop_type": "마을버스", + "node_id": "122900077", + "nxtStn": "종점" + }, + { + "stop_nm": "상업지역", + "ycode": "37.467068", + "stop_no": "23948", + "xcode": "127.099996", + "stop_type": "마을버스", + "node_id": "122900076", + "nxtStn": "은곡마을" + }, + { + "stop_nm": "은곡마을", + "ycode": "37.467142", + "stop_no": "23949", + "xcode": "127.096766", + "stop_type": "마을버스", + "node_id": "122900075", + "nxtStn": "세곡푸르지오" + }, + { + "stop_nm": "강남스포츠문화센터", + "ycode": "37.488578", + "stop_no": "23950", + "xcode": "127.105059", + "stop_type": "마을버스", + "node_id": "122900086", + "nxtStn": "세종고등학교" + }, + { + "stop_nm": "삼정호텔", + "ycode": "37.5062370429", + "stop_no": "23951", + "xcode": "127.0310907911", + "stop_type": "일반차로", + "node_id": "122000694", + "nxtStn": "차병원" + }, + { + "stop_nm": "리엔파크3단지", + "ycode": "37.463042", + "stop_no": "23958", + "xcode": "127.103828", + "stop_type": "마을버스", + "node_id": "122900084", + "nxtStn": "서울요양원.강남구립행복요양병원" + }, + { + "stop_nm": "포스코사거리", + "ycode": "37.508666", + "stop_no": "23960", + "xcode": "127.055511", + "stop_type": "마을버스", + "node_id": "122900088", + "nxtStn": "포스코사거리" + }, + { + "stop_nm": "서울요양원.강남구립행복요양병원", + "ycode": "37.460694", + "stop_no": "23961", + "xcode": "127.10349", + "stop_type": "마을버스", + "node_id": "122900089", + "nxtStn": "종점" + }, + { + "stop_nm": "LH이편한세상", + "ycode": "37.4665036794", + "stop_no": "23962", + "xcode": "127.1017345829", + "stop_type": "마을버스", + "node_id": "122900090", + "nxtStn": "상업지역" + }, + { + "stop_nm": "강남데시앙포레정문", + "ycode": "37.481418", + "stop_no": "23963", + "xcode": "127.089059", + "stop_type": "마을버스", + "node_id": "122900096", + "nxtStn": "강남데시앙포레상가앞" + }, + { + "stop_nm": "강남데시앙포레상가앞", + "ycode": "37.4813620057", + "stop_no": "23964", + "xcode": "127.0918528925", + "stop_type": "마을버스", + "node_id": "122900091", + "nxtStn": "강남더샵포레스트아파트" + }, + { + "stop_nm": "강남더샵포레스트아파트", + "ycode": "37.482128", + "stop_no": "23965", + "xcode": "127.094432", + "stop_type": "마을버스", + "node_id": "122900095", + "nxtStn": "수서교회.수서동성당앞" + }, + { + "stop_nm": "강남신동아파밀리에1단지", + "ycode": "37.4633952819", + "stop_no": "23967", + "xcode": "127.1013912358", + "stop_type": "마을버스", + "node_id": "122900099", + "nxtStn": "은곡마을.강남신동아파밀리에" + }, + { + "stop_nm": "강남더샵포레스트아파트", + "ycode": "37.4820890986", + "stop_no": "23968", + "xcode": "127.0942667912", + "stop_type": "마을버스", + "node_id": "122900094", + "nxtStn": "강남데시앙포레상가앞" + }, + { + "stop_nm": "강남데시앙포레상가앞", + "ycode": "37.4814270894", + "stop_no": "23969", + "xcode": "127.0927451217", + "stop_type": "마을버스", + "node_id": "122900093", + "nxtStn": "강남데시앙포레정문" + }, + { + "stop_nm": "강남데시앙포레정문", + "ycode": "37.4818476385", + "stop_no": "23970", + "xcode": "127.0895874825", + "stop_type": "마을버스", + "node_id": "122900092", + "nxtStn": "종점" + }, + { + "stop_nm": "수서교회.수서동성당앞", + "ycode": "37.483484", + "stop_no": "23971", + "xcode": "127.094572", + "stop_type": "마을버스", + "node_id": "122900098", + "nxtStn": "강남더샵포레스트아파트" + }, + { + "stop_nm": "수서교회.수서동성당앞", + "ycode": "37.483477", + "stop_no": "23972", + "xcode": "127.094652", + "stop_type": "마을버스", + "node_id": "122900097", + "nxtStn": "궁마을" + }, + { + "stop_nm": "삼성서울병원사거리", + "ycode": "37.48884", + "stop_no": "23981", + "xcode": "127.0827", + "stop_type": "일반차로", + "node_id": "122000286", + "nxtStn": "삼성서울병원후문" + }, + { + "stop_nm": "한남대교(가상)", + "ycode": "37.5231115714", + "stop_no": "23982", + "xcode": "127.0160423367", + "stop_type": "가상정류장", + "node_id": "122000713", + "nxtStn": "동호대교(가상)" + }, + { + "stop_nm": "한남대교(가상)", + "ycode": "37.5237076028", + "stop_no": "23983", + "xcode": "127.0155274772", + "stop_type": "가상정류장", + "node_id": "122000712", + "nxtStn": "반포대교(가상)" + }, + { + "stop_nm": "동호대교(가상)", + "ycode": "37.5311526541", + "stop_no": "23984", + "xcode": "127.0241641902", + "stop_type": "가상정류장", + "node_id": "122000711", + "nxtStn": "성수대교남단(가상)" + }, + { + "stop_nm": "동호대교(가상)", + "ycode": "37.5317424527", + "stop_no": "23985", + "xcode": "127.0237344456", + "stop_type": "가상정류장", + "node_id": "122000710", + "nxtStn": "한남대교(가상)" + }, + { + "stop_nm": "성수대교(가상)", + "ycode": "37.5325676597", + "stop_no": "23986", + "xcode": "127.0344578191", + "stop_type": "가상정류장", + "node_id": "122000709", + "nxtStn": "영동대교(가상)" + }, + { + "stop_nm": "성수대교(가상)", + "ycode": "37.5330951565", + "stop_no": "23987", + "xcode": "127.0345543786", + "stop_type": "가상정류장", + "node_id": "122000708", + "nxtStn": "동호대교(가상)" + }, + { + "stop_nm": "영동대교(가상)", + "ycode": "37.5259608708", + "stop_no": "23988", + "xcode": "127.0551805659", + "stop_type": "가상정류장", + "node_id": "122000707", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "영동대교(가상)", + "ycode": "37.5266245541", + "stop_no": "23989", + "xcode": "127.0556204482", + "stop_type": "가상정류장", + "node_id": "122000706", + "nxtStn": "성수대교(가상)" + }, + { + "stop_nm": "성수대교남단(가상)", + "ycode": "37.5336278222", + "stop_no": "23992", + "xcode": "127.0308815117", + "stop_type": "가상정류장", + "node_id": "122000672", + "nxtStn": "경일초등학교입구" + }, + { + "stop_nm": "강남신동아파밀리에2단지", + "ycode": "37.463471", + "stop_no": "23993", + "xcode": "127.102259", + "stop_type": "마을버스", + "node_id": "122900073", + "nxtStn": "리엔파크3단지" + }, + { + "stop_nm": "일원주유소.삼성서울병원후문", + "ycode": "37.4906537597", + "stop_no": "23994", + "xcode": "127.0876822994", + "stop_type": "일반차로", + "node_id": "122000287", + "nxtStn": "삼성서울병원사거리" + }, + { + "stop_nm": "리엔파크4단지.강남데시앙파크", + "ycode": "37.461224", + "stop_no": "23995", + "xcode": "127.101871", + "stop_type": "마을버스", + "node_id": "122900074", + "nxtStn": "강남신동아파밀리에1단지" + }, + { + "stop_nm": "잠실역.잠실대교.남단", + "ycode": "37.5155309741", + "stop_no": "24001", + "xcode": "127.0985467341", + "stop_type": "중앙차로", + "node_id": "123000001", + "nxtStn": "잠실대교전망쉼터" + }, + { + "stop_nm": "잠실역.잠실대교.남단", + "ycode": "37.513785", + "stop_no": "24002", + "xcode": "127.09964", + "stop_type": "중앙차로", + "node_id": "123000002", + "nxtStn": "석촌호수.한솔병원" + }, + { + "stop_nm": "석촌호수.한솔병원", + "ycode": "37.5068001738", + "stop_no": "24003", + "xcode": "127.1058262006", + "stop_type": "중앙차로", + "node_id": "123000003", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "석촌호수.한솔병원", + "ycode": "37.507105259", + "stop_no": "24004", + "xcode": "127.1052520216", + "stop_type": "중앙차로", + "node_id": "123000004", + "nxtStn": "석촌역" + }, + { + "stop_nm": "석촌역", + "ycode": "37.5034082968", + "stop_no": "24005", + "xcode": "127.1089442853", + "stop_type": "중앙차로", + "node_id": "123000005", + "nxtStn": "석촌호수.한솔병원" + }, + { + "stop_nm": "석촌역", + "ycode": "37.5036628588", + "stop_no": "24006", + "xcode": "127.108453771", + "stop_type": "중앙차로", + "node_id": "123000006", + "nxtStn": "송파역" + }, + { + "stop_nm": "송파역", + "ycode": "37.5002084826", + "stop_no": "24007", + "xcode": "127.1118384337", + "stop_type": "중앙차로", + "node_id": "123000007", + "nxtStn": "석촌역" + }, + { + "stop_nm": "송파역", + "ycode": "37.5005992316", + "stop_no": "24008", + "xcode": "127.111232788", + "stop_type": "중앙차로", + "node_id": "123000008", + "nxtStn": "가락시장.가락시장역" + }, + { + "stop_nm": "가락시장.가락시장역", + "ycode": "37.4943822012", + "stop_no": "24009", + "xcode": "127.1171609467", + "stop_type": "중앙차로", + "node_id": "123000009", + "nxtStn": "송파역" + }, + { + "stop_nm": "가락시장.가락시장역", + "ycode": "37.4949314726", + "stop_no": "24010", + "xcode": "127.116483446", + "stop_type": "중앙차로", + "node_id": "123000010", + "nxtStn": "가락시장역5번출구" + }, + { + "stop_nm": "문정로데오거리입구", + "ycode": "37.4882127127", + "stop_no": "24011", + "xcode": "127.1214198552", + "stop_type": "중앙차로", + "node_id": "123000011", + "nxtStn": "가락시장.가락시장역" + }, + { + "stop_nm": "문정로데오거리입구", + "ycode": "37.4890328412", + "stop_no": "24012", + "xcode": "127.1208866383", + "stop_type": "중앙차로", + "node_id": "123000012", + "nxtStn": "문정법조단지.건영아파트" + }, + { + "stop_nm": "문정법조단지.건영아파트", + "ycode": "37.482125", + "stop_no": "24013", + "xcode": "127.124748", + "stop_type": "중앙차로", + "node_id": "123000013", + "nxtStn": "문정로데오거리입구" + }, + { + "stop_nm": "문정법조단지.건영아파트", + "ycode": "37.48309", + "stop_no": "24014", + "xcode": "127.123873", + "stop_type": "중앙차로", + "node_id": "123000014", + "nxtStn": "장지역.가든파이브" + }, + { + "stop_nm": "장지역.가든파이브", + "ycode": "37.4790395071", + "stop_no": "24015", + "xcode": "127.1261442086", + "stop_type": "중앙차로", + "node_id": "123000015", + "nxtStn": "문정법조단지.건영아파트" + }, + { + "stop_nm": "장지역.가든파이브", + "ycode": "37.479907", + "stop_no": "24016", + "xcode": "127.125472", + "stop_type": "중앙차로", + "node_id": "123000016", + "nxtStn": "장지동" + }, + { + "stop_nm": "잠실역.롯데월드몰", + "ycode": "37.512726197", + "stop_no": "24017", + "xcode": "127.1006716357", + "stop_type": "중앙차로", + "node_id": "123000579", + "nxtStn": "잠실역.잠실대교남단" + }, + { + "stop_nm": "잠실광역환승센터", + "ycode": "37.5123429607", + "stop_no": "24050", + "xcode": "127.1007210704", + "stop_type": "중앙차로", + "node_id": "123000611", + "nxtStn": "잠실대교북단(경유)" + }, + { + "stop_nm": "천호역.풍납시장", + "ycode": "37.537038", + "stop_no": "24101", + "xcode": "127.122575", + "stop_type": "가로변시간", + "node_id": "123000017", + "nxtStn": "영파여고.강동구청역" + }, + { + "stop_nm": "풍납1치안센터입구", + "ycode": "37.53428", + "stop_no": "24102", + "xcode": "127.121588", + "stop_type": "가로변시간", + "node_id": "123000018", + "nxtStn": "강동구청" + }, + { + "stop_nm": "파크데일아파트2단지앞", + "ycode": "37.4979450637", + "stop_no": "24103", + "xcode": "127.1584215427", + "stop_type": "일반차로", + "node_id": "123000566", + "nxtStn": "파크데일아파트1단지앞" + }, + { + "stop_nm": "파크데일아파트1단지앞", + "ycode": "37.498135", + "stop_no": "24104", + "xcode": "127.15843", + "stop_type": "일반차로", + "node_id": "123000565", + "nxtStn": "파크데일아파트입구" + }, + { + "stop_nm": "풍납1동동아한가람아파트", + "ycode": "37.537019", + "stop_no": "24105", + "xcode": "127.114445", + "stop_type": "일반차로", + "node_id": "123000019", + "nxtStn": "풍납동신성노바빌" + }, + { + "stop_nm": "풍납동신성노바빌", + "ycode": "37.538146277", + "stop_no": "24106", + "xcode": "127.1158760068", + "stop_type": "일반차로", + "node_id": "123000020", + "nxtStn": "풍납동씨티극동아파트" + }, + { + "stop_nm": "풍납동씨티극동아파트", + "ycode": "37.539287", + "stop_no": "24107", + "xcode": "127.117117", + "stop_type": "일반차로", + "node_id": "123000021", + "nxtStn": "풍납토성.천호역10번출구" + }, + { + "stop_nm": "풍납토성.천호역10번출구", + "ycode": "37.538935", + "stop_no": "24108", + "xcode": "127.121963", + "stop_type": "일반차로", + "node_id": "123000022", + "nxtStn": "천호역.풍납시장" + }, + { + "stop_nm": "영파여고.강동구청역", + "ycode": "37.531253", + "stop_no": "24109", + "xcode": "127.120507", + "stop_type": "가로변전일", + "node_id": "123000023", + "nxtStn": "풍납현대아파트" + }, + { + "stop_nm": "풍납동극동.쌍용아파트", + "ycode": "37.5265632485", + "stop_no": "24110", + "xcode": "127.1180236157", + "stop_type": "가로변시간", + "node_id": "123000024", + "nxtStn": "잠실파크리오아파트상가.올림픽회관" + }, + { + "stop_nm": "풍납중학교", + "ycode": "37.5246379417", + "stop_no": "24111", + "xcode": "127.1149375554", + "stop_type": "일반차로", + "node_id": "123000025", + "nxtStn": "잠실파크리오아파트상가.올림픽회관" + }, + { + "stop_nm": "풍성중학교.잠실올림픽아이파크", + "ycode": "37.5248109306", + "stop_no": "24112", + "xcode": "127.1135650154", + "stop_type": "일반차로", + "node_id": "123000026", + "nxtStn": "울산대학교의과대학" + }, + { + "stop_nm": "울산대학교의과대학", + "ycode": "37.524831", + "stop_no": "24113", + "xcode": "127.109976", + "stop_type": "일반차로", + "node_id": "123000027", + "nxtStn": "서울아산병원동관" + }, + { + "stop_nm": "서울아산병원동관", + "ycode": "37.5268880703", + "stop_no": "24114", + "xcode": "127.1071794656", + "stop_type": "일반차로", + "node_id": "123000028", + "nxtStn": "서울아산병원장례식장" + }, + { + "stop_nm": "서울아산병원동관", + "ycode": "37.5270255668", + "stop_no": "24115", + "xcode": "127.1075881058", + "stop_type": "일반차로", + "node_id": "123000029", + "nxtStn": "풍납토성서성벽" + }, + { + "stop_nm": "풍납토성서성벽", + "ycode": "37.531455", + "stop_no": "24116", + "xcode": "127.110738", + "stop_type": "일반차로", + "node_id": "123000030", + "nxtStn": "풍납동강변현대아파트" + }, + { + "stop_nm": "송파두산위브.송파소방서", + "ycode": "37.5001266228", + "stop_no": "24117", + "xcode": "127.1416513795", + "stop_type": "일반차로", + "node_id": "123000648", + "nxtStn": "송파사회복지관.성요셉성당" + }, + { + "stop_nm": "송파두산위브.송파소방서", + "ycode": "37.5000316637", + "stop_no": "24118", + "xcode": "127.1418761558", + "stop_type": "일반차로", + "node_id": "123000649", + "nxtStn": "마천2동윤진빌딩.신동아아파트" + }, + { + "stop_nm": "토성초등학교.현대리버빌아파트", + "ycode": "37.530065", + "stop_no": "24119", + "xcode": "127.114543", + "stop_type": "일반차로", + "node_id": "123000031", + "nxtStn": "풍납동영어체험마을" + }, + { + "stop_nm": "풍납동영어체험마을", + "ycode": "37.531107", + "stop_no": "24120", + "xcode": "127.112223", + "stop_type": "일반차로", + "node_id": "123000032", + "nxtStn": "풍납토성서성벽" + }, + { + "stop_nm": "올림픽대교남단", + "ycode": "37.5267442285", + "stop_no": "24121", + "xcode": "127.115430691", + "stop_type": "일반차로", + "node_id": "123000033", + "nxtStn": "현대2단지" + }, + { + "stop_nm": "마천역.송파파크센트럴", + "ycode": "37.4942476909", + "stop_no": "24122", + "xcode": "127.1513064133", + "stop_type": "일반차로", + "node_id": "123000654", + "nxtStn": "종점" + }, + { + "stop_nm": "잠실파크리오아파트상가.올림픽회관", + "ycode": "37.521023915", + "stop_no": "24123", + "xcode": "127.1146491783", + "stop_type": "가로변시간", + "node_id": "123000034", + "nxtStn": "잠실파크리오아파트앞" + }, + { + "stop_nm": "잠실파크리오아파트앞", + "ycode": "37.519605", + "stop_no": "24124", + "xcode": "127.109917", + "stop_type": "일반차로", + "node_id": "123000035", + "nxtStn": "잠실중학교.장미종합상가" + }, + { + "stop_nm": "잠실나루역", + "ycode": "37.5188856733", + "stop_no": "24125", + "xcode": "127.1058907813", + "stop_type": "일반차로", + "node_id": "123000036", + "nxtStn": "잠실중학교.장미종합상가" + }, + { + "stop_nm": "잠실진주아파트", + "ycode": "37.519198", + "stop_no": "24126", + "xcode": "127.109298", + "stop_type": "일반차로", + "node_id": "123000037", + "nxtStn": "올림픽회관" + }, + { + "stop_nm": "몽촌토성역", + "ycode": "37.518369", + "stop_no": "24127", + "xcode": "127.113012", + "stop_type": "가로변시간", + "node_id": "123000038", + "nxtStn": "신천동진주아파트" + }, + { + "stop_nm": "신천동진주아파트", + "ycode": "37.516633", + "stop_no": "24128", + "xcode": "127.109278", + "stop_type": "가로변시간", + "node_id": "123000039", + "nxtStn": "잠실역8번출구" + }, + { + "stop_nm": "잠실나루역", + "ycode": "37.5182652128", + "stop_no": "24129", + "xcode": "127.104432803", + "stop_type": "일반차로", + "node_id": "123000040", + "nxtStn": "잠실진주아파트" + }, + { + "stop_nm": "잠실중학교.장미종합상가", + "ycode": "37.51715", + "stop_no": "24130", + "xcode": "127.10066", + "stop_type": "일반차로", + "node_id": "123000041", + "nxtStn": "잠실역" + }, + { + "stop_nm": "잠실중학교", + "ycode": "37.516785", + "stop_no": "24131", + "xcode": "127.100445", + "stop_type": "일반차로", + "node_id": "123000042", + "nxtStn": "잠실나루역" + }, + { + "stop_nm": "잠실역8번출구", + "ycode": "37.51401", + "stop_no": "24132", + "xcode": "127.101538", + "stop_type": "일반차로", + "node_id": "123000043", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "잠실역7번출구", + "ycode": "37.5146065479", + "stop_no": "24133", + "xcode": "127.099443484", + "stop_type": "일반차로", + "node_id": "123000044", + "nxtStn": "잠실중학교" + }, + { + "stop_nm": "잠실역1번.11번출구", + "ycode": "37.514064", + "stop_no": "24134", + "xcode": "127.103242", + "stop_type": "일반차로", + "node_id": "123000045", + "nxtStn": "잠실진주아파트" + }, + { + "stop_nm": "잠실역9번출구", + "ycode": "37.514917", + "stop_no": "24135", + "xcode": "127.104215", + "stop_type": "일반차로", + "node_id": "123000046", + "nxtStn": "잠실역.롯데호텔" + }, + { + "stop_nm": "송파구청.방이맛골", + "ycode": "37.513997", + "stop_no": "24136", + "xcode": "127.107219", + "stop_type": "일반차로", + "node_id": "123000047", + "nxtStn": "방이동사거리" + }, + { + "stop_nm": "잠실역6번출구", + "ycode": "37.5143926246", + "stop_no": "24137", + "xcode": "127.0988017918", + "stop_type": "일반차로", + "node_id": "123000048", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "잠실역.롯데월드", + "ycode": "37.512951", + "stop_no": "24138", + "xcode": "127.097765", + "stop_type": "일반차로", + "node_id": "123000049", + "nxtStn": "잠실5단지" + }, + { + "stop_nm": "잠실5단지", + "ycode": "37.5122132454", + "stop_no": "24139", + "xcode": "127.0939144028", + "stop_type": "가로변전일", + "node_id": "123000050", + "nxtStn": "잠실새내역.잠실2동주민센터" + }, + { + "stop_nm": "잠실리센츠아파트앞", + "ycode": "37.5119152103", + "stop_no": "24140", + "xcode": "127.0913235945", + "stop_type": "가로변시간", + "node_id": "123000051", + "nxtStn": "잠실트리지움아파트앞" + }, + { + "stop_nm": "잠실새내역.잠실2동주민센터", + "ycode": "37.5117722886", + "stop_no": "24141", + "xcode": "127.0872805398", + "stop_type": "가로변시간", + "node_id": "123000052", + "nxtStn": "잠실엘스아파트앞" + }, + { + "stop_nm": "잠실엘스아파트앞", + "ycode": "37.5118706155", + "stop_no": "24142", + "xcode": "127.0833904794", + "stop_type": "가로변시간", + "node_id": "123000053", + "nxtStn": "종합운동장사거리" + }, + { + "stop_nm": "종합운동장사거리", + "ycode": "37.51206", + "stop_no": "24143", + "xcode": "127.079682", + "stop_type": "가로변시간", + "node_id": "123000054", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "잠실종합운동장", + "ycode": "37.5111175337", + "stop_no": "24144", + "xcode": "127.0720732937", + "stop_type": "가로변전일", + "node_id": "123000055", + "nxtStn": "강남경찰서면허시험장" + }, + { + "stop_nm": "잠실트리지움아파트앞", + "ycode": "37.511516", + "stop_no": "24145", + "xcode": "127.091105", + "stop_type": "가로변전일", + "node_id": "123000056", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "잠실역.롯데월드", + "ycode": "37.51241161", + "stop_no": "24146", + "xcode": "127.0981962498", + "stop_type": "가로변전일", + "node_id": "123000057", + "nxtStn": "장미아파트" + }, + { + "stop_nm": "갤러리아팰리스", + "ycode": "37.511317434", + "stop_no": "24147", + "xcode": "127.0929234933", + "stop_type": "일반차로", + "node_id": "123000058", + "nxtStn": "잠실역.롯데월드" + }, + { + "stop_nm": "잠실트리지움", + "ycode": "37.5109779513", + "stop_no": "24148", + "xcode": "127.0926278344", + "stop_type": "일반차로", + "node_id": "123000059", + "nxtStn": "영동일고트리지움APT정문앞" + }, + { + "stop_nm": "영동일고레이크팰리스앞", + "ycode": "37.5088084767", + "stop_no": "24149", + "xcode": "127.0921466781", + "stop_type": "일반차로", + "node_id": "123000060", + "nxtStn": "갤러리아팰리스" + }, + { + "stop_nm": "영동일고트리지움APT정문앞", + "ycode": "37.509037", + "stop_no": "24150", + "xcode": "127.091732", + "stop_type": "일반차로", + "node_id": "123000061", + "nxtStn": "잠실119안전센터" + }, + { + "stop_nm": "위례포레샤인15단지", + "ycode": "37.485173", + "stop_no": "24151", + "xcode": "127.143618", + "stop_type": "일반차로", + "node_id": "123000670", + "nxtStn": "송파레이크파크호반써밋1차" + }, + { + "stop_nm": "잠실트리지움", + "ycode": "37.5076826578", + "stop_no": "24152", + "xcode": "127.0902574376", + "stop_type": "일반차로", + "node_id": "123000063", + "nxtStn": "잠실새내역앞" + }, + { + "stop_nm": "잠실119안전센터", + "ycode": "37.5070078199", + "stop_no": "24153", + "xcode": "127.0947494345", + "stop_type": "일반차로", + "node_id": "123000064", + "nxtStn": "잠실트리지움" + }, + { + "stop_nm": "잠실종합운동장", + "ycode": "37.5104187251999", + "stop_no": "24154", + "xcode": "127.0728158016", + "stop_type": "일반차로", + "node_id": "123000065", + "nxtStn": "종합운동장사거리" + }, + { + "stop_nm": "아시아선수촌아파트", + "ycode": "37.5104100042", + "stop_no": "24155", + "xcode": "127.0784474662", + "stop_type": "일반차로", + "node_id": "123000066", + "nxtStn": "아시아선수촌아파트삼거리.성현교회" + }, + { + "stop_nm": "아주중학교", + "ycode": "37.504784", + "stop_no": "24156", + "xcode": "127.076602", + "stop_type": "일반차로", + "node_id": "123000067", + "nxtStn": "대치유수지체육공원" + }, + { + "stop_nm": "종합운동장사거리", + "ycode": "37.5116128425", + "stop_no": "24157", + "xcode": "127.0795554593", + "stop_type": "가로변시간", + "node_id": "123000068", + "nxtStn": "잠실새내역4번출구" + }, + { + "stop_nm": "잠실새내역4번출구", + "ycode": "37.511447", + "stop_no": "24158", + "xcode": "127.08436", + "stop_type": "가로변시간", + "node_id": "123000069", + "nxtStn": "잠실트리지움아파트앞" + }, + { + "stop_nm": "영빌딩앞", + "ycode": "37.506535", + "stop_no": "24159", + "xcode": "127.089623", + "stop_type": "일반차로", + "node_id": "123000070", + "nxtStn": "삼전역" + }, + { + "stop_nm": "잠실우성4차현대아파트", + "ycode": "37.5052624454", + "stop_no": "24160", + "xcode": "127.0852075828", + "stop_type": "일반차로", + "node_id": "123000071", + "nxtStn": "잠실근린공원.성현교회" + }, + { + "stop_nm": "잠실우성4차현대아파트", + "ycode": "37.50496", + "stop_no": "24161", + "xcode": "127.085368", + "stop_type": "일반차로", + "node_id": "123000072", + "nxtStn": "삼전역" + }, + { + "stop_nm": "잠실근린공원.성현교회", + "ycode": "37.5063220545", + "stop_no": "24162", + "xcode": "127.0814987467", + "stop_type": "일반차로", + "node_id": "123000073", + "nxtStn": "아주중학교" + }, + { + "stop_nm": "아시아선수촌아파트삼거리.성현교회", + "ycode": "37.506194", + "stop_no": "24163", + "xcode": "127.080994", + "stop_type": "일반차로", + "node_id": "123000074", + "nxtStn": "잠실우성4차현대아파트" + }, + { + "stop_nm": "아시아선수촌아파트", + "ycode": "37.5098569453", + "stop_no": "24164", + "xcode": "127.079036654", + "stop_type": "일반차로", + "node_id": "123000075", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "아주중학교", + "ycode": "37.50537", + "stop_no": "24165", + "xcode": "127.077932", + "stop_type": "일반차로", + "node_id": "123000076", + "nxtStn": "아시아선수촌아파트삼거리.성현교회" + }, + { + "stop_nm": "삼전역", + "ycode": "37.503933", + "stop_no": "24166", + "xcode": "127.088965", + "stop_type": "일반차로", + "node_id": "123000077", + "nxtStn": "송파구민회관구의회" + }, + { + "stop_nm": "삼전역", + "ycode": "37.5039542558", + "stop_no": "24167", + "xcode": "127.0897903395", + "stop_type": "일반차로", + "node_id": "123000078", + "nxtStn": "잠실우성4차현대아파트" + }, + { + "stop_nm": "송파구민회관구의회", + "ycode": "37.5027059543", + "stop_no": "24168", + "xcode": "127.0947575704", + "stop_type": "일반차로", + "node_id": "123000079", + "nxtStn": "삼전동주민센터" + }, + { + "stop_nm": "송파구민회관구의회", + "ycode": "37.502428", + "stop_no": "24169", + "xcode": "127.09456", + "stop_type": "일반차로", + "node_id": "123000080", + "nxtStn": "삼학사길사거리" + }, + { + "stop_nm": "삼학사길사거리", + "ycode": "37.504692", + "stop_no": "24170", + "xcode": "127.096998", + "stop_type": "일반차로", + "node_id": "123000081", + "nxtStn": "송파구민회관구의회" + }, + { + "stop_nm": "잠실119안전센터", + "ycode": "37.5070038465", + "stop_no": "24171", + "xcode": "127.0929452929", + "stop_type": "일반차로", + "node_id": "123000082", + "nxtStn": "석촌호수서호사거리" + }, + { + "stop_nm": "삼전삼밭나루공원입구", + "ycode": "37.506282", + "stop_no": "24172", + "xcode": "127.08983", + "stop_type": "일반차로", + "node_id": "123000083", + "nxtStn": "영동일고레이크팰리스앞" + }, + { + "stop_nm": "삼전역.잠실현대아파트", + "ycode": "37.503429", + "stop_no": "24173", + "xcode": "127.08747", + "stop_type": "일반차로", + "node_id": "123000084", + "nxtStn": "삼전삼밭나루공원입구" + }, + { + "stop_nm": "삼전동현대APT", + "ycode": "37.5004306288", + "stop_no": "24174", + "xcode": "127.0874664895", + "stop_type": "일반차로", + "node_id": "123000085", + "nxtStn": "삼전역.잠실현대아파트" + }, + { + "stop_nm": "삼전동쌍용하이츠빌라", + "ycode": "37.4992253627", + "stop_no": "24175", + "xcode": "127.0908500813", + "stop_type": "일반차로", + "node_id": "123000086", + "nxtStn": "삼전동현대APT" + }, + { + "stop_nm": "삼전사회복지관", + "ycode": "37.498092", + "stop_no": "24176", + "xcode": "127.094243", + "stop_type": "일반차로", + "node_id": "123000087", + "nxtStn": "삼전동쌍용하이츠빌라" + }, + { + "stop_nm": "배명중고교", + "ycode": "37.5001551941", + "stop_no": "24177", + "xcode": "127.0966612411", + "stop_type": "일반차로", + "node_id": "123000088", + "nxtStn": "삼전사회복지관" + }, + { + "stop_nm": "석촌고분역.올림픽병원", + "ycode": "37.5026705428", + "stop_no": "24178", + "xcode": "127.0983927355", + "stop_type": "일반차로", + "node_id": "123000089", + "nxtStn": "송파구민회관구의회" + }, + { + "stop_nm": "석촌고분역.올림픽병원", + "ycode": "37.502428", + "stop_no": "24179", + "xcode": "127.098638", + "stop_type": "일반차로", + "node_id": "123000090", + "nxtStn": "석촌역.잠실한솔아파트" + }, + { + "stop_nm": "석촌역.잠실한솔아파트", + "ycode": "37.5045154646", + "stop_no": "24180", + "xcode": "127.1052845803", + "stop_type": "일반차로", + "node_id": "123000091", + "nxtStn": "석촌역.잠실한솔아파트" + }, + { + "stop_nm": "석촌역.잠실한솔아파트", + "ycode": "37.504398", + "stop_no": "24181", + "xcode": "127.105635", + "stop_type": "일반차로", + "node_id": "123000092", + "nxtStn": "송파역.헬리오시티" + }, + { + "stop_nm": "송파레이크파크호반써밋2차정문", + "ycode": "37.4850420817", + "stop_no": "24182", + "xcode": "127.1433479888", + "stop_type": "일반차로", + "node_id": "123000671", + "nxtStn": "덕수고등학교" + }, + { + "stop_nm": "삼학사길사거리", + "ycode": "37.504039", + "stop_no": "24183", + "xcode": "127.097258", + "stop_type": "일반차로", + "node_id": "123000094", + "nxtStn": "레이크팰리스아파트" + }, + { + "stop_nm": "배명중고교", + "ycode": "37.4997098452", + "stop_no": "24184", + "xcode": "127.0969106203", + "stop_type": "일반차로", + "node_id": "123000095", + "nxtStn": "송파구민회관구의회" + }, + { + "stop_nm": "석촌동남현교회앞", + "ycode": "37.49902004", + "stop_no": "24185", + "xcode": "127.1006951845", + "stop_type": "일반차로", + "node_id": "123000096", + "nxtStn": "배명중고교" + }, + { + "stop_nm": "석촌동남현교회앞", + "ycode": "37.498804", + "stop_no": "24186", + "xcode": "127.10027", + "stop_type": "일반차로", + "node_id": "123000097", + "nxtStn": "송파책박물관.헬리오시티" + }, + { + "stop_nm": "송파책박물관.헬리오시티", + "ycode": "37.5002341376", + "stop_no": "24187", + "xcode": "127.1044857249", + "stop_type": "일반차로", + "node_id": "123000098", + "nxtStn": "석촌동남현교회앞" + }, + { + "stop_nm": "송파책박물관.헬리오시티", + "ycode": "37.4999173582", + "stop_no": "24188", + "xcode": "127.1040226991", + "stop_type": "일반차로", + "node_id": "123000099", + "nxtStn": "송파사거리.석촌시장" + }, + { + "stop_nm": "송파사거리.석촌시장", + "ycode": "37.5015446024", + "stop_no": "24189", + "xcode": "127.1091779641", + "stop_type": "일반차로", + "node_id": "123000100", + "nxtStn": "송파역.헬리오시티" + }, + { + "stop_nm": "송파사거리", + "ycode": "37.501603", + "stop_no": "24190", + "xcode": "127.10875", + "stop_type": "일반차로", + "node_id": "123000101", + "nxtStn": "송파책박물관.헬리오시티" + }, + { + "stop_nm": "송파역.헬리오시티", + "ycode": "37.5005814149", + "stop_no": "24191", + "xcode": "127.1110144742", + "stop_type": "일반차로", + "node_id": "123000102", + "nxtStn": "가락1동주민센터" + }, + { + "stop_nm": "위례포레샤인13단지공원", + "ycode": "37.48315", + "stop_no": "24192", + "xcode": "127.136244", + "stop_type": "일반차로", + "node_id": "123000677", + "nxtStn": "장지공영차고지" + }, + { + "stop_nm": "송파여성문화회관", + "ycode": "37.5069356421", + "stop_no": "24193", + "xcode": "127.1094493659", + "stop_type": "일반차로", + "node_id": "123000104", + "nxtStn": "석촌역.잠실한솔아파트" + }, + { + "stop_nm": "송파여성문화회관", + "ycode": "37.506738", + "stop_no": "24194", + "xcode": "127.109617", + "stop_type": "일반차로", + "node_id": "123000105", + "nxtStn": "송파초등학교.송파동성당" + }, + { + "stop_nm": "송파초등학교.송파동성당", + "ycode": "37.5091624679", + "stop_no": "24195", + "xcode": "127.111297551", + "stop_type": "일반차로", + "node_id": "123000106", + "nxtStn": "송파여성문화회관" + }, + { + "stop_nm": "송파초등학교.송파동성당", + "ycode": "37.5087366131", + "stop_no": "24196", + "xcode": "127.111379311", + "stop_type": "일반차로", + "node_id": "123000107", + "nxtStn": "송파나루역.방이시장" + }, + { + "stop_nm": "방이동사거리", + "ycode": "37.5106676569", + "stop_no": "24197", + "xcode": "127.1107862085", + "stop_type": "일반차로", + "node_id": "123000108", + "nxtStn": "송파나루역" + }, + { + "stop_nm": "포레나송파후문", + "ycode": "37.4846449844", + "stop_no": "24198", + "xcode": "127.1469872299", + "stop_type": "일반차로", + "node_id": "123000680", + "nxtStn": "덕수고등학교" + }, + { + "stop_nm": "송파나루역", + "ycode": "37.509562", + "stop_no": "24199", + "xcode": "127.113213", + "stop_type": "일반차로", + "node_id": "123000632", + "nxtStn": "서울방이동고분군" + }, + { + "stop_nm": "송파2동한양아파트", + "ycode": "37.5038731127", + "stop_no": "24200", + "xcode": "127.1138832242", + "stop_type": "일반차로", + "node_id": "123000111", + "nxtStn": "잠실여고후문" + }, + { + "stop_nm": "송파동한양1차아파트", + "ycode": "37.505957", + "stop_no": "24201", + "xcode": "127.115413", + "stop_type": "일반차로", + "node_id": "123000112", + "nxtStn": "송파2동한양아파트" + }, + { + "stop_nm": "서울방이동고분군", + "ycode": "37.5084245055", + "stop_no": "24202", + "xcode": "127.1151707999", + "stop_type": "일반차로", + "node_id": "123000113", + "nxtStn": "삼익아파트미성아파트" + }, + { + "stop_nm": "송파역", + "ycode": "37.4992928463", + "stop_no": "24203", + "xcode": "127.1129081285", + "stop_type": "가로변전일", + "node_id": "123000114", + "nxtStn": "잠실롯데월드호텔롯데타워" + }, + { + "stop_nm": "성지아파트", + "ycode": "37.4997831426", + "stop_no": "24204", + "xcode": "127.1174306486", + "stop_type": "일반차로", + "node_id": "123000115", + "nxtStn": "송파역" + }, + { + "stop_nm": "송파동삼익아파트", + "ycode": "37.5029232975", + "stop_no": "24205", + "xcode": "127.1219127896", + "stop_type": "일반차로", + "node_id": "123000116", + "nxtStn": "성지아파트" + }, + { + "stop_nm": "삼익아파트미성아파트", + "ycode": "37.5060869823", + "stop_no": "24206", + "xcode": "127.1203825294", + "stop_type": "일반차로", + "node_id": "123000117", + "nxtStn": "송파경찰서.오금역" + }, + { + "stop_nm": "송파2동한양삼성아파트", + "ycode": "37.5059979239", + "stop_no": "24207", + "xcode": "127.1157233661", + "stop_type": "일반차로", + "node_id": "123000118", + "nxtStn": "삼익아파트미성아파트" + }, + { + "stop_nm": "한양공원", + "ycode": "37.503707", + "stop_no": "24208", + "xcode": "127.113797", + "stop_type": "일반차로", + "node_id": "123000119", + "nxtStn": "송파2동한양삼성아파트" + }, + { + "stop_nm": "잠실여고후문", + "ycode": "37.502575", + "stop_no": "24209", + "xcode": "127.11201", + "stop_type": "일반차로", + "node_id": "123000120", + "nxtStn": "한양공원" + }, + { + "stop_nm": "방이중학교", + "ycode": "37.514164", + "stop_no": "24210", + "xcode": "127.114367", + "stop_type": "일반차로", + "node_id": "123000121", + "nxtStn": "송파나루역.방이시장" + }, + { + "stop_nm": "한성백제역4번출구", + "ycode": "37.514997", + "stop_no": "24211", + "xcode": "127.115367", + "stop_type": "일반차로", + "node_id": "123000122", + "nxtStn": "몽촌토성역.한성백제역" + }, + { + "stop_nm": "송파나루역.방이시장", + "ycode": "37.5110032307", + "stop_no": "24212", + "xcode": "127.1124463657", + "stop_type": "일반차로", + "node_id": "123000123", + "nxtStn": "송파나루역" + }, + { + "stop_nm": "송파나루역.방이시장", + "ycode": "37.511085", + "stop_no": "24213", + "xcode": "127.112945", + "stop_type": "일반차로", + "node_id": "123000124", + "nxtStn": "한성백제역4번출구" + }, + { + "stop_nm": "송파나루역", + "ycode": "37.5106794362", + "stop_no": "24214", + "xcode": "127.1116741986", + "stop_type": "일반차로", + "node_id": "123000125", + "nxtStn": "호수임광아파트" + }, + { + "stop_nm": "송파구청.방이맛골", + "ycode": "37.513352", + "stop_no": "24215", + "xcode": "127.107792", + "stop_type": "일반차로", + "node_id": "123000126", + "nxtStn": "잠실진주아파트" + }, + { + "stop_nm": "잠실진주아파트", + "ycode": "37.5161753691", + "stop_no": "24216", + "xcode": "127.1096189729", + "stop_type": "가로변전일", + "node_id": "123000127", + "nxtStn": "몽촌토성역.한성백제역" + }, + { + "stop_nm": "올림픽베어스타운아파트앞", + "ycode": "37.5148280531", + "stop_no": "24217", + "xcode": "127.1191035641", + "stop_type": "일반차로", + "node_id": "123000128", + "nxtStn": "올림픽공원남2문" + }, + { + "stop_nm": "방이초등학교", + "ycode": "37.51187", + "stop_no": "24218", + "xcode": "127.119108", + "stop_type": "일반차로", + "node_id": "123000129", + "nxtStn": "방이시장입구" + }, + { + "stop_nm": "방이시장입구", + "ycode": "37.510113", + "stop_no": "24219", + "xcode": "127.118048", + "stop_type": "일반차로", + "node_id": "123000130", + "nxtStn": "서울방이동고분군" + }, + { + "stop_nm": "방이우체국", + "ycode": "37.5095130652", + "stop_no": "24220", + "xcode": "127.1139245961", + "stop_type": "일반차로", + "node_id": "123000131", + "nxtStn": "송파나루역" + }, + { + "stop_nm": "올림픽공원남2문", + "ycode": "37.514023", + "stop_no": "24221", + "xcode": "127.121407", + "stop_type": "일반차로", + "node_id": "123000132", + "nxtStn": "신구블레스밸리앞" + }, + { + "stop_nm": "올림픽공원장미광장", + "ycode": "37.512651295", + "stop_no": "24222", + "xcode": "127.1249201549", + "stop_type": "일반차로", + "node_id": "123000133", + "nxtStn": "올림픽선수촌아파트" + }, + { + "stop_nm": "방이역3번출구대림아파트", + "ycode": "37.5084180897", + "stop_no": "24223", + "xcode": "127.1256144074", + "stop_type": "일반차로", + "node_id": "123000134", + "nxtStn": "송파동삼익아파트" + }, + { + "stop_nm": "한양삼익아파트", + "ycode": "37.505915", + "stop_no": "24224", + "xcode": "127.121715", + "stop_type": "일반차로", + "node_id": "123000135", + "nxtStn": "서울방이동고분군" + }, + { + "stop_nm": "방이시장입구", + "ycode": "37.509897", + "stop_no": "24225", + "xcode": "127.118117", + "stop_type": "일반차로", + "node_id": "123000136", + "nxtStn": "방이초등학교" + }, + { + "stop_nm": "방이초등학교", + "ycode": "37.512017", + "stop_no": "24226", + "xcode": "127.11946", + "stop_type": "일반차로", + "node_id": "123000137", + "nxtStn": "올림픽공원남2문" + }, + { + "stop_nm": "신구블레스밸리앞", + "ycode": "37.51141", + "stop_no": "24227", + "xcode": "127.121497", + "stop_type": "일반차로", + "node_id": "123000138", + "nxtStn": "방이동대림코오롱아파트" + }, + { + "stop_nm": "신구블레스밸리", + "ycode": "37.511615", + "stop_no": "24228", + "xcode": "127.12188", + "stop_type": "일반차로", + "node_id": "123000139", + "nxtStn": "방이초등학교" + }, + { + "stop_nm": "방이동대림코오롱아파트", + "ycode": "37.5091863822", + "stop_no": "24229", + "xcode": "127.1242379509", + "stop_type": "일반차로", + "node_id": "123000140", + "nxtStn": "오금동대림아파트" + }, + { + "stop_nm": "방이동대림코오롱아파트", + "ycode": "37.509558775", + "stop_no": "24230", + "xcode": "127.1240112053", + "stop_type": "일반차로", + "node_id": "123000141", + "nxtStn": "신구블레스밸리" + }, + { + "stop_nm": "올림픽회관", + "ycode": "37.5209125924", + "stop_no": "24231", + "xcode": "127.1151501871", + "stop_type": "가로변전일", + "node_id": "123000142", + "nxtStn": "풍납동극동.쌍용아파트" + }, + { + "stop_nm": "풍납동극동.쌍용아파트", + "ycode": "37.526842", + "stop_no": "24232", + "xcode": "127.1187", + "stop_type": "가로변전일", + "node_id": "123000143", + "nxtStn": "강동구청역" + }, + { + "stop_nm": "한성백제박물관", + "ycode": "37.515525", + "stop_no": "24233", + "xcode": "127.1193", + "stop_type": "일반차로", + "node_id": "123000584", + "nxtStn": "몽촌토성역.한성백제역" + }, + { + "stop_nm": "서울체육중.고등학교", + "ycode": "37.5222031515", + "stop_no": "24234", + "xcode": "127.1313779815", + "stop_type": "일반차로", + "node_id": "123000144", + "nxtStn": "보성중고등학교" + }, + { + "stop_nm": "둔촌오륜역.서문교회", + "ycode": "37.518467", + "stop_no": "24235", + "xcode": "127.139743", + "stop_type": "일반차로", + "node_id": "123000145", + "nxtStn": "서하남IC입구" + }, + { + "stop_nm": "서하남IC입구", + "ycode": "37.517107", + "stop_no": "24236", + "xcode": "127.142813", + "stop_type": "일반차로", + "node_id": "123000146", + "nxtStn": "효죽동입구" + }, + { + "stop_nm": "효죽동입구", + "ycode": "37.5124681797", + "stop_no": "24237", + "xcode": "127.1418482902", + "stop_type": "일반차로", + "node_id": "123000147", + "nxtStn": "오륜사거리" + }, + { + "stop_nm": "포레나송파정문", + "ycode": "37.4867040154", + "stop_no": "24238", + "xcode": "127.1475593634", + "stop_type": "일반차로", + "node_id": "123000672", + "nxtStn": "덕수고등학교" + }, + { + "stop_nm": "올림픽공원장미광장", + "ycode": "37.512882", + "stop_no": "24239", + "xcode": "127.126158", + "stop_type": "일반차로", + "node_id": "123000149", + "nxtStn": "올림픽공원남2문" + }, + { + "stop_nm": "올림픽공원남2문", + "ycode": "37.514625", + "stop_no": "24240", + "xcode": "127.12181", + "stop_type": "일반차로", + "node_id": "123000150", + "nxtStn": "한성백제박물관" + }, + { + "stop_nm": "몽촌토성역.한성백제역", + "ycode": "37.517203", + "stop_no": "24241", + "xcode": "127.11463", + "stop_type": "일반차로", + "node_id": "123000151", + "nxtStn": "올림픽회관" + }, + { + "stop_nm": "보성중고등학교", + "ycode": "37.520023", + "stop_no": "24242", + "xcode": "127.13357", + "stop_type": "일반차로", + "node_id": "123000152", + "nxtStn": "한국전력공사강동송파지사" + }, + { + "stop_nm": "보성중고등학교", + "ycode": "37.519734", + "stop_no": "24243", + "xcode": "127.133004", + "stop_type": "일반차로", + "node_id": "123000153", + "nxtStn": "올림픽공원역" + }, + { + "stop_nm": "올림픽공원역", + "ycode": "37.5167177922", + "stop_no": "24244", + "xcode": "127.1308988886", + "stop_type": "일반차로", + "node_id": "123000154", + "nxtStn": "오금동대림아파트" + }, + { + "stop_nm": "올림픽공원역", + "ycode": "37.516324269", + "stop_no": "24245", + "xcode": "127.1314785378", + "stop_type": "일반차로", + "node_id": "123000155", + "nxtStn": "보성중고등학교" + }, + { + "stop_nm": "올림픽공원테니스장", + "ycode": "37.513298", + "stop_no": "24246", + "xcode": "127.1286", + "stop_type": "일반차로", + "node_id": "123000156", + "nxtStn": "오금동대림아파트" + }, + { + "stop_nm": "올림픽선수촌아파트", + "ycode": "37.5133663299", + "stop_no": "24247", + "xcode": "127.1292816284", + "stop_type": "일반차로", + "node_id": "123000157", + "nxtStn": "올림픽공원역" + }, + { + "stop_nm": "방이역", + "ycode": "37.508848", + "stop_no": "24248", + "xcode": "127.126495", + "stop_type": "일반차로", + "node_id": "123000158", + "nxtStn": "올림픽선수촌아파트" + }, + { + "stop_nm": "오금역.오금동현대아파트", + "ycode": "37.5032944565", + "stop_no": "24249", + "xcode": "127.1264326302", + "stop_type": "일반차로", + "node_id": "123000159", + "nxtStn": "송파삼성래미안아파트" + }, + { + "stop_nm": "오금공원앞", + "ycode": "37.499213", + "stop_no": "24250", + "xcode": "127.13297", + "stop_type": "일반차로", + "node_id": "123000160", + "nxtStn": "오금역.오금동현대아파트" + }, + { + "stop_nm": "개롱역.오금동상아아파트", + "ycode": "37.497653816", + "stop_no": "24251", + "xcode": "127.1359380431", + "stop_type": "일반차로", + "node_id": "123000161", + "nxtStn": "오금공원앞" + }, + { + "stop_nm": "보인고교.오금동삼성아파트", + "ycode": "37.496447", + "stop_no": "24252", + "xcode": "127.138228", + "stop_type": "일반차로", + "node_id": "123000162", + "nxtStn": "개롱역.오금동상아아파트" + }, + { + "stop_nm": "송파사회복지관.성요셉성당", + "ycode": "37.4980789633", + "stop_no": "24253", + "xcode": "127.1407036537", + "stop_type": "일반차로", + "node_id": "123000163", + "nxtStn": "보인고교.오금동삼성아파트" + }, + { + "stop_nm": "거여초등학교", + "ycode": "37.502548108", + "stop_no": "24254", + "xcode": "127.1402155083", + "stop_type": "일반차로", + "node_id": "123000164", + "nxtStn": "송파참병원" + }, + { + "stop_nm": "거여초등학교", + "ycode": "37.50241", + "stop_no": "24255", + "xcode": "127.140012", + "stop_type": "일반차로", + "node_id": "123000165", + "nxtStn": "마천2동윤진빌딩.신동아아파트" + }, + { + "stop_nm": "송파참병원", + "ycode": "37.5036199871", + "stop_no": "24256", + "xcode": "127.1375165211", + "stop_type": "일반차로", + "node_id": "123000166", + "nxtStn": "거여초등학교" + }, + { + "stop_nm": "송파참병원", + "ycode": "37.5038625052", + "stop_no": "24257", + "xcode": "127.1374117762", + "stop_type": "일반차로", + "node_id": "123000167", + "nxtStn": "신흥운수입구" + }, + { + "stop_nm": "신흥운수입구", + "ycode": "37.5043505304", + "stop_no": "24258", + "xcode": "127.1353925625", + "stop_type": "일반차로", + "node_id": "123000168", + "nxtStn": "송파참병원" + }, + { + "stop_nm": "신흥운수입구", + "ycode": "37.505033", + "stop_no": "24259", + "xcode": "127.134153", + "stop_type": "일반차로", + "node_id": "123000169", + "nxtStn": "오금공원사거리" + }, + { + "stop_nm": "송파레미니스후문", + "ycode": "37.5061531582", + "stop_no": "24260", + "xcode": "127.1354499522", + "stop_type": "일반차로", + "node_id": "123000170", + "nxtStn": "종점" + }, + { + "stop_nm": "송파레미니스후문", + "ycode": "37.506195", + "stop_no": "24261", + "xcode": "127.135317", + "stop_type": "일반차로", + "node_id": "123000171", + "nxtStn": "신흥운수입구" + }, + { + "stop_nm": "오금공원사거리", + "ycode": "37.506034168", + "stop_no": "24262", + "xcode": "127.1310600773", + "stop_type": "일반차로", + "node_id": "123000172", + "nxtStn": "신흥운수입구" + }, + { + "stop_nm": "오금공원사거리", + "ycode": "37.5063791494", + "stop_no": "24263", + "xcode": "127.1310586523", + "stop_type": "일반차로", + "node_id": "123000173", + "nxtStn": "오금동대림아파트" + }, + { + "stop_nm": "오금동대림아파트", + "ycode": "37.507917", + "stop_no": "24264", + "xcode": "127.12799", + "stop_type": "일반차로", + "node_id": "123000174", + "nxtStn": "방이역" + }, + { + "stop_nm": "오금동대림아파트", + "ycode": "37.507652", + "stop_no": "24265", + "xcode": "127.128115", + "stop_type": "일반차로", + "node_id": "123000175", + "nxtStn": "오금공원사거리" + }, + { + "stop_nm": "송파도서관", + "ycode": "37.4999787589", + "stop_no": "24266", + "xcode": "127.1358517768", + "stop_type": "일반차로", + "node_id": "123000176", + "nxtStn": "오금공원앞" + }, + { + "stop_nm": "우창아파트", + "ycode": "37.4997505359", + "stop_no": "24267", + "xcode": "127.1360639933", + "stop_type": "일반차로", + "node_id": "123000177", + "nxtStn": "오금동사거리" + }, + { + "stop_nm": "오금동사거리", + "ycode": "37.5027436793", + "stop_no": "24268", + "xcode": "127.1378915552", + "stop_type": "일반차로", + "node_id": "123000178", + "nxtStn": "송파도서관" + }, + { + "stop_nm": "오금동사거리", + "ycode": "37.502775", + "stop_no": "24269", + "xcode": "127.138162", + "stop_type": "일반차로", + "node_id": "123000179", + "nxtStn": "거여초등학교" + }, + { + "stop_nm": "거여역", + "ycode": "37.4940540879", + "stop_no": "24270", + "xcode": "127.1426661724", + "stop_type": "일반차로", + "node_id": "123000180", + "nxtStn": "보인고교.오금동삼성아파트" + }, + { + "stop_nm": "거여역현대아파트", + "ycode": "37.493818", + "stop_no": "24271", + "xcode": "127.142477", + "stop_type": "일반차로", + "node_id": "123000181", + "nxtStn": "거여역7번출구" + }, + { + "stop_nm": "체육문화회관", + "ycode": "37.4908038511", + "stop_no": "24272", + "xcode": "127.1433758342", + "stop_type": "일반차로", + "node_id": "123000182", + "nxtStn": "세계로병원" + }, + { + "stop_nm": "거여역2번출구", + "ycode": "37.4943119554", + "stop_no": "24273", + "xcode": "127.1447634037", + "stop_type": "일반차로", + "node_id": "123000183", + "nxtStn": "거여역" + }, + { + "stop_nm": "송파사회복지관.성요셉성당", + "ycode": "37.498118", + "stop_no": "24274", + "xcode": "127.140953", + "stop_type": "일반차로", + "node_id": "123000184", + "nxtStn": "송파두산위브.송파소방서" + }, + { + "stop_nm": "거여아파트단지앞", + "ycode": "37.4904638928", + "stop_no": "24275", + "xcode": "127.1435753484", + "stop_type": "일반차로", + "node_id": "123000185", + "nxtStn": "거여역" + }, + { + "stop_nm": "거여역5번출구", + "ycode": "37.492903", + "stop_no": "24276", + "xcode": "127.145677", + "stop_type": "일반차로", + "node_id": "123000186", + "nxtStn": "송파파크센트럴" + }, + { + "stop_nm": "거여역4번출구", + "ycode": "37.4931392222", + "stop_no": "24277", + "xcode": "127.1456917976", + "stop_type": "일반차로", + "node_id": "123000187", + "nxtStn": "거여역" + }, + { + "stop_nm": "송파파크센트럴", + "ycode": "37.492941", + "stop_no": "24278", + "xcode": "127.148924", + "stop_type": "일반차로", + "node_id": "123000188", + "nxtStn": "거여역4번출구" + }, + { + "stop_nm": "종점", + "ycode": "37.492768", + "stop_no": "24279", + "xcode": "127.152763", + "stop_type": "일반차로", + "node_id": "123000189", + "nxtStn": "비호아파트" + }, + { + "stop_nm": "비호아파트", + "ycode": "37.492007", + "stop_no": "24280", + "xcode": "127.154185", + "stop_type": "일반차로", + "node_id": "123000190", + "nxtStn": "위례포레샤인18단지" + }, + { + "stop_nm": "인애가요양병원", + "ycode": "37.5053573702", + "stop_no": "24281", + "xcode": "127.1350449386", + "stop_type": "일반차로", + "node_id": "123000640", + "nxtStn": "송파레미니스후문" + }, + { + "stop_nm": "마천1동주민센터", + "ycode": "37.495774", + "stop_no": "24282", + "xcode": "127.149613", + "stop_type": "일반차로", + "node_id": "123000192", + "nxtStn": "마천역.송파파크센트럴" + }, + { + "stop_nm": "마천2동주민센터", + "ycode": "37.496742", + "stop_no": "24283", + "xcode": "127.148233", + "stop_type": "일반차로", + "node_id": "123000193", + "nxtStn": "마천1동주민센터" + }, + { + "stop_nm": "거여역3번출구.현대2차아파트", + "ycode": "37.494278", + "stop_no": "24284", + "xcode": "127.145095", + "stop_type": "일반차로", + "node_id": "123000194", + "nxtStn": "마천동사거리" + }, + { + "stop_nm": "마천1동주민센터", + "ycode": "37.495710391", + "stop_no": "24285", + "xcode": "127.1498825172", + "stop_type": "일반차로", + "node_id": "123000195", + "nxtStn": "마천2동주민센터" + }, + { + "stop_nm": "마천역.송파파크센트럴", + "ycode": "37.4934555292", + "stop_no": "24286", + "xcode": "127.1522337071", + "stop_type": "일반차로", + "node_id": "123000196", + "nxtStn": "마천1동주민센터" + }, + { + "stop_nm": "비호아파트", + "ycode": "37.492178", + "stop_no": "24287", + "xcode": "127.15409", + "stop_type": "일반차로", + "node_id": "123000197", + "nxtStn": "송파파크센트럴" + }, + { + "stop_nm": "남한산성입구", + "ycode": "37.490972", + "stop_no": "24288", + "xcode": "127.157155", + "stop_type": "일반차로", + "node_id": "123000198", + "nxtStn": "비호아파트" + }, + { + "stop_nm": "송파구립마천청소년센터", + "ycode": "37.491982", + "stop_no": "24289", + "xcode": "127.156552", + "stop_type": "일반차로", + "node_id": "123000199", + "nxtStn": "남한산성입구" + }, + { + "stop_nm": "송파구립마천청소년센터", + "ycode": "37.491832", + "stop_no": "24290", + "xcode": "127.15679", + "stop_type": "일반차로", + "node_id": "123000200", + "nxtStn": "송파보훈회관.금호어울림2차" + }, + { + "stop_nm": "송파보훈회관.금호어울림2차", + "ycode": "37.4939681019", + "stop_no": "24291", + "xcode": "127.1558084636", + "stop_type": "일반차로", + "node_id": "123000201", + "nxtStn": "마천동금호어울림1차아파트" + }, + { + "stop_nm": "송파보훈회관.금호어울림2차", + "ycode": "37.493992", + "stop_no": "24292", + "xcode": "127.155567", + "stop_type": "일반차로", + "node_id": "123000202", + "nxtStn": "송파구립마천청소년센터" + }, + { + "stop_nm": "마천동금호어울림1차아파트", + "ycode": "37.497198", + "stop_no": "24293", + "xcode": "127.154198", + "stop_type": "일반차로", + "node_id": "123000203", + "nxtStn": "남천초교마천동우방아파트앞" + }, + { + "stop_nm": "마천동금호어울림1차아파트", + "ycode": "37.497978", + "stop_no": "24294", + "xcode": "127.154075", + "stop_type": "일반차로", + "node_id": "123000204", + "nxtStn": "송파보훈회관.금호어울림2차" + }, + { + "stop_nm": "마천시장마천동우방아파트앞", + "ycode": "37.499937", + "stop_no": "24295", + "xcode": "127.15151", + "stop_type": "일반차로", + "node_id": "123000205", + "nxtStn": "마천동금호어울림1차아파트" + }, + { + "stop_nm": "남천초교마천동우방아파트앞", + "ycode": "37.4999186245", + "stop_no": "24296", + "xcode": "127.1519312753", + "stop_type": "일반차로", + "node_id": "123000206", + "nxtStn": "청암노인요양원" + }, + { + "stop_nm": "청암노인요양원", + "ycode": "37.501352", + "stop_no": "24297", + "xcode": "127.148553", + "stop_type": "일반차로", + "node_id": "123000207", + "nxtStn": "마천시장마천동우방아파트앞" + }, + { + "stop_nm": "청암노인요양원", + "ycode": "37.501079", + "stop_no": "24298", + "xcode": "127.150052", + "stop_type": "일반차로", + "node_id": "123000208", + "nxtStn": "마천동사거리" + }, + { + "stop_nm": "마천동사거리", + "ycode": "37.498527", + "stop_no": "24299", + "xcode": "127.146632", + "stop_type": "일반차로", + "node_id": "123000209", + "nxtStn": "마천2동윤진빌딩.신동아아파트" + }, + { + "stop_nm": "마천동사거리", + "ycode": "37.49872", + "stop_no": "24300", + "xcode": "127.1471", + "stop_type": "일반차로", + "node_id": "123000210", + "nxtStn": "청암노인요양원" + }, + { + "stop_nm": "마천2동윤진빌딩.신동아아파트", + "ycode": "37.499635", + "stop_no": "24301", + "xcode": "127.144058", + "stop_type": "일반차로", + "node_id": "123000211", + "nxtStn": "마천동사거리" + }, + { + "stop_nm": "마천2동윤진빌딩.신동아아파트", + "ycode": "37.4996759516", + "stop_no": "24302", + "xcode": "127.1442444466", + "stop_type": "일반차로", + "node_id": "123000212", + "nxtStn": "거여초등학교" + }, + { + "stop_nm": "마천2동주민센터", + "ycode": "37.4970139451", + "stop_no": "24303", + "xcode": "127.1480088453", + "stop_type": "일반차로", + "node_id": "123000213", + "nxtStn": "마천2동윤진빌딩.신동아아파트" + }, + { + "stop_nm": "복정역1번출구", + "ycode": "37.4723236592", + "stop_no": "24305", + "xcode": "127.1271368118", + "stop_type": "일반차로", + "node_id": "123000215", + "nxtStn": "장지역.가든파이브" + }, + { + "stop_nm": "거여1동주민센터", + "ycode": "37.4964789482", + "stop_no": "24306", + "xcode": "127.1457581251", + "stop_type": "일반차로", + "node_id": "123000684", + "nxtStn": "거여역2번출구" + }, + { + "stop_nm": "건영아파트", + "ycode": "37.481675", + "stop_no": "24307", + "xcode": "127.126677", + "stop_type": "일반차로", + "node_id": "123000217", + "nxtStn": "문덕초등학교.문정고등학교" + }, + { + "stop_nm": "문현중학교", + "ycode": "37.479987", + "stop_no": "24308", + "xcode": "127.12675", + "stop_type": "일반차로", + "node_id": "123000218", + "nxtStn": "송파구립산모건강증진센터" + }, + { + "stop_nm": "문현중학교", + "ycode": "37.4800743082", + "stop_no": "24309", + "xcode": "127.1269147543", + "stop_type": "일반차로", + "node_id": "123000219", + "nxtStn": "건영아파트" + }, + { + "stop_nm": "문덕초등학교.문정고등학교", + "ycode": "37.483681076", + "stop_no": "24310", + "xcode": "127.126405225", + "stop_type": "일반차로", + "node_id": "123000220", + "nxtStn": "문정동푸르지오아파트" + }, + { + "stop_nm": "문정대우아파트", + "ycode": "37.486465", + "stop_no": "24311", + "xcode": "127.12834", + "stop_type": "일반차로", + "node_id": "123000221", + "nxtStn": "삼성래미안아파트후문" + }, + { + "stop_nm": "삼성래미안아파트후문", + "ycode": "37.488922", + "stop_no": "24312", + "xcode": "127.131928", + "stop_type": "일반차로", + "node_id": "123000222", + "nxtStn": "문정시영가락프라자아파트" + }, + { + "stop_nm": "문정시영가락프라자아파트", + "ycode": "37.491223", + "stop_no": "24313", + "xcode": "127.13457", + "stop_type": "일반차로", + "node_id": "123000223", + "nxtStn": "가락2동프라자아파트" + }, + { + "stop_nm": "문정시영.세양청마루아파트", + "ycode": "37.492386841", + "stop_no": "24314", + "xcode": "127.1359635544", + "stop_type": "일반차로", + "node_id": "123000224", + "nxtStn": "송파배드민턴체육관" + }, + { + "stop_nm": "한림연예예술고교", + "ycode": "37.4853687826", + "stop_no": "24315", + "xcode": "127.1314174837", + "stop_type": "일반차로", + "node_id": "123000225", + "nxtStn": "구송파세무서" + }, + { + "stop_nm": "한림연예예술고교", + "ycode": "37.485403", + "stop_no": "24316", + "xcode": "127.131745", + "stop_type": "일반차로", + "node_id": "123000226", + "nxtStn": "장지동주민센터.송파파인타운1단지" + }, + { + "stop_nm": "구송파세무서", + "ycode": "37.482985", + "stop_no": "24317", + "xcode": "127.128678", + "stop_type": "일반차로", + "node_id": "123000227", + "nxtStn": "한림연예예술고교" + }, + { + "stop_nm": "구송파세무서", + "ycode": "37.483383", + "stop_no": "24318", + "xcode": "127.128968", + "stop_type": "일반차로", + "node_id": "123000228", + "nxtStn": "문덕초등학교.문정고등학교" + }, + { + "stop_nm": "문정1동주민센터.로데오거리", + "ycode": "37.490393", + "stop_no": "24319", + "xcode": "127.124523", + "stop_type": "일반차로", + "node_id": "123000229", + "nxtStn": "문정현대아파트" + }, + { + "stop_nm": "위례포레샤인18단지", + "ycode": "37.489242", + "stop_no": "24320", + "xcode": "127.152664", + "stop_type": "일반차로", + "node_id": "123000652", + "nxtStn": "비호아파트" + }, + { + "stop_nm": "위례포레샤인18단지", + "ycode": "37.489008", + "stop_no": "24321", + "xcode": "127.151798", + "stop_type": "일반차로", + "node_id": "123000653", + "nxtStn": "포레나송파정문" + }, + { + "stop_nm": "문덕초등학교.문정고등학교", + "ycode": "37.483395", + "stop_no": "24322", + "xcode": "127.126295", + "stop_type": "일반차로", + "node_id": "123000232", + "nxtStn": "구송파세무서" + }, + { + "stop_nm": "문정동푸르지오아파트", + "ycode": "37.4871576085", + "stop_no": "24323", + "xcode": "127.127177779", + "stop_type": "일반차로", + "node_id": "123000233", + "nxtStn": "문정동래미안아파트" + }, + { + "stop_nm": "문정동대우아파트", + "ycode": "37.486845", + "stop_no": "24324", + "xcode": "127.126833", + "stop_type": "일반차로", + "node_id": "123000234", + "nxtStn": "문덕초등학교.문정고등학교" + }, + { + "stop_nm": "문정동래미안아파트", + "ycode": "37.492042", + "stop_no": "24325", + "xcode": "127.129332", + "stop_type": "일반차로", + "node_id": "123000235", + "nxtStn": "가락동미륭아파트" + }, + { + "stop_nm": "문정래미안현대아파트앞", + "ycode": "37.491672", + "stop_no": "24326", + "xcode": "127.128978", + "stop_type": "일반차로", + "node_id": "123000236", + "nxtStn": "문정동대우아파트" + }, + { + "stop_nm": "문정현대아파트", + "ycode": "37.4906606253", + "stop_no": "24327", + "xcode": "127.1276179735", + "stop_type": "일반차로", + "node_id": "123000237", + "nxtStn": "가윤예식장" + }, + { + "stop_nm": "문정동현대아파트", + "ycode": "37.490326319", + "stop_no": "24328", + "xcode": "127.127615143", + "stop_type": "일반차로", + "node_id": "123000238", + "nxtStn": "문정중학교후문" + }, + { + "stop_nm": "문정현대아파트", + "ycode": "37.492752", + "stop_no": "24329", + "xcode": "127.128952", + "stop_type": "일반차로", + "node_id": "123000239", + "nxtStn": "문정래미안현대아파트앞" + }, + { + "stop_nm": "문정동제일은행앞", + "ycode": "37.4862512301", + "stop_no": "24330", + "xcode": "127.124515454", + "stop_type": "일반차로", + "node_id": "123000240", + "nxtStn": "문정법조단지.건영아파트" + }, + { + "stop_nm": "문정동제일은행", + "ycode": "37.486123", + "stop_no": "24331", + "xcode": "127.124606", + "stop_type": "일반차로", + "node_id": "123000241", + "nxtStn": "문정대우아파트" + }, + { + "stop_nm": "삼성래미안아파트후문", + "ycode": "37.48921", + "stop_no": "24332", + "xcode": "127.131877", + "stop_type": "일반차로", + "node_id": "123000242", + "nxtStn": "문정동대우아파트" + }, + { + "stop_nm": "문정2동주민센터.청소년수련관", + "ycode": "37.490476805", + "stop_no": "24333", + "xcode": "127.1125408941", + "stop_type": "일반차로", + "node_id": "123000243", + "nxtStn": "훼미리근린공원" + }, + { + "stop_nm": "훼미리근린공원", + "ycode": "37.4911854953", + "stop_no": "24334", + "xcode": "127.114910023", + "stop_type": "일반차로", + "node_id": "123000244", + "nxtStn": "문정로데오거리입구" + }, + { + "stop_nm": "문정로데오거리입구", + "ycode": "37.491027", + "stop_no": "24335", + "xcode": "127.11942", + "stop_type": "가로변전일", + "node_id": "123000245", + "nxtStn": "장지역" + }, + { + "stop_nm": "포레나송파정문", + "ycode": "37.487072", + "stop_no": "24336", + "xcode": "127.148588", + "stop_type": "일반차로", + "node_id": "123000673", + "nxtStn": "위례포레샤인18단지" + }, + { + "stop_nm": "서울위례별초교", + "ycode": "37.478319", + "stop_no": "24337", + "xcode": "127.143837", + "stop_type": "일반차로", + "node_id": "123000637", + "nxtStn": "송파더센트레.송례초앞" + }, + { + "stop_nm": "오금역2번출구", + "ycode": "37.5018326648", + "stop_no": "24338", + "xcode": "127.1287989134", + "stop_type": "일반차로", + "node_id": "123000634", + "nxtStn": "오금공원사거리" + }, + { + "stop_nm": "오금역3번출구", + "ycode": "37.501292", + "stop_no": "24339", + "xcode": "127.128894", + "stop_type": "일반차로", + "node_id": "123000635", + "nxtStn": "우창아파트" + }, + { + "stop_nm": "장지동", + "ycode": "37.4691472156", + "stop_no": "24340", + "xcode": "127.1263366558", + "stop_type": "일반차로", + "node_id": "123000249", + "nxtStn": "복정동행정복지센터" + }, + { + "stop_nm": "위례포레샤인18단지남문", + "ycode": "37.4869", + "stop_no": "24341", + "xcode": "127.152767", + "stop_type": "일반차로", + "node_id": "123000662", + "nxtStn": "포레나송파" + }, + { + "stop_nm": "힐스테이트센트럴위례", + "ycode": "37.4867831616", + "stop_no": "24342", + "xcode": "127.153320863", + "stop_type": "일반차로", + "node_id": "123000663", + "nxtStn": "비호아파트" + }, + { + "stop_nm": "가윤예식장", + "ycode": "37.4927509283", + "stop_no": "24343", + "xcode": "127.1253325788", + "stop_type": "일반차로", + "node_id": "123000252", + "nxtStn": "경찰병원.서울동부고용노동지청" + }, + { + "stop_nm": "가락동미륭아파트", + "ycode": "37.4926622084", + "stop_no": "24344", + "xcode": "127.1282354597", + "stop_type": "일반차로", + "node_id": "123000253", + "nxtStn": "가윤예식장" + }, + { + "stop_nm": "가락동쌍용아파트", + "ycode": "37.4943836148", + "stop_no": "24345", + "xcode": "127.1304312751", + "stop_type": "일반차로", + "node_id": "123000254", + "nxtStn": "가락동극동아파트" + }, + { + "stop_nm": "송파중학교", + "ycode": "37.4963729647", + "stop_no": "24346", + "xcode": "127.1315012297", + "stop_type": "일반차로", + "node_id": "123000255", + "nxtStn": "문정래미안현대아파트앞" + }, + { + "stop_nm": "개롱역3번출구", + "ycode": "37.49767", + "stop_no": "24348", + "xcode": "127.135372", + "stop_type": "일반차로", + "node_id": "123000257", + "nxtStn": "삼환아파트" + }, + { + "stop_nm": "삼환아파트", + "ycode": "37.496575", + "stop_no": "24349", + "xcode": "127.137465", + "stop_type": "일반차로", + "node_id": "123000258", + "nxtStn": "거여역현대아파트" + }, + { + "stop_nm": "송파배드민턴체육관", + "ycode": "37.494463284", + "stop_no": "24350", + "xcode": "127.1380346597", + "stop_type": "일반차로", + "node_id": "123000259", + "nxtStn": "문정시영.세영청마루아파트" + }, + { + "stop_nm": "문정시영.세영청마루아파트", + "ycode": "37.4924556056", + "stop_no": "24351", + "xcode": "127.1357194046", + "stop_type": "일반차로", + "node_id": "123000260", + "nxtStn": "문정시영가락프라자아파트" + }, + { + "stop_nm": "문정시영가락프라자아파트", + "ycode": "37.4907268695", + "stop_no": "24352", + "xcode": "127.133716891", + "stop_type": "일반차로", + "node_id": "123000261", + "nxtStn": "삼성래미안아파트후문" + }, + { + "stop_nm": "가락2동프라자아파트", + "ycode": "37.493108", + "stop_no": "24353", + "xcode": "127.134058", + "stop_type": "일반차로", + "node_id": "123000262", + "nxtStn": "문정시영.세양청마루아파트" + }, + { + "stop_nm": "가락2동프라자아파트", + "ycode": "37.4930607661", + "stop_no": "24354", + "xcode": "127.1342992774", + "stop_type": "일반차로", + "node_id": "123000263", + "nxtStn": "극동아파트" + }, + { + "stop_nm": "극동아파트", + "ycode": "37.494885", + "stop_no": "24355", + "xcode": "127.132135", + "stop_type": "일반차로", + "node_id": "123000264", + "nxtStn": "가락동극동아파트" + }, + { + "stop_nm": "가락2동극동아파트", + "ycode": "37.4952844366", + "stop_no": "24356", + "xcode": "127.1313314941", + "stop_type": "일반차로", + "node_id": "123000265", + "nxtStn": "가락2동프라자아파트" + }, + { + "stop_nm": "가락동극동아파트", + "ycode": "37.4962572557", + "stop_no": "24357", + "xcode": "127.1318312665", + "stop_type": "일반차로", + "node_id": "123000266", + "nxtStn": "오금공원앞" + }, + { + "stop_nm": "가락동쌍용아파트앞", + "ycode": "37.4939454088", + "stop_no": "24358", + "xcode": "127.1298582661", + "stop_type": "일반차로", + "node_id": "123000267", + "nxtStn": "가락동미륭아파트" + }, + { + "stop_nm": "가주초등학교", + "ycode": "37.4971454197", + "stop_no": "24359", + "xcode": "127.128857243", + "stop_type": "일반차로", + "node_id": "123000268", + "nxtStn": "가락2동극동아파트" + }, + { + "stop_nm": "가동초등학교", + "ycode": "37.497543", + "stop_no": "24360", + "xcode": "127.128657", + "stop_type": "일반차로", + "node_id": "123000269", + "nxtStn": "가락2동주민센터" + }, + { + "stop_nm": "가락2동주민센터", + "ycode": "37.4988632917", + "stop_no": "24361", + "xcode": "127.1268492824", + "stop_type": "일반차로", + "node_id": "123000270", + "nxtStn": "홍이공원" + }, + { + "stop_nm": "가락2동주민센터", + "ycode": "37.4987661196", + "stop_no": "24362", + "xcode": "127.1267122675", + "stop_type": "일반차로", + "node_id": "123000271", + "nxtStn": "가주초등학교" + }, + { + "stop_nm": "가락시장.가락시장역", + "ycode": "37.4944478594", + "stop_no": "24363", + "xcode": "127.1172843207", + "stop_type": "일반차로", + "node_id": "123000272", + "nxtStn": "송파역" + }, + { + "stop_nm": "문정로데오거리입구", + "ycode": "37.4904599734", + "stop_no": "24364", + "xcode": "127.1204716628", + "stop_type": "가로변전일", + "node_id": "123000273", + "nxtStn": "가락시장.가락시장역" + }, + { + "stop_nm": "문정1동주민센터.로데오거리", + "ycode": "37.490657", + "stop_no": "24365", + "xcode": "127.124333", + "stop_type": "일반차로", + "node_id": "123000274", + "nxtStn": "문정로데오거리입구" + }, + { + "stop_nm": "건너말공원입구", + "ycode": "37.4927143163", + "stop_no": "24366", + "xcode": "127.1250181262", + "stop_type": "일반차로", + "node_id": "123000275", + "nxtStn": "문정현대아파트" + }, + { + "stop_nm": "가락대림아파트", + "ycode": "37.4975395069", + "stop_no": "24367", + "xcode": "127.1208958419", + "stop_type": "일반차로", + "node_id": "123000597", + "nxtStn": "경찰병원.KT가락지사" + }, + { + "stop_nm": "샛별어린이공원입구", + "ycode": "37.497584", + "stop_no": "24368", + "xcode": "127.121255", + "stop_type": "일반차로", + "node_id": "123000596", + "nxtStn": "석촌중학교후문" + }, + { + "stop_nm": "송파경찰서.오금역", + "ycode": "37.50267", + "stop_no": "24369", + "xcode": "127.126868", + "stop_type": "일반차로", + "node_id": "123000278", + "nxtStn": "오금역.오금고교" + }, + { + "stop_nm": "가락동쌍용아파트", + "ycode": "37.50252", + "stop_no": "24370", + "xcode": "127.122097", + "stop_type": "일반차로", + "node_id": "123000279", + "nxtStn": "방이역" + }, + { + "stop_nm": "가락대림아파트", + "ycode": "37.499682", + "stop_no": "24371", + "xcode": "127.117985", + "stop_type": "일반차로", + "node_id": "123000280", + "nxtStn": "가락동쌍용아파트" + }, + { + "stop_nm": "신가초등학교", + "ycode": "37.498817", + "stop_no": "24372", + "xcode": "127.120215", + "stop_type": "일반차로", + "node_id": "123000281", + "nxtStn": "성지아파트" + }, + { + "stop_nm": "신가초등학교", + "ycode": "37.498427", + "stop_no": "24373", + "xcode": "127.12017", + "stop_type": "일반차로", + "node_id": "123000282", + "nxtStn": "경찰병원.KT가락지사" + }, + { + "stop_nm": "석촌중학교후문", + "ycode": "37.499832", + "stop_no": "24374", + "xcode": "127.122922", + "stop_type": "일반차로", + "node_id": "123000283", + "nxtStn": "가락대림아파트" + }, + { + "stop_nm": "석촌중학교후문", + "ycode": "37.4998583625", + "stop_no": "24375", + "xcode": "127.123203452", + "stop_type": "일반차로", + "node_id": "123000284", + "nxtStn": "홍이공원" + }, + { + "stop_nm": "포레나송파", + "ycode": "37.484705", + "stop_no": "24376", + "xcode": "127.149252", + "stop_type": "일반차로", + "node_id": "123000664", + "nxtStn": "포레나송파후문" + }, + { + "stop_nm": "경찰병원.KT가락지사", + "ycode": "37.495927", + "stop_no": "24377", + "xcode": "127.122243", + "stop_type": "일반차로", + "node_id": "123000286", + "nxtStn": "건너말공원입구" + }, + { + "stop_nm": "경찰병원.KT가락지사", + "ycode": "37.496234994", + "stop_no": "24378", + "xcode": "127.1223707692", + "stop_type": "일반차로", + "node_id": "123000287", + "nxtStn": "신가초등학교" + }, + { + "stop_nm": "경찰병원.서울동부고용노동지청", + "ycode": "37.494675", + "stop_no": "24379", + "xcode": "127.122337", + "stop_type": "일반차로", + "node_id": "123000288", + "nxtStn": "가락시장역4번출구.제일오피스텔" + }, + { + "stop_nm": "가락시장역4번출구.제일오피스텔", + "ycode": "37.493218", + "stop_no": "24380", + "xcode": "127.119723", + "stop_type": "일반차로", + "node_id": "123000289", + "nxtStn": "가락시장.가락시장역" + }, + { + "stop_nm": "위례호반써밋", + "ycode": "37.484321154", + "stop_no": "24381", + "xcode": "127.14964829", + "stop_type": "일반차로", + "node_id": "123000665", + "nxtStn": "위례호반써밋.힐스테이트센트럴 " + }, + { + "stop_nm": "경찰병원.서울동부고용노동지청", + "ycode": "37.494428", + "stop_no": "24382", + "xcode": "127.12262", + "stop_type": "일반차로", + "node_id": "123000291", + "nxtStn": "건너말공원입구" + }, + { + "stop_nm": "북위례입구", + "ycode": "37.489061871", + "stop_no": "24383", + "xcode": "127.1564418418", + "stop_type": "일반차로", + "node_id": "123000668", + "nxtStn": "위례포레샤인18단지남문" + }, + { + "stop_nm": "위례포레자이", + "ycode": "37.4886660152", + "stop_no": "24384", + "xcode": "127.1567449314", + "stop_type": "일반차로", + "node_id": "123000669", + "nxtStn": "비호아파트" + }, + { + "stop_nm": "가락시장.가락시장역", + "ycode": "37.4937628733", + "stop_no": "24385", + "xcode": "127.1171509252", + "stop_type": "일반차로", + "node_id": "123000294", + "nxtStn": "문정로데오거리입구" + }, + { + "stop_nm": "가락시장.가락몰", + "ycode": "37.491843", + "stop_no": "24386", + "xcode": "127.115874", + "stop_type": "일반차로", + "node_id": "123000295", + "nxtStn": "가락시장남문" + }, + { + "stop_nm": "가락시장남문", + "ycode": "37.490783", + "stop_no": "24387", + "xcode": "127.11225", + "stop_type": "일반차로", + "node_id": "123000296", + "nxtStn": "수서역1번출구" + }, + { + "stop_nm": "가락시장?헬리오시티", + "ycode": "37.494381", + "stop_no": "24388", + "xcode": "127.104966", + "stop_type": "일반차로", + "node_id": "123000297", + "nxtStn": "송파역" + }, + { + "stop_nm": "가락시장.헬리오시티", + "ycode": "37.4951999021", + "stop_no": "24389", + "xcode": "127.1062542896", + "stop_type": "일반차로", + "node_id": "123000298", + "nxtStn": "일원1동주민센터" + }, + { + "stop_nm": "가락1동주민센터", + "ycode": "37.4962977643", + "stop_no": "24390", + "xcode": "127.1098466383", + "stop_type": "일반차로", + "node_id": "123000299", + "nxtStn": "삼성서울병원정문건너편" + }, + { + "stop_nm": "서울방이동고분군", + "ycode": "37.5082096607", + "stop_no": "24391", + "xcode": "127.116198465", + "stop_type": "일반차로", + "node_id": "123000300", + "nxtStn": "방이우체국" + }, + { + "stop_nm": "문정동대우아파트", + "ycode": "37.486665", + "stop_no": "24392", + "xcode": "127.128305", + "stop_type": "일반차로", + "node_id": "123000301", + "nxtStn": "문정동제일은행앞" + }, + { + "stop_nm": "토성오거리", + "ycode": "37.532057", + "stop_no": "24393", + "xcode": "127.119084", + "stop_type": "일반차로", + "node_id": "123000302", + "nxtStn": "풍납2동주민센터" + }, + { + "stop_nm": "풍납토성서성벽", + "ycode": "37.529799", + "stop_no": "24394", + "xcode": "127.109875", + "stop_type": "일반차로", + "node_id": "123000303", + "nxtStn": "서울아산병원동관" + }, + { + "stop_nm": "가락시장동문", + "ycode": "37.495147", + "stop_no": "24395", + "xcode": "127.116007", + "stop_type": "일반차로", + "node_id": "123000609", + "nxtStn": "가락시장역5번출구" + }, + { + "stop_nm": "몽촌토성역.한성백제역", + "ycode": "37.5168773481", + "stop_no": "24396", + "xcode": "127.1134131446", + "stop_type": "일반차로", + "node_id": "123000305", + "nxtStn": "방이중학교" + }, + { + "stop_nm": "풍납동강변현대아파트", + "ycode": "37.533635", + "stop_no": "24397", + "xcode": "127.111217", + "stop_type": "일반차로", + "node_id": "123000306", + "nxtStn": "갑을.미성아파트" + }, + { + "stop_nm": "서울위례별초교.위례별유치원", + "ycode": "37.478031", + "stop_no": "24398", + "xcode": "127.144875", + "stop_type": "일반차로", + "node_id": "123000667", + "nxtStn": "하남시위례도서관.스타필드시티." + }, + { + "stop_nm": "송례중학교.송파꿈에그린", + "ycode": "37.477311", + "stop_no": "24399", + "xcode": "127.141494", + "stop_type": "일반차로", + "node_id": "123000682", + "nxtStn": "송파꿈에그린아파트" + }, + { + "stop_nm": "홍이공원", + "ycode": "37.5002054217", + "stop_no": "24400", + "xcode": "127.1247919705", + "stop_type": "일반차로", + "node_id": "123000309", + "nxtStn": "가락2동주민센터" + }, + { + "stop_nm": "홍이공원", + "ycode": "37.500417", + "stop_no": "24401", + "xcode": "127.124825", + "stop_type": "일반차로", + "node_id": "123000310", + "nxtStn": "석촌중학교후문" + }, + { + "stop_nm": "송파파크센트럴", + "ycode": "37.4926552279", + "stop_no": "24402", + "xcode": "127.1495066063", + "stop_type": "일반차로", + "node_id": "123000311", + "nxtStn": "종점" + }, + { + "stop_nm": "거여역7번출구", + "ycode": "37.4923363183", + "stop_no": "24403", + "xcode": "127.1440062914", + "stop_type": "일반차로", + "node_id": "123000312", + "nxtStn": "체육문화회관" + }, + { + "stop_nm": "거여역6번출구", + "ycode": "37.49196", + "stop_no": "24404", + "xcode": "127.14409", + "stop_type": "일반차로", + "node_id": "123000313", + "nxtStn": "거여역" + }, + { + "stop_nm": "덕수고등학교", + "ycode": "37.485555", + "stop_no": "24405", + "xcode": "127.146229", + "stop_type": "일반차로", + "node_id": "123000678", + "nxtStn": "송파위례리슈빌" + }, + { + "stop_nm": "풍납2동주민센터", + "ycode": "37.5294724466", + "stop_no": "24406", + "xcode": "127.1157437836", + "stop_type": "일반차로", + "node_id": "123000315", + "nxtStn": "토성초등학교.현대리버빌아파트" + }, + { + "stop_nm": "복정역환승센터1번승강장", + "ycode": "37.4701247674", + "stop_no": "24407", + "xcode": "127.1273151082", + "stop_type": "일반차로", + "node_id": "123000316", + "nxtStn": "장지동" + }, + { + "stop_nm": "오륜사거리", + "ycode": "37.505397", + "stop_no": "24408", + "xcode": "127.139223", + "stop_type": "일반차로", + "node_id": "123000317", + "nxtStn": "효죽동입구" + }, + { + "stop_nm": "오륜사거리", + "ycode": "37.5062520048", + "stop_no": "24409", + "xcode": "127.1392429305", + "stop_type": "일반차로", + "node_id": "123000318", + "nxtStn": "거여초등학교" + }, + { + "stop_nm": "위례중앙푸르지오.신안인스빌", + "ycode": "37.474841", + "stop_no": "24410", + "xcode": "127.143303", + "stop_type": "일반차로", + "node_id": "123000613", + "nxtStn": "위례35단지아파트" + }, + { + "stop_nm": "위례신안인스빌.중앙푸르지오", + "ycode": "37.475712", + "stop_no": "24411", + "xcode": "127.143922", + "stop_type": "일반차로", + "node_id": "123000624", + "nxtStn": "송파와이즈더샵.엠코타운센트로엘" + }, + { + "stop_nm": "송파와이즈더샵.엠코타운센트로엘", + "ycode": "37.4772256941", + "stop_no": "24412", + "xcode": "127.1440332271", + "stop_type": "일반차로", + "node_id": "123000615", + "nxtStn": "위례중앙푸르지오.신안인스빌" + }, + { + "stop_nm": "송파와이즈더샵.엠코타운센트로엘", + "ycode": "37.477613", + "stop_no": "24413", + "xcode": "127.144389", + "stop_type": "일반차로", + "node_id": "123000614", + "nxtStn": "위례별초등학교.위례스타힐스" + }, + { + "stop_nm": "위례별초등학교.위례2차아이파크", + "ycode": "37.479538", + "stop_no": "24414", + "xcode": "127.144235", + "stop_type": "일반차로", + "node_id": "123000617", + "nxtStn": "송파와이즈더샵.엠코타운센트로엘" + }, + { + "stop_nm": "위례별초등학교.위례스타힐스", + "ycode": "37.480338", + "stop_no": "24415", + "xcode": "127.144559", + "stop_type": "일반차로", + "node_id": "123000616", + "nxtStn": "위례동주민센터.위례송파푸르지오" + }, + { + "stop_nm": "위례동주민센터.위례스타힐스", + "ycode": "37.4812781589", + "stop_no": "24416", + "xcode": "127.1436199149", + "stop_type": "일반차로", + "node_id": "123000618", + "nxtStn": "송례중학교.송파꿈에그린" + }, + { + "stop_nm": "위례동주민센터.위례송파푸르지오", + "ycode": "37.48157", + "stop_no": "24417", + "xcode": "127.142872", + "stop_type": "일반차로", + "node_id": "123000619", + "nxtStn": "송파더센트레.힐스테이트송파" + }, + { + "stop_nm": "힐스테이트송파.송파더센트레", + "ycode": "37.4794843685", + "stop_no": "24418", + "xcode": "127.1419922382", + "stop_type": "일반차로", + "node_id": "123000620", + "nxtStn": "위례동주민센터.위례스타힐스" + }, + { + "stop_nm": "송파더센트레.힐스테이트송파", + "ycode": "37.479448", + "stop_no": "24419", + "xcode": "127.141643", + "stop_type": "일반차로", + "node_id": "123000622", + "nxtStn": "송례중학교.송파꿈에그린" + }, + { + "stop_nm": "복정역2번출구", + "ycode": "37.4692838154", + "stop_no": "24420", + "xcode": "127.1268694814", + "stop_type": "일반차로", + "node_id": "123000329", + "nxtStn": "복정역1번출구" + }, + { + "stop_nm": "세계로병원", + "ycode": "37.486552", + "stop_no": "24421", + "xcode": "127.141844", + "stop_type": "일반차로", + "node_id": "123000650", + "nxtStn": "거여아파트단지앞" + }, + { + "stop_nm": "세계로병원", + "ycode": "37.487287", + "stop_no": "24422", + "xcode": "127.141787", + "stop_type": "일반차로", + "node_id": "123000651", + "nxtStn": "송파레이크파크호반써밋1차" + }, + { + "stop_nm": "덕수고등학교", + "ycode": "37.485431", + "stop_no": "24423", + "xcode": "127.146291", + "stop_type": "일반차로", + "node_id": "123000679", + "nxtStn": "포레나송파정문" + }, + { + "stop_nm": "송파레이크파크호반써밋1차", + "ycode": "37.483895", + "stop_no": "24424", + "xcode": "127.140419", + "stop_type": "일반차로", + "node_id": "123000655", + "nxtStn": "위례송파푸르지오.송파더센트레" + }, + { + "stop_nm": "송파레이크파크호반써밋2차", + "ycode": "37.483469", + "stop_no": "24425", + "xcode": "127.140616", + "stop_type": "일반차로", + "node_id": "123000656", + "nxtStn": "세계로병원" + }, + { + "stop_nm": "위례포레샤인13단지", + "ycode": "37.482961", + "stop_no": "24426", + "xcode": "127.13867", + "stop_type": "일반차로", + "node_id": "123000658", + "nxtStn": "송파레이크파크호반써밋2차" + }, + { + "stop_nm": "송파레이크파크호반써밋1차정문", + "ycode": "37.483192", + "stop_no": "24427", + "xcode": "127.138072", + "stop_type": "일반차로", + "node_id": "123000657", + "nxtStn": "위례포레샤인13단지공원" + }, + { + "stop_nm": "송파위례리슈빌", + "ycode": "37.484189", + "stop_no": "24428", + "xcode": "127.147845", + "stop_type": "일반차로", + "node_id": "123000681", + "nxtStn": "하남시위례도서관.스타필드시티." + }, + { + "stop_nm": "남한산성입구", + "ycode": "37.49096", + "stop_no": "24429", + "xcode": "127.157278", + "stop_type": "일반차로", + "node_id": "123000337", + "nxtStn": "송파구립마천청소년센터" + }, + { + "stop_nm": "서울아산병원장례식장", + "ycode": "37.524639581", + "stop_no": "24430", + "xcode": "127.1074534384", + "stop_type": "일반차로", + "node_id": "123000338", + "nxtStn": "풍납중학교" + }, + { + "stop_nm": "갑을.미성아파트", + "ycode": "37.535297", + "stop_no": "24431", + "xcode": "127.11248", + "stop_type": "일반차로", + "node_id": "123000339", + "nxtStn": "풍납1동동아한가람아파트" + }, + { + "stop_nm": "송파배드민턴체육관", + "ycode": "37.494207337", + "stop_no": "24432", + "xcode": "127.1380635927", + "stop_type": "일반차로", + "node_id": "123000340", + "nxtStn": "보인고교.오금동삼성아파트" + }, + { + "stop_nm": "위례31단지정문", + "ycode": "37.4734882637", + "stop_no": "24433", + "xcode": "127.1327885717", + "stop_type": "일반차로", + "node_id": "123000644", + "nxtStn": "위례31단지.위례포레샤인후문" + }, + { + "stop_nm": "풍납중학교앞", + "ycode": "37.5247728207", + "stop_no": "24434", + "xcode": "127.1152307919", + "stop_type": "일반차로", + "node_id": "123000342", + "nxtStn": "풍성중학교.잠실올림픽아이파크" + }, + { + "stop_nm": "복정역3번출구", + "ycode": "37.469732", + "stop_no": "24435", + "xcode": "127.123962", + "stop_type": "일반차로", + "node_id": "123000343", + "nxtStn": "삼일자동차학원.강남자동차검사소" + }, + { + "stop_nm": "새마을시장", + "ycode": "37.508856", + "stop_no": "24436", + "xcode": "127.086736", + "stop_type": "일반차로", + "node_id": "123000344", + "nxtStn": "잠실트리지움" + }, + { + "stop_nm": "잠실트리지움", + "ycode": "37.5075860124", + "stop_no": "24437", + "xcode": "127.0893716473", + "stop_type": "일반차로", + "node_id": "123000345", + "nxtStn": "잠실119안전센터" + }, + { + "stop_nm": "삼전역.잠실현대아파트", + "ycode": "37.503762", + "stop_no": "24438", + "xcode": "127.087268", + "stop_type": "일반차로", + "node_id": "123000346", + "nxtStn": "수서역" + }, + { + "stop_nm": "위례포레샤인.위례31단지후문", + "ycode": "37.474853", + "stop_no": "24439", + "xcode": "127.133969", + "stop_type": "일반차로", + "node_id": "123000630", + "nxtStn": "장지역2번출구" + }, + { + "stop_nm": "위례31단지.위례포레샤인후문", + "ycode": "37.47465", + "stop_no": "24440", + "xcode": "127.133738", + "stop_type": "일반차로", + "node_id": "123000631", + "nxtStn": "위례아이파크아파트앞" + }, + { + "stop_nm": "위례송파더센트레.송파푸르지오", + "ycode": "37.479472", + "stop_no": "24441", + "xcode": "127.138469", + "stop_type": "일반차로", + "node_id": "123000638", + "nxtStn": "송파레이크파크호반써밋2차" + }, + { + "stop_nm": "장지역2번출구", + "ycode": "37.478273", + "stop_no": "24442", + "xcode": "127.126673", + "stop_type": "일반차로", + "node_id": "123000639", + "nxtStn": "송파푸르지오시티.한화오벨리스크" + }, + { + "stop_nm": "위례송파푸르지오.송파더센트레", + "ycode": "37.4807433226", + "stop_no": "24443", + "xcode": "127.1388560718", + "stop_type": "일반차로", + "node_id": "123000636", + "nxtStn": "위례포레샤인.송파꿈에그린서문" + }, + { + "stop_nm": "가락시장역5번출구", + "ycode": "37.492673", + "stop_no": "24444", + "xcode": "127.119535", + "stop_type": "일반차로", + "node_id": "123000352", + "nxtStn": "경찰병원.서울동부고용노동지청" + }, + { + "stop_nm": "올림픽대교남단교차로", + "ycode": "37.525152", + "stop_no": "24445", + "xcode": "127.11681", + "stop_type": "일반차로", + "node_id": "123000353", + "nxtStn": "풍납중학교앞" + }, + { + "stop_nm": "장지공영차고지", + "ycode": "37.480507", + "stop_no": "24446", + "xcode": "127.135886", + "stop_type": "일반차로", + "node_id": "123000354", + "nxtStn": "아이코리아" + }, + { + "stop_nm": "장지공영차고지", + "ycode": "37.480562", + "stop_no": "24447", + "xcode": "127.135645", + "stop_type": "일반차로", + "node_id": "123000355", + "nxtStn": "서울버스종점" + }, + { + "stop_nm": "아이코리아", + "ycode": "37.480972", + "stop_no": "24448", + "xcode": "127.1334", + "stop_type": "일반차로", + "node_id": "123000356", + "nxtStn": "송파글마루도서관.버들어린이집" + }, + { + "stop_nm": "송파파인타운11단지", + "ycode": "37.479127", + "stop_no": "24449", + "xcode": "127.132114", + "stop_type": "일반차로", + "node_id": "123000357", + "nxtStn": "아이코리아앞" + }, + { + "stop_nm": "송파파인타운7단지", + "ycode": "37.479031", + "stop_no": "24450", + "xcode": "127.131653", + "stop_type": "일반차로", + "node_id": "123000602", + "nxtStn": "송파파인타운8단지.9단지" + }, + { + "stop_nm": "송파파인타운10단지.13단지", + "ycode": "37.477599", + "stop_no": "24451", + "xcode": "127.129235", + "stop_type": "일반차로", + "node_id": "123000359", + "nxtStn": "송파파인타운11단지" + }, + { + "stop_nm": "송파파인타운8단지.9단지", + "ycode": "37.4780867697", + "stop_no": "24452", + "xcode": "127.1274733427", + "stop_type": "일반차로", + "node_id": "123000360", + "nxtStn": "문현중학교" + }, + { + "stop_nm": "송파구립산모건강증진센터", + "ycode": "37.477983", + "stop_no": "24453", + "xcode": "127.12731", + "stop_type": "일반차로", + "node_id": "123000361", + "nxtStn": "송파파인타운아파트11단지" + }, + { + "stop_nm": "장지동주민센터앞", + "ycode": "37.486694466", + "stop_no": "24454", + "xcode": "127.132886471", + "stop_type": "일반차로", + "node_id": "123000362", + "nxtStn": "한림연예예술고교" + }, + { + "stop_nm": "장지동주민센터.송파파인타운1단지", + "ycode": "37.486505", + "stop_no": "24455", + "xcode": "127.132993", + "stop_type": "일반차로", + "node_id": "123000363", + "nxtStn": "송파파인타운2단지.구립송파복지센터" + }, + { + "stop_nm": "잠실여고후문", + "ycode": "37.5025010936", + "stop_no": "24456", + "xcode": "127.1116190362", + "stop_type": "일반차로", + "node_id": "123000364", + "nxtStn": "석촌역" + }, + { + "stop_nm": "건영아파트앞", + "ycode": "37.481838", + "stop_no": "24457", + "xcode": "127.126489", + "stop_type": "일반차로", + "node_id": "123000365", + "nxtStn": "문현중학교" + }, + { + "stop_nm": "잠실새내역앞", + "ycode": "37.5104224501", + "stop_no": "24458", + "xcode": "127.0860380725", + "stop_type": "일반차로", + "node_id": "123000366", + "nxtStn": "잠실엘스아파트앞" + }, + { + "stop_nm": "가락래미안앞", + "ycode": "37.499257", + "stop_no": "24459", + "xcode": "127.132413", + "stop_type": "일반차로", + "node_id": "123000367", + "nxtStn": "개롱역3번출구" + }, + { + "stop_nm": "서울버스종점", + "ycode": "37.4806082049", + "stop_no": "24460", + "xcode": "127.1369279275", + "stop_type": "일반차로", + "node_id": "123000586", + "nxtStn": "장지공영차고지" + }, + { + "stop_nm": "서울버스종점", + "ycode": "37.48038", + "stop_no": "24461", + "xcode": "127.137777", + "stop_type": "일반차로", + "node_id": "123000585", + "nxtStn": "종점" + }, + { + "stop_nm": "송파파인타운2단지.구립송파복지센터", + "ycode": "37.485133", + "stop_no": "24462", + "xcode": "127.132647", + "stop_type": "일반차로", + "node_id": "123000370", + "nxtStn": "송파파인타운2단지" + }, + { + "stop_nm": "송파파인타운3단지.한림예고", + "ycode": "37.484968", + "stop_no": "24463", + "xcode": "127.132797", + "stop_type": "일반차로", + "node_id": "123000371", + "nxtStn": "송파파인타운1단지" + }, + { + "stop_nm": "송파글마루도서관.버들어린이집", + "ycode": "37.481607", + "stop_no": "24464", + "xcode": "127.131555", + "stop_type": "일반차로", + "node_id": "123000372", + "nxtStn": "송파파인타운3단지.한림예고" + }, + { + "stop_nm": "송파글마루도서관.버들어린이집", + "ycode": "37.481598", + "stop_no": "24465", + "xcode": "127.131337", + "stop_type": "일반차로", + "node_id": "123000373", + "nxtStn": "아이코리아앞" + }, + { + "stop_nm": "문현고등학교.송파파인타운5단지", + "ycode": "37.480632", + "stop_no": "24466", + "xcode": "127.129475", + "stop_type": "일반차로", + "node_id": "123000374", + "nxtStn": "송파파인타운3단지" + }, + { + "stop_nm": "문현고등학교", + "ycode": "37.4807091324", + "stop_no": "24467", + "xcode": "127.1292061629", + "stop_type": "일반차로", + "node_id": "123000375", + "nxtStn": "장지역가든파이브라이프동" + }, + { + "stop_nm": "풍납현대아파트", + "ycode": "37.5287587812", + "stop_no": "24468", + "xcode": "127.1193610526", + "stop_type": "가로변시간", + "node_id": "123000376", + "nxtStn": "풍납동극동.쌍용아파트" + }, + { + "stop_nm": "문정3차푸르지오아파트.송파파인타운1단지", + "ycode": "37.4866738525", + "stop_no": "24469", + "xcode": "127.1335864078", + "stop_type": "일반차로", + "node_id": "123000377", + "nxtStn": "문정동래미안아파트남문" + }, + { + "stop_nm": "문정3차푸르지오아파트.송파파인타운1단지", + "ycode": "37.4864839486", + "stop_no": "24470", + "xcode": "127.1333836546", + "stop_type": "일반차로", + "node_id": "123000378", + "nxtStn": "송파파인타운2단지.구립송파복지센터" + }, + { + "stop_nm": "아이코리아앞", + "ycode": "37.48096", + "stop_no": "24471", + "xcode": "127.13364", + "stop_type": "일반차로", + "node_id": "123000379", + "nxtStn": "장지공영차고지" + }, + { + "stop_nm": "가든파이브.웍스동", + "ycode": "37.478215", + "stop_no": "24472", + "xcode": "127.121195", + "stop_type": "일반차로", + "node_id": "123000380", + "nxtStn": "장지역가든파이브라이프동" + }, + { + "stop_nm": "가든파이브.웍스동", + "ycode": "37.4782546079", + "stop_no": "24473", + "xcode": "127.1212593757", + "stop_type": "일반차로", + "node_id": "123000381", + "nxtStn": "가든파이프툴동" + }, + { + "stop_nm": "위례31단지정문", + "ycode": "37.4725899491", + "stop_no": "24474", + "xcode": "127.132278952", + "stop_type": "일반차로", + "node_id": "123000645", + "nxtStn": "위례중앙초등학교" + }, + { + "stop_nm": "장지역가든파이브라이프동", + "ycode": "37.479072", + "stop_no": "24475", + "xcode": "127.124615", + "stop_type": "일반차로", + "node_id": "123000382", + "nxtStn": "송파파크하비오푸르지오" + }, + { + "stop_nm": "장지역가든파이브라이프동", + "ycode": "37.4789275658", + "stop_no": "24476", + "xcode": "127.1249012174", + "stop_type": "일반차로", + "node_id": "123000383", + "nxtStn": "문현고등학교.송파파인타운5단지" + }, + { + "stop_nm": "가든파이프툴동", + "ycode": "37.4791477338", + "stop_no": "24477", + "xcode": "127.1193612432", + "stop_type": "일반차로", + "node_id": "123000384", + "nxtStn": "강남한양수자인아파트" + }, + { + "stop_nm": "가든파이브툴동", + "ycode": "37.478998", + "stop_no": "24478", + "xcode": "127.119308", + "stop_type": "일반차로", + "node_id": "123000385", + "nxtStn": "가든파이브.웍스동" + }, + { + "stop_nm": "잠실대교전망쉼터", + "ycode": "37.5201071463", + "stop_no": "24479", + "xcode": "127.0951336442", + "stop_type": "일반차로", + "node_id": "123000507", + "nxtStn": "자양동잠실대교북단" + }, + { + "stop_nm": "잠실대교전망쉼터", + "ycode": "37.519993", + "stop_no": "24480", + "xcode": "127.09479", + "stop_type": "일반차로", + "node_id": "123000508", + "nxtStn": "잠실역.잠실대교남단" + }, + { + "stop_nm": "석촌호수서호사거리", + "ycode": "37.506324", + "stop_no": "24481", + "xcode": "127.098408", + "stop_type": "일반차로", + "node_id": "123000522", + "nxtStn": "미켈란호수가아파트" + }, + { + "stop_nm": "석촌호수서호사거리", + "ycode": "37.5065890171", + "stop_no": "24482", + "xcode": "127.099235139", + "stop_type": "일반차로", + "node_id": "123000521", + "nxtStn": "잠실119안전센터" + }, + { + "stop_nm": "미켈란호수가아파트", + "ycode": "37.5076563193", + "stop_no": "24483", + "xcode": "127.1026500655", + "stop_type": "일반차로", + "node_id": "123000520", + "nxtStn": "호수임광아파트" + }, + { + "stop_nm": "미켈란호수가아파트", + "ycode": "37.5081977473", + "stop_no": "24484", + "xcode": "127.1031124564", + "stop_type": "일반차로", + "node_id": "123000519", + "nxtStn": "석촌호수서호사거리" + }, + { + "stop_nm": "호수임광아파트", + "ycode": "37.5106263397", + "stop_no": "24485", + "xcode": "127.1067263617", + "stop_type": "일반차로", + "node_id": "123000518", + "nxtStn": "송파구청.방이맛골" + }, + { + "stop_nm": "호수임광아파트", + "ycode": "37.5113882396", + "stop_no": "24486", + "xcode": "127.1072025448", + "stop_type": "일반차로", + "node_id": "123000517", + "nxtStn": "미켈란호수가아파트" + }, + { + "stop_nm": "송파파인타운아파트11단지", + "ycode": "37.478367", + "stop_no": "24487", + "xcode": "127.133242", + "stop_type": "일반차로", + "node_id": "123000542", + "nxtStn": "장지공영차고지" + }, + { + "stop_nm": "송파파인타운아파트11단지", + "ycode": "37.478458", + "stop_no": "24488", + "xcode": "127.133178", + "stop_type": "일반차로", + "node_id": "123000541", + "nxtStn": "송파파인타운8단지.9단지" + }, + { + "stop_nm": "문정중학교후문", + "ycode": "37.488649", + "stop_no": "24489", + "xcode": "127.130275", + "stop_type": "일반차로", + "node_id": "123000583", + "nxtStn": "문정3차푸르지오아파트.송파파인타운1단지" + }, + { + "stop_nm": "문정동래미안아파트남문", + "ycode": "37.488828", + "stop_no": "24490", + "xcode": "127.130442", + "stop_type": "일반차로", + "node_id": "123000582", + "nxtStn": "문정현대아파트" + }, + { + "stop_nm": "파크데일아파트입구", + "ycode": "37.497538", + "stop_no": "24491", + "xcode": "127.154895", + "stop_type": "일반차로", + "node_id": "123000567", + "nxtStn": "파크데일아파트2단지앞" + }, + { + "stop_nm": "위례아이파크아파트앞", + "ycode": "37.4758687793", + "stop_no": "24492", + "xcode": "127.1411478405", + "stop_type": "일반차로", + "node_id": "123000576", + "nxtStn": "송례중학교.위례아이파크" + }, + { + "stop_nm": "송파더센트레.송례초앞", + "ycode": "37.478535", + "stop_no": "24493", + "xcode": "127.139157", + "stop_type": "일반차로", + "node_id": "123000574", + "nxtStn": "위례포레샤인.송파꿈에그린서문" + }, + { + "stop_nm": "송파더센트레.송례중앞", + "ycode": "37.4782159275", + "stop_no": "24494", + "xcode": "127.1407082374", + "stop_type": "일반차로", + "node_id": "123000573", + "nxtStn": "송파와이즈더샵.엠코타운센트로엘" + }, + { + "stop_nm": "송파꿈에그린아파트", + "ycode": "37.4749448409", + "stop_no": "24495", + "xcode": "127.1407699426", + "stop_type": "일반차로", + "node_id": "123000575", + "nxtStn": "위례포레샤인.위례31단지후문" + }, + { + "stop_nm": "송파푸르지오시티.한화오벨리스크", + "ycode": "37.481026", + "stop_no": "24496", + "xcode": "127.120178", + "stop_type": "일반차로", + "node_id": "123000578", + "nxtStn": "세곡2지구3.4단지" + }, + { + "stop_nm": "송파푸르지오시티.한화오벨리스크", + "ycode": "37.480797", + "stop_no": "24497", + "xcode": "127.120387", + "stop_type": "일반차로", + "node_id": "123000577", + "nxtStn": "장지역" + }, + { + "stop_nm": "파크데일아파트입구", + "ycode": "37.4977775358", + "stop_no": "24498", + "xcode": "127.1547623047", + "stop_type": "일반차로", + "node_id": "123000580", + "nxtStn": "남천초교마천동우방아파트앞" + }, + { + "stop_nm": "복정역", + "ycode": "37.4700651629", + "stop_no": "24499", + "xcode": "127.1257548303", + "stop_type": "일반차로", + "node_id": "123000319", + "nxtStn": "장지동" + }, + { + "stop_nm": "복정역환승센터2번승강장", + "ycode": "37.469827", + "stop_no": "24500", + "xcode": "127.12741", + "stop_type": "일반차로", + "node_id": "123000659", + "nxtStn": "위례31단지.위례포레샤인후문" + }, + { + "stop_nm": "송파.잠실세무서", + "ycode": "37.5267839464", + "stop_no": "24502", + "xcode": "127.1153594729", + "stop_type": "마을버스", + "node_id": "123900006", + "nxtStn": "강변역.테크노마트앞" + }, + { + "stop_nm": "복정역환승센터3번승강장", + "ycode": "37.4699297672", + "stop_no": "24503", + "xcode": "127.1275897549", + "stop_type": "일반차로", + "node_id": "123000660", + "nxtStn": "장지역.가든파이브" + }, + { + "stop_nm": "풍납동극동.쌍용아파트", + "ycode": "37.5263988605", + "stop_no": "24504", + "xcode": "127.1184114313", + "stop_type": "마을버스", + "node_id": "123900003", + "nxtStn": "강동구청역농협중앙회" + }, + { + "stop_nm": "송파역", + "ycode": "37.4998736805", + "stop_no": "24505", + "xcode": "127.1123582001", + "stop_type": "마을버스", + "node_id": "123900002", + "nxtStn": "석촌역.잠실한솔아파트" + }, + { + "stop_nm": "복정역환승센터4번승강장", + "ycode": "37.469822", + "stop_no": "24506", + "xcode": "127.12764", + "stop_type": "일반차로", + "node_id": "123000661", + "nxtStn": "위례서일로마을입구" + }, + { + "stop_nm": "송파역.헬리오시티", + "ycode": "37.499696", + "stop_no": "24508", + "xcode": "127.11185", + "stop_type": "마을버스", + "node_id": "123900001", + "nxtStn": "가락시장.가락시장역" + }, + { + "stop_nm": "송례중학교.위례아이파크", + "ycode": "37.477692", + "stop_no": "24509", + "xcode": "127.141823", + "stop_type": "일반차로", + "node_id": "123000683", + "nxtStn": "힐스테이트송파.송파더센트레" + }, + { + "stop_nm": "잠실4동주민센터.파크리오B상가", + "ycode": "37.520113", + "stop_no": "24510", + "xcode": "127.113228", + "stop_type": "일반차로", + "node_id": "123000610", + "nxtStn": "잠실파크리오아파트앞" + }, + { + "stop_nm": "송파호반베르디움더퍼스트", + "ycode": "37.50685", + "stop_no": "24511", + "xcode": "127.140918", + "stop_type": "마을버스", + "node_id": "123900007", + "nxtStn": "오륜사거리" + }, + { + "stop_nm": "오륜사거리", + "ycode": "37.507604", + "stop_no": "24512", + "xcode": "127.139031", + "stop_type": "마을버스", + "node_id": "123900008", + "nxtStn": "송파레미니스아파트" + }, + { + "stop_nm": "세륜중학교", + "ycode": "37.5077220872", + "stop_no": "24513", + "xcode": "127.1327576434", + "stop_type": "마을버스", + "node_id": "123900009", + "nxtStn": "오금공원" + }, + { + "stop_nm": "오금공원", + "ycode": "37.506373", + "stop_no": "24514", + "xcode": "127.131895", + "stop_type": "마을버스", + "node_id": "123900010", + "nxtStn": "오금역.오금고교" + }, + { + "stop_nm": "오금역.오금고교", + "ycode": "37.5029792202", + "stop_no": "24515", + "xcode": "127.1288164094", + "stop_type": "마을버스", + "node_id": "123900011", + "nxtStn": "오금역.오금동현대아파트" + }, + { + "stop_nm": "송파삼성래미안아파트", + "ycode": "37.504681", + "stop_no": "24516", + "xcode": "127.119976", + "stop_type": "마을버스", + "node_id": "123900012", + "nxtStn": "송파현대아파트.가락중학교" + }, + { + "stop_nm": "송파현대아파트.가락중학교", + "ycode": "37.502994", + "stop_no": "24517", + "xcode": "127.118207", + "stop_type": "마을버스", + "node_id": "123900013", + "nxtStn": "가락고등학교" + }, + { + "stop_nm": "가락고등학교", + "ycode": "37.5016205862", + "stop_no": "24518", + "xcode": "127.1173359596", + "stop_type": "마을버스", + "node_id": "123900014", + "nxtStn": "성지아파트" + }, + { + "stop_nm": "가락동부센트레빌아파트", + "ycode": "37.499294", + "stop_no": "24519", + "xcode": "127.117396", + "stop_type": "마을버스", + "node_id": "123900015", + "nxtStn": "가락중학교" + }, + { + "stop_nm": "가락중학교", + "ycode": "37.502089", + "stop_no": "24520", + "xcode": "127.117415", + "stop_type": "마을버스", + "node_id": "123900016", + "nxtStn": "가락중학교.래미안송파파인탑" + }, + { + "stop_nm": "가락중학교.래미안송파파인탑", + "ycode": "37.503047", + "stop_no": "24521", + "xcode": "127.118549", + "stop_type": "마을버스", + "node_id": "123900017", + "nxtStn": "가락삼익맨숀" + }, + { + "stop_nm": "가락삼익맨숀", + "ycode": "37.505321", + "stop_no": "24522", + "xcode": "127.120767", + "stop_type": "마을버스", + "node_id": "123900018", + "nxtStn": "송파경찰서.오금역" + }, + { + "stop_nm": "오금역.오금고교", + "ycode": "37.502638", + "stop_no": "24523", + "xcode": "127.129057", + "stop_type": "마을버스", + "node_id": "123900019", + "nxtStn": "오금공원" + }, + { + "stop_nm": "오금공원", + "ycode": "37.5053272821", + "stop_no": "24524", + "xcode": "127.1316690127", + "stop_type": "마을버스", + "node_id": "123900020", + "nxtStn": "세륜중학교" + }, + { + "stop_nm": "세륜중학교", + "ycode": "37.5069661108", + "stop_no": "24525", + "xcode": "127.1327475445", + "stop_type": "마을버스", + "node_id": "123900021", + "nxtStn": "송파레미니스아파트" + }, + { + "stop_nm": "송파호반베르디움더퍼스트", + "ycode": "37.506608", + "stop_no": "24526", + "xcode": "127.140875", + "stop_type": "마을버스", + "node_id": "123900022", + "nxtStn": "종점" + }, + { + "stop_nm": "송파파인타운1단지", + "ycode": "37.485924", + "stop_no": "24527", + "xcode": "127.133556", + "stop_type": "마을버스", + "node_id": "123900023", + "nxtStn": "송파파인타운2단지.구립송파복지센터" + }, + { + "stop_nm": "송파파인타운2단지", + "ycode": "37.483166", + "stop_no": "24528", + "xcode": "127.131225", + "stop_type": "마을버스", + "node_id": "123900024", + "nxtStn": "문현고등학교" + }, + { + "stop_nm": "송파파크하비오푸르지오", + "ycode": "37.481234", + "stop_no": "24529", + "xcode": "127.12215", + "stop_type": "마을버스", + "node_id": "123900025", + "nxtStn": "서울동부지방법원.검찰청" + }, + { + "stop_nm": "서울동부지방법원.검찰청", + "ycode": "37.48351", + "stop_no": "24530", + "xcode": "127.120922", + "stop_type": "마을버스", + "node_id": "123900026", + "nxtStn": "문정역테라타워" + }, + { + "stop_nm": "문정법조단지", + "ycode": "37.4857979941", + "stop_no": "24531", + "xcode": "127.117764345", + "stop_type": "마을버스", + "node_id": "123900028", + "nxtStn": "서울한방병원" + }, + { + "stop_nm": "올림픽훼밀리타운아파트", + "ycode": "37.486399", + "stop_no": "24532", + "xcode": "127.114338", + "stop_type": "마을버스", + "node_id": "123900029", + "nxtStn": "가원초등학교" + }, + { + "stop_nm": "올림픽훼밀리타운아파트", + "ycode": "37.48618", + "stop_no": "24533", + "xcode": "127.11431", + "stop_type": "마을버스", + "node_id": "123900030", + "nxtStn": "힐스테이트에코송파" + }, + { + "stop_nm": "문정법조단지", + "ycode": "37.485463", + "stop_no": "24534", + "xcode": "127.117208", + "stop_type": "마을버스", + "node_id": "123900031", + "nxtStn": "문정현대지식산업센터" + }, + { + "stop_nm": "서울동부지방법원.검찰청", + "ycode": "37.483932", + "stop_no": "24535", + "xcode": "127.120423", + "stop_type": "마을버스", + "node_id": "123900032", + "nxtStn": "송파아이파크오피스텔" + }, + { + "stop_nm": "송파아이파크오피스텔", + "ycode": "37.480133", + "stop_no": "24536", + "xcode": "127.122354", + "stop_type": "마을버스", + "node_id": "123900033", + "nxtStn": "장지역가든파이브라이프동" + }, + { + "stop_nm": "송파파인타운3단지", + "ycode": "37.4834326172", + "stop_no": "24537", + "xcode": "127.1316666363", + "stop_type": "마을버스", + "node_id": "123900034", + "nxtStn": "송파파인타운3단지.한림예고" + }, + { + "stop_nm": "송파파인타운1단지", + "ycode": "37.485657", + "stop_no": "24538", + "xcode": "127.133627", + "stop_type": "마을버스", + "node_id": "123900035", + "nxtStn": "송파레이크파크호반써밋1차후문" + }, + { + "stop_nm": "석촌역4번출구", + "ycode": "37.504497", + "stop_no": "24540", + "xcode": "127.108209", + "stop_type": "마을버스", + "node_id": "123900036", + "nxtStn": "잠실역9번출구" + }, + { + "stop_nm": "잠실역.롯데호텔", + "ycode": "37.511745", + "stop_no": "24542", + "xcode": "127.100995", + "stop_type": "마을버스", + "node_id": "123900038", + "nxtStn": "석촌역5번출구" + }, + { + "stop_nm": "석촌역5번출구", + "ycode": "37.504389", + "stop_no": "24543", + "xcode": "127.107574", + "stop_type": "마을버스", + "node_id": "123900037", + "nxtStn": "송파역.헬리오시티" + }, + { + "stop_nm": "위례포레샤인15단지", + "ycode": "37.486076", + "stop_no": "24544", + "xcode": "127.143146", + "stop_type": "마을버스", + "node_id": "123900039", + "nxtStn": "송파레이크파크호반써밋2차정문" + }, + { + "stop_nm": "송파레이크파크호반써밋2차정문", + "ycode": "37.485415", + "stop_no": "24545", + "xcode": "127.142073", + "stop_type": "마을버스", + "node_id": "123900040", + "nxtStn": "송파레이크파크호반써밋1차후문" + }, + { + "stop_nm": "송파레이크파크호반써밋1차후문", + "ycode": "37.48538", + "stop_no": "24546", + "xcode": "127.140211", + "stop_type": "마을버스", + "node_id": "123900041", + "nxtStn": "송파파인타운1단지" + }, + { + "stop_nm": "문정역테라타워", + "ycode": "37.484709", + "stop_no": "24547", + "xcode": "127.120333", + "stop_type": "마을버스", + "node_id": "123900043", + "nxtStn": "문정법조단지" + }, + { + "stop_nm": "서울한방병원", + "ycode": "37.485606", + "stop_no": "24548", + "xcode": "127.115478", + "stop_type": "마을버스", + "node_id": "123900044", + "nxtStn": "올림픽훼밀리타운아파트" + }, + { + "stop_nm": "가원초등학교", + "ycode": "37.48915", + "stop_no": "24549", + "xcode": "127.109841", + "stop_type": "마을버스", + "node_id": "123900045", + "nxtStn": "수서역.로즈데일빌딩" + }, + { + "stop_nm": "힐스테이트에코송파", + "ycode": "37.485607", + "stop_no": "24550", + "xcode": "127.115279", + "stop_type": "마을버스", + "node_id": "123900046", + "nxtStn": "문정법조단지" + }, + { + "stop_nm": "문정현대지식산업센터", + "ycode": "37.485501", + "stop_no": "24551", + "xcode": "127.119656", + "stop_type": "마을버스", + "node_id": "123900047", + "nxtStn": "서울동부지방법원.검찰청" + }, + { + "stop_nm": "송파레이크파크호반써밋1차후문", + "ycode": "37.485079", + "stop_no": "24552", + "xcode": "127.140378", + "stop_type": "마을버스", + "node_id": "123900042", + "nxtStn": "종점" + }, + { + "stop_nm": "롯데월드.샤롯데", + "ycode": "37.510766", + "stop_no": "24553", + "xcode": "127.10062", + "stop_type": "마을버스", + "node_id": "123900053", + "nxtStn": "잠실롯데월드" + }, + { + "stop_nm": "잠실롯데월드", + "ycode": "37.51013", + "stop_no": "24554", + "xcode": "127.098662", + "stop_type": "마을버스", + "node_id": "123900054", + "nxtStn": "레이크팰리스아파트" + }, + { + "stop_nm": "레이크팰리스아파트", + "ycode": "37.50892", + "stop_no": "24555", + "xcode": "127.097273", + "stop_type": "마을버스", + "node_id": "123900055", + "nxtStn": "삼학사길사거리" + }, + { + "stop_nm": "삼전동주민센터", + "ycode": "37.503387", + "stop_no": "24556", + "xcode": "127.092051", + "stop_type": "마을버스", + "node_id": "123900056", + "nxtStn": "삼전역.잠실현대아파트" + }, + { + "stop_nm": "삼전역", + "ycode": "37.503906", + "stop_no": "24557", + "xcode": "127.089035", + "stop_type": "마을버스", + "node_id": "123900057", + "nxtStn": "송파구민회관구의회" + }, + { + "stop_nm": "레이크팰리스아파트", + "ycode": "37.508372", + "stop_no": "24559", + "xcode": "127.097566", + "stop_type": "마을버스", + "node_id": "123900048", + "nxtStn": "잠실롯데월드" + }, + { + "stop_nm": "잠실롯데월드", + "ycode": "37.509806577", + "stop_no": "24560", + "xcode": "127.098555827", + "stop_type": "마을버스", + "node_id": "123900049", + "nxtStn": "롯데월드.샤롯데" + }, + { + "stop_nm": "롯데월드.샤롯데", + "ycode": "37.510569", + "stop_no": "24561", + "xcode": "127.100878", + "stop_type": "마을버스", + "node_id": "123900050", + "nxtStn": "송파구청" + }, + { + "stop_nm": "송파구청", + "ycode": "37.516187", + "stop_no": "24562", + "xcode": "127.106421", + "stop_type": "마을버스", + "node_id": "123900051", + "nxtStn": "잠실역.시그마타워" + }, + { + "stop_nm": "잠실역.시그마타워", + "ycode": "37.514368", + "stop_no": "24563", + "xcode": "127.10259", + "stop_type": "마을버스", + "node_id": "123900052", + "nxtStn": "잠실역.롯데호텔" + }, + { + "stop_nm": "장미아파트", + "ycode": "37.51735", + "stop_no": "24610", + "xcode": "127.101971", + "stop_type": "일반차로", + "node_id": "123000536", + "nxtStn": "잠실파크리오아파트" + }, + { + "stop_nm": "잠실파크리오아파트", + "ycode": "37.5191459546", + "stop_no": "24611", + "xcode": "127.1090124148", + "stop_type": "일반차로", + "node_id": "123000535", + "nxtStn": "올림픽회관" + }, + { + "stop_nm": "잠실롯데월드호텔롯데타워", + "ycode": "37.5107407047", + "stop_no": "24620", + "xcode": "127.1006521072", + "stop_type": "일반차로", + "node_id": "123000563", + "nxtStn": "영동대교(가상)" + }, + { + "stop_nm": "위례포레샤인.송파꿈에그린서문", + "ycode": "37.477324", + "stop_no": "24653", + "xcode": "127.137293", + "stop_type": "일반차로", + "node_id": "123000603", + "nxtStn": "위례포레샤인.위례31단지후문" + }, + { + "stop_nm": "송파꿈에그린서문.위례포레샤인", + "ycode": "37.476613", + "stop_no": "24654", + "xcode": "127.137459", + "stop_type": "일반차로", + "node_id": "123000604", + "nxtStn": "송파더센트레.송례중앞" + }, + { + "stop_nm": "복정역환승주차장", + "ycode": "37.470728", + "stop_no": "24658", + "xcode": "127.128144", + "stop_type": "일반차로", + "node_id": "123000436", + "nxtStn": "복정역환승센터3번승강장" + }, + { + "stop_nm": "잠실새내역", + "ycode": "37.511957", + "stop_no": "24662", + "xcode": "127.08406", + "stop_type": "가로변전일", + "node_id": "123000440", + "nxtStn": "잠실종합운동장" + }, + { + "stop_nm": "잠실종합운동장", + "ycode": "37.5111066459", + "stop_no": "24710", + "xcode": "127.0721954509", + "stop_type": "가로변전일", + "node_id": "123000487", + "nxtStn": "삼성역" + }, + { + "stop_nm": "잠실종합운동장", + "ycode": "37.510440568", + "stop_no": "24711", + "xcode": "127.0724640283", + "stop_type": "가로변전일", + "node_id": "123000488", + "nxtStn": "잠실새내역" + }, + { + "stop_nm": "잠실역", + "ycode": "37.5126667117", + "stop_no": "24715", + "xcode": "127.096996375", + "stop_type": "가로변전일", + "node_id": "123000492", + "nxtStn": "영동대교(가상)" + }, + { + "stop_nm": "잠실새내역", + "ycode": "37.5114109026", + "stop_no": "24728", + "xcode": "127.0836048934", + "stop_type": "가로변시간", + "node_id": "123000504", + "nxtStn": "종점" + }, + { + "stop_nm": "가락동", + "ycode": "37.491262", + "stop_no": "24735", + "xcode": "127.114655", + "stop_type": "일반차로", + "node_id": "123000529", + "nxtStn": "경찰병원.서울동부고용노동지청" + }, + { + "stop_nm": "경찰병원.서울동부고용노동지청", + "ycode": "37.494165", + "stop_no": "24736", + "xcode": "127.12216", + "stop_type": "일반차로", + "node_id": "123000528", + "nxtStn": "오금역" + }, + { + "stop_nm": "경찰병원.서울동부고용노동지청", + "ycode": "37.4944500949", + "stop_no": "24740", + "xcode": "127.1221914316", + "stop_type": "일반차로", + "node_id": "123000524", + "nxtStn": "가락동" + }, + { + "stop_nm": "가락동", + "ycode": "37.491693", + "stop_no": "24741", + "xcode": "127.115336", + "stop_type": "일반차로", + "node_id": "123000523", + "nxtStn": "수서역현대벤쳐빌" + }, + { + "stop_nm": "올림픽선수촌아파트", + "ycode": "37.516164", + "stop_no": "24744", + "xcode": "127.131173", + "stop_type": "일반차로", + "node_id": "123000538", + "nxtStn": "둔촌동역" + }, + { + "stop_nm": "올림픽선수촌아파트", + "ycode": "37.516446", + "stop_no": "24745", + "xcode": "127.130871", + "stop_type": "일반차로", + "node_id": "124000353", + "nxtStn": "방이동" + }, + { + "stop_nm": "오금역", + "ycode": "37.501179", + "stop_no": "24766", + "xcode": "127.127648", + "stop_type": "일반차로", + "node_id": "123000558", + "nxtStn": "오금동" + }, + { + "stop_nm": "오금역", + "ycode": "37.500602", + "stop_no": "24767", + "xcode": "127.12665", + "stop_type": "일반차로", + "node_id": "123000559", + "nxtStn": "경찰병원.서울동부고용노동지청" + }, + { + "stop_nm": "오금동", + "ycode": "37.506099", + "stop_no": "24768", + "xcode": "127.132164", + "stop_type": "일반차로", + "node_id": "123000560", + "nxtStn": "방이동" + }, + { + "stop_nm": "오금동", + "ycode": "37.5066818144", + "stop_no": "24769", + "xcode": "127.132089393", + "stop_type": "일반차로", + "node_id": "123000561", + "nxtStn": "오금역" + }, + { + "stop_nm": "방이동", + "ycode": "37.511496", + "stop_no": "24770", + "xcode": "127.12967", + "stop_type": "일반차로", + "node_id": "123000556", + "nxtStn": "올림픽선수촌아파트" + }, + { + "stop_nm": "방이동", + "ycode": "37.5110954671", + "stop_no": "24771", + "xcode": "127.1287692349", + "stop_type": "일반차로", + "node_id": "123000557", + "nxtStn": "오금동" + }, + { + "stop_nm": "장지역", + "ycode": "37.4775131709", + "stop_no": "24801", + "xcode": "127.126368963", + "stop_type": "일반차로", + "node_id": "123000512", + "nxtStn": "위례31단지.위례포레샤인후문" + }, + { + "stop_nm": "장미광장", + "ycode": "37.5125528466", + "stop_no": "24901", + "xcode": "127.1270390731", + "stop_type": "일반차로", + "node_id": "123000641", + "nxtStn": "한성백제박물관" + }, + { + "stop_nm": "한성백제박물관", + "ycode": "37.515418852", + "stop_no": "24902", + "xcode": "127.1196010139", + "stop_type": "일반차로", + "node_id": "123000642", + "nxtStn": "올림픽공원평화의문" + }, + { + "stop_nm": "올림픽공원평화의문", + "ycode": "37.5170704843", + "stop_no": "24903", + "xcode": "127.1150080134", + "stop_type": "일반차로", + "node_id": "123000643", + "nxtStn": "건국대입구" + }, + { + "stop_nm": "롯데월드", + "ycode": "37.5121467731", + "stop_no": "24905", + "xcode": "127.0970648021", + "stop_type": "일반차로", + "node_id": "123000646", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "잠실종합운동장", + "ycode": "37.5115431048", + "stop_no": "24906", + "xcode": "127.0753391812", + "stop_type": "일반차로", + "node_id": "123000647", + "nxtStn": "정류장정보 없음" + }, + { + "stop_nm": "송파레미니스아파트", + "ycode": "37.507867", + "stop_no": "24912", + "xcode": "127.136911", + "stop_type": "일반차로", + "node_id": "123000627", + "nxtStn": "송파호반베르디움더퍼스트" + }, + { + "stop_nm": "송파레미니스아파트", + "ycode": "37.5082386325", + "stop_no": "24913", + "xcode": "127.137183599", + "stop_type": "일반차로", + "node_id": "123000629", + "nxtStn": "세륜중학교" + }, + { + "stop_nm": "한강극동아파트후문", + "ycode": "37.5307280713", + "stop_no": "24915", + "xcode": "127.1124924101", + "stop_type": "일반차로", + "node_id": "123000674", + "nxtStn": "토성초등학교.한강극동아파트" + }, + { + "stop_nm": "토성초등학교.한강극동아파트", + "ycode": "37.5298706007", + "stop_no": "24916", + "xcode": "127.1144039912", + "stop_type": "일반차로", + "node_id": "123000675", + "nxtStn": "풍납2동주민센터" + }, + { + "stop_nm": "풍납2동주민센터", + "ycode": "37.5287762059", + "stop_no": "24917", + "xcode": "127.1168541891", + "stop_type": "일반차로", + "node_id": "123000676", + "nxtStn": "강동구청역농협중앙회" + }, + { + "stop_nm": "잠실역", + "ycode": "37.5150672672", + "stop_no": "24998", + "xcode": "127.0991375288", + "stop_type": "일반차로", + "node_id": "123000511", + "nxtStn": "잠실대교북단(경유)" + }, + { + "stop_nm": "상일초교", + "ycode": "37.546131", + "stop_no": "25001", + "xcode": "127.171362", + "stop_type": "중앙차로", + "node_id": "124000361", + "nxtStn": "길동LG자이아파트" + }, + { + "stop_nm": "상일초교", + "ycode": "37.5457940987", + "stop_no": "25002", + "xcode": "127.1706308587", + "stop_type": "중앙차로", + "node_id": "124000362", + "nxtStn": "강동첨단업무단지.상일여고입구" + }, + { + "stop_nm": "초이동", + "ycode": "37.542139", + "stop_no": "25003", + "xcode": "127.161596", + "stop_type": "중앙차로", + "node_id": "124000369", + "nxtStn": "강동자이.프라자아파트" + }, + { + "stop_nm": "초이동", + "ycode": "37.5418463392", + "stop_no": "25004", + "xcode": "127.1610838354", + "stop_type": "중앙차로", + "node_id": "124000370", + "nxtStn": "상일초교" + }, + { + "stop_nm": "강동자이.프라자아파트", + "ycode": "37.5367757552", + "stop_no": "25005", + "xcode": "127.1488149683", + "stop_type": "중앙차로", + "node_id": "124000360", + "nxtStn": "길동주민센터.둔촌2동주민센터" + }, + { + "stop_nm": "강동자이·프라자아파트", + "ycode": "37.53621", + "stop_no": "25006", + "xcode": "127.147785", + "stop_type": "중앙차로", + "node_id": "124000363", + "nxtStn": "초이동" + }, + { + "stop_nm": "길동주민센터.둔촌2동주민센터", + "ycode": "37.5342743542", + "stop_no": "25007", + "xcode": "127.1429328548", + "stop_type": "중앙차로", + "node_id": "124000359", + "nxtStn": "길동사거리.강동세무서" + }, + { + "stop_nm": "길동주민센터.둔촌2동주민센터", + "ycode": "37.533887", + "stop_no": "25008", + "xcode": "127.142105", + "stop_type": "중앙차로", + "node_id": "124000364", + "nxtStn": "강동자이·프라자아파트" + }, + { + "stop_nm": "길동사거리.강동세무서", + "ycode": "37.5345321979", + "stop_no": "25009", + "xcode": "127.1368249306", + "stop_type": "중앙차로", + "node_id": "124000358", + "nxtStn": "강동역" + }, + { + "stop_nm": "길동사거리.강동세무서", + "ycode": "37.534742", + "stop_no": "25010", + "xcode": "127.135862", + "stop_type": "중앙차로", + "node_id": "124000365", + "nxtStn": "길동주민센터.둔촌2동주민센터" + }, + { + "stop_nm": "강동역", + "ycode": "37.535907", + "stop_no": "25011", + "xcode": "127.13245", + "stop_type": "중앙차로", + "node_id": "124000357", + "nxtStn": "천호역" + }, + { + "stop_nm": "강동역", + "ycode": "37.536106", + "stop_no": "25012", + "xcode": "127.131516", + "stop_type": "중앙차로", + "node_id": "124000366", + "nxtStn": "강동성심병원(동신중학교)" + }, + { + "stop_nm": "천호역", + "ycode": "37.537655", + "stop_no": "25013", + "xcode": "127.127052", + "stop_type": "중앙차로", + "node_id": "124000453", + "nxtStn": "천호역.풍납시장" + }, + { + "stop_nm": "천호역", + "ycode": "37.537949", + "stop_no": "25014", + "xcode": "127.125539", + "stop_type": "중앙차로", + "node_id": "124000454", + "nxtStn": "천호역5번출구" + }, + { + "stop_nm": "강동공영차고지", + "ycode": "37.564066", + "stop_no": "25101", + "xcode": "127.173885", + "stop_type": "일반차로", + "node_id": "124000001", + "nxtStn": "고덕리엔파크1단지" + }, + { + "stop_nm": "강동공영차고지", + "ycode": "37.564179", + "stop_no": "25102", + "xcode": "127.174323", + "stop_type": "일반차로", + "node_id": "124000002", + "nxtStn": "강일리버파크6단지610동" + }, + { + "stop_nm": "고덕리엔파크1단지", + "ycode": "37.5611595214", + "stop_no": "25103", + "xcode": "127.1704714177", + "stop_type": "일반차로", + "node_id": "124000003", + "nxtStn": "해뜨는주유소" + }, + { + "stop_nm": "고덕리엔파크1단지", + "ycode": "37.561365", + "stop_no": "25104", + "xcode": "127.170696", + "stop_type": "일반차로", + "node_id": "124000004", + "nxtStn": "강동공영차고지" + }, + { + "stop_nm": "해뜨는주유소", + "ycode": "37.559102", + "stop_no": "25105", + "xcode": "127.170805", + "stop_type": "일반차로", + "node_id": "124000005", + "nxtStn": "상일동역3.4번출구" + }, + { + "stop_nm": "해뜨는주유소", + "ycode": "37.559757", + "stop_no": "25106", + "xcode": "127.170989", + "stop_type": "일반차로", + "node_id": "124000006", + "nxtStn": "고덕리엔파크1단지" + }, + { + "stop_nm": "고덕천교차로", + "ycode": "37.5563241348", + "stop_no": "25107", + "xcode": "127.171147352", + "stop_type": "일반차로", + "node_id": "124000007", + "nxtStn": "고덕자이.고덕천물놀이장" + }, + { + "stop_nm": "고덕천교차로", + "ycode": "37.55641", + "stop_no": "25108", + "xcode": "127.171447", + "stop_type": "일반차로", + "node_id": "124000008", + "nxtStn": "해뜨는주유소" + }, + { + "stop_nm": "고덕자이.고덕천물놀이장", + "ycode": "37.5534666908", + "stop_no": "25109", + "xcode": "127.1720516501", + "stop_type": "일반차로", + "node_id": "124000009", + "nxtStn": "고덕자이" + }, + { + "stop_nm": "강명초등학교", + "ycode": "37.553372", + "stop_no": "25110", + "xcode": "127.172373", + "stop_type": "일반차로", + "node_id": "124000010", + "nxtStn": "고덕천교차로" + }, + { + "stop_nm": "고덕자이", + "ycode": "37.5516025716", + "stop_no": "25111", + "xcode": "127.1725023454", + "stop_type": "일반차로", + "node_id": "124000011", + "nxtStn": "강동첨단업무단지.상일여고입구" + }, + { + "stop_nm": "고덕리엔파크3단지", + "ycode": "37.55189", + "stop_no": "25112", + "xcode": "127.172726", + "stop_type": "일반차로", + "node_id": "124000012", + "nxtStn": "강명초등학교" + }, + { + "stop_nm": "상일동산.롯데캐슬베네루체", + "ycode": "37.549972", + "stop_no": "25113", + "xcode": "127.165199", + "stop_type": "일반차로", + "node_id": "124000448", + "nxtStn": "상일근린공원" + }, + { + "stop_nm": "상일동산.롯데캐슬베네루체", + "ycode": "37.549945", + "stop_no": "25114", + "xcode": "127.165437", + "stop_type": "일반차로", + "node_id": "124000451", + "nxtStn": "상일1동주민센터.롯데캐슬베네루체" + }, + { + "stop_nm": "상일근린공원", + "ycode": "37.547315", + "stop_no": "25115", + "xcode": "127.167006", + "stop_type": "일반차로", + "node_id": "124000449", + "nxtStn": "상일동주몽재활원" + }, + { + "stop_nm": "상일근린공원", + "ycode": "37.547395", + "stop_no": "25116", + "xcode": "127.16724", + "stop_type": "일반차로", + "node_id": "124000450", + "nxtStn": "상일동산.롯데캐슬베네루체" + }, + { + "stop_nm": "GS강동자이아파트.둔촌동프라자아파트", + "ycode": "37.5370016433", + "stop_no": "25117", + "xcode": "127.1490315784", + "stop_type": "가로변전일", + "node_id": "124000017", + "nxtStn": "둔촌푸르지오아파트" + }, + { + "stop_nm": "둔촌동프라자아파트.GS강동자이아파트", + "ycode": "37.5361365076", + "stop_no": "25118", + "xcode": "127.1481010933", + "stop_type": "일반차로", + "node_id": "124000018", + "nxtStn": "길동자연생태공원" + }, + { + "stop_nm": "둔촌푸르지오아파트", + "ycode": "37.53503", + "stop_no": "25119", + "xcode": "127.144197", + "stop_type": "일반차로", + "node_id": "124000019", + "nxtStn": "길동주민센터.서울양병원" + }, + { + "stop_nm": "둔촌푸르지오아파트", + "ycode": "37.5346425877", + "stop_no": "25120", + "xcode": "127.1446715983", + "stop_type": "가로변시간", + "node_id": "124000020", + "nxtStn": "둔촌동프라자아파트.GS강동자이아파트" + }, + { + "stop_nm": "길동주민센터.서울양병원", + "ycode": "37.534121", + "stop_no": "25121", + "xcode": "127.141825", + "stop_type": "일반차로", + "node_id": "124000021", + "nxtStn": "강동리바트" + }, + { + "stop_nm": "둔촌2동주민센터.서울양병원", + "ycode": "37.533652", + "stop_no": "25122", + "xcode": "127.141927", + "stop_type": "일반차로", + "node_id": "124000022", + "nxtStn": "둔촌푸르지오아파트" + }, + { + "stop_nm": "길동사거리.강동세무서", + "ycode": "37.5344456779", + "stop_no": "25123", + "xcode": "127.1375233178", + "stop_type": "가로변시간", + "node_id": "124000023", + "nxtStn": "강동역1번출구.동신중학교" + }, + { + "stop_nm": "길동사거리.강동세무서", + "ycode": "37.534125", + "stop_no": "25124", + "xcode": "127.137182", + "stop_type": "가로변시간", + "node_id": "124000024", + "nxtStn": "약수터" + }, + { + "stop_nm": "강동역1번출구.동신중학교", + "ycode": "37.536283", + "stop_no": "25125", + "xcode": "127.131857", + "stop_type": "가로변시간", + "node_id": "124000025", + "nxtStn": "천호역" + }, + { + "stop_nm": "강동역.강풀만화거리입구", + "ycode": "37.536052", + "stop_no": "25126", + "xcode": "127.13097", + "stop_type": "가로변시간", + "node_id": "124000026", + "nxtStn": "길동사거리" + }, + { + "stop_nm": "천호역5번출구.천호사거리", + "ycode": "37.537773", + "stop_no": "25127", + "xcode": "127.127032", + "stop_type": "일반차로", + "node_id": "124000027", + "nxtStn": "천호역1번출구.문구거리" + }, + { + "stop_nm": "천호역6번출구.천호사거리", + "ycode": "37.53723", + "stop_no": "25128", + "xcode": "127.127293", + "stop_type": "가로변전일", + "node_id": "124000028", + "nxtStn": "강동역" + }, + { + "stop_nm": "상일동역4번출구.센트럴푸르지오", + "ycode": "37.557235", + "stop_no": "25131", + "xcode": "127.169638", + "stop_type": "일반차로", + "node_id": "124000031", + "nxtStn": "상일동역1번출구" + }, + { + "stop_nm": "상일동역6번출구.고덕아르테온", + "ycode": "37.5568294953", + "stop_no": "25132", + "xcode": "127.1679351284", + "stop_type": "일반차로", + "node_id": "124000032", + "nxtStn": "해뜨는주유소" + }, + { + "stop_nm": "상일동역1번출구", + "ycode": "37.556517", + "stop_no": "25133", + "xcode": "127.163945", + "stop_type": "일반차로", + "node_id": "124000033", + "nxtStn": "고덕그라시움" + }, + { + "stop_nm": "상일동역8번출구", + "ycode": "37.55639", + "stop_no": "25134", + "xcode": "127.164852", + "stop_type": "일반차로", + "node_id": "124000034", + "nxtStn": "상일동역6번출구.고덕아르테온" + }, + { + "stop_nm": "고덕그라시움", + "ycode": "37.556107", + "stop_no": "25135", + "xcode": "127.160702", + "stop_type": "일반차로", + "node_id": "124000035", + "nxtStn": "고덕평생학습관.온조대왕체육관" + }, + { + "stop_nm": "고덕그라시움", + "ycode": "37.5557278909", + "stop_no": "25136", + "xcode": "127.1602719709", + "stop_type": "일반차로", + "node_id": "124000036", + "nxtStn": "상일동역8번출구" + }, + { + "stop_nm": "고덕평생학습관.온조대왕체육관", + "ycode": "37.5556884118", + "stop_no": "25137", + "xcode": "127.1581417355", + "stop_type": "일반차로", + "node_id": "124000037", + "nxtStn": "고덕역" + }, + { + "stop_nm": "고덕평생학습관.온조대왕체육관", + "ycode": "37.555507", + "stop_no": "25138", + "xcode": "127.158091", + "stop_type": "일반차로", + "node_id": "124000038", + "nxtStn": "고덕그라시움" + }, + { + "stop_nm": "고덕역", + "ycode": "37.555437", + "stop_no": "25139", + "xcode": "127.155862", + "stop_type": "일반차로", + "node_id": "124000039", + "nxtStn": "배재중고등학교" + }, + { + "stop_nm": "고덕역", + "ycode": "37.55504", + "stop_no": "25140", + "xcode": "127.154997", + "stop_type": "일반차로", + "node_id": "124000040", + "nxtStn": "온조대왕문화체육관" + }, + { + "stop_nm": "배재중고등학교", + "ycode": "37.554855", + "stop_no": "25141", + "xcode": "127.149323", + "stop_type": "일반차로", + "node_id": "124000041", + "nxtStn": "명일동국민은행.래미안솔베뉴" + }, + { + "stop_nm": "배재중고등학교", + "ycode": "37.55454", + "stop_no": "25142", + "xcode": "127.149718", + "stop_type": "일반차로", + "node_id": "124000042", + "nxtStn": "고덕역" + }, + { + "stop_nm": "동부기술교육원.장애인종합복지관", + "ycode": "37.5547923189", + "stop_no": "25143", + "xcode": "127.146584873", + "stop_type": "일반차로", + "node_id": "124000043", + "nxtStn": "명일초등학교" + }, + { + "stop_nm": "동부기술교육원.장애인종합복지관", + "ycode": "37.554617", + "stop_no": "25144", + "xcode": "127.145752", + "stop_type": "일반차로", + "node_id": "124000044", + "nxtStn": "배재중고등학교" + }, + { + "stop_nm": "명일초등학교", + "ycode": "37.5548673708", + "stop_no": "25145", + "xcode": "127.1434373656", + "stop_type": "일반차로", + "node_id": "124000045", + "nxtStn": "암사3동주민센터(강동롯데캐슬퍼스트)" + }, + { + "stop_nm": "명일초등학교", + "ycode": "37.554602", + "stop_no": "25146", + "xcode": "127.143468", + "stop_type": "일반차로", + "node_id": "124000046", + "nxtStn": "동부기술교육원.장애인종합복지관" + }, + { + "stop_nm": "암사3동주민센터(강동롯데캐슬퍼스트)", + "ycode": "37.554877", + "stop_no": "25147", + "xcode": "127.139195", + "stop_type": "일반차로", + "node_id": "124000047", + "nxtStn": "강일중.선사고" + }, + { + "stop_nm": "암사3동주민센터프라이어팰리스", + "ycode": "37.5545587211", + "stop_no": "25148", + "xcode": "127.1393191473", + "stop_type": "일반차로", + "node_id": "124000048", + "nxtStn": "명일초등학교" + }, + { + "stop_nm": "강일중.선사고", + "ycode": "37.554863", + "stop_no": "25149", + "xcode": "127.137023", + "stop_type": "일반차로", + "node_id": "124000049", + "nxtStn": "신암중학교" + }, + { + "stop_nm": "강일중.선사고", + "ycode": "37.554623", + "stop_no": "25150", + "xcode": "127.136093", + "stop_type": "일반차로", + "node_id": "124000050", + "nxtStn": "암사3동주민센터프라이어팰리스" + }, + { + "stop_nm": "신암중학교", + "ycode": "37.5548390685", + "stop_no": "25151", + "xcode": "127.1313639495", + "stop_type": "일반차로", + "node_id": "124000051", + "nxtStn": "삼성광나루아파트.암사동유적" + }, + { + "stop_nm": "신암중학교", + "ycode": "37.5546138434", + "stop_no": "25152", + "xcode": "127.1313205443", + "stop_type": "일반차로", + "node_id": "124000052", + "nxtStn": "강일중.선사고" + }, + { + "stop_nm": "삼성광나루아파트.암사동유적", + "ycode": "37.553257", + "stop_no": "25153", + "xcode": "127.128468", + "stop_type": "일반차로", + "node_id": "124000053", + "nxtStn": "암사역선사현대아파트" + }, + { + "stop_nm": "삼성광나루아파트.암사동유적", + "ycode": "37.553233", + "stop_no": "25154", + "xcode": "127.128813", + "stop_type": "일반차로", + "node_id": "124000054", + "nxtStn": "신암중학교" + }, + { + "stop_nm": "암사역선사현대아파트", + "ycode": "37.5507", + "stop_no": "25155", + "xcode": "127.127558", + "stop_type": "일반차로", + "node_id": "124000055", + "nxtStn": "천호동공원" + }, + { + "stop_nm": "암사역2번출구.암사종합시장", + "ycode": "37.5496007079", + "stop_no": "25156", + "xcode": "127.127528264", + "stop_type": "일반차로", + "node_id": "124000056", + "nxtStn": "삼성광나루아파트.암사동유적" + }, + { + "stop_nm": "천호동공원", + "ycode": "37.5459692284", + "stop_no": "25157", + "xcode": "127.1259116562", + "stop_type": "일반차로", + "node_id": "124000057", + "nxtStn": "서울현대요양병원" + }, + { + "stop_nm": "천호동공원", + "ycode": "37.546075", + "stop_no": "25158", + "xcode": "127.126227", + "stop_type": "일반차로", + "node_id": "124000058", + "nxtStn": "암사역2번출구.암사종합시장" + }, + { + "stop_nm": "서울현대요양병원", + "ycode": "37.542905", + "stop_no": "25159", + "xcode": "127.124773", + "stop_type": "일반차로", + "node_id": "124000059", + "nxtStn": "천호역2번출구.현대백화점" + }, + { + "stop_nm": "서울현대요양병원", + "ycode": "37.5420613974", + "stop_no": "25160", + "xcode": "127.124856045", + "stop_type": "일반차로", + "node_id": "124000060", + "nxtStn": "천호동공원" + }, + { + "stop_nm": "천호역2번출구.현대백화점", + "ycode": "37.540348", + "stop_no": "25161", + "xcode": "127.123927", + "stop_type": "일반차로", + "node_id": "124000061", + "nxtStn": "천호역" + }, + { + "stop_nm": "천호역3번출구.현대백화점", + "ycode": "37.5399531076", + "stop_no": "25162", + "xcode": "127.1240057241", + "stop_type": "일반차로", + "node_id": "124000062", + "nxtStn": "천호우체국" + }, + { + "stop_nm": "천호역", + "ycode": "37.5359007609", + "stop_no": "25163", + "xcode": "127.1227399813", + "stop_type": "가로변시간", + "node_id": "124000063", + "nxtStn": "천호역3번출구.현대백화점" + }, + { + "stop_nm": "강동구청역1번출구.영파여고", + "ycode": "37.53215", + "stop_no": "25164", + "xcode": "127.121355", + "stop_type": "일반차로", + "node_id": "124000064", + "nxtStn": "성내주유소" + }, + { + "stop_nm": "상일동역2번출구", + "ycode": "37.5573380664", + "stop_no": "25165", + "xcode": "127.1651251793", + "stop_type": "일반차로", + "node_id": "124000065", + "nxtStn": "상일동역5번출구" + }, + { + "stop_nm": "상일동역2번출구", + "ycode": "37.5571801903", + "stop_no": "25166", + "xcode": "127.1654238958", + "stop_type": "일반차로", + "node_id": "124000066", + "nxtStn": "고덕초등학교" + }, + { + "stop_nm": "고덕초등학교", + "ycode": "37.560169", + "stop_no": "25167", + "xcode": "127.165391", + "stop_type": "일반차로", + "node_id": "124000067", + "nxtStn": "강덕초등학교.고덕그라시움" + }, + { + "stop_nm": "고덕초등학교", + "ycode": "37.56004", + "stop_no": "25168", + "xcode": "127.165644", + "stop_type": "일반차로", + "node_id": "124000068", + "nxtStn": "상일동역2번출구" + }, + { + "stop_nm": "강덕초등학교.고덕그라시움", + "ycode": "37.5603785827", + "stop_no": "25169", + "xcode": "127.16279594", + "stop_type": "일반차로", + "node_id": "124000069", + "nxtStn": "고덕중학교" + }, + { + "stop_nm": "강덕초등학교.고덕그라시움", + "ycode": "37.560255", + "stop_no": "25170", + "xcode": "127.162887", + "stop_type": "일반차로", + "node_id": "124000070", + "nxtStn": "고덕초등학교" + }, + { + "stop_nm": "광문고.서울컨벤션고", + "ycode": "37.5605856361", + "stop_no": "25171", + "xcode": "127.1576291349", + "stop_type": "일반차로", + "node_id": "124000071", + "nxtStn": "고덕아이파크101동" + }, + { + "stop_nm": "광문고.서울컨벤션고", + "ycode": "37.5604492511", + "stop_no": "25172", + "xcode": "127.1565150315", + "stop_type": "일반차로", + "node_id": "124000072", + "nxtStn": "고덕중학교" + }, + { + "stop_nm": "고덕아이파크아파트", + "ycode": "37.559738", + "stop_no": "25173", + "xcode": "127.154067", + "stop_type": "일반차로", + "node_id": "124000073", + "nxtStn": "고덕1동주민센터.두레근린공원" + }, + { + "stop_nm": "고덕아이파크아파트", + "ycode": "37.5593688285", + "stop_no": "25174", + "xcode": "127.1537814711", + "stop_type": "일반차로", + "node_id": "124000074", + "nxtStn": "광문고.서울컨벤션고" + }, + { + "stop_nm": "명일중학교", + "ycode": "37.5582427163", + "stop_no": "25175", + "xcode": "127.1487291657", + "stop_type": "일반차로", + "node_id": "124000075", + "nxtStn": "서울장애인복지관" + }, + { + "stop_nm": "명일중학교", + "ycode": "37.5584235613", + "stop_no": "25176", + "xcode": "127.1488761534", + "stop_type": "일반차로", + "node_id": "124000076", + "nxtStn": "고덕아이파크아파트" + }, + { + "stop_nm": "강동경희대병원.명일동이마트", + "ycode": "37.5545494691", + "stop_no": "25177", + "xcode": "127.1567607504", + "stop_type": "일반차로", + "node_id": "124000077", + "nxtStn": "고덕그라시움" + }, + { + "stop_nm": "강동아트센터.강동경희대병원", + "ycode": "37.5523444556", + "stop_no": "25178", + "xcode": "127.1561087396", + "stop_type": "일반차로", + "node_id": "124000078", + "nxtStn": "한영중고한영외고" + }, + { + "stop_nm": "강동아트센터.강동경희대병원후문", + "ycode": "37.551068", + "stop_no": "25179", + "xcode": "127.156446", + "stop_type": "일반차로", + "node_id": "124000079", + "nxtStn": "강동경희대병원.명일동이마트" + }, + { + "stop_nm": "한영중고한영외고", + "ycode": "37.548057", + "stop_no": "25180", + "xcode": "127.155872", + "stop_type": "일반차로", + "node_id": "124000080", + "nxtStn": "길동자연생태공원" + }, + { + "stop_nm": "한영중고한영외고", + "ycode": "37.548007", + "stop_no": "25181", + "xcode": "127.156277", + "stop_type": "일반차로", + "node_id": "124000081", + "nxtStn": "강동아트센터.강동경희대병원후문" + }, + { + "stop_nm": "길동자연생태공원", + "ycode": "37.539039881", + "stop_no": "25182", + "xcode": "127.1525922642", + "stop_type": "일반차로", + "node_id": "124000082", + "nxtStn": "일자산입구.둔촌도서관" + }, + { + "stop_nm": "길동자연생태공원", + "ycode": "37.5391799069", + "stop_no": "25183", + "xcode": "127.1530135068", + "stop_type": "일반차로", + "node_id": "124000083", + "nxtStn": "한영중고한영외고" + }, + { + "stop_nm": "일자산입구.둔촌도서관", + "ycode": "37.531993", + "stop_no": "25184", + "xcode": "127.149623", + "stop_type": "일반차로", + "node_id": "124000084", + "nxtStn": "중앙보훈병원역2번출구" + }, + { + "stop_nm": "일자산입구.둔촌도서관", + "ycode": "37.5314894776", + "stop_no": "25185", + "xcode": "127.149868095", + "stop_type": "일반차로", + "node_id": "124000085", + "nxtStn": "길동자연생태공원" + }, + { + "stop_nm": "서부입구", + "ycode": "37.517615", + "stop_no": "25186", + "xcode": "127.143333", + "stop_type": "일반차로", + "node_id": "124000086", + "nxtStn": "동북고등학교.둔촌오륜역" + }, + { + "stop_nm": "동북고등학교.둔촌오륜역", + "ycode": "37.518958", + "stop_no": "25187", + "xcode": "127.140043", + "stop_type": "일반차로", + "node_id": "124000087", + "nxtStn": "한국전력공사강동송파지사" + }, + { + "stop_nm": "오륜교회앞", + "ycode": "37.5224763077", + "stop_no": "25188", + "xcode": "127.1320753742", + "stop_type": "일반차로", + "node_id": "124000088", + "nxtStn": "JYP엔터테인먼트.윤선생영어교실" + }, + { + "stop_nm": "보훈병원", + "ycode": "37.528915", + "stop_no": "25190", + "xcode": "127.143506", + "stop_type": "일반차로", + "node_id": "124000089", + "nxtStn": "약수터" + }, + { + "stop_nm": "보훈병원", + "ycode": "37.529879855", + "stop_no": "25191", + "xcode": "127.1428079276", + "stop_type": "일반차로", + "node_id": "124000090", + "nxtStn": "보훈회관" + }, + { + "stop_nm": "약수터", + "ycode": "37.532323", + "stop_no": "25192", + "xcode": "127.141638", + "stop_type": "일반차로", + "node_id": "124000091", + "nxtStn": "길동사거리.강동세무서" + }, + { + "stop_nm": "약수터", + "ycode": "37.532505", + "stop_no": "25193", + "xcode": "127.141383", + "stop_type": "일반차로", + "node_id": "124000092", + "nxtStn": "보훈병원" + }, + { + "stop_nm": "명일여자고등학교", + "ycode": "37.548425", + "stop_no": "25194", + "xcode": "127.149073", + "stop_type": "일반차로", + "node_id": "124000093", + "nxtStn": "삼익가든아파트" + }, + { + "stop_nm": "명일여자고등학교", + "ycode": "37.5483514975", + "stop_no": "25195", + "xcode": "127.1493031571", + "stop_type": "일반차로", + "node_id": "124000094", + "nxtStn": "고덕삼환.주공9단지아파트" + }, + { + "stop_nm": "길동성당", + "ycode": "37.54441", + "stop_no": "25196", + "xcode": "127.14797", + "stop_type": "일반차로", + "node_id": "124000095", + "nxtStn": "길동신동아아파트" + }, + { + "stop_nm": "길동성당", + "ycode": "37.544388", + "stop_no": "25197", + "xcode": "127.148191", + "stop_type": "일반차로", + "node_id": "124000096", + "nxtStn": "삼익가든아파트" + }, + { + "stop_nm": "길동신동아아파트", + "ycode": "37.5413040547", + "stop_no": "25198", + "xcode": "127.1471322012", + "stop_type": "일반차로", + "node_id": "124000097", + "nxtStn": "신명초교입구교차로" + }, + { + "stop_nm": "길동신동아아파트", + "ycode": "37.5413876109", + "stop_no": "25199", + "xcode": "127.1473292706", + "stop_type": "일반차로", + "node_id": "124000098", + "nxtStn": "길동성당" + }, + { + "stop_nm": "미사강변18단지.강일리버10단지", + "ycode": "37.56", + "stop_no": "25200", + "xcode": "127.18176", + "stop_type": "일반차로", + "node_id": "124000437", + "nxtStn": "강일역2번출구" + }, + { + "stop_nm": "윤슬중학교.강솔초등학교", + "ycode": "37.56198", + "stop_no": "25201", + "xcode": "127.18176", + "stop_type": "일반차로", + "node_id": "124000438", + "nxtStn": "미사강변18단지.강일리버10단지" + }, + { + "stop_nm": "강일리버5단지.미사강변루나리움", + "ycode": "37.567494", + "stop_no": "25202", + "xcode": "127.17919", + "stop_type": "일반차로", + "node_id": "124000462", + "nxtStn": "강일초등학교" + }, + { + "stop_nm": "미사강변17단지.강일리버7단지", + "ycode": "37.56425", + "stop_no": "25203", + "xcode": "127.18013", + "stop_type": "일반차로", + "node_id": "124000440", + "nxtStn": "윤슬중학교.강솔초등학교" + }, + { + "stop_nm": "보훈회관", + "ycode": "37.5264562493", + "stop_no": "25204", + "xcode": "127.1452995611", + "stop_type": "일반차로", + "node_id": "124000099", + "nxtStn": "둔촌신성미소지움아파트" + }, + { + "stop_nm": "보훈회관", + "ycode": "37.526297", + "stop_no": "25205", + "xcode": "127.145385", + "stop_type": "일반차로", + "node_id": "124000100", + "nxtStn": "9호선중앙보훈병원역1번출구" + }, + { + "stop_nm": "대순진리회", + "ycode": "37.5303537171", + "stop_no": "25210", + "xcode": "127.1312576314", + "stop_type": "일반차로", + "node_id": "124000101", + "nxtStn": "성내2동주민센터.성내복지관" + }, + { + "stop_nm": "대순진리회", + "ycode": "37.530253", + "stop_no": "25211", + "xcode": "127.130955", + "stop_type": "일반차로", + "node_id": "124000102", + "nxtStn": "성내구립도서관.사회적경제지원센터" + }, + { + "stop_nm": "성내2동주민센터.성내복지관", + "ycode": "37.531257", + "stop_no": "25212", + "xcode": "127.128032", + "stop_type": "일반차로", + "node_id": "124000103", + "nxtStn": "성내삼성청구아파트" + }, + { + "stop_nm": "성내2동주민센터.성내복지관", + "ycode": "37.5310374848", + "stop_no": "25213", + "xcode": "127.1281257543", + "stop_type": "일반차로", + "node_id": "124000104", + "nxtStn": "대순진리회" + }, + { + "stop_nm": "성내삼성청구아파트", + "ycode": "37.5319215281", + "stop_no": "25214", + "xcode": "127.1255463243", + "stop_type": "일반차로", + "node_id": "124000105", + "nxtStn": "성내주유소" + }, + { + "stop_nm": "성내삼성청구아파트", + "ycode": "37.5316457459", + "stop_no": "25215", + "xcode": "127.1260703472", + "stop_type": "일반차로", + "node_id": "124000106", + "nxtStn": "성내2동주민센터.성내복지관" + }, + { + "stop_nm": "성내주유소", + "ycode": "37.5329248061", + "stop_no": "25216", + "xcode": "127.1220776578", + "stop_type": "일반차로", + "node_id": "124000107", + "nxtStn": "영파여고.강동구청역" + }, + { + "stop_nm": "성내주유소", + "ycode": "37.532703", + "stop_no": "25217", + "xcode": "127.122282", + "stop_type": "일반차로", + "node_id": "124000108", + "nxtStn": "성내삼성청구아파트" + }, + { + "stop_nm": "강동농협", + "ycode": "37.5409643096", + "stop_no": "25218", + "xcode": "127.1427532477", + "stop_type": "일반차로", + "node_id": "124000109", + "nxtStn": "참잘함한방병원" + }, + { + "stop_nm": "강동농협", + "ycode": "37.540733131", + "stop_no": "25219", + "xcode": "127.1431647199", + "stop_type": "일반차로", + "node_id": "124000110", + "nxtStn": "길동신동아아파트" + }, + { + "stop_nm": "참잘함한방병원", + "ycode": "37.5411335464", + "stop_no": "25220", + "xcode": "127.1398826123", + "stop_type": "일반차로", + "node_id": "124000111", + "nxtStn": "천동초등학교.천호도서관" + }, + { + "stop_nm": "참잘함한방병원", + "ycode": "37.54093", + "stop_no": "25221", + "xcode": "127.140043", + "stop_type": "일반차로", + "node_id": "124000112", + "nxtStn": "길동역1번출구" + }, + { + "stop_nm": "천동초등학교.천호도서관", + "ycode": "37.5404236471", + "stop_no": "25222", + "xcode": "127.136664078", + "stop_type": "일반차로", + "node_id": "124000113", + "nxtStn": "강동성심병원(동신중학교)" + }, + { + "stop_nm": "천동초등학교.천호도서관", + "ycode": "37.540437", + "stop_no": "25223", + "xcode": "127.136948", + "stop_type": "일반차로", + "node_id": "124000114", + "nxtStn": "참잘함한방병원" + }, + { + "stop_nm": "강동성심병원(동신중학교)", + "ycode": "37.537458", + "stop_no": "25224", + "xcode": "127.1355", + "stop_type": "일반차로", + "node_id": "124000115", + "nxtStn": "천동초등학교.천호도서관" + }, + { + "stop_nm": "강동성심병원(동신중학교)", + "ycode": "37.5373426452", + "stop_no": "25225", + "xcode": "127.1352326667", + "stop_type": "일반차로", + "node_id": "124000116", + "nxtStn": "조은마디병원" + }, + { + "stop_nm": "조은마디병원", + "ycode": "37.5341470568", + "stop_no": "25226", + "xcode": "127.1339143218", + "stop_type": "일반차로", + "node_id": "124000117", + "nxtStn": "강동성심병원(동신중학교)" + }, + { + "stop_nm": "조은마디병원", + "ycode": "37.534472", + "stop_no": "25227", + "xcode": "127.133768", + "stop_type": "일반차로", + "node_id": "124000118", + "nxtStn": "성내구립도서관.사회적경제지원센터" + }, + { + "stop_nm": "JYP엔터테인먼트.윤선생영어교실", + "ycode": "37.5247728157", + "stop_no": "25230", + "xcode": "127.1291706243", + "stop_type": "일반차로", + "node_id": "124000119", + "nxtStn": "서울체육중.고등학교" + }, + { + "stop_nm": "JYP엔터테인먼트.윤선생영어교실", + "ycode": "37.5249590467", + "stop_no": "25231", + "xcode": "127.1294413478", + "stop_type": "일반차로", + "node_id": "124000120", + "nxtStn": "한양수자인아파트" + }, + { + "stop_nm": "명일역3번출구.래미안솔베뉴", + "ycode": "37.5518873966", + "stop_no": "25232", + "xcode": "127.1442239125", + "stop_type": "일반차로", + "node_id": "124000121", + "nxtStn": "명일동국민은행.래미안솔베뉴" + }, + { + "stop_nm": "명일역2번출구", + "ycode": "37.5521499237", + "stop_no": "25233", + "xcode": "127.1439708949", + "stop_type": "일반차로", + "node_id": "124000122", + "nxtStn": "명일역1번출구.명일전통시장" + }, + { + "stop_nm": "명일역1번출구.명일전통시장", + "ycode": "37.5500246088", + "stop_no": "25234", + "xcode": "127.143670283", + "stop_type": "일반차로", + "node_id": "124000123", + "nxtStn": "굽은다리역" + }, + { + "stop_nm": "명일역4번출구.명일전통시장", + "ycode": "37.5503142792", + "stop_no": "25235", + "xcode": "127.1440658281", + "stop_type": "일반차로", + "node_id": "124000124", + "nxtStn": "명일동국민은행.래미안솔베뉴" + }, + { + "stop_nm": "굽은다리사거리", + "ycode": "37.5479101562", + "stop_no": "25236", + "xcode": "127.143327835", + "stop_type": "일반차로", + "node_id": "124000125", + "nxtStn": "굽은다리역구민회관.강동홈플러스" + }, + { + "stop_nm": "굽은다리사거리", + "ycode": "37.5472655932", + "stop_no": "25237", + "xcode": "127.143558605", + "stop_type": "일반차로", + "node_id": "124000126", + "nxtStn": "명일역4번출구.명일전통시장" + }, + { + "stop_nm": "십자성마을", + "ycode": "37.5434576822", + "stop_no": "25238", + "xcode": "127.1419714912", + "stop_type": "일반차로", + "node_id": "124000127", + "nxtStn": "천동초교입구사거리" + }, + { + "stop_nm": "십자성마을", + "ycode": "37.5429790193", + "stop_no": "25239", + "xcode": "127.1421222263", + "stop_type": "일반차로", + "node_id": "124000128", + "nxtStn": "굽은다리역구민회관.강동홈플러스" + }, + { + "stop_nm": "길동역1번출구", + "ycode": "37.5379724338", + "stop_no": "25240", + "xcode": "127.1399400757", + "stop_type": "일반차로", + "node_id": "124000129", + "nxtStn": "둔촌동역" + }, + { + "stop_nm": "길동역3번출구", + "ycode": "37.5373136521", + "stop_no": "25241", + "xcode": "127.1400078708", + "stop_type": "일반차로", + "node_id": "124000130", + "nxtStn": "굽은다리역" + }, + { + "stop_nm": "서울프라임한방병원", + "ycode": "37.5355253414", + "stop_no": "25242", + "xcode": "127.1389352122", + "stop_type": "일반차로", + "node_id": "124000131", + "nxtStn": "길동사거리.강동세무서" + }, + { + "stop_nm": "서울프라임한방병원", + "ycode": "37.535437", + "stop_no": "25243", + "xcode": "127.139365", + "stop_type": "일반차로", + "node_id": "124000132", + "nxtStn": "길동역3번출구" + }, + { + "stop_nm": "강동리바트", + "ycode": "37.5313641488", + "stop_no": "25244", + "xcode": "127.1373320955", + "stop_type": "일반차로", + "node_id": "124000133", + "nxtStn": "둔촌동역4번출구" + }, + { + "stop_nm": "동명약국앞", + "ycode": "37.530813", + "stop_no": "25245", + "xcode": "127.137687", + "stop_type": "일반차로", + "node_id": "124000134", + "nxtStn": "길동사거리.강동세무서" + }, + { + "stop_nm": "둔촌동역4번출구", + "ycode": "37.5282558591", + "stop_no": "25246", + "xcode": "127.1361248068", + "stop_type": "일반차로", + "node_id": "124000135", + "nxtStn": "서울성내동우체국" + }, + { + "stop_nm": "둔촌동역2번출구", + "ycode": "37.527242", + "stop_no": "25247", + "xcode": "127.136254", + "stop_type": "일반차로", + "node_id": "124000136", + "nxtStn": "동명약국앞" + }, + { + "stop_nm": "서울성내동우체국", + "ycode": "37.5235199059", + "stop_no": "25248", + "xcode": "127.1343603166", + "stop_type": "일반차로", + "node_id": "124000137", + "nxtStn": "보성중고등학교" + }, + { + "stop_nm": "한국전력공사강동송파지사", + "ycode": "37.524488", + "stop_no": "25249", + "xcode": "127.13533", + "stop_type": "일반차로", + "node_id": "124000138", + "nxtStn": "둔촌동역2번출구" + }, + { + "stop_nm": "고덕자이.상일여고", + "ycode": "37.550913", + "stop_no": "25250", + "xcode": "127.171294", + "stop_type": "일반차로", + "node_id": "124000139", + "nxtStn": "상일1동주민센터.고덕사회체육센터" + }, + { + "stop_nm": "고덕자이.상일여고", + "ycode": "37.550846179", + "stop_no": "25251", + "xcode": "127.1721418273", + "stop_type": "일반차로", + "node_id": "124000140", + "nxtStn": "강명초등학교" + }, + { + "stop_nm": "상일1동주민센터.고덕사회체육센터", + "ycode": "37.550467", + "stop_no": "25252", + "xcode": "127.168167", + "stop_type": "일반차로", + "node_id": "124000141", + "nxtStn": "상일동산.롯데캐슬베네루체" + }, + { + "stop_nm": "상일1동주민센터.롯데캐슬베네루체", + "ycode": "37.5502885957", + "stop_no": "25253", + "xcode": "127.1682562999", + "stop_type": "일반차로", + "node_id": "124000142", + "nxtStn": "고덕자이.상일여고" + }, + { + "stop_nm": "고덕숲아이파크", + "ycode": "37.5506341451", + "stop_no": "25254", + "xcode": "127.1646290433", + "stop_type": "일반차로", + "node_id": "124000143", + "nxtStn": "강동고등학교" + }, + { + "stop_nm": "고덕숲아이파크", + "ycode": "37.550453945", + "stop_no": "25255", + "xcode": "127.1647425084", + "stop_type": "일반차로", + "node_id": "124000144", + "nxtStn": "상일1동주민센터.롯데캐슬베네루체" + }, + { + "stop_nm": "강동고등학교", + "ycode": "37.5502212128", + "stop_no": "25256", + "xcode": "127.1603416661", + "stop_type": "일반차로", + "node_id": "124000145", + "nxtStn": "한영중고한영외고" + }, + { + "stop_nm": "강동고등학교", + "ycode": "37.550262", + "stop_no": "25257", + "xcode": "127.160682", + "stop_type": "일반차로", + "node_id": "124000146", + "nxtStn": "고덕숲아이파크" + }, + { + "stop_nm": "한영중고한영외고", + "ycode": "37.5492276384", + "stop_no": "25259", + "xcode": "127.1567382863", + "stop_type": "일반차로", + "node_id": "124000148", + "nxtStn": "명일동현대아파트" + }, + { + "stop_nm": "명일동현대아파트", + "ycode": "37.549277", + "stop_no": "25260", + "xcode": "127.153213", + "stop_type": "일반차로", + "node_id": "124000149", + "nxtStn": "고덕삼환.주공9단지아파트" + }, + { + "stop_nm": "한영중고한영외고", + "ycode": "37.549082", + "stop_no": "25261", + "xcode": "127.155655", + "stop_type": "일반차로", + "node_id": "124000150", + "nxtStn": "강동고등학교" + }, + { + "stop_nm": "고덕삼환.주공9단지아파트", + "ycode": "37.549272", + "stop_no": "25262", + "xcode": "127.151608", + "stop_type": "일반차로", + "node_id": "124000151", + "nxtStn": "명일여자고등학교" + }, + { + "stop_nm": "고덕삼환.주공9단지아파트", + "ycode": "37.549126", + "stop_no": "25263", + "xcode": "127.152089", + "stop_type": "일반차로", + "node_id": "124000152", + "nxtStn": "주양쇼핑" + }, + { + "stop_nm": "명일여자고등학교", + "ycode": "37.5494552042", + "stop_no": "25264", + "xcode": "127.1484178305", + "stop_type": "일반차로", + "node_id": "124000153", + "nxtStn": "명일1동주민센터" + }, + { + "stop_nm": "명일여자고등학교", + "ycode": "37.54915", + "stop_no": "25265", + "xcode": "127.14885", + "stop_type": "일반차로", + "node_id": "124000154", + "nxtStn": "고덕삼환.주공9단지아파트" + }, + { + "stop_nm": "명일1동주민센터", + "ycode": "37.5504780577", + "stop_no": "25266", + "xcode": "127.1462720633", + "stop_type": "일반차로", + "node_id": "124000155", + "nxtStn": "성덕고등학교" + }, + { + "stop_nm": "명일1동주민센터", + "ycode": "37.550193", + "stop_no": "25267", + "xcode": "127.146368", + "stop_type": "일반차로", + "node_id": "124000156", + "nxtStn": "명일여자고등학교" + }, + { + "stop_nm": "강동구청", + "ycode": "37.530205", + "stop_no": "25281", + "xcode": "127.12254", + "stop_type": "일반차로", + "node_id": "124000169", + "nxtStn": "풍납현대아파트" + }, + { + "stop_nm": "강동구청", + "ycode": "37.529925", + "stop_no": "25282", + "xcode": "127.122567", + "stop_type": "일반차로", + "node_id": "124000170", + "nxtStn": "강동보건소건너" + }, + { + "stop_nm": "강동보건소앞", + "ycode": "37.528822", + "stop_no": "25283", + "xcode": "127.125492", + "stop_type": "일반차로", + "node_id": "124000171", + "nxtStn": "강동구청" + }, + { + "stop_nm": "강동보건소건너", + "ycode": "37.5285596644", + "stop_no": "25284", + "xcode": "127.125423019", + "stop_type": "일반차로", + "node_id": "124000172", + "nxtStn": "한양수자인아파트" + }, + { + "stop_nm": "한양수자인아파트", + "ycode": "37.5273514477", + "stop_no": "25285", + "xcode": "127.1286297229", + "stop_type": "일반차로", + "node_id": "124000173", + "nxtStn": "강동보건소앞" + }, + { + "stop_nm": "한양수자인아파트", + "ycode": "37.527221", + "stop_no": "25286", + "xcode": "127.128557", + "stop_type": "일반차로", + "node_id": "124000174", + "nxtStn": "JYP엔터테인먼트.윤선생영어교실" + }, + { + "stop_nm": "서울장애인복지관", + "ycode": "37.5552000891", + "stop_no": "25287", + "xcode": "127.1490836595", + "stop_type": "일반차로", + "node_id": "124000175", + "nxtStn": "명일중학교" + }, + { + "stop_nm": "서울장애인복지관", + "ycode": "37.5550804924", + "stop_no": "25288", + "xcode": "127.14888648", + "stop_type": "일반차로", + "node_id": "124000176", + "nxtStn": "명일동신동아아파트" + }, + { + "stop_nm": "명일동신동아아파트", + "ycode": "37.554952", + "stop_no": "25289", + "xcode": "127.152322", + "stop_type": "일반차로", + "node_id": "124000177", + "nxtStn": "서울장애인복지관" + }, + { + "stop_nm": "명일동신동아아파트", + "ycode": "37.5545613021", + "stop_no": "25290", + "xcode": "127.1518429396", + "stop_type": "일반차로", + "node_id": "124000178", + "nxtStn": "고덕역" + }, + { + "stop_nm": "상일동동아아파트", + "ycode": "37.5457877308", + "stop_no": "25295", + "xcode": "127.167551316", + "stop_type": "일반차로", + "node_id": "124000183", + "nxtStn": "상일동주몽재활원" + }, + { + "stop_nm": "상일동동아아파트", + "ycode": "37.5455480066", + "stop_no": "25296", + "xcode": "127.1675745452", + "stop_type": "일반차로", + "node_id": "124000184", + "nxtStn": "상일초교" + }, + { + "stop_nm": "상일동주몽재활원", + "ycode": "37.54597942", + "stop_no": "25297", + "xcode": "127.1642692203", + "stop_type": "일반차로", + "node_id": "124000185", + "nxtStn": "상일동빌라단지" + }, + { + "stop_nm": "상일동주몽재활원", + "ycode": "37.545756", + "stop_no": "25298", + "xcode": "127.163691", + "stop_type": "일반차로", + "node_id": "124000186", + "nxtStn": "상일근린공원" + }, + { + "stop_nm": "상일동빌라단지", + "ycode": "37.545463", + "stop_no": "25299", + "xcode": "127.159111", + "stop_type": "일반차로", + "node_id": "124000187", + "nxtStn": "상일동주몽재활원" + }, + { + "stop_nm": "상일동빌라단지", + "ycode": "37.545618", + "stop_no": "25300", + "xcode": "127.159568", + "stop_type": "일반차로", + "node_id": "124000188", + "nxtStn": "길동자연생태공원" + }, + { + "stop_nm": "중앙보훈병원역1번출구", + "ycode": "37.5279919512", + "stop_no": "25302", + "xcode": "127.1480518756", + "stop_type": "일반차로", + "node_id": "124000190", + "nxtStn": "보훈회관" + }, + { + "stop_nm": "중앙보훈병원역1번출구", + "ycode": "37.527208", + "stop_no": "25303", + "xcode": "127.148076", + "stop_type": "일반차로", + "node_id": "124000191", + "nxtStn": "중앙보훈병원역3번출구" + }, + { + "stop_nm": "강동첨단업무단지.상일여고입구", + "ycode": "37.5486425295", + "stop_no": "25309", + "xcode": "127.1730829007", + "stop_type": "일반차로", + "node_id": "124000192", + "nxtStn": "상일초등학교" + }, + { + "stop_nm": "강동첨단업무단지.상일여고입구", + "ycode": "37.5494046152", + "stop_no": "25310", + "xcode": "127.1732465045", + "stop_type": "일반차로", + "node_id": "124000193", + "nxtStn": "고덕리엔파크3단지" + }, + { + "stop_nm": "천동초교입구사거리", + "ycode": "37.5399553721", + "stop_no": "25311", + "xcode": "127.1410120284", + "stop_type": "일반차로", + "node_id": "124000194", + "nxtStn": "십자성마을" + }, + { + "stop_nm": "천동초교입구사거리", + "ycode": "37.5399404705", + "stop_no": "25312", + "xcode": "127.1406623307", + "stop_type": "일반차로", + "node_id": "124000195", + "nxtStn": "길동역1번출구" + }, + { + "stop_nm": "강동구청역농협중앙회", + "ycode": "37.529145", + "stop_no": "25313", + "xcode": "127.120115", + "stop_type": "가로변시간", + "node_id": "124000196", + "nxtStn": "강동구청역1번출구.영파여고" + }, + { + "stop_nm": "성내구립도서관.사회적경제지원센터", + "ycode": "37.5326925318", + "stop_no": "25314", + "xcode": "127.1332543151", + "stop_type": "일반차로", + "node_id": "124000197", + "nxtStn": "조은마디병원" + }, + { + "stop_nm": "성내구립도서관.사회적경제지원센터", + "ycode": "37.5322659606", + "stop_no": "25315", + "xcode": "127.1327670107", + "stop_type": "일반차로", + "node_id": "124000198", + "nxtStn": "대순진리회" + }, + { + "stop_nm": "둔촌습지앞", + "ycode": "37.5219004141", + "stop_no": "25316", + "xcode": "127.1456203728", + "stop_type": "일반차로", + "node_id": "124000444", + "nxtStn": "장곡고등학교.숲속마을" + }, + { + "stop_nm": "강일리버파크6단지", + "ycode": "37.563881", + "stop_no": "25317", + "xcode": "127.175519", + "stop_type": "일반차로", + "node_id": "124000429", + "nxtStn": "강일리버파크8단지" + }, + { + "stop_nm": "강일동주민센터", + "ycode": "37.566015", + "stop_no": "25318", + "xcode": "127.173929", + "stop_type": "일반차로", + "node_id": "124000201", + "nxtStn": "강일리버파크3단지301동" + }, + { + "stop_nm": "강일동주민센터", + "ycode": "37.565716", + "stop_no": "25319", + "xcode": "127.173874", + "stop_type": "일반차로", + "node_id": "124000202", + "nxtStn": "강일리버파크6단지" + }, + { + "stop_nm": "강일리버파크4단지.2단지", + "ycode": "37.568441", + "stop_no": "25320", + "xcode": "127.176556", + "stop_type": "일반차로", + "node_id": "124000203", + "nxtStn": "강일리버파크4단지.5단지" + }, + { + "stop_nm": "강일리버파크2단지.4단지", + "ycode": "37.5686218353", + "stop_no": "25321", + "xcode": "127.1765456511", + "stop_type": "일반차로", + "node_id": "124000204", + "nxtStn": "강일리버파크1단지정문" + }, + { + "stop_nm": "강일고등학교.강일리버파크7단지", + "ycode": "37.565067", + "stop_no": "25322", + "xcode": "127.177918", + "stop_type": "일반차로", + "node_id": "124000205", + "nxtStn": "강일리버파크8단지" + }, + { + "stop_nm": "강일고등학교.강일리버파크7단지", + "ycode": "37.5647110133", + "stop_no": "25323", + "xcode": "127.1784008104", + "stop_type": "일반차로", + "node_id": "124000206", + "nxtStn": "강일리버파크5단지.4단지" + }, + { + "stop_nm": "강일리버파크6단지", + "ycode": "37.562806", + "stop_no": "25324", + "xcode": "127.17623", + "stop_type": "일반차로", + "node_id": "124000207", + "nxtStn": "종점" + }, + { + "stop_nm": "강일초등학교", + "ycode": "37.565095", + "stop_no": "25326", + "xcode": "127.175752", + "stop_type": "일반차로", + "node_id": "124000209", + "nxtStn": "강일고등학교.강일리버파크7단지" + }, + { + "stop_nm": "강일초등학교", + "ycode": "37.565868", + "stop_no": "25327", + "xcode": "127.176868", + "stop_type": "일반차로", + "node_id": "124000210", + "nxtStn": "강동공영차고지" + }, + { + "stop_nm": "강일리버파크9단지.10단지", + "ycode": "37.5595533554", + "stop_no": "25328", + "xcode": "127.1794626974", + "stop_type": "일반차로", + "node_id": "124000341", + "nxtStn": "강일역2번출구" + }, + { + "stop_nm": "강일리버파크10단지.9단지", + "ycode": "37.5595583711", + "stop_no": "25329", + "xcode": "127.1797196537", + "stop_type": "일반차로", + "node_id": "124000329", + "nxtStn": "강일리버파크9단지후문" + }, + { + "stop_nm": "중앙보훈병원역2번출구", + "ycode": "37.5295979733", + "stop_no": "25330", + "xcode": "127.1486791218", + "stop_type": "일반차로", + "node_id": "124000445", + "nxtStn": "중앙보훈병원역1번출구" + }, + { + "stop_nm": "중앙보훈병원역3번출구", + "ycode": "37.529326", + "stop_no": "25331", + "xcode": "127.148934", + "stop_type": "일반차로", + "node_id": "124000446", + "nxtStn": "일자산입구.둔촌도서관" + }, + { + "stop_nm": "강일리버파크8단지", + "ycode": "37.5622718862", + "stop_no": "25332", + "xcode": "127.1777180853", + "stop_type": "일반차로", + "node_id": "124000211", + "nxtStn": "강일고등학교.강일리버파크7단지" + }, + { + "stop_nm": "강일리버파크8단지", + "ycode": "37.562648", + "stop_no": "25333", + "xcode": "127.177967", + "stop_type": "일반차로", + "node_id": "124000212", + "nxtStn": "강일리버파크6단지" + }, + { + "stop_nm": "강일리버파크4단지.5단지", + "ycode": "37.56656", + "stop_no": "25334", + "xcode": "127.177374", + "stop_type": "일반차로", + "node_id": "124000213", + "nxtStn": "강일리버파크3단지308동" + }, + { + "stop_nm": "강일리버파크5단지.4단지", + "ycode": "37.567123716", + "stop_no": "25335", + "xcode": "127.1774839621", + "stop_type": "일반차로", + "node_id": "124000214", + "nxtStn": "강일리버파크2단지.4단지" + }, + { + "stop_nm": "강일리버파크1단지.3단지", + "ycode": "37.567036", + "stop_no": "25336", + "xcode": "127.173301", + "stop_type": "일반차로", + "node_id": "124000215", + "nxtStn": "강일동주민센터" + }, + { + "stop_nm": "강일리버파크3단지.1단지", + "ycode": "37.568207", + "stop_no": "25337", + "xcode": "127.174408", + "stop_type": "일반차로", + "node_id": "124000216", + "nxtStn": "강일리버파크4단지.2단지" + }, + { + "stop_nm": "상일파출소.고덕아르테온", + "ycode": "37.555557", + "stop_no": "25338", + "xcode": "127.165766", + "stop_type": "일반차로", + "node_id": "124000447", + "nxtStn": "상일동역1번출구" + }, + { + "stop_nm": "강일리버파크9단지후문", + "ycode": "37.5616924212", + "stop_no": "25339", + "xcode": "127.18013794", + "stop_type": "일반차로", + "node_id": "124000338", + "nxtStn": "강일고등학교.강일리버파크7단지" + }, + { + "stop_nm": "강일리버파크9단지후문", + "ycode": "37.561716212", + "stop_no": "25340", + "xcode": "127.1799002887", + "stop_type": "일반차로", + "node_id": "124000339", + "nxtStn": "강일리버파크9단지.10단지" + }, + { + "stop_nm": "강동공영차고지", + "ycode": "37.564251", + "stop_no": "25341", + "xcode": "127.174627", + "stop_type": "일반차로", + "node_id": "124000344", + "nxtStn": "강일동주민센터" + }, + { + "stop_nm": "강일역.고덕리엔파크2단지.3단지", + "ycode": "37.5573380193", + "stop_no": "25342", + "xcode": "127.1737391286", + "stop_type": "일반차로", + "node_id": "124000368", + "nxtStn": "상일동역3.4번출구" + }, + { + "stop_nm": "강일역.고덕리엔파크3단지.2단지", + "ycode": "37.557097", + "stop_no": "25343", + "xcode": "127.174125", + "stop_type": "일반차로", + "node_id": "124000367", + "nxtStn": "강일역3번출구" + }, + { + "stop_nm": "고덕리엔파크2단지", + "ycode": "37.5568389632", + "stop_no": "25344", + "xcode": "127.1730237586", + "stop_type": "일반차로", + "node_id": "124000402", + "nxtStn": "강명초등학교.고덕리엔파크3단지" + }, + { + "stop_nm": "강명초등학교.고덕리엔파크3단지", + "ycode": "37.554043", + "stop_no": "25345", + "xcode": "127.173785", + "stop_type": "일반차로", + "node_id": "124000403", + "nxtStn": "고덕자이.고덕천물놀이장" + }, + { + "stop_nm": "강명초등학교.고덕리엔파크3단지", + "ycode": "37.553825", + "stop_no": "25346", + "xcode": "127.173335", + "stop_type": "일반차로", + "node_id": "124000404", + "nxtStn": "고덕리엔파크2단지" + }, + { + "stop_nm": "고덕리엔파크2단지", + "ycode": "37.5568348591", + "stop_no": "25347", + "xcode": "127.1733644426", + "stop_type": "일반차로", + "node_id": "124000407", + "nxtStn": "강일역3번출구" + }, + { + "stop_nm": "굽은다리역구민회관.강동홈플러스", + "ycode": "37.545698", + "stop_no": "25348", + "xcode": "127.14279", + "stop_type": "일반차로", + "node_id": "124000405", + "nxtStn": "십자성마을" + }, + { + "stop_nm": "굽은다리역구민회관.강동홈플러스", + "ycode": "37.545612", + "stop_no": "25349", + "xcode": "127.143063", + "stop_type": "일반차로", + "node_id": "124000406", + "nxtStn": "굽은다리사거리" + }, + { + "stop_nm": "삼성엔지니어링", + "ycode": "37.54991", + "stop_no": "25350", + "xcode": "127.17495", + "stop_type": "일반차로", + "node_id": "124000413", + "nxtStn": "고덕리엔파크3단지서문" + }, + { + "stop_nm": "삼성엔지니어링", + "ycode": "37.54987", + "stop_no": "25351", + "xcode": "127.17478", + "stop_type": "일반차로", + "node_id": "124000428", + "nxtStn": "강동첨단업무단지.상일여고입구" + }, + { + "stop_nm": "고덕리엔파크3단지서문", + "ycode": "37.5512572809", + "stop_no": "25352", + "xcode": "127.1738483769", + "stop_type": "일반차로", + "node_id": "124000412", + "nxtStn": "고덕자이.상일여고" + }, + { + "stop_nm": "고덕리엔파크3단지서문", + "ycode": "37.5510707551", + "stop_no": "25353", + "xcode": "127.1738479436", + "stop_type": "일반차로", + "node_id": "124000411", + "nxtStn": "삼성엔지니어링" + }, + { + "stop_nm": "천동초교삼거리", + "ycode": "37.5415666821", + "stop_no": "25357", + "xcode": "127.1367999069", + "stop_type": "일반차로", + "node_id": "124000418", + "nxtStn": "동아하이빌" + }, + { + "stop_nm": "천동초교삼거리", + "ycode": "37.54193", + "stop_no": "25358", + "xcode": "127.136237", + "stop_type": "일반차로", + "node_id": "124000419", + "nxtStn": "십자성마을" + }, + { + "stop_nm": "동아하이빌", + "ycode": "37.544085", + "stop_no": "25359", + "xcode": "127.134127", + "stop_type": "일반차로", + "node_id": "124000420", + "nxtStn": "천일초교사거리" + }, + { + "stop_nm": "동아하이빌", + "ycode": "37.543892", + "stop_no": "25360", + "xcode": "127.134087", + "stop_type": "일반차로", + "node_id": "124000421", + "nxtStn": "천동초교삼거리" + }, + { + "stop_nm": "천일초교사거리", + "ycode": "37.5446006791", + "stop_no": "25361", + "xcode": "127.1323090477", + "stop_type": "일반차로", + "node_id": "124000414", + "nxtStn": "천일중.구강사" + }, + { + "stop_nm": "천일초교사거리", + "ycode": "37.5445369862", + "stop_no": "25362", + "xcode": "127.1312462814", + "stop_type": "일반차로", + "node_id": "124000415", + "nxtStn": "동아하이빌" + }, + { + "stop_nm": "천일중.구강사", + "ycode": "37.545113", + "stop_no": "25363", + "xcode": "127.129015", + "stop_type": "일반차로", + "node_id": "124000417", + "nxtStn": "서울현대요양병원" + }, + { + "stop_nm": "천일중.구강사", + "ycode": "37.5449352859", + "stop_no": "25364", + "xcode": "127.1290018939", + "stop_type": "일반차로", + "node_id": "124000416", + "nxtStn": "천일초교사거리" + }, + { + "stop_nm": "고덕센트럴.고덕숲아이파크", + "ycode": "37.5510116896", + "stop_no": "25365", + "xcode": "127.1654103568", + "stop_type": "일반차로", + "node_id": "124000427", + "nxtStn": "고현초등학교.고덕센트럴아이파크" + }, + { + "stop_nm": "고덕숲.고덕센트럴아이파크", + "ycode": "37.551530194", + "stop_no": "25366", + "xcode": "127.1651421363", + "stop_type": "일반차로", + "node_id": "124000426", + "nxtStn": "상일1동주민센터.롯데캐슬베네루체" + }, + { + "stop_nm": "고현초등학교.고덕센트럴아이파크", + "ycode": "37.5530410685", + "stop_no": "25367", + "xcode": "127.1653276924", + "stop_type": "일반차로", + "node_id": "124000425", + "nxtStn": "상일파출소.고덕아르테온" + }, + { + "stop_nm": "고현초등학교.고덕숲아이파크", + "ycode": "37.553965", + "stop_no": "25368", + "xcode": "127.165072", + "stop_type": "일반차로", + "node_id": "124000424", + "nxtStn": "고덕숲.고덕센트럴아이파크" + }, + { + "stop_nm": "현대토파즈아파트", + "ycode": "37.5253053335", + "stop_no": "25369", + "xcode": "127.1258610776", + "stop_type": "일반차로", + "node_id": "124000423", + "nxtStn": "채선당앞" + }, + { + "stop_nm": "채선당앞", + "ycode": "37.527080206", + "stop_no": "25370", + "xcode": "127.1218418512", + "stop_type": "일반차로", + "node_id": "124000422", + "nxtStn": "강동구청역농협중앙회" + }, + { + "stop_nm": "서울시동부기술교육원.명덕초교", + "ycode": "37.556223", + "stop_no": "25371", + "xcode": "127.144808", + "stop_type": "일반차로", + "node_id": "124000431", + "nxtStn": "아남.대우아파트" + }, + { + "stop_nm": "아남.대우아파트", + "ycode": "37.557713", + "stop_no": "25372", + "xcode": "127.14476", + "stop_type": "일반차로", + "node_id": "124000430", + "nxtStn": "고덕래미안힐스테이트시니어센터" + }, + { + "stop_nm": "강동롯데캐슬퍼스트아파트", + "ycode": "37.556909", + "stop_no": "25373", + "xcode": "127.144559", + "stop_type": "일반차로", + "node_id": "124000432", + "nxtStn": "명일역2번출구" + }, + { + "stop_nm": "천호역1번출구.문구거리", + "ycode": "37.539294", + "stop_no": "25374", + "xcode": "127.122232", + "stop_type": "일반차로", + "node_id": "124000452", + "nxtStn": "광나루역" + }, + { + "stop_nm": "강동리버스트7.6단지", + "ycode": "37.570644", + "stop_no": "25375", + "xcode": "127.172133", + "stop_type": "일반차로", + "node_id": "124000457", + "nxtStn": "강동리버스트상가" + }, + { + "stop_nm": "강동리버스트6.7단지", + "ycode": "37.570491", + "stop_no": "25376", + "xcode": "127.17195", + "stop_type": "일반차로", + "node_id": "124000456", + "nxtStn": "강일리버파크1단지103동" + }, + { + "stop_nm": "강동리버스트상가", + "ycode": "37.572099", + "stop_no": "25377", + "xcode": "127.174004", + "stop_type": "일반차로", + "node_id": "124000458", + "nxtStn": "강동리버스트8단지" + }, + { + "stop_nm": "강동리버스트상가", + "ycode": "37.5724769381", + "stop_no": "25378", + "xcode": "127.1746743791", + "stop_type": "일반차로", + "node_id": "124000459", + "nxtStn": "강동리버스트6.7단지" + }, + { + "stop_nm": "강동리버스트8단지", + "ycode": "37.572949", + "stop_no": "25379", + "xcode": "127.177054", + "stop_type": "일반차로", + "node_id": "124000460", + "nxtStn": "강일리버5단지.미사강변루나리움" + }, + { + "stop_nm": "강일역3번출구", + "ycode": "37.5576252923", + "stop_no": "25381", + "xcode": "127.1772712588", + "stop_type": "일반차로", + "node_id": "124000461", + "nxtStn": "강일리버파크10단지.9단지" + }, + { + "stop_nm": "강동리엔파크9단지", + "ycode": "37.556006698", + "stop_no": "25382", + "xcode": "127.1794170581", + "stop_type": "일반차로", + "node_id": "124000467", + "nxtStn": "강동리엔파크11단지" + }, + { + "stop_nm": "강동리엔파크9단지", + "ycode": "37.556268", + "stop_no": "25383", + "xcode": "127.179726", + "stop_type": "일반차로", + "node_id": "124000468", + "nxtStn": "강일역2번출구" + }, + { + "stop_nm": "강동리엔파크11단지", + "ycode": "37.554057", + "stop_no": "25384", + "xcode": "127.179383", + "stop_type": "일반차로", + "node_id": "124000466", + "nxtStn": "강동리엔파크13.14단지" + }, + { + "stop_nm": "강동리엔파크11단지", + "ycode": "37.553587", + "stop_no": "25385", + "xcode": "127.179833", + "stop_type": "일반차로", + "node_id": "124000465", + "nxtStn": "강동리엔파크9단지" + }, + { + "stop_nm": "강동리엔파크13.14단지", + "ycode": "37.55126", + "stop_no": "25386", + "xcode": "127.181663", + "stop_type": "일반차로", + "node_id": "124000464", + "nxtStn": "미사강변더샵센트럴포레.동원로 " + }, + { + "stop_nm": "강동리엔파크13.14단지", + "ycode": "37.551373", + "stop_no": "25387", + "xcode": "127.181737", + "stop_type": "일반차로", + "node_id": "124000463", + "nxtStn": "강동리엔파크11단지" + }, + { + "stop_nm": "강일역2번출구", + "ycode": "37.55793", + "stop_no": "25388", + "xcode": "127.177373", + "stop_type": "일반차로", + "node_id": "124000469", + "nxtStn": "강일역.고덕리엔파크2단지.3단지" + }, + { + "stop_nm": "가래여울", + "ycode": "37.5765137224", + "stop_no": "25501", + "xcode": "127.1688782547", + "stop_type": "마을버스", + "node_id": "124900026", + "nxtStn": "강동리버스트4단지" + }, + { + "stop_nm": "신명초교입구교차로", + "ycode": "37.5400880474", + "stop_no": "25505", + "xcode": "127.1467529825", + "stop_type": "마을버스", + "node_id": "124900024", + "nxtStn": "길동초등학교" + }, + { + "stop_nm": "강일리버파크3단지301동", + "ycode": "37.5681242511", + "stop_no": "25506", + "xcode": "127.1742419017", + "stop_type": "마을버스", + "node_id": "124900061", + "nxtStn": "강일리버파크4단지.2단지" + }, + { + "stop_nm": "길동초등학교", + "ycode": "37.5390026354", + "stop_no": "25508", + "xcode": "127.1464238219", + "stop_type": "마을버스", + "node_id": "124900102", + "nxtStn": "길동우성아파트.은평교회맞은편" + }, + { + "stop_nm": "강일리버파크1단지103동", + "ycode": "37.5680002929", + "stop_no": "25509", + "xcode": "127.1727484509", + "stop_type": "마을버스", + "node_id": "124900022", + "nxtStn": "강일리버파크3단지301동" + }, + { + "stop_nm": "길동우성아파트.은평교회맞은편", + "ycode": "37.5363256639", + "stop_no": "25510", + "xcode": "127.1455450213", + "stop_type": "마을버스", + "node_id": "124900100", + "nxtStn": "둔촌푸르지오아파트사거리" + }, + { + "stop_nm": "둔촌푸르지오아파트사거리", + "ycode": "37.534371", + "stop_no": "25512", + "xcode": "127.14493", + "stop_type": "마을버스", + "node_id": "124900106", + "nxtStn": "둔촌고앞" + }, + { + "stop_nm": "강일고등학교.강일리버파크7단지", + "ycode": "37.5650288184", + "stop_no": "25513", + "xcode": "127.1779895218", + "stop_type": "마을버스", + "node_id": "124900062", + "nxtStn": "강일리버파크9단지후문" + }, + { + "stop_nm": "둔촌고앞", + "ycode": "37.5316854362", + "stop_no": "25514", + "xcode": "127.1437301419", + "stop_type": "마을버스", + "node_id": "124900021", + "nxtStn": "구립둔촌어린이집" + }, + { + "stop_nm": "구립둔촌어린이집", + "ycode": "37.5300877341", + "stop_no": "25516", + "xcode": "127.1430346175", + "stop_type": "마을버스", + "node_id": "124900020", + "nxtStn": "농협둔촌동지점" + }, + { + "stop_nm": "고덕1동주민센터.두레근린공원", + "ycode": "37.55816", + "stop_no": "25517", + "xcode": "127.151465", + "stop_type": "마을버스", + "node_id": "124900119", + "nxtStn": "고덕역1번출구" + }, + { + "stop_nm": "고덕역1번출구", + "ycode": "37.555318", + "stop_no": "25518", + "xcode": "127.153148", + "stop_type": "마을버스", + "node_id": "124900121", + "nxtStn": "명일신동아아파트" + }, + { + "stop_nm": "명일신동아아파트", + "ycode": "37.552739", + "stop_no": "25520", + "xcode": "127.152717", + "stop_type": "마을버스", + "node_id": "124900123", + "nxtStn": "고덕삼환.주공9단지아파트" + }, + { + "stop_nm": "강일리버파크3단지308동", + "ycode": "37.5651782062", + "stop_no": "25521", + "xcode": "127.175712297", + "stop_type": "마을버스", + "node_id": "124900018", + "nxtStn": "강동공영차고지" + }, + { + "stop_nm": "둔촌주공아파트1.4단지후문", + "ycode": "37.527451917", + "stop_no": "25522", + "xcode": "127.1416277447", + "stop_type": "마을버스", + "node_id": "124900107", + "nxtStn": "한산중학교" + }, + { + "stop_nm": "상일동역3.4번출구", + "ycode": "37.557034", + "stop_no": "25523", + "xcode": "127.167976", + "stop_type": "마을버스", + "node_id": "124900017", + "nxtStn": "상일동역2번출구" + }, + { + "stop_nm": "한산중학교", + "ycode": "37.5281885341", + "stop_no": "25524", + "xcode": "127.1389985407", + "stop_type": "마을버스", + "node_id": "124900016", + "nxtStn": "둔촌역" + }, + { + "stop_nm": "주양쇼핑", + "ycode": "37.552198", + "stop_no": "25525", + "xcode": "127.152898", + "stop_type": "마을버스", + "node_id": "124900124", + "nxtStn": "고덕역" + }, + { + "stop_nm": "고덕리엔파크1단지", + "ycode": "37.561242", + "stop_no": "25526", + "xcode": "127.170521", + "stop_type": "마을버스", + "node_id": "124900072", + "nxtStn": "해뜨는주유소" + }, + { + "stop_nm": "둔촌역", + "ycode": "37.5287006078", + "stop_no": "25527", + "xcode": "127.1372434849", + "stop_type": "마을버스", + "node_id": "124900015", + "nxtStn": "우리은행둔촌역지점.발리호텔" + }, + { + "stop_nm": "고덕역1번출구", + "ycode": "37.5555055926", + "stop_no": "25528", + "xcode": "127.1533776217", + "stop_type": "마을버스", + "node_id": "124900122", + "nxtStn": "고덕1동주민센터.두레근린공원" + }, + { + "stop_nm": "고덕1동주민센터.두레근린공원", + "ycode": "37.558277", + "stop_no": "25529", + "xcode": "127.151716", + "stop_type": "마을버스", + "node_id": "124900120", + "nxtStn": "고덕아이파크아파트" + }, + { + "stop_nm": "우리은행둔촌역지점.발리호텔", + "ycode": "37.5290164166", + "stop_no": "25530", + "xcode": "127.1360979027", + "stop_type": "마을버스", + "node_id": "124900096", + "nxtStn": "둔촌청구아파트" + }, + { + "stop_nm": "둔촌청구아파트", + "ycode": "37.5295051666", + "stop_no": "25532", + "xcode": "127.1342126479", + "stop_type": "마을버스", + "node_id": "124900097", + "nxtStn": "대순진리회" + }, + { + "stop_nm": "고덕중학교", + "ycode": "37.5607702765", + "stop_no": "25533", + "xcode": "127.1610298468", + "stop_type": "마을버스", + "node_id": "124900014", + "nxtStn": "광문고.서울컨벤션고" + }, + { + "stop_nm": "대순진리회", + "ycode": "37.5303284009", + "stop_no": "25534", + "xcode": "127.1313345271", + "stop_type": "마을버스", + "node_id": "124900093", + "nxtStn": "성내2동주민센터.성내복지관" + }, + { + "stop_nm": "농협둔촌동지점", + "ycode": "37.529086", + "stop_no": "25535", + "xcode": "127.143694", + "stop_type": "마을버스", + "node_id": "124900116", + "nxtStn": "9호선중앙보훈병원역1번출구" + }, + { + "stop_nm": "성내2동주민센터.성내복지관", + "ycode": "37.5311925076", + "stop_no": "25536", + "xcode": "127.1280943379", + "stop_type": "마을버스", + "node_id": "124900094", + "nxtStn": "성내삼성아파트.공안과" + }, + { + "stop_nm": "고덕아이파크101동", + "ycode": "37.5605725168", + "stop_no": "25537", + "xcode": "127.1559730955", + "stop_type": "마을버스", + "node_id": "124900013", + "nxtStn": "고덕아이파크아파트" + }, + { + "stop_nm": "성내삼성아파트.공안과", + "ycode": "37.5318998345", + "stop_no": "25538", + "xcode": "127.1256096517", + "stop_type": "마을버스", + "node_id": "124900090", + "nxtStn": "성내주유소" + }, + { + "stop_nm": "9호선중앙보훈병원역1번출구", + "ycode": "37.527796", + "stop_no": "25539", + "xcode": "127.147509", + "stop_type": "마을버스", + "node_id": "124900118", + "nxtStn": "보훈회관" + }, + { + "stop_nm": "성내주유소", + "ycode": "37.5328991827", + "stop_no": "25540", + "xcode": "127.1221432471", + "stop_type": "마을버스", + "node_id": "124900095", + "nxtStn": "영파여고.강동구청역" + }, + { + "stop_nm": "묘곡초교사거리", + "ycode": "37.559319351", + "stop_no": "25541", + "xcode": "127.151627345", + "stop_type": "마을버스", + "node_id": "124900012", + "nxtStn": "아남.대우아파트" + }, + { + "stop_nm": "선린초등학교", + "ycode": "37.528832", + "stop_no": "25542", + "xcode": "127.145196", + "stop_type": "마을버스", + "node_id": "124900117", + "nxtStn": "둔촌고등학교" + }, + { + "stop_nm": "아남.대우아파트", + "ycode": "37.55751", + "stop_no": "25543", + "xcode": "127.144594", + "stop_type": "마을버스", + "node_id": "124900011", + "nxtStn": "롯데캐슬아파트" + }, + { + "stop_nm": "롯데캐슬아파트", + "ycode": "37.5561042049", + "stop_no": "25544", + "xcode": "127.1444776533", + "stop_type": "마을버스", + "node_id": "124900010", + "nxtStn": "명일동국민은행.래미안솔베뉴" + }, + { + "stop_nm": "명일동국민은행.래미안솔베뉴", + "ycode": "37.5537289168", + "stop_no": "25545", + "xcode": "127.1441672987", + "stop_type": "마을버스", + "node_id": "124900009", + "nxtStn": "명일역" + }, + { + "stop_nm": "명일역", + "ycode": "37.5520472158", + "stop_no": "25546", + "xcode": "127.1439571157", + "stop_type": "마을버스", + "node_id": "124900068", + "nxtStn": "성덕고등학교" + }, + { + "stop_nm": "성덕고등학교", + "ycode": "37.5507648497", + "stop_no": "25547", + "xcode": "127.1433061388", + "stop_type": "마을버스", + "node_id": "124900008", + "nxtStn": "천호우성아파트" + }, + { + "stop_nm": "천호우성아파트", + "ycode": "37.5505952077", + "stop_no": "25549", + "xcode": "127.1397441084", + "stop_type": "마을버스", + "node_id": "124900006", + "nxtStn": "약국앞" + }, + { + "stop_nm": "성내주유소", + "ycode": "37.5327089263", + "stop_no": "25550", + "xcode": "127.1222640082", + "stop_type": "마을버스", + "node_id": "124900005", + "nxtStn": "성내삼성아파트.공안과" + }, + { + "stop_nm": "약국앞", + "ycode": "37.5500706967", + "stop_no": "25551", + "xcode": "127.1375044877", + "stop_type": "마을버스", + "node_id": "124900004", + "nxtStn": "강동농협" + }, + { + "stop_nm": "성내삼성아파트.공안과", + "ycode": "37.5316177396", + "stop_no": "25552", + "xcode": "127.1261793278", + "stop_type": "마을버스", + "node_id": "124900091", + "nxtStn": "성내2동주민센터.성내복지관" + }, + { + "stop_nm": "강동농협", + "ycode": "37.5480835452", + "stop_no": "25553", + "xcode": "127.1353709023", + "stop_type": "마을버스", + "node_id": "124900003", + "nxtStn": "서울.경기양돈농협" + }, + { + "stop_nm": "성내2동주민센터.성내복지관", + "ycode": "37.5310582873", + "stop_no": "25554", + "xcode": "127.1280545065", + "stop_type": "마을버스", + "node_id": "124900092", + "nxtStn": "대순진리회" + }, + { + "stop_nm": "대순진리회", + "ycode": "37.5301455577", + "stop_no": "25556", + "xcode": "127.131262924", + "stop_type": "마을버스", + "node_id": "124900002", + "nxtStn": "둔촌청구아파트" + }, + { + "stop_nm": "고분다리", + "ycode": "37.5426653669", + "stop_no": "25557", + "xcode": "127.1312860033", + "stop_type": "마을버스", + "node_id": "124900001", + "nxtStn": "천호시장" + }, + { + "stop_nm": "둔촌청구아파트", + "ycode": "37.5294985648", + "stop_no": "25558", + "xcode": "127.1336774558", + "stop_type": "마을버스", + "node_id": "124900098", + "nxtStn": "둔촌시장.발리호텔" + }, + { + "stop_nm": "천호시장", + "ycode": "37.5412474515", + "stop_no": "25559", + "xcode": "127.130102088", + "stop_type": "마을버스", + "node_id": "124900027", + "nxtStn": "천호동로데오거리" + }, + { + "stop_nm": "둔촌시장.발리호텔", + "ycode": "37.5288209974", + "stop_no": "25560", + "xcode": "127.1359945857", + "stop_type": "마을버스", + "node_id": "124900099", + "nxtStn": "둔촌역" + }, + { + "stop_nm": "천호동로데오거리", + "ycode": "37.540564881", + "stop_no": "25561", + "xcode": "127.1271982797", + "stop_type": "마을버스", + "node_id": "124900086", + "nxtStn": "천호역2번출구.현대백화점" + }, + { + "stop_nm": "서울.경기양돈농협", + "ycode": "37.547634262", + "stop_no": "25562", + "xcode": "127.1334687776", + "stop_type": "마을버스", + "node_id": "124900075", + "nxtStn": "브라운스톤" + }, + { + "stop_nm": "둔촌역", + "ycode": "37.5284879821", + "stop_no": "25563", + "xcode": "127.1372148092", + "stop_type": "마을버스", + "node_id": "124900028", + "nxtStn": "둔촌주공아파트1.4단지후문" + }, + { + "stop_nm": "브라운스톤", + "ycode": "37.5490807055", + "stop_no": "25565", + "xcode": "127.130071564", + "stop_type": "마을버스", + "node_id": "124900029", + "nxtStn": "암사종합시장" + }, + { + "stop_nm": "둔촌주공아파트1.4단지후문", + "ycode": "37.5271070337", + "stop_no": "25566", + "xcode": "127.1421803585", + "stop_type": "마을버스", + "node_id": "124900030", + "nxtStn": "둔촌신성미소지움아파트" + }, + { + "stop_nm": "암사종합시장", + "ycode": "37.5498250896", + "stop_no": "25568", + "xcode": "127.1283514406", + "stop_type": "마을버스", + "node_id": "124900076", + "nxtStn": "암사역" + }, + { + "stop_nm": "천호역5번출구", + "ycode": "37.5377527162", + "stop_no": "25570", + "xcode": "127.1270531861", + "stop_type": "마을버스", + "node_id": "124900085", + "nxtStn": "천호역3번출구.현대백화점" + }, + { + "stop_nm": "암사역", + "ycode": "37.5506330065", + "stop_no": "25571", + "xcode": "127.1278571069", + "stop_type": "마을버스", + "node_id": "124900032", + "nxtStn": "암사삼성.현대아파트" + }, + { + "stop_nm": "암사삼성.현대아파트", + "ycode": "37.553522", + "stop_no": "25574", + "xcode": "127.128864", + "stop_type": "마을버스", + "node_id": "124900077", + "nxtStn": "고덕주유소.선사초등학교" + }, + { + "stop_nm": "둔촌고등학교", + "ycode": "37.5317806918", + "stop_no": "25575", + "xcode": "127.1439441771", + "stop_type": "마을버스", + "node_id": "124900033", + "nxtStn": "둔촌푸르지오아파트사거리" + }, + { + "stop_nm": "천호우체국", + "ycode": "37.5408597005", + "stop_no": "25576", + "xcode": "127.1253621434", + "stop_type": "마을버스", + "node_id": "124900087", + "nxtStn": "천호동로데오거리" + }, + { + "stop_nm": "고덕주유소.선사초등학교", + "ycode": "37.555068", + "stop_no": "25577", + "xcode": "127.129451", + "stop_type": "마을버스", + "node_id": "124900034", + "nxtStn": "선사마을" + }, + { + "stop_nm": "둔촌푸르지오아파트사거리", + "ycode": "37.5343357062", + "stop_no": "25578", + "xcode": "127.1450862778", + "stop_type": "마을버스", + "node_id": "124900035", + "nxtStn": "길동은평교회" + }, + { + "stop_nm": "천호동로데오거리", + "ycode": "37.5403621445", + "stop_no": "25579", + "xcode": "127.1271888823", + "stop_type": "마을버스", + "node_id": "124900088", + "nxtStn": "천호시장" + }, + { + "stop_nm": "선사마을", + "ycode": "37.557670789", + "stop_no": "25580", + "xcode": "127.1304452986", + "stop_type": "마을버스", + "node_id": "124900036", + "nxtStn": "서울암사동유적" + }, + { + "stop_nm": "길동은평교회", + "ycode": "37.5364235286", + "stop_no": "25581", + "xcode": "127.1458326287", + "stop_type": "마을버스", + "node_id": "124900037", + "nxtStn": "길동초등학교" + }, + { + "stop_nm": "천호시장", + "ycode": "37.5406526302", + "stop_no": "25582", + "xcode": "127.1293711544", + "stop_type": "마을버스", + "node_id": "124900038", + "nxtStn": "고분다리" + }, + { + "stop_nm": "서울암사동유적", + "ycode": "37.5593681789", + "stop_no": "25583", + "xcode": "127.1311704207", + "stop_type": "마을버스", + "node_id": "124900039", + "nxtStn": "서원마을" + }, + { + "stop_nm": "길동초등학교", + "ycode": "37.5387294931", + "stop_no": "25584", + "xcode": "127.1465126841", + "stop_type": "마을버스", + "node_id": "124900103", + "nxtStn": "신명초교입구교차로" + }, + { + "stop_nm": "고분다리", + "ycode": "37.5429343454", + "stop_no": "25585", + "xcode": "127.1316893468", + "stop_type": "마을버스", + "node_id": "124900082", + "nxtStn": "천호초교입구사거리" + }, + { + "stop_nm": "서원마을", + "ycode": "37.563753", + "stop_no": "25586", + "xcode": "127.133091", + "stop_type": "마을버스", + "node_id": "124900040", + "nxtStn": "서울암사동유적" + }, + { + "stop_nm": "신명초교입구교차로", + "ycode": "37.540325", + "stop_no": "25587", + "xcode": "127.146925", + "stop_type": "마을버스", + "node_id": "124900104", + "nxtStn": "길동신동아아파트" + }, + { + "stop_nm": "서울암사동유적", + "ycode": "37.5593289013", + "stop_no": "25589", + "xcode": "127.1308364383", + "stop_type": "마을버스", + "node_id": "124900042", + "nxtStn": "선사마을" + }, + { + "stop_nm": "강동농협", + "ycode": "37.5484091555", + "stop_no": "25591", + "xcode": "127.1358971506", + "stop_type": "마을버스", + "node_id": "124900043", + "nxtStn": "약국앞" + }, + { + "stop_nm": "선사마을", + "ycode": "37.5572645099", + "stop_no": "25592", + "xcode": "127.1300088207", + "stop_type": "마을버스", + "node_id": "124900044", + "nxtStn": "선사초등학교" + }, + { + "stop_nm": "약국앞", + "ycode": "37.5499147893", + "stop_no": "25594", + "xcode": "127.1375200461", + "stop_type": "마을버스", + "node_id": "124900080", + "nxtStn": "천호우성아파트" + }, + { + "stop_nm": "선사초등학교", + "ycode": "37.555166", + "stop_no": "25595", + "xcode": "127.129285", + "stop_type": "마을버스", + "node_id": "124900078", + "nxtStn": "암사삼성.현대아파트" + }, + { + "stop_nm": "천호우성아파트", + "ycode": "37.5503787701", + "stop_no": "25597", + "xcode": "127.1391291506", + "stop_type": "마을버스", + "node_id": "124900083", + "nxtStn": "성덕중고등학교" + }, + { + "stop_nm": "암사역", + "ycode": "37.550955", + "stop_no": "25602", + "xcode": "127.127763", + "stop_type": "마을버스", + "node_id": "124900079", + "nxtStn": "암사종합시장" + }, + { + "stop_nm": "고덕한양아파트", + "ycode": "37.549091216", + "stop_no": "25603", + "xcode": "127.1556458569", + "stop_type": "일반차로", + "node_id": "124000433", + "nxtStn": "한영중고한영외고" + }, + { + "stop_nm": "지식산업센터", + "ycode": "37.565373", + "stop_no": "25610", + "xcode": "127.159978", + "stop_type": "마을버스", + "node_id": "124900138", + "nxtStn": "온조대왕문화체육관" + }, + { + "stop_nm": "온조대왕문화체육관", + "ycode": "37.557771", + "stop_no": "25611", + "xcode": "127.156585", + "stop_type": "마을버스", + "node_id": "124900139", + "nxtStn": "고덕역" + }, + { + "stop_nm": "온조대왕문화체육관", + "ycode": "37.556495", + "stop_no": "25612", + "xcode": "127.156813", + "stop_type": "마을버스", + "node_id": "124900140", + "nxtStn": "광문고.컨벤션고" + }, + { + "stop_nm": "광문고.컨벤션고", + "ycode": "37.558451", + "stop_no": "25613", + "xcode": "127.156912", + "stop_type": "마을버스", + "node_id": "124900141", + "nxtStn": "지식산업센터" + }, + { + "stop_nm": "천호우체국", + "ycode": "37.5408398008", + "stop_no": "25616", + "xcode": "127.1254334028", + "stop_type": "일반차로", + "node_id": "124000232", + "nxtStn": "천호우체국.로데오거리" + }, + { + "stop_nm": "강동구청", + "ycode": "37.5314072721", + "stop_no": "25617", + "xcode": "127.1218466271", + "stop_type": "일반차로", + "node_id": "124000233", + "nxtStn": "조일약국" + }, + { + "stop_nm": "고분다리시장입구", + "ycode": "37.5430435328", + "stop_no": "25620", + "xcode": "127.1315503441", + "stop_type": "일반차로", + "node_id": "124000236", + "nxtStn": "천호시장" + }, + { + "stop_nm": "고분다리시장입구", + "ycode": "37.5429766501", + "stop_no": "25621", + "xcode": "127.1317312927", + "stop_type": "일반차로", + "node_id": "124000237", + "nxtStn": "천호초교입구사거리" + }, + { + "stop_nm": "천호우성아파트", + "ycode": "37.5500020014", + "stop_no": "25625", + "xcode": "127.1376865764", + "stop_type": "일반차로", + "node_id": "124000241", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "성덕중고등학교", + "ycode": "37.550645", + "stop_no": "25643", + "xcode": "127.142691", + "stop_type": "일반차로", + "node_id": "124000258", + "nxtStn": "명일1동주민센터" + }, + { + "stop_nm": "성덕중고등학교", + "ycode": "37.5507022382", + "stop_no": "25644", + "xcode": "127.1429223457", + "stop_type": "일반차로", + "node_id": "124000259", + "nxtStn": "우성아파트" + }, + { + "stop_nm": "강동농협", + "ycode": "37.548070466", + "stop_no": "25650", + "xcode": "127.1353378591", + "stop_type": "일반차로", + "node_id": "124000265", + "nxtStn": "천호초교입구사거리" + }, + { + "stop_nm": "강동농협", + "ycode": "37.5484001176", + "stop_no": "25651", + "xcode": "127.1359045267", + "stop_type": "일반차로", + "node_id": "124000434", + "nxtStn": "천호우성아파트" + }, + { + "stop_nm": "천호우성아파트", + "ycode": "37.5501947428", + "stop_no": "25653", + "xcode": "127.137766155", + "stop_type": "일반차로", + "node_id": "124000268", + "nxtStn": "강동농협" + }, + { + "stop_nm": "천호초교입구사거리", + "ycode": "37.546492", + "stop_no": "25654", + "xcode": "127.134214", + "stop_type": "일반차로", + "node_id": "124000269", + "nxtStn": "강동농협" + }, + { + "stop_nm": "천호시장", + "ycode": "37.5405825715", + "stop_no": "25657", + "xcode": "127.1291639456", + "stop_type": "일반차로", + "node_id": "124000272", + "nxtStn": "고분다리시장입구" + }, + { + "stop_nm": "천호초교입구사거리", + "ycode": "37.545888", + "stop_no": "25658", + "xcode": "127.133649", + "stop_type": "일반차로", + "node_id": "124000273", + "nxtStn": "고분다리" + }, + { + "stop_nm": "천호시장", + "ycode": "37.540697107", + "stop_no": "25659", + "xcode": "127.1290758762", + "stop_type": "일반차로", + "node_id": "124000274", + "nxtStn": "천호우체국.로데오거리" + }, + { + "stop_nm": "암사종합시장", + "ycode": "37.5496990461", + "stop_no": "25666", + "xcode": "127.1282504974", + "stop_type": "마을버스", + "node_id": "124900089", + "nxtStn": "브라운스톤" + }, + { + "stop_nm": "명일동국민은행.래미안솔베뉴", + "ycode": "37.5534442982", + "stop_no": "25674", + "xcode": "127.144359", + "stop_type": "마을버스", + "node_id": "124900047", + "nxtStn": "서울시동부기술교육원.명덕초교" + }, + { + "stop_nm": "브라운스톤", + "ycode": "37.5488715672", + "stop_no": "25675", + "xcode": "127.1301481597", + "stop_type": "마을버스", + "node_id": "124900048", + "nxtStn": "서울.경기양돈농협" + }, + { + "stop_nm": "삼익가든아파트", + "ycode": "37.5463048142", + "stop_no": "25678", + "xcode": "127.1485399627", + "stop_type": "마을버스", + "node_id": "124900133", + "nxtStn": "길동성당" + }, + { + "stop_nm": "삼익가든아파트", + "ycode": "37.546158", + "stop_no": "25679", + "xcode": "127.14878", + "stop_type": "마을버스", + "node_id": "124900134", + "nxtStn": "명일여자고등학교" + }, + { + "stop_nm": "둔촌신성미소지움아파트", + "ycode": "37.5267849525", + "stop_no": "25680", + "xcode": "127.1442949675", + "stop_type": "마을버스", + "node_id": "124900135", + "nxtStn": "둔촌주공아파트1.4단지후문" + }, + { + "stop_nm": "둔촌신성미소지움아파트", + "ycode": "37.526637", + "stop_no": "25681", + "xcode": "127.144261", + "stop_type": "마을버스", + "node_id": "124900136", + "nxtStn": "보훈회관" + }, + { + "stop_nm": "9호선중앙보훈병원역1번출구", + "ycode": "37.5279111948", + "stop_no": "25682", + "xcode": "127.1475394189", + "stop_type": "마을버스", + "node_id": "124900137", + "nxtStn": "선린초등학교" + }, + { + "stop_nm": "상일초등학교", + "ycode": "37.5457731057", + "stop_no": "25709", + "xcode": "127.171462455", + "stop_type": "일반차로", + "node_id": "124000356", + "nxtStn": "동서울(경유)" + }, + { + "stop_nm": "길동LG자이아파트", + "ycode": "37.5361123905", + "stop_no": "25718", + "xcode": "127.1480054526", + "stop_type": "가로변시간", + "node_id": "124000349", + "nxtStn": "상일초교" + }, + { + "stop_nm": "강동구청역", + "ycode": "37.5318061667", + "stop_no": "25719", + "xcode": "127.121254373", + "stop_type": "가로변전일", + "node_id": "124000352", + "nxtStn": "천호역" + }, + { + "stop_nm": "천호역", + "ycode": "37.5372846491", + "stop_no": "25720", + "xcode": "127.1270546134", + "stop_type": "일반차로", + "node_id": "124000351", + "nxtStn": "강동역.강풀만화거리입구" + }, + { + "stop_nm": "길동사거리", + "ycode": "37.534205", + "stop_no": "25721", + "xcode": "127.136998", + "stop_type": "가로변시간", + "node_id": "124000350", + "nxtStn": "길동LG자이아파트" + }, + { + "stop_nm": "상일초등학교", + "ycode": "37.546425", + "stop_no": "25722", + "xcode": "127.171582", + "stop_type": "일반차로", + "node_id": "124000348", + "nxtStn": "초이동" + }, + { + "stop_nm": "길동LG자이아파트", + "ycode": "37.537081", + "stop_no": "25723", + "xcode": "127.14913", + "stop_type": "가로변시간", + "node_id": "124000347", + "nxtStn": "길동사거리" + }, + { + "stop_nm": "길동사거리", + "ycode": "37.534662", + "stop_no": "25724", + "xcode": "127.137085", + "stop_type": "가로변시간", + "node_id": "124000346", + "nxtStn": "강동역1번출구.동신중학교" + }, + { + "stop_nm": "천호역", + "ycode": "37.537724", + "stop_no": "25725", + "xcode": "127.127292", + "stop_type": "가로변시간", + "node_id": "124000345", + "nxtStn": "강동구청역" + }, + { + "stop_nm": "강동구청역", + "ycode": "37.5311797152", + "stop_no": "25726", + "xcode": "127.1205586271", + "stop_type": "가로변전일", + "node_id": "123000533", + "nxtStn": "풍납동극동.쌍용아파트" + }, + { + "stop_nm": "둔촌동역", + "ycode": "37.5271572018", + "stop_no": "25727", + "xcode": "127.1362222664", + "stop_type": "일반차로", + "node_id": "124000355", + "nxtStn": "길동역3번출구" + }, + { + "stop_nm": "둔촌동역", + "ycode": "37.527387", + "stop_no": "25728", + "xcode": "127.135892", + "stop_type": "일반차로", + "node_id": "124000354", + "nxtStn": "올림픽선수촌아파트" + }, + { + "stop_nm": "서울.경기양돈농협", + "ycode": "37.5475443585", + "stop_no": "25730", + "xcode": "127.1332864085", + "stop_type": "마을버스", + "node_id": "124900050", + "nxtStn": "강동농협" + }, + { + "stop_nm": "고덕래미안힐스테이트시니어센터", + "ycode": "37.559295", + "stop_no": "25732", + "xcode": "127.147944", + "stop_type": "마을버스", + "node_id": "124900112", + "nxtStn": "고덕1동주민센터.고덕래미안힐스테이트" + }, + { + "stop_nm": "고덕1동주민센터.고덕래미안힐스테이트", + "ycode": "37.55871", + "stop_no": "25733", + "xcode": "127.150546", + "stop_type": "마을버스", + "node_id": "124900052", + "nxtStn": "고덕아이파크아파트" + }, + { + "stop_nm": "고덕중학교", + "ycode": "37.5606230267", + "stop_no": "25736", + "xcode": "127.1606412781", + "stop_type": "마을버스", + "node_id": "124900053", + "nxtStn": "강덕초등학교.고덕그라시움" + }, + { + "stop_nm": "상일동역5번출구", + "ycode": "37.556891", + "stop_no": "25740", + "xcode": "127.168426", + "stop_type": "마을버스", + "node_id": "124900054", + "nxtStn": "해뜨는주유소" + }, + { + "stop_nm": "강일리버파크1단지.금화사", + "ycode": "37.567027", + "stop_no": "25746", + "xcode": "127.173373", + "stop_type": "마을버스", + "node_id": "124900055", + "nxtStn": "강일동주민센터" + }, + { + "stop_nm": "강일리버파크6단지", + "ycode": "37.5639305134", + "stop_no": "25749", + "xcode": "127.1754976862", + "stop_type": "마을버스", + "node_id": "124900066", + "nxtStn": "종점" + }, + { + "stop_nm": "강일리버파크6단지610동", + "ycode": "37.5650643792", + "stop_no": "25752", + "xcode": "127.175906733", + "stop_type": "마을버스", + "node_id": "124900067", + "nxtStn": "강일리버파크5단지.4단지" + }, + { + "stop_nm": "강일리버파크1단지정문", + "ycode": "37.5680965321", + "stop_no": "25753", + "xcode": "127.1728698017", + "stop_type": "마을버스", + "node_id": "124900057", + "nxtStn": "강동리버스트7.6단지" + }, + { + "stop_nm": "가래여울", + "ycode": "37.5765642585", + "stop_no": "25760", + "xcode": "127.1690128239", + "stop_type": "마을버스", + "node_id": "124900111", + "nxtStn": "종점" + }, + { + "stop_nm": "강동리버스트4단지", + "ycode": "37.573778", + "stop_no": "25761", + "xcode": "127.171993", + "stop_type": "마을버스", + "node_id": "124900127", + "nxtStn": "강동리버스트8단지" + }, + { + "stop_nm": "강동리버스트8단지", + "ycode": "37.573007", + "stop_no": "25762", + "xcode": "127.176671", + "stop_type": "마을버스", + "node_id": "124900129", + "nxtStn": "강동리버스트상가" + }, + { + "stop_nm": "강동리버스트8단지", + "ycode": "37.5725963295", + "stop_no": "25763", + "xcode": "127.1761086097", + "stop_type": "마을버스", + "node_id": "124900130", + "nxtStn": "강빛초.중학교" + }, + { + "stop_nm": "강빛초.중학교", + "ycode": "37.57415", + "stop_no": "25764", + "xcode": "127.1728", + "stop_type": "마을버스", + "node_id": "124900128", + "nxtStn": "가래여울" + }, + { + "stop_nm": "굽은다리역", + "ycode": "37.545412", + "stop_no": "25781", + "xcode": "127.143019", + "stop_type": "일반차로", + "node_id": "124000398", + "nxtStn": "명일역4번출구.명일전통시장" + }, + { + "stop_nm": "굽은다리역", + "ycode": "37.545591", + "stop_no": "25782", + "xcode": "127.142752", + "stop_type": "일반차로", + "node_id": "124000399", + "nxtStn": "길동역1번출구" + }, + { + "stop_nm": "명일동국민은행.래미안솔베뉴", + "ycode": "37.554146", + "stop_no": "25783", + "xcode": "127.144192", + "stop_type": "일반차로", + "node_id": "124000435", + "nxtStn": "명일역1번출구.명일전통시장" + }, + { + "stop_nm": "명일동국민은행.래미안솔베뉴", + "ycode": "37.553372", + "stop_no": "25784", + "xcode": "127.144359", + "stop_type": "일반차로", + "node_id": "124000436", + "nxtStn": "배재중고등학교" + }, + { + "stop_nm": "암사삼성.현대아파트", + "ycode": "37.5533184173", + "stop_no": "25990", + "xcode": "127.1285487091", + "stop_type": "마을버스", + "node_id": "124900108", + "nxtStn": "암사역" + }, + { + "stop_nm": "천호우체국.로데오거리", + "ycode": "37.5405557883", + "stop_no": "25994", + "xcode": "127.1272740832", + "stop_type": "일반차로", + "node_id": "124000335", + "nxtStn": "천호역2번출구.현대백화점" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.550385732", + "stop_no": "25995", + "xcode": "127.1393385419", + "stop_type": "일반차로", + "node_id": "124000334", + "nxtStn": "성덕중고등학교" + }, + { + "stop_nm": "우성아파트", + "ycode": "37.5506426076", + "stop_no": "25996", + "xcode": "127.1400463819", + "stop_type": "일반차로", + "node_id": "124000333", + "nxtStn": "천호우성아파트" + }, + { + "stop_nm": "조일약국", + "ycode": "37.533630263", + "stop_no": "25997", + "xcode": "127.123596182", + "stop_type": "일반차로", + "node_id": "124000332", + "nxtStn": "조남JC(경유)" + }, + { + "stop_nm": "성내시장", + "ycode": "37.536154934", + "stop_no": "25998", + "xcode": "127.1254968434", + "stop_type": "일반차로", + "node_id": "124000331", + "nxtStn": "도리JC(경유)" + }, + { + "stop_nm": "천호우체국.로데오거리", + "ycode": "37.5403430618", + "stop_no": "25999", + "xcode": "127.1273370925", + "stop_type": "일반차로", + "node_id": "124000330", + "nxtStn": "천호시장" + } + ] +} diff --git a/Projects/App/Sources/AppDelegate+Appearance.swift b/Projects/App/Sources/AppDelegate+Appearance.swift index 1db12c5d..f9fac2af 100644 --- a/Projects/App/Sources/AppDelegate+Appearance.swift +++ b/Projects/App/Sources/AppDelegate+Appearance.swift @@ -12,14 +12,7 @@ import DesignSystem extension AppDelegate { func setupAppearance() { - let accentColor = DesignSystemAsset.accentColor.color - let mainColor = DesignSystemAsset.mainColor.color - let backgroundColor = DesignSystemAsset.backgroundColor.color - let tabBackgroundColor = DesignSystemAsset.tabBackgroundColor.color - UINavigationBar.appearance().backgroundColor = backgroundColor - UITabBar.appearance().backgroundColor = tabBackgroundColor - UITabBar.appearance().tintColor = accentColor - UITabBar.appearance().unselectedItemTintColor = mainColor - UITabBar.appearance().isTranslucent = false + Appearance.setupAppearance() + Appearance.setupTabBarAppearance() } } diff --git a/Projects/App/Sources/AppDelegate+Firebase.swift b/Projects/App/Sources/AppDelegate+Firebase.swift new file mode 100644 index 00000000..1b2e7358 --- /dev/null +++ b/Projects/App/Sources/AppDelegate+Firebase.swift @@ -0,0 +1,48 @@ +// +// AppDelegate+Firebase.swift +// App +// +// Created by gnksbm on 3/21/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Firebase +import FirebaseMessaging + +extension AppDelegate { + func configureFirebase(application: UIApplication) { + guard let filePath = Bundle.main.path( + forResource: "GoogleService-Info", + ofType: "plist" + ), + let options = FirebaseOptions(contentsOfFile: filePath) + else { return } + FirebaseApp.configure(options: options) + application.registerForRemoteNotifications() + } +} + +extension AppDelegate { + func application( + _ application: UIApplication, + didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data + ) { + Messaging.messaging().delegate = self + Messaging.messaging().apnsToken = deviceToken + } +} + +extension AppDelegate: MessagingDelegate { + func messaging( + _ messaging: Messaging, + didReceiveRegistrationToken fcmToken: String? + ) { + guard let fcmToken else { return } + UserDefaults.standard.setValue( + fcmToken, + forKey: "fcmToken" + ) + } +} diff --git a/Projects/App/Sources/AppDelegate+Register.swift b/Projects/App/Sources/AppDelegate+Register.swift index 42500c50..10637928 100644 --- a/Projects/App/Sources/AppDelegate+Register.swift +++ b/Projects/App/Sources/AppDelegate+Register.swift @@ -9,17 +9,85 @@ import Foundation import Core +import CoreDataService import Data import Domain -import Networks +import NetworkService extension AppDelegate { func registerDependencies() { - } -} - -extension AppDelegate { - var networkService: NetworkService { - DefaultNetworkService() + let coreDataService: CoreDataService = DefaultCoreDataService() + let networkService: NetworkService = DefaultNetworkService() + let locationService: LocationService = DefaultLocationService() + + let favoritesRepository: FavoritesRepository + = DefaultFavoritesRepository(coreDataService: coreDataService) + let busStopArrivalInfoRepository: BusStopArrivalInfoRepository + = DefaultBusStopArrivalInfoRepository(networkService: networkService) + let stationListRepository: StationListRepository + = DefaultStationListRepository() + let regularAlarmRepository: RegularAlarmRepository + = DefaultRegularAlarmRepository( + coreDataService: coreDataService, + networkService: networkService + ) + let localNotificationService: LocalNotificationService + = DefaultLocalNotificationService() + let regularAlarmEditingService: RegularAlarmEditingService + = DefaultRegularAlarmEditingService() + + DIContainer.register( + type: FavoritesUseCase.self, + DefaultFavoritesUseCase( + busStopArrivalInfoRepository: busStopArrivalInfoRepository, + favoritesRepository: favoritesRepository + ) + ) + + DIContainer.register( + type: RegularAlarmUseCase.self, + DefaultRegularAlarmUseCase( + localNotificationService: localNotificationService, + regularAlarmRepository: regularAlarmRepository + ) + ) + + DIContainer.register( + type: AddRegularAlarmUseCase.self, + DefaultAddRegularAlarmUseCase( + localNotificationService: localNotificationService, + regularAlarmRepository: regularAlarmRepository + ) + ) + + DIContainer.register( + type: SearchUseCase.self, + DefaultSearchUseCase( + stationListRepository: stationListRepository, + locationService: locationService + ) + ) + + DIContainer.register( + type: BusStopUseCase.self, + DefaultBusStopUseCase( + busStopArrivalInfoRepository: busStopArrivalInfoRepository, + favoritesRepository: favoritesRepository, + regularAlarmEditingService: regularAlarmEditingService + ) + ) + + DIContainer.register( + type: NearMapUseCase.self, + DefaultNearMapUseCase( + stationListRepository: stationListRepository, + locationService: locationService + ) + ) + + DIContainer.register( + type: RegularAlarmEditingService.self, + regularAlarmEditingService + ) } } diff --git a/Projects/App/Sources/AppDelegate+UserNotification.swift b/Projects/App/Sources/AppDelegate+UserNotification.swift new file mode 100644 index 00000000..80266687 --- /dev/null +++ b/Projects/App/Sources/AppDelegate+UserNotification.swift @@ -0,0 +1,42 @@ +// +// AppDelegate+UserNotification.swift +// App +// +// Created by gnksbm on 2/27/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit +import UserNotifications + +import Core +import Data +import Domain +import NetworkService + +extension AppDelegate { + func configureNotification(application: UIApplication) { + UNUserNotificationCenter.current().delegate = self + } +} + +extension AppDelegate: UNUserNotificationCenterDelegate { + // foreground에서 푸시를 받았을 때 + func userNotificationCenter( + _ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping ( + UNNotificationPresentationOptions + ) -> Void + ) { + completionHandler([.banner, .badge, .sound, .list]) + } + // foreground, background에서 푸시를 탭 했을 때 + func userNotificationCenter( + _ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void + ) { + completionHandler() + } +} diff --git a/Projects/App/Sources/AppDelegate.swift b/Projects/App/Sources/AppDelegate.swift index 4763309a..145a5e09 100644 --- a/Projects/App/Sources/AppDelegate.swift +++ b/Projects/App/Sources/AppDelegate.swift @@ -8,20 +8,39 @@ import UIKit +import NetworkService +import Data + @main final class AppDelegate: UIResponder, UIApplicationDelegate { - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions + : [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { setupAppearance() registerDependencies() + configureNotification(application: application) + configureFirebase(application: application) return true } // MARK: UISceneSession Lifecycle - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + func application( + _ application: UIApplication, + configurationForConnecting connectingSceneSession: UISceneSession, + options: UIScene.ConnectionOptions + ) -> UISceneConfiguration { + return UISceneConfiguration( + name: "Default Configuration", + sessionRole: connectingSceneSession.role + ) } - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + func application( + _ application: UIApplication, + didDiscardSceneSessions sceneSessions: Set + ) { } } diff --git a/Projects/App/Sources/Coordinator/AppCoordinator.swift b/Projects/App/Sources/Coordinator/AppCoordinator.swift index 95e18ee7..ee5ae638 100644 --- a/Projects/App/Sources/Coordinator/AppCoordinator.swift +++ b/Projects/App/Sources/Coordinator/AppCoordinator.swift @@ -10,10 +10,14 @@ import UIKit import FeatureDependency import MainFeature +import BusStopFeature final class AppCoordinator: Coordinator { - var childCoordinators: [Coordinator] = [] + var parent: Coordinator? + var childs: [Coordinator] = [] var navigationController: UINavigationController + public var coordinatorType: CoordinatorType = .app + private let coordinatorProvider = DefaultCoordinatorProvider() init(navigationController: UINavigationController) { self.navigationController = navigationController @@ -21,9 +25,22 @@ final class AppCoordinator: Coordinator { func start() { let tabBarCoordinator = TabBarCoordinator( - navigationController: navigationController + navigationController: navigationController, + coordinatorProvider: coordinatorProvider ) - childCoordinators.append(tabBarCoordinator) + childs.append(tabBarCoordinator) tabBarCoordinator.start() } + + func startBusStopFlow(busStopId: String) { + let busStopCoordinator = DefaultBusStopCoordinator( + parent: self, + navigationController: navigationController, + busStopId: busStopId, + coordinatorProvider: coordinatorProvider, + flow: .fromHome + ) + childs.append(busStopCoordinator) + busStopCoordinator.start() + } } diff --git a/Projects/App/Sources/DeeplinkHandler.swift b/Projects/App/Sources/DeeplinkHandler.swift new file mode 100644 index 00000000..1abaa47b --- /dev/null +++ b/Projects/App/Sources/DeeplinkHandler.swift @@ -0,0 +1,34 @@ +// +// DeeplinkHandler.swift +// App +// +// Created by gnksbm on 4/8/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +final class DeeplinkHandler { + private let appCoordinator: AppCoordinator? + + init(appCoordinator: AppCoordinator?) { + self.appCoordinator = appCoordinator + } + + func handleUrl(url: URL) { + guard let queryItems = URLComponents( + string: url.absoluteString + )?.queryItems + else { return } + queryItems.forEach { queryItem in + switch queryItem.name { + case "busStop": + if let busStopId = queryItem.value { + appCoordinator?.startBusStopFlow(busStopId: busStopId) + } + default: + break + } + } + } +} diff --git a/Projects/App/Sources/DefaultCoordinatorProvider.swift b/Projects/App/Sources/DefaultCoordinatorProvider.swift new file mode 100644 index 00000000..95ebe22e --- /dev/null +++ b/Projects/App/Sources/DefaultCoordinatorProvider.swift @@ -0,0 +1,86 @@ +// +// DefaultCoordinatorProvider.swift +// App +// +// Created by gnksbm on 1/25/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import FeatureDependency +import HomeFeature +import SearchFeature +import AlarmFeature +import BusStopFeature +import NearMapFeature +import Domain + +final class DefaultCoordinatorProvider: CoordinatorProvider { + func makeHomeCoordinator( + parent: Coordinator, + navigationController: UINavigationController + ) -> HomeCoordinator { + DefaultHomeCoordinator( + parent: parent, + navigationController: navigationController, + coordinatorProvider: self + ) + } + + func makeBusStopCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + busStopId: String, + flow: FlowState + ) -> BusStopCoordinator { + DefaultBusStopCoordinator( + parent: parent, + navigationController: navigationController, + busStopId: busStopId, + coordinatorProvider: self, + flow: flow + ) + } + + func makeSearchCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> SearchCoordinator { + DefaultSearchCoordinator( + parent: parent, + navigationController: navigationController, + coordinatorProvider: self, + flow: flow + ) + } + + func makeAddRegularAlarmCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> AddRegularAlarmCoordinator { + DefaultAddRegularAlarmCoordinator( + parent: parent, + navigationController: navigationController, + coordinatorProvider: self, + flow: .fromAlarm + ) + } + + func makeNearMapCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState, + busStopId: String? + ) -> NearMapCoordinator { + DefaultNearMapCoordinator( + parent: parent, + navigationController: navigationController, + coordinatorProvider: self, + flow: flow, + busStopId: busStopId + ) + } +} diff --git a/Projects/App/Sources/SceneDelegate.swift b/Projects/App/Sources/SceneDelegate.swift index c5411410..2d12b3d9 100644 --- a/Projects/App/Sources/SceneDelegate.swift +++ b/Projects/App/Sources/SceneDelegate.swift @@ -8,7 +8,7 @@ import UIKit -import Networks +import NetworkService import Domain import Data @@ -16,9 +16,14 @@ import RxSwift final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - var appFlowCoordinator: AppCoordinator? + var appCoordinator: AppCoordinator? + var deeplinkHandler: DeeplinkHandler? - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { + func scene( + _ scene: UIScene, + willConnectTo session: UISceneSession, + options connectionOptions: UIScene.ConnectionOptions + ) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) @@ -27,11 +32,15 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { navigationController.view.backgroundColor = .systemBackground window?.rootViewController = navigationController - appFlowCoordinator = AppCoordinator( + appCoordinator = AppCoordinator( navigationController: navigationController ) - appFlowCoordinator?.start() + appCoordinator?.start() window?.makeKeyAndVisible() + deeplinkHandler = .init(appCoordinator: appCoordinator) + if let url = connectionOptions.urlContexts.first?.url { + deeplinkHandler?.handleUrl(url: url) + } } func sceneDidDisconnect(_ scene: UIScene) { @@ -48,4 +57,14 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { func sceneDidEnterBackground(_ scene: UIScene) { } + + func scene( + _ scene: UIScene, + openURLContexts URLContexts: Set + ) { + if let url = URLContexts.first?.url { + deeplinkHandler?.handleUrl(url: url) + } + } } + diff --git a/Projects/App/Tests/BCUITests.swift b/Projects/App/Tests/BCUITests.swift new file mode 100644 index 00000000..a57ec535 --- /dev/null +++ b/Projects/App/Tests/BCUITests.swift @@ -0,0 +1,187 @@ +// +// BCUITests.swift +// App +// +// Created by gnksbm on 2/19/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import XCTest +import CoreLocation + +final class BCUITests: XCTestCase { + private var testLocation: CLLocation { + .init( + latitude: 37.570238, + longitude: 126.986536 + ) + } + + @MainActor override func setUpWithError() throws { + continueAfterFailure = false + + let app = XCUIApplication() + setupSnapshot(app) + app.launch() + } + + override func tearDownWithError() throws { + } + + @MainActor func testExample() throws { + // MARK: Launch + let app = XCUIApplication() + app.launch() + captureEmptyFavorite(app: app) + captureRecentSearch(app: app) + captureSearchAndBusStop(app: app) + captureFavorites(app: app) + captureNearMap(app: app) + captureRegularAlarm(app: app) + } + /// 빈 즐겨찾기 화면 snapshot + @MainActor private func captureEmptyFavorite(app: XCUIApplication) { + snapshot("0_EmptyFavorites") + } + /// 최근 검색 화면 snapshot + @MainActor private func captureRecentSearch(app: XCUIApplication) { + app.buttons["홈에서 검색뷰로 네비게이션"].tap() + snapshot("2_RecentSearch") + app.buttons["Back"].tap() + } + /// 최근 검색 화면 snapshot + @MainActor private func captureSearchAndBusStop(app: XCUIApplication) { + app.buttons["홈에서 검색뷰로 네비게이션"].tap() + let searchField = app.textFields["정류장 검색"] + searchField.tap() + searchField.typeText("은곡마을") + + app.tables["검색결과"].staticTexts["23412 | 세곡푸르지오.은곡삼거리 방면"].tap() + + let resultTable = app.tables["정류장"] + + resultTable.cells.containing( + .staticText, + identifier:"6600" + ).buttons["favorite"].tap() + resultTable.cells.containing( + .staticText, + identifier:"강남06" + ).buttons["favorite"].tap() + resultTable.cells.containing( + .staticText, + identifier:"452" + ).buttons["favorite"].tap() + resultTable.cells.containing( + .staticText, + identifier:"741" + ).buttons["favorite"].tap() + snapshot("4_BusStop") + app.buttons["Back"].tap() + + searchField.buttons["Clear text"].tap() + searchField.typeText("신분당선") + + snapshot("3_Search") + app.tables["검색결과"].staticTexts["22010 | 지하철2호선강남역 방면"].tap() + + resultTable.cells.containing( + .staticText, + identifier:"140" + ).buttons["favorite"].tap() + resultTable.cells.containing( + .staticText, + identifier:"400" + ).buttons["favorite"].tap() + resultTable.cells.containing( + .staticText, + identifier:"1550광주" + ).buttons["favorite"].tap() + + app.buttons["Back"].tap() + app.buttons["Back"].tap() + } + /// 즐겨찾기 snapshot + @MainActor private func captureFavorites(app: XCUIApplication) { + snapshot("1_Favorites") + } + /// 주변 정류장 snapshot + @MainActor private func captureNearMap(app: XCUIApplication) { + app.resetAuthorizationStatus(for: .location) + if #available(iOS 16.4, *) { + XCUIDevice.shared.location = .init( + location: testLocation + ) + } + app.buttons["홈에서 검색뷰로 네비게이션"].tap() + let nearByStopText = app.staticTexts["주변정류장"] + nearByStopText.tap() + addUIInterruptionMonitor( + withDescription: "‘버스어디’ 앱이 사용자의 위치를 사용하도록 허용하겠습니까?" + ) { alert in + alert.buttons["한 번 허용"].tap() + return true + } + sleep(3) + nearByStopText.tap() + app.children(matching: .window).element(boundBy: 0) + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element + .children(matching: .other).element(boundBy: 0).tap() + snapshot("5_NearMap") + app.buttons["Back"].tap() + app.buttons["Back"].tap() + } + /// 정규알람 snapshot + @MainActor private func captureRegularAlarm(app: XCUIApplication) { + let tabBar = app.tabBars["Tab Bar"] + tabBar.buttons["알람"].tap() + + app.buttons["정규알람 추가하기"].tap() + addUIInterruptionMonitor( + withDescription: "‘버스어디’에서 알림을 보내고자 합니다." + ) { alert in + alert.buttons["허용"].tap() + return true + } + sleep(3) + app.buttons["알람에서 검색뷰로 네비게이션"].tap() + + app.tables["최근검색"].staticTexts["23412 | 세곡푸르지오.은곡삼거리 방면"].tap() + + app.tables["정류장"].cells.element(boundBy: 0).tap() + + let datePicker = app.datePickers.pickerWheels + datePicker.element(boundBy: 0).adjust(toPickerWheelValue: "7") + datePicker.element(boundBy: 1).adjust(toPickerWheelValue: "30") + datePicker.element(boundBy: 2).adjust(toPickerWheelValue: "AM") + + app.staticTexts["월"].tap() + app/*@START_MENU_TOKEN@*/.staticTexts["화"]/*[[".buttons[\"화\"].staticTexts[\"화\"]",".staticTexts[\"화\"]"],[[[-1,1],[-1,0]]],[0]]@END_MENU_TOKEN@*/.tap() + app.staticTexts["수"].tap() + app.staticTexts["목"].tap() + app.staticTexts["금"].tap() + + snapshot("6_RegularAlarm") + + tabBar.buttons["홈"].tap() + } + + func testLaunchPerformance() throws { + if #available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 7.0, *) { + measure(metrics: [XCTApplicationLaunchMetric()]) { + XCUIApplication().launch() + } + } + } +} diff --git a/Projects/App/Tests/SnapshotHelper.swift b/Projects/App/Tests/SnapshotHelper.swift new file mode 100644 index 00000000..6dec1302 --- /dev/null +++ b/Projects/App/Tests/SnapshotHelper.swift @@ -0,0 +1,313 @@ +// +// SnapshotHelper.swift +// Example +// +// Created by Felix Krause on 10/8/15. +// + +// ----------------------------------------------------- +// IMPORTANT: When modifying this file, make sure to +// increment the version number at the very +// bottom of the file to notify users about +// the new SnapshotHelper.swift +// ----------------------------------------------------- + +import Foundation +import XCTest + +@MainActor +func setupSnapshot(_ app: XCUIApplication, waitForAnimations: Bool = true) { + Snapshot.setupSnapshot(app, waitForAnimations: waitForAnimations) +} + +@MainActor +func snapshot(_ name: String, waitForLoadingIndicator: Bool) { + if waitForLoadingIndicator { + Snapshot.snapshot(name) + } else { + Snapshot.snapshot(name, timeWaitingForIdle: 0) + } +} + +/// - Parameters: +/// - name: The name of the snapshot +/// - timeout: Amount of seconds to wait until the network loading indicator disappears. Pass `0` if you don't want to wait. +@MainActor +func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) { + Snapshot.snapshot(name, timeWaitingForIdle: timeout) +} + +enum SnapshotError: Error, CustomDebugStringConvertible { + case cannotFindSimulatorHomeDirectory + case cannotRunOnPhysicalDevice + + var debugDescription: String { + switch self { + case .cannotFindSimulatorHomeDirectory: + return "Couldn't find simulator home location. Please, check SIMULATOR_HOST_HOME env variable." + case .cannotRunOnPhysicalDevice: + return "Can't use Snapshot on a physical device." + } + } +} + +@objcMembers +@MainActor +open class Snapshot: NSObject { + static var app: XCUIApplication? + static var waitForAnimations = true + static var cacheDirectory: URL? + static var screenshotsDirectory: URL? { + return cacheDirectory?.appendingPathComponent("screenshots", isDirectory: true) + } + static var deviceLanguage = "" + static var currentLocale = "" + + open class func setupSnapshot(_ app: XCUIApplication, waitForAnimations: Bool = true) { + + Snapshot.app = app + Snapshot.waitForAnimations = waitForAnimations + + do { + let cacheDir = try getCacheDirectory() + Snapshot.cacheDirectory = cacheDir + setLanguage(app) + setLocale(app) + setLaunchArguments(app) + } catch let error { + NSLog(error.localizedDescription) + } + } + + class func setLanguage(_ app: XCUIApplication) { + guard let cacheDirectory = self.cacheDirectory else { + NSLog("CacheDirectory is not set - probably running on a physical device?") + return + } + + let path = cacheDirectory.appendingPathComponent("language.txt") + + do { + let trimCharacterSet = CharacterSet.whitespacesAndNewlines + deviceLanguage = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet) + app.launchArguments += ["-AppleLanguages", "(\(deviceLanguage))"] + } catch { + NSLog("Couldn't detect/set language...") + } + } + + class func setLocale(_ app: XCUIApplication) { + guard let cacheDirectory = self.cacheDirectory else { + NSLog("CacheDirectory is not set - probably running on a physical device?") + return + } + + let path = cacheDirectory.appendingPathComponent("locale.txt") + + do { + let trimCharacterSet = CharacterSet.whitespacesAndNewlines + currentLocale = try String(contentsOf: path, encoding: .utf8).trimmingCharacters(in: trimCharacterSet) + } catch { + NSLog("Couldn't detect/set locale...") + } + + if currentLocale.isEmpty && !deviceLanguage.isEmpty { + currentLocale = Locale(identifier: deviceLanguage).identifier + } + + if !currentLocale.isEmpty { + app.launchArguments += ["-AppleLocale", "\"\(currentLocale)\""] + } + } + + class func setLaunchArguments(_ app: XCUIApplication) { + guard let cacheDirectory = self.cacheDirectory else { + NSLog("CacheDirectory is not set - probably running on a physical device?") + return + } + + let path = cacheDirectory.appendingPathComponent("snapshot-launch_arguments.txt") + app.launchArguments += ["-FASTLANE_SNAPSHOT", "YES", "-ui_testing"] + + do { + let launchArguments = try String(contentsOf: path, encoding: String.Encoding.utf8) + let regex = try NSRegularExpression(pattern: "(\\\".+?\\\"|\\S+)", options: []) + let matches = regex.matches(in: launchArguments, options: [], range: NSRange(location: 0, length: launchArguments.count)) + let results = matches.map { result -> String in + (launchArguments as NSString).substring(with: result.range) + } + app.launchArguments += results + } catch { + NSLog("Couldn't detect/set launch_arguments...") + } + } + + open class func snapshot(_ name: String, timeWaitingForIdle timeout: TimeInterval = 20) { + if timeout > 0 { + waitForLoadingIndicatorToDisappear(within: timeout) + } + + NSLog("snapshot: \(name)") // more information about this, check out https://docs.fastlane.tools/actions/snapshot/#how-does-it-work + + if Snapshot.waitForAnimations { + sleep(1) // Waiting for the animation to be finished (kind of) + } + + #if os(OSX) + guard let app = self.app else { + NSLog("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().") + return + } + + app.typeKey(XCUIKeyboardKeySecondaryFn, modifierFlags: []) + #else + + guard self.app != nil else { + NSLog("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().") + return + } + + let screenshot = XCUIScreen.main.screenshot() + #if os(iOS) && !targetEnvironment(macCatalyst) + let image = XCUIDevice.shared.orientation.isLandscape ? fixLandscapeOrientation(image: screenshot.image) : screenshot.image + #else + let image = screenshot.image + #endif + + guard var simulator = ProcessInfo().environment["SIMULATOR_DEVICE_NAME"], let screenshotsDir = screenshotsDirectory else { return } + + do { + // The simulator name contains "Clone X of " inside the screenshot file when running parallelized UI Tests on concurrent devices + let regex = try NSRegularExpression(pattern: "Clone [0-9]+ of ") + let range = NSRange(location: 0, length: simulator.count) + simulator = regex.stringByReplacingMatches(in: simulator, range: range, withTemplate: "") + + let path = screenshotsDir.appendingPathComponent("\(simulator)-\(name).png") + #if swift(<5.0) + try UIImagePNGRepresentation(image)?.write(to: path, options: .atomic) + #else + try image.pngData()?.write(to: path, options: .atomic) + #endif + } catch let error { + NSLog("Problem writing screenshot: \(name) to \(screenshotsDir)/\(simulator)-\(name).png") + NSLog(error.localizedDescription) + } + #endif + } + + class func fixLandscapeOrientation(image: UIImage) -> UIImage { + #if os(watchOS) + return image + #else + if #available(iOS 10.0, *) { + let format = UIGraphicsImageRendererFormat() + format.scale = image.scale + let renderer = UIGraphicsImageRenderer(size: image.size, format: format) + return renderer.image { context in + image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height)) + } + } else { + return image + } + #endif + } + + class func waitForLoadingIndicatorToDisappear(within timeout: TimeInterval) { + #if os(tvOS) + return + #endif + + guard let app = self.app else { + NSLog("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().") + return + } + + let networkLoadingIndicator = app.otherElements.deviceStatusBars.networkLoadingIndicators.element + let networkLoadingIndicatorDisappeared = XCTNSPredicateExpectation(predicate: NSPredicate(format: "exists == false"), object: networkLoadingIndicator) + _ = XCTWaiter.wait(for: [networkLoadingIndicatorDisappeared], timeout: timeout) + } + + class func getCacheDirectory() throws -> URL { + let cachePath = "Library/Caches/tools.fastlane" + // on OSX config is stored in /Users//Library + // and on iOS/tvOS/WatchOS it's in simulator's home dir + #if os(OSX) + let homeDir = URL(fileURLWithPath: NSHomeDirectory()) + return homeDir.appendingPathComponent(cachePath) + #elseif arch(i386) || arch(x86_64) || arch(arm64) + guard let simulatorHostHome = ProcessInfo().environment["SIMULATOR_HOST_HOME"] else { + throw SnapshotError.cannotFindSimulatorHomeDirectory + } + let homeDir = URL(fileURLWithPath: simulatorHostHome) + return homeDir.appendingPathComponent(cachePath) + #else + throw SnapshotError.cannotRunOnPhysicalDevice + #endif + } +} + +private extension XCUIElementAttributes { + var isNetworkLoadingIndicator: Bool { + if hasAllowListedIdentifier { return false } + + let hasOldLoadingIndicatorSize = frame.size == CGSize(width: 10, height: 20) + let hasNewLoadingIndicatorSize = frame.size.width.isBetween(46, and: 47) && frame.size.height.isBetween(2, and: 3) + + return hasOldLoadingIndicatorSize || hasNewLoadingIndicatorSize + } + + var hasAllowListedIdentifier: Bool { + let allowListedIdentifiers = ["GeofenceLocationTrackingOn", "StandardLocationTrackingOn"] + + return allowListedIdentifiers.contains(identifier) + } + + func isStatusBar(_ deviceWidth: CGFloat) -> Bool { + if elementType == .statusBar { return true } + guard frame.origin == .zero else { return false } + + let oldStatusBarSize = CGSize(width: deviceWidth, height: 20) + let newStatusBarSize = CGSize(width: deviceWidth, height: 44) + + return [oldStatusBarSize, newStatusBarSize].contains(frame.size) + } +} + +private extension XCUIElementQuery { + var networkLoadingIndicators: XCUIElementQuery { + let isNetworkLoadingIndicator = NSPredicate { (evaluatedObject, _) in + guard let element = evaluatedObject as? XCUIElementAttributes else { return false } + + return element.isNetworkLoadingIndicator + } + + return self.containing(isNetworkLoadingIndicator) + } + + @MainActor + var deviceStatusBars: XCUIElementQuery { + guard let app = Snapshot.app else { + fatalError("XCUIApplication is not set. Please call setupSnapshot(app) before snapshot().") + } + + let deviceWidth = app.windows.firstMatch.frame.width + + let isStatusBar = NSPredicate { (evaluatedObject, _) in + guard let element = evaluatedObject as? XCUIElementAttributes else { return false } + + return element.isStatusBar(deviceWidth) + } + + return self.containing(isStatusBar) + } +} + +private extension CGFloat { + func isBetween(_ numberA: CGFloat, and numberB: CGFloat) -> Bool { + return numberA...numberB ~= self + } +} + +// Please don't remove the lines below +// They are used to detect outdated configuration files +// SnapshotHelperVersion [1.30] diff --git a/Projects/App/Widget.entitlements b/Projects/App/Widget.entitlements new file mode 100644 index 00000000..302abdaf --- /dev/null +++ b/Projects/App/Widget.entitlements @@ -0,0 +1,20 @@ + + + + + aps-environment + development + com.apple.developer.icloud-container-identifiers + + iCloud.Pepsi-Club.WhereMyBus + + com.apple.developer.icloud-services + + CloudKit + + com.apple.security.application-groups + + group.Pepsi-Club.WhereMyBus + + + diff --git a/Projects/App/Widget/ArrivalInfo/ArrivalInfoEntry.swift b/Projects/App/Widget/ArrivalInfo/ArrivalInfoEntry.swift new file mode 100644 index 00000000..fdf65962 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/ArrivalInfoEntry.swift @@ -0,0 +1,27 @@ +// +// ArrivalInfoEntry.swift +// AppUITests +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit +import Domain + +@available(iOS 17.0, *) +struct ArrivalInfoEntry: TimelineEntry { + let date: Date + let configuration: ArrivalInfoIntent + let responses: [BusStopArrivalInfoResponse] + + init( + date: Date, + configuration: ArrivalInfoIntent, + responses: [BusStopArrivalInfoResponse] = [] + ) { + self.date = date + self.configuration = configuration + self.responses = responses + } +} diff --git a/Projects/App/Widget/ArrivalInfo/ArrivalInfoIntent.swift b/Projects/App/Widget/ArrivalInfo/ArrivalInfoIntent.swift new file mode 100644 index 00000000..9c75e78b --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/ArrivalInfoIntent.swift @@ -0,0 +1,20 @@ +// +// ArrivalInfoIntent.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit +import AppIntents + +@available(iOS 17.0, *) +struct ArrivalInfoIntent: WidgetConfigurationIntent { + static var title: LocalizedStringResource = "Configuration" + static var description = IntentDescription("This is an example widget.") + + // An example configurable parameter. + @Parameter(title: "Favorite Emoji", default: "😃") + var favoriteEmoji: String +} diff --git a/Projects/App/Widget/ArrivalInfo/ArrivalInfoProvider.swift b/Projects/App/Widget/ArrivalInfo/ArrivalInfoProvider.swift new file mode 100644 index 00000000..3d99281f --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/ArrivalInfoProvider.swift @@ -0,0 +1,50 @@ +// +// ArrivalInfoProvider.swift +// AppUITests +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI +import WidgetKit + +import Core +import Domain + +@available(iOS 17.0, *) +struct ArrivalInfoProvider: AppIntentTimelineProvider { + private let useCase = ArrivalInfoUseCase() + + func placeholder(in context: Context) -> ArrivalInfoEntry { + ArrivalInfoEntry( + date: Date(), + configuration: ArrivalInfoIntent(), + responses: useCase.responses + ) + } + func snapshot( + for configuration: ArrivalInfoIntent, + in context: Context + ) async -> ArrivalInfoEntry { + ArrivalInfoEntry( + date: Date(), + configuration: configuration, + responses: useCase.responses + ) + } + func timeline( + for configuration: ArrivalInfoIntent, + in context: Context + ) async -> Timeline { + let entry = ArrivalInfoEntry( + date: Date(), + configuration: configuration, + responses: useCase.responses + ) + return Timeline( + entries: [entry], + policy: .never + ) + } +} diff --git a/Projects/App/Widget/ArrivalInfo/ArrivalInfoUseCase.swift b/Projects/App/Widget/ArrivalInfo/ArrivalInfoUseCase.swift new file mode 100644 index 00000000..60a35cf0 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/ArrivalInfoUseCase.swift @@ -0,0 +1,26 @@ +// +// ArrivalInfoUseCase.swift +// App +// +// Created by gnksbm on 4/8/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +@available(iOS 17.0, *) +final class ArrivalInfoUseCase { + var responses = [BusStopArrivalInfoResponse]() + + func fetchUserDefaultValue() { + guard let datas = UserDefaults.appGroup?.array( + forKey: "arrivalResponse" + ) as? [Data] + else { return } + responses = datas.compactMap { + return try? $0.decode(type: BusStopArrivalInfoResponse.self) + } + } +} diff --git a/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumView.swift b/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumView.swift new file mode 100644 index 00000000..65fb6b6a --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumView.swift @@ -0,0 +1,98 @@ +// +// ArrivalInfoMediumView.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI +import WidgetKit + +import Domain + +@available(iOS 17.0, *) +struct ArrivalInfoMediumView: View { + var entry: ArrivalInfoProvider.Entry + + var url: URL? { + var url: URL? + if let busStopId = entry.responses.first?.busStopId { + url = .init(string: "widget://deeplink?busStop=\(busStopId)") + } + return url + } + + var body: some View { + VStack { + switch entry.responses.isEmpty { + case true: + emptyView + case false: + arrivalInfoView + } + } + .widgetBackground(Color.white) + .widgetURL(url) + } + + var emptyView: some View { + VStack(alignment: .center) { + Text("즐겨찾기를 추가해 도착 정보를 확인하세요") + .multilineTextAlignment(.center) + } + } + + var arrivalInfoView: some View { + VStack(alignment: .leading) { + ForEach( + entry.responses.prefix(1), + id: \.busStopId + ) { busStopResponse in + HStack(alignment: .top) { + VStack(alignment: .leading) { + Text(busStopResponse.busStopName) + .font(.headline) + .lineLimit(1) + Text(busStopResponse.direction) + .font(.subheadline) + .lineLimit(1) + } + RefreshView(entry: entry) + } + Spacer() + ForEach( + busStopResponse.buses.prefix(1), + id: \.hashValue + ) { bus in + HStack { + Text(bus.busName) + .font(.subheadline) + Spacer() + Text(bus.firstArrivalState.toString) + .font(.subheadline) + .lineLimit(1) + } + } + } + } + } +} + +#if DEBUG +@available(iOS 17.0, *) +struct ArrivalInfoMediumView_Preview: PreviewProvider { + static var previews: some View { + ArrivalInfoMediumView( + entry: ArrivalInfoEntry( + date: .now, + configuration: .init(), + responses: .mock + ) + ) + .previewContext( + WidgetPreviewContext(family: .systemMedium) + ) + } +} +#endif diff --git a/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumWidget.swift b/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumWidget.swift new file mode 100644 index 00000000..c9cc41a2 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/Medium/ArrivalInfoMediumWidget.swift @@ -0,0 +1,28 @@ +// +// ArrivalInfoMediumWidget.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit +import SwiftUI + +@available(iOS 17.0, *) +struct ArrivalInfoMediumWidget: Widget { + let kind: String = "ArrivalInfoMedium" + + var body: some WidgetConfiguration { + AppIntentConfiguration( + kind: kind, + intent: ArrivalInfoIntent.self, + provider: ArrivalInfoProvider() + ) { entry in + ArrivalInfoMediumView( + entry: entry + ) + } + .supportedFamilies([.systemMedium]) + } +} diff --git a/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallView.swift b/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallView.swift new file mode 100644 index 00000000..72e23ac7 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallView.swift @@ -0,0 +1,99 @@ +// +// ArrivalInfoSmallView.swift +// AppUITests +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI +import WidgetKit + +import Core +import Domain + +@available(iOS 17.0, *) +struct ArrivalInfoSmallView: View { + var entry: ArrivalInfoProvider.Entry + + var url: URL? { + var url: URL? + if let busStopId = entry.responses.first?.busStopId { + url = .init(string: "widget://deeplink?busStop=\(busStopId)") + } + return url + } + + var body: some View { + VStack { + switch entry.responses.isEmpty { + case true: + emptyView + case false: + arrivalInfoView + } + } + .widgetBackground(Color.white) + .widgetURL(url) + } + + var emptyView: some View { + VStack(alignment: .center) { + Text("즐겨찾기를 추가해 도착 정보를 확인하세요") + .multilineTextAlignment(.center) + } + } + + var arrivalInfoView: some View { + VStack(alignment: .leading) { + ForEach( + entry.responses.prefix(1), + id: \.busStopId + ) { busStopResponse in + RefreshView(entry: entry) + HStack { + VStack(alignment: .leading) { + Text(busStopResponse.busStopName) + .font(.headline) + .lineLimit(1) + Text(busStopResponse.direction) + .font(.subheadline) + .lineLimit(1) + } + } + Spacer() + ForEach( + busStopResponse.buses.prefix(2), + id: \.hashValue + ) { bus in + HStack { + Text(bus.busName) + .font(.subheadline) + Spacer() + Text(bus.firstArrivalState.toString) + .font(.subheadline) + .lineLimit(1) + } + } + } + } + } +} + +#if DEBUG +@available(iOS 17.0, *) +struct ArrivalInfoSmallView_Preview: PreviewProvider { + static var previews: some View { + ArrivalInfoSmallView( + entry: ArrivalInfoEntry( + date: .now, + configuration: .init(), + responses: .mock + ) + ) + .previewContext( + WidgetPreviewContext(family: .systemSmall) + ) + } +} +#endif diff --git a/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallWidget.swift b/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallWidget.swift new file mode 100644 index 00000000..f3e036a2 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/Small/ArrivalInfoSmallWidget.swift @@ -0,0 +1,28 @@ +// +// ArrivalInfoSmallWidget.swift +// WidgetExtension +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit +import SwiftUI + +@available(iOS 17.0, *) +struct ArrivalInfoSmallWidget: Widget { + let kind: String = "ArrivalInfoSmall" + + var body: some WidgetConfiguration { + AppIntentConfiguration( + kind: kind, + intent: ArrivalInfoIntent.self, + provider: ArrivalInfoProvider() + ) { entry in + ArrivalInfoSmallView( + entry: entry + ) + } + .supportedFamilies([.systemMedium]) + } +} diff --git a/Projects/App/Widget/ArrivalInfo/View/RefreshView.swift b/Projects/App/Widget/ArrivalInfo/View/RefreshView.swift new file mode 100644 index 00000000..e0136ce5 --- /dev/null +++ b/Projects/App/Widget/ArrivalInfo/View/RefreshView.swift @@ -0,0 +1,28 @@ +// +// RefreshView.swift +// WidgetKit +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI + +import Core + +@available(iOS 17.0, *) +struct RefreshView: View { + var entry: ArrivalInfoProvider.Entry + + var body: some View { + HStack { + Spacer() + Text(entry.date.toString(dateFormat: "HH:mm 업데이트")) + .font(.caption) + Button(intent: entry.configuration) { + Image(systemName: "arrow.clockwise") + } + .buttonStyle(.plain) + } + } +} diff --git a/Projects/App/Widget/Extension/View+.swift b/Projects/App/Widget/Extension/View+.swift new file mode 100644 index 00000000..6b0e4f14 --- /dev/null +++ b/Projects/App/Widget/Extension/View+.swift @@ -0,0 +1,21 @@ +// +// View+.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI + +extension View { + func widgetBackground(_ backgroundView: some View) -> some View { + if #available(iOSApplicationExtension 17.0, *) { + return containerBackground(for: .widget) { + backgroundView + } + } else { + return background(backgroundView) + } + } +} diff --git a/Projects/App/Widget/Mock/BusStopArrivalInfoResponse.swift b/Projects/App/Widget/Mock/BusStopArrivalInfoResponse.swift new file mode 100644 index 00000000..49acb88f --- /dev/null +++ b/Projects/App/Widget/Mock/BusStopArrivalInfoResponse.swift @@ -0,0 +1,178 @@ +// +// MockData.swift +// WidgetExtension +// +// Created by gnksbm on 4/7/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +#if DEBUG +extension [BusStopArrivalInfoResponse] { + static let mock = [ + BusStopArrivalInfoResponse( + busStopId: "03192", + busStopName: "서울특별시어린이병원.강동송파과학화예비군훈련장", + direction: "이태원역1번출구.해밀턴호텔", + buses: [ + BusArrivalInfoResponse( + busId: "100100016", + busName: "110A고려대", + busType: BusType.trunkLine.rawValue, + nextStation: "이태원역1번출구.해밀턴호텔", + firstArrivalState: ArrivalState.arrivalTime(time: 182), + firstArrivalRemaining: "1번째 전", + secondArrivalState: ArrivalState.arrivalTime(time: 896), + secondArrivalRemaining: "8번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "111900011", + busName: "은평08-1", + busType: BusType.village.rawValue, + nextStation: "힐스테이트116동앞", + firstArrivalState: ArrivalState.pending, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.pending, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "111900012", + busName: "은평08-2", + busType: BusType.village.rawValue, + nextStation: "힐스테이트116동앞", + firstArrivalState: ArrivalState.pending, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.pending, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ) + ] + ), + BusStopArrivalInfoResponse( + busStopId: "21247", + busStopName: "벽산블루밍벽산아파트303동앞", + direction: "벽산아파트.적십자남부봉사관", + buses: [ + BusArrivalInfoResponse( + busId: "100100251", + busName: "5513", + busType: BusType.branchLine.rawValue, + nextStation: "벽산아파트.적십자남부봉사관", + firstArrivalState: ArrivalState.arrivalTime(time: 154), + firstArrivalRemaining: "2번째 전", + secondArrivalState: ArrivalState.arrivalTime(time: 633), + secondArrivalRemaining: "8번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100596", + busName: "400", + busType: BusType.trunkLine.rawValue, + nextStation: "이태원역.보광동입구", + firstArrivalState: ArrivalState.arrivalTime(time: 251), + firstArrivalRemaining: "2번째 전", + secondArrivalState: ArrivalState.arrivalTime(time: 803), + secondArrivalRemaining: "막차", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100597", + busName: "405", + busType: BusType.trunkLine.rawValue, + nextStation: "이태원역.보광동입구", + firstArrivalState: ArrivalState.arrivalTime(time: 627), + firstArrivalRemaining: "6번째 전", + secondArrivalState: ArrivalState.arrivalTime(time: 1091), + secondArrivalRemaining: "11번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "104000011", + busName: "N31", + busType: BusType.trunkLine.rawValue, + nextStation: "이태원역1번출구.해밀턴호텔", + firstArrivalState: ArrivalState.finished, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.finished, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "111000017", + busName: "N72", + busType: BusType.trunkLine.rawValue, + nextStation: "이태원역1번출구.해밀턴호텔", + firstArrivalState: ArrivalState.finished, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.finished, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ) + ] + ), + BusStopArrivalInfoResponse( + busStopId: "12811", + busStopName: "힐스테이트302동앞", + direction: "힐스테이트116동앞", + buses: [ + BusArrivalInfoResponse( + busId: "111900005", + busName: "은평05", + busType: BusType.village.rawValue, + nextStation: "힐스테이트116동앞", + firstArrivalState: ArrivalState.pending, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.pending, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "116900012", + busName: "구로06", + busType: BusType.village.rawValue, + nextStation: "고척공구상가", + firstArrivalState: ArrivalState.pending, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState.pending, + secondArrivalRemaining: "", + isFavorites: false, + isAlarmOn: false + ) + ] + ), + BusStopArrivalInfoResponse( + busStopId: "17486", + busStopName: "123전자타운.2001아울렛", + direction: "고척공구상가", + buses: [ + BusArrivalInfoResponse( + busId: "116900009", + busName: "구로05", + busType: BusType.village.rawValue, + nextStation: "고척공구상가", + firstArrivalState: ArrivalState.arrivalTime(time: 330), + firstArrivalRemaining: "0번째 전", + secondArrivalState: ArrivalState.arrivalTime(time: 915), + secondArrivalRemaining: "4번째 전", + isFavorites: false, + isAlarmOn: false + ) + ] + ) + ] +} +#endif diff --git a/Projects/App/Widget/NearByStop/NearByStopEntry.swift b/Projects/App/Widget/NearByStop/NearByStopEntry.swift new file mode 100644 index 00000000..3508dce1 --- /dev/null +++ b/Projects/App/Widget/NearByStop/NearByStopEntry.swift @@ -0,0 +1,25 @@ +// +// NearByStopEntry.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit + +struct NearByStopEntry: TimelineEntry { + let date: Date + let busStopName: String + let distance: Int +} + +#if DEBUG +extension NearByStopEntry { + static let mock: Self = .init( + date: .now, + busStopName: "강남역 2호선", + distance: 20 + ) +} +#endif diff --git a/Projects/App/Widget/NearByStop/NearByStopProvider.swift b/Projects/App/Widget/NearByStop/NearByStopProvider.swift new file mode 100644 index 00000000..8b7f6ea0 --- /dev/null +++ b/Projects/App/Widget/NearByStop/NearByStopProvider.swift @@ -0,0 +1,37 @@ +// +// NearByStopProvider.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit + +struct NearByStopProvider: TimelineProvider { + func placeholder( + in context: Context + ) -> NearByStopEntry { + NearByStopEntry.mock + } + + func getSnapshot( + in context: Context, + completion: @escaping (NearByStopEntry) -> Void + ) { + completion(NearByStopEntry.mock) + } + + func getTimeline( + in context: Context, + completion: @escaping (Timeline) -> Void + ) { + let timeline = Timeline( + entries: [NearByStopEntry.mock], + policy: .never + ) + completion(timeline) + } + + typealias Entry = NearByStopEntry +} diff --git a/Projects/App/Widget/NearByStop/NearByStopView.swift b/Projects/App/Widget/NearByStop/NearByStopView.swift new file mode 100644 index 00000000..eee97cd0 --- /dev/null +++ b/Projects/App/Widget/NearByStop/NearByStopView.swift @@ -0,0 +1,35 @@ +// +// NearByStopView.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI +import WidgetKit + +struct NearByStopView: View { + let entry: NearByStopProvider.Entry + + var body: some View { + VStack { + Text(entry.busStopName) + Text("\(entry.distance)m") + } + .widgetBackground(Color.white) + } +} + +#if DEBUG +struct NearByStopView_Preview: PreviewProvider { + static var previews: some View { + NearByStopView( + entry: .mock + ) + .previewContext( + WidgetPreviewContext(family: .systemSmall) + ) + } +} +#endif diff --git a/Projects/App/Widget/NearByStop/NearByStopWidget.swift b/Projects/App/Widget/NearByStop/NearByStopWidget.swift new file mode 100644 index 00000000..1be09caa --- /dev/null +++ b/Projects/App/Widget/NearByStop/NearByStopWidget.swift @@ -0,0 +1,23 @@ +// +// NearByStopWidget.swift +// Widget +// +// Created by gnksbm on 4/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import SwiftUI +import WidgetKit + +struct NearByStopWidget: Widget { + private let kind = "NearByStop" + var body: some WidgetConfiguration { + StaticConfiguration( + kind: kind, + provider: NearByStopProvider() + ) { entry in + NearByStopView(entry: entry) + } + .supportedFamilies([.systemSmall]) + } +} diff --git a/Projects/App/Widget/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Projects/App/Widget/Resources/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Projects/App/Widget/Resources/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/App/Widget/Resources/Assets.xcassets/Contents.json b/Projects/App/Widget/Resources/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Projects/App/Widget/Resources/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/App/Widget/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json b/Projects/App/Widget/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Projects/App/Widget/Resources/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/App/Widget/WMBWidgetBundle.swift b/Projects/App/Widget/WMBWidgetBundle.swift new file mode 100644 index 00000000..45f65b62 --- /dev/null +++ b/Projects/App/Widget/WMBWidgetBundle.swift @@ -0,0 +1,21 @@ +// +// WMBWidgetBundle.swift +// WidgetExtension +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import WidgetKit +import SwiftUI + +@main +struct WMBWidgetBundle: WidgetBundle { + var body: some Widget { + NearByStopWidget() + if #available(iOS 17, *) { + ArrivalInfoSmallWidget() + ArrivalInfoMediumWidget() + } + } +} diff --git a/Projects/Core/Sources/BCTimer.swift b/Projects/Core/Sources/BCTimer.swift new file mode 100644 index 00000000..c3dca260 --- /dev/null +++ b/Projects/Core/Sources/BCTimer.swift @@ -0,0 +1,38 @@ +// +// BCTimer.swift +// Core +// +// Created by gnksbm on 3/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxRelay + +public final class BCTimer { + private var timer: Timer? + public var distanceFromStart = BehaviorRelay(value: 0) + + public init() { } + + public func start(interval: TimeInterval = 1) { + let startDate = Date() + timer = .scheduledTimer( + withTimeInterval: interval, + repeats: true + ) { [weak self] timer in + self?.distanceFromStart.accept( + Int( + startDate.distance(to: timer.fireDate) + ) + ) + } + } + + public func stop() { + distanceFromStart.accept(0) + timer?.invalidate() + timer = nil + } +} diff --git a/Projects/Core/Sources/CoreData/CoreDataModelObject.swift b/Projects/Core/Sources/CoreData/CoreDataModelObject.swift new file mode 100644 index 00000000..1d4a5691 --- /dev/null +++ b/Projects/Core/Sources/CoreData/CoreDataModelObject.swift @@ -0,0 +1,14 @@ +// +// CoreDataModelObject.swift +// Domain +// +// Created by gnksbm on 2/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import CoreData + +public protocol CoreDataModelObject: NSManagedObject { + var toDomain: CoreDataStorable { get } +} diff --git a/Projects/Core/Sources/CoreData/CoreDataStorable.swift b/Projects/Core/Sources/CoreData/CoreDataStorable.swift new file mode 100644 index 00000000..82e80a4e --- /dev/null +++ b/Projects/Core/Sources/CoreData/CoreDataStorable.swift @@ -0,0 +1,12 @@ +// +// CoreDataStorable.swift +// Domain +// +// Created by gnksbm on 2/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol CoreDataStorable { +} diff --git a/Projects/Core/Sources/Extension/KeyPath+.swift b/Projects/Core/Sources/Extension/KeyPath+.swift new file mode 100644 index 00000000..365fb633 --- /dev/null +++ b/Projects/Core/Sources/Extension/KeyPath+.swift @@ -0,0 +1,19 @@ +// +// KeyPath+.swift +// Core +// +// Created by gnksbm on 3/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public extension KeyPath { + var propertyName: String { + guard let propertyName = String(describing: self) + .components(separatedBy: ".") + .last + else { fatalError(#function) } + return propertyName + } +} diff --git a/Projects/Core/Sources/Extension/Sequence+.swift b/Projects/Core/Sources/Extension/Sequence+.swift new file mode 100644 index 00000000..a7e815ea --- /dev/null +++ b/Projects/Core/Sources/Extension/Sequence+.swift @@ -0,0 +1,48 @@ +// +// Sequence+.swift +// Core +// +// Created by gnksbm on 4/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public extension Sequence { + /** + 키패스로 배열의 요소를 비교해 중복되지 않는 요소를 반환하는 함수 + + - Parameters: + - target: 비교할 타겟 배열 + - sourceKeyPath: 원본 배열의 요소를 식별하는 키패스 + - targetKeyPath: 타겟 배열의 요소를 식별하는 키패스 + + - Returns: (sourceMissing: 타겟 배열에만 존재하는 요소들, + targetMissing: 원본 배열에만 존재하는 요소들) + */ + func compareDiff( + sourceKeyPath: KeyPath, + target: [Target], + targetKeyPath: KeyPath + ) -> (sourceMissing: [Target], targetMissing: [Element]) { + let sourceDic = Dictionary( + uniqueKeysWithValues: map { + ($0[keyPath: sourceKeyPath], $0) + } + ) + let targetDic = Dictionary( + uniqueKeysWithValues: target.map { + ($0[keyPath: targetKeyPath], $0) + } + ) + + let sourceMissing = target.filter { targetElement in + sourceDic[targetElement[keyPath: targetKeyPath]] == nil + } + let targetMissing = filter { sourceElement in + targetDic[sourceElement[keyPath: sourceKeyPath]] == nil + } + + return (sourceMissing, targetMissing) + } +} diff --git a/Projects/Core/Sources/Extension/String+.swift b/Projects/Core/Sources/Extension/String+.swift index 232b0c72..bdad162d 100644 --- a/Projects/Core/Sources/Extension/String+.swift +++ b/Projects/Core/Sources/Extension/String+.swift @@ -7,6 +7,7 @@ // import UIKit +import CoreLocation public extension String { func toDate(dateFormat: String) -> Date { @@ -21,9 +22,96 @@ public extension String { } static var serverKey: Self { - guard let any = Bundle.main.object(forInfoDictionaryKey: "SERVER_KEY"), + guard let any = Bundle.main.object( + forInfoDictionaryKey: "DATA_GO_KR_API_KEY" + ), let serverKey = any as? String else { fatalError("Can't Not Find Server Key") } return serverKey } + + static func getCurrentVersion() -> String { + guard let dictionary = Bundle.main.infoDictionary, + let version = dictionary["CFBundleShortVersionString"] as? String + else { return "" } + + return version + } + + static func getDeviceIdentifier() -> String { + var systemInfo = utsname() + uname(&systemInfo) + let machineMirror = Mirror(reflecting: systemInfo.machine) + let identifier + = machineMirror.children.reduce("") { identifier, element in + guard let value = element.value as? Int8, + value != 0 + else { return identifier } + + return identifier + String(UnicodeScalar(UInt8(value))) + } + + switch identifier { + case "iPhone10,1", "iPhone10,4": + return "iPhone 8" + case "iPhone10,2", "iPhone10,5": + return "iPhone 8 Plus" + case "iPhone10,3", "iPhone10,6": + return "iPhone X" + case "iPhone11,2": + return "iPhone XS" + case "iPhone11,4", "iPhone11,6": + return "iPhone XS Max" + case "iPhone11,8": + return "iPhone XR" + case "iPhone12,1": + return "iPhone 11" + case "iPhone12,3": + return "iPhone 11 Pro" + case "iPhone12,5": + return "iPhone 11 Pro Max" + case "iPhone12,8": + return "iPhone SE (2nd generation)" + case "iPhone13,1": + return "iPhone 12 mini" + case "iPhone13,2": + return "iPhone 12" + case "iPhone13,3": + return "iPhone 12 Pro" + case "iPhone13,4": + return "iPhone 12 Pro Max" + case "iPhone14,4": + return "iPhone 13 mini" + case "iPhone14,5": + return "iPhone 13" + case "iPhone14,2": + return "iPhone 13 Pro" + case "iPhone14,3": + return "iPhone 13 Pro Max" + case "iPhone14,6": + return "iPhone SE (3rd generation)" + case "iPhone14,7": + return "iPhone 14" + case "iPhone14,8": + return "iPhone 14 Plus" + case "iPhone15,2": + return "iPhone 14 Pro" + case "iPhone15,3": + return "iPhone 14 Pro Max" + case "iPhone15,4": + return "iPhone 15" + case "iPhone15,5": + return "iPhone 15 Plus" + case "iPhone16,1": + return "iPhone 15 Pro" + case "iPhone16,2": + return "iPhone 15 Pro Max" + default: + return identifier + } + } + + static var fcmToken: Self? { + UserDefaults.standard.string(forKey: "fcmToken") + } } diff --git a/Projects/Core/Sources/Extension/UIScrollView+.swift b/Projects/Core/Sources/Extension/UIScrollView+.swift new file mode 100644 index 00000000..4c49d238 --- /dev/null +++ b/Projects/Core/Sources/Extension/UIScrollView+.swift @@ -0,0 +1,31 @@ +// +// UIScrollView.swift +// Core +// +// Created by 유하은 on 2024/03/13. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +public extension UIScrollView { + func enableRefreshControl( + refreshStr: String, + refreshMsgColor: UIColor = DesignSystemAsset.mainColor.color, + progressColor: UIColor = DesignSystemAsset.mainColor.color + ) -> UIRefreshControl { + let refreshControl = UIRefreshControl() + refreshControl.endRefreshing() + + self.refreshControl = refreshControl + + refreshControl.tintColor = progressColor + refreshControl.attributedTitle = NSAttributedString( + string: "\(refreshStr)", + attributes: [.foregroundColor: refreshMsgColor] + ) + return refreshControl + } +} diff --git a/Projects/Core/Sources/Extension/UIStackView+.swift b/Projects/Core/Sources/Extension/UIStackView+.swift new file mode 100644 index 00000000..cec819b7 --- /dev/null +++ b/Projects/Core/Sources/Extension/UIStackView+.swift @@ -0,0 +1,52 @@ +// +// UIStackView+.swift +// Core +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UIStackView { + func addDivider( + color: UIColor, + hasPadding: Bool = false, + dividerRatio: Double = 1 + ) { + let subViewCount = arrangedSubviews.count + var insertAt = 1 + if subViewCount > 1 { + for _ in 1...subViewCount - 1 { + let separator = UIView() + separator.backgroundColor = color + insertArrangedSubview(separator, at: insertAt) + insertAt += 2 + switch axis { + case .vertical: + NSLayoutConstraint.activate([ + separator.heightAnchor.constraint(equalToConstant: 1), + separator.widthAnchor.constraint( + equalTo: self.widthAnchor, + multiplier: dividerRatio + ) + ]) + case .horizontal: + NSLayoutConstraint.activate([ + separator.widthAnchor.constraint(equalToConstant: 1), + separator.heightAnchor.constraint( + equalTo: self.heightAnchor, + multiplier: dividerRatio + ) + ]) + @unknown default: + break + } + } + } + if hasPadding { + insertArrangedSubview(UIView(), at: 0) + insertArrangedSubview(UIView(), at: arrangedSubviews.count) + } + } +} diff --git a/Projects/Core/Sources/Extension/UITableView+.swift b/Projects/Core/Sources/Extension/UITableView+.swift new file mode 100644 index 00000000..cc1408c3 --- /dev/null +++ b/Projects/Core/Sources/Extension/UITableView+.swift @@ -0,0 +1,25 @@ +// +// UITableView+.swift +// Core +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UITableView { + func register(_ cellType: UITableViewCell.Type) { + register( + cellType, + forCellReuseIdentifier: cellType.identifier + ) + } + + func register(_ viewType: UITableViewHeaderFooterView.Type) { + register( + viewType, + forHeaderFooterViewReuseIdentifier: viewType.identifier + ) + } +} diff --git a/Projects/Core/Sources/Extension/UITableViewCell+.swift b/Projects/Core/Sources/Extension/UITableViewCell+.swift new file mode 100644 index 00000000..3baa9969 --- /dev/null +++ b/Projects/Core/Sources/Extension/UITableViewCell+.swift @@ -0,0 +1,15 @@ +// +// UITableViewCell+.swift +// Core +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UITableViewCell { + static var identifier: String { + return String(describing: self) + } +} diff --git a/Projects/Core/Sources/Extension/UITableViewHeaderFooterView+.swift b/Projects/Core/Sources/Extension/UITableViewHeaderFooterView+.swift new file mode 100644 index 00000000..f4e3eba1 --- /dev/null +++ b/Projects/Core/Sources/Extension/UITableViewHeaderFooterView+.swift @@ -0,0 +1,15 @@ +// +// UITableViewHeaderFooterView+.swift +// Core +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UITableViewHeaderFooterView { + static var identifier: String { + return String(describing: self) + } +} diff --git a/Projects/Core/Sources/Extension/UITextfield+.swift b/Projects/Core/Sources/Extension/UITextfield+.swift new file mode 100644 index 00000000..be8f9f13 --- /dev/null +++ b/Projects/Core/Sources/Extension/UITextfield+.swift @@ -0,0 +1,24 @@ +// +// UITextfield+.swift +// Core +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UITextField { + func addLeftPadding(width: CGFloat) { + let paddingView = UIView( + frame: CGRect( + x: 0, + y: 0, + width: width, + height: self.frame.height + ) + ) + self.leftView = paddingView + self.leftViewMode = ViewMode.always + } +} diff --git a/Projects/Core/Sources/Extension/UIView+.swift b/Projects/Core/Sources/Extension/UIView+.swift new file mode 100644 index 00000000..babb4a10 --- /dev/null +++ b/Projects/Core/Sources/Extension/UIView+.swift @@ -0,0 +1,68 @@ +// +// UIView+.swift +// Core +// +// Created by gnksbm on 1/24/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UIView { + func addCornerRadius( + corners: UIRectCorner, + radius: Int = 10 + ) { + let path = UIBezierPath( + roundedRect: bounds, + byRoundingCorners: corners, + cornerRadii: CGSize(width: radius, height: radius) + ) + let shape = CAShapeLayer() + shape.path = path.cgPath + layer.mask = shape + } + + func addBorder( + edges: UIRectEdge, + color: UIColor = .black, + thickness: CGFloat = 1 + ) { + let border = CALayer() + + switch edges { + case .top: + border.frame = CGRect( + x: 0, + y: 0, + width: frame.size.width, + height: thickness + ) + case .bottom: + border.frame = CGRect( + x: 0, + y: frame.size.height - thickness, + width: frame.size.width, + height: thickness + ) + case .left: + border.frame = CGRect( + x: 0, + y: 0, + width: thickness, + height: frame.size.height + ) + case .right: + border.frame = CGRect( + x: frame.size.width - thickness, + y: 0, + width: thickness, + height: frame.size.height + ) + default: + break + } + border.backgroundColor = color.cgColor + layer.addSublayer(border) + } +} diff --git a/Projects/Core/Sources/Extension/UIViewController+.swift b/Projects/Core/Sources/Extension/UIViewController+.swift new file mode 100644 index 00000000..ca080ce9 --- /dev/null +++ b/Projects/Core/Sources/Extension/UIViewController+.swift @@ -0,0 +1,24 @@ +// +// UIViewController+.swift +// Core +// +// Created by gnksbm on 3/15/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UIViewController { + func hideKeyboard() { + view.addGestureRecognizer( + UITapGestureRecognizer( + target: self, + action: #selector(UIViewController.dismissKeyboard) + ) + ) + } + + @objc func dismissKeyboard() { + view.endEditing(true) + } +} diff --git a/Projects/Core/Sources/Extension/UserDefaults+.swift b/Projects/Core/Sources/Extension/UserDefaults+.swift new file mode 100644 index 00000000..96bbe878 --- /dev/null +++ b/Projects/Core/Sources/Extension/UserDefaults+.swift @@ -0,0 +1,15 @@ +// +// UserDefaults+.swift +// Core +// +// Created by gnksbm on 4/5/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public extension UserDefaults { + static let appGroup = UserDefaults( + suiteName: "group.Pepsi-Club.WhereMyBus" + ) +} diff --git a/Projects/CoreDataService/Project.swift b/Projects/CoreDataService/Project.swift new file mode 100644 index 00000000..7d48c590 --- /dev/null +++ b/Projects/CoreDataService/Project.swift @@ -0,0 +1,10 @@ +import ProjectDescription +import ProjectDescriptionHelpers + +let project = Project.makeProject( + name: "CoreDataService", + moduleType: .dynamicFramework, + dependencies: [ + .domain + ] +) diff --git a/Projects/CoreDataService/Sources/CoreDataService.swift b/Projects/CoreDataService/Sources/CoreDataService.swift new file mode 100644 index 00000000..2c7c4500 --- /dev/null +++ b/Projects/CoreDataService/Sources/CoreDataService.swift @@ -0,0 +1,33 @@ +// +// CoreDataService.swift +// CoreDataService +// +// Created by gnksbm on 2/17/24. +// Copyright © 2024 GeonSeobKim. All rights reserved. +// + +import Foundation + +import Core + +public protocol CoreDataService { + func fetch(type: T.Type) throws -> [T] + + func save(data: some CoreDataStorable) throws + + func update( + data: T, + uniqueKeyPath: KeyPath + ) throws + + func delete( + data: T, + uniqueKeyPath: KeyPath + ) throws + + func duplicationCheck( + type: T.Type, + uniqueKeyPath: KeyPath, + uniqueValue: U + ) throws -> Bool +} diff --git a/Projects/CoreDataService/Sources/DefaultCoreDataService.swift b/Projects/CoreDataService/Sources/DefaultCoreDataService.swift new file mode 100644 index 00000000..cc47f260 --- /dev/null +++ b/Projects/CoreDataService/Sources/DefaultCoreDataService.swift @@ -0,0 +1,252 @@ +// +// DefaultCoreDataService.swift +// CoreDataService +// +// Created by gnksbm on 2/17/24. +// Copyright © 2024 GeonSeobKim. All rights reserved. +// + +import Foundation + +import Core + +import CoreData + +public final class DefaultCoreDataService: CoreDataService { + private let container: NSPersistentContainer + + private let fileName = "Model" + private let appGroupName = "group.Pepsi-Club.WhereMyBus" + + public init() { + container = NSPersistentCloudKitContainer(name: fileName) + configureContainer() + migrateStore() + container.loadPersistentStores { desc, error in + if let error { + #if DEBUG + print(error.localizedDescription) + #endif + } + if let storeUrl = desc.url { + #if DEBUG + print( + "💾 Load된 SQLite URL: \(storeUrl)" + ) + #endif + } + } + } + + private func configureContainer() { + container.viewContext.automaticallyMergesChangesFromParent = true + } + + private func migrateStore() { + let fileManager = FileManager.default + let coordinator = container.persistentStoreCoordinator + guard let legacyStoreUrl = fileManager + .urls( + for: .applicationSupportDirectory, + in: .userDomainMask + ) + .first? + .appendingPathComponent( + "\(fileName).sqlite" + ) + else { + #if DEBUG + print("💾 레거시 디렉토리 URL 찾기 실패") + #endif + return + } + guard let appGroupStoreUrl = fileManager + .containerURL( + forSecurityApplicationGroupIdentifier: appGroupName + )? + .appendingPathComponent( + "\(fileName).sqlite" + ) + else { + #if DEBUG + print("💾 AppGroup 디렉토리 URL 찾기 실패") + #endif + return + } + guard let legacyStore = coordinator.persistentStore(for: legacyStoreUrl) + else { + #if DEBUG + print( + "💾 레거시 SQLite 파일 없음", + "💾 레거시 SQLite URL: \(legacyStoreUrl)", + "💾 AppGroup SQLite URL: \(appGroupStoreUrl)", + separator: "\n" + ) + #endif + container.persistentStoreDescriptions = [ + .init(url: appGroupStoreUrl) + ] + return + } + do { + let newStore = try coordinator.migratePersistentStore( + legacyStore, + to: appGroupStoreUrl, + type: .sqlite + ) + if let newStoreUrl = newStore.url { + container.persistentStoreDescriptions = [ + .init(url: newStoreUrl) + ] + print("💾 AppGroup SQLite Url: \(newStoreUrl)") + } + do { + try coordinator.destroyPersistentStore( + at: legacyStoreUrl, + type: .sqlite + ) + } catch { + #if DEBUG + print( + "💾 레거시 제거 실패", + "💾 \(error.localizedDescription)", + separator: "\n" + ) + #endif + } + } catch { + #if DEBUG + print( + "💾 마이그레이션 실패", + "💾 \(error.localizedDescription)", + separator: "\n" + ) + #endif + } + } + + public func fetch(type: T.Type) throws -> [T] { + do { + return try fetchMO(type: type) + .compactMap { $0 as? CoreDataModelObject } + .compactMap { $0.toDomain as? T } + } catch { + throw error + } + } + + public func save(data: T) throws { + let object = NSEntityDescription.insertNewObject( + forEntityName: "\(type(of: data))MO", + into: container.viewContext + ) + let mirror = Mirror(reflecting: data) + mirror.children.forEach { key, value in + guard let key, + let propertyName = String(describing: key) + .split(separator: ".") + .last + else { return } + object.setValue(value, forKey: String(propertyName)) + } + do { + try container.viewContext.save() + } catch { + container.viewContext.rollback() + throw error + } + } + + public func update( + data: T, + uniqueKeyPath: KeyPath + ) throws { + do { + let fetchedMo = try fetchMO(type: type(of: data)) + let uniqueValue = data[keyPath: uniqueKeyPath] + let object = fetchedMo.first { object in + guard let fetchedValue = object.value( + forKey: uniqueKeyPath.propertyName + ) as? U + else { return false } + return fetchedValue == uniqueValue + } + let mirror = Mirror(reflecting: data) + mirror.children.forEach { key, value in + guard let key, + let propertyName = String(describing: key) + .split(separator: ".") + .last + else { return } + object?.setValue( + value, + forKey: String(propertyName) + ) + } + if container.viewContext.hasChanges { + do { + try container.viewContext.save() + } catch { + throw error + } + } + } catch { + throw error + } + } + + public func delete( + data: T, + uniqueKeyPath: KeyPath + ) throws { + do { + let fetchedMo = try fetchMO(type: type(of: data)) + guard let object = fetchedMo.first(where: { object in + object.value(forKey: uniqueKeyPath.propertyName) != nil + }) + else { return } + container.viewContext.delete(object) + if container.viewContext.hasChanges { + do { + try container.viewContext.save() + } catch { + throw error + } + } + } catch { + throw error + } + } + + public func duplicationCheck( + type: T.Type, + uniqueKeyPath: KeyPath, + uniqueValue: U + ) throws -> Bool { + do { + let fetchedMO = try fetchMO(type: type) + return fetchedMO.contains { object in + guard let uniqueProperty = object.value( + forKey: uniqueKeyPath.propertyName + ) as? U + else { return false } + return uniqueProperty == uniqueValue + } + } catch { + throw error + } + } + + private func fetchMO( + type: T.Type + ) throws -> [NSManagedObject] { + let request = NSFetchRequest( + entityName: "\(type)MO" + ) + do { + return try container.viewContext.fetch(request) + } catch { + throw error + } + } +} diff --git a/Projects/Data/Project.swift b/Projects/Data/Project.swift index a5f6c1f4..fbe1b095 100644 --- a/Projects/Data/Project.swift +++ b/Projects/Data/Project.swift @@ -4,8 +4,12 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "Data", - moduleType: .staticFramework, + moduleType: .dynamicFramework, dependencies: [ - .networks + .networkService, + .coreDataService + ], + coreDataModel: [ + .init("../App/Resources/Model.xcdatamodeld") ] ) diff --git a/Projects/Data/Sources/DTO/AddRegularAlarmDTO.swift b/Projects/Data/Sources/DTO/AddRegularAlarmDTO.swift new file mode 100644 index 00000000..fd6a44db --- /dev/null +++ b/Projects/Data/Sources/DTO/AddRegularAlarmDTO.swift @@ -0,0 +1,49 @@ +// +// AddRegularAlarmDTO.swift +// Data +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +struct AddRegularAlarmDTO: Decodable { + /* + /// 상태코드 + let statusCode: Int + /// 메시지 (ex. 성공, DB Error 등) + let message: String + /// 응답시간 + let timestamp: String + */ + /// 서버에 등록된 알람 아이디 + public let alarmId: String + + public init(alarmId: String) { + self.alarmId = alarmId + } + +} + +extension AddRegularAlarmDTO { + enum CodingKeys: String, CodingKey { + case alarmId = "id" + } +} + +extension AddRegularAlarmDTO { + func toDomain(request: AddRegularAlarmRequest) -> RegularAlarmResponse { + .init( + requestId: alarmId, + busStopId: String(request.arsId), + busStopName: request.busStopName, + busId: String(request.busRouteId), + busName: request.busName, + time: request.time.toDate(dateFormat: "HHmm"), + weekday: request.weekday + ) + } +} diff --git a/Projects/Data/Sources/DTO/BusStopArrivalInfoDTO.swift b/Projects/Data/Sources/DTO/BusStopArrivalInfoDTO.swift new file mode 100644 index 00000000..e2d4dfe3 --- /dev/null +++ b/Projects/Data/Sources/DTO/BusStopArrivalInfoDTO.swift @@ -0,0 +1,240 @@ +// +// BusStopArrivalInfoDTO.swift +// Data +// +// Created by gnksbm on 3/3/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +public struct BusStopArrivalInfoDTO: Codable { + let msgHeader: MsgHeader + let msgBody: MsgBody +} + +public extension BusStopArrivalInfoDTO { + var toDomain: BusStopArrivalInfoResponse { + guard msgHeader.headerCD == "0" + else { + return .init( + busStopId: msgHeader.headerCodeMessage, + busStopName: "", + direction: "", + buses: getBuses + ) + } + return .init( + busStopId: getBusStopId ?? "정류장 ID 없음", + busStopName: getBusStopName ?? "정류장 이름 없음", + direction: getDirection ?? "정류장 방면 없음", + buses: getBuses + ) + } + + private var getBusStopId: String? { + msgBody.itemList?.first?.arsId + } + + private var getBusStopName: String? { + msgBody.itemList?.first?.stNm + } + + private var getBusStopNum: String? { + msgBody.itemList?.first?.arsId + } + + private var getDirection: String? { + let nextStations = msgBody.itemList?.compactMap { $0.nxtStn } + var dic = [String: Int]() + nextStations?.forEach { nextStation in + dic[nextStation, default: 0] += 1 + } + let direction = dic.mapValues { $0 } + .sorted { $0.value > $1.value } + .first? + .key + return direction + } + + private var getBuses: [BusArrivalInfoResponse] { + guard let itemList = msgBody.itemList else { return [] } + return itemList + .map { item in + let firstMsgArr = (item.arrmsg1 ?? "운행종료") + .components(separatedBy: "[") + let secondMsgArr = (item.arrmsg2 ?? "운행종료") + .components(separatedBy: "[") + var firstArrivalRemaining = "" + var secondArrivalRemaining = "" + if firstMsgArr.count > 1 { + firstArrivalRemaining = firstMsgArr[1] + firstArrivalRemaining = + firstArrivalRemaining.components(separatedBy: "]")[0] + } + if secondMsgArr.count > 1 { + secondArrivalRemaining = secondMsgArr[1] + secondArrivalRemaining = + secondArrivalRemaining.components(separatedBy: "]")[0] + } + let firstArrivalState: ArrivalState + let secondArrivalState: ArrivalState + switch firstMsgArr.first { + case .some(let msg): + switch msg { + case "곧 도착": + firstArrivalState = .soon + case "출발대기": + firstArrivalState = .pending + case "운행종료": + firstArrivalState = .finished + default: + firstArrivalState = .arrivalTime( + time: Int(item.traTime1 ?? "0") ?? 0 + ) + } + case .none: + firstArrivalState = .arrivalTime( + time: Int(item.traTime1 ?? "0") ?? 0 + ) + } + switch secondMsgArr.first { + case .some(let msg): + switch msg { + case "곧 도착": + secondArrivalState = .soon + case "출발대기": + secondArrivalState = .pending + case "운행종료": + secondArrivalState = .finished + default: + secondArrivalState = .arrivalTime( + time: Int(item.traTime2 ?? "0") ?? 0 + ) + } + case .none: + secondArrivalState = .arrivalTime( + time: Int(item.traTime2 ?? "0") ?? 0 + ) + } + return .init( + busId: item.busRouteId ?? "ID 정보 없음", + busName: item.rtNm ?? "이름 정보 없음", + busType: item.routeType ?? "타입 정보 없음", + nextStation: item.nxtStn ?? "정거장 정보 없음", + firstArrivalState: firstArrivalState, + firstArrivalRemaining: firstArrivalRemaining, + secondArrivalState: secondArrivalState, + secondArrivalRemaining: secondArrivalRemaining, + isFavorites: false, + isAlarmOn: false + ) + } + } +} + +extension BusStopArrivalInfoDTO { + struct MsgHeader: Codable { + let headerMsg, headerCD: String + let itemCount: Int + + enum CodingKeys: String, CodingKey { + case headerMsg + case headerCD = "headerCd" + case itemCount + } + + var headerCodeMessage: String { + switch headerCD { + case "0": + return "정상적으로 처리되었습니다" + case "1": + return "시스템 오류가 발생하였습니다" + case "2": + return "잘못된 쿼리 요청입니다. 쿼리 변수가 정확한지 확인하세요." + case "3": + return "정류소를 찾을 수 없습니다" + case "4": + return "노선을 찾을 수 없습니다." + case "5": + return "잘못된 위치로 요청을 하였습니다. 위/경도 좌표가 정확한지 확인하세요" + case "6": + return "실시간 정보를 읽을 수 없습니다. 잠시 후 다시 시도하세요" + case "7": + return "경로 검색 결과가 존재하지 않습니다." + case "8": + return "운행 종료되었습니다." + default: + return "잘못된 헤더코드 입니다." + } + } + } + // MARK: - MsgBody + struct MsgBody: Codable { + let itemList: [Item]? + } + + struct Item: Codable { + let busRouteId: String? // 노선ID + let rtNm: String? // 노선명 + let nxtStn: String? // 다음 정류장 이름 + let routeType: String? // 노선유형 + // (1:공항, 2:마을, 3:간선, 4:지선, 5:순환, 6:광역, 7:인천, 8:경기, 9:폐지, 0:공용) + let arsId: String // 정류소 번호 + let stId: String? // 정류소 고유 ID + let stNm: String? // 정류소명 + let busRouteAbrv: String? // + let sectNm: String? // 구간명 + let gpsX: String // 정류소 X좌표 + let gpsY: String // 정류소 Y좌표 + let posX: String? // 정류소 좌표X + let posY: String? // 정류소 좌표Y + let stationTp: String // 정류소 타입 + // (0:공용, 1:일반형 시내/농어촌버스, 2:좌석형 시내/농어촌버스, + // 3:직행좌석형 시내/농어촌버스, 4:일반형 시외버스, 5:좌석형 시외버스, 6:고속형 시외버스, + // 7:마을버스) + let firstTm: String? // 첫차시간 + let lastTm: String? // 막차시간 + let term: String? // 배차간격 (분) + let nextBus: String? // 막차운행여부 + let adirection: String? // + let deTourAt: String? // 우회여부 + // MARK: 첫번째 도착 예정 버스 + let arrmsg1: String? // 첫번째도착예정버스의 도착정보메시지 + let vehId1: String? // 첫번째도착예정버스ID + let sectOrd1: String? // 첫번째도착예정버스의 현재구간 순번 + let stationNm1: String? // 첫번째도착예정버스의 최종 정류소명 + let traTime1: String? // 첫번째도착예정버스의 여행시간 + let traSpd1: String? // 첫번째도착예정버스의 여행속도 + let isArrive1: String? // 첫번째도착예정버스의 최종 정류소 도착출발여부(0 + let repTm1: String? // 첫번째도착예정버스의 최종 보고 시간 + let isLast1: String? // 첫번째도착예정버스의 막차여부 + let busType1: String? // 첫번째도착예정버스의 차량유형 (0:일반버스, 1:저상) + let arrmsgSec1: String? // 첫번째도착예정버스의 도착정보메시지 + let rerdieDiv1: String? // 첫번째도착예정버스의 재차구분 + let rerideNum1: String? // 첫번째도착예정버스의 재차인원 + let isFullFlag1: String? // 첫번째도착예정버스의 만차여부 + let congestion1: String? // + // let plainNo1: String // null + // let staOrd1: String // 값 없음, 첫번째도착예정버스의 현재구간 순번 + // MARK: 두번째 도착 예정 버스 + let arrmsg2: String? // 두번째도착예정버스의 도착정보메시지 + let vehId2: String? // 두번째도착예정버스ID + let sectOrd2: String? // 두번째도착예정버스의 현재구간 순번 + let stationNm2: String? // 두번째도착예정버스의 최종 정류소명 + let traTime2: String? // 두번째도착예정버스의 여행시간 + let traSpd2: String? // 두번째도착예정버스의 여행속도 + let isArrive2: String? // 두번째도착예정버스의 최종 정류소 도착출발여부(0 + // let repTm2: String // ⭐️null⭐️, 두번째도착예정버스의 최종 보고 시간 + let isLast2: String? // 두번째도착예정버스의 막차여부 + let busType2: String? // 두번째도착예정버스의 차량유형 (0:일반버스, 1:저상) + let arrmsgSec2: String? // 두번째도착예정버스의 도착정보메시지 + let rerdieDiv2: String? // 두번째도착예정버스의 재차구분 + let rerideNum2: String? // 두번째도착예정버스의 재차인원 + let isFullFlag2: String? // 두번째도착예정버스의 만차여부 + let congestion2: String? // + // let plainNo2: String // null + } +} diff --git a/Projects/Data/Sources/DTO/BusStopListDTO.swift b/Projects/Data/Sources/DTO/BusStopListDTO.swift new file mode 100644 index 00000000..2f37eec6 --- /dev/null +++ b/Projects/Data/Sources/DTO/BusStopListDTO.swift @@ -0,0 +1,79 @@ +// +// BusStopListDTO.swift +// Data +// +// Created by gnksbm on 1/28/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +struct BusStopListDTO: Codable { + let description: Description + let region: WMBRegion + let data: [BusStopInfo] + + enum CodingKeys: String, CodingKey { + case description = "DESCRIPTION" + case region = "REGION" + case data = "DATA" + } +} + +extension BusStopListDTO { + var toDomain: BusStopRegion { + switch region { + case .seoul: + return .seoul( + responses: data.map { + .init( + busStopName: $0.stopNm, + busStopId: $0.stopNo, + direction: $0.nxtStn, + longitude: $0.xcode, + latitude: $0.ycode + ) + } + ) + } + } + + struct BusStopInfo: Codable { + let stopNm, ycode, stopNo, xcode, nxtStn: String + // stopType + // "가로변시간", "가로변전일", "가상정류장", "마을버스", "일반차로", "중앙차로" + let stopType: String + let nodeID: String + + enum CodingKeys: String, CodingKey { + case stopNm = "stop_nm" + case ycode + case stopNo = "stop_no" + case xcode + case nxtStn + case stopType = "stop_type" + case nodeID = "node_id" + } + } + + enum WMBRegion: String, Codable { + case seoul = "서울" + } + + struct Description: Codable { + let stopType, ycode, stopNm, nodeID: String + let stopNo, xcode, nxtStn: String + + enum CodingKeys: String, CodingKey { + case stopType = "STOP_TYPE" + case ycode = "YCODE" + case stopNm = "STOP_NM" + case nodeID = "NODE_ID" + case stopNo = "STOP_NO" + case xcode = "XCODE" + case nxtStn = "NXT_STN" + } + } +} diff --git a/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataClass.swift b/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataClass.swift new file mode 100644 index 00000000..56b7be72 --- /dev/null +++ b/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataClass.swift @@ -0,0 +1,26 @@ +// +// FavoritesBusStopResponseMO+CoreDataClass.swift +// +// +// Created by gnksbm on 2/25/24. +// +// + +import Foundation +import CoreData + +import Core +import Domain + +@objc(FavoritesBusStopResponseMO) +public class FavoritesBusStopResponseMO: NSManagedObject, CoreDataModelObject { + public var toDomain: CoreDataStorable { + guard let busStopId, + let busIds + else { fatalError() } + return FavoritesBusStopResponse( + busStopId: busStopId, + busIds: busIds + ) + } +} diff --git a/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataProperties.swift b/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataProperties.swift new file mode 100644 index 00000000..4d99b947 --- /dev/null +++ b/Projects/Data/Sources/DTO/CoreDataModelObject/FavoritesBusStopResponseMO+CoreDataProperties.swift @@ -0,0 +1,22 @@ +// +// FavoritesBusStopResponseMO+CoreDataProperties.swift +// +// +// Created by gnksbm on 3/4/24. +// +// + +import Foundation +import CoreData + +extension FavoritesBusStopResponseMO { + @nonobjc public class func fetchRequest( + ) -> NSFetchRequest { + return NSFetchRequest( + entityName: "FavoritesBusStopResponseMO" + ) + } + + @NSManaged public var busIds: [String]? + @NSManaged public var busStopId: String? +} diff --git a/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataClass.swift b/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataClass.swift new file mode 100644 index 00000000..6ce5c78a --- /dev/null +++ b/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataClass.swift @@ -0,0 +1,36 @@ +// +// RegularAlarmResponseMO+CoreDataClass.swift +// +// +// Created by gnksbm on 4/6/24. +// +// + +import Foundation +import CoreData + +import Core +import Domain + +@objc(RegularAlarmResponseMO) +public class RegularAlarmResponseMO: NSManagedObject, CoreDataModelObject { + public var toDomain: CoreDataStorable { + guard let requestId, + let busStopId, + let busStopName, + let busId, + let busName, + let time, + let weekday + else { fatalError() } + return RegularAlarmResponse( + requestId: requestId, + busStopId: busStopId, + busStopName: busStopName, + busId: busId, + busName: busName, + time: time, + weekday: weekday + ) + } +} diff --git a/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataProperties.swift b/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataProperties.swift new file mode 100644 index 00000000..ebf6af84 --- /dev/null +++ b/Projects/Data/Sources/DTO/CoreDataModelObject/RegularAlarmResponseMO+CoreDataProperties.swift @@ -0,0 +1,27 @@ +// +// RegularAlarmResponseMO+CoreDataProperties.swift +// +// +// Created by gnksbm on 4/6/24. +// +// + +import Foundation +import CoreData + +extension RegularAlarmResponseMO { + @nonobjc public class func fetchRequest( + ) -> NSFetchRequest { + return NSFetchRequest( + entityName: "RegularAlarmResponseMO" + ) + } + + @NSManaged public var requestId: String? + @NSManaged public var busStopId: String? + @NSManaged public var busStopName: String? + @NSManaged public var busId: String? + @NSManaged public var busName: String? + @NSManaged public var time: Date? + @NSManaged public var weekday: [Int]? +} diff --git a/Projects/Data/Sources/DTO/FetchRegularAlarmDTO.swift b/Projects/Data/Sources/DTO/FetchRegularAlarmDTO.swift new file mode 100644 index 00000000..d56bb12d --- /dev/null +++ b/Projects/Data/Sources/DTO/FetchRegularAlarmDTO.swift @@ -0,0 +1,46 @@ +// +// FetchRegularAlarmDTO.swift +// Data +// +// Created by gnksbm on 4/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +struct FetchRegularAlarmDTO: Decodable { + let alarmId: String + let time: String + let weekday: [Int] + let busId: String + let busStopId: String +} + +extension Array { + func validateSync( + localResponses: [RegularAlarmResponse] + ) -> RegularAlarmSyncValidation { + let (serverMissingAlarms, localMissingAlarm) = compareDiff( + sourceKeyPath: \.alarmId, + target: localResponses, + targetKeyPath: \.requestId + ) + let localMissingAlarmIds = localMissingAlarm.map { $0.alarmId } + return RegularAlarmSyncValidation( + localMissingAlarmIds: localMissingAlarmIds, + serverMissingAlarms: serverMissingAlarms + ) + } +} + +extension FetchRegularAlarmDTO { + enum CodingKeys: String, CodingKey { + case alarmId = "id" + case time + case weekday = "day" + case busId = "busRoutedId" + case busStopId = "arsId" + } +} diff --git a/Projects/Data/Sources/DTO/RegularAlarmSyncValidation.swift b/Projects/Data/Sources/DTO/RegularAlarmSyncValidation.swift new file mode 100644 index 00000000..54d1f9e8 --- /dev/null +++ b/Projects/Data/Sources/DTO/RegularAlarmSyncValidation.swift @@ -0,0 +1,43 @@ +// +// RegularAlarmSyncValidation.swift +// Data +// +// Created by gnksbm on 4/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core +import Domain + +enum RegularAlarmSyncValidation { + case synced + case localMissing(alarmIds: [String]) + case serverMissing(responses: [RegularAlarmResponse]) + case bothMissing( + localMissingAlarmIds: [String], + serverMissingResponses: [RegularAlarmResponse] + ) + + init( + localMissingAlarmIds: [String], + serverMissingAlarms: [RegularAlarmResponse] + ) { + let isLocalMissed = !localMissingAlarmIds.isEmpty + let isServerMissed = !serverMissingAlarms.isEmpty + switch (isLocalMissed, isServerMissed) { + case (false, false): + self = .synced + case (true, false): + self = .localMissing(alarmIds: localMissingAlarmIds) + case (false, true): + self = .serverMissing(responses: serverMissingAlarms) + case (true, true): + self = .bothMissing( + localMissingAlarmIds: localMissingAlarmIds, + serverMissingResponses: serverMissingAlarms + ) + } + } +} diff --git a/Projects/Data/Sources/DTO/RemoveRegularAlarmDTO.swift b/Projects/Data/Sources/DTO/RemoveRegularAlarmDTO.swift new file mode 100644 index 00000000..7d2c07de --- /dev/null +++ b/Projects/Data/Sources/DTO/RemoveRegularAlarmDTO.swift @@ -0,0 +1,18 @@ +// +// RemoveRegularAlarmDTO.swift +// Data +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +struct RemoveRegularAlarmDTO: Decodable { + /// 메시지 (ex. 성공, DB Error 등) + public let message: String + + public init(message: String) { + self.message = message + } +} diff --git a/Projects/Data/Sources/Repository/DefaultBusStopArrivalInfoRepository.swift b/Projects/Data/Sources/Repository/DefaultBusStopArrivalInfoRepository.swift new file mode 100644 index 00000000..8e3583d8 --- /dev/null +++ b/Projects/Data/Sources/Repository/DefaultBusStopArrivalInfoRepository.swift @@ -0,0 +1,40 @@ +// +// DefaultBusStopArrivalInfoRepository.swift +// Data +// +// Created by gnksbm on 1/30/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain +import NetworkService + +import RxSwift + +public final class DefaultBusStopArrivalInfoRepository: + NSObject, BusStopArrivalInfoRepository { + private let networkService: NetworkService + + private let disposeBag = DisposeBag() + + public init(networkService: NetworkService) { + self.networkService = networkService + } + + public func fetchArrivalList( + busStopId: String + ) -> Observable { + networkService.request( + endPoint: BusStopArrivalInfoEndPoint(arsId: busStopId) + ) + .decode( + type: BusStopArrivalInfoDTO.self, + decoder: JSONDecoder() + ) + .map { + $0.toDomain + } + } +} diff --git a/Projects/Data/Sources/Repository/DefaultFavoritesRepository.swift b/Projects/Data/Sources/Repository/DefaultFavoritesRepository.swift new file mode 100644 index 00000000..a32764f8 --- /dev/null +++ b/Projects/Data/Sources/Repository/DefaultFavoritesRepository.swift @@ -0,0 +1,136 @@ +// +// DefaultFavoritesRepository.swift +// Data +// +// Created by gnksbm on 1/30/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import CoreDataService +import Domain + +import RxSwift + +public final class DefaultFavoritesRepository: FavoritesRepository { + private let coreDataService: CoreDataService + + public var favorites = BehaviorSubject<[FavoritesBusStopResponse]>( + value: [] + ) + private let disposeBag = DisposeBag() + + public init( + coreDataService: CoreDataService + ) { + self.coreDataService = coreDataService + fetchFavorites() + } + + public func addRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) throws { + do { + let oldFavorites = try favorites.value() + let hasBusStopId = try coreDataService.duplicationCheck( + type: FavoritesBusStopResponse.self, + uniqueKeyPath: \.busStopId, + uniqueValue: arsId + ) + if hasBusStopId { + guard let busStopToUpdate = oldFavorites + .first( + where: { + $0.busStopId == arsId + } + ) + else { return } + let busIdArrToUpdate = busStopToUpdate.busIds + [bus.busId] + let newFavorites = FavoritesBusStopResponse( + busStopId: busStopToUpdate.busStopId, + busIds: busIdArrToUpdate + ) + do { + try coreDataService.update( + data: newFavorites, + uniqueKeyPath: \.busStopId + ) + } catch { + throw error + } + } else { + do { + try coreDataService.save( + data: FavoritesBusStopResponse( + busStopId: arsId, + busIds: [bus.busId] + ) + ) + } catch { + throw error + } + } + fetchFavorites() + } catch { + throw error + } + } + + public func removeRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) throws { + do { + let oldFavorites = try favorites.value() + guard let busStopToRemove = oldFavorites + .first( + where: { + $0.busStopId == arsId + } + ) + else { return } + if busStopToRemove.busIds.count > 1 { + let newBusId = busStopToRemove.busIds.filter { $0 != bus.busId } + do { + try coreDataService.update( + data: FavoritesBusStopResponse( + busStopId: arsId, + busIds: newBusId + ), + uniqueKeyPath: \.busStopId + ) + } catch { + throw error + } + } else { + do { + try coreDataService.delete( + data: FavoritesBusStopResponse( + busStopId: arsId, + busIds: [bus.busId] + ), + uniqueKeyPath: \.busStopId + ) + } catch { + throw error + } + } + fetchFavorites() + } catch { + throw error + } + } + + private func fetchFavorites() { + do { + let fetchedFavorites = try coreDataService.fetch( + type: FavoritesBusStopResponse.self + ) + favorites.onNext(fetchedFavorites) + } catch { + favorites.onError(error) + } + } +} diff --git a/Projects/Data/Sources/Repository/DefaultRegularAlarmRepository.swift b/Projects/Data/Sources/Repository/DefaultRegularAlarmRepository.swift new file mode 100644 index 00000000..e868d7f7 --- /dev/null +++ b/Projects/Data/Sources/Repository/DefaultRegularAlarmRepository.swift @@ -0,0 +1,264 @@ +// +// DefaultRegularAlarmRepository.swift +// Data +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import CoreDataService +import Domain +import NetworkService + +import RxSwift + +public final class DefaultRegularAlarmRepository: RegularAlarmRepository { + private let coreDataService: CoreDataService + private let networkService: NetworkService + + public let currentRegularAlarm = BehaviorSubject<[RegularAlarmResponse]>( + value: [] + ) + private let disposeBag = DisposeBag() + + public init( + coreDataService: CoreDataService, + networkService: NetworkService + ) { + self.coreDataService = coreDataService + self.networkService = networkService + fetchRegularAlarm() + } + + public func createRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) { + let request = response.toAddRequest + networkService.request( + endPoint: AddRegularAlarmEndPoint( + request: request + ) + ) + .decode( + type: AddRegularAlarmDTO.self, + decoder: JSONDecoder() + ) + .map { dto in + dto.toDomain(request: request) + } + .withUnretained(self) + .subscribe( + onNext: { repository, response in + do { + try repository.coreDataService.save(data: response) + let currentAlarms = try repository.currentRegularAlarm + .value() + repository.currentRegularAlarm.onNext( + currentAlarms + [response] + ) + completion() + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + }, + onError: { error in + #if DEBUG + print(error.localizedDescription) + #endif + } + ) + .disposed(by: disposeBag) + } + + public func updateRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) { + deleteRegularAlarm( + response: response + ) { [weak self] in + self?.createRegularAlarm( + response: response, + completion: completion + ) + } + } + + public func deleteRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) { + networkService.request( + endPoint: RemoveRegularAlarmEndPoint( + request: response.toRemoveRequest + ) + ) + .decode( + type: RemoveRegularAlarmDTO.self, + decoder: JSONDecoder() + ) + .map { dto in + print(dto.message) + return response + } + .withUnretained(self) + .subscribe( + onNext: { repository, response in + do { + try repository.coreDataService.delete( + data: response, + uniqueKeyPath: \.requestId + ) + let currentAlarms = try repository.currentRegularAlarm + .value() + repository.currentRegularAlarm.onNext( + currentAlarms.filter { $0 != response } + ) + completion() + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + }, + onError: { error in + #if DEBUG + print(error.localizedDescription) + #endif + } + ) + .disposed(by: disposeBag) + } + + private func fetchRegularAlarm() { + do { + let responses = try coreDataService.fetch( + type: RegularAlarmResponse.self + ) + currentRegularAlarm.onNext(responses) + syncRegularAlarms(responses: responses) + } catch { + currentRegularAlarm.onError(error) + } + } + + private func syncRegularAlarms(responses: [RegularAlarmResponse]) { + networkService.request(endPoint: FetchRegularAlarmEndPoint()) + .decode( + type: [FetchRegularAlarmDTO].self, + decoder: JSONDecoder() + ) + .withUnretained(self) + .subscribe( + onNext: { repository, dtoArr in + switch dtoArr.validateSync(localResponses: responses) { + case .synced: + break + case .localMissing(alarmIds: let alarmIds): + repository.removeUnsyncedServerAlarm(alarmIds: alarmIds) + case .serverMissing(responses: let responses): + repository.createUnsyncedServerAlarm( + responses: responses + ) + case .bothMissing( + localMissingAlarmIds: let localMissingAlarmIds, + serverMissingResponses: let serverMissingResponses + ): + repository.removeUnsyncedServerAlarm( + alarmIds: localMissingAlarmIds + ) + repository.createUnsyncedServerAlarm( + responses: serverMissingResponses + ) + } + } + ) + .disposed(by: disposeBag) + } + + private func createUnsyncedServerAlarm(responses: [RegularAlarmResponse]) { + responses.forEach { response in + networkService.request( + endPoint: AddRegularAlarmEndPoint( + request: response.toAddRequest + ) + ) + .decode( + type: AddRegularAlarmDTO.self, + decoder: JSONDecoder() + ) + .withUnretained(self) + .subscribe( + onNext: { repository, dto in + let newResponse = RegularAlarmResponse( + requestId: dto.alarmId, + busStopId: response.busStopId, + busStopName: response.busStopName, + busId: response.busId, + busName: response.busName, + time: response.time, + weekday: response.weekday + ) + do { + try repository.coreDataService.delete( + data: response, + uniqueKeyPath: \.requestId + ) + try repository.coreDataService.save(data: newResponse) + let currentResponse = try repository.currentRegularAlarm + .value() + let updatedResponse = currentResponse + .filter { $0 != response } + [ newResponse ] + repository.currentRegularAlarm.onNext(updatedResponse) + #if DEBUG + print("로컬 싱크 성공") + #endif + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + }, + onError: { error in + #if DEBUG + print(error.localizedDescription) + #endif + } + ) // 성공, Error에 따라 추가 작업을 해줘야할지 고민입니다 + .disposed(by: disposeBag) + } + } + + private func removeUnsyncedServerAlarm(alarmIds: [String]) { + alarmIds.forEach { alarmId in + networkService.request( + endPoint: RemoveRegularAlarmEndPoint( + request: .init(alarmId: alarmId) + ) + ) + .decode( + type: RemoveRegularAlarmDTO.self, + decoder: JSONDecoder() + ) + .subscribe( + onNext: { dto in + #if DEBUG + print(dto) + print("id: \(alarmId)") + #endif + }, + onError: { error in + #if DEBUG + print(error.localizedDescription) + #endif + } + ) // 성공, Error에 따라 추가 작업을 해줘야할지 고민입니다 + .disposed(by: disposeBag) + } + } +} diff --git a/Projects/Data/Sources/Repository/DefaultStationListRepository.swift b/Projects/Data/Sources/Repository/DefaultStationListRepository.swift new file mode 100644 index 00000000..fbdd7a25 --- /dev/null +++ b/Projects/Data/Sources/Repository/DefaultStationListRepository.swift @@ -0,0 +1,144 @@ +// +// DefaultStationListRepository.swift +// Data +// +// Created by 유하은 on 2024/02/27. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import CoreLocation + +import Domain + +import RxSwift +import RxRelay + +public final class DefaultStationListRepository: StationListRepository { + public let busStopRegions = BehaviorSubject<[BusStopRegion]>(value: []) + public let recentlySearchedStation = BehaviorRelay<[BusStopInfoResponse]>( + value: [] + ) + + private let disposeBag = DisposeBag() + + private let userDefaultsKey = "recentSearches" + private let maxRecentSearchCount = 5 + + public init() { + fetchStationList() + fetchRecentlySearched() + } + + public func saveRecentSearch(_ searchCell: BusStopInfoResponse) { + var currentSearches = recentlySearchedStation.value + + if currentSearches.contains(searchCell) { + currentSearches = [searchCell] + currentSearches + .filter { $0 != searchCell } + } else { + // 최대 갯수에 도달하면 가장 오래된 항목을 제거 + if currentSearches.count >= maxRecentSearchCount { + currentSearches.removeLast() + } + + currentSearches.insert(searchCell, at: 0) + } + guard let data = currentSearches.encode() + else { return } + + UserDefaults.standard.setValue( + data, + forKey: userDefaultsKey + ) + recentlySearchedStation.accept(currentSearches) + } + + public func removeRecentSearch() { + UserDefaults.standard.removeObject(forKey: userDefaultsKey) + recentlySearchedStation.accept([]) + } + + public func getNearByStopInfo( + startPointLocation: CLLocation + ) -> (BusStopInfoResponse, String) { + let errorResponse = BusStopInfoResponse( + busStopName: "가까운 정류장을 찾을 수 없습니다.", + busStopId: "", + direction: "", + longitude: "", + latitude: "" + ) + let errorDistance = "" + do { + let stationList = try busStopRegions.value() + .flatMap { region in + switch region { + case .seoul(let responses): + return responses + } + } + var nearByStopDistance = Int.max + var nearByStop = errorResponse + stationList.forEach { busStop in + guard let endPointLatitude = Double(busStop.latitude), + let endPointLongitude = Double(busStop.longitude) + else { return } + let distance = Int( + CLLocation( + latitude: endPointLatitude, + longitude: endPointLongitude + ).distance(from: startPointLocation) + ) + if nearByStopDistance > distance { + nearByStop = busStop + nearByStopDistance = distance + } + } + let distanceStr: String + switch nearByStopDistance { + case ..<1000: + distanceStr = "\(nearByStopDistance)m" + case Int.max: + distanceStr = "측정거리 초과" + default: + distanceStr = "\(nearByStopDistance / 1000)km" + } + return (nearByStop, distanceStr) + } catch { + return (errorResponse, errorDistance) + } + } + + private func fetchStationList() { + guard let seoulUrl = Bundle.main.url( + forResource: "total_stationList", + withExtension: "json" + ) + else { return } + do { + var regions = [BusStopRegion]() + let seoul = try Data(contentsOf: seoulUrl) + .decode(type: BusStopListDTO.self) + .toDomain + regions.append(seoul) + busStopRegions.onNext(regions) + } catch { + busStopRegions.onError(error) + } + } + + private func fetchRecentlySearched() { + guard let data = UserDefaults.standard.value( + forKey: userDefaultsKey + ) as? Data + else { return } + do { + let fetchedResponses = try data + .decode(type: [BusStopInfoResponse].self) + recentlySearchedStation.accept(fetchedResponses) + } catch { + print(error.localizedDescription) + } + } +} diff --git a/Projects/Data/Sources/Service/DefaultRegularAlarmEditingService.swift b/Projects/Data/Sources/Service/DefaultRegularAlarmEditingService.swift new file mode 100644 index 00000000..d2ff919e --- /dev/null +++ b/Projects/Data/Sources/Service/DefaultRegularAlarmEditingService.swift @@ -0,0 +1,97 @@ +// +// DefaultRegularAlarmEditingService.swift +// Data +// +// Created by gnksbm on 3/13/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +import RxRelay + +public final class DefaultRegularAlarmEditingService +: RegularAlarmEditingService { + public var managedAlarm = BehaviorRelay( + value: .init( + busStopId: "", + busStopName: "", + busId: "", + busName: "", + time: .now, + weekday: [] + ) + ) + + private var currentAlarm: RegularAlarmResponse { + managedAlarm.value + } + + public init() { } + + public func update( + busStopId: String, + busStopName: String, + busId: String, + busName: String + ) { + managedAlarm.accept( + .init( + requestId: currentAlarm.requestId, + busStopId: busStopId, + busStopName: busStopName, + busId: busId, + busName: busName, + time: currentAlarm.time, + weekday: currentAlarm.weekday + ) + ) + } + + public func update(time: Date) { + managedAlarm.accept( + .init( + requestId: currentAlarm.requestId, + busStopId: currentAlarm.busStopId, + busStopName: currentAlarm.busStopName, + busId: currentAlarm.busId, + busName: currentAlarm.busName, + time: time, + weekday: currentAlarm.weekday + ) + ) + } + + public func update(weekday: [Int]) { + managedAlarm.accept( + .init( + requestId: currentAlarm.requestId, + busStopId: currentAlarm.busStopId, + busStopName: currentAlarm.busStopName, + busId: currentAlarm.busId, + busName: currentAlarm.busName, + time: currentAlarm.time, + weekday: weekday + ) + ) + } + + public func update(response: RegularAlarmResponse) { + managedAlarm.accept(response) + } + + public func resetManagedObject() { + managedAlarm.accept( + .init( + busStopId: "", + busStopName: "", + busId: "", + busName: "", + time: .now, + weekday: [] + ) + ) + } +} diff --git a/Projects/Data/Sources/Service/LocationService/DefaultLocationService.swift b/Projects/Data/Sources/Service/LocationService/DefaultLocationService.swift new file mode 100644 index 00000000..d92956c1 --- /dev/null +++ b/Projects/Data/Sources/Service/LocationService/DefaultLocationService.swift @@ -0,0 +1,122 @@ +// +// DefaultLocationService.swift +// Data +// +// Created by Muker on 3/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import CoreLocation + +import Domain + +import RxCocoa +import RxSwift + +final public class DefaultLocationService: NSObject, LocationService { + private let locationManager = CLLocationManager() + + public let locationStatus = BehaviorSubject( + value: .notDetermined + ) + private let disposeBag = DisposeBag() + + public override init() { + super.init() + locationManager.delegate = self + locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters + } + + public func authorize() { + locationManager.requestWhenInUseAuthorization() + } + + /// 한번의 현재 위치 업데이트 + public func requestLocationOnce() { + locationManager.requestLocation() + } + + /// 지속적인 현재 위치 업데이트 시작 + public func startUpdatingLocation() { + locationManager.startUpdatingLocation() + } + + /// 지속적인 현재 위치 업데이트 중지 + public func stopUpdatingLocation() { + locationManager.stopUpdatingLocation() + } + + public func getDistance(response: BusStopInfoResponse) -> String { + let errorMessage = "" + guard let latitude = Double(response.latitude), + let longitude = Double(response.longitude) + else { return errorMessage } + if let location = locationManager.location { + let distance = Int( + location.distance( + from: .init( + latitude: latitude, + longitude: longitude + ) + ) + ) + let distanceStr: String + switch distance { + case ..<1000: + distanceStr = "\(distance)m" + case Int.max: + distanceStr = "측정거리 초과" + default: + distanceStr = "\(distance / 1000)km" + } + return distanceStr + } else { + return errorMessage + } + } +} + +extension DefaultLocationService: CLLocationManagerDelegate { + public func locationManagerDidChangeAuthorization( + _ manager: CLLocationManager + ) { + switch manager.authorizationStatus { + case .notDetermined: + locationStatus.onNext(.notDetermined) + case .restricted, .denied: + locationStatus.onNext(.denied) + case .authorizedAlways, .authorizedWhenInUse: + locationStatus.onNext(.waitingForLocation) + locationManager.requestLocation() + @unknown default: + locationStatus.onNext(.error) + } + } + + public func locationManager( + _ manager: CLLocationManager, + didUpdateLocations locations: [CLLocation] + ) { + guard let location = locations.first + else { + locationStatus.onNext(.error) + return + } + switch manager.authorizationStatus { + case .authorizedAlways: + locationStatus.onNext(.alwaysAllowed(location)) + case .authorizedWhenInUse: + locationStatus.onNext(.authorized(location)) + default: + break + } + } + + public func locationManager( + _ manager: CLLocationManager, + didFailWithError error: Error + ) { + locationStatus.onNext(.error) + } +} diff --git a/Projects/Data/Sources/Service/NotificationService/DefaultLocalNotificationService.swift b/Projects/Data/Sources/Service/NotificationService/DefaultLocalNotificationService.swift new file mode 100644 index 00000000..dbf093dd --- /dev/null +++ b/Projects/Data/Sources/Service/NotificationService/DefaultLocalNotificationService.swift @@ -0,0 +1,142 @@ +// +// DefaultLocalNotificationService.swift +// Domain +// +// Created by gnksbm on 2/27/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import UserNotifications + +import Core +import Domain +import NetworkService + +import RxSwift + +public final class DefaultLocalNotificationService: LocalNotificationService { + private let notificationCenter = UNUserNotificationCenter.current() + + public let authState = BehaviorSubject( + value: .denied + ) + private let disposeBag = DisposeBag() + + public init() { } + + public func authorize() { + notificationCenter.getNotificationSettings { [weak self] setting in + self?.authState.onNext(setting.authorizationStatus) + } + authState + .withUnretained(self) + .subscribe( + onNext: { notiService, state in + guard state != .authorized else { return } + notiService.notificationCenter.requestAuthorization( + options: [.alert, .sound, .badge] + ) { isAuthorized, error in + if let error { + notiService.authState.onError(error) + } + if isAuthorized { + notiService.authState.onNext(.authorized) + } + } + } + ) + .disposed(by: disposeBag) + } + + public func fetchRegularAlarm() -> Observable<[RegularAlarmResponse]> { + return .create { [weak self] observer in + self?.notificationCenter.getPendingNotificationRequests { result in + let responses: [RegularAlarmResponse] = result.compactMap { + let userInfo = $0.content.userInfo + guard let busStopId = userInfo["busStopId"] as? String, + let busStopName = userInfo["busStopName"] as? String, + let busId = userInfo["busId"] as? String, + let busName = userInfo["busName"] as? String, + let time = userInfo["time"] as? Date, + let weekDay = userInfo["weekday"] as? [Int] + else { return nil } + return RegularAlarmResponse( + requestId: $0.identifier, + busStopId: busStopId, + busStopName: busStopName, + busId: busId, + busName: busName, + time: time, + weekday: weekDay + ) + } + observer.onNext(Array(Set(responses))) + observer.onCompleted() + } + return Disposables.create() + } + } + + public func registNewRegularAlarm(response: RegularAlarmResponse) throws { + let notificationRequests = response.weekday.map { weekday in + var dateComponents = DateComponents() + dateComponents.calendar = Calendar.current + dateComponents.weekday = weekday + let dateStr = response.time + .toString(dateFormat: "HH:mm") + .split(separator: ":") + .compactMap { Int($0) } + dateComponents.hour = dateStr.first + dateComponents.minute = dateStr.last + let trigger = UNCalendarNotificationTrigger( + dateMatching: dateComponents, + repeats: true + ) + let content = UNMutableNotificationContent() + content.sound = .default + let remaining = "\(response.busStopName)에 \(response.busName) " + let body = "\(remaining)버스가 곧 도착합니다." + content.title = "버스어디" + content.body = body + content.userInfo["busStopId"] = response.busStopId + content.userInfo["busStopName"] = response.busStopName + content.userInfo["busId"] = response.busId + content.userInfo["busName"] = response.busName + content.userInfo["time"] = response.time + content.userInfo["weekday"] = response.weekday + let request = UNNotificationRequest( + identifier: response.requestId, + content: content, + trigger: trigger + ) + return request + } + notificationRequests.forEach { + notificationCenter.add($0) + } + } + + public func editRegularAlarm(response: RegularAlarmResponse) throws { + do { + try removeRegularAlarm(response: response) + do { + try registNewRegularAlarm(response: response) + } catch { + throw error + } + } catch { + throw error + } + } + + public func removeRegularAlarm(response: RegularAlarmResponse) throws { + let identifier = [response.requestId] + notificationCenter.removeDeliveredNotifications( + withIdentifiers: identifier + ) + notificationCenter.removePendingNotificationRequests( + withIdentifiers: identifier + ) + } +} diff --git a/Projects/Data/Sources/Temp.swift b/Projects/Data/Sources/Temp.swift deleted file mode 100644 index 91254093..00000000 --- a/Projects/Data/Sources/Temp.swift +++ /dev/null @@ -1,9 +0,0 @@ -// -// Temp.swift -// Data -// -// Created by gnksbm on 2024/01/12. -// Copyright © 2024 Pepsi-Club. All rights reserved. -// - -import Foundation diff --git a/Projects/DesignSystem/Project.swift b/Projects/DesignSystem/Project.swift index 807fb5ad..0ad362e0 100644 --- a/Projects/DesignSystem/Project.swift +++ b/Projects/DesignSystem/Project.swift @@ -3,7 +3,7 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "DesignSystem", - moduleType: .staticFramework, + moduleType: .dynamicFramework, hasResource: true, dependencies: [] ) diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/AirportGold.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/AirportGold.colorset/Contents.json new file mode 100644 index 00000000..024e7229 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/AirportGold.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x62", + "green" : "0xB5", + "red" : "0xE0" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BlueBus.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/BlueBus.colorset/Contents.json new file mode 100644 index 00000000..b21b9450 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/BlueBus.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "230", + "green" : "132", + "red" : "74" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BlueGray.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/BlueGray.colorset/Contents.json new file mode 100644 index 00000000..15a2cb49 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/BlueGray.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xA9", + "green" : "0x87", + "red" : "0x7D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BottonBtnColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/BottonBtnColor.colorset/Contents.json new file mode 100644 index 00000000..89a09004 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/BottonBtnColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x5E", + "green" : "0x5E", + "red" : "0x5E" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/BusStopImage1.png b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/BusStopImage1.png new file mode 100644 index 00000000..4f7d2462 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/BusStopImage1.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/Contents.json new file mode 100644 index 00000000..0e7b280a --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage1.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "BusStopImage1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/BusStopImage2.png b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/BusStopImage2.png new file mode 100644 index 00000000..96da2e95 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/BusStopImage2.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/Contents.json new file mode 100644 index 00000000..2f9241a7 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/BusStopImage2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "BusStopImage2.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/CarrotOrange.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/CarrotOrange.colorset/Contents.json new file mode 100644 index 00000000..e32971a3 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/CarrotOrange.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x61", + "green" : "0x6E", + "red" : "0xEF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/CirculateYellow.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/CirculateYellow.colorset/Contents.json new file mode 100644 index 00000000..651d8cb4 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/CirculateYellow.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x06", + "green" : "0xC5", + "red" : "0xF2" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/Contents.json new file mode 100644 index 00000000..844d4ba0 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "EmptyFavoritesStars.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/EmptyFavoritesStars.png b/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/EmptyFavoritesStars.png new file mode 100644 index 00000000..383323bc Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/EmptyFavoritesStars.imageset/EmptyFavoritesStars.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/FavoritesOrange.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/FavoritesOrange.colorset/Contents.json new file mode 100644 index 00000000..49ed9f99 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/FavoritesOrange.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x59", + "green" : "0x89", + "red" : "0xDE" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray1.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray1.colorset/Contents.json new file mode 100644 index 00000000..6ced91c1 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray1.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF8", + "green" : "0xF8", + "red" : "0xF8" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray2.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray2.colorset/Contents.json new file mode 100644 index 00000000..2cedebe3 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray2.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xEF", + "green" : "0xEF", + "red" : "0xEF" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray3.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray3.colorset/Contents.json new file mode 100644 index 00000000..bdb682bc --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray3.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE4", + "green" : "0xE4", + "red" : "0xE4" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray4.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray4.colorset/Contents.json new file mode 100644 index 00000000..2e4a98b0 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray4.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x8C", + "green" : "0x8C", + "red" : "0x8C" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray4Minor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray4Minor.colorset/Contents.json new file mode 100644 index 00000000..d1cebf6d --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray4Minor.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xB8", + "green" : "0xB8", + "red" : "0xB8" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray5.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray5.colorset/Contents.json new file mode 100644 index 00000000..a52fff79 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray5.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x7A", + "green" : "0x7A", + "red" : "0x7D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/Gray6.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/Gray6.colorset/Contents.json new file mode 100644 index 00000000..b3b1303b --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/Gray6.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x74", + "green" : "0x74", + "red" : "0x75" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/HeaderBlue.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/HeaderBlue.colorset/Contents.json new file mode 100644 index 00000000..4d4ce5ba --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/HeaderBlue.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "220", + "green" : "124", + "red" : "21" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/LightRed.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/LightRed.colorset/Contents.json new file mode 100644 index 00000000..a5ba0957 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/LightRed.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x83", + "green" : "0x83", + "red" : "0xE4" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/LimeGreen.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/LimeGreen.colorset/Contents.json new file mode 100644 index 00000000..05271c9b --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/LimeGreen.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x6E", + "green" : "0xC4", + "red" : "0x6D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/Contents.json similarity index 53% rename from Projects/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json rename to Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/Contents.json index 13613e3e..e42be7ad 100644 --- a/Projects/DesignSystem/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/Contents.json @@ -1,9 +1,8 @@ { "images" : [ { - "idiom" : "universal", - "platform" : "ios", - "size" : "1024x1024" + "filename" : "bigBusStop.png", + "idiom" : "universal" } ], "info" : { diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/bigBusStop.png b/Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/bigBusStop.png new file mode 100644 index 00000000..a22e0400 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/MapBusStop.imageset/bigBusStop.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/OvernightBusColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/OvernightBusColor.colorset/Contents.json new file mode 100644 index 00000000..5632e155 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/OvernightBusColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x93", + "green" : "0x4D", + "red" : "0x40" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmBlue.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmBlue.colorset/Contents.json new file mode 100644 index 00000000..fa207cf1 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmBlue.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xE6", + "green" : "0x84", + "red" : "0x4A" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmSky.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmSky.colorset/Contents.json new file mode 100644 index 00000000..d17997b8 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/RegularAlarmSky.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xF7", + "red" : "0xEC" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/RemainingColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/RemainingColor.colorset/Contents.json new file mode 100644 index 00000000..c79b370c --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/RemainingColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x81", + "green" : "0x81", + "red" : "0x8D" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/RouteTimeColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/RouteTimeColor.colorset/Contents.json new file mode 100644 index 00000000..3eecd33d --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/RouteTimeColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x5C", + "green" : "0x5C", + "red" : "0x64" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/SettingColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/SettingColor.colorset/Contents.json new file mode 100644 index 00000000..98b0b6a4 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/SettingColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x3D", + "green" : "0x39", + "red" : "0x38" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/SettingSkyBlue.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/SettingSkyBlue.colorset/Contents.json new file mode 100644 index 00000000..2b117355 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/SettingSkyBlue.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xEB", + "red" : "0xE1" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/TabBackgroundColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/TabBackgroundColor.colorset/Contents.json index 1c91a472..e5ab94f6 100644 --- a/Projects/DesignSystem/Resources/Assets.xcassets/TabBackgroundColor.colorset/Contents.json +++ b/Projects/DesignSystem/Resources/Assets.xcassets/TabBackgroundColor.colorset/Contents.json @@ -5,9 +5,9 @@ "color-space" : "srgb", "components" : { "alpha" : "1.000", - "blue" : "0xF4", - "green" : "0xF4", - "red" : "0xF4" + "blue" : "0xFA", + "green" : "0xF7", + "red" : "0xF8" } }, "idiom" : "universal" diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/TabBarTintColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/TabBarTintColor.colorset/Contents.json new file mode 100644 index 00000000..82a41097 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/TabBarTintColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xB1", + "red" : "0x5B" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/TableViewColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/TableViewColor.colorset/Contents.json new file mode 100644 index 00000000..893350aa --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/TableViewColor.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xF7", + "green" : "0xF2", + "red" : "0xF2" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "localizable" : true + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayBlue.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayBlue.colorset/Contents.json new file mode 100644 index 00000000..6767f950 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayBlue.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xFF", + "green" : "0xBF", + "red" : "0x95" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayGray.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayGray.colorset/Contents.json new file mode 100644 index 00000000..78408a92 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/WeekDayGray.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0xD9", + "green" : "0xD9", + "red" : "0xD9" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/Contents.json new file mode 100644 index 00000000..9e9b11c8 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "bigBusStop.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/bigBusStop.png b/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/bigBusStop.png new file mode 100644 index 00000000..a22e0400 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/bigBusStop.imageset/bigBusStop.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/Contents.json new file mode 100644 index 00000000..ca19e526 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "bus.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/bus.png b/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/bus.png new file mode 100644 index 00000000..d1df8cb4 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/bus.imageset/bus.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Contents.json new file mode 100644 index 00000000..446d6be0 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "Vector.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Vector.png b/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Vector.png new file mode 100644 index 00000000..be7cdc07 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/bus2.imageset/Vector.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/Contents.json new file mode 100644 index 00000000..e7601de3 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "busStop.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/busStop.png b/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/busStop.png new file mode 100644 index 00000000..8d2fb9e3 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/busStop.imageset/busStop.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/Contents.json new file mode 100644 index 00000000..68aa7a21 --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/Contents.json @@ -0,0 +1,12 @@ +{ + "images" : [ + { + "filename" : "mapBusStopGray.png", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/mapBusStopGray.png b/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/mapBusStopGray.png new file mode 100644 index 00000000..86020f22 Binary files /dev/null and b/Projects/DesignSystem/Resources/Assets.xcassets/mapBusStopGray.imageset/mapBusStopGray.png differ diff --git a/Projects/DesignSystem/Resources/Assets.xcassets/redBusColor.colorset/Contents.json b/Projects/DesignSystem/Resources/Assets.xcassets/redBusColor.colorset/Contents.json new file mode 100644 index 00000000..043c9cbd --- /dev/null +++ b/Projects/DesignSystem/Resources/Assets.xcassets/redBusColor.colorset/Contents.json @@ -0,0 +1,20 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "alpha" : "1.000", + "blue" : "0x2E", + "green" : "0x55", + "red" : "0xE2" + } + }, + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Bd.otf b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Bd.otf new file mode 100644 index 00000000..5fc44455 Binary files /dev/null and b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Bd.otf differ diff --git a/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Eb.otf b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Eb.otf new file mode 100644 index 00000000..4a78a42e Binary files /dev/null and b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Eb.otf differ diff --git a/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Hv.otf b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Hv.otf new file mode 100644 index 00000000..b8f8cf6c Binary files /dev/null and b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Hv.otf differ diff --git a/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Lt.otf b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Lt.otf new file mode 100644 index 00000000..e1e3bb3c Binary files /dev/null and b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Lt.otf differ diff --git a/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Rg.otf b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Rg.otf new file mode 100644 index 00000000..a43f932b Binary files /dev/null and b/Projects/DesignSystem/Resources/Font/NanumSquareNeo/NanumSquareNeoOTF-Rg.otf differ diff --git a/Projects/DesignSystem/Sources/Appearance.swift b/Projects/DesignSystem/Sources/Appearance.swift new file mode 100644 index 00000000..0a3b0732 --- /dev/null +++ b/Projects/DesignSystem/Sources/Appearance.swift @@ -0,0 +1,34 @@ +// +// Appearance.swift +// DesignSystem +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public final class Appearance { + public static func setupAppearance() { + let backgroundColor = DesignSystemAsset.backgroundColor.color + UINavigationBar.appearance().backgroundColor = backgroundColor + UINavigationBar.appearance().tintColor = .black + // 모든 BackButton의 타이틀을 없애버림 + UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment( + UIOffset(horizontal: -1000, vertical: 0), + for: .default + ) + } + + public static func setupTabBarAppearance() { + let appearance = UITabBarAppearance() + let backgroundColor = DesignSystemAsset.tabBackgroundColor.color + let tintColor = DesignSystemAsset.tabBarTintColor.color + appearance.configureWithOpaqueBackground() + appearance.backgroundColor = backgroundColor + appearance.inlineLayoutAppearance = .init(style: .compactInline) + UITabBar.appearance().tintColor = tintColor + UITabBar.appearance().standardAppearance = appearance + UITabBar.appearance().scrollEdgeAppearance = appearance + } +} diff --git a/Projects/DesignSystem/Sources/ArrivalInfoView.swift b/Projects/DesignSystem/Sources/ArrivalInfoView.swift new file mode 100644 index 00000000..359f80c6 --- /dev/null +++ b/Projects/DesignSystem/Sources/ArrivalInfoView.swift @@ -0,0 +1,70 @@ +// +// ArrivalInfoView.swift +// HomeFeature +// +// Created by gnksbm on 1/24/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public final class ArrivalInfoView: UIStackView { + private let timeLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 14 + ) + label.textColor = DesignSystemAsset.routeTimeColor.color + return label + }() + + private let remainingLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.light.font( + size: 12 + ) + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.8 + label.textColor = DesignSystemAsset.gray6.color + return label + }() + + public init() { + super.init(frame: .zero) + configureUI() + } + + required init(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + addArrangedSubview(timeLabel) + axis = .vertical + alignment = .leading + spacing = 6 + } + + public func prepareForReuse() { + timeLabel.text = nil + remainingLabel.text = nil + } + + public func updateUI( + time: String, + remainingStops: String + ) { + let routeTimeColor = DesignSystemAsset.routeTimeColor.color + let carrotOrange = DesignSystemAsset.carrotOrange.color + if time.contains(where: { Int(String($0)) != nil }) { + timeLabel.text = time + timeLabel.textColor = routeTimeColor + addArrangedSubview(remainingLabel) + remainingLabel.text = remainingStops + } else { + timeLabel.text = time + timeLabel.textColor = carrotOrange + removeArrangedSubview(remainingLabel) + } + } +} diff --git a/Projects/DesignSystem/Sources/BottomButton.swift b/Projects/DesignSystem/Sources/BottomButton.swift new file mode 100644 index 00000000..d14fd55e --- /dev/null +++ b/Projects/DesignSystem/Sources/BottomButton.swift @@ -0,0 +1,51 @@ +// +// BottomButton.swift +// DesignSystem +// +// Created by gnksbm on 2/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public final class BottomButton: UIButton { + public init( + title: String + ) { + super.init(frame: .zero) + var config = UIButton.Configuration.filled() + let font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 18 + ) + config.cornerStyle = .capsule + config.contentInsets = .init( + top: 15, + leading: 0, + bottom: 15, + trailing: 0 + ) + setAttributedTitle( + .init( + string: title, + attributes: [.font: font] + ), + for: .normal + ) + setAttributedTitle( + .init( + string: title, + attributes: [ + .font: font, + .foregroundColor: DesignSystemAsset.gray1.color + ] + ), + for: .disabled + ) + configuration = config + tintColor = DesignSystemAsset.weekDayBlue.color + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} diff --git a/Projects/DesignSystem/Sources/CircleButton.swift b/Projects/DesignSystem/Sources/CircleButton.swift new file mode 100644 index 00000000..41dd61d3 --- /dev/null +++ b/Projects/DesignSystem/Sources/CircleButton.swift @@ -0,0 +1,58 @@ +// +// CircleButton.swift +// DesignSystem +// +// Created by gnksbm on 2/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public final class CircleButton: UIButton { + private let baseLine: BaseLine + private let size: CGFloat? + + public init( + baseLine: BaseLine, + size: CGFloat? = nil + ) { + self.baseLine = baseLine + self.size = size + super.init(frame: .zero) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func layoutSubviews() { + super.layoutSubviews() + let baseLine: CGFloat + switch size { + case .some(let size): + baseLine = size + case .none: + switch self.baseLine { + case .width: + baseLine = bounds.width + case .height: + baseLine = bounds.height + } + } + let origin = bounds.origin + bounds = .init( + origin: origin, + size: .init( + width: baseLine, + height: baseLine + ) + ) + layer.cornerRadius = baseLine / 2 + } +} + +extension CircleButton { + public enum BaseLine { + case width, height + } +} diff --git a/Projects/DesignSystem/Sources/SearchBusStopBtn.swift b/Projects/DesignSystem/Sources/SearchBusStopBtn.swift new file mode 100644 index 00000000..dea3ddf5 --- /dev/null +++ b/Projects/DesignSystem/Sources/SearchBusStopBtn.swift @@ -0,0 +1,108 @@ +// +// SearchBusStopBtn.swift +// DesignSystem +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public final class SearchBusStopBtn: UIButton { + private let font: UIFont + + public init( + title: String? = nil, + image: UIImage? = nil, + font: UIFont = DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 14 + ), + color: UIColor = DesignSystemAsset.mainColor.color + ) { + self.font = font + super.init(frame: .zero) + let attributedTitle = makeAttributedTitle( + title: title + ) + let config = makeConfiguration( + attributedTitle: attributedTitle, + image: image, + color: color + ) + configuration = config + layer.cornerRadius = 15 + clipsToBounds = true + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func layoutSubviews() { + super.layoutSubviews() + + guard let titleLabel = titleLabel, + let imageView = imageView + else { return } + + let space: CGFloat = 10 + titleLabel.frame.origin.x = layoutMargins.left + space + + let imageViewX + = bounds.width - imageView.bounds.width - layoutMargins.right - space + imageView.frame.origin.x = imageViewX + + titleLabel.center.y = bounds.midY + imageView.center.y = bounds.midY + } + + private func makeConfiguration( + attributedTitle: AttributedString?, + image: UIImage?, + color: UIColor + ) -> UIButton.Configuration { + var config = UIButton.Configuration.plain() + config.background.backgroundColor = DesignSystemAsset.gray3.color + config.baseForegroundColor = color + config.cornerStyle = .large + config.contentInsets = .init( + top: 12, + leading: 0, + bottom: 12, + trailing: 0 + ) + // MARK: Title + config.attributedTitle = attributedTitle + // MARK: Imgae + config.image = image + config.imagePadding = 5 + config.imagePlacement = .trailing + config.preferredSymbolConfigurationForImage = makeImgConfig() + return config + } + + public func updateTitle(title: String) { + configuration?.attributedTitle = makeAttributedTitle( + title: title + ) + } + + private func makeAttributedTitle( + title: String? + ) -> AttributedString? { + var attributedString: AttributedString? + var titleContainer = AttributeContainer() + titleContainer.font = font + attributedString = AttributedString( + title ?? "a", + attributes: titleContainer + ) + return attributedString + } + + private func makeImgConfig() -> UIImage.SymbolConfiguration { + UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 14) + ) + } +} diff --git a/Projects/DesignSystem/Sources/Temp.swift b/Projects/DesignSystem/Sources/Temp.swift deleted file mode 100644 index 9e904841..00000000 --- a/Projects/DesignSystem/Sources/Temp.swift +++ /dev/null @@ -1,9 +0,0 @@ -// -// Temp.swift -// DesignSystem -// -// Created by gnksbm on 2024/01/12. -// Copyright © 2024 Pepsi-Club. All rights reserved. -// - -import Foundation diff --git a/Projects/DesignSystem/Sources/UIFont+.swift b/Projects/DesignSystem/Sources/UIFont+.swift new file mode 100644 index 00000000..ba9f11e7 --- /dev/null +++ b/Projects/DesignSystem/Sources/UIFont+.swift @@ -0,0 +1,33 @@ +// +// UIFont+.swift +// DesignSystem +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UIFont { + typealias Nanum = DesignSystemFontFamily.NanumSquareNeoOTF + + static func nanumLight(size: CGFloat) -> UIFont { + Nanum.light.font(size: size) + } + + static func nanumRegular(size: CGFloat) -> UIFont { + Nanum.regular.font(size: size) + } + + static func nanumBold(size: CGFloat) -> UIFont { + Nanum.bold.font(size: size) + } + + static func nanumExtraBold(size: CGFloat) -> UIFont { + Nanum.extraBold.font(size: size) + } + + static func nanumHeavy(size: CGFloat) -> UIFont { + Nanum.heavy.font(size: size) + } +} diff --git a/Projects/DesignSystem/Sources/UIImage+.swift b/Projects/DesignSystem/Sources/UIImage+.swift new file mode 100644 index 00000000..76a5e513 --- /dev/null +++ b/Projects/DesignSystem/Sources/UIImage+.swift @@ -0,0 +1,37 @@ +// +// UIImage.swift +// DesignSystem +// +// Created by Muker on 4/11/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit +import AVFoundation + +public extension UIImage { + func resize(_ width: Int, _ height: Int) -> UIImage { + let maxSize = CGSize( + width: width, + height: height + ) + let availableRect = AVFoundation.AVMakeRect( + aspectRatio: self.size, + insideRect: .init(origin: .zero, + size: maxSize) + ) + let targetSize = availableRect.size + let format = UIGraphicsImageRendererFormat() + let renderer = UIGraphicsImageRenderer( + size: targetSize, + format: format + ) + let resized = renderer.image { _ in + self.draw(in: CGRect( + origin: .zero, + size: targetSize + )) + } + return resized + } +} diff --git a/Projects/DesignSystem/Sources/UITableView+.swift b/Projects/DesignSystem/Sources/UITableView+.swift new file mode 100644 index 00000000..618f22eb --- /dev/null +++ b/Projects/DesignSystem/Sources/UITableView+.swift @@ -0,0 +1,18 @@ +// +// UITableView+.swift +// DesignSystem +// +// Created by gnksbm on 2/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public extension UITableView { + func loadingBackground() { + let activityIndicatorView = UIActivityIndicatorView(style: .large) + activityIndicatorView.color = DesignSystemAsset.accentColor.color + backgroundView = activityIndicatorView + activityIndicatorView.startAnimating() + } +} diff --git a/Projects/Domain/Sources/Entity/Request/AddRegularAlarmRequest.swift b/Projects/Domain/Sources/Entity/Request/AddRegularAlarmRequest.swift new file mode 100644 index 00000000..f8fa68cf --- /dev/null +++ b/Projects/Domain/Sources/Entity/Request/AddRegularAlarmRequest.swift @@ -0,0 +1,42 @@ +// +// AddRegularAlarmRequest.swift +// Domain +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core + +public struct AddRegularAlarmRequest { + // MARK: 서버 요청값 + /// 알람받을시간 ex) "1830" + public let time: String + /// 0 ~ 6 : 일, 월, 화, 수, 목, 금, 토 순서 + public let weekday: [Int] + /// 버스코드 + public let busRouteId: String + /// 정류장코드 + public let arsId: String + // MARK: 로컬에서 필요한 데이터 + public let busStopName: String + public let busName: String + + public init( + date: Date, + weekday: [Int], + busRouteId: String, + arsId: String, + busStopName: String, + busName: String + ) { + self.time = date.toString(dateFormat: "HHmm") + self.weekday = weekday + self.busRouteId = busRouteId + self.arsId = arsId + self.busStopName = busStopName + self.busName = busName + } +} diff --git a/Projects/Domain/Sources/Entity/Request/ArrivalInfoRequest.swift b/Projects/Domain/Sources/Entity/Request/ArrivalInfoRequest.swift new file mode 100644 index 00000000..2fa3a94c --- /dev/null +++ b/Projects/Domain/Sources/Entity/Request/ArrivalInfoRequest.swift @@ -0,0 +1,19 @@ +// +// ArrivalInfoRequest.swift +// Domain +// +// Created by gnksbm on 1/28/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public struct ArrivalInfoRequest { + public let busStopId: String + + public init( + busStopId: String + ) { + self.busStopId = busStopId + } +} diff --git a/Projects/Domain/Sources/Entity/Request/RemoveRegularAlarmRequest.swift b/Projects/Domain/Sources/Entity/Request/RemoveRegularAlarmRequest.swift new file mode 100644 index 00000000..b9df0ca6 --- /dev/null +++ b/Projects/Domain/Sources/Entity/Request/RemoveRegularAlarmRequest.swift @@ -0,0 +1,18 @@ +// +// RemoveRegularAlarmRequest.swift +// Domain +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public struct RemoveRegularAlarmRequest { + /// 서버에 등록된 알람 아이디 + public let alarmId: String + + public init(alarmId: String) { + self.alarmId = alarmId + } +} diff --git a/Projects/Domain/Sources/Entity/Response/BusStopArrivalInfoResponse.swift b/Projects/Domain/Sources/Entity/Response/BusStopArrivalInfoResponse.swift new file mode 100644 index 00000000..86d24236 --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/BusStopArrivalInfoResponse.swift @@ -0,0 +1,120 @@ +// +// BusStopArrivalInfoResponse.swift +// Domain +// +// Created by gnksbm on 1/30/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public struct BusStopArrivalInfoResponse: Codable, Hashable { + public let busStopId: String + public let busStopName: String + public let direction: String + public var buses: [BusArrivalInfoResponse] + + public init( + busStopId: String, + busStopName: String, + direction: String, + buses: [BusArrivalInfoResponse] + ) { + self.busStopId = busStopId + self.busStopName = busStopName + self.direction = direction + self.buses = buses + } +} + +public struct BusArrivalInfoResponse: Codable, Hashable { + public let busId: String + public let busName: String + public let busType: BusType + public let nextStation: String + public let firstArrivalState: ArrivalState + public let firstArrivalRemaining: String + public let secondArrivalState: ArrivalState + public let secondArrivalRemaining: String + public var isFavorites: Bool + public var isAlarmOn: Bool + + public init( + busId: String, + busName: String, + busType: String, + nextStation: String, + firstArrivalState: ArrivalState, + firstArrivalRemaining: String, + secondArrivalState: ArrivalState, + secondArrivalRemaining: String, + isFavorites: Bool, + isAlarmOn: Bool + ) { + self.busId = busId + self.busName = busName + self.busType = BusType(rawValue: busType) ?? .common + self.nextStation = nextStation + self.firstArrivalState = firstArrivalState + self.firstArrivalRemaining = firstArrivalRemaining + self.secondArrivalState = secondArrivalState + self.secondArrivalRemaining = secondArrivalRemaining + self.isFavorites = isFavorites + self.isAlarmOn = isAlarmOn + } +} + +public enum ArrivalState: Hashable, Codable { + case soon, pending, finished, arrivalTime(time: Int) + + public var toString: String { + switch self { + case .soon: + return "곧 도착" + case .pending: + return "출발대기" + case .finished: + return "운행종료" + case .arrivalTime(let time): + return "\(time / 60)분후" + } + } +} + +public enum BusType: String, Codable { + case common = "0" + case airport = "1" + case village = "2" + case trunkLine = "3" + case branchLine = "4" + case circulation = "5" + case wideArea = "6" + case incheon = "7" + case gyeonggi = "8" + case abolition = "9" + + public var toString: String { + switch self { + case .common: + return "공용" + case .airport: + return "공항" + case .village: + return "마을" + case .trunkLine: + return "간선" + case .branchLine: + return "지선" + case .circulation: + return "순환" + case .wideArea: + return "광역" + case .incheon: + return "인천" + case .gyeonggi: + return "경기" + case .abolition: + return "폐지" + } + } +} diff --git a/Projects/Domain/Sources/Entity/Response/BusStopInfoResponse.swift b/Projects/Domain/Sources/Entity/Response/BusStopInfoResponse.swift new file mode 100644 index 00000000..1462c0bb --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/BusStopInfoResponse.swift @@ -0,0 +1,31 @@ +// +// BusStopInfoResponse.swift +// Domain +// +// Created by gnksbm on 1/28/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public struct BusStopInfoResponse: Hashable, Codable { + public let busStopName: String + public let busStopId: String // 기존 ID가 아닌 5자리 ID(busStopNum) + public let direction: String // 데이터 보충 완 -> 옵셔널 X + public let longitude: String + public let latitude: String + + public init( + busStopName: String, + busStopId: String, + direction: String, + longitude: String, + latitude: String + ) { + self.busStopName = busStopName + self.busStopId = busStopId + self.direction = direction + self.longitude = longitude + self.latitude = latitude + } +} diff --git a/Projects/Domain/Sources/Entity/Response/BusStopRegion.swift b/Projects/Domain/Sources/Entity/Response/BusStopRegion.swift new file mode 100644 index 00000000..c36430d6 --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/BusStopRegion.swift @@ -0,0 +1,13 @@ +// +// BusStopRegion.swift +// Domain +// +// Created by gnksbm on 4/3/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public enum BusStopRegion: Hashable { + case seoul(responses: [BusStopInfoResponse]) +} diff --git a/Projects/Domain/Sources/Entity/Response/FavoritesBusStopResponse.swift b/Projects/Domain/Sources/Entity/Response/FavoritesBusStopResponse.swift new file mode 100644 index 00000000..eeb7057f --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/FavoritesBusStopResponse.swift @@ -0,0 +1,24 @@ +// +// FavoritesBusStopResponse.swift +// Domain +// +// Created by gnksbm on 2/25/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core + +public struct FavoritesBusStopResponse: CoreDataStorable { + public let busStopId: String + public var busIds: [String] + + public init( + busStopId: String, + busIds: [String] + ) { + self.busStopId = busStopId + self.busIds = busIds + } +} diff --git a/Projects/Domain/Sources/Entity/Response/LocationStatus.swift b/Projects/Domain/Sources/Entity/Response/LocationStatus.swift new file mode 100644 index 00000000..e9e9e15c --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/LocationStatus.swift @@ -0,0 +1,17 @@ +// +// LocationStatus.swift +// Domain +// +// Created by gnksbm on 4/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import CoreLocation + +public enum LocationStatus { + case authorized(CLLocation), alwaysAllowed(CLLocation) + case waitingForLocation + case notDetermined, denied + case error +} diff --git a/Projects/Domain/Sources/Entity/Response/NearBusStopResponse.swift b/Projects/Domain/Sources/Entity/Response/NearBusStopResponse.swift new file mode 100644 index 00000000..bc938d09 --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/NearBusStopResponse.swift @@ -0,0 +1,45 @@ +// +// NearBusStopResponse.swift +// Domain +// +// Created by Muker on 3/5/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public struct NearBusStopResponse { + public let busStopId: String + public let busStopName: String + public let direction: String? + public let latitude: String // 위도 + public let lonitude: String // 경도 + public let distance: Int // 내위치에서 떨어진 거리 + + public init( + busStopId: String, + busStopName: String, + direction: String?, + latitude: String, + lonitude: String, + distance: Int + ) { + self.busStopId = busStopId + self.busStopName = busStopName + self.direction = direction + self.latitude = latitude + self.lonitude = lonitude + self.distance = distance + } +} + +extension NearBusStopResponse { + static public var mockBusStop = NearBusStopResponse( + busStopId: "123", + busStopName: "예비정류장", + direction: "방면", + latitude: "456456", + lonitude: "123123", + distance: 100 + ) +} diff --git a/Projects/Domain/Sources/Entity/Response/RegularAlarmResponse.swift b/Projects/Domain/Sources/Entity/Response/RegularAlarmResponse.swift new file mode 100644 index 00000000..98eeb97d --- /dev/null +++ b/Projects/Domain/Sources/Entity/Response/RegularAlarmResponse.swift @@ -0,0 +1,56 @@ +// +// RegularAlarmResponse.swift +// Domain +// +// Created by gnksbm on 2/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core + +public struct RegularAlarmResponse: Hashable, CoreDataStorable { + public let requestId: String + public let busStopId: String + public let busStopName: String + public let busId: String + public let busName: String + public let time: Date + public let weekday: [Int] + + public init( + requestId: String = UUID().uuidString, + busStopId: String, + busStopName: String, + busId: String, + busName: String, + time: Date, + weekday: [Int] + ) { + self.requestId = requestId + self.busStopId = busStopId + self.busStopName = busStopName + self.busId = busId + self.busName = busName + self.time = time + self.weekday = weekday as [Int] + } +} + +public extension RegularAlarmResponse { + var toAddRequest: AddRegularAlarmRequest { + .init( + date: time, + weekday: weekday, + busRouteId: busId, + arsId: busStopId, + busStopName: busStopName, + busName: busName + ) + } + + var toRemoveRequest: RemoveRegularAlarmRequest { + .init(alarmId: requestId) + } +} diff --git a/Projects/Domain/Sources/RepositoryInterface/BusStopArrivalInfoRepository.swift b/Projects/Domain/Sources/RepositoryInterface/BusStopArrivalInfoRepository.swift new file mode 100644 index 00000000..c1c9704f --- /dev/null +++ b/Projects/Domain/Sources/RepositoryInterface/BusStopArrivalInfoRepository.swift @@ -0,0 +1,17 @@ +// +// BusStopArrivalInfoRepository.swift +// Domain +// +// Created by gnksbm on 1/30/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol BusStopArrivalInfoRepository { + func fetchArrivalList( + busStopId: String + ) -> Observable +} diff --git a/Projects/Domain/Sources/RepositoryInterface/FavoritesRepository.swift b/Projects/Domain/Sources/RepositoryInterface/FavoritesRepository.swift new file mode 100644 index 00000000..1507691e --- /dev/null +++ b/Projects/Domain/Sources/RepositoryInterface/FavoritesRepository.swift @@ -0,0 +1,25 @@ +// +// FavoritesRepository.swift +// Domain +// +// Created by gnksbm on 1/30/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol FavoritesRepository { + var favorites: BehaviorSubject<[FavoritesBusStopResponse]> { get } + + func addRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) throws + + func removeRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) throws +} diff --git a/Projects/Domain/Sources/RepositoryInterface/RegularAlarmRepository.swift b/Projects/Domain/Sources/RepositoryInterface/RegularAlarmRepository.swift new file mode 100644 index 00000000..6f3d0b8f --- /dev/null +++ b/Projects/Domain/Sources/RepositoryInterface/RegularAlarmRepository.swift @@ -0,0 +1,28 @@ +// +// RegularAlarmRepository.swift +// Domain +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol RegularAlarmRepository { + var currentRegularAlarm: BehaviorSubject<[RegularAlarmResponse]> { get } + + func createRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) + func updateRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) + func deleteRegularAlarm( + response: RegularAlarmResponse, + completion: @escaping () -> Void + ) +} diff --git a/Projects/Domain/Sources/RepositoryInterface/StationListRepository.swift b/Projects/Domain/Sources/RepositoryInterface/StationListRepository.swift new file mode 100644 index 00000000..d5151beb --- /dev/null +++ b/Projects/Domain/Sources/RepositoryInterface/StationListRepository.swift @@ -0,0 +1,24 @@ +// +// StationListRepository.swift +// Domain +// +// Created by 유하은 on 2024/02/27. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import RxSwift +import RxRelay + +public protocol StationListRepository { + var busStopRegions: BehaviorSubject<[BusStopRegion]> { get } + var recentlySearchedStation: BehaviorRelay<[BusStopInfoResponse]> { get } + + func saveRecentSearch(_ searchCell: BusStopInfoResponse) + func removeRecentSearch() + func getNearByStopInfo( + startPointLocation: CLLocation + ) -> (BusStopInfoResponse, String) +} diff --git a/Projects/Domain/Sources/Service/LocationService/LocationService.swift b/Projects/Domain/Sources/Service/LocationService/LocationService.swift new file mode 100644 index 00000000..c0b61d2c --- /dev/null +++ b/Projects/Domain/Sources/Service/LocationService/LocationService.swift @@ -0,0 +1,23 @@ +// +// LocationService.swift +// Domain +// +// Created by Muker on 3/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import CoreLocation + +import RxSwift +import RxRelay + +public protocol LocationService { + var locationStatus: BehaviorSubject { get } + + func authorize() + func requestLocationOnce() + func startUpdatingLocation() + func stopUpdatingLocation() + func getDistance(response: BusStopInfoResponse) -> String +} diff --git a/Projects/Domain/Sources/Service/NotificationService/LocalNotificationService.swift b/Projects/Domain/Sources/Service/NotificationService/LocalNotificationService.swift new file mode 100644 index 00000000..db6e4c1a --- /dev/null +++ b/Projects/Domain/Sources/Service/NotificationService/LocalNotificationService.swift @@ -0,0 +1,22 @@ +// +// LocalNotificationService.swift +// Domain +// +// Created by gnksbm on 2/27/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import UserNotifications + +import RxSwift + +public protocol LocalNotificationService { + var authState: BehaviorSubject { get } + + func authorize() + func fetchRegularAlarm() -> Observable<[RegularAlarmResponse]> + func registNewRegularAlarm(response: RegularAlarmResponse) throws + func editRegularAlarm(response: RegularAlarmResponse) throws + func removeRegularAlarm(response: RegularAlarmResponse) throws +} diff --git a/Projects/Domain/Sources/Service/RegularAlarmEditingService.swift b/Projects/Domain/Sources/Service/RegularAlarmEditingService.swift new file mode 100644 index 00000000..8b715794 --- /dev/null +++ b/Projects/Domain/Sources/Service/RegularAlarmEditingService.swift @@ -0,0 +1,25 @@ +// +// RegularAlarmEditingService.swift +// Domain +// +// Created by gnksbm on 3/13/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxRelay + +public protocol RegularAlarmEditingService { + var managedAlarm: BehaviorRelay { get } + func update( + busStopId: String, + busStopName: String, + busId: String, + busName: String + ) + func update(time: Date) + func update(weekday: [Int]) + func update(response: RegularAlarmResponse) + func resetManagedObject() +} diff --git a/Projects/Domain/Sources/Temp.swift b/Projects/Domain/Sources/Temp.swift deleted file mode 100644 index a7b79de1..00000000 --- a/Projects/Domain/Sources/Temp.swift +++ /dev/null @@ -1,9 +0,0 @@ -// -// Temp.swift -// Domain -// -// Created by gnksbm on 2024/01/12. -// Copyright © 2024 Pepsi-Club. All rights reserved. -// - -import Foundation diff --git a/Projects/Domain/Sources/UseCase/DefaultAddRegularAlarmUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultAddRegularAlarmUseCase.swift new file mode 100644 index 00000000..6b4d5d78 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultAddRegularAlarmUseCase.swift @@ -0,0 +1,44 @@ +// +// DefaultAddRegularAlarmUseCase.swift +// Domain +// +// Created by gnksbm on 2/16/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public final class DefaultAddRegularAlarmUseCase: AddRegularAlarmUseCase { + private let localNotificationService: LocalNotificationService + private let regularAlarmRepository: RegularAlarmRepository + + public init( + localNotificationService: LocalNotificationService, + regularAlarmRepository: RegularAlarmRepository + ) { + self.localNotificationService = localNotificationService + self.regularAlarmRepository = regularAlarmRepository + } + + public func checkNotificationAuth() { + localNotificationService.authorize() + } + + public func addNewAlarm(response: RegularAlarmResponse) { + regularAlarmRepository.createRegularAlarm(response: response) { + #if DEBUG + print("Create Completed") + #endif + } + } + + public func editAlarm(response: RegularAlarmResponse) { + regularAlarmRepository.updateRegularAlarm(response: response) { + #if DEBUG + print("Update Completed") + #endif + } + } +} diff --git a/Projects/Domain/Sources/UseCase/DefaultBusStopUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultBusStopUseCase.swift new file mode 100644 index 00000000..3388e964 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultBusStopUseCase.swift @@ -0,0 +1,117 @@ +// +// DefaultBusStopUseCase.swift +// Domain +// +// Created by Jisoo HAM on 2/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift +import RxCocoa + +public final class DefaultBusStopUseCase: BusStopUseCase { + private let busStopArrivalInfoRepository: BusStopArrivalInfoRepository + private let favoritesRepository: FavoritesRepository + private let regularAlarmEditingService: RegularAlarmEditingService + + public let busStopSection = PublishSubject() + public var favorites = BehaviorSubject<[FavoritesBusStopResponse]>( + value: .init([]) + ) + private let disposeBag = DisposeBag() + + public init( + busStopArrivalInfoRepository: BusStopArrivalInfoRepository, + favoritesRepository: FavoritesRepository, + regularAlarmEditingService: RegularAlarmEditingService + ) { + self.busStopArrivalInfoRepository = busStopArrivalInfoRepository + self.favoritesRepository = favoritesRepository + self.regularAlarmEditingService = regularAlarmEditingService + + fetchFavorites() + } + + public func fetchBusArrivals(request: ArrivalInfoRequest) { + let busStops = busStopArrivalInfoRepository.fetchArrivalList( + busStopId: request.busStopId + ) + .map { $0 } + Observable.combineLatest(busStops, favorites) + .withUnretained(self) + .map { useCase, arg1 in + var (busStops, favoritesBusStops) = arg1 + busStops = useCase.filterFavorites( + responses: busStops, + favorites: favoritesBusStops + ) + return busStops + } + .bind(to: busStopSection) + .disposed(by: disposeBag) + } + // MARK: - 즐겨찾기 데이터 가져오기 + private func fetchFavorites() { + favoritesRepository.favorites + .withUnretained(self) + .subscribe( + onNext: { useCase, favorites in + useCase.favorites.onNext(favorites) + } + ) + .disposed(by: disposeBag) + } + // MARK: - 필터링 후 BusStopArrivalInfoRepsonse 반환 + private func filterFavorites( + responses: BusStopArrivalInfoResponse, + favorites: [FavoritesBusStopResponse] + ) -> BusStopArrivalInfoResponse { + var busStops = responses + + guard let favorite = favorites.first( + where: { + $0.busStopId == busStops.busStopId + } + ) else { + return busStops // favorites에 해당하는 것이 없으면 그대로 반환 + } + + for favoriteBusId in favorite.busIds { + if let indexInResponse = responses.buses.firstIndex( + where: { + $0.busId == favoriteBusId + } + ) { + busStops.buses[indexInResponse].isFavorites + = !busStops.buses[indexInResponse].isFavorites + } + } + return busStops + } + + // MARK: - 즐찾 추가 및 해제 + public func handleFavorites( + busStop: String, + bus: BusArrivalInfoResponse + ) { + if bus.isFavorites { + try? self.favoritesRepository.removeRoute(arsId: busStop, bus: bus) + } else { + try? self.favoritesRepository.addRoute(arsId: busStop, bus: bus) + } + } + // MARK: - Service - useCase - viewModel 연결 + public func update( + busStopInfo: BusStopArrivalInfoResponse, + busInfo: BusArrivalInfoResponse + ) { + regularAlarmEditingService.update( + busStopId: busStopInfo.busStopId, + busStopName: busStopInfo.busStopName, + busId: busInfo.busId, + busName: busInfo.busName + ) + } +} diff --git a/Projects/Domain/Sources/UseCase/DefaultFavoritesUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultFavoritesUseCase.swift new file mode 100644 index 00000000..5c95659f --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultFavoritesUseCase.swift @@ -0,0 +1,87 @@ +// +// DefaultFavoritesUseCase.swift +// Domain +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift +import RxCocoa + +public final class DefaultFavoritesUseCase: FavoritesUseCase { + private let busStopArrivalInfoRepository: BusStopArrivalInfoRepository + private let favoritesRepository: FavoritesRepository + + public let busStopArrivalInfoResponse + = BehaviorSubject<[BusStopArrivalInfoResponse]>(value: []) + private let disposeBag = DisposeBag() + + public init( + busStopArrivalInfoRepository: BusStopArrivalInfoRepository, + favoritesRepository: FavoritesRepository + ) { + self.busStopArrivalInfoRepository = busStopArrivalInfoRepository + self.favoritesRepository = favoritesRepository + } + + public func fetchFavoritesArrivals() { + do { + let favoritesBusStops = try favoritesRepository.favorites.value() + Observable.combineLatest( + favoritesBusStops + .map { response in + busStopArrivalInfoRepository.fetchArrivalList( + busStopId: response.busStopId + ) + } + ) + .withUnretained(self) + .subscribe( + onNext: { useCase, responses in + let filteredResponses = useCase.filterFavorites( + fetchedResponses: responses, + favoritesBusStops: favoritesBusStops + ) + useCase.busStopArrivalInfoResponse.onNext(filteredResponses) + } + ) + .disposed(by: disposeBag) + } catch { + busStopArrivalInfoResponse.onError(error) + } + } + + private func filterFavorites( + fetchedResponses: [BusStopArrivalInfoResponse], + favoritesBusStops: [FavoritesBusStopResponse] + ) -> [BusStopArrivalInfoResponse] { + let filteredBusStop = fetchedResponses.filter { fetchedResponse in + favoritesBusStops.contains { + $0.busStopId == fetchedResponse.busStopId + } + } + let result: [BusStopArrivalInfoResponse] = filteredBusStop + .compactMap { filteredResponse in + guard let currentFavorites = favoritesBusStops.first( + where: { $0.busStopId == filteredResponse.busStopId } + ) + else { return nil } + let filteredBus = filteredResponse.buses + .filter { fetchedBusInfo in + currentFavorites.busIds.contains { favoriteBusIds in + favoriteBusIds == fetchedBusInfo.busId + } + } + return .init( + busStopId: filteredResponse.busStopId, + busStopName: filteredResponse.busStopName, + direction: filteredResponse.direction, + buses: filteredBus + ) + } + return result + } +} diff --git a/Projects/Domain/Sources/UseCase/DefaultNearMapUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultNearMapUseCase.swift new file mode 100644 index 00000000..405a2abd --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultNearMapUseCase.swift @@ -0,0 +1,148 @@ +// +// DefaultNearMapUseCase.swift +// Domain +// +// Created by Muker on 2/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import RxSwift +import RxCocoa + +public final class DefaultNearMapUseCase: NearMapUseCase { + private let stationListRepository: StationListRepository + private let locationService: LocationService + + public let locationStatus = BehaviorSubject( + value: .notDetermined + ) + private let disposeBag = DisposeBag() + + public init( + stationListRepository: StationListRepository, + locationService: LocationService + ) { + self.stationListRepository = stationListRepository + self.locationService = locationService + bindLocationStatus() + } + + public func requestAuthorize() { + locationService.authorize() + } + + public func getNearByStopInfo( + ) -> Observable<(BusStopInfoResponse, String)> { + locationService.locationStatus + .withUnretained(self) + .map { useCase, status in + var response: BusStopInfoResponse + var distanceStr: String + let requestMessage = "위치 사용을 허용해주세요" + let waitingMessage = "위치 정보 가져오는 중..." + let errorMessage = "위치 정보를 가져올 수 없습니다" + switch status { + case .authorized(let location), .alwaysAllowed(let location): + (response, distanceStr) = useCase.stationListRepository + .getNearByStopInfo(startPointLocation: location) + case .waitingForLocation: + response = .init( + busStopName: waitingMessage, + busStopId: "", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "" + case .notDetermined, .denied: + response = .init( + busStopName: requestMessage, + busStopId: "주변 정류장을 확인하려면 위치 정보가 필요합니다", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "권한 설정하러 가기" + case .error: + response = .init( + busStopName: errorMessage, + busStopId: "", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "" + } + return (response, distanceStr) + } + } + + public func getSelectedBusStop( + busStopId: String + ) -> (BusStopInfoResponse, String) { + let errorResponse = BusStopInfoResponse( + busStopName: "정류장 정보를 찾을 수 없습니다.", + busStopId: "", + direction: "", + longitude: "", + latitude: "" + ) + let errorDistance = "" + do { + let regions = try stationListRepository.busStopRegions.value() + let selectedBusStop = regions + .compactMap { region in + switch region { + case .seoul(let responses): + return responses.first { response in + response.busStopId == busStopId + } + } + }.first + if let selectedBusStop { + let distance = locationService.getDistance( + response: selectedBusStop + ) + return (selectedBusStop, distance) + } else { + return (errorResponse, errorDistance) + } + } catch { + return (errorResponse, errorDistance) + } + } + + public func getNearBusStopList( + longitudeRange: ClosedRange, + latitudeRange: ClosedRange + ) -> [BusStopInfoResponse] { + do { + let regions = try stationListRepository.busStopRegions.value() + return regions + .flatMap { region in + switch region { + case .seoul(let responses): + return responses + } + } + .filter { response in + guard let longitude = Double(response.longitude), + let latitude = Double(response.latitude) + else { return false } + return longitudeRange ~= longitude && + latitudeRange ~= latitude + } + } catch { + return [] + } + } + + private func bindLocationStatus() { + locationService.locationStatus + .bind(to: locationStatus) + .disposed(by: disposeBag) + } +} diff --git a/Projects/Domain/Sources/UseCase/DefaultRegularAlarmUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultRegularAlarmUseCase.swift new file mode 100644 index 00000000..45337c85 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultRegularAlarmUseCase.swift @@ -0,0 +1,112 @@ +// +// DefaultRegularAlarmUseCase.swift +// Domain +// +// Created by gnksbm on 3/10/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public class DefaultRegularAlarmUseCase: RegularAlarmUseCase { + private let localNotificationService: LocalNotificationService + private let regularAlarmRepository: RegularAlarmRepository + + public let fetchedAlarm = PublishSubject<[RegularAlarmResponse]>() + private let disposeBag = DisposeBag() + + public init( + localNotificationService: LocalNotificationService, + regularAlarmRepository: RegularAlarmRepository + ) { + self.localNotificationService = localNotificationService + self.regularAlarmRepository = regularAlarmRepository + } + + public func fetchAlarm() { + regularAlarmRepository.currentRegularAlarm + .withUnretained(self) + .map { useCase, responses in + useCase.sortResponses(responses: responses) + } + .bind(to: fetchedAlarm) + .disposed(by: disposeBag) + migrateRegularAlarm() + } + + public func removeAlarm(response: RegularAlarmResponse) throws { + regularAlarmRepository.deleteRegularAlarm(response: response) { + #if DEBUG + print("Remove completed") + #endif + } + } + + private func migrateRegularAlarm() { + localNotificationService.fetchRegularAlarm() + .filter { !$0.isEmpty } + .withUnretained(self) + .map { useCase, responses in + useCase.replaceWeekday(responses: responses) + } + .withUnretained(self) + .subscribe( + onNext: { useCase, responses in + responses.forEach { response in + useCase.regularAlarmRepository.createRegularAlarm( + response: response + ) { + useCase.removeLegacy(response: response) + } + + } + } + ) + .disposed(by: disposeBag) + } + + private func sortResponses( + responses: [RegularAlarmResponse] + ) -> [RegularAlarmResponse] { + responses.sorted { + guard let firstValue = $0.weekday.sorted().first, + let secondValue = $1.weekday.sorted().first + else { return true } + let dateResult = $0.time < $1.time + let weekDayResult = firstValue < secondValue + return firstValue == secondValue ? + dateResult : weekDayResult + } + } + + private func replaceWeekday( + responses: [RegularAlarmResponse] + ) -> [RegularAlarmResponse] { + responses.map { response in + let newWeekdy = response.weekday.map { rawValue in + rawValue - 1 + } + return RegularAlarmResponse( + requestId: response.requestId, + busStopId: response.busStopId, + busStopName: response.busStopName, + busId: response.busId, + busName: response.busName, + time: response.time, + weekday: newWeekdy + ) + } + } + + private func removeLegacy(response: RegularAlarmResponse) { + do { + try localNotificationService.removeRegularAlarm(response: response) + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + } +} diff --git a/Projects/Domain/Sources/UseCase/DefaultSearchUseCase.swift b/Projects/Domain/Sources/UseCase/DefaultSearchUseCase.swift new file mode 100644 index 00000000..03e02e04 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/DefaultSearchUseCase.swift @@ -0,0 +1,163 @@ +// +// DefaultSearchUseCase.swift +// Domain +// +// Created by 유하은 on 2024/03/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import RxSwift +import RxCocoa + +public final class DefaultSearchUseCase: SearchUseCase { + private let stationListRepository: StationListRepository + private let locationService: LocationService + + public var locationStatus = BehaviorSubject( + value: .notDetermined + ) + public let nearByStopInfo = PublishSubject<(BusStopInfoResponse, String)>() + public let searchedStationList = PublishSubject<[BusStopRegion]>() + public var recentSearchResult = BehaviorSubject<[BusStopInfoResponse]>( + value: [] + ) + private let disposeBag = DisposeBag() + + public init( + stationListRepository: StationListRepository, + locationService: LocationService + ) { + self.stationListRepository = stationListRepository + self.locationService = locationService + bindLocationStatus() + bindRecentSearchList() + } + + public func search(term: String) { + guard !term.isEmpty + else { + searchedStationList.onNext([]) + return + } + do { + let filteredTerm = term.replacingOccurrences( + of: " ", + with: "" + ) + let filteredList = try stationListRepository.busStopRegions + .value() + .flatMap { region in + switch region { + case .seoul(let responses): + return responses + } + } + .filter { response in + let busStopIdPrefix = response.busStopId + .prefix(filteredTerm.count) + + return filteredTerm.count > 2 && + busStopIdPrefix == filteredTerm || + response.busStopName.contains(filteredTerm) + } + .sorted { + $0.busStopName.hasPrefix(filteredTerm) && + !$1.busStopName.hasPrefix(filteredTerm) || + $0.busStopId < $1.busStopId + } + searchedStationList.onNext([.seoul(responses: filteredList)]) + } catch { + searchedStationList.onError(error) + } + } + + public func removeRecentSearch() { + stationListRepository.removeRecentSearch() + } + + public func saveRecentSearch(response: BusStopInfoResponse) { + stationListRepository.saveRecentSearch(response) + } + + public func requestAuthorize() { + locationService.authorize() + } + + public func getBusStopInfo( + for busStopId: String + ) -> Observable<[BusStopInfoResponse]> { + stationListRepository.busStopRegions + .map { regions in + regions.flatMap { region in + var busStopList = [BusStopInfoResponse]() + switch region { + case .seoul(let responses): + busStopList = responses + } + return busStopList.filter { $0.busStopId == busStopId } + } + } + } + + public func updateNearByStop( + ) -> Observable<(BusStopInfoResponse, String)> { + locationService.locationStatus + .withUnretained(self) + .map { useCase, status in + var response: BusStopInfoResponse + var distanceStr: String + let requestMessage = "확인하려면 위치사용을 허용해주세요" + let waitingMessage = "위치 정보 가져오는 중..." + let errorMessage = "위치 정보를 가져올 수 없습니다" + switch status { + case .authorized(let location), + .alwaysAllowed(let location): + (response, distanceStr) = useCase.stationListRepository + .getNearByStopInfo(startPointLocation: location) + case .waitingForLocation: + response = .init( + busStopName: waitingMessage, + busStopId: "", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "" + case .notDetermined, .denied: + response = .init( + busStopName: requestMessage, + busStopId: "", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "" + case .error: + response = .init( + busStopName: errorMessage, + busStopId: "", + direction: "", + longitude: "126.979620", + latitude: "37.570028" + ) + distanceStr = "" + } + return (response, distanceStr) + } + } + + private func bindLocationStatus() { + locationService.locationStatus + .bind(to: locationStatus) + .disposed(by: disposeBag) + } + + private func bindRecentSearchList() { + stationListRepository.recentlySearchedStation + .bind(to: recentSearchResult) + .disposed(by: disposeBag) + } +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/AddRegularAlarmUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/AddRegularAlarmUseCase.swift new file mode 100644 index 00000000..13513b21 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/AddRegularAlarmUseCase.swift @@ -0,0 +1,17 @@ +// +// AddRegularAlarmUseCase.swift +// Domain +// +// Created by gnksbm on 2/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol AddRegularAlarmUseCase { + func checkNotificationAuth() + func addNewAlarm(response: RegularAlarmResponse) + func editAlarm(response: RegularAlarmResponse) +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/BusStopUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/BusStopUseCase.swift new file mode 100644 index 00000000..83fb622f --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/BusStopUseCase.swift @@ -0,0 +1,24 @@ +// +// BusStopUseCase.swift +// Domain +// +// Created by Jisoo HAM on 2/5/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol BusStopUseCase { + var busStopSection + : PublishSubject { get } + var favorites: BehaviorSubject<[FavoritesBusStopResponse]> { get } + + func fetchBusArrivals(request: ArrivalInfoRequest) + func handleFavorites(busStop: String, bus: BusArrivalInfoResponse) + func update( + busStopInfo: BusStopArrivalInfoResponse, + busInfo: BusArrivalInfoResponse + ) +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/FavoritesUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/FavoritesUseCase.swift new file mode 100644 index 00000000..628dc25c --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/FavoritesUseCase.swift @@ -0,0 +1,18 @@ +// +// FavoritesUseCase.swift +// Domain +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol FavoritesUseCase { + var busStopArrivalInfoResponse + : BehaviorSubject<[BusStopArrivalInfoResponse]> { get } + + func fetchFavoritesArrivals() +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/NearMapUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/NearMapUseCase.swift new file mode 100644 index 00000000..3a30cbaf --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/NearMapUseCase.swift @@ -0,0 +1,27 @@ +// +// NearMapUseCase.swift +// Domain +// +// Created by Muker on 2/7/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import RxSwift + +public protocol NearMapUseCase { + var locationStatus: BehaviorSubject { get } + + func requestAuthorize() + func getNearByStopInfo( + ) -> Observable<(BusStopInfoResponse, String)> + func getSelectedBusStop( + busStopId: String + ) -> (BusStopInfoResponse, String) + func getNearBusStopList( + longitudeRange: ClosedRange, + latitudeRange: ClosedRange + ) -> [BusStopInfoResponse] +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/RegularAlarmUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/RegularAlarmUseCase.swift new file mode 100644 index 00000000..8920f5d0 --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/RegularAlarmUseCase.swift @@ -0,0 +1,18 @@ +// +// RegularAlarmUseCase.swift +// Domain +// +// Created by gnksbm on 3/10/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol RegularAlarmUseCase { + var fetchedAlarm: PublishSubject<[RegularAlarmResponse]> { get } + + func fetchAlarm() + func removeAlarm(response: RegularAlarmResponse) throws +} diff --git a/Projects/Domain/Sources/UseCase/Protocol/SearchUseCase.swift b/Projects/Domain/Sources/UseCase/Protocol/SearchUseCase.swift new file mode 100644 index 00000000..82db014b --- /dev/null +++ b/Projects/Domain/Sources/UseCase/Protocol/SearchUseCase.swift @@ -0,0 +1,26 @@ +// +// SearchUseCase.swift +// Domain +// +// Created by 유하은 on 2024/03/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import RxSwift + +public protocol SearchUseCase { + var locationStatus: BehaviorSubject { get } + var nearByStopInfo: PublishSubject<(BusStopInfoResponse, String)> { get } + var searchedStationList: PublishSubject<[BusStopRegion]> { get } + var recentSearchResult: BehaviorSubject<[BusStopInfoResponse]> { get } + + func search(term: String) + func removeRecentSearch() + func saveRecentSearch(response: BusStopInfoResponse) + func requestAuthorize() + func getBusStopInfo(for busStopId: String + ) -> Observable<[BusStopInfoResponse]> + func updateNearByStop() -> Observable<(BusStopInfoResponse, String)> +} diff --git a/Projects/Feature/AlarmFeature/Demo/AppDelegate.swift b/Projects/Feature/AlarmFeature/Demo/AppDelegate.swift index dd143edc..7c961fad 100644 --- a/Projects/Feature/AlarmFeature/Demo/AppDelegate.swift +++ b/Projects/Feature/AlarmFeature/Demo/AppDelegate.swift @@ -1,8 +1,17 @@ import UIKit +import Core +import Domain +import DesignSystem +import FeatureDependency + +import RxSwift + @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + Appearance.setupAppearance() + register() return true } @@ -14,4 +23,20 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { } + + func register() { + DIContainer.register( + type: AddRegularAlarmUseCase.self, + DefaultAddRegularAlarmUseCase( + localNotificationService: MockLocalNotificationService() + ) + ) + + DIContainer.register( + type: RegularAlarmUseCase.self, + DefaultRegularAlarmUseCase( + localNotificationService: MockLocalNotificationService() + ) + ) + } } diff --git a/Projects/Feature/AlarmFeature/Demo/SceneDelegate.swift b/Projects/Feature/AlarmFeature/Demo/SceneDelegate.swift index 90934483..fca03a84 100644 --- a/Projects/Feature/AlarmFeature/Demo/SceneDelegate.swift +++ b/Projects/Feature/AlarmFeature/Demo/SceneDelegate.swift @@ -1,6 +1,8 @@ import UIKit import AlarmFeature +import Domain +import FeatureDependency final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? @@ -16,8 +18,9 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { window?.rootViewController = navigationController window?.makeKeyAndVisible() - let alarmCoordinator = DefaultAlarmCoordinator( - navigationController: navigationController + let alarmCoordinator = DefaultRegularAlarmCoordinator( + navigationController: navigationController, + coordinatorProvider: MockCoordinatorProvider() ) alarmCoordinator.start() } diff --git a/Projects/Feature/AlarmFeature/Sources/Coordinator/AlarmCoordinator.swift b/Projects/Feature/AlarmFeature/Sources/Coordinator/AlarmCoordinator.swift deleted file mode 100644 index ce169a34..00000000 --- a/Projects/Feature/AlarmFeature/Sources/Coordinator/AlarmCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol AlarmCoordinator: Coordinator { -} diff --git a/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAddRegularAlarmCoordinator.swift b/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAddRegularAlarmCoordinator.swift new file mode 100644 index 00000000..59de2018 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAddRegularAlarmCoordinator.swift @@ -0,0 +1,82 @@ +// +// DefaultAddRegularAlarmCoordinator.swift +// AlarmFeature +// +// Created by gnksbm on 2/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Domain +import FeatureDependency + +public final class DefaultAddRegularAlarmCoordinator { + public var parent: Coordinator? + public var childs: [Coordinator] = [] + public var navigationController: UINavigationController + public let coordinatorProvider: CoordinatorProvider + private let flow: FlowState + public var coordinatorType: CoordinatorType = .addAlarm + + private var vcForFinishFlow: UIViewController? + + public init( + parent: Coordinator, + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider, + flow: FlowState + ) { + self.parent = parent + self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider + self.flow = flow + } + + public func start() { + let addRegularAlarmViewController = AddRegularAlarmViewController( + viewModel: .init( + coordinator: self + ) + ) + vcForFinishFlow = addRegularAlarmViewController + navigationController.pushViewController( + addRegularAlarmViewController, + animated: true + ) + } +} + +extension DefaultAddRegularAlarmCoordinator: AddRegularAlarmCoordinator { + public func start(with: RegularAlarmResponse) { + let addRegularAlarmViewController = AddRegularAlarmViewController( + viewModel: .init( + alarmToEdit: with, + coordinator: self + ) + ) + vcForFinishFlow = addRegularAlarmViewController + navigationController.pushViewController( + addRegularAlarmViewController, + animated: true + ) + } + + public func startSearchFlow() { + let searchCoordinator = coordinatorProvider.makeSearchCoordinator( + parent: self, + navigationController: navigationController, + flow: .fromAlarm + ) + childs.append(searchCoordinator) + searchCoordinator.start() + } + + public func removeChildViewController() { + guard let vcForFinishFlow else { return } + navigationController.popToViewController( + vcForFinishFlow, + animated: true + ) + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAlarmCoordinator.swift b/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAlarmCoordinator.swift deleted file mode 100644 index 05c734e3..00000000 --- a/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultAlarmCoordinator.swift +++ /dev/null @@ -1,22 +0,0 @@ -import UIKit - -import FeatureDependency - -public final class DefaultAlarmCoordinator: AlarmCoordinator { - public var childCoordinators: [Coordinator] = [] - public var navigationController: UINavigationController - - public init(navigationController: UINavigationController) { - self.navigationController = navigationController - } - - public func start() { - let homeViewController = AlarmViewController( - viewModel: AlarmViewModel() - ) - navigationController.setViewControllers( - [homeViewController], - animated: false - ) - } -} diff --git a/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultRegularAlarmCoordinator.swift b/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultRegularAlarmCoordinator.swift new file mode 100644 index 00000000..f8676fd8 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/Coordinator/DefaultRegularAlarmCoordinator.swift @@ -0,0 +1,54 @@ +import UIKit + +import Domain +import FeatureDependency + +public final class DefaultRegularAlarmCoordinator: RegularAlarmCoordinator { + public var parent: Coordinator? + public var childs: [Coordinator] = [] + public var navigationController: UINavigationController + public var coordinatorProvider: CoordinatorProvider + public var coordinatorType: CoordinatorType = .regularAlarm + + public init( + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider + ) { + self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider + } + + public func start() { + let regularAlarmViewController = RegularAlarmViewController( + viewModel: RegularAlarmViewModel(coordinator: self) + ) + navigationController.setViewControllers( + [regularAlarmViewController], + animated: false + ) + } +} + +public extension DefaultRegularAlarmCoordinator { + func startAddRegularAlarmFlow() { + let addRegularAlarmCoordinator = DefaultAddRegularAlarmCoordinator( + parent: self, + navigationController: navigationController, + coordinatorProvider: coordinatorProvider, + flow: .fromAlarm + ) + childs.append(addRegularAlarmCoordinator) + addRegularAlarmCoordinator.start() + } + + func startAddRegularAlarmFlow(with: RegularAlarmResponse) { + let addRegularAlarmCoordinator = DefaultAddRegularAlarmCoordinator( + parent: self, + navigationController: navigationController, + coordinatorProvider: coordinatorProvider, + flow: .fromAlarm + ) + childs.append(addRegularAlarmCoordinator) + addRegularAlarmCoordinator.start(with: with) + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/View/EmptyRegularAlarmView.swift b/Projects/Feature/AlarmFeature/Sources/View/EmptyRegularAlarmView.swift new file mode 100644 index 00000000..f352c940 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/View/EmptyRegularAlarmView.swift @@ -0,0 +1,87 @@ +// +// EmptyRegularAlarmView.swift +// AlarmFeatureDemo +// +// Created by gnksbm on 2/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +final class EmptyRegularAlarmView: UIView { + private let imageView: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.bus.image + return imageView + }() + + private let messageLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 15 + ) + label.textColor = DesignSystemAsset.gray6.color + label.textAlignment = .center + label.numberOfLines = 3 + let message1 = NSAttributedString( + string: "특정 시간대에 자주 타는 버스가 있다면?\n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 15 + ) + ] + ) + let message2 = NSAttributedString( + string: "정기 알람 등록하러 가기", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 20 + ), + .foregroundColor: DesignSystemAsset.bottonBtnColor.color + ] + ) + let padding = NSAttributedString( + string: "\n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 6 + ), + .foregroundColor: DesignSystemAsset.bottonBtnColor.color + ] + ) + let attributedString = NSMutableAttributedString() + attributedString.append(message1) + attributedString.append(padding) + attributedString.append(message2) + label.attributedText = attributedString + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + backgroundColor = .white + + [messageLabel].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + messageLabel.centerXAnchor.constraint(equalTo: centerXAnchor), + messageLabel.bottomAnchor.constraint( + equalTo: centerYAnchor, + constant: -50 + ), + ]) + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/View/RegularAlarmTVCell.swift b/Projects/Feature/AlarmFeature/Sources/View/RegularAlarmTVCell.swift new file mode 100644 index 00000000..8e3086a9 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/View/RegularAlarmTVCell.swift @@ -0,0 +1,215 @@ +// +// RegularAlarmTVCell.swift +// AlarmFeature +// +// Created by gnksbm on 2/13/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem +import Domain + +import RxSwift +import RxCocoa + +final class RegularAlarmTVCell: UITableViewCell { + let removeBtnTapEvent = PublishSubject() + let disposeBag = DisposeBag() + + private let removeBtn: UIButton = { + var config = UIButton.Configuration.plain() + let image = UIImage(systemName: "minus.circle.fill") + let imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 16) + ) + config.image = image + config.preferredSymbolConfigurationForImage = imgConfig + config.baseForegroundColor = DesignSystemAsset.gray5.color + let button = UIButton(configuration: config) + return button + }() + + private let busInfoLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 3 + label.textAlignment = .center + return label + }() + + private let alarmInfoLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 3 + label.textAlignment = .center + return label + }() + + private lazy var stackView: UIStackView = { + let stackView = UIStackView( + arrangedSubviews: [busInfoLabel, alarmInfoLabel] + ) + stackView.axis = .horizontal + stackView.distribution = .equalCentering + stackView.alignment = .center + stackView.addDivider( + color: .white, + hasPadding: true, + dividerRatio: 1.0 + ) + stackView.backgroundColor = + DesignSystemAsset.weekDayBlue.color.withAlphaComponent(0.3) + stackView.layer.cornerRadius = 10 + return stackView + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + configureUI() + bind() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + busInfoLabel.attributedText = nil + alarmInfoLabel.attributedText = nil + } + + func updateUI(response: RegularAlarmResponse) { + let weekDayMessage = response.weekday + .sorted() + .compactMap { + AddRegularAlarmViewController.WeekDay(rawValue: $0)?.toString + } + .joined(separator: ", ") + var timeMessage = response.time.toString(dateFormat: "a hh시 mm분") + timeMessage.replace("AM", with: "오전") + timeMessage.replace("PM", with: "오후") + updateAlarm( + weekDay: weekDayMessage, + time: timeMessage + ) + updateBusInfo( + busStop: response.busStopName, + bus: response.busName + ) + } + + private func updateAlarm( + weekDay: String, + time: String + ) { + let weekDayString = NSAttributedString( + string: "매주 \(weekDay)요일\n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 15 + ), + .foregroundColor: DesignSystemAsset.lightRed.color + ] + ) + let paddingString = NSAttributedString( + string: " \n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 4 + ), + .foregroundColor: DesignSystemAsset.lightRed.color + ] + ) + let timeString = NSAttributedString( + string: time, + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 15 + ), + .foregroundColor: DesignSystemAsset.settingColor.color + ] + ) + + let attrString = NSMutableAttributedString() + attrString.append(weekDayString) + attrString.append(paddingString) + attrString.append(timeString) + alarmInfoLabel.attributedText = attrString + } + + private func updateBusInfo( + busStop: String, + bus: String + ) { + let busString = NSAttributedString( + string: bus + "\n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 19 + ), + .foregroundColor: DesignSystemAsset.regularAlarmBlue.color + ] + ) + let paddingString = NSAttributedString( + string: " \n", + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 4 + ), + .foregroundColor: DesignSystemAsset.lightRed.color + ] + ) + let busStopString = NSAttributedString( + string: busStop, + attributes: [ + .font: DesignSystemFontFamily.NanumSquareNeoOTF.light.font( + size: 15 + ), + .foregroundColor: UIColor.black + ] + ) + + let attrString = NSMutableAttributedString() + attrString.append(busString) + attrString.append(paddingString) + attrString.append(busStopString) + busInfoLabel.attributedText = attrString + } + + private func configureUI() { + backgroundColor = .clear + [removeBtn, stackView].forEach { + contentView.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + removeBtn.topAnchor.constraint(equalTo: contentView.topAnchor), + removeBtn.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor + ), + + stackView.topAnchor.constraint(equalTo: removeBtn.bottomAnchor), + stackView.centerXAnchor.constraint( + equalTo: contentView.centerXAnchor + ), + stackView.widthAnchor.constraint( + equalTo: contentView.widthAnchor, + multiplier: 0.9 + ), + stackView.heightAnchor.constraint( + equalToConstant: 95 + ), + stackView.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor + ), + ]) + } + + private func bind() { + removeBtn.rx.tap + .bind(to: removeBtnTapEvent) + .disposed(by: disposeBag) + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewController/AddRegularAlarmViewController.swift b/Projects/Feature/AlarmFeature/Sources/ViewController/AddRegularAlarmViewController.swift new file mode 100644 index 00000000..29f70a3f --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/ViewController/AddRegularAlarmViewController.swift @@ -0,0 +1,369 @@ +// +// AddRegularAlarmViewController.swift +// AlarmFeature +// +// Created by gnksbm on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +import RxSwift +import RxCocoa + +final class AddRegularAlarmViewController: UIViewController { + private let viewModel: AddRegularAlarmViewModel + + private let selectedWeekDay = BehaviorSubject<[Int]>(value: []) + private let disposeBag = DisposeBag() + + private let titleLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.extraBold.font( + size: 23 + ) + label.textAlignment = .left + label.textColor = .black + return label + }() + + private let firstDescriptionLabel: UILabel = { + let label = UILabel() + label.text = "1. 정류장 및 버스 등록하기" + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 16 + ) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private let searchBtn: SearchBusStopBtn = { + let btn = SearchBusStopBtn( + image: UIImage(systemName: "magnifyingglass"), + font: DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 14 + ), + color: .black + ) + btn.accessibilityIdentifier = "알람에서 검색뷰로 네비게이션" + return btn + }() + + private let secondDescriptionLabel: UILabel = { + let label = UILabel() + label.text = "2. 시간 등록하기" + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 16 + ) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private let timePicker: UIDatePicker = { + let picker = UIDatePicker() + picker.datePickerMode = .time + picker.preferredDatePickerStyle = .wheels + picker.setValue(UIColor.black, forKey: "textColor") + return picker + }() + + private let thirdDescriptionLabel: UILabel = { + let label = UILabel() + label.text = "3. 요일 등록하기" + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 16 + ) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private lazy var weekDayBtns = WeekDay.allCases.map { + makeWeekDayBtn(weekDay: $0) + } + + private lazy var weekDayBtnsStackView: UIStackView = { + let stackView = UIStackView( + arrangedSubviews: weekDayBtns + ) + stackView.distribution = .equalSpacing + stackView.alignment = .fill + return stackView + }() + + private let completeBtn = BottomButton(title: "완료") + + init(viewModel: AddRegularAlarmViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func viewDidLoad() { + super.viewDidLoad() + configureUI() + setNavigation() + bind() + } + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if navigationController?.isNavigationBarHidden == true { + navigationController?.setNavigationBarHidden( + false, + animated: true + ) + } + } + + public override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + + private func configureUI() { + view.backgroundColor = .white + [ + titleLabel, + firstDescriptionLabel, + searchBtn, + secondDescriptionLabel, + timePicker, + thirdDescriptionLabel, + weekDayBtnsStackView, + completeBtn + ].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + let safeArea = view.safeAreaLayoutGuide + let screenHeight = UIScreen.main.bounds.height + let descriptionGap: CGFloat = screenHeight > 700 ? 35 : 20 + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint( + equalTo: safeArea.topAnchor, + constant: 10 + ), + titleLabel.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 15 + ), + + firstDescriptionLabel.topAnchor.constraint( + equalTo: titleLabel.bottomAnchor, + constant: 30 + ), + + firstDescriptionLabel.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 20 + ), + + searchBtn.topAnchor.constraint( + equalTo: firstDescriptionLabel.bottomAnchor, + constant: 15 + ), + searchBtn.centerXAnchor.constraint( + equalTo: safeArea.centerXAnchor + ), + searchBtn.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.8 + ), + + secondDescriptionLabel.topAnchor.constraint( + equalTo: searchBtn.bottomAnchor, + constant: descriptionGap + ), + secondDescriptionLabel.leadingAnchor.constraint( + equalTo: firstDescriptionLabel.leadingAnchor + ), + + timePicker.topAnchor.constraint( + equalTo: secondDescriptionLabel.bottomAnchor + ), + timePicker.centerXAnchor.constraint( + equalTo: safeArea.centerXAnchor + ), + timePicker.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.8 + ), + + thirdDescriptionLabel.topAnchor.constraint( + equalTo: timePicker.bottomAnchor, + constant: descriptionGap + ), + thirdDescriptionLabel.leadingAnchor.constraint( + equalTo: firstDescriptionLabel.leadingAnchor + ), + + weekDayBtnsStackView.topAnchor.constraint( + equalTo: thirdDescriptionLabel.bottomAnchor, + constant: 20 + ), + weekDayBtnsStackView.centerXAnchor.constraint( + equalTo: safeArea.centerXAnchor + ), + weekDayBtnsStackView.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.8 + ), + weekDayBtnsStackView.heightAnchor.constraint( + equalToConstant: 40 + ), + + completeBtn.centerXAnchor.constraint( + equalTo: safeArea.centerXAnchor + ), + completeBtn.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.5 + ), + ]) + + if screenHeight > 700 { + completeBtn.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor, + constant: -40 + ).isActive = true + } else { + completeBtn.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor, + constant: -5 + ).isActive = true + } + } + + private func bind() { + let output = viewModel.transform( + input: .init( + viewWillAppear: rx + .methodInvoked( + #selector(UIViewController.viewWillAppear) + ) + .map { _ in }, + searchBtnTapEvent: searchBtn.rx.tap.asObservable(), + dateSelectEvent: timePicker.rx.date.asObservable(), + weekDayBtnTapEvent: Observable.merge( + weekDayBtns + .map { btn in + btn.rx.tap + .map { _ in + btn.tag + } + } + ), + completeBtnTapEvent: completeBtn.rx.tap.asObservable() + ) + ) + + output.title + .bind(to: titleLabel.rx.text) + .disposed(by: disposeBag) + output.regularAlarm + .map { response in + let title = response.busStopName.isEmpty + || response.busName.isEmpty ? + "정류장 및 버스 찾기" : + "\(response.busStopName), \(response.busName)" + return title + } + .withUnretained(self) + .subscribe( + onNext: { viewController, title in + viewController.searchBtn.updateTitle(title: title) + } + ) + .disposed(by: disposeBag) + + output.regularAlarm + .withUnretained(self) + .subscribe( + onNext: { viewController, response in + viewController.weekDayBtns + .forEach { btn in + var color: UIColor + if response.weekday.contains(btn.tag) { + color = DesignSystemAsset.weekDayBlue.color + btn.setTitleColor(.white, for: .normal) + } else { + color = DesignSystemAsset.weekDayGray.color + btn.setTitleColor(.black, for: .normal) + } + btn.backgroundColor = color + } + let completeEnabled = !response.weekday.isEmpty + && !response.busStopName.isEmpty + && !response.busName.isEmpty + + viewController.completeBtn.isEnabled = completeEnabled + } + ) + .disposed(by: disposeBag) + + output.regularAlarm + .map { response in + response.time + } + .bind(to: timePicker.rx.date) + .disposed(by: disposeBag) + } + + private func setNavigation() { + navigationController?.navigationBar.topItem?.title = "" + } + + private func makeWeekDayBtn(weekDay: WeekDay) -> UIButton { + let btn = CircleButton(baseLine: .height) + btn.tag = weekDay.rawValue + btn.titleLabel?.font = .systemFont(ofSize: 16) + btn.setTitle(weekDay.toString, for: .normal) + btn.setTitleColor(.black, for: .normal) + btn.backgroundColor = DesignSystemAsset.weekDayGray.color + return btn + } +} + +extension AddRegularAlarmViewController { + enum WeekDay: Int, CaseIterable { + case monday = 1, + tuesday, + wednesday, + thursday, + friday, + saturday, + sunday = 0 + + var toString: String { + switch self { + case .monday: + return "월" + case .tuesday: + return "화" + case .wednesday: + return "수" + case .thursday: + return "목" + case .friday: + return "금" + case .saturday: + return "토" + case .sunday: + return "일" + } + } + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewController/AlarmViewController.swift b/Projects/Feature/AlarmFeature/Sources/ViewController/AlarmViewController.swift deleted file mode 100644 index 965ef3a9..00000000 --- a/Projects/Feature/AlarmFeature/Sources/ViewController/AlarmViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -import UIKit - -import RxSwift - -public final class AlarmViewController: UIViewController { - private let viewModel: AlarmViewModel - - public init(viewModel: AlarmViewModel) { - self.viewModel = viewModel - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - } -} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewController/RegularAlarmViewController.swift b/Projects/Feature/AlarmFeature/Sources/ViewController/RegularAlarmViewController.swift new file mode 100644 index 00000000..c0167621 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/ViewController/RegularAlarmViewController.swift @@ -0,0 +1,191 @@ +import UIKit + +import Domain +import DesignSystem +import RxSwift + +public final class RegularAlarmViewController: UIViewController { + private let viewModel: RegularAlarmViewModel + + private var dataSource: RegularAlarmDataSource! + private var disposeBag = DisposeBag() + private var editItemSelected = PublishSubject() + private var removeItemSelected = PublishSubject() + + private let emptyRegularAlarmView = EmptyRegularAlarmView() + private let floatingBtnSpacingView = UIView() + + private let titleLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.extraBold.font( + size: 25 + ) + label.text = "정기알람" + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private lazy var alarmTableView: UITableView = { + let tableView = UITableView() + tableView.backgroundColor = .white + tableView.separatorStyle = .none + tableView.backgroundView = emptyRegularAlarmView + tableView.register(RegularAlarmTVCell.self) + tableView.tableFooterView = floatingBtnSpacingView + return tableView + }() + + private let addBtn: BottomButton = { + let addBtn = BottomButton(title: "추가하기") + addBtn.accessibilityIdentifier = "정규알람 추가하기" + return addBtn + }() + + public init(viewModel: RegularAlarmViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func viewDidLoad() { + super.viewDidLoad() + configureUI() + bind() + configureDataSource() + } + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + + private func configureUI() { + view.backgroundColor = .white + + [floatingBtnSpacingView, titleLabel, alarmTableView, addBtn].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + let safeArea = view.safeAreaLayoutGuide + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint( + equalTo: safeArea.topAnchor, + constant: 15 + ), + titleLabel.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 20 + ), + + alarmTableView.topAnchor.constraint( + equalTo: titleLabel.bottomAnchor + ), + alarmTableView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor + ), + alarmTableView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor + ), + alarmTableView.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor + ), + + addBtn.centerXAnchor.constraint(equalTo: safeArea.centerXAnchor), + addBtn.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.5 + ), + addBtn.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor, + constant: -40 + ), + + floatingBtnSpacingView.widthAnchor.constraint( + equalTo: safeArea.widthAnchor + ), + floatingBtnSpacingView.heightAnchor.constraint( + equalTo: addBtn.heightAnchor, + constant: 60 + ) + ]) + } + + private func bind() { + let output = viewModel.transform( + input: .init( + viewWillAppearEvent: rx + .methodInvoked(#selector(UIViewController.viewWillAppear)) + .map { _ in }, + addBtnTapEvent: addBtn.rx.tap.asObservable(), + editItemSelected: editItemSelected, + removeItemSelected: removeItemSelected + ) + ) + + output.regularAlarmList + .withUnretained(self) + .observe(on: MainScheduler.asyncInstance) + .subscribe( + onNext: { viewController, responses in + if responses.isEmpty { + viewController.alarmTableView.backgroundView + = viewController.emptyRegularAlarmView + } else { + viewController.alarmTableView.backgroundView = nil + } + viewController.updateSnapshot(responses: responses) + } + ) + .disposed(by: disposeBag) + } + + private func configureDataSource() { + dataSource = .init( + tableView: alarmTableView + ) { [weak self] tableView, indexPath, item in + guard let self else { return .init() } + let cell = tableView.dequeueReusableCell( + withIdentifier: RegularAlarmTVCell.identifier, + for: indexPath + ) as? RegularAlarmTVCell + cell?.updateUI(response: item) + let tapGesture = UITapGestureRecognizer() + cell?.contentView.addGestureRecognizer(tapGesture) + tapGesture.rx.event + .map { _ in + item + } + .bind(to: editItemSelected) + .disposed(by: disposeBag) + cell?.removeBtnTapEvent + .map { _ in + item + } + .bind(to: self.removeItemSelected) + .disposed(by: self.disposeBag) + return cell + } + } + + private func updateSnapshot(responses: [RegularAlarmResponse]) { + var snapshot = RegularAlarmSnapshot() + snapshot.appendSections([0]) + snapshot.appendItems(responses) + dataSource.apply(snapshot) + } +} + +extension RegularAlarmViewController { + typealias RegularAlarmDataSource + = UITableViewDiffableDataSource + typealias RegularAlarmSnapshot + = NSDiffableDataSourceSnapshot +} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewModel/AddRegularAlarmViewModel.swift b/Projects/Feature/AlarmFeature/Sources/ViewModel/AddRegularAlarmViewModel.swift new file mode 100644 index 00000000..8c0f16da --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/ViewModel/AddRegularAlarmViewModel.swift @@ -0,0 +1,140 @@ +// +// AddRegularAlarmViewModel.swift +// AlarmFeature +// +// Created by gnksbm on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core +import Domain +import FeatureDependency + +import RxSwift +import RxRelay + +final class AddRegularAlarmViewModel: ViewModel { + private let alarmToEdit: RegularAlarmResponse? + private let coordinator: AddRegularAlarmCoordinator + @Injected(RegularAlarmEditingService.self) + private var regularAlarmEditingService: RegularAlarmEditingService + @Injected(AddRegularAlarmUseCase.self) + private var useCase: AddRegularAlarmUseCase + + private let disposeBag = DisposeBag() + + init( + alarmToEdit: RegularAlarmResponse? = nil, + coordinator: AddRegularAlarmCoordinator + ) { + self.alarmToEdit = alarmToEdit + self.coordinator = coordinator + } + + deinit { + regularAlarmEditingService.resetManagedObject() + coordinator.finish() + } + + func transform(input: Input) -> Output { + let output = Output( + title: .init(value: "추가하기"), + regularAlarm: regularAlarmEditingService.managedAlarm + ) + if let alarmToEdit { + output.title.accept("수정하기") + regularAlarmEditingService.update(response: alarmToEdit) + } + + input.viewWillAppear + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.useCase.checkNotificationAuth() + } + ) + .disposed(by: disposeBag) + + input.searchBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.coordinator.startSearchFlow() + } + ) + .disposed(by: disposeBag) + + input.dateSelectEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, time in + viewModel.regularAlarmEditingService.update(time: time) + } + ) + .disposed(by: disposeBag) + + input.weekDayBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, rawValue in + let dataToUpdated = viewModel + .regularAlarmEditingService.managedAlarm.value + let newWeekday: [Int] + if dataToUpdated.weekday.contains(rawValue) { + newWeekday = dataToUpdated.weekday.filter { + $0 != rawValue + } + } else { + newWeekday = dataToUpdated.weekday + [rawValue] + } + viewModel.regularAlarmEditingService.update( + weekday: newWeekday + ) + } + ) + .disposed(by: disposeBag) + + input.completeBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + switch output.title.value { + case "추가하기": + viewModel.useCase.addNewAlarm( + response: output.regularAlarm.value + ) + case "수정하기": + viewModel.useCase.editAlarm( + response: output.regularAlarm.value + ) + default: + #if DEBUG + print("\(String(describing: self)): 잘못된 타이틀") + #endif + } + viewModel.coordinator.finishFlow() + viewModel.regularAlarmEditingService.resetManagedObject() + } + ) + .disposed(by: disposeBag) + + return output + } +} + +extension AddRegularAlarmViewModel { + struct Input { + let viewWillAppear: Observable + let searchBtnTapEvent: Observable + let dateSelectEvent: Observable + let weekDayBtnTapEvent: Observable + let completeBtnTapEvent: Observable + } + + struct Output { + let title: BehaviorRelay + let regularAlarm: BehaviorRelay + } +} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewModel/AlarmViewModel.swift b/Projects/Feature/AlarmFeature/Sources/ViewModel/AlarmViewModel.swift deleted file mode 100644 index 5d30a62e..00000000 --- a/Projects/Feature/AlarmFeature/Sources/ViewModel/AlarmViewModel.swift +++ /dev/null @@ -1,26 +0,0 @@ -import Foundation - -import Domain -import FeatureDependency - -import RxSwift - -public final class AlarmViewModel: ViewModel { - private let disposeBag = DisposeBag() - - public init() { - } - - public func transform(input: Input) -> Output { - let output = Output() - return output - } -} - -extension AlarmViewModel { - public struct Input { - } - - public struct Output { - } -} diff --git a/Projects/Feature/AlarmFeature/Sources/ViewModel/RegularAlarmViewModel.swift b/Projects/Feature/AlarmFeature/Sources/ViewModel/RegularAlarmViewModel.swift new file mode 100644 index 00000000..a798f6b3 --- /dev/null +++ b/Projects/Feature/AlarmFeature/Sources/ViewModel/RegularAlarmViewModel.swift @@ -0,0 +1,91 @@ +import Foundation + +import Core +import Domain +import FeatureDependency + +import RxSwift + +public final class RegularAlarmViewModel: ViewModel { + private let coordinator: RegularAlarmCoordinator + @Injected(RegularAlarmUseCase.self) var useCase: RegularAlarmUseCase + + private let disposeBag = DisposeBag() + + public init(coordinator: RegularAlarmCoordinator) { + self.coordinator = coordinator + } + + deinit { + coordinator.finish() + } + + public func transform(input: Input) -> Output { + let output = Output( + regularAlarmList: .init() + ) + + input.viewWillAppearEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.useCase.fetchAlarm() + } + ) + .disposed(by: disposeBag) + + input.addBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.coordinator.startAddRegularAlarmFlow() + } + ) + .disposed(by: disposeBag) + + input.editItemSelected + .withUnretained(self) + .subscribe( + onNext: { viewModel, response in + viewModel.coordinator.startAddRegularAlarmFlow( + with: response + ) + } + ) + .disposed(by: disposeBag) + + input.removeItemSelected + .withUnretained(self) + .subscribe( + onNext: { viewModel, response in + do { + try viewModel.useCase.removeAlarm(response: response) + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + } + ) + .disposed(by: disposeBag) + + useCase.fetchedAlarm + .bind(to: output.regularAlarmList) + .disposed(by: disposeBag) + + return output + } +} + +extension RegularAlarmViewModel { + public struct Input { + let viewWillAppearEvent: Observable + let addBtnTapEvent: Observable + let editItemSelected: Observable + let removeItemSelected: Observable + } + + public struct Output { + let regularAlarmList: PublishSubject<[RegularAlarmResponse]> + } +} diff --git a/Projects/Feature/BusStopFeature/Demo/AppDelegate.swift b/Projects/Feature/BusStopFeature/Demo/AppDelegate.swift index dd143edc..afb131dd 100644 --- a/Projects/Feature/BusStopFeature/Demo/AppDelegate.swift +++ b/Projects/Feature/BusStopFeature/Demo/AppDelegate.swift @@ -1,8 +1,16 @@ import UIKit +import Core +import Domain +import FeatureDependency + +import RxSwift + @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // register 함수만들고 앱 실행될때 함수 호출될 수 있게! + register() return true } @@ -14,4 +22,15 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { } + + func register() { + DIContainer.register( + type: BusStopUseCase.self, + DefaultBusStopUseCase( + busStopArrivalInfoRepository: MockBusStopArrivalInfoRepository(), + favoritesRepository: MockFavoritesRepository(), + regularAlarmEditingService: MockRegualrAlarmEditingService() + ) + ) + } } diff --git a/Projects/Feature/BusStopFeature/Demo/SceneDelegate.swift b/Projects/Feature/BusStopFeature/Demo/SceneDelegate.swift index 3372ff9c..1868c0f0 100644 --- a/Projects/Feature/BusStopFeature/Demo/SceneDelegate.swift +++ b/Projects/Feature/BusStopFeature/Demo/SceneDelegate.swift @@ -1,5 +1,7 @@ import UIKit +import FeatureDependency +import Domain import BusStopFeature final class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -17,7 +19,11 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { window?.makeKeyAndVisible() let busstopCoordinator = DefaultBusStopCoordinator( - navigationController: navigationController + parent: nil, + navigationController: navigationController, + busStopId: "", + coordinatorProvider: MockCoordinatorProvider(), + flow: .fromHome ) busstopCoordinator.start() } diff --git a/Projects/Feature/BusStopFeature/Sources/Coordinator/BusStopCoordinator.swift b/Projects/Feature/BusStopFeature/Sources/Coordinator/BusStopCoordinator.swift deleted file mode 100644 index c19c1af9..00000000 --- a/Projects/Feature/BusStopFeature/Sources/Coordinator/BusStopCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol BusStopCoordinator: Coordinator { -} diff --git a/Projects/Feature/BusStopFeature/Sources/Coordinator/DafaultBusStopCoordinator.swift b/Projects/Feature/BusStopFeature/Sources/Coordinator/DafaultBusStopCoordinator.swift index 32783d52..20fa61d9 100644 --- a/Projects/Feature/BusStopFeature/Sources/Coordinator/DafaultBusStopCoordinator.swift +++ b/Projects/Feature/BusStopFeature/Sources/Coordinator/DafaultBusStopCoordinator.swift @@ -1,22 +1,69 @@ import UIKit +import Domain import FeatureDependency public final class DefaultBusStopCoordinator: BusStopCoordinator { - public var childCoordinators: [Coordinator] = [] + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController + public var coordinatorProvider: CoordinatorProvider + private var busStopId: String + private let flow: FlowState + public var coordinatorType: CoordinatorType = .busStop - public init(navigationController: UINavigationController) { + public init( + parent: Coordinator?, + navigationController: UINavigationController, + busStopId: String, + coordinatorProvider: CoordinatorProvider, + flow: FlowState + ) { + self.parent = parent self.navigationController = navigationController + self.busStopId = busStopId + self.coordinatorProvider = coordinatorProvider + self.flow = flow } public func start() { - let busstopViewController = BusStopViewController( - viewModel: BusStopViewModel() + let fetchData = ArrivalInfoRequest(busStopId: busStopId) + let busStopViewController = BusStopViewController( + viewModel: BusStopViewModel( + coordinator: self, + fetchData: fetchData + ), + flow: flow ) - navigationController.setViewControllers( - [busstopViewController], - animated: false + navigationController.pushViewController( + busStopViewController, + animated: true ) } } + +extension DefaultBusStopCoordinator { + // 정류장 위치뷰로 이동하기 위한 + public func busStopMapLocation(busStopId: String) { + let nearMapCoordinator = coordinatorProvider.makeNearMapCoordinator( + parent: self, + navigationController: navigationController, + flow: flow, + busStopId: busStopId + ) + childs.append(nearMapCoordinator) + nearMapCoordinator.start() + } + + public func moveToRegualrAlarm() { + let alarmCoordinator = coordinatorProvider + .makeAddRegularAlarmCoordinator( + parent: self, + navigationController: navigationController, + flow: .fromAlarm + ) + childs.append(alarmCoordinator) + alarmCoordinator.start() + } + +} diff --git a/Projects/Feature/BusStopFeature/Sources/View/BusStopInfoHeaderView.swift b/Projects/Feature/BusStopFeature/Sources/View/BusStopInfoHeaderView.swift new file mode 100644 index 00000000..3f81818b --- /dev/null +++ b/Projects/Feature/BusStopFeature/Sources/View/BusStopInfoHeaderView.swift @@ -0,0 +1,172 @@ +// +// BusStopInfoHeaderView.swift +// BusStopFeatureDemo +// +// Created by Jisoo HAM on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +public final class BusStopInfoHeaderView: UIView { + + public let navigationBtn: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(systemName: "chevron.left") + config.baseForegroundColor = .white + config.imagePadding = 7 + var imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 17) + ) + imgConfig = UIImage.SymbolConfiguration(weight: .semibold) + config.preferredSymbolConfigurationForImage = imgConfig + let btn = UIButton(configuration: config) + return btn + }() + + private let busStopNumLb: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .regular.font(size: 15) + label.textColor = .white + return label + }() + + public let busStopNameLb: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .extraBold.font(size: 18) + label.textColor = .white + label.textAlignment = .center + return label + }() + + private let nextStopNameLb: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .regular.font(size: 14) + label.textColor = .white + return label + }() + + public let mapBtn: UIButton = { + var config = UIButton.Configuration.filled() + + config.image = UIImage(systemName: "map") + + var title = AttributedString.init(stringLiteral: "지도") + title.font = DesignSystemFontFamily.NanumSquareNeoOTF + .regular.font(size: 10) + config.attributedTitle = title + config.baseBackgroundColor = .white + config.baseForegroundColor = DesignSystemAsset.favoritesOrange.color + config.imagePadding = 7 + let imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 11) + ) + config.preferredSymbolConfigurationForImage = imgConfig + config.cornerStyle = .capsule + let btn = UIButton(configuration: config) + return btn + }() + + private let busStopIcon: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.busStop.image + return imageView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + + backgroundColor = DesignSystemAsset.headerBlue.color + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func bindUI( + routeId: String?, + busStopName: String, + nextStopName: String + ) { + busStopNumLb.text = routeId + busStopNameLb.text = busStopName + nextStopNameLb.text = nextStopName + " 방면" + } +} + +extension BusStopInfoHeaderView { + private func configureUI() { + + addSubview(navigationBtn) + navigationBtn.translatesAutoresizingMaskIntoConstraints = false + + [busStopIcon, busStopNumLb, busStopNameLb, + nextStopNameLb, mapBtn] + .forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + addSubview($0) + $0.centerXAnchor.constraint( + equalTo: centerXAnchor + ).isActive = true + } + + NSLayoutConstraint.activate([ + busStopIcon.topAnchor.constraint( + equalTo: topAnchor, + constant: 15 + ), + busStopIcon.widthAnchor.constraint( + equalToConstant: 60 + ), + busStopIcon.heightAnchor.constraint( + equalToConstant: 60 + ), + busStopNumLb.topAnchor.constraint( + equalTo: busStopIcon.bottomAnchor, + constant: 3 + ), + busStopNumLb.heightAnchor.constraint(equalToConstant: 15), + busStopNameLb.topAnchor.constraint( + equalTo: busStopNumLb.bottomAnchor, + constant: 10 + ), + busStopNameLb.heightAnchor.constraint(equalToConstant: 18), + busStopNameLb.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 15 + ), + busStopNameLb.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -15 + ), + nextStopNameLb.topAnchor.constraint( + equalTo: busStopNameLb.bottomAnchor, + constant: 10 + ), + nextStopNameLb.heightAnchor.constraint(equalToConstant: 15), + mapBtn.topAnchor.constraint( + equalTo: nextStopNameLb.bottomAnchor, + constant: 12 + ), + mapBtn.bottomAnchor.constraint( + equalTo: bottomAnchor, + constant: -20 + ), + mapBtn.heightAnchor.constraint(equalToConstant: 25), + navigationBtn.topAnchor.constraint( + equalTo: topAnchor, + constant: 20 + ), + navigationBtn.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 15 + ) + ]) + } +} diff --git a/Projects/Feature/BusStopFeature/Sources/View/BusStopTVHeaderView.swift b/Projects/Feature/BusStopFeature/Sources/View/BusStopTVHeaderView.swift new file mode 100644 index 00000000..56f5b359 --- /dev/null +++ b/Projects/Feature/BusStopFeature/Sources/View/BusStopTVHeaderView.swift @@ -0,0 +1,55 @@ +// +// BusStopHeaderView.swift +// BusStopFeatureDemo +// +// Created by Jisoo HAM on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +final class BusStopTVHeaderView: UITableViewHeaderFooterView { + + private let titleLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily + .NanumSquareNeoOTF.regular.font(size: 16.0) + label.textColor = DesignSystemAsset.settingColor.color + label.translatesAutoresizingMaskIntoConstraints = false + return label + }() + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + + configureUI() + } + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func bind(with title: String) { + titleLabel.text = title + } + + private func configureUI() { + addSubview(titleLabel) + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint( + equalTo: topAnchor, + constant: 10 + ), + titleLabel.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 20 + ), + titleLabel.bottomAnchor.constraint( + equalTo: bottomAnchor, + constant: -10 + ) + ]) + } +} diff --git a/Projects/Feature/BusStopFeature/Sources/View/BusTableViewCell.swift b/Projects/Feature/BusStopFeature/Sources/View/BusTableViewCell.swift new file mode 100644 index 00000000..c6a79a10 --- /dev/null +++ b/Projects/Feature/BusStopFeature/Sources/View/BusTableViewCell.swift @@ -0,0 +1,273 @@ +// +// BusTableViewCell.swift +// BusStopFeatureDemo +// +// Created by Jisoo HAM on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +import RxSwift + +public final class BusTableViewCell: UITableViewCell { + public var disposeBag = DisposeBag() + + private let firstArrivalInfoView = ArrivalInfoView() + private let secondArrivalInfoView = ArrivalInfoView() + public let starBtnTapEvent = PublishSubject() + public let alarmBtnTapEvent = PublishSubject() + + private lazy var starBtn: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(systemName: "star") + config.contentInsets = NSDirectionalEdgeInsets( + top: 10, + leading: 15, + bottom: 10, + trailing: 5 + ) + let imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 13) + ) + config.preferredSymbolConfigurationForImage = imgConfig + config.baseForegroundColor = DesignSystemAsset.mainColor.color + let btn = UIButton(configuration: config) + return btn + }() + + private lazy var alarmBtn: UIButton = { + var config = UIButton.Configuration.plain() + let imgConfig = UIImage.SymbolConfiguration( + pointSize: 12 + ) + config.preferredSymbolConfigurationForImage = imgConfig + config.baseForegroundColor = DesignSystemAsset.mainColor.color + let btn = UIButton(configuration: config) + btn.widthAnchor.constraint(equalToConstant: 20).isActive = true + btn.isHidden = true + return btn + }() + + public let busNumber: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .bold.font(size: 18) + label.textColor = DesignSystemAsset.blueBus.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.6 + return label + }() + + private let nextStopName: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .regular.font(size: 14) + label.textColor = DesignSystemAsset.remainingColor.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.8 + return label + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .white + + configureUI() + buttonTap() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func updateBtn( + favorite: Bool, + alarm: Bool + ) { + changeFavBtnColor(isFavoriteOn: favorite) + changeAlarmBtnColor(isAlarmOn: alarm) + } + + public func updateBusRoute( + routeName: String, + nextRouteName: String + ) { + busNumber.text = routeName + nextStopName.text = nextRouteName + " 방면" + } + + public func updateFirstArrival( + firstArrivalTime: String, + firstArrivalRemaining: String + ) { + firstArrivalInfoView.updateUI( + time: firstArrivalTime, remainingStops: firstArrivalRemaining + ) + } + + public func updateSecondArrival( + secondArrivalTime: String, + secondArrivalRemaining: String + ) { + secondArrivalInfoView.updateUI( + time: secondArrivalTime, remainingStops: secondArrivalRemaining + ) + } + public override func prepareForReuse() { + super.prepareForReuse() + + [busNumber, nextStopName].forEach { + $0.text = nil + } + [firstArrivalInfoView, secondArrivalInfoView].forEach { + $0.prepareForReuse() + } + + disposeBag = DisposeBag() + buttonTap() + } + + private func buttonTap() { + starBtn.rx.tap + .map({ _ in }) + .withUnretained(self) + .subscribe(onNext: { cell, _ in + cell.starBtnTapEvent.onNext(()) + }) + .disposed(by: disposeBag) + +// alarmBtn.rx.tap +// .map({ _ in +// }) +// .withUnretained(self) +// .subscribe(onNext: { cell, _ in +// cell.alarmBtnTapEvent.onNext(()) +// }) +// .disposed(by: disposeBag) + } + + private func changeFavBtnColor(isFavoriteOn: Bool) { + + guard var config = starBtn.configuration + else { return } + + config.image = isFavoriteOn + ? UIImage(systemName: "star.fill") + : UIImage(systemName: "star") + + config.baseForegroundColor + = isFavoriteOn + ? DesignSystemAsset.carrotOrange.color + : DesignSystemAsset.mainColor.color + + starBtn.configuration = config + } + + private func changeAlarmBtnColor(isAlarmOn: Bool) { + guard var config = alarmBtn.configuration + else { return } + + config.contentInsets = NSDirectionalEdgeInsets( + top: 10, + leading: 5, + bottom: 10, + trailing: 10 + ) + + config.image = isAlarmOn + ? UIImage(systemName: "alarm.waves.left.and.right.fill") + : UIImage(systemName: "alarm") + + config.baseForegroundColor = isAlarmOn + ? DesignSystemAsset.carrotOrange.color + : DesignSystemAsset.mainColor.color + + alarmBtn.configuration = config + } +} + +extension BusTableViewCell { + private func configureUI() { + + [starBtn, busNumber, nextStopName, + firstArrivalInfoView, secondArrivalInfoView, alarmBtn] + .forEach { components in + components.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(components) + } + + NSLayoutConstraint.activate([ + starBtn.topAnchor.constraint( + equalTo: contentView.topAnchor, + constant: 15 + ), + starBtn.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor + ), + + busNumber.topAnchor.constraint( + equalTo: contentView.topAnchor, + constant: 12 + ), + busNumber.leadingAnchor.constraint( + equalTo: starBtn.trailingAnchor, + constant: 10 + ), + busNumber.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.38 + ), + + nextStopName.topAnchor.constraint( + equalTo: busNumber.bottomAnchor, + constant: 8 + ), + nextStopName.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor, + constant: -8 + ), + nextStopName.leadingAnchor.constraint( + equalTo: starBtn.trailingAnchor, + constant: 10 + ), + nextStopName.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.38 + ), + + firstArrivalInfoView.centerYAnchor.constraint( + equalTo: contentView.centerYAnchor + ), + firstArrivalInfoView.leadingAnchor.constraint( + equalTo: nextStopName.trailingAnchor, + constant: 10 + ), + firstArrivalInfoView.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.17 + ), + + secondArrivalInfoView.centerYAnchor.constraint( + equalTo: contentView.centerYAnchor + ), + secondArrivalInfoView.leadingAnchor.constraint( + equalTo: firstArrivalInfoView.trailingAnchor, + constant: 10 + ), + secondArrivalInfoView.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.17 + ), + + alarmBtn.topAnchor.constraint( + equalTo: contentView.topAnchor, + constant: 15 + ), + alarmBtn.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor, + constant: -10 + ), + + ]) + + } +} diff --git a/Projects/Feature/BusStopFeature/Sources/View/RegularAlarmForBusTableViewCell.swift b/Projects/Feature/BusStopFeature/Sources/View/RegularAlarmForBusTableViewCell.swift new file mode 100644 index 00000000..92b68fd9 --- /dev/null +++ b/Projects/Feature/BusStopFeature/Sources/View/RegularAlarmForBusTableViewCell.swift @@ -0,0 +1,135 @@ +// +// RegularAlarmForBusTableViewCell.swift +// BusStopFeature +// +// Created by Jisoo HAM on 3/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +import RxSwift + +public final class RegularAlarmForBusTableViewCell: UITableViewCell { + public var disposeBag = DisposeBag() + + public var busNumberLb: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .bold.font(size: 16) + label.textColor = DesignSystemAsset.blueBus.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.6 + return label + }() + + private var nextStationLb: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF + .bold.font(size: 16) + label.textColor = DesignSystemAsset.remainingColor.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.6 + return label + }() + + private var nextSymbol: UIImageView = { + let configuration = UIImage.SymbolConfiguration( + pointSize: 16, + weight: .regular + ) + let img = UIImage( + systemName: "chevron.right", + withConfiguration: configuration + ) + let image = UIImageView(image: img) + image.tintColor = DesignSystemAsset.remainingColor.color + return image + }() + + public let clearBtn: UIButton = { + let button = UIButton() + button.backgroundColor = .clear + button.isHighlighted = true + return button + }() + + override public init( + style: UITableViewCell.CellStyle, + reuseIdentifier: String? + ) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + backgroundColor = .white + + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func prepareForReuse() { + super.prepareForReuse() + [busNumberLb, nextStationLb] + .forEach { $0.text = "" } + + disposeBag = DisposeBag() + } + + public func updateUI( + busNumber: String, + nextStopName: String + ) { + busNumberLb.text = busNumber + nextStationLb.text = nextStopName + } + + private func configureUI() { + [busNumberLb, nextStationLb, nextSymbol, clearBtn] + .forEach { component in + component.translatesAutoresizingMaskIntoConstraints = false + contentView.addSubview(component) + } + + NSLayoutConstraint.activate([ + clearBtn.widthAnchor.constraint(equalTo: widthAnchor), + clearBtn.heightAnchor.constraint(equalToConstant: 60), + clearBtn.topAnchor.constraint(equalTo: topAnchor), + clearBtn.leadingAnchor.constraint(equalTo: leadingAnchor), + busNumberLb.topAnchor.constraint( + equalTo: topAnchor, + constant: 20 + ), + nextStationLb.topAnchor.constraint( + equalTo: topAnchor, + constant: 20 + ), + nextSymbol.topAnchor.constraint( + equalTo: topAnchor, + constant: 20 + ), + busNumberLb.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 30 + ), + busNumberLb.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.27 + ), + busNumberLb.trailingAnchor.constraint( + equalTo: nextStationLb.leadingAnchor, + constant: -10 + ), + nextStationLb.widthAnchor.constraint( + equalToConstant: contentView.frame.width * 0.55 + ), + + nextSymbol.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -30 + ), + ]) + + } +} diff --git a/Projects/Feature/BusStopFeature/Sources/ViewController/BusStopViewController.swift b/Projects/Feature/BusStopFeature/Sources/ViewController/BusStopViewController.swift index 2b1e4dea..127b5ce8 100644 --- a/Projects/Feature/BusStopFeature/Sources/ViewController/BusStopViewController.swift +++ b/Projects/Feature/BusStopFeature/Sources/ViewController/BusStopViewController.swift @@ -1,20 +1,368 @@ import UIKit +import FeatureDependency +import DesignSystem +import Domain + import RxSwift public final class BusStopViewController: UIViewController { private let viewModel: BusStopViewModel - public init(viewModel: BusStopViewModel) { + private let disposeBag = DisposeBag() + private let mapBtnTapEvent = PublishSubject() + private let likeBusBtnTapEvent = PublishSubject() + private let alarmBtnTapEvent = PublishSubject() + private let tableCellTapEvent = PublishSubject() + + private var dataSource: BusStopDataSource! + private var snapshot: BusStopSnapshot! + private var flow: FlowState + + private let headerView: BusStopInfoHeaderView = BusStopInfoHeaderView() + private let scrollView: UIScrollView = UIScrollView() + private let contentView = UIView() + private lazy var busStopTableView: UITableView = { + let table = UITableView(frame: .zero, style: .insetGrouped) + table.register( + BusStopTVHeaderView.self, + forHeaderFooterViewReuseIdentifier: BusStopTVHeaderView.identifier + ) + table.delegate = self + table.isScrollEnabled = false + table.backgroundColor = DesignSystemAsset.tableViewColor.color + table.rowHeight = 60 + table.sectionHeaderHeight = 46 + table.sectionFooterHeight = 10 + table.accessibilityIdentifier = "정류장" + return table + }() + + private var tableViewHeightConstraint = NSLayoutConstraint() + + public init( + viewModel: BusStopViewModel, + flow: FlowState + ) { self.viewModel = viewModel + self.flow = flow + super.init(nibName: nil, bundle: nil) } - + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } public override func viewDidLoad() { super.viewDidLoad() + self.navigationController? + .interactivePopGestureRecognizer?.delegate = nil + + view.backgroundColor = .white + configureUI() + bind() + configureDataSource() + } + + public override func viewWillAppear(_ animated: Bool) { + if navigationController?.isNavigationBarHidden == false { + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + } + + private func bind() { + let refreshControl = scrollView.enableRefreshControl( + refreshStr: "당겨서 새로고침" + ) + + let input = BusStopViewModel.Input( + viewWillAppearEvent: rx + .methodInvoked(#selector(UIViewController.viewWillAppear)) + .map { _ in }, + likeBusBtnTapEvent: likeBusBtnTapEvent.asObservable(), + alarmBtnTapEvent: alarmBtnTapEvent.asObservable(), + mapBtnTapEvent: headerView.mapBtn.rx.tap.asObservable(), + refreshLoading + : refreshControl.rx.controlEvent(.valueChanged).asObservable(), + navigationBackBtnTapEvent + : headerView.navigationBtn.rx.tap.asObservable(), + cellSelectTapEvent: tableCellTapEvent.asObservable() + ) + + let output = viewModel.transform(input: input) + bindTableView(output: output) + + output.isRefreshing + .observe(on: MainScheduler.asyncInstance) + .subscribe(onNext: { refresh in + switch refresh { + case .fetchComplete: + refreshControl.endRefreshing() + case .fetching: + break + } + }) + .disposed(by: disposeBag) + } + + private func bindTableView(output: BusStopViewModel.Output) { + output.busStopArrivalInfoResponse + .observe(on: MainScheduler.asyncInstance) + .withUnretained(self) + .subscribe( + onNext: { viewController, response in + + viewController.headerView.bindUI( + routeId: response.busStopId, + busStopName: response.busStopName, + nextStopName: response.direction + ) + + viewController.updateSnapshot(busStopResponse: response) + } + ) + .disposed(by: disposeBag) + } + + private func updateSnapshot(busStopResponse: BusStopArrivalInfoResponse) { + snapshot = .init() + for busInfo in busStopResponse.buses { + let busTypeSection = busInfo.busType + if !snapshot.sectionIdentifiers.contains(busTypeSection) { + snapshot.appendSections([busTypeSection]) + } + snapshot.appendItems([busInfo], toSection: busTypeSection) + } + + dataSource.apply(snapshot, animatingDifferences: false) + + tableViewHeightConstraint.constant + = CGFloat(snapshot.numberOfSections) + * (busStopTableView.sectionHeaderHeight + + busStopTableView.sectionFooterHeight) + + CGFloat(snapshot.numberOfItems) + * busStopTableView.rowHeight + } + + private func configureDataSource() { + dataSource = .init( + tableView: busStopTableView, + cellProvider: { [weak self] tableView, indexPath, response in + switch self?.flow { + case .fromHome: + tableView.register( + BusTableViewCell.self, + forCellReuseIdentifier: BusTableViewCell.identifier + ) + guard let self = self, + let cell = self.configureCell( + tableView: tableView, + indexPath: indexPath, + response: response + ) + else { return UITableViewCell() } + + return cell + case .fromAlarm: + tableView.register( + RegularAlarmForBusTableViewCell.self, + forCellReuseIdentifier + : RegularAlarmForBusTableViewCell.identifier + ) + guard let self = self, + let cell = self.configureAlarmCell( + tableView: tableView, + indexPath: indexPath, + response: response + ) + else { return UITableViewCell() } + + return cell + case .none: + return UITableViewCell() + } + } + ) + } + + private func configureAlarmCell( + tableView: UITableView, + indexPath: IndexPath, + response: BusArrivalInfoResponse + ) -> RegularAlarmForBusTableViewCell? { + let cell = tableView.dequeueReusableCell( + withIdentifier: RegularAlarmForBusTableViewCell.identifier, + for: indexPath + ) as? RegularAlarmForBusTableViewCell + + cell?.updateUI( + busNumber: response.busName, + nextStopName: response.nextStation + ) + + cell?.busNumberLb.textColor = response.busType.toColor + + cell?.clearBtn.rx.tap + .map { _ in + response + } + .bind(to: tableCellTapEvent) + .disposed(by: cell!.disposeBag) + + return cell + } + + private func configureCell( + tableView: UITableView, + indexPath: IndexPath, + response: BusArrivalInfoResponse + ) -> BusTableViewCell? { + let cell = tableView.dequeueReusableCell( + withIdentifier: BusTableViewCell.identifier, + for: indexPath + ) as? BusTableViewCell + + cell?.updateBtn( + favorite: response.isFavorites, + alarm: response.isAlarmOn + ) + cell?.updateBusRoute( + routeName: response.busName, + nextRouteName: response.nextStation + ) + cell?.updateFirstArrival( + firstArrivalTime: response.firstArrivalState.toString, + firstArrivalRemaining: response.firstArrivalRemaining + ) + cell?.updateSecondArrival( + secondArrivalTime: response.secondArrivalState.toString, + secondArrivalRemaining: response.secondArrivalRemaining + ) + cell?.busNumber.textColor = response.busType.toColor + + cell?.selectionStyle = .none + + cell?.starBtnTapEvent + .map({ _ in + return response + }) + .subscribe(onNext: { [weak self] busInfo in + self?.likeBusBtnTapEvent.onNext(busInfo) + }) + .disposed(by: cell!.disposeBag) + +// cell?.alarmBtnTapEvent +// .map { _ in +// return response +// } +// .bind(to: self.alarmBtnTapEvent) +// .disposed(by: cell!.disposeBag) + + return cell } } + +extension BusStopViewController { + private func configureUI() { + [scrollView, contentView, headerView, busStopTableView] + .forEach { components in + components.translatesAutoresizingMaskIntoConstraints = false + } + + view.addSubview(scrollView) + + [headerView, busStopTableView] + .forEach { components in + contentView.addSubview(components) + } + + scrollView.addSubview(contentView) + + tableViewHeightConstraint = busStopTableView.heightAnchor + .constraint(equalToConstant: 0) + + NSLayoutConstraint.activate([ + headerView.topAnchor.constraint( + equalTo: contentView.topAnchor + ), + headerView.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor + ), + headerView.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor + ), + + busStopTableView.topAnchor.constraint( + equalTo: headerView.bottomAnchor + ), + busStopTableView.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor + ), + busStopTableView.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor + ), + busStopTableView.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor + ), + tableViewHeightConstraint, + + contentView.topAnchor.constraint( + equalTo: scrollView.contentLayoutGuide.topAnchor + ), + contentView.centerXAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.centerXAnchor + ), + contentView.widthAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.widthAnchor + ), + contentView.bottomAnchor.constraint( + equalTo: scrollView.contentLayoutGuide.bottomAnchor + ), + + scrollView.frameLayoutGuide.topAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.topAnchor + ), + scrollView.bottomAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.bottomAnchor + ), + scrollView.leadingAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.leadingAnchor + ), + scrollView.trailingAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.trailingAnchor + ), + ]) + } +} + +extension BusStopViewController: UITableViewDelegate { + public func tableView( + _ tableView: UITableView, + viewForHeaderInSection section: Int + ) -> UIView? { + guard let headerView = tableView.dequeueReusableHeaderFooterView( + withIdentifier: BusStopTVHeaderView.identifier + ) as? BusStopTVHeaderView else { return UIView() } + + let sectionIdentifier = dataSource.snapshot() + .sectionIdentifiers[section] + + headerView.bind(with: sectionIdentifier.toString) + + return headerView + } +} + +extension BusStopViewController { + typealias BusStopDataSource = + UITableViewDiffableDataSource + + typealias BusStopSnapshot = + NSDiffableDataSourceSnapshot + + +} diff --git a/Projects/Feature/BusStopFeature/Sources/ViewModel/BusStopViewModel.swift b/Projects/Feature/BusStopFeature/Sources/ViewModel/BusStopViewModel.swift index e5c85fe3..bed64a8d 100644 --- a/Projects/Feature/BusStopFeature/Sources/ViewModel/BusStopViewModel.swift +++ b/Projects/Feature/BusStopFeature/Sources/ViewModel/BusStopViewModel.swift @@ -1,26 +1,152 @@ import Foundation +import Core import Domain import FeatureDependency import RxSwift public final class BusStopViewModel: ViewModel { + private let coordinator: BusStopCoordinator + @Injected(BusStopUseCase.self) + private var useCase: BusStopUseCase private let disposeBag = DisposeBag() + private var fetchData: ArrivalInfoRequest - public init() { + public init( + coordinator: BusStopCoordinator, + fetchData: ArrivalInfoRequest + ) { + self.coordinator = coordinator + self.fetchData = fetchData + } + + deinit { + coordinator.finish() } public func transform(input: Input) -> Output { - let output = Output() + let output = Output( + busStopArrivalInfoResponse: .init(), + favorites: .init(value: .init([])), + isRefreshing: .init() + ) + + input.viewWillAppearEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + output.isRefreshing.onNext(.fetching) + viewModel.useCase.fetchBusArrivals( + request: viewModel.fetchData + ) + } + ) + .disposed(by: disposeBag) + + input.mapBtnTapEvent + .withLatestFrom( + output.busStopArrivalInfoResponse + ) { _, busStopInfo in + return busStopInfo + } + .withUnretained(self) + .subscribe { viewModel, busStopInfo in + viewModel.coordinator.busStopMapLocation( + busStopId: busStopInfo.busStopId + ) + } + .disposed(by: disposeBag) + + input.refreshLoading + .withUnretained(self) + .subscribe(onNext: { viewModel, _ in + output.isRefreshing.onNext(.fetching) + + viewModel.useCase.fetchBusArrivals( + request: viewModel.fetchData + ) + }) + .disposed(by: disposeBag) + + input.likeBusBtnTapEvent + .withLatestFrom( + output.busStopArrivalInfoResponse + ) { busInfo, busStopInfo in + return (busInfo, busStopInfo.busStopId) + } + .subscribe(onNext: { [weak self] busInfo, busStopId in + guard let self = self else { return } + self.useCase.handleFavorites( + busStop: busStopId, + bus: busInfo + ) + }) + .disposed(by: disposeBag) + + input.navigationBackBtnTapEvent + .withUnretained(self) + .subscribe { viewModel, _ in + viewModel.coordinator.finishFlow() + } + .disposed(by: disposeBag) + + input.cellSelectTapEvent + .withLatestFrom( + output.busStopArrivalInfoResponse + ) { busInfo, busStopInfo in + return (busInfo, busStopInfo) + } + .withUnretained(self) + .subscribe(onNext: { viewModel, arg1 in + let (busInfo, busStopInfo) = arg1 + viewModel.useCase.update( + busStopInfo: busStopInfo, + busInfo: busInfo + ) + viewModel.coordinator.finishFlow(upTo: .addAlarm) + }) + .disposed(by: disposeBag) + + useCase.busStopSection + .withUnretained(self) + .subscribe(onNext: { _, busStopInfo in + output.busStopArrivalInfoResponse.onNext(busStopInfo) + output.isRefreshing.onNext(.fetchComplete) + }) + .disposed(by: disposeBag) + + useCase.favorites + .bind(to: output.favorites) + .disposed(by: disposeBag) + return output } } +extension BusStopViewModel { + enum ViewRefreshState { + case fetching, fetchComplete + } +} + extension BusStopViewModel { public struct Input { + let viewWillAppearEvent: Observable + let likeBusBtnTapEvent: Observable + let alarmBtnTapEvent: Observable + let mapBtnTapEvent: Observable + let refreshLoading: Observable + let navigationBackBtnTapEvent: Observable + let cellSelectTapEvent: Observable } public struct Output { + var busStopArrivalInfoResponse + : PublishSubject + var favorites + : BehaviorSubject<[FavoritesBusStopResponse]> + var isRefreshing + : PublishSubject } } diff --git a/Projects/Feature/HomeFeature/Demo/AppDelegate.swift b/Projects/Feature/HomeFeature/Demo/AppDelegate.swift index dd143edc..e4d5d9f1 100644 --- a/Projects/Feature/HomeFeature/Demo/AppDelegate.swift +++ b/Projects/Feature/HomeFeature/Demo/AppDelegate.swift @@ -1,8 +1,15 @@ import UIKit +import Core +import Domain +import FeatureDependency + +import RxSwift + @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + register() return true } @@ -14,4 +21,14 @@ final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { } + + func register() { + DIContainer.register( + type: FavoritesUseCase.self, + DefaultFavoritesUseCase( + busStopArrivalInfoRepository: MockBusStopArrivalInfoRepository(), + favoritesRepository: MockFavoritesRepository() + ) + ) + } } diff --git a/Projects/Feature/HomeFeature/Demo/SceneDelegate.swift b/Projects/Feature/HomeFeature/Demo/SceneDelegate.swift index 9c4e26ab..567616ae 100644 --- a/Projects/Feature/HomeFeature/Demo/SceneDelegate.swift +++ b/Projects/Feature/HomeFeature/Demo/SceneDelegate.swift @@ -1,5 +1,7 @@ import UIKit +import Domain +import FeatureDependency import HomeFeature final class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -17,7 +19,9 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { window?.makeKeyAndVisible() let homeCoordinator = DefaultHomeCoordinator( - navigationController: navigationController + parent: nil, + navigationController: navigationController, + coordinatorProvider: MockCoordinatorProvider() ) homeCoordinator.start() } diff --git a/Projects/Feature/HomeFeature/Sources/Coordinator/DefaultHomeCoordinator.swift b/Projects/Feature/HomeFeature/Sources/Coordinator/DefaultHomeCoordinator.swift index 3126e50b..148bade3 100644 --- a/Projects/Feature/HomeFeature/Sources/Coordinator/DefaultHomeCoordinator.swift +++ b/Projects/Feature/HomeFeature/Sources/Coordinator/DefaultHomeCoordinator.swift @@ -1,22 +1,83 @@ import UIKit +import Core import FeatureDependency -public final class DefaultHomeCoordinator: HomeCoordinator { - public var childCoordinators: [Coordinator] = [] +import RxSwift + +public final class DefaultHomeCoordinator { + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController + public let coordinatorProvider: CoordinatorProvider + public var coordinatorType: CoordinatorType = .home + + private let favoritesStatus = PublishSubject() + private let disposeBag = DisposeBag() - public init(navigationController: UINavigationController) { + public init( + parent: Coordinator?, + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider + ) { + self.parent = parent self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider } public func start() { - let homeViewController = HomeViewController( - viewModel: HomeViewModel() + let homeViewController = FavoritesViewController( + viewModel: FavoritesViewModel( + coordinator: self, + timer: .init() + ) ) navigationController.setViewControllers( [homeViewController], animated: false ) } + + private func hasViewController(vcType: UIViewController.Type) -> Bool { + navigationController.viewControllers + .contains( + where: { viewController in + type(of: viewController) == vcType + } + ) + } +} + +extension DefaultHomeCoordinator: HomeCoordinator { + public func updateFavoritesState(isEmpty: Bool) { + favoritesStatus.onNext(isEmpty ? .empty : .nonEmpty) + } + + public func startSearchFlow() { + let searchCoordinator = coordinatorProvider.makeSearchCoordinator( + parent: self, + navigationController: navigationController, + flow: .fromHome + ) + childs.append(searchCoordinator) + searchCoordinator.start() + } + + public func startBusStopFlow(stationId: String) { + // BusStopCoordinatorFlow + let busStopCoordinator = coordinatorProvider.makeBusStopCoordinator( + parent: self, + navigationController: navigationController, + busStopId: stationId, + flow: .fromHome + ) + childs.append(busStopCoordinator) + busStopCoordinator.start() + } +} + +extension DefaultHomeCoordinator { + enum FavoritesStatus { + case empty, nonEmpty + } } diff --git a/Projects/Feature/HomeFeature/Sources/Coordinator/HomeCoordinator.swift b/Projects/Feature/HomeFeature/Sources/Coordinator/HomeCoordinator.swift deleted file mode 100644 index e40d2d9f..00000000 --- a/Projects/Feature/HomeFeature/Sources/Coordinator/HomeCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol HomeCoordinator: Coordinator { -} diff --git a/Projects/Feature/HomeFeature/Sources/View/EmptyFavoritesView.swift b/Projects/Feature/HomeFeature/Sources/View/EmptyFavoritesView.swift new file mode 100644 index 00000000..e897b784 --- /dev/null +++ b/Projects/Feature/HomeFeature/Sources/View/EmptyFavoritesView.swift @@ -0,0 +1,158 @@ +// +// EmptyFavoritesView.swift +// HomeFeature +// +// Created by gnksbm on 2/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +final class EmptyFavoritesView: UIView { + private let starImgView: UIImageView = { + let imgView = UIImageView() + imgView.image = DesignSystemAsset.emptyFavoritesStars.image + return imgView + }() + + private let messageLabel: UILabel = { + let label = UILabel() + label.font = .systemFont( + ofSize: 16, + weight: .thin + ) + label.text = "다음 버스 도착 시간까지 알고 싶다면\n즐겨찾기를 추가해보세요." + label.numberOfLines = 2 + label.textColor = DesignSystemAsset.bottonBtnColor.color + label.textAlignment = .center + return label + }() + + private let exampleLabel: UILabel = { + let label = UILabel() + label.font = .systemFont( + ofSize: 20, + weight: .light + ) + label.text = "ex" + label.textColor = DesignSystemAsset.blueGray.color + label.transform = CGAffineTransform(rotationAngle: -0.3) + return label + }() + + private let exampleRouteNumLabel: UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 24) + label.text = "777" + label.textColor = DesignSystemAsset.gray4.color + return label + }() + + private let exampleArrivalInfoLabel: UILabel = { + let label = UILabel() + label.font = .systemFont(ofSize: 18) + let remainingString = NSAttributedString( + string: "곧 도착", + attributes: [ + .font: UIFont.systemFont(ofSize: 20), + .foregroundColor: DesignSystemAsset.lightRed.color + ] + ) + let timeString = NSAttributedString( + string: "\n10분", + attributes: [ + .font: UIFont.systemFont(ofSize: 18), + .foregroundColor: DesignSystemAsset.gray5.color + ] + ) + let attrString = NSMutableAttributedString() + attrString.append(remainingString) + attrString.append(timeString) + label.attributedText = attrString + label.numberOfLines = 2 + return label + }() + + private lazy var exampleStackView: UIStackView = { + let stackView = UIStackView( + arrangedSubviews: [ + exampleRouteNumLabel, + exampleArrivalInfoLabel + ] + ) + stackView.axis = .horizontal + stackView.alignment = .center + stackView.distribution = .equalCentering + stackView.backgroundColor = DesignSystemAsset.gray2.color + stackView.layer.cornerRadius = 10 + return stackView + }() + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + backgroundColor = .white + [ + starImgView, + messageLabel, + exampleStackView, + exampleLabel, + ].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + messageLabel.centerXAnchor.constraint( + equalTo: centerXAnchor + ), + messageLabel.bottomAnchor.constraint( + equalTo: centerYAnchor + ), + + starImgView.centerXAnchor.constraint( + equalTo: centerXAnchor + ), + starImgView.bottomAnchor.constraint( + equalTo: messageLabel.topAnchor, + constant: -30 + ), + + exampleStackView.centerXAnchor.constraint( + equalTo: centerXAnchor + ), + exampleStackView.widthAnchor.constraint( + equalTo: widthAnchor, + multiplier: 0.8 + ), + exampleStackView.heightAnchor.constraint( + equalToConstant: 100 + ), + exampleStackView.topAnchor.constraint( + equalTo: messageLabel.bottomAnchor, + constant: 30 + ), + + exampleLabel.centerYAnchor.constraint( + equalTo: exampleStackView.topAnchor + ), + exampleLabel.centerXAnchor.constraint( + equalTo: exampleStackView.leadingAnchor + ), + ]) + exampleStackView.addDivider( + color: DesignSystemAsset.gray6.color, + hasPadding: true, + dividerRatio: 0.8 + ) + } +} diff --git a/Projects/Feature/HomeFeature/Sources/View/FavoritesHeaderView.swift b/Projects/Feature/HomeFeature/Sources/View/FavoritesHeaderView.swift new file mode 100644 index 00000000..746d673c --- /dev/null +++ b/Projects/Feature/HomeFeature/Sources/View/FavoritesHeaderView.swift @@ -0,0 +1,121 @@ +// +// FavoritesHeaderView.swift +// HomeFeatureDemo +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem + +import RxSwift + +internal final class FavoritesHeaderView: UITableViewHeaderFooterView { + var disposeBag = DisposeBag() + private let busStopNameLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 16 + ) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private let directionLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 13 + ) + label.textAlignment = .left + label.textColor = .gray + return label + }() + + private let dividerLine: UIView = { + let view = UIView() + view.backgroundColor = DesignSystemAsset.gray4Minor.color + return view + }() + + override init(reuseIdentifier: String?) { + super.init(reuseIdentifier: reuseIdentifier) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func draw(_ rect: CGRect) { + super.draw(rect) + addCornerRadius( + corners: [.topLeft, .topRight] + ) + } + + private func configureUI() { + contentView.backgroundColor = DesignSystemAsset.gray1.color + + [busStopNameLabel, directionLabel, dividerLine].forEach { + contentView.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + busStopNameLabel.leadingAnchor.constraint( + equalTo: directionLabel.leadingAnchor + ), + busStopNameLabel.bottomAnchor.constraint( + equalTo: directionLabel.topAnchor, + constant: -5 + ), + busStopNameLabel.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor, + constant: -20 + ), + + directionLabel.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor, + constant: 20 + ), + directionLabel.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor, + constant: -10 + ), + + dividerLine.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor, + constant: 10 + ), + dividerLine.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor, + constant: -10 + ), + dividerLine.heightAnchor.constraint(equalToConstant: 1), + dividerLine.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor + ), + ]) + } + + func updateUI( + name: String?, + direction: String? + ) { + busStopNameLabel.text = name + if let direction { + directionLabel.text = direction + " 방면" + } + } + + override func prepareForReuse() { + super.prepareForReuse() + [busStopNameLabel, directionLabel].forEach { + $0.text = nil + } + } +} diff --git a/Projects/Feature/HomeFeature/Sources/View/FavoritesTVCell.swift b/Projects/Feature/HomeFeature/Sources/View/FavoritesTVCell.swift new file mode 100644 index 00000000..6807940f --- /dev/null +++ b/Projects/Feature/HomeFeature/Sources/View/FavoritesTVCell.swift @@ -0,0 +1,120 @@ +// +// FavoritesTVCell.swift +// HomeFeature +// +// Created by gnksbm on 1/23/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem +import Domain + +class FavoritesTVCell: UITableViewCell { + private let routeLabel: UILabel = { + let label = UILabel() + label.font = .nanumHeavy(size: 18) + label.textColor = DesignSystemAsset.limeGreen.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.6 + return label + }() + + private let firstArrivalInfoView = ArrivalInfoView() + private let secondArrivalInfoView = ArrivalInfoView() + + let alarmBtn: UIButton = { + var config = UIButton.Configuration.plain() + let image = UIImage(systemName: "deskclock") + let imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 13) + ) + config.image = image + config.preferredSymbolConfigurationForImage = imgConfig + config.baseForegroundColor = DesignSystemAsset.mainColor.color + let button = UIButton(configuration: config) + button.isHidden = true + return button + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + let mainColor = DesignSystemAsset.mainColor.color + alarmBtn.configuration?.baseForegroundColor = mainColor + [routeLabel].forEach { + $0.text = nil + $0.textColor = DesignSystemAsset.limeGreen.color + } + [firstArrivalInfoView, secondArrivalInfoView].forEach { + $0.prepareForReuse() + } + } + + func updateUI( + response: BusArrivalInfoResponse + ) { + routeLabel.text = response.busName + routeLabel.textColor = response.busType.toColor + firstArrivalInfoView.updateUI( + time: response.firstArrivalState.toString, + remainingStops: response.firstArrivalRemaining + ) + secondArrivalInfoView.updateUI( + time: response.secondArrivalState.toString, + remainingStops: response.secondArrivalRemaining + ) + } + + private func configureUI() { + contentView.backgroundColor = DesignSystemAsset.gray1.color + + [ + routeLabel, + firstArrivalInfoView, + secondArrivalInfoView, + alarmBtn + ].forEach { + contentView.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + $0.centerYAnchor.constraint( + equalTo: contentView.centerYAnchor + ).isActive = true + } + + NSLayoutConstraint.activate([ + routeLabel.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor, + constant: 20 + ), + routeLabel.widthAnchor.constraint( + equalTo: contentView.widthAnchor, + multiplier: 0.25 + ), + + firstArrivalInfoView.leadingAnchor.constraint( + equalTo: routeLabel.trailingAnchor, + constant: .screenWidth * 0.1 + ), + + secondArrivalInfoView.leadingAnchor.constraint( + equalTo: firstArrivalInfoView.trailingAnchor, + constant: .screenWidth * 0.1 + ), + + alarmBtn.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor, + constant: -15 + ), + ]) + } +} diff --git a/Projects/Feature/HomeFeature/Sources/ViewController/FavoritesViewController.swift b/Projects/Feature/HomeFeature/Sources/ViewController/FavoritesViewController.swift new file mode 100644 index 00000000..08900490 --- /dev/null +++ b/Projects/Feature/HomeFeature/Sources/ViewController/FavoritesViewController.swift @@ -0,0 +1,478 @@ +import UIKit +import Domain + +import Core +import DesignSystem + +import RxSwift +import RxCocoa + +public final class FavoritesViewController: UIViewController { + private let viewModel: FavoritesViewModel + + private let headerTapEvent = PublishSubject() + private let alarmBtnTapEvent = PublishSubject() + private let isTableViewEditMode = BehaviorSubject(value: false) + private let disposeBag = DisposeBag() + + private var dataSource: FavoritesDataSource! + private var snapshot: FavoritesSnapshot! + private var headerInfoList: [[String: String]] = [] + private let refreshAttribute: AttributeContainer = { + var titleContainer = AttributeContainer() + titleContainer.font = .systemFont(ofSize: 14) + return titleContainer + }() + + private let searchBtn: SearchBusStopBtn = { + let searchBtn = SearchBusStopBtn( + title: "버스 정류장을 검색하세요", + image: UIImage(systemName: "magnifyingglass") + ) + searchBtn.accessibilityIdentifier = "홈에서 검색뷰로 네비게이션" + return searchBtn + }() + + private lazy var refreshBtn: UIButton = { + var config = UIButton.Configuration.plain() + config.baseForegroundColor = .black + config.imagePadding = 6 + // Image + let image = UIImage(systemName: "arrow.triangle.2.circlepath") + let imgConfig = UIImage.SymbolConfiguration( + font: .systemFont(ofSize: 11) + ) + config.image = image + config.preferredSymbolConfigurationForImage = imgConfig + // Title + let timeStr = Date().toString(dateFormat: "HH:mm") + config.attributedTitle = AttributedString( + "\(timeStr) 업데이트", + attributes: refreshAttribute + ) + let button = UIButton(configuration: config) + return button + }() + + private let editBtn: UIButton = { + var config = UIButton.Configuration.plain() + config.baseForegroundColor = .black + config.imagePadding = 5 + var titleContainer = AttributeContainer() + titleContainer.font = .systemFont(ofSize: 13) + config.attributedTitle = AttributedString( + "편집", + attributes: titleContainer + ) + let button = UIButton(configuration: config) + button.isHidden = true + return button + }() + + private lazy var favoritesTableView: UITableView = { + let tableView = UITableView() + tableView.backgroundColor = .white + tableView.register(FavoritesHeaderView.self) + tableView.register(FavoritesTVCell.self) + tableView.dataSource = dataSource + tableView.delegate = self + tableView.sectionHeaderTopPadding = 0 + tableView.separatorInset = UIEdgeInsets( + top: 0, + left: 15, + bottom: 0, + right: 15 + ) + return tableView + }() + + public init(viewModel: FavoritesViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func viewDidLoad() { + super.viewDidLoad() + configureDataSource() + configureUI() + bind() + } + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + + private func configureUI() { + view.backgroundColor = .white + [ + searchBtn, + editBtn, + refreshBtn, + favoritesTableView + ].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + let safeArea = view.safeAreaLayoutGuide + + NSLayoutConstraint.activate([ + searchBtn.topAnchor.constraint( + equalTo: safeArea.topAnchor, + constant: 10 + ), + searchBtn.centerXAnchor.constraint(equalTo: safeArea.centerXAnchor), + searchBtn.widthAnchor.constraint( + equalTo: safeArea.widthAnchor, + multiplier: 0.95 + ), + + refreshBtn.topAnchor.constraint( + equalTo: searchBtn.bottomAnchor, + constant: 10 + ), + refreshBtn.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 5 + ), + + editBtn.topAnchor.constraint( + equalTo: searchBtn.bottomAnchor, + constant: 10 + ), + editBtn.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -20 + ), + + favoritesTableView.topAnchor.constraint( + equalTo: refreshBtn.bottomAnchor, + constant: 3 + ), + favoritesTableView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 10 + ), + favoritesTableView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -10 + ), + favoritesTableView.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor + ), + ]) + } + + private func bind() { + let refreshControl = favoritesTableView.enableRefreshControl( + refreshStr: "" + ) + + let output = viewModel.transform( + input: .init( + viewWillAppearEvent: rx + .methodInvoked( + #selector(UIViewController.viewWillAppear) + ) + .map { _ in }, + searchBtnTapEvent: searchBtn.rx.tap.asObservable(), + refreshBtnTapEvent: Observable.merge( + refreshControl.rx.controlEvent(.valueChanged) + .asObservable(), + refreshBtn.rx.tap.asObservable() + ), + alarmBtnTapEvent: alarmBtnTapEvent.asObservable(), + busStopTapEvent: headerTapEvent + ) + ) + + Observable.combineLatest( + output.distanceFromTimerStart, + output.busStopArrivalInfoResponse + ) + .withUnretained(self) + .observe(on: MainScheduler.asyncInstance) + .subscribe( + onNext: { viewController, arg1 in + let (timerTime, responses) = arg1 + let datas: [Data] = responses.compactMap { response in + guard let data = response.encode() + else { return nil } + return data + } + UserDefaults.appGroup?.set( + datas, + forKey: "arrivalResponse" + ) + let newResponses = responses.map { + return BusStopArrivalInfoResponse( + busStopId: $0.busStopId, + busStopName: $0.busStopName, + direction: $0.direction, + buses: $0.buses.map { busInfo in + let newFirstArrivalState: ArrivalState + let newSecondArrivalState: ArrivalState + switch busInfo.firstArrivalState { + case .soon, .pending, .finished: + newFirstArrivalState = busInfo.firstArrivalState + case .arrivalTime(let time): + newFirstArrivalState = time - timerTime > 60 ? + .arrivalTime(time: time - timerTime): + .soon + } + switch busInfo.secondArrivalState { + case .soon, .pending, .finished: + newSecondArrivalState + = busInfo.secondArrivalState + case .arrivalTime(let time): + newSecondArrivalState = time - timerTime > 60 ? + .arrivalTime(time: time - timerTime): + .soon + } + let firstReaining = busInfo.firstArrivalRemaining + let secondReaining = busInfo.secondArrivalRemaining + return BusArrivalInfoResponse( + busId: busInfo.busId, + busName: busInfo.busName, + busType: busInfo.busType.rawValue, + nextStation: busInfo.nextStation, + firstArrivalState: newFirstArrivalState, + firstArrivalRemaining: firstReaining, + secondArrivalState: newSecondArrivalState, + secondArrivalRemaining: secondReaining, + isFavorites: busInfo.isFavorites, + isAlarmOn: busInfo.isAlarmOn + ) + } + ) + } + viewController.headerInfoList.removeAll() + newResponses.forEach { response in + viewController.updateHeaderInfo( + name: response.busStopName, + direction: response.direction, + busStopId: response.busStopId + ) + } + viewController.updateSnapshot(busStopResponse: newResponses) + } + ) + .disposed(by: disposeBag) + + output.favoritesState + .withUnretained(self) + .observe(on: MainScheduler.asyncInstance) + .subscribe( + onNext: { viewController, state in + viewController.updateState(state: state) + switch state { + case .fetching: + refreshControl.beginRefreshing() + case .emptyFavorites, .fetchComplete: + DispatchQueue.main.asyncAfter( + deadline: .now() + 1, + execute: .init( + block: { + refreshControl.endRefreshing() + let timeStr = Date() + .toString(dateFormat: "HH:mm") + viewController.refreshBtn.configuration? + .attributedTitle = .init( + "\(timeStr) 업데이트", + attributes: viewController + .refreshAttribute + ) + } + ) + ) + } + } + ) + .disposed(by: disposeBag) + + editBtn.rx.tap + .asObservable() + .withUnretained(self) + .subscribe( + onNext: { viewController, _ in + guard let isEditMode = try? viewController + .isTableViewEditMode.value() + else { return } + viewController.isTableViewEditMode + .onNext(!isEditMode) + } + ) + .disposed(by: disposeBag) + +// isTableViewEditMode +// .withUnretained(self) +// .subscribe( +// onNext: { viewController, isEditMode in +// viewController.editBtn.setTitle( +// isEditMode ? "완료" : "편집", +// for: .normal +// ) +// viewController.favoritesTableView.isEditing = isEditMode +// } +// ) +// .disposed(by: disposeBag) + } + + private func configureDataSource() { + dataSource = .init( + tableView: favoritesTableView + ) { [weak self] tableView, indexPath, response in + guard let self else { return UITableViewCell() } + let cell = self.configureCell( + tableView: tableView, + indexPath: indexPath, + response: response + ) + cell?.selectionStyle = .none + cell?.alarmBtn.rx.tap + .map { _ in indexPath } + .bind(to: self.alarmBtnTapEvent) + .disposed(by: self.disposeBag) + return cell + } + } + + private func configureCell( + tableView: UITableView, + indexPath: IndexPath, + response: BusArrivalInfoResponse + ) -> FavoritesTVCell? { + let cell = tableView.dequeueReusableCell( + withIdentifier: FavoritesTVCell.identifier, + for: indexPath + ) as? FavoritesTVCell + let isLastCell = tableView.numberOfRows( + inSection: indexPath.section + ) - 1 == indexPath.row + if isLastCell { + cell?.addCornerRadius( + corners: [.bottomLeft, .bottomRight] + ) + } + cell?.updateUI(response: response) + return cell + } + + private func updateHeaderInfo( + name: String, + direction: String, + busStopId: String + ) { + headerInfoList += [ + [ + "name": name, + "direction": direction, + "busStopId": busStopId + ] + ] + } + + private func updateSnapshot(busStopResponse: [BusStopArrivalInfoResponse]) { + snapshot = .init() + snapshot.appendSections(busStopResponse) + busStopResponse.forEach { response in + snapshot.appendItems( + response.buses, + toSection: response + ) + } + dataSource.apply(snapshot, animatingDifferences: false) + } + + private func updateState(state: FavoritesViewModel.FavoritesState) { + switch state { + case .emptyFavorites: + favoritesTableView.backgroundView = EmptyFavoritesView() + refreshBtn.isHidden = true +// editBtn.isHidden = true + case .fetching: + favoritesTableView.loadingBackground() + refreshBtn.isHidden = false +// editBtn.isHidden = false + case .fetchComplete: + favoritesTableView.backgroundView = nil + refreshBtn.isHidden = false + } + } +} + +extension FavoritesViewController: UITableViewDelegate { + public func tableView( + _ tableView: UITableView, + viewForFooterInSection section: Int + ) -> UIView? { + let footerView = UIView() + footerView.backgroundColor = .clear + return footerView + } + + public func tableView( + _ tableView: UITableView, + heightForRowAt indexPath: IndexPath + ) -> CGFloat { + 60 + } + + public func tableView( + _ tableView: UITableView, + heightForHeaderInSection section: Int + ) -> CGFloat { + 60 + } + + public func tableView( + _ tableView: UITableView, + heightForFooterInSection section: Int + ) -> CGFloat { + 15 + } + + public func tableView( + _ tableView: UITableView, + viewForHeaderInSection section: Int + ) -> UIView? { + guard let header = tableView.dequeueReusableHeaderFooterView( + withIdentifier: FavoritesHeaderView.identifier + ) as? FavoritesHeaderView + else { return .init() } + if section < headerInfoList.count { + header.updateUI( + name: headerInfoList[section]["name"], + direction: headerInfoList[section]["direction"] + ) + } + guard let busStopId = headerInfoList[section]["busStopId"] + else { return header } + let tapGesture = UITapGestureRecognizer() + header.contentView.addGestureRecognizer(tapGesture) + header.disposeBag = .init() + tapGesture.rx.event + .map { _ in busStopId } + .bind(to: headerTapEvent) + .disposed(by: header.disposeBag) + return header + } +} + +extension FavoritesViewController { + typealias FavoritesDataSource = + UITableViewDiffableDataSource + + + typealias FavoritesSnapshot = + NSDiffableDataSourceSnapshot + +} diff --git a/Projects/Feature/HomeFeature/Sources/ViewController/HomeViewController.swift b/Projects/Feature/HomeFeature/Sources/ViewController/HomeViewController.swift deleted file mode 100644 index 359df545..00000000 --- a/Projects/Feature/HomeFeature/Sources/ViewController/HomeViewController.swift +++ /dev/null @@ -1,20 +0,0 @@ -import UIKit - -import RxSwift - -public final class HomeViewController: UIViewController { - private let viewModel: HomeViewModel - - public init(viewModel: HomeViewModel) { - self.viewModel = viewModel - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - public override func viewDidLoad() { - super.viewDidLoad() - } -} diff --git a/Projects/Feature/HomeFeature/Sources/ViewModel/FavoritesViewModel.swift b/Projects/Feature/HomeFeature/Sources/ViewModel/FavoritesViewModel.swift new file mode 100644 index 00000000..d7867458 --- /dev/null +++ b/Projects/Feature/HomeFeature/Sources/ViewModel/FavoritesViewModel.swift @@ -0,0 +1,145 @@ +import Foundation + +import Core +import Domain +import FeatureDependency + +import RxSwift +import RxRelay + +public final class FavoritesViewModel: ViewModel { + private let coordinator: HomeCoordinator + @Injected(FavoritesUseCase.self) var useCase: FavoritesUseCase + + private let disposeBag = DisposeBag() + private var timer: BCTimer + + public init( + coordinator: HomeCoordinator, + timer: BCTimer + ) { + self.coordinator = coordinator + self.timer = timer + } + + deinit { + coordinator.finish() + } + + public func transform(input: Input) -> Output { + let output = Output( + busStopArrivalInfoResponse: .init(), + favoritesState: .init(), + distanceFromTimerStart: .init(value: 0) + ) + + input.viewWillAppearEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.useCase.fetchFavoritesArrivals() + } + ) + .disposed(by: disposeBag) + + input.searchBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.coordinator.startSearchFlow() + } + ) + .disposed(by: disposeBag) + + input.refreshBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + output.favoritesState.onNext(.fetching) + viewModel.useCase.fetchFavoritesArrivals() + } + ) + .disposed(by: disposeBag) + + input.busStopTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, selectedId in + do { + let responses = try viewModel.useCase + .busStopArrivalInfoResponse.value() + guard let selectedBusStop = responses.first( + where: { response in + response.busStopId == selectedId + } + ) + else { return } + viewModel.coordinator.startBusStopFlow( + stationId: selectedBusStop.busStopId + ) + } catch { + #if DEBUG + print(error.localizedDescription) + #endif + } + } + ) + .disposed(by: disposeBag) + + timer.distanceFromStart + .bind(to: output.distanceFromTimerStart) + .disposed(by: disposeBag) + + useCase.busStopArrivalInfoResponse + .subscribe( + onNext: { responses in + output.busStopArrivalInfoResponse.onNext(responses) + if responses.isEmpty { + output.favoritesState.onNext(.emptyFavorites) + } else { + output.favoritesState.onNext(.fetchComplete) + } + } + ) + .disposed(by: disposeBag) + + output.favoritesState + .withUnretained(self) + .subscribe( + onNext: { viewModel, state in + switch state { + case .emptyFavorites: + break + case .fetching: + viewModel.timer.stop() + case .fetchComplete: + viewModel.timer.start() + } + } + ) + .disposed(by: disposeBag) + + return output + } +} + +extension FavoritesViewModel { + public struct Input { + let viewWillAppearEvent: Observable + let searchBtnTapEvent: Observable + let refreshBtnTapEvent: Observable + let alarmBtnTapEvent: Observable + let busStopTapEvent: Observable + } + + public struct Output { + var busStopArrivalInfoResponse + : PublishSubject<[BusStopArrivalInfoResponse]> + var favoritesState: PublishSubject + var distanceFromTimerStart: BehaviorRelay + } + + enum FavoritesState { + case emptyFavorites, fetching, fetchComplete + } +} diff --git a/Projects/Feature/HomeFeature/Sources/ViewModel/HomeViewModel.swift b/Projects/Feature/HomeFeature/Sources/ViewModel/HomeViewModel.swift deleted file mode 100644 index 0b76ed64..00000000 --- a/Projects/Feature/HomeFeature/Sources/ViewModel/HomeViewModel.swift +++ /dev/null @@ -1,26 +0,0 @@ -import Foundation - -import Domain -import FeatureDependency - -import RxSwift - -public final class HomeViewModel: ViewModel { - private let disposeBag = DisposeBag() - - public init() { - } - - public func transform(input: Input) -> Output { - let output = Output() - return output - } -} - -extension HomeViewModel { - public struct Input { - } - - public struct Output { - } -} diff --git a/Projects/Feature/NearMapFeature/Demo/AppDelegate+Resister.swift b/Projects/Feature/NearMapFeature/Demo/AppDelegate+Resister.swift new file mode 100644 index 00000000..3a4425ed --- /dev/null +++ b/Projects/Feature/NearMapFeature/Demo/AppDelegate+Resister.swift @@ -0,0 +1,25 @@ +// +// AppDelegate+Resister.swift +// NearMapFeatureDemo +// +// Created by Muker on 3/12/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core +import Domain +import FeatureDependency + +extension AppDelegate { + func register() { + DIContainer.register( + type: NearMapUseCase.self, + DefaultNearMapUseCase( + stationListRepository: MockStationLIstRepository(), + locationService: MockLocationService() + ) + ) + } +} diff --git a/Projects/Feature/NearMapFeature/Demo/AppDelegate.swift b/Projects/Feature/NearMapFeature/Demo/AppDelegate.swift index dd143edc..d73b421a 100644 --- a/Projects/Feature/NearMapFeature/Demo/AppDelegate.swift +++ b/Projects/Feature/NearMapFeature/Demo/AppDelegate.swift @@ -1,17 +1,38 @@ import UIKit +import Core +import Domain +import FeatureDependency + +import RxSwift + @main final class AppDelegate: UIResponder, UIApplicationDelegate { - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + + func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + register() return true } // MARK: UISceneSession Lifecycle - func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { - return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) + func application( + _ application: UIApplication, + configurationForConnecting connectingSceneSession: UISceneSession, + options: UIScene.ConnectionOptions + ) -> UISceneConfiguration { + return UISceneConfiguration( + name: "Default Configuration", + sessionRole: connectingSceneSession.role + ) } - func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { + func application( + _ application: UIApplication, + didDiscardSceneSessions sceneSessions: Set + ) { } } diff --git a/Projects/Feature/NearMapFeature/Demo/SceneDelegate.swift b/Projects/Feature/NearMapFeature/Demo/SceneDelegate.swift index 8d62c4dc..0c0d5cb0 100644 --- a/Projects/Feature/NearMapFeature/Demo/SceneDelegate.swift +++ b/Projects/Feature/NearMapFeature/Demo/SceneDelegate.swift @@ -1,6 +1,8 @@ import UIKit +import FeatureDependency import NearMapFeature +import FeatureDependency final class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? @@ -10,16 +12,21 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions ) { + guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(windowScene: windowScene) let navigationController = UINavigationController() window?.rootViewController = navigationController window?.makeKeyAndVisible() - - let nearmapCoordinator = DefaultNearMapCoordinator( - navigationController: navigationController + + let nearMapCoordinator = DefaultNearMapCoordinator( + parent: nil, + navigationController: navigationController, + coordinatorProvider: MockCoordinatorProvider(), + flow: .fromHome, + busStopId: nil ) - nearmapCoordinator.start() + nearMapCoordinator.start() } func sceneDidDisconnect(_ scene: UIScene) { diff --git a/Projects/Feature/NearMapFeature/Sources/Coordinator/DafaultNearMapCoordinator.swift b/Projects/Feature/NearMapFeature/Sources/Coordinator/DafaultNearMapCoordinator.swift index 732160d6..2b363d56 100644 --- a/Projects/Feature/NearMapFeature/Sources/Coordinator/DafaultNearMapCoordinator.swift +++ b/Projects/Feature/NearMapFeature/Sources/Coordinator/DafaultNearMapCoordinator.swift @@ -2,21 +2,56 @@ import UIKit import FeatureDependency +import RxSwift + public final class DefaultNearMapCoordinator: NearMapCoordinator { - public var childCoordinators: [Coordinator] = [] + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController + public var coordinatorProvider: CoordinatorProvider + public let flow: FlowState + public let busStopId: String? + public var coordinatorType: CoordinatorType = .nearMap - public init(navigationController: UINavigationController) { + public init( + parent: Coordinator?, + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider, + flow: FlowState, + busStopId: String? + ) { + self.parent = parent self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider + self.flow = flow + self.busStopId = busStopId } + + // MARK: - Function public func start() { - let nearmapViewController = NearMapViewController( - viewModel: NearMapViewModel() + let nearMapViewController = NearMapViewController( + viewModel: NearMapViewModel( + coordinator: self, + busStopId: busStopId + ) + ) + navigationController.pushViewController( + nearMapViewController, + animated: true ) - navigationController.setViewControllers( - [nearmapViewController], - animated: false + } +} + +extension DefaultNearMapCoordinator { + public func startBusStopFlow(busStopId: String) { + let busStopCoordinator = coordinatorProvider.makeBusStopCoordinator( + parent: self, + navigationController: navigationController, + busStopId: busStopId, + flow: flow ) + childs.append(busStopCoordinator) + busStopCoordinator.start() } } diff --git a/Projects/Feature/NearMapFeature/Sources/Coordinator/NearMapCoordinator.swift b/Projects/Feature/NearMapFeature/Sources/Coordinator/NearMapCoordinator.swift deleted file mode 100644 index 0459e239..00000000 --- a/Projects/Feature/NearMapFeature/Sources/Coordinator/NearMapCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol NearMapCoordinator: Coordinator { -} diff --git a/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/BusStopClusteringKey.swift b/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/BusStopClusteringKey.swift new file mode 100644 index 00000000..51f13cdc --- /dev/null +++ b/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/BusStopClusteringKey.swift @@ -0,0 +1,53 @@ +// +// BusStopClusteringKey.swift +// NearMapFeature +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import NMapsMap + +final class BusStopClusteringKey: NSObject, NMCClusteringKey { + let identifier: Int + let position: NMGLatLng + + init(identifier: Int, position: NMGLatLng) { + self.identifier = identifier + self.position = position + } + + static func markerKey( + withIdentifier identifier: Int, + position: NMGLatLng + ) -> BusStopClusteringKey { + return BusStopClusteringKey( + identifier: identifier, + position: position + ) + } + + override func isEqual(_ o: Any?) -> Bool { + guard let o = o as? BusStopClusteringKey else { + return false + } + if self === o { + return true + } + + return o.identifier == self.identifier + } + + override var hash: Int { + return self.identifier + } + + func copy(with zone: NSZone? = nil) -> Any { + return BusStopClusteringKey( + identifier: self.identifier, + position: self.position + ) + } +} diff --git a/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/LeafMarkerUpdater.swift b/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/LeafMarkerUpdater.swift new file mode 100644 index 00000000..034840e6 --- /dev/null +++ b/Projects/Feature/NearMapFeature/Sources/NMapsClustreing/LeafMarkerUpdater.swift @@ -0,0 +1,71 @@ +// +// LeafMarkerUpdater.swift +// NearMapFeature +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import DesignSystem + +import NMapsMap +import RxSwift + +final class LeafMarkerUpdater: NMCDefaultLeafMarkerUpdater { + let selectedBusStopId = BehaviorSubject(value: "") + + private var selectedMarker: NMFMarker? { + didSet { + oldValue?.iconImage = unselectedImg + selectedMarker?.iconImage = selectedImg + } + } + + private var selectedImg: NMFOverlayImage { + .init( + image: DesignSystemAsset.mapBusStop.image + .resize(45, 45), + reuseIdentifier: "selectedbusStop" + ) + } + + private var unselectedImg: NMFOverlayImage { + .init( + image: DesignSystemAsset.mapBusStopGray.image + .resize(45, 45), + reuseIdentifier: "unselectedbusStop" + ) + } + + override func updateLeafMarker( + _ info: NMCLeafMarkerInfo, + _ marker: NMFMarker + ) { + super.updateLeafMarker(info, marker) + if let key = info.key as? BusStopClusteringKey { + var busStopId = String(key.identifier) + while busStopId.count < 5 { + busStopId = "0" + busStopId + } + if let selectedBusStopId = try? selectedBusStopId.value() { + if busStopId == selectedBusStopId { + marker.iconImage = selectedImg + selectedMarker = marker + } else { + marker.iconImage = unselectedImg + } + } else { + marker.iconImage = unselectedImg + } + // YES일 경우 이벤트를 소비합니다. 그렇지 않을 경우 NMFMapView까지 이벤트가 전달되어 + // NMFMapViewTouchDelegate의 mapView:didTapMap:point:가 호출됩니다. + marker.touchHandler = { [weak self] _ in + self?.selectedBusStopId.onNext(busStopId) + self?.selectedMarker = marker + return true + } + } + } +} diff --git a/Projects/Feature/NearMapFeature/Sources/View/BusStopInformationView.swift b/Projects/Feature/NearMapFeature/Sources/View/BusStopInformationView.swift new file mode 100644 index 00000000..2d075d3b --- /dev/null +++ b/Projects/Feature/NearMapFeature/Sources/View/BusStopInformationView.swift @@ -0,0 +1,220 @@ +// +// BusStopInformationView.swift +// NearMapFeatureDemo +// +// Created by Muker on 2/7/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem +import Domain + +public final class BusStopInformationView: UIView { + + // MARK: - UI Property + + private let symbolSize = 50 + + private let busStopSymbol: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.bigBusStop.image + return imageView + }() + + private let busStopNameLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.extraBold.font( + size: 15 + ) + label.textColor = .black + return label + }() + + private let busStopDescription: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.light.font( + size: 13 + ) + label.adjustsFontForContentSizeCategory = true + label.minimumScaleFactor = 0.8 + label.textColor = .black + return label + }() + + private let distanceStringLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.light.font( + size: 13 + ) + label.text = "현재 위치에서 약 " + label.textColor = .black + return label + }() + + private let distanceFromBusStopLabel: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font( + size: 13 + ) + label.textColor = DesignSystemAsset.lightRed.color + return label + }() + + private let distanceStringLabel2: UILabel = { + let label = UILabel() + label.font = DesignSystemFontFamily.NanumSquareNeoOTF.light.font( + size: 13 + ) + label.text = " 떨어져 있어요" + label.textColor = .black + return label + }() + + private let separationView: UIView = { + let view = UIView() + view.backgroundColor = .black + return view + }() + + private lazy var busStopNameStackView: UIStackView = { + let stackView = UIStackView( + arrangedSubviews: [ + busStopNameLabel, + busStopDescription, + ] + ) + stackView.axis = .vertical + stackView.distribution = .fillEqually + stackView.alignment = .leading + stackView.spacing = 3 + return stackView + }() + + private lazy var distancStackView: UIStackView = { + let stackView = UIStackView( + arrangedSubviews: [ + distanceStringLabel, + distanceFromBusStopLabel, + distanceStringLabel2 + ] + ) + stackView.axis = .horizontal + stackView.alignment = .leading + stackView.spacing = 1 + return stackView + }() + + // MARK: - Life Cycle + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Function + + private func configureUI() { + self.backgroundColor = DesignSystemAsset.gray1.color + + [ + busStopSymbol, + busStopNameStackView, + distancStackView, + separationView, + ].forEach { + self.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + + // busStopSymbol + busStopSymbol.topAnchor.constraint( + equalTo: self.topAnchor, + constant: 20 + ), + busStopSymbol.leftAnchor.constraint( + equalTo: self.leftAnchor, + constant: 20 + ), + busStopSymbol.heightAnchor.constraint( + equalToConstant: CGFloat(symbolSize) + ), + busStopSymbol.widthAnchor.constraint( + equalToConstant: CGFloat(symbolSize) + ), + busStopSymbol.bottomAnchor.constraint( + equalTo: separationView.topAnchor, + constant: 0 + ), + + // busStopNameStackView + busStopNameStackView.topAnchor.constraint( + equalTo: self.topAnchor, + constant: 20 + ), + busStopNameStackView.leftAnchor.constraint( + equalTo: busStopSymbol.rightAnchor, + constant: 15 + ), + busStopNameStackView.rightAnchor.constraint( + equalTo: self.rightAnchor, + constant: -10 + ), + busStopNameStackView.heightAnchor.constraint( + equalToConstant: CGFloat(symbolSize) + ), + + // separationView + separationView.topAnchor.constraint( + equalTo: busStopNameStackView.bottomAnchor, + constant: 10 + ), + separationView.leftAnchor.constraint( + equalTo: self.leftAnchor, + constant: 15 + ), + separationView.rightAnchor.constraint( + equalTo: self.rightAnchor, + constant: -10 + ), + separationView.heightAnchor.constraint( + equalToConstant: 1 + ), + + // distanceFromBusStopLabel + distancStackView.topAnchor.constraint( + equalTo: separationView.bottomAnchor, + constant: 10 + ), + distancStackView.leftAnchor.constraint( + equalTo: self.leftAnchor, + constant: 20 + CGFloat(symbolSize) + 15 + ) + ]) + + } + + func updateUI(response: BusStopInfoResponse, distance: String) { + busStopNameLabel.text = response.busStopName + if !response.busStopId.isEmpty && !response.direction.isEmpty { + } + var description = "" + if !response.busStopId.isEmpty { + if !response.direction.isEmpty { + description + = "\(response.busStopId) | \(response.direction) 방면" + } else { + description = "\(response.busStopId)" + } + } + busStopDescription.text = description + distanceFromBusStopLabel.text = distance + } +} diff --git a/Projects/Feature/NearMapFeature/Sources/ViewController/NearMapViewController.swift b/Projects/Feature/NearMapFeature/Sources/ViewController/NearMapViewController.swift index b4a3e476..1af1f519 100644 --- a/Projects/Feature/NearMapFeature/Sources/ViewController/NearMapViewController.swift +++ b/Projects/Feature/NearMapFeature/Sources/ViewController/NearMapViewController.swift @@ -1,34 +1,246 @@ import UIKit +import Domain + +import DesignSystem import RxSwift +import RxCocoa +import NMapsMap public final class NearMapViewController: UIViewController { private let viewModel: NearMapViewModel - public init(viewModel: NearMapViewModel) { + private let cameraMoveEvent = + PublishSubject<(ClosedRange, ClosedRange)>() + private let disposeBag = DisposeBag() + + private let leafMarkerUpdater = LeafMarkerUpdater() + + private lazy var builder: NMCBuilder = { + let builder = NMCBuilder() + builder.leafMarkerUpdater = leafMarkerUpdater + builder.maxZoom = 16 + return builder + }() + + private lazy var clusterer: NMCClusterer = { + let clusterer = builder.build() + clusterer.mapView = naverMap.mapView + return clusterer + }() + + private lazy var naverMap: NMFNaverMapView = { + let mapView = NMFNaverMapView() + mapView.clipsToBounds = true + mapView.layer.cornerRadius = 15 + mapView.mapView.addCameraDelegate(delegate: self) + mapView.showLocationButton = true + mapView.mapView.zoomLevel = 18 + return mapView + }() + + private let busStopInformationView: BusStopInformationView = { + let label = BusStopInformationView() + label.clipsToBounds = true + label.layer.cornerRadius = 15 + return label + }() + + init(viewModel: NearMapViewModel) { self.viewModel = viewModel - super.init(nibName: nil, bundle: nil) + super.init( + nibName: nil, + bundle: nil + ) } - + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + deinit { + clusterer.clear() + } + public override func viewDidLoad() { super.viewDidLoad() + configureUI() + bind() } -} - -#if DEBUG -import SwiftUI -import FeatureDependency -struct NearMapViewController_Preview: PreviewProvider { - static var previews: some View { - UIKitPreview( - NearMapViewController( - viewModel: NearMapViewModel() + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + if navigationController?.isNavigationBarHidden == true { + navigationController?.setNavigationBarHidden( + false, + animated: true + ) + } + } + + public override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + + private func configureUI() { + view.backgroundColor = .white + [busStopInformationView, naverMap].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + let safeArea = view.safeAreaLayoutGuide + + NSLayoutConstraint.activate([ + busStopInformationView.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor, + constant: -10 + ), + busStopInformationView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 7 + ), + busStopInformationView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -7 + ), + busStopInformationView.heightAnchor.constraint( + equalToConstant: 130 + ), + + naverMap.topAnchor.constraint( + equalTo: safeArea.topAnchor + ), + naverMap.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 7 + ), + naverMap.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -7 + ), + naverMap.bottomAnchor.constraint( + equalTo: busStopInformationView.topAnchor, + constant: -10 + ), + ]) + } + + private func bind() { + let tapGesture = UITapGestureRecognizer() + busStopInformationView.addGestureRecognizer(tapGesture) + + let output = viewModel.transform( + input: .init( + viewWillAppearEvent: rx + .methodInvoked(#selector(UIViewController.viewWillAppear)) + .map { _ in }, + informationViewTapEvent: tapGesture.rx.event.map { _ in }, + selectedBusStopId: leafMarkerUpdater.selectedBusStopId, + locationChangeEvent: cameraMoveEvent + ) + ) + + output.selectedBusStopInfo + .withUnretained(self) + .subscribe( + onNext: { vc, tuple in + let (response, distance) = tuple + vc.busStopInformationView.updateUI( + response: response, + distance: distance + ) + vc.moveCamera(response: response) + } ) + .disposed(by: disposeBag) + + output.nearStopList + .withUnretained(self) + .subscribe( + onNext: { vc, responses in + vc.drawMarker(responses: responses) + } + ) + .disposed(by: disposeBag) + + output.navigationTitle + .withUnretained(self) + .subscribe( + onNext: { viewController, title in + viewController.navigationItem.title = title + } + ) + .disposed(by: disposeBag) + } + + private func moveCamera(response: BusStopInfoResponse) { + guard let latitude = Double(response.latitude), + let longitude = Double(response.longitude) + else { return } + let location = NMGLatLng( + lat: latitude, + lng: longitude ) + let cameraUpdate = NMFCameraUpdate( + position: .init( + location, + zoom: naverMap.mapView.zoomLevel + ) + ) + let distance = location.distance( + to: naverMap.mapView.cameraPosition.target + ) + cameraUpdate.animation = distance > 10000 ? .none : .easeOut + cameraUpdate.animationDuration = 1 + naverMap.mapView.moveCamera(cameraUpdate) + } + + private func drawMarker(responses: [BusStopInfoResponse]) { + var keyTagMap = [AnyHashable: NSObject]() + responses.forEach { response in + guard let latitude = Double(response.latitude), + let longitude = Double(response.longitude), + let busStopIdInt = Int(response.busStopId) + else { return } + let location = NMGLatLng( + lat: latitude, + lng: longitude + ) + let itemKey = BusStopClusteringKey( + identifier: busStopIdInt, + position: location + ) + guard !clusterer.contains(itemKey) + else { return } + keyTagMap[itemKey] = NSNull() + } + clusterer.addAll(keyTagMap) + } +} + +extension NearMapViewController: NMFMapViewCameraDelegate { + public func mapView( + _ mapView: NMFMapView, + cameraDidChangeByReason reason: Int, + animated: Bool + ) { + guard let location1 = mapView.coveringBounds.boundsLatLngs.first, + let location2 = mapView.coveringBounds.boundsLatLngs.last + else { return } + let longitude1 = location1.lng + let latitude1 = location1.lat + let longitude2 = location2.lng + let latitude2 = location2.lat + + let longitudeRange = longitude1 < longitude2 ? + longitude1...longitude2 : longitude2...longitude1 + let latitudeRange = latitude2 < latitude1 ? + latitude2...latitude1 : latitude1...latitude2 + cameraMoveEvent.onNext((longitudeRange, latitudeRange)) } } -#endif diff --git a/Projects/Feature/NearMapFeature/Sources/ViewModel/NearMapViewModel.swift b/Projects/Feature/NearMapFeature/Sources/ViewModel/NearMapViewModel.swift index 70742222..7f06d9ff 100644 --- a/Projects/Feature/NearMapFeature/Sources/ViewModel/NearMapViewModel.swift +++ b/Projects/Feature/NearMapFeature/Sources/ViewModel/NearMapViewModel.swift @@ -1,26 +1,163 @@ -import Foundation +import UIKit +import Core +import DesignSystem import Domain import FeatureDependency import RxSwift +import RxRelay +import NMapsMap public final class NearMapViewModel: ViewModel { - private let disposeBag = DisposeBag() + @Injected(NearMapUseCase.self) var useCase: NearMapUseCase + private let coordinator: NearMapCoordinator + private let viewMode: NearMapMode - public init() { - } + private let disposeBag = DisposeBag() + + public init( + coordinator: NearMapCoordinator, + busStopId: String? + ) { + self.coordinator = coordinator + if let busStopId { + viewMode = .focused(busStopId: busStopId) + } else { + viewMode = .normal + } + } - public func transform(input: Input) -> Output { - let output = Output() + deinit { + coordinator.finish() + } + + public func transform(input: Input) -> Output { + let output = Output( + selectedBusStopInfo: .init(), + nearStopList: .init(), + navigationTitle: .init(value: "주변 정류장") + ) + + input.viewWillAppearEvent + .take(1) + .withUnretained(self) + .bind( + onNext: { viewModel, _ in + viewModel.useCase.requestAuthorize() + if case .normal = viewModel.viewMode { + viewModel.useCase.getNearByStopInfo() + .subscribe( + onNext: { selectedBusStopInfo in + output.selectedBusStopInfo.onNext( + selectedBusStopInfo + ) + } + ) + .disposed(by: viewModel.disposeBag) + } + } + ) + .disposed(by: disposeBag) + + input.viewWillAppearEvent + .withUnretained(self) + .bind( + onNext: { viewModel, _ in + viewModel.useCase.requestAuthorize() + if case .focused(let busStopId) = viewModel.viewMode { + let selectedBusStopInfo = viewModel.useCase + .getSelectedBusStop(busStopId: busStopId) + output.selectedBusStopInfo.onNext(selectedBusStopInfo) + output.navigationTitle.accept( + selectedBusStopInfo.0.busStopName + ) + } + } + ) + .disposed(by: disposeBag) + + input.informationViewTapEvent + .withLatestFrom(output.selectedBusStopInfo) + .withLatestFrom(useCase.locationStatus) { tuple, status in + (tuple, status) + } + .withUnretained(self) + .subscribe( + onNext: { viewModel, tuple in + let ((response, _), status) = tuple + switch viewModel.viewMode { + case .normal: + switch status { + case .denied: + guard let url = URL( + string: UIApplication + .openSettingsURLString + ) + else { return } + UIApplication.shared.open(url) + case .notDetermined: + viewModel.useCase.requestAuthorize() + default: + guard !response.busStopId.isEmpty + else { return } + viewModel.coordinator.startBusStopFlow( + busStopId: response.busStopId + ) + } + case .focused: + break + } + } + ) + .disposed(by: disposeBag) + + input.selectedBusStopId + .distinctUntilChanged() + .withUnretained(self) + .subscribe( + onNext: { viewModel, busStopId in + guard !busStopId.isEmpty else { return } + let selectedStopInfo = viewModel.useCase + .getSelectedBusStop(busStopId: busStopId) + output.selectedBusStopInfo.onNext(selectedStopInfo) + } + ) + .disposed(by: disposeBag) + + input.locationChangeEvent + .withUnretained(self) + .map { viewModel, range in + let (longitudeRange, latitudeRange) = range + return viewModel.useCase.getNearBusStopList( + longitudeRange: longitudeRange, + latitudeRange: latitudeRange) + } + .bind(to: output.nearStopList) + .disposed(by: disposeBag) + return output - } + } } extension NearMapViewModel { public struct Input { + let viewWillAppearEvent: Observable + let informationViewTapEvent: Observable + let selectedBusStopId: Observable + let locationChangeEvent + : Observable<(ClosedRange, ClosedRange)> } public struct Output { + let selectedBusStopInfo: PublishSubject<(BusStopInfoResponse, String)> + let nearStopList: PublishSubject<[BusStopInfoResponse]> + let navigationTitle: BehaviorRelay + } +} + +extension NearMapViewModel { + private enum NearMapMode { + case normal, focused(busStopId: String) } } diff --git a/Projects/Feature/SearchFeature/Demo/AppDelegate.swift b/Projects/Feature/SearchFeature/Demo/AppDelegate.swift index dd143edc..1bb057b0 100644 --- a/Projects/Feature/SearchFeature/Demo/AppDelegate.swift +++ b/Projects/Feature/SearchFeature/Demo/AppDelegate.swift @@ -1,17 +1,30 @@ import UIKit +import Core +import Domain +import FeatureDependency + +import RxSwift + @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + register() return true } - + // MARK: UISceneSession Lifecycle - + func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration { return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role) } - + func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set) { } + + func register() { + DIContainer.register( + type: SearchUseCase.self, DefaultSearchUseCase(stationListRepository: MockStationLIstRepository()) + ) + } } diff --git a/Projects/Feature/SearchFeature/Demo/SceneDelegate.swift b/Projects/Feature/SearchFeature/Demo/SceneDelegate.swift index 5989f840..7fdaf83f 100644 --- a/Projects/Feature/SearchFeature/Demo/SceneDelegate.swift +++ b/Projects/Feature/SearchFeature/Demo/SceneDelegate.swift @@ -1,5 +1,6 @@ import UIKit +import FeatureDependency import SearchFeature final class SceneDelegate: UIResponder, UIWindowSceneDelegate { @@ -15,10 +16,14 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate { let navigationController = UINavigationController() window?.rootViewController = navigationController window?.makeKeyAndVisible() - + let searchCoordinator = DefaultSearchCoordinator( - navigationController: navigationController + parent: nil, + navigationController: navigationController, + coordinatorProvider: MockCoordinatorProvider(), + flow: .fromAlarm ) + searchCoordinator.start() } diff --git a/Projects/Feature/SearchFeature/Sources/Coordinator/DafaultSearchCoordinator.swift b/Projects/Feature/SearchFeature/Sources/Coordinator/DafaultSearchCoordinator.swift index d5edeb28..d0e12e05 100644 --- a/Projects/Feature/SearchFeature/Sources/Coordinator/DafaultSearchCoordinator.swift +++ b/Projects/Feature/SearchFeature/Sources/Coordinator/DafaultSearchCoordinator.swift @@ -1,22 +1,70 @@ import UIKit +import Domain import FeatureDependency public final class DefaultSearchCoordinator: SearchCoordinator { - public var childCoordinators: [Coordinator] = [] - public var navigationController: UINavigationController + public var parent: Coordinator? + public var childs: [Coordinator] = [] + public let navigationController: UINavigationController + public let coordinatorProvider: CoordinatorProvider + private let flow: FlowState + public var coordinatorType: CoordinatorType = .search - public init(navigationController: UINavigationController) { + public init( + parent: Coordinator?, + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider, + flow: FlowState + ) { + self.parent = parent self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider + self.flow = flow } public func start() { let searchViewController = SearchViewController( - viewModel: SearchViewModel() + viewModel: SearchViewModel(coordinator: self) ) - navigationController.setViewControllers( - [searchViewController], - animated: false + navigationController.pushViewController( + searchViewController, + animated: true ) } } + +extension DefaultSearchCoordinator { + public func startBusStopFlow(stationId: String) { + let busStopCoordinator = coordinatorProvider.makeBusStopCoordinator( + parent: self, + navigationController: navigationController, + busStopId: stationId, + flow: flow + ) + childs.append(busStopCoordinator) + busStopCoordinator.start() + } + + public func startNearMapFlow() { + let nearMapCoordinator = coordinatorProvider.makeNearMapCoordinator( + parent: self, + navigationController: navigationController, + flow: flow, + busStopId: nil + ) + childs.append(nearMapCoordinator) + nearMapCoordinator.start() + } + + public func startNearMapFlow(busStopId: String) { + let nearMapCoordinator = coordinatorProvider.makeNearMapCoordinator( + parent: self, + navigationController: navigationController, + flow: flow, + busStopId: busStopId + ) + childs.append(nearMapCoordinator) + nearMapCoordinator.start() + } +} diff --git a/Projects/Feature/SearchFeature/Sources/Coordinator/SearchCoordinator.swift b/Projects/Feature/SearchFeature/Sources/Coordinator/SearchCoordinator.swift deleted file mode 100644 index 990e67de..00000000 --- a/Projects/Feature/SearchFeature/Sources/Coordinator/SearchCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol SearchCoordinator: Coordinator { -} diff --git a/Projects/Feature/SearchFeature/Sources/View/BusStopInfoView.swift b/Projects/Feature/SearchFeature/Sources/View/BusStopInfoView.swift new file mode 100644 index 00000000..74faf721 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/BusStopInfoView.swift @@ -0,0 +1,127 @@ +// +// BusStopInfoView.swift +// SearchFeature +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem +import Domain + +public final class BusStopInfoView: UIView { + private let busStopNameLabel: UILabel = { + let label = UILabel() + label.font = .nanumBold(size: 15) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.8 + return label + }() + + private let descriptionLabel: UILabel = { + let label = UILabel() + label.font = .nanumRegular(size: 13) + label.textAlignment = .left + label.textColor = DesignSystemAsset.gray5.color + return label + }() + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public func prepareForReuse() { + [busStopNameLabel, descriptionLabel].forEach { + $0.attributedText = nil + } + } + + public func updateUI( + response: BusStopInfoResponse, + searchKeyword: String + ) { + let attributedBusStopName = NSMutableAttributedString( + string: response.busStopName + ) + if let boldNameRange = response.busStopName.range( + of: searchKeyword, + options: .caseInsensitive + ) { + attributedBusStopName.addAttribute( + .font, + value: UIFont.nanumExtraBold(size: 15), + range: NSRange( + boldNameRange, + in: response.busStopName + ) + ) + } + + let attributedDescription = NSMutableAttributedString( + string: "\(response.busStopId) | \(response.direction) 방면" + ) + + if let boldDescriptionRange = response.busStopId.range( + of: searchKeyword, + options: .caseInsensitive + ) { + attributedDescription.addAttributes( + [ + .font: UIFont.nanumExtraBold(size: 13), + .foregroundColor: UIColor.black + ], + range: NSRange( + boldDescriptionRange, + in: response.busStopId + ) + ) + } + + busStopNameLabel.attributedText = attributedBusStopName + descriptionLabel.attributedText = attributedDescription + } + + private func configureUI() { + backgroundColor = .white + [busStopNameLabel, descriptionLabel].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + busStopNameLabel.topAnchor.constraint( + equalTo: topAnchor, + constant: 15 + ), + busStopNameLabel.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 15 + ), + busStopNameLabel.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -15 + ), + + descriptionLabel.topAnchor.constraint( + equalTo: busStopNameLabel.bottomAnchor, + constant: 6 + ), + descriptionLabel.leadingAnchor.constraint( + equalTo: busStopNameLabel.leadingAnchor + ), + descriptionLabel.bottomAnchor.constraint( + equalTo: bottomAnchor, + constant: -15 + ), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVCell.swift b/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVCell.swift new file mode 100644 index 00000000..9d82faf5 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVCell.swift @@ -0,0 +1,89 @@ +// +// RecentSearchCell.swift +// SearchFeature +// +// Created by 유하은 on 2024/02/27. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem +import Domain + +import RxSwift + +final class SearchTVCell: UITableViewCell { + let cellTapEvent = PublishSubject() + var disposeBag = DisposeBag() + + private let busStopInfoView = BusStopInfoView() + + override init( + style: UITableViewCell.CellStyle, + reuseIdentifier: String? + ) { + super.init( + style: style, + reuseIdentifier: reuseIdentifier + ) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + busStopInfoView.prepareForReuse() + disposeBag = .init() + } + + public func updateUI( + response: BusStopInfoResponse, + searchKeyword: String + ) { + busStopInfoView.updateUI( + response: response, + searchKeyword: searchKeyword + ) + bindTapGesture(response: response) + } + + private func bindTapGesture(response: BusStopInfoResponse) { + let tapGesture = UITapGestureRecognizer() + contentView.addGestureRecognizer(tapGesture) + tapGesture.rx.event + .map { _ in + response + } + .bind(to: cellTapEvent) + .disposed(by: disposeBag) + } + + private func configureUI() { + backgroundColor = .white + + [busStopInfoView].forEach { + contentView.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + busStopInfoView.topAnchor.constraint( + equalTo: contentView.topAnchor + ), + busStopInfoView.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor + ), + busStopInfoView.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor + ), + busStopInfoView.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor + ), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVMapCell.swift b/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVMapCell.swift new file mode 100644 index 00000000..ebe1f784 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/Cell/SearchTVMapCell.swift @@ -0,0 +1,122 @@ +// +// SearchTVMapCell.swift +// SearchFeature +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem +import Domain + +import RxSwift + +final class SearchTVMapCell: UITableViewCell { + let cellTapEvent = PublishSubject() + let mapBtnTapEvent = PublishSubject() + var disposeBag = DisposeBag() + + private let imgFontSize = 16 + private let busStopInfoView = BusStopInfoView() + private lazy var mapBtn: UIButton = { + var config = UIButton.Configuration.plain() + config.image = UIImage(systemName: "map")? + .withConfiguration( + UIImage.SymbolConfiguration( + font: .systemFont(ofSize: imgFontSize.f) + ) + ) + let button = UIButton(configuration: config) + button.tintColor = DesignSystemAsset.accentColor.color + return button + }() + + override init( + style: UITableViewCell.CellStyle, + reuseIdentifier: String? + ) { + super.init( + style: style, + reuseIdentifier: reuseIdentifier + ) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func prepareForReuse() { + super.prepareForReuse() + busStopInfoView.prepareForReuse() + disposeBag = .init() + } + + public func updateUI( + response: BusStopInfoResponse, + searchKeyword: String + ) { + busStopInfoView.updateUI( + response: response, + searchKeyword: searchKeyword + ) + bindTapGesture(response: response) + } + + private func bindTapGesture(response: BusStopInfoResponse) { + let tapGesture = UITapGestureRecognizer() + contentView.addGestureRecognizer(tapGesture) + tapGesture.rx.event + .map { _ in + response + } + .bind(to: cellTapEvent) + .disposed(by: disposeBag) + + mapBtn.rx.tap + .map { _ in + response.busStopId + } + .bind(to: mapBtnTapEvent) + .disposed(by: disposeBag) + } + + private func configureUI() { + backgroundColor = .white + + [busStopInfoView, mapBtn].forEach { + contentView.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + mapBtn.centerYAnchor.constraint( + equalTo: contentView.centerYAnchor + ), + mapBtn.trailingAnchor.constraint( + equalTo: contentView.trailingAnchor, + constant: -30 + ), + mapBtn.widthAnchor.constraint( + equalToConstant: imgFontSize.f + ), + + busStopInfoView.topAnchor.constraint( + equalTo: contentView.topAnchor + ), + busStopInfoView.leadingAnchor.constraint( + equalTo: contentView.leadingAnchor + ), + busStopInfoView.trailingAnchor.constraint( + equalTo: mapBtn.leadingAnchor, + constant: -15 + ), + busStopInfoView.bottomAnchor.constraint( + equalTo: contentView.bottomAnchor + ), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/RecentSearchHeaderView.swift b/Projects/Feature/SearchFeature/Sources/View/RecentSearchHeaderView.swift new file mode 100644 index 00000000..3b557e30 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/RecentSearchHeaderView.swift @@ -0,0 +1,95 @@ +// +// SearchTVHeaderView.swift +// SearchFeature +// +// Created by gnksbm on 4/3/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +import RxSwift + +public final class SearchTVHeaderView: UIView { + public let actionBtnTapEvent = PublishSubject() + public var disposeBag = DisposeBag() + + private let titleLabel: UILabel = { + let label = UILabel() + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.bold.font(size: 16) + label.textColor = DesignSystemAsset.settingColor.color + return label + }() + + private let actionBtn: UIButton = { + let button = UIButton() + button.titleLabel?.font + = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font(size: 16) + button.setTitleColor( + DesignSystemAsset.gray5.color, + for: .normal + ) + button.isHidden = true + return button + }() + + convenience init( + title: String, + btnTitle: String? = nil + ) { + self.init() + titleLabel.text = title + if let btnTitle { + actionBtn.setTitle( + btnTitle, + for: .normal + ) + actionBtn.isHidden = false + actionBtn.rx.tap + .bind(to: actionBtnTapEvent) + .disposed(by: disposeBag) + } + } + + public override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + [titleLabel, actionBtn].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint( + equalTo: topAnchor, + constant: 10 + ), + titleLabel.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 10 + ), + titleLabel.bottomAnchor.constraint( + equalTo: bottomAnchor, + constant: -10 + ), + + actionBtn.centerYAnchor.constraint( + equalTo: titleLabel.centerYAnchor + ), + actionBtn.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -10 + ), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/SearchNearStopInformationView.swift b/Projects/Feature/SearchFeature/Sources/View/SearchNearStopInformationView.swift new file mode 100644 index 00000000..15cefecc --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/SearchNearStopInformationView.swift @@ -0,0 +1,142 @@ +// +// SearchNearStopInformationView.swift +// SearchFeature +// +// Created by 유하은 on 2024/03/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem + +final class SearchNearStopInformationView: UIButton { + + private let busStopImage: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.busStopImage2.image + return imageView + }() + + private let nearStopLabel: UILabel = { + let label = UILabel() + label.textColor = .black + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.bold.font(size: 14) + label.textColor = DesignSystemAsset.settingColor.color + label.text = "내 주변 가장 가까운 정류장은?" + return label + }() + + private let nearStopNameLabel: UILabel = { + let label = UILabel() + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 15) + label.numberOfLines = 2 + label.adjustsFontForContentSizeCategory = true + label.minimumScaleFactor = 0.7 + label.sizeToFit() + label.textColor = DesignSystemAsset.gray5.color + return label + }() + + private let distanceLabel: UILabel = { + let label = UILabel() + label.font = .nanumBold(size: 15) + label.textColor = DesignSystemAsset.lightRed.color + return label + }() + + init() { + super.init(frame: .zero) + drawShadow() + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + func updateUI( + busStopName: String, + distance: String + ) { + nearStopNameLabel.text = busStopName + distanceLabel.text = distance + } + + private func drawShadow() { + layer.masksToBounds = false + layer.cornerRadius = 10 + layer.shadowColor = UIColor.black.cgColor + layer.shadowOffset = CGSize(width: 0, height: 2) + layer.shadowOpacity = 0.4 + layer.shadowRadius = 2 + } + + private func configureUI() { + backgroundColor = DesignSystemAsset.gray2.color + let symbolSize = 45 + + [ + busStopImage, + nearStopLabel, + nearStopNameLabel, + distanceLabel, + ] + .forEach { components in + addSubview(components) + components.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + + busStopImage.centerYAnchor.constraint( + equalTo: centerYAnchor + ), + busStopImage.leadingAnchor.constraint( + equalTo: leadingAnchor, + constant: 20 + ), + busStopImage.heightAnchor.constraint( + equalToConstant: CGFloat(symbolSize) + ), + busStopImage.widthAnchor.constraint( + equalToConstant: CGFloat(symbolSize) + ), + + nearStopLabel.leadingAnchor.constraint( + equalTo: busStopImage.trailingAnchor, + constant: 20 + ), + nearStopLabel.topAnchor.constraint( + equalTo: topAnchor, + constant: 20 + ), + nearStopNameLabel.topAnchor.constraint( + equalTo: nearStopLabel.bottomAnchor, + constant: 6 + ), + nearStopNameLabel.leadingAnchor.constraint( + equalTo: nearStopLabel.leadingAnchor + ), + nearStopNameLabel.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -15 + ), + nearStopNameLabel.bottomAnchor.constraint( + equalTo: bottomAnchor, + constant: -20 + ), + + distanceLabel.trailingAnchor.constraint( + equalTo: trailingAnchor, + constant: -20 + ), + distanceLabel.bottomAnchor.constraint( + equalTo: nearStopNameLabel.bottomAnchor + ), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/SearchTVBackgroundView.swift b/Projects/Feature/SearchFeature/Sources/View/SearchTVBackgroundView.swift new file mode 100644 index 00000000..dc893a44 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/SearchTVBackgroundView.swift @@ -0,0 +1,50 @@ +// +// SearchTVBackgroundView.swift +// SearchFeature +// +// Created by gnksbm on 3/15/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +final class SearchTVBackgroundView: UIView { + let descriptionLabel: UILabel = { + let label = UILabel() + let font = DesignSystemFontFamily.NanumSquareNeoOTF.regular.font( + size: 13 + ) + label.font = font + label.textAlignment = .center + label.textColor = DesignSystemAsset.gray5.color + return label + }() + + convenience init(text: String) { + self.init() + descriptionLabel.text = text + } + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + [descriptionLabel].forEach { + addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + NSLayoutConstraint.activate([ + descriptionLabel.centerXAnchor.constraint(equalTo: centerXAnchor), + descriptionLabel.centerYAnchor.constraint(equalTo: centerYAnchor), + ]) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/View/SearchTextFieldView.swift b/Projects/Feature/SearchFeature/Sources/View/SearchTextFieldView.swift new file mode 100644 index 00000000..9ea22209 --- /dev/null +++ b/Projects/Feature/SearchFeature/Sources/View/SearchTextFieldView.swift @@ -0,0 +1,52 @@ +// +// SearchTextFieldView.swift +// SearchFeature +// +// Created by 유하은 on 2024/02/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core +import DesignSystem + +public final class SearchTextFieldView: UITextField { + public init( + placeholder: String? = nil + ) { + super.init(frame: .zero) + configureUI() + setPlaceholder(placeholder) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + self.backgroundColor = DesignSystemAsset.gray3.color + self.font = + DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 15) + self.layer.cornerRadius = 15 + self.clipsToBounds = true + self.contentVerticalAlignment = .center + self.leftViewMode = .always + self.clearButtonMode = .always + self.addLeftPadding(width: 15) + self.autocorrectionType = .no + self.spellCheckingType = .no + self.textColor = .black + } + + private func setPlaceholder(_ placeholder: String?) { + self.placeholder = "버스 정류장을 검색하세요" + self.attributedPlaceholder = NSAttributedString( + string: self.placeholder ?? "", + attributes: [ + NSAttributedString.Key.foregroundColor: + DesignSystemAsset.gray4.color + ] + ) + } +} diff --git a/Projects/Feature/SearchFeature/Sources/ViewController/SearchViewController.swift b/Projects/Feature/SearchFeature/Sources/ViewController/SearchViewController.swift index 4ac8ea51..38d1689e 100644 --- a/Projects/Feature/SearchFeature/Sources/ViewController/SearchViewController.swift +++ b/Projects/Feature/SearchFeature/Sources/ViewController/SearchViewController.swift @@ -1,20 +1,458 @@ import UIKit +import Domain +import Core +import DesignSystem + import RxSwift +import RxCocoa public final class SearchViewController: UIViewController { private let viewModel: SearchViewModel + private let removeBtnTapEvent = PublishSubject() + private let cellTapEvent = PublishSubject() + private let mapBtnTapEvent = PublishSubject() + private let disposeBag = DisposeBag() + + private var recentSearchDataSource: RecentSearchDataSource! + private var searchedDataSource: SearchedDataSource! + + private let searchTextFieldView: SearchTextFieldView = { + let textFieldView = SearchTextFieldView() + textFieldView.accessibilityIdentifier = "정류장 검색" + return textFieldView + }() + + private let recentSearchBGView = SearchTVBackgroundView( + text: "최근 검색된 정류장이 없습니다" + ) + + private let searchedStopBGView = SearchTVBackgroundView( + text: "검색된 정류장이 없습니다" + ) + + private let recentSearchHeaderView = SearchTVHeaderView( + title: "최근 검색 정류장", + btnTitle: "삭제" + ) + + private lazy var recentSearchTableView: UITableView = { + let table = UITableView( + frame: .zero, + style: .insetGrouped + ) + table.register(SearchTVCell.self) + table.backgroundColor = DesignSystemAsset.tableViewColor.color + table.dataSource = recentSearchDataSource + table.delegate = self + table.accessibilityIdentifier = "최근검색" + table.separatorInset = UIEdgeInsets( + top: 0, + left: 13, + bottom: 0, + right: 13 + ) + return table + }() + + private lazy var searchedStopTableView: UITableView = { + let table = UITableView( + frame: .zero, + style: .insetGrouped + ) + table.register(SearchTVMapCell.self) + table.backgroundColor = DesignSystemAsset.tableViewColor.color + table.isHidden = true + table.dataSource = searchedDataSource + table.delegate = self + table.accessibilityIdentifier = "검색결과" + table.separatorInset = UIEdgeInsets( + top: 0, + left: 13, + bottom: 0, + right: 13 + ) + return table + }() + + private let nearBusStopHeaderLabel: UILabel = { + let label = UILabel() + label.font = .nanumBold(size: 16) + label.textAlignment = .left + label.textColor = DesignSystemAsset.settingColor.color + label.adjustsFontSizeToFitWidth = true + label.minimumScaleFactor = 0.8 + label.text = "주변 정류장" + return label + }() + + private let nearByStopView = SearchNearStopInformationView() + public init(viewModel: SearchViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) } - + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } public override func viewDidLoad() { super.viewDidLoad() + configureUI() + configureDataSource() + bind() + hideKeyboardOnTapOrDrag() } + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + configureNavigation() + } + + public override func viewWillDisappear(_ animated: Bool) { + super.viewWillDisappear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + searchTextFieldView.removeFromSuperview() + } + + private func hideKeyboardOnTapOrDrag() { + let tapGesture = UITapGestureRecognizer() + view.addGestureRecognizer(tapGesture) + tapGesture.rx.event + .withUnretained(self) + .subscribe( + onNext: { vc, _ in + vc.searchTextFieldView.endEditing(true) + } + ) + .disposed(by: disposeBag) + recentSearchTableView.keyboardDismissMode = .onDrag + searchedStopTableView.keyboardDismissMode = .onDrag + } + + private func configureUI() { + view.backgroundColor = .white + + [ + recentSearchHeaderView, + nearByStopView, + recentSearchTableView, + searchedStopTableView, + nearBusStopHeaderLabel, + ].forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + let safeArea = view.safeAreaLayoutGuide + + NSLayoutConstraint.activate([ + nearBusStopHeaderLabel.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor, + constant: -200 + ), + nearBusStopHeaderLabel.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 15 + ), + nearBusStopHeaderLabel.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -15 + ), + + nearByStopView.topAnchor.constraint( + equalTo: nearBusStopHeaderLabel.bottomAnchor, + constant: 15 + ), + nearByStopView.centerXAnchor.constraint( + equalTo: safeArea.centerXAnchor + ), + nearByStopView.widthAnchor.constraint( + equalTo: view.widthAnchor, + multiplier: 0.95 + ), + + recentSearchHeaderView.topAnchor.constraint( + equalTo: safeArea.topAnchor, + constant: 10 + ), + recentSearchHeaderView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor, + constant: 5 + ), + recentSearchHeaderView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor, + constant: -5 + ), + + recentSearchTableView.topAnchor.constraint( + equalTo: recentSearchHeaderView.bottomAnchor + ), + recentSearchTableView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor + ), + recentSearchTableView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor + ), + recentSearchTableView.bottomAnchor.constraint( + equalTo: nearBusStopHeaderLabel.topAnchor, + constant: -20 + ), + + searchedStopTableView.topAnchor.constraint( + equalTo: safeArea.topAnchor, + constant: 10 + ), + searchedStopTableView.leadingAnchor.constraint( + equalTo: safeArea.leadingAnchor + ), + searchedStopTableView.trailingAnchor.constraint( + equalTo: safeArea.trailingAnchor + ), + searchedStopTableView.bottomAnchor.constraint( + equalTo: safeArea.bottomAnchor + ), + ]) + } + + private func configureNavigation() { + if navigationController?.isNavigationBarHidden == true { + navigationController?.setNavigationBarHidden( + false, + animated: true + ) + } + + guard let navigationView = navigationController?.navigationBar + else { return } + navigationView.addSubview(searchTextFieldView) + searchTextFieldView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + searchTextFieldView.topAnchor.constraint( + equalTo: navigationView.topAnchor, + constant: 2.5 + ), + searchTextFieldView.trailingAnchor.constraint( + equalTo: navigationView.trailingAnchor, + constant: -10 + ), + searchTextFieldView.widthAnchor.constraint( + equalTo: navigationView.widthAnchor, + multiplier: 0.85 + ), + searchTextFieldView.heightAnchor.constraint( + equalTo: navigationView.heightAnchor, + multiplier: 0.9 + ) + ]) + } + + private func bind() { + let nearByStopTapGesture = UITapGestureRecognizer() + nearByStopView.addGestureRecognizer(nearByStopTapGesture) + + let input = SearchViewModel.Input( + viewWillAppearEvent: rx.methodInvoked( + #selector(UIViewController.viewWillAppear) + ).map { _ in }, + textFieldChangeEvent: searchTextFieldView.rx.text + .orEmpty + .skip(1) + .asObservable(), + removeBtnTapEvent: removeBtnTapEvent, + nearByStopTapEvent: nearByStopTapGesture.rx.event.map { _ in }, + cellTapEvent: cellTapEvent, + mapBtnTapEvent: mapBtnTapEvent + ) + + let output = viewModel.transform(input: input) + + output.recentSearchedResponse + .observe(on: MainScheduler.asyncInstance) + .withUnretained(self) + .subscribe( + onNext: { viewController, responses in + viewController.updateRecentSearchSnapshot( + responses: responses + ) + } + ) + .disposed(by: disposeBag) + + output.nearByStopInfo + .withUnretained(self) + .subscribe( + onNext: { viewController, tuple in + let (response, distance) = tuple + viewController.nearByStopView.updateUI( + busStopName: response.busStopName, + distance: distance + ) + } + ) + .disposed(by: disposeBag) + + output.searchedResponse + .withUnretained(self) + .subscribe( + onNext: { vc, regions in + vc.updateSearchedSnapshot(regions: regions) + } + ) + .disposed(by: disposeBag) + + searchTextFieldView.rx + .controlEvent(.editingChanged) + .withUnretained(self) + .subscribe( + onNext: { vc, _ in + guard let text = vc.searchTextFieldView.text + else { return } + vc.searchedStopTableView.isHidden = text.isEmpty + if text.isEmpty { + vc.nearBusStopHeaderLabel.isHidden = false + } else { + vc.nearBusStopHeaderLabel.isHidden = true + } + } + ) + .disposed(by: disposeBag) + + recentSearchHeaderView.actionBtnTapEvent + .bind(to: removeBtnTapEvent) + .disposed(by: recentSearchHeaderView.disposeBag) + } + + private func configureDataSource() { + configureRecentSearchDataSource() + configureSearchedDataSource() + } + + private func configureRecentSearchDataSource() { + recentSearchDataSource = .init( + tableView: recentSearchTableView + ) { [weak self] tableView, indexPath, response in + guard let self, + let cell = tableView.dequeueReusableCell( + withIdentifier: SearchTVCell.identifier, + for: indexPath + ) as? SearchTVCell + else { return .init() } + cell.updateUI( + response: response, + searchKeyword: self.searchTextFieldView.text ?? "" + ) + cell.cellTapEvent + .bind(to: self.cellTapEvent) + .disposed(by: cell.disposeBag) + return cell + } + } + + private func configureSearchedDataSource() { + searchedDataSource = .init( + tableView: searchedStopTableView + ) { [weak self] tableView, indexPath, response in + guard let self, + let cell = tableView.dequeueReusableCell( + withIdentifier: SearchTVMapCell.identifier, + for: indexPath + ) as? SearchTVMapCell + else { return .init() } + cell.updateUI( + response: response, + searchKeyword: self.searchTextFieldView.text ?? "" + ) + cell.cellTapEvent + .bind(to: self.cellTapEvent) + .disposed(by: cell.disposeBag) + cell.mapBtnTapEvent + .bind(to: self.mapBtnTapEvent) + .disposed(by: cell.disposeBag) + return cell + } + } + + private func updateRecentSearchSnapshot( + responses: [BusStopInfoResponse] + ) { + var snapshot = RecentSearchSnapshot() + snapshot.appendSections([0]) + snapshot.appendItems( + responses, + toSection: 0 + ) + recentSearchDataSource.apply( + snapshot, + animatingDifferences: false + ) + switch responses.isEmpty { + case true: + recentSearchTableView.backgroundView = recentSearchBGView + case false: + recentSearchTableView.backgroundView = nil + } + } + + private func updateSearchedSnapshot( + regions: [BusStopRegion] + ) { + var snapshot = SearchedSnapshot() + snapshot.appendSections(regions) + regions.forEach { region in + switch region { + case .seoul(let responses): + snapshot.appendItems( + responses, + toSection: region + ) + } + } + searchedDataSource.apply( + snapshot, + animatingDifferences: false + ) + switch snapshot.numberOfItems == 0 { + case true: + searchedStopTableView.backgroundView = searchedStopBGView + case false: + searchedStopTableView.backgroundView = nil + } + } +} + +extension SearchViewController: UITableViewDelegate { + public func tableView( + _ tableView: UITableView, + viewForHeaderInSection section: Int + ) -> UIView? { + var headerView: UIView? + if tableView === searchedStopTableView { + switch section { + case 0: + headerView = SearchTVHeaderView( + title: "서울" + ) + default: + break + } + } + return headerView + } +} + +extension SearchViewController { + typealias RecentSearchDataSource = + UITableViewDiffableDataSource + typealias RecentSearchSnapshot = + NSDiffableDataSourceSnapshot + typealias SearchedDataSource = + UITableViewDiffableDataSource + typealias SearchedSnapshot = + NSDiffableDataSourceSnapshot } diff --git a/Projects/Feature/SearchFeature/Sources/ViewModel/SearchViewModel.swift b/Projects/Feature/SearchFeature/Sources/ViewModel/SearchViewModel.swift index b3bca0ba..30b147f4 100644 --- a/Projects/Feature/SearchFeature/Sources/ViewModel/SearchViewModel.swift +++ b/Projects/Feature/SearchFeature/Sources/ViewModel/SearchViewModel.swift @@ -1,26 +1,116 @@ -import Foundation +import UIKit import Domain +import Core import FeatureDependency import RxSwift +import RxRelay public final class SearchViewModel: ViewModel { + private let coordinator: SearchCoordinator + + @Injected(SearchUseCase.self) var useCase: SearchUseCase + private let disposeBag = DisposeBag() + + public init(coordinator: SearchCoordinator) { + self.coordinator = coordinator + } - public init() { + deinit { + coordinator.finish() } public func transform(input: Input) -> Output { - let output = Output() + let output = Output( + searchedResponse: useCase.searchedStationList, + recentSearchedResponse: useCase.recentSearchResult, + nearByStopInfo: .init() + ) + + input.viewWillAppearEvent + .take(1) + .withUnretained(self) + .subscribe( + onNext: { vm, _ in + vm.useCase.updateNearByStop() + .bind(to: output.nearByStopInfo) + .disposed(by: vm.disposeBag) + } + ) + .disposed(by: disposeBag) + + input.removeBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, _ in + viewModel.useCase.removeRecentSearch() + } + ) + .disposed(by: disposeBag) + + input.textFieldChangeEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, text in + viewModel.useCase.search(term: text) + } + ) + .disposed(by: disposeBag) + + input.cellTapEvent + .withUnretained(self) + .subscribe( + onNext: { viewModel, response in + viewModel.useCase.saveRecentSearch(response: response) + viewModel.coordinator.startBusStopFlow( + stationId: response.busStopId + ) + } + ) + .disposed(by: disposeBag) + + input.nearByStopTapEvent + .withLatestFrom(useCase.locationStatus) + .withUnretained(self) + .subscribe( + onNext: { viewModel, status in + switch status { + case .notDetermined: + viewModel.useCase.requestAuthorize() + default: + viewModel.coordinator.startNearMapFlow() + } + } + ) + .disposed(by: disposeBag) + + input.mapBtnTapEvent + .withUnretained(self) + .subscribe( + onNext: { vm, busStopId in + vm.coordinator.startNearMapFlow(busStopId: busStopId) + } + ) + .disposed(by: disposeBag) return output } } extension SearchViewModel { public struct Input { + let viewWillAppearEvent: Observable + let textFieldChangeEvent: Observable + let removeBtnTapEvent: Observable + let nearByStopTapEvent: Observable + let cellTapEvent: Observable + let mapBtnTapEvent: PublishSubject } public struct Output { + let searchedResponse: PublishSubject<[BusStopRegion]> + let recentSearchedResponse: BehaviorSubject<[BusStopInfoResponse]> + let nearByStopInfo: PublishSubject<(BusStopInfoResponse, String)> } } diff --git a/Projects/Feature/SettingsFeature/Sources/Coordinator/DefaultSettingsCoordinator.swift b/Projects/Feature/SettingsFeature/Sources/Coordinator/DefaultSettingsCoordinator.swift index f8743cf5..e6a75f64 100644 --- a/Projects/Feature/SettingsFeature/Sources/Coordinator/DefaultSettingsCoordinator.swift +++ b/Projects/Feature/SettingsFeature/Sources/Coordinator/DefaultSettingsCoordinator.swift @@ -2,21 +2,54 @@ import UIKit import FeatureDependency -public final class DefaultSettingsCoordinator: SettingsCoordinator { - public var childCoordinators: [Coordinator] = [] +public final class DefaultSettingsCoordinator { + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController - + public var coordinatorType: CoordinatorType = .setting + public init(navigationController: UINavigationController) { self.navigationController = navigationController } - + public func start() { - let homeViewController = SettingsViewController( - viewModel: SettingsViewModel() + let settingsViewController = SettingsViewController( + viewModel: SettingsViewModel(coordinator: self) ) navigationController.setViewControllers( - [homeViewController], + [settingsViewController], animated: false ) } } + +extension DefaultSettingsCoordinator: SettingsCoordinator { + public func setDefaultAlarm() { + let setAlarmVC = AlarmSettingViewController( + viewModel: SettingsViewModel(coordinator: self) + ) + navigationController.pushViewController(setAlarmVC, animated: true) + } + + public func presentPrivacy(url: String) { + let privacyVC = PrivacyWebViewController( + viewModel: PrivacyWebViewModel( + coordinator: self, + urlString: url + ) + ) + navigationController.pushViewController(privacyVC, animated: true) + } + + public func presentMail(vc: UIViewController) { + navigationController.present( + vc, + animated: true, + completion: nil + ) + } + + public func dismissMail() { + navigationController.dismiss(animated: true) + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/Coordinator/SettingsCoordinator.swift b/Projects/Feature/SettingsFeature/Sources/Coordinator/SettingsCoordinator.swift deleted file mode 100644 index a9db857d..00000000 --- a/Projects/Feature/SettingsFeature/Sources/Coordinator/SettingsCoordinator.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -import FeatureDependency - -public protocol SettingsCoordinator: Coordinator { -} diff --git a/Projects/Feature/SettingsFeature/Sources/View/SettingAlarmViewCell.swift b/Projects/Feature/SettingsFeature/Sources/View/SettingAlarmViewCell.swift new file mode 100644 index 00000000..9de76663 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/View/SettingAlarmViewCell.swift @@ -0,0 +1,91 @@ +// +// SettingAlarmViewCell.swift +// SettingsFeature +// +// Created by 유하은 on 2024/02/14. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +import RxSwift + +final class SettingAlarmViewCell: UITableViewCell { + private var disposeBag = DisposeBag() + + private let stackView: UIStackView = { + let stackView = UIStackView() + stackView.axis = .vertical + stackView.distribution = .equalSpacing + stackView.spacing = 15 + return stackView + }() + + override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { + super.init(style: style, reuseIdentifier: reuseIdentifier) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + addSubview(stackView) + stackView.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + stackView.leadingAnchor.constraint(equalTo: leadingAnchor, + constant: 16), + stackView.trailingAnchor.constraint(equalTo: trailingAnchor, + constant: -16), + stackView.topAnchor.constraint(equalTo: topAnchor, + constant: 8), + stackView.bottomAnchor.constraint(equalTo: bottomAnchor, + constant: -8) + ]) + + addSquareView(withText: "1분 전") + addSquareView(withText: "3분 전") + addSquareView(withText: "5분 전") + addSquareView(withText: "10분 전") + } + + private func addSquareView(withText text: String) { + + let squareView = UIView() + + squareView.frame = CGRect(x: 0, y: 0, width: 200, height: 100) + squareView.layer.cornerRadius = 20 + squareView.backgroundColor = DesignSystemAsset.gray3.color + squareView.translatesAutoresizingMaskIntoConstraints = false + + let label = UILabel() + + label.text = text + label.textColor = DesignSystemAsset.gray5.color + label.textAlignment = .center + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.light.font(size: 16) + label.translatesAutoresizingMaskIntoConstraints = false + + squareView.addSubview(label) + + NSLayoutConstraint.activate([ + squareView.widthAnchor.constraint(equalToConstant: 100), + squareView.heightAnchor.constraint(equalToConstant: 40), + + label.leadingAnchor.constraint(equalTo: squareView.leadingAnchor, + constant: 10), + label.trailingAnchor.constraint(equalTo: squareView.trailingAnchor, + constant: -10), + label.topAnchor.constraint(equalTo: squareView.topAnchor, + constant: 5), + label.bottomAnchor.constraint(equalTo: squareView.bottomAnchor, + constant: -5) + ]) + + stackView.addArrangedSubview(squareView) + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/View/SettingButton.swift b/Projects/Feature/SettingsFeature/Sources/View/SettingButton.swift new file mode 100644 index 00000000..4142fff6 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/View/SettingButton.swift @@ -0,0 +1,121 @@ +// +// SettingButton.swift +// SettingsFeature +// +// Created by Jisoo HAM on 2/15/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +public final class SettingButton: UIButton { + + private let iconName: String + private let title: String + private let rightTitle: String? + private let isHiddenArrowRight: Bool + + private lazy var leftIconLabel: UIImageView = { + let title = iconName + let view = UIImageView(image: UIImage(systemName: title)) + view.tintColor = DesignSystemAsset.routeTimeColor.color + view.contentMode = .scaleAspectFill + return view + }() + + private lazy var titleLabels: UILabel = { + let label = UILabel() + label.numberOfLines = 1 + label.font + = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font(size: 16) + label.textColor = DesignSystemAsset.settingColor.color + label.text = title + return label + }() + + private lazy var rightLabel: UILabel = { + let label = UILabel() + label.numberOfLines = 1 + label.font + = DesignSystemFontFamily.NanumSquareNeoOTF.bold.font(size: 13) + label.textColor = DesignSystemAsset.settingColor.color + label.text = rightTitle + return label + }() + + private let arrowRightLabel: UIImageView = { + let view = UIImageView(image: UIImage(systemName: "chevron.right")) + view.tintColor = DesignSystemAsset.routeTimeColor.color + return view + }() + + public init( + iconName: String, + title: String, + rightTitle: String?, + isHiddenArrowRight: Bool + ) { + self.iconName = iconName + self.title = title + self.rightTitle = rightTitle + self.isHiddenArrowRight = isHiddenArrowRight + + super.init(frame: .zero) + + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + [titleLabels, rightLabel, arrowRightLabel, leftIconLabel] + .forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + } + [leftIconLabel, titleLabels] + .forEach { addSubview($0) } + + if isHiddenArrowRight { + addSubview(rightLabel) + rightLabel.topAnchor.constraint( + equalTo: topAnchor, + constant: 2 + ).isActive = true + rightLabel.trailingAnchor.constraint( + equalTo: trailingAnchor + ).isActive = true + + } else { + addSubview(arrowRightLabel) + arrowRightLabel.topAnchor.constraint( + equalTo: topAnchor + ).isActive = true + arrowRightLabel.trailingAnchor.constraint( + equalTo: trailingAnchor + ).isActive = true + } + + NSLayoutConstraint.activate([ + leftIconLabel.topAnchor.constraint( + equalTo: topAnchor + ), + leftIconLabel.leadingAnchor.constraint( + equalTo: leadingAnchor + ), + leftIconLabel.widthAnchor.constraint(equalToConstant: 20), + leftIconLabel.heightAnchor.constraint(equalToConstant: 20), + titleLabels.topAnchor.constraint( + equalTo: topAnchor, + constant: 2 + ), + titleLabels.leadingAnchor.constraint( + equalTo: leftIconLabel.trailingAnchor, + constant: 15 + ), + ]) + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/View/SettingButtonView.swift b/Projects/Feature/SettingsFeature/Sources/View/SettingButtonView.swift new file mode 100644 index 00000000..eb026d86 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/View/SettingButtonView.swift @@ -0,0 +1,151 @@ +// +// SettingButtonView.swift +// SettingsFeature +// +// Created by Jisoo Ham on 2024/02/27. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +class SettingButtonView: UIView { + + public let basicAlarmSetting: SettingButton = { + let view = SettingButton( + iconName: "alarm", + title: "알람 설정", + rightTitle: "", + isHiddenArrowRight: false + ) + return view + }() + public lazy var developVersion: SettingButton = { + let view = SettingButton( + iconName: "exclamationmark.circle", + title: "프로그램 정보", + rightTitle: "v \(String.getCurrentVersion())", + isHiddenArrowRight: true + ) + return view + }() + public lazy var termsPrivacyBtn: SettingButton = { + let view = SettingButton( + iconName: "lock.shield", + title: "서비스 이용약관", + rightTitle: "", + isHiddenArrowRight: false + ) + return view + }() + public lazy var locationPrivacyBtn: SettingButton = { + let btn = SettingButton( + iconName: "location.circle", + title: "개인정보처리방침", + rightTitle: "", + isHiddenArrowRight: false + ) + return btn + }() + public lazy var inquryBtn: SettingButton = { + let btn = SettingButton( + iconName: "questionmark.circle", + title: "문의하기", + rightTitle: "", + isHiddenArrowRight: false + ) + return btn + }() + + override init(frame: CGRect) { + super.init(frame: .zero) + + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + [developVersion, termsPrivacyBtn, + locationPrivacyBtn, inquryBtn] + .forEach { components in + components.translatesAutoresizingMaskIntoConstraints = false + components.heightAnchor.constraint( + equalToConstant: 30 + ).isActive = true + addSubview(components) + } + + NSLayoutConstraint.activate([ +// basicAlarmSetting.topAnchor.constraint( +// equalTo: topAnchor +// ), +// basicAlarmSetting.leadingAnchor.constraint( +// equalTo: leadingAnchor +// ), +// basicAlarmSetting.trailingAnchor.constraint( +// equalTo: trailingAnchor +// ), +// basicAlarmSetting.widthAnchor.constraint( +// equalTo: widthAnchor +// ), +// termsPrivacyBtn.topAnchor.constraint( +// equalTo: basicAlarmSetting.bottomAnchor, +// constant: 20 +// ), + inquryBtn.topAnchor.constraint( + equalTo: topAnchor + ), + inquryBtn.leadingAnchor.constraint( + equalTo: leadingAnchor + ), + inquryBtn.trailingAnchor.constraint( + equalTo: trailingAnchor + ), + inquryBtn.widthAnchor.constraint( + equalTo: widthAnchor + ), + termsPrivacyBtn.topAnchor.constraint( + equalTo: inquryBtn.bottomAnchor, + constant: 20 + ), + termsPrivacyBtn.leadingAnchor.constraint( + equalTo: leadingAnchor + ), + termsPrivacyBtn.trailingAnchor.constraint( + equalTo: trailingAnchor + ), + termsPrivacyBtn.widthAnchor.constraint( + equalTo: widthAnchor + ), + locationPrivacyBtn.topAnchor.constraint( + equalTo: termsPrivacyBtn.bottomAnchor, + constant: 20 + ), + locationPrivacyBtn.leadingAnchor.constraint( + equalTo: leadingAnchor + ), + locationPrivacyBtn.trailingAnchor.constraint( + equalTo: trailingAnchor + ), + locationPrivacyBtn.widthAnchor.constraint( + equalTo: widthAnchor + ), + developVersion.topAnchor.constraint( + equalTo: locationPrivacyBtn.bottomAnchor, + constant: 20 + ), + developVersion.leadingAnchor.constraint( + equalTo: leadingAnchor + ), + developVersion.trailingAnchor.constraint( + equalTo: trailingAnchor + ), + developVersion.widthAnchor.constraint( + equalTo: widthAnchor + ), + ]) + } + +} diff --git a/Projects/Feature/SettingsFeature/Sources/View/SettingTimeButtonView.swift b/Projects/Feature/SettingsFeature/Sources/View/SettingTimeButtonView.swift new file mode 100644 index 00000000..cb9493f1 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/View/SettingTimeButtonView.swift @@ -0,0 +1,99 @@ +// +// SettingTimeButtonView.swift +// SettingsFeature +// +// Created by Jisoo HAM on 3/10/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import DesignSystem + +public final class SettingTimeButtonView: UIView { + + private let width: CGFloat = 111 + private let height: CGFloat = 40 + + public let firstBtn: UIButton = { + var config = UIButton.Configuration.filled() + config.baseBackgroundColor = DesignSystemAsset.gray3.color + config.baseForegroundColor = DesignSystemAsset.gray5.color + config.background.cornerRadius = 20 + config.title = "1분 전" + let button = UIButton(configuration: config) + return button + }() + + public let secondBtn: UIButton = { + var config = UIButton.Configuration.filled() + config.baseBackgroundColor = DesignSystemAsset.gray3.color + config.baseForegroundColor = DesignSystemAsset.gray5.color + config.background.cornerRadius = 20 + config.title = "3분 전" + let button = UIButton(configuration: config) + return button + }() + public let thirdBtn: UIButton = { + var config = UIButton.Configuration.filled() + config.baseBackgroundColor = DesignSystemAsset.gray3.color + config.baseForegroundColor = DesignSystemAsset.gray5.color + config.background.cornerRadius = 20 + config.title = "5분 전" + let button = UIButton(configuration: config) + return button + }() + public let fourthBtn: UIButton = { + var config = UIButton.Configuration.filled() + config.baseBackgroundColor = DesignSystemAsset.gray3.color + config.baseForegroundColor = DesignSystemAsset.gray5.color + config.background.cornerRadius = 20 + config.title = "10분 전" + let button = UIButton(configuration: config) + return button + }() + + private let stackView: UIStackView = { + let stack = UIStackView() + stack.axis = .vertical + stack.distribution = .equalSpacing + stack.alignment = .center + stack.spacing = 23 + return stack + }() + + public override init(frame: CGRect) { + super.init(frame: .zero) + + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + private func configureUI() { + [stackView, firstBtn, secondBtn, thirdBtn, fourthBtn] + .forEach { $0.translatesAutoresizingMaskIntoConstraints = false } + + [firstBtn, secondBtn, thirdBtn, fourthBtn] + .forEach { + stackView.addArrangedSubview($0) + + $0.widthAnchor.constraint( + equalToConstant: width + ).isActive = true + $0.heightAnchor.constraint( + equalToConstant: height + ).isActive = true + } + + addSubview(stackView) + + NSLayoutConstraint.activate([ + stackView.centerXAnchor.constraint(equalTo: centerXAnchor), + stackView.centerYAnchor.constraint(equalTo: centerYAnchor), + stackView.widthAnchor.constraint(equalTo: widthAnchor), + ]) + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/ViewController/AlarmSettingViewController.swift b/Projects/Feature/SettingsFeature/Sources/ViewController/AlarmSettingViewController.swift new file mode 100644 index 00000000..8dbd6c34 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/ViewController/AlarmSettingViewController.swift @@ -0,0 +1,202 @@ +// +// AlarmSettingViewController.swift +// SettingsFeature +// +// Created by 유하은 on 2024/02/14. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// +import UIKit + +import DesignSystem + +import RxSwift + +public final class AlarmSettingViewController: UIViewController { + + private let viewModel: SettingsViewModel + + public init(viewModel: SettingsViewModel) { + self.viewModel = viewModel + super.init(nibName: nil, bundle: nil) + } + + private let settingAlarmViewCell = SettingAlarmViewCell() + + // 알람뷰셀과 timeLabel 스택 + private let alarmStack: UIStackView = { + let stack = UIStackView() + stack.axis = .vertical + stack.distribution = .fillProportionally + stack.alignment = .leading + stack.spacing = 10 + return stack + }() + + // alarmSettingLabel 1 & 2 의 스택 + private let labelStack: UIStackView = { + let stack = UIStackView() + stack.axis = .horizontal + stack.distribution = .fill + stack.alignment = .center + stack.spacing = 0 + return stack + }() + + private let labelStack2: UIStackView = { + let stack = UIStackView() + stack.axis = .vertical + stack.distribution = .fill + stack.alignment = .center + stack.spacing = 0 + return stack + }() + + // labelStack과 busImg의 스택 + private let labelImgStack: UIStackView = { + let stack = UIStackView() + stack.axis = .horizontal + stack.distribution = .fill + stack.alignment = .center + stack.spacing = 10 + return stack + }() + + private let timeLabel: UILabel = { + let label = UILabel() + label.font + = DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 18) + label.textColor = DesignSystemAsset.gray6.color + return label + }() + + private let alarmSettingLabel: UILabel = { + let label = UILabel() + label.font + = DesignSystemFontFamily.NanumSquareNeoOTF.extraBold.font(size: 24) + label.text = "버스 도착 알림" + return label + }() + + private let alarmSettingLabel2: UILabel = { + let label = UILabel() + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 22) + label.text = "을" + return label + }() + + private let alarmSettingLabel3: UILabel = { + let label = UILabel() + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 19) + label.text = "몇 분 전에 울릴까요?" + return label + }() + + private let busIconView: UIImageView = { + let imageView = UIImageView() + imageView.image = DesignSystemAsset.bus2.image + return imageView + }() + + private let squareView: UIView = { + let squareView = UIView() + + squareView.layer.cornerRadius = 30 + squareView.backgroundColor = DesignSystemAsset.gray6.color + + return squareView + }() + + private let endLabel: UILabel = { + let label = UILabel() + label.text = "완료" + label.textColor = .white + label.textAlignment = .center + label.font = + DesignSystemFontFamily.NanumSquareNeoOTF.regular.font(size: 18) + + return label + }() + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func viewDidLoad() { + super.viewDidLoad() + + view.backgroundColor = .systemBackground + + [settingAlarmViewCell, alarmStack, labelStack, labelStack2, + labelImgStack, timeLabel, alarmSettingLabel, alarmSettingLabel2, + alarmSettingLabel3, busIconView, squareView, endLabel] + .forEach { + view.addSubview($0) + $0.translatesAutoresizingMaskIntoConstraints = false + } + + [alarmSettingLabel, alarmSettingLabel2] + .forEach { components in + labelStack.addArrangedSubview(components) + } + + [labelStack, alarmSettingLabel3] + .forEach { components in + labelStack2.addArrangedSubview(components) + } + + [labelStack2, busIconView] + .forEach { components in + labelImgStack.addArrangedSubview(components) + } + + [settingAlarmViewCell, timeLabel] + .forEach { components in + alarmStack + .addArrangedSubview(components) + } + + NSLayoutConstraint.activate([ + squareView.widthAnchor.constraint(equalToConstant: 195), + squareView.heightAnchor.constraint(equalToConstant: 56), + squareView.centerXAnchor.constraint(equalTo: view.centerXAnchor), + squareView.bottomAnchor.constraint( + equalTo: view.bottomAnchor, + constant: -20 + ), + + endLabel.leadingAnchor.constraint( + equalTo: squareView.leadingAnchor, + constant: 10 + ), + endLabel.trailingAnchor.constraint( + equalTo: squareView.trailingAnchor, + constant: -10), + endLabel.topAnchor.constraint( + equalTo: squareView.topAnchor, + constant: 5 + ), + endLabel.bottomAnchor.constraint( + equalTo: squareView.bottomAnchor, + constant: -5 + ), + endLabel.widthAnchor.constraint(equalToConstant: 195), + + labelImgStack.centerXAnchor.constraint( + equalTo: view.centerXAnchor + ), + labelImgStack.topAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.topAnchor, + constant: 30 + ), + + alarmStack.topAnchor.constraint( + equalTo: labelImgStack.bottomAnchor, + constant: 30 + ), + alarmStack.centerXAnchor.constraint(equalTo: view.centerXAnchor), + + ]) + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/ViewController/PrivacyWebViewController.swift b/Projects/Feature/SettingsFeature/Sources/ViewController/PrivacyWebViewController.swift new file mode 100644 index 00000000..f514e432 --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/ViewController/PrivacyWebViewController.swift @@ -0,0 +1,131 @@ +// +// PrivacyWebViewController.swift +// SettingsFeature +// +// Created by Jisoo HAM on 2/29/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import WebKit + +import RxSwift + +public final class PrivacyWebViewController +: UIViewController, WKNavigationDelegate { + private let viewModel: PrivacyWebViewModel + private let disposeBag = DisposeBag() + + private let webView: WKWebView = { + let webView = WKWebView() + webView.translatesAutoresizingMaskIntoConstraints = false + webView.allowsBackForwardNavigationGestures = true + webView.backgroundColor = .white + return webView + }() + private let indicator: UIActivityIndicatorView = { + let indicator = UIActivityIndicatorView() + indicator.translatesAutoresizingMaskIntoConstraints = false + return indicator + }() + + public init(viewModel: PrivacyWebViewModel) { + self.viewModel = viewModel + + super.init(nibName: nil, bundle: nil) + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.setNavigationBarHidden( + false, + animated: true + ) + } + + public override func viewDidLoad() { + super.viewDidLoad() + view.backgroundColor = .white + + navigationController?.navigationBar.barTintColor = .white + webView.navigationDelegate = self + + configureUI() + bind() + } + + private func bind() { + let input = PrivacyWebViewModel.Input( + viewWillAppearEvent: rx + .methodInvoked(#selector(UIViewController.viewWillAppear)) + .map { _ in } + ) + + let output = viewModel.transform(input: input) + + output.privacyString + .bind { [weak self] str in + guard let self = self else { return } + self.updateUI(urlString: str) + } + .disposed(by: disposeBag) + + } + + private func configureUI() { + view.addSubview(webView) + + view.insertSubview(indicator, aboveSubview: webView) + + NSLayoutConstraint.activate([ + webView.topAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.topAnchor + ), + webView.leadingAnchor.constraint( + equalTo: view.leadingAnchor + ), + webView.trailingAnchor.constraint( + equalTo: view.trailingAnchor + ), + webView.bottomAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.bottomAnchor + ), + indicator.centerXAnchor.constraint( + equalTo: webView.centerXAnchor + ), + indicator.centerYAnchor.constraint( + equalTo: webView.centerYAnchor + ) + ]) + } + + private func updateUI(urlString: String) { + guard let url = URL(string: urlString) ?? URL(string: "") + else { return } + + let request = URLRequest(url: url) + webView.load(request) + } + +} + +extension PrivacyWebViewController { + public func webView( + _ webView: WKWebView, + didCommit navigation: WKNavigation! + ) { + indicator.startAnimating() + } + + public func webView( + _ webView: WKWebView, + didFinish navigation: WKNavigation! + ) { + indicator.stopAnimating() + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/ViewController/SettingsViewController.swift b/Projects/Feature/SettingsFeature/Sources/ViewController/SettingsViewController.swift index ef14f2b2..ea0ec0b0 100644 --- a/Projects/Feature/SettingsFeature/Sources/ViewController/SettingsViewController.swift +++ b/Projects/Feature/SettingsFeature/Sources/ViewController/SettingsViewController.swift @@ -1,10 +1,27 @@ import UIKit +import Core +import DesignSystem + import RxSwift +import RxCocoa public final class SettingsViewController: UIViewController { private let viewModel: SettingsViewModel + private let disposeBag = DisposeBag() + + private let titleLabel: UILabel = { + let label = UILabel() + label.text = "설정" + label.textColor = DesignSystemAsset.settingColor.color + label.font + = DesignSystemFontFamily.NanumSquareNeoOTF.extraBold.font(size: 25) + return label + }() + + private let buttonsView = SettingButtonView() + public init(viewModel: SettingsViewModel) { self.viewModel = viewModel super.init(nibName: nil, bundle: nil) @@ -14,7 +31,68 @@ public final class SettingsViewController: UIViewController { fatalError("init(coder:) has not been implemented") } + public override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + navigationController?.setNavigationBarHidden( + true, + animated: true + ) + } + public override func viewDidLoad() { super.viewDidLoad() + view.backgroundColor = .white + + configureUI() + bind() + } + + private func configureUI() { + [titleLabel, buttonsView] + .forEach { + $0.translatesAutoresizingMaskIntoConstraints = false + view.addSubview($0) + } + + NSLayoutConstraint.activate([ + titleLabel.topAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.topAnchor, + constant: 15 + ), + titleLabel.leadingAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.leadingAnchor, + constant: 15 + ), + buttonsView.topAnchor.constraint( + equalTo: titleLabel.bottomAnchor, + constant: 40 + ), + buttonsView.leadingAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.leadingAnchor, + constant: 18 + ), + buttonsView.trailingAnchor.constraint( + equalTo: view.safeAreaLayoutGuide.trailingAnchor, + constant: -20 + ), + buttonsView.heightAnchor.constraint( + equalToConstant: 250 + ) + ]) + } + + private func bind() { + _ = viewModel.transform( + input: + .init( +// defaultAlarmTapEvent +// : buttonsView.basicAlarmSetting.rx.tap.asObservable(), + termsTapEvent + : buttonsView.termsPrivacyBtn.rx.tap.asObservable(), + locationTapEvent + : buttonsView.locationPrivacyBtn.rx.tap.asObservable(), + inquryTapEvent: buttonsView.inquryBtn.rx.tap.asObservable() + ) + ) } } diff --git a/Projects/Feature/SettingsFeature/Sources/ViewModel/PrivacyWebViewModel.swift b/Projects/Feature/SettingsFeature/Sources/ViewModel/PrivacyWebViewModel.swift new file mode 100644 index 00000000..e9519a0e --- /dev/null +++ b/Projects/Feature/SettingsFeature/Sources/ViewModel/PrivacyWebViewModel.swift @@ -0,0 +1,53 @@ +// +// PrivacyWebViewModel.swift +// SettingsFeature +// +// Created by Jisoo HAM on 2/29/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain +import FeatureDependency + +import RxSwift + +public final class PrivacyWebViewModel: ViewModel { + private let coordinator: SettingsCoordinator + public var urlString: String + private let disposeBag = DisposeBag() + + public init( + coordinator: SettingsCoordinator, + urlString: String + ) { + self.coordinator = coordinator + self.urlString = urlString + } + + public func transform(input: Input) -> Output { + let output = Output(privacyString: .init()) + + input.viewWillAppearEvent + .subscribe(onNext: { [weak self] _ in + guard let self = self else { return } + + let combinedUrlString = "https://" + self.urlString + output.privacyString.onNext(combinedUrlString) + }) + .disposed(by: disposeBag) + + return output + } + +} +extension PrivacyWebViewModel { + public struct Input { + let viewWillAppearEvent: Observable + } + + public struct Output { + var privacyString: PublishSubject + } +} diff --git a/Projects/Feature/SettingsFeature/Sources/ViewModel/SettingsViewModel.swift b/Projects/Feature/SettingsFeature/Sources/ViewModel/SettingsViewModel.swift index 79284f03..c6c42ddd 100644 --- a/Projects/Feature/SettingsFeature/Sources/ViewModel/SettingsViewModel.swift +++ b/Projects/Feature/SettingsFeature/Sources/ViewModel/SettingsViewModel.swift @@ -5,20 +5,107 @@ import FeatureDependency import RxSwift -public final class SettingsViewModel: ViewModel { +import MessageUI + +public final class SettingsViewModel +: NSObject, ViewModel, MFMailComposeViewControllerDelegate { + private let coordinator: SettingsCoordinator private let disposeBag = DisposeBag() - public init() { + public init(coordinator: SettingsCoordinator) { + self.coordinator = coordinator } public func transform(input: Input) -> Output { let output = Output() + +// input.defaultAlarmTapEvent +// .withUnretained(self) +// .subscribe(onNext: { viewModel, _ in +// // 뷰 이동 +// viewModel.coordinator.setDefaultAlarm() +// print("알람설정 tap") +// }) +// .disposed(by: disposeBag) + + input.termsTapEvent + .withUnretained(self) + .subscribe(onNext: { viewModel, _ in + guard let termsPrivacyURL + = Bundle.main.object( + forInfoDictionaryKey: "TERMS_OF_PRIVACY_URL" + ) as? String + else { return } + viewModel.coordinator.presentPrivacy(url: termsPrivacyURL) + }) + .disposed(by: disposeBag) + + input.locationTapEvent + .withUnretained(self) + .subscribe(onNext: { viewModel, _ in + guard let locationURL = Bundle.main.object( + forInfoDictionaryKey: "LOCATION_PRIVACY_URL" + ) as? String + else { return } + viewModel.coordinator.presentPrivacy(url: locationURL) + + }) + .disposed(by: disposeBag) + + input.inquryTapEvent + .withUnretained(self) + .subscribe(onNext: { viewModel, _ in + if MFMailComposeViewController.canSendMail() { + let mailViewController = MFMailComposeViewController() + mailViewController.mailComposeDelegate = self + + let bodyString = + """ + 이곳에 문의 내용을 작성해주세요. + ex) 버스 정류장 데이터 이상, 버스 데이터 이상 등 + + ------------ + + Device Model : \(String.getDeviceIdentifier()) + Device OS : \(UIDevice.current.systemVersion) + App Version : \(String.getCurrentVersion()) + + ------------ + """ + + mailViewController.setToRecipients(["modynic12@gmail.com"]) + mailViewController.setSubject("[버스어디] 문의하기") + mailViewController.setMessageBody(bodyString, isHTML: false) + + viewModel.coordinator.presentMail(vc: mailViewController) + } else { + guard let inquryURL = Bundle.main.object( + forInfoDictionaryKey: "INQURY_URL" + ) as? String + else { return } + viewModel.coordinator.presentPrivacy(url: inquryURL) + } + }) + .disposed(by: disposeBag) + return output } + + public func mailComposeController( + _ controller: MFMailComposeViewController, + didFinishWith result: MFMailComposeResult, + error: Error? + ) { + self.coordinator.dismissMail() + } } extension SettingsViewModel { public struct Input { +// let defaultAlarmTapEvent: Observable + let termsTapEvent: Observable + let locationTapEvent: Observable + let inquryTapEvent: Observable } public struct Output { diff --git a/Projects/FeatureDependency/Sources/Coordinator.swift b/Projects/FeatureDependency/Sources/Coordinator.swift deleted file mode 100644 index 159c6451..00000000 --- a/Projects/FeatureDependency/Sources/Coordinator.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Coordinator.swift -// PresentationDependency -// -// Created by gnksbm on 1/20/24. -// Copyright © 2024 Pepsi-Club. All rights reserved. -// - -import UIKit - -public protocol Coordinator { - var childCoordinators: [Coordinator] { get } - var navigationController: UINavigationController { get set } - func start() -} diff --git a/Projects/FeatureDependency/Sources/Coordinator/AddRegularAlarmCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/AddRegularAlarmCoordinator.swift new file mode 100644 index 00000000..6491a1b2 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/AddRegularAlarmCoordinator.swift @@ -0,0 +1,17 @@ +// +// AddRegularAlarmCoordinator.swift +// AlarmFeature +// +// Created by gnksbm on 2/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +public protocol AddRegularAlarmCoordinator: Coordinator { + func start(with: RegularAlarmResponse) + func startSearchFlow() + func removeChildViewController() +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/AfterSearchCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/AfterSearchCoordinator.swift new file mode 100644 index 00000000..8ee2239f --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/AfterSearchCoordinator.swift @@ -0,0 +1,13 @@ +// +// AfterSearchCoordinator.swift +// FeatureDependency +// +// Created by 유하은 on 2024/03/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol AfterSearchCoordinator: Coordinator { + func start() +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/BusStopCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/BusStopCoordinator.swift new file mode 100644 index 00000000..1cbe8ff5 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/BusStopCoordinator.swift @@ -0,0 +1,14 @@ +// +// BusStopCoordinator.swift +// FeatureDependency +// +// Created by Jisoo HAM on 2/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol BusStopCoordinator: Coordinator { + func busStopMapLocation(busStopId: String) + func moveToRegualrAlarm() +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/Coordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/Coordinator.swift new file mode 100644 index 00000000..b26e0573 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/Coordinator.swift @@ -0,0 +1,52 @@ +// +// Coordinator.swift +// PresentationDependency +// +// Created by gnksbm on 1/20/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Core + +public protocol Coordinator: AnyObject { + var parent: Coordinator? { get set } + var childs: [Coordinator] { get set } + var navigationController: UINavigationController { get } + var coordinatorType: CoordinatorType { get } + + func start() + func finish() +} + +public extension Coordinator { + func finish() { + parent?.childDidFinish(self) + } + + func childDidFinish(_ child: Coordinator?) { + childs = childs.filter { $0 !== child } + } + + func finishFlow() { + navigationController.popViewController(animated: true) + parent?.childDidFinish(self) + } + + func finishFlow( + upTo coordinatorKind: CoordinatorType + ) { + var currentCoordinator: Coordinator = self + var isRoot = false + while !isRoot { + guard let nextCoordinator = currentCoordinator.parent else { break } + currentCoordinator.finish() + currentCoordinator = nextCoordinator + isRoot = currentCoordinator.coordinatorType == coordinatorKind + } + // TODO: 재사용 로직으로 수정 + (currentCoordinator as? AddRegularAlarmCoordinator)? + .removeChildViewController() + } +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/CoordinatorProvider.swift b/Projects/FeatureDependency/Sources/Coordinator/CoordinatorProvider.swift new file mode 100644 index 00000000..fd9787f9 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/CoordinatorProvider.swift @@ -0,0 +1,39 @@ +// +// CoordinatorProvider.swift +// FeatureDependency +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Domain + +public protocol CoordinatorProvider { + func makeSearchCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> SearchCoordinator + + func makeBusStopCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + busStopId: String, + flow: FlowState + ) -> BusStopCoordinator + + func makeAddRegularAlarmCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> AddRegularAlarmCoordinator + + func makeNearMapCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState, + busStopId: String? + ) -> NearMapCoordinator +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/CoordinatorType.swift b/Projects/FeatureDependency/Sources/Coordinator/CoordinatorType.swift new file mode 100644 index 00000000..d2b1a7d1 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/CoordinatorType.swift @@ -0,0 +1,21 @@ +// +// CoordinatorType.swift +// FeatureDependency +// +// Created by Jisoo HAM on 3/18/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +public enum CoordinatorType { + case app + case tab + case addAlarm + case home + case search + case nearMap + case busStop + case setting + case regularAlarm +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/HomeCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/HomeCoordinator.swift new file mode 100644 index 00000000..01e4bbc1 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/HomeCoordinator.swift @@ -0,0 +1,15 @@ +// +// HomeCoordinator.swift +// FeatureDependency +// +// Created by gnksbm on 1/26/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol HomeCoordinator: Coordinator { + func updateFavoritesState(isEmpty: Bool) + func startSearchFlow() + func startBusStopFlow(stationId: String) +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/NearMapCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/NearMapCoordinator.swift new file mode 100644 index 00000000..f0f67008 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/NearMapCoordinator.swift @@ -0,0 +1,13 @@ +// +// NearMapCoordinator.swift +// FeatureDependency +// +// Created by Muker on 2/2/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol NearMapCoordinator: Coordinator { + func startBusStopFlow(busStopId: String) +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/RegularAlarmCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/RegularAlarmCoordinator.swift new file mode 100644 index 00000000..a56e2aea --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/RegularAlarmCoordinator.swift @@ -0,0 +1,8 @@ +import Foundation + +import Domain + +public protocol RegularAlarmCoordinator: Coordinator { + func startAddRegularAlarmFlow() + func startAddRegularAlarmFlow(with: RegularAlarmResponse) +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/SearchCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/SearchCoordinator.swift new file mode 100644 index 00000000..08f6bc9e --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/SearchCoordinator.swift @@ -0,0 +1,16 @@ +// +// SearchCoordinator.swift +// FeatureDependency +// +// Created by gnksbm on 1/25/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import Domain + +public protocol SearchCoordinator: Coordinator { + func startBusStopFlow(stationId: String) + func startNearMapFlow() + func startNearMapFlow(busStopId: String) +} diff --git a/Projects/FeatureDependency/Sources/Coordinator/SettingsCoordinator.swift b/Projects/FeatureDependency/Sources/Coordinator/SettingsCoordinator.swift new file mode 100644 index 00000000..ea21c1c6 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Coordinator/SettingsCoordinator.swift @@ -0,0 +1,8 @@ +import UIKit + +public protocol SettingsCoordinator: Coordinator { + func setDefaultAlarm() + func presentPrivacy(url: String) + func presentMail(vc: UIViewController) + func dismissMail() +} diff --git a/Projects/FeatureDependency/Sources/Ext+BusType.swift b/Projects/FeatureDependency/Sources/Ext+BusType.swift new file mode 100644 index 00000000..fe85bd1f --- /dev/null +++ b/Projects/FeatureDependency/Sources/Ext+BusType.swift @@ -0,0 +1,39 @@ +// +// Ext+BusType.swift +// FeatureDependency +// +// Created by Jisoo HAM on 2/20/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import DesignSystem +import Domain + +extension BusType { + public var toColor: DesignSystemColors.Color { + switch self { + case .common: + return DesignSystemAsset.gray4.color + case .airport: + return DesignSystemAsset.airportGold.color + case .village: + return DesignSystemAsset.limeGreen.color + case .trunkLine: + return DesignSystemAsset.regularAlarmBlue.color + case .branchLine: + return DesignSystemAsset.limeGreen.color + case .circulation: + return DesignSystemAsset.circulateYellow.color + case .wideArea: + return DesignSystemAsset.redBusColor.color + case .incheon: + return DesignSystemAsset.settingColor.color + case .gyeonggi: + return DesignSystemAsset.settingColor.color + case .abolition: + return DesignSystemAsset.gray4.color + } + } +} diff --git a/Projects/FeatureDependency/Sources/FlowState.swift b/Projects/FeatureDependency/Sources/FlowState.swift new file mode 100644 index 00000000..d0939ad8 --- /dev/null +++ b/Projects/FeatureDependency/Sources/FlowState.swift @@ -0,0 +1,14 @@ +// +// FlowState.swift +// FeatureDependency +// +// Created by Jisoo HAM on 3/13/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public enum FlowState { + case fromHome + case fromAlarm +} diff --git a/Projects/FeatureDependency/Sources/Mock/MockBusStopArrivalInfoRepository.swift b/Projects/FeatureDependency/Sources/Mock/MockBusStopArrivalInfoRepository.swift new file mode 100644 index 00000000..7252dcf7 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockBusStopArrivalInfoRepository.swift @@ -0,0 +1,201 @@ +// +// MockBusStopArrivalInfoRepository.swift +// FeatureDependency +// +// Created by gnksbm on 3/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +import RxSwift + +#if DEBUG +public final class MockBusStopArrivalInfoRepository +: BusStopArrivalInfoRepository { + public init() { } + + public func fetchArrivalList( + busStopId: String + ) -> Observable { + .create { observer in + observer.onNext( + BusStopArrivalInfoResponse( + busStopId: "23290", + busStopName: "강남구보건소", + direction: "강남구청역", + buses: [ + BusArrivalInfoResponse( + busId: "124000038", + busName: "342", + busType: BusType.trunkLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 62), + firstArrivalRemaining: "3번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 913), + secondArrivalRemaining: "6번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100075", + busName: "472", + busType: BusType.trunkLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 198), + firstArrivalRemaining: "1번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 566), + secondArrivalRemaining: "5번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100226", + busName: "3414", + busType: BusType.branchLine.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 1086), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100612", + busName: "3426", + busType: BusType.branchLine.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 689), + secondArrivalRemaining: "6번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100500", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100226", + busName: "3414", + busType: BusType.airport.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 1086), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100612", + busName: "3426", + busType: BusType.airport.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 689), + secondArrivalRemaining: "6번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100500", + busName: "4312", + busType: BusType.airport.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "1001005001", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "1001005002", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "1001005003", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "1001005004", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ) + ] + ) + ) + return Disposables.create() + } + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockCoordinator.swift b/Projects/FeatureDependency/Sources/Mock/MockCoordinator.swift new file mode 100644 index 00000000..58e2513a --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockCoordinator.swift @@ -0,0 +1,143 @@ +// +// MockCoordinator.swift +// FeatureDependency +// +// Created by gnksbm on 3/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Domain + +#if DEBUG +public final class MockCoordinator: Coordinator { + public var parent: Coordinator? + public var childs: [Coordinator] = [] + public var coordinatorType: CoordinatorType = .home + + private let testMessage: String + public var navigationController: UINavigationController + + public init( + testMessage: String, + navigationController: UINavigationController + ) { + self.testMessage = testMessage + self.navigationController = navigationController + } + + public func start() { + let testViewController = UIViewController() + testViewController.view.backgroundColor = .white + let testLabel = UILabel() + testLabel.text = testMessage + testLabel.numberOfLines = 0 + testLabel.font = .boldSystemFont(ofSize: 20) + testLabel.translatesAutoresizingMaskIntoConstraints = false + testViewController.view.addSubview(testLabel) + NSLayoutConstraint.activate([ + testLabel.centerXAnchor.constraint( + equalTo: testViewController.view.centerXAnchor + ), + testLabel.centerYAnchor.constraint( + equalTo: testViewController.view.centerYAnchor + ), + ]) + navigationController.pushViewController( + testViewController, + animated: true + ) + } +} + +extension MockCoordinator: HomeCoordinator { + public func updateFavoritesState(isEmpty: Bool) { + + } + + public func startBusStopFlow(stationId: String) { + let coordinator = MockCoordinator( + testMessage: "BusStopFlow - busStopId: \(stationId)", + navigationController: navigationController + ) + coordinator.start() + childs.append(coordinator) + } +} + +extension MockCoordinator: SearchCoordinator { + public func startNearMapFlow(busStopId: String) { + let coordinator = MockCoordinator( + testMessage: "\(#function)", + navigationController: navigationController + ) + coordinator.start() + childs.append(coordinator) + } + + public func startNearMapFlow() { + let coordinator = MockCoordinator( + testMessage: "\(#function)", + navigationController: navigationController + ) + coordinator.start() + childs.append(coordinator) + } + + public func finishFlow() { + navigationController.popViewController(animated: true) + finish() + } +} + + +extension MockCoordinator: BusStopCoordinator { + public func example() { + + } + + + public func popVC() { + + } + + public func moveToRegualrAlarm() { + + } + + public func busStopMapLocation(busStopId: String) { + let coordinator = MockCoordinator( + testMessage: "Map - busStopId: \(busStopId)", + navigationController: navigationController + ) + coordinator.start() + childs.append(coordinator) + } +} + +extension MockCoordinator: AddRegularAlarmCoordinator { + public func start(with: RegularAlarmResponse) { + + } + + public func startSearchFlow() { + + } + + public func removeChildViewController() { + + } +} + +extension MockCoordinator: NearMapCoordinator { + public func startBusStopFlow(busStopId: String) { + let coordinator = MockCoordinator( + testMessage: "BusStopFlow - busStopId: \(busStopId)", + navigationController: navigationController + ) + coordinator.start() + childs.append(coordinator) + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockCoordinatorProvider.swift b/Projects/FeatureDependency/Sources/Mock/MockCoordinatorProvider.swift new file mode 100644 index 00000000..bbf746ab --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockCoordinatorProvider.swift @@ -0,0 +1,63 @@ +// +// MockCoordinatorProvider.swift +// FeatureDependency +// +// Created by gnksbm on 3/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import UIKit + +import Domain + +#if DEBUG +public final class MockCoordinatorProvider: CoordinatorProvider { + public init() { } + + public func makeSearchCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> SearchCoordinator { + MockCoordinator( + testMessage: "Search", + navigationController: navigationController + ) + } + + public func makeBusStopCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + busStopId: String, + flow: FlowState + ) -> BusStopCoordinator { + MockCoordinator( + testMessage: "BusStop - busStopId: \(busStopId)", + navigationController: navigationController + ) + } + + public func makeAddRegularAlarmCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState + ) -> AddRegularAlarmCoordinator { + MockCoordinator( + testMessage: "AddRegularAlarm", + navigationController: navigationController + ) + } + + public func makeNearMapCoordinator( + parent: Coordinator, + navigationController: UINavigationController, + flow: FlowState, + busStopId: String? = nil + ) -> NearMapCoordinator { + MockCoordinator( + testMessage: "NearMap - busStopId: \(busStopId ?? "nil")", + navigationController: navigationController + ) + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockFavoritesRepository.swift b/Projects/FeatureDependency/Sources/Mock/MockFavoritesRepository.swift new file mode 100644 index 00000000..4dad1af3 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockFavoritesRepository.swift @@ -0,0 +1,167 @@ +// +// MockFavoritesRepository.swift +// FeatureDependency +// +// Created by gnksbm on 3/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +import RxSwift + +#if DEBUG +public final class MockFavoritesRepository: FavoritesRepository { + public var favorites = BehaviorSubject<[FavoritesBusStopResponse]>( + value: [] + ) + + public init() { + Timer.scheduledTimer(withTimeInterval: 1, repeats: false) { _ in + self.favorites.onNext( + [ + BusStopArrivalInfoResponse( + busStopId: "23290", + busStopName: "강남구보건소", + direction: "강남구청역", + buses: [ + BusArrivalInfoResponse( + busId: "124000038", + busName: "342", + busType: BusType.trunkLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 297), + firstArrivalRemaining: "3번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 913), + secondArrivalRemaining: "6번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100075", + busName: "472", + busType: BusType.trunkLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 198), + firstArrivalRemaining: "1번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 566), + secondArrivalRemaining: "5번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100226", + busName: "3414", + busType: BusType.branchLine.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 1086), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100612", + busName: "3426", + busType: BusType.branchLine.rawValue, + nextStation: "삼성동서광아파트", + firstArrivalState: ArrivalState.soon, + firstArrivalRemaining: "", + secondArrivalState: ArrivalState + .arrivalTime(time: 689), + secondArrivalRemaining: "6번째 전", + isFavorites: false, + isAlarmOn: false + ), + BusArrivalInfoResponse( + busId: "100100500", + busName: "4312", + busType: BusType.branchLine.rawValue, + nextStation: "강남구청역", + firstArrivalState: ArrivalState + .arrivalTime(time: 490), + firstArrivalRemaining: "4번째 전", + secondArrivalState: ArrivalState + .arrivalTime(time: 916), + secondArrivalRemaining: "9번째 전", + isFavorites: false, + isAlarmOn: false + ) + ] + ) + ].map { + .init( + busStopId: $0.busStopId, + busIds: $0.buses.map({ $0.busId }) + ) + } + ) + } + } + + public func addRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) { + do { + var oldFavorites = try favorites.value() + if oldFavorites.contains(where: { $0.busStopId == arsId }) { + guard let favoriteToChange = oldFavorites + .first(where: { $0.busStopId == arsId }) + else { return } + let newBusIds = favoriteToChange.busIds + [bus.busId] + var newFavorites = oldFavorites.filter { $0.busStopId != arsId } + newFavorites.append( + .init( + busStopId: arsId, + busIds: newBusIds + ) + ) + favorites.onNext(newFavorites) + return + } + oldFavorites.append( + .init( + busStopId: arsId, + busIds: [bus.busId] + ) + ) + favorites.onNext(oldFavorites) + } catch { + #if DEBUG + print(error, "즐겨찾기 업데이트 실패") + #endif + } + } + public func removeRoute( + arsId: String, + bus: BusArrivalInfoResponse + ) { + do { + var oldFavorites = try favorites.value() + if let index = oldFavorites.firstIndex(where: { $0.busStopId == arsId }) { + var favoriteToChange = oldFavorites[index] + favoriteToChange.busIds.removeAll(where: { $0 == bus.busId }) + if favoriteToChange.busIds.isEmpty { + oldFavorites.remove(at: index) + } else { + oldFavorites[index] = favoriteToChange + } + favorites.onNext(oldFavorites) + } + } catch { + #if DEBUG + print(error, "즐겨찾기 업데이트 실패") + #endif + } + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockLocalNotificationService.swift b/Projects/FeatureDependency/Sources/Mock/MockLocalNotificationService.swift new file mode 100644 index 00000000..adbaf542 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockLocalNotificationService.swift @@ -0,0 +1,71 @@ +// +// MockLocalNotificationService.swift +// FeatureDependency +// +// Created by gnksbm on 3/1/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation +import NotificationCenter + +import Domain + +import RxSwift + +#if DEBUG +public final class MockLocalNotificationService: LocalNotificationService { + + public var authState = BehaviorSubject( + value: .denied + ) + + public init() { } + + public func authorize() { + } + + public func fetchRegularAlarm() -> Observable<[RegularAlarmResponse]> { + .just( + [ + .init( + busStopId: "테스트", + busStopName: "영등포역", + busId: "테스트", + busName: "영등포02", + time: .now, + weekday: [0, 5] + ), + .init( + busStopId: "테스트", + busStopName: "영등포역", + busId: "테스트", + busName: "영등포02", + time: .now, + weekday: [0, 5] + ), + .init( + busStopId: "테스트", + busStopName: "영등포역", + busId: "테스트", + busName: "영등포02", + time: .now, + weekday: [0, 5] + ), + ] + ) + } + + public func registNewRegularAlarm(response: Domain.RegularAlarmResponse) throws { + + } + + public func editRegularAlarm(response: Domain.RegularAlarmResponse) throws { + + } + + public func removeRegularAlarm(response: Domain.RegularAlarmResponse) throws { + + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockLocationService.swift b/Projects/FeatureDependency/Sources/Mock/MockLocationService.swift new file mode 100644 index 00000000..02865d2f --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockLocationService.swift @@ -0,0 +1,44 @@ +// +// MockLocationService.swift +// FeatureDependency +// +// Created by gnksbm on 3/15/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import Domain + +import RxSwift + +#if DEBUG +public final class MockLocationService: LocationService { + public var locationStatus = BehaviorSubject( + value: .notDetermined + ) + + public init() { } + + public func authorize() { + + } + + public func requestLocationOnce() { + + } + + public func startUpdatingLocation() { + + } + + public func stopUpdatingLocation() { + + } + + public func getDistance(response: Domain.BusStopInfoResponse) -> String { + "" + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockRegualrAlarmEditingService.swift b/Projects/FeatureDependency/Sources/Mock/MockRegualrAlarmEditingService.swift new file mode 100644 index 00000000..b2debb98 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockRegualrAlarmEditingService.swift @@ -0,0 +1,49 @@ +// +// MockRegualrAlarmEditingService.swift +// FeatureDependency +// +// Created by Jisoo HAM on 3/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +import RxRelay + +#if DEBUG +public final class MockRegualrAlarmEditingService: RegularAlarmEditingService { + public var managedAlarm: BehaviorRelay = .init( + value: .init( + busStopId: "", + busStopName: "", + busId: "", + busName: "", + time: .now, + weekday: [] + ) + ) + public init() { } + + public func update(busStopId: String, busStopName: String, busId: String, busName: String) { + + } + + public func update(time: Date) { + + } + + public func update(weekday: [Int]) { + + } + + public func update(response: Domain.RegularAlarmResponse) { + + } + + public func resetManagedObject() { + + } +} +#endif diff --git a/Projects/FeatureDependency/Sources/Mock/MockStationLIstRepository.swift b/Projects/FeatureDependency/Sources/Mock/MockStationLIstRepository.swift new file mode 100644 index 00000000..864637f4 --- /dev/null +++ b/Projects/FeatureDependency/Sources/Mock/MockStationLIstRepository.swift @@ -0,0 +1,121 @@ +// +// MockStationLIstRepository.swift +// FeatureDependency +// +// Created by 유하은 on 2024/03/07. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import CoreLocation +import Foundation + +import RxSwift +import RxRelay + +import Domain + +#if DEBUG +public final class MockStationLIstRepository: StationListRepository { + public let busStopRegions = BehaviorSubject<[BusStopRegion]>(value: []) + public let recentlySearchedStation + = BehaviorRelay<[BusStopInfoResponse]>(value: []) + + public init(){ } + + public func saveRecentSearch(_ searchCell: BusStopInfoResponse) { + + } + + public func removeRecentSearch() { + + } + + public func getNearByStop( + startPointLocation: CLLocation + ) -> BusStopInfoResponse { + return ( + BusStopInfoResponse( + busStopName: "관현사입구", + busStopId: "22320", + direction: "새쟁이마을", + longitude: "127.0632387636", + latitude: "37.4373210738" + ) + ) + } + + public func getNearByStopInfo( + startPointLocation: CLLocation + ) -> (BusStopInfoResponse, String) { + return ( + BusStopInfoResponse( + busStopName: "관현사입구", + busStopId: "22320", + direction: "새쟁이마을", + longitude: "127.0632387636", + latitude: "37.4373210738" + ), + "" + ) + } + + private func fetchStationList() { + Timer.scheduledTimer( + withTimeInterval: 3, + repeats: false + ) { [weak self] _ in + self?.busStopRegions.onNext( + [ + .seoul( + responses: [ + BusStopInfoResponse( + busStopName: "관현사입구", + busStopId: "22320", + direction: "새쟁이마을", + longitude: "127.0632387636", + latitude: "37.4373210738" + ), + BusStopInfoResponse( + busStopName: "관현사입구", + busStopId: "22321", + direction: "청계산.원터골", + longitude: "127.063704", + latitude: "37.437154" + ), + BusStopInfoResponse( + busStopName: "새쟁이마을", + busStopId: "22322", + direction: "옛골", + longitude: "127.066179", + latitude: "37.434511" + ), + BusStopInfoResponse( + busStopName: "새쟁이마을", + busStopId: "22323", + direction: "관현사입구", + longitude: "127.0660515509", + latitude: "37.4347964213" + ), + BusStopInfoResponse( + busStopName: "옛골", + busStopId: "22324", + direction: "새쟁이마을", + longitude: "127.070438", + latitude: "37.430946" + ), + BusStopInfoResponse( + busStopName: "옛골", + busStopId: "22341", + direction: "청계산옛골", + longitude: "127.0707733294", + latitude: "37.4305370286" + ) + ] + ) + ] + ) + } + } +} + +#endif diff --git a/Projects/FeatureDependency/Sources/ViewModel.swift b/Projects/FeatureDependency/Sources/ViewModel.swift index afc1a9ba..4243fb0e 100644 --- a/Projects/FeatureDependency/Sources/ViewModel.swift +++ b/Projects/FeatureDependency/Sources/ViewModel.swift @@ -8,6 +8,8 @@ import Foundation +import RxSwift + public protocol ViewModel { associatedtype Input associatedtype Output diff --git a/Projects/MainFeature/Project.swift b/Projects/MainFeature/Project.swift index ddfed092..79bb5013 100644 --- a/Projects/MainFeature/Project.swift +++ b/Projects/MainFeature/Project.swift @@ -3,6 +3,6 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "MainFeature", - moduleType: .staticFramework, + moduleType: .dynamicFramework, dependencies: .Presentation.allCases.map { $0.dependency } ) diff --git a/Projects/MainFeature/Sources/MainTab.swift b/Projects/MainFeature/Sources/MainTab.swift index 00019b72..84426100 100644 --- a/Projects/MainFeature/Sources/MainTab.swift +++ b/Projects/MainFeature/Sources/MainTab.swift @@ -22,7 +22,7 @@ enum MainTab: Int, CaseIterable { case .alarm: return .init( title: "알람", - image: .init(systemName: "bell.badge"), + image: .init(systemName: "bell"), tag: rawValue ) case .settings: diff --git a/Projects/MainFeature/Sources/TabBarCoordinator.swift b/Projects/MainFeature/Sources/TabBarCoordinator.swift index 081b9869..d6b5a531 100644 --- a/Projects/MainFeature/Sources/TabBarCoordinator.swift +++ b/Projects/MainFeature/Sources/TabBarCoordinator.swift @@ -8,17 +8,26 @@ import UIKit +import DesignSystem + import FeatureDependency import HomeFeature import AlarmFeature import SettingsFeature public final class TabBarCoordinator: Coordinator { - public var childCoordinators: [Coordinator] = [] + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController + public let coordinatorProvider: CoordinatorProvider + public var coordinatorType: CoordinatorType = .tab - public init(navigationController: UINavigationController) { + public init( + navigationController: UINavigationController, + coordinatorProvider: CoordinatorProvider + ) { self.navigationController = navigationController + self.coordinatorProvider = coordinatorProvider } public func start() { @@ -27,15 +36,12 @@ public final class TabBarCoordinator: Coordinator { private func setupTabBarController() { let tabBarController = TabBarViewController() - navigationController.setViewControllers( [tabBarController], animated: true ) - let viewControllers = MainTab.allCases.map { makeNavigationController(tabKind: $0) } - tabBarController.viewControllers = viewControllers } @@ -44,6 +50,9 @@ public final class TabBarCoordinator: Coordinator { ) -> UINavigationController { let navigationController = UINavigationController() navigationController.tabBarItem = tabKind.tabItem + navigationController.navigationBar.titleTextAttributes = [ + .foregroundColor: UIColor.black + ] setupChildCoordinators( tabKind: tabKind, navigationController: navigationController @@ -59,18 +68,21 @@ public final class TabBarCoordinator: Coordinator { switch tabKind { case .home: coordinator = DefaultHomeCoordinator( - navigationController: navigationController + parent: self, + navigationController: navigationController, + coordinatorProvider: coordinatorProvider ) case .settings: coordinator = DefaultSettingsCoordinator( navigationController: navigationController ) case .alarm: - coordinator = DefaultAlarmCoordinator( - navigationController: navigationController + coordinator = DefaultRegularAlarmCoordinator( + navigationController: navigationController, + coordinatorProvider: coordinatorProvider ) } - childCoordinators.append(coordinator) + childs.append(coordinator) coordinator.start() } } diff --git a/Projects/Networks/Project.swift b/Projects/NetworkService/Project.swift similarity index 68% rename from Projects/Networks/Project.swift rename to Projects/NetworkService/Project.swift index 74250625..7e029496 100644 --- a/Projects/Networks/Project.swift +++ b/Projects/NetworkService/Project.swift @@ -2,8 +2,8 @@ import ProjectDescription import ProjectDescriptionHelpers let project = Project.makeProject( - name: "Networks", - moduleType: .staticFramework, + name: "NetworkService", + moduleType: .dynamicFramework, dependencies: [ .domain, ] diff --git a/Projects/NetworkService/Sources/EndPoint/BusStopArrivalInfoEndPoint.swift b/Projects/NetworkService/Sources/EndPoint/BusStopArrivalInfoEndPoint.swift new file mode 100644 index 00000000..8b64cddf --- /dev/null +++ b/Projects/NetworkService/Sources/EndPoint/BusStopArrivalInfoEndPoint.swift @@ -0,0 +1,55 @@ +// +// BusStopArrivalInfoEndPoint.swift +// Networks +// +// Created by gnksbm on 1/25/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core + +public struct BusStopArrivalInfoEndPoint: EndPoint { + private let arsId: String + + public var scheme: Scheme { + .http + } + + public var host: String { + "ws.bus.go.kr" + } + + public var port: String { + "" + } + + public var path: String { + "/api/rest/stationinfo/getStationByUid" + } + + public var query: [String: String] { + [ + "resultType": "json", + "ServiceKey": .serverKey, + "arsId": arsId + ] + } + + public var header: [String: String] { + [:] + } + + public var body: [String: Any] { + [:] + } + + public var method: HTTPMethod { + .get + } + + public init(arsId: String) { + self.arsId = arsId + } +} diff --git a/Projects/Networks/Sources/EndPoint/EndPoint.swift b/Projects/NetworkService/Sources/EndPoint/EndPoint.swift similarity index 74% rename from Projects/Networks/Sources/EndPoint/EndPoint.swift rename to Projects/NetworkService/Sources/EndPoint/EndPoint.swift index 28cd74ee..526add4b 100644 --- a/Projects/Networks/Sources/EndPoint/EndPoint.swift +++ b/Projects/NetworkService/Sources/EndPoint/EndPoint.swift @@ -15,7 +15,7 @@ public protocol EndPoint { var path: String { get } var query: [String: String] { get } var header: [String: String] { get } - var body: [String: String] { get } + var body: [String: Any] { get } var method: HTTPMethod { get } } @@ -35,16 +35,21 @@ extension EndPoint { .init(name: $0.key, value: $0.value) } } - guard let url = urlComponent.url else { return nil } + guard let urlStr = urlComponent.url?.absoluteString + .replacingOccurrences(of: "%25", with: "%"), + let url = URL(string: urlStr) + else { return nil } var urlRequest = URLRequest(url: url) urlRequest.httpMethod = method.toString urlRequest.allHTTPHeaderFields = header if !body.isEmpty { do { - let body = try JSONSerialization.data(withJSONObject: body) - urlRequest.httpBody = body + let httpBody = try JSONSerialization.data(withJSONObject: body) + urlRequest.httpBody = httpBody } catch { + #if DEBUG print(error.localizedDescription) + #endif } } return urlRequest diff --git a/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/AddRegularAlarmEndPoint.swift b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/AddRegularAlarmEndPoint.swift new file mode 100644 index 00000000..413e71ca --- /dev/null +++ b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/AddRegularAlarmEndPoint.swift @@ -0,0 +1,48 @@ +// +// AddRegularAlarmEndPoint.swift +// NetworkService +// +// Created by gnksbm on 3/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core +import Domain + +public struct AddRegularAlarmEndPoint: RegularAlarmEndPoint { + private let request: AddRegularAlarmRequest + + public var port: String { + "" + } + + public var query: [String: String] { + [:] + } + + public var header: [String: String] { + [ + "content-type": "application/json", + ] + } + + public var body: [String: Any] { + [ + "deviceToken": String.fcmToken ?? "", + "time": request.time, + "day": request.weekday, + "busRouteId": request.busRouteId, + "arsId": request.arsId, + ] + } + + public var method: HTTPMethod { + .post + } + + public init(request: AddRegularAlarmRequest) { + self.request = request + } +} diff --git a/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/FetchRegularAlarmEndPoint.swift b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/FetchRegularAlarmEndPoint.swift new file mode 100644 index 00000000..78ff89d3 --- /dev/null +++ b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/FetchRegularAlarmEndPoint.swift @@ -0,0 +1,35 @@ +// +// FetchRegularAlarmEndPoint.swift +// NetworkService +// +// Created by gnksbm on 4/14/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Domain + +public struct FetchRegularAlarmEndPoint: RegularAlarmEndPoint { + public var port: String { + "" + } + + public var query: [String: String] { + ["deviceToken": .fcmToken ?? ""] + } + + public var header: [String: String] { + [:] + } + + public var body: [String: Any] { + [:] + } + + public var method: HTTPMethod { + .get + } + + public init() { } +} diff --git a/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RegularAlarmEndPoint.swift b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RegularAlarmEndPoint.swift new file mode 100644 index 00000000..257ffa17 --- /dev/null +++ b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RegularAlarmEndPoint.swift @@ -0,0 +1,25 @@ +// +// RegularAlarmEndPoint.swift +// NetworkService +// +// Created by gnksbm on 4/4/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +public protocol RegularAlarmEndPoint: EndPoint { } + +public extension RegularAlarmEndPoint { + var scheme: Scheme { + .https + } + + var host: String { + "api.wherebybus.shop" + } + + var path: String { + "/regular" + } +} diff --git a/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RemoveRegularAlarmEndPoint.swift b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RemoveRegularAlarmEndPoint.swift new file mode 100644 index 00000000..74133957 --- /dev/null +++ b/Projects/NetworkService/Sources/EndPoint/RegularAlarmEndPoint/RemoveRegularAlarmEndPoint.swift @@ -0,0 +1,43 @@ +// +// RemoveRegularAlarmEndPoint.swift +// NetworkService +// +// Created by gnksbm on 4/6/24. +// Copyright © 2024 Pepsi-Club. All rights reserved. +// + +import Foundation + +import Core +import Domain + +public struct RemoveRegularAlarmEndPoint: RegularAlarmEndPoint { + private let request: RemoveRegularAlarmRequest + + public var port: String { + "" + } + + public var query: [String: String] { + [ + "deviceToken": String.fcmToken ?? "", + "alarmId": request.alarmId + ] + } + + public var header: [String: String] { + [:] + } + + public var body: [String: Any] { + [:] + } + + public var method: HTTPMethod { + .delete + } + + public init(request: RemoveRegularAlarmRequest) { + self.request = request + } +} diff --git a/Projects/Networks/Sources/HTTPMethod.swift b/Projects/NetworkService/Sources/HTTPMethod.swift similarity index 100% rename from Projects/Networks/Sources/HTTPMethod.swift rename to Projects/NetworkService/Sources/HTTPMethod.swift diff --git a/Projects/Networks/Sources/NetworkError.swift b/Projects/NetworkService/Sources/NetworkError.swift similarity index 100% rename from Projects/Networks/Sources/NetworkError.swift rename to Projects/NetworkService/Sources/NetworkError.swift diff --git a/Projects/Networks/Sources/NetworkService/DefaultNetworkService.swift b/Projects/NetworkService/Sources/NetworkService/DefaultNetworkService.swift similarity index 64% rename from Projects/Networks/Sources/NetworkService/DefaultNetworkService.swift rename to Projects/NetworkService/Sources/NetworkService/DefaultNetworkService.swift index af7bdea8..87b1d2c1 100644 --- a/Projects/Networks/Sources/NetworkService/DefaultNetworkService.swift +++ b/Projects/NetworkService/Sources/NetworkService/DefaultNetworkService.swift @@ -38,6 +38,31 @@ public final class DefaultNetworkService: NetworkService { httpURLResponse.statusCode ) ) + #if DEBUG + if let url = urlRequest.url, + let httpMethod = urlRequest.httpMethod, + let data = urlRequest.httpBody, + let httpBody = String( + data: data, + encoding: .utf8 + ) { + print( + url, + httpMethod, + httpBody, + separator: "\n" + ) + } + if let data, + let json = String( + data: data, + encoding: .utf8 + ) { + print( + json + ) + } + #endif return } diff --git a/Projects/Networks/Sources/NetworkService/NetworkService.swift b/Projects/NetworkService/Sources/NetworkService/NetworkService.swift similarity index 100% rename from Projects/Networks/Sources/NetworkService/NetworkService.swift rename to Projects/NetworkService/Sources/NetworkService/NetworkService.swift diff --git a/Projects/ThirdPartyLibs/Podfile b/Projects/ThirdPartyLibs/Podfile new file mode 100644 index 00000000..add8de5f --- /dev/null +++ b/Projects/ThirdPartyLibs/Podfile @@ -0,0 +1,10 @@ +# Uncomment the next line to define a global platform for your project +# platform :ios, '9.0' + +target 'ThirdPartyLibs' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for ThirdPartyLibs + pod 'NMapsMap', '~> 3.16.2' +end diff --git a/Projects/ThirdPartyLibs/Project.swift b/Projects/ThirdPartyLibs/Project.swift index b1af30ed..82590662 100644 --- a/Projects/ThirdPartyLibs/Project.swift +++ b/Projects/ThirdPartyLibs/Project.swift @@ -5,7 +5,5 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "ThirdPartyLibs", moduleType: .dynamicFramework, - dependencies: .ThirdPartyExternal.allCases.map { - .external(name: $0.name) - } + dependencies: .thirdPartyExternal + .thirdPartyXCFramework ) diff --git a/README.md b/README.md index 973d4d0d..447b259d 100644 --- a/README.md +++ b/README.md @@ -1 +1,103 @@ -# BusComing \ No newline at end of file +# 버스어디 v 1.1.0 +![제목을-입력해주세요_-003 (5)](https://github.com/Pepsi-Club/BusComing/assets/65907001/bcb7300f-3f11-4dda-a7b7-3cfb111dc9c7) + +## 프로젝트 소개 +> 서울 안 어디서나, **버스어디**로 간편하게 ! 버스 즐겨찾기와 정기알람으로 버스 사용을 더 간편하게 ! + 쉬운 사용성과 편리함을 갖춘 버스어디를 지금 만나보세요. +> > [버스어디 앱 스토어 연결](https://apps.apple.com/kr/app/%EB%B2%84%EC%8A%A4%EC%96%B4%EB%94%94-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EB%B2%84%EC%8A%A4-%EC%A0%95%EA%B8%B0-%EC%95%8C%EB%9E%8C-%EC%A6%90%EA%B2%A8%EC%B0%BE%EA%B8%B0/id6479689895) + + 펩시클럽 팀이 버스어디를 만든 과정이 궁금하다면 ? [펩시클럽 위키 보기](https://github.com/Pepsi-Club/WhereMyBus-iOS/wiki) + +### 💫주요 기능 +- **`홈`** + - 즐겨찾기한 버스정류장을 모아보기 + - 서울시 버스정류장을 정류장 이름 혹은 정류장 번호 검색 + - 지도에서 버스정류장의 위치 확인 + - 버스정류장의 버스 정보를 확인하고 즐겨찾기에 추가 +- **`알람`** + - 특정 버스정류장의 버스에 정기알람을 설정하여 원하는 시간에 받을 알람을 설정할 수 있습니다. + - ex 출퇴근 버스) 월~금 오전 7시 30분, 은곡마을 741번 버스 +- **`설정`** + - 앱 버전과 이용약관 확인 가능합니다. + + + +### 📱구동화면 + +| 즐겨찾기 | 검색 | 버스정류장 | 가까운 정류장 지도 | +| --- | --- | --- | --- | +|![Search](https://github.com/Pepsi-Club/BusComing/raw/dev/Document/ko/iPhone_15_Pro-1_Favorites.png)|![Search](https://github.com/Pepsi-Club/WhereMyBus-iOS/assets/65907001/db977cc0-42b9-48c5-b088-0802c3cf979e)|![BusStop](https://github.com/Pepsi-Club/BusComing/raw/dev/Document/ko/iPhone_15_Pro-4_BusStop.png)|![NearMap](https://github.com/Pepsi-Club/WhereMyBus-iOS/assets/65907001/781ca995-b5c6-4e5d-8556-d293359e3a7f)| + +| 즐겨찾기X | 최근검색어 | 정규알람 추가 | 정규알람 | +| --- | --- | --- | --- | +| ![NonFavorites](https://github.com/Pepsi-Club/BusComing/raw/dev/Document/ko/iPhone_15_Pro-0_EmptyFavorites.png)|![RecentSearch](https://github.com/Pepsi-Club/BusComing/raw/dev/Document/ko/iPhone_15_Pro-2_RecentSearch.png)|![AddRegularAlarm](https://github.com/Pepsi-Club/BusComing/raw/dev/Document/ko/iPhone_15_Pro-6_RegularAlarm.png)|![Simulator Screenshot - iPhone 15 Pro - 2024-03-20 at 23 50 04](https://github.com/Pepsi-Club/BusComing/assets/133845468/6c930784-7de1-4940-a94a-3c65c17ca4fc) | + +
+ + + +### 💻 개발 환경, 기술스택, 아키텍처 + +#### 개발환경 +``` +- 개발 언어 : Swift, RxSwift +- 개발 환경 : UIKit, Swift 5.0 + - iOS 최소 버전 : 16.0 + - iPhone SE ~ iPhone 15 ProMax 호환 + - 다크모드 미지원 + - 가로모드 미지원 +- 디자인 툴 : Figma +- 협업 도구 : Github, Team Notion, Discord +``` +
+ +#### 기술스택 +![TeckStack](https://github.com/Pepsi-Club/WhereByBus/assets/133845468/1bae919f-f2de-4d15-91de-85c2e8c5ea80) + + +#### 아키텍처 +- Clean Architecture +- MVVM - C +- Coordinator Pattern +- DI Container + +##### Clean Architecture +![Group 1597880428 (1)](https://github.com/Pepsi-Club/WhereMyBus-iOS/assets/65907001/86490d53-d7a6-46a3-bc92-5ac60299cbe3) + +##### Coordinator + +// 추후 추가 + +##### Modular Architecture + +![ModularArchitecture](https://github.com/Pepsi-Club/WhereByBus/assets/133845468/c444851f-c108-40a2-9566-d617316a685f) + +### ☄️ 트러블 슈팅 + + + +
+ +### 팀원 소개 +
+ +|[ 원강묵 ]
[@MUKER-WON](https://github.com/MUKER-WON)
"건강한 코드는
건강한 몸에서 나온다." | [ 김건섭 ]
[@gnksbm](https://github.com/gnksbm)
"-" | [ 유하은 ]
[@yuhaeun-la](https://github.com/yuhaeun-la)
"건강한 정신은
건강한 몸에서 나온다. " | [ 함지수 ]
[@isakatty](https://github.com/isakatty)
"정보를 머리에 cmd+s"| +| :----------------------------------------------------------: | :---------------------------------------------: | :------: | :-------------------------------------------------: | +| | | | | + + +
+ + +
+ +## 📄 License +### “버스어디: 실시간버스" is available under the MIT license. See the [LICENSE](https://github.com/Pepsi-Club/BusComing/blob/dev/LICENSE) file for more info. +- Tuist +- Fastlane +- FirebaseMessaging - iOS +- KakaoMapSDK_SPM + +- 데이터: [서울특별시_정류소정보조회 서비스](https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15000303) + +
diff --git a/Tuist/Dependencies.swift b/Tuist/Dependencies.swift index 0466e524..a7653a88 100644 --- a/Tuist/Dependencies.swift +++ b/Tuist/Dependencies.swift @@ -19,7 +19,10 @@ let spm = SwiftPackageManagerDependencies( url: $0.url, requirement: .upToNextMajor(from: $0.upToNextMajor) ) - } + }, productTypes: [ + "RxCocoa": .framework, + "RxCocoaRuntime": .framework, + ] ) let dependencies = Dependencies( diff --git a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift index 1d56e9f8..4a9743c0 100644 --- a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift +++ b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift @@ -18,29 +18,48 @@ extension Project { public static func makeProject( name: String, moduleType: ModuleType, - entitlements: Path? = nil, + entitlementsPath: Path? = nil, isTestable: Bool = false, hasResource: Bool = false, - dependencies: [TargetDependency] + appExtensionTarget: [Target] = [], + packages: [Package] = [], + dependencies: [TargetDependency], + coreDataModel: [CoreDataModel] = [] ) -> Self { var schemes = [Scheme]() var targets = [Target]() var targetModule: Target + var entitlements: Entitlements? + if let entitlementsPath { + entitlements = .file(path: entitlementsPath) + } switch moduleType { case .app: targetModule = appTarget( name: name, entitlements: entitlements, - dependencies: dependencies + dependencies: dependencies + appExtensionTarget.map { + TargetDependency.target(name: $0.name) + } + ) + let uiTestsTarget = uiTestTarget( + name: name, + dependencies: [.target(targetModule)] ) + targets.append(uiTestsTarget) + appExtensionTarget.forEach { + targets.append($0) + } schemes.append(.moduleScheme(name: name)) + schemes.append(.uiTestsScheme(name: name)) case .dynamicFramework, .staticFramework: targetModule = frameworkTarget( name: name, entitlements: entitlements, - hasResource: hasResource, + hasResource: hasResource, productType: moduleType.product, - dependencies: dependencies + dependencies: dependencies, + coreDataModel: coreDataModel ) case .feature: targetModule = frameworkTarget( @@ -49,14 +68,15 @@ extension Project { hasResource: hasResource, productType: moduleType.product, isPresentation: true, - dependencies: dependencies + dependencies: dependencies, + coreDataModel: coreDataModel ) - let demoTarget = demoAppTarget( - name: name, - dependencies: [.target(targetModule)] - ) - targets.append(demoTarget) - schemes.append(.moduleScheme(name: demoTarget.name)) +// let demoTarget = demoAppTarget( +// name: name, +// dependencies: [.target(targetModule)] +// ) +// targets.append(demoTarget) +// schemes.append(.moduleScheme(name: demoTarget.name)) } targets.append(targetModule) // if isTestable { @@ -69,6 +89,7 @@ extension Project { return Project( name: name, organizationName: .organizationName, + packages: packages, targets: targets, schemes: schemes ) @@ -76,7 +97,7 @@ extension Project { private static func appTarget( name: String, - entitlements: Path?, + entitlements: Entitlements?, dependencies: [TargetDependency] ) -> Target { Target( @@ -97,32 +118,34 @@ extension Project { private static func demoAppTarget( name: String, - entitlements: Path? = nil, + entitlements: Entitlements? = nil, dependencies: [TargetDependency] ) -> Target { Target( name: "\(name)Demo", platform: .iOS, product: .app, - bundleId: .bundleID + ".\(name)Demo", + bundleId: "\(String.bundleID).\(name)Demo", deploymentTarget: .deploymentTarget, - infoPlist: .appInfoPlist, + infoPlist: .demoAppInfoPlist(name: name), sources: [ "Demo/**", ], entitlements: entitlements, scripts: [.featureSwiftLint], - dependencies: dependencies + dependencies: dependencies, + settings: .appDebug ) } private static func frameworkTarget( name: String, - entitlements: Path?, + entitlements: Entitlements?, hasResource: Bool, productType: Product, isPresentation: Bool = false, - dependencies: [TargetDependency] + dependencies: [TargetDependency], + coreDataModel: [CoreDataModel] ) -> Target { let scripts: [TargetScript] = isPresentation ? [.featureSwiftLint] : [.swiftLint] @@ -137,7 +160,46 @@ extension Project { resources: hasResource ? ["Resources/**"] : nil, entitlements: entitlements, scripts: scripts, - dependencies: dependencies + dependencies: dependencies, + settings: .frameworkDebug, + coreDataModels: coreDataModel + ) + } + + public static func appExtensionTarget( + name: String, + plist: InfoPlist?, + resources: ResourceFileElements? = nil, + entitlements: Entitlements? = nil, + dependencies: [TargetDependency] + ) -> Target { + return Target( + name: name, + platform: .iOS, + product: .appExtension, + bundleId: .bundleID + ".\(name)", + deploymentTarget: .deploymentTarget, + infoPlist: plist, + sources: ["\(name)/**"], + resources: resources, + entitlements: entitlements, + scripts: [.swiftLint], + dependencies: dependencies, + settings: .settings( + base: .init() + .setCodeSignManual() + .setProvisioning(), + configurations: [ + .debug( + name: .debug, + xcconfig: .relativeToRoot("XCConfig/\(name)_Debug.xcconfig") + ), + .release( + name: .release, + xcconfig: .relativeToRoot("XCConfig/\(name)_Release.xcconfig") + ), + ] + ) ) } @@ -159,4 +221,23 @@ extension Project { settings: .test ) } + + private static func uiTestTarget( + name: String, + isFeature: Bool = false, + dependencies: [TargetDependency] + ) -> Target { + Target( + name: "\(name)UITests", + platform: .iOS, + product: .uiTests, + bundleId: .bundleID + ".\(name)UITest", + deploymentTarget: .deploymentTarget, + infoPlist: .frameworkInfoPlist, + sources: ["Tests/**"], + scripts: isFeature ? [.featureSwiftLint] : [.swiftLint], + dependencies: dependencies, + settings: .test + ) + } } diff --git a/Tuist/Templates/feature/appDelegate.stencil b/Tuist/Templates/feature/appDelegate.stencil index dd143edc..ad1b3711 100644 --- a/Tuist/Templates/feature/appDelegate.stencil +++ b/Tuist/Templates/feature/appDelegate.stencil @@ -1,8 +1,11 @@ import UIKit +import DesignSystem + @main final class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + Appearance.setupAppearance() return true } diff --git a/Tuist/Templates/feature/coordinator.stencil b/Tuist/Templates/feature/coordinator.stencil index e9d6cdec..ea384819 100644 --- a/Tuist/Templates/feature/coordinator.stencil +++ b/Tuist/Templates/feature/coordinator.stencil @@ -1,6 +1,4 @@ import Foundation -import FeatureDependency - public protocol {{ name }}Coordinator: Coordinator { } diff --git a/Tuist/Templates/feature/defaultCoordinator.stencil b/Tuist/Templates/feature/defaultCoordinator.stencil index 533a3569..31fd883f 100644 --- a/Tuist/Templates/feature/defaultCoordinator.stencil +++ b/Tuist/Templates/feature/defaultCoordinator.stencil @@ -3,7 +3,8 @@ import UIKit import FeatureDependency public final class Default{{ name }}Coordinator: {{ name }}Coordinator { - public var childCoordinators: [Coordinator] = [] + public var parent: Coordinator? + public var childs: [Coordinator] = [] public var navigationController: UINavigationController public init(navigationController: UINavigationController) { diff --git a/Tuist/Templates/feature/feature.swift b/Tuist/Templates/feature/feature.swift index 80678590..11ab13ad 100644 --- a/Tuist/Templates/feature/feature.swift +++ b/Tuist/Templates/feature/feature.swift @@ -23,8 +23,10 @@ private let template = Template( // MARK: Coordinator, ViewController, ViewModel .file(path: projectPath(with: "Sources/ViewModel/\(nameAttribute)ViewModel.swift"), templatePath: "viewModel.stencil"), .file(path: projectPath(with: "Sources/ViewController/\(nameAttribute)ViewController.swift"), templatePath: "viewContoller.stencil"), - .file(path: projectPath(with: "Sources/Coordinator/\(nameAttribute)Coordinator.swift"), templatePath: "coordinator.stencil"), +// .file(path: projectPath(with: "Sources/Coordinator/\(nameAttribute)Coordinator.swift"), templatePath: "coordinator.stencil"), .file(path: projectPath(with: "Sources/Coordinator/Dafault\(nameAttribute)Coordinator.swift"), templatePath: "defaultCoordinator.stencil"), + // MARK: FeatureDependency Coordinator Protocol + .file(path: "Projects/FeatureDependency/Sources/Coordinator/\(nameAttribute)Coordinator.swift", templatePath: "coordinator.stencil"), // MARK: UnitTests // .file(path: projectPath(with: "Tests/\(nameAttribute)FeatureTests.swift"), templatePath: "tests.stencil"), ] diff --git a/Tuist/Templates/feature/viewContoller.stencil b/Tuist/Templates/feature/viewContoller.stencil index 720075b3..bfd0fcbb 100644 --- a/Tuist/Templates/feature/viewContoller.stencil +++ b/Tuist/Templates/feature/viewContoller.stencil @@ -16,19 +16,10 @@ public final class {{ name }}ViewController: UIViewController { public override func viewDidLoad() { super.viewDidLoad() + configureUI() + bind() } + + private func configureUI() { } + private func bind() { } } - -#if DEBUG -import SwiftUI -import FeatureDependency -struct {{ name }}ViewController_Preview: PreviewProvider { - static var previews: some View { - UIKitPreview( - {{ name }}ViewController( - viewModel: {{ name }}ViewModel() - ) - ) - } -} -#endif diff --git a/Tuist/Templates/framework/project.stencil b/Tuist/Templates/framework/project.stencil index 013f017f..06fba0fc 100644 --- a/Tuist/Templates/framework/project.stencil +++ b/Tuist/Templates/framework/project.stencil @@ -3,7 +3,7 @@ import ProjectDescriptionHelpers let project = Project.makeProject( name: "{{ name }}", - moduleType: .framework, + moduleType: .dynamicFramework, isTestable: true, dependencies: [ ] diff --git a/fastlane/Appfile b/fastlane/Appfile index ea420bd8..e9be30e4 100644 --- a/fastlane/Appfile +++ b/fastlane/Appfile @@ -1,5 +1,5 @@ -app_identifier("com.Pepsi-Club.BusComing") -apple_id("gnksbm@gmail.com") +app_identifier("com.Pepsi-Club.WhereMyBus") +apple_id("modynic12@gmail.com") -itc_team_id("126477604") -team_id("ASU4PNB5MG") \ No newline at end of file +itc_team_id("126970804") +team_id("T4W7695R5C") \ No newline at end of file diff --git a/fastlane/Fastfile b/fastlane/Fastfile index b7764e18..1d96b6d8 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,21 +1,130 @@ +APP_NAME = "WhereMyBus" +SCHEME = "App" + default_platform(:ios) platform :ios do - desc "Download Ignored" - lane :getig do |options| - Dir.chdir("../") do - github_access_token = sh("git config --global user.password") - sh("make download-privates token=#{github_access_token}") + desc "Regenerate" + lane :regenerate do |options| + Dir.chdir("../") do + sh("make clean_all") + sh("fastlane getig") + sh("fastlane setpj") + end end - end - - desc "Set Project" - lane :setpj do |options| - Dir.chdir("../") do - sh("tuist clean") - sh("tuist fetch") - sh("tuist generate") - sh("fastlane match development --readonly") + + desc "Download Ignored" + lane :getig do |options| + Dir.chdir("../") do + github_access_token = sh("git config --global user.password") + sh("make download-privates token=#{github_access_token}") + end + end + + desc "Set Project" + lane :setpj do |options| + Dir.chdir("../") do + sh("tuist clean") + sh("tuist fetch") + sh("tuist generate") + match( + type: "development", + git_url: ENV["MATCH_URL"], + keychain_password: ENV["MATCH_PASSWORD"], + app_identifier: [ + "com.Pepsi-Club.WhereMyBus", + "com.Pepsi-Club.WhereMyBus.Widget" + ], + readonly: true + ) + match( + type: "appstore", + git_url: ENV["MATCH_URL"], + keychain_password: ENV["MATCH_PASSWORD"], + app_identifier: [ + "com.Pepsi-Club.WhereMyBus", + "com.Pepsi-Club.WhereMyBus.Widget" + ], + readonly: true + ) + end + end + + desc "local Push to TestFlight" + lane :tf_local do |options| + match( + type: "appstore", + app_identifier: [ + "com.Pepsi-Club.WhereMyBus", + "com.Pepsi-Club.WhereMyBus.Widget" + ], + readonly: true + ) + + app_store_connect_api_key( + key_id: ENV['APP_STORE_KEY_ID'], + issuer_id: ENV['APP_STORE_ISSUER_ID'], + key_content: ENV['APP_STORE_PRIVATE_KEY'] + ) + + build_app( + clean: true, + workspace: "#{APP_NAME}.xcworkspace", + scheme: "#{SCHEME}", + export_method: "app-store", + ) + + upload_to_testflight(skip_waiting_for_build_processing: true) + end + + desc "Remote Push to TestFlight" + lane :tf_remote do |options| + create_keychain( + name: ENV["KEYCHAIN_NAME"], + password: ENV["KEYCHAIN_PASSWORD"], + timeout: 1800, + default_keychain: true, + unlock: true, + lock_when_sleeps: false + ) + + app_store_connect_api_key( + key_id: ENV['APP_STORE_KEY_ID'], + issuer_id: ENV['APP_STORE_ISSUER_ID'], + key_content: ENV['APP_STORE_PRIVATE_KEY'], + is_key_content_base64: true, + in_house: false + ) + + match( + type: "development", + keychain_name: ENV["KEYCHAIN_NAME"], + keychain_password: ENV["KEYCHAIN_PASSWORD"], + app_identifier: [ + "com.Pepsi-Club.WhereMyBus", + # "com.Pepsi-Club.WhereMyBus.Widget" + ], + readonly: true + ) + + match( + type: "appstore", + keychain_name: ENV["KEYCHAIN_NAME"], + keychain_password: ENV["KEYCHAIN_PASSWORD"], + app_identifier: [ + "com.Pepsi-Club.WhereMyBus", + # "com.Pepsi-Club.WhereMyBus.Widget" + ], + readonly: true + ) + + build_app( + clean: true, + workspace: "#{APP_NAME}.xcworkspace", + scheme: "#{SCHEME}", + export_method: "app-store" + ) + + upload_to_testflight(skip_waiting_for_build_processing: true) end - end end diff --git a/fastlane/Matchfile b/fastlane/Matchfile index 558ff2ec..18f0bc7e 100644 --- a/fastlane/Matchfile +++ b/fastlane/Matchfile @@ -3,6 +3,9 @@ git_url(url) storage_mode("git") -type("development") +type("appstore") -app_identifier("com.Pepsi-Club.BusComing") \ No newline at end of file +app_identifier([ + "com.Pepsi-Club.WhereMyBus", + "com.Pepsi-Club.WhereMyBus.Widget" +]) diff --git a/fastlane/README.md b/fastlane/README.md index 61f25464..86c9c296 100644 --- a/fastlane/README.md +++ b/fastlane/README.md @@ -15,6 +15,14 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do ## iOS +### ios regenerate + +```sh +[bundle exec] fastlane ios regenerate +``` + +Regenerate + ### ios getig ```sh @@ -31,6 +39,22 @@ Download Ignored Set Project +### ios tf_local + +```sh +[bundle exec] fastlane ios tf_local +``` + +local Push to TestFlight + +### ios tf_remote + +```sh +[bundle exec] fastlane ios tf_remote +``` + +Remote Push to TestFlight + ---- This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. diff --git a/fastlane/Snapfile b/fastlane/Snapfile new file mode 100644 index 00000000..052c0d42 --- /dev/null +++ b/fastlane/Snapfile @@ -0,0 +1,29 @@ +# Uncomment the lines below you want to change by removing the # in the beginning + +# A list of devices you want to take the screenshots from +devices([ + "iPhone 15 Pro", + "iPhone 8 Plus", +]) + +languages([ + "ko", +]) + +# The name of the scheme which contains the UI Tests +scheme("AppUITests") + +# Where should the resulting screenshots be stored? +output_directory("Document") + +# remove the '#' to clear all previously generated screenshots before creating new ones +# clear_previous_screenshots(true) + +# Remove the '#' to set the status bar to 9:41 AM, and show full battery and reception. See also override_status_bar_arguments for custom options. +# override_status_bar(true) + +# Arguments to pass to the app on launch. See https://docs.fastlane.tools/actions/snapshot/#launch-arguments +# launch_arguments(["-favColor red"]) + +# For more information about all available options run +# fastlane action snapshot