Skip to content

Instantly share code, notes, and snippets.

@rcoup
Created January 9, 2014 01:31
Show Gist options
  • Save rcoup/8327868 to your computer and use it in GitHub Desktop.
Save rcoup/8327868 to your computer and use it in GitHub Desktop.
http://jira.codehaus.org/browse/GEOS-6187 - comparing Geoserver 2.3.5 with 2.4.3 for various GML/WFS versions, server/client-specified maxFeatures, resultTypes, and hitsIgnoreMaxFeatures settings (2.4).
GEOSERVER 2.3.5
GML2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=10 actual=0 numberMatched=None
GML2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=5 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
GML2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.1.1 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=10 actual=10 numberMatched=None
gml/3.1.1 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=5 actual=5 numberMatched=None
gml/3.1.1 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=10 numberMatched=None
gml/3.1.1 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=5 numberMatched=None
gml/3.1.1 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=10 actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=5 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.1.1 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 2.0.0 limit=[10]: numberReturned=10 numberOfFeatures=None actual=10 numberMatched=90
gml/3.2 results 2.0.0 limit=5 : numberReturned=5 numberOfFeatures=None actual=5 numberMatched=90
gml/3.2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=10 actual=0 numberMatched=None
gml/3.2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=5 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
GEOSERVER 2.4.3 - wfs.hitsIgnoreMaxFeatures=1
GML2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
GML2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
GML2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
gml/3.1.1 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=10 numberMatched=None
gml/3.1.1 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=5 numberMatched=None
gml/3.1.1 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=10 numberMatched=None
gml/3.1.1 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=5 numberMatched=None
gml/3.1.1 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
gml/3.1.1 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
gml/3.2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 2.0.0 limit=[10]: numberReturned=90 numberOfFeatures=None actual=10 numberMatched=90
gml/3.2 results 2.0.0 limit=5 : numberReturned=90 numberOfFeatures=None actual=5 numberMatched=90
gml/3.2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
gml/3.2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=-1
GEOSERVER 2.4.3 - wfs.hitsIgnoreMaxFeatures=0
GML2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
GML2 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
GML2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
GML2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
GML2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
GML2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.1.1 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=10 numberMatched=None
gml/3.1.1 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=5 numberMatched=None
gml/3.1.1 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=10 numberMatched=None
gml/3.1.1 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=5 numberMatched=None
gml/3.1.1 results 2.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 results 2.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.1.1 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.1.1 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.1.1 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.2 results 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.1.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=None actual=10 numberMatched=None
gml/3.2 results 1.0.0 limit=5 : numberReturned=None numberOfFeatures=None actual=5 numberMatched=None
gml/3.2 results 2.0.0 limit=[10]: numberReturned=90 numberOfFeatures=None actual=10 numberMatched=90
gml/3.2 results 2.0.0 limit=5 : numberReturned=90 numberOfFeatures=None actual=5 numberMatched=90
gml/3.2 hits 1.1.0 limit=[10]: numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.2 hits 1.1.0 limit=5 : numberReturned=None numberOfFeatures=90 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=[10]: numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 1.0.0 limit=5 : numberReturned=None numberOfFeatures=0 actual=0 numberMatched=None
gml/3.2 hits 2.0.0 limit=[10]: numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
gml/3.2 hits 2.0.0 limit=5 : numberReturned=0 numberOfFeatures=None actual=0 numberMatched=90
#!/usr/bin/env python
import re
import sys
import requests
URL = 'http://localhost:8080/geoserver/sf/ows?service=WFS&request=GetFeature&typeName=sf:bugsites'
FEATURE_ELEMENT = r'<sf:bugsites\b'
FORMATS = [
'GML2',
'text/xml;%20subtype=gml/3.1.1',
'text/xml;%20subtype=gml/3.2',
]
COUNT_FIELDS = ['numberOfFeatures', 'numberMatched', 'numberReturned']
VERSIONS = {
'1.0.0': 'maxFeatures',
'1.1.0': 'maxFeatures',
'2.0.0': 'count',
}
SERVER_MAX_FEATURES = 10 # set in wfs.xml
for hits_ignore_max_features in [False, True]:
raw_input("\nSET SERVER wfs.hitsIgnoreMaxFeatures=%s\n" % hits_ignore_max_features)
for output_format in FORMATS:
for result_type in [None, 'hits']:
for version, limit_param in VERSIONS.items():
for max_features in [None, '5']:
url = URL \
+ "&version=%s" % version \
+ "&outputFormat=%s" % output_format
if result_type:
url += '&resultType=%s' % result_type
if max_features:
url += '&%s=%s' % (limit_param, max_features)
print "%-9s %-7s %s limit=%-4s:" % (output_format.split('=')[-1], result_type or 'results', version, max_features or '[%d]' % SERVER_MAX_FEATURES,),
r = requests.get(url)
counts = {
'actual': len(re.findall(FEATURE_ELEMENT, r.text)),
}
for field in COUNT_FIELDS:
m = re.search(r'%s="(.+?)"' % field, r.text)
if not m:
counts[field] = None
else:
counts[field] = m.group(1)
print ' '.join('%s=%-4s' % (f, v) for f, v in counts.items())
if version == '2.0.0' and output_format == 'text/xml;%20subtype=gml/3.1.1':
# https://jira.codehaus.org/browse/GEOS-6134
pass
elif not result_type and counts['actual'] == 0:
print "\t%s" % url
elif result_type and not len(filter(lambda x: x[0] != 'actual' and x[1] is not None, counts.items())):
print "\t%s" % url
@rcoup
Copy link
Author

rcoup commented Jan 9, 2014

  • default binary downloads of the releases
  • wfs.citeCompliant=false
  • server wfs.maxFeatures is 10 for everything
  • the layer has 90 features in it
  • actual is the number of feature elements in the GML FeatureCollection, the other counts are the FeatureCollection attributes (obviously presence of numberOfFeatures vs numberMatched/numberReturned depends on WFS & GML versions)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment