Hey gutys:
I want to find sample Reverse geocode | ArcGIS API for JavaScriptfor 4.8 than search[ lon, lat] to address(not click map to address).
but I didn't find this
So where can I go to find this
Ask for help
THANKS
Solved! Go to Solution.
Hsu,
Your code:
var pt = new Point(x, y, new SpatialReference({ wkid: 4326 }));was the way it was done in 3.x API. In the 4.x API you need to provide an object in the Point constructor that specifies the objects property names:
var pt = new Point({x: x, y: y, spatialReference: new SpatialReference({ wkid: 4326 })});Here is an updated sample:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Find Address</title>
    <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #map {
        padding: 0;
        border: solid 2px #666;
        margin: 0 5px 5px 5px;
      }
      #header {
        border: solid 2px #666;
        color: #666;
        font-family: sans-serif;
        font-size: 1.1em;
        height: auto;
        margin: 5px;
        overflow: hidden;
        padding: 10px 0 10px 20px;
        text-align:left;
      }
      .roundedCorners {
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        border-radius: 5px;
      }
    </style>
    <script src="https://js.arcgis.com/4.8/"></script>
    <script>
      var map;
      require([
        "esri/Map", "esri/views/MapView", "esri/tasks/Locator", "esri/Graphic",
        "esri/geometry/support/webMercatorUtils",
        "esri/PopupTemplate", "esri/geometry/SpatialReference", "esri/geometry/Point",
        "dojo/number", "dojo/parser", "dojo/dom", "dojo/on",
        "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
      ], function(
        Map, MapView, Locator, Graphic,
        webMercatorUtils,
        PopupTemplate, SpatialReference, Point,
        number, parser, dom, on
      ) {
        parser.parse();
        map = new Map({
          basemap: "streets"
        });
        var view = new MapView({
          container: "map",
          map: map,
          center: [-118.3, 34.2],
          zoom: 11
        });
        var locator = new Locator("https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
        var infoTemplate = new PopupTemplate({
          title: "Location",
          content: "Address: {Address}"
        });
        on(dom.byId('btnGo'), 'click', function(){
          var lon = dom.byId('Lon').value;
          var lat = dom.byId('Lat').value;
          var x = parseFloat(lon);
          var y = parseFloat(lat);
          var pt = new Point({
            x: x,
            y: y,
            spatialReference: new SpatialReference({ wkid: 4326 })
          });
          locator.locationToAddress(pt, 100).then(function(evt){
            if (evt.address) {
              var address = {Address: evt.address};
              var location = webMercatorUtils.geographicToWebMercator(evt.location);
              var graphic = new Graphic({
                geometry: location,
                symbol: {
                  type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                  color: "blue",
                  size: 8,
                  outline: {  // autocasts as new SimpleLineSymbol()
                    width: 0.5,
                    color: "darkblue"
                  }
                },
                attributes: address,
                popupTemplate: infoTemplate
              });
              view.graphics.add(graphic);
              //display the info window with the address information
              view.popup.open({
                features: [graphic],
                location: location
              });
            }
          });
        });
        view.on("click", function(evt) {
          view.graphics.removeAll();
          console.info(webMercatorUtils.webMercatorToGeographic(evt.mapPoint));
          locator.locationToAddress(webMercatorUtils.webMercatorToGeographic(evt.mapPoint), 100).then(function(evt){
            if (evt.address) {
              var address = {Address: evt.address};
              var location = webMercatorUtils.geographicToWebMercator(evt.location);
              var graphic = new Graphic({
                geometry: location,
                symbol: {
                  type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                  color: "blue",
                  size: 8,
                  outline: {  // autocasts as new SimpleLineSymbol()
                    width: 0.5,
                    color: "darkblue"
                  }
                },
                attributes: address,
                popupTemplate: infoTemplate
              });
              view.graphics.add(graphic);
              //display the info window with the address information
              view.popup.open({
                features: [graphic],
                location: location
              });
            }
          });
        });
      });
    </script>
  </head>
  <body class="claro">
    <div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer"
         data-dojo-props="design:'headline', gutters:false"
         style="width:100%; height:100%;">
      <div id="header" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'top'">
        <span>Click the map to get the address for the input location.</span>
        <input type='text' id='Lat' value="34.250812723611325"></input>
        <input type='text' id='Lon' value='-118.51732330322035'></input>
        <button type="button" id='btnGo'>Locate</button>
      </div>
      <div id="map" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'center'">
      </div>
    </div>
  </body>
</html>
					
				
			
			
				
			
			
				
			
			
				
			
			
			
			
			
		Hsu,
Here is the 3.x sample updated to 4.8:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Find Address</title>
    <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #map {
        padding: 0;
        border: solid 2px #666;
        margin: 0 5px 5px 5px;
      }
      #header {
        border: solid 2px #666;
        color: #666;
        font-family: sans-serif;
        font-size: 1.1em;
        height: auto;
        margin: 5px;
        overflow: hidden;
        padding: 10px 0 10px 20px;
        text-align:left;
      }
      .roundedCorners {
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        border-radius: 5px;
      }
    </style>
    <script src="https://js.arcgis.com/4.8/"></script>
    <script>
      var map;
      require([
        "esri/Map", "esri/views/MapView", "esri/tasks/Locator", "esri/Graphic",
        "esri/geometry/support/webMercatorUtils",
        "esri/PopupTemplate",
        "dojo/number", "dojo/parser",
        "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
      ], function(
        Map, MapView, Locator, Graphic,
        webMercatorUtils,
        PopupTemplate,
        number, parser
      ) {
        parser.parse();
        map = new Map({
          basemap: "streets"
        });
        var view = new MapView({
          container: "map",
          map: map,
          center: [-118.3, 34.2],
          zoom: 11
        });
        var locator = new Locator("https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
        var infoTemplate = new PopupTemplate({
          title: "Location",
          content: "Address: {Address}"
        });
        view.on("click", function(evt) {
          view.graphics.removeAll();
          locator.locationToAddress(webMercatorUtils.webMercatorToGeographic(evt.mapPoint), 100).then(function(evt){
            if (evt.address) {
              var address = {Address: evt.address};
              var location = webMercatorUtils.geographicToWebMercator(evt.location);
              var graphic = new Graphic({
                geometry: location,
                symbol: {
                  type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                  color: "blue",
                  size: 8,
                  outline: {  // autocasts as new SimpleLineSymbol()
                    width: 0.5,
                    color: "darkblue"
                  }
                },
                attributes: address,
                popupTemplate: infoTemplate
              });
              view.graphics.add(graphic);
              //display the info window with the address information
              view.popup.open({
                features: [graphic],
                location: location
              });
            }
          });
        });
      });
    </script>
  </head>
  <body class="claro">
    <div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer"
         data-dojo-props="design:'headline', gutters:false"
         style="width:100%; height:100%;">
      <div id="header" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'top'">
        <span>Click the map to get the address for the input location.</span>
      </div>
      <div id="map" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'center'">
      </div>
    </div>
  </body>
</html>
Don't forget to mark this question as answered by clicking on the "Mark Correct" link on the reply that answered your question.
Thanks
but I want "search[ lon, lat] to address(not click map to address)"
this my code:
var locator = new Locator("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer"); 
 var x = parseFloat(lon); 
 var y = parseFloat(lat); 
 var pt = new Point(x, y, new SpatialReference({ wkid: 4326 }));
-------------------------------------------------------
got error this :
Uncaught TypeError: c.indexOf is not a function
 at Object.m (dojo.js:315)
 at Object.set (dojo.js:228)
 at Object.postscript (dojo.js:227)
 at new <anonymous> (dojo.js:237)
 at Location.js?20161027:381
 at K (dojo.js:18)
 at dojo.js:19
 at E (dojo.js:19)
 at da (dojo.js:19)
 at e (dojo.js:21)
How can I do this ?
Hsu,
Your code:
var pt = new Point(x, y, new SpatialReference({ wkid: 4326 }));was the way it was done in 3.x API. In the 4.x API you need to provide an object in the Point constructor that specifies the objects property names:
var pt = new Point({x: x, y: y, spatialReference: new SpatialReference({ wkid: 4326 })});Here is an updated sample:
<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>Find Address</title>
    <link rel="stylesheet" href="https://js.arcgis.com/4.8/esri/css/main.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #map {
        padding: 0;
        border: solid 2px #666;
        margin: 0 5px 5px 5px;
      }
      #header {
        border: solid 2px #666;
        color: #666;
        font-family: sans-serif;
        font-size: 1.1em;
        height: auto;
        margin: 5px;
        overflow: hidden;
        padding: 10px 0 10px 20px;
        text-align:left;
      }
      .roundedCorners {
        -webkit-border-radius: 5px;
        -moz-border-radius: 5px;
        border-radius: 5px;
      }
    </style>
    <script src="https://js.arcgis.com/4.8/"></script>
    <script>
      var map;
      require([
        "esri/Map", "esri/views/MapView", "esri/tasks/Locator", "esri/Graphic",
        "esri/geometry/support/webMercatorUtils",
        "esri/PopupTemplate", "esri/geometry/SpatialReference", "esri/geometry/Point",
        "dojo/number", "dojo/parser", "dojo/dom", "dojo/on",
        "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dojo/domReady!"
      ], function(
        Map, MapView, Locator, Graphic,
        webMercatorUtils,
        PopupTemplate, SpatialReference, Point,
        number, parser, dom, on
      ) {
        parser.parse();
        map = new Map({
          basemap: "streets"
        });
        var view = new MapView({
          container: "map",
          map: map,
          center: [-118.3, 34.2],
          zoom: 11
        });
        var locator = new Locator("https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
        var infoTemplate = new PopupTemplate({
          title: "Location",
          content: "Address: {Address}"
        });
        on(dom.byId('btnGo'), 'click', function(){
          var lon = dom.byId('Lon').value;
          var lat = dom.byId('Lat').value;
          var x = parseFloat(lon);
          var y = parseFloat(lat);
          var pt = new Point({
            x: x,
            y: y,
            spatialReference: new SpatialReference({ wkid: 4326 })
          });
          locator.locationToAddress(pt, 100).then(function(evt){
            if (evt.address) {
              var address = {Address: evt.address};
              var location = webMercatorUtils.geographicToWebMercator(evt.location);
              var graphic = new Graphic({
                geometry: location,
                symbol: {
                  type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                  color: "blue",
                  size: 8,
                  outline: {  // autocasts as new SimpleLineSymbol()
                    width: 0.5,
                    color: "darkblue"
                  }
                },
                attributes: address,
                popupTemplate: infoTemplate
              });
              view.graphics.add(graphic);
              //display the info window with the address information
              view.popup.open({
                features: [graphic],
                location: location
              });
            }
          });
        });
        view.on("click", function(evt) {
          view.graphics.removeAll();
          console.info(webMercatorUtils.webMercatorToGeographic(evt.mapPoint));
          locator.locationToAddress(webMercatorUtils.webMercatorToGeographic(evt.mapPoint), 100).then(function(evt){
            if (evt.address) {
              var address = {Address: evt.address};
              var location = webMercatorUtils.geographicToWebMercator(evt.location);
              var graphic = new Graphic({
                geometry: location,
                symbol: {
                  type: "simple-marker",  // autocasts as new SimpleMarkerSymbol()
                  color: "blue",
                  size: 8,
                  outline: {  // autocasts as new SimpleLineSymbol()
                    width: 0.5,
                    color: "darkblue"
                  }
                },
                attributes: address,
                popupTemplate: infoTemplate
              });
              view.graphics.add(graphic);
              //display the info window with the address information
              view.popup.open({
                features: [graphic],
                location: location
              });
            }
          });
        });
      });
    </script>
  </head>
  <body class="claro">
    <div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer"
         data-dojo-props="design:'headline', gutters:false"
         style="width:100%; height:100%;">
      <div id="header" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'top'">
        <span>Click the map to get the address for the input location.</span>
        <input type='text' id='Lat' value="34.250812723611325"></input>
        <input type='text' id='Lon' value='-118.51732330322035'></input>
        <button type="button" id='btnGo'>Locate</button>
      </div>
      <div id="map" class="roundedCorners"
           data-dojo-type="dijit/layout/ContentPane"
           data-dojo-props="region:'center'">
      </div>
    </div>
  </body>
</html>
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		Thank your help
I have two questions.
1.
this my code.
var locator = new Locator("https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
 var x = parseFloat(-118.51732330322035); 
 var y = parseFloat(34.250812723611325); 
 var pt = new Point({
 x: x,
 y: y,
 spatialReference: new SpatialReference({ wkid: 4326 })
 });
 locator.locationToAddress(pt, 100).then(function(evt){
 if (evt.address) {
 var address = {Address: evt.address};
}
 });
---------------------------------------------------------
get error this:
Uncaught TypeError: a.clone(...).normalize is not a function
 at Object.b.locationToAddress (Locator.js:8)
 at Location.js?20161027:388
 at K (dojo.js:18)
 at dojo.js:19
 at E (dojo.js:19)
 at da (dojo.js:19)
 at e (dojo.js:21)
 at HTMLScriptElement.<anonymous> (dojo.js:23)
What have I ignored?
2.The sample you provided
var address = {Address: evt.address};I want to get "Match_addr" , but I can't
Why?
{"address":{"Match_addr":"17545 Lassen St, Northridge, California, 91325","LongLabel":"17545 Lassen St, Northridge, CA, 91325, USA","ShortLabel":"17545 Lassen St","Addr_type":"PointAddress","Type":"","PlaceName":"","AddNum":"17545","Address":"17545 Lassen St","Block":"","Sector":"","Neighborhood":"Northridge","District":"","City":"Northridge","MetroArea":"Los Angeles Metro Area","Subregion":"Los Angeles County","Region":"California","Territory":"","Postal":"91325","PostalExt":"","CountryCode":"USA"},"location":{"x":-118.51724250000001,"y":34.250362478792603,"spatialReference":{"wkid":4326,"latestWkid":4326}}}
					
				
			
			
				
			
			
				
			
			
			
			
			
			
		Hsu,
Don't forget to mark this question as answered by clicking on the "Mark Correct" link on the reply that answered your question.
You are telling the parseFloat function to parse a number (which make no sense). The parseFloat is for making a sting a number.
This would be correct:
var x = parseFloat('-118.51732330322035'); 
var y = parseFloat('34.250812723611325'); 
2. Because Match_addr is not part of the evt object it is part of the evt.attributes object:
var address = {Address: evt.attributes.Match_addr};
THANK Your Tips.
but I have the 1 same error again.
mycode:
require([
 "esri/Map",
 "esri/views/MapView",
 "esri/widgets/Search",
 "esri/Graphic",
 "esri/geometry/Point", 
 "esri/tasks/Locator", 
 "esri/geometry/SpatialReference", 
 "esri/PopupTemplate",
 "dojo/domReady!"
 ],
 function(Map, MapView, Search,
 Point, 
 SpatialReference, Locator
 ) {
var locator = new Locator("https://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
 
 var x = parseFloat('-118.51732330322035'); 
 var y = parseFloat('34.250812723611325'); 
 var pt = new Point({
 x: x,
 y: y,
 spatialReference: new SpatialReference({ wkid: 4326 })
 });
 
 locator.locationToAddress(pt, 100).then(function(evt){
 if (evt.address) {
 var address = {Address: evt.address};
}
 });
---------------------------------------------------------------------------------
get error this.
Uncaught TypeError: a.clone(...).normalize is not a function
 at Object.b.locationToAddress (Locator.js:8)
 at Location.js?20161027:388
 at K (dojo.js:18)
 at dojo.js:19
 at E (dojo.js:19)
 at da (dojo.js:19)
 at e (dojo.js:21)
 at HTMLScriptElement.<anonymous> (dojo.js:23)
Please help again.
THANKS
Hsu,
Your requires are out of order:
require([
"esri/Map",
"esri/views/MapView",
"esri/widgets/Search",
"esri/Graphic",
"esri/geometry/Point", 
"esri/tasks/Locator", 
"esri/geometry/SpatialReference", 
"esri/PopupTemplate",
"dojo/domReady!"
],
function(
Map
MapView,
Search,
Point, 
SpatialReference,
Locator
) {it should be:
require([
  "esri/Map",
  "esri/views/MapView",
  "esri/widgets/Search",
  "esri/Graphic",
  "esri/geometry/Point", 
  "esri/tasks/Locator", 
  "esri/geometry/SpatialReference", 
  "esri/PopupTemplate",
  "dojo/domReady!"
],
function(
  Map
  MapView,
  Search,
  Graphic,
  Point,
  Locator,
  SpatialReference,
  PopupTemplate
) {Notice, line 2 = line 13, 3 = 13, etc, etc
Thank your help.
My other two questions.
1. There is something wrong with the address returned by location. If I want to provide information and ask you to modify it.
What should I do?
Because some locations return the store name, it is not the address of the return details.
2.google api "timezone", is there a way to convert?
Hsu,