Exemple #1
0
def _horizontal_datum_from_params(cf_params):
    # step 1: build ellipsoid
    ellipsoid = None
    ellipsoid_name = cf_params.get("reference_ellipsoid_name")
    try:
        ellipsoid = CustomEllipsoid(
            name=ellipsoid_name or "undefined",
            semi_major_axis=cf_params.get("semi_major_axis"),
            semi_minor_axis=cf_params.get("semi_minor_axis"),
            inverse_flattening=cf_params.get("inverse_flattening"),
            radius=cf_params.get("earth_radius"),
        )
    except CRSError:
        if ellipsoid_name:
            ellipsoid = Ellipsoid.from_name(ellipsoid_name)

    # step 2: build prime meridian
    prime_meridian = None
    prime_meridian_name = cf_params.get("prime_meridian_name")
    try:
        prime_meridian = CustomPrimeMeridian(
            name=prime_meridian_name or "undefined",
            longitude=cf_params["longitude_of_prime_meridian"],
        )
    except KeyError:
        if prime_meridian_name:
            prime_meridian = PrimeMeridian.from_name(prime_meridian_name)

    # step 3: build datum
    datum_name = cf_params.get("horizontal_datum_name")
    if ellipsoid or prime_meridian:
        return CustomDatum(
            name=datum_name or "undefined",
            ellipsoid=ellipsoid or "WGS 84",
            prime_meridian=prime_meridian or "Greenwich",
        )
    if datum_name:
        return Datum.from_name(datum_name)
    return None
Exemple #2
0
def test_custom_prime_meridian__name():
    pm = CustomPrimeMeridian(longitude=1, name="frank")
    assert pm.name == "frank"
    assert pm.longitude == 1
Exemple #3
0
def test_custom_prime_meridian():
    pm = CustomPrimeMeridian(longitude=2)
    assert pm.name == "undefined"
    assert pm.longitude == 2