A design pattern in GIS software development: Filter and refine