DM_spatial_query_polylines.py
## @package python.DM_spatial_query_polylines
## @brief unkown python script prefix=autobuild.swdvlp64.opals.distro.demo
# "
# example script showing how to add polylines to an OPALS datamanager
# and perform a spatial queries
# (script works in python 2 and 3)
#
from __future__ import print_function # print function syntax as in python 3
import sys
#from opals import pyDM_d as pyDM #for pyDM in debug mode
from opals import pyDM # for pyDM in release mode
def output_polyline(line,prefix=""):
print(prefix,"Polyline has",line.sizePart(),"parts with",line.sizePoint(),"points")
for idx, part in enumerate(line.parts()):
print("\tPart",idx,"with",part.sizePoint(),"points")
for p in part.points():
if sys.float_info.max == p.z:
print("\t\t(%.3f," % p.x, " %.3f," % p.y, "---)")
else:
print("\t\t(%.3f," % p.x, " %.3f," % p.y, "%.3f)" % p.z)
return
def output_search(lines):
print(len(lines)," polylines found")
for idx,l in enumerate(lines):
output_polyline(l,str(idx)+" line:")
# create odm / pyDM.Datamanager.create parameters: filename(string), threadSafety(bool)
odm = pyDM.Datamanager.create("polyline_query_test.odm", False)
f = pyDM.PolylineFactory()
#create polylines and add them to the odm
f.addPoint(0, 0, 0)
f.addPoint(5, 0, 0)
f.addPoint(10, 1, 0)
odm.addPolyline( f.getPolyline() )
f.addPoint(0, 2, 0)
f.addPoint(5, 2, 0)
f.addPoint(10, 3, 0)
odm.addPolyline( f.getPolyline() )
pi = odm.getPolylineIndex()
#perform window query
print("\nwindow query on polyines:")
searchLines = pi.searchGeometry(pyDM.Window(1,1,5,5), pyDM.SpatialQueryMode.intersect)
output_search(searchLines)
#nearest neighbor search
print("\nnearest neighbor search:")
searchLines = pi.searchGeometry(1,pyDM.Point(0,0,0) )
output_search(searchLines)