From 4a154ce28a60ddde1264875837f7b01404575597 Mon Sep 17 00:00:00 2001 From: masashi Date: Tue, 1 Sep 2026 11:37:59 +0900 Subject: [PATCH] Make bearing a clockwise map rotation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit bearing を「値を増やすと地図が時計回りに回る」向きに統一し、ネイティブ SDK との変換をコアの CameraBearing に集約する。 --- src/GoogleMapCameraPosition.ts | 8 ++++---- src/GoogleMapViewController.ts | 5 ++--- src/GoogleMapViewController2D.ts | 5 ++--- src/zoom/ZoomAltitudeConverter.ts | 8 ++++---- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/GoogleMapCameraPosition.ts b/src/GoogleMapCameraPosition.ts index d889b06..b00f551 100644 --- a/src/GoogleMapCameraPosition.ts +++ b/src/GoogleMapCameraPosition.ts @@ -1,4 +1,4 @@ -import { computeOffset, type GeoPoint, type MapCameraPosition } from '@mapconductor/js-sdk-core'; +import { computeOffset, type GeoPoint, type MapCameraPosition, toNativeHeading, } from '@mapconductor/js-sdk-core'; import { ZoomAltitudeConverter } from './zoom/ZoomAltitudeConverter'; const converter = new ZoomAltitudeConverter(ZoomAltitudeConverter.DEFAULT_ZOOM0_ALTITUDE); @@ -25,7 +25,7 @@ export function toGoogleMapsCameraPosition(position: MapCameraPosition): GoogleM return { center: position.center, zoom: position.zoom, - bearing: position.bearing, + bearing: toNativeHeading(position.bearing), tilt, }; } @@ -39,13 +39,13 @@ export function toGoogleMapsCameraPosition(position: MapCameraPosition): GoogleM const center = computeOffset({ origin: position.position, distance: altitude * Math.tan((tiltAbs * Math.PI) / 180), - heading: position.bearing, + heading: toNativeHeading(position.bearing), }); return { center, zoom: position.zoom, - bearing: position.bearing, + bearing: toNativeHeading(position.bearing), tilt: tiltAbs, }; } diff --git a/src/GoogleMapViewController.ts b/src/GoogleMapViewController.ts index 71509f4..a83d9b4 100644 --- a/src/GoogleMapViewController.ts +++ b/src/GoogleMapViewController.ts @@ -20,8 +20,7 @@ import { MapUISettingsDiagnostics, type MapUISettings, type CameraRestriction, - isEmptyCameraRestriction, -} from '@mapconductor/js-sdk-core'; + isEmptyCameraRestriction, bearingFromNativeHeading, } from '@mapconductor/js-sdk-core'; import { GoogleMapMarkerController } from './marker/GoogleMapMarkerController'; import { GoogleMapCircleController } from './circle/GoogleMapCircleController'; import { GoogleMapPolylineController } from './polyline/GoogleMapPolylineController'; @@ -195,7 +194,7 @@ export class GoogleMapViewController return createMapCameraPosition({ position: latLngAltToGeoPoint(center), zoom, - bearing: this.holder.map.heading ?? 0, + bearing: bearingFromNativeHeading(this.holder.map.heading ?? 0), tilt: this.holder.map.tilt ?? 0, // Matches Android: the visible region rides on cameraPosition so that // mapViewState.cameraPosition.visibleRegion works without the controller. diff --git a/src/GoogleMapViewController2D.ts b/src/GoogleMapViewController2D.ts index 062c700..6b5c21b 100644 --- a/src/GoogleMapViewController2D.ts +++ b/src/GoogleMapViewController2D.ts @@ -20,8 +20,7 @@ import { type MapUISettings, type CameraRestriction, isEmptyCameraRestriction, - type GeoPoint, -} from '@mapconductor/js-sdk-core'; + type GeoPoint, bearingFromNativeHeading, } from '@mapconductor/js-sdk-core'; import { latLngToGeoPoint, geoPointToLatLng } from './helpers'; import { GoogleMapCircleController } from './circle/GoogleMapCircleController'; import { GoogleMapPolylineController } from './polyline/GoogleMapPolylineController'; @@ -213,7 +212,7 @@ export class GoogleMapViewController2D return createMapCameraPosition({ position: latLngToGeoPoint(center), zoom, - bearing: this.holder.map.getHeading() ?? 0, + bearing: bearingFromNativeHeading(this.holder.map.getHeading() ?? 0), tilt: this.holder.map.getTilt() ?? 0, // Matches Android: the visible region rides on cameraPosition so that // mapViewState.cameraPosition.visibleRegion works without the controller. diff --git a/src/zoom/ZoomAltitudeConverter.ts b/src/zoom/ZoomAltitudeConverter.ts index 0b457fd..9d87ff0 100644 --- a/src/zoom/ZoomAltitudeConverter.ts +++ b/src/zoom/ZoomAltitudeConverter.ts @@ -1,4 +1,4 @@ -import { AbstractZoomAltitudeConverter, computeOffset, MapCameraPosition } from '@mapconductor/js-sdk-core'; +import { AbstractZoomAltitudeConverter, computeOffset, MapCameraPosition, toNativeHeading, } from '@mapconductor/js-sdk-core'; // Map3DElement allows tilt in [0, 90]. Keep a hair below the horizon so the // orbit camera never degenerates (range → ∞ at exactly 90°). @@ -138,7 +138,7 @@ export class ZoomAltitudeConverter extends AbstractZoomAltitudeConverter { }, range: this.zoomLevelToDistance({ zoomLevel: snapZoomToGoogle(zoom), latitude: position.latitude }), tilt: Math.min(tilt, MAX_MAP3D_TILT), - heading: bearing, + heading: toNativeHeading(bearing), }; } @@ -153,7 +153,7 @@ export class ZoomAltitudeConverter extends AbstractZoomAltitudeConverter { const target = computeOffset({ origin: position, distance: altitude * Math.tan(tiltAbsRad), - heading: bearing, + heading: toNativeHeading(bearing), }); return { @@ -164,7 +164,7 @@ export class ZoomAltitudeConverter extends AbstractZoomAltitudeConverter { }, range: altitude / Math.cos(tiltAbsRad), tilt: tiltAbs, - heading: bearing, + heading: toNativeHeading(bearing), }; } }