@sk-global/js-msearch-gsi-jp 1.1.2 → 1.1.6

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/README.md CHANGED
@@ -1,2 +1,82 @@
1
1
  # @sk-global/js-msearch-gsi-jp
2
2
 
3
+ ## Introduction
4
+
5
+ `@sk-global/js-msearch-gsi-jp` is a client library for APIs presented by the Geospatial Information Authority of Japan. This library provides functionalities to interact with various geospatial data services.
6
+
7
+ ## Features
8
+
9
+ - Reverse Geocoding: Convert latitude and longitude to an address.
10
+ - Search for a location by address: Search for a location by address.
11
+
12
+ ## Supported APIs
13
+
14
+ * Geocoding API - `GET https://msearch.gsi.go.jp/address-search/AddressSearch?q=XXXX`
15
+ * Reverse Geocoding API - `GET https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress?lat=XXXX&lon=XXXX`
16
+
17
+
18
+ ## Installation
19
+
20
+ To install the library, use npm:
21
+
22
+ ```sh
23
+ npm install @sk-global/js-msearch-gsi-jp
24
+ ```
25
+
26
+ Ensure you have Node.js version 18.0.0 or higher.
27
+
28
+ ## How to use
29
+
30
+ Import the library in your project and use the provided functions. Here is an example of how to use the latLonToAddress function:
31
+
32
+ ```js
33
+ import { latLonToAddress } from '@sk-global/js-msearch-gsi-jp';
34
+
35
+ const address = await latLonToAddress(35.6895, 139.6917);
36
+
37
+ // Output:
38
+ // { results: { muniCd: '13104', lv01Nm: '西新宿二丁目' } }
39
+ ```
40
+
41
+ ## Examples
42
+
43
+ Example 1: Reverse Geocoding
44
+
45
+ ```js
46
+ import { latLonToAddress } from '@sk-global/js-msearch-gsi-jp';
47
+
48
+ async function getAddress() {
49
+ const address = await latLonToAddress(35.6895, 139.6917);
50
+
51
+ // Output:
52
+ // { results: { muniCd: '13104', lv01Nm: '西新宿二丁目' } }
53
+ }
54
+ ```
55
+
56
+ Example 2: Search for a location by address
57
+
58
+ ```js
59
+ import { searchResults } from '@sk-global/js-msearch-gsi-jp';
60
+ const q = '北海道';
61
+ const searchResults = await searchAddress(q);
62
+ console.log(searchResults);
63
+
64
+ // Output:
65
+ // [
66
+ // {
67
+ // geometry: { coordinates: [Array], type: 'Point' },
68
+ // type: 'Feature',
69
+ // properties: { addressCode: '', title: '北海道' }
70
+ // },
71
+ // {
72
+ // geometry: { coordinates: [Array], type: 'Point' },
73
+ // type: 'Feature',
74
+ // properties: { addressCode: '', title: '北海道' }
75
+ // },
76
+ // ...
77
+ // ]
78
+ ```
79
+
80
+ ## License
81
+
82
+ This library is released under the MIT License. For more information, see the [LICENSE](LICENSE) file.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
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,s=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)}};exports.getMuniMap=n,exports.latLonToAddress=s,exports.latLonToAddressInfo=function(e,r){return Promise.resolve(s(e,r)).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.latLonToAddressName=function(e,r){return Promise.resolve(s(e,r)).then(function(e){function r(){return function(e,r){var t=function(e,r){var t=e[r];if(!t)throw new Error("muni code "+r+" not found");return""+t.prefName+t.cityName}(e,r.muniCd);return""+t+r.lv01Nm}(o,t)}var t=e.results;if(!t||!t.muniCd)throw new Error("No address found");var s=function(){if(!o)return 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)}};
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\["\d+"\]\s*=\s*'(.*?)';/g,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(t.test(e)){var n=function(e){var r=e.replace(t,"$1"),n=r.split(",");if(4!==n.length)throw new Error("invalid muni record: "+r);var o=n[0],s=n[1],u=n[2],i=n[3];return u=u.padStart(5,"0"),{prefCode:o=o.padStart(2,"0"),prefName:s,cityCode:u,cityName:i}}(e);r[n.cityCode]=n}}),r}(e.data)})}catch(e){return Promise.reject(e)}},o=null,s=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)}};exports.getMuniMap=n,exports.latLonToAddress=s,exports.latLonToAddressInfo=function(e,r){return Promise.resolve(s(e,r)).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.latLonToAddressName=function(e,r){return Promise.resolve(s(e,r)).then(function(e){function r(){return function(e,r){var t=function(e,r){var t=e[r];if(!t)throw new Error("muni code "+r+" not found");return(""+t.prefName+t.cityName).replace(/ /g,"")}(e,r.muniCd);return""+t+r.lv01Nm}(o,t)}var t=e.results;if(!t||!t.muniCd)throw new Error("No address found");var s=function(){if(!o)return 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/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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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","latLonToAddress","lat","lon","BaseURL","params","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","lv01Nm","addressResultsToAddressName","_temp","_getMuniMap","q"],"mappings":"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"}
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 MuniRegex = /GSI\\.MUNI_ARRAY\\[\"\\d+\"\\]\\s*=\\s*'(.*?)';/g;\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 (MuniRegex.test(line)) {\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 const muniRecord = line.replace(MuniRegex, '$1');\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 let [prefCode, prefName, cityCode, cityName] = muniRecordArray;\n\n // if cityCode is not 5 digits, add 0 to the beginning\n cityCode = cityCode.padStart(5, '0');\n\n // if prefCode is not 2 digits, add 0 to the beginning\n prefCode = prefCode.padStart(2, '0');\n\n return {\n prefCode: prefCode,\n prefName: prefName,\n cityCode: cityCode,\n cityName: cityName,\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 const add = `${muniRecord.prefName}${muniRecord.cityName}`;\n return add.replace(/ /g, '');\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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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":["MuniRegex","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","test","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","padStart","parseMuniRecord","parseMuniMap","data","e","reject","latLonToAddress","lat","lon","BaseURL","params","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","lv01Nm","addressResultsToAddressName","_temp","_getMuniMap","q"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import r from"axios";var e="GSI.MUNI_ARRAY[",n=function(){try{return Promise.resolve(r.get("https://maps.gsi.go.jp/js/muni.js",{responseType:"text"})).then(function(r){return function(r){var n={};return r.split("\n").forEach(function(r){if(r.startsWith(e)){var t=function(r){var n=r.replace(e,"").replace("] = ","").replace(";","").replace(/'/g,"").replace(/"/g,""),t=n.split(",");if(4!==t.length)throw new Error("invalid muni record: "+n);return{prefCode:t[0],prefName:t[1],cityCode:t[2],cityName:t[3]}}(r);n[t.cityCode]=t}}),n}(r.data)})}catch(r){return Promise.reject(r)}},t=null,o=function(e,n){try{return Promise.resolve(r.get("https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress",{responseType:"json",params:{lat:e,lon:n}})).then(function(r){return r.data})}catch(r){return Promise.reject(r)}},i=function(r,e){return Promise.resolve(o(r,e)).then(function(r){function e(){return function(r,e){var n=function(r,e){var n=r[e];if(!n)throw new Error("muni code "+e+" not found");return""+n.prefName+n.cityName}(r,e.muniCd);return""+n+e.lv01Nm}(t,o)}var o=r.results;if(!o||!o.muniCd)throw new Error("No address found");var i=function(){if(!t)return Promise.resolve(n()).then(function(r){t=r})}();return i&&i.then?i.then(e):e()})},s=function(r,e){return Promise.resolve(o(r,e)).then(function(r){function e(){return t[o.muniCd]}var o=r.results;if(!o||!o.muniCd)throw new Error("No address found");var i=function(){if(!t)return console.log("getMuniMap"),Promise.resolve(n()).then(function(r){t=r})}();return i&&i.then?i.then(e):e()})},u=function(e){try{return Promise.resolve(r.get("https://msearch.gsi.go.jp/address-search/AddressSearch",{responseType:"json",params:{q:e}})).then(function(r){return r.data})}catch(r){return Promise.reject(r)}};export{n as getMuniMap,o as latLonToAddress,s as latLonToAddressInfo,i as latLonToAddressName,u as searchAddress};
1
+ import r from"axios";var e=/GSI\.MUNI_ARRAY\["\d+"\]\s*=\s*'(.*?)';/g,n=function(){try{return Promise.resolve(r.get("https://maps.gsi.go.jp/js/muni.js",{responseType:"text"})).then(function(r){return function(r){var n={};return r.split("\n").forEach(function(r){if(e.test(r)){var t=function(r){var n=r.replace(e,"$1"),t=n.split(",");if(4!==t.length)throw new Error("invalid muni record: "+n);var o=t[0],s=t[1],i=t[2],u=t[3];return i=i.padStart(5,"0"),{prefCode:o=o.padStart(2,"0"),prefName:s,cityCode:i,cityName:u}}(r);n[t.cityCode]=t}}),n}(r.data)})}catch(r){return Promise.reject(r)}},t=null,o=function(e,n){try{return Promise.resolve(r.get("https://mreversegeocoder.gsi.go.jp/reverse-geocoder/LonLatToAddress",{responseType:"json",params:{lat:e,lon:n}})).then(function(r){return r.data})}catch(r){return Promise.reject(r)}},s=function(r,e){return Promise.resolve(o(r,e)).then(function(r){function e(){return function(r,e){var n=function(r,e){var n=r[e];if(!n)throw new Error("muni code "+e+" not found");return(""+n.prefName+n.cityName).replace(/ /g,"")}(r,e.muniCd);return""+n+e.lv01Nm}(t,o)}var o=r.results;if(!o||!o.muniCd)throw new Error("No address found");var s=function(){if(!t)return Promise.resolve(n()).then(function(r){t=r})}();return s&&s.then?s.then(e):e()})},i=function(r,e){return Promise.resolve(o(r,e)).then(function(r){function e(){return t[o.muniCd]}var o=r.results;if(!o||!o.muniCd)throw new Error("No address found");var s=function(){if(!t)return console.log("getMuniMap"),Promise.resolve(n()).then(function(r){t=r})}();return s&&s.then?s.then(e):e()})},u=function(e){try{return Promise.resolve(r.get("https://msearch.gsi.go.jp/address-search/AddressSearch",{responseType:"json",params:{q:e}})).then(function(r){return r.data})}catch(r){return Promise.reject(r)}};export{n as getMuniMap,o as latLonToAddress,i as latLonToAddressInfo,s as latLonToAddressName,u as searchAddress};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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","latLonToAddress","lat","lon","BaseURL","params","latLonToAddressName","res","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","muniCd","lv01Nm","addressResultsToAddressName","results","_temp","_getMuniMap","latLonToAddressInfo","_temp4","_temp3","console","log","_getMuniMap2","searchAddress","q"],"mappings":"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"}
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 MuniRegex = /GSI\\.MUNI_ARRAY\\[\"\\d+\"\\]\\s*=\\s*'(.*?)';/g;\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 (MuniRegex.test(line)) {\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 const muniRecord = line.replace(MuniRegex, '$1');\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 let [prefCode, prefName, cityCode, cityName] = muniRecordArray;\n\n // if cityCode is not 5 digits, add 0 to the beginning\n cityCode = cityCode.padStart(5, '0');\n\n // if prefCode is not 2 digits, add 0 to the beginning\n prefCode = prefCode.padStart(2, '0');\n\n return {\n prefCode: prefCode,\n prefName: prefName,\n cityCode: cityCode,\n cityName: cityName,\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 const add = `${muniRecord.prefName}${muniRecord.cityName}`;\n return add.replace(/ /g, '');\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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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":["MuniRegex","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","test","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","padStart","parseMuniRecord","parseMuniMap","data","e","reject","latLonToAddress","lat","lon","BaseURL","params","latLonToAddressName","res","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","muniCd","lv01Nm","addressResultsToAddressName","results","_temp","_getMuniMap","latLonToAddressInfo","_temp4","_temp3","console","log","_getMuniMap2","searchAddress","q"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
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 n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/n(r),o="GSI.MUNI_ARRAY[",s=function(){try{return Promise.resolve(t.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 n=function(e){var r=e.replace(o,"").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)}},i=null,u=function(e,r){try{return Promise.resolve(t.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.getMuniMap=s,e.latLonToAddress=u,e.latLonToAddressInfo=function(e,r){return Promise.resolve(u(e,r)).then(function(e){function r(){return i[n.muniCd]}var n=e.results;if(!n||!n.muniCd)throw new Error("No address found");var t=function(){if(!i)return console.log("getMuniMap"),Promise.resolve(s()).then(function(e){i=e})}();return t&&t.then?t.then(r):r()})},e.latLonToAddressName=function(e,r){return Promise.resolve(u(e,r)).then(function(e){function r(){return function(e,r){var n=function(e,r){var n=e[r];if(!n)throw new Error("muni code "+r+" not found");return""+n.prefName+n.cityName}(e,r.muniCd);return""+n+r.lv01Nm}(i,n)}var n=e.results;if(!n||!n.muniCd)throw new Error("No address found");var t=function(){if(!i)return Promise.resolve(s()).then(function(e){i=e})}();return t&&t.then?t.then(r):r()})},e.searchAddress=function(e){try{return Promise.resolve(t.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)}}});
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 n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var t=/*#__PURE__*/n(r),o=/GSI\.MUNI_ARRAY\["\d+"\]\s*=\s*'(.*?)';/g,s=function(){try{return Promise.resolve(t.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(o.test(e)){var n=function(e){var r=e.replace(o,"$1"),n=r.split(",");if(4!==n.length)throw new Error("invalid muni record: "+r);var t=n[0],s=n[1],i=n[2],u=n[3];return i=i.padStart(5,"0"),{prefCode:t=t.padStart(2,"0"),prefName:s,cityCode:i,cityName:u}}(e);r[n.cityCode]=n}}),r}(e.data)})}catch(e){return Promise.reject(e)}},i=null,u=function(e,r){try{return Promise.resolve(t.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.getMuniMap=s,e.latLonToAddress=u,e.latLonToAddressInfo=function(e,r){return Promise.resolve(u(e,r)).then(function(e){function r(){return i[n.muniCd]}var n=e.results;if(!n||!n.muniCd)throw new Error("No address found");var t=function(){if(!i)return console.log("getMuniMap"),Promise.resolve(s()).then(function(e){i=e})}();return t&&t.then?t.then(r):r()})},e.latLonToAddressName=function(e,r){return Promise.resolve(u(e,r)).then(function(e){function r(){return function(e,r){var n=function(e,r){var n=e[r];if(!n)throw new Error("muni code "+r+" not found");return(""+n.prefName+n.cityName).replace(/ /g,"")}(e,r.muniCd);return""+n+r.lv01Nm}(i,n)}var n=e.results;if(!n||!n.muniCd)throw new Error("No address found");var t=function(){if(!i)return Promise.resolve(s()).then(function(e){i=e})}();return t&&t.then?t.then(r):r()})},e.searchAddress=function(e){try{return Promise.resolve(t.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/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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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","latLonToAddress","lat","lon","BaseURL","params","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","lv01Nm","addressResultsToAddressName","_temp","_getMuniMap","q"],"mappings":"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"}
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 MuniRegex = /GSI\\.MUNI_ARRAY\\[\"\\d+\"\\]\\s*=\\s*'(.*?)';/g;\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 (MuniRegex.test(line)) {\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 const muniRecord = line.replace(MuniRegex, '$1');\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 let [prefCode, prefName, cityCode, cityName] = muniRecordArray;\n\n // if cityCode is not 5 digits, add 0 to the beginning\n cityCode = cityCode.padStart(5, '0');\n\n // if prefCode is not 2 digits, add 0 to the beginning\n prefCode = prefCode.padStart(2, '0');\n\n return {\n prefCode: prefCode,\n prefName: prefName,\n cityCode: cityCode,\n cityName: cityName,\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 const add = `${muniRecord.prefName}${muniRecord.cityName}`;\n return add.replace(/ /g, '');\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 {\n latLonToAddressInfo,\n getMuniMap,\n latLonToAddress,\n latLonToAddressName,\n};\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":["MuniRegex","getMuniMap","Promise","resolve","axios","get","responseType","then","response","muniMap","muniMapObj","split","forEach","line","test","muniRecord","replace","muniRecordArray","length","Error","prefCode","prefName","cityCode","cityName","padStart","parseMuniRecord","parseMuniMap","data","e","reject","latLonToAddress","lat","lon","BaseURL","params","res","_temp4","results","muniCd","_temp3","console","log","_getMuniMap2","_temp2","addressResults","muniName","muniCode","muniCodeToAddressName","lv01Nm","addressResultsToAddressName","_temp","_getMuniMap","q"],"mappings":"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"}
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": "1.1.2",
4
+ "version": "1.1.6",
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.module.js",