Hi,
I am trying to write a JavaScript in which I would Like to convert the Coordinates and plot those coordinates on my map. Basically, trying to do reverse geocoding.
Below is the Script I wrote so far in which I can geocode the address but I am not able to convert X and Y to an address and can't plot the point. Please let me know how to fix this.
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!--The viewport meta tag is used to improve the presentation and behavior of the samples on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>ArcGIS dynamic and tile layers using Popup and InfoTemplates</title>
<link rel="stylesheet" href="http://js.arcgis.com/3.11/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.11/esri/css/esri.css">
<style>
html, body, #mapDiv {
padding: 0;
margin: 0;
height: 100%;
}
#leftPanel {
width:20%;
border-top: solid 1px #343642;
border-left: solid 1px #343642;
border-bottom: solid 1px #343642;
border-right: solid 1px #343642;
margin:0px 0px 5px 5px;
color: #343642;
font:100% Georgia, "Times New Roman", Times, serif;
}
#convertButton {
font-size:12pt;
}
</style>
<script src="http://js.arcgis.com/3.11/"></script>
<script src="http://maps.google.com/maps?file=api&v=2&key=AIzaSyA7d88yhU8O8p7tujVHvSGNlB8KTk_V8dE" type="text/javascript"></script>
<script>
var map, candidateLocation;
require(["esri/map",
"esri/SnappingManager",
"esri/dijit/Measurement",
"esri/dijit/BasemapGallery",
"esri/layers/FeatureLayer",
"esri/layers/ArcGISDynamicMapServiceLayer",
"esri/dijit/Legend",
"esri/tasks/locator",
"esri/dijit/Geocoder",
"esri/tasks/query",
"esri/geometry/Circle",
"esri/graphic",
"esri/InfoTemplate",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/symbols/SimpleFillSymbol",
"esri/renderers/SimpleRenderer",
"esri/symbols/Font",
"esri/symbols/TextSymbol",
"esri/config",
"esri/Color",
"esri/tasks/geometry",
"esri/geometry/Extent",
"dojo/_base/array",
"dijit/registry",
"dojo/dom",
"dojo/parser",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/AccordionContainer",
"dijit/form/Button",
"dijit/form/Textarea",
"dijit/form/TextBox",
"dijit/form/Select",
"dojo/on",
"dojo/domReady!",
],
function(
Map, SnappingManager, Measurement, BasemapGallery, FeatureLayer,
ArcGISDynamicMapServiceLayer, Legend, Locator, Geocoder, Query, Circle,
Graphic, InfoTemplate, SimpleMarkerSymbol, SimpleLineSymbol,
SimpleFillSymbol, SimpleRenderer, Font, TextSymbol, esriConfig, Color, geometry, Extent,
arrayUtils, registry, dom, parser, on) {
parser.parse();
map = new Map("mapDiv", {
basemap: "gray",
center: [-95.249, 38.954],
zoom: 3,
sliderStyle: "large"
});
var geocoder = new Geocoder({
arcgisGeocoder: {
placeholder: "Enter an Address",
sourceCountry: "USA"
},
autoComplete: true,
map: map
}, dom.byId("search"));
geocoder.on("select", showLocation);
//script for locating the address with Longitude and Latitude.
function init() {
var inLat = new dijit.form.TextBox({
name: "inLat",
//value: 34.0571709
}, "inLat");
var inLon = new dijit.form.TextBox({
name: "inLon",
//value: -117.1942978
}, "inLon");
//dojo.byId("inLat").value = defaultcoord.y;
//dojo.byId("inLon").value = defaultcoord.x;
var button = new dijit.form.Button({
label: "Convert",
},"convertButton");
}
dojo.ready(init);
function showLocation(evt) {
map.graphics.clear();
console.log(evt);
var point = evt.result.feature.geometry;
var symbol = new SimpleMarkerSymbol().setStyle(
SimpleMarkerSymbol.STYLE_SQUARE).setColor(
new Color([255,0,0,0.5])
);
var graphic = new Graphic(point, symbol);
map.graphics.add(graphic);
map.centerAndZoom(graphic, 4);
map.infoWindow.setTitle("Search Result");
map.infoWindow.setContent(evt.result.name);
map.infoWindow.show(evt.result.feature.geometry);
}
});
</script>
</head>
<body class="claro">
<div id="mainWindow" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'sidebar', gutters:false" style="width:100%; height:100%;">
<div id="leftPanel" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'left'">
<br>
Enter an address then click the magnifying glass to return the location for street addresses in the United States.
<div id="search"></div>
<br>
<br>
<div style="font-size: 12pt; font-weight:bold;">
Input Longtitude and Latitude
</div>
<br>
<div>
<span>X: </span><input tabindex="1" type="text" id="inLon" />
</div>
<div>
<span>Y: </span><input tabindex="2" type="text" id="inLat" />
</div>
<br>
<div>
<button id="convertButton" data-dojo-type="dijit/form/Button">Convert</button>
</div>
</div>
<div id="mapDiv" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'center'">
<div style="position:absolute; right:20px; top:10px; z-Index:999;"></div>
</div>
</html>
Solved! Go to Solution.
Hey Manjari,
do you have a live example of how this works?
Terry,
Both mine and Toms posted code sample work.
Thanks Robert, I’m slow so trying to wrap my mind around what it actually does.. what I’m trying to accomplish is I was to let the user enter Lat/Long or State Plane Coords and then it takes them to a linear location on a route as well as give them the LR location.
Was hoping this would give me some starter code to work with.
Terry,
This code is doing a lot more than what are looking for then. I is allowing the user to enter a lat and lon and then use that info to reverse geocode.
Hey Terry,
As Robert said this is the working sample code.
Thanks
Manjari
One problem you're going to run into later on is that your function arguements aren't matching your require modules. Take a look at the position of "dojo/on" versus "on".