flexpolyline


Nameflexpolyline JSON
Version 0.1.0 PyPI version JSON
download
home_pagehttps://here.com
SummaryFlexible Polyline encoding: a lossy compressed representation of a list of coordinate pairs or triples
upload_time2020-11-21 15:39:39
maintainer
docs_urlNone
authorHERE Europe B.V.
requires_python
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # FlexPolyline

This is a python implementation of the Flexible Polyline format.

The polyline encoding is a lossy compressed representation of a list of coordinate pairs or
coordinate triples. It achieves that by:

1. Reducing the decimal digits of each value.
2. Encoding only the offset from the previous point.
3. Using variable length for each coordinate delta.
4. Using 64 URL-safe characters to display the result.

## Install

```python
pip install flexpolyline
```

## Usage

### Encoding

#### `encode(iterable, precision=5, third_dim=ABSENT, third_dim_precision=0)`

Encodes a list (or iterator) of coordinates to the corresponding string representation. See the optional parameters below for further customization. Coordinate order is `(lat, lng[, third_dim])`.
```

**Optional parameters**

* `precision` - Defines how many decimal digits to round latitude and longitude to (ranges from `0` to `15`).
* `third_dim` - Defines the type of the third dimension when present. Possible values are defined in the module: `ALTITUDE`, `LEVEL`, `ELEVATION`, `CUSTOM1` and `CUSTOM2`. The last two values can be used in case your third dimension has a user defined meaning.
* `third_dim_precision` - Defines how many decimal digits to round the third dimension to (ranges from `0` to `15`). This parameter is ignored when `third_dim` is `ABSENT` (default).


#### `dict_encode(iterable, precision=5, third_dim=ABSENT, third_dim_precision=0)`

Similar to the `encode` function, but accepts a list (or iterator) of dictionaries instead. Required keys are `"lat"` and `"lng"`. If `third_dim` is set, the corresponding key is expected `"alt"`, `"elv"`, `"lvl"`, `"cst1"` or `"cst2"`. 


#### Examples

Following is a simple example encoding a 2D poyline with 5 decimal digits of precision:

```python
import flexpolyline as fp

example = [
    (50.1022829, 8.6982122),
    (50.1020076, 8.6956695),
    (50.1006313, 8.6914960),
    (50.0987800, 8.6875156),
]

print(fp.encode(example))
```

**Output**: `BFoz5xJ67i1B1B7PzIhaxL7Y`.

Another example for the 3D case with altitude as the third coordinate:

```python
example = [
    (50.1022829, 8.6982122, 10),
    (50.1020076, 8.6956695, 20),
    (50.1006313, 8.6914960, 30),
    (50.0987800, 8.6875156, 40),
]

print(fp.encode(example, third_dim=flexpolyline.ALTITUDE))
```

**Output**: `BlBoz5xJ67i1BU1B7PUzIhaUxL7YU`

### Decoding

#### `decode(encoded_string)`

Decodes the passed encoded string and returns a list of tuples `(lat, lng[, third_dim])`.

#### `iter_decode(encoded_string)`

Similar to `decode` but returns an iterator instead.

#### `dict_decode(encoded_string)`

Similar to `decode` but returns a list of dictionaries instead. The keys `"lat"` and `"lng"` are always present, while the third dimension key depends on the type of third dimension encoded. It can be one of the following: `"alt"`, `"elv"`, `"lvl"`, `"cst1"` or `"cst2"`.

#### `iter_dict_decode(encoded_string)`

Similar to `dict_decode` but returns an iterator instead.

#### `get_third_dimension(encoded_string)`

Returns the value corresponding to the third dimension encoded in the string. Possible values defined in the module are: `ABSENT`, `ALTITUDE`, `LEVEL`, `ELEVATION`, `CUSTOM1` and `CUSTOM2`

#### Examples

Example of decoding of a 2D polyline:

```python
import flexpolyline as fp

print(fp.decode("BFoz5xJ67i1B1B7PzIhaxL7Y"))
```

**Output**:

```
[
    (50.10228, 8.69821),
    (50.10201, 8.69567),
    (50.10063, 8.69150),
    (50.09878, 8.68752)
]
```


Example of decoding dicts from a 3D polyline:

```python
import flexpolyline as fp

print(fp.dict_decode("BlBoz5xJ67i1BU1B7PUzIhaUxL7YU"))
```

**Output**: 

```
[
    {'lat': 50.10228, 'lng': 8.69821, 'alt': 10},
    {'lat': 50.10201, 'lng': 8.69567, 'alt': 20},
    {'lat': 50.10063, 'lng': 8.69150, 'alt': 30},
    {'lat': 50.09878, 'lng': 8.68752, 'alt': 40}
]
```







            

Raw data

            {
    "_id": null,
    "home_page": "https://here.com",
    "name": "flexpolyline",
    "maintainer": "",
    "docs_url": null,
    "requires_python": "",
    "maintainer_email": "",
    "keywords": "",
    "author": "HERE Europe B.V.",
    "author_email": "",
    "download_url": "https://files.pythonhosted.org/packages/4d/04/ad15ba222feeeea012919eccbec65d86a91e94024541ed8ebb549b4784e0/flexpolyline-0.1.0.tar.gz",
    "platform": "",
    "description": "# FlexPolyline\n\nThis is a python implementation of the Flexible Polyline format.\n\nThe polyline encoding is a lossy compressed representation of a list of coordinate pairs or\ncoordinate triples. It achieves that by:\n\n1. Reducing the decimal digits of each value.\n2. Encoding only the offset from the previous point.\n3. Using variable length for each coordinate delta.\n4. Using 64 URL-safe characters to display the result.\n\n## Install\n\n```python\npip install flexpolyline\n```\n\n## Usage\n\n### Encoding\n\n#### `encode(iterable, precision=5, third_dim=ABSENT, third_dim_precision=0)`\n\nEncodes a list (or iterator) of coordinates to the corresponding string representation. See the optional parameters below for further customization. Coordinate order is `(lat, lng[, third_dim])`.\n```\n\n**Optional parameters**\n\n* `precision` - Defines how many decimal digits to round latitude and longitude to (ranges from `0` to `15`).\n* `third_dim` - Defines the type of the third dimension when present. Possible values are defined in the module: `ALTITUDE`, `LEVEL`, `ELEVATION`, `CUSTOM1` and `CUSTOM2`. The last two values can be used in case your third dimension has a user defined meaning.\n* `third_dim_precision` - Defines how many decimal digits to round the third dimension to (ranges from `0` to `15`). This parameter is ignored when `third_dim` is `ABSENT` (default).\n\n\n#### `dict_encode(iterable, precision=5, third_dim=ABSENT, third_dim_precision=0)`\n\nSimilar to the `encode` function, but accepts a list (or iterator) of dictionaries instead. Required keys are `\"lat\"` and `\"lng\"`. If `third_dim` is set, the corresponding key is expected `\"alt\"`, `\"elv\"`, `\"lvl\"`, `\"cst1\"` or `\"cst2\"`. \n\n\n#### Examples\n\nFollowing is a simple example encoding a 2D poyline with 5 decimal digits of precision:\n\n```python\nimport flexpolyline as fp\n\nexample = [\n    (50.1022829, 8.6982122),\n    (50.1020076, 8.6956695),\n    (50.1006313, 8.6914960),\n    (50.0987800, 8.6875156),\n]\n\nprint(fp.encode(example))\n```\n\n**Output**: `BFoz5xJ67i1B1B7PzIhaxL7Y`.\n\nAnother example for the 3D case with altitude as the third coordinate:\n\n```python\nexample = [\n    (50.1022829, 8.6982122, 10),\n    (50.1020076, 8.6956695, 20),\n    (50.1006313, 8.6914960, 30),\n    (50.0987800, 8.6875156, 40),\n]\n\nprint(fp.encode(example, third_dim=flexpolyline.ALTITUDE))\n```\n\n**Output**: `BlBoz5xJ67i1BU1B7PUzIhaUxL7YU`\n\n### Decoding\n\n#### `decode(encoded_string)`\n\nDecodes the passed encoded string and returns a list of tuples `(lat, lng[, third_dim])`.\n\n#### `iter_decode(encoded_string)`\n\nSimilar to `decode` but returns an iterator instead.\n\n#### `dict_decode(encoded_string)`\n\nSimilar to `decode` but returns a list of dictionaries instead. The keys `\"lat\"` and `\"lng\"` are always present, while the third dimension key depends on the type of third dimension encoded. It can be one of the following: `\"alt\"`, `\"elv\"`, `\"lvl\"`, `\"cst1\"` or `\"cst2\"`.\n\n#### `iter_dict_decode(encoded_string)`\n\nSimilar to `dict_decode` but returns an iterator instead.\n\n#### `get_third_dimension(encoded_string)`\n\nReturns the value corresponding to the third dimension encoded in the string. Possible values defined in the module are: `ABSENT`, `ALTITUDE`, `LEVEL`, `ELEVATION`, `CUSTOM1` and `CUSTOM2`\n\n#### Examples\n\nExample of decoding of a 2D polyline:\n\n```python\nimport flexpolyline as fp\n\nprint(fp.decode(\"BFoz5xJ67i1B1B7PzIhaxL7Y\"))\n```\n\n**Output**:\n\n```\n[\n    (50.10228, 8.69821),\n    (50.10201, 8.69567),\n    (50.10063, 8.69150),\n    (50.09878, 8.68752)\n]\n```\n\n\nExample of decoding dicts from a 3D polyline:\n\n```python\nimport flexpolyline as fp\n\nprint(fp.dict_decode(\"BlBoz5xJ67i1BU1B7PUzIhaUxL7YU\"))\n```\n\n**Output**: \n\n```\n[\n    {'lat': 50.10228, 'lng': 8.69821, 'alt': 10},\n    {'lat': 50.10201, 'lng': 8.69567, 'alt': 20},\n    {'lat': 50.10063, 'lng': 8.69150, 'alt': 30},\n    {'lat': 50.09878, 'lng': 8.68752, 'alt': 40}\n]\n```\n\n\n\n\n\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Flexible Polyline encoding: a lossy compressed representation of a list of coordinate pairs or triples",
    "version": "0.1.0",
    "project_urls": {
        "Homepage": "https://here.com",
        "Source": "https://github.com/heremaps/flexible-polyline.git"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "912efb9266e90483bdbd4f94bd3467732ae99828e21963901adafe6e43f62327",
                "md5": "1fcf06c9b30488bd075ac7bec7c1baa1",
                "sha256": "3f346fb44e40f9d977b0c9609e73aa5a20431d6584644943ca70b365c9558a99"
            },
            "downloads": -1,
            "filename": "flexpolyline-0.1.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1fcf06c9b30488bd075ac7bec7c1baa1",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": null,
            "size": 7094,
            "upload_time": "2020-11-21T15:39:38",
            "upload_time_iso_8601": "2020-11-21T15:39:38.120568Z",
            "url": "https://files.pythonhosted.org/packages/91/2e/fb9266e90483bdbd4f94bd3467732ae99828e21963901adafe6e43f62327/flexpolyline-0.1.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "4d04ad15ba222feeeea012919eccbec65d86a91e94024541ed8ebb549b4784e0",
                "md5": "e2429bfa1a1b3c48bf51856194822e30",
                "sha256": "69dde225ff91c66c0f6f80044c5fa3e82d905d725608cb99d087c2bb3aeedbbd"
            },
            "downloads": -1,
            "filename": "flexpolyline-0.1.0.tar.gz",
            "has_sig": false,
            "md5_digest": "e2429bfa1a1b3c48bf51856194822e30",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 6269,
            "upload_time": "2020-11-21T15:39:39",
            "upload_time_iso_8601": "2020-11-21T15:39:39.962188Z",
            "url": "https://files.pythonhosted.org/packages/4d/04/ad15ba222feeeea012919eccbec65d86a91e94024541ed8ebb549b4784e0/flexpolyline-0.1.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2020-11-21 15:39:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "heremaps",
    "github_project": "flexible-polyline",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "flexpolyline"
}
        
Elapsed time: 0.07229s