POST
|
Do you really need to use the rest api manually? what is the developer using to build this application? If they use the ESRI JavaScript API, could they just use the Query() method? It takes a geometry as a spatial filter and handles all the details for you. Look at this example, it creates a buffer then uses the geometry to grab all census blocks in the buffer. you would get a parcel and select all fema zones in it. Select with Feature Layer | ArcGIS API for JavaScript
... View more
09-12-2014
10:02 AM
|
0
|
3
|
2705
|
POST
|
I don't know why polygon doesn't work, but envelope should only have 4 points. xmin, ymin and xmax, ymax. Depending on how many FEMA areas you have, you could try to Point in Polygon them (the developer could run the query themselves and ignore the rest if it isn't working right.) Many ways to solve the same problem. I use this formula: //+ Jonas Raoni Soares Silva //@ http://jsfromhell.com/math/is-point-in-poly [rev. #0] function isPointInPoly(poly, pt){ for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) ((poly.y <= pt.y && pt.y < poly .y) || (poly .y <= pt.y && pt.y < poly.y)) && (pt.x < (poly .x - poly.x) * (pt.y - poly.y) / (poly .y - poly.y) + poly.x) && (c = !c); return c; } My poly is in a file and looks like this: var poly=[{x:35.1631035593,y:-106.659880001}, {x:35.1631035458,y:-106.659879999}, {x:35.1631035503,y:-106.659880015}, {x:35.1602168416,y:-106.679432832}, {x:35.1601067583,y:-106.679508129}, {x:35.1600635441,y:-106.679513221}, {x:35.1599856053,y:-106.679510715}, {x:35.1590417964,y:-106.680071918}, {x:35.1581326754,y:-106.680813656}, {x:35.1581325045,y:-106.681021692}, {x:35.1581325837,y:-106.681175784}, {x:35.1581326772,y:-106.681349715}, {x:35.1581324901,y:-106.681449898}]
... View more
09-12-2014
08:39 AM
|
0
|
5
|
2705
|
POST
|
If you don't specify a geometry, it defaults to envelope.
... View more
09-12-2014
07:27 AM
|
0
|
7
|
2705
|
POST
|
The REST API docs are here: ArcGIS Server REST API Envelope is like this: geometryType=esriGeometryEnvelope&geometry={xmin: -104, ymin: 35.6, xmax: -94.32, ymax: 41} geometryType=esriGeometryEnvelope&geometry=-104,35.6,-94.32,41 Here is my working query:
... View more
09-12-2014
07:25 AM
|
0
|
0
|
2705
|
POST
|
If you can get GeoEvent, go for it. I do this: I have a webmap that uses HTML 5 geolocation. On finding location, I send the data to my feature class using ARCGIS REST API. There is a viewer webpage that watches all the feature classes (one for each person). It refreshes automatically every 3 seconds. If you can get XY, just publish a service on server and use REST to push in the data. I do this onLocationFound() and I only need the current location - I don't care about saving for later - so I delete all the features first. deleteFeature(); var url = "http://YourDomainName/ArcGIS/rest/services/Pauleverymove/FeatureServer/0/addFeatures"; var p1 = '[{"geometry":{"x":'; var p2=position.coords.longitude; var p3=',"y":'; var p4=position.coords.latitude; var p5='}}]&f=json'; pathToAdd=p1.concat(p2,p3,p4,p5); var params = "features="+pathToAdd; var http = new XMLHttpRequest(); http.open("POST", url, true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.onreadystatechange = function() {//Call a function when the state changes. if(http.readyState == 4 && http.status == 200) { //alert(http.responseText); } } http.send(params); I also have one using Node.js and Websockets that broadcasts to everyone on the webpage. This is cool.
... View more
09-11-2014
03:59 PM
|
0
|
0
|
799
|
POST
|
JavaScript for sure. Then you can Use REST API via AJAX and hopefully, one day, WebSockets!
... View more
09-11-2014
03:47 PM
|
0
|
0
|
617
|
POST
|
I will add that I have had an issue with this. I took the example from ESRI and changed the URL to my server and nothing. If I make it a L.esri.FeatureLayer and add the /0 - or whichever feature - to the end of the URL, it displays fine. I just figured our services were published differently.
... View more
09-11-2014
03:34 PM
|
0
|
0
|
476
|
POST
|
You mention you can't use the HTML, so you have to take the JSON. What are you doing this in? I don't know why you would ever want the HTML response. Parsing all the HTML for the answer would be overly complicated.
... View more
09-11-2014
03:31 PM
|
0
|
10
|
2705
|
POST
|
What do you mean, it does not return accurate data? What does your input query (geometry) look like?
... View more
09-11-2014
03:29 PM
|
0
|
0
|
2705
|
POST
|
It is a great library. I have got a lot of use out of it. Combine it with the ESRI REST API and you can make an AJAX call to add, delete, update ...! I started a class for it. function CRUD(url){ //url should look like: http://YourDomain/ArcGIS/rest/services/FeatName/FeatureServer/0 this.url=url; }//end function CRUD CRUD.prototype={ add: function(addFeature){ ////needs to look like [{"geometry":{"x":-106,"y":35}, "attributes":{"name":"paul","number":123}}] var addparams = "features="+addFeature+"&f=json"; var addurl=this.url+"/addFeatures"; alert(addFeature); var http; if (window.XMLHttpRequest){ http=new XMLHttpRequest(); } else { http=new ActiveXObject("Msxml2.XMLHTTP"); } http.open("POST", addurl, true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.onreadystatechange = function() {//Call a function when the state changes. if(http.readyState == 4 && http.status == 200) { alert(http.responseText); } } http.send(addparams); }, //end ADD update: function(updateFeature){ var updateparams = "features="+updateFeature+"&f=json"; var updateurl=this.url+"/updateFeatures"; var http; if (window.XMLHttpRequest){ http=new XMLHttpRequest(); } else { http=new ActiveXObject("Msxml2.XMLHTTP"); } http.open("POST", updateurl, true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.onreadystatechange = function() {//Call a function when the state changes. if(http.readyState == 4 && http.status == 200) { console.log(http.responseText); } } http.send(updateparams); }, //end UPDATE delete: function(deleteFeature){ //takes objectid var deleteparams = "objectIds="+deleteFeature+"&f=json"; var deleteurl=this.url+"/deleteFeatures"; var http; if (window.XMLHttpRequest){ http=new XMLHttpRequest(); } else { http=new ActiveXObject("Msxml2.XMLHTTP"); } http.open("POST", deleteurl, true); http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); http.onreadystatechange = function() {//Call a function when the state changes. if(http.readyState == 4 && http.status == 200) { console.log(http.responseText); } } http.send(deleteparams); }, //end DELETE query: function(){ } // end QUERY };//end CRUD.prototype Throw it in a JS file and include a reference in your HTML. then use it like this: //USE CASE for DELETE and ADD var crud = new CRUD("http://Yourdomain/ArcGIS/rest/services/FeatName/FeatureServer/0"); //DELETE WORKS crud.delete(43); //ObjectID - you can get it using the vector layer onclick() and feature.properties.OBJECTID. //ADD WORKS - adding lines is easy just use leaflet toGeoJSON(); var pointToAdd='[{"geometry":{"x":-106.79192,"y":35.06148}, "attributes":{}}]'; crud.add(pointToAdd); //UPDATE WORKS var crud2 = new CRUD("http://YourDomain/ArcGIS/rest/services/featName/FeatureServer/0"); var feature='[{"geometry":{"x":-106.73975,"y":35.12765}, "attributes":{"OBJECTID":57,"name":"Paul","number":123}}]'; crud2.update(feature);
... View more
09-09-2014
01:49 PM
|
0
|
0
|
138
|
POST
|
Depending on what you need to do in the end, Leaflet.js is way easier. You can load and edit all your GIS data if you ever get ArcServer as well. Here is a polygon and a point on a map - save as something.html and open in your browser. <html> <head><title>Leaflet.js Essentials</title> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /> <style> html, body, #map { padding: 0; margin: 0; height: 100%; } </style> </head> <body> <script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script> <script src="http://cdn-geoweb.s3.amazonaws.com/esri-leaflet/0.0.1-beta.6/esri-leaflet.js"></script> <div id="map"></div> <script> var map = L.map('map', { center: [51.509, -0.08], zoom: 9 }); L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(map); var a = L.marker([51.49656, -0.09304]).addTo(map).bindPopup("My Point").openPopup() var polygon = L.polygon([ [51.509, -0.08], [51.503, -0.06], [51.51, -0.047] ]).addTo(map); </script> </body> </html> Want an ArcServer service? Download (Leaflet Vector Layers - Jason Sanford ), add a reference to it: <script src="lvector.js"></script> <script src="Layer.js"></script> <script src="AGS.js"></script> <script src="json2.js"></script> Instead of L.polygon() add a GIS layer: var trafficEngineering = new lvector.AGS({ url: "http://YourDomain/ArcGIS/rest/services/YourServiceName/MapServer/7", fields: "*", uniqueField: "OBJECTID", autoUpdate:true, autoUpdateInterval: 100, scaleRange: [8, 20], showAll: false, where: qstring, popupTemplate: '<h3>{OBJECTID}</h3>', symbology: { type: "single", vectorOptions: { weight: 4, opacity: 1, color: "blue" } }, clickEvent: function (feature, e) { } }).setMap(map);
... View more
09-09-2014
12:59 PM
|
0
|
3
|
805
|
POST
|
Don't know why <!DOCTYPE html> doesn't work. It is supposed to sit above the <html> tag and tell the browser it is HTML 5. Glad it works for you.
... View more
09-09-2014
12:42 PM
|
0
|
0
|
2113
|
POST
|
This uses Leaflet.js and makes an AJAX call to your GIS Service on ArcServer. Just change the URL to the location of your service. You can drag the textfile to the map and it will put markers on the map. And change the map center coordinates so it is where you want to be. Mine is in Albuquerque. This uses Drag and Drop functionality in HTML5 so you need a new browser - just use chrome. My address file looks like this: 7520 Corona Ave NE 600 2nd St NW 6200 Paseo Del-Norte 3805 Northern Blvd NE 3701 Constitution Ave NE 320 Yale Boulevard SE 6001 Lomas Blvd NE My HTML File: <html> <head> <title></title> <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.css" /> <style> #map{ height: 100%; width:100%; } </style> </head> <body> <script src="http://cdn.leafletjs.com/leaflet-0.7.2/leaflet.js"></script> <div id="map" ></div> <script> var map = L.map('map', { center: [35.10418, -106.62987], zoom: 9 }); L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png').addTo(map); function handleFileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); var files = evt.dataTransfer.files; // FileList object. var reader = new FileReader(); reader.onload = function(event) { var temp=event.target.result; var text=temp.replace( /\n/g, "," ); var c=text.split(","); for(i=0;i<c.length;i++){ url1="http://YourDomain/ArcGIS/rest/services/AddressLocator/GeocodeServer/findAddressCandidates?Street="; url2=String(c); url3="&outFields=&outSR=4326&f=pjson"; url=url1.concat(url2,url3); var xhReq = new XMLHttpRequest(); xhReq.open("GET", url, false); xhReq.send(null); var serverResponse = xhReq.responseText; var d=JSON.parse(serverResponse); if(typeof d.candidates[0] == 'undefined'){alert("error in address: "+url2);} else{ L.marker([parseFloat(d.candidates[0].location.y),parseFloat(d.candidates[0].location.x)]).addTo(map).bindPopup(url2); } } } var s = reader.readAsText(files[0],"UTF-8"); } function handleDragOver(evt) { evt.stopPropagation(); evt.preventDefault(); evt.dataTransfer.dropEffect = 'copy'; // Explicitly show this is a copy. } // Setup the dnd listeners. var dropZone = document.getElementById('map'); dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleFileSelect, false); </script> </body> </html>
... View more
09-08-2014
03:58 PM
|
1
|
5
|
2113
|
POST
|
If Python didn't run in some funky sandbox, you could use Tkinter. Last time I checked, if you clicked a button, the GUI died. C# has a System.Diagnostics.Process.Start() which could possibly be used in your GUI to execute your scripts and pass parameters. It works fine on the desktop but I have never tried it in ArcMap.
... View more
09-08-2014
03:41 PM
|
0
|
1
|
1413
|
POST
|
Yeah, if you are creating a geocoding service on ArcServer, you should not need to change the url. It will always be the same. It should be something like; http://YourDomainName/ArcGIS/rest/services/AddressLocator/GeocodeServer/findAddressCandidates Don't know what you are using for JavaScript, but not using ESRI, you would just make an AJAX call to the url passing the parameters: Street=123 sesame street&f=json&outSR=4326
... View more
09-08-2014
03:32 PM
|
1
|
0
|
653
|
Title | Kudos | Posted |
---|---|---|
1 | 09-18-2014 01:38 PM | |
1 | 09-17-2014 12:47 PM | |
1 | 09-08-2014 03:32 PM | |
1 | 11-17-2014 07:42 AM | |
1 | 12-01-2014 01:37 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|