@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 +80 -0
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.module.js +1 -1
- package/dist/index.module.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +1 -1
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
|
|
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
|
|
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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"}
|
package/dist/index.module.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import r from"axios";var e
|
|
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
|
package/dist/index.module.js.map
CHANGED
|
@@ -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
|
|
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
|
|
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
|
package/dist/index.umd.js.map
CHANGED
|
@@ -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
|
|
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.
|
|
4
|
+
"version": "1.1.6",
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"module": "dist/index.module.js",
|