…L@eÅu¿¸ÿ€X K"Y^ÒšTy"È¡a"²*µöz½0uü°êN(x`¶X@½<Év±–Ë<Ä,N¸åØ^FÆf:U¹+Œ­fº•zð©Šë­Ð9kÚGå%¢b¯õ÷ Ù?]ú£Y§bidwddates2024-02-08T23:55:00etitlexMApple発ã®è¨­å®šè¨˜è¿°è¨€èªžPkl(ピクル)ã§Geo3x3対応105言語目ï¼dtagsg#geo3x3curlxhttps://fukuno.jig.jp/4215dbodyy# Apple発ã®æ–°ãƒ—ログラミング言語「Pkl(ピクル)ã€ã®ç™»å ´ï¼ï¼Ÿ
「アップルã€æ–°ã—ã„プログラミング言語「Pklã€ã‚’オープンソースã§å…¬é–‹ã€‚コンフィグレーション生æˆç”¨ | テクノエッジ TechnoEdgeã€


「Pklã€

JSONã€YAMLã€plistãªã©ã®è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ç”Ÿæˆã«ç‰¹åŒ–ã—ãŸè¨€èªžã§ã€Pythonã€JavaScriptã€Swiftã®ã‚ˆã†ãªæ±Žç”¨ãƒ—ログラミング言語ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ãã£ã¨è¨­å®šãƒ•ã‚¡ã‚¤ãƒ«ãŒè¤‡é›‘化ã—ã¦å›°ã£ãŸã®ã§ã—ょã†ã€‚


ã›ã£ã‹ããªã®ã§ã€ç·¯åº¦çµŒåº¦ç²¾åº¦ã®æ–‡å­—列エンコーディングã€Geo3x3ã«å¯¾å¿œã—ã¾ã—ãŸã€ŒGeo3x3 in Pklã€ã€‚

デãƒãƒƒã‚°ãŒã—ã¥ã‚‰ã„ã®ãŒé›£ç‚¹ã§ã—ãŸãŒã€é–¢æ•°åž‹ã®ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰ã€ãƒ‡ã‚³ãƒ¼ãƒ‰ã‚’ベースã«æ¯”較的シンプルã€ç´ ç›´ãªå®Ÿè£…ã§ã§ãã¾ã—ãŸã€‚ import "https://taisukef.github.io/Geo3x3/geo3x3.pkl" enc = geo3x3.encode(35.65858, 139.745433, 14) dec = geo3x3.decode("E9139659937288") ã“ã¡ã‚‰ãŒPklã§æ›¸ã„ãŸGeo3x3モジュールを使ã†ã‚³ãƒ¼ãƒ‰ã€‚ブラウザやDenoã§ä½¿ãˆã‚‹JavaScriptã¨åŒæ§˜ã€URLã§ã‚¤ãƒ³ãƒãƒ¼ãƒˆã§ãã‚‹ã®ã¯ã†ã‚Œã—ã„ï¼ ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ãŸpklを使ã£ã¦ã€ç”Ÿæˆã—ã¦ã¿ã¾ã—ょã†ã€‚

$ pkl eval simple_geo3x3.pkl enc = "E9139659937288" dec { lat = 35.6586337900162 lng = 139.74546563023935 level = 14 unit = 1.1290058538953522E-4 }

ã“ã¡ã‚‰ãŒæ¨™æº–ã€pcf(pkl format?)

$ pkl eval simple_geo3x3.pkl -f json { "enc": "E9139659937288", "dec": { "lat": 35.6586337900162, "lng": 139.74546563023935, "level": 14, "unit": 1.1290058538953522E-4 } }

JSON

$ pkl eval simple_geo3x3.pkl -f yaml enc: E9139659937288 dec: lat: 35.6586337900162 lng: 139.74546563023935 level: 14 unit: 1.1290058538953522E-4

YAML

$ pkl eval simple_geo3x3.pkl -f xml &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;root&gt; &lt;enc&gt;E9139659937288&lt;/enc&gt; &lt;dec&gt; &lt;lat&gt;35.6586337900162&lt;/lat&gt; &lt;lng&gt;139.74546563023935&lt;/lng&gt; &lt;level&gt;14&lt;/level&gt; &lt;unit&gt;1.1290058538953522E-4&lt;/unit&gt; &lt;/dec&gt; &lt;/root&gt;

XML。(Listを出力ã—ãŸå ´åˆã€æ–‡å­—列ã¨ã—ã¦ã™ã¹ã¦ç¹‹ãŒã£ã¦ã—ã¾ã£ã¦ã„ã‚‹ã®ã¯ãƒã‚°ã‹ã‚‚?)

$ pkl eval simple_geo3x3.pkl -f plist &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"&gt; &lt;plist version="1.0"&gt; &lt;dict&gt; &lt;key&gt;enc&lt;/key&gt; &lt;string&gt;E9139659937288&lt;/string&gt; &lt;key&gt;dec&lt;/key&gt; &lt;dict&gt; &lt;key&gt;lat&lt;/key&gt; &lt;real&gt;35.6586337900162&lt;/real&gt; &lt;key&gt;lng&lt;/key&gt; &lt;real&gt;139.74546563023935&lt;/real&gt; &lt;key&gt;level&lt;/key&gt; &lt;integer&gt;14&lt;/integer&gt; &lt;key&gt;unit&lt;/key&gt; &lt;real&gt;1.1290058538953522E-4&lt;/real&gt; &lt;/dict&gt; &lt;/dict&gt; &lt;/plist&gt;

Macã®é–‹ç™ºç’°å¢ƒã€Xcodeã§ãŠãªã˜ã¿plist(XML)

下記ãŒGeo3x3ã®Pkl(ピクル)実装。 module geo3x3 function encode_fn(code, level, i, lat, lng, unit) = if (i >= level) code else encode_fn( code + "\(lng ~/ unit + lat ~/ unit * 3 + 1)", level, i + 1, lat - unit * (lat ~/ unit), lng - unit * (lng ~/ unit), unit / 3.0 ) function encode(lat, lng, level) = encode_fn( if (lng < 0.0) "W" else "E", level, 1, lat + 90.0, if (lng < 0.0) lng + 180.0 else lng, 180.0 / 3.0 ) function decode_fn(code, _lat, _lng, _level, _unit, wflg) = if (code.length == _level) new { lat = -90.0 + (_lat + _unit * 3.0 / 2.0) lng = if (wflg) (_lng + _unit * 3.0 / 2.0) - 180.0 else _lng + _unit * 3.0 / 2.0 level = _level unit = _unit * 3.0 } else let (n = code[_level].toInt() - 1) decode_fn( code, _lat + n ~/ 3 * _unit, _lng + n % 3 * _unit, _level + 1, _unit / 3.0, wflg ) function decode(code) = if (code[0] == "W") decode_fn(code, 0.0, 0.0, 1, 180.0 / 3.0, true) else decode_fn(code, 0.0, 0.0, 1, 180.0 / 3.0, false) 構造ã¯ã€ã‚«ãƒƒã‚³ã§ã‚‚インデントもãªã—ã®å¼ã¨ã—ã¦æ›¸ãã¾ã™ã€‚読ã¿ã‚„ã™ã•ã®ãŸã‚インデントã—ã¦ã„ã¾ã™ã€‚

æ–°ã—ã„言語を使ã£ã¦å®Ÿè£…ã—ã¦ã¿ã‚‹ã®ã¯æ¥½ã—ã„ã§ã™ã­ï¼
テストデータを生æˆã™ã‚‹ã®ã«ä½¿ãˆã‚‹æ°—ãŒã—ã¾ã™ãŒã€ä½¿ã„慣れã¦ã‚‹JavaScriptã§æ›¸ã„ã¡ã‚ƒã†ã‹ãªã。 cimgxKhttps://img.sabae.cc/data/20240209/dfb27bf9-97bf-499f-a4cb-e5330dc9035d.jpg