From 015e4e54edde3c6be1f84508c594fab104aebe2b Mon Sep 17 00:00:00 2001 From: harukin-expo-dev-env Date: Sun, 13 Apr 2025 17:24:35 +0000 Subject: [PATCH] =?UTF-8?q?=E7=8F=BE=E5=9C=A8=E5=9C=B0=E5=9F=BA=E6=BA=96?= =?UTF-8?q?=E3=81=AE=E5=BD=93=E8=A9=B2=E9=A7=85=E3=82=92=E8=A4=87=E6=95=B0?= =?UTF-8?q?=E8=A1=A8=E7=A4=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- menu.js | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) diff --git a/menu.js b/menu.js index 1392e8c..9732fa4 100644 --- a/menu.js +++ b/menu.js @@ -55,9 +55,9 @@ export default function Menu({ getCurrentTrain, scrollRef }) { } }, 10); }, []); - //位置情報 - const { position, locationStatus } = useUserPosition(); + //現在地基準の駅名標リストアップ機能 + const { position, locationStatus } = useUserPosition(); useEffect(() => { if (!position) return () => {}; makeCurrentStation(position); @@ -65,7 +65,7 @@ export default function Menu({ getCurrentTrain, scrollRef }) { const makeCurrentStation = (location) => { if (!originalStationList) return () => {}; const findStationEachLine = (selectLine) => { - const searchArea = stationListMode == "position" ? 0.07 : 0.002; + const searchArea = 0.12; const _calcDistance = (from, to) => { let lat = Math.abs(from.lat - to.lat); let lng = Math.abs(from.lng - to.lng); @@ -78,11 +78,26 @@ export default function Menu({ getCurrentTrain, scrollRef }) { lng: location.coords.longitude, }) < searchArea ); + //NearStationを距離の近い順にソート + NearStation.sort((a, b) => { + return ( + _calcDistance(a, { + lat: location.coords.latitude, + lng: location.coords.longitude, + }) - + _calcDistance(b, { + lat: location.coords.latitude, + lng: location.coords.longitude, + }) + ); + }); return NearStation; }; let returnDataBase = lineList - .map((d) => findStationEachLine(originalStationList[d])) + .map((d) => { + return findStationEachLine(originalStationList[d]); + }) .filter((d) => { return d.length > 0; }) @@ -90,17 +105,16 @@ export default function Menu({ getCurrentTrain, scrollRef }) { pre.push(...current); return pre; }, []); + if (returnDataBase.length) { - let currentStation = currentStation == undefined ? [] : currentStation; - if (currentStation.toString() != returnDataBase.toString()) { - setNearPositionStation(returnDataBase); - } + const returnData = returnDataBase.map((d) => [d]); + setNearPositionStation(returnData); } else { - setNearPositionStation(undefined); + setNearPositionStation([]); } }; - const [nearPositionStation, setNearPositionStation] = useState(undefined); //第三要素 + const [nearPositionStation, setNearPositionStation] = useState([]); //第三要素 const carouselRef = useRef(); const [listIndex, setListIndex] = useState(0); @@ -108,8 +122,7 @@ export default function Menu({ getCurrentTrain, scrollRef }) { const [listUpStation, setListUpStation] = useState([]); useEffect(() => { if (stationListMode == "position") { - console.log(nearPositionStation); - setListUpStation([nearPositionStation].filter((d) => d != undefined)); + setListUpStation(nearPositionStation.filter((d) => d != undefined)); } else { setListUpStation(favoriteStation.filter((d) => d != undefined)); }