- Added
PROPERTYNAME
support - Added rendering of
<wfs:truncatedResponse>
when errors happen during output streaming. - Fixed accessing a feature with 3 geometry fields (fixed our PostgreSQL
ST_Union
syntax). - Make sure Django 4.1+ won't do double prefetches on relations that we prefetch.
- Hide the erroneous output formats in
GetCapabilities
that are supported for FME. - Bump requirements to non-vulnerable versions (of lxml and orjson).
- Improved documentation.
- Cleaned up code, removing some internal methods.
- Cleaned up leftover Python 3.7 compat code.
- Fix 500 error when
model_attribute
points to a dotted-path. PR thanks to sposs. - Updated pre-commit configuration and test matrix.
- Added
GISSERVER_COUNT_NUMBER_MATCHED
setting to allow disabling "numberReturned" counting. This will avoid an expensive PostgreSQL COUNT query, speeding up returning large sets. - Added basic support for array fields in
GetPropertyValue
. - Optimized GML rendering performance (around 15-20% faster on large datasets).
- Optimized overall rendering performance, which improved GeoJSON/CSV output too.
- Developers: updated pre-commit hooks
- Cleaned up leftover Python 3.7 compat code.
- Django 5 support added.
We would like to thank the following contributors for their work on this release.
- WFS endpoints now accept a GML version number in their OUTPUTFORMAT.
- Workaround for FME doing a DescribeFeatureType with the wrong outputformat.
- Dropped support for Django versions < 3.2 and Python < 3.9.
- Minor optimizations.
- CRS parsing no longer raises SyntaxErrors.
- Fixed type assertion when
django.contrib.postgres
was not installed.
- Added "geojson" as output format alias in
GetCapabilities
for ESRI ArcGIS online.
- Optimized response writing, buffering provement gave ~12-15% speedup.
- Optimized GML response, reduced response size by ~9% by removing whitespace.
- Fixed regression for auto-correcting xmlns for
<Filter>
tags that have leading whitespace. - Fixed weird crashes when geometry field is not provided.
- Simplify
FeatureType.geometry_field
logic.
- Added support for
maxOccurs=unbounded
elements (M2M, reverse foreign key, array fields). - Added support for filtering on M2M, reverse foreign key and array fields.
- Added
field(..., xsd_class=...)
parameter to simplify overridingFeatureField.xsd_element_class
. - Added
xsd_base_type
parameter toComplexFeatureField
to allow overriding it. - Added
GISSERVER_DB_PRECISION
setting and made precision consistent between output formats. - Added
.prefetch_related()
support to large GeoJSON responses (using prefetching on iterator chunks). - Added
FeatureType.filter_related_queryset()
that allows adjusting all retrieved querysets. - Using
.only()
to reduce transferred data to the actual fields. - Optimized large responses through the chunked-iterator and
.only()
usage (seen 2x improvement on GeoJSON on some large datasets). - Improved
<fes:Filter>
error handling, avoid internal server errors for missing XML child elements. - Improved GeoJSON content type in HTTP responses, using
application/geo+json
instead ofapplication/json
. - Fixed next/previous pagination links, to preserve lowercase querystring fields that project-specific code might use.
- Fixed preserving extra querystring fields in HTML pages.
- Fixed integration with custom fields, using
value_from_object()
instead ofgetattr()
to retrieve field values. - Fixed calculating extent over feature with mixed geometry types.
- Various code cleanups.
- Dropped Python 3.6 support.
- Included Django 3.2 in test matrix.
- Fixed preserving axis orientation by passing Incoming SRS data is directly to GDAL.
- Fixed doc typoo's
- Updated pre-commit hooks.
- Drop universal wheel declaration (Python 2 is no longer supported)
- Fixed double
>
sign in<Filter xml..>>
code when namespaces were auto-corrected. - Fixed basic
<Beyond>
support for distance queries. - Fixed parameter name for
round()
function.
- Improve HTML page with "Using This WFS" section.
- Fixed Django 3.1 compatibility.
- Improved error message for
<fes:PropertyIsLike>
operator when comparing against a<fes:ValueReference>
instead of<fes:Literal>
.
- Added browsable HTML views for WFS views, which can be extended/overwritten.
- Added content-disposition header to export formats, to have a proper filename.
- Added "abstract" property to field classes to provide a description.
- Consider
?SERVICE=WFS
as default forWFSView
views.
- Added
FeatureType.show_name_field
to show/hide<gml:name>
and GeoJSONgeometry_name
. - Added
FeatureType.xml_prefix
so the outputted namespace prefix can be changed from "app:" to anything else. - Added
FeatureType.xsd_type_class
so this can be overwritten easier. - Added
XsdNode.to_python()
to support input data parsing. - Added
GISSERVER_SUPPORTED_CRS_ONLY
to accept only the listed coordinate systems. - Rename
is_gml
->is_geometry
. - Fixes for CITE compliance testing for WFS Basic conformance:
- Added
ImplementsBasicWFS
flag in capabilities document. - Added attribute resolving, like
@gml:id
in XPath. - Added querying support for the
gml:name
field. - Added support to fetch multiple RESOURCEID objects in a single request.
- Fixed unwanted exception when the RESOURCEID format is invalid, empty results are returned instead.
- Fixed locator for RESOURCEID errors.
- Fixed filter type exception, now
OperationParsingFailed
instead ofInvalidParameterValue
. - Fixed datetime and boolean comparisons.
- Fixed exception message when
<PropertyIsLessThanOrEqualTo>
receives an GML object. - Fixed exception message for bad SRID's.
- Added
- Internal code reorganizations.
- Fixed
GetPropertyValue
calls for non-db optimized rendering.
- Added support for nested, flattened fields.
- Added support for dotted-names in field names.
- Added support for dotted-names in
model_attribute
. - Added
GISSERVER_WRAP_FILTER_DB_ERRORS
setting for debugging filter errors. - Added API's for easier subclassing:
FeatureField.xsd_element_class
.FeatureField.parent
for elements in a complex feature.gisserver.features.get_basic_field_type()
.
- Fixed CSV output to render datetimes as UTC, identical to GeoJSON
- Fixed bugs found by CITE compliance testing:
- Fixed support for LIKE operators on string-based foreign keys.
- Fixed
<fes:PropertyIsLike>
on numeric values, when the field is a string. - Fixed comparison of
<fes:PropertyIs..>
when the field name and value are reversed.
- Improved error messages when using invalid comparison operators.
- Optimize feature retrieval, only fetch the actual fields being displayed.
- Compactified XML output headers.
- Added field renaming support with
field(..., model_attribute=...)
. - Added support for WFS 1 parameters TYPENAME and MAXFEATURES.
- Improved error handling for FES filters with invalid comparisons.
- Fixed GeoJSON support for Decimal/gettext_lazy values.
- Fixes for CITE compliance testing for WFS Basic conformance:
- Handle
NAMESPACES
parameter. - Fix missing "application/gml+xml" output format for
GetFeature
. - Fix namespace prefix support in filters (by stripping them).
- Fix support for
<fes:BBOX>
with a single operand. - Fix
DescribeStoredQueries
to show the actual requested queries. - Fix
DescribeFeatureType
compliance testing by supporting the WFS 1 TYPENAME parameter. - Fix
GetFeatureById
response, which missed an xmlns:xsi to parse responses with "xsi:nil" values. - Fix
GetFeatureById
to return a 404 instead of 400 for any ID syntax, including unexpected formats. - Fix
GetCapabilities
by exposing "resolve=local" parameter. - Fix exposed WFS capabilities to pass cite WFS Simple conformance
- Handle
- Fixed SORTBY parameter to handle renamed fields.
- Added
GISSERVER_CAPABILITIES_BOUNDING_BOX
setting. - Added
PropertyIsNull
support (though currently identical toPropertyIsNil
). - Fixed
DescribeFeatureType
to return all types when TYPENAMES is not provided. - Advertise
ImplementsMinimumXPath
inGetCapabilities
for cite testing (other servers also do this while being incomplete).
- Improve XPath matching support, allow "app:" prefix and root elements.
- Refactored
FeatureType.resolve_element()
to return anXPathMatch
object
- Added unpaginated GeoJSON support (performance is good enough).
- Added basic support for non-namespaced
FILTER
queries, andPropertyName
tags (though being WFS1 attributes, clients still use them). - Added extra strict check that
ValueReference
/Literal
/ResourceId
nodes don't have child nodes. - Fixed allowing filtering on unknown or undefined fields (XPaths are now resolved to known elements).
- Optimized results streaming by automatically using a queryset-iterator if possible.
- Optimized GeoJSON output by no longer selecting the other geometry fields.
- Added shortcut properties to
XsdComplexType
:gml_elements
andcomplex_elements
.
- Added preliminary support to render complex field types (e.g. relations).
- Added
FeatureType.check_permissions()
hook to allow permission checking by subclasses. - Added
WFSMethod.validate()
hook that allows request validation. - Added CSV output format support.
- Added infinite pagination support.
- Added pagination size settings:
GISSERVER_DEFAULT_MAX_PAGE_SIZE
,GISSERVER_CSV_MAX_PAGE_SIZE
. - Added internal
XsdComplexType
class to support complex data schema definitions. - Replaced many
FeatureType
methods to create a stable fields definition API. - Replaced
FeatureType.fields_with_type
withFeatureType.xsd_type
that returns anXsdComplexType
. - Optimized
GetFeature
responses by omitting aCOUNT
query for the last page. - Optimized
GetFeature
responses by omitting the binary geometry data for DB-optimized rendering. - Changed default page size /
DefaultMaxFeatures
to 5000. - Fixed detecting
AutoField
as integer for Django 2.2. - Fixed fallback datatype for unknown model fields (should be
xsd:anyType
, notxsd:any
which is an element). - Fixed fallback datatype for unknown geometry fields (should be
gml:GeometryPropertyType
, not gml:AbstractGeometryType). - Fixed error messages for currently unsupported multiple-query KVP requests (e.g.
TYPENAMES=(A)(B)
). - Fixed raising
InvalidParameterValue
for runtime errors in a customWFSView.get_feature_types()
implementation. - Enforce using keyword-arguments on
FeatureType(...)
- Internal code reorganizations/cleanups.
- Added database-based rendering for GML/GeoJSON (disable with
GISSERVER_USE_DB_RENDERING=False
). - Added
has_custom_backend
to CRS class. - Improved rendering performance for python-based GML output.
- Improved
DescribeFeatureType
to show which geometry type is used in a geometry field. - Fixed XML output error for pagination.
- Internal code reorganizations/cleanups.
- Added
RESOURCEID
parameter support. - Added
GetFeatureById
support. - Added basic support for defining stored procedures.
- Added GML rendering for Polygon / MultiGeometry / MultiLineString / MultiPoint / LineString / LinearRing data.
- Fix
<fes:ResourceId>
parsing and type selection. - Fix output errors because of
AttributeError
inForeignKey
fields. - Fix
DateTimeField
being represented by anxs:date
instead ofxs:dateTime
. - Internal code reorganizations/cleanups.
- Added
GetPropertyValue
support. - Added empty
ListStoredQueries
/DescribeStoredQueries
operations nearing Simple WFS conformance. - Added a lot of built-in FES functions.
- Added
FeatureType(fields=...)
to limit which fields are exposed (can also use__all__
). - Backwards incompatible: by default no fields are exposed, unless they are mentioned.
- Added pagination links to GeoJSON response, based on WFS 3.0 DRAFT.
- Changed
max_page_size
to reasonable 1000 per page. - Fixed
SRSNAME
support on GeoJSON output to select the coordinate reference system. - Fixed
ResourceId
to extract the ID from the typename.id value. - Improved performance of output streaming (buffering output, reducing yield).
- Removed lxml dependency, as it's only used for tests.
- Internal code reorganizations/cleanups.
- Added response streaming for GML/GeoJSON.
- Added
OutputFormat(..., renderer_class=...)
API to integrate custom output formats. - Added
SORTBY
parameter support. - Fixed mentioning GML 3.2 instead of 3.1.1 in
GetCapabilities
. - Fixed exposing FES filter capabilities for
GetCapabilities
request. - Fixed error reporting for filter XML that were omitted.
- Fixed BBOX and FILTER to be mutually exclusive, as the spec requests.
- Fixed ISO formatting for date/datetime/time.
- Reverted BBOX operator to intersects (is more correct).
- Internal code reorganizations.
- Added FES filtering support.
- Changed BBOX lookup operator to bboverlaps (uses PostGIS && operator).
- Improve field type reporting in DescribeFeatureType.
- Added
CRS.from_srid()
function - Added
CRS.apply_to()
API for geometry transformation. - Added
CRS.backend
setting, which allows assigning a PROJ.4 string to the CRS object. - Added support for other geometry types besides
Point
(affectedBoundingBox.extend_to_geometry()
and GeoJSON output). - Added Python 3.6 support.
- Improved repeated geometry transformation speed, by using/caching
CoordTransform
objects. - Fixed calling
BoundingBox.extend_to_geometry()
when crs parameter is not set. - Changed
FeatureType
parameter frommodel
toqueryset
. - Replaced
ujson
withorjson
for faster and better decimal support.
-
First basic release that works in QGis.
-
Features:
-
WFS
GetCapabilities
-
WFS
DescribeFeatureType
-
WFS
GetFeature
with bbox and pagination support.