La forma más sencilla es la importación de sus puntos en un formato que puede ser consultado con SQL, como PostGIS, SQLite o Shapefile (utilizando OGR).
A continuación, puede consultar:
SELECT *
FROM [table] a, [table] b
WHERE a.[featureid] <> b.[featureid]
AND ST_Z(a.[geometry]) - ST_Z(b.[geometry]) >= 200;
O usted puede consultar y hacer líneas en un solo paso:
SELECT ST_MakeLine(a.[geometry], b.[geometry]) AS geom
FROM [table] a, [table] b
WHERE a.[featureid] <> b.[featureid]
AND ST_Z(a.[geometry]) - ST_Z(b.[geometry]) >= 200;
Podría ayudar a filtrar los puntos que no pueden ser >= 200m desde otro punto primero, porque no es una operación O(n^2) consulta -- si usted tiene un montón de puntos, que va a tomar un tiempo largo. También puede restringir el juego dentro de una cierta distancia para emplear el índice y la velocidad.
Nota: reemplazar el [nombres] aquí con su propia tabla/columna de nombres.
Editar:
No pude encontrar donde ejecutar una consulta SQL en QGIS, pero aquí está cómo hacerlo en ogr2ogr en la línea de comandos:
ogr2ogr \
-f "ESRI Shapefile" \
-dialect "SQLITE" \
-sql "SELECT * FROM input a, input b WHERE ST_Z(a.GEOMETRY)-ST_Z(b.GEOMETRY) < 200 AND a.FID<>b.FID" \
output.shp input.shp
El modificador-f le dice al programa qué tipo de archivo a generar. El dialecto interruptor dice a usar SQLite, SQL del motor de realizar la consulta. El -sql argumento es el de la consulta. La GEOMETRÍA y la FID están integradas en los nombres de campo que se puede utilizar en la consulta.
Ahora, esta consulta va a ser muy lento porque no hay ningún índice. Va a tratar de hacer coincidir cada punto a cualquier otro punto. Uso de la documentación aquí traté de hacer la consulta para utilizar un índice espacial, pero parece que no trabajo y no tengo tiempo para meterme con él en este momento.
Cargar el mismo conjunto de puntos en SpatiaLite va algo como esto:
spatialite> .loadshp input input UTF-8 2956
spatialite> select createspatialindex('input', 'geometry');
spatialite> create table output as select * from input a, input b where st_z(a.geometry)-st_z(b.geometry) < 200 and a.rowid<>b.rowid and a.rowid in (select rowid from spatialindex f_table_name='stations' and search_frame=b.geometry);
spatialite> .dumpshp output 'geometry' output UTF-8
La primera línea de carga el archivo shp, en el segundo se crea un índice espacial, la tercera se crea una nueva tabla a partir de la consulta y el cuarto se vuelca la nueva tabla a un archivo nuevo. (Docs aquí.)
Esto es mucho más rápido que el ogr2ogr solución (para mí).