UNPKG

geo-coder

Version:

address lookup/autocomplete/reverse-geolookup for Google, OpenStreet, and Bing

2 lines (1 loc) 10.3 kB
!function(root,factory){"object"==typeof exports&&"object"==typeof module?module.exports=factory():"function"==typeof define&&define.amd?define([],factory):"object"==typeof exports?exports.geoCode=factory():root.geoCode=factory()}(this,function(){return function(modules){function __webpack_require__(moduleId){if(installedModules[moduleId])return installedModules[moduleId].exports;var module=installedModules[moduleId]={i:moduleId,l:!1,exports:{}};return modules[moduleId].call(module.exports,module,module.exports,__webpack_require__),module.l=!0,module.exports}var installedModules={};return __webpack_require__.m=modules,__webpack_require__.c=installedModules,__webpack_require__.d=function(exports,name,getter){__webpack_require__.o(exports,name)||Object.defineProperty(exports,name,{configurable:!1,enumerable:!0,get:getter})},__webpack_require__.n=function(module){var getter=module&&module.__esModule?function(){return module.default}:function(){return module};return __webpack_require__.d(getter,"a",getter),getter},__webpack_require__.o=function(object,property){return Object.prototype.hasOwnProperty.call(object,property)},__webpack_require__.p="",__webpack_require__(__webpack_require__.s=1)}([function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.serialize=function(obj){var str=[];for(var p in obj)obj.hasOwnProperty(p)&&str.push(encodeURIComponent(p)+"="+encodeURIComponent(obj[p]));return str.join("&")}},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.GeoCode=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_bing=__webpack_require__(2),_google=__webpack_require__(3),_openStreet=__webpack_require__(4),GeoCode=exports.GeoCode=function(){function GeoCode(){var provider=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"osm",options=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,GeoCode),this.provider=provider,this.options=options,this.klasses={osm:_openStreet.OpenStreet,bing:_bing.Bing,google:_google.Google}}return _createClass(GeoCode,[{key:"geolookup",value:function(address){return new(0,this.klasses[this.provider])(this.options).geolookup(address)}},{key:"reverse",value:function(lat,lng){return new(0,this.klasses[this.provider])(this.options).reverse(lat,lng)}}]),GeoCode}();"undefined"!=typeof window&&(window.GeoCode=GeoCode)},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Bing=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_util=__webpack_require__(0);exports.Bing=function(){function Bing(options){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Bing),this.options=options||{}}return _createClass(Bing,[{key:"geolookup",value:function(address){var _this=this,params={query:address,key:this.options.key,includeNeighborhood:this.options.includeNeighborhood||0,maxResults:this.options.maxResults||10};return fetch("https://dev.virtualearth.net/REST/v1/Locations?"+(0,_util.serialize)(params)).then(function(resp){return resp.json()}).then(function(json){return _this._handleResponse(json)})}},{key:"reverse",value:function(lat,lng){var url="http://dev.virtualearth.net/REST/v1/Locations/"+lat+","+lng,params={includeNeighborhood:this.options.includeNeighborhood||0,key:this.options.key};return fetch(url+"?"+(0,_util.serialize)(params)).then(function(resp){return resp.json()}).then(function(json){return{source:"Bing",address:json.resourceSets[0].resources[0].name,raw:json}})}},{key:"_handleResponse",value:function(json){return json.resourceSets[0].resources.map(function(result){return{source:"Bing",lng:parseFloat(result.point.coordinates[1]),lat:parseFloat(result.point.coordinates[0]),address:{name:result.name},formatted:result.address.formattedAddress,raw:result}})}}]),Bing}()},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.Google=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_util=__webpack_require__(0);exports.Google=function(){function Google(options){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,Google),this.options=options||{}}return _createClass(Google,[{key:"geolookup",value:function(address){var _this=this,url="https://maps.googleapis.com/maps/api/geocode/json",params={address:address,key:this.options.key,language:this.options.lang||"en-US"};return url=url+"?"+(0,_util.serialize)(params),fetch(url).then(function(resp){return resp.json()}).then(function(json){return _this._handleResponse(json)})}},{key:"reverse",value:function(lat,lng){var params={latlng:lat+","+lng,key:this.options.key,language:this.options.lang||"en-US"};return fetch("https://maps.googleapis.com/maps/api/geocode/json?"+(0,_util.serialize)(params)).then(function(resp){return resp.json()}).then(function(json){return{source:"Google",address:json.results[0].formatted_address,raw:json}})}},{key:"_handleResponse",value:function(json){var results=json.results&&json.results.length?json.results:void 0;if(results){var array=[];return results.forEach(function(result){var details=function(details){var name=void 0,road=void 0,postcode=void 0,city=void 0,state=void 0,country=void 0,anyMatchInArray=function(source,target){return source.some(function(each){return target.indexOf(each)>=0})};return details.forEach(function(detail){anyMatchInArray(detail.types,["point_of_interest","establishment","natural_feature","airport"])?name=detail.long_name:anyMatchInArray(detail.types,["street_address","route","sublocality_level_5","intersection"])?road=detail.long_name:anyMatchInArray(detail.types,["postal_code"])?postcode=detail.long_name:anyMatchInArray(detail.types,["locality"])?city=detail.long_name:anyMatchInArray(detail.types,["administrative_area_level_1"])?state=detail.long_name:anyMatchInArray(detail.types,["country"])&&(country=detail.long_name)}),name||road||postcode||city||state||country?{name:name,road:road,postcode:postcode,city:city,state:state,country:country}:null}(result.address_components);details&&array.push({source:"Google",lng:parseFloat(result.geometry.location.lng),lat:parseFloat(result.geometry.location.lat),address:{name:details.name||"",postalCode:details.postcode||"",road:details.road||"",city:details.city||"",state:details.state||"",country:details.country||""},formatted:result.formatted_address,raw:result})}),array}throw"Invalid response"+json}}]),Google}()},function(module,exports,__webpack_require__){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.OpenStreet=void 0;var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}(),_util=__webpack_require__(0);exports.OpenStreet=function(){function OpenStreet(options){!function(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}(this,OpenStreet),this.options=options||{}}return _createClass(OpenStreet,[{key:"geolookup",value:function(address){var url="https://nominatim.openstreetmap.org/search/",params={q:address,format:"json",addressdetails:1,limit:this.options.limit||10,countrycodes:this.options.countrycodes||"","accept-language":this.options.lang||"en-US"};return url=url+"?"+(0,_util.serialize)(params),fetch(url).then(function(resp){return resp.json()}).then(function(json){return json.map(function(result){return{source:"OpenStreetMap",lng:parseFloat(result.lon),lat:parseFloat(result.lat),address:{name:result.address.neighbourhood||"",road:result.address.road||"",postalCode:result.address.postcode,city:result.address.city||result.address.town,state:result.address.state,country:result.address.country},formatted:result.display_name,raw:result}})})}},{key:"reverse",value:function(lat,lng){var url="https://nominatim.openstreetmap.org/reverse",params={format:"json",lat:lat,lon:lng,zoom:this.options.zoom||18,addressdetails:this.options.addressdetail||1,"accept-language":this.options.lang||"en-US"};return url=url+"?"+(0,_util.serialize)(params),fetch(url).then(function(resp){return resp.json()}).then(function(json){return{source:"OpenStreetMap",address:json.display_name,raw:json}})}}]),OpenStreet}()}])});