GPSãã©ãã«ãŒã¢ããªã±ãŒã·ã§ã³
äœçœ®æ å ±APIã®æ©èœãå®èšŒããããã«ãäœçœ®æ å ±ã«é¢é£ãããã¹ãŠã®åºæ¬æ©èœãå«ãGPSãã©ãã«ãŒã¢ããªã±ãŒã·ã§ã³ã䜿çšããŸãã
- é»è©±ç»é¢ã§ãšãªã¢ã®å°å³ã衚瀺ããŸãã
- å°å³äžã®ç§»åè·é¢ã衚瀺ããŸãã
- ããã€ã¹ã®ã¡ã¢ãªããèšé²ããã³ããŠã³ããŒããããGPSãã©ãã¯ã衚瀺ããŸãã
- ãããäžã®è¡šç€ºãæå¹/ç¡å¹ã«ããæ©èœã䜿çšããŠãé¢å¿ã®ãããã€ã³ãã®ãªã¹ããç¶æããŸãã
- éžæããé¢å¿ã®ãããã€ã³ãã«ãããã移åããŸãã
å°çããŒã«
Sailfish OSãã©ãããã©ãŒã ã¯ãæšæºã®Qtãã¬ãŒã ã¯ãŒã¯ã¯ã©ã¹ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã«äœçœ®æ å ±ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã 次ã«ãQtãã¬ãŒã ã¯ãŒã¯ã¯ãããŒã¿ãæäœããããã®2ã€ã®ã¢ãžã¥ãŒã«ã Qt PositioningãšQt LocationãæäŸããŸãã æåã®ãµãã·ã¹ãã ã§ã¯ãããã€ã¹ã®çŸåšã®å Žæã«é¢ããæ å ±ãååŸã§ãã2çªç®ã®ãµãã·ã¹ãã ã§ã¯ããã®æ å ±ããžãªã³ãŒãã£ã³ã°ããŠå°å³äžã«è¡šç€ºããæ段ãæäŸããŸãã ãã®èšäºã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã§åº§æšã䜿çšããåºæ¬çãªã·ããªãªãå®è£ ããã«ã¯éåžžããã§ååã§ãããããQMLåïŒC ++ã¯ã©ã¹ãªãïŒã®äœ¿çšã®ã¿ãæ€èšããŸãã
Qt Positioningã§äœçœ®ããŒã¿ãååŸãã
ããžã·ã§ãã³ã°APIã®åº§æšã®èª¬æ
座æšãèšè¿°ããããã«ã Positionã¿ã€ãã䜿çšãããŸããããã«ã¯ãããã€ãã®ã°ã«ãŒãã«åå²ã§ããå€æ°ã®ãã£ãŒã«ããå«ãŸããŠããŸãã ãã¹ãŠã®Positionãã£ãŒã«ããå¿ é ãšããããã§ã¯ãªãããšã«æ³šæããŠãã ããã
ãã£ãŒã«ãã®æåã®ã°ã«ãŒãã«ã¯äœçœ®æ å ±ãå«ãŸããŸããããã«ã¯ã察å¿ãã座æšã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ãåç §ãã座æšããããã£ãšã察å¿ããããããã£ãåä¿¡ããããã©ããã瀺ãtitudeValid ã lattitudeValidããã³longitudeValidããããã£ãå«ãŸããŸãã ãŸããå座æšã«ã¯ãåä¿¡ããæå»ïŒ ã¿ã€ã ã¹ã¿ã³ã ïŒãä¿åãããŸãã
2çªç®ã®ã°ã«ãŒãã«ã¯ã座æšã«é¢é£ããããããã£ãå«ãŸããŸããããã¯ãGPSã»ã³ãµãŒããè¿œå ã§ååŸããããäžé£ã®æž¬å®åº§æšãéèšããããšã§èšç®ã§ããŸãïŒå°è¡šé¢ã®ç§»åéåºŠïŒ speed ïŒãåçŽç§»åã®éåºŠïŒ verticalSpeed ïŒã移åæ¹åïŒ direction ïŒããŸãã察å¿ããããããã£ãååŸããããã©ããã瀺ããæ¥å°ŸèŸãValidã®å¯Ÿå¿ããããããã£ãå«ãŸããŸãã
座æšã¿ã€ãèªäœã¯éåžžã«åçŽã§ãå°ççäœçœ®ïŒ 緯床 ã çµåºŠ ã é«åºŠ ïŒããã³æå®ãããå¹ ãšçµåºŠãæ£ãããã©ããïŒ isValid ïŒã«é¢ããæ å ±ãå«ãŸããŠããŸãã ãã®ã¿ã€ãã¯ã座æšéã®è·é¢ïŒ distanceTo ïŒã座æšéã®æ¹äœè§ ïŒ azimuth ïŒãèšç®ããè·é¢ãšæ¹äœè§ïŒ atDistanceAndAzimuth ïŒã§åº§æšãèšç®ããããã®è¿œå ã®ã¡ãœãããæäŸããŸãã
ãã±ãŒã·ã§ã³ããŒã¿ãœãŒã¹
ããã€ã¹ã®çŸåšã®åº§æšãååŸããã«ã¯ã PositionSourceã¿ã€ãã䜿çšããå¿ èŠããããŸãã ãã®ãªããžã§ã¯ãã¯ã positionããããã£ãéããŠçŸåšã®äœçœ®ãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã æ å ±ãååŸããããã®ãœãŒã¹ã¯ã€ã³ã¹ããŒã«ãããŠããŸãããããã®ããããã£ã¯ç©ºã§ãã
ãŸããã¢ããªã±ãŒã·ã§ã³ã«å¿ èŠãªæ å ±ã®ãœãŒã¹ã決å®ããå¿ èŠããããŸããã¢ãã€ã«ãªãã¬ãŒã¿ãŒã®å¡ã«åºã¥ããŠååŸãããè¿äŒŒåº§æšã«ã¯ååã§ããããå šå°ç枬äœã·ã¹ãã ã䜿çšããé«ã枬äœç²ŸåºŠãå¿ èŠã§ãã supportedPositioningMethodsããããã£ãåç §ããŠããã©ãããã©ãŒã ã§ãµããŒããããŠããã¡ãœããã確èªã§ããŸãã
- NoPositioningMethods-ã¡ãœããã¯ãµããŒããããŠããŸããã
- SatellitePositioningMethods-è¡æããŒã¿ãååŸã§ããŸãã
- NonSatellitePosititiongMethods-ã¢ãã€ã«ãããã¯ãŒã¯ããããŒã¿ãååŸã§ããŸãã
- AllPosititiongMethods-ãã¹ãŠã®ã¿ã€ãã®äœçœ®æ±ºãããµããŒããããŠããŸãã
Sailfish OSãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãå®è¡ããŠããããã€ã¹ã¯ãäžèšã®ãã¹ãŠã®æ¹æ³ããµããŒãããŠããŸãã ãŸãã preferredPosititioningMethodsããããã£ãäžèšã®å€ã®ããããã«èšå®ããããšã«ãããå¿ èŠãªãã®ãéžæã§ããŸãã æåã«ãããã®ãœãŒã¹ã䜿çšããã次ã«ããã©ã«ãã®ãœãŒã¹ã䜿çšãããŸãã ãªã¹ãããããœãŒã¹ã®ããããå©çšã§ããªãå Žåã æå¹ãªããããã£ã¯falseã«ãªããŸã ã
Sailfish OSãšãã¥ã¬ãŒã¿ãŒã§ã¯ãäžèšã®ããŒã¿ãœãŒã¹ã®ãããã䜿çšã§ããªãããšã«æ³šæããŠãã ããã ãã®åé¡ã解決ããã«ã¯ãåŸã§èª¬æããå¥ã®ã¡ã«ããºã ã«é Œããªããã°ãªããŸããã
äœçœ®æ å ±ãæŽæ°ããé »åºŠã¯ã updateIntervalããããã£ã䜿çšããŠæ±ºå®ãããŸãã ãã®å€ãçãããŠèšå®ããªãã§ãã ãã-é »ç¹ã«æŽæ°ãããããšãé»åãéå°ã«æ¶è²»ãããŸãã ããŒã¿ã®åä¿¡ãå¶åŸ¡ããã«ã¯ã次ã®æ¹æ³ã䜿çšã§ããŸãã
- éå§ãã
- åæ¢ããåæ¢;
- NonSatellitePosititiongMethods-ã¢ãã€ã«ãããã¯ãŒã¯ããããŒã¿ãååŸã§ããŸãã
- æŽæ°ããŠå Žæã®æŽæ°ã匷å¶ããŸãã
宣èšçãªæ¹æ³ã§éå§ããã³åæ¢ããããšãã§ããŸã-activeããããã£ãèšå®ããããšã§ïŒæ£ã®å€ãå²ãåœãŠãããšã¯ã startã¡ãœãããåŒã³åºãããšãšåçã§ãã
ããŒã¿ãœãŒã¹ãã¢ã¯ãã£ãã«ãªããšã positionããããã£ã®æŽæ°ãéå§ãããŸãã QMLã®ãã€ã³ãã£ã³ã°ã¡ã«ããºã ã䜿çšããŠãä»ã®ããããã£ã«ãã€ã³ãã§ããŸãã ããã«ã onPositionChangedä¿¡å·ã䜿çšããŠãããŒã¿ãœãŒã¹ããåä¿¡ããæ°ãã座æšå€ãåŠçã§ããŸãã
Sailfish OSã§ã®Qtããžã·ã§ãã³ã°ã®äœ¿çš
ã¢ããªã±ãŒã·ã§ã³ã§å°çæ å ±ã䜿çšããã«ã¯ã qt5-qtdeclarative-import-positioningããã±ãŒãžãäŸåé¢ä¿ã®ãªã¹ãã«è¿œå ããŸãïŒãã€ãã£ãã¯ã©ã¹ã®ã¿ã䜿çšããå Žåã¯ã qt5-qtpositioningããã±ãŒãžã§ååã§ãïŒã ãããžã§ã¯ãã®YAMLãã¡ã€ã«ã®Requiresãªã¹ãã§æå®ããå¿ èŠããããŸãã è¿œå åŸãã³ã³ãã³ãã¯æ¬¡ã®ããã«ãªããŸãã
Requires: - sailfishsilica-qt5 >= 0.10.9 - qt5-qtdeclarative-import-positioning
次ã«ãQMLãã¡ã€ã«ã§ãQt Positioningã¢ãžã¥ãŒã«ãæ¥ç¶ãã PositionSourceèŠçŽ ãäœæããå¿ èŠããããŸãã çãäŸãèããŠã¿ãŸãããã
import QtPositioning 5.3 PositionSource { id: src updateInterval: 1000 active: true onPositionChanged: { var coordinate = src.position.coordinate; console.log("Coordinate:", coordinate.longitude, coordinate.latitude); } }
ãã®äŸã§ã¯ãã»ãšãã©ã®PositionSourceããããã£ãæ§æãããããã©ã«ãå€ã䜿çšããŸãã ã¢ã¯ãã£ããªããããã£ã®ã¿ãèšå®ããã trueã«èšå®ãããŸã ã ãã®èŠçŽ ãæã€ããŒãžãèªã¿èŸŒãŸãããšããã«ãå Žæã®æ€çŽ¢ãéå§ãããŸãã
onPositionChangedã€ãã³ããã³ãã©ãŒãå®çŸ©ããŸãããã®ãã³ãã©ãŒã§ã¯ããŸãçŸåšã®åº§æšã«ã¢ã¯ã»ã¹ããŠãããçµæã®ãªã³ã¯ã䜿çšããŠçŸåšã®åº§æšã®å¹ ãšçµåºŠã衚瀺ããŸãã ããã«ãåã«console.logïŒcoordinateïŒã䜿çšããããšãã§ããŸãããã®å Žåãè¡ã¯åºŠãšåã®åœ¢åŒã§è¡šç€ºãããŸãã
PositionSourceã䜿çšããäœæ¥ã®ãããã°ããžãã¯
åè¿°ããããã«ããšãã¥ã¬ãŒã¿ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ãããšãã«äœçœ®ããŒã¿ãååŸããããšã¯ã§ããŸããã ãŸããã¢ããªã±ãŒã·ã§ã³ã®éçºäžã«ã察å¿ããããŒãžãéããã³ã«æåã®å Žæã®æ±ºå®ã«è²»ããããæéãç¯çŽããããšãã§ããŸãã
ãããã®åé¡ã解決ããã«ã¯ã PositionSourceåã®nmeaSourceããããã£ã䜿çšãããšäŸ¿å©ã§ãã ãã®ããããã£ã¯ãGPSãã©ãã¯ãNMEA圢åŒã§èšé²ãããŠãããã¡ã€ã«ã®URLãåãå ¥ããŸãã ãã®åœ¢åŒã¯ãGPXãšæ¯èŒããŠäžè¬çã§ã¯ãããŸãããããªã³ã©ã€ã³ã³ã³ããŒã¿ãŒã®ããããã䜿çšããŠãæ¢åã®GPXãã©ãã¯ãããã®ãããªãã¡ã€ã«ãååŸã§ããŸãã ãŸãã¯ãããšãã°ã NMEA GeneratorãµãŒãã¹ã䜿çšããŠNMEAãã©ãã¯ãäœæããŸãã
ãã¡ã€ã«ãåãåã£ãããã¢ããªã±ãŒã·ã§ã³ããã±ãŒãžã«è¿œå ããå¿ èŠããããŸãã ãããè¡ãã«ã¯ããããžã§ã¯ãã®ãããã¡ã€ã«ã§ã次ã®æ§æã䜿çšããŠã€ã³ã¹ããŒã«æžã¿ãªãœãŒã¹ãšããŠæå®ããã ãã§ååã§ãïŒè©³çŽ°ã«ã€ããŠã¯ã ãã¡ããåç §ããŠãã ããïŒã
OTHER_FILES += nmea/*
nmea.files = nmea/*.nmea
nmea.path = /usr/share/$$TARGET/nmea
INSTALLS += nmea
ãããã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã¹ããŒã«åŸããã®ãã¡ã€ã«ã¯ããã€ã¹ã§ã䜿çšå¯èœã«ãªããŸãã ãã®ããããã£ã®äœ¿çšã¯æ¬¡ã®ããã«ãªããŸãã
PositionSource { id: positionSource active: true nmeaSource: "/usr/share/%1/nmea/path.nmea".arg(Qt.application.name) }
ãã®å Žåã PositionSourceã¯æå®ããããã¡ã€ã«ããããŒã¿ãæäŸããŸãã ãããã£ãŠã nmeaSourceããããã£ã䜿çšããŠãããã€ã¹ã«æ¢ã«ä¿åãããŠããNMEAãã©ãã¯ã衚瀺ããããšãã§ããŸãã ãã®å€ãèšå®ãããšã PositionSourceãªããžã§ã¯ããå®éã®ããŒã¿ãœãŒã¹ããåæãããããšã«æ³šæããŠãã ããã å®éã®ãœãŒã¹ã䜿çšããå Žåã¯ããã®ãããªãªããžã§ã¯ããåäœæããå¿ èŠããããŸãã
ããã§ããŠãŒã¶ãŒã®åº§æšã远跡ããä»»æã®åœ¢åŒãå®è£ ã§ããå°å³äžã«ãã®æ å ±ã®è¡šç€ºãå®è£ ã§ããŸãã
Qt Locationã䜿çšããŠããããšãããã®æ å ±ã衚瀺ãã
Qt Locationã¢ãžã¥ãŒã«ã¯ããŠãŒã¶ãŒãå°å³ããã®å°å³ã«é¢ããæ å ±ã衚瀺ããã«ãŒããããããããçŸåšã®å°ç座æšã«é¢é£ããPOIïŒpoint of interestïŒãæ€çŽ¢ã§ããããã«ããå¹ åºãã¯ã©ã¹ãæäŸããŸãã ãã®ã¢ãžã¥ãŒã«ã®ã»ãšãã©ã®æ©èœã®åªãã玹ä»ã¯ã å ¬åŒããã¥ã¡ã³ãã«ãããŸã ã ããããæäœãããã¹ãŠã®æ©èœã匷調ããããšã¯ã§ããªããããã¢ããªã±ãŒã·ã§ã³ã§ããã衚瀺ãæŽçããæ¹æ³ããããã«ããŒã«ãŒã衚瀺ããæ¹æ³ã移åè·é¢ã衚瀺ããæ¹æ³ã«çŠç¹ãåœãŠãŸãã
Qt Locationã®äž»èŠãªã¿ã€ãã®ç°¡åãªæŠèŠ
ãã®ã·ããªãªã§ã¯ãéèŠãªèŠçŽ ã¯ãããMapã§ãã ãã®èŠçŽ ã䜿çšãããšãè¡æãŸãã¯å°ççå°å³ããå°çã®è¡šé¢ã®ç»åã衚瀺ã§ããŸãã ç»åããŒã¿ããã®ä»ã®æçšãªæ å ±ã®ãœãŒã¹ã¯ããã©ãããã©ãŒã éçºè ãšç¬ç«ããéçºè ã®äž¡æ¹ãæäŸã§ãããã©ã°ã€ã³ã§ãã
Sailfish OSãã©ãããã©ãŒã ã§ã¯ã OpenStreetMapãšHERE WeGoã® 2ã€ã®ãã©ã°ã€ã³ã䜿çšã§ããŸãã ã«ãŒãã®ãã©ã°ã€ã³ããããã£ãããããosmãŸãã¯hereã«èšå®ããããšã§ããããã®ãããããéžæã§ããŸãïŒ ããã§äœ¿çšããã«ã¯ãAPIããŒãååŸããå¿ èŠããããŸãïŒã ãããã®éžæã¯ãã¢ããªã±ãŒã·ã§ã³ã䜿çšããç¹å®ã®å°åã®ã«ãã¬ããžã®å質ã«äŸåããŸãã 以äžã«ç€ºãããã«ãã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ã§å¿ èŠãªãã©ã°ã€ã³ãæå®ããå¿ èŠããããŸãã
å°å³ã®è¡šç€ºé åãå¶åŸ¡ããã«ã¯ãç»åã®äžå¿ã®åº§æšã瀺ãcenterããããã£ãšããºãŒã ã¬ãã«ã瀺ãzoomLevelããããã£ã䜿çšããå¿ èŠããããŸãã centerããããã£ã§ã¯ã座æšã®ã¿ã€ãã«åŸã£ãŠåº§æšãèšè¿°ããå¿ èŠããããŸããããã«ã€ããŠã¯ãåè¿°ã®Positioning APIã®æäœã«é¢ããã»ã¯ã·ã§ã³ã§èª¬æããŸããã
Sailfish OSã§ã®å°å³è¡šç€º
ã¢ããªã±ãŒã·ã§ã³ã§Qt Locationã¢ãžã¥ãŒã«ã䜿çšããã«ã¯ãå°ãªããšã1ã€ã®å°çããŒã¿ãããã€ããŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
Requires: - qt5-qtdeclarative-import-location - qt5-plugin-geoservices-osm - qt5-plugin-geoservices-here
1ã€ã®å°çæ å ±ãããã€ããŒã®ã¿ã䜿çšããå Žåã¯ãæåŸã®2ã€ã®ããã±ãŒãžã®ãããããæ®ãããšãã§ããŸãã
ããã§ãå¿ èŠãªãã¹ãŠã®ã³ã³ããŒãã³ããã¢ããªã±ãŒã·ã§ã³ããŒãžã«é 眮ã§ããŸãã æå°éã®å°å³è¡šç€ºäŸãèããŠã¿ãŸãããã
import QtPositioning 5.3 import QtLocation 5.0 import Sailfish.Silica 1.0 import QtQuick 2.0 Page { PositionSource { id: positionSource active: true } Plugin { id: osmPlugin allowExperimental: true preferred: ["osm"] } Map { id: map anchors.fill: paren plugin: osmPlugin center: positionSource.position.coordinate } }
ãŸããå¿ èŠãªãã¹ãŠã®ã¿ã€ããããŒãžã§å©çšã§ããããã«ãQt Positioningã¢ãžã¥ãŒã«ãšQt Locationã¢ãžã¥ãŒã«ãæ¥ç¶ããŸãã
ãã®ããŒãžã¯ãSailfish Silicaã©ã€ãã©ãªãæäŸããPageãªããžã§ã¯ãã«åºã¥ããŠããŸãã ãã®ããŒãžã§ã¯ãå°çããŒã¿ã®ãã©ã°ã€ã³ãšåæ§ã«ãããã«ã¢ã¯ãã£ãåããäœçœ®ããŒã¿ãœãŒã¹ãäœæããŸãã ãã®ããŒã¿ã®ãœãŒã¹ãšããŠOpenStreetMapã䜿çšããŸãã
ããŒãžã®äž»ãªè¡šç€ºèŠçŽ ã¯ãããŒãžã§äœ¿çšå¯èœãªãã¹ãŠã®ã¹ããŒã¹ãåãããããã§ãã 次ã®ããã«æ§æããŸãããã©ã°ã€ã³ãæ§æãããããã®centerããããã£ãããŒã¿ãœãŒã¹ãæäŸãã座æšã«ãã€ã³ãããŸãã
ããããžã®ã¢ã€ãã ã®è¿œå
ãããäžã«èŠçŽ ãäœæããã«ã¯ãéçãšåçã®2ã€ã®ã¢ãããŒãããããŸãã Staticã¯ãæ°ãæéãšãšãã«å€åããªããªããžã§ã¯ãã«é©ããŠããŸãã ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããã®ãããªãªããžã§ã¯ãã¯çŸåšã®å Žæãžã®ãã€ã³ã¿ãŒã§ãããã«ãŒãã移åããŸããã ã¢ããªã±ãŒã·ã§ã³ã®åçèŠçŽ ã¯ããŠãŒã¶ãŒãèªåã§è¿œå ããé¢å¿ãã€ã³ãã®ãã€ã³ã¿ãŒã§ãã
çŸåšã®å Žæã衚瀺ããããã«ã MapQuickItemã¿ã€ãã䜿çšããŸãã ã ããã«ãããããŒã«ãŒã衚瀺ããç»åãªããžã§ã¯ããªã©ããããè¡šé¢ã«ä»»æã®ãªããžã§ã¯ããé 眮ã§ããŸãã ãã®äœ¿çšã詳现ã«æ€èšããŠã¿ãŸãããã
Map { MapQuickItem { coordinate: positionSource.position.coordinate anchorPoint.x: image.width / 2 anchorPoint.y: image.height sourceItem: Image { id: image width: 35 height: 50 source: "file:buttons/main_marker.pngâ } } }
ãã®ãªããžã§ã¯ããMapã®åãšããŠå®£èšããããããããããªã³ã¯ããŸãã ãªããžã§ã¯ããé 眮ããããã«ãã¢ãã€ã«ããã€ã¹ã®çŸåšã®å°ççäœçœ®ã«é¢é£ä»ããããŠãã座æšããããã£ãæå®ããŸããã anchorPointããããã£ã䜿çšããããããããŒã«ãŒç»åã移åããŠãå 端ãçŸåšã®äœçœ®ãæãããã«ãªããŸããã
移åããã«ãŒãã衚瀺ããããã«ã MapPolyLineã¿ã€ãã䜿çšããŸãã ãããã«ãããä»»æã®ã«ãŒããç Žç·ã®åœ¢ã§è¡šç€ºã§ããŸãã ãã®ã¢ããªã±ãŒã·ã§ã³ãããã«è©³ããèããŠã¿ãŸãããã
Map { MapPolyline { id: mapline line.width: 3 line.color: 'blue } }
ãã®ã¿ã€ãã®ãªããžã§ã¯ãã¯ã Mapã®åãšããŠå®£èšããå¿ èŠããããŸãã çŸåšã®ãã©ãã¯ã®è²ãšè¡šç€ºå¹ ãèšå®ããŸãã
è¡ã«æ°ãããã€ã³ããè¿œå ããã«ã¯ã次ã®ã³ãŒããçããŸãã
PositionSource { id: positionSource active: true onPositionChanged: { mapline.addCoordinate(position.coordinate) } }
å Žæã®å€æŽãçºçãããšãã©ã€ã³ã«å¥ã®ãã€ã³ããè¿œå ããŸãããã®ãããæž¡ãããã«ãŒãã®æ¬¡ã®ã»ã¯ã·ã§ã³ãã¢ããªã±ãŒã·ã§ã³ãŠãŒã¶ãŒã«è¡šç€ºãããŸãã
äžé£ã®é¢å¿ãã€ã³ãã衚瀺ããããã«ã MapItemViewã¿ã€ãã䜿çšããŸãã ã ãã®ã¿ã€ãã¯ããããã«å¯ŸããMVCã¢ãããŒãã®å®è£ ã§ãã衚瀺ããã¢ãã«ãšããã®ã¢ãã«ã®åèŠçŽ ã®ãã¥ãŒãå®çŸ©ããå¿ èŠããããŸãã QMLã®èŠçŽ ã®ãªã¹ããåããæ¹æ³ã«ç²ŸéããŠããå Žåããã®ã³ã³ããŒãã³ãã§ã®äœæ¥ã¯é£ãããããŸããã
ã¢ããªã±ãŒã·ã§ã³ã§ã®ãã®ã¢ãã«ã®ã¢ããªã±ãŒã·ã§ã³ã®äž»ãªåŽé¢ãèæ ®ããŠãã ããã
Map { MapItemView { id: mapView model: MapViewModel { } delegate: mapPlace } Component { id: mapPlace MapQuickItem { coordinate: QtPositioning.coordinate(latitude, longitude) anchorPoint.x: imagePlace.width / 2 anchorPoint.y: imagePlace.height sourceItem: Image { id: imagePlace width: 35 height: 50 source: "file:buttons/additional_marker.png" } } } }
MapItemViewãªããžã§ã¯ãã Mapã®åãšããŠå®çŸ©ããŸãããããã«ããããã®èŠçŽ ããããã«è¡šç€ºãããŸãã ã¢ãã«ãšããŠãç¬èªã®MapViewModelã¢ãã«ã䜿çšããŸãããããã¯å®éã«ã¯ãèŠçŽ ãè¿œå ããã³æŽæ°ããããã®ã¡ãœãããè¿œå ãããæšæºListModelã®æ¡åŒµã§ãã ã¢ãã«ã®èŠçŽ ã¯ãæå®ããã緯床ãšçµåºŠã®ããããã£ãæã€ãªããžã§ã¯ãã§ãã æ°ããé¢å¿ã®ãããã€ã³ãããããã«è¿œå ããã«ã¯ãã¢ãã«ã®addViewïŒïŒã¡ãœãããåŒã³åºããŠããã€ã³ãã®èå¥åããã®ç·¯åºŠãšçµåºŠãæž¡ãå¿ èŠããããŸãã ã¡ãœããã®å®è£ ã¯æ¬¡ã®ãšããã§ãã
function addView(id, latitude, longitude) { append({ id: id, latitude: latitude, longitude: longitude }) }
mapViewãªããžã§ã¯ãã®ããªã²ãŒãã§ã¯ã䜿ãæ £ããMapQuickItemãå«ãmapPlaceã³ã³ããŒãã³ããæå®ããŸãã ã ãã®èŠçŽ ãšåã®èŠçŽ ãšã®éãã¯ã QtPositioningåã®é©åãªã¡ãœããã䜿çšããŠæ瀺çã«åº§æšåãäœæããå¿ èŠãããããšãšãé¢å¿ã®ãããã€ã³ãã®ããŒã«ãŒã衚瀺ããå¥ã®ç»åãæå®ããããšã§ãã
ãããã«
ãã®èšäºã§ã¯ãSailfish OSçšã«éçºããéã«ãžãªãã±ãŒã·ã§ã³ããŒã«ã䜿çšããæ©èœã«ã€ããŠæ€èšããŸããã ãã®èšäºã®äžéšãšããŠéçºãããã¢ããªã±ãŒã·ã§ã³ã¯ã OpenRepos.netãªãœãŒã¹ã䜿çšããŠæºåž¯é»è©±ã«ã€ã³ã¹ããŒã«ã§ããŸãã ãŸããã¢ããªã±ãŒã·ã§ã³ã®ãœãŒã¹ã³ãŒãã確èªããããšãã§ããŸããããã¯ã bitbucketãªããžããªã§å ¥æã§ããŸãã