All Projects β†’ brandonxiang β†’ geojson-python-utils

brandonxiang / geojson-python-utils

Licence: MIT license
Python helper functions for manipulating GeoJSON

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to geojson-python-utils

Leaflet Geoman
πŸ‚πŸ—ΊοΈ The most powerful leaflet plugin for drawing and editing geometry layers
Stars: ✭ 1,088 (+1165.12%)
Mutual labels:  geojson, polygon
Geokit
Geo-Toolkit for PHP.
Stars: ✭ 223 (+159.3%)
Mutual labels:  distance, polygon
geopip
Reverse geocode a lng/lat coordinate within a geojson `FeatureCollection` and return information about the containing country (polygon).
Stars: ✭ 27 (-68.6%)
Mutual labels:  geojson, polygon
Geolib
Zero dependency library to provide some basic geo functions
Stars: ✭ 3,675 (+4173.26%)
Mutual labels:  geojson, distance
L7
🌎 Large-scale WebGL-powered Geospatial Data Visualization analysis framework which relies on Mapbox GL or AMap to render basemaps.
Stars: ✭ 2,517 (+2826.74%)
Mutual labels:  geojson, polygon
osm-static-maps
Openstreetmap static maps is a nodejs lib, CLI and server open source inspired on google static map service
Stars: ✭ 130 (+51.16%)
Mutual labels:  geojson, polygon
geofeatures2
A lightweight, high performance geometry library in Swift.
Stars: ✭ 18 (-79.07%)
Mutual labels:  geojson, polygon
timestampy
πŸ•’ Bunch of utilities useful when working with UNIX timestamps
Stars: ✭ 21 (-75.58%)
Mutual labels:  utils
leaflet-geojson-selector
Show GeoJSON Layer like as Interactive Menu List
Stars: ✭ 88 (+2.33%)
Mutual labels:  geojson
ludigraphix.github.io
Documentation for Ludigraphix
Stars: ✭ 21 (-75.58%)
Mutual labels:  polygon
utils.js
Fast, small and purely functional utility library
Stars: ✭ 132 (+53.49%)
Mutual labels:  utils
PosDefManifold.jl
A Julia package for manipulating data in the Riemannian manifold of positive definite matrices
Stars: ✭ 23 (-73.26%)
Mutual labels:  distance
django-graphql-geojson
GeoJSON support for Graphene Django
Stars: ✭ 61 (-29.07%)
Mutual labels:  geojson
node-isochrone
NodeJS isochrone map library
Stars: ✭ 27 (-68.6%)
Mutual labels:  geojson
aws-sdk-extra
The AWS SDK + a handful of extra convenience methods.
Stars: ✭ 18 (-79.07%)
Mutual labels:  utils
turf-go
A Go language port of Turf.js
Stars: ✭ 41 (-52.33%)
Mutual labels:  geojson
leaflet-examples
🍁 A collection of examples of leaflet map usage
Stars: ✭ 90 (+4.65%)
Mutual labels:  geojson
skynet-scrub-server
Backing store for developmentseed/skynet-scrub
Stars: ✭ 13 (-84.88%)
Mutual labels:  geojson
cmn-utils
公共函数&请求封装
Stars: ✭ 43 (-50%)
Mutual labels:  utils
android-library
AndroidεΌ€ε‘εŸΊη‘€εΊ“
Stars: ✭ 14 (-83.72%)
Mutual labels:  utils

geojson-python-utils

JavaScript Version: geojson-js-utils

This project is inspired by geojson-js-utils. Geojson becomes more popular than before. These algorithms also are what I want to learn about, which may give you some inspiration.

Chinese Doc

δΈ­ζ–‡ζ–‡ζ‘£

Usage

Copy geojson_utils.py into your working directory, and import the modules into your py file.

from geojson_utils import linestrings_intersect

or install

pip install geojson_utils

Example

Linestrings Intersection

To valid whether linestrings from geojson are intersected with each other.

from geojson_utils import linestrings_intersect

diagonal_up_str = '{ "type": "LineString","coordinates": [[0, 0], [10, 10]]}'
diagonal_down_str = '{ "type": "LineString","coordinates": [[10, 0], [0, 10]]}'
far_away_str = '{ "type": "LineString","coordinates": [[100, 100], [110, 110]]}'
diagonal_up = json.loads(diagonal_up_str)
diagonal_down = json.loads(diagonal_down_str)
far_away = json.loads(far_away_str)

print linestrings_intersect(diagonal_up, diagonal_down)
#[{'type': 'Point', 'coordinates': [0, 0]}]
print linestrings_intersect(diagonal_up, far_away)
#[]

Point in Polygon

To valid whether the point is located in a polygon

from geojson_utils import point_in_polygon

in_str = '{"type": "Point", "coordinates": [5, 5]}'
out_str = '{"type": "Point", "coordinates": [15, 15]}'
box_str = '{"type": "Polygon","coordinates": [[ [0, 0], [10, 0], [10, 10], [0, 10] ]]}'
in_box = json.loads(in_str)
out_box = json.loads(out_str)
box = json.loads(box_str)

print point_in_polygon(in_box, box)
#True
point_in_polygon(out_box, box)
#False

Point in Multipolygon

To valid whether the point is located in a mulitpolygon (donut polygon is not supported)

from geojson_utils import point_in_multipolygon

point_str = '{"type": "Point", "coordinates": [0.5, 0.5]}'
single_point_str = '{"type": "Point", "coordinates": [-1, -1]}'
multipoly_str = '{"type":"MultiPolygon","coordinates":[[[[0,0],[0,10],[10,10],[10,0],[0,0]]],[[[10,10],[10,20],[20,20],[20,10],[10,10]]]]}'
point = json.loads(point_str)
single_point = json.loads(single_point_str)
multipoly = json.loads(multipoly_str)

print point_in_multipolygon(point, multipoly)
#True
print point_in_multipolygon(single_point, multipoly)
#False

Draw Circle

To get a circle shape polygon based on centerPoint and radius

from geojson_utils import draw_circle

pt_center = json.loads('{"type": "Point", "coordinates": [0, 0]}')

print len(draw_circle(10, pt_center)['coordinates'][0])
#15
print len(draw_circle(10, pt_center, 50)['coordinates'][0])
#50

Rectangle Centroid

To get the centroid of the rectangle

from geojson_utils import centroid

box_str = '{"type": "Polygon","coordinates": [[[0, 0],[10, 0],[10, 10],[0, 10]]]}'
box = json.loads(box_str)
centroid = rectangle_centroid(box)

print centroid['coordinates']
#[5, 5]

Distance between Two Points

To calculate the distance between two point on the sphere like google map (reference http://www.movable-type.co.uk/scripts/latlong.html)

from geojson_utils import point_distance

fairyland_str = '{"type": "Point", "coordinates": [-122.260000705719, 37.80919060818706]}'
navalbase_str = '{"type": "Point", "coordinates": [-122.32083320617676, 37.78774223089045]}'
fairyland = json.loads(fairyland_str)
navalbase = json.loads(navalbase_str)

print math.floor(point_distance(fairyland, navalbase))
# 5852

Geometry within Radius

To valid whether point or linestring or polygon is inside a radius around a center

from geojson_utils import geometry_within_radius

center_point_str = '{"type": "Point", "coordinates":  [-122.260000705719, 37.80919060818706]}'
check_point_str = '{"type": "Point", "coordinates": [-122.32083320617676, 37.78774223089045]}'
center_point = json.loads(center_point_str)
check_point = json.loads(check_point_str)

print geometry_within_radius(check_point, center_point, 5853)
#True

Area

To calculate the area of polygon

from geojson_utils import area
 
box_str = '{"type": "Polygon","coordinates": [[ [0, 0], [10, 0], [10, 10], [0, 10] ]]}'
box = json.loads(box_str)
print area(box)
#100

Centroid

To get the centroid of polygon adapted from http://paulbourke.net/geometry/polyarea/javascript.txt

from geojson_utils import centroid
box_str = '{"type": "Polygon","coordinates": [[ [0, 0], [10, 0], [10, 10], [0, 10] ]]}'
box = json.loads(box_str)

print centroid(box)
#{"type": "Point", "coordinates": [5, 5]})

Destination point

To calculate a destination Point base on a base point and a distance

from geojson_utils import destination_point

startpoint_str = '{"type": "Point", "coordinates":  [-122.260000705719, 37.80919060818706]}'
startpoint = json.loads(startpoint_str)

print destination_point(startpoint, 180, 2000)
#{'type': 'Point', 'coordinates': [-122.26000070571902, 19.822758489812447]}

Merge Featurecollection geojson

To merge features into one featurecollection

from geojson_utils import merge_featurecollection
with open('tests/first.json','r') as fp:
    first = json.load(fp)
with open('tests/second.json','r') as fp:
    second = json.load(fp)
with open('tests/result.json','r') as fp:
    result = json.load(fp)
merge_featurecollection(first,second)

Simplify other point

Simplify the point featurecollection of poi with another point features accoording by distance.

Attention: point featurecollection only

Conversion between wgs84, gcj02, bd09

Conversion between wgs84, gcj02 and bd09

Parameter One: geojson geometry

Parameter Two:

  • wgs2gcj coordinates conversion from wgs84 to gcj02
  • gcj2wgs coordinates conversion from gcj02 to wgs84
  • wgs2bd coordinates conversion from wgs84 to bd09
  • bd2wgs coordinates conversion from bd09 to wgs84
  • gcj2bd coordinates conversion from gcj02 to bd09
  • bd2gcj coordinates conversion from bd09 to gcj02
from geojson_utils import convertor
with open('tests/province_wgs.geojson', encoding='utf-8') as fp:
    geojson = json.load(fp)
    features = geojson['features']
    for feature in features:
        origin = feature['geometry']['coordinates'][0][0][0]
        result = convertor(feature['geometry'])

TODO

TODO

Development

On the develop branch

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].