在ArcEngine中可以通過兩種方式實現:
第一種:由ICurve和IPolyline接口的QueryPointAndDistance方法實現。
該方法中有七個參數,下面對這些參數進行詳細說明:
1.extension參數:esriSegmentExtension枚舉類型,用於指定曲線段延伸的方式,主要有esriNoExtension(曲線段不做延伸)、esriExtendTangents等。延 伸方式。
2. inPoint參數:指輸入點對象,IPoint類型,即要求該點到曲線的最短距離;
3. asRatio參數:bool類型,指定從改方法得到的distanceAlongCurve參數(見后)的值是以占曲線總長度的比例的方式輸出還是以絕對長度值輸出;
4. outPoint參數:輸出點對象, IPoint類型,即所找到的曲線上到輸入點距離最小的點,使用前只需先實例化;
5. distanceAlongCurve參數:double類型,指曲線的FromPoint(起始點)到輸出點(outPoint)的曲線長度,asRatio參數將影響改值的輸出方式(比例還是絕對長度值);
6. distanceFromCurve參數:double類型,指輸入點到曲線的最短距離;
7.bRightSide參數:bool類型,指輸入點是否在曲線的右方。
3. asRatio參數:bool類型,指定從改方法得到的distanceAlongCurve參數(見后)的值是以占曲線總長度的比例的方式輸出還是以絕對長度值輸出;
4. outPoint參數:輸出點對象, IPoint類型,即所找到的曲線上到輸入點距離最小的點,使用前只需先實例化;
5. distanceAlongCurve參數:double類型,指曲線的FromPoint(起始點)到輸出點(outPoint)的曲線長度,asRatio參數將影響改值的輸出方式(比例還是絕對長度值);
6. distanceFromCurve參數:double類型,指輸入點到曲線的最短距離;
7.bRightSide參數:bool類型,指輸入點是否在曲線的右方。
代碼示例(C#):
IPolyline i_poly = ... ;//已知曲線
IPoint inPoint = ...; //已知點
IPoint outPoint = new PointClass(); //曲線上到輸入點距離最小的點;
double distAlongCurveFrom = 0; //曲線其實點到輸出點部分的長度
double distFromCurve = 0;//輸出點到輸入點的距離
bool isRightSide = false;//輸入點是否在曲線的右邊
i_poly.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, inPoint, false, outPoint, ref distAlongCurveFrom, ref distFromCurve, ref isRightSide);
IPolyline i_poly = ... ;//已知曲線
IPoint inPoint = ...; //已知點
IPoint outPoint = new PointClass(); //曲線上到輸入點距離最小的點;
double distAlongCurveFrom = 0; //曲線其實點到輸出點部分的長度
double distFromCurve = 0;//輸出點到輸入點的距離
bool isRightSide = false;//輸入點是否在曲線的右邊
i_poly.QueryPointAndDistance(esriSegmentExtension.esriNoExtension, inPoint, false, outPoint, ref distAlongCurveFrom, ref distFromCurve, ref isRightSide);
第二種:由接口IProximityOperator的ReturnNearestPoint方法實現。
該方法中有兩個參數,下面對這些參數進行詳細說明:
1. IPoint參數:指輸入點對象,IPoint類型,即要求該點到曲線的最短距離;
2. esriSegmentExtension參數:
esriSegmentExtension類型;
代碼示例(C#):
IPolyline pPolyline = ...;
IProximityOperator proOperator = pPolyline as IProximityOperator;
position = proOperator.ReturnNearestPoint(clickPoint, esriSegmentExtension.esriNoExtension);