Hello,I am working (repeatedly) with two point shapefiles. For my current effort, one is based on a Surfer grid which has one point every 0.5 feet and measures 40 by 100 feet for a total of 16,200 points (the population). The other point file has varying number of points (the sample) that fall within the footprint of the population. What I want it to do is loop through the sample, and for each point, locate the closest point in the population and add each successive population point to a selected set which will later be exported to a new shapefile.Thanks for your time and any suggestions. Here is what I have so far. There is a break in the code at my current problem.
Protected Overrides Sub OnClick()
'this routine assumes that the layers have been loaded as the first layer and the second layer in the map
'the spatial references for both the layers need to be defined.
'Its purpose is to select points from a population (Surfer grid) based on points from a sample population
'generated in Visual Sample Plan. For example, in the Surfer grid of 16,200 points, it will cycle through
'and choose the point closest to one of the VSP generated points. Note, both grids should share the same
'basic footprint.
'References the project to the active dataframe
Dim pMxDoc As ESRI.ArcGIS.ArcMapUI.IMxDocument = My.ArcMap.Document
Dim m_application As ESRI.ArcGIS.Framework.IApplication = CType(Hook, ESRI.ArcGIS.Framework.IApplication)
Dim pMap As ESRI.ArcGIS.Carto.IMap
Dim pFind As ESRI.ArcGIS.Geometry.PointClass = Nothing
pMap = pMxDoc.FocusMap
'Set things up for Layer 0, the Sample Population Layer (e.g., VSP from above)
Dim pSampLayer As ESRI.ArcGIS.Carto.ILayer = pMap.Layer(0)
Dim pSampFLayer As ESRI.ArcGIS.Carto.IFeatureLayer = pSampLayer
Dim pSampFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = pSampFLayer.FeatureClass
Dim pSampFCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor
pSampFCursor = pSampFClass.Search(Nothing, True) ' getting the feature cursor for Layer A to cycle through it
'Set things up for Layer 1, the Population Layer (e.g., Surfer from above)
Dim pPopLayer As ESRI.ArcGIS.Carto.ILayer = pMap.Layer(1)
Dim pPopFLayer As ESRI.ArcGIS.Carto.IFeatureLayer = pPopLayer
Dim pPopFClass As ESRI.ArcGIS.Geodatabase.IFeatureClass = pPopFLayer.FeatureClass
Code failure happens on this next line. Crashes ArcMap.
Dim pPopNearest As ESRI.ArcGIS.Geometry.IProximityOperator = DirectCast(pPopLayer, ESRI.ArcGIS.Geometry.IProximityOperator)
Dim pPopSpatRef As ESRI.ArcGIS.Geometry.ISpatialReference = GetSpatialReferenceFromDataset(pPopLayer)
Dim pF As ESRI.ArcGIS.Geodatabase.IFeature = pSampFCursor.NextFeature
'Dim pSelPoint As ESRI.ArcGIS.Geometry.IPoint = Nothing 'Initializes the selected point
Dim pSelSet As ESRI.ArcGIS.Geometry.IPoint = New ESRI.ArcGIS.Geometry.PointClass
pSelSet.SpatialReference = pPopSpatRef
Do Until pF Is Nothing
Dim pSampPointFeature As ESRI.ArcGIS.Geometry.IPoint = pF.Shape
pPopNearest.QueryNearestPoint(pSampPointFeature, ESRI.ArcGIS.Geometry.esriSegmentExtension.esriNoExtension, pSelSet)
Skip:
pF = pSampFCursor.NextFeature
Loop
End Sub
Public Function GetMxDocument(ByVal application As ESRI.ArcGIS.Framework.IApplication) As ESRI.ArcGIS.ArcMapUI.IMxDocument
If application Is Nothing Then
Return Nothing
End If
Dim mxDocument As ESRI.ArcGIS.ArcMapUI.IMxDocument = (CType(application.Document, ESRI.ArcGIS.ArcMapUI.IMxDocument)) ' Explicit Cast
Return mxDocument
End Function
Thank you,Dale Bridgford