Source code for nrel.hive.model.roadnetwork.geofence

from __future__ import annotations

import json
from typing import NamedTuple, Dict

import h3

from nrel.hive.util.typealiases import GeoFenceSet, H3Resolution, GeoId


[docs]class GeoFence(NamedTuple): geofence_set: GeoFenceSet h3_resolution: H3Resolution
[docs] @classmethod def from_geojson_file(cls, geosjon_file: str, h3_resolution: H3Resolution = 10) -> GeoFence: with open(geosjon_file, "r") as gj: geojson = json.loads(gj.read()) return GeoFence.from_geojson(geojson, h3_resolution)
[docs] @classmethod def from_geojson(cls, geojson: Dict, h3_resolution: H3Resolution = 10) -> GeoFence: geofence_set = frozenset( h3.polyfill( geojson=geojson["features"][0]["geometry"] if "features" in geojson else geojson["geometry"], res=h3_resolution, geo_json_conformant=True, ) ) return GeoFence( geofence_set=geofence_set, h3_resolution=h3_resolution, )
[docs] def contains(self, geoid: GeoId) -> bool: raise NotImplementedError("GeoFence is under construction, please don't use this method.")
# geoid_res = h3.h3_get_resolution(geoid) # if geoid_res < self.h3_resolution: # raise H3Error('geofence resolution must be less than geoid resolution') # # parent_geoid = h3.h3_to_parent(geoid, self.h3_resolution) # return parent_geoid in self.geofence_set