コード例 #1
0
        public void CanGetPathSegmentsBetweenPoints()
        {
            const string xmlPath =
                @"<Path xsi:type='typens:Path' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/10.1'><PointArray xsi:type='typens:ArrayOfPoint'><Point xsi:type='typens:PointN'><X>2744261.7537500001</X><Y>1201884.120000001</Y><SpatialReference xsi:type='typens:ProjectedCoordinateSystem'><WKT>PROJCS[&quot;CH1903+_LV95&quot;,GEOGCS[&quot;GCS_CH1903+&quot;,DATUM[&quot;D_CH1903+&quot;,SPHEROID[&quot;Bessel_1841&quot;,6377397.155,299.1528128]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433]],PROJECTION[&quot;Hotine_Oblique_Mercator_Azimuth_Center&quot;],PARAMETER[&quot;False_Easting&quot;,2600000.0],PARAMETER[&quot;False_Northing&quot;,1200000.0],PARAMETER[&quot;Scale_Factor&quot;,1.0],PARAMETER[&quot;Azimuth&quot;,90.0],PARAMETER[&quot;Longitude_Of_Center&quot;,7.439583333333333],PARAMETER[&quot;Latitude_Of_Center&quot;,46.95240555555556],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;EPSG&quot;,2056]]</WKT><XOrigin>-27386400</XOrigin><YOrigin>-32067900</YOrigin><XYScale>140996569.55187955</XYScale><ZOrigin>-100000</ZOrigin><ZScale>800</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.0025000000000000001</XYTolerance><ZTolerance>0.012500000000000001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><WKID>2056</WKID><LatestWKID>2056</LatestWKID></SpatialReference></Point><Point xsi:type='typens:PointN'><X>2744255.8000000007</X><Y>1201848.4012500048</Y><SpatialReference xsi:type='typens:ProjectedCoordinateSystem'><WKT>PROJCS[&quot;CH1903+_LV95&quot;,GEOGCS[&quot;GCS_CH1903+&quot;,DATUM[&quot;D_CH1903+&quot;,SPHEROID[&quot;Bessel_1841&quot;,6377397.155,299.1528128]],PRIMEM[&quot;Greenwich&quot;,0.0],UNIT[&quot;Degree&quot;,0.0174532925199433]],PROJECTION[&quot;Hotine_Oblique_Mercator_Azimuth_Center&quot;],PARAMETER[&quot;False_Easting&quot;,2600000.0],PARAMETER[&quot;False_Northing&quot;,1200000.0],PARAMETER[&quot;Scale_Factor&quot;,1.0],PARAMETER[&quot;Azimuth&quot;,90.0],PARAMETER[&quot;Longitude_Of_Center&quot;,7.439583333333333],PARAMETER[&quot;Latitude_Of_Center&quot;,46.95240555555556],UNIT[&quot;Meter&quot;,1.0],AUTHORITY[&quot;EPSG&quot;,2056]]</WKT><XOrigin>-27386400</XOrigin><YOrigin>-32067900</YOrigin><XYScale>140996569.55187955</XYScale><ZOrigin>-100000</ZOrigin><ZScale>800</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.0025000000000000001</XYTolerance><ZTolerance>0.012500000000000001</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision><WKID>2056</WKID><LatestWKID>2056</LatestWKID></SpatialReference></Point></PointArray></Path>";

            var path = (IPath)GeometryUtils.FromXmlString(xmlPath);

            IPoint startPoint = path.FromPoint;
            IPoint endPoint   = new PointClass();

            path.QueryPoint(esriSegmentExtension.esriNoExtension, 2.1881204836952222, false,
                            endPoint);

            // Not Z aware:
            Assert.IsFalse(GeometryUtils.IsZAware(path));
            ICurve result = SegmentReplacementUtils.GetCurveBetween(startPoint, endPoint, path);

            Assert.IsFalse(GeometryUtils.IsZAware(result));

            // Z-aware but not simple:
            // The input must be Z-aware and Z-simple
            GeometryUtils.MakeZAware(path);
            Assert.IsTrue(((IZAware)path).ZAware);
            Assert.IsFalse(((IZAware)path).ZSimple);

            result = SegmentReplacementUtils.GetCurveBetween(startPoint, endPoint, path);

            // result is also Z-aware and not Z-simple:
            Assert.IsTrue(GeometryUtils.IsZAware(result));
            Assert.IsFalse(((IZAware)result).ZSimple);

            // Z aware and simple:
            GeometryUtils.SimplifyZ(path);
            Assert.IsTrue(((IZAware)path).ZAware);
            Assert.IsTrue(((IZAware)path).ZSimple);

            result = SegmentReplacementUtils.GetCurveBetween(startPoint, endPoint, path);

            // result is also Z-aware and Z-simple:
            Assert.IsTrue(GeometryUtils.IsZAware(result));
            Assert.IsTrue(((IZAware)result).ZSimple);
        }