GeometryService Intersect Polylines

1502
1
10-15-2012 08:43 AM
DanielGarcia
New Contributor III
Hello,

Do you know, why intersect method of geometry service, do not return any results, when input geometries and intersect geometry are polylines?

API Reference said:

"The intersect operation is performed on a geometry service resource. This operation constructs the set-theoretic intersection between an array of geometries and another geometry"

So I think that intersect polylines with other polylines must return intersection points, Don´t you think??

Is this a bug? or is this a product limit?

Thanks

Daniel
0 Kudos
1 Reply
derekswingley1
Frequent Contributor
You can do this client side with esri.geometry.getLineIntersection. Here's an example:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
    <title></title>
    <link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/dojo/dijit/themes/tundra/tundra.css">
    <link rel="stylesheet" href="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/js/esri/css/esri.css">
    <style>
      html, body { height: 100%; width: 100%; margin: 0; padding: 0; }
      #map{ margin: 0; padding: 0; }
    </style>
    <script>var dojoConfig = { parseOnLoad: true };</script>
    <script src="http://serverapi.arcgisonline.com/jsapi/arcgis/3.2/"></script>
    <script>
      dojo.require("dijit.layout.BorderContainer");
      dojo.require("dijit.layout.ContentPane");
      dojo.require("esri.map");
      
      var map;
      function init() {
        var bounds = new esri.geometry.Extent({"xmin":-16108713,"ymin":2819886,"xmax":-9494769,"ymax":5549605,"spatialReference":{"wkid":102100}});
        map = new esri.Map("map",{ extent: bounds });
        var basemap = new esri.layers.ArcGISTiledMapServiceLayer("https://server.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer");
        map.addLayer(basemap);
        
        dojo.connect(map, "onLoad", function() { 
          dojo.connect(dijit.byId("map"), "resize", map, map.resize);
          showLines();
        });
      }

      function showLines() {
        var geometries = [
          [[-120,30],[-110,40]],
          [[-120,40],[-110,30]]
        ];
        dojo.forEach(geometries, function(path) {
          var line = new esri.geometry.Polyline(new esri.SpatialReference({ "wkid": 4326 }));
          line.addPath(path);
          var merc = esri.geometry.geographicToWebMercator(line);
          addGraphic(merc);
        });

        clientSideIntersection();
      }

      function clientSideIntersection() {
        var g1 = map.graphics.graphics[0].geometry;
        var g2 = map.graphics.graphics[1].geometry;
        var s1 = new esri.geometry.Point(g1.paths[0][0], map.spatialReference);
        var e1 = new esri.geometry.Point(g1.paths[0][1], map.spatialReference);
        var s2 = new esri.geometry.Point(g2.paths[0][0], map.spatialReference);
        var e2 = new esri.geometry.Point(g2.paths[0][1], map.spatialReference);

        var intersection = esri.geometry.getLineIntersection(s1, e1, s2, e2);
        console.log("intersection: ", intersection);

        map.graphics.add(new esri.Graphic(intersection, new esri.symbol.SimpleMarkerSymbol()));
      }

      function addGraphic(geom) {
        var sym = new esri.symbol.SimpleLineSymbol();
        map.graphics.add(new esri.Graphic(geom, sym));
      }
      
      dojo.ready(init);
    </script>
  </head>
  
  <body class="tundra">
    <div data-dojo-type="dijit.layout.BorderContainer" 
         data-dojo-props="design:'headline',gutters:false" 
         style="width: 100%; height: 100%; margin: 0;">
      <div id="map" 
           data-dojo-type="dijit.layout.ContentPane" 
           data-dojo-props="region:'center'"> 
      </div>
    </div>
  </body>
</html>
0 Kudos