Your points don't actually pair up (look at the sharp corners), so you'll have problems getting a 1-1 relationship to work.
If you have to use these points, you can use CalculateField with an Arcade expression like this:
// Calculate a new field on PointFC_1 that stores the OBJECTID of the closest Point in PointFC_2
// load PointFC_2
var point_fc_2 = FeaturesetByName($datastore, "PointFC_2")
// get points close to the current point, choose a buffer value that is big enough to get at least 1 other point!
var p_buffer = Buffer($feature, 1000, "meters")
var close_points = Intersects(point_fc_2, p_buffer)
// loop through the points and find the ID of the closest one
var min_dist = 99999
var closest_oid = null
for(var p in close_points) {
var dist = Distance(p, $feature)
if(dist < min_dist) {
min_dist = dist
closest_oid = p.OBJECTID
}
}
return closest_oid
This will leave some points in FC2 without partner and it will give some points in FC1 the same partner.
If you want to get a 1-1 relationship, you have to generate your points differently. Copy and edit this Python script, then run it in the Python window:
polygon_layer = "TestPolygons"
point_distance = 500
buffer_distance = 100
# create output fc
points = arcpy.management.CreateFeatureclass("", "PairedPoints", "POINT")
arcpy.management.AddField(points, "PolygonOID", "LONG")
arcpy.management.AddField(points, "PointPairID", "LONG")
arcpy.management.AddField(points, "Type", "TEXT")
# generate points ON the line
points_on_lines = arcpy.management.GeneratePointsAlongLines(polygon_layer, "PointsOnLines", 'DISTANCE', point_distance)
# read the polygon geometries as dict {OBJECTID: Geometry}
polygon_shapes = {p[0]: p[1] for p in arcpy.da.SearchCursor(polygon_layer, ["OID@", "SHAPE@"])}
# start inserting points into the output fc
with arcpy.da.InsertCursor(points, ["SHAPE@", "PolygonOID", "PointPairID", "Type"]) as i_cursor:
# loop through the points on the line
with arcpy.da.SearchCursor(points_on_lines, ["SHAPE@", "ORIG_FID", "OID@"]) as s_cursor:
for shp, poly_id, point_id in s_cursor:
# get the polygon this point is on
poly_shp = polygon_shapes[poly_id]
# create a small buffer around the point
p_buffer = shp.buffer(0.01)
# get the 2 points where the buffer intersects with the polygon
i_points = p_buffer.intersect(poly_shp, 1)
sr = poly_shp.spatialReference
fp = arcpy.PointGeometry(i_points.firstPoint, sr)
lp = arcpy.PointGeometry(i_points.lastPoint, sr)
# calculate the angle between those points -> line angle at the curretn point
angle = fp.angleAndDistanceTo(lp)[0]
# create two points perpendicular to the line
p1 = shp.pointFromAngleAndDistance(angle + 90, buffer_distance)
p2 = shp.pointFromAngleAndDistance(angle + 90, -buffer_distance)
# calculate if the points are inside or outside the polygon
p1_type = "OUTSIDE" if p1.disjoint(poly_shp) else "INSIDE"
p2_type = "INSIDE" if p1_type == "OUTSIDE" else "OUTSIDE"
# insert both points
i_cursor.insertRow([p1, poly_id, point_id, p1_type])
i_cursor.insertRow([p2, poly_id, point_id, p2_type])
Have a great day!
Johannes