You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ds...@apache.org on 2019/09/09 12:56:14 UTC

[lucene-solr] branch master-deprecations updated: SOLR-13138: Spatial removals and deprecations: * Removed GeoHashField. (was deprecated) * Removed LatLonType (was deprecated) * Removed SpatialPointVectorFieldType (was deprecated) * Removed SpatialTermQueryPrefixTreeFieldType (was deprecated) * Deprecated legacy/BBoxStrategy as we will switch to Lucene's. Related to Trie/Points conversion. * Removed spatial fields from some of our examples that don't exercise spatial.

This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch master-deprecations
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master-deprecations by this push:
     new 46825ba  SOLR-13138: Spatial removals and deprecations: * Removed GeoHashField. (was deprecated) * Removed LatLonType (was deprecated) * Removed SpatialPointVectorFieldType (was deprecated) * Removed SpatialTermQueryPrefixTreeFieldType (was deprecated) * Deprecated legacy/BBoxStrategy as we will switch to Lucene's.   Related to Trie/Points conversion. * Removed spatial fields from some of our examples that don't exercise   spatial.
46825ba is described below

commit 46825ba94d5805b96c376c00d05d16c921cde4ad
Author: David Smiley <ds...@salesforce.com>
AuthorDate: Mon Sep 9 08:57:10 2019 -0400

    SOLR-13138: Spatial removals and deprecations:
    * Removed GeoHashField. (was deprecated)
    * Removed LatLonType (was deprecated)
    * Removed SpatialPointVectorFieldType (was deprecated)
    * Removed SpatialTermQueryPrefixTreeFieldType (was deprecated)
    * Deprecated legacy/BBoxStrategy as we will switch to Lucene's.
      Related to Trie/Points conversion.
    * Removed spatial fields from some of our examples that don't exercise
      spatial.
---
 .../conf/dataimport-schema-no-unique-key.xml       |   1 -
 .../java/org/apache/solr/legacy/BBoxStrategy.java  |   1 +
 .../org/apache/solr/legacy/BBoxValueSource.java    |   1 +
 .../apache/solr/legacy/DistanceValueSource.java    | 120 -----
 .../apache/solr/legacy/PointVectorStrategy.java    | 289 ----------
 .../java/org/apache/solr/schema/GeoHashField.java  | 103 ----
 .../java/org/apache/solr/schema/LatLonType.java    | 598 ---------------------
 .../src/java/org/apache/solr/schema/PointType.java |   4 +-
 .../solr/schema/SpatialPointVectorFieldType.java   | 106 ----
 .../org/apache/solr/schema/SpatialQueryable.java   |   2 +-
 .../SpatialTermQueryPrefixTreeFieldType.java       |  33 --
 .../solr/search/SpatialFilterQParserPlugin.java    |   8 +-
 .../distance/GeoDistValueSourceParser.java         |   2 +-
 .../solr/collection1/conf/schema-hash.xml          |  11 -
 .../solr/collection1/conf/schema-minhash.xml       |  11 -
 .../solr/collection1/conf/schema-rest.xml          |   9 -
 .../solr/collection1/conf/schema-spatial.xml       |  12 +-
 .../solr/collection1/conf/schema-sql.xml           |  11 -
 .../test-files/solr/collection1/conf/schema.xml    |  22 +-
 .../test-files/solr/collection1/conf/schema11.xml  |  12 -
 .../test-files/solr/collection1/conf/schema12.xml  |  14 -
 .../test-files/solr/collection1/conf/schema15.xml  |  11 -
 .../solr/collection1/conf/schema_latest.xml        |  26 -
 .../solr/collection1/conf/schemasurround.xml       |  11 -
 .../solr/configsets/cloud-dynamic/conf/schema.xml  |  11 -
 .../solr/configsets/doc-expiry/conf/schema.xml     |  12 -
 .../solr/response/TestGeoJSONResponseWriter.java   |   9 +-
 .../org/apache/solr/search/TestSolr4Spatial.java   |   5 +-
 .../example-DIH/solr/db/conf/managed-schema        |  29 -
 .../example-DIH/solr/mail/conf/managed-schema      |  27 -
 .../example-DIH/solr/solr/conf/managed-schema      |  29 -
 solr/example/files/conf/managed-schema             |   5 -
 .../src/field-types-included-with-solr.adoc        |   2 -
 solr/solr-ref-guide/src/spatial-search.adoc        |  17 +-
 .../src/updating-parts-of-documents.adoc           |   2 +-
 .../solrj/solr/collection1/conf/schema-sql.xml     |  11 -
 .../solrj/solr/collection1/conf/schema.xml         |  11 -
 .../solr/configsets/streaming/conf/schema.xml      |  11 -
 38 files changed, 31 insertions(+), 1568 deletions(-)

diff --git a/solr/contrib/dataimporthandler-extras/src/test-files/dihextras/solr/collection1/conf/dataimport-schema-no-unique-key.xml b/solr/contrib/dataimporthandler-extras/src/test-files/dihextras/solr/collection1/conf/dataimport-schema-no-unique-key.xml
index 793482a..8f1d413 100644
--- a/solr/contrib/dataimporthandler-extras/src/test-files/dihextras/solr/collection1/conf/dataimport-schema-no-unique-key.xml
+++ b/solr/contrib/dataimporthandler-extras/src/test-files/dihextras/solr/collection1/conf/dataimport-schema-no-unique-key.xml
@@ -77,7 +77,6 @@
   <fieldType name="float" class="${solr.tests.FloatFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" positionIncrementGap="0"/>
   <fieldType name="long" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" positionIncrementGap="0"/>
   <fieldType name="double" class="${solr.tests.DoubleFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="0" positionIncrementGap="0"/>
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
 
 
   <!--
diff --git a/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java b/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java
index b2f239e..586df564 100644
--- a/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java
+++ b/solr/core/src/java/org/apache/solr/legacy/BBoxStrategy.java
@@ -75,6 +75,7 @@ import org.locationtech.spatial4j.shape.Shape;
  *
  * @lucene.experimental
  */
+@Deprecated
 public class BBoxStrategy extends SpatialStrategy {
 
   // note: we use a FieldType to articulate the options we want on the field.  We don't use it as-is with a Field, we
diff --git a/solr/core/src/java/org/apache/solr/legacy/BBoxValueSource.java b/solr/core/src/java/org/apache/solr/legacy/BBoxValueSource.java
index 516f207..10f5713 100644
--- a/solr/core/src/java/org/apache/solr/legacy/BBoxValueSource.java
+++ b/solr/core/src/java/org/apache/solr/legacy/BBoxValueSource.java
@@ -33,6 +33,7 @@ import org.locationtech.spatial4j.shape.Shape;
  *
  * @lucene.internal
  */
+@Deprecated
 class BBoxValueSource extends ShapeValuesSource {
 
   private final BBoxStrategy strategy;
diff --git a/solr/core/src/java/org/apache/solr/legacy/DistanceValueSource.java b/solr/core/src/java/org/apache/solr/legacy/DistanceValueSource.java
deleted file mode 100644
index 33faf9f..0000000
--- a/solr/core/src/java/org/apache/solr/legacy/DistanceValueSource.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.legacy;
-
-import java.io.IOException;
-
-import org.apache.lucene.index.DocValues;
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.search.DoubleValues;
-import org.apache.lucene.search.DoubleValuesSource;
-import org.apache.lucene.search.IndexSearcher;
-import org.locationtech.spatial4j.distance.DistanceCalculator;
-import org.locationtech.spatial4j.shape.Point;
-
-/**
- * An implementation of the Lucene ValueSource model that returns the distance
- * for a {@link PointVectorStrategy}.
- *
- * @lucene.internal
- */
-public class DistanceValueSource extends DoubleValuesSource {
-
-  private PointVectorStrategy strategy;
-  private final Point from;
-  private final double multiplier;
-  private final double nullValue;
-
-
-  /**
-   * Constructor.
-   */
-  public DistanceValueSource(PointVectorStrategy strategy, Point from, double multiplier) {
-    this.strategy = strategy;
-    this.from = from;
-    this.multiplier = multiplier;
-    this.nullValue =
-        (strategy.getSpatialContext().isGeo() ? 180 * multiplier : Double.MAX_VALUE);
-  }
-
-  /**
-   * Returns the ValueSource description.
-   */
-  @Override
-  public String toString() {
-    return "DistanceValueSource("+strategy+", "+from+")";
-  }
-
-  /**
-   * Returns the FunctionValues used by the function query.
-   */
-  @Override
-  public DoubleValues getValues(LeafReaderContext readerContext, DoubleValues scores) throws IOException {
-
-    final DoubleValues ptX = DoubleValuesSource.fromDoubleField(strategy.getFieldNameX()).getValues(readerContext, null);
-    final DoubleValues ptY = DoubleValuesSource.fromDoubleField(strategy.getFieldNameY()).getValues(readerContext, null);
-    final DistanceCalculator calculator = strategy.getSpatialContext().getDistCalc();
-
-    return DoubleValues.withDefault(new DoubleValues() {
-
-      @Override
-      public double doubleValue() throws IOException {
-        return calculator.distance(from, ptX.doubleValue(), ptY.doubleValue()) * multiplier;
-      }
-
-      @Override
-      public boolean advanceExact(int doc) throws IOException {
-        return ptX.advanceExact(doc) && ptY.advanceExact(doc);
-      }
-    }, nullValue);
-
-  }
-
-  @Override
-  public boolean needsScores() {
-    return false;
-  }
-
-  @Override
-  public boolean isCacheable(LeafReaderContext ctx) {
-    return DocValues.isCacheable(ctx, strategy.getFieldNameX(), strategy.getFieldNameY());
-  }
-
-  @Override
-  public DoubleValuesSource rewrite(IndexSearcher searcher) throws IOException {
-    return this;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-
-    DistanceValueSource that = (DistanceValueSource) o;
-
-    if (!from.equals(that.from)) return false;
-    if (!strategy.equals(that.strategy)) return false;
-    if (multiplier != that.multiplier) return false;
-
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    return from.hashCode();
-  }
-}
diff --git a/solr/core/src/java/org/apache/solr/legacy/PointVectorStrategy.java b/solr/core/src/java/org/apache/solr/legacy/PointVectorStrategy.java
deleted file mode 100644
index 4df76ca..0000000
--- a/solr/core/src/java/org/apache/solr/legacy/PointVectorStrategy.java
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.legacy;
-
-import org.apache.lucene.document.DoubleDocValuesField;
-import org.apache.lucene.document.DoublePoint;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.document.FieldType;
-import org.apache.lucene.document.StoredField;
-import org.apache.lucene.index.DocValuesType;
-import org.apache.lucene.index.IndexOptions;
-import org.apache.lucene.queries.function.FunctionMatchQuery;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.ConstantScoreQuery;
-import org.apache.lucene.search.DoubleValuesSource;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.spatial.SpatialStrategy;
-import org.apache.lucene.spatial.query.SpatialArgs;
-import org.apache.lucene.spatial.query.SpatialOperation;
-import org.apache.lucene.spatial.query.UnsupportedSpatialOperation;
-import org.locationtech.spatial4j.context.SpatialContext;
-import org.locationtech.spatial4j.shape.Circle;
-import org.locationtech.spatial4j.shape.Point;
-import org.locationtech.spatial4j.shape.Rectangle;
-import org.locationtech.spatial4j.shape.Shape;
-
-/**
- * Simple {@link SpatialStrategy} which represents Points in two numeric fields.
- * The Strategy's best feature is decent distance sort.
- *
- * <p>
- * <b>Characteristics:</b>
- * <br>
- * <ul>
- * <li>Only indexes points; just one per field value.</li>
- * <li>Can query by a rectangle or circle.</li>
- * <li>{@link
- * org.apache.lucene.spatial.query.SpatialOperation#Intersects} and {@link
- * SpatialOperation#IsWithin} is supported.</li>
- * <li>Requires DocValues for
- * {@link #makeDistanceValueSource(org.locationtech.spatial4j.shape.Point)} and for
- * searching with a Circle.</li>
- * </ul>
- *
- * <p>
- * <b>Implementation:</b>
- * <p>
- * This is a simple Strategy.  Search works with a pair of range queries on two {@link DoublePoint}s representing
- * x &amp; y fields.  A Circle query does the same bbox query but adds a
- * ValueSource filter on
- * {@link #makeDistanceValueSource(org.locationtech.spatial4j.shape.Point)}.
- * <p>
- * One performance shortcoming with this strategy is that a scenario involving
- * both a search using a Circle and sort will result in calculations for the
- * spatial distance being done twice -- once for the filter and second for the
- * sort.
- *
- * @lucene.experimental
- */
-public class PointVectorStrategy extends SpatialStrategy {
-
-  // note: we use a FieldType to articulate the options we want on the field.  We don't use it as-is with a Field, we
-  //  create more than one Field.
-
-  /**
-   * pointValues, docValues, and nothing else.
-   */
-  public static FieldType DEFAULT_FIELDTYPE;
-
-  @Deprecated
-  public static LegacyFieldType LEGACY_FIELDTYPE;
-  static {
-    // Default: pointValues + docValues
-    FieldType type = new FieldType();
-    type.setDimensions(1, Double.BYTES);//pointValues (assume Double)
-    type.setDocValuesType(DocValuesType.NUMERIC);//docValues
-    type.setStored(false);
-    type.freeze();
-    DEFAULT_FIELDTYPE = type;
-    // Legacy default: legacyNumerics
-    LegacyFieldType legacyType = new LegacyFieldType();
-    legacyType.setIndexOptions(IndexOptions.DOCS);
-    legacyType.setNumericType(LegacyNumericType.DOUBLE);
-    legacyType.setNumericPrecisionStep(8);// same as solr default
-    legacyType.setDocValuesType(DocValuesType.NONE);//no docValues!
-    legacyType.setStored(false);
-    legacyType.freeze();
-    LEGACY_FIELDTYPE = legacyType;
-  }
-
-  public static final String SUFFIX_X = "__x";
-  public static final String SUFFIX_Y = "__y";
-
-  private final String fieldNameX;
-  private final String fieldNameY;
-
-  private final int fieldsLen;
-  private final boolean hasStored;
-  private final boolean hasDocVals;
-  private final boolean hasPointVals;
-  // equiv to "hasLegacyNumerics":
-  private final LegacyFieldType legacyNumericFieldType; // not stored; holds precision step.
-
-  /**
-   * Create a new {@link PointVectorStrategy} instance that uses {@link DoublePoint} and {@link DoublePoint#newRangeQuery}
-   */
-  public static PointVectorStrategy newInstance(SpatialContext ctx, String fieldNamePrefix) {
-    return new PointVectorStrategy(ctx, fieldNamePrefix, DEFAULT_FIELDTYPE);
-  }
-
-  /**
-   * Create a new {@link PointVectorStrategy} instance that uses {@link LegacyDoubleField} for backwards compatibility.
-   * However, back-compat is limited; we don't support circle queries or {@link #makeDistanceValueSource(Point, double)}
-   * since that requires docValues (the legacy config didn't have that).
-   *
-   * @deprecated LegacyNumerics will be removed
-   */
-  @Deprecated
-  public static PointVectorStrategy newLegacyInstance(SpatialContext ctx, String fieldNamePrefix) {
-    return new PointVectorStrategy(ctx, fieldNamePrefix, LEGACY_FIELDTYPE);
-  }
-
-  /**
-   * Create a new instance configured with the provided FieldType options. See {@link #DEFAULT_FIELDTYPE}.
-   * a field type is used to articulate the desired options (namely pointValues, docValues, stored).  Legacy numerics
-   * is configurable this way too.
-   */
-  public PointVectorStrategy(SpatialContext ctx, String fieldNamePrefix, FieldType fieldType) {
-    super(ctx, fieldNamePrefix);
-    this.fieldNameX = fieldNamePrefix+SUFFIX_X;
-    this.fieldNameY = fieldNamePrefix+SUFFIX_Y;
-
-    int numPairs = 0;
-    if ((this.hasStored = fieldType.stored())) {
-      numPairs++;
-    }
-    if ((this.hasDocVals = fieldType.docValuesType() != DocValuesType.NONE)) {
-      numPairs++;
-    }
-    if ((this.hasPointVals = fieldType.pointDataDimensionCount() > 0)) {
-      numPairs++;
-    }
-    if (fieldType.indexOptions() != IndexOptions.NONE && fieldType instanceof LegacyFieldType && ((LegacyFieldType)fieldType).numericType() != null) {
-      if (hasPointVals) {
-        throw new IllegalArgumentException("pointValues and LegacyNumericType are mutually exclusive");
-      }
-      final LegacyFieldType legacyType = (LegacyFieldType) fieldType;
-      if (legacyType.numericType() != LegacyNumericType.DOUBLE) {
-        throw new IllegalArgumentException(getClass() + " does not support " + legacyType.numericType());
-      }
-      numPairs++;
-      legacyNumericFieldType = new LegacyFieldType(LegacyDoubleField.TYPE_NOT_STORED);
-      legacyNumericFieldType.setNumericPrecisionStep(legacyType.numericPrecisionStep());
-      legacyNumericFieldType.freeze();
-    } else {
-      legacyNumericFieldType = null;
-    }
-    this.fieldsLen = numPairs * 2;
-  }
-
-
-  String getFieldNameX() {
-    return fieldNameX;
-  }
-
-  String getFieldNameY() {
-    return fieldNameY;
-  }
-
-  @Override
-  public Field[] createIndexableFields(Shape shape) {
-    if (shape instanceof Point)
-      return createIndexableFields((Point) shape);
-    throw new UnsupportedOperationException("Can only index Point, not " + shape);
-  }
-
-  /** @see #createIndexableFields(org.locationtech.spatial4j.shape.Shape) */
-  public Field[] createIndexableFields(Point point) {
-    Field[] fields = new Field[fieldsLen];
-    int idx = -1;
-    if (hasStored) {
-      fields[++idx] = new StoredField(fieldNameX, point.getX());
-      fields[++idx] = new StoredField(fieldNameY, point.getY());
-    }
-    if (hasDocVals) {
-      fields[++idx] = new DoubleDocValuesField(fieldNameX, point.getX());
-      fields[++idx] = new DoubleDocValuesField(fieldNameY, point.getY());
-    }
-    if (hasPointVals) {
-      fields[++idx] = new DoublePoint(fieldNameX, point.getX());
-      fields[++idx] = new DoublePoint(fieldNameY, point.getY());
-    }
-    if (legacyNumericFieldType != null) {
-      fields[++idx] = new LegacyDoubleField(fieldNameX, point.getX(), legacyNumericFieldType);
-      fields[++idx] = new LegacyDoubleField(fieldNameY, point.getY(), legacyNumericFieldType);
-    }
-    assert idx == fields.length - 1;
-    return fields;
-  }
-
-  @Override
-  public DoubleValuesSource makeDistanceValueSource(Point queryPoint, double multiplier) {
-    return new DistanceValueSource(this, queryPoint, multiplier);
-  }
-
-  @Override
-  public ConstantScoreQuery makeQuery(SpatialArgs args) {
-    if(! SpatialOperation.is( args.getOperation(),
-        SpatialOperation.Intersects,
-        SpatialOperation.IsWithin ))
-      throw new UnsupportedSpatialOperation(args.getOperation());
-    Shape shape = args.getShape();
-    if (shape instanceof Rectangle) {
-      Rectangle bbox = (Rectangle) shape;
-      return new ConstantScoreQuery(makeWithin(bbox));
-    } else if (shape instanceof Circle) {
-      Circle circle = (Circle)shape;
-      Rectangle bbox = circle.getBoundingBox();
-      Query approxQuery = makeWithin(bbox);
-      BooleanQuery.Builder bqBuilder = new BooleanQuery.Builder();
-      double r = circle.getRadius();
-      FunctionMatchQuery vsMatchQuery = new FunctionMatchQuery(makeDistanceValueSource(circle.getCenter()),
-          v -> 0 <= v && v <= r);
-      bqBuilder.add(approxQuery, BooleanClause.Occur.FILTER);//should have lowest "cost" value; will drive iteration
-      bqBuilder.add(vsMatchQuery, BooleanClause.Occur.FILTER);
-      return new ConstantScoreQuery(bqBuilder.build());
-    } else {
-      throw new UnsupportedOperationException("Only Rectangles and Circles are currently supported, " +
-          "found [" + shape.getClass() + "]");//TODO
-    }
-  }
-
-  /**
-   * Constructs a query to retrieve documents that fully contain the input envelope.
-   */
-  private Query makeWithin(Rectangle bbox) {
-    BooleanQuery.Builder bq = new BooleanQuery.Builder();
-    BooleanClause.Occur MUST = BooleanClause.Occur.MUST;
-    if (bbox.getCrossesDateLine()) {
-      //use null as performance trick since no data will be beyond the world bounds
-      bq.add(rangeQuery(fieldNameX, null/*-180*/, bbox.getMaxX()), BooleanClause.Occur.SHOULD );
-      bq.add(rangeQuery(fieldNameX, bbox.getMinX(), null/*+180*/), BooleanClause.Occur.SHOULD );
-      bq.setMinimumNumberShouldMatch(1);//must match at least one of the SHOULD
-    } else {
-      bq.add(rangeQuery(fieldNameX, bbox.getMinX(), bbox.getMaxX()), MUST);
-    }
-    bq.add(rangeQuery(fieldNameY, bbox.getMinY(), bbox.getMaxY()), MUST);
-    return bq.build();
-  }
-
-  /**
-   * Returns a numeric range query based on FieldType
-   * {@link LegacyNumericRangeQuery} is used for indexes created using {@code FieldType.LegacyNumericType}
-   * {@link DoublePoint#newRangeQuery} is used for indexes created using {@link DoublePoint} fields
-   */
-  private Query rangeQuery(String fieldName, Double min, Double max) {
-    if (hasPointVals) {
-      if (min == null) {
-        min = Double.NEGATIVE_INFINITY;
-      }
-
-      if (max == null) {
-        max = Double.POSITIVE_INFINITY;
-      }
-
-      return DoublePoint.newRangeQuery(fieldName, min, max);
-
-    } else if (legacyNumericFieldType != null) {// todo remove legacy numeric support in 7.0
-      return LegacyNumericRangeQuery.newDoubleRange(fieldName, legacyNumericFieldType.numericPrecisionStep(), min, max, true, true);//inclusive
-    }
-    //TODO try doc-value range query?
-    throw new UnsupportedOperationException("An index is required for this operation.");
-  }
-}
diff --git a/solr/core/src/java/org/apache/solr/schema/GeoHashField.java b/solr/core/src/java/org/apache/solr/schema/GeoHashField.java
deleted file mode 100644
index 842333f..0000000
--- a/solr/core/src/java/org/apache/solr/schema/GeoHashField.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.schema;
-
-import java.io.IOException;
-
-import org.apache.lucene.index.IndexableField;
-import org.apache.lucene.queries.function.ValueSource;
-import org.apache.lucene.queries.function.valuesource.LiteralValueSource;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.SortField;
-import org.apache.solr.response.TextResponseWriter;
-import org.apache.solr.search.QParser;
-import org.apache.solr.search.SolrConstantScoreQuery;
-import org.apache.solr.search.SpatialOptions;
-import org.apache.solr.search.function.ValueSourceRangeFilter;
-import org.apache.solr.search.function.distance.GeohashHaversineFunction;
-import org.apache.solr.uninverting.UninvertingReader.Type;
-import org.apache.solr.util.SpatialUtils;
-import org.locationtech.spatial4j.context.SpatialContext;
-import org.locationtech.spatial4j.distance.DistanceUtils;
-import org.locationtech.spatial4j.io.GeohashUtils;
-import org.locationtech.spatial4j.shape.Point;
-
-/**
- * This is a class that represents a <a
- * href="http://en.wikipedia.org/wiki/Geohash">Geohash</a> field. The field is
- * provided as a lat/lon pair and is internally represented as a string.
- *
- * @deprecated use {@link LatLonPointSpatialField} instead
- */
-@Deprecated
-public class GeoHashField extends FieldType implements SpatialQueryable {
-
-  @Override
-  public SortField getSortField(SchemaField field, boolean top) {
-    return getStringSort(field, top);
-  }
-  
-  @Override
-  public Type getUninversionType(SchemaField sf) {
-    if (sf.multiValued()) {
-      return Type.SORTED_SET_BINARY;
-    } else {
-      return Type.SORTED;
-    }
-  }
-
-    //QUESTION: Should we do a fast and crude one?  Or actually check distances
-  //Fast and crude could use EdgeNGrams, but that would require a different
-  //encoding.  Plus there are issues around the Equator/Prime Meridian
-  @Override
-  public Query createSpatialQuery(QParser parser, SpatialOptions options) {
-    String geohash = toInternal(options.pointStr);
-    //TODO: optimize this
-    return new SolrConstantScoreQuery(new ValueSourceRangeFilter(new GeohashHaversineFunction(getValueSource(options.field, parser),
-            new LiteralValueSource(geohash), options.radius), "0", String.valueOf(options.distance), true, true));
-  }
-
-  @Override
-  public void write(TextResponseWriter writer, String name, IndexableField f)
-          throws IOException {
-    writer.writeStr(name, toExternal(f), false);
-  }
-
-  @Override
-  public String toExternal(IndexableField f) {
-    Point p = GeohashUtils.decode(f.stringValue(), SpatialContext.GEO);
-    return p.getY() + "," + p.getX();
-  }
-
-  @Override
-  public String toInternal(String val) {
-    Point point = SpatialUtils.parsePointSolrException(val, SpatialContext.GEO);
-    return GeohashUtils.encodeLatLon(point.getY(), point.getX());
-  }
-
-  @Override
-  public ValueSource getValueSource(SchemaField field, QParser parser) {
-    field.checkFieldCacheSource();
-    return new StrFieldSource(field.name);
-  }
-
-  @Override
-  public double getSphereRadius() {
-    return DistanceUtils.EARTH_MEAN_RADIUS_KM;
-  }
-
-}
diff --git a/solr/core/src/java/org/apache/solr/schema/LatLonType.java b/solr/core/src/java/org/apache/solr/schema/LatLonType.java
deleted file mode 100644
index 9f9dcd1..0000000
--- a/solr/core/src/java/org/apache/solr/schema/LatLonType.java
+++ /dev/null
@@ -1,598 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.schema;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.lucene.document.StoredField;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexableField;
-import org.apache.lucene.index.LeafReaderContext;
-import org.apache.lucene.queries.function.FunctionValues;
-import org.apache.lucene.queries.function.ValueSource;
-import org.apache.lucene.queries.function.valuesource.VectorValueSource;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.ConstantScoreWeight;
-import org.apache.lucene.search.DocIdSetIterator;
-import org.apache.lucene.search.Explanation;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.ScoreMode;
-import org.apache.lucene.search.Scorer;
-import org.apache.lucene.search.SortField;
-import org.apache.lucene.search.Weight;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.response.TextResponseWriter;
-import org.apache.solr.search.DelegatingCollector;
-import org.apache.solr.search.ExtendedQueryBase;
-import org.apache.solr.search.PostFilter;
-import org.apache.solr.search.QParser;
-import org.apache.solr.search.SpatialOptions;
-import org.apache.solr.uninverting.UninvertingReader.Type;
-import org.apache.solr.util.SpatialUtils;
-import org.locationtech.spatial4j.context.SpatialContext;
-import org.locationtech.spatial4j.distance.DistanceUtils;
-import org.locationtech.spatial4j.shape.Point;
-import org.locationtech.spatial4j.shape.Rectangle;
-
-
-/**
- * Represents a Latitude/Longitude as a 2 dimensional point.  Latitude is <b>always</b> specified first.
- *
- * @deprecated use {@link LatLonPointSpatialField} instead
- */
-@Deprecated
-public class LatLonType extends AbstractSubTypeFieldType implements SpatialQueryable {
-  protected static final int LAT = 0;
-  protected static final int LON = 1;
-
-  @Override
-  protected void init(IndexSchema schema, Map<String, String> args) {
-    super.init(schema, args);
-    //TODO: refactor this, as we are creating the suffix cache twice, since the super.init does it too
-    createSuffixCache(3);//we need three extra fields: one for the storage field, two for the lat/lon
-  }
-
-  @Override
-  public List<IndexableField> createFields(SchemaField field, Object value) {
-    String externalVal = value.toString();
-    //we could have 3 fields (two for the lat & lon, one for storage)
-    List<IndexableField> f = new ArrayList<>(3);
-    if (field.indexed()) {
-      Point point = SpatialUtils.parsePointSolrException(externalVal, SpatialContext.GEO);
-      //latitude
-      SchemaField subLatSF = subField(field, LAT, schema);
-      f.addAll(subLatSF.createFields(String.valueOf(point.getY())));
-      //longitude
-      SchemaField subLonSF = subField(field, LON, schema);
-      f.addAll(subLonSF.createFields(String.valueOf(point.getX())));
-    }
-
-    if (field.stored()) {
-      f.add(createField(field.getName(), externalVal, StoredField.TYPE));
-    }
-    return f;
-  }
-  
-  @Override
-  protected void checkSupportsDocValues() {
-    // DocValues supported only when enabled at the fieldType 
-    if (!hasProperty(DOC_VALUES)) {
-      throw new UnsupportedOperationException("LatLonType can't have docValues=true in the field definition, use docValues=true in the fieldType definition, or in subFieldType/subFieldSuffix");
-    }
-  }
-
-
-  @Override
-  public Query getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive) {
-    Point p1 = SpatialUtils.parsePointSolrException(part1, SpatialContext.GEO);
-    Point p2 = SpatialUtils.parsePointSolrException(part2, SpatialContext.GEO);
-
-    SchemaField latSF = subField(field, LAT, parser.getReq().getSchema());
-    SchemaField lonSF = subField(field, LON, parser.getReq().getSchema());
-    BooleanQuery.Builder result = new BooleanQuery.Builder();
-    // points must currently be ordered... should we support specifying any two opposite corner points?
-    result.add(latSF.getType().getRangeQuery(parser, latSF,
-        Double.toString(p1.getY()), Double.toString(p2.getY()), minInclusive, maxInclusive), BooleanClause.Occur.MUST);
-    result.add(lonSF.getType().getRangeQuery(parser, lonSF,
-        Double.toString(p1.getX()), Double.toString(p2.getX()), minInclusive, maxInclusive), BooleanClause.Occur.MUST);
-    return result.build();
-  }
-
-  @Override
-  public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) {
-    Point p1 = SpatialUtils.parsePointSolrException(externalVal, SpatialContext.GEO);
-
-    SchemaField latSF = subField(field, LAT, parser.getReq().getSchema());
-    SchemaField lonSF = subField(field, LON, parser.getReq().getSchema());
-    BooleanQuery.Builder result = new BooleanQuery.Builder();
-    result.add(latSF.getType().getFieldQuery(parser, latSF,
-        Double.toString(p1.getY())), BooleanClause.Occur.MUST);
-    result.add(lonSF.getType().getFieldQuery(parser, lonSF,
-        Double.toString(p1.getX())), BooleanClause.Occur.MUST);
-    return result.build();
-  }
-
-
-
-  @Override
-  public Query createSpatialQuery(QParser parser, SpatialOptions options) {
-    Point point = SpatialUtils.parsePointSolrException(options.pointStr, SpatialContext.GEO);
-
-    // lat & lon in degrees
-    double latCenter = point.getY();
-    double lonCenter = point.getX();
-    
-    double distDeg = DistanceUtils.dist2Degrees(options.distance, options.radius);
-    Rectangle bbox = DistanceUtils.calcBoxByDistFromPtDEG(latCenter, lonCenter, distDeg, SpatialContext.GEO, null);
-    double latMin = bbox.getMinY();
-    double latMax = bbox.getMaxY();
-    double lonMin, lonMax, lon2Min, lon2Max;
-    if (bbox.getCrossesDateLine()) {
-       lonMin = -180;
-       lonMax = bbox.getMaxX();
-       lon2Min = bbox.getMinX();
-       lon2Max = 180;
-    } else {
-       lonMin = bbox.getMinX();
-       lonMax = bbox.getMaxX();
-       lon2Min = -180;
-       lon2Max = 180;
-    }
-    
-    IndexSchema schema = parser.getReq().getSchema();
-    
-    // Now that we've figured out the ranges, build them!
-    SchemaField latSF = subField(options.field, LAT, schema);
-    SchemaField lonSF = subField(options.field, LON, schema);
-
-    SpatialDistanceQuery spatial = new SpatialDistanceQuery();
-
-
-    if (options.bbox) {
-      BooleanQuery.Builder result = new BooleanQuery.Builder();
-
-      Query latRange = latSF.getType().getRangeQuery(parser, latSF,
-                String.valueOf(latMin),
-                String.valueOf(latMax),
-                true, true);
-      result.add(latRange, BooleanClause.Occur.MUST);
-
-      if (lonMin != -180 || lonMax != 180) {
-        Query lonRange = lonSF.getType().getRangeQuery(parser, lonSF,
-                String.valueOf(lonMin),
-                String.valueOf(lonMax),
-                true, true);
-        if (lon2Min != -180 || lon2Max != 180) {
-          // another valid longitude range
-          BooleanQuery.Builder bothLons = new BooleanQuery.Builder();
-          bothLons.add(lonRange, BooleanClause.Occur.SHOULD);
-
-          lonRange = lonSF.getType().getRangeQuery(parser, lonSF,
-                String.valueOf(lon2Min),
-                String.valueOf(lon2Max),
-                true, true);
-          bothLons.add(lonRange, BooleanClause.Occur.SHOULD);
-
-          lonRange = bothLons.build();
-        }
-
-        result.add(lonRange, BooleanClause.Occur.MUST);
-      }
-
-      spatial.bboxQuery = result.build();
-    }
-
-
-    spatial.origField = options.field.getName();
-    spatial.latSource = latSF.getType().getValueSource(latSF, parser);
-    spatial.lonSource = lonSF.getType().getValueSource(lonSF, parser);
-    spatial.latMin = latMin;
-    spatial.latMax = latMax;
-    spatial.lonMin = lonMin;
-    spatial.lonMax = lonMax;
-    spatial.lon2Min = lon2Min;
-    spatial.lon2Max = lon2Max;
-    spatial.lon2 = lon2Min != -180 || lon2Max != 180;
-
-    spatial.latCenter = latCenter;
-    spatial.lonCenter = lonCenter;
-    spatial.dist = options.distance;
-    spatial.planetRadius = options.radius;
-
-    spatial.calcDist = !options.bbox;
-
-    return spatial;
-  }
-
-  @Override
-  public ValueSource getValueSource(SchemaField field, QParser parser) {
-    ArrayList<ValueSource> vs = new ArrayList<>(2);
-    for (int i = 0; i < 2; i++) {
-      SchemaField sub = subField(field, i, schema);
-      vs.add(sub.getType().getValueSource(sub, parser));
-    }
-    return new LatLonValueSource(field, vs);
-  }
-
-  @Override
-  public boolean isPolyField() {
-    return true;
-  }
-
-  @Override
-  public void write(TextResponseWriter writer, String name, IndexableField f) throws IOException {
-    writer.writeStr(name, f.stringValue(), true);
-  }
-
-  @Override
-  public SortField getSortField(SchemaField field, boolean top) {
-    throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Sorting not supported on LatLonType " + field.getName());
-  }
-  
-  @Override
-  public Type getUninversionType(SchemaField sf) {
-    return null;
-  }
-
-
-
-  //It never makes sense to create a single field, so make it impossible to happen
-
-  @Override
-  public IndexableField createField(SchemaField field, Object value) {
-    throw new UnsupportedOperationException("LatLonType uses multiple fields.  field=" + field.getName());
-  }
-
-  @Override
-  public double getSphereRadius() {
-    return DistanceUtils.EARTH_MEAN_RADIUS_KM;
-  }
-
-}
-
-class LatLonValueSource extends VectorValueSource {
-  private final SchemaField sf;
-
-  public LatLonValueSource(SchemaField sf, List<ValueSource> sources) {
-    super(sources);
-    this.sf = sf;
-  }
-
-  @Override
-  public String name() {
-    return "latlon";
-  }
-
-  @Override
-  public String description() {
-    return name() + "(" + sf.getName() + ")";
-  }
-}
-
-
-
-
-////////////////////////////////////////////////////////////////////////////////////////////
-// TODO: recast as a value source that doesn't have to match all docs
-
-class SpatialDistanceQuery extends ExtendedQueryBase implements PostFilter {
-  String origField;
-  ValueSource latSource;
-  ValueSource lonSource;
-  double lonMin, lonMax, lon2Min, lon2Max, latMin, latMax;
-  boolean lon2;
-
-  boolean calcDist;  // actually calculate the distance with haversine
-  Query bboxQuery;
-
-  double latCenter;
-  double lonCenter;
-  double dist;
-  double planetRadius;
-
-
-  @Override
-  public Query rewrite(IndexReader reader) throws IOException {
-    return bboxQuery != null ? bboxQuery.rewrite(reader) : this;
-  }
-
-  protected class SpatialWeight extends ConstantScoreWeight {
-    protected IndexSearcher searcher;
-    protected Map latContext;
-    protected Map lonContext;
-
-    public SpatialWeight(IndexSearcher searcher, float boost) throws IOException {
-      super(SpatialDistanceQuery.this, boost);
-      this.searcher = searcher;
-      this.latContext = ValueSource.newContext(searcher);
-      this.lonContext = ValueSource.newContext(searcher);
-      latSource.createWeight(latContext, searcher);
-      lonSource.createWeight(lonContext, searcher);
-    }
-
-    @Override
-    public Scorer scorer(LeafReaderContext context) throws IOException {
-      return new SpatialScorer(context, this, score());
-    }
-
-    @Override
-    public boolean isCacheable(LeafReaderContext ctx) {
-      return false;
-    }
-
-    @Override
-    public Explanation explain(LeafReaderContext context, int doc) throws IOException {
-      return ((SpatialScorer)scorer(context)).explain(super.explain(context, doc), doc);
-    }
-  }
-
-  protected class SpatialScorer extends Scorer {
-    final IndexReader reader;
-    final SpatialWeight weight;
-    final int maxDoc;
-    final float qWeight;
-    int doc=-1;
-    final FunctionValues latVals;
-    final FunctionValues lonVals;
-
-
-    final double lonMin, lonMax, lon2Min, lon2Max, latMin, latMax;
-    final boolean lon2;
-    final boolean calcDist;
-    
-    final double latCenterRad;
-    final double lonCenterRad;
-    final double latCenterRad_cos;
-    final double dist;
-    final double planetRadius;
-
-    int lastDistDoc;
-    double lastDist;
-
-    public SpatialScorer(LeafReaderContext readerContext, SpatialWeight w, float qWeight) throws IOException {
-      super(w);
-      this.weight = w;
-      this.qWeight = qWeight;
-      this.reader = readerContext.reader();
-      this.maxDoc = reader.maxDoc();
-      latVals = latSource.getValues(weight.latContext, readerContext);
-      lonVals = lonSource.getValues(weight.lonContext, readerContext);
-
-      this.lonMin = SpatialDistanceQuery.this.lonMin;
-      this.lonMax = SpatialDistanceQuery.this.lonMax;
-      this.lon2Min = SpatialDistanceQuery.this.lon2Min;
-      this.lon2Max = SpatialDistanceQuery.this.lon2Max;
-      this.latMin = SpatialDistanceQuery.this.latMin;
-      this.latMax = SpatialDistanceQuery.this.latMax;
-      this.lon2 = SpatialDistanceQuery.this.lon2;
-      this.calcDist = SpatialDistanceQuery.this.calcDist;
-
-      this.latCenterRad = SpatialDistanceQuery.this.latCenter * DistanceUtils.DEGREES_TO_RADIANS;
-      this.lonCenterRad = SpatialDistanceQuery.this.lonCenter * DistanceUtils.DEGREES_TO_RADIANS;
-      this.latCenterRad_cos = this.calcDist ? Math.cos(latCenterRad) : 0;
-      this.dist = SpatialDistanceQuery.this.dist;
-      this.planetRadius = SpatialDistanceQuery.this.planetRadius;
-
-    }
-
-    boolean match() throws IOException {
-      // longitude should generally be more restrictive than latitude
-      // (e.g. in the US, it immediately separates the coasts, and in world search separates
-      // US from Europe from Asia, etc.
-      double lon = lonVals.doubleVal(doc);
-      if (! ((lon >= lonMin && lon <=lonMax) || (lon2 && lon >= lon2Min && lon <= lon2Max)) ) {
-        return false;
-      }
-
-      double lat = latVals.doubleVal(doc);
-      if ( !(lat >= latMin && lat <= latMax) ) {
-        return false;
-      }
-
-      if (!calcDist) return true;
-
-      // TODO: test for internal box where we wouldn't need to calculate the distance
-
-      return dist(lat, lon) <= dist;
-    }
-
-    double dist(double lat, double lon) {
-      double latRad = lat * DistanceUtils.DEGREES_TO_RADIANS;
-      double lonRad = lon * DistanceUtils.DEGREES_TO_RADIANS;
-      
-      // haversine, specialized to avoid a cos() call on latCenterRad
-      double diffX = latCenterRad - latRad;
-      double diffY = lonCenterRad - lonRad;
-      double hsinX = Math.sin(diffX * 0.5);
-      double hsinY = Math.sin(diffY * 0.5);
-      double h = hsinX * hsinX +
-              (latCenterRad_cos * Math.cos(latRad) * hsinY * hsinY);
-      double result = (planetRadius * 2 * Math.atan2(Math.sqrt(h), Math.sqrt(1 - h)));
-
-      // save the results of this calculation
-      lastDistDoc = doc;
-      lastDist = result;
-      
-      return result;
-    }
-
-    @Override
-    public int docID() {
-      return doc;
-    }
-
-    @Override
-    public DocIdSetIterator iterator() {
-      return new DocIdSetIterator() {
-
-        @Override
-        public int docID() {
-          return doc;
-        }
-
-        // instead of matching all docs, we could also embed a query.
-        // the score could either ignore the subscore, or boost it.
-        // Containment:  floatline(foo:myTerm, "myFloatField", 1.0, 0.0f)
-        // Boost:        foo:myTerm^floatline("myFloatField",1.0,0.0f)
-        @Override
-        public int nextDoc() throws IOException {
-          for(;;) {
-            ++doc;
-            if (doc>=maxDoc) {
-              return doc=NO_MORE_DOCS;
-            }
-            if (!match()) continue;
-            return doc;
-          }
-        }
-
-        @Override
-        public int advance(int target) throws IOException {
-          // this will work even if target==NO_MORE_DOCS
-          doc=target-1;
-          return nextDoc();
-        }
-
-        @Override
-        public long cost() {
-          return maxDoc;
-        }
-
-      };
-    }
-
-    @Override
-    public float score() throws IOException {
-      double dist = (doc == lastDistDoc) ? lastDist : dist(latVals.doubleVal(doc), lonVals.doubleVal(doc));
-      return (float)(dist * qWeight);
-    }
-
-    @Override
-    public float getMaxScore(int upTo) throws IOException {
-      return Float.POSITIVE_INFINITY;
-    }
-
-    public Explanation explain(Explanation base, int doc) throws IOException {
-      if (base.isMatch() == false) {
-        return base;
-      }
-      double dist = dist(latVals.doubleVal(doc), lonVals.doubleVal(doc));
-
-      String description = SpatialDistanceQuery.this.toString();
-      return Explanation.match((float) (base.getValue().floatValue() * dist), description + " product of:",
-          base, Explanation.match((float) dist, "hsin("+latVals.doubleVal(doc)+","+lonVals.doubleVal(doc)));
-    }
-
-  }
-
-  @Override
-  public DelegatingCollector getFilterCollector(IndexSearcher searcher) {
-    try {
-      return new SpatialCollector(new SpatialWeight(searcher, 1f));
-    } catch (IOException e) {
-      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
-    }
-  }
-
-
-  class SpatialCollector extends DelegatingCollector {
-    final SpatialWeight weight;
-    SpatialScorer spatialScorer;
-    int maxdoc;
-    
-    public SpatialCollector(SpatialWeight weight) {
-      this.weight = weight;
-    }
-
-    @Override
-    public void collect(int doc) throws IOException {
-      spatialScorer.doc = doc;
-      if (spatialScorer.match()) leafDelegate.collect(doc);
-    }
-
-    @Override
-    protected void doSetNextReader(LeafReaderContext context) throws IOException {
-      super.doSetNextReader(context);
-      maxdoc = context.reader().maxDoc();
-      spatialScorer = new SpatialScorer(context, weight, 1.0f);
-    }
-  }
-
-
-  @Override
-  public Weight createWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException {
-    // if we were supposed to use bboxQuery, then we should have been rewritten using that query
-    assert bboxQuery == null;
-    return new SpatialWeight(searcher, boost);
-  }
-
-
-  /** Prints a user-readable version of this query. */
-  @Override
-  public String toString(String field)
-  {
-    return super.getOptions() +
-            (calcDist ? "geofilt" : "bbox") + "(latlonSource="+origField +"(" + latSource + "," + lonSource + ")"
-            +",latCenter="+latCenter+",lonCenter="+lonCenter
-            +",dist=" + dist
-            +",latMin=" + latMin + ",latMax="+latMax
-            +",lonMin=" + lonMin + ",lonMax"+lonMax
-            +",lon2Min=" + lon2Min + ",lon2Max" + lon2Max
-            +",calcDist="+calcDist
-            +",planetRadius="+planetRadius
-            // + (bboxQuery == null ? "" : ",bboxQuery="+bboxQuery)
-            +")";
-  }
-
-
-  /** Returns true if <code>o</code> is equal to this. */
-  @Override
-  public boolean equals(Object o) {
-    if (!sameClassAs(o)) return false;
-    SpatialDistanceQuery other = (SpatialDistanceQuery)o;
-    return     this.latCenter == other.latCenter
-            && this.lonCenter == other.lonCenter
-            && this.latMin == other.latMin
-            && this.latMax == other.latMax
-            && this.lonMin == other.lonMin
-            && this.lonMax == other.lonMax
-            && this.lon2Min == other.lon2Min
-            && this.lon2Max == other.lon2Max
-            && this.dist == other.dist
-            && this.planetRadius == other.planetRadius
-            && this.calcDist == other.calcDist
-            && this.lonSource.equals(other.lonSource)
-            && this.latSource.equals(other.latSource)
-        ;
-  }
-
-  /** Returns a hash code value for this object. */
-  @Override
-  public int hashCode() {
-    // don't bother making the hash expensive - the center latitude + min longitude will be very unique
-    long hash = classHash();
-    hash = hash * 31 + Double.doubleToLongBits(latCenter);
-    hash = hash * 31 + Double.doubleToLongBits(lonMin);
-    return (int) (hash >> 32 + hash);
-  }
-}
-
-
diff --git a/solr/core/src/java/org/apache/solr/schema/PointType.java b/solr/core/src/java/org/apache/solr/schema/PointType.java
index e088e7f..2dc220e 100644
--- a/solr/core/src/java/org/apache/solr/schema/PointType.java
+++ b/solr/core/src/java/org/apache/solr/schema/PointType.java
@@ -40,7 +40,7 @@ import org.locationtech.spatial4j.distance.DistanceUtils;
 
 /**
  * A point type that indexes a point in an n-dimensional space as separate fields and supports range queries.
- * See {@link LatLonType} for geo-spatial queries.
+ * See {@link LatLonPointSpatialField} for geo-spatial queries.
  */
 public class PointType extends CoordinateFieldType implements SpatialQueryable {
 
@@ -282,7 +282,7 @@ public class PointType extends CoordinateFieldType implements SpatialQueryable {
 
   @Override
   public double getSphereRadius() {
-    // This won't likely be used. You should probably be using LatLonType instead if you felt the need for this.
+    // This won't likely be used. You should probably be using LatLonPointSpatialField instead if you felt the need for this.
     // This is here just for backward compatibility reasons.
     return DistanceUtils.EARTH_MEAN_RADIUS_KM;
   }
diff --git a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java b/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
deleted file mode 100644
index 006d8d2..0000000
--- a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.schema;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.solr.legacy.LegacyFieldType;
-import org.apache.solr.legacy.PointVectorStrategy;
-
-/**
- * @see PointVectorStrategy
- * @deprecated use {@link LatLonPointSpatialField} instead
- */
-@Deprecated
-public class SpatialPointVectorFieldType extends AbstractSpatialFieldType<PointVectorStrategy> implements SchemaAware {
-
-  protected String numberFieldName = "tdouble";//in example schema defaults to non-zero precision step -- a good choice
-  private int precisionStep;
-
-  @Override
-  protected void init(IndexSchema schema, Map<String, String> args) {
-    super.init(schema, args);
-
-    String v = args.remove( "numberType" );
-    if( v != null ) {
-      numberFieldName = v;
-    }
-
-  }
-
-  /**
-   * Adds X and Y fields to the given schema for each field with this class as its field type.
-   * 
-   * {@inheritDoc}
-   * 
-   * @param schema {@inheritDoc}
-   *
-   */
-  @Override
-  public void inform(IndexSchema schema) {
-    FieldType fieldType = schema.getFieldTypeByName(numberFieldName);
-    if( fieldType == null ) {
-      throw new RuntimeException( "Can not find number field: "+ numberFieldName);
-    }
-    //TODO support other numeric types in the future
-    if( !(fieldType instanceof TrieDoubleField) ) {
-      throw new RuntimeException( "field type must be TrieDoubleField: "+ fieldType);
-    }
-    precisionStep = ((TrieField)fieldType).getPrecisionStep();
-
-    // NOTE: the SchemaField constructor we're using ignores any properties of the fieldType
-    // so only the ones we're explicitly setting get used.
-    //
-    // In theory we should fix this, but since this class is already deprecated, we'll leave it alone
-    // to simplify the risk of back-compat break for existing users.
-    final int p = (INDEXED | TOKENIZED | OMIT_NORMS | OMIT_TF_POSITIONS | UNINVERTIBLE);
-    List<SchemaField> newFields = new ArrayList<>();
-    for( SchemaField sf : schema.getFields().values() ) {
-      if( sf.getType() == this ) {
-        String name = sf.getName();
-        newFields.add(new SchemaField(name + PointVectorStrategy.SUFFIX_X, fieldType, p, null));
-        newFields.add(new SchemaField(name + PointVectorStrategy.SUFFIX_Y, fieldType, p, null));
-      }
-    }
-    for (SchemaField newField : newFields) {
-      schema.getFields().put(newField.getName(), newField);
-    }
-  }
-
-  @Override
-  public NumberType getNumberType() {
-    return NumberType.DOUBLE;
-  }
-
-  @Override
-  protected PointVectorStrategy newSpatialStrategy(String fieldName) {
-    // TODO update to how BBoxField does things
-    if (this.getNumberType() != null) {
-      // create strategy based on legacy numerics
-      // todo remove in 7.0
-      LegacyFieldType fieldType = new LegacyFieldType(PointVectorStrategy.LEGACY_FIELDTYPE);
-      fieldType.setNumericPrecisionStep(precisionStep);
-      return new PointVectorStrategy(ctx, fieldName, fieldType);
-    } else {
-      return PointVectorStrategy.newInstance(ctx, fieldName);
-    }
-  }
-
-}
-
diff --git a/solr/core/src/java/org/apache/solr/schema/SpatialQueryable.java b/solr/core/src/java/org/apache/solr/schema/SpatialQueryable.java
index 8d0c072..319fbda 100644
--- a/solr/core/src/java/org/apache/solr/schema/SpatialQueryable.java
+++ b/solr/core/src/java/org/apache/solr/schema/SpatialQueryable.java
@@ -22,7 +22,7 @@ import org.apache.solr.search.SpatialOptions;
 
 /**
  * Indicate that the implementing class is capable of generating a Query against spatial resources.
- * For example, the LatLonType is capable of creating a query that restricts the document space down
+ * For example, the {@link LatLonPointSpatialField} is capable of creating a query that restricts the document space down
  * to documents that are within a certain distance of a given point on Earth. *
  *
  **/
diff --git a/solr/core/src/java/org/apache/solr/schema/SpatialTermQueryPrefixTreeFieldType.java b/solr/core/src/java/org/apache/solr/schema/SpatialTermQueryPrefixTreeFieldType.java
deleted file mode 100644
index 203a7b8..0000000
--- a/solr/core/src/java/org/apache/solr/schema/SpatialTermQueryPrefixTreeFieldType.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.schema;
-
-import org.apache.lucene.spatial.prefix.TermQueryPrefixTreeStrategy;
-
-/**
- * @see TermQueryPrefixTreeStrategy
- * @deprecated use {@link org.apache.lucene.spatial.prefix.RecursivePrefixTreeStrategy} or {@link RptWithGeometrySpatialField}
- */
-@Deprecated
-public class SpatialTermQueryPrefixTreeFieldType extends AbstractSpatialPrefixTreeFieldType<TermQueryPrefixTreeStrategy> {
-
-  @Override
-  protected TermQueryPrefixTreeStrategy newPrefixTreeStrategy(String fieldName) {
-    return new TermQueryPrefixTreeStrategy(grid,fieldName);
-  }
-}
-
diff --git a/solr/core/src/java/org/apache/solr/search/SpatialFilterQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/SpatialFilterQParserPlugin.java
index cba3133..dbe4f24 100644
--- a/solr/core/src/java/org/apache/solr/search/SpatialFilterQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/SpatialFilterQParserPlugin.java
@@ -17,6 +17,8 @@
 package org.apache.solr.search;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.schema.LatLonPointSpatialField;
+import org.apache.solr.schema.PointType;
 
 /**
  * Creates a spatial Filter based on the type of spatial point used.
@@ -34,14 +36,16 @@ import org.apache.solr.request.SolrQueryRequest;
  * <li>pt - The point to use as a reference.  Must match the dimension of the field. Required.</li>
  * <li>d - The distance in km.  Required.</li>
  * </ul>
- * The distance measure used currently depends on the FieldType.  LatLonType defaults to using haversine, PointType defaults to Euclidean (2-norm).
+ * The distance measure used currently depends on the FieldType.
+ * {@link LatLonPointSpatialField} defaults to using haversine,
+ * {@link PointType} defaults to Euclidean (2-norm).
  * <p>
  * Examples:
  * <pre>fq={!geofilt sfield=store pt=10.312,-20.556 d=3.5}</pre>
  * <pre>fq={!geofilt sfield=store}&amp;pt=10.312,-20&amp;d=3.5</pre>
  * <pre>fq={!geofilt}&amp;sfield=store&amp;pt=10.312,-20&amp;d=3.5</pre>
  * <p>
- * Note: The geofilt for LatLonType is capable of also producing scores equal to the computed distance from the point
+ * Note: The geofilt for {@link LatLonPointSpatialField} is capable of also producing scores equal to the computed distance from the point
  * to the field, making it useful as a component of the main query or a boosting query.
  */
 public class SpatialFilterQParserPlugin extends QParserPlugin {
diff --git a/solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java b/solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java
index 0829461..96e9027 100644
--- a/solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java
@@ -129,7 +129,7 @@ public class GeoDistValueSourceParser extends ValueSourceParser {
     // sfield can only be in mv2, according to the logic above
     if (mv2 instanceof SpatialStrategyMultiValueSource) {
       if (constants == null)
-        throw new SyntaxError("When using AbstractSpatialFieldType (e.g. RPT not LatLonType)," +
+        throw new SyntaxError("When using AbstractSpatialFieldType (e.g. RPT)," +
             " the point must be supplied as constants");
       // note: uses Haversine by default but can be changed via distCalc=...
       SpatialStrategy strategy = ((SpatialStrategyMultiValueSource) mv2).strategy;
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-hash.xml b/solr/core/src/test-files/solr/collection1/conf/schema-hash.xml
index c2d6b39..c910b6a 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-hash.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-hash.xml
@@ -376,17 +376,6 @@
 
   <fieldType name="uuid" class="solr.UUIDField"/>
 
-  <!-- Try out some point types -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-  <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-  <!-- Use the sub field suffix -->
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldtype name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
   <!--  some per-field similarity examples -->
 
   <!--  specify a Similarity classname directly -->
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-minhash.xml b/solr/core/src/test-files/solr/collection1/conf/schema-minhash.xml
index a13ba35..5fe5f8f 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-minhash.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-minhash.xml
@@ -376,17 +376,6 @@
 
   <fieldType name="uuid" class="solr.UUIDField"/>
 
-  <!-- Try out some point types -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-  <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-  <!-- Use the sub field suffix -->
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldtype name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
   <!-- Min hash analysed field type -->
 
   <fieldType name="text_min_hash" class="solr.TextField" positionIncrementGap="100">
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-rest.xml b/solr/core/src/test-files/solr/collection1/conf/schema-rest.xml
index 46b735c..007a129 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-rest.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-rest.xml
@@ -478,15 +478,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
   <!-- Field type where english stopwords are managed by the REST API -->
   <fieldType name="managed_en" class="solr.TextField" autoGeneratePhraseQueries="false">
     <analyzer>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml b/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml
index 50823e0..80797bf 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml
@@ -22,7 +22,7 @@
   <fieldType name="tfloat" class="${solr.tests.FloatFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="8"/>
   <fieldType name="tlong" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" precisionStep="8"/>
   
-  <!-- tdouble class can't be randomized, because SpatialPointVectorFieldType requires TrieDoubleField.  See SOLR-11111. -->
+  <!-- tdouble class can't be randomized, because BBoxField requires TrieDoubleField.  See SOLR-11111. -->
   <fieldType name="tdouble" class="solr.TrieDoubleField" docValues="${solr.tests.numeric.dv}" precisionStep="8"/>
   
   <fieldType name="tdoubleDV" class="${solr.tests.DoubleFieldType}" precisionStep="8" docValues="true"/>
@@ -45,14 +45,6 @@
   <fieldType name="srpt_100km" class="solr.SpatialRecursivePrefixTreeFieldType"
              maxDistErr="100" distanceUnits="kilometers"
   />
-  <fieldType name="stqpt_geohash" class="solr.SpatialTermQueryPrefixTreeFieldType"
-             prefixTree="geohash" distanceUnits="degrees"/>
-
-  <fieldType name="stqpt_u" class="solr.SpatialTermQueryPrefixTreeFieldType"
-             geo="false" distCalculator="cartesian^2" worldBounds="ENVELOPE(0, 1000, 1000, 0)" distanceUnits="degrees"/>
-
-  <fieldType name="pointvector" class="solr.SpatialPointVectorFieldType"
-             numberType="tdouble" distanceUnits="degrees"/>
 
   <fieldType name="srptgeom" class="solr.RptWithGeometrySpatialField"/>
 
@@ -75,8 +67,6 @@
   <field name="srpt_geohash" type="srpt_geohash" multiValued="true"/>
   <field name="srpt_quad" type="srpt_quad" multiValued="true"/>
   <field name="srpt_packedquad" type="srpt_packedquad" multiValued="true"/>
-  <field name="stqpt_geohash" type="stqpt_geohash" multiValued="true"/>
-  <field name="pointvector" type="pointvector"/>
   <field name="srptgeom" type="srptgeom"/>
   <field name="srptgeom_geo3d" type="srptgeom_geo3d"/>
   <field name="bbox" type="bbox"/>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml b/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
index 03d9d7e..5f35cdc 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema-sql.xml
@@ -386,17 +386,6 @@
 
   <fieldType name="uuid" class="solr.UUIDField"/>
 
-  <!-- Try out some point types -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-  <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-  <!-- Use the sub field suffix -->
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldtype name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
   <!--  some per-field similarity examples -->
 
   <!--  specify a Similarity classname directly -->
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema.xml b/solr/core/src/test-files/solr/collection1/conf/schema.xml
index acdf7cf..2e0e22e4 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema.xml
@@ -428,10 +428,6 @@
   <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
   <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
   <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
 
   <!-- Currency type -->
   <fieldType name="currency" class="solr.CurrencyField" currencyConfig="currency.xml" multiValued="false"/>
@@ -461,8 +457,6 @@
     </analyzer>
   </fieldType>
 
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
   <!-- 
     Example of using PathHierarchyTokenizerFactory at index time, so
     queries for paths match documents at that path, or in descendent paths
@@ -521,22 +515,13 @@
   <field name="shouldbestored" type="unstored" stored="true"/>
   <field name="shouldbeunindexed" type="unstored" indexed="false" stored="true"/>
 
-  <!-- Test points -->
-  <!-- Test points -->
+  <!-- Test spatial PointType -->
   <field name="home" type="xy" indexed="true" stored="true" multiValued="false"/>
   <field name="x" type="x" indexed="true" stored="true" multiValued="false"/>
   <field name="homed" type="xyd" indexed="true" stored="true" multiValued="false"/>
   <field name="home_ns" type="xy" indexed="true" stored="false" multiValued="false"/>
   <field name="work" type="xy" indexed="true" stored="true" multiValued="false"/>
 
-  <field name="home_ll" type="latLon" indexed="true" stored="true" multiValued="false"/>
-  <field name="work_ll" type="latLon" indexed="true" stored="true" multiValued="false"/>
-
-  <field name="home_gh" type="geohash" indexed="true" stored="true" multiValued="false"/>
-
-
-  <field name="point10" type="tenD" indexed="true" stored="true" multiValued="false"/>
-
   <!-- Test currency -->
   <field name="amount" type="currency" indexed="true" stored="true" multiValued="false"/>
   <field name="mock_amount" type="mock_currency" indexed="true" stored="true"/>
@@ -631,8 +616,6 @@
 
   <field name="title_stringNoNorms" type="string" omitNorms="true" indexed="true" stored="true"/>
 
-  <field name="store" type="location" indexed="true" stored="true" omitNorms="false"/>
-
   <field name="lower" type="lowerfilt" indexed="false" stored="true" multiValued="true"/>
   <field name="_route_" type="string" indexed="true" stored="true" multiValued="false"/>
 
@@ -719,9 +702,6 @@
 
   <dynamicField name="*_mfacet" type="string" indexed="true" stored="false" multiValued="true"/>
 
-  <!-- Type used to index the lat and lon components for the "location" FieldType -->
-  <dynamicField name="*_coordinate" type="double" indexed="true" stored="false" omitNorms="true" docValues="false"/>
-
   <dynamicField name="*_path" type="path" indexed="true" stored="true" omitNorms="true" multiValued="true"/>
   <dynamicField name="*_ancestor" type="ancestor_path" indexed="true" stored="true" omitNorms="true"
                 multiValued="true"/>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema11.xml b/solr/core/src/test-files/solr/collection1/conf/schema11.xml
index 0dff57f..0e9a221 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema11.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema11.xml
@@ -263,18 +263,6 @@
     <fieldType name="tlongs" class="${solr.tests.LongFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" precisionStep="0" multiValued="true"/>
     <fieldType name="tdoubles" class="${solr.tests.DoubleFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" precisionStep="0" multiValued="true" />
     <fieldType name="tdates" class="${solr.tests.DateFieldType}" docValues="${solr.tests.numeric.dv}" omitNorms="true" positionIncrementGap="0" precisionStep="0" multiValued="true" />
- 
-
-    <!-- Poly field -->
-    <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-    <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-    <fieldType name="geohash" class="solr.GeoHashField"/>
-
-    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-
-    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multi
-valued. -->
-    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
 
   <!-- eff_tint class can't be randomized, because ExternalFileField disallows point-based keyField.  See SOLR-10846. -->
   <fieldType name="eff_tint" class="solr.TrieDoubleField" docValues="${solr.tests.numeric.dv}" precisionStep="8"/>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema12.xml b/solr/core/src/test-files/solr/collection1/conf/schema12.xml
index 6f33b41..496c4dd 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema12.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema12.xml
@@ -518,18 +518,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-  <!-- sub-centimeter accuracy for RPT; distance calcs -->
-  <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
-             geo="true" distErrPct="0.025" maxDistErr="0.00001" distanceUnits="kilometers"/>
-
   <fieldType name="currency" class="solr.CurrencyField" currencyConfig="currency.xml" multiValued="false"/>
 
   <fieldType name="shingle23" class="solr.TextField" enableGraphQueries="false" multiValued="true">
@@ -651,8 +639,6 @@
     -->
   <!-- <field name="_version_" type="long" indexed="true" stored="true"/> -->
 
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
   <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
   <dynamicField name="t_pick_best_*" type="text_pick_best" indexed="true" stored="true"/>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema15.xml b/solr/core/src/test-files/solr/collection1/conf/schema15.xml
index c8328ac..6b77456 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema15.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema15.xml
@@ -436,15 +436,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
   <fieldType name="text_min_hash" class="solr.TextField" positionIncrementGap="100">
     <analyzer>
       <tokenizer class="solr.ICUTokenizerFactory"/>
@@ -564,8 +555,6 @@
 
   <field name="min_hash_analysed" type="text_min_hash" multiValued="false" indexed="true" stored="false"/>
 
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
   <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
   <dynamicField name="t_*" type="text" indexed="true" stored="true"/>
diff --git a/solr/core/src/test-files/solr/collection1/conf/schema_latest.xml b/solr/core/src/test-files/solr/collection1/conf/schema_latest.xml
index 78d5766..b50844e 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schema_latest.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schema_latest.xml
@@ -262,9 +262,6 @@
   <dynamicField name="*_txt" type="text_general" indexed="true" stored="true" multiValued="true"/>
   <dynamicField name="*_en" type="text_en" indexed="true" stored="true" multiValued="true"/>
 
-  <!-- Type used to index the lat and lon components for the "location" FieldType -->
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
 
   <!-- some trie-coded dynamic fields for faster range queries -->
@@ -747,29 +744,6 @@
        any data added to them will be ignored outright.  -->
   <fieldtype name="ignored" stored="false" indexed="false" docValues="false" multiValued="true" class="solr.StrField"/>
 
-  <!-- This point type indexes the coordinates as separate fields (subFields)
-    If subFieldType is defined, it references a type, and a dynamic field
-    definition is created matching *___<typename>.  Alternately, if 
-    subFieldSuffix is defined, that is used to create the subFields.
-    Example: if subFieldType="double", then the coordinates would be
-      indexed in fields myloc_0___double,myloc_1___double.
-    Example: if subFieldSuffix="_d" then the coordinates would be indexed
-      in fields myloc_0_d,myloc_1_d
-    The subFields are an implementation detail of the fieldType, and end
-    users normally should not need to know about them.
-   -->
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
-  <!-- An alternative geospatial field type new to Solr 4.  It supports multiValued and polygon shapes.
-    For more information about this and other Spatial fields new to Solr 4, see:
-    http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
-  -->
-  <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
-             geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers"/>
-
   <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
        Parameters:
          defaultCurrency: Specifies the default currency if none specified. Defaults to "USD"
diff --git a/solr/core/src/test-files/solr/collection1/conf/schemasurround.xml b/solr/core/src/test-files/solr/collection1/conf/schemasurround.xml
index 93b11ed..3a91986 100644
--- a/solr/core/src/test-files/solr/collection1/conf/schemasurround.xml
+++ b/solr/core/src/test-files/solr/collection1/conf/schemasurround.xml
@@ -450,15 +450,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
   <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
   <field name="signatureField" type="string" indexed="true" stored="false"/>
   <field name="uuid" type="uuid" stored="true"/>
@@ -557,8 +548,6 @@
 
   <field name="_version_" type="long" indexed="true" stored="true" multiValued="false"/>
 
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
   <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
   <dynamicField name="t_*" type="text" indexed="true" stored="true"/>
diff --git a/solr/core/src/test-files/solr/configsets/cloud-dynamic/conf/schema.xml b/solr/core/src/test-files/solr/configsets/cloud-dynamic/conf/schema.xml
index 1d18671..d8ee7fd 100644
--- a/solr/core/src/test-files/solr/configsets/cloud-dynamic/conf/schema.xml
+++ b/solr/core/src/test-files/solr/configsets/cloud-dynamic/conf/schema.xml
@@ -161,15 +161,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
   <fieldType class="org.apache.solr.schema.SortableBinaryField" name="sortable_binary"/>
 
   <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
@@ -244,8 +235,6 @@
 
   <field name="multi_int_with_docvals" type="tint" multiValued="true" docValues="true" indexed="false"/>
 
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
   <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
   <dynamicField name="t_*" type="text" indexed="true" stored="true"/>
diff --git a/solr/core/src/test-files/solr/configsets/doc-expiry/conf/schema.xml b/solr/core/src/test-files/solr/configsets/doc-expiry/conf/schema.xml
index ab720bd..337475e 100644
--- a/solr/core/src/test-files/solr/configsets/doc-expiry/conf/schema.xml
+++ b/solr/core/src/test-files/solr/configsets/doc-expiry/conf/schema.xml
@@ -161,16 +161,6 @@
 
   <fieldType name="random" class="solr.RandomSortField" indexed="true"/>
 
-  <!-- Poly field -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="*_d"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-  <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-  <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
-
   <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/>
   <field name="signatureField" type="string" indexed="true" stored="false"/>
   <field name="uuid" type="uuid" stored="true"/>
@@ -238,8 +228,6 @@
 
   <field name="multi_int_with_docvals" type="tint" multiValued="true" docValues="true" indexed="false"/>
 
-  <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/>
-
   <dynamicField name="*_sI" type="string" indexed="true" stored="false"/>
   <dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
   <dynamicField name="t_*" type="text" indexed="true" stored="true"/>
diff --git a/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java b/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
index 191136b..d843992 100644
--- a/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
+++ b/solr/core/src/test/org/apache/solr/response/TestGeoJSONResponseWriter.java
@@ -49,8 +49,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
 //    <field name="srpt_geohash" type="srpt_geohash" multiValued="true" />
 //    <field name="" type="srpt_quad" multiValued="true" />
 //    <field name="" type="srpt_packedquad" multiValued="true" />
-//    <field name="" type="stqpt_geohash" multiValued="true" />
-    
+
     // multiple valued field
     assertU(adoc("id","H.A", "srpt_geohash","POINT( 1 2 )"));
     assertU(adoc("id","H.B", "srpt_geohash","POINT( 1 2 )", 
@@ -138,7 +137,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
         "wt","geojson", 
         "rows","2", 
         "fl","*", 
-        "geojson.field", "stqpt_geohash",
+        "geojson.field", "srptgeom",
         "indent","true"));
     
     // Check that we have a normal solr response with 'responseHeader' and 'response'
@@ -152,7 +151,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
         "rows","2", 
         "fl","*", 
         "omitHeader", "true",
-        "geojson.field", "stqpt_geohash",
+        "geojson.field", "srptgeom",
         "indent","true"));
     
     // Check that we have a normal solr response with 'responseHeader' and 'response'
@@ -171,7 +170,7 @@ public class TestGeoJSONResponseWriter extends SolrTestCaseJ4 {
         "q","*:*", 
         "wt","geojson", 
         "fl","*", 
-        "geojson.field", "stqpt_geohash",
+        "geojson.field", "srpt_geohash",
         "indent","true")));
     
     // Multivalued Valued Point
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
index 7722664..6a7bcc6 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java
@@ -53,7 +53,7 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
   @ParametersFactory
   public static Iterable<Object[]> parameters() {
     return Arrays.asList(new Object[][]{
-        {"llp"}, {"llp_idx"}, {"llp_dv"}, {"srpt_geohash"}, {"srpt_quad"}, {"srpt_packedquad"}, {"stqpt_geohash"}, {"pointvector"}, {"bbox"}, {"pbbox"}, {"bbox_ndv"}
+        {"llp"}, {"llp_idx"}, {"llp_dv"}, {"srpt_geohash"}, {"srpt_quad"}, {"srpt_packedquad"}, {"bbox"}, {"pbbox"}, {"bbox_ndv"}
     });
   }
 
@@ -392,8 +392,7 @@ public class TestSolr4Spatial extends SolrTestCaseJ4 {
   @Test
   public void testSortMultiVal() throws Exception {
     assumeTrue("dist sorting not supported on field " + fieldName, canCalcDistance);
-    assumeFalse("Multivalue not supported for this field",
-        fieldName.equals("pointvector") || isBBoxField(fieldName));
+    assumeFalse("Multivalue not supported for this field", isBBoxField(fieldName));
 
     assertU(adoc("id", "100", fieldName, "1,2"));//1 point
     assertU(adoc("id", "101", fieldName, "4,-1", fieldName, "3,5"));//2 points, 2nd is pretty close to query point
diff --git a/solr/example/example-DIH/solr/db/conf/managed-schema b/solr/example/example-DIH/solr/db/conf/managed-schema
index 7da41de..a704d88 100644
--- a/solr/example/example-DIH/solr/db/conf/managed-schema
+++ b/solr/example/example-DIH/solr/db/conf/managed-schema
@@ -135,8 +135,6 @@
    <field name="popularity" type="pint" indexed="true" stored="true" />
    <field name="inStock" type="boolean" indexed="true" stored="true" />
 
-   <field name="store" type="location" indexed="true" stored="true"/>
-
    <!-- Common metadata fields, named specifically to match up with
      SolrCell metadata when parsing rich documents such as Word, PDF.
      Some fields are multiValued only because Tika currently may return
@@ -217,12 +215,8 @@
    <dynamicField name="*_d"  type="pdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_ds" type="pdouble" indexed="true"  stored="true"  multiValued="true"/>
 
-   <!-- Type used to index the lat and lon components for the "location" FieldType -->
-   <dynamicField name="*_coordinate"  type="pdouble" indexed="true"  stored="false" />
-
    <dynamicField name="*_dt"  type="pdate"    indexed="true"  stored="true"/>
    <dynamicField name="*_dts" type="pdate"    indexed="true"  stored="true" multiValued="true"/>
-   <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
 
    <dynamicField name="*_c"   type="currency" indexed="true"  stored="true"/>
 
@@ -653,29 +647,6 @@
          any data added to them will be ignored outright.  --> 
     <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
 
-    <!-- This point type indexes the coordinates as separate fields (subFields)
-      If subFieldType is defined, it references a type, and a dynamic field
-      definition is created matching *___<typename>.  Alternately, if 
-      subFieldSuffix is defined, that is used to create the subFields.
-      Example: if subFieldType="double", then the coordinates would be
-        indexed in fields myloc_0___double,myloc_1___double.
-      Example: if subFieldSuffix="_d" then the coordinates would be indexed
-        in fields myloc_0_d,myloc_1_d
-      The subFields are an implementation detail of the fieldType, and end
-      users normally should not need to know about them.
-     -->
-    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-
-    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
-    <!-- An alternative geospatial field type new to Solr 4.  It supports multiValued and polygon shapes.
-      For more information about this and other Spatial fields new to Solr 4, see:
-      http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
-    -->
-    <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
-        geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
-
    <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
         Parameters:
           amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field. 
diff --git a/solr/example/example-DIH/solr/mail/conf/managed-schema b/solr/example/example-DIH/solr/mail/conf/managed-schema
index 1a371d4..a590291 100644
--- a/solr/example/example-DIH/solr/mail/conf/managed-schema
+++ b/solr/example/example-DIH/solr/mail/conf/managed-schema
@@ -153,12 +153,8 @@
    <dynamicField name="*_d"  type="pdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_ds" type="pdouble" indexed="true"  stored="true"  multiValued="true"/>
 
-   <!-- Type used to index the lat and lon components for the "location" FieldType -->
-   <dynamicField name="*_coordinate"  type="pdouble" indexed="true"  stored="false" />
-
    <dynamicField name="*_dt"  type="pdate"    indexed="true"  stored="true"/>
    <dynamicField name="*_dts" type="pdate"    indexed="true"  stored="true" multiValued="true"/>
-   <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
 
    <dynamicField name="*_c"   type="currency" indexed="true"  stored="true"/>
 
@@ -572,29 +568,6 @@
          any data added to them will be ignored outright.  --> 
     <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
 
-    <!-- This point type indexes the coordinates as separate fields (subFields)
-      If subFieldType is defined, it references a type, and a dynamic field
-      definition is created matching *___<typename>.  Alternately, if 
-      subFieldSuffix is defined, that is used to create the subFields.
-      Example: if subFieldType="double", then the coordinates would be
-        indexed in fields myloc_0___double,myloc_1___double.
-      Example: if subFieldSuffix="_d" then the coordinates would be indexed
-        in fields myloc_0_d,myloc_1_d
-      The subFields are an implementation detail of the fieldType, and end
-      users normally should not need to know about them.
-     -->
-    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-
-    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
-    <!-- An alternative geospatial field type new to Solr 4.  It supports multiValued and polygon shapes.
-      For more information about this and other Spatial fields new to Solr 4, see:
-      http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
-    -->
-    <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
-        geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
-
    <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
         Parameters:
           amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field. 
diff --git a/solr/example/example-DIH/solr/solr/conf/managed-schema b/solr/example/example-DIH/solr/solr/conf/managed-schema
index 5c360b9..3a3b01d 100644
--- a/solr/example/example-DIH/solr/solr/conf/managed-schema
+++ b/solr/example/example-DIH/solr/solr/conf/managed-schema
@@ -135,8 +135,6 @@
    <field name="popularity" type="pint" indexed="true" stored="true" />
    <field name="inStock" type="boolean" indexed="true" stored="true" />
 
-   <field name="store" type="location" indexed="true" stored="true"/>
-
    <!-- Common metadata fields, named specifically to match up with
      SolrCell metadata when parsing rich documents such as Word, PDF.
      Some fields are multiValued only because Tika currently may return
@@ -217,12 +215,8 @@
    <dynamicField name="*_d"  type="pdouble" indexed="true"  stored="true"/>
    <dynamicField name="*_ds" type="pdouble" indexed="true"  stored="true"  multiValued="true"/>
 
-   <!-- Type used to index the lat and lon components for the "location" FieldType -->
-   <dynamicField name="*_coordinate"  type="pdouble" indexed="true"  stored="false" />
-
    <dynamicField name="*_dt"  type="pdate"    indexed="true"  stored="true"/>
    <dynamicField name="*_dts" type="pdate"    indexed="true"  stored="true" multiValued="true"/>
-   <dynamicField name="*_p"  type="location" indexed="true" stored="true"/>
 
    <dynamicField name="*_c"   type="currency" indexed="true"  stored="true"/>
 
@@ -653,29 +647,6 @@
          any data added to them will be ignored outright.  --> 
     <fieldType name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" />
 
-    <!-- This point type indexes the coordinates as separate fields (subFields)
-      If subFieldType is defined, it references a type, and a dynamic field
-      definition is created matching *___<typename>.  Alternately, if 
-      subFieldSuffix is defined, that is used to create the subFields.
-      Example: if subFieldType="double", then the coordinates would be
-        indexed in fields myloc_0___double,myloc_1___double.
-      Example: if subFieldSuffix="_d" then the coordinates would be indexed
-        in fields myloc_0_d,myloc_1_d
-      The subFields are an implementation detail of the fieldType, and end
-      users normally should not need to know about them.
-     -->
-    <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/>
-
-    <!-- A specialized field for geospatial search. If indexed, this fieldType must not be multivalued. -->
-    <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-
-    <!-- An alternative geospatial field type new to Solr 4.  It supports multiValued and polygon shapes.
-      For more information about this and other Spatial fields new to Solr 4, see:
-      http://wiki.apache.org/solr/SolrAdaptersForLuceneSpatial4
-    -->
-    <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
-        geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers" />
-
    <!-- Money/currency field type. See http://wiki.apache.org/solr/MoneyFieldType
         Parameters:
           amountLongSuffix: Required. Refers to a dynamic field for the raw amount sub-field. 
diff --git a/solr/example/files/conf/managed-schema b/solr/example/files/conf/managed-schema
index c022331..8d9e4aa 100644
--- a/solr/example/files/conf/managed-schema
+++ b/solr/example/files/conf/managed-schema
@@ -23,8 +23,6 @@
     </analyzer>
   </fieldType>
   <fieldType name="ignored" class="solr.StrField" indexed="false" stored="false" multiValued="true"/>
-  <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
-  <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType" geo="true" maxDistErr="0.001" distErrPct="0.025" distanceUnits="kilometers"/>
   <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
     <analyzer>
       <tokenizer class="solr.KeywordTokenizerFactory"/>
@@ -450,7 +448,6 @@
   <dynamicField name="*_descendent_path" type="descendent_path" indexed="true" stored="true"/>
   <dynamicField name="*_ancestor_path" type="ancestor_path" indexed="true" stored="true"/>
   <dynamicField name="*_txt_en_split" type="text_en_splitting" indexed="true" stored="true"/>
-  <dynamicField name="*_coordinate" type="pdouble" indexed="true" stored="false"/>
   <dynamicField name="ignored_*" type="ignored" multiValued="true"/>
   <dynamicField name="*_txt_rev" type="text_general_rev" indexed="true" stored="true"/>
   <dynamicField name="*_phon_en" type="phonetic_en" indexed="true" stored="true"/>
@@ -489,7 +486,6 @@
   <dynamicField name="*_txt_th" type="text_th" indexed="true" stored="true"/>
   <dynamicField name="*_txt_tr" type="text_tr" indexed="true" stored="true"/>
   <dynamicField name="*_point" type="point" indexed="true" stored="true"/>
-  <dynamicField name="*_srpt" type="location_rpt" indexed="true" stored="true"/>
   <dynamicField name="attr_*" type="text_general" multiValued="true" indexed="true" stored="true"/>
   <dynamicField name="*_l_ns" type="plong" indexed="true" stored="false"/>
   <dynamicField name="*_s_ns" type="string" indexed="true" stored="false"/>
@@ -510,7 +506,6 @@
   <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/>
   <dynamicField name="*_f" type="pfloat" indexed="true" stored="true"/>
   <dynamicField name="*_d" type="pdouble" indexed="true" stored="true"/>
-  <dynamicField name="*_p" type="location" indexed="true" stored="true"/>
   <dynamicField name="*_c" type="currency" indexed="true" stored="true"/>
 
   <copyField source="content" dest="text_shingles"/>
diff --git a/solr/solr-ref-guide/src/field-types-included-with-solr.adoc b/solr/solr-ref-guide/src/field-types-included-with-solr.adoc
index 1e98d86..0d3b8ee 100644
--- a/solr/solr-ref-guide/src/field-types-included-with-solr.adoc
+++ b/solr/solr-ref-guide/src/field-types-included-with-solr.adoc
@@ -53,8 +53,6 @@ The following table lists the field types that are available in Solr. The `org.a
 
 |LatLonPointSpatialField |A latitude/longitude coordinate pair; possibly multi-valued for multiple points. Usually it's specified as "lat,lon" order with a comma. See the section <<spatial-search.adoc#spatial-search,Spatial Search>> for more information.
 
-|LatLonType |*Deprecated*. Consider using the LatLonPointSpatialField instead. A single-valued latitude/longitude coordinate pair. Usually it's specified as "lat,lon" order with a comma. See the section <<spatial-search.adoc#spatial-search,Spatial Search>> for more information.
-
 |LongPointField |Long field (64-bit signed integer). This class encodes foo values using a "Dimensional Points" based data structure that allows for very efficient searches for specific values, or ranges of values. For single valued fields, `docValues="true"` must be used to enable sorting.
 
 |PointType |A single-valued n-dimensional point. It's both for sorting spatial data that is _not_ lat-lon, and for some more rare use-cases. (NOTE: this is _not_ related to the "Point" based numeric fields). See <<spatial-search.adoc#spatial-search,Spatial Search>> for more information.
diff --git a/solr/solr-ref-guide/src/spatial-search.adoc b/solr/solr-ref-guide/src/spatial-search.adoc
index 47d19c4..3ee852c 100644
--- a/solr/solr-ref-guide/src/spatial-search.adoc
+++ b/solr/solr-ref-guide/src/spatial-search.adoc
@@ -28,11 +28,12 @@ Using spatial search, you can:
 There are four main field types available for spatial search:
 
 * `LatLonPointSpatialField`
-* `LatLonType` (now deprecated) and its non-geodetic twin `PointType`
+* `PointType`
 * `SpatialRecursivePrefixTreeFieldType` (RPT for short), including `RptWithGeometrySpatialField`, a derivative
 * `BBoxField`
 
-`LatLonPointSpatialField` is the ideal field type for the most common use-cases for lat-lon point data. It replaces LatLonType which still exists for backwards compatibility. RPT offers some more features for more advanced/custom use cases and options like polygons and heatmaps.
+`LatLonPointSpatialField` is the ideal field type for the most common use-cases for lat-lon point data.
+RPT offers some more features for more advanced/custom use cases and options like polygons and heatmaps.
 
 `RptWithGeometrySpatialField` is for indexing and searching non-point data though it can do points too. It can't do sorting/boosting.
 
@@ -55,7 +56,7 @@ For indexing geodetic points (latitude and longitude), supply it in "lat,lon" or
 
 For indexing non-geodetic points, it depends. Use `x y` (a space) if RPT. For PointType however, use `x,y` (a comma).
 
-If you'd rather use a standard industry format, Solr supports https://en.wikipedia.org/wiki/Well-known_text[WKT] and http://geojson.org/[GeoJSON]. However it's much bulkier than the raw coordinates for such simple data. (Not supported by the deprecated LatLonType or PointType)
+If you'd rather use a standard industry format, Solr supports https://en.wikipedia.org/wiki/Well-known_text[WKT] and http://geojson.org/[GeoJSON]. However it's much bulkier than the raw coordinates for such simple data. (Not supported by PointType)
 
 === Indexing GeoJSON and WKT
 
@@ -83,7 +84,7 @@ The center point using the format "lat,lon" if latitude & longitude. Otherwise,
 A spatial indexed field.
 
 `score`::
-(Advanced option; not supported by LatLonType (deprecated) or PointType) If the query is used in a scoring context (e.g., as the main query in `q`), this _<<local-parameters-in-queries.adoc#local-parameters-in-queries,local parameter>>_ determines what scores will be produced. Valid values are:
+(Advanced option; not supported by PointType) If the query is used in a scoring context (e.g., as the main query in `q`), this _<<local-parameters-in-queries.adoc#local-parameters-in-queries,local parameter>>_ determines what scores will be produced. Valid values are:
 
 * `none`: A fixed score of 1.0. (the default)
 * `kilometers`: distance in kilometers between the field value and the specified center point
@@ -104,7 +105,8 @@ When used with `BBoxField`, additional options are supported:
 * `area2D`: cartesian coordinates based area of the overlapping shapes expressed in terms of the `distanceUnits` configured for this field
 
 `filter`::
-(Advanced option; not supported by LatLonType (deprecated) or PointType). If you only want the query to score (with the above `score` local parameter), not filter, then set this local parameter to false.
+(Advanced option; not supported by PointType).
+If you only want the query to score (with the above `score` local parameter), not filter, then set this local parameter to false.
 
 
 === geofilt
@@ -146,14 +148,15 @@ Here's an example:
 [source,text]
 &q=*:*&fq=store:[45,-94 TO 46,-93]
 
-LatLonType (deprecated) does *not* support rectangles that cross the dateline. For RPT and BBoxField, if you are non-geospatial coordinates (`geo="false"`) then you must quote the points due to the space, e.g., `"x y"`.
+For RPT and BBoxField, if you don't use lat-lon coordinates (`geo="false"`) then you must quote the points due to the space, e.g., `"x y"`.
 
 
 === Optimizing: Cache or Not
 
 It's most common to put a spatial query into an "fq" parameter – a filter query. By default, Solr will cache the query in the filter cache.
 
-If you know the filter query (be it spatial or not) is fairly unique and not likely to get a cache hit then specify `cache="false"` as a local-param as seen in the following example. The only spatial types which stand to benefit from this technique are LatLonPointSpatialField and LatLonType (deprecated). Enable docValues on the field (if it isn't already). LatLonType (deprecated) additionally requires a `cost="100"` (or more) local-param.
+If you know the filter query (be it spatial or not) is fairly unique and not likely to get a cache hit then specify `cache="false"` as a local-param as seen in the following example.
+The only spatial types which stand to benefit from this technique are those with docValues like LatLonPointSpatialField or BBoxField.
 
 [source,text]
 &q=...mykeywords...&fq=...someotherfilters...&fq={!geofilt cache=false}&sfield=store&pt=45.15,-93.85&d=5
diff --git a/solr/solr-ref-guide/src/updating-parts-of-documents.adoc b/solr/solr-ref-guide/src/updating-parts-of-documents.adoc
index 2d15410..22a37db 100644
--- a/solr/solr-ref-guide/src/updating-parts-of-documents.adoc
+++ b/solr/solr-ref-guide/src/updating-parts-of-documents.adoc
@@ -58,7 +58,7 @@ The core functionality of atomically updating a document requires that all field
 
 If `<copyField/>` destinations are configured as stored, then Solr will attempt to index both the current value of the field as well as an additional copy from any source fields. If such fields contain some information that comes from the indexing program and some information that comes from copyField, then the information which originally came from the indexing program will be lost when an atomic update is made.
 
-There are other kinds of derived fields that must also be set so they aren't stored. Some spatial field types, such as BBoxField and LatLonType, use derived fields. CurrencyFieldType also uses derived fields. These types create additional fields which are normally specified by a dynamic field definition. That dynamic field definition must be not stored, or indexing will fail.
+There are other kinds of derived fields that must also be set so they aren't stored. Some spatial field types, such as BBoxField and LatLonSpatialFieldType, use derived fields. CurrencyFieldType also uses derived fields. These types create additional fields which are normally specified by a dynamic field definition. That dynamic field definition must be not stored, or indexing will fail.
 
 === Example Updating Part of a Document
 
diff --git a/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema-sql.xml b/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema-sql.xml
index 974893c..20c03e7 100644
--- a/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema-sql.xml
+++ b/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema-sql.xml
@@ -378,17 +378,6 @@
 
   <fieldType name="uuid" class="solr.UUIDField"/>
 
-  <!-- Try out some point types -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-  <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-  <!-- Use the sub field suffix -->
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldtype name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
   <!--  some per-field similarity examples -->
 
   <!--  specify a Similarity classname directly -->
diff --git a/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml b/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml
index 079a35f..45e8415 100644
--- a/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml
+++ b/solr/solrj/src/test-files/solrj/solr/collection1/conf/schema.xml
@@ -353,17 +353,6 @@
 
   <fieldType name="uuid" class="solr.UUIDField"/>
 
-  <!-- Try out some point types -->
-  <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-  <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-  <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-  <!-- Use the sub field suffix -->
-  <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-  <fieldType name="geohash" class="solr.GeoHashField"/>
-
-
-  <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
   <!--  some per-field similarity examples -->
 
   <!--  specify a Similarity classname directly -->
diff --git a/solr/solrj/src/test-files/solrj/solr/configsets/streaming/conf/schema.xml b/solr/solrj/src/test-files/solrj/solr/configsets/streaming/conf/schema.xml
index 6cd4f91..bd55d8f 100644
--- a/solr/solrj/src/test-files/solrj/solr/configsets/streaming/conf/schema.xml
+++ b/solr/solrj/src/test-files/solrj/solr/configsets/streaming/conf/schema.xml
@@ -355,17 +355,6 @@
 
     <fieldType name="uuid" class="solr.UUIDField" />
 
-    <!-- Try out some point types -->
-    <fieldType name="xy" class="solr.PointType" dimension="2" subFieldType="double"/>
-    <fieldType name="x" class="solr.PointType" dimension="1" subFieldType="double"/>
-    <fieldType name="tenD" class="solr.PointType" dimension="10" subFieldType="double"/>
-    <!-- Use the sub field suffix -->
-    <fieldType name="xyd" class="solr.PointType" dimension="2" subFieldSuffix="_d1"/>
-    <fieldtype name="geohash" class="solr.GeoHashField"/>
-
-
-    <fieldType name="latLon" class="solr.LatLonType" subFieldType="double"/>
-
     <!--  some per-field similarity examples -->
 
     <!--  specify a Similarity classname directly -->