安装
请参考:https://github.com/frewsxcv/python-geojson
GeoJSON是一种用于编码各种地理数据结构的格式。GeoJSON对象可以表示几何形状,特征或特征集合。 GeoJSON支持以下几何类型:点,线,多边形,点集合,线集合,多边形集合和几何体集合。GeoJSON中的特性包含几何对象和其他属性,并且要素集合由要素列表表示。
一个完整的GeoJSON数据结构是一个以JSON术语表示的对象。在GeoJSON中,对象由名称/值对(也称为成员)的集合组成。对于每个成员,名字总是字符串。 成员值可以是字符串,数字,对象,数组也可以是以下文本常量中的一个:true,false和null。 数组由元素组成,每个元素是上述值。
python-geojson与Python 2.6,2.7,3.2,3.3,3.4和3.5兼容。 它在PyPi上被列为“geojson”。 推荐的安装方式是通过pip:
pip install geojson
GeoJSON对象
GeoJSON通常是由单个对象组成。 此对象(以下称为GeoJSON对象)表示几何,要素或要素集合。
GeoJSON对象可能是具有任意数量的成员(名称/值对)。
GeoJSON对象必须是名为“type”的成员。 此成员的值是由GeoJSON对象的类型所确定的字符串。
type成员的值必须是下面之一:
Point
,MultiPoint
,LineString
,MultiLineString
,Polygon
,MultiPolygon
,GeometryCollection
,Feature
或FeatureCollection
。 type成员值的大小写必须如这所示。GeoJSON对象可能有一个可选的“crs”成员,其值必须是坐标参考系统对象(请参阅3.坐标参考系统对象)。
GeoJSON对象可能有一个“bbox”成员,其值必须是边界框数组。
几何对象
几何体是一种GeoJSON对象,其中类型成员的值是以下字符串之一: Point
, MultiPoint
, LineString
, MultiLineString
, Polygon
, MultiPolygon
, GeometryCollection
, Feature
或 FeatureCollection
。
除“GeometryCollection”外的其他任何类型的GeoJSON几何对象必须有一个名为“coordinates”的成员。“coordinates”成员的值总是一个数组。 此数组中元素的结构由几何的类型来确定。
下面例子是一个完整的GeoJSON对象。 请注意,无引号的空格在JSON中不重要。 在示例中使用空白来帮助说明数据结构,但不是必需的。
from geojson import Point
Point((-115.81, 37.24))
带孔的例子:
坐标参考系统对象(coordinate reference system)
GeoJSON对象的坐标参考系(CRS)是由它的“crs”成员(以下称为CRS对象)来确定的。如果对象没有crs成员,那么它的父对象或祖父对象的crs成员可能会作为它的crs。如果这样,还没有获取到crs成员,默认的CRS将应用到GeoJSON对象。
默认的CRS是地理坐标参考系统,使用的是WGS84基准数据,并具有十进制度的经度和纬度单位。
名为“crs”的成员的值必须是JSON对象(以下称为CRS对象)或JSON null。如果CRS的值为null,那么就假定没有CRS了。
crs成员应位于(要素集合,要素,几何顺序)层级结构里GeoJSON对象的最顶级,并且在对象的子对象或孙子对象不应该重复或覆盖。
非空CRS对象有两个强制成员:“类型”和“属性”。
type成员的值必须是字符串,指示CRS对象的类型。
properties成员的值必须是一个对象。
CRS不应改变坐标顺序
链接也可以辅助文件中的CRS的直接处理器:
要素集合对象上的bbox成员示例:
from geojson import Point
Point((-115.81, 37.24)) # doctest: +ELLIPSIS
可视化上述示例的结果。 关于Point的一般信息可以在GeoJSON格式规范的第2.1.2节和附录A:点中找到。
from geojson import MultiPoint
MultiPoint([(-155.52, 19.61), (-156.22, 20.74), (-157.97, 21.46)]) # doctest: +ELLIPSIS
有关MultiPoint的信息,请参见GeoJSON格式规范中的第2.1.3节和附录A:MultiPoint。
from geojson import LineString
LineString([(8.919, 44.4074), (8.923, 44.4075)]) # doctest: +ELLIPSIS
有关LineString的信息,请参见GeoJSON格式规范中的第2.1.4节和附录A:LineString。
from geojson import MultiLineString
MultiLineString([
[(3.75, 9.25), (-130.95, 1.52)],
[(23.15, -34.25), (-1.35, -4.65), (3.45, 77.95)]
]) # doctest: +ELLIPSIS
有关MultiLineString的信息,请参见GeoJSON格式规范中的2.1.5节和附录A:MultiLineString。
from geojson import Polygon
# no hole within polygon
Polygon([[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)]]) # doctest: +ELLIPSIS
# hole within polygon
Polygon([
[(2.38, 57.322), (23.194, -20.28), (-120.43, 19.15), (2.38, 57.322)],
[(-5.21, 23.51), (15.21, -10.81), (-20.51, 1.51), (-5.21, 23.51)]
]) # doctest: +ELLIPSIS
有关多边形的信息,请参见GeoJSON格式规范中的第2.1.6节和附录A:多边形。
from geojson import MultiPolygon
MultiPolygon([
([(3.78, 9.28), (-130.91, 1.52), (35.12, 72.234), (3.78, 9.28)],),
([(23.18, -34.29), (-1.31, -4.61), (3.41, 77.91), (23.18, -34.29)],)
]) # doctest: +ELLIPSIS
有关MultiPolygon的信息,请参见GeoJSON格式规范中的第2.1.7节和附录A:MultiPolygon。
from geojson import GeometryCollection, Point, LineString
my_point = Point((23.532, -63.12))
my_line = LineString([(-152.62, 51.21), (5.21, 10.69)])
GeometryCollection([my_point, my_line]) # doctest: +ELLIPSIS
有关GeometryCollection的信息,请参见GeoJSON格式规范中的2.1.8和附录A:GeometryCollection。
from geojson import Feature, Point
my_point = Point((-3.68, 40.41))
Feature(geometry=my_point) # doctest: +ELLIPSIS
Feature(geometry=my_point, properties={"country": "Spain"}) # doctest: +ELLIPSIS
Feature(geometry=my_point, id=27) # doctest: +ELLIPSIS
有关Feature的信息,请参见GeoJSON格式规范中的2.2节。
from geojson import Feature, Point, FeatureCollection
my_feature = Feature(geometry=Point((1.6432, -19.123)))
my_other_feature = Feature(geometry=Point((-80.234, -22.532)))
FeatureCollection([my_feature, my_other_feature]) # doctest: +ELLIPSIS
有关FeatureCollection的信息,请参见GeoJSON格式规范中的2.3节。
import geojson
my_point = geojson.Point((43.24, -1.532))
my_point # doctest: +ELLIPSIS
dump = geojson.dumps(my_point, sort_keys=True)
dump # doctest: +ELLIPSIS
geojson.loads(dump) # doctest: +ELLIPSIS
import geojson
class MyPoint():
def __init__(self, x, y):
self.x = x
self.y = y
@property
def __geo_interface__(self):
return {'type': 'Point', 'coordinates': (self.x, self.y)}
point_instance = MyPoint(52.235, -19.234)
geojson.dumps(point_instance, sort_keys=True) # doctest: +ELLIPSIS
import geojson
my_line = LineString([(-152.62, 51.21), (5.21, 10.69)])
my_feature = geojson.Feature(geometry=my_line)
list(geojson.utils.coords(my_feature)) # doctest: +ELLIPSIS
map_coords: geojson.utils.map_coords
是将函数映射到所有坐标元组上,并返回相同类型的几何形状。 用于解译空间几何或坐标顺序。
import geojson
new_point = geojson.utils.map_coords(lambda x: x/2, geojson.Point((-115.81, 37.24)))
geojson.dumps(new_point, sort_keys=True) # doctest: +ELLIPSIS
geojson.is_valid
方法提供了GeoJSON对象的验证功能。
import geojson
validation = geojson.is_valid(geojson.Point((-3.68,40.41,25.14)))
validation['valid']
validation['message']
generate_random: geojson.utils.generate_random
生成具有随机数据的几何类型。
import geojson
geojson.utils.generate_random("LineString") # doctest: +ELLIPSIS
import helper; helper.info()