A mappyfile plugin to convert GeoJSON to inline Mapfile features
Project description
A mappyfile plugin to convert GeoJSON to inline Mapfile features. Useful for adding dynamically created features (from web services, user created features, and other external data sources) to a map, or to quickly visualise a geometry.
Note - to display entire GeoJSON files MapServer can be configured to read GeoJSON as an input OGR source using the GeoJSON driver.
import geojson
import mappyfile
# import directly
import mappyfile_geojson
# can also be imported as plugin using
from mappyfile.plugins import mappyfile_geojson
gj = geojson.load(fn)
l = mappyfile_geojson.convert(gj)
print(mappyfile.dumps(l))
Converts:
{
"type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[ 102.0, 0.0 ],
[ 103.0, 1.0 ],
[ 104.0, 0.0 ],
[ 105.0, 1.0 ]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
}
to:
LAYER
EXTENT 102.0 0.0 105.0 1.0
STATUS ON
TYPE LINE
PROCESSING "ITEMS=prop0,prop1"
FEATURE
ITEMS "value0;0.0"
POINTS
102.0 0.0
103.0 1.0
104.0 0.0
105.0 1.0
END
END
END
Demo
An example of using the plugin with mappyfile can be found in example.py along with an example.map.
A further example, creating images for each of the test cases using mapscript is available at create_images.py.
The sample output images are in the images folder.
Requirements
Python 2.7 or Python 3.x
mappyfile (the plugin can be used on its own but will create a dictionary object structured to use within mappyfile). Installing mappyfile should be done separately.
Installation
Note installing the mappyfile-geojson plugin will automatically install the required dependency geojson.
pip install mappyfile
pip install mappyfile-geojson
Notes
Can calculate extent of input features, with an optional buffer (by passing an extent_buffer to the convert function)
Multipart features are supported
Coordinate sequences with Z values are supported, but Z values are ignored as they are not supported in Mapserver inline features.
As a MapServer LAYER only supports a single geometry type, all features in the GeoJSON file should also be of the same type (however a mix of multipart and non-multipart features is supported e.g. LineString and MultiLineString)
Nested JSON properties are not supported:
"properties": { "prop0": "value0", "prop1": { "this": "that" } }
Will become:
ITEMS "value0;{u'this': u'that'}"
Releases
0.4 (09/02/2020)
Automated Windows testing
Automated release process
Set geojson dependency version
Fix failing tests due to precision issuee differences between py2 and py3
Use integers for layer EXTENT where possible e.g. 5 instead of 5.0
0.3 (29/08/2018)
Add support for MultiPoint, MultiLineString, and MultiPolygon
Allow coordinates with Z values (previously these would crash the script)
Updated README
0.2 (15/02/2018)
Unicode support
0.1 (06/02/2018)
Initial release