3d distance calculations with GeoDjango

后端 未结 2 1919
眼角桃花
眼角桃花 2020-12-19 21:10

I am using

  • python 2.7.12
  • django 1.10.6
  • postgreSQL 9.5.6
  • postGIS 2.2.2

First question

I ne

2条回答
  •  北海茫月
    2020-12-19 21:39

    ** python 3.7, Django 2.2.10

    some useful functions ive written to help me with lat/lon coordinates in applications

    from django.contrib.gis.geos import Point
    from django.contrib.gis.measure import Distance
    
    
    def get_point(lat, lon):
        try:
            lat = float(lat)
            lon = float(lon)
            if lat and lon:
                return Point(x=float(round(lon, 6)), y=float(round(lat, 6)), srid=4326)
            else:
                return None
        except Exception:
            return None
    
    
    def get_point_to_point_distance(point_one, point_two, measurement_unit="mile"):
        return Distance(**{measurement_unit: point_one.distance(point_two)})
    
    

    where measurement_unit can be any of the following:

        STANDARD_UNIT = "m"
        UNITS = {
            'chain': 20.1168,
            'chain_benoit': 20.116782,
            'chain_sears': 20.1167645,
            'british_chain_benoit': 20.1167824944,
            'british_chain_sears': 20.1167651216,
            'british_chain_sears_truncated': 20.116756,
            'cm': 0.01,
            'british_ft': 0.304799471539,
            'british_yd': 0.914398414616,
            'clarke_ft': 0.3047972654,
            'clarke_link': 0.201166195164,
            'fathom': 1.8288,
            'ft': 0.3048,
            'german_m': 1.0000135965,
            'gold_coast_ft': 0.304799710181508,
            'indian_yd': 0.914398530744,
            'inch': 0.0254,
            'km': 1000.0,
            'link': 0.201168,
            'link_benoit': 0.20116782,
            'link_sears': 0.20116765,
            'm': 1.0,
            'mi': 1609.344,
            'mm': 0.001,
            'nm': 1852.0,
            'nm_uk': 1853.184,
            'rod': 5.0292,
            'sears_yd': 0.91439841,
            'survey_ft': 0.304800609601,
            'um': 0.000001,
            'yd': 0.9144,
        }
    
        # Unit aliases for `UNIT` terms encountered in Spatial Reference WKT.
        ALIAS = {
            'centimeter': 'cm',
            'foot': 'ft',
            'inches': 'inch',
            'kilometer': 'km',
            'kilometre': 'km',
            'meter': 'm',
            'metre': 'm',
            'micrometer': 'um',
            'micrometre': 'um',
            'millimeter': 'mm',
            'millimetre': 'mm',
            'mile': 'mi',
            'yard': 'yd',
            'British chain (Benoit 1895 B)': 'british_chain_benoit',
            'British chain (Sears 1922)': 'british_chain_sears',
            'British chain (Sears 1922 truncated)': 'british_chain_sears_truncated',
            'British foot (Sears 1922)': 'british_ft',
            'British foot': 'british_ft',
            'British yard (Sears 1922)': 'british_yd',
            'British yard': 'british_yd',
            "Clarke's Foot": 'clarke_ft',
            "Clarke's link": 'clarke_link',
            'Chain (Benoit)': 'chain_benoit',
            'Chain (Sears)': 'chain_sears',
            'Foot (International)': 'ft',
            'German legal metre': 'german_m',
            'Gold Coast foot': 'gold_coast_ft',
            'Indian yard': 'indian_yd',
            'Link (Benoit)': 'link_benoit',
            'Link (Sears)': 'link_sears',
            'Nautical Mile': 'nm',
            'Nautical Mile (UK)': 'nm_uk',
            'US survey foot': 'survey_ft',
            'U.S. Foot': 'survey_ft',
            'Yard (Indian)': 'indian_yd',
            'Yard (Sears)': 'sears_yd'
        }
    

提交回复
热议问题