ããœãŒã·ã£ã«ã³ãã¥ãã±ãŒã·ã§ã³ã®æãææãªæè¡ã®1ã€ã¯ããã±ãŒã·ã§ã³ããŒã¹ã®ãµãŒãã¹ïŒLBSïŒã§è¡šãããŸããããã«ããããŠãŒã¶ãŒ/ã¢ãã€ã«å å
¥è
ã®ãã±ãŒã·ã§ã³ãç¹å®ã§ããŸããCNewsïŒè©³çŽ°ïŒ
www.cnews.ru/reviews/index.shtml?2012/06/06/492022 "ïŒ
MediagatesããŒã ã¯ãã®èŠè§£ãå®å
šã«å
±æããŠããŸãã ãã®ãããä»æ¥ãç§ãã¡ã¯
Habrasocietyã«ãããžã§ã¯ã
-Mediagates.ruã®ãžãªãã±ãŒã·ã§ã³ãµãŒãã¹ãã©ã®ããã«éçºããããäŒããããšèããŠããŸãã æçš¿ã«ã¯ãå°å³äœæãµãŒãã¹ã®éžæãã¿ã¹ã¯ã®èª¬æãé£æ床ã解決ã®ããã®ã¢ã«ãŽãªãºã ãå«ãŸããŠããŸãã
ãããžã§ã¯ãMediagates.ruã«ã€ããŠ
ãããäœã§ããããæ確ã«ããããã«ããŸããããžã§ã¯ãã«ã€ããŠããã€ãã®èšèãè¿°ã¹ãŸãã Mediagatesã®äž»ãªç®çã¯ãã¢ãŒãã£ã¹ãããããã¥ãŒãµãŒãããã¢ãŒã¿ãŒãäŒå Žãªã©ãé³æ¥œåéã®å°é家ãå£çµãããããšã§ãã ãããžã§ã¯ãã®æ©èœãšã¢ãŒããã¯ãã£ã®è©³çŽ°ã«ã€ããŠã¯ãHabréã®æ¬¡ã®æçš¿ã§èª¬æããŸãã ãããŸã§ã®éãããªãã¯ç§ãã¡ã®ãŠã§ããµã€ãã§
ãããžã§ã¯ãã«é¢ãã
æçš¿ãèªãããšãã§ããŸãã
ãµã€ãã®èšèšæ®µéã§ããæ
å ±ãããèŠèŠçã«è¡šçŸããã«ã¯ããããã䜿çšããã ãã§ããããšãããããŸããã è¿ãã®ã¢ãŒãã£ã¹ãããã°ããèŠã€ãããããžãªã¿ãŒã²ãã£ã³ã°ã䜿çšããŠèªåã«é¢ããåºåãæ£ããé
眮ãããã§ããŸãã ãããŠä»ãããŒã¿ãã¹ãã®ããã«ããããã¹ã¯åžæ°ã«å
šå¡ãæåŸ
ããŸãã ãã®èšäºã®åŸåã§ãã¹ãã§ãããã®ã«ã€ããŠã
äž»ãªã¿ã¹ã¯
ç§ãã¡ã®äž»ã§æãéèŠãªèŠä»¶ã¯ããããžã§ã¯ãã®ã»ãšãã©ã®ããŒãžã§ã€ã³ã¿ã©ã¯ãã£ãããã³éçããããæ倧éã«æµžéãããããšã§ããã ãµã€ãã®æ§é ãæ€èšããåŸããããžã§ã¯ãã®ããŸããŸãªã»ã¯ã·ã§ã³ã«é
眮ã§ããããã€ãã®åºæ¬ã¢ãžã¥ãŒã«ãå¿
èŠã§ãããšããçµè«ã«éããŸããã
- ç¹å®ã®çš®é¡ã®ããŒã«ãŒïŒã€ãã³ããã¢ãŒãã£ã¹ããããã¢ãŒã¿ãŒãäŒå Žãã·ã§ãããªã©ïŒã衚瀺ããæ¥ä»ã§ãã£ã«ã¿ãŒããæ©èœãåããã€ã³ã¿ã©ã¯ãã£ããããã
- ã¢ãŒãã£ã¹ããããããŸãã¯å€§ããªã«ã¬ã³ããŒã§ããã©ãŒãã³ã¹ãšåããèšç»ããããŸããŸãªäŒå Žã«èªåèªèº«ãæäŸããä»ã®ãŠãŒã¶ãŒããå
±åããã©ãŒãã³ã¹ã«é¢ãããªãã¡ãŒãåãåãããšãã§ãããã¢ãŒãã©ã³ããŒã
- ãµã€ãäžã®ãã¹ãŠã®ã³ã³ãã³ãããããã«ãªã³ã¯ã§ããããã«ãªããžã§ã¯ãã®å Žæãç·šéããããã®ãã©ãŒã ïŒããšãã°ããŠãŒã¶ãŒã«ãšã£ãŠã¯ãäœããã®ãã§ãã¯ã€ã³æ©èœã§ãïŒã
- ãªã¹ãå
ã®ãªããžã§ã¯ãã瀺ãããã«ããŒã«ãŒãä»ããéçã«ãŒãïŒããããªããšãåããŒãžã§æ°åæã®ã«ãŒããåæåããå¿
èŠããããããã©ãŒãã³ã¹ãšããããµãŒãã¹ã®å¶éã®äž¡æ¹ã®é¢ã§äžå©ã«ãªããŸãïŒã ãŸãããã¢ãŒãã©ã³ããŒãJPGã€ã¡ãŒãžã«ãšã¯ã¹ããŒãããã«ã¯éçããããå¿
èŠã§ããã
Mediagates.ruã®ã«ãŒãã®æ©èœã®è©³çŽ°ã«ã€ããŠã¯ããµã€ãã®ããã°ã«æçš¿ãããèšäºã
ã«ãŒããžã®ãã¹ãŠ ãã§èªãããšãã§ããŸãããããã§ã¯ãµãŒãã¹ã®å®è£
ã®æè¡çåŽé¢ã«ã€ããŠå
·äœçã«ã話ããããšæããŸãã
ãã¡ããããããã®ç¹ã¯ããããåå¥ã«å®è£
ãæ¯èŒçåçŽã§æçœã§ãããšèšãã§ãããã ããããç§ãã¡ã¯ãããã®ãããããæãäžããããããã¹ãŠã1ã€ã®ãããžã§ã¯ãã«çµåããæ¹æ³ãç解ããå®è£
äžã«çŽé¢ããªããã°ãªããªããã¹ãŠã®å°é£ãšèœãšãç©Žã«å¯ŸåŠããããšãææ¡ããŸãã ãŸããéåžžã«éèŠãªæ±ºå®ããå§ããŸããããããããµãŒãã¹ã®éžæã§ãã
ããããµãŒãã¹ã®éžæ
Habréã®ãã®ãããã¯ã«é¢ããèšäºãã¬ãã¥ãŒãããããããã®ã§ã詳现ã«èª¬æããå¿
èŠã¯ãªããšæããŸãã ããã§ééããäž»ãªåé¡ã¯ãGoogle Maps APIãµãŒãã¹ãèšèšããéçšã§ãæ¯æããçºçããããšã§ããã ããã«ããèšç»ãå°ç¡ãã«ãªãã®ã§ã¯ãªãããšå¿é
ããŸãããã詳现ãªèšç®ãç¹°ãè¿ããåŸãGoogle補åã䜿çšãããšãã決å®ã«ãšã©ãŸããŸããã
確èªããããããµãŒãã¹ïŒ
- Googleããã
- Yandex Mapsã
- Cloud MadeïŒãŸãã¯Open Street MapïŒã
- ãã³ã°
- API 2GISã
æçµåæã¯2012幎2æäžæ¬ã«è¡ããããã以éç¶æ³ã¯å€ããå¯èœæ§ããããŸãããéžæãã©ã¡ãŒã¿ãŒã¯æ¬¡ã®ãšããã§ããã
- ãšã€ã¹ã¯åžã®è³ªïŒãããžã§ã¯ãã®éçºã®åæ段éã§ã¯ããã·ã¢é£éŠãååã«è©³çŽ°ã«æãããŠããããšãéèŠã§ãïŒ
- äžçäžã«å°å³ãæãïŒå°æ¥ã®éå¿çãªèšç»ãããïŒ
- ã«ãŒãã®å€èŠ³ãã«ã¹ã¿ãã€ãºããææïŒçµæãšããŠããããæŸæ£ããŸããïŒã
- ãããã®åæåãŸãã¯ç¹å®ã®APIãžã®ãªã¯ãšã¹ãã®æ°ã«é¢ããæ³çå¶éã
- ãžãªã³ãŒãã£ã³ã°ã®å質ïŒãã·ã¢é£éŠãå«ãïŒã
æ¯èŒã®äžè¬çãªå°è±¡ã¯æ¬¡ã®ãšããã§ãã
- OpenStreetMapã¯äžçäžã§æã詳现ã§ããããšãå€æããŸããããæé«ã®Geocoding APIã¯ãããŸããã
- Yandex Mapsã§ã®ãããªãŒãïŒã¹ãã€ã³ã®éŠéœïŒã®æç»ã¬ãã«ã¯äœãã§ãã
- Bingã¯ãã·ã¢é£éŠã«å¯Ÿããæºåãäžååã§ãã
- API 2GISã¯è¯ãã¹ã¿ãŒããåããŸãã-å°æ¥ããã®åžå Žã®äž»èŠãã¬ã€ã€ãŒãšç«¶äºããããšãæã¿ãŸãã
- Google Mapsã¯ãã¡ã³ããŒãªGeocoding APIãæäŸããŸããããã·ã¢é£éŠã®ããã€ãã®éœåžã®è©³çŽ°ã«ã¯èŠåŽããŸããããšãŒãããã«ã€ããŠã¯èšããŸããïŒããã²ãŒã¿ãŒã®ä»£ããã«iPadã§éœåžãããã²ãŒãããããã«ããããäœåºŠã䜿çšããŸããïŒã Google Pay
ãã®çµæãæ¯æãã«ããããããGoogle Maps APIã«æãæºè¶³ããŠããããšã«æ°ä»ããŸããããå°æ¥çã«ã¯å¥ã®ããããµãŒãã¹ã«åãæ¿ããå¿
èŠãããå¯èœæ§ããããŸãã ãã®ç¹ã§ãã¯ã©ã¹ããã€ã§ãè¿œå ããŠå¥ã®ããããµãŒãã¹ãæäœã§ããããã«ã³ãŒããæŽçãããããã§ã®äœæ¥ã®å€§éšåãæžãæããå¿
èŠããªãããã«ããããšã«ããŸããã èšãæããã°ã圌ãã¯ã¿ã¹ã¯ã2ã€ã®ãµãã¿ã¹ã¯ã«åå²ããããšã決å®ããŸãããããã¯ããµã€ãã§ã®å¯Ÿè©±åãšããããµãŒãã¹ãšã®éä¿¡ã§ãã
Googleã¯éåžžã«åªãããžãªã³ãŒãã£ã³ã°ãµãŒãã¹ïŒGoogle Geocoding APIïŒãæäŸããŠãããŸããã æ£çŽã«èšããšãç§ãã¡ã®éçºè
ã¯ããããã§ãã·ã§ãã«ã³ãã¥ããã£ã«ååšãããžã§ãŒã¯ã確èªããæ©äŒããããŸããããYandex-ãã¹ãŠããããŸãã Google-äœã倱ãããŸããã§ããããïŒGoogle Geocoding APIã¯ããŠãŒã¶ãŒãå
ã®èšèªã§å
¥åããããšãªããéåžžã«å€ãã®äœæã®å ŽæãèŠã€ããããšãã§ããŸãã
GoogleãµãŒãã¹ã®æ¬ ç¹ã®ãã¡ããã·ã¢ã®åŒ±ããç¥èããšæéïŒAPIãžã®ã¢ã¯ã»ã¹ãšã«ãŒãã®åæåã®å¶éãè¶
ããå ŽåïŒãããäžåºŠåŒ·èª¿ãã䟡å€ããããŸãã ãããŸã§ã®ãšãããã«ã¹ã¿ã ã«ãŒãã®åæåã®å¶éãç·©åããããããã«ãŒãã®ã«ã¹ã¿ãã€ãºãæŸæ£ããå¿
èŠããããŸããã
ãããã£ãŠãéžæããããµãŒãã¹ãããã€ããŒã¯Googleã§ãã ã ããç§ãã¡ã®åŠåã§ã¯ïŒ
- Google Maps API v3ã
- Google Geocoding API v3ã
- Google Static Maps API v2ã
次ã«ãããã³ããšã³ããšããã¯ãšã³ãã®äžè¬çãªã¢ãŒããã¯ãã£ãæ±ãããšãææ¡ããŸãã ããã³ããšã³ãããå§ããŸãããã
ããã³ããšã³ãã®äž»èŠã³ã³ããŒãã³ã
ãã§ã«è¿°ã¹ãããã«ãå°æ¥ãå¥ã®ã«ãŒããããã€ããŒãšé£æºããæ©èœãè¿
éã«è¿œå ã§ããããã«ããããšèããŸããã ãã®ãããåºæ¬ã¯ã©ã¹ãéçºããŸãããå®éã«ã¯ã次ã®ãããªã¯ã©ã¹ã®æ¡åŒµã§ãã
- google.maps.Mapã
- google.maps.Markerã
- google.maps.Geocoderã
ããŒã«ãŒã«ã€ããŠã¯ãååãšãããã¢ãããªã¹ãã衚瀺ããããã®è¿œå æ©èœãå¿
èŠã§ããïŒããšãã°ãããŒã«ãŒã®ã°ã«ãŒãïŒã åºç€ãšããŠãGary LittleããMarkerWithLabel for V3ã¯ã©ã¹ãååŸããå¿
èŠã«å¿ããŠå€æŽããããšã«ããŸããã
ãŸããã¢ãžã¥ãŒã«ãæäœããããã®ã¡ã€ã³ã¯ã©ã¹ãæºåããŸããã
- ããŸããŸãªçš®é¡ã®ããŒã«ãŒã®ãã£ã«ã¿ãŒãšå°ããªã«ã¬ã³ããŒïŒ1ã€ã®ã¬ãŒã³ïŒãåããã€ã³ã¿ã©ã¯ãã£ããããã
- æåã®ã¯ã©ã¹ã«åºã¥ããŠæ§ç¯ããããã¢ãŒãã©ã³ããŒãå°ããªã«ã¬ã³ããŒã倧ããªã«ã¬ã³ããŒã«çœ®ãæããŸãïŒåœç¶ãæ©èœãæ¡åŒµããŸãïŒã
- ãªããžã§ã¯ãã®å Žæã瀺ããŸãã
ããã¯ãšã³ãã®äž»èŠã³ã³ããŒãã³ã
ããã¯ãšã³ãã¯ã次ã®äž»ãªã¿ã¹ã¯ãå®è¡ããããšã«ãªã£ãŠããŸãã
- ããã³ããšã³ãããã®èŠæ±ãšãã®ã°ã«ãŒãåã®æ¡ä»¶ãæºãããå€æ°ã®ããŒã«ãŒã®ããŒã¿ããŒã¹ããã®éžæã
- ãªã¹ãã«èŠçŽ ã衚瀺ãããã¢ãŒãã©ã³ããŒã®çŸåšã®ããããã¥ãŒãjpgã€ã¡ãŒãžã«ãšã¯ã¹ããŒãããããã®éçãããã®çæã
- ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã®ããŒã«ãŒïŒãŸãã¯ããŒã«ãŒã°ã«ãŒãïŒãé£ç¶æ²ç·ãšçµã¿åãããŸãã
ããã§ã¯ããŸãããŒã«ãŒã®ã°ã«ãŒãåã«æ³šæãæã䟡å€ããããŸãã次ã«ãã«ãŒãããŒã«ãŒãçµåããããã»ã¹ãšãæåŸã«ãããã®ãšã¯ã¹ããŒããæ€èšããŸãã
ããŒã«ãŒã®ã°ã«ãŒãå
ãããäžã®å€æ°ã®ãªããžã§ã¯ããæäœããå¿
èŠãããå ŽåãããŒã«ãŒãã°ã«ãŒãåããå¿
èŠãçããŸãã äžéšã®ãã©ãŠã¶ã¯ãæ°ååã®éæšæºããŒã«ãŒã®åŠçã§é床ãäœäžãå§ããŸãã ãããåé¿ããã«ã¯ããããäžã®ãªããžã§ã¯ããã°ã«ãŒãã«çµåããå¿
èŠããããŸãã
ã°ã«ãŒãåã«ã¯ãããã³ããšã³ããšããã¯ãšã³ãã®2ã€ã®ã¿ã€ãããããŸãã 1ã€ç®ã¯Javaã¹ã¯ãªããã§å®è£
ããã2ã€ç®ã¯ãµãŒããŒèšèªã§å®è£
ãããŸãã Java Scriptã®ã°ã«ãŒãåã«ã¯ã䜿çšã§ããæ¢è£œã®ãšã³ãžã³ãå€æ°ãããŸããããµãŒããŒãããã©ãŠã¶ãŒã«å€§éã®ããŒã¿ã転éããããšãæ©æµã®ãªãã¿ã¹ã¯ã§ããããŒã¿ãå€ãã»ã©ããã©ãŠã¶ãŒã®åŠçãé
ããªããæçµçã«ã¯æžå°ããŸããµã€ãã®é床ãšæ
å ±ã®èªèã®æªåã
ãµãŒããŒåŽããŒã«ãŒã®ã°ã«ãŒãå
ãµãŒããŒåŽã®ããŒã«ãŒã®ã°ã«ãŒãåã«èœã¡çããåŸããã®é åã§æ¢ã«ã©ã®ã¢ã«ãŽãªãºã ãçºæãããŠããã®ãçåã«æãå§ããŸããã ã°ãªããããŒã¹ãšè·é¢ããŒã¹ã®2ã€ã®æãäžè¬çãªã¯ã©ã¹ã¿ãªã³ã°ã®ã¿ã€ãã«ã€ããŠè©±ãã®ãç¿æ
£ã§ãã æåã®ãªãã·ã§ã³ã¯ããåçŽã§ã2çªç®ã¯ã¢ã«ãŽãªãºã ãšå®è£
ã®ç¹ã§ããã¯ãŒã«ã§ãã ã¯ã€ãã¯ã¹ã¿ãŒãã®ããã®æåã®éãæ©ã¿ãŸããããè·é¢ããŒã¹ã®ã¯ã©ã¹ã¿ãªã³ã°ã«ãã§ã«åãçµãã§ãããè¿ãå°æ¥ã«å®è£
ããäºå®ã§ãã
ã°ãªããããŒã¹ã®ã°ã«ãŒãåã®æ¬è³ªã¯ç°¡åã§ããåè¿äŒŒïŒãºãŒã ïŒããšã«ãå°çã¯ã°ã«ãŒãïŒæ¯èŒçèšãã°é·æ¹åœ¢ïŒã«åå²ãããŸãã ã€ãŸããè€æ°ã®ãªããžã§ã¯ããäžåºŠã«ãããã®å³ã®ããããã«è©²åœããå Žåããããã¯1ã€ã®ããŒã«ãŒã«ã°ã«ãŒãåãããã°ã«ãŒãã象城ããŸãã
æ²ç·ããŒã«ãŒã®çµã¿åãã
åœåã¯ãå°å³äžã®ç¹å®ã®ããŒã«ãŒãŸãã¯ããŒã«ãŒã®ã°ã«ãŒããæç³»åã§çµåããã ãã®ç Žç·ãäœæããããšãèããŸããã ããã¯ãgoogle.maps.Polylineã¯ã©ã¹ãšgoogle.maps.PolylineOptionsã¯ã©ã¹ã䜿çšããŠè¡ãã®ãæã䟿å©ã§ããããšã¯æããã§ãã ããããæåã«ãGUIãã¶ã€ããŒããããŠããã°ã©ããŒã¯ãç Žç·ã§ã¯ãªãããŠãŒã¶ãŒã®ããŒã«ãŒãçµåããæ»ãããªïŒãã€ã³ãã«ããæ§ç¯ãèš±ãéãïŒæ²ç·ãæã€æ¹ãã¯ããã«çŸãããšå€æããŸããã
ã°ã«ãŒãåãšåæ§ã«ããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒã«è² è·ããããããªãããã«ããµãŒããŒåŽã§ãã®æ²ç·ãèšèšããããšã«ããŸããã çããã¹ãã®åŸã3次ã¹ãã©ã€ã³ã䜿çšããè£éæ¹æ³ã決å®ããŸããããã®çµæã¯ãµãŒããŒããJavaScriptã«éä¿¡ãããgoogle.maps.Polylineã䜿çšããŠãã€ã³ãããšã«æ¢ã«ã¬ã³ããªã³ã°ãããŠããŸãã
ã¢ã«ãŽãªãºã ã«ã€ããŠè©³ããèŠãŠã¿ãŸãããã æ°åŠã®èŠ³ç¹ããã¯ãè€éãªããšã¯äœããããŸããã PHPã§ã¯ã次ã®ã¯ã©ã¹ãäœæããŸããã
- ãã€ã³ã-ãã€ã³ãã®åº§æšã®èŠèŠçãªã¹ãã¬ãŒãž
- Cubic-ïŒfïŒxïŒ= d * x ^ 3 + c * x ^ 2 + b * x + aã®åœ¢åŒã®ïŒé¢æ°ã®å€ãšãç¹å®ã®xããã³ä¿æ°aãbãcãdã®å°é¢æ°ãååŸããããã®ã¯ã©ã¹
- ããª-è£éèªäœ
以äžã¯ããããã®åã¯ã©ã¹ãç解ããããã«æå°åããããœãŒã¹ã³ãŒãã§ãã
Point.inc
<?php class Point { public $x; public $y; function __construct($x, $y){ $this->x = $x; $this->y = $y; } } ?>
Cubic.inc
<?php class Cubic { private $a; private $b; private $c; private $d; function __construct($a, $b, $c, $d){ $this->a = $a; $this->b = $b; $this->c = $c; $this->d = $d; } public function eval_($u){ return (($this->d * $u + $this->c) * $u + $this->b) * $u + $this->a; } public function eval_derivative($u){ return $this->b + $u * (2 * $this->c + 3 * $this->d * $u); } } ?>
Poly.inc
<?php class Poly { public $points; function __construct(){ $this->points = array(); } public function push($x, $y){ array_push($this->points, new Point($x, $y)); } public function getInterpolatedPoly($stepsNum = 12, $type = 'poly'){ $i = 0; $j = 0; $u = 0; $ret = new Poly(); $sizeofPoints = sizeof($this->points); if($sizeofPoints >= 2){ $xpts = $this->xpoints(); $ypts = $this->ypoints(); $xc = $this->calcNaturalCubic($sizeofPoints - 1, $xpts); $yc = $this->calcNaturalCubic($sizeofPoints - 1, $ypts); $ret->push($xc[0]->eval_(0), $yc[0]->eval_(0)); $stepsNum = 100; for($i = 0; $i < sizeof($xc); $i++){ for($j = 1; $j <= $stepsNum; $j++){ $u = $j / $stepsNum; $nx = $xc[$i]->eval_($u); $ny = $yc[$i]->eval_($u); $ret->push($nx, $ny); } } } if($type == 'array'){ $ret_ = array(); for($i = 0; $i < sizeof($ret->points); $i++){ array_push($ret_, array( 'x' => $ret->points[$i]->x, 'y' => $ret->points[$i]->y )); } return $ret_; } return $ret; } private function xpoints(){ return $this->getPointsArray('x'); } private function ypoints(){ return $this->getPointsArray('y'); } private function getPointsArray($type){ $r = array(); $sizeofPoints = sizeof($this->points); switch($type){ case 'y': for($i = 0; $i < $sizeofPoints; $i++) array_push($r, $this->points[$i]->y); break; case 'x': default: for($i = 0; $i < $sizeofPoints; $i++) array_push($r, $this->points[$i]->x); } return $r; } private function calcNaturalCubic($n, &$x){ $gamma = array(); $delta = array(); $D = array(); $i = 0; $gamma[0] = 1.0 / 2.0; for($i = 1; $i < $n; $i++) $gamma[$i] = 1 / (4 - $gamma[$i-1]); $gamma[$n] = 1 / (2 - $gamma[$n-1]); $delta[0] = 3 * ($x[1] - $x[0]) * $gamma[0]; for($i = 1; $i < $n; $i++) $delta[$i] = (3 * ($x[$i + 1] - $x[$i - 1]) - $delta[$i - 1]) * $gamma[$i]; $delta[$n] = (3 * ($x[$n] - $x[$n - 1]) - $delta[$n - 1]) * $gamma[$n]; $D[$n] = $delta[$n]; for($i = $n - 1; $i >= 0; $i--) $D[$i] = $delta[$i] - $gamma[$i] * $D[$i + 1]; $C = array(); for($i = 0; $i < $n; $i++) $C[$i] = new Cubic($x[$i], $D[$i], 3 * ($x[$i + 1] - $x[$i]) - 2 * $D[$i] - $D[$i + 1], 2 * ($x[$i] - $x[$i + 1]) + $D[$i] + $D[$i + 1]); return $C; } } ?>
ãããŠããããä»»æã®ç¹ã®æ²ç·ãäœæããããã»ã¹ã§ãã å
¥åã§ã¯ãåãã€ã³ãã®xå€ãšyå€ã®ãã¢ãæã€$ãã€ã³ãã®ååä»ãé
åããããŸãã
<?php
åºåã«ã¯ãç¹ã§æ²ç·ãäœæããããã®åº§æšãæã€é
åããããŸãã ããã¯äœãèµ·ãã£ãããèŠèŠåããäŸã§ãã
ãŸããããã€ãã®èšå®ãå€æŽããããšã§ãããŒããHabraHabrããŽãã®å³èæŒå¥ãäœæã§ããŸãã
è¿ãå°æ¥ãæ²ç·ãå°ãæ¹è¯ããŠãçŽç·ã ãã§ãªãæ¹åã瀺ãå°ããªç¢å°ã«ãªãããã«ããäºå®ã§ãã
ãããããã§ã«ç§ãã¡ã¯ãã¢ãŒãã£ã¹ãããããã¥ãŒãµãŒããªãŒã¬ãã€ã¶ãŒã«ã圌ããäœãããŠãããããªãŒã¬ãã€ã¶ãŒãã¹ããŒã«ãŒãšããŠåå ããã€ãã³ãããããŠãã€ãã©ãã«ããã®ããã¿ããªã«äŒããããã®äŸ¿å©ã§çŸããæ¹æ³ãäžãããšä¿¡ããŠããŸãã
éçããããšJPGãžã®ãšã¯ã¹ããŒã
ãŠãŒã¶ãŒãå°å³ãšã«ã¬ã³ããŒã§ãã¢ãŒãèšç»ããåŸããããããœãŒã·ã£ã«ãããã¯ãŒã¯ã§å人ã«éç¥ããããããã°ã§ãã®æ
å ±ãå
¬éããããšæãã§ãããã ãããè¡ãããã«ããŠãŒã¶ãŒã®ã³ã³ãã¥ãŒã¿ãŒäžã®ãã¹ãŠã®ããŒã«ãŒãå«ãçŸåšã®ããããã¥ãŒãJPG圢åŒã§ä¿åã§ããããã«ããŸããã
ãJPGãšããŠä¿åããã¿ã³ãã¯ãªãã¯ãããšãJava Scriptã¯ãããã®çŸåšã®ãã¥ãŒãšãã®äžã®ããŒã«ãŒã«é¢ãããã¹ãŠã®æ
å ±ããµãŒããŒã«éä¿¡ããŸãããµãŒããŒã¯ãGoogle Static Maps APIã䜿çšããŠãããã®ç®çã®éšåãèªã¿èŸŒã¿ãããŒã«ãŒãé
眮ããŠä¿åããŸãäžæãã¡ã€ã«ã¹ãã¬ãŒãžããã©ãŠã¶ã§ãŠãŒã¶ãŒã«è¿ããããªã³ã¯ã
Google Static Maps APIããç»åãèªã¿èŸŒãã åŸãå°å³äžã«ããŒã«ãŒãé
眮ããããšããã®ã¯ãããã¹ãã§ã¯ãªãäž»ãªããšã§ããè¯ãçµæãåŸãããããšã¯ãŸããããŸããã ãœãªã¥ãŒã·ã§ã³ã¯ã¯ããã«ç°¡åã§ããAPIã䜿çšãããšãå°å³äžã®åº§æšãæå®ãããšãã«å€éšç»åãé
眮ã§ããŸãã
ããã§ã1ã€ã®è³ªåãæ®ã£ãŠããŸããfb.comãŸãã¯vk.comã®ãŠãŒã¶ãŒã®å£ã«å°å³ãæçš¿ããæ¹ãè¯ãã§ããããã åé¡ã詳现ã«èª¿æ»ãããšã¯èšããŸããããããããjpgç»åãšããŠãšã¯ã¹ããŒããããããå£ã«æåã§å
¬éããããšã»ã©è¯ããã®ã¯ãããŸããã§ããã ããã¯ã°ã©ãŠã³ãã§å€§ããªç»åãå
¬éããæ¹æ³ãæããŠããã ããã°å¹žãã§ãã åæã«ããã®ç»åã¯ãŠãŒã¶ãŒçæã®æŠå¿µã«é©åããªããããFacebookã«å€§ããªãµã€ãºãæçš¿ã§ããããšãç解ããå¿
èŠããããŸãã
å°å³æ€çŽ¢
çµè«ãšããŠãå°å³äžã®ãªããžã§ã¯ãã®æ€çŽ¢ã«é¢ããããã€ãã®åèªãè¿œå ããããšæããŸãã ãã®æ©èœãèãããšããã°ã©ãã£ã«ã«ã€ã³ã¿ãŒãã§ã€ã¹ã®å©äŸ¿æ§ãçµã¿åãããŠãæãé¢é£æ§ã®é«ãçµæãååŸããããšããŸããã UIã®èŠ³ç¹ãããç§ã¯åžžã«afisha.ruã§ã®æ€çŽ¢ã奜ãã§ãã-ããªãã¯ããªããæããã¹ãŠãå
¥åãã圌ã¯ãã®ãªã¯ãšã¹ãã®ããã«ãµã€ãäžã«ãããã®ãããªãã«äŒããããã«ã³ã³ãã³ãã¿ã€ãã§ããããœãŒãããŸãã
ãã®çµæãæ€çŽ¢ãšã³ãžã³ïŒãŸãã¯ããµãŒããŒãšåŒã°ããããšããããŸãïŒsphinxã䜿çšããŸããããã®ã¹ãã£ã³ã¯ã¹ã¯ããµã€ãã®ã¡ã€ã³æ€çŽ¢ã®ããŒã¹ã«ãªã£ãŠããŸãã ããã«ãããããŒã¿ããŒã¹ãããŠãŒã¶ãŒã®èŠæ±ã«å¿ããŠæãé¢é£æ§ã®é«ãããŒã¿ãååŸããŸãã ãŸãããŠãŒã¶ãŒãäœæãèŠã€ãããå Žåã¯ãGoogle Geocoding APIã«ãªã¯ãšã¹ããéä¿¡ããŸãã
ããŒã¿ããŒã¹ããã³äœæã«ããæ€çŽ¢çµæã¯ããŠãŒã¶ãŒãå
¥åããæåã®3æåã®åŸã«æ¢ã«ã¿ã€ãå¥ã«ãœãŒããããŠè¡šç€ºãããããããã¯ãªãã¯ãããšããã®ãªããžã§ã¯ããé
眮ãããŠãããããäžã®å Žæã«ãã°ãã移åã§ããŸãã
ãããã«
äžè¬çã«ãããããããã®åé¡ã«ã€ããŠäŒãããããšã¯ãã¹ãŠã§ãã ãã¡ãããæã
ã¯habrayuzersããããžã§ã¯ããç¹ã«ã«ãŒããšã©ã®ããã«é¢ä¿ããã®ãããããŠhabrå¹æãçãæ®ããã©ããã«éåžžã«èå³ããããŸãã ãããããç»é²ããŠããã§ãã¯ã€ã³ããŠããã¹ãããŠãã ããã Facebookããã³VKontakteã«ã«ãŒãããšã¯ã¹ããŒãããéã®ãã³ããæäŸããŠãã ãã£ãæ¹ã
ã«æè¬ããŸãã