Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

gis: Added preliminary spatial backend for Oracle; added GEOS routine…

… `fromfile`.

git-svn-id: http://code.djangoproject.com/svn/django/branches/gis@6524 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information...
commit ba9fa9844c7996bf1362b9769c2c2fecf760a039 1 parent 189335a
@jbronn jbronn authored
Showing with 595 additions and 75 deletions.
  1. +9 −1 django/contrib/gis/db/backend/__init__.py
  2. +12 −0 django/contrib/gis/db/backend/oracle/__init__.py
  3. +21 −0 django/contrib/gis/db/backend/oracle/adaptor.py
  4. +8 −0 django/contrib/gis/db/backend/oracle/creation.py
  5. +159 −0 django/contrib/gis/db/backend/oracle/field.py
  6. +45 −0 django/contrib/gis/db/backend/oracle/models.py
  7. +78 −0 django/contrib/gis/db/backend/oracle/query.py
  8. +1 −1  django/contrib/gis/db/backend/postgis/field.py
  9. +2 −2 django/contrib/gis/db/backend/postgis/models.py
  10. +2 −2 django/contrib/gis/db/backend/postgis/query.py
  11. +88 −17 django/contrib/gis/db/models/query.py
  12. +14 −1 django/contrib/gis/geos/__init__.py
  13. +2 −0  django/contrib/gis/models.py
  14. +1 −0  django/contrib/gis/tests/geoapp/sql/co.wkt
  15. +1 −0  django/contrib/gis/tests/geoapp/sql/ks.wkt
  16. +1 −0  django/contrib/gis/tests/geoapp/sql/nz.wkt
  17. +1 −0  django/contrib/gis/tests/geoapp/sql/tx.wkt
  18. +77 −26 django/contrib/gis/tests/geoapp/tests.py
  19. +22 −10 django/contrib/gis/tests/test_spatialrefsys.py
  20. +20 −0 django/contrib/gis/tests/utils.py
  21. +2 −1  django/contrib/gis/utils/__init__.py
  22. +14 −10 django/contrib/gis/utils/layermapping.py
  23. +13 −3 django/db/backends/oracle/base.py
  24. +2 −1  django/db/models/base.py
View
10 django/contrib/gis/db/backend/__init__.py
@@ -35,8 +35,16 @@
PostGISField as GeoBackendField, POSTGIS_TERMS as GIS_TERMS, \
create_spatial_db, get_geo_where_clause, gqn, \
ASGML, ASKML, GEOM_SELECT, TRANSFORM, UNION
+ SPATIAL_BACKEND = 'postgis'
+elif settings.DATABASE_ENGINE == 'oracle':
+ from django.contrib.gis.db.backend.oracle import \
+ OracleSpatialField as GeoBackendField, \
+ ORACLE_SPATIAL_TERMS as GIS_TERMS, \
+ create_spatial_db, get_geo_where_clause, gqn, \
+ ASGML, GEOM_SELECT, TRANSFORM, UNION
+ SPATIAL_BACKEND = 'oracle'
else:
- raise NotImplementedError('No Geographic Backend exists for %s' % settings.DATABASE_NAME)
+ raise NotImplementedError('No Geographic Backend exists for %s' % settings.DATABASE_ENGINE)
def geo_quotename(value):
"""
View
12 django/contrib/gis/db/backend/oracle/__init__.py
@@ -0,0 +1,12 @@
+"""
+ The Oracle spatial database backend module.
+
+ Please note that WKT support is broken on the XE version, and this will
+ not work.
+"""
+from django.contrib.gis.db.backend.oracle.creation import create_spatial_db
+from django.contrib.gis.db.backend.oracle.field import OracleSpatialField, gqn
+from django.contrib.gis.db.backend.oracle.query import \
+ get_geo_where_clause, ORACLE_SPATIAL_TERMS, \
+ ASGML, GEOM_SELECT, TRANSFORM, UNION
+
View
21 django/contrib/gis/db/backend/oracle/adaptor.py
@@ -0,0 +1,21 @@
+"""
+ This object provides the database adaptor for Oracle geometries.
+"""
+from cx_Oracle import CLOB
+
+class OracleSpatialAdaptor(object):
+ def __init__(self, geom):
+ "Initializes only on the geometry object."
+ self.wkt = geom.wkt
+
+ def __str__(self):
+ "WKT is used for the substitution value of the geometry."
+ return self.wkt
+
+ def oracle_type(self):
+ """
+ The parameter type is a CLOB because no string (VARCHAR2) greater
+ than 4000 characters will be accepted through the Oracle database
+ API and/or SQL*Plus.
+ """
+ return CLOB
View
8 django/contrib/gis/db/backend/oracle/creation.py
@@ -0,0 +1,8 @@
+from django.db.backends.oracle.creation import create_test_db
+
+def create_spatial_db(test=True, verbosity=1, autoclobber=False):
+ "A wrapper over the Oracle `create_test_db` routine."
+ if not test: raise NotImplementedError('This uses `create_test_db` from db/backends/oracle/creation.py')
+ from django.conf import settings
+ from django.db import connection
+ create_test_db(settings, connection, verbosity, autoclobber)
View
159 django/contrib/gis/db/backend/oracle/field.py
@@ -0,0 +1,159 @@
+import re
+from types import StringType, UnicodeType
+from django.db import connection
+from django.db.backends.util import truncate_name
+from django.db.models.fields import Field # Django base Field class
+from django.contrib.gis.geos import GEOSGeometry
+from django.contrib.gis.db.backend.util import GeoFieldSQL
+from django.contrib.gis.db.backend.oracle.adaptor import OracleSpatialAdaptor
+from django.contrib.gis.db.backend.oracle.query import ORACLE_SPATIAL_TERMS, TRANSFORM
+
+# Quotename & geographic quotename, respectively.
+qn = connection.ops.quote_name
+def gqn(value):
+ if isinstance(value, UnicodeType): value = value.encode('ascii')
+ return "'%s'" % value
+
+class OracleSpatialField(Field):
+ """
+ The backend-specific geographic field for Oracle Spatial.
+ """
+
+ empty_strings_allowed = False
+
+ def __init__(self, extent=(-180.0, -90.0, 180.0, 90.0), tolerance=0.00005, **kwargs):
+ """
+ Oracle Spatial backend needs to have the extent -- for projected coordinate
+ systems _you must define the extent manually_, since the coordinates are
+ for geodetic systems. The `tolerance` keyword specifies the tolerance
+ for error (in meters).
+ """
+ # Oracle Spatial specific keyword arguments.
+ self._extent = extent
+ self._tolerance = tolerance
+ # Calling the Django field initialization.
+ super(OracleSpatialField, self).__init__(**kwargs)
+
+ def _add_geom(self, style, db_table):
+ """
+ Adds this geometry column into the Oracle USER_SDO_GEOM_METADATA
+ table.
+ """
+
+ # Checking the dimensions.
+ # TODO: Add support for 3D geometries.
+ if self._dim != 2:
+ raise Exception('3D geometries not yet supported on Oracle Spatial backend.')
+
+ # Constructing the SQL that will be used to insert information about
+ # the geometry column into the USER_GSDO_GEOM_METADATA table.
+ meta_sql = style.SQL_KEYWORD('INSERT INTO ') + \
+ style.SQL_TABLE('USER_SDO_GEOM_METADATA') + \
+ ' (%s, %s, %s, %s)\n ' % tuple(map(qn, ['TABLE_NAME', 'COLUMN_NAME', 'DIMINFO', 'SRID'])) + \
+ style.SQL_KEYWORD(' VALUES ') + '(\n ' + \
+ style.SQL_TABLE(gqn(db_table)) + ',\n ' + \
+ style.SQL_FIELD(gqn(self.column)) + ',\n ' + \
+ style.SQL_KEYWORD("MDSYS.SDO_DIM_ARRAY") + '(\n ' + \
+ style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") + \
+ ("('LONG', %s, %s, %s),\n " % (self._extent[0], self._extent[2], self._tolerance)) + \
+ style.SQL_KEYWORD("MDSYS.SDO_DIM_ELEMENT") + \
+ ("('LAT', %s, %s, %s)\n ),\n" % (self._extent[1], self._extent[3], self._tolerance)) + \
+ ' %s\n );' % self._srid
+ return meta_sql
+
+ def _geom_index(self, style, db_table):
+ "Creates an Oracle Geometry index (R-tree) for this geometry field."
+
+ # Getting the index name, Oracle doesn't allow object
+ # names > 30 characters.
+ idx_name = truncate_name('%s_%s_id' % (db_table, self.column), 30)
+
+ sql = style.SQL_KEYWORD('CREATE INDEX ') + \
+ style.SQL_TABLE(qn(idx_name)) + \
+ style.SQL_KEYWORD(' ON ') + \
+ style.SQL_TABLE(qn(db_table)) + '(' + \
+ style.SQL_FIELD(qn(self.column)) + ') ' + \
+ style.SQL_KEYWORD('INDEXTYPE IS ') + \
+ style.SQL_TABLE('MDSYS.SPATIAL_INDEX') + ';'
+ return sql
+
+ def _post_create_sql(self, style, db_table):
+ """
+ Returns SQL that will be executed after the model has been
+ created.
+ """
+ # Getting the meta geometry information.
+ post_sql = self._add_geom(style, db_table)
+
+ # Getting the geometric index for this Geometry column.
+ if self._index:
+ return (post_sql, self._geom_index(style, db_table))
+ else:
+ return (post_sql,)
+
+ def db_type(self):
+ "The Oracle geometric data type is MDSYS.SDO_GEOMETRY."
+ return 'MDSYS.SDO_GEOMETRY'
+
+ def get_db_prep_lookup(self, lookup_type, value):
+ """
+ Returns field's value prepared for database lookup, accepts WKT and
+ GEOS Geometries for the value.
+ """
+ if lookup_type in ORACLE_SPATIAL_TERMS:
+ # special case for isnull lookup
+ if lookup_type == 'isnull': return GeoFieldSQL([], [])
+
+ # When the input is not a GEOS geometry, attempt to construct one
+ # from the given string input.
+ if isinstance(value, GEOSGeometry):
+ pass
+ elif isinstance(value, (StringType, UnicodeType)):
+ try:
+ value = GEOSGeometry(value)
+ except GEOSException:
+ raise TypeError("Could not create geometry from lookup value: %s" % str(value))
+ else:
+ raise TypeError('Cannot use parameter of %s type as lookup parameter.' % type(value))
+
+ # Getting the SRID of the geometry, or defaulting to that of the field if
+ # it is None.
+ if value.srid is None: srid = self._srid
+ else: srid = value.srid
+
+ # The adaptor will be used by psycopg2 for quoting the WKT.
+ adapt = OracleSpatialAdaptor(value)
+ if srid != self._srid:
+ # Adding the necessary string substitutions and parameters
+ # to perform a geometry transformation.
+ return GeoFieldSQL(['%s(SDO_GEOMETRY(%%s, %s), %%s)' % (TRANSFORM, srid)],
+ [adapt, self._srid])
+ else:
+ return GeoFieldSQL(['SDO_GEOMETRY(%%s, %s)' % srid], [adapt])
+
+ else:
+ raise TypeError("Field has invalid lookup: %s" % lookup_type)
+
+ def get_db_prep_save(self, value):
+ "Prepares the value for saving in the database."
+ if not bool(value):
+ # Return an empty string for NULL -- but this doesn't work yet.
+ return ''
+ if isinstance(value, GEOSGeometry):
+ return OracleSpatialAdaptor(value)
+ else:
+ raise TypeError('Geometry Proxy should only return GEOSGeometry objects.')
+
+ def get_placeholder(self, value):
+ """
+ Provides a proper substitution value for Geometries that are not in the
+ SRID of the field. Specifically, this routine will substitute in the
+ SDO_CS.TRANSFORM() function call.
+ """
+ if isinstance(value, GEOSGeometry) and value.srid != self._srid:
+ # Adding Transform() to the SQL placeholder.
+ return '%s(SDO_GEOMETRY(%%s, %s), %s)' % (TRANSFORM, value.srid, self._srid)
+ elif value is None:
+ return '%s'
+ else:
+ return 'SDO_GEOMETRY(%%s, %s)' % self._srid
View
45 django/contrib/gis/db/backend/oracle/models.py
@@ -0,0 +1,45 @@
+"""
+ The GeometryColumns and SpatialRefSys models for the Oracle spatial
+ backend.
+
+ It should be noted that Oracle Spatial does not have database tables
+ named according to the OGC standard, so the closest analogs are used.
+ For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns
+ model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model.
+"""
+from django.db import models
+from django.contrib.gis.models import SpatialRefSysMixin
+
+class GeometryColumns(models.Model):
+ "Maps to the Oracle USER_SDO_GEOM_METADATA table."
+ table_name = models.CharField(maxlength=32)
+ column_name = models.CharField(maxlength=1024)
+ srid = models.IntegerField(primary_key=True)
+ # TODO: Add support for `diminfo` column (type MDSYS.SDO_DIM_ARRAY).
+ class Meta:
+ db_table = 'USER_SDO_GEOM_METADATA'
+
+ @classmethod
+ def table_name_col(self):
+ return 'table_name'
+
+ def __unicode__(self):
+ return '%s - %s (SRID: %s)' % (self.table_name, self.column_name, self.srid)
+
+class SpatialRefSys(models.Model, SpatialRefSysMixin):
+ "Maps to the Oracle MDSYS.CS_SRS table."
+ cs_name = models.CharField(maxlength=68)
+ srid = models.IntegerField(primary_key=True)
+ auth_srid = models.IntegerField()
+ auth_name = models.CharField(maxlength=256)
+ wktext = models.CharField(maxlength=2046)
+ #cs_bounds = models.GeometryField()
+
+ class Meta:
+ # TODO: Figure out way to have this be MDSYS.CS_SRS without
+ # having django's quoting mess up the SQL.
+ db_table = 'CS_SRS'
+
+ @property
+ def wkt(self):
+ return self.wktext
View
78 django/contrib/gis/db/backend/oracle/query.py
@@ -0,0 +1,78 @@
+"""
+ This module contains the spatial lookup types, and the get_geo_where_clause()
+ routine for Oracle Spatial.
+"""
+from django.db import connection
+qn = connection.ops.quote_name
+
+ORACLE_GEOMETRY_FUNCTIONS = {
+ 'contains' : 'SDO_CONTAINS',
+ 'coveredby' : 'SDO_COVEREDBY',
+ 'covers' : 'SDO_COVERS',
+ 'disjoint' : 'SDO_DISJOINT',
+ 'dwithin' : ('SDO_WITHIN_DISTANCE', float),
+ 'intersects' : 'SDO_OVERLAPBDYINTERSECT', # TODO: Is this really the same as ST_Intersects()?
+ 'equals' : 'SDO_EQUAL',
+ 'exact' : 'SDO_EQUAL',
+ 'overlaps' : 'SDO_OVERLAPS',
+ 'same_as' : 'SDO_EQUAL',
+ #'relate' : ('SDO_RELATE', str), # Oracle uses a different syntax, e.g., 'mask=inside+touch'
+ 'touches' : 'SDO_TOUCH',
+ 'within' : 'SDO_INSIDE',
+ }
+
+# This lookup type does not require a mapping.
+MISC_TERMS = ['isnull']
+
+# Assacceptable lookup types for Oracle spatial.
+ORACLE_SPATIAL_TERMS = ORACLE_GEOMETRY_FUNCTIONS.keys()
+ORACLE_SPATIAL_TERMS += MISC_TERMS
+ORACLE_SPATIAL_TERMS = tuple(ORACLE_SPATIAL_TERMS) # Making immutable
+
+def get_geo_where_clause(lookup_type, table_prefix, field_name, value):
+ "Returns the SQL WHERE clause for use in Oracle spatial SQL construction."
+ if table_prefix.endswith('.'):
+ table_prefix = qn(table_prefix[:-1])+'.'
+ field_name = qn(field_name)
+
+ # See if a PostGIS Geometry function matches the lookup type next
+ lookup_info = ORACLE_GEOMETRY_FUNCTIONS.get(lookup_type, False)
+ if lookup_info:
+ # Lookup types that are tuples take tuple arguments, e.g., 'relate' and
+ # 'dwithin' lookup types.
+ if isinstance(lookup_info, tuple):
+ # First element of tuple is lookup type, second element is the type
+ # of the expected argument (e.g., str, float)
+ func, arg_type = lookup_info
+
+ # Ensuring that a tuple _value_ was passed in from the user
+ if not isinstance(value, tuple) or len(value) != 2:
+ raise TypeError('2-element tuple required for %s lookup type.' % lookup_type)
+
+ # Ensuring the argument type matches what we expect.
+ if not isinstance(value[1], arg_type):
+ raise TypeError('Argument type should be %s, got %s instead.' % (arg_type, type(value[1])))
+
+ if func == 'dwithin':
+ # TODO: test and consider adding different distance options.
+ return "%s(%s, %%s, 'distance=%s')" % (func, table_prefix + field_name, value[1])
+ else:
+ return "%s(%s, %%s, %%s) = 'TRUE'" % (func, table_prefix + field_name)
+ else:
+ # Returning the SQL necessary for the geometry function call. For example:
+ # SDO_CONTAINS("geoapp_country"."poly", SDO_GEOMTRY('POINT(5 23)', 4326)) = 'TRUE'
+ return "%s(%s, %%s) = 'TRUE'" % (lookup_info, table_prefix + field_name)
+
+ # Handling 'isnull' lookup type
+ if lookup_type == 'isnull':
+ return "%s%s IS %sNULL" % (table_prefix, field_name, (not value and 'NOT ' or ''))
+
+ raise TypeError("Got invalid lookup_type: %s" % repr(lookup_type))
+
+ASGML = 'SDO_UTIL.TO_GMLGEOMETRY'
+UNION = 'SDO_AGGR_UNION'
+TRANSFORM = 'SDO_CS.TRANSFORM'
+
+# Want to get SDO Geometries as WKT (much easier to instantiate GEOS proxies
+# from WKT than SDO_GEOMETRY(...) strings ;)
+GEOM_SELECT = 'SDO_UTIL.TO_WKTGEOMETRY(%s)'
View
2  django/contrib/gis/db/backend/postgis/field.py
@@ -119,7 +119,7 @@ def get_db_prep_lookup(self, lookup_type, value):
# Adding the necessary string substitutions and parameters
# to perform a geometry transformation.
return GeoFieldSQL(['%s(%%s,%%s)' % TRANSFORM],
- [adapt, self._srid])
+ [adapt, self._srid])
else:
return GeoFieldSQL(['%s'], [adapt])
else:
View
4 django/contrib/gis/db/backend/postgis/models.py
@@ -26,8 +26,8 @@ class Meta:
db_table = 'geometry_columns'
@classmethod
- def table_name(self):
- "Class method for returning the table name field for this model."
+ def table_name_col(self):
+ "Class method for returning the table name column for this model."
return 'f_table_name'
def __unicode__(self):
View
4 django/contrib/gis/db/backend/postgis/query.py
@@ -105,8 +105,8 @@
# These are the PostGIS-customized QUERY_TERMS -- a list of the lookup types
# allowed for geographic queries.
-POSTGIS_TERMS = list(POSTGIS_OPERATORS.keys()) # Getting the operators first
-POSTGIS_TERMS += list(POSTGIS_GEOMETRY_FUNCTIONS.keys()) # Adding on the Geometry Functions
+POSTGIS_TERMS = POSTGIS_OPERATORS.keys() # Getting the operators first
+POSTGIS_TERMS += POSTGIS_GEOMETRY_FUNCTIONS.keys() # Adding on the Geometry Functions
POSTGIS_TERMS += MISC_TERMS # Adding any other miscellaneous terms (e.g., 'isnull')
POSTGIS_TERMS = tuple(POSTGIS_TERMS) # Making immutable
View
105 django/contrib/gis/db/models/query.py
@@ -6,7 +6,7 @@
from django.utils.datastructures import SortedDict
from django.contrib.gis.db.models.fields import GeometryField
# parse_lookup depends on the spatial database backend.
-from django.contrib.gis.db.backend import parse_lookup, ASGML, ASKML, GEOM_SELECT, TRANSFORM, UNION
+from django.contrib.gis.db.backend import parse_lookup, ASGML, ASKML, GEOM_SELECT, SPATIAL_BACKEND, TRANSFORM, UNION
from django.contrib.gis.geos import GEOSGeometry
class GeoQ(Q):
@@ -51,7 +51,7 @@ def _filter_or_exclude(self, mapper, *args, **kwargs):
clone._filters = clone._filters & reduce(operator.and_, map(mapper, args))
return clone
- def _get_sql_clause(self):
+ def _get_sql_clause(self, get_full_query=False):
qn = connection.ops.quote_name
opts = self.model._meta
@@ -147,12 +147,61 @@ def _get_sql_clause(self):
sql.append("ORDER BY " + ", ".join(order_by))
# LIMIT and OFFSET clauses
- if self._limit is not None:
- sql.append("%s " % connection.ops.limit_offset_sql(self._limit, self._offset))
+ if SPATIAL_BACKEND != 'oracle':
+ if self._limit is not None:
+ sql.append("%s " % connection.ops.limit_offset_sql(self._limit, self._offset))
+ else:
+ assert self._offset is None, "'offset' is not allowed without 'limit'"
+
+ return select, " ".join(sql), params
else:
- assert self._offset is None, "'offset' is not allowed without 'limit'"
+ # To support limits and offsets, Oracle requires some funky rewriting of an otherwise normal looking query.
+ select_clause = ",".join(select)
+ distinct = (self._distinct and "DISTINCT " or "")
+
+ if order_by:
+ order_by_clause = " OVER (ORDER BY %s )" % (", ".join(order_by))
+ else:
+ #Oracle's row_number() function always requires an order-by clause.
+ #So we need to define a default order-by, since none was provided.
+ order_by_clause = " OVER (ORDER BY %s.%s)" % \
+ (qn(opts.db_table), qn(opts.fields[0].db_column or opts.fields[0].column))
+ # limit_and_offset_clause
+ if self._limit is None:
+ assert self._offset is None, "'offset' is not allowed without 'limit'"
+
+ if self._offset is not None:
+ offset = int(self._offset)
+ else:
+ offset = 0
+ if self._limit is not None:
+ limit = int(self._limit)
+ else:
+ limit = None
+
+ limit_and_offset_clause = ''
+ if limit is not None:
+ limit_and_offset_clause = "WHERE rn > %s AND rn <= %s" % (offset, limit+offset)
+ elif offset:
+ limit_and_offset_clause = "WHERE rn > %s" % (offset)
+
+ if len(limit_and_offset_clause) > 0:
+ fmt = \
+ """SELECT * FROM
+ (SELECT %s%s,
+ ROW_NUMBER()%s AS rn
+ %s)
+ %s"""
+ full_query = fmt % (distinct, select_clause,
+ order_by_clause, ' '.join(sql).strip(),
+ limit_and_offset_clause)
+ else:
+ full_query = None
- return select, " ".join(sql), params
+ if get_full_query:
+ return select, " ".join(sql), params, full_query
+ else:
+ return select, " ".join(sql), params
def _clone(self, klass=None, **kwargs):
c = super(GeoQuerySet, self)._clone(klass, **kwargs)
@@ -192,8 +241,13 @@ def gml(self, field_name, precision=8, version=2):
if not field_col:
raise TypeError('GML output only available on GeometryFields')
- # Adding AsGML function call to SELECT part of the SQL.
- return self.extra(select={'gml':'%s(%s,%s,%s)' % (ASGML, field_col, precision, version)})
+ if SPATIAL_BACKEND == 'oracle':
+ gml_select = {'gml':'%s(%s)' % (ASGML, field_col)}
+ else:
+ gml_select = {'gml':'%s(%s,%s,%s)' % (ASGML, field_col, precision, version)}
+
+ # Adding GML function call to SELECT part of the SQL.
+ return self.extra(select=gml_select)
def kml(self, field_name, precision=8):
"""
@@ -227,15 +281,19 @@ def transform(self, field_name, srid=4326):
# Setting the key for the field's column with the custom SELECT SQL to
# override the geometry column returned from the database.
- self._custom_select[field.column] = \
- '(%s(%s, %s)) AS %s' % (TRANSFORM, col, srid,
- connection.ops.quote_name(field.column))
+ if SPATIAL_BACKEND == 'oracle':
+ custom_sel = '%s(%s, %s)' % (TRANSFORM, col, srid)
+ else:
+ custom_sel = '(%s(%s, %s)) AS %s' % \
+ (TRANSFORM, col, srid, connection.ops.quote_name(field.column))
+ self._custom_select[field.column] = custom_sel
return self._clone()
- def union(self, field_name):
+ def union(self, field_name, tolerance=0.0005):
"""
Performs an aggregate union on the given geometry field. Returns
- None if the GeoQuerySet is empty.
+ None if the GeoQuerySet is empty. The `tolerance` keyword is for
+ Oracle backends only.
"""
# Making sure backend supports the Union stored procedure
if not UNION:
@@ -254,11 +312,24 @@ def union(self, field_name):
# Replacing the select with a call to the ST_Union stored procedure
# on the geographic field column.
- union_sql = ('SELECT %s(%s)' % (UNION, field_col)) + sql
+ if SPATIAL_BACKEND == 'oracle':
+ union_sql = 'SELECT %s' % self._geo_fmt
+ union_sql = union_sql % ('%s(SDOAGGRTYPE(%s,%s))' % (UNION, field_col, tolerance))
+ union_sql += sql
+ else:
+ union_sql = ('SELECT %s(%s)' % (UNION, field_col)) + sql
+
+ # Getting a cursor, executing the query.
cursor = connection.cursor()
cursor.execute(union_sql, params)
- # Pulling the HEXEWKB from the returned cursor.
- hex = cursor.fetchone()[0]
- if hex: return GEOSGeometry(hex)
+ if SPATIAL_BACKEND == 'oracle':
+ # On Oracle have to read out WKT from CLOB first.
+ clob = cursor.fetchone()[0]
+ if clob: u = clob.read()
+ else: u = None
+ else:
+ u = cursor.fetchone()[0]
+
+ if u: return GEOSGeometry(u)
else: return None
View
15 django/contrib/gis/geos/__init__.py
@@ -29,12 +29,25 @@
http://zcologia.com/news/429/geometries-for-python-update/
"""
-from django.contrib.gis.geos.base import GEOSGeometry
+from django.contrib.gis.geos.base import GEOSGeometry, wkt_regex, hex_regex
from django.contrib.gis.geos.geometries import Point, LineString, LinearRing, Polygon, HAS_NUMPY
from django.contrib.gis.geos.collections import GeometryCollection, MultiPoint, MultiLineString, MultiPolygon
from django.contrib.gis.geos.error import GEOSException, GEOSGeometryIndexError
from django.contrib.gis.geos.libgeos import geos_version
+def fromfile(file_name):
+ """
+ Given a string file name, returns a GEOSGeometry. The file may contain WKB,
+ WKT, or HEX.
+ """
+ fh = open(file_name, 'rb')
+ buf = fh.read()
+ fh.close()
+ if wkt_regex.match(buf) or hex_regex.match(buf):
+ return GEOSGeometry(buf)
+ else:
+ return GEOSGeometry(buffer(buf))
+
def fromstr(wkt_or_hex, **kwargs):
"Given a string value (wkt or hex), returns a GEOSGeometry object."
return GEOSGeometry(wkt_or_hex, **kwargs)
View
2  django/contrib/gis/models.py
@@ -120,5 +120,7 @@ def __unicode__(self):
# The SpatialRefSys and GeometryColumns models
if settings.DATABASE_ENGINE == 'postgresql_psycopg2':
from django.contrib.gis.db.backend.postgis.models import GeometryColumns, SpatialRefSys
+elif settings.DATABASE_ENGINE == 'oracle':
+ from django.contrib.gis.db.backend.oracle.models import GeometryColumns, SpatialRefSys
else:
raise NotImplementedError('No SpatialRefSys or GeometryColumns models for backend: %s' % settings.DATABASE_ENGINE)
View
1  django/contrib/gis/tests/geoapp/sql/co.wkt
@@ -0,0 +1 @@
+POLYGON ((-107.9184209999999800 41.0020359999999970, -107.6913358243141800 41.0021042503422490, -107.6256240000000000 41.0021240000000020, -107.5215053632723100 41.0025067105257720, -107.3674429999999900 41.0030730000000010, -107.3177944624011200 41.0029672133671140, -107.3053129562196700 41.0029406188977600, -107.2411939999999900 41.0028039999999980, -107.0006060000000000 41.0034439999999950, -106.8577729999999900 41.0026629999999910, -106.4538589999999900 41.0020569999999940, -106.4395630000000100 41.0019780000000010, -106.4374190000000100 41.0017949999999940, -106.4309500000000000 41.0017519999999960, -106.3918520000000000 41.0011760000000010, -106.3863560000000100 41.0011439999999960, -106.3211649999999900 40.9991229999999970, -106.2175730000000000 40.9977340000000010, -106.1946242545105400 40.9976261471179200, -106.1905405794911800 40.9976069549524670, -106.0611809999999900 40.9969990000000020, -105.7642468572674100 40.9968975561793200, -105.7304210000000100 40.9968860000000030, -105.7248040000000100 40.9969100000000000, -105.5544177044212800 40.9973907108230620, -105.4122207031675800 40.9977918911954480, -105.2771379999999800 40.9981730000000010, -105.2565270000000100 40.9981909999999980, -105.2547790000000000 40.9982100000000000, -105.1734357616781100 40.9981770152523170, -104.9433706805682100 40.9980837236793720, -104.8552730000000000 40.9980479999999970, -104.8295039999999900 40.9992700000000030, -104.6759990000000000 41.0009570000000000, -104.4971489999999900 41.0018280000000030, -104.4970580000000000 41.0018049999999970, -104.4676719999999800 41.0014729999999970, -104.2146920000000000 41.0016570000000020, -104.2141910000000000 41.0015679999999990, -104.2114730000000000 41.0015909999999980, -104.1235859999999900 41.0016259999999950, -104.1045900000000000 41.0015429999999910, -104.0860679999999800 41.0015629999999970, -104.0669609999999900 41.0015039999999970, -104.0532489999999900 41.0014059999999960, -104.0392380000000000 41.0015020000000020, -104.0233829999999800 41.0018870000000040, -104.0182230000000100 41.0016170000000030, -104.0108048867797200 41.0016166745085400, -103.9726419999999800 41.0016150000000010, -103.9713730000000000 41.0015240000000030, -103.9535250000000000 41.0015959999999990, -103.9063240000000000 41.0013870000000010, -103.8962070000000000 41.0017500000000010, -103.8779670000000000 41.0016729999999900, -103.8584489999999900 41.0016809999999980, -103.7504979999999900 41.0020540000000010, -103.5745220000000000 41.0017210000000030, -103.4974469999999900 41.0016350000000000, -103.4866970000000100 41.0019139999999990, -103.4219750000000000 41.0020069999999990, -103.4219250000000000 41.0019689999999950, -103.3969909999999900 41.0025580000000010, -103.3653139999999800 41.0018460000000000, -103.3629790000000000 41.0018439999999910, -103.0778040000000000 41.0022980000000030, -103.0765360000000000 41.0022530000000030, -103.0595379999999900 41.0023679999999970, -103.0579980000000000 41.0023679999999970, -103.0434439999999900 41.0023440000000010, -103.0387040000000000 41.0022510000000010, -103.0020260000000000 41.0024859999999980, -103.0001019999999800 41.0024000000000020, -102.9826900000000100 41.0021569999999970, -102.9814830000000000 41.0021119999999970, -102.9636689999999800 41.0021859999999950, -102.9625220000000100 41.0020719999999980, -102.9607060000000000 41.0020589999999960, -102.9596239999999900 41.0020949999999970, -102.9448300000000000 41.0023029999999980, -102.9431090000000100 41.0020510000000020, -102.9255680000000000 41.0022799999999990, -102.9240290000000000 41.0021419999999990, -102.9065469999999900 41.0022759999999950, -102.9047960000000000 41.0022069999999990, -102.8874069999999800 41.0021780000000010, -102.8857460000000000 41.0021309999999990, -102.8678220000000000 41.0021830000000020, -102.8657839999999900 41.0019879999999970, -102.8492629999999900 41.0023010000000030, -102.8464550000000100 41.0022560000000030, -102.8303029999999900 41.0023509999999970, -102.8272800000000000 41.0021429999999970, -102.7735460000000000 41.0024140000000020, -102.7667230000000000 41.0022749999999900, -102.7546170000000000 41.0023609999999930, -102.7396239999999900 41.0022299999999970, -102.6534629999999900 41.0023320000000030, -102.6210330000000000 41.0025970000000020, -102.5786959999999900 41.0022910000000000, -102.5757380000000000 41.0022680000000010, -102.5754960000000000 41.0022000000000020, -102.5660479999999900 41.0022000000000020, -102.5567889999999900 41.0022189999999970, -102.5177010715824500 41.0023473358779430, -102.4879549999999900 41.0024449999999940, -102.4705369999999800 41.0023819999999970, -102.4692230000000000 41.0024239999999980, -102.4603345936969100 41.0024118023655500, -102.3877509894849600 41.0023121952773270, -102.3803729919328400 41.0023020703894620, -102.3795930000000000 41.0023010000000030, -102.3640659999999900 41.0021739999999970, -102.2928330000000000 41.0022069999999990, -102.2926219999999900 41.0022299999999970, -102.2925530000000000 41.0022069999999990, -102.2913540000000000 41.0022069999999990, -102.2778034555739900 41.0022337435695480, -102.2720999999999900 41.0022450000000020, -102.2678119999999900 41.0023830000000020, -102.2319310000000000 41.0023270000000010, -102.2121999999999800 41.0024620000000010, -102.2093610000000000 41.0024420000000020, -102.2090839362510100 41.0024402293320020, -102.2077760551977500 41.0024318708833140, -102.1912100000000000 41.0023259999999960, -102.1249720000000000 41.0023380000000020, -102.0705980000000000 41.0024230000000000, -102.0516140000000000 41.0023770000000030, -102.0512919999999900 40.7495910000000020, -102.0516344326070000 40.5821295926172280, -102.0517250000000000 40.5378389999999910, -102.0515190000000000 40.5200940000000000, -102.0514649999999900 40.4400079999999990, -102.0518400000000000 40.3963960000000030, -102.0515719999999900 40.3930799999999980, -102.0517979999999900 40.3600690000000030, -102.0515855426165400 40.3506461457410240, -102.0513090000000000 40.3383809999999980, -102.0519220000000000 40.2353439999999980, -102.0518939999999900 40.2291929999999950, -102.0519089999999900 40.1626740000000030, -102.0520010000000000 40.1483589999999990, -102.0518526008886700 40.0644696175368220, -102.0517440000000000 40.0030780000000020, -102.0517155646578700 39.9781730274562650, -102.0515690000000000 39.8498050000000030, -102.0513629999999900 39.8434710000000010, -102.0513179999999900 39.8333110000000020, -102.0512540000000000 39.8189920000000010, -102.0505939999999900 39.6755939999999900, -102.0500990000000000 39.6538120000000020, -102.0504219999999800 39.6460479999999930, -102.0499540000000000 39.5923310000000010, -102.0498059999999900 39.5740580000000010, -102.0495539999999900 39.5389320000000030, -102.0496730000000000 39.5366909999999980, -102.0496790000000000 39.5061830000000000, -102.0493690000000000 39.4233330000000000, -102.0493700000000000 39.4182100000000020, -102.0491669999999800 39.4035969999999980, -102.0489599999999800 39.3737119999999900, -102.0484490000000100 39.3031379999999900, -102.0472500000000100 39.1370200000000000, -102.0471339999999900 39.1297009999999970, -102.0465709999999900 39.0470380000000010, -102.0453879999999900 38.8133919999999930, -102.0453340000000000 38.7994630000000030, -102.0454479999999900 38.7834530000000020, -102.0453710000000000 38.7700639999999980, -102.0452870000000000 38.7555279999999980, -102.0453750000000100 38.7543389999999950, -102.0452119999999900 38.6975669999999990, -102.0451560000000100 38.6885550000000010, -102.0451269999999900 38.6867250000000030, -102.0451600000000000 38.6752210000000010, -102.0451020000000000 38.6749459999999980, -102.0450740000000000 38.6696170000000020, -102.0452880000000000 38.6152489999999990, -102.0452109999999900 38.5816089999999930, -102.0451889999999800 38.5587319999999920, -102.0452229999999900 38.5437969999999980, -102.0451120000000000 38.5237839999999990, -102.0452619999999900 38.5055319999999950, -102.0452629999999900 38.5053950000000000, -102.0453239999999800 38.4536469999999970, -102.0449360000000100 38.4196800000000000, -102.0444419999999900 38.4158019999999990, -102.0449440000000000 38.3844190000000010, -102.0446130000000000 38.3123239999999970, -102.0445680000000000 38.2688190000000010, -102.0443980000000000 38.2500149999999980, -102.0442510000000000 38.1417779999999950, -102.0445353236236500 38.1276753800285280, -102.0445890000000000 38.1250129999999960, -102.0445402773320500 38.1232621932310920, -102.0442550000000100 38.1130109999999930, -102.0446235449346800 38.0490802965374900, -102.0446310070721800 38.0477858554663160, -102.0446440000000100 38.0455320000000010, -102.0446200858831200 38.0420217065706370, -102.0445393420861100 38.0301695264644910, -102.0438440000000100 37.9281019999999960, -102.0438450000000000 37.9261350000000020, -102.0432189999999900 37.8679289999999900, -102.0430329999999900 37.8241459999999990, -102.0429530000000000 37.8035349999999970, -102.0426680000000100 37.7887580000000010, -102.0421580000000000 37.7601640000000030, -102.0418760000000000 37.7238750000000000, -102.0415740000000000 37.6804360000000000, -102.0416940000000100 37.6656809999999990, -102.0415819999999900 37.6544949999999970, -102.0415850000000000 37.6442819999999970, -102.0416180000000000 37.6078680000000030, -102.0417794058394900 37.5786915552958260, -102.0418940000000000 37.5579770000000010, -102.0418990000000000 37.5411860000000030, -102.0420159999999900 37.5352609999999980, -102.0417860000000000 37.5060659999999970, -102.0418009999999900 37.4694879999999980, -102.0417549999999900 37.4348549999999920, -102.0416690000000000 37.4347399999999980, -102.0416759999999800 37.4098979999999910, -102.0415240000000000 37.3750179999999970, -102.0420890000000000 37.3528189999999970, -102.0419740000000000 37.3526129999999980, -102.0418169999999900 37.3094899999999970, -102.0416640000000000 37.2976499999999900, -102.0419630000000000 37.2581640000000010, -102.0420020000000000 37.1417440000000030, -102.0421350000000000 37.1250209999999970, -102.0420920000000000 37.1250209999999970, -102.0418089999999900 37.1119729999999990, -102.0419830000000000 37.1065510000000030, -102.0419199999999900 37.0350830000000000, -102.0417490000000000 37.0343969999999980, -102.0419210000000000 37.0321780000000020, -102.0419500000000000 37.0308050000000010, -102.0419519999999900 37.0247419999999960, -102.0422400000000100 36.9930829999999990, -102.0545030000000000 36.9931089999999970, -102.1842710000000000 36.9935929999999970, -102.2083160000000000 36.9937299999999990, -102.2607890000000000 36.9943880000000010, -102.2703456818352900 36.9943999333374620, -102.3075936504973800 36.9944464445206690, -102.3552880000000000 36.9945059999999940, -102.3553670000000000 36.9945749999999980, -102.6981420000000000 36.9951489999999980, -102.7420599999999800 36.9976890000000010, -102.7598600000000000 37.0000190000000020, -102.7785689999999900 36.9992420000000020, -102.8067620000000100 37.0000190000000020, -102.8146160000000000 37.0007829999999980, -102.8419890000000000 36.9995979999999990, -102.9796130000000000 36.9985489999999970, -102.9858069999999900 36.9985709999999980, -102.9869760000000000 36.9985240000000030, -103.0021990000000000 37.0001040000000000, -103.0861049694139500 37.0001738656940380, -103.1054053653286500 37.0001899364881130, -103.1559220000000000 37.0002319999999970, -103.2006317284721000 37.0000603865096880, -103.3271777694062600 36.9995746531243130, -103.4256788724330500 36.9991965672206930, -103.7332470000000100 36.9980159999999930, -103.7343639999999900 36.9980410000000010, -104.0078549999999900 36.9962390000000030, -104.2154754884639700 36.9948744321965890, -104.2505359999999800 36.9946440000000010, -104.2975706429598400 36.9940532503817470, -104.3388329999999900 36.9935350000000010, -104.3556505253503100 36.9935565317715810, -104.3664476855351100 36.9935703555644370, -104.3992028820832900 36.9936122926149620, -104.4297693866500100 36.9936514274448880, -104.4806103169752700 36.9937165199763950, -104.5192570000000000 36.9937659999999940, -104.6245560000000000 36.9943769999999930, -104.6255450000000000 36.9935990000000030, -104.6450289999999900 36.9933779999999930, -104.7061122072671500 36.9934264441886570, -104.7320310000000100 36.9934470000000030, -104.7321199999999800 36.9934840000000020, -104.8399904125201100 36.9933955928282070, -105.0005539999999800 36.9932640000000030, -105.0292279999999900 36.9927289999999900, -105.1208000000000000 36.9954279999999970, -105.1550419641015100 36.9953391471581630, -105.2206130000000000 36.9951689999999970, -105.2512960000000000 36.9956049999999980, -105.4193100000000000 36.9958560000000030, -105.4381027436132300 36.9959680306975970, -105.4424590000000000 36.9959940000000030, -105.4472550000000000 36.9960169999999950, -105.4651820000000000 36.9959909999999970, -105.4708767069258500 36.9959784767062560, -105.5088359999999900 36.9958949999999900, -105.5124850000000000 36.9957769999999970, -105.5339220000000000 36.9958749999999980, -105.6274699999999900 36.9956790000000030, -105.6647199999999900 36.9958740000000010, -105.7164710000000000 36.9958489999999930, -105.7184073045491700 36.9958460161492080, -105.9961590000000100 36.9954180000000010, -105.9974720000000000 36.9954170000000030, -106.0066339999999900 36.9953429999999980, -106.0998058674331200 36.9947591067049760, -106.1639713822180900 36.9943569916150140, -106.2014689999999900 36.9941219999999970, -106.2477050000000000 36.9942660000000030, -106.2486750000000100 36.9942879999999900, -106.2932790000000000 36.9938900000000000, -106.3254286788247500 36.9941092316646730, -106.3431389999999800 36.9942300000000020, -106.4762779528519600 36.9938393350510210, -106.5005890000000100 36.9937679999999960, -106.6171590000000000 36.9929670000000000, -106.6171249999999900 36.9930039999999990, -106.6286520000000000 36.9931750000000010, -106.6287329999999800 36.9931609999999940, -106.6613440000000000 36.9932430000000000, -106.6756259999999900 36.9931229999999970, -106.7505910000000000 36.9924609999999990, -106.7820952897146500 36.9924517499673660, -106.8697959999999900 36.9924259999999950, -106.8772919999999800 37.0001389999999900, -106.9188864633427000 37.0001287471619240, -106.9560183645763800 37.0001195943242540, -107.1072626267445100 37.0000823133304520, -107.2552027234696400 37.0000458467977750, -107.4209130000000000 37.0000049999999940, -107.4224150136806600 37.0000049896361030, -107.4421819991443200 37.0000048532438730, -107.4817370013986600 37.0000045803142900, -107.5240868464170200 37.0000042881002860, -107.6007136407778000 37.0000037593752680, -107.7124779008385600 37.0000029882016790, -107.8556954995019300 37.0000020000000020, -107.8663089376175300 37.0000019267672610, -107.8691399085863600 37.0000019072335460, -107.8691806993063300 37.0000019069521000, -108.0006230000000000 37.0000009999999970, -108.1791870752784600 36.9992931616249270, -108.1871395402988700 36.9992616375912750, -108.2493580000000000 36.9990150000000000, -108.2506349999999900 36.9995610000000000, -108.2880860000000100 36.9995550000000010, -108.2884000000000000 36.9995199999999970, -108.3204640000000000 36.9994990000000000, -108.3207209999999900 36.9995100000000010, -108.3791655704288800 36.9994589777070430, -108.6196889999999900 36.9992489999999990, -108.6203090000000100 36.9992870000000020, -108.7492698254058500 36.9991399338227680, -108.9544040000000000 36.9989059999999980, -108.9588680000000000 36.9989130000000020, -109.0452229999999900 36.9990840000000030, -109.0451659999999800 37.0727419999999980, -109.0450580000000000 37.0746609999999990, -109.0449950000000000 37.0864290000000030, -109.0451889999999900 37.0962709999999940, -109.0451730000000100 37.1094640000000030, -109.0452029999999900 37.1119579999999940, -109.0451559999999900 37.1120639999999970, -109.0459950000000000 37.1772789999999990, -109.0459780000000100 37.2018309999999990, -109.0458015051062800 37.2050708135988660, -109.0454869999999900 37.2108440000000020, -109.0455598795331900 37.2397756720027080, -109.0455601977475200 37.2399019965338450, -109.0455839999999900 37.2493509999999970, -109.0460389999999900 37.2499930000000030, -109.0458980422733100 37.3269349905485300, -109.0458100000000000 37.3749930000000030, -109.0437991323256200 37.4690283342420190, -109.0434637832608200 37.4847104508718160, -109.0434249427800400 37.4865267700853340, -109.0431370000000000 37.4999919999999990, -109.0419150000000000 37.5306530000000010, -109.0418650000000000 37.5307260000000010, -109.0418059999999900 37.6041710000000010, -109.0421310000000000 37.6176620000000030, -109.0420890000000000 37.6237950000000010, -109.0422690000000000 37.6660669999999980, -109.0417320000000000 37.7112139999999980, -109.0417600000000000 37.7131820000000030, -109.0416360000000000 37.7402099999999980, -109.0420980000000000 37.7499899999999970, -109.0420421489000700 37.7543839997998490, -109.0414610000000000 37.8001050000000020, -109.0417540000000000 37.8358259999999900, -109.0417229999999900 37.8420509999999980, -109.0418440000000000 37.8727880000000000, -109.0416528185789500 37.8811669027885570, -109.0410580000000100 37.9072359999999970, -109.0431209999999900 37.9742600000000010, -109.0428189999999900 37.9970679999999990, -109.0428199999999900 37.9993010000000030, -109.0419724039658400 38.1317991668174590, -109.0418366569747100 38.1530194495367920, -109.0417619999999900 38.1646900000000000, -109.0546480000000000 38.2449209999999980, -109.0600619999999900 38.2754890000000000, -109.0599620000000000 38.4999869999999900, -109.0602530000000000 38.5993279999999930, -109.0595410000000000 38.7198879999999970, -109.0573880000000000 38.7954559999999940, -109.0572160449167600 38.7997308495970760, -109.0541889999999900 38.8749839999999980, -109.0539429999999900 38.9044140000000030, -109.0537970000000000 38.9052839999999950, -109.0532330000000100 38.9424670000000010, -109.0532919999999800 38.9428780000000000, -109.0524359999999900 38.9999850000000020, -109.0515879125035400 39.1157342577700790, -109.0515835157382700 39.1163343400931040, -109.0515807806367500 39.1167076340895430, -109.0515120000000000 39.1260949999999990, -109.0507650000000000 39.3666770000000030, -109.0513629999999800 39.4976740000000040, -109.0510402483332400 39.6604720118441210, -109.0506149999999900 39.8749699999999980, -109.0508730000000000 40.0589149999999990, -109.0508130000000100 40.0595789999999920, -109.0509440000000000 40.1807119999999930, -109.0509730000000000 40.1808490000000020, -109.0509687158226500 40.2226624122704100, -109.0509460000000000 40.4443679999999970, -109.0503140000000000 40.4950920000000000, -109.0506979999999800 40.4999630000000010, -109.0499550000000000 40.5399010000000000, -109.0500740000000000 40.5403579999999980, -109.0500719640466700 40.5404371043087370, -109.0480440000000000 40.6192309999999990, -109.0482490000000000 40.6536009999999950, -109.0490880000000000 40.7145620000000010, -109.0484550000000000 40.8260810000000020, -109.0500760000000000 41.0006589999999990, -108.8841379999999900 41.0000939999999970, -108.6311080000000000 41.0001559999999900, -108.5266670000000000 40.9996080000000020, -108.5006590000000000 41.0001120000000010, -108.2506490000000000 41.0001140000000040, -108.1812270000000100 41.0004549999999950, -108.0892190031385500 41.0015541392473680, -108.0465390000000000 41.0020639999999970, -107.9232341223959400 41.0020370519008000, -107.9184209999999800 41.0020359999999970))
View
1  django/contrib/gis/tests/geoapp/sql/ks.wkt
@@ -0,0 +1 @@
+POLYGON ((-102.051743999999999 40.003078000000002,-101.916696000000002 40.003141999999997,-101.904176000000007 40.003162000000003,-101.861740775252272 40.002907997451267,-101.841025000000002 40.002783999999991,-101.832160999999999 40.002932999999999,-101.807687 40.002797999999999,-101.804861999999986 40.002752,-101.783266423091504 40.002735966476642,-101.748492901329186 40.002710149056902,-101.627071 40.00262,-101.625809000000004 40.002710999999998,-101.579641080501318 40.002654627564297,-101.54227299999998 40.002608999999993,-101.417209 40.002423999999998,-101.411050023557621 40.002364583193085,-101.409952999999987 40.002353999999997,-101.387325211262052 40.00246006676732,-101.374325999999996 40.002520999999994,-101.342859000000004 40.002580000000002,-101.324035999999992 40.002695999999993,-101.293991000000005 40.002558999999998,-101.286555000000007 40.002558999999998,-101.248672999999997 40.002543000000003,-101.215033000000005 40.002555,-101.19221899999998 40.002490999999999,-101.186892990733696 40.002481867883319,-101.178804999999997 40.002468,-101.168704000000005 40.002547,-101.130906999999993 40.002426999999997,-101.104950380573442 40.002382874850099,-101.104950380567658 40.002382874850092,-101.060316999999998 40.002307000000002,-101.027686000000003 40.002255999999996,-100.962089380046322 40.00217532965339,-100.937427 40.002144999999999,-100.764559455237134 40.002296963384197,-100.758829999999989 40.002301999999993,-100.752183000000002 40.002127999999992,-100.7388309887763 40.002228385746484,-100.733295999999996 40.002270000000003,-100.729904000000005 40.002110999999999,-100.721127999999993 40.002068999999999,-100.683435000000003 40.002234,-100.660229999999984 40.002161999999998,-100.645444999999995 40.001882999999999,-100.626504856699498 40.001892789287538,-100.600944999999996 40.001905999999998,-100.594756999999987 40.001976999999997,-100.567238000000003 40.001888999999998,-100.551885999999996 40.001888999999998,-100.514429898999168 40.001844039098764,-100.511064999999988 40.00184,-100.487159000000005 40.001767,-100.477018 40.001752000000003,-100.475853999999998 40.001767999999998,-100.468772999999985 40.001724000000003,-100.447071999999991 40.001795,-100.439081000000002 40.001773999999997,-100.402449685831499 40.001800164690437,-100.390079999999998 40.001809000000002,-100.290126736823893 40.001691651381378,-100.231651999999997 40.001623000000002,-100.229478999999998 40.001692999999996,-100.215406000000002 40.001629,-100.196958999999993 40.001494,-100.19359 40.001573,-100.190323000000006 40.001586000000003,-100.188181 40.001541000000003,-100.177823000000004 40.001593,-99.990926000000002 40.001503,-99.986610999999996 40.001550000000002,-99.948166999999998 40.001812999999999,-99.944417 40.001584,-99.930432999999979 40.001516000000002,-99.906657999999993 40.001511999999998,-99.850154757615712 40.001444140609848,-99.813400999999999 40.001399999999997,-99.775639999999981 40.001646999999998,-99.772120999999984 40.001804,-99.764213999999996 40.001550999999999,-99.756834999999995 40.001342,-99.746628 40.001820000000002,-99.737774855821357 40.001824224692157,-99.731959000000003 40.001826999999992,-99.719639 40.001807999999997,-99.628345999999993 40.001866,-99.625979999999984 40.001865000000002,-99.515340365578794 40.002008435606839,-99.501791999999995 40.002026,-99.498998999999984 40.00195699999999,-99.497659999999982 40.001911999999997,-99.493464999999986 40.001936999999998,-99.480727999999999 40.001942,-99.423564999999996 40.002270000000003,-99.412644999999998 40.001867999999995,-99.403389000000004 40.001969000000003,-99.366747146128873 40.001962496644857,-99.290702999999979 40.001949000000003,-99.286655999999994 40.002017000000002,-99.282966999999999 40.001879000000002,-99.254012000000003 40.002074,-99.25036999999999 40.00195699999999,-99.216375999999997 40.002015999999998,-99.197591999999986 40.002032999999997,-99.188905000000005 40.002023,-99.186961999999994 40.001976999999997,-99.178965000000005 40.001976999999997,-99.169815999999997 40.001925,-99.123032999999992 40.002164999999998,-99.113510000000005 40.002192999999998,-99.085596999999993 40.002132999999994,-99.067047050731574 40.00217023690761,-99.020337999999995 40.00226399999999,-99.018700999999993 40.002333,-98.992135000000005 40.002192,-98.972286999999994 40.002245000000002,-98.971721000000002 40.002268,-98.961009000000004 40.002316999999998,-98.96091899999999 40.002271,-98.953888072580213 40.002253239016738,-98.934791999999987 40.002204999999996,-98.8435956659672 40.002348607685946,-98.842134005327992 40.002350909376077,-98.834455999999989 40.002363000000003,-98.820589999999982 40.002319,-98.777203 40.002358999999998,-98.774940999999998 40.002336,-98.729330606936671 40.002229113826232,-98.726294999999993 40.002222000000003,-98.710403999999997 40.002180000000003,-98.693095999999997 40.002372999999999,-98.691443000000007 40.002504999999999,-98.690286999999998 40.002547999999997,-98.672819000000004 40.002364,-98.669723999999988 40.002409999999998,-98.653832999999992 40.002268999999998,-98.652494000000004 40.002245000000002,-98.640709999999984 40.002493,-98.616372379820518 40.002409030470169,-98.613754999999998 40.002400000000002,-98.593342000000007 40.002475999999994,-98.575219000000004 40.002479999999991,-98.560578000000007 40.002274,-98.543186000000006 40.002285,-98.523053000000004 40.002336,-98.506634585466017 40.002329436673158,-98.504454999999979 40.002328565375151,-98.50084801790743 40.002327123469641,-98.490532999999999 40.002322999999997,-98.441997554675297 40.002366263566756,-98.391848301995964 40.002410965650498,-98.274015000000006 40.002516,-98.268218000000005 40.002490000000002,-98.25000799999998 40.002307000000002,-98.213290432425865 40.002506421375415,-98.193483 40.002614,-98.179315000000003 40.002482999999998,-98.172269 40.002437999999991,-98.156873151934732 40.002445128178877,-98.142031000000003 40.002451999999998,-98.099659000000003 40.002226999999998,-98.076034000000007 40.002300999999996,-98.068701000000004 40.002355,-98.050056999999981 40.002277999999997,-98.047469000000007 40.002186000000002,-98.042767978165202 40.002191261754177,-98.014411999999979 40.002223,-98.010157000000007 40.002153,-97.972185999999994 40.002113999999999,-97.931810999999996 40.002049999999997,-97.876261 40.002102,-97.85745 40.002065000000002,-97.838378999999989 40.001909999999995,-97.821597999999994 40.002003999999992,-97.819426000000007 40.001957999999995,-97.777154999999993 40.002167,-97.770775999999998 40.001976999999997,-97.769204000000002 40.001995,-97.767746000000002 40.001994000000003,-97.714825952022949 40.001974503868432,-97.706952472912022 40.001971603221314,-97.701160424072398 40.001969469388285,-97.61370959051284 40.001937251863488,-97.595964207410262 40.001930714334961,-97.593671575073259 40.001929869712491,-97.51530799999999 40.001900999999997,-97.511381 40.001899000000002,-97.510264000000006 40.001835,-97.48896951184885 40.0019310946697,-97.481234094494141 40.001966001936331,-97.463284999999999 40.00204699999999,-97.444661999999994 40.001957999999995,-97.425443 40.002048000000002,-97.417825999999991 40.002023999999999,-97.415833000000006 40.002000999999993,-97.369102999999996 40.00206,-97.350896000000006 40.001930000000002,-97.350272000000004 40.001975999999999,-97.256541388870858 40.001563097676062,-97.24516899999999 40.001513000000003,-97.245080000000002 40.001466999999998,-97.202309999999997 40.00144199999999,-97.200190000000006 40.001548999999997,-97.181775000000002 40.001550000000002,-97.165136038800085 40.001526729909067,-97.164288093539042 40.001525544031956,-97.157705785150654 40.001516338474417,-97.144150390621661 40.001497380844818,-97.142447999999987 40.001494999999998,-97.137865999999988 40.001814000000003,-97.049662999999995 40.001322999999999,-97.030802999999992 40.001342,-97.009164999999996 40.001463,-96.918187714380807 40.001505032225388,-96.916093000000004 40.001505999999999,-96.880459000000002 40.001448000000003,-96.878253 40.001466,-96.875056999999998 40.001448000000003,-96.873812 40.001449999999998,-96.868892342573133 40.001444286089438,-96.805301797100199 40.001370429180717,-96.693246065483095 40.001240282633297,-96.622400999999996 40.001157999999997,-96.610348999999999 40.000881,-96.604883999999984 40.000891000000003,-96.581788013355691 40.000963078853125,-96.580851999999993 40.000965999999998,-96.570853999999997 40.001090999999995,-96.557862999999998 40.000968,-96.538977000000003 40.000850999999997,-96.527110999999991 40.001030999999998,-96.469944999999996 40.000965999999998,-96.467535999999996 40.001035000000002,-96.463639999999998 40.000967000000003,-96.354812913341547 40.000735780492882,-96.350953725714731 40.00072758106856,-96.341811057717251 40.000708156095854,-96.304554999999993 40.000629000000004,-96.301066000000006 40.000632000000003,-96.239171999999996 40.000691000000003,-96.223838999999998 40.000729,-96.220170999999993 40.00072,-96.154364999999984 40.000495,-96.154246 40.00045,-96.147166999999982 40.000478999999999,-96.125936999999979 40.000432000000004,-96.125788 40.000467,-96.089781000000002 40.000518999999997,-96.081394999999986 40.000602999999998,-96.051691000000005 40.000726999999998,-96.02409 40.000718999999997,-96.014716997898134 40.000662392993569,-96.010677999999999 40.000638000000002,-95.995389500007406 40.000603953777215,-95.958139000000003 40.000520999999999,-95.901560435593936 40.000482839492363,-95.882524000000004 40.00047,-95.788023999999993 40.000452000000003,-95.784575000000004 40.000463000000003,-95.672891827756033 40.000336669594915,-95.658762261555324 40.000320686938032,-95.63965170807073 40.000299070038061,-95.565216789143676 40.000214872989645,-95.463103327781397 40.00009936736172,-95.455130658279359 40.000090349077695,-95.452048066669519 40.000086862204618,-95.438655850967621 40.000071713601649,-95.436011808705814 40.000068722793607,-95.426269559489981 40.00005770284973,-95.42148745056565 40.000052293567869,-95.41484447973599 40.000044779372317,-95.375257000000005 40.0,-95.339895999999982 39.999999000000003,-95.326448603970363 39.999998574530281,-95.30829 39.999997999999998,-95.308403999999996 39.993758,-95.307779999999994 39.990617999999998,-95.307111000000006 39.989114,-95.302506999999991 39.984357000000003,-95.289715 39.977705999999998,-95.274756999999994 39.972115000000002,-95.269885999999985 39.969396000000003,-95.261854 39.960617999999997,-95.257651999999993 39.954886000000002,-95.250253999999998 39.948644000000002,-95.241382999999999 39.944949,-95.236761 39.943930999999999,-95.231114000000005 39.943784,-95.220212000000004 39.944432999999997,-95.216440000000006 39.943953,-95.213736999999995 39.943205999999996,-95.204427999999993 39.938949,-95.201277000000005 39.934193999999998,-95.200689999999994 39.928154999999997,-95.20201 39.922438,-95.205744999999993 39.915168999999999,-95.206326000000004 39.912120999999999,-95.206195999999991 39.909557,-95.205732999999981 39.908275000000003,-95.202631127107011 39.904826841138963,-95.201935000000006 39.904052999999998,-95.19982446963148 39.902956959499498,-95.199773390195176 39.902930432929807,-95.199730682369619 39.902908253904485,-95.199347000000003 39.902709000000002,-95.193815999999984 39.900689999999997,-95.189565000000002 39.899959000000003,-95.179452999999995 39.900061999999991,-95.172296000000003 39.902025999999999,-95.159833999999989 39.906984,-95.156023999999988 39.907243,-95.153185481864639 39.906665666721331,-95.151701132402337 39.906363761184394,-95.149656999999991 39.905947999999995,-95.148243978290679 39.905255611516672,-95.146055000000004 39.904183000000003,-95.143801999999994 39.901917999999995,-95.142562999999981 39.897992000000002,-95.142444999999995 39.895419999999994,-95.143403000000006 39.889355999999992,-95.142718000000002 39.885888999999992,-95.140601000000004 39.88168799999999,-95.137091999999996 39.878350999999995,-95.134747000000004 39.876852,-95.128165999999993 39.874164999999998,-95.105912000000004 39.869163999999998,-95.090958483530287 39.863446088154532,-95.090158000000002 39.86314,-95.085003 39.861882999999999,-95.081534000000005 39.861718000000003,-95.079786043666886 39.861878094210859,-95.052535000000006 39.864373999999998,-95.042141999999998 39.864804999999997,-95.037767000000002 39.865541999999998,-95.034318031759739 39.867229060943565,-95.032053000000005 39.868336999999997,-95.031002514960235 39.869148692103728,-95.027930999999981 39.871521999999999,-95.025918959417425 39.87568321107333,-95.025422000000006 39.876711,-95.025119000000004 39.878833,-95.02586205726584 39.885935119809076,-95.025947000000002 39.886747,-95.025771840138887 39.887478608302466,-95.025475064075451 39.888718183571669,-95.025239999999997 39.889699999999998,-95.024388999999999 39.891202,-95.021897459019584 39.893924778577606,-95.019088516216428 39.896994416745422,-95.018742999999986 39.89737199999999,-95.018224596337973 39.897611313155366,-95.013151999999991 39.899952999999996,-95.010684182587667 39.900289758615472,-95.008439999999993 39.900596,-95.003818999999993 39.900400999999995,-94.990284000000003 39.897010000000002,-94.989784913598129 39.896958718834505,-94.987823822157509 39.896757216540813,-94.986975 39.89667,-94.985308455245701 39.896814869812808,-94.979390624873346 39.897329296428744,-94.977748999999989 39.897472,-94.963345000000004 39.901136,-94.959276000000003 39.901671,-94.958440298615102 39.901548064610132,-94.95153999999998 39.900532999999996,-94.943866999999983 39.898130000000002,-94.935306395585215 39.893779379194363,-94.934493000000003 39.893366,-94.929574000000002 39.888753999999992,-94.927897000000002 39.88611199999999,-94.927358999999996 39.883966,-94.927251999999996 39.880257999999991,-94.928466 39.876344000000003,-94.931084167287821 39.873075003673321,-94.931462999999994 39.872602,-94.938790999999995 39.866954,-94.940742999999998 39.864409999999999,-94.942407000000003 39.861065999999994,-94.942566999999983 39.856601999999995,-94.939767000000003 39.851930000000003,-94.937655000000007 39.849786000000002,-94.926149999999993 39.841321999999998,-94.916917999999995 39.836137999999998,-94.909941999999987 39.834426,-94.903156999999979 39.833849999999998,-94.892677000000006 39.834377999999994,-94.889493000000002 39.834026,-94.886932999999999 39.833098,-94.881012999999996 39.828921999999991,-94.878676999999996 39.826521999999997,-94.877043999999998 39.823754,-94.876543999999996 39.820594,-94.875944000000004 39.813293999999999,-94.87632679569893 39.807169268817198,-94.876344000000003 39.806894,-94.876705972386588 39.80614007495069,-94.880932 39.797338000000003,-94.884084 39.794234000000003,-94.890292000000002 39.791626,-94.892965000000004 39.791097999999991,-94.912908274541266 39.790276806342419,-94.92474489359239 39.789789416146199,-94.925605000000004 39.789753999999995,-94.925940683661906 39.789631963361245,-94.927258709273417 39.789152799691166,-94.929653999999999 39.788281999999995,-94.93035270914757 39.787827111232048,-94.930442023078356 39.787768964141691,-94.930979872832452 39.787418801541357,-94.932726000000002 39.786282,-94.932913349551853 39.786043884763131,-94.935059195246907 39.783316584105528,-94.935205999999994 39.78313,-94.935782000000003 39.778905999999999,-94.935301999999993 39.77561,-94.935036741896766 39.775108050050804,-94.934624304242575 39.774327591105198,-94.934262000000004 39.773642000000002,-94.929652999999988 39.769098,-94.929421387607832 39.768921584953624,-94.928626586797606 39.768316199289764,-94.926229000000006 39.76648999999999,-94.923991330811134 39.765173947104167,-94.916788999999994 39.760937999999996,-94.912293000000005 39.759337999999993,-94.906244 39.759417999999997,-94.905921454535701 39.759501730763866,-94.900921941190049 39.760799572828766,-94.899156000000005 39.761257999999998,-94.899025621234756 39.761323457651685,-94.895268000000002 39.76321,-94.895041000000006 39.763350000000003,-94.894070999999997 39.763945999999997,-94.893918999999997 39.76404,-94.893724000000006 39.764159999999997,-94.893646000000004 39.764208000000004,-94.883923999999993 39.770186000000002,-94.881460000000004 39.771258000000003,-94.881422 39.771258000000003,-94.874706321154179 39.772392308082928,-94.871144 39.772993999999997,-94.869643999999994 39.772894,-94.867142999999999 39.771693999999997,-94.865243000000007 39.770094,-94.863142999999994 39.767294,-94.860742999999999 39.763094000000002,-94.859442999999999 39.753694000000003,-94.860369889104035 39.749534984666809,-94.860371 39.74953,-94.862942999999987 39.742994000000003,-94.870142999999999 39.734594,-94.875642999999997 39.730494,-94.884142999999995 39.726793999999998,-94.891743999999989 39.724893999999999,-94.899315999999999 39.724041999999997,-94.900553640444031 39.724102079633198,-94.901582061073228 39.724152002964722,-94.902612000000005 39.724201999999998,-94.906055088082866 39.724933471502588,-94.907014260749904 39.725137244236571,-94.907785666538786 39.725301126582274,-94.910067999999995 39.725785999999999,-94.911087398893699 39.726157408899255,-94.918323999999998 39.728793999999994,-94.93000499999998 39.735370000000003,-94.939221000000003 39.74157799999999,-94.944740999999979 39.744377,-94.948658825773634 39.745572502168315,-94.948680784417533 39.745579202723142,-94.948725999999994 39.745593,-94.952629999999999 39.745961,-94.955286 39.745688999999999,-94.960086000000004 39.743065,-94.963779819772341 39.740240978767318,-94.964692434782606 39.73954326086956,-94.965317999999982 39.739064999999989,-94.965565209393333 39.738728671232884,-94.970224508542714 39.732389687437191,-94.970421999999985 39.732120999999999,-94.971205999999981 39.729304999999997,-94.971078000000006 39.723146,-94.968452999999997 39.707402000000002,-94.968980999999999 39.692954,-94.969909 39.689050000000002,-94.971316999999999 39.686410000000002,-94.976096392737759 39.68160006801152,-94.976325000000003 39.68137,-94.981556999999995 39.678634000000002,-94.984149000000002 39.677849999999992,-94.986445080691666 39.677537608069159,-94.990587390516794 39.676974028501114,-94.993556999999996 39.676569999999998,-94.998766892420107 39.676509388876212,-95.001379 39.676479,-95.004602740773237 39.676177881356345,-95.008105239221649 39.675850724907868,-95.009022999999999 39.675764999999998,-95.010225986948086 39.675477408241932,-95.013209713780839 39.674764104372102,-95.015309999999985 39.674261999999999,-95.018317999999994 39.672868999999999,-95.021521942351953 39.670631293568427,-95.024595000000005 39.668484999999997,-95.027643999999995 39.665453999999997,-95.037464 39.652904999999997,-95.039049000000006 39.649639,-95.044554000000005 39.644370000000002,-95.049518000000006 39.637875999999999,-95.053366999999994 39.630347,-95.054924999999997 39.624994999999991,-95.055024819926729 39.623527163368095,-95.055152000000007 39.621656999999992,-95.054958456554544 39.620961328886679,-95.053131423647116 39.614394255464305,-95.053011999999981 39.613965,-95.052555891387243 39.613278556984888,-95.047910999999999 39.606287999999999,-95.046445000000006 39.601605999999997,-95.046361000000005 39.599556999999997,-95.047165000000007 39.595117000000002,-95.049277000000004 39.589582999999998,-95.054804000000004 39.582487999999998,-95.056897000000006 39.580567000000002,-95.059518999999995 39.579132,-95.064519000000004 39.577114999999999,-95.066275551338904 39.576786470694117,-95.068266439890465 39.576414113098046,-95.069315000000003 39.576217999999997,-95.072159999999982 39.576121999999991,-95.075842551355763 39.576644128527029,-95.076688000000004 39.576763999999997,-95.088569515113861 39.580713698327401,-95.089515000000006 39.581028000000003,-95.09068217809525 39.58095107619048,-95.095736000000002 39.580618,-95.099095000000005 39.579690999999997,-95.100375015351446 39.579100080742663,-95.10182940536555 39.578428661399109,-95.103228 39.577782999999997,-95.106109962410699 39.575487768136732,-95.106244982404746 39.575380236480051,-95.106274453941239 39.575356764970024,-95.106406000000007 39.575251999999999,-95.107454000000004 39.573842999999997,-95.108931052511622 39.56997896968771,-95.109155613535791 39.569391508783276,-95.112830712234896 39.559777298955126,-95.112877844119652 39.559653999999995,-95.113077000000004 39.559132999999996,-95.113262990573148 39.557121201967142,-95.113516735173974 39.554376531201555,-95.113557 39.553940999999995,-95.113330390574859 39.553319942050457,-95.109694540741444 39.543355336910984,-95.109303999999995 39.542284999999993,-95.106595999999996 39.537657000000003,-95.106363136618171 39.537386330858773,-95.106309238275287 39.537323682029822,-95.102887999999993 39.533346999999999,-95.096713422649174 39.527826015970483,-95.095319522838992 39.526579663685382,-95.092703999999998 39.524241000000004,-95.082713999999996 39.516711999999998,-95.077440999999993 39.513551999999997,-95.059460999999985 39.506143000000002,-95.05637999999999 39.503971999999997,-95.052176999999986 39.499995999999996,-95.050551999999996 39.497514000000002,-95.049844999999991 39.494414999999989,-95.048370000000006 39.480420000000002,-95.047133000000002 39.474970999999996,-95.045715999999999 39.472459,-95.040779999999998 39.466386999999997,-95.03749999999998 39.463689000000002,-95.033407999999994 39.460875999999992,-95.028497999999999 39.458286999999999,-95.015825000000007 39.452809000000002,-94.995767999999998 39.448174000000002,-94.990172 39.446192000000003,-94.982144000000005 39.440551999999997,-94.978797999999998 39.436241000000003,-94.976606000000004 39.426701,-94.972952000000006 39.421705000000003,-94.968547467194298 39.418879728230785,-94.966981164652054 39.417875029083376,-94.966065999999998 39.417287999999999,-94.965430539155946 39.417093446959996,-94.954817000000006 39.413843999999997,-94.951209000000006 39.411706999999993,-94.947863999999996 39.408603999999997,-94.946292999999983 39.405645999999997,-94.946662000000003 39.399717000000003,-94.946226999999993 39.395648,-94.945577 39.393850999999998,-94.942038999999994 39.389499,-94.939696999999995 39.387949999999996,-94.938205659338905 39.38711651736979,-94.938199994953891 39.387113351650086,-94.938198708293527 39.387112632559479,-94.937157999999982 39.386530999999998,-94.933651999999995 39.385545999999998,-94.932170703908099 39.385397898493565,-94.923109999999994 39.384492000000002,-94.919224999999997 39.385173999999999,-94.915858999999998 39.386347999999998,-94.909581000000003 39.388865000000003,-94.901822999999993 39.392797999999999,-94.896448416922993 39.39340032396553,-94.894979000000006 39.393565000000002,-94.891845000000004 39.393312999999999,-94.888971999999995 39.392431999999999,-94.888058227506249 39.391822741147728,-94.885025999999996 39.389800999999999,-94.880978999999996 39.383899,-94.879281000000006 39.37977999999999,-94.879087999999996 39.375702999999994,-94.881359999999987 39.370382999999997,-94.885216 39.366911000000002,-94.890928000000002 39.364030999999997,-94.896832000000003 39.363135,-94.899023999999997 39.362431,-94.902496999999997 39.360382999999999,-94.90716104958679 39.35683832231404,-94.907297 39.356735,-94.907510470967722 39.356484333333356,-94.909408999999997 39.354254999999995,-94.910016999999996 39.352542999999997,-94.91007929967077 39.352122876579188,-94.910166635146069 39.351533921963672,-94.910234386079424 39.351077037464393,-94.910640999999998 39.348334999999999,-94.910055514481613 39.342727430625168,-94.908683540921714 39.329587162119807,-94.908064999999993 39.323663000000003,-94.906599414484603 39.317389801180319,-94.905982468129508 39.31474906332776,-94.905548856768945 39.312893060899633,-94.905328999999995 39.311951999999998,-94.904604536115073 39.31007473956825,-94.903592654247163 39.307452709910535,-94.903137 39.306272,-94.902341179156608 39.304705098857582,-94.900693838394318 39.301461629999167,-94.900362755471093 39.300809756886117,-94.900048999999996 39.300192000000003,-94.895217000000002 39.29420799999999,-94.889432625546704 39.288730528394183,-94.887056 39.286479999999997,-94.882576 39.283327999999997,-94.881425972827699 39.282735692772164,-94.879585687759075 39.281787876778168,-94.878319999999988 39.281135999999996,-94.869470269042495 39.278423959123423,-94.867567999999991 39.277841000000002,-94.866576416802303 39.277461598502107,-94.857072000000002 39.273825000000002,-94.850573678793964 39.270595179638669,-94.850470600187833 39.270543947117169,-94.846320000000006 39.268481,-94.844203868589133 39.266965084952687,-94.840994595225254 39.264666085108807,-94.837855000000005 39.262416999999999,-94.836102527271095 39.260730409704507,-94.834879550067882 39.259553409087879,-94.832501320107042 39.257264586268427,-94.832102355305352 39.256880620143498,-94.831470999999993 39.256273,-94.827487000000005 39.249888999999996,-94.826571473591798 39.245793223963304,-94.825663000000006 39.241728999999999,-94.826110999999983 39.238289000000002,-94.826405091238243 39.237538367125239,-94.827108391663188 39.2357432765168,-94.827791000000005 39.234000999999999,-94.828117769197533 39.233533772937683,-94.83244435695299 39.227347452739551,-94.834698551534771 39.224124319346686,-94.834896 39.223841999999998,-94.834917496024659 39.223414229109203,-94.835039139715306 39.220993519665384,-94.835046603087861 39.220844998551456,-94.835055999999994 39.220658,-94.833551999999997 39.217793999999998,-94.831678999999994 39.215938,-94.823791 39.209873999999999,-94.820687000000007 39.208626000000002,-94.811662999999996 39.206594000000003,-94.800359054554335 39.206051410618606,-94.799662999999995 39.206018,-94.798924306591658 39.206116812235138,-94.793913945984244 39.206787029303406,-94.788135068391796 39.207560047994349,-94.787343000000007 39.207666000000003,-94.783838000000003 39.207154000000003,-94.781518000000005 39.206145999999997,-94.780294078498926 39.205273290755756,-94.778971577769184 39.204330290235411,-94.777838000000003 39.203522,-94.775537999999997 39.200602000000003,-94.770897097034492 39.191141697801093,-94.770859400196969 39.191064854247678,-94.770337999999995 39.190002,-94.763137999999998 39.179903000000003,-94.75233799999998 39.173202999999994,-94.74193799999999 39.170203,-94.736536999999998 39.169203000000003,-94.723636999999997 39.169002999999989,-94.714136999999994 39.170403,-94.696331999999998 39.178562999999997,-94.687235999999999 39.183503000000002,-94.680335999999983 39.184303,-94.669134999999997 39.182003000000002,-94.663835000000006 39.179102999999998,-94.660314999999997 39.168050999999991,-94.662434999999988 39.157602999999995,-94.650734999999983 39.154102999999999,-94.640034999999997 39.153102999999994,-94.623934000000006 39.156602999999997,-94.615834000000007 39.160003000000003,-94.608834000000002 39.160502999999999,-94.601732999999996 39.15960299999999,-94.596033000000006 39.157702999999998,-94.591932999999997 39.155003,-94.589933000000002 39.140402999999999,-94.592533000000003 39.135902999999992,-94.600433999999993 39.128503000000002,-94.605733999999998 39.122204000000004,-94.607033999999999 39.119404000000003,-94.607354 39.113444,-94.607234000000005 39.089604,-94.607333999999994 39.081703999999995,-94.607275518421304 39.072346947409343,-94.607234000000005 39.065703999999997,-94.607342812841125 39.057404745686583,-94.60738379566331 39.05427894858029,-94.607437239929951 39.050202705779334,-94.607518499034526 39.044004999999999,-94.607559479691474 39.040879368039988,-94.607612854426819 39.036808428453341,-94.60764748233197 39.034167326647299,-94.607654028188094 39.033668068249817,-94.60769507925167 39.030537066312085,-94.607898722639391 39.015005000000002,-94.607914652765047 39.013789994834404,-94.607991843462372 39.007902590176151,-94.608087526605189 39.000604749887366,-94.608092759229436 39.000205652880325,-94.608190956218394 38.992716079262479,-94.608212339138063 38.991085184540211,-94.608264438806202 38.98711149548862,-94.608279957450691 38.985927874365181,-94.608301211867541 38.984306780669819,-94.608333999999999 38.981805999999999,-94.608294286905348 38.97390309416464,-94.608273484679671 38.969763451253407,-94.608249262127771 38.964943163424849,-94.608207879518076 38.956708024096379,-94.608134000000007 38.942005999999999,-94.608134000000007 38.940005999999997,-94.607866 38.937398000000002,-94.607977999999989 38.936869999999992,-94.608002838442587 38.912906322207348,-94.608006216770249 38.909646973100827,-94.608010407202343 38.90560412040071,-94.608022064178897 38.894357681354862,-94.60802273861259 38.893706999999999,-94.608033000000006 38.883806999999997,-94.608033000000006 38.869207000000003,-94.608033000000006 38.868107000000002,-94.607992999999993 38.867271000000002,-94.608033000000006 38.861207,-94.608033000000006 38.855007,-94.608033000000006 38.850107,-94.608033000000006 38.847206999999997,-94.607624999999999 38.827559999999991,-94.607668973053535 38.825816299300072,-94.608041 38.811064000000002,-94.608617609754887 38.781926100280451,-94.609398999999996 38.742440000000002,-94.60945599999998 38.74069999999999,-94.609507757106428 38.73815999467709,-94.609625656590424 38.7323740198146,-94.610322172686637 38.698192151600097,-94.61071084056907 38.679118085101081,-94.61073851283922 38.677760054904219,-94.611602000000005 38.635384000000002,-94.611464999999995 38.625011,-94.611857999999998 38.620485000000002,-94.611908 38.609271999999997,-94.611905562149673 38.605890005062435,-94.611886999999996 38.580139000000003,-94.611902 38.580109999999998,-94.612176000000005 38.576546,-94.612156999999996 38.549816999999997,-94.612272000000004 38.547916999999998,-94.612464742072774 38.518760616499996,-94.612644000000003 38.491644,-94.612725999999995 38.484366999999999,-94.612696 38.483153999999999,-94.612865999999997 38.477570999999998,-94.613365000000002 38.403421999999999,-94.613264999999998 38.392426,-94.613275404637193 38.388718047420433,-94.613328999999993 38.369617999999996,-94.613311999999993 38.364407,-94.613085455228386 38.3436360393057,-94.612999999999985 38.335800999999996,-94.612825 38.324387000000002,-94.612787999999995 38.320141999999997,-94.612673 38.314832000000003,-94.612673 38.302526999999998,-94.612689368276676 38.301464114946214,-94.612843999999996 38.291422999999995,-94.612848999999997 38.289914000000003,-94.612707829046002 38.272362044447966,-94.612691999999996 38.270394000000003,-94.612613999999994 38.237766,-94.612634999999997 38.226987,-94.612658999999994 38.219251,-94.61265866950464 38.21872154645218,-94.612657999999982 38.217649000000002,-94.612821999999994 38.203918000000002,-94.612848 38.200713999999998,-94.613073 38.190551999999997,-94.61341774677895 38.168183959706163,-94.613422 38.16790799999999,-94.613748 38.160632999999997,-94.613855999999998 38.149768999999999,-94.613889466360249 38.136312911169284,-94.613919497343275 38.124238112111762,-94.614061000000007 38.067343,-94.614088999999993 38.065900999999997,-94.614054999999993 38.060088,-94.613980999999995 38.036949,-94.614211999999981 37.992462000000003,-94.614464999999996 37.987798999999995,-94.614511123427164 37.979395512107736,-94.614514360688489 37.978805697169918,-94.614557000000005 37.971036999999995,-94.614561999999992 37.951517000000003,-94.614593999999997 37.949977999999994,-94.614611999999994 37.944361999999998,-94.614754000000005 37.940769000000003,-94.614834999999999 37.936700000000002,-94.614778 37.934199999999997,-94.615181000000007 37.915944000000003,-94.615392999999983 37.906391999999997,-94.61546899999999 37.901775,-94.615706000000003 37.886842999999999,-94.615921 37.878331000000003,-94.615834000000007 37.872509999999998,-94.616 37.863126,-94.616282760205394 37.851281931678621,-94.616426000000004 37.845281999999997,-94.616433230053673 37.842955730230052,-94.61645 37.837560000000003,-94.616861999999998 37.819456000000002,-94.6176681324215 37.775831003788085,-94.617720999999989 37.77297,-94.617737774720197 37.764628336555312,-94.617744979193901 37.761045725680312,-94.617807999999997 37.729706999999998,-94.617975 37.722175999999997,-94.61780499999999 37.690178000000003,-94.617650999999995 37.687671000000002,-94.617687000000004 37.686652999999993,-94.617885 37.682214000000002,-94.617733999999999 37.673127,-94.617576 37.653671000000003,-94.617517909436387 37.643988652624088,-94.61747699999998 37.637169999999998,-94.617472819127315 37.636539916507168,-94.6173 37.610495,-94.617428000000004 37.609521999999998,-94.617283 37.571896000000002,-94.617315000000005 37.571498999999996,-94.617080999999999 37.567013000000003,-94.61711240153133 37.563155381499406,-94.617159999999984 37.557307999999999,-94.617186000000004 37.553485000000002,-94.617167532949537 37.551779056391354,-94.616988484457494 37.535238968895172,-94.616907999999981 37.527804000000003,-94.616788999999997 37.521509999999999,-94.616880369657522 37.506771761864755,-94.617022999999989 37.483764999999998,-94.617182999999997 37.469664999999999,-94.617180000000005 37.465203000000002,-94.617221999999998 37.460476,-94.617204999999984 37.46037299999999,-94.617200999999994 37.454788,-94.617131999999998 37.439818000000002,-94.617265000000003 37.425535999999994,-94.617510999999993 37.410908999999997,-94.617557000000005 37.396374999999999,-94.61759158917468 37.381725975861251,-94.617625000000004 37.367576,-94.617626 37.367444999999989,-94.617536999999999 37.364355000000003,-94.617636000000005 37.338417,-94.617694999999998 37.336841999999997,-94.617648000000003 37.323588999999998,-94.61807499999999 37.240436000000003,-94.618157999999994 37.237596999999994,-94.618122999999997 37.229334,-94.61815 37.228121000000002,-94.618218999999996 37.207771999999999,-94.618305000000007 37.207337000000003,-94.618319 37.188774000000002,-94.618504999999985 37.181184000000002,-94.618472999999994 37.174782,-94.618351000000004 37.160210999999997,-94.618071999999998 37.132345,-94.61807499999999 37.129755000000003,-94.61816441512984 37.118929895303054,-94.618212 37.113168999999992,-94.618150999999997 37.103968000000002,-94.618059000000002 37.096676000000002,-94.618088 37.093670999999993,-94.618089999999995 37.093494,-94.618085255103864 37.089305442941992,-94.618082 37.086432000000002,-94.61811999999999 37.085934000000002,-94.617981999999998 37.075077,-94.617954311863897 37.070346986543974,-94.617947706480578 37.069218577181687,-94.617910161110728 37.062804634983031,-94.617893975984089 37.060039701061122,-94.617874999999998 37.056798,-94.617877538275181 37.056339390079508,-94.617964999999998 37.040537,-94.617972200190749 37.032971759572447,-94.617994999999979 37.009015999999995,-94.618027702303792 37.004829720380044,-94.618080000000006 36.998134999999998,-94.625223999999989 36.998671999999999,-94.699735000000004 36.998804999999997,-94.701796999999999 36.998814000000003,-94.711286363060864 36.99879670415919,-94.712770000000006 36.99879399999999,-94.722629184733563 36.998741903378082,-94.732834603466486 36.998687977231512,-94.736330645670293 36.998669503899912,-94.737183000000002 36.998665000000003,-94.739323999999996 36.998686999999997,-94.745992043692311 36.998700535427304,-94.749560781475736 36.99870777958963,-94.749834600019099 36.998708335412474,-94.777257000000006 36.998764,-94.831280000000007 36.998812,-94.831539962039543 36.998812565955092,-94.840925999999996 36.998832999999998,-94.846637705524785 36.998860673615503,-94.849800999999999 36.998875999999996,-94.853196999999994 36.998874,-94.896852168601683 36.999075231107383,-94.904605402657381 36.99911097010289,-94.9407882710602 36.999277757196154,-94.995293000000004 36.999528999999995,-95.007620000000003 36.999513999999998,-95.011432999999997 36.999535000000002,-95.030323999999993 36.999516999999997,-95.037857000000002 36.999496999999998,-95.049498999999983 36.999580000000002,-95.073509 36.999509000000003,-95.1405498515593 36.999533623834409,-95.155186999999998 36.999538999999999,-95.155372 36.999540000000003,-95.159067907556633 36.999536629205572,-95.177300999999986 36.999519999999997,-95.195307 36.999564999999997,-95.267905305061163 36.999446910377756,-95.285983101167361 36.999417504731007,-95.322564999999997 36.999357999999994,-95.328057999999999 36.999364999999997,-95.328326999999987 36.999366000000002,-95.331209999999999 36.999380000000002,-95.377252424658963 36.999296311678272,-95.381753803085687 36.999288129815376,-95.407683000000006 36.999240999999998,-95.511578 36.999234999999999,-95.522414951940931 36.999281058114107,-95.534401000000003 36.999332000000003,-95.573598000000004 36.999309999999994,-95.601517312742303 36.999317968253862,-95.612139999999997 36.999321000000002,-95.615933999999996 36.999364999999997,-95.621011943860609 36.999361983160732,-95.624350000000007 36.999360000000003,-95.630078999999995 36.999319999999997,-95.638122589416028 36.999320470082949,-95.664300999999995 36.999321999999999,-95.674044398562955 36.999333876292773,-95.686452000000003 36.999349000000002,-95.696658999999997 36.999215,-95.71038 36.999370999999996,-95.710782524132014 36.999362783399121,-95.714887000000004 36.999279,-95.718053999999995 36.999254999999998,-95.741907999999995 36.999243999999997,-95.746466244276931 36.999250838506164,-95.759905000000003 36.999270999999993,-95.768719000000004 36.999205000000003,-95.786761999999996 36.999309999999994,-95.807979999999986 36.999124000000002,-95.819364496908179 36.999150471530008,-95.866899000000004 36.999260999999997,-95.873943999999995 36.999299999999998,-95.875256999999991 36.999302,-95.877150999999998 36.999304000000002,-95.910179999999997 36.999336,-95.928122000000002 36.999245000000002,-95.936991999999989 36.999267999999994,-95.964270378114222 36.999093604402042,-96.00081 36.99886,-96.095164142267308 36.998935940299688,-96.14121 36.998972999999999,-96.143207000000004 36.999133999999998,-96.147143 36.999021999999997,-96.149709 36.99904,-96.152383999999998 36.999050999999994,-96.154016999999982 36.999161,-96.184768000000005 36.999211000000003,-96.200028000000003 36.999028000000003,-96.217571000000007 36.999070000000003,-96.235320025971774 36.999130675786525,-96.27480962492784 36.999265672629733,-96.276368000000005 36.999270999999993,-96.279078999999996 36.999271999999991,-96.381556872639493 36.999226629434901,-96.394272 36.999220999999999,-96.415412000000003 36.999113,-96.500287999999998 36.998643,-96.525212323286397 36.998711038495294,-96.525495980566973 36.998711812823821,-96.551130926932458 36.998781791180214,-96.551130927020779 36.998781791180456,-96.624487489749981 36.998982040153741,-96.705431000000004 36.999203,-96.710481999999999 36.999270999999993,-96.731983006833033 36.99928335311408,-96.736589999999993 36.999285999999998,-96.741269999999986 36.999239000000003,-96.749837999999997 36.998987999999997,-96.792060000000006 36.999179999999996,-96.795198999999997 36.99886,-96.822790999999995 36.999181999999998,-96.867517000000007 36.999217000000002,-96.876289999999997 36.999232999999997,-96.902083000000005 36.999155000000002,-96.903509999999997 36.999132000000003,-96.917092999999994 36.999181999999998,-96.921914999999998 36.999150999999998,-96.924934279563146 36.999131784030439,-96.934641999999997 36.999070000000003,-96.967371 36.999066999999997,-96.975561999999996 36.999018999999997,-97.030081999999979 36.998928999999997,-97.039783999999983 36.999000000000002,-97.045562883576096 36.99899981011751,-97.100651999999997 36.998998,-97.104275999999999 36.999020000000002,-97.120284999999996 36.999014000000003,-97.122596999999999 36.999035999999997,-97.147721000000004 36.999110999999999,-97.202000013134437 36.999050609464689,-97.255829185181881 36.998990719420135,-97.342808466604069 36.998893946743877,-97.362376892203329 36.998872175019791,-97.364929972745273 36.99886933447624,-97.372421000000003 36.998860999999998,-97.384924999999996 36.998843,-97.462279999999993 36.998685000000002,-97.472860999999995 36.998721000000003,-97.527292000000003 36.998749999999994,-97.545899999999989 36.998708999999991,-97.546497999999985 36.998746999999995,-97.564536000000004 36.998711,-97.582460039051355 36.99869862770732,-97.606549 36.998682000000002,-97.637136999999996 36.999090000000002,-97.650465999999994 36.999003999999999,-97.692180007144742 36.998844793059916,-97.697103999999982 36.998826,-97.768704 36.998749999999994,-97.783432000000005 36.998961,-97.783489000000003 36.998846999999998,-97.802297999999979 36.998713000000002,-97.965379045838461 36.998468720211747,-98.033955000000006 36.998365999999997,-98.03989 36.998348999999997,-98.045341999999991 36.998327000000003,-98.111985000000004 36.998133000000003,-98.128185436781749 36.99814624647324,-98.147452 36.998162,-98.177595999999994 36.998008999999996,-98.190367496841162 36.998003995168112,-98.208218000000002 36.997996999999998,-98.219498999999999 36.997824,-98.237712000000002 36.99797199999999,-98.346187999999984 36.997962,-98.347186011230875 36.997961873429141,-98.354073 36.997960999999997,-98.408991 36.998513000000003,-98.418267999999998 36.998538000000003,-98.420209 36.998516000000002,-98.476584655565659 36.998733519956424,-98.485495952453391 36.998767903324406,-98.544871999999984 36.998997000000003,-98.622244241689657 36.999025734091177,-98.714511999999999 36.99906,-98.718464999999995 36.999179999999996,-98.761596999999995 36.999425000000002,-98.791936000000007 36.999254999999998,-98.793711000000002 36.999226999999991,-98.797451999999993 36.999228999999993,-98.811832237742053 36.99924038482925,-98.869449000000003 36.999285999999998,-98.880009 36.999262999999999,-98.880579999999995 36.999308999999997,-98.994371 36.999493,-99.000846251360556 36.99951188908193,-99.029336999999998 36.999594999999999,-99.044703416105833 36.999312701167916,-99.049695 36.999220999999999,-99.124882999999997 36.99942,-99.12944899999998 36.999422000000003,-99.215429691089184 36.999525607779709,-99.221470798208784 36.999532887387339,-99.22594390512576 36.999538277535649,-99.248119999999986 36.999564999999997,-99.277506000000002 36.999578999999997,-99.375390999999993 37.000176999999994,-99.375813215185289 37.000169016042221,-99.396673054015949 36.999774562980598,-99.407015 36.999578999999997,-99.456202999999988 36.999471,-99.484333000000007 36.999625999999999,-99.500394999999983 36.99957599999999,-99.500394999999983 36.999637,-99.502664999999993 36.999645,-99.504092999999997 36.999648,-99.508573999999982 36.999657999999997,-99.541115670095081 36.999572526667627,-99.558068000000006 36.999527999999998,-99.625399000000002 36.999670999999999,-99.648651999999998 36.999603999999998,-99.657657999999998 37.000197,-99.675479899119665 37.000294824261658,-99.700804554289192 37.000433831091229,-99.722499410223932 37.000552913981863,-99.774254999999997 37.000836999999997,-99.774816 37.000841,-99.786016000000004 37.000931,-99.875408999999991 37.001658999999997,-99.904897139036905 37.001652107487203,-99.995200999999994 37.001631000000003,-100.001285999999993 37.001699000000002,-100.002562999999995 37.001705999999999,-100.005706000000004 37.001725999999998,-100.08949117994996 37.002091554886341,-100.115721999999991 37.002206,-100.187546999999995 37.002082,-100.19237099999998 37.002035999999997,-100.193753999999998 37.002133,-100.201675999999992 37.002080999999997,-100.269984573601874 37.001795796937508,-100.395563941387664 37.001271475927872,-100.434302684862132 37.001109733298897,-100.434343961694367 37.0011095609592,-100.436759028295029 37.001099477534027,-100.462594151135718 37.000991610310841,-100.526354155903263 37.000725398506596,-100.551597999999998 37.000619999999998,-100.552683000000002 37.000734999999999,-100.591328000000004 37.000376000000003,-100.591413000000003 37.000399000000002,-100.629769999999994 37.000025,-100.63332699999998 36.999935999999998,-100.675551999999996 36.999687999999999,-100.734516999999997 36.999059000000003,-100.756894000000003 36.999356999999996,-100.759718826764541 36.999297806889686,-100.765484 36.999177000000003,-100.806116000000003 36.999091,-100.814277000000004 36.999085,-100.850054835707368 36.998687920265262,-100.855633999999981 36.998626000000002,-100.891659999999987 36.998604,-100.904274 36.998745,-100.904588000000004 36.998561000000002,-100.945565999999985 36.998151999999997,-100.958261085233985 36.99812508251128,-100.996501999999992 36.998044,-101.012641000000002 36.998176,-101.053589000000002 36.997966999999996,-101.066742000000005 36.997920999999998,-101.096255470166753 36.997758490771822,-101.211485999999979 36.997123999999999,-101.212908999999996 36.997044000000002,-101.283204233333976 36.996668964004151,-101.357796999999991 36.996271,-101.359673999999998 36.996231999999999,-101.37818 36.996164,-101.413867999999994 36.996008000000003,-101.415004999999994 36.995966000000003,-101.485326 36.995610999999997,-101.519065999999995 36.99554599999999,-101.555239 36.99541399999999,-101.600396000000003 36.995152999999995,-101.601592999999994 36.995094999999999,-101.672152845644291 36.994768289529276,-101.672152845650672 36.994768289529254,-101.718235173867967 36.994554916342196,-101.761767880686108 36.994353348566563,-101.826607533764985 36.994053124077894,-101.862548907230888 36.993886706153717,-101.881050066963184 36.993801040963412,-101.899294480822903 36.993716564573397,-101.902439999999999 36.993701999999999,-101.905152836625547 36.993689460946754,-101.93521516037174 36.99355050931414,-102.000446999999994 36.993248999999992,-102.000446999999994 36.993271999999997,-102.028206999999981 36.993124999999999,-102.042240000000007 36.993082999999999,-102.041951999999995 37.024741999999996,-102.04195 37.030805,-102.041921000000002 37.032178000000002,-102.041748999999996 37.034396999999998,-102.04191999999999 37.035083,-102.041983000000002 37.106551000000003,-102.041808999999986 37.111972999999999,-102.042091999999997 37.125020999999997,-102.042135000000002 37.125020999999997,-102.042121535383529 37.12671399835564,-102.042001999999997 37.141744000000003,-102.041962999999996 37.258164,-102.041663999999997 37.29764999999999,-102.041816999999995 37.309489999999997,-102.041973999999996 37.352612999999998,-102.042089000000004 37.352818999999997,-102.041523999999995 37.375017999999997,-102.041585760607518 37.389190434149839,-102.041675999999981 37.409897999999991,-102.041668999999999 37.434739999999998,-102.041754999999995 37.434854999999992,-102.041800999999992 37.469487999999998,-102.041786000000002 37.506065999999997,-102.04201599999999 37.535260999999998,-102.041899 37.541186000000003,-102.041893999999999 37.557977,-102.041618 37.607868000000003,-102.041584999999998 37.644281999999997,-102.041581999999991 37.654494999999997,-102.041694000000007 37.665680999999999,-102.041573999999997 37.680436,-102.041876000000002 37.723875,-102.041989965869121 37.73854062916552,-102.042158 37.760164000000003,-102.042668000000006 37.788758,-102.042952999999997 37.803534999999997,-102.043032999999994 37.824145999999999,-102.043218999999993 37.86792899999999,-102.043714531331204 37.914003914798144,-102.043845000000005 37.926135000000002,-102.043844000000007 37.928101999999996,-102.044644000000005 38.045532,-102.044255000000007 38.113010999999993,-102.044450868202546 38.120049353793199,-102.044589000000002 38.125012999999996,-102.044415729020699 38.133607343100145,-102.044251000000003 38.141777999999995,-102.044296878804843 38.175558844899406,-102.044398 38.250014999999998,-102.044510721728557 38.262483349316234,-102.044567999999998 38.268819,-102.044612999999998 38.312323999999997,-102.044944 38.384419,-102.044441999999989 38.415801999999999,-102.044936000000007 38.41968,-102.045323999999979 38.453646999999997,-102.045262999999991 38.505395,-102.045261999999994 38.505531999999995,-102.045112000000003 38.523783999999999,-102.045222999999993 38.543796999999998,-102.045188999999979 38.558731999999992,-102.045210999999995 38.581608999999993,-102.045287999999999 38.615248999999999,-102.045074 38.669617000000002,-102.045102 38.674945999999998,-102.045159999999996 38.675221,-102.045126999999994 38.686725000000003,-102.045156000000006 38.688555,-102.045211999999992 38.697566999999999,-102.045375000000007 38.754338999999995,-102.045287000000002 38.755527999999998,-102.045371000000003 38.770063999999998,-102.045447999999993 38.783453000000002,-102.045333999999997 38.799463000000003,-102.045387999999988 38.813391999999993,-102.046570999999986 39.047038,-102.047133999999986 39.129700999999997,-102.047188612927897 39.133146793270186,-102.047250000000005 39.13702,-102.047851021058236 39.220289738242592,-102.048449000000005 39.30313799999999,-102.04895999999998 39.37371199999999,-102.049100972149461 39.394064428437375,-102.049166999999983 39.403596999999998,-102.049369999999996 39.418210000000002,-102.049368999999999 39.423333,-102.049678999999998 39.506183,-102.049672999999999 39.536690999999998,-102.049553999999986 39.538932000000003,-102.049763758475066 39.568170000775439,-102.04980599999999 39.574058,-102.049954 39.592331,-102.050258163748609 39.627242889069393,-102.050421999999983 39.646047999999993,-102.050099000000003 39.653812000000002,-102.05059399999999 39.67559399999999,-102.050898693231389 39.741794606053567,-102.051254 39.818992,-102.051317999999995 39.833311000000002,-102.051362999999995 39.843471,-102.051569 39.849805000000003,-102.051743999999999 40.003078000000002))
View
1  django/contrib/gis/tests/geoapp/sql/nz.wkt
@@ -0,0 +1 @@
+MULTIPOLYGON (((174.616364000000004 -36.100861000000002,174.634978999999987 -36.124718,174.708862000000011 -36.205559,174.781096999999988 -36.266945,174.812744000000009 -36.339165,174.768311000000011 -36.34639,174.710784999999987 -36.525832999999999,174.708587999999992 -36.533332999999999,174.70773299999999 -36.541671999999998,174.714690999999988 -36.595832999999999,174.717194000000006 -36.603057999999997,174.774414000000007 -36.730277999999998,174.808319000000012 -36.805275000000002,174.854400999999996 -36.847777999999998,174.896636999999998 -36.878334000000002,175.011658000000011 -36.871941,175.020813000000004 -36.873610999999997,175.055542000000003 -36.880279999999999,175.076629999999994 -36.890839,175.082458000000003 -36.895279000000002,175.087463000000014 -36.900832999999999,175.091644000000002 -36.925559999999997,175.161652000000004 -36.955559,175.221069 -36.937775000000002,175.230255 -36.939438000000003,175.278320000000008 -36.965279000000002,175.310516000000007 -36.995002999999997,175.319976999999994 -37.005836000000002,175.323853000000014 -37.012222,175.328856999999999 -37.026947,175.330261000000007 -37.035277999999998,175.330535999999995 -37.044449,175.321899000000002 -37.06472,175.31942699999999 -37.095275999999998,175.317748999999992 -37.144165,175.319121999999993 -37.152495999999999,175.328856999999999 -37.168892,175.373290999999995 -37.216659999999997,175.385254000000003 -37.225830000000002,175.404967999999997 -37.228050000000003,175.579131999999987 -37.244446000000003,175.58914200000001 -37.169449,175.551636000000002 -37.024718999999997,175.547484999999995 -37.009171000000002,175.542480000000012 -36.994446000000003,175.536102 -36.980826999999998,175.524993999999992 -36.961669999999998,175.498566000000011 -36.927222999999998,175.484406000000007 -36.920279999999998,175.476348999999999 -36.917777999999998,175.464416999999997 -36.90889,175.435241999999988 -36.866942999999999,175.46691899999999 -36.809998,175.509430000000009 -36.776108,175.486358999999993 -36.679726000000002,175.463593000000003 -36.621383999999999,175.378296000000006 -36.570557,175.366364000000004 -36.561667999999997,175.361633000000012 -36.556389000000003,175.356628 -36.541671999999998,175.353850999999992 -36.525002,175.35244800000001 -36.489998,175.353577 -36.481940999999999,175.360229000000004 -36.478050000000003,175.538025000000005 -36.514724999999999,175.542755 -36.519996999999996,175.604950000000002 -36.622771999999998,175.631072999999986 -36.710555999999997,175.763610999999997 -36.713614999999997,175.840789999999998 -36.754173000000002,175.733582000000013 -36.805832000000002,175.701629999999994 -36.844161999999997,175.707458000000003 -36.869995000000003,175.709960999999993 -36.875275000000002,175.714690999999988 -36.880828999999999,175.720519999999993 -36.885277000000002,175.735779000000008 -36.891387999999999,175.74383499999999 -36.893889999999999,175.758330999999998 -36.876106,175.761382999999995 -36.869446000000003,175.757751000000013 -36.863059999999997,175.753051999999997 -36.857779999999998,175.749114999999989 -36.851394999999997,175.75 -36.843055999999997,175.752196999999995 -36.835555999999997,175.756378000000012 -36.830002,175.765533000000005 -36.828055999999997,175.808013999999986 -36.824173000000002,175.817200000000014 -36.825836000000002,175.833587999999992 -36.830832999999998,175.845519999999993 -36.839722000000002,175.849120999999997 -36.846107000000003,175.878570999999994 -36.914444000000003,175.881072999999986 -36.921669,175.918304000000006 -37.067504999999997,175.917480000000012 -37.075836000000002,175.915253000000007 -37.083061,175.898314999999997 -37.115004999999996,175.884154999999993 -37.168892,175.883330999999998 -37.176949,175.887206999999989 -37.244163999999998,175.892212 -37.249724999999998,175.921082000000013 -37.251671000000002,175.927185000000009 -37.256110999999997,175.93081699999999 -37.262504999999997,175.936371000000008 -37.278885000000002,175.940093999999988 -37.299717,175.974396000000013 -37.418059999999997,175.976074000000011 -37.453055999999997,176.026931999999988 -37.483108999999999,176.035583000000003 -37.487282,176.059417999999994 -37.502502,176.088287000000008 -37.525557999999997,176.093291999999991 -37.531112999999998,176.165526999999997 -37.613892,176.169433999999995 -37.620277000000002,176.167205999999993 -37.625832000000003,176.160247999999996 -37.624167999999997,176.082458000000003 -37.602500999999997,176.066924999999998 -37.59639,176.061095999999992 -37.591942000000003,176.057189999999991 -37.585555999999997,176.062744000000009 -37.580832999999998,176.070800999999989 -37.577781999999999,176.088287000000008 -37.580002,176.095245000000006 -37.576110999999997,176.090239999999994 -37.570838999999999,176.062468999999993 -37.546669,176.023087000000004 -37.528221000000002,176.018767999999994 -37.526057999999999,176.013931000000014 -37.524554999999999,176.007598999999999 -37.524222999999999,175.955535999999995 -37.521110999999998,175.946349999999995 -37.523055999999997,175.940796000000006 -37.527779000000002,175.953583000000009 -37.558891000000003,175.994415000000004 -37.638893000000003,176.071899000000002 -37.655273,176.14498900000001 -37.675277999999999,176.242187999999999 -37.709442000000003,176.267486999999988 -37.676392,176.488281 -37.756667999999998,176.521636999999998 -37.769447,176.527771 -37.773887999999999,176.537475999999998 -37.784447,176.549712999999997 -37.793334999999999,176.656646999999992 -37.855559999999997,176.671082000000013 -37.862502999999997,176.686645999999996 -37.868332000000002,176.759154999999993 -37.892775999999998,176.784149000000014 -37.900275999999998,176.80304000000001 -37.903328000000002,176.819702000000007 -37.904442000000003,176.838287000000008 -37.907501000000003,176.917755 -37.926108999999997,176.943848000000003 -37.932502999999997,177.08273299999999 -37.967216,177.107468000000011 -37.987220999999998,177.159424 -38.013336000000002,177.415253000000007 -37.982498,177.47357199999999 -37.962502,177.545806999999996 -37.919167000000002,177.552459999999996 -37.915000999999997,177.571625000000012 -37.902222000000002,177.599120999999997 -37.878051999999997,177.603577 -37.872498,177.646941999999996 -37.805,177.732178000000005 -37.682502999999997,177.738861000000014 -37.678336999999999,177.746917999999994 -37.675277999999999,177.791931000000005 -37.666946000000003,177.849396000000013 -37.657218999999998,177.858856000000003 -37.656661999999997,177.868010999999996 -37.654442000000003,177.875792999999987 -37.651389999999999,178.0 -37.592224000000002,178.006653 -37.588332999999999,178.012206999999989 -37.583328000000002,178.018004999999988 -37.550831000000002,178.05581699999999 -37.542777999999998,178.064972000000012 -37.542228999999999,178.187744000000009 -37.546951,178.281921000000011 -37.560828999999998,178.306915000000004 -37.568061999999998,178.311919999999986 -37.573334000000003,178.312468999999993 -37.578887999999999,178.306915000000004 -37.583610999999998,178.321075000000008 -37.602500999999997,178.336365 -37.618332000000002,178.34970100000001 -37.626944999999999,178.367737000000005 -37.630828999999999,178.448028999999991 -37.645279000000002,178.457458000000003 -37.646667,178.468018 -37.646949999999997,178.488861000000014 -37.644165,178.497192000000013 -37.646667,178.504424999999998 -37.649994,178.550536999999991 -37.6875,178.555542000000003 -37.692497000000003,178.559692000000013 -37.698883000000002,178.56552099999999 -37.713332999999999,178.562468999999993 -37.719994,178.483306999999996 -37.826393000000003,178.455230999999998 -37.860000999999997,178.449982000000006 -37.865004999999996,178.429687999999999 -37.876944999999999,178.419983000000002 -37.887779000000002,178.350525000000005 -38.004722999999998,178.347473000000008 -38.011116,178.347197999999992 -38.019722000000002,178.348846000000009 -38.027779000000002,178.354950000000002 -38.032218999999998,178.360229000000004 -38.037506,178.364136000000002 -38.043616999999998,178.375792999999987 -38.072777000000002,178.378296000000006 -38.089995999999999,178.377746999999999 -38.09861,178.353850999999992 -38.185555,178.319976999999994 -38.248055,178.318024000000008 -38.255561999999998,178.317474000000004 -38.263893000000003,178.320800999999989 -38.398612999999997,178.302459999999996 -38.528885000000002,178.300536999999991 -38.536391999999999,178.296356000000003 -38.541946000000003,178.158874999999995 -38.649169999999998,178.074982000000006 -38.713889999999999,178.068297999999999 -38.717773,178.060241999999988 -38.721107000000003,178.050812000000008 -38.721381999999998,178.044433999999995 -38.717216,177.928864000000004 -38.722220999999998,177.941070999999994 -38.793616999999998,177.923858999999993 -38.918334999999999,177.917786000000007 -38.942802,177.909697999999992 -38.969718999999998,177.897705000000002 -39.047942999999997,177.893859999999989 -39.064776999999999,177.906708000000009 -39.064278000000002,177.923034999999999 -39.089165,177.942200000000014 -39.091942000000003,177.967743000000013 -39.098334999999999,177.991332999999997 -39.115004999999996,177.996612999999996 -39.120277000000002,177.999390000000005 -39.127495000000003,177.909973000000008 -39.256950000000003,177.898865 -39.267502,177.874968999999993 -39.286118000000002,177.868010999999996 -39.290283000000002,177.861908 -39.285834999999999,177.844970999999987 -39.251396,177.839416999999997 -39.236946000000003,177.824127000000004 -39.193053999999997,177.823577999999998 -39.183883999999999,177.826629999999994 -39.177222999999998,177.841644000000002 -39.152779000000002,177.822021000000007 -39.114445000000003,177.823195999999996 -39.110115,177.82351700000001 -39.105110000000003,177.82119800000001 -39.101275999999999,177.816696000000007 -39.099274,177.680266999999986 -39.075279000000002,177.628845000000013 -39.071114,177.426085999999998 -39.064163,177.387755999999996 -39.077781999999999,177.246917999999994 -39.128334000000002,177.206085000000002 -39.143616000000002,177.149138999999991 -39.165000999999997,177.054961999999989 -39.204445,176.935790999999995 -39.349997999999999,176.931365999999997 -39.355559999999997,176.903870000000012 -39.398055999999997,176.898865 -39.412216,176.89776599999999 -39.438048999999999,176.899414000000007 -39.446387999999999,176.946625000000012 -39.664444000000003,177.01080300000001 -39.654998999999997,177.107178000000005 -39.660828000000002,177.116913000000011 -39.662216,177.120789000000002 -39.66861,177.119110000000006 -39.676108999999997,177.115783999999991 -39.682502999999997,177.08273299999999 -39.729996,177.073577999999998 -39.741385999999999,177.068024000000008 -39.746108999999997,177.059692000000013 -39.749167999999997,177.050262000000004 -39.751396,177.033874999999995 -39.757506999999997,177.028045999999989 -39.762504999999997,177.023590000000013 -39.768059,177.020263999999997 -39.774718999999997,176.894713999999993 -40.034728999999999,176.890533000000005 -40.049728000000002,176.889983999999998 -40.058052000000004,176.89498900000001 -40.082779000000002,176.893035999999995 -40.090279000000002,176.874114999999989 -40.121383999999999,176.834136999999998 -40.181671,176.808319000000012 -40.216659999999997,176.796935999999988 -40.226387000000003,176.687195000000003 -40.321387999999999,176.644135000000006 -40.379997000000003,176.628296000000006 -40.421944000000003,176.539977999999991 -40.495002999999997,176.521362000000011 -40.513893000000003,176.500823999999994 -40.535004,176.441924999999998 -40.600281000000003,176.405243000000013 -40.643889999999999,176.386108000000007 -40.675002999999997,176.35522499999999 -40.688606,176.349396000000013 -40.693610999999997,176.288574000000011 -40.793892,176.239136000000002 -40.90889,176.22079500000001 -40.931671,176.195526 -40.941665999999998,176.172760000000011 -40.952224999999999,176.158600000000007 -40.959999000000003,176.152771 -40.964722000000002,176.142212 -40.975273,176.134154999999993 -40.987502999999997,176.120789000000002 -41.013618,176.11300700000001 -41.035277999999998,176.098297000000002 -41.087218999999997,176.087463000000014 -41.116112,176.080811000000011 -41.129165999999998,176.062195000000003 -41.151938999999999,175.984679999999997 -41.231383999999998,175.955230999999998 -41.255279999999999,175.819121999999993 -41.347220999999998,175.743561 -41.392226999999998,175.736358999999993 -41.396110999999998,175.557738999999998 -41.485000999999997,175.471069 -41.541389000000002,175.427459999999996 -41.564444999999999,175.323028999999991 -41.614449,175.313292999999987 -41.616394,175.230804000000006 -41.620834000000002,175.222197999999992 -41.618332000000002,175.21691899999999 -41.612777999999999,175.184692000000013 -41.535834999999999,175.181915000000004 -41.519447,175.181091000000009 -41.500838999999999,175.188568000000004 -41.461112999999997,175.193024000000008 -41.446106,175.193848000000003 -41.437775000000002,175.191070999999994 -41.430557,175.186095999999992 -41.425002999999997,175.080261000000007 -41.385559,175.063018999999997 -41.380279999999999,175.05304000000001 -41.378608999999997,175.045532000000009 -41.378608999999997,175.027190999999988 -41.381667999999998,174.993286000000012 -41.393332999999998,174.985779000000008 -41.397224,174.972747999999996 -41.405830000000002,174.960509999999999 -41.415275999999999,174.949982000000006 -41.425559999999997,174.944976999999994 -41.431114,174.94165000000001 -41.437775000000002,174.936919999999986 -41.443328999999999,174.918578999999994 -41.448051,174.908600000000007 -41.448334000000003,174.872467 -41.429442999999999,174.86605800000001 -41.425002999999997,174.861084000000005 -41.419724000000002,174.861633000000012 -41.347496,174.863861000000014 -41.340279000000002,174.870789000000002 -41.327224999999999,174.87912 -41.315002,174.883881000000002 -41.309441,174.894440000000003 -41.290000999999997,174.89776599999999 -41.282501000000003,174.899993999999992 -41.275002,174.901916999999997 -41.258338999999999,174.901916999999997 -41.251114,174.898865 -41.234444000000003,174.89498900000001 -41.228050000000003,174.887482000000006 -41.224442000000003,174.827179 -41.218887000000002,174.818848000000003 -41.221938999999999,174.787475999999998 -41.244446000000003,174.778045999999989 -41.255836000000002,174.774414000000007 -41.262222,174.771087999999992 -41.278053,174.778594999999996 -41.281387000000002,174.796082000000013 -41.286949,174.818024000000008 -41.284728999999999,174.824127000000004 -41.289169,174.829407000000003 -41.294724000000002,174.833313000000004 -41.301108999999997,174.832184000000012 -41.309441,174.82995600000001 -41.316665999999998,174.826355000000007 -41.323334000000003,174.821625000000012 -41.328887999999999,174.815796000000006 -41.333610999999998,174.807189999999991 -41.336387999999999,174.744689999999991 -41.347496,174.700531000000012 -41.344444000000003,174.671906000000007 -41.338332999999999,174.654694000000006 -41.333061,174.648314999999997 -41.328612999999997,174.629669000000007 -41.315002,174.59191899999999 -41.27861,174.591644000000002 -41.271385000000002,174.594116000000014 -41.263893000000003,174.601074000000011 -41.250838999999999,174.608306999999996 -41.237777999999999,174.61300700000001 -41.232216,174.619110000000006 -41.23111,174.627746999999999 -41.233887000000003,174.637482000000006 -41.235557999999997,174.648590000000013 -41.234444000000003,174.666931000000005 -41.229720999999998,174.681365999999997 -41.221938999999999,174.694702000000007 -41.213614999999997,174.712738000000002 -41.199440000000003,174.718567000000007 -41.194716999999997,174.800812000000008 -41.100281000000003,174.844421000000011 -41.041671999999998,174.874390000000005 -41.018059,174.882721000000004 -41.015006999999997,174.892486999999988 -41.013061999999998,174.901093000000003 -41.010283999999999,174.908324999999991 -41.006393000000003,174.932189999999991 -40.987502999999997,174.94165000000001 -40.976387000000003,174.945251000000013 -40.969718999999998,174.947478999999987 -40.962218999999997,175.014983999999998 -40.84861,175.09857199999999 -40.755836000000002,175.112731999999994 -40.738892,175.120789000000002 -40.726944000000003,175.127746999999999 -40.713614999999997,175.164153999999996 -40.631943,175.169708000000014 -40.616942999999999,175.171906000000007 -40.609726000000002,175.187468999999993 -40.530830000000002,175.23800700000001 -40.329726999999998,175.23135400000001 -40.280830000000002,175.201629999999994 -40.181671,175.196349999999995 -40.166946000000003,175.178314 -40.134171000000002,175.15554800000001 -40.095832999999999,175.071625000000012 -40.003059,175.055542000000003 -39.987777999999999,175.022217000000012 -39.958053999999997,174.986358999999993 -39.93,174.974120999999997 -39.920836999999999,174.960784999999987 -39.912773,174.938873 -39.902222000000002,174.923034999999999 -39.895836000000003,174.836638999999991 -39.865004999999996,174.828307999999993 -39.862502999999997,174.790802000000014 -39.854720999999998,174.781096999999988 -39.853057999999997,174.751373 -39.865555,174.740509000000003 -39.866661,174.729674999999986 -39.865836999999999,174.57607999999999 -39.829169999999998,174.558013999999986 -39.824722,174.549408 -39.822226999999998,174.542205999999993 -39.818610999999997,174.523865 -39.805,174.421356000000003 -39.726944000000003,174.410521999999986 -39.716942000000003,174.376068000000004 -39.678612,174.353577 -39.639999000000003,174.348846000000009 -39.634444999999999,174.336638999999991 -39.625557,174.316070999999994 -39.613892,174.30886799999999 -39.610283000000003,174.217194000000006 -39.579726999999998,174.208862000000011 -39.577224999999999,174.040802000000014 -39.552779999999998,173.997741999999988 -39.551392,173.986908 -39.550552000000003,173.970245000000006 -39.545279999999998,173.963012999999989 -39.541671999999998,173.871062999999992 -39.483330000000002,173.851898000000006 -39.470551,173.839966000000004 -39.461387999999999,173.810790999999995 -39.4375,173.79525799999999 -39.421944000000003,173.786652000000004 -39.409996,173.775817999999987 -39.390839,173.769713999999993 -39.376944999999999,173.762206999999989 -39.354720999999998,173.754424999999998 -39.305,173.751923000000005 -39.288612,173.751647999999989 -39.269996999999996,173.781921000000011 -39.191383000000002,173.785247999999996 -39.184998,173.800536999999991 -39.169167000000002,173.82995600000001 -39.145836000000003,173.844421000000011 -39.138336000000002,173.868010999999996 -39.128883000000002,173.892761000000007 -39.120552000000004,174.011108000000007 -39.073334000000003,174.114685000000009 -39.024445,174.187744000000009 -38.988608999999997,174.209136999999998 -38.977218999999998,174.226623999999987 -38.972496,174.248016000000007 -38.970551,174.259978999999987 -38.970275999999998,174.281372000000005 -38.969994,174.293029999999987 -38.969994,174.313292999999987 -38.972496,174.351348999999999 -38.979438999999999,174.375244000000009 -38.979163999999997,174.384704999999997 -38.977218999999998,174.392761000000007 -38.974442000000003,174.456359999999989 -38.940277000000002,174.546082000000013 -38.871941,174.557738999999998 -38.860557999999997,174.568024000000008 -38.850281000000003,174.587738000000002 -38.828887999999999,174.594421000000011 -38.815834000000002,174.603302000000014 -38.786118000000002,174.608582000000013 -38.763061999999998,174.625518999999997 -38.677779999999998,174.642486999999988 -38.590836000000003,174.681091000000009 -38.379165999999998,174.724396000000013 -38.185828999999998,174.838561999999996 -38.157218999999998,174.848021999999986 -38.156944000000003,174.85635400000001 -38.154167,174.926636000000002 -38.116112,174.932465000000008 -38.111389000000003,174.940246999999999 -38.101112,174.898590000000013 -38.075004999999997,174.877166999999986 -38.064163,174.892486999999988 -37.976387000000003,174.893585000000002 -37.969994,174.868286000000012 -37.943610999999997,174.861084000000005 -37.939995000000003,174.85522499999999 -37.944716999999997,174.834686000000005 -37.963614999999997,174.830261000000007 -37.969161999999997,174.828033000000005 -37.976661999999997,174.828583000000009 -37.995002999999997,174.822754000000003 -37.999724999999998,174.814696999999995 -38.002502,174.804137999999995 -38.001944999999999,174.797211000000004 -37.998336999999999,174.791077 -37.993614,174.786376999999987 -37.988334999999999,174.783874999999995 -37.980826999999998,174.783600000000007 -37.971663999999997,174.788025000000005 -37.868332000000002,174.788879000000009 -37.860000999999997,174.791077 -37.852783000000002,174.795532000000009 -37.846947,174.819702000000007 -37.829169999999998,174.826629999999994 -37.825279000000002,174.841339000000005 -37.818610999999997,174.872741999999988 -37.806106999999997,174.883330999999998 -37.805,174.903045999999989 -37.807502999999997,174.945251000000013 -37.810555,174.967467999999997 -37.809165999999998,174.975525000000005 -37.806389000000003,174.974975999999998 -37.75,174.974670000000003 -37.740836999999999,174.966644000000002 -37.739998,174.951355000000007 -37.743057,174.94442699999999 -37.745002999999997,174.93081699999999 -37.752502,174.906921000000011 -37.774169999999998,174.870789000000002 -37.783057999999997,174.861633000000012 -37.785004,174.848297000000002 -37.769722000000002,174.828307999999993 -37.710830999999999,174.764160000000004 -37.527779000000002,174.744415000000004 -37.487502999999997,174.724975999999998 -37.447220000000002,174.717467999999997 -37.425002999999997,174.714690999999988 -37.408607000000003,174.714690999999988 -37.399445,174.719116000000014 -37.393616000000002,174.725799999999992 -37.389999000000003,174.744415000000004 -37.385834000000003,174.760528999999991 -37.380279999999999,174.767486999999988 -37.376389000000003,174.773041000000006 -37.371665999999998,174.831635000000006 -37.308052000000004,174.840789999999998 -37.296951,174.840515000000011 -37.291389000000002,174.82995600000001 -37.290557999999997,174.821899000000002 -37.291671999999998,174.812744000000009 -37.293616999999998,174.804687999999999 -37.296393999999999,174.797760000000011 -37.300277999999999,174.766083000000009 -37.321114,174.754700000000014 -37.330559,174.751373 -37.336945,174.744965000000008 -37.359169,174.740509000000003 -37.364722999999998,174.733582000000013 -37.368606999999997,174.724120999999997 -37.368889000000003,174.717194000000006 -37.365279999999998,174.711365 -37.360557999999997,174.701629999999994 -37.349724000000002,174.69442699999999 -37.336945,174.660187000000008 -37.273311999999997,174.645813000000004 -37.236389000000003,174.639709000000011 -37.224442000000003,174.599975999999998 -37.153885000000002,174.578307999999993 -37.115555,174.569976999999994 -37.103614999999998,174.555542000000003 -37.087502,174.551909999999992 -37.080832999999998,174.549712999999997 -37.073616,174.55304000000001 -37.067222999999998,174.558593999999999 -37.0625,174.568848000000003 -37.061385999999999,174.644135000000006 -37.061110999999997,174.661376999999987 -37.065551999999997,174.664977999999991 -37.071944999999999,174.666381999999999 -37.080283999999999,174.661925999999994 -37.085830999999999,174.650542999999999 -37.095275999999998,174.646087999999992 -37.100838000000003,174.648590000000013 -37.108055,174.703856999999999 -37.197777000000002,174.733856000000003 -37.196106,174.716644000000002 -37.154167,174.72357199999999 -37.150275999999998,174.87912 -37.088889999999999,174.887482000000006 -37.059165999999998,174.795532000000009 -37.023055999999997,174.804413000000011 -36.972220999999998,174.824982000000006 -36.960830999999999,174.829407000000003 -36.955002,174.83273299999999 -36.948608,174.828033000000005 -36.943053999999997,174.818848000000003 -36.941383000000002,174.770263999999997 -36.936661,174.696625000000012 -36.93972,174.686095999999992 -36.940834000000002,174.659697999999992 -36.947495000000004,174.653045999999989 -36.951393000000003,174.641662999999994 -36.960830999999999,174.622467 -36.982216,174.619110000000006 -36.988892,174.617187999999999 -36.996108999999997,174.600525000000005 -37.022224,174.524688999999995 -37.045555,174.515533000000005 -37.045555,174.508605999999986 -37.041946000000003,174.502472000000012 -37.037506,174.498016000000007 -37.031944000000003,174.490783999999991 -37.019165,174.484679999999997 -37.005561999999998,174.459228999999993 -36.944031000000003,174.451904000000013 -36.923889000000003,174.446930000000009 -36.909163999999997,174.443024000000008 -36.893616000000002,174.439147999999989 -36.868606999999997,174.436645999999996 -36.852226000000002,174.43386799999999 -36.835555999999997,174.427764999999994 -36.812775000000002,174.422760000000011 -36.798057999999997,174.416655999999989 -36.784171999999998,174.409697999999992 -36.771385000000002,174.406096999999988 -36.765006999999997,174.390533000000005 -36.740279999999998,174.344299000000007 -36.679336999999997,174.301085999999998 -36.62722,174.284973000000008 -36.612777999999999,174.267486999999988 -36.599167,174.236908 -36.568061999999998,174.208862000000011 -36.535277999999998,174.187744000000009 -36.496948000000003,174.17804000000001 -36.467498999999997,174.177764999999994 -36.458336000000003,174.178864000000004 -36.449997000000003,174.181091000000009 -36.442497000000003,174.184417999999994 -36.436110999999997,174.189972000000012 -36.431389000000003,174.196930000000009 -36.427779999999998,174.20495600000001 -36.428612,174.24383499999999 -36.440834000000002,174.251923000000005 -36.443610999999997,174.257751000000013 -36.448051,174.300262000000004 -36.515839,174.348846000000009 -36.601944000000003,174.367919999999998 -36.629165999999998,174.370728000000014 -36.6325,174.422484999999995 -36.667220999999998,174.430542000000003 -36.668059999999997,174.453033000000005 -36.651108,174.456359999999989 -36.644722000000002,174.465515000000011 -36.582779000000002,174.465515000000011 -36.532218999999998,174.442474000000004 -36.414718999999998,174.422211000000004 -36.366112,174.41885400000001 -36.370834000000002,174.391937000000013 -36.395004,174.384978999999987 -36.398887999999999,174.377166999999986 -36.401665,174.303864000000004 -36.395279000000002,174.296935999999988 -36.391669999999998,174.285247999999996 -36.3825,174.276916999999997 -36.370552000000004,174.26998900000001 -36.357779999999998,174.268585000000002 -36.349442000000003,174.268585000000002 -36.342224000000002,174.292205999999993 -36.316947999999996,174.299988000000013 -36.314163,174.308013999999986 -36.316947999999996,174.325531000000012 -36.330283999999999,174.334686000000005 -36.332222000000002,174.36883499999999 -36.331673000000002,174.376891999999998 -36.330832999999998,174.421248999999989 -36.310611999999999,174.50692699999999 -36.267220000000002,174.518311000000011 -36.258057,174.521636999999998 -36.251396,174.519135000000006 -36.245834000000002,174.505248999999992 -36.231383999999998,174.413299999999992 -36.263061999999998,174.378296000000006 -36.286667,174.364685000000009 -36.294167000000002,174.346619000000004 -36.298057999999997,174.336365 -36.298889000000003,174.305237000000005 -36.287506,174.365233999999987 -36.260002,174.442200000000014 -36.169724000000002,174.396087999999992 -36.144447,174.396362000000011 -36.151938999999999,174.394135000000006 -36.159163999999997,174.373290999999995 -36.206389999999999,174.369965000000008 -36.213057999999997,174.358856000000003 -36.222220999999998,174.345245000000006 -36.229720999999998,174.337463000000014 -36.232773000000002,174.33273299999999 -36.229163999999997,174.307738999999998 -36.176949,174.282745000000006 -36.121108999999997,174.274993999999992 -36.118332000000002,174.239409999999992 -36.111389000000003,174.229126000000008 -36.112502999999997,174.195251000000013 -36.131110999999997,174.188568000000004 -36.144165,174.185790999999995 -36.171944000000003,174.191345000000013 -36.176392,174.19830300000001 -36.18,174.217743000000013 -36.182502999999997,174.226898000000006 -36.182502999999997,174.236084000000005 -36.180557,174.244110000000006 -36.183059999999998,174.287749999999988 -36.210281000000002,174.312468999999993 -36.236663999999998,174.314696999999995 -36.243889000000003,174.267212 -36.270279000000002,174.259430000000009 -36.273055999999997,174.251373 -36.272499000000003,174.065796000000006 -36.168334999999999,173.999114999999989 -36.121108999999997,173.994415000000004 -36.115836999999999,173.99105800000001 -36.109444000000003,173.931091000000009 -35.981940999999999,173.938568000000004 -35.934998,173.947478999999987 -35.923889000000003,173.948577999999998 -35.915550000000003,173.946075000000008 -35.908051,173.913879000000009 -35.86972,173.908324999999991 -35.874442999999999,173.903870000000012 -35.879997000000003,173.904967999999997 -35.888336000000002,173.921356000000003 -36.003059,173.980804000000006 -36.121383999999999,173.987731999999994 -36.134171000000002,173.992461999999989 -36.139724999999999,174.124390000000005 -36.263618,174.176085999999998 -36.276947,174.180542000000003 -36.282501000000003,174.198853000000014 -36.343887000000002,174.199982000000006 -36.352226000000002,174.198028999999991 -36.368606999999997,174.194702000000007 -36.375275000000002,174.189147999999989 -36.379722999999998,174.115233999999987 -36.40361,174.089966000000004 -36.411385000000003,174.080811000000011 -36.409438999999999,174.06942699999999 -36.400275999999998,174.065796000000006 -36.393889999999999,174.057465000000008 -36.374718,174.049133000000012 -36.353614999999998,174.044433999999995 -36.338889999999999,174.039703000000003 -36.323334000000003,174.031096999999988 -36.293059999999997,174.020537999999988 -36.273887999999999,173.82607999999999 -36.032501000000003,173.737457000000006 -35.933608999999997,173.727172999999993 -35.923614999999998,173.590515000000011 -35.778053,173.398865 -35.573891000000003,173.395537999999988 -35.567504999999997,173.398865 -35.553612,173.446625000000012 -35.440277000000002,173.465789999999998 -35.429169000000002,173.501923000000005 -35.419724000000002,173.506378000000012 -35.425277999999999,173.540253000000007 -35.430832000000002,173.629943999999995 -35.356667000000002,173.65554800000001 -35.322502,173.65554800000001 -35.313332000000003,173.564147999999989 -35.278053,173.556091000000009 -35.280830000000002,173.551636000000002 -35.286391999999999,173.549712999999997 -35.302779999999998,173.549712999999997 -35.321114,173.551909999999992 -35.328612999999997,173.566924999999998 -35.344161999999997,173.568024000000008 -35.361671,173.566924999999998 -35.36972,173.559143000000006 -35.372771999999998,173.439696999999995 -35.376106,173.416077 -35.384444999999999,173.410247999999996 -35.388893000000003,173.391356999999999 -35.423057999999997,173.39498900000001 -35.449722,173.396087999999992 -35.458053999999997,173.392761000000007 -35.482773000000002,173.386382999999995 -35.523330999999999,173.380524000000008 -35.528053,173.37384 -35.524169999999998,173.306915000000004 -35.449165,173.237731999999994 -35.370277000000002,173.154144000000002 -35.276665,173.103302000000014 -35.226104999999997,173.09191899999999 -35.216942000000003,173.087463000000014 -35.211387999999999,173.09191899999999 -35.1875,173.098846000000009 -35.183608999999997,173.119110000000006 -35.185555,173.12802099999999 -35.1875,173.134704999999997 -35.191108999999997,173.14498900000001 -35.191940000000002,173.152771 -35.189163,173.163879000000009 -35.179169000000002,173.168578999999994 -35.173614999999998,173.18081699999999 -35.156104999999997,173.187468999999993 -35.143332999999998,173.191924999999998 -35.128334000000002,173.196349999999995 -35.104446000000003,173.197478999999987 -35.09639,173.198577999999998 -35.078887999999999,173.198577999999998 -35.051108999999997,173.193848000000003 -35.027222000000002,173.189423000000005 -35.012779000000002,173.179413000000011 -34.993332000000002,173.175812000000008 -34.986946000000003,173.159149000000014 -34.958336000000003,173.151093000000003 -34.946663,173.137755999999996 -34.93,172.947204999999997 -34.716942000000003,172.828033000000005 -34.584442000000003,172.812468999999993 -34.568893000000003,172.722473000000008 -34.495277000000002,172.739136000000002 -34.435555,172.900817999999987 -34.414718999999998,172.911925999999994 -34.414718999999998,173.020813000000004 -34.422226000000002,173.038879000000009 -34.436942999999999,173.043304000000006 -34.517775999999998,173.039977999999991 -34.522224,173.033324999999991 -34.525832999999999,173.024414000000007 -34.527779000000002,173.016662999999994 -34.52861,173.007476999999994 -34.526947,172.997467 -34.498336999999999,172.984130999999991 -34.472771000000002,172.961914000000007 -34.465279000000002,172.955230999999998 -34.468887000000002,172.908324999999991 -34.544167000000002,172.912749999999988 -34.549728000000002,172.923858999999993 -34.558891000000003,172.936095999999992 -34.567222999999998,172.973021999999986 -34.581116000000002,173.053314 -34.665550000000003,173.057738999999998 -34.680283000000003,173.110503999999992 -34.791389000000002,173.120789000000002 -34.810555,173.128570999999994 -34.822502,173.133026 -34.828055999999997,173.13857999999999 -34.832504,173.151916999999997 -34.839995999999999,173.213593000000003 -34.871941,173.242737000000005 -34.884726999999998,173.273314999999997 -34.940834000000002,173.268859999999989 -34.946387999999999,173.262206999999989 -34.959167,173.259978999999987 -34.966659999999997,173.258881000000002 -34.974716,173.259978999999987 -34.983055,173.264709000000011 -35.014449999999997,173.269135000000006 -35.019722000000002,173.317474000000004 -35.018889999999999,173.328583000000009 -35.009444999999999,173.358856000000003 -34.98111,173.36300700000001 -34.975555,173.366364000000004 -34.968887000000002,173.373259999999988 -34.936774999999997,173.371246000000014 -34.927444,173.400817999999987 -34.863334999999999,173.426085999999998 -34.82,173.450806 -34.807777000000002,173.500274999999988 -34.864722999999998,173.499114999999989 -34.871108999999997,173.492461999999989 -34.874718,173.452453999999989 -34.887779000000002,173.443297999999999 -34.889724999999999,173.433319000000012 -34.890555999999997,173.413025000000005 -34.888893000000003,173.405243000000013 -34.892502,173.399719000000005 -34.897224,173.399719000000005 -34.906387000000002,173.402190999999988 -34.913887000000003,173.411590999999987 -34.931778,173.419128 -34.945830999999998,173.426909999999992 -34.957779000000002,173.431641000000013 -34.963332999999999,173.44165000000001 -34.973328000000002,173.454131999999987 -34.981667000000002,173.467467999999997 -34.988892,173.475525000000005 -34.991669000000002,173.493286000000012 -34.995277000000002,173.541655999999989 -34.988608999999997,173.561645999999996 -34.958893000000003,173.562468999999993 -34.950836000000002,173.566924999999998 -34.936110999999997,173.572478999999987 -34.931389000000003,173.579131999999987 -34.927779999999998,173.589416999999997 -34.928612,173.83914200000001 -35.004173000000002,174.101074000000011 -35.121108999999997,174.098297000000002 -35.161667,174.091644000000002 -35.158051,174.056641000000013 -35.155555999999997,174.021911999999986 -35.164161999999997,174.008026 -35.207504,174.008026 -35.215004,174.011382999999995 -35.221381999999998,174.018311000000011 -35.224997999999999,174.093841999999995 -35.225273,174.100525000000005 -35.228881999999999,174.143585000000002 -35.328612999999997,174.208008000000007 -35.323334000000003,174.218018 -35.322226999999998,174.247741999999988 -35.27861,174.319976999999994 -35.232773000000002,174.383881000000002 -35.337775999999998,174.461638999999991 -35.445273999999998,174.491913000000011 -35.485275,174.575806 -35.601944000000003,174.577179 -35.610000999999997,174.577147999999994 -35.618088,174.569976999999994 -35.648055999999997,174.563292999999987 -35.651665,174.530272999999994 -35.649445,174.520263999999997 -35.648612999999997,174.513306 -35.645004,174.505248999999992 -35.642502,174.479126000000008 -35.641945,174.47357199999999 -35.646393000000003,174.474975999999998 -35.654716,174.518311000000011 -35.724167,174.523041000000006 -35.729438999999999,174.554137999999995 -35.750281999999999,174.561919999999986 -35.753059,174.583862000000011 -35.764724999999999,174.60244800000001 -35.844444000000003,174.596924 -35.849167,174.58914200000001 -35.851944000000003,174.577758999999986 -35.852226000000002,174.560790999999995 -35.847777999999998,174.554961999999989 -35.843330000000002,174.538574000000011 -35.819450000000003,174.523314999999997 -35.796669,174.519713999999993 -35.790283000000002,174.49105800000001 -35.769447,174.361908 -35.723328000000002,174.357451999999995 -35.72361,174.34857199999999 -35.734726000000002,174.346924 -35.833061,174.350525000000005 -35.839438999999999,174.35522499999999 -35.845001000000003,174.360779000000008 -35.849442000000003,174.381348000000003 -35.851112,174.384704999999997 -35.844718999999998,174.385528999999991 -35.828887999999999,174.391083000000009 -35.824173000000002,174.398865 -35.821387999999999,174.437468999999993 -35.822777000000002,174.476074000000011 -35.824173000000002,174.486358999999993 -35.824722,174.519713999999993 -35.844718999999998,174.525542999999999 -35.849167,174.524414000000007 -35.855559999999997,174.521362000000011 -35.862220999999998,174.501373 -35.889999000000003,174.496917999999994 -35.895553999999997,174.487182999999987 -35.915000999999997,174.495513999999986 -35.988608999999997,174.498016000000007 -35.994163999999998,174.514160000000004 -36.008614,174.56942699999999 -36.037224000000002,174.578583000000009 -36.038894999999997,174.587738000000002 -36.038894999999997,174.596619000000004 -36.036667,174.606902999999988 -36.037506,174.612731999999994 -36.042228999999999,174.622192000000013 -36.053055,174.62912 -36.065834000000002,174.629394999999988 -36.075004999999997,174.616364000000004 -36.100861000000002)),((171.185241999999988 -44.938332000000003,171.182129000000003 -44.94173,171.175017999999994 -44.949902000000002,171.167923000000002 -44.959850000000003,171.165436 -44.966599000000002,171.164703000000003 -44.970275999999998,171.163299999999992 -44.978332999999999,171.149719000000005 -44.996665999999998,171.07995600000001 -45.067222999999998,171.02664200000001 -45.103332999999999,170.975525000000005 -45.151108,170.966063999999989 -45.163055,170.961914000000007 -45.169167000000002,170.921630999999991 -45.243057,170.873566000000011 -45.358055,170.873290999999995 -45.367218,170.876891999999998 -45.373885999999999,170.871338000000009 -45.424171,170.859955000000014 -45.487502999999997,170.855804000000006 -45.493889000000003,170.750274999999988 -45.61972,170.674682999999987 -45.745002999999997,170.616913000000011 -45.839438999999999,170.55886799999999 -45.881667999999998,170.554413000000011 -45.888053999999997,170.555542000000003 -45.896110999999998,170.591063999999989 -45.894165,170.600525000000005 -45.891669999999998,170.608582000000013 -45.888053999999997,170.658600000000007 -45.858612,170.718018 -45.817504999999997,170.724670000000003 -45.813057,170.773314999999997 -45.782775999999998,170.781096999999988 -45.786391999999999,170.790802000000014 -45.806946000000003,170.790802000000014 -45.84639,170.788879000000009 -45.863892,170.783051 -45.878334000000002,170.776366999999993 -45.882773999999998,170.699982000000006 -45.911667,170.664429000000013 -45.908332999999999,170.57330300000001 -45.916663999999997,170.550536999999991 -45.919167000000002,170.484406000000007 -45.926949,170.452453999999989 -45.931946000000003,170.424408 -45.939438000000003,170.382721000000004 -45.956108,170.342467999999997 -45.97361,170.315246999999999 -45.991385999999999,170.309692000000013 -45.996948000000003,170.294433999999995 -46.013893000000003,170.281646999999992 -46.029442000000003,170.263610999999997 -46.051940999999999,170.256378000000012 -46.065551999999997,170.253051999999997 -46.081947,170.252472000000012 -46.09111,170.254424999999998 -46.107779999999998,170.252777000000009 -46.115836999999999,170.240783999999991 -46.146949999999997,170.237731999999994 -46.154167,170.226623999999987 -46.165000999999997,170.214416999999997 -46.174720999999998,170.193848000000003 -46.188048999999999,170.169433999999995 -46.198608,170.067748999999992 -46.246665999999998,169.911925999999994 -46.340279000000002,169.863585999999998 -46.371383999999999,169.858001999999999 -46.376663,169.849396000000013 -46.389442000000003,169.848021999999986 -46.416946000000003,169.849975999999998 -46.433326999999998,169.852172999999993 -46.440834000000002,169.853850999999992 -46.457504,169.850799999999992 -46.464722000000002,169.845245000000006 -46.469994,169.701904000000013 -46.558052000000004,169.631348000000003 -46.581947,169.458008000000007 -46.623328999999998,169.266388000000006 -46.656387000000002,169.133026 -46.670836999999999,169.107727000000011 -46.669167000000002,169.097197999999992 -46.666946000000003,169.084411999999986 -46.657501000000003,169.067200000000014 -46.635002,169.061919999999986 -46.675002999999997,169.053864000000004 -46.678612,169.008026 -46.680832000000002,168.883330999999998 -46.667777999999998,168.878296000000006 -46.661942000000003,168.861908 -46.628334000000002,168.862457000000006 -46.619446000000003,168.864409999999992 -46.611114999999998,168.864959999999996 -46.603889000000002,168.844970999999987 -46.563614,168.835784999999987 -46.560555,168.823853000000014 -46.561110999999997,168.733306999999996 -46.577499000000003,168.640533000000005 -46.603889000000002,168.633605999999986 -46.606392,168.614685000000009 -46.611114999999998,168.593018 -46.614165999999997,168.568848000000003 -46.615004999999996,168.516937000000013 -46.614165999999997,168.492737000000005 -46.613334999999999,168.442138999999997 -46.601500999999999,168.436630000000008 -46.599666999999997,168.446625000000012 -46.584003000000003,168.442200000000014 -46.575004999999997,168.454407000000003 -46.574447999999997,168.490509000000003 -46.573059,168.502472000000012 -46.574173000000002,168.506103999999993 -46.578887999999999,168.499114999999989 -46.583328000000002,168.505553999999989 -46.588051,168.551636000000002 -46.594444000000003,168.561371000000008 -46.591942000000003,168.566924999999998 -46.586661999999997,168.563599000000011 -46.580002,168.550812000000008 -46.570557,168.541655999999989 -46.567504999999997,168.391356999999999 -46.540000999999997,168.361908 -46.544449,168.353577 -46.547783000000003,168.351623999999987 -46.556106999999997,168.352172999999993 -46.564444999999999,168.362731999999994 -46.583885000000002,168.348236000000014 -46.582165000000003,168.352904999999993 -46.584499,168.359267999999986 -46.585830999999999,168.365082 -46.592666999999999,168.367248999999987 -46.596668,168.367599000000013 -46.601497999999999,168.364928999999989 -46.605331,168.35775799999999 -46.604500000000002,168.351409999999987 -46.603164999999997,168.275269000000009 -46.557777000000002,168.269135000000006 -46.535561,168.268311000000011 -46.529167,168.27664200000001 -46.525832999999999,168.286102 -46.523330999999999,168.307738999999998 -46.520553999999997,168.318297999999999 -46.520836000000003,168.318848000000003 -46.529167,168.321075000000008 -46.536667,168.328856999999999 -46.540557999999997,168.339416999999997 -46.539169,168.386658000000011 -46.497779999999999,168.392486999999988 -46.492226000000002,168.395537999999988 -46.485000999999997,168.396087999999992 -46.477775999999999,168.394135000000006 -46.470275999999998,168.37384 -46.421944000000003,168.36883499999999 -46.416106999999997,168.359679999999997 -46.415000999999997,168.350249999999988 -46.417503000000004,168.250274999999988 -46.400832999999999,168.211090000000013 -46.355277999999998,168.206085000000002 -46.351394999999997,168.194702000000007 -46.345551,168.185516000000007 -46.342498999999997,168.174988000000013 -46.340279000000002,168.116364000000004 -46.343612999999998,168.063873 -46.351669,167.955535999999995 -46.371383999999999,167.893035999999995 -46.387222,167.850799999999992 -46.399445,167.832184000000012 -46.398612999999997,167.824401999999992 -46.394447,167.753875999999991 -46.333885000000002,167.776916999999997 -46.312775000000002,167.781372000000005 -46.306389000000003,167.783600000000007 -46.298340000000003,167.781372000000005 -46.290840000000003,167.778045999999989 -46.284171999999998,167.701904000000013 -46.209442000000003,167.596924 -46.166389000000002,167.556641000000013 -46.156387000000002,167.546356000000003 -46.154167,167.534424 -46.152779000000002,167.483032000000009 -46.149726999999999,167.471069 -46.149994,167.460236000000009 -46.151389999999999,167.451904000000013 -46.154716,167.446075000000008 -46.159996,167.415526999999997 -46.204720000000002,167.356628 -46.254447999999996,167.280272999999994 -46.273055999999997,167.261108000000007 -46.267775999999998,167.238555999999988 -46.263893000000003,167.086638999999991 -46.240555,167.001373 -46.229163999999997,166.966063999999989 -46.224716,166.949982000000006 -46.223885000000003,166.915253000000007 -46.226104999999997,166.883026 -46.229996,166.836365 -46.232498,166.823028999999991 -46.231667000000002,166.768035999999995 -46.22361,166.726348999999999 -46.214165,166.717467999999997 -46.210830999999999,166.705230999999998 -46.201110999999997,166.670806999999996 -46.161667,166.67025799999999 -46.15361,166.684417999999994 -46.145004,166.693848000000003 -46.142775999999998,166.709411999999986 -46.135277000000002,166.738861000000014 -46.119163999999998,166.761230000000012 -46.093612999999998,166.784911999999991 -46.064945000000002,166.804748999999987 -46.033279,166.82995600000001 -46.003891000000003,166.854674999999986 -45.994163999999998,166.886932000000002 -45.990279999999998,166.943297999999999 -45.956108,166.949127000000004 -45.950836000000002,166.946930000000009 -45.945273999999998,166.939147999999989 -45.944716999999997,166.929687999999999 -45.947220000000002,166.836365 -45.981383999999998,166.828033000000005 -45.984444000000003,166.791350999999992 -46.005004999999997,166.785797000000002 -46.010283999999999,166.781096999999988 -46.016396,166.759308000000004 -46.035553,166.762969999999996 -46.038387,166.764969000000008 -46.042392999999997,166.763656999999995 -46.047221999999998,166.760162000000008 -46.050392000000002,166.740982000000002 -46.066059000000003,166.737793000000011 -46.066558999999998,166.670532000000009 -46.087218999999997,166.615783999999991 -46.090836000000003,166.613585999999998 -46.086387999999999,166.617461999999989 -46.059722999999998,166.621062999999992 -46.052498,166.640807999999993 -46.015006999999997,166.661652000000004 -45.991942999999999,166.625792999999987 -45.967216,166.492461999999989 -46.013061999999998,166.484406000000007 -46.014449999999997,166.474975999999998 -46.002785000000003,166.467194000000006 -45.990555,166.465239999999994 -45.983055,166.464690999999988 -45.839438999999999,166.468841999999995 -45.823059,166.472473000000008 -45.815834000000002,166.476898000000006 -45.809722999999998,166.537475999999998 -45.798889000000003,166.613861000000014 -45.801108999999997,166.652190999999988 -45.800277999999999,166.699982000000006 -45.798889000000003,166.881348000000003 -45.779998999999997,166.890807999999993 -45.777779000000002,166.974120999999997 -45.735000999999997,166.987182999999987 -45.709724,166.923034999999999 -45.705832999999998,166.912475999999998 -45.705275999999998,166.887482000000006 -45.705002,166.854126000000008 -45.707779000000002,166.825806 -45.714722000000002,166.809417999999994 -45.721381999999998,166.787475999999998 -45.689995000000003,166.775817999999987 -45.662773,166.81153900000001 -45.617942999999997,166.811217999999997 -45.613109999999999,166.812531000000007 -45.608111999999998,166.816710999999998 -45.605606000000002,166.869689999999991 -45.588779000000002,166.881026999999989 -45.586112999999997,166.88736 -45.585278000000002,166.895203000000009 -45.585608999999998,166.901366999999993 -45.587108999999998,166.912871999999993 -45.590946000000002,166.980255 -45.578612999999997,166.991913000000011 -45.580002,167.0 -45.576949999999997,167.005829000000006 -45.571671000000002,167.032470999999987 -45.527779000000002,167.041350999999992 -45.501396,166.989685000000009 -45.519165,166.891693000000004 -45.544724000000002,166.796875 -45.569389,166.791199000000006 -45.570720999999999,166.784836000000013 -45.571556,166.777023000000014 -45.571219999999997,166.710509999999999 -45.579445,166.704407000000003 -45.574447999999997,166.697204999999997 -45.554718,166.699127000000004 -45.546669,166.757476999999994 -45.425277999999999,166.801361000000014 -45.353614999999998,166.821625000000012 -45.320557,166.86883499999999 -45.279724000000002,166.880797999999999 -45.279167,167.008330999999998 -45.341667,167.038299999999992 -45.357779999999998,167.146941999999996 -45.427222999999998,167.16885400000001 -45.472496,167.205230999999998 -45.477775999999999,167.211914000000007 -45.475273,167.21414200000001 -45.467216,167.209411999999986 -45.461387999999999,167.173584000000005 -45.422775,167.158019999999993 -45.406661999999997,167.134978999999987 -45.386116,167.12912 -45.381385999999999,167.115509000000003 -45.372222999999998,167.097747999999996 -45.366112,167.087463000000014 -45.363616999999998,167.061645999999996 -45.345001000000003,167.051085999999998 -45.333328000000002,167.081421000000006 -45.325333,167.08407600000001 -45.321666999999998,167.092407000000009 -45.316498000000003,167.097243999999989 -45.314498999999998,167.114227 -45.310333,167.163574000000011 -45.302833999999997,167.169922000000014 -45.302998000000002,167.173584000000005 -45.305999999999997,167.176422000000002 -45.309330000000003,167.17756700000001 -45.313834999999997,167.212738000000002 -45.313332000000003,167.218841999999995 -45.318336000000002,167.232178000000005 -45.327224999999999,167.239685000000009 -45.331116000000002,167.248566000000011 -45.334167,167.260254000000003 -45.335830999999999,167.270813000000004 -45.334442000000003,167.301636000000002 -45.329445,167.309692000000013 -45.326110999999997,167.307738999999998 -45.318610999999997,167.300262000000004 -45.314444999999999,167.19464099999999 -45.271445999999997,167.138290000000012 -45.268943999999998,167.099471999999992 -45.272114000000002,167.094146999999992 -45.271278000000002,167.08964499999999 -45.268776000000003,167.002196999999995 -45.201110999999997,166.996917999999994 -45.145836000000003,167.146362000000011 -45.001671000000002,167.198577999999998 -44.956108,167.204407000000003 -44.951110999999997,167.228302000000014 -44.930832000000002,167.24105800000001 -44.921387000000003,167.260528999999991 -44.907501000000003,167.267486999999988 -44.903053,167.312744000000009 -44.875,167.320800999999989 -44.871383999999999,167.393462999999997 -44.862999000000002,167.398987000000005 -44.861496000000002,167.404312000000004 -44.863498999999997,167.421798999999993 -44.894168999999998,167.422974000000011 -44.898665999999999,167.420638999999994 -44.908496999999997,167.417968999999999 -44.912166999999997,167.440796000000006 -44.928612,167.439972000000012 -44.9375,167.441924999999998 -44.945,167.459686000000005 -44.99472,167.497741999999988 -45.003891000000003,167.507202000000007 -45.001396,167.508224000000013 -45.0,167.511658000000011 -44.995277000000002,167.511108000000007 -44.986946000000003,167.47908000000001 -44.903446000000002,167.465912000000003 -44.876441999999997,167.462752999999992 -44.867947,167.461578000000003 -44.863444999999999,167.460097999999988 -44.853946999999998,167.459411999999986 -44.843944999999998,167.459914999999995 -44.838444000000003,167.448577999999998 -44.795279999999998,167.453033000000005 -44.788894999999997,167.458587999999992 -44.783614999999998,167.59970100000001 -44.683883999999999,167.743010999999996 -44.611671,167.838866999999993 -44.498610999999997,167.850249999999988 -44.488052000000003,167.949982000000006 -44.40361,167.963593000000003 -44.395004,168.034973000000008 -44.353614999999998,168.12802099999999 -44.316947999999996,168.141662999999994 -44.308052000000004,168.144713999999993 -44.300834999999999,168.144135000000006 -44.292503000000004,168.124099999999999 -44.251404,168.143311000000011 -44.253059,168.153594999999996 -44.251396,168.169708000000014 -44.24472,168.288299999999992 -44.172775,168.29385400000001 -44.167503000000004,168.336638999999991 -44.123885999999999,168.339966000000004 -44.116661,168.337738000000002 -44.109169,168.334411999999986 -44.102783000000002,168.336365 -44.094444000000003,168.369689999999991 -44.043334999999999,168.374968999999993 -44.037781000000003,168.383026 -44.034447,168.402771 -44.029724000000002,168.672211000000004 -43.987777999999999,168.676909999999992 -43.993614,168.683043999999995 -43.998336999999999,168.690246999999999 -44.002228000000002,168.715239999999994 -44.012222,168.723021999999986 -44.012504999999997,168.753875999999991 -44.010002,168.764160000000004 -44.008614,168.824401999999992 -43.988334999999999,168.858582000000013 -43.976661999999997,168.866364000000004 -43.973328000000002,168.879669000000007 -43.964447,168.885254000000003 -43.959167,168.961914000000007 -43.90361,169.080765000000014 -43.848472999999998,169.142212 -43.794167000000002,169.224396000000013 -43.743332000000002,169.271636999999998 -43.722496,169.387482000000006 -43.679169000000002,169.491318000000007 -43.643467,169.539153999999996 -43.633614,169.62661700000001 -43.613892,169.64498900000001 -43.608893999999999,169.652771 -43.605559999999997,169.660521999999986 -43.601944000000003,169.721619000000004 -43.573334000000003,169.728302000000014 -43.568893000000003,169.739136000000002 -43.558052000000004,169.767486999999988 -43.522773999999998,169.790526999999997 -43.496665999999998,169.871062999999992 -43.406661999999997,169.884154999999993 -43.397781000000002,169.961638999999991 -43.371941,170.021911999999986 -43.352500999999997,170.028594999999996 -43.347777999999998,170.033874999999995 -43.342498999999997,170.038025000000005 -43.336112999999997,170.049408 -43.306946000000003,170.111358999999993 -43.254173000000002,170.288299999999992 -43.107779999999998,170.418029999999987 -43.052498,170.523041000000006 -43.010559,170.531921000000011 -43.008057,170.583037999999988 -42.990555,170.674347000000012 -42.958739999999999,170.704407000000003 -42.945830999999998,170.750549000000007 -42.924720999999998,170.781096999999988 -42.910553,170.794128 -42.901389999999999,171.065796000000006 -42.648055999999997,171.108306999999996 -42.608055,171.149719000000005 -42.563614,171.153594999999996 -42.55722,171.196075000000008 -42.476661999999997,171.225799999999992 -42.433608999999997,171.230255 -42.40889,171.235779000000008 -42.394165,171.247467 -42.375,171.260254000000003 -42.366112,171.270537999999988 -42.355003000000004,171.297760000000011 -42.310279999999999,171.304413000000011 -42.296669,171.309692000000013 -42.281944000000003,171.31665000000001 -42.249724999999998,171.321075000000008 -42.224716,171.322754000000003 -42.207222000000002,171.324401999999992 -42.18972,171.326355000000007 -42.172226000000002,171.329131999999987 -42.155830000000002,171.343841999999995 -42.110832000000002,171.361084000000005 -42.067779999999999,171.461638999999991 -41.859726000000002,171.51080300000001 -41.764449999999997,171.533051 -41.766396,171.557738999999998 -41.766663,171.569121999999993 -41.766112999999997,171.650817999999987 -41.761391000000003,171.663025000000005 -41.757781999999999,171.685790999999995 -41.746948000000003,171.790526999999997 -41.696387999999999,171.85522499999999 -41.652779000000002,171.886658000000011 -41.629997000000003,171.942200000000014 -41.550277999999999,172.02276599999999 -41.443053999999997,172.053864000000004 -41.417503000000004,172.064972000000012 -41.40361,172.122192000000013 -41.277779000000002,172.111633000000012 -41.236114999999998,172.10522499999999 -41.153053,172.106078999999994 -40.911385000000003,172.10635400000001 -40.893059,172.108856000000003 -40.885559,172.113861000000014 -40.879997000000003,172.186645999999996 -40.813332000000003,172.218567000000007 -40.785834999999999,172.22470100000001 -40.781109,172.255248999999992 -40.776947,172.263884999999988 -40.774169999999998,172.271362000000011 -40.770553999999997,172.299408 -40.755004999999997,172.348297000000002 -40.727493000000003,172.382721000000004 -40.698334000000003,172.426909999999992 -40.657775999999998,172.478302000000014 -40.613892,172.513320999999991 -40.598441999999999,172.517639000000003 -40.596783000000002,172.523482999999999 -40.597946,172.522644000000014 -40.602943000000003,172.521132999999992 -40.607277000000003,172.520813000000004 -40.625,172.519440000000003 -40.631385999999999,172.525542999999999 -40.6325,172.534149000000014 -40.631667999999998,172.571899000000002 -40.617775000000002,172.596343999999988 -40.601394999999997,172.62802099999999 -40.573891000000003,172.631621999999993 -40.567222999999998,172.631621999999993 -40.559998,172.608582000000013 -40.556946000000003,172.601348999999999 -40.558891000000003,172.597014999999999 -40.553333000000002,172.589690999999988 -40.558838000000002,172.583862000000011 -40.560004999999997,172.581024000000014 -40.556671,172.581848000000008 -40.551665999999997,172.589843999999999 -40.541172000000003,172.627166999999986 -40.511947999999997,172.633330999999998 -40.509171000000002,172.661376999999987 -40.502785000000003,172.712188999999995 -40.495552000000004,172.817748999999992 -40.504173000000002,172.861358999999993 -40.507781999999999,172.981628 -40.527222000000002,172.991332999999997 -40.529167,172.989959999999996 -40.53389,172.978026999999997 -40.53389,172.945251000000013 -40.530830000000002,172.895263999999997 -40.524445,172.797211000000004 -40.516112999999997,172.739959999999996 -40.516945,172.731628 -40.519722000000002,172.656921000000011 -40.653328000000002,172.701355000000007 -40.748336999999999,172.855804000000006 -40.853057999999997,172.865509000000003 -40.853057999999997,172.875244000000009 -40.851112,172.907195999999999 -40.828887999999999,172.930266999999986 -40.802222999999998,172.935241999999988 -40.796669,172.976623999999987 -40.781944000000003,172.985229000000004 -40.781112999999998,173.002196999999995 -40.786667,173.008330999999998 -40.791114999999998,173.013306 -40.796669,173.020537999999988 -40.809722999999998,173.051085999999998 -40.869446000000003,173.059692000000013 -40.962775999999998,173.059692000000013 -40.971938999999999,173.056091000000009 -40.978606999999997,173.031646999999992 -41.027495999999999,173.075806 -41.291114999999998,173.079680999999994 -41.297500999999997,173.085784999999987 -41.302222999999998,173.105529999999987 -41.313332000000003,173.168029999999987 -41.316108999999997,173.188873 -41.313332000000003,173.198853000000014 -41.311385999999999,173.207184000000012 -41.308608999999997,173.272217000000012 -41.274445,173.278320000000008 -41.269722000000002,173.32607999999999 -41.222496,173.340515000000011 -41.205832999999998,173.351623999999987 -41.195549,173.377166999999986 -41.178055,173.426085999999998 -41.150275999999998,173.598021999999986 -41.053612,173.606628 -41.052498,173.639709000000011 -41.073616,173.672760000000011 -41.070557,173.720519999999993 -41.060279999999999,173.727753000000007 -41.056389000000003,173.739959999999996 -41.047226000000002,173.744689999999991 -41.032501000000003,173.743286000000012 -41.024169999999998,173.738281 -41.018608,173.72744800000001 -41.019447,173.718841999999995 -41.022499000000003,173.696930000000009 -41.033614999999998,173.690796000000006 -41.038338000000003,173.682189999999991 -41.041114999999998,173.676085999999998 -41.036391999999999,173.673584000000005 -41.029167,173.674682999999987 -41.020836000000003,173.678314 -41.014449999999997,173.696625000000012 -41.000281999999999,173.751373 -40.976944000000003,173.800262000000004 -40.969161999999997,173.913299999999992 -40.931671,173.984679999999997 -40.896949999999997,173.994415000000004 -40.896667,174.02276599999999 -40.913055,174.027771 -40.91861,174.030272999999994 -40.925834999999999,174.03054800000001 -40.935271999999998,174.02941899999999 -40.943610999999997,174.022217000000012 -40.947220000000002,173.929961999999989 -40.992226000000002,173.832184000000012 -40.995002999999997,173.821075000000008 -40.994163999999998,173.782195999999999 -41.009171000000002,173.778594999999996 -41.015555999999997,173.769713999999993 -41.09861,173.778594999999996 -41.114449,173.794433999999995 -41.109444000000003,173.822204999999997 -41.080832999999998,173.821899000000002 -41.062218,173.836638999999991 -41.055,173.846343999999988 -41.053055,173.93081699999999 -41.049446000000003,173.946625000000012 -41.055832000000002,173.953033000000005 -41.060555,173.917755 -41.087502,173.887482000000006 -41.103332999999999,173.848846000000009 -41.144165,173.820526 -41.245834000000002,173.763306 -41.267502,173.76080300000001 -41.273055999999997,173.775817999999987 -41.289726000000002,173.788025000000005 -41.290557999999997,173.806365999999997 -41.289444000000003,174.03720100000001 -41.218330000000002,174.09970100000001 -41.198334000000003,174.128845000000013 -41.187218,174.133605999999986 -41.181671,174.133605999999986 -41.176108999999997,174.126068000000004 -41.174171,174.008605999999986 -41.175277999999999,174.001099000000011 -41.178885999999999,174.001373 -41.186385999999999,174.000274999999988 -41.194716999999997,173.993010999999996 -41.198334000000003,173.981902999999988 -41.199440000000003,173.932738999999998 -41.199997000000003,173.908324999999991 -41.199997000000003,173.899719000000005 -41.197495000000004,173.893585000000002 -41.192771999999998,173.887206999999989 -41.169724000000002,173.88580300000001 -41.161667,173.888031000000012 -41.154167,173.89776599999999 -41.133614,173.902466000000004 -41.128334000000002,174.032745000000006 -40.999724999999998,174.084411999999986 -41.021385000000002,174.094116000000014 -41.023330999999999,174.246338000000009 -41.044724000000002,174.258330999999998 -41.035277999999998,174.299408 -41.003616,174.315246999999999 -41.000557,174.323853000000014 -41.003334000000002,174.323853000000014 -41.010834000000003,174.321625000000012 -41.018059,174.209960999999993 -41.197495000000004,174.161376999999987 -41.225555,174.152771 -41.226661999999997,174.114685000000009 -41.231383999999998,174.052185000000009 -41.235000999999997,174.02664200000001 -41.236114999999998,174.053864000000004 -41.254173000000002,174.206359999999989 -41.269447,174.214966000000004 -41.266663,174.291655999999989 -41.238892,174.303588999999988 -41.229720999999998,174.320800999999989 -41.220275999999998,174.326904000000013 -41.222771000000002,174.288574000000011 -41.276947,174.249114999999989 -41.322502,174.241637999999995 -41.326110999999997,174.231902999999988 -41.328055999999997,174.208587999999992 -41.329445,174.193572999999986 -41.320281999999999,174.155243000000013 -41.305,174.148041000000006 -41.308608999999997,174.111633000000012 -41.336661999999997,174.052764999999994 -41.421112,174.049133000000012 -41.427779999999998,174.044433999999995 -41.442497000000003,174.045806999999996 -41.450836000000002,174.049988000000013 -41.466392999999997,174.063873 -41.493057,174.084136999999998 -41.526108,174.097473000000008 -41.519447,174.096069 -41.511116,174.100799999999992 -41.505561999999998,174.108306999999996 -41.509171000000002,174.114685000000009 -41.513893000000003,174.125792999999987 -41.523887999999999,174.151093000000003 -41.551392,174.176085999999998 -41.578612999999997,174.178864000000004 -41.586112999999997,174.179961999999989 -41.594444000000003,174.179137999999995 -41.602783000000002,174.174133000000012 -41.608336999999999,174.163299999999992 -41.618606999999997,174.157195999999999 -41.623328999999998,174.193024000000008 -41.685555,174.287749999999988 -41.734444000000003,174.291655999999989 -41.740836999999999,174.289153999999996 -41.748336999999999,174.283324999999991 -41.762222,174.236358999999993 -41.837218999999997,174.212188999999995 -41.865279999999998,174.201355000000007 -41.875557,174.184143000000006 -41.890555999999997,174.17804000000001 -41.895004,174.164703000000003 -41.90361,174.157195999999999 -41.907218999999998,174.143585000000002 -41.915832999999999,174.088561999999996 -41.957779000000002,174.009154999999993 -42.027495999999999,173.979674999999986 -42.061110999999997,173.965239999999994 -42.086945,173.959136999999998 -42.100838000000003,173.954407000000003 -42.115555,173.953307999999993 -42.123885999999999,173.953583000000009 -42.133330999999998,173.956359999999989 -42.166389000000002,173.933319000000012 -42.196944999999999,173.928314 -42.202499000000003,173.884154999999993 -42.243614,173.87802099999999 -42.248055,173.870513999999986 -42.251944999999999,173.86300700000001 -42.255561999999998,173.834686000000005 -42.271385000000002,173.801361000000014 -42.293059999999997,173.794983000000002 -42.297500999999997,173.568572999999986 -42.476944000000003,173.558593999999999 -42.487777999999999,173.541350999999992 -42.511947999999997,173.533874999999995 -42.525002,173.531372000000005 -42.532218999999998,173.500823999999994 -42.599724000000002,173.480804000000006 -42.621941,173.466063999999989 -42.656944000000003,173.459960999999993 -42.670836999999999,173.448853000000014 -42.690277000000002,173.387755999999996 -42.793616999999998,173.351623999999987 -42.840836000000003,173.328033000000005 -42.898887999999999,173.328033000000005 -42.906387000000002,173.325806 -42.913612,173.285521999999986 -42.958053999999997,173.106902999999988 -43.057777000000002,173.099396000000013 -43.061385999999999,173.090515000000011 -43.064444999999999,173.026366999999993 -43.081947,172.975799999999992 -43.09111,172.953033000000005 -43.092773,172.935516000000007 -43.098334999999999,172.92025799999999 -43.105834999999999,172.838012999999989 -43.148055999999997,172.818024000000008 -43.160828000000002,172.797760000000011 -43.183059999999998,172.772217000000012 -43.219718999999998,172.76080300000001 -43.239165999999997,172.758026 -43.246665999999998,172.726944000000003 -43.415539000000003,172.726593000000008 -43.423355,172.775817999999987 -43.612220999999998,172.894135000000006 -43.61972,172.90554800000001 -43.620834000000002,173.059692000000013 -43.653053,173.100525000000005 -43.697220000000002,173.105529999999987 -43.703612999999997,173.114409999999992 -43.741385999999999,173.116913000000011 -43.762504999999997,173.116913000000011 -43.769996999999996,173.112182999999987 -43.825004999999997,173.110779000000008 -43.833328000000002,173.091644000000002 -43.856392,173.058593999999999 -43.871108999999997,173.006088000000005 -43.869498999999998,173.002242999999993 -43.868999000000002,172.999236999999994 -43.865668999999997,172.990905999999995 -43.849670000000003,172.965239999999994 -43.802222999999998,172.961365 -43.764449999999997,172.958862000000011 -43.756950000000003,172.951355000000007 -43.755279999999999,172.939972000000012 -43.756110999999997,172.927185000000009 -43.766112999999997,172.921906000000007 -43.771667,172.920532000000009 -43.824173000000002,172.920532000000009 -43.833328000000002,172.917572000000007 -43.869221000000003,172.923584000000005 -43.875884999999997,172.931243999999992 -43.881390000000003,172.937408000000005 -43.887886000000002,172.938904000000008 -43.892384,172.938247999999987 -43.896220999999997,172.870789000000002 -43.904442000000003,172.861633000000012 -43.901389999999999,172.811919999999986 -43.882216999999997,172.804413000000011 -43.878334000000002,172.745789000000002 -43.837775999999998,172.740783999999991 -43.832222000000002,172.736908 -43.825836000000002,172.715239999999994 -43.808334000000002,172.642761000000007 -43.772224,172.513031000000012 -43.729438999999999,172.495238999999998 -43.723885000000003,172.483582000000013 -43.722771000000002,172.472197999999992 -43.72361,172.424988000000013 -43.733612,172.413299999999992 -43.743614,172.390258999999986 -43.763893000000003,172.384978999999987 -43.77861,172.382445999999987 -43.795006,172.383330999999998 -43.8125,172.384704999999997 -43.820838999999999,172.394713999999993 -43.850281000000003,172.393311000000011 -43.858612,172.386932000000002 -43.863334999999999,172.367461999999989 -43.867775000000002,172.297211000000004 -43.881110999999997,172.286925999999994 -43.883057,172.275542999999999 -43.883887999999999,172.189696999999995 -43.909163999999997,172.050812000000008 -43.965279000000002,171.978577 -43.995834000000002,171.955230999999998 -44.006667999999998,171.941070999999994 -44.015006999999997,171.782470999999987 -44.076949999999997,171.654694000000006 -44.122498,171.583587999999992 -44.153885000000002,171.547211000000004 -44.173889000000003,171.538483000000014 -44.178775999999999,171.355559999999997 -44.285491999999998,171.346465999999992 -44.292186999999998,171.342467999999997 -44.295555,171.319976999999994 -44.316391000000003,171.293578999999994 -44.343612999999998,171.285521999999986 -44.356392,171.278594999999996 -44.369995000000003,171.271911999999986 -44.383887999999999,171.269135000000006 -44.391112999999997,171.275542999999999 -44.395836000000003,171.279144000000002 -44.402495999999999,171.278594999999996 -44.420836999999999,171.277190999999988 -44.428885999999999,171.275542999999999 -44.437218,171.26998900000001 -44.451942000000003,171.263306 -44.465553,171.254974000000004 -44.478332999999999,171.214966000000004 -44.533057999999997,171.208313000000004 -44.537506,171.200531000000012 -44.541114999999998,171.196075000000008 -44.560279999999999,171.192200000000014 -44.645836000000003,171.193024000000008 -44.663330000000002,171.20495600000001 -44.700279000000002,171.21414200000001 -44.739165999999997,171.215239999999994 -44.747498,171.207184000000012 -44.851112,171.198577999999998 -44.919998,171.195800999999989 -44.927498,171.185241999999988 -44.938332000000003)))
View
1  django/contrib/gis/tests/geoapp/sql/tx.wkt
1 addition, 0 deletions not shown
View
103 django/contrib/gis/tests/geoapp/tests.py
@@ -1,12 +1,33 @@
-import unittest
+import os, unittest
from models import Country, City, State, Feature
-from django.contrib.gis.geos import *
from django.contrib.gis import gdal
+from django.contrib.gis.geos import *
+from django.contrib.gis.tests.utils import no_oracle, no_postgis, oracle, postgis
class GeoModelTest(unittest.TestCase):
def test01_initial_sql(self):
"Testing geographic initial SQL."
+ if oracle:
+ # Oracle doesn't allow strings longer than 4000 characters
+ # in SQL files, and I'm stumped on how to use Oracle BFILE's
+ # in PLSQL, so we set up the larger geometries manually, rather
+ # than relying on the initial SQL.
+
+ # Routine for returning the path to the data files.
+ data_dir = os.path.join(os.path.dirname(__file__), 'sql')
+ def get_file(wkt_file):
+ return os.path.join(data_dir, wkt_file)
+
+ co = State(name='Colorado', poly=fromfile(get_file('co.wkt')))
+ co.save()
+ ks = State(name='Kansas', poly=fromfile(get_file('ks.wkt')))
+ ks.save()
+ tx = Country(name='Texas', mpoly=fromfile(get_file('tx.wkt')))
+ tx.save()
+ nz = Country(name='New Zealand', mpoly=fromfile(get_file('nz.wkt')))
+ nz.save()
+
# Ensuring that data was loaded from initial SQL.
self.assertEqual(2, Country.objects.count())
self.assertEqual(8, City.objects.count())
@@ -80,6 +101,7 @@ def test02_proxy(self):
self.assertEqual(ply, State.objects.get(name='NullState').poly)
nullstate.delete()
+ @no_oracle # Oracle does not support KML.
def test03a_kml(self):
"Testing KML output from the database using GeoManager.kml()."
# Should throw a TypeError when trying to obtain KML from a
@@ -98,7 +120,13 @@ def test03b_gml(self):
qs = City.objects.all()
self.assertRaises(TypeError, qs.gml, 'name')
ptown = City.objects.gml('point', precision=9).get(name='Pueblo')
- self.assertEqual('<gml:Point srsName="EPSG:4326"><gml:coordinates>-104.609252,38.255001</gml:coordinates></gml:Point>', ptown.gml)
+ if oracle:
+ # No precision parameter for Oracle :-/
+ import re
+ gml_regex = re.compile(r'<gml:Point srsName="SDO:4326" xmlns:gml="http://www.opengis.net/gml"><gml:coordinates decimal="\." cs="," ts=" ">-104.60925199\d+,38.25500\d+ </gml:coordinates></gml:Point>')
+ self.assertEqual(True, bool(gml_regex.match(ptown.gml)))
+ else:
+ self.assertEqual('<gml:Point srsName="EPSG:4326"><gml:coordinates>-104.609252,38.255001</gml:coordinates></gml:Point>', ptown.gml)
def test04_transform(self):
"Testing the transform() GeoManager method."
@@ -107,14 +135,15 @@ def test04_transform(self):
ptown = fromstr('POINT(992363.390841912 481455.395105533)', srid=2774)
# Asserting the result of the transform operation with the values in
- # the pre-transformed points.
- h = City.objects.transform('point', srid=htown.srid).get(name='Houston')
- self.assertAlmostEqual(htown.x, h.point.x, 8)
- self.assertAlmostEqual(htown.y, h.point.y, 8)
+ # the pre-transformed points. Oracle does not have the 3084 SRID.
+ if not oracle:
+ h = City.objects.transform('point', srid=htown.srid).get(name='Houston')
+ self.assertAlmostEqual(htown.x, h.point.x, 8)
+ self.assertAlmostEqual(htown.y, h.point.y, 8)
p = City.objects.transform('point', srid=ptown.srid).get(name='Pueblo')
- self.assertAlmostEqual(ptown.x, p.point.x, 8)
- self.assertAlmostEqual(ptown.y, p.point.y, 8)
+ self.assertAlmostEqual(ptown.x, p.point.x, 7)
+ self.assertAlmostEqual(ptown.y, p.point.y, 7)
def test10_contains_contained(self):
"Testing the 'contained', 'contains', and 'bbcontains' lookup types."
@@ -124,10 +153,11 @@ def test10_contains_contained(self):
# Seeing what cities are in Texas, should get Houston and Dallas,
# and Oklahoma City because 'contained' only checks on the
# _bounding box_ of the Geometries.
- qs = City.objects.filter(point__contained=texas.mpoly)
- self.assertEqual(3, qs.count())
- cities = ['Houston', 'Dallas', 'Oklahoma City']
- for c in qs: self.assertEqual(True, c.name in cities)
+ if not oracle:
+ qs = City.objects.filter(point__contained=texas.mpoly)
+ self.assertEqual(3, qs.count())
+ cities = ['Houston', 'Dallas', 'Oklahoma City']
+ for c in qs: self.assertEqual(True, c.name in cities)
# Pulling out some cities.
houston = City.objects.get(name='Houston')
@@ -151,20 +181,37 @@ def test10_contains_contained(self):
self.assertEqual(0, len(Country.objects.filter(mpoly__contains=okcity.point.wkt))) # Qeury w/WKT
# OK City is contained w/in bounding box of Texas.
- qs = Country.objects.filter(mpoly__bbcontains=okcity.point)
- self.assertEqual(1, len(qs))
- self.assertEqual('Texas', qs[0].name)
+ if not oracle:
+ qs = Country.objects.filter(mpoly__bbcontains=okcity.point)
+ self.assertEqual(1, len(qs))
+ self.assertEqual('Texas', qs[0].name)
def test11_lookup_insert_transform(self):
"Testing automatic transform for lookups and inserts."
- # San Antonio in 'WGS84' (SRID 4326) and 'NAD83(HARN) / Texas Centric Lambert Conformal' (SRID 3084)
+ # San Antonio in 'WGS84' (SRID 4326)
sa_4326 = 'POINT (-98.493183 29.424170)'
- sa_3084 = 'POINT (1645978.362408288754523 6276356.025927528738976)' # Used ogr.py in gdal 1.4.1 for this transform
-
- # Constructing & querying with a point from a different SRID
wgs_pnt = fromstr(sa_4326, srid=4326) # Our reference point in WGS84
- nad_pnt = fromstr(sa_3084, srid=3084)
- tx = Country.objects.get(mpoly__intersects=nad_pnt)
+
+ # Oracle doesn't have SRID 3084, using 41157.
+ if oracle:
+ # San Antonio in 'Texas 4205, Southern Zone (1983, meters)' (SRID 41157)
+ # Used the following Oracle SQL to get this value:
+ # SELECT SDO_UTIL.TO_WKTGEOMETRY(SDO_CS.TRANSFORM(SDO_GEOMETRY('POINT (-98.493183 29.424170)', 4326), 41157)) FROM DUAL;
+ nad_wkt = 'POINT (300662.034646583 5416427.45974934)'
+ nad_srid = 41157
+ else:
+ # San Antonio in 'NAD83(HARN) / Texas Centric Lambert Conformal' (SRID 3084)
+ nad_wkt = 'POINT (1645978.362408288754523 6276356.025927528738976)' # Used ogr.py in gdal 1.4.1 for this transform
+ nad_srid = 3084
+
+ # Constructing & querying with a point from a different SRID. Oracle
+ # `SDO_OVERLAPBDYINTERSECT` operates differently from
+ # `ST_Intersects`, so contains is used instead.
+ nad_pnt = fromstr(nad_wkt, srid=nad_srid)
+ if oracle:
+ tx = Country.objects.get(mpoly__contains=nad_pnt)
+ else:
+ tx = Country.objects.get(mpoly__intersects=nad_pnt)
self.assertEqual('Texas', tx.name)
# Creating San Antonio. Remember the Alamo.
@@ -177,7 +224,7 @@ def test11_lookup_insert_transform(self):
self.assertAlmostEqual(wgs_pnt.y, sa.point.y, 6)
def test12_null_geometries(self):
- "Testing NULL geometry support."
+ "Testing NULL geometry support, and the `isnull` lookup type."
# Querying for both NULL and Non-NULL values.
nullqs = State.objects.filter(poly__isnull=True)
validqs = State.objects.filter(poly__isnull=False)
@@ -193,9 +240,12 @@ def test12_null_geometries(self):
self.assertEqual(True, 'Kansas' in state_names)
# Saving another commonwealth w/a NULL geometry.
- nmi = State(name='Northern Mariana Islands', poly=None)
- nmi.save()
-
+ if not oracle:
+ # TODO: Fix saving w/NULL geometry on Oracle.
+ nmi = State(name='Northern Mariana Islands', poly=None)
+ nmi.save()
+
+ @no_oracle # No specific `left` or `right` operators in Oracle.
def test13_left_right(self):
"Testing the 'left' and 'right' lookup types."
# Left: A << B => true if xmax(A) < xmin(B)
@@ -240,6 +290,7 @@ def test14_equals(self):
c3 = City.objects.get(point__equals=pnt)
for c in [c1, c2, c3]: self.assertEqual('Houston', c.name)
+ @no_oracle # Oracle SDO_RELATE() uses a different system.
def test15_relate(self):
"Testing the 'relate' lookup type."
# To make things more interesting, we will have our Texas reference point in
View
32 django/contrib/gis/tests/test_spatialrefsys.py
@@ -1,8 +1,9 @@
import unittest
from django.contrib.gis.models import SpatialRefSys
+from django.contrib.gis.tests.utils import oracle, postgis
test_srs = ({'srid' : 4326,
- 'auth_name' : 'EPSG',
+ 'auth_name' : ('EPSG', True),
'auth_srid' : 4326,
'srtext' : 'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]',
'proj4' : '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs ',
@@ -12,7 +13,7 @@
'eprec' : (1, 1, 9),
},
{'srid' : 32140,
- 'auth_name' : 'EPSG',
+ 'auth_name' : ('EPSG', False),
'auth_srid' : 32140,
'srtext' : 'PROJCS["NAD83 / Texas South Central",GEOGCS["NAD83",DATUM["North_American_Datum_1983",SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4269"]],PROJECTION["Lambert_Conformal_Conic_2SP"],PARAMETER["standard_parallel_1",30.28333333333333],PARAMETER["standard_parallel_2",28.38333333333333],PARAMETER["latitude_of_origin",27.83333333333333],PARAMETER["central_meridian",-99],PARAMETER["false_easting",600000],PARAMETER["false_northing",4000000],UNIT["metre",1,AUTHORITY["EPSG","9001"]],AUTHORITY["EPSG","32140"]]',
'proj4' : '+proj=lcc +lat_1=30.28333333333333 +lat_2=28.38333333333333 +lat_0=27.83333333333333 +lon_0=-99 +x_0=600000 +y_0=4000000 +ellps=GRS80 +datum=NAD83 +units=m +no_defs ',
@@ -30,24 +31,35 @@ def test01_retrieve(self):
for sd in test_srs:
srs = SpatialRefSys.objects.get(srid=sd['srid'])
self.assertEqual(sd['srid'], srs.srid)
- self.assertEqual(sd['auth_name'], srs.auth_name)
+
+ # Some of the authority names are borked on Oracle, e.g., SRID=32140.
+ # also, Oracle Spatial seems to add extraneous info to fields, hence the
+ # the testing with the 'startswith' flag.
+ auth_name, oracle_flag = sd['auth_name']
+ if postgis or (oracle and oracle_flag):
+ self.assertEqual(True, srs.auth_name.startswith(auth_name))
+
self.assertEqual(sd['auth_srid'], srs.auth_srid)
- self.assertEqual(sd['srtext'], srs.srtext)
- self.assertEqual(sd['proj4'], srs.proj4text)
+
+ # No proj.4 and different srtext on oracle backends :(
+ if postgis:
+ self.assertEqual(sd['srtext'], srs.wkt)
+ self.assertEqual(sd['proj4'], srs.proj4text)
def test02_osr(self):
"Testing getting OSR objects from SpatialRefSys model objects."
for sd in test_srs:
sr = SpatialRefSys.objects.get(srid=sd['srid'])
- self.assertEqual(sd['spheroid'], sr.spheroid)
+ self.assertEqual(True, sr.spheroid.startswith(sd['spheroid']))
self.assertEqual(sd['geographic'], sr.geographic)
self.assertEqual(sd['projected'], sr.projected)
- self.assertEqual(sd['name'], sr.name)
+ self.assertEqual(True, sr.name.startswith(sd['name']))
# Testing the SpatialReference object directly.
- srs = sr.srs
- self.assertEqual(sd['proj4'], srs.proj4)
- self.assertEqual(sd['srtext'], srs.wkt)
+ if postgis:
+ srs = sr.srs
+ self.assertEqual(sd['proj4'], srs.proj4)
+ self.assertEqual(sd['srtext'], srs.wkt)
def test03_ellipsoid(self):
"Testing the ellipsoid property."
View
20 django/contrib/gis/tests/utils.py
@@ -0,0 +1,20 @@
+from django.conf import settings
+
+# function that will pass a test.
+def pass_test(*args): return
+
+def no_backend(test_func, backend):
+ "Use this decorator to disable test on specified backend."
+ if settings.DATABASE_ENGINE == backend:
+ return pass_test
+ else:
+ return test_func
+
+# Decorators to disable entire test functions for specific
+# spatial backends.
+def no_oracle(func): return no_backend(func, 'oracle')
+def no_postgis(func): return no_backend(func, 'postgresql_psycopg2')
+
+# Shortcut booleans to omit only portions of tests.
+oracle = settings.DATABASE_ENGINE == 'oracle'
+postgis = settings.DATABASE_ENGINE == 'postgresql_psycopg2'
View
3  django/contrib/gis/utils/__init__.py
@@ -8,10 +8,11 @@
if HAS_GDAL:
from django.contrib.gis.utils.ogrinfo import ogrinfo, sample
from django.contrib.gis.utils.layermapping import LayerMapping
-
+
# Importing GeoIP
try:
from django.contrib.gis.utils.geoip import GeoIP
HAS_GEOIP = True
except:
HAS_GEOIP = False
+
View
24 django/contrib/gis/utils/layermapping.py
@@ -99,6 +99,7 @@ def __str__(self):
"""
from types import StringType, TupleType
from datetime import datetime
+from django.contrib.gis.db.backend import SPATIAL_BACKEND
from django.contrib.gis.gdal import \
OGRGeometry, OGRGeomType, SpatialReference, CoordTransform, \
DataSource, OGRException
@@ -176,19 +177,19 @@ def check_feature(feat, model_fields, mapping):
elif model_field[:-3] in model_fields: #foreign key
model_type = model_fields[model_field[:-3]]
else:
- raise Exception, 'Given mapping field "%s" not in given Model fields!' % model_field
+ raise Exception('Given mapping field "%s" not in given Model fields!' % model_field)
### Handling if we get a geometry in the Field ###
if ogr_field in ogc_types:
# At this time, no more than one geographic field per model =(
if HAS_GEO:
- raise Exception, 'More than one geographic field in mapping not allowed (yet).'
+ raise Exception('More than one geographic field in mapping not allowed (yet).')
else:
HAS_GEO = ogr_field
# Making sure this geometry field type is a valid Django GIS field.
if not model_type in gis_fields:
- raise Exception, 'Unknown Django GIS field type "%s"' % model_type
+ raise Exception('Unknown Django GIS field type "%s"' % model_type)
# Getting the OGRGeometry, it's type (an integer) and it's name (a string)
geom = feat.geom
@@ -202,20 +203,20 @@ def check_feature(feat, model_fields, mapping):
# The geometry type otherwise was expected
pass
else:
- raise Exception, 'Invalid mapping geometry; model has %s, feature has %s' % (model_type, gtype)
+ raise Exception('Invalid mapping geometry; model has %s, feature has %s' % (model_type, gtype))
## Handling other fields
else:
# Making sure the model field is
if not model_type in field_types:
- raise Exception, 'Django field type "%s" has no OGR mapping (yet).' % model_type
+ raise Exception('Django field type "%s" has no OGR mapping (yet).' % model_type)
# Otherwise, we've got an OGR Field. Making sure that an
# index exists for the mapping OGR field.
try:
fi = feat.index(ogr_field)
except:
- raise Exception, 'Given mapping OGR field "%s" not in given OGR layer feature!' % ogr_field
+ raise Exception('Given mapping OGR field "%s" not in given OGR layer feature!' % ogr_field)
def check_layer(layer, fields, mapping):
"Checks the OGR layer by incrementing through and checking each feature."
@@ -234,7 +235,7 @@ def check_srs(layer, source_srs):
else:
sr = layer.srs
if not sr:
- raise Exception, 'No source reference system defined.'
+ raise Exception('No source reference system defined.')
else:
return sr
@@ -280,9 +281,12 @@ def save(self, verbose=False):
# Getting the GeometryColumn object.
try:
- geo_col = GeometryColumns.objects.get(f_table_name=self.model._meta.db_table)
+ db_table = self.model._meta.db_table
+ if SPATIAL_BACKEND == 'oracle': db_table = db_table.upper()
+ gc_kwargs = {GeometryColumns.table_name_col() : db_table}
+ geo_col = GeometryColumns.objects.get(**gc_kwargs)
except:
- raise Exception, 'Geometry column does not exist. (did you run syncdb?)'
+ raise Exception('Geometry column does not exist. (did you run syncdb?)')
# Getting the coordinate system needed for transformation (with CoordTransform)
try:
@@ -292,7 +296,7 @@ def save(self, verbose=False):
# Creating the CoordTransform object
ct = CoordTransform(self.source_srs, target_srs)
except Exception, msg:
- raise Exception, 'Could not translate between the data source and model geometry: %s' % msg
+ raise Exception('Could not translate between the data source and model geometry: %s' % msg)
for feat in self.layer:
# The keyword arguments for model construction
View
16 django/db/backends/oracle/base.py
@@ -445,14 +445,24 @@ class FormatStylePlaceholderCursor(Database.Cursor):
charset = 'utf-8'
def _format_params(self, params):
+ sz_kwargs = {}
if isinstance(params, dict):
result = {}
charset = self.charset
for key, value in params.items():
result[smart_str(key, charset)] = smart_str(value, charset)
- return result
+ if hasattr(value, 'oracle_type'): sz_kwargs[key] = value.oracle_type()
else:
- return tuple([smart_str(p, self.charset, True) for p in params])
+ result = {}
+ for i in xrange(len(params)):
+ key = 'arg%d' % i
+ result[key] = smart_str(params[i], self.charset, True)
+ if hasattr(params[i], 'oracle_type'): sz_kwargs[key] = params[i].oracle_type()
+
+ # If any of the parameters had an `oracle_type` method, then we set
+ # the inputsizes for those parameters using the returned type
+ if sz_kwargs: self.setinputsizes(**sz_kwargs)
+ return result
def execute(self, query, params=None):
if params is None:
@@ -471,7 +481,7 @@ def execute(self, query, params=None):
def executemany(self, query, params=None):
try:
- args = [(':arg%d' % i) for i in range(len(params[0]))]
+ args = [(':arg%d' % i) for i in range(len(params[0]))]
except (IndexError, TypeError):
# No params given, nothing to do
return None
View
3  django/db/models/base.py
@@ -228,10 +228,11 @@ def save(self, raw=False):
# If it does already exist, do an UPDATE.
if cursor.fetchone():
db_values = [f.get_db_prep_save(raw and getattr(self, f.attname) or f.pre_save(self, False)) for f in non_pks]
+ placeholders = [f.get_placeholder(raw and getattr(self, f.attname) or f.pre_save(self, False)) for f in non_pks]
if db_values:
cursor.execute("UPDATE %s SET %s WHERE %s=%%s" % \
(qn(self._meta.db_table),
- ','.join(['%s=%%s' % qn(f.column) for f in non_pks]),
+ ','.join(['%s=%s' % (qn(f.column), placeholders[i]) for i, f in enumerate(non_pks)]),
qn(self._meta.pk.column)),
db_values + self._meta.pk.get_db_prep_lookup('exact', pk_val))
else:
Please sign in to comment.
Something went wrong with that request. Please try again.