[csharp title=”C#”]
//クリックしたポイント
IPoint pPoint = new PointClass();
pPoint.X = e.mapX;
pPoint.Y = e.mapY;
//NALayer
INALayer pNALayer = (INALayer)axMapControl1.Map.get_Layer(0);
//Stop FeatureClass
IFeatureLayer pFeatureLayer = (IFeatureLayer)pNALayer.get_LayerByNAClassName("Stops");
IFeatureClass pFeatureClass = pFeatureLayer.FeatureClass;
INALocator pNALocator = pNALayer.Context.Locator;
//出力用
IPoint pOutPoint = new PointClass();
double dblDisToLoc = 99999;
//Gets the closeset point on the network features, returns the locator object, the point and the distance
INALocation pNALocation = (INALocation)new NALocationClass();
pNALocator.QueryLocationByPoint(pPoint,ref pNALocation,ref pOutPoint,ref dblDisToLoc);
if(pOutPoint == null)
{
pOutPoint = pPoint;
}
int iNameField = pFeatureClass.FindField("Name");
int iStatusField = pFeatureClass.FindField("Status");
int iSeqField = pFeatureClass.FindField("Sequence");
IFeature pFeature = pFeatureClass.CreateFeature();
INALocationObject pNALocationObject = (INALocationObject)pFeature;
pNALocationObject.NALocation = pNALocation;
pFeature.Shape = pOutPoint; //Point
pFeature.set_Value(iNameField, pOutPoint.X + "," + pOutPoint.Y) ; //Name
//Status
if (pNALocation.IsLocated)
{
pFeature.set_Value(iStatusField, esriNAObjectStatus.esriNAObjectStatusOK) ;
}
Else
{
pFeature.set_Value(iStatusField, esriNAObjectStatus.esriNAObjectStatusElementNotLocated) ;
}
//Sequence
if (iSeqField > 0)
{
ITable pTable = (ITable)pFeatureClass;
pFeature.set_Value(iSeqField, pTable.RowCount(null)) ;
}
pFeature.Store();
//■Creating NALocationFeatures
//ms-help://ESRI.EDNv9.2J/esriNetworkAnalyst/html/Creating_NALocationFeatures.htm
[/csharp]
[vb title=”VBA”]
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal x As Long, ByVal y As Long)
Dim pMxApplication As IMxApplication
Set pMxApplication = Application
Dim pPoint As IPoint
Set pPoint = pMxApplication.Display.DisplayTransformation.ToMapPoint(x, y)
Dim pMxDocument As IMxDocument
Set pMxDocument = ThisDocument
Dim pNALayer As INALayer
Set pNALayer = pMxDocument.FocusMap.Layer(0)
Dim pFeatureLayer As IFeatureLayer
Set pFeatureLayer = pNALayer.LayerByNAClassName("Facilities")
Dim pFeatureClass As IFeatureClass
Set pFeatureClass = pFeatureLayer.FeatureClass
Dim pNALocator As INALocator
Set pNALocator = pNALayer.Context.Locator
‘Gets the closeset point on the network features, returns the locator object, the point and the distance
Dim pNALocation As INALocation
Set pNALocation = New NALocation
Dim dblDisToLoc As Double
Dim pOutPoint As IPoint
pNALocator.QueryLocationByPoint pPoint, pNALocation, pOutPoint, dblDisToLoc
‘If not located, use input point
If pOutPoint Is Nothing Then
Set pOutPoint = pPoint
End If
Dim pFeature As IFeature
Set pFeature = pFeatureClass.CreateFeature
Dim pNALocationObject As INALocationObject
Set pNALocationObject = pFeature
pNALocationObject.NALocation = pNALocation
Set pFeature.Shape = pOutPoint
pFeature.Value(pFeature.Fields.FindField("Name")) = pOutPoint.x & "," & pOutPoint.y
pFeature.Store
pMxDocument.ActiveView.Refresh
End Sub
[/vb]
記事