public Set<RPackage> resolveImports(Collection<String> packageNames) {
    Iterable<RPackage> packages =
        packageNames
            .stream()
            .map(this::getByName)
            .filter(Objects::nonNull)
            .collect(Collectors.toList());

    List<RPackage> dependencies =
        Lists.newArrayList(packages)
            .stream()
            .flatMap(f -> resolveImports(f.getImports()).stream())
            .collect(Collectors.toList());

    return Sets.newHashSet(Iterables.concat(packages, dependencies));
  }
  public Geobuf.Data makeFeatureCollection(Collection<GeobufFeature> featureCollection) {
    Geobuf.Data.Builder data =
        Geobuf.Data.newBuilder()
            .setPrecision(this.precision)
            // TODO don't hardwire
            .setDimensions(2);

    Geobuf.Data.FeatureCollection.Builder fc = Geobuf.Data.FeatureCollection.newBuilder();

    // deduplicate keys
    List<String> keys = new ArrayList<>();

    featureCollection.stream().map(f -> this.makeFeature(f, keys)).forEach(fc::addFeatures);

    fc.addAllValues(Collections.emptyList());
    fc.addAllCustomProperties(Collections.emptyList());

    data.setFeatureCollection(fc);
    data.addAllKeys(keys);

    return data.build();
  }