@sk-global/js-msearch-gsi-jp 0.0.2-0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1 +1,3 @@
1
- declare const run: () => Promise<void>;
1
+ import { latLonToAddressInfo, getMuniMap } from './m_reverse_geocode';
2
+ import { searchAddress } from './msearch';
3
+ export { latLonToAddressInfo, getMuniMap, searchAddress };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- Promise.resolve().catch(console.error);
1
+ function e(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=/*#__PURE__*/e(require("axios")),t="GSI.MUNI_ARRAY[",n=function(){try{return Promise.resolve(r.default.get("https://maps.gsi.go.jp/js/muni.js",{responseType:"text"})).then(function(e){return function(e){var r={};return e.split("\n").forEach(function(e){if(e.startsWith(t)){var n=function(e){var r=e.replace(t,"").replace("] = ","").replace(";","").replace(/'/g,"").replace(/"/g,""),n=r.split(",");if(4!==n.length)throw new Error("invalid muni record: "+r);return{prefCode:n[0],prefName:n[1],cityCode:n[2],cityName:n[3]}}(e);r[n.cityCode]=n}}),r}(e.data)})}catch(e){return Promise.reject(e)}},o=null;exports.getMuniMap=n,exports.latLonToAddressInfo=function(e,t){return Promise.resolve(function(e,t){try{return Promise.resolve(r.default.get("https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress",{responseType:"json",params:{lat:e,lon:t}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}}(e,t)).then(function(e){function r(){return o[t.muniCd]}var t=e.results;if(!t||!t.muniCd)throw new Error("No address found");var s=function(){if(!o)return console.log("getMuniMap"),Promise.resolve(n()).then(function(e){o=e})}();return s&&s.then?s.then(r):r()})},exports.searchAddress=function(e){try{return Promise.resolve(r.default.get("https://msearch.gsi.go.jp/address-search/AddressSearch",{responseType:"json",params:{q:e}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["const run = async () => {}\nrun().catch(console.error)\n"],"names":["Promise","resolve","console","error"],"mappings":"AAAuBA,QAAAC,gBACXC,QAAQC"}
1
+ {"version":3,"file":"index.js","sources":["../src/muni.ts","../src/m_reverse_geocode.ts","../src/msearch.ts"],"sourcesContent":["// Muni file url\nconst MuniURL = 'https://maps.gsi.go.jp/js/muni.js';\nconst MuniRecordPrefix = 'GSI.MUNI_ARRAY[';\n\nimport axios from 'axios';\nimport { AddressResults, MuniMap } from './types';\n\n/**\n * parse muni.js\n * @param muniMap\n */\nconst parseMuniMap = (muniMap: string) => {\n const muniMapObj: MuniMap = {};\n const lines = muniMap.split('\\n');\n lines.forEach((line) => {\n if (line.startsWith(MuniRecordPrefix)) {\n const muniRecord = parseMuniRecord(line);\n muniMapObj[muniRecord.cityCode] = muniRecord;\n }\n });\n return muniMapObj;\n};\n\n/**\n * parse muni record\n * @param line\n */\nconst parseMuniRecord = (line: string) => {\n // every line should start with GSI.MUNI_ARRAY[ and end with ];\n // e.g. GSI.MUNI_ARRAY[\"47212\"] = '47,大分県,47212,佐伯市';\n // we need to extract 47,大分県,47212,佐伯市\n const muniRecord = line\n .replace(MuniRecordPrefix, '')\n .replace(\"] = \", '')\n .replace(\";\", '')\n .replace(/'/g, '')\n .replace(/\"/g, '');\n\n const muniRecordArray = muniRecord.split(',');\n\n // validate muni record\n if (muniRecordArray.length !== 4) {\n throw new Error(`invalid muni record: ${muniRecord}`);\n }\n\n return {\n prefCode: muniRecordArray[0],\n prefName: muniRecordArray[1],\n cityCode: muniRecordArray[2],\n cityName: muniRecordArray[3],\n };\n};\n\n/**\n * Get muni map (city or ward map by city code) from GSI\n */\nconst getMuniMap = async () => {\n const response = await axios.get(MuniURL, {\n responseType: 'text',\n });\n\n const muniMap = response.data;\n return parseMuniMap(muniMap);\n};\n\n/**\n * converts muni code to address name.\n *\n * @param muniMap\n * @param muniCode\n */\nconst muniCodeToAddressName = (muniMap: MuniMap, muniCode: string) => {\n const muniRecord = muniMap[muniCode];\n if (!muniRecord) {\n throw new Error(`muni code ${muniCode} not found`);\n }\n\n return `${muniRecord.prefName}${muniRecord.cityName}`;\n};\n\n/**\n * converts address result to address name.\n * @param muniMap\n * @param addressResults\n */\nconst addressResultsToAddressName = (\n muniMap: MuniMap,\n addressResults: AddressResults\n) => {\n const mc = addressResults.muniCd;\n const muniName = muniCodeToAddressName(muniMap, mc);\n const addrName = `${muniName}${addressResults.lv01Nm}`;\n return addrName;\n};\n\nexport { getMuniMap, muniCodeToAddressName, addressResultsToAddressName };\n","import axios from 'axios';\n\nimport { ReverseGeocodeResults, MuniMap, MuniRecord } from './types';\nimport { addressResultsToAddressName, getMuniMap } from './muni';\nconst BaseURL = 'https://mreversegeocoder.gsi.go.jp';\n\n// cache muni map\nvar muniMap: MuniMap | null = null;\n\n/**\n * reverse geocoding by latitude and longitude to address\n * It returns town name only\n *\n * @param lat\n * @param lon\n * @returns address\n */\nconst latLonToAddress = async (\n lat: number,\n lon: number\n): Promise<ReverseGeocodeResults> => {\n const url = `${BaseURL}/reverse-geocoder/LonLatToAddress`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n lat,\n lon,\n },\n });\n\n const res = response.data;\n return res;\n};\n\n/**\n * Get full address name by latitude and longitude\n * @param lat\n * @param lon\n * @returns prefecture + city + town\n */\nconst latLonToAddressName = async (\n lat: number,\n lon: number\n): Promise<string> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n muniMap = await getMuniMap();\n }\n\n return addressResultsToAddressName(muniMap, results);\n};\n\nconst latLonToAddressInfo = async (\n lat: number,\n lon: number\n): Promise<MuniRecord> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n console.log('getMuniMap');\n muniMap = await getMuniMap();\n }\n const mc = results.muniCd;\n return muniMap[mc];\n};\n\nexport { latLonToAddressInfo, getMuniMap };\n","import axios from 'axios';\n\nimport { SearchResults } from './types';\n\n// base url for msearch api\nconst BaseURL = 'https://msearch.gsi.go.jp';\n\n/**\n * search address by query\n */\nconst searchAddress = async (q: string): Promise<SearchResults> => {\n const url = `${BaseURL}/address-search/AddressSearch`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n q,\n },\n });\n\n const res = response.data;\n return res;\n};\n\nexport { searchAddress };\n"],"names":["MuniRecordPrefix","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","startsWith","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","parseMuniRecord","parseMuniMap","data","e","reject","lat","lon","BaseURL","params","latLonToAddress","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","q"],"mappings":"+GAEMA,EAAmB,kBAsDnBC,aAAwB,IAAA,OAAAC,QAAAC,QACLC,EAAAA,QAAMC,IAxDf,oCAwD4B,CACxCC,aAAc,UACdC,KAAA,SAFIC,GAKN,OAnDmB,SAACC,GACpB,IAAMC,EAAsB,CAAA,EAQ5B,OAPcD,EAAQE,MAAM,MACtBC,QAAQ,SAACC,GACb,GAAIA,EAAKC,WAAWd,GAAmB,CACrC,IAAMe,EAWY,SAACF,GAIvB,IAAME,EAAaF,EAChBG,QAAQhB,EAAkB,IAC1BgB,QAAQ,OAAQ,IAChBA,QAAQ,IAAK,IACbA,QAAQ,KAAM,IACdA,QAAQ,KAAM,IAEXC,EAAkBF,EAAWJ,MAAM,KAGzC,GAA+B,IAA3BM,EAAgBC,OAClB,UAAUC,8BAA8BJ,GAG1C,MAAO,CACLK,SAAUH,EAAgB,GAC1BI,SAAUJ,EAAgB,GAC1BK,SAAUL,EAAgB,GAC1BM,SAAUN,EAAgB,GAE9B,CAnCyBO,CAAgBX,GACnCH,EAAWK,EAAWO,UAAYP,CACnC,CACH,GACOL,CACT,CAyCSe,CADSjB,EAASkB,KACI,EAC/B,CAAC,MAAAC,GAAAzB,OAAAA,QAAA0B,OAAAD,EAQD,CAAA,EChEIlB,EAA0B,sDAmDxB,SACJoB,EACAC,GACuB,OAAA5B,QAAAC,QA5CJ,SACnB0B,EACAC,GACkC,IACwB,OAAA5B,QAAAC,QACnCC,EAAK,QAACC,IADd0B,sEACuB,CACpCzB,aAAc,OACd0B,OAAQ,CACNH,IAAAA,EACAC,IAAAA,MAEFvB,cANIC,GASN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,UAAAzB,QAAA0B,OAAAD,EAQD,CAAA,CAsBoBM,CAAgBJ,EAAKC,IAAIvB,KAAA,SAArC2B,GAAG,SAAAC,IAYT,OAAO1B,EADI2B,EAAQC,OACA,CAXnB,IAAQD,EAAYF,EAAZE,QACR,IAAKA,IAAYA,EAAQC,OACvB,UAAUlB,MAAM,oBACjB,IAAAmB,EAAA,WAAA,IAGI7B,EACuB,OAA1B8B,QAAQC,IAAI,cAActC,QAAAC,QACVF,KAAYM,KAAA,SAAAkC,GAA5BhC,EAAOgC,CAAsB,GAL9B,UAK8BH,GAAAA,EAAA/B,KAAA+B,EAAA/B,KAAA4B,GAAAA,GAIjC,EAAA,wBCjEM,SAAuBO,GAAqC,IACV,OAAAxC,QAAAC,QAC/BC,EAAAA,QAAMC,IADd0B,yDACuB,CACpCzB,aAAc,OACd0B,OAAQ,CACNU,EAAAA,MAEFnC,cALIC,GAQN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,GAAA,OAAAzB,QAAA0B,OAAAD,EAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- Promise.resolve().catch(console.error);
1
+ import e from"axios";var r="GSI.MUNI_ARRAY[",t=function(){try{return Promise.resolve(e.get("https://maps.gsi.go.jp/js/muni.js",{responseType:"text"})).then(function(e){return function(e){var t={};return e.split("\n").forEach(function(e){if(e.startsWith(r)){var n=function(e){var t=e.replace(r,"").replace("] = ","").replace(";","").replace(/'/g,"").replace(/"/g,""),n=t.split(",");if(4!==n.length)throw new Error("invalid muni record: "+t);return{prefCode:n[0],prefName:n[1],cityCode:n[2],cityName:n[3]}}(e);t[n.cityCode]=n}}),t}(e.data)})}catch(e){return Promise.reject(e)}},n=null,o=function(r,o){return Promise.resolve(function(r,t){try{return Promise.resolve(e.get("https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress",{responseType:"json",params:{lat:r,lon:t}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}}(r,o)).then(function(e){function r(){return n[o.muniCd]}var o=e.results;if(!o||!o.muniCd)throw new Error("No address found");var s=function(){if(!n)return console.log("getMuniMap"),Promise.resolve(t()).then(function(e){n=e})}();return s&&s.then?s.then(r):r()})},s=function(r){try{return Promise.resolve(e.get("https://msearch.gsi.go.jp/address-search/AddressSearch",{responseType:"json",params:{q:r}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}};export{t as getMuniMap,o as latLonToAddressInfo,s as searchAddress};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/index.ts"],"sourcesContent":["const run = async () => {}\nrun().catch(console.error)\n"],"names":["Promise","resolve","console","error"],"mappings":"AAAuBA,QAAAC,gBACXC,QAAQC"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/muni.ts","../src/m_reverse_geocode.ts","../src/msearch.ts"],"sourcesContent":["// Muni file url\nconst MuniURL = 'https://maps.gsi.go.jp/js/muni.js';\nconst MuniRecordPrefix = 'GSI.MUNI_ARRAY[';\n\nimport axios from 'axios';\nimport { AddressResults, MuniMap } from './types';\n\n/**\n * parse muni.js\n * @param muniMap\n */\nconst parseMuniMap = (muniMap: string) => {\n const muniMapObj: MuniMap = {};\n const lines = muniMap.split('\\n');\n lines.forEach((line) => {\n if (line.startsWith(MuniRecordPrefix)) {\n const muniRecord = parseMuniRecord(line);\n muniMapObj[muniRecord.cityCode] = muniRecord;\n }\n });\n return muniMapObj;\n};\n\n/**\n * parse muni record\n * @param line\n */\nconst parseMuniRecord = (line: string) => {\n // every line should start with GSI.MUNI_ARRAY[ and end with ];\n // e.g. GSI.MUNI_ARRAY[\"47212\"] = '47,大分県,47212,佐伯市';\n // we need to extract 47,大分県,47212,佐伯市\n const muniRecord = line\n .replace(MuniRecordPrefix, '')\n .replace(\"] = \", '')\n .replace(\";\", '')\n .replace(/'/g, '')\n .replace(/\"/g, '');\n\n const muniRecordArray = muniRecord.split(',');\n\n // validate muni record\n if (muniRecordArray.length !== 4) {\n throw new Error(`invalid muni record: ${muniRecord}`);\n }\n\n return {\n prefCode: muniRecordArray[0],\n prefName: muniRecordArray[1],\n cityCode: muniRecordArray[2],\n cityName: muniRecordArray[3],\n };\n};\n\n/**\n * Get muni map (city or ward map by city code) from GSI\n */\nconst getMuniMap = async () => {\n const response = await axios.get(MuniURL, {\n responseType: 'text',\n });\n\n const muniMap = response.data;\n return parseMuniMap(muniMap);\n};\n\n/**\n * converts muni code to address name.\n *\n * @param muniMap\n * @param muniCode\n */\nconst muniCodeToAddressName = (muniMap: MuniMap, muniCode: string) => {\n const muniRecord = muniMap[muniCode];\n if (!muniRecord) {\n throw new Error(`muni code ${muniCode} not found`);\n }\n\n return `${muniRecord.prefName}${muniRecord.cityName}`;\n};\n\n/**\n * converts address result to address name.\n * @param muniMap\n * @param addressResults\n */\nconst addressResultsToAddressName = (\n muniMap: MuniMap,\n addressResults: AddressResults\n) => {\n const mc = addressResults.muniCd;\n const muniName = muniCodeToAddressName(muniMap, mc);\n const addrName = `${muniName}${addressResults.lv01Nm}`;\n return addrName;\n};\n\nexport { getMuniMap, muniCodeToAddressName, addressResultsToAddressName };\n","import axios from 'axios';\n\nimport { ReverseGeocodeResults, MuniMap, MuniRecord } from './types';\nimport { addressResultsToAddressName, getMuniMap } from './muni';\nconst BaseURL = 'https://mreversegeocoder.gsi.go.jp';\n\n// cache muni map\nvar muniMap: MuniMap | null = null;\n\n/**\n * reverse geocoding by latitude and longitude to address\n * It returns town name only\n *\n * @param lat\n * @param lon\n * @returns address\n */\nconst latLonToAddress = async (\n lat: number,\n lon: number\n): Promise<ReverseGeocodeResults> => {\n const url = `${BaseURL}/reverse-geocoder/LonLatToAddress`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n lat,\n lon,\n },\n });\n\n const res = response.data;\n return res;\n};\n\n/**\n * Get full address name by latitude and longitude\n * @param lat\n * @param lon\n * @returns prefecture + city + town\n */\nconst latLonToAddressName = async (\n lat: number,\n lon: number\n): Promise<string> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n muniMap = await getMuniMap();\n }\n\n return addressResultsToAddressName(muniMap, results);\n};\n\nconst latLonToAddressInfo = async (\n lat: number,\n lon: number\n): Promise<MuniRecord> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n console.log('getMuniMap');\n muniMap = await getMuniMap();\n }\n const mc = results.muniCd;\n return muniMap[mc];\n};\n\nexport { latLonToAddressInfo, getMuniMap };\n","import axios from 'axios';\n\nimport { SearchResults } from './types';\n\n// base url for msearch api\nconst BaseURL = 'https://msearch.gsi.go.jp';\n\n/**\n * search address by query\n */\nconst searchAddress = async (q: string): Promise<SearchResults> => {\n const url = `${BaseURL}/address-search/AddressSearch`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n q,\n },\n });\n\n const res = response.data;\n return res;\n};\n\nexport { searchAddress };\n"],"names":["MuniRecordPrefix","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","startsWith","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","parseMuniRecord","parseMuniMap","data","e","reject","latLonToAddressInfo","lat","lon","BaseURL","params","latLonToAddress","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","searchAddress","q"],"mappings":"qBACA,IACMA,EAAmB,kBAsDnBC,aAAwB,IAAA,OAAAC,QAAAC,QACLC,EAAMC,IAxDf,oCAwD4B,CACxCC,aAAc,UACdC,KAAA,SAFIC,GAKN,OAnDmB,SAACC,GACpB,IAAMC,EAAsB,CAAA,EAQ5B,OAPcD,EAAQE,MAAM,MACtBC,QAAQ,SAACC,GACb,GAAIA,EAAKC,WAAWd,GAAmB,CACrC,IAAMe,EAWY,SAACF,GAIvB,IAAME,EAAaF,EAChBG,QAAQhB,EAAkB,IAC1BgB,QAAQ,OAAQ,IAChBA,QAAQ,IAAK,IACbA,QAAQ,KAAM,IACdA,QAAQ,KAAM,IAEXC,EAAkBF,EAAWJ,MAAM,KAGzC,GAA+B,IAA3BM,EAAgBC,OAClB,UAAUC,8BAA8BJ,GAG1C,MAAO,CACLK,SAAUH,EAAgB,GAC1BI,SAAUJ,EAAgB,GAC1BK,SAAUL,EAAgB,GAC1BM,SAAUN,EAAgB,GAE9B,CAnCyBO,CAAgBX,GACnCH,EAAWK,EAAWO,UAAYP,CACnC,CACH,GACOL,CACT,CAyCSe,CADSjB,EAASkB,KACI,EAC/B,CAAC,MAAAC,GAAAzB,OAAAA,QAAA0B,OAAAD,EAQD,CAAA,EChEIlB,EAA0B,KAmDxBoB,EAAA,SACJC,EACAC,GACuB,OAAA7B,QAAAC,QA5CJ,SACnB2B,EACAC,GACkC,IACwB,OAAA7B,QAAAC,QACnCC,EAAMC,IADd2B,sEACuB,CACpC1B,aAAc,OACd2B,OAAQ,CACNH,IAAAA,EACAC,IAAAA,MAEFxB,cANIC,GASN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,UAAAzB,QAAA0B,OAAAD,EAQD,CAAA,CAsBoBO,CAAgBJ,EAAKC,IAAIxB,KAAA,SAArC4B,GAAG,SAAAC,IAYT,OAAO3B,EADI4B,EAAQC,OACA,CAXnB,IAAQD,EAAYF,EAAZE,QACR,IAAKA,IAAYA,EAAQC,OACvB,UAAUnB,MAAM,oBACjB,IAAAoB,EAAA,WAAA,IAGI9B,EACuB,OAA1B+B,QAAQC,IAAI,cAAcvC,QAAAC,QACVF,KAAYM,KAAA,SAAAmC,GAA5BjC,EAAOiC,CAAsB,GAL9B,UAK8BH,GAAAA,EAAAhC,KAAAgC,EAAAhC,KAAA6B,GAAAA,GAIjC,EAAA,ECjEMO,EAAA,SAAuBC,GAAqC,IACV,OAAA1C,QAAAC,QAC/BC,EAAMC,IADd2B,yDACuB,CACpC1B,aAAc,OACd2B,OAAQ,CACNW,EAAAA,MAEFrC,cALIC,GAQN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,GAAA,OAAAzB,QAAA0B,OAAAD,EAAA,CAAA"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e){"function"==typeof define&&define.amd?define(e):e()}(function(){Promise.resolve().catch(console.error)});
1
+ !function(e,r){"object"==typeof exports&&"undefined"!=typeof module?r(exports,require("axios")):"function"==typeof define&&define.amd?define(["exports","axios"],r):r((e||self).jsMsearchGsiJp={},e.axios)}(this,function(e,r){function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=/*#__PURE__*/t(r),o="GSI.MUNI_ARRAY[",s=function(){try{return Promise.resolve(n.default.get("https://maps.gsi.go.jp/js/muni.js",{responseType:"text"})).then(function(e){return function(e){var r={};return e.split("\n").forEach(function(e){if(e.startsWith(o)){var t=function(e){var r=e.replace(o,"").replace("] = ","").replace(";","").replace(/'/g,"").replace(/"/g,""),t=r.split(",");if(4!==t.length)throw new Error("invalid muni record: "+r);return{prefCode:t[0],prefName:t[1],cityCode:t[2],cityName:t[3]}}(e);r[t.cityCode]=t}}),r}(e.data)})}catch(e){return Promise.reject(e)}},i=null;e.getMuniMap=s,e.latLonToAddressInfo=function(e,r){return Promise.resolve(function(e,r){try{return Promise.resolve(n.default.get("https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress",{responseType:"json",params:{lat:e,lon:r}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}}(e,r)).then(function(e){function r(){return i[t.muniCd]}var t=e.results;if(!t||!t.muniCd)throw new Error("No address found");var n=function(){if(!i)return console.log("getMuniMap"),Promise.resolve(s()).then(function(e){i=e})}();return n&&n.then?n.then(r):r()})},e.searchAddress=function(e){try{return Promise.resolve(n.default.get("https://msearch.gsi.go.jp/address-search/AddressSearch",{responseType:"json",params:{q:e}})).then(function(e){return e.data})}catch(e){return Promise.reject(e)}}});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/index.ts"],"sourcesContent":["const run = async () => {}\nrun().catch(console.error)\n"],"names":["Promise","resolve","console","error"],"mappings":"6EAAuBA,QAAAC,gBACXC,QAAQC"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/muni.ts","../src/m_reverse_geocode.ts","../src/msearch.ts"],"sourcesContent":["// Muni file url\nconst MuniURL = 'https://maps.gsi.go.jp/js/muni.js';\nconst MuniRecordPrefix = 'GSI.MUNI_ARRAY[';\n\nimport axios from 'axios';\nimport { AddressResults, MuniMap } from './types';\n\n/**\n * parse muni.js\n * @param muniMap\n */\nconst parseMuniMap = (muniMap: string) => {\n const muniMapObj: MuniMap = {};\n const lines = muniMap.split('\\n');\n lines.forEach((line) => {\n if (line.startsWith(MuniRecordPrefix)) {\n const muniRecord = parseMuniRecord(line);\n muniMapObj[muniRecord.cityCode] = muniRecord;\n }\n });\n return muniMapObj;\n};\n\n/**\n * parse muni record\n * @param line\n */\nconst parseMuniRecord = (line: string) => {\n // every line should start with GSI.MUNI_ARRAY[ and end with ];\n // e.g. GSI.MUNI_ARRAY[\"47212\"] = '47,大分県,47212,佐伯市';\n // we need to extract 47,大分県,47212,佐伯市\n const muniRecord = line\n .replace(MuniRecordPrefix, '')\n .replace(\"] = \", '')\n .replace(\";\", '')\n .replace(/'/g, '')\n .replace(/\"/g, '');\n\n const muniRecordArray = muniRecord.split(',');\n\n // validate muni record\n if (muniRecordArray.length !== 4) {\n throw new Error(`invalid muni record: ${muniRecord}`);\n }\n\n return {\n prefCode: muniRecordArray[0],\n prefName: muniRecordArray[1],\n cityCode: muniRecordArray[2],\n cityName: muniRecordArray[3],\n };\n};\n\n/**\n * Get muni map (city or ward map by city code) from GSI\n */\nconst getMuniMap = async () => {\n const response = await axios.get(MuniURL, {\n responseType: 'text',\n });\n\n const muniMap = response.data;\n return parseMuniMap(muniMap);\n};\n\n/**\n * converts muni code to address name.\n *\n * @param muniMap\n * @param muniCode\n */\nconst muniCodeToAddressName = (muniMap: MuniMap, muniCode: string) => {\n const muniRecord = muniMap[muniCode];\n if (!muniRecord) {\n throw new Error(`muni code ${muniCode} not found`);\n }\n\n return `${muniRecord.prefName}${muniRecord.cityName}`;\n};\n\n/**\n * converts address result to address name.\n * @param muniMap\n * @param addressResults\n */\nconst addressResultsToAddressName = (\n muniMap: MuniMap,\n addressResults: AddressResults\n) => {\n const mc = addressResults.muniCd;\n const muniName = muniCodeToAddressName(muniMap, mc);\n const addrName = `${muniName}${addressResults.lv01Nm}`;\n return addrName;\n};\n\nexport { getMuniMap, muniCodeToAddressName, addressResultsToAddressName };\n","import axios from 'axios';\n\nimport { ReverseGeocodeResults, MuniMap, MuniRecord } from './types';\nimport { addressResultsToAddressName, getMuniMap } from './muni';\nconst BaseURL = 'https://mreversegeocoder.gsi.go.jp';\n\n// cache muni map\nvar muniMap: MuniMap | null = null;\n\n/**\n * reverse geocoding by latitude and longitude to address\n * It returns town name only\n *\n * @param lat\n * @param lon\n * @returns address\n */\nconst latLonToAddress = async (\n lat: number,\n lon: number\n): Promise<ReverseGeocodeResults> => {\n const url = `${BaseURL}/reverse-geocoder/LonLatToAddress`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n lat,\n lon,\n },\n });\n\n const res = response.data;\n return res;\n};\n\n/**\n * Get full address name by latitude and longitude\n * @param lat\n * @param lon\n * @returns prefecture + city + town\n */\nconst latLonToAddressName = async (\n lat: number,\n lon: number\n): Promise<string> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n muniMap = await getMuniMap();\n }\n\n return addressResultsToAddressName(muniMap, results);\n};\n\nconst latLonToAddressInfo = async (\n lat: number,\n lon: number\n): Promise<MuniRecord> => {\n const res = await latLonToAddress(lat, lon);\n const { results } = res;\n if (!results || !results.muniCd) {\n throw new Error('No address found');\n }\n\n // update muniMap\n if (!muniMap) {\n console.log('getMuniMap');\n muniMap = await getMuniMap();\n }\n const mc = results.muniCd;\n return muniMap[mc];\n};\n\nexport { latLonToAddressInfo, getMuniMap };\n","import axios from 'axios';\n\nimport { SearchResults } from './types';\n\n// base url for msearch api\nconst BaseURL = 'https://msearch.gsi.go.jp';\n\n/**\n * search address by query\n */\nconst searchAddress = async (q: string): Promise<SearchResults> => {\n const url = `${BaseURL}/address-search/AddressSearch`;\n const response = await axios.get(url, {\n responseType: 'json',\n params: {\n q,\n },\n });\n\n const res = response.data;\n return res;\n};\n\nexport { searchAddress };\n"],"names":["MuniRecordPrefix","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","startsWith","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","parseMuniRecord","parseMuniMap","data","e","reject","lat","lon","BaseURL","params","latLonToAddress","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","q"],"mappings":"2WAEMA,EAAmB,kBAsDnBC,aAAwB,IAAA,OAAAC,QAAAC,QACLC,EAAAA,QAAMC,IAxDf,oCAwD4B,CACxCC,aAAc,UACdC,KAAA,SAFIC,GAKN,OAnDmB,SAACC,GACpB,IAAMC,EAAsB,CAAA,EAQ5B,OAPcD,EAAQE,MAAM,MACtBC,QAAQ,SAACC,GACb,GAAIA,EAAKC,WAAWd,GAAmB,CACrC,IAAMe,EAWY,SAACF,GAIvB,IAAME,EAAaF,EAChBG,QAAQhB,EAAkB,IAC1BgB,QAAQ,OAAQ,IAChBA,QAAQ,IAAK,IACbA,QAAQ,KAAM,IACdA,QAAQ,KAAM,IAEXC,EAAkBF,EAAWJ,MAAM,KAGzC,GAA+B,IAA3BM,EAAgBC,OAClB,UAAUC,8BAA8BJ,GAG1C,MAAO,CACLK,SAAUH,EAAgB,GAC1BI,SAAUJ,EAAgB,GAC1BK,SAAUL,EAAgB,GAC1BM,SAAUN,EAAgB,GAE9B,CAnCyBO,CAAgBX,GACnCH,EAAWK,EAAWO,UAAYP,CACnC,CACH,GACOL,CACT,CAyCSe,CADSjB,EAASkB,KACI,EAC/B,CAAC,MAAAC,GAAAzB,OAAAA,QAAA0B,OAAAD,EAQD,CAAA,EChEIlB,EAA0B,0CAmDxB,SACJoB,EACAC,GACuB,OAAA5B,QAAAC,QA5CJ,SACnB0B,EACAC,GACkC,IACwB,OAAA5B,QAAAC,QACnCC,EAAK,QAACC,IADd0B,sEACuB,CACpCzB,aAAc,OACd0B,OAAQ,CACNH,IAAAA,EACAC,IAAAA,MAEFvB,cANIC,GASN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,UAAAzB,QAAA0B,OAAAD,EAQD,CAAA,CAsBoBM,CAAgBJ,EAAKC,IAAIvB,KAAA,SAArC2B,GAAG,SAAAC,IAYT,OAAO1B,EADI2B,EAAQC,OACA,CAXnB,IAAQD,EAAYF,EAAZE,QACR,IAAKA,IAAYA,EAAQC,OACvB,UAAUlB,MAAM,oBACjB,IAAAmB,EAAA,WAAA,IAGI7B,EACuB,OAA1B8B,QAAQC,IAAI,cAActC,QAAAC,QACVF,KAAYM,KAAA,SAAAkC,GAA5BhC,EAAOgC,CAAsB,GAL9B,UAK8BH,GAAAA,EAAA/B,KAAA+B,EAAA/B,KAAA4B,GAAAA,GAIjC,EAAA,kBCjEM,SAAuBO,GAAqC,IACV,OAAAxC,QAAAC,QAC/BC,EAAAA,QAAMC,IADd0B,yDACuB,CACpCzB,aAAc,OACd0B,OAAQ,CACNU,EAAAA,MAEFnC,cALIC,GAQN,OADYA,EAASkB,IACV,EACb,CAAC,MAAAC,GAAA,OAAAzB,QAAA0B,OAAAD,EAAA,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { MuniRecord } from './types';
2
+ import { getMuniMap } from './muni';
3
+ declare const latLonToAddressInfo: (lat: number, lon: number) => Promise<MuniRecord>;
4
+ export { latLonToAddressInfo, getMuniMap };
@@ -0,0 +1,6 @@
1
+ import { SearchResults } from './types';
2
+ /**
3
+ * search address by query
4
+ */
5
+ declare const searchAddress: (q: string) => Promise<SearchResults>;
6
+ export { searchAddress };
package/dist/muni.d.ts ADDED
@@ -0,0 +1,19 @@
1
+ import { AddressResults, MuniMap } from './types';
2
+ /**
3
+ * Get muni map (city or ward map by city code) from GSI
4
+ */
5
+ declare const getMuniMap: () => Promise<MuniMap>;
6
+ /**
7
+ * converts muni code to address name.
8
+ *
9
+ * @param muniMap
10
+ * @param muniCode
11
+ */
12
+ declare const muniCodeToAddressName: (muniMap: MuniMap, muniCode: string) => string;
13
+ /**
14
+ * converts address result to address name.
15
+ * @param muniMap
16
+ * @param addressResults
17
+ */
18
+ declare const addressResultsToAddressName: (muniMap: MuniMap, addressResults: AddressResults) => string;
19
+ export { getMuniMap, muniCodeToAddressName, addressResultsToAddressName };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sk-global/js-msearch-gsi-jp",
3
3
  "description": "A client library for APIs that presented by Geospatial Information Authority of Japan",
4
- "version": "0.0.2-0",
4
+ "version": "1.1.1",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.module.js",
@@ -15,7 +15,7 @@
15
15
  "node": ">=18.0.0"
16
16
  },
17
17
  "scripts": {
18
- "dev": "ts-node ./src/cli.ts",
18
+ "dev": "ts-node ./src/local.ts",
19
19
  "build": "microbundle --define PKG_VERSION=$npm_package_version",
20
20
  "watch": "microbundle watch --define PKG_VERSION=$npm_package_version",
21
21
  "test": "jest --coverage",
@@ -48,6 +48,7 @@
48
48
  },
49
49
  "author": "SK-Global",
50
50
  "dependencies": {
51
+ "axios": "^1.7.3"
51
52
  },
52
53
  "repository": {
53
54
  "type": "git",