Index: lucene/spatial/src/test-files/data/simple-bbox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/data/simple-bbox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/data/simple-bbox.txt (revision ) @@ -1,5 +1,5 @@ #id name shape -C5 CenterAt5 -5 -5 5 5 -C10 CenterAt10 -10 -10 10 10 -NW15 NorthWest 15 15 20 20 +C5 CenterAt5 ENVELOPE(-5, 5, 5, -5) +C10 CenterAt10 ENVELOPE(-10, 10, 10, -10) +NW15 NorthWest ENVELOPE(15, 20, 20, 15) Index: lucene/spatial/src/test/org/apache/lucene/spatial/PortedSolr3Test.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/PortedSolr3Test.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/PortedSolr3Test.java (revision ) @@ -36,7 +36,6 @@ import org.apache.lucene.spatial.vector.PointVectorStrategy; import org.junit.Test; -import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; @@ -91,21 +90,21 @@ this.strategy = strategy; } - private void setupDocs() throws IOException { + private void setupDocs() throws Exception { super.deleteAll(); - adoc("1", "32.7693246, -79.9289094"); - adoc("2", "33.7693246, -80.9289094"); - adoc("3", "-32.7693246, 50.9289094"); - adoc("4", "-50.7693246, 60.9289094"); - adoc("5", "0,0"); - adoc("6", "0.1,0.1"); - adoc("7", "-0.1,-0.1"); - adoc("8", "0,179.9"); - adoc("9", "0,-179.9"); - adoc("10", "89.9,50"); - adoc("11", "89.9,-130"); - adoc("12", "-89.9,50"); - adoc("13", "-89.9,-130"); + adoc("1", ctx.makePoint(-79.9289094, 32.7693246)); + adoc("2", ctx.makePoint(-80.9289094, 33.7693246)); + adoc("3", ctx.makePoint(50.9289094, -32.7693246)); + adoc("4", ctx.makePoint(60.9289094, -50.7693246)); + adoc("5", ctx.makePoint(0, 0)); + adoc("6", ctx.makePoint(0.1, 0.1)); + adoc("7", ctx.makePoint(-0.1, -0.1)); + adoc("8", ctx.makePoint(179.9, 0)); + adoc("9", ctx.makePoint(-179.9, 0)); + adoc("10", ctx.makePoint(50, 89.9)); + adoc("11", ctx.makePoint(-130, 89.9)); + adoc("12", ctx.makePoint(50, -89.9)); + adoc("13", ctx.makePoint(-130, -89.9)); commit(); } @@ -115,53 +114,52 @@ setupDocs(); //Try some edge cases //NOTE: 2nd arg is distance in kilometers - checkHitsCircle("1,1", 175, 3, 5, 6, 7); - checkHitsCircle("0,179.8", 200, 2, 8, 9); - checkHitsCircle("89.8, 50", 200, 2, 10, 11);//this goes over the north pole - checkHitsCircle("-89.8, 50", 200, 2, 12, 13);//this goes over the south pole + checkHitsCircle(ctx.makePoint(1, 1), 175, 3, 5, 6, 7); + checkHitsCircle(ctx.makePoint(179.8, 0), 200, 2, 8, 9); + checkHitsCircle(ctx.makePoint(50, 89.8), 200, 2, 10, 11);//this goes over the north pole + checkHitsCircle(ctx.makePoint(50, -89.8), 200, 2, 12, 13);//this goes over the south pole //try some normal cases - checkHitsCircle("33.0,-80.0", 300, 2); + checkHitsCircle(ctx.makePoint(-80.0, 33.0), 300, 2); //large distance - checkHitsCircle("1,1", 5000, 3, 5, 6, 7); + checkHitsCircle(ctx.makePoint(1, 1), 5000, 3, 5, 6, 7); //Because we are generating a box based on the west/east longitudes and the south/north latitudes, which then //translates to a range query, which is slightly more inclusive. Thus, even though 0.0 is 15.725 kms away, //it will be included, b/c of the box calculation. - checkHitsBBox("0.1,0.1", 15, 2, 5, 6); + checkHitsBBox(ctx.makePoint(0.1, 0.1), 15, 2, 5, 6); //try some more deleteAll(); - adoc("14", "0,5"); - adoc("15", "0,15"); + adoc("14", ctx.makePoint(5, 0)); + adoc("15", ctx.makePoint(15, 0)); //3000KM from 0,0, see http://www.movable-type.co.uk/scripts/latlong.html - adoc("16", "18.71111,19.79750"); - adoc("17", "44.043900,-95.436643"); + adoc("16", ctx.makePoint(19.79750, 18.71111)); + adoc("17", ctx.makePoint(-95.436643, 44.043900)); commit(); - checkHitsCircle("0,0", 1000, 1, 14); - checkHitsCircle("0,0", 2000, 2, 14, 15); - checkHitsBBox("0,0", 3000, 3, 14, 15, 16); - checkHitsCircle("0,0", 3001, 3, 14, 15, 16); - checkHitsCircle("0,0", 3000.1, 3, 14, 15, 16); + checkHitsCircle(ctx.makePoint(0, 0), 1000, 1, 14); + checkHitsCircle(ctx.makePoint(0, 0), 2000, 2, 14, 15); + checkHitsBBox(ctx.makePoint(0, 0), 3000, 3, 14, 15, 16); + checkHitsCircle(ctx.makePoint(0, 0), 3001, 3, 14, 15, 16); + checkHitsCircle(ctx.makePoint(0, 0), 3000.1, 3, 14, 15, 16); //really fine grained distance and reflects some of the vagaries of how we are calculating the box - checkHitsCircle("43.517030,-96.789603", 109, 0); + checkHitsCircle(ctx.makePoint(-96.789603, 43.517030), 109, 0); // falls outside of the real distance, but inside the bounding box - checkHitsCircle("43.517030,-96.789603", 110, 0); - checkHitsBBox("43.517030,-96.789603", 110, 1, 17); + checkHitsCircle(ctx.makePoint(-96.789603, 43.517030), 110, 0); + checkHitsBBox(ctx.makePoint(-96.789603, 43.517030), 110, 1, 17); } //---- these are similar to Solr test methods - private void checkHitsCircle(String ptStr, double distKM, int assertNumFound, int... assertIds) { - _checkHits(false, ptStr, distKM, assertNumFound, assertIds); + private void checkHitsCircle(Point pt, double distKM, int assertNumFound, int... assertIds) { + _checkHits(false, pt, distKM, assertNumFound, assertIds); } - private void checkHitsBBox(String ptStr, double distKM, int assertNumFound, int... assertIds) { - _checkHits(true, ptStr, distKM, assertNumFound, assertIds); + private void checkHitsBBox(Point pt, double distKM, int assertNumFound, int... assertIds) { + _checkHits(true, pt, distKM, assertNumFound, assertIds); } - private void _checkHits(boolean bbox, String ptStr, double distKM, int assertNumFound, int... assertIds) { + private void _checkHits(boolean bbox, Point pt, double distKM, int assertNumFound, int... assertIds) { SpatialOperation op = SpatialOperation.Intersects; - Point pt = (Point) ctx.readShape(ptStr); double distDEG = DistanceUtils.dist2Degrees(distKM, DistanceUtils.EARTH_MEAN_RADIUS_KM); Shape shape = ctx.makeCircle(pt, distDEG); if (bbox) Index: lucene/spatial/src/test-files/states-Intersects-BBox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/states-Intersects-BBox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/states-Intersects-BBox.txt (revision ) @@ -1,3 +1,3 @@ -WY CO @ Intersects(-106.964844 39.460938 -105.734375 42.800781) -TX @ Intersects(-99.669922 30.583984 -98.439453 32.253906) -MS TX LA @ Intersects(-95.363281 29.792969 -90.133789 32.473633) +WY CO @ Intersects(ENVELOPE(-106.964844, -105.734375, 42.800781, 39.460938)) +TX @ Intersects(ENVELOPE(-99.669922, -98.439453, 32.253906, 30.583984)) +MS TX LA @ Intersects(ENVELOPE(-95.363281, -90.133789, 32.473633, 29.792969)) \ No newline at end of file Index: lucene/spatial/src/test/org/apache/lucene/spatial/query/SpatialArgsParserTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/query/SpatialArgsParserTest.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/query/SpatialArgsParserTest.java (revision ) @@ -34,7 +34,7 @@ public void testArgsParser() throws Exception { SpatialArgsParser parser = new SpatialArgsParser(); - String arg = SpatialOperation.IsWithin + "(-10 -20 10 20)"; + String arg = SpatialOperation.IsWithin + "(Envelope(-10, 10, 20, -20))"; SpatialArgs out = parser.parse(arg, ctx); assertEquals(SpatialOperation.IsWithin, out.getOperation()); Rectangle bounds = (Rectangle) out.getShape(); @@ -42,7 +42,7 @@ assertEquals(10.0, bounds.getMaxX(), 0D); // Disjoint should not be scored - arg = SpatialOperation.IsDisjointTo + " (-10 10 -20 20)"; + arg = SpatialOperation.IsDisjointTo + " (Envelope(-10,-20,20,10))"; out = parser.parse(arg, ctx); assertEquals(SpatialOperation.IsDisjointTo, out.getOperation()); @@ -54,7 +54,7 @@ } try { - parser.parse("XXXX(-10 10 -20 20)", ctx); + parser.parse("XXXX(Envelope(-10, 10, 20, -20))", ctx); fail("unknown operation!"); } catch (Exception ex) {//expected Index: lucene/spatial/src/test/org/apache/lucene/spatial/prefix/JtsPolygonTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/prefix/JtsPolygonTest.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/prefix/JtsPolygonTest.java (revision ) @@ -35,7 +35,7 @@ import org.apache.lucene.spatial.query.SpatialOperation; import org.junit.Test; -import java.io.IOException; +import java.text.ParseException; import java.util.HashMap; public class JtsPolygonTest extends StrategyTestCase { @@ -59,7 +59,7 @@ @Test /** LUCENE-4464 */ - public void testCloseButNoMatch() throws IOException { + public void testCloseButNoMatch() throws Exception { getAddAndVerifyIndexedDocuments("LUCENE-4464.txt"); SpatialArgs args = q( "POLYGON((-93.18100824442227 45.25676372469945," + @@ -73,8 +73,8 @@ //did not find poly 1 ! } - private SpatialArgs q(String shapeStr, double distErrPct) { - Shape shape = ctx.readShape(shapeStr); + private SpatialArgs q(String shapeStr, double distErrPct) throws ParseException { + Shape shape = ctx.readShapeFromWkt(shapeStr); SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, shape); args.setDistErrPct(distErrPct); return args; @@ -87,7 +87,7 @@ @Test public void testBadPrefixTreePrune() throws Exception { - Shape area = ctx.readShape("POLYGON((-122.83 48.57, -122.77 48.56, -122.79 48.53, -122.83 48.57))"); + Shape area = ctx.readShapeFromWkt("POLYGON((-122.83 48.57, -122.77 48.56, -122.79 48.53, -122.83 48.57))"); SpatialPrefixTree trie = new QuadPrefixTree(ctx, 12); TermQueryPrefixTreeStrategy strategy = new TermQueryPrefixTreeStrategy(trie, "geo"); Index: lucene/spatial/src/test-files/states-IsWithin-BBox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/states-IsWithin-BBox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/states-IsWithin-BBox.txt (revision ) @@ -1,4 +1,4 @@ -KS @ IsWithin(-103.493164 36.208984 -93.825195 41.086914) -WA @ IsWithin(-126.916016 44.36084 -115.314453 50.688965) -MA CT RI @ IsWithin(-73.894043 40.825195 -69.521484 43.198242) -AL GA @ IsWithin(-89.472656 29.311523 -80.244141 35.90332) \ No newline at end of file +KS @ IsWithin(ENVELOPE(-103.493164, -93.825195, 41.086914, 36.208984)) +WA @ IsWithin(ENVELOPE(-126.916016, -115.314453, 50.688965, 44.36084)) +MA CT RI @ IsWithin(ENVELOPE(-73.894043, -69.521484, 43.198242, 40.825195)) +AL GA @ IsWithin(ENVELOPE(-89.472656, -80.244141, 35.90332, 29.311523)) \ No newline at end of file Index: solr/core/src/java/org/apache/solr/schema/GeoHashField.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/schema/GeoHashField.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/schema/GeoHashField.java (revision ) @@ -22,18 +22,16 @@ import org.apache.lucene.index.StorableField; import org.apache.lucene.search.Query; import org.apache.lucene.search.SortField; -import com.spatial4j.core.io.ParseUtils; import com.spatial4j.core.context.SpatialContext; -import com.spatial4j.core.exception.InvalidShapeException; import com.spatial4j.core.io.GeohashUtils; import com.spatial4j.core.shape.Point; -import org.apache.solr.common.SolrException; 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.util.SpatialUtils; import java.io.IOException; @@ -42,14 +40,9 @@ * This is a class that represents a Geohash field. The field is * provided as a lat/lon pair and is internally represented as a string. - * - * @see com.spatial4j.core.io.ParseUtils#parseLatitudeLongitude(double[], String) */ public class GeoHashField extends FieldType implements SpatialQueryable { - - private final SpatialContext ctx = SpatialContext.GEO; - @Override public SortField getSortField(SchemaField field, boolean top) { return getStringSort(field, top); @@ -60,13 +53,7 @@ //encoding. Plus there are issues around the Equator/Prime Meridian @Override public Query createSpatialQuery(QParser parser, SpatialOptions options) { - double [] point = new double[0]; - try { - point = ParseUtils.parsePointDouble(null, options.pointStr, 2); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } - String geohash = GeohashUtils.encodeLatLon(point[0], point[1]); + 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)); @@ -78,33 +65,22 @@ writer.writeStr(name, toExternal(f), false); } - @Override public String toExternal(StorableField f) { - Point p = GeohashUtils.decode(f.stringValue(),ctx); + Point p = GeohashUtils.decode(f.stringValue(), SpatialContext.GEO); return p.getY() + "," + p.getX(); } - @Override public String toInternal(String val) { - // validate that the string is of the form - // latitude, longitude - double[] latLon = new double[0]; - try { - latLon = ParseUtils.parseLatitudeLongitude(null, val); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); + Point point = SpatialUtils.parsePointSolrException(val, SpatialContext.GEO); + return GeohashUtils.encodeLatLon(point.getY(), point.getX()); - } + } - return GeohashUtils.encodeLatLon(latLon[0], latLon[1]); - } - @Override public ValueSource getValueSource(SchemaField field, QParser parser) { field.checkFieldCacheSource(parser); return new StrFieldSource(field.name); } - } Index: lucene/ivy-versions.properties IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/ivy-versions.properties (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/ivy-versions.properties (revision ) @@ -37,7 +37,7 @@ /com.googlecode.juniversalchardet/juniversalchardet = 1.0.3 /com.googlecode.mp4parser/isoparser = 1.0-RC-1 /com.ibm.icu/icu4j = 52.1 -/com.spatial4j/spatial4j = 0.3 +/com.spatial4j/spatial4j = 0.4 com.sun.jersey.version = 1.8 /com.sun.jersey.contribs/jersey-guice = ${com.sun.jersey.version} Index: solr/core/src/java/org/apache/solr/util/SpatialUtils.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/util/SpatialUtils.java (revision ) +++ solr/core/src/java/org/apache/solr/util/SpatialUtils.java (revision ) @@ -0,0 +1,92 @@ +package org.apache.solr.util; + +/* + * 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. + */ + +import com.spatial4j.core.context.SpatialContext; +import com.spatial4j.core.exception.InvalidShapeException; +import com.spatial4j.core.shape.Point; +import org.apache.solr.common.SolrException; + +/** Utility methods pertaining to spatial. */ +public class SpatialUtils { + + private SpatialUtils() {} + + /** Parses either "lat, lon" (spaces optional on either comma side) or "x y" style formats. Spaces can be basically + * anywhere. And not any whitespace, just the space char. + * + * @param str Non-null; may have leading or trailing spaces + * @param ctx Non-null + * @return Non-null + * @throws InvalidShapeException If for any reason there was a problem parsing the string or creating the point. + */ + public static Point parsePoint(String str, SpatialContext ctx) throws InvalidShapeException { + //note we don't do generic whitespace, just a literal space char detection + //TODO: decide on if we should pick one format decided by ctx.isGeo() + // Perhaps 5x use isGeo; 4x use either? + try { + double x, y; + str = str.trim();//TODO use findIndexNotSpace instead? + int commaIdx = str.indexOf(','); + if (commaIdx == -1) { + // "x y" format + int spaceIdx = str.indexOf(' '); + if (spaceIdx == -1) + throw new InvalidShapeException("Point must be in 'lat, lon' or 'x y' format: " + str); + int middleEndIdx = findIndexNotSpace(str, spaceIdx + 1, +1); + x = Double.parseDouble(str.substring(0, spaceIdx)); + y = Double.parseDouble(str.substring(middleEndIdx)); + } else { + // "lat, lon" format + int middleStartIdx = findIndexNotSpace(str, commaIdx - 1, -1); + int middleEndIdx = findIndexNotSpace(str, commaIdx + 1, +1); + y = Double.parseDouble(str.substring(0, middleStartIdx + 1)); + x = Double.parseDouble(str.substring(middleEndIdx)); + } + + x = ctx.normX(x);//by default norm* methods do nothing but perhaps it's been customized + y = ctx.normY(y); + return ctx.makePoint(x, y);//will verify x & y fit in boundary + } catch (InvalidShapeException e) { + throw e; + } catch (Exception e) { + throw new InvalidShapeException(e.toString(), e); + } + } + + private static int findIndexNotSpace(String str, int startIdx, int inc) { + assert inc == +1 || inc == -1; + int idx = startIdx; + while (idx >= 0 && idx < str.length() && str.charAt(idx) == ' ') + idx += inc; + return idx; + } + + /** Calls {@link #parsePoint(String, com.spatial4j.core.context.SpatialContext)} and wraps + * the exception with {@link org.apache.solr.common.SolrException} with a helpful message. */ + public static Point parsePointSolrException(String externalVal, SpatialContext ctx) throws SolrException { + try { + return parsePoint(externalVal, ctx); + } catch (InvalidShapeException e) { + String message = e.getMessage(); + if (!message.contains(externalVal)) + message = "Can't parse point '" + externalVal + "' because: " + message; + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, message, e); + } + } +} Index: lucene/licenses/spatial4j-0.4.jar.sha1 IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/licenses/spatial4j-0.4.jar.sha1 (revision ) +++ lucene/licenses/spatial4j-0.4.jar.sha1 (revision ) @@ -0,0 +1,1 @@ +28b666145773098aeeadd033f3dd6c5b2871c208 \ No newline at end of file Index: lucene/spatial/src/test/org/apache/lucene/spatial/prefix/SpatialOpRecursivePrefixTreeTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/prefix/SpatialOpRecursivePrefixTreeTest.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/prefix/SpatialOpRecursivePrefixTreeTest.java (revision ) @@ -19,6 +19,7 @@ import com.carrotsearch.randomizedtesting.annotations.Repeat; import com.spatial4j.core.context.SpatialContext; +import com.spatial4j.core.context.SpatialContextFactory; import com.spatial4j.core.shape.Point; import com.spatial4j.core.shape.Rectangle; import com.spatial4j.core.shape.Shape; @@ -71,7 +72,10 @@ public void mySetup(int maxLevels) throws IOException { //non-geospatial makes this test a little easier (in gridSnap), and using boundary values 2^X raises // the prospect of edge conditions we want to test, plus makes for simpler numbers (no decimals). - this.ctx = new SpatialContext(false, null, new RectangleImpl(0, 256, -128, 128, null)); + SpatialContextFactory factory = new SpatialContextFactory(); + factory.geo = false; + factory.worldBounds = new RectangleImpl(0, 256, -128, 128, null); + this.ctx = factory.newSpatialContext(); //A fairly shallow grid, and default 2.5% distErrPct if (maxLevels == -1) maxLevels = randomIntBetween(1, 8); @@ -179,8 +183,8 @@ doc.add(f); } } - if (storeShape) - doc.add(new StoredField(strategy.getFieldName(), ctx.toString(shape))); + if (storeShape)//just for diagnostics + doc.add(new StoredField(strategy.getFieldName(), shape.toString())); } return doc; } @@ -409,6 +413,16 @@ @Override public Point getCenter() { throw new UnsupportedOperationException("TODO unimplemented");//TODO + } + + @Override + public Shape getBuffered(double distance, SpatialContext ctx) { + throw new UnsupportedOperationException("TODO unimplemented");//TODO + } + + @Override + public boolean isEmpty() { + return false; } @Override Index: solr/licenses/spatial4j-NOTICE.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/licenses/spatial4j-NOTICE.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/licenses/spatial4j-NOTICE.txt (revision ) @@ -1,5 +1,5 @@ -Apache Commons Lang -Copyright 2001-2008 The Apache Software Foundation +Spatial4j +Copyright 2012-2014 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Index: lucene/spatial/src/test-files/cities-Intersects-BBox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/cities-Intersects-BBox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/cities-Intersects-BBox.txt (revision ) @@ -1,7 +1,3 @@ -[San Francisco] G5391959 @ Intersects(-122.524918 37.674973 -122.360123 37.817108) -[Wellington] G2179537 @ Intersects(174.711456 -41.360779 174.854279 -41.213837) -[Barcelona] G6544100 G3128760 @ Intersects(2.127228 41.333313 2.226105 41.408844) - - - - +[San Francisco] G5391959 @ Intersects(ENVELOPE(-122.524918, -122.360123, 37.817108, 37.674973)) +[Wellington] G2179537 @ Intersects(ENVELOPE(174.711456, 174.854279, -41.213837, -41.360779)) +[Barcelona] G6544100 G3128760 @ Intersects(ENVELOPE(2.127228, 2.226105, 41.408844, 41.333313)) \ No newline at end of file Index: solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml (revision ) @@ -39,11 +39,13 @@ prefixTree="geohash" units="degrees" /> + geo="false" distCalculator="cartesian^2" worldBounds="ENVELOPE(0, 1000, 1000, 0)" units="degrees"/> + Index: lucene/spatial/src/test-files/data/countries-bbox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/data/countries-bbox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/data/countries-bbox.txt (revision ) @@ -1,249 +1,249 @@ #id name shape -FLK Falkland Is. -61.148055 -52.343055 -57.733200 -51.249455 -GUF French Guiana -54.603782 2.113473 -51.648055 5.755418 -GUY Guyana -61.389727 1.186873 -56.470636 8.535273 -PCN Pitcairn Is. -130.105055 -25.082227 -128.286118 -24.325836 -SGS South Georgia & the South Sandwich Is. -38.023755 -58.498609 -26.241391 -53.989727 -SHN St. Helena -5.792782 -16.021946 -5.645282 -15.903755 -SUR Suriname -58.071400 1.836245 -53.986118 6.001809 -TTO Trinidad & Tobago -61.921600 10.040345 -60.520836 11.345554 -VEN Venezuela -73.378064 0.649164 -59.803055 12.197500 -ASM American Samoa -170.823227 -14.375555 -170.561873 -14.254309 -COK Cook Is. -165.848345 -21.940836 -157.703764 -10.881318 -PYF French Polynesia -151.497773 -17.870836 -138.809755 -8.778191 -UMI Jarvis I. -160.045164 -0.398055 -160.009464 -0.374309 -NIU Niue -169.952236 -19.145555 -169.781555 -18.963336 -WSM Samoa -172.780027 -14.057500 -171.429200 -13.460555 -TKL Tokelau -171.862718 -9.218891 -171.843764 -9.170627 -TON Tonga -175.360000 -21.268064 -173.906827 -18.568055 -WLF Wallis & Futuna -178.190273 -14.323891 -176.121936 -13.214864 -ARG Argentina -73.582300 -55.051673 -53.650009 -21.780518 -BOL Bolivia -69.656191 -22.901109 -57.521118 -9.679191 -BRA Brazil -74.004591 -33.741118 -34.792918 5.272709 -CHL Chile -109.446109 -55.902227 -66.420627 -17.505282 -ECU Ecuador -91.663891 -5.000309 -75.216846 1.437782 -PRY Paraguay -62.643773 -27.584727 -54.243900 -19.296809 -PER Peru -81.355146 -18.348546 -68.673909 -0.036873 -URY Uruguay -58.438609 -34.943818 -53.098300 -30.096673 -UMI Baker I. -176.467655 0.215282 -176.455855 0.222573 -CAN Canada -141.002991 41.675554 -52.617364 83.113873 -GTM Guatemala -92.246782 13.745836 -88.214736 17.821109 -UMI Howland I. -176.643082 0.790282 -176.631091 0.808609 -UMI Johnston Atoll -169.538936 16.724164 -169.523927 16.730273 -MEX Mexico -118.404164 14.550545 -86.738618 32.718454 -UMI Midway Is. -177.395845 28.184154 -177.360545 28.221518 -BRB Barbados -59.659446 13.050554 -59.427082 13.337082 -DMA Dominica -61.491391 15.198054 -61.250700 15.631945 -GRD Grenada -61.785182 11.996945 -61.596391 12.237154 -GLP Guadeloupe -61.796109 15.870000 -61.187082 16.512918 -MTQ Martinique -61.231536 14.402773 -60.816946 14.880136 -LCA St. Lucia -61.079582 13.709445 -60.878064 14.109309 -SPM St. Pierre & Miquelon -56.397782 46.747191 -56.145500 47.135827 -VCT St. Vincent & the Grenadines -61.280146 13.130282 -61.120282 13.383191 -ABW Aruba -70.059664 12.411109 -69.874864 12.627773 -BMU Bermuda -64.823064 32.260554 -64.676809 32.379509 -DOM Dominican Republic -72.003064 17.604164 -68.322927 19.930827 -HTI Haiti -74.467791 18.022782 -71.629182 20.091454 -JAM Jamaica -78.373900 17.697218 -76.221118 18.522500 -ANT Netherlands Antilles -69.163618 12.020554 -68.192927 12.383891 -BHS The Bahamas -78.978900 20.915273 -72.738891 26.929164 -TCA Turks & Caicos Is. -72.031464 21.429918 -71.127573 21.957773 -BLZ Belize -89.216400 15.889854 -87.779591 18.489900 -CYM Cayman Is. -81.400836 19.265000 -81.093064 19.354164 -COL Colombia -81.720146 -4.236873 -66.870455 12.590273 -CRI Costa Rica -85.911391 8.025673 -82.561400 11.212845 -CUB Cuba -84.952927 19.821945 -74.131255 23.194027 -SLV El Salvador -90.108064 13.156391 -87.694673 14.431982 -HND Honduras -89.350491 12.985173 -83.131855 16.435827 -NIC Nicaragua -87.689827 10.709691 -83.131855 15.022218 -PAN Panama -83.030291 7.206109 -77.198336 9.620136 -AIA Anguilla -63.167782 18.164445 -62.972709 18.272982 -ATG Antigua & Barbuda -61.891109 16.989718 -61.666946 17.724300 -VGB British Virgin Is. -64.698482 18.383891 -64.324527 18.504854 -MSR Montserrat -62.236946 16.671391 -62.138891 16.812354 -PRI Puerto Rico -67.266400 17.922218 -65.301118 18.519445 -KNA St. Kitts & Nevis -62.862782 17.208882 -62.622509 17.410136 -VIR Virgin Is. -65.023509 17.676664 -64.562573 18.387673 -FRO Faroe Is. -7.433473 61.388327 -6.389718 62.357500 -GRL Greenland -73.053609 59.790273 -12.157637 83.623600 -XGK Guernsey -2.668609 49.422491 -2.500973 49.508191 -ISL Iceland -24.538400 63.390000 -13.499446 66.536100 -IRL Ireland -10.474727 51.445545 -6.013055 55.379991 -XIM Isle of Man -4.787155 54.055545 -4.308682 54.416382 -SJM Jan Mayen -9.119909 70.803863 -7.928509 71.180818 -XJE Jersey -2.247364 49.167773 -2.015000 49.261109 -GBR United Kingdom -8.171664 49.955273 1.749445 60.843327 -CPV Cape Verde -25.360555 14.811109 -22.666109 17.192364 -CIV Cote d'Ivoire -8.606382 4.344718 -2.487782 10.735254 -GHA Ghana -3.248891 4.727082 1.202782 11.155691 -GIB Gibraltar -5.356173 36.112073 -5.334509 36.163309 -LBR Liberia -11.492327 4.343609 -7.368400 8.512782 -MAR Morocco -13.174964 27.664236 -1.011809 35.919164 -PRT Portugal -31.289027 32.637500 -6.190455 42.150673 -ESP Spain -18.169864 27.637500 4.316945 43.764300 -ESH Western Sahara -17.101527 20.764100 -8.666391 27.666954 -BFA Burkina Faso -5.520837 9.395691 2.397927 15.082773 -GIN Guinea -15.080837 7.193927 -7.653373 12.677500 -GNB Guinea-Bissau -16.717773 10.925100 -13.643891 12.684718 -MLI Mali -12.244837 10.142154 4.251391 25.000273 -MRT Mauritania -17.075555 14.725636 -4.806109 27.290454 -SEN Senegal -17.532782 12.301745 -11.369927 16.690618 -SLE Sierra Leone -13.295609 6.923609 -10.264309 9.997500 -GMB The Gambia -16.821664 13.059973 -13.798609 13.826391 -DJI Djibouti 41.759854 10.942218 43.420409 12.708327 -ERI Eritrea 36.443282 12.363891 43.121382 17.994882 -ETH Ethiopia 32.991800 3.406664 47.988245 14.883609 -MNG Mongolia 87.761100 41.586654 119.931509 52.142773 -SDN Sudan 21.829100 3.493391 38.607500 22.232218 -UGA Uganda 29.574300 -1.476109 35.009718 4.222782 -ISR Gaza Strip 34.216663 31.216545 34.558891 31.596100 -IRQ Iraq 38.794700 29.061664 48.560691 37.383673 -ISR Israel 34.267582 29.486709 35.681109 33.270273 -JOR Jordan 34.960418 29.188891 39.301109 33.377591 -KAZ Kazakhstan 46.499163 40.594436 87.348209 55.442627 -NOR Norway 4.789582 57.987918 31.073536 71.154709 -RUS Russia -180.000000 41.196582 180.000000 81.851927 -SWE Sweden 11.113336 55.339164 24.167009 69.060300 -ISR West Bank 34.888191 31.350691 35.570609 32.546391 -DZA Algeria -8.667218 18.976391 11.986473 37.089854 -AND Andorra 1.421391 42.436382 1.781718 42.655964 -CMR Cameroon 8.502363 1.654164 16.207000 13.085000 -CAF Central African Republic 14.418891 2.221264 27.459718 11.000836 -LBY Libya 9.311391 19.499064 25.151663 33.171136 -MCO Monaco 7.390900 43.727545 7.439291 43.768300 -TUN Tunisia 7.492218 30.234391 11.581663 37.340409 -BEN Benin 0.776663 6.218718 3.855000 12.396654 -TCD Chad 13.461945 7.458536 24.002745 23.450554 -GNQ Equatorial Guinea 8.424163 0.930154 11.353891 3.763336 -KIR Kiribati -157.581700 1.335991 172.947509 2.033054 -NER Niger 0.166663 11.693273 15.996663 23.522309 -NGA Nigeria 2.692500 4.272845 14.649654 13.891500 -STP Sao Tome & Principe 6.465136 0.018336 7.463473 1.701245 -TGO Togo -0.149764 6.100545 1.797800 11.138536 -ALB Albania 19.288536 39.645000 21.053327 42.660345 -BIH Bosnia & Herzegovina 15.740591 42.565827 19.619782 45.265945 -HRV Croatia 13.504791 42.399991 19.425000 46.535827 -ITA Italy 6.623963 36.649164 18.514445 47.094582 -MKD Macedonia 20.458818 40.855891 23.030973 42.358954 -MLT Malta 14.329100 35.800000 14.570000 35.991936 -SMR San Marino 12.406945 43.898682 12.511109 43.986873 -SMN Serbia & Montenegro 18.453327 41.849000 23.005000 46.181109 -VTC Vatican City 12.444473 41.900891 12.457718 41.908391 -BGR Bulgaria 22.365273 41.243045 28.605136 44.224718 -CYP Cyprus 32.269863 34.640273 34.586036 35.688609 -EGY Egypt 24.706800 21.994164 36.895827 31.646945 -GEO Georgia 40.002963 41.048045 46.710818 43.584718 -GRC Greece 19.640000 34.930545 28.238045 41.747773 -LBN Lebanon 35.100827 33.062082 36.623745 34.647500 -SYR Syria 35.614463 32.313609 42.378327 37.290545 -TUR Turkey 25.665827 35.818445 44.820545 42.109991 -AUT Austria 9.533573 46.407491 17.166382 49.018745 -CZE Czech Republic 12.093700 48.581382 18.852218 51.052491 -DNK Denmark 8.092918 54.561936 15.149163 57.745973 -HUN Hungary 16.111800 45.748327 22.894800 48.576173 -POL Poland 14.147636 49.002918 24.143473 54.836036 -SVK Slovakia 16.844718 47.737500 22.558054 49.600827 -SVN Slovenia 13.383473 45.425818 16.607873 46.876245 -SJM Svalbard 10.487918 74.343045 33.637500 80.764163 -BEL Belgium 2.541663 49.508882 6.398200 51.501245 -FRA France -4.790282 41.364927 9.562218 51.091109 -DEU Germany 5.865000 47.274718 15.033818 55.056527 -LIE Liechtenstein 9.474636 47.057454 9.633891 47.274545 -LUX Luxembourg 5.734445 49.448464 6.524027 50.181809 -NLD Netherlands 3.370863 50.753882 7.210973 53.465827 -CHE Switzerland 5.967009 45.829436 10.488209 47.806664 -USA United States -178.216555 18.925482 179.775936 71.351436 -BLR Belarus 23.165400 51.251845 32.740054 56.167491 -EST Estonia 21.837354 57.522636 28.194091 59.664718 -FIN Finland 19.511391 59.806800 31.581963 70.088609 -LVA Latvia 20.968609 55.674836 28.235963 58.083254 -LTU Lithuania 20.942836 53.890336 26.813054 56.449854 -MDA Moldova 26.634991 45.448645 30.128709 48.468318 -ROM Romania 20.261027 43.623309 29.672218 48.263882 -UKR Ukraine 22.151445 44.379154 40.178745 52.378600 -IND India 68.144227 6.745827 97.380536 35.505618 -MDV Maldives 72.863391 -0.641664 73.637272 7.027773 -OMN Oman 51.999291 16.642782 59.847082 26.368709 -SOM Somalia 40.988609 -1.674873 51.411318 11.979164 -LKA Sri Lanka 79.696091 5.918054 81.891663 9.828191 -TKM Turkmenistan 51.250182 35.145991 66.670882 42.796173 -UZB Uzbekistan 55.997491 37.184991 73.167545 45.570591 -YEM Yemen 42.555973 12.144718 54.473473 18.999345 -ARM Armenia 43.454163 38.841145 46.620536 41.297054 -AZE Azerbaijan 44.778863 38.262809 51.677009 42.710754 -BHR Bahrain 50.453327 25.571945 50.796391 26.288891 -IRN Iran 44.034954 25.075973 63.330273 39.779154 -KWT Kuwait 46.546945 28.538882 48.416591 30.084164 -QAT Qatar 50.751936 24.556045 51.615827 26.152500 -SAU Saudi Arabia 34.572145 16.377500 55.666109 32.154945 -ARE United Arab Emirates 51.583327 22.633327 56.381663 26.083882 -AFG Afghanistan 60.504163 29.406109 74.915736 38.471982 -KGZ Kyrgyzstan 69.249500 39.195473 80.281582 43.216900 -NPL Nepal 80.052200 26.368364 88.194554 30.424718 -PAK Pakistan 60.866300 23.688045 77.823927 37.060791 -TJK Tajikistan 67.364700 36.671845 75.187482 41.049254 -BGD Bangladesh 88.043872 20.744818 92.669345 26.626136 -BTN Bhutan 88.751936 26.703609 92.114218 28.325000 -BRN Brunei 114.095082 4.018191 115.360263 5.053054 -CHN China 73.620045 18.168882 134.768463 53.553745 -JPN Japan 123.678863 24.251391 145.812409 45.486382 -PRK North Korea 124.323954 37.671382 130.697418 43.006100 -PLW Palau 134.452482 7.305254 134.658872 7.729445 -PHL Philippines 116.950000 5.049164 126.598036 19.391109 -KOR South Korea 126.099018 33.192209 129.586872 38.625245 -KHM Cambodia 102.346509 10.422736 107.636382 14.708618 -LAO Laos 100.091372 13.926664 107.695254 22.499927 -MYS Malaysia 99.641936 0.852782 119.275818 7.352918 -MMR Myanmar 92.204991 9.839582 101.169427 28.546527 -SGP Singapore 103.640945 1.259027 103.997945 1.445282 -THA Thailand 97.347272 5.633473 105.639291 20.454582 -VNM Vietnam 102.140745 8.559236 109.464845 23.324164 -GUM Guam 144.634154 13.235000 144.953309 13.652291 -MHL Marshall Is. 162.324963 5.600273 171.378063 14.594027 -FSM Micronesia 158.120100 5.261664 163.042891 6.977636 -MNP Northern Mariana Is. 145.572682 14.908054 145.818082 15.268191 -UMI Wake I. 166.608981 19.279445 166.662200 19.324582 -BWA Botswana 19.996109 -26.875555 29.373618 -17.782082 -BDI Burundi 28.985000 -4.448055 30.853191 -2.301564 -ATF French Southern & Antarctic Lands 51.650836 -49.725009 70.567491 -46.327645 -HMD Heard I. & McDonald Is. 73.234709 -53.199445 73.773882 -52.965145 -KEN Kenya 33.907218 -4.669618 41.905163 4.622500 -RWA Rwanda 28.854445 -2.825491 30.893263 -1.054446 -TZA Tanzania 29.340827 -11.740418 40.436809 -0.997218 -ZMB Zambia 21.996391 -18.074918 33.702282 -8.191664 -ZWE Zimbabwe 25.237918 -22.414764 33.071591 -15.616527 -ATA Antarctica -180.000000 -90.000000 180.000000 -60.503336 -NOR Bouvet I. 3.342363 -54.462782 3.484163 -54.383609 -COM Comoros 43.214027 -12.383055 44.530418 -11.366946 -REU Juan De Nova I. 42.723818 -17.076118 42.760900 -17.052018 -LSO Lesotho 27.013973 -30.650527 29.455554 -28.570691 -MWI Malawi 32.681873 -17.135282 35.920963 -9.376673 -MOZ Mozambique 30.213018 -26.860282 40.846109 -10.471109 -ZAF South Africa 16.483327 -46.969727 37.892218 -22.136391 -SWZ Swaziland 30.798336 -27.316391 32.133400 -25.728336 -AGO Angola 11.731245 -18.016391 24.084445 -4.388991 -COG Congo 11.140663 -5.015000 18.643609 3.711109 -ZAR Congo, DRC 12.214554 -13.458055 31.302773 5.380691 -FJI Fiji -180.000000 -19.162782 180.000000 -16.153473 -GAB Gabon 8.700836 -3.925282 14.519582 2.317900 -NAM Namibia 11.716391 -28.961873 25.264427 -16.954173 -NZL New Zealand -176.848755 -52.578055 178.841063 -34.414718 -IOT British Indian Ocean Territory 72.357900 -7.436246 72.494282 -7.233473 -REU Glorioso Is. 47.279091 -11.577782 47.303054 -11.554100 -MDG Madagascar 43.236827 -25.588336 50.501391 -11.945555 -MUS Mauritius 57.306309 -20.520555 63.495754 -19.673336 -MYT Mayotte 45.039163 -12.992500 45.293345 -12.662500 -REU Reunion 55.220554 -21.373891 55.853054 -20.856527 -SYC Seychelles 46.205691 -9.463055 55.540554 -4.551664 -CXR Christmas I. 105.629000 -10.510973 105.751900 -10.384082 -CCK Cocos Is. 96.817491 -12.199446 96.864845 -12.130418 -IDN Indonesia 95.210945 -10.929655 141.007018 5.913473 -TLS Timor Leste 124.046100 -9.463627 127.308591 -8.140000 -AUS Australia 112.907209 -54.753891 158.960372 -10.135691 -NRU Nauru 166.904418 -0.552218 166.957045 -0.493336 -NCL New Caledonia 163.982745 -22.673891 168.130509 -20.087918 -NFK Norfolk I. 167.910945 -29.081109 167.998872 -29.000555 -PNG Papua New Guinea 140.858854 -11.642500 155.966845 -1.355282 -SLB Solomon Is. 155.671300 -11.845836 166.931836 -6.605518 -TUV Tuvalu 176.295254 -8.561291 179.232281 -6.089446 -VUT Vanuatu 166.521636 -20.254173 169.893863 -13.707218 +FLK Falkland Is. ENVELOPE(-61.148055, -57.733200, -51.249455, -52.343055) +GUF French Guiana ENVELOPE(-54.603782, -51.648055, 5.755418, 2.113473) +GUY Guyana ENVELOPE(-61.389727, -56.470636, 8.535273, 1.186873) +PCN Pitcairn Is. ENVELOPE(-130.105055, -128.286118, -24.325836, -25.082227) +SGS South Georgia & the South Sandwich Is. ENVELOPE(-38.023755, -26.241391, -53.989727, -58.498609) +SHN St. Helena ENVELOPE(-5.792782, -5.645282, -15.903755, -16.021946) +SUR Suriname ENVELOPE(-58.071400, -53.986118, 6.001809, 1.836245) +TTO Trinidad & Tobago ENVELOPE(-61.921600, -60.520836, 11.345554, 10.040345) +VEN Venezuela ENVELOPE(-73.378064, -59.803055, 12.197500, 0.649164) +ASM American Samoa ENVELOPE(-170.823227, -170.561873, -14.254309, -14.375555) +COK Cook Is. ENVELOPE(-165.848345, -157.703764, -10.881318, -21.940836) +PYF French Polynesia ENVELOPE(-151.497773, -138.809755, -8.778191, -17.870836) +UMI Jarvis I. ENVELOPE(-160.045164, -160.009464, -0.374309, -0.398055) +NIU Niue ENVELOPE(-169.952236, -169.781555, -18.963336, -19.145555) +WSM Samoa ENVELOPE(-172.780027, -171.429200, -13.460555, -14.057500) +TKL Tokelau ENVELOPE(-171.862718, -171.843764, -9.170627, -9.218891) +TON Tonga ENVELOPE(-175.360000, -173.906827, -18.568055, -21.268064) +WLF Wallis & Futuna ENVELOPE(-178.190273, -176.121936, -13.214864, -14.323891) +ARG Argentina ENVELOPE(-73.582300, -53.650009, -21.780518, -55.051673) +BOL Bolivia ENVELOPE(-69.656191, -57.521118, -9.679191, -22.901109) +BRA Brazil ENVELOPE(-74.004591, -34.792918, 5.272709, -33.741118) +CHL Chile ENVELOPE(-109.446109, -66.420627, -17.505282, -55.902227) +ECU Ecuador ENVELOPE(-91.663891, -75.216846, 1.437782, -5.000309) +PRY Paraguay ENVELOPE(-62.643773, -54.243900, -19.296809, -27.584727) +PER Peru ENVELOPE(-81.355146, -68.673909, -0.036873, -18.348546) +URY Uruguay ENVELOPE(-58.438609, -53.098300, -30.096673, -34.943818) +UMI Baker I. ENVELOPE(-176.467655, -176.455855, 0.222573, 0.215282) +CAN Canada ENVELOPE(-141.002991, -52.617364, 83.113873, 41.675554) +GTM Guatemala ENVELOPE(-92.246782, -88.214736, 17.821109, 13.745836) +UMI Howland I. ENVELOPE(-176.643082, -176.631091, 0.808609, 0.790282) +UMI Johnston Atoll ENVELOPE(-169.538936, -169.523927, 16.730273, 16.724164) +MEX Mexico ENVELOPE(-118.404164, -86.738618, 32.718454, 14.550545) +UMI Midway Is. ENVELOPE(-177.395845, -177.360545, 28.221518, 28.184154) +BRB Barbados ENVELOPE(-59.659446, -59.427082, 13.337082, 13.050554) +DMA Dominica ENVELOPE(-61.491391, -61.250700, 15.631945, 15.198054) +GRD Grenada ENVELOPE(-61.785182, -61.596391, 12.237154, 11.996945) +GLP Guadeloupe ENVELOPE(-61.796109, -61.187082, 16.512918, 15.870000) +MTQ Martinique ENVELOPE(-61.231536, -60.816946, 14.880136, 14.402773) +LCA St. Lucia ENVELOPE(-61.079582, -60.878064, 14.109309, 13.709445) +SPM St. Pierre & Miquelon ENVELOPE(-56.397782, -56.145500, 47.135827, 46.747191) +VCT St. Vincent & the Grenadines ENVELOPE(-61.280146, -61.120282, 13.383191, 13.130282) +ABW Aruba ENVELOPE(-70.059664, -69.874864, 12.627773, 12.411109) +BMU Bermuda ENVELOPE(-64.823064, -64.676809, 32.379509, 32.260554) +DOM Dominican Republic ENVELOPE(-72.003064, -68.322927, 19.930827, 17.604164) +HTI Haiti ENVELOPE(-74.467791, -71.629182, 20.091454, 18.022782) +JAM Jamaica ENVELOPE(-78.373900, -76.221118, 18.522500, 17.697218) +ANT Netherlands Antilles ENVELOPE(-69.163618, -68.192927, 12.383891, 12.020554) +BHS The Bahamas ENVELOPE(-78.978900, -72.738891, 26.929164, 20.915273) +TCA Turks & Caicos Is. ENVELOPE(-72.031464, -71.127573, 21.957773, 21.429918) +BLZ Belize ENVELOPE(-89.216400, -87.779591, 18.489900, 15.889854) +CYM Cayman Is. ENVELOPE(-81.400836, -81.093064, 19.354164, 19.265000) +COL Colombia ENVELOPE(-81.720146, -66.870455, 12.590273, -4.236873) +CRI Costa Rica ENVELOPE(-85.911391, -82.561400, 11.212845, 8.025673) +CUB Cuba ENVELOPE(-84.952927, -74.131255, 23.194027, 19.821945) +SLV El Salvador ENVELOPE(-90.108064, -87.694673, 14.431982, 13.156391) +HND Honduras ENVELOPE(-89.350491, -83.131855, 16.435827, 12.985173) +NIC Nicaragua ENVELOPE(-87.689827, -83.131855, 15.022218, 10.709691) +PAN Panama ENVELOPE(-83.030291, -77.198336, 9.620136, 7.206109) +AIA Anguilla ENVELOPE(-63.167782, -62.972709, 18.272982, 18.164445) +ATG Antigua & Barbuda ENVELOPE(-61.891109, -61.666946, 17.724300, 16.989718) +VGB British Virgin Is. ENVELOPE(-64.698482, -64.324527, 18.504854, 18.383891) +MSR Montserrat ENVELOPE(-62.236946, -62.138891, 16.812354, 16.671391) +PRI Puerto Rico ENVELOPE(-67.266400, -65.301118, 18.519445, 17.922218) +KNA St. Kitts & Nevis ENVELOPE(-62.862782, -62.622509, 17.410136, 17.208882) +VIR Virgin Is. ENVELOPE(-65.023509, -64.562573, 18.387673, 17.676664) +FRO Faroe Is. ENVELOPE(-7.433473, -6.389718, 62.357500, 61.388327) +GRL Greenland ENVELOPE(-73.053609, -12.157637, 83.623600, 59.790273) +XGK Guernsey ENVELOPE(-2.668609, -2.500973, 49.508191, 49.422491) +ISL Iceland ENVELOPE(-24.538400, -13.499446, 66.536100, 63.390000) +IRL Ireland ENVELOPE(-10.474727, -6.013055, 55.379991, 51.445545) +XIM Isle of Man ENVELOPE(-4.787155, -4.308682, 54.416382, 54.055545) +SJM Jan Mayen ENVELOPE(-9.119909, -7.928509, 71.180818, 70.803863) +XJE Jersey ENVELOPE(-2.247364, -2.015000, 49.261109, 49.167773) +GBR United Kingdom ENVELOPE(-8.171664, 1.749445, 60.843327, 49.955273) +CPV Cape Verde ENVELOPE(-25.360555, -22.666109, 17.192364, 14.811109) +CIV Cote d'Ivoire ENVELOPE(-8.606382, -2.487782, 10.735254, 4.344718) +GHA Ghana ENVELOPE(-3.248891, 1.202782, 11.155691, 4.727082) +GIB Gibraltar ENVELOPE(-5.356173, -5.334509, 36.163309, 36.112073) +LBR Liberia ENVELOPE(-11.492327, -7.368400, 8.512782, 4.343609) +MAR Morocco ENVELOPE(-13.174964, -1.011809, 35.919164, 27.664236) +PRT Portugal ENVELOPE(-31.289027, -6.190455, 42.150673, 32.637500) +ESP Spain ENVELOPE(-18.169864, 4.316945, 43.764300, 27.637500) +ESH Western Sahara ENVELOPE(-17.101527, -8.666391, 27.666954, 20.764100) +BFA Burkina Faso ENVELOPE(-5.520837, 2.397927, 15.082773, 9.395691) +GIN Guinea ENVELOPE(-15.080837, -7.653373, 12.677500, 7.193927) +GNB Guinea-Bissau ENVELOPE(-16.717773, -13.643891, 12.684718, 10.925100) +MLI Mali ENVELOPE(-12.244837, 4.251391, 25.000273, 10.142154) +MRT Mauritania ENVELOPE(-17.075555, -4.806109, 27.290454, 14.725636) +SEN Senegal ENVELOPE(-17.532782, -11.369927, 16.690618, 12.301745) +SLE Sierra Leone ENVELOPE(-13.295609, -10.264309, 9.997500, 6.923609) +GMB The Gambia ENVELOPE(-16.821664, -13.798609, 13.826391, 13.059973) +DJI Djibouti ENVELOPE(41.759854, 43.420409, 12.708327, 10.942218) +ERI Eritrea ENVELOPE(36.443282, 43.121382, 17.994882, 12.363891) +ETH Ethiopia ENVELOPE(32.991800, 47.988245, 14.883609, 3.406664) +MNG Mongolia ENVELOPE(87.761100, 119.931509, 52.142773, 41.586654) +SDN Sudan ENVELOPE(21.829100, 38.607500, 22.232218, 3.493391) +UGA Uganda ENVELOPE(29.574300, 35.009718, 4.222782, -1.476109) +ISR Gaza Strip ENVELOPE(34.216663, 34.558891, 31.596100, 31.216545) +IRQ Iraq ENVELOPE(38.794700, 48.560691, 37.383673, 29.061664) +ISR Israel ENVELOPE(34.267582, 35.681109, 33.270273, 29.486709) +JOR Jordan ENVELOPE(34.960418, 39.301109, 33.377591, 29.188891) +KAZ Kazakhstan ENVELOPE(46.499163, 87.348209, 55.442627, 40.594436) +NOR Norway ENVELOPE(4.789582, 31.073536, 71.154709, 57.987918) +RUS Russia ENVELOPE(-180.000000, 180.000000, 81.851927, 41.196582) +SWE Sweden ENVELOPE(11.113336, 24.167009, 69.060300, 55.339164) +ISR West Bank ENVELOPE(34.888191, 35.570609, 32.546391, 31.350691) +DZA Algeria ENVELOPE(-8.667218, 11.986473, 37.089854, 18.976391) +AND Andorra ENVELOPE(1.421391, 1.781718, 42.655964, 42.436382) +CMR Cameroon ENVELOPE(8.502363, 16.207000, 13.085000, 1.654164) +CAF Central African Republic ENVELOPE(14.418891, 27.459718, 11.000836, 2.221264) +LBY Libya ENVELOPE(9.311391, 25.151663, 33.171136, 19.499064) +MCO Monaco ENVELOPE(7.390900, 7.439291, 43.768300, 43.727545) +TUN Tunisia ENVELOPE(7.492218, 11.581663, 37.340409, 30.234391) +BEN Benin ENVELOPE(0.776663, 3.855000, 12.396654, 6.218718) +TCD Chad ENVELOPE(13.461945, 24.002745, 23.450554, 7.458536) +GNQ Equatorial Guinea ENVELOPE(8.424163, 11.353891, 3.763336, 0.930154) +KIR Kiribati ENVELOPE(-157.581700, 172.947509, 2.033054, 1.335991) +NER Niger ENVELOPE(0.166663, 15.996663, 23.522309, 11.693273) +NGA Nigeria ENVELOPE(2.692500, 14.649654, 13.891500, 4.272845) +STP Sao Tome & Principe ENVELOPE(6.465136, 7.463473, 1.701245, 0.018336) +TGO Togo ENVELOPE(-0.149764, 1.797800, 11.138536, 6.100545) +ALB Albania ENVELOPE(19.288536, 21.053327, 42.660345, 39.645000) +BIH Bosnia & Herzegovina ENVELOPE(15.740591, 19.619782, 45.265945, 42.565827) +HRV Croatia ENVELOPE(13.504791, 19.425000, 46.535827, 42.399991) +ITA Italy ENVELOPE(6.623963, 18.514445, 47.094582, 36.649164) +MKD Macedonia ENVELOPE(20.458818, 23.030973, 42.358954, 40.855891) +MLT Malta ENVELOPE(14.329100, 14.570000, 35.991936, 35.800000) +SMR San Marino ENVELOPE(12.406945, 12.511109, 43.986873, 43.898682) +SMN Serbia & Montenegro ENVELOPE(18.453327, 23.005000, 46.181109, 41.849000) +VTC Vatican City ENVELOPE(12.444473, 12.457718, 41.908391, 41.900891) +BGR Bulgaria ENVELOPE(22.365273, 28.605136, 44.224718, 41.243045) +CYP Cyprus ENVELOPE(32.269863, 34.586036, 35.688609, 34.640273) +EGY Egypt ENVELOPE(24.706800, 36.895827, 31.646945, 21.994164) +GEO Georgia ENVELOPE(40.002963, 46.710818, 43.584718, 41.048045) +GRC Greece ENVELOPE(19.640000, 28.238045, 41.747773, 34.930545) +LBN Lebanon ENVELOPE(35.100827, 36.623745, 34.647500, 33.062082) +SYR Syria ENVELOPE(35.614463, 42.378327, 37.290545, 32.313609) +TUR Turkey ENVELOPE(25.665827, 44.820545, 42.109991, 35.818445) +AUT Austria ENVELOPE(9.533573, 17.166382, 49.018745, 46.407491) +CZE Czech Republic ENVELOPE(12.093700, 18.852218, 51.052491, 48.581382) +DNK Denmark ENVELOPE(8.092918, 15.149163, 57.745973, 54.561936) +HUN Hungary ENVELOPE(16.111800, 22.894800, 48.576173, 45.748327) +POL Poland ENVELOPE(14.147636, 24.143473, 54.836036, 49.002918) +SVK Slovakia ENVELOPE(16.844718, 22.558054, 49.600827, 47.737500) +SVN Slovenia ENVELOPE(13.383473, 16.607873, 46.876245, 45.425818) +SJM Svalbard ENVELOPE(10.487918, 33.637500, 80.764163, 74.343045) +BEL Belgium ENVELOPE(2.541663, 6.398200, 51.501245, 49.508882) +FRA France ENVELOPE(-4.790282, 9.562218, 51.091109, 41.364927) +DEU Germany ENVELOPE(5.865000, 15.033818, 55.056527, 47.274718) +LIE Liechtenstein ENVELOPE(9.474636, 9.633891, 47.274545, 47.057454) +LUX Luxembourg ENVELOPE(5.734445, 6.524027, 50.181809, 49.448464) +NLD Netherlands ENVELOPE(3.370863, 7.210973, 53.465827, 50.753882) +CHE Switzerland ENVELOPE(5.967009, 10.488209, 47.806664, 45.829436) +USA United States ENVELOPE(-178.216555, 179.775936, 71.351436, 18.925482) +BLR Belarus ENVELOPE(23.165400, 32.740054, 56.167491, 51.251845) +EST Estonia ENVELOPE(21.837354, 28.194091, 59.664718, 57.522636) +FIN Finland ENVELOPE(19.511391, 31.581963, 70.088609, 59.806800) +LVA Latvia ENVELOPE(20.968609, 28.235963, 58.083254, 55.674836) +LTU Lithuania ENVELOPE(20.942836, 26.813054, 56.449854, 53.890336) +MDA Moldova ENVELOPE(26.634991, 30.128709, 48.468318, 45.448645) +ROM Romania ENVELOPE(20.261027, 29.672218, 48.263882, 43.623309) +UKR Ukraine ENVELOPE(22.151445, 40.178745, 52.378600, 44.379154) +IND India ENVELOPE(68.144227, 97.380536, 35.505618, 6.745827) +MDV Maldives ENVELOPE(72.863391, 73.637272, 7.027773, -0.641664) +OMN Oman ENVELOPE(51.999291, 59.847082, 26.368709, 16.642782) +SOM Somalia ENVELOPE(40.988609, 51.411318, 11.979164, -1.674873) +LKA Sri Lanka ENVELOPE(79.696091, 81.891663, 9.828191, 5.918054) +TKM Turkmenistan ENVELOPE(51.250182, 66.670882, 42.796173, 35.145991) +UZB Uzbekistan ENVELOPE(55.997491, 73.167545, 45.570591, 37.184991) +YEM Yemen ENVELOPE(42.555973, 54.473473, 18.999345, 12.144718) +ARM Armenia ENVELOPE(43.454163, 46.620536, 41.297054, 38.841145) +AZE Azerbaijan ENVELOPE(44.778863, 51.677009, 42.710754, 38.262809) +BHR Bahrain ENVELOPE(50.453327, 50.796391, 26.288891, 25.571945) +IRN Iran ENVELOPE(44.034954, 63.330273, 39.779154, 25.075973) +KWT Kuwait ENVELOPE(46.546945, 48.416591, 30.084164, 28.538882) +QAT Qatar ENVELOPE(50.751936, 51.615827, 26.152500, 24.556045) +SAU Saudi Arabia ENVELOPE(34.572145, 55.666109, 32.154945, 16.377500) +ARE United Arab Emirates ENVELOPE(51.583327, 56.381663, 26.083882, 22.633327) +AFG Afghanistan ENVELOPE(60.504163, 74.915736, 38.471982, 29.406109) +KGZ Kyrgyzstan ENVELOPE(69.249500, 80.281582, 43.216900, 39.195473) +NPL Nepal ENVELOPE(80.052200, 88.194554, 30.424718, 26.368364) +PAK Pakistan ENVELOPE(60.866300, 77.823927, 37.060791, 23.688045) +TJK Tajikistan ENVELOPE(67.364700, 75.187482, 41.049254, 36.671845) +BGD Bangladesh ENVELOPE(88.043872, 92.669345, 26.626136, 20.744818) +BTN Bhutan ENVELOPE(88.751936, 92.114218, 28.325000, 26.703609) +BRN Brunei ENVELOPE(114.095082, 115.360263, 5.053054, 4.018191) +CHN China ENVELOPE(73.620045, 134.768463, 53.553745, 18.168882) +JPN Japan ENVELOPE(123.678863, 145.812409, 45.486382, 24.251391) +PRK North Korea ENVELOPE(124.323954, 130.697418, 43.006100, 37.671382) +PLW Palau ENVELOPE(134.452482, 134.658872, 7.729445, 7.305254) +PHL Philippines ENVELOPE(116.950000, 126.598036, 19.391109, 5.049164) +KOR South Korea ENVELOPE(126.099018, 129.586872, 38.625245, 33.192209) +KHM Cambodia ENVELOPE(102.346509, 107.636382, 14.708618, 10.422736) +LAO Laos ENVELOPE(100.091372, 107.695254, 22.499927, 13.926664) +MYS Malaysia ENVELOPE(99.641936, 119.275818, 7.352918, 0.852782) +MMR Myanmar ENVELOPE(92.204991, 101.169427, 28.546527, 9.839582) +SGP Singapore ENVELOPE(103.640945, 103.997945, 1.445282, 1.259027) +THA Thailand ENVELOPE(97.347272, 105.639291, 20.454582, 5.633473) +VNM Vietnam ENVELOPE(102.140745, 109.464845, 23.324164, 8.559236) +GUM Guam ENVELOPE(144.634154, 144.953309, 13.652291, 13.235000) +MHL Marshall Is. ENVELOPE(162.324963, 171.378063, 14.594027, 5.600273) +FSM Micronesia ENVELOPE(158.120100, 163.042891, 6.977636, 5.261664) +MNP Northern Mariana Is. ENVELOPE(145.572682, 145.818082, 15.268191, 14.908054) +UMI Wake I. ENVELOPE(166.608981, 166.662200, 19.324582, 19.279445) +BWA Botswana ENVELOPE(19.996109, 29.373618, -17.782082, -26.875555) +BDI Burundi ENVELOPE(28.985000, 30.853191, -2.301564, -4.448055) +ATF French Southern & Antarctic Lands ENVELOPE(51.650836, 70.567491, -46.327645, -49.725009) +HMD Heard I. & McDonald Is. ENVELOPE(73.234709, 73.773882, -52.965145, -53.199445) +KEN Kenya ENVELOPE(33.907218, 41.905163, 4.622500, -4.669618) +RWA Rwanda ENVELOPE(28.854445, 30.893263, -1.054446, -2.825491) +TZA Tanzania ENVELOPE(29.340827, 40.436809, -0.997218, -11.740418) +ZMB Zambia ENVELOPE(21.996391, 33.702282, -8.191664, -18.074918) +ZWE Zimbabwe ENVELOPE(25.237918, 33.071591, -15.616527, -22.414764) +ATA Antarctica ENVELOPE(-180.000000, 180.000000, -60.503336, -90.000000) +NOR Bouvet I. ENVELOPE(3.342363, 3.484163, -54.383609, -54.462782) +COM Comoros ENVELOPE(43.214027, 44.530418, -11.366946, -12.383055) +REU Juan De Nova I. ENVELOPE(42.723818, 42.760900, -17.052018, -17.076118) +LSO Lesotho ENVELOPE(27.013973, 29.455554, -28.570691, -30.650527) +MWI Malawi ENVELOPE(32.681873, 35.920963, -9.376673, -17.135282) +MOZ Mozambique ENVELOPE(30.213018, 40.846109, -10.471109, -26.860282) +ZAF South Africa ENVELOPE(16.483327, 37.892218, -22.136391, -46.969727) +SWZ Swaziland ENVELOPE(30.798336, 32.133400, -25.728336, -27.316391) +AGO Angola ENVELOPE(11.731245, 24.084445, -4.388991, -18.016391) +COG Congo ENVELOPE(11.140663, 18.643609, 3.711109, -5.015000) +ZAR Congo, DRC ENVELOPE(12.214554, 31.302773, 5.380691, -13.458055) +FJI Fiji ENVELOPE(-180.000000, 180.000000, -16.153473, -19.162782) +GAB Gabon ENVELOPE(8.700836, 14.519582, 2.317900, -3.925282) +NAM Namibia ENVELOPE(11.716391, 25.264427, -16.954173, -28.961873) +NZL New Zealand ENVELOPE(-176.848755, 178.841063, -34.414718, -52.578055) +IOT British Indian Ocean Territory ENVELOPE(72.357900, 72.494282, -7.233473, -7.436246) +REU Glorioso Is. ENVELOPE(47.279091, 47.303054, -11.554100, -11.577782) +MDG Madagascar ENVELOPE(43.236827, 50.501391, -11.945555, -25.588336) +MUS Mauritius ENVELOPE(57.306309, 63.495754, -19.673336, -20.520555) +MYT Mayotte ENVELOPE(45.039163, 45.293345, -12.662500, -12.992500) +REU Reunion ENVELOPE(55.220554, 55.853054, -20.856527, -21.373891) +SYC Seychelles ENVELOPE(46.205691, 55.540554, -4.551664, -9.463055) +CXR Christmas I. ENVELOPE(105.629000, 105.751900, -10.384082, -10.510973) +CCK Cocos Is. ENVELOPE(96.817491, 96.864845, -12.130418, -12.199446) +IDN Indonesia ENVELOPE(95.210945, 141.007018, 5.913473, -10.929655) +TLS Timor Leste ENVELOPE(124.046100, 127.308591, -8.140000, -9.463627) +AUS Australia ENVELOPE(112.907209, 158.960372, -10.135691, -54.753891) +NRU Nauru ENVELOPE(166.904418, 166.957045, -0.493336, -0.552218) +NCL New Caledonia ENVELOPE(163.982745, 168.130509, -20.087918, -22.673891) +NFK Norfolk I. ENVELOPE(167.910945, 167.998872, -29.000555, -29.081109) +PNG Papua New Guinea ENVELOPE(140.858854, 155.966845, -1.355282, -11.642500) +SLB Solomon Is. ENVELOPE(155.671300, 166.931836, -6.605518, -11.845836) +TUV Tuvalu ENVELOPE(176.295254, 179.232281, -6.089446, -8.561291) +VUT Vanuatu ENVELOPE(166.521636, 169.893863, -13.707218, -20.254173) Index: solr/core/src/java/org/apache/solr/schema/PointType.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/schema/PointType.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/schema/PointType.java (revision ) @@ -25,9 +25,6 @@ import org.apache.lucene.search.BooleanQuery; import org.apache.lucene.search.Query; import org.apache.lucene.search.SortField; -import com.spatial4j.core.io.ParseUtils; -import com.spatial4j.core.distance.DistanceUtils; -import com.spatial4j.core.exception.InvalidShapeException; import org.apache.solr.common.SolrException; import org.apache.solr.common.params.MapSolrParams; import org.apache.solr.common.params.SolrParams; @@ -51,7 +48,7 @@ SolrParams p = new MapSolrParams(args); dimension = p.getInt(DIMENSION, DEFAULT_DIMENSION); if (dimension < 1) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, + throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "The dimension must be > 0: " + dimension); } args.remove(DIMENSION); @@ -70,12 +67,7 @@ @Override public List createFields(SchemaField field, Object value, float boost) { String externalVal = value.toString(); - String[] point = new String[0]; - try { - point = ParseUtils.parsePoint(null, externalVal, dimension); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + String[] point = parseCommaSeparatedList(externalVal, dimension); // TODO: this doesn't currently support polyFields as sub-field types List f = new ArrayList(dimension+1); @@ -135,14 +127,9 @@ public Query getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive) { //Query could look like: [x1,y1 TO x2,y2] for 2 dimension, but could look like: [x1,y1,z1 TO x2,y2,z2], and can be extrapolated to n-dimensions //thus, this query essentially creates a box, cube, etc. - String[] p1; - String[] p2; - try { - p1 = ParseUtils.parsePoint(null, part1, dimension); - p2 = ParseUtils.parsePoint(null, part2, dimension); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + String[] p1 = parseCommaSeparatedList(part1, dimension); + String[] p2 = parseCommaSeparatedList(part2, dimension); + BooleanQuery result = new BooleanQuery(true); for (int i = 0; i < dimension; i++) { SchemaField subSF = subField(field, i, schema); @@ -154,12 +141,7 @@ @Override public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) { - String[] p1 = new String[0]; - try { - p1 = ParseUtils.parsePoint(null, externalVal, dimension); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + String[] p1 = parseCommaSeparatedList(externalVal, dimension); //TODO: should we assert that p1.length == dimension? BooleanQuery bq = new BooleanQuery(true); for (int i = 0; i < dimension; i++) { @@ -171,18 +153,22 @@ } /** - * Calculates the range and creates a RangeQuery (bounding box) wrapped in a BooleanQuery (unless the dimension is 1, one range for every dimension, AND'd together by a Boolean + * Calculates the range and creates a RangeQuery (bounding box) wrapped in a BooleanQuery (unless the dimension is + * 1, one range for every dimension, AND'd together by a Boolean + * - * @param parser The parser + * @param parser The parser * @param options The {@link org.apache.solr.search.SpatialOptions} for this filter. * @return The Query representing the bounding box around the point. */ @Override public Query createSpatialQuery(QParser parser, SpatialOptions options) { - Query result = null; - double [] point = new double[0]; + String[] pointStrs = parseCommaSeparatedList(options.pointStr, dimension); + double[] point = new double[dimension]; try { - point = ParseUtils.parsePointDouble(null, options.pointStr, dimension); - } catch (InvalidShapeException e) { + for (int i = 0; i < pointStrs.length; i++) { + point[i] = Double.parseDouble(pointStrs[i]); + } + } catch (NumberFormatException e) { throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); } IndexSchema schema = parser.getReq().getSchema(); @@ -192,22 +178,95 @@ String upper = String.valueOf(point[0] + options.distance); SchemaField subSF = subField(options.field, 0, schema); // points must currently be ordered... should we support specifying any two opposite corner points? - result = subSF.getType().getRangeQuery(parser, subSF, lower, upper, true, true); + return subSF.getType().getRangeQuery(parser, subSF, lower, upper, true, true); } else { BooleanQuery tmp = new BooleanQuery(); //TODO: Handle distance measures, as this assumes Euclidean - double [] ur = DistanceUtils.vectorBoxCorner(point, null, options.distance, true); - double [] ll = DistanceUtils.vectorBoxCorner(point, null, options.distance, false); + double[] ur = vectorBoxCorner(point, null, options.distance, true); + double[] ll = vectorBoxCorner(point, null, options.distance, false); for (int i = 0; i < ur.length; i++) { SchemaField subSF = subField(options.field, i, schema); Query range = subSF.getType().getRangeQuery(parser, subSF, String.valueOf(ll[i]), String.valueOf(ur[i]), true, true); tmp.add(range, BooleanClause.Occur.MUST); + } + return tmp; + } + } + private static final double SIN_PI_DIV_4 = Math.sin(Math.PI / 4); + + /** + * Return the coordinates of a vector that is the corner of a box (upper right or lower left), assuming a Rectangular + * coordinate system. Note, this does not apply for points on a sphere or ellipse (although it could be used as an + * approximation). + * + * @param center The center point + * @param result Holds the result, potentially resizing if needed. + * @param distance The d from the center to the corner + * @param upperRight If true, return the coords for the upper right corner, else return the lower left. + * @return The point, either the upperLeft or the lower right + */ + public static double[] vectorBoxCorner(double[] center, double[] result, double distance, boolean upperRight) { + if (result == null || result.length != center.length) { + result = new double[center.length]; - } + } - result = tmp; + if (upperRight == false) { + distance = -distance; } + //We don't care about the power here, + // b/c we are always in a rectangular coordinate system, so any norm can be used by + //using the definition of sine + distance = SIN_PI_DIV_4 * distance; // sin(Pi/4) == (2^0.5)/2 == opp/hyp == opp/distance, solve for opp, similarly for cosine + for (int i = 0; i < center.length; i++) { + result[i] = center[i] + distance; + } return result; } + + /** + * Given a string containing dimension values encoded in it, separated by commas, + * return a String array of length dimension containing the values. + * + * @param externalVal The value to parse + * @param dimension The expected number of values for the point + * @return An array of the values that make up the point (aka vector) + * @throws SolrException if the dimension specified does not match the number found + */ + public static String[] parseCommaSeparatedList(String externalVal, int dimension) throws SolrException { + //TODO: Should we support sparse vectors? + String[] out = new String[dimension]; + int idx = externalVal.indexOf(','); + int end = idx; + int start = 0; + int i = 0; + if (idx == -1 && dimension == 1 && externalVal.length() > 0) {//we have a single point, dimension better be 1 + out[0] = externalVal.trim(); + i = 1; + } else if (idx > 0) {//if it is zero, that is an error + //Parse out a comma separated list of values, as in: 73.5,89.2,7773.4 + for (; i < dimension; i++) { + while (start < end && externalVal.charAt(start) == ' ') start++; + while (end > start && externalVal.charAt(end - 1) == ' ') end--; + if (start == end) { + break; + } + out[i] = externalVal.substring(start, end); + start = idx + 1; + end = externalVal.indexOf(',', start); + idx = end; + if (end == -1) { + end = externalVal.length(); + } + } + } + if (i != dimension) { + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, + "incompatible dimension (" + dimension + + ") and values (" + externalVal + "). Only " + i + " values specified"); + } + return out; + } + } \ No newline at end of file Index: solr/licenses/spatial4j-0.4.jar.sha1 IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/licenses/spatial4j-0.4.jar.sha1 (revision ) +++ solr/licenses/spatial4j-0.4.jar.sha1 (revision ) @@ -0,0 +1,1 @@ +28b666145773098aeeadd033f3dd6c5b2871c208 \ No newline at end of file Index: lucene/spatial/src/test-files/data/states-bbox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/data/states-bbox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/data/states-bbox.txt (revision ) @@ -1,52 +1,52 @@ #id name shape -HI Hawaii -160.242406 18.921786 -154.791096 22.229120 -WA Washington -124.732769 45.543092 -116.919132 48.999931 -MT Montana -116.063531 44.353639 -104.043072 49.000026 -ME Maine -71.087509 43.091050 -66.969271 47.453334 -ND North Dakota -104.062991 45.930822 -96.551931 49.000026 -SD South Dakota -104.061036 42.488459 -96.439394 45.943547 -WY Wyoming -111.053428 40.994289 -104.051705 45.002793 -WI Wisconsin -92.885397 42.489152 -86.967712 46.952479 -ID Idaho -117.236921 41.994599 -111.046771 48.999950 -VT Vermont -73.436000 42.725852 -71.505372 45.013351 -MN Minnesota -97.229436 43.498102 -89.530673 49.371730 -OR Oregon -124.559617 41.987672 -116.470418 46.236091 -NH New Hampshire -72.553428 42.698603 -70.734139 45.301469 -IA Iowa -96.640709 40.371946 -90.142796 43.501457 -MA Massachusetts -73.498840 41.238279 -69.917780 42.886877 -NE Nebraska -104.056219 39.992595 -95.308697 43.003062 -NY New York -79.763235 40.506003 -71.869986 45.006138 -PA Pennsylvania -80.526045 39.719313 -74.700062 42.267327 -CT Connecticut -73.725237 40.998392 -71.788249 42.047428 -RI Rhode Island -71.866678 41.322769 -71.117132 42.013713 -NJ New Jersey -75.570234 38.956682 -73.896148 41.350573 -IN Indiana -88.101490 37.776224 -84.787446 41.765540 -NV Nevada -119.996324 34.998914 -114.037392 41.996637 -UT Utah -114.047273 36.991746 -109.043206 42.002300 -CA California -124.392638 32.535781 -114.125230 42.002191 -OH Ohio -84.812070 38.400511 -80.519996 41.986872 -IL Illinois -91.516284 36.986822 -87.507909 42.509363 -DC District of Columbia -77.122328 38.788234 -76.910904 38.993541 -DE Delaware -75.791094 38.449602 -75.045623 39.840119 -WV West Virginia -82.647158 37.204910 -77.727467 40.637203 -MD Maryland -79.489865 37.970255 -75.045623 39.725461 -CO Colorado -109.055861 36.988994 -102.037207 41.003375 -KY Kentucky -89.568231 36.496570 -81.959575 39.142063 -KS Kansas -102.051535 36.988875 -94.601224 40.002987 -VA Virginia -83.675177 36.541623 -75.242219 39.456998 -MO Missouri -95.767479 35.989656 -89.105034 40.609784 -AZ Arizona -114.821761 31.335634 -109.045615 37.003926 -OK Oklahoma -102.997709 33.621136 -94.428552 37.001478 -NC North Carolina -84.323773 33.882164 -75.456580 36.589767 -TN Tennessee -90.305448 34.988759 -81.652272 36.679683 -TX Texas -106.650062 25.845557 -93.507389 36.493912 -NM New Mexico -109.051346 31.343453 -102.997401 36.999760 -AL Alabama -88.472952 30.233604 -84.894016 35.016033 -MS Mississippi -91.643682 30.194935 -88.090468 35.005041 -GA Georgia -85.608960 30.361291 -80.894753 35.000366 -SC South Carolina -83.350685 32.068173 -78.579453 35.208356 -AR Arkansas -94.617257 33.010151 -89.645479 36.492811 -LA Louisiana -94.041785 28.939655 -89.021803 33.023422 -FL Florida -87.625711 24.956376 -80.050911 31.003157 -MI Michigan -90.408200 41.697494 -82.419836 48.173795 -AK Alaska -178.217598 51.583032 -129.992235 71.406235 +HI Hawaii ENVELOPE(-160.242406, -154.791096, 22.229120, 18.921786) +WA Washington ENVELOPE(-124.732769, -116.919132, 48.999931, 45.543092) +MT Montana ENVELOPE(-116.063531, -104.043072, 49.000026, 44.353639) +ME Maine ENVELOPE(-71.087509, -66.969271, 47.453334, 43.091050) +ND North Dakota ENVELOPE(-104.062991, -96.551931, 49.000026, 45.930822) +SD South Dakota ENVELOPE(-104.061036, -96.439394, 45.943547, 42.488459) +WY Wyoming ENVELOPE(-111.053428, -104.051705, 45.002793, 40.994289) +WI Wisconsin ENVELOPE(-92.885397, -86.967712, 46.952479, 42.489152) +ID Idaho ENVELOPE(-117.236921, -111.046771, 48.999950, 41.994599) +VT Vermont ENVELOPE(-73.436000, -71.505372, 45.013351, 42.725852) +MN Minnesota ENVELOPE(-97.229436, -89.530673, 49.371730, 43.498102) +OR Oregon ENVELOPE(-124.559617, -116.470418, 46.236091, 41.987672) +NH New Hampshire ENVELOPE(-72.553428, -70.734139, 45.301469, 42.698603) +IA Iowa ENVELOPE(-96.640709, -90.142796, 43.501457, 40.371946) +MA Massachusetts ENVELOPE(-73.498840, -69.917780, 42.886877, 41.238279) +NE Nebraska ENVELOPE(-104.056219, -95.308697, 43.003062, 39.992595) +NY New York ENVELOPE(-79.763235, -71.869986, 45.006138, 40.506003) +PA Pennsylvania ENVELOPE(-80.526045, -74.700062, 42.267327, 39.719313) +CT Connecticut ENVELOPE(-73.725237, -71.788249, 42.047428, 40.998392) +RI Rhode Island ENVELOPE(-71.866678, -71.117132, 42.013713, 41.322769) +NJ New Jersey ENVELOPE(-75.570234, -73.896148, 41.350573, 38.956682) +IN Indiana ENVELOPE(-88.101490, -84.787446, 41.765540, 37.776224) +NV Nevada ENVELOPE(-119.996324, -114.037392, 41.996637, 34.998914) +UT Utah ENVELOPE(-114.047273, -109.043206, 42.002300, 36.991746) +CA California ENVELOPE(-124.392638, -114.125230, 42.002191, 32.535781) +OH Ohio ENVELOPE(-84.812070, -80.519996, 41.986872, 38.400511) +IL Illinois ENVELOPE(-91.516284, -87.507909, 42.509363, 36.986822) +DC District of Columbia ENVELOPE(-77.122328, -76.910904, 38.993541, 38.788234) +DE Delaware ENVELOPE(-75.791094, -75.045623, 39.840119, 38.449602) +WV West Virginia ENVELOPE(-82.647158, -77.727467, 40.637203, 37.204910) +MD Maryland ENVELOPE(-79.489865, -75.045623, 39.725461, 37.970255) +CO Colorado ENVELOPE(-109.055861, -102.037207, 41.003375, 36.988994) +KY Kentucky ENVELOPE(-89.568231, -81.959575, 39.142063, 36.496570) +KS Kansas ENVELOPE(-102.051535, -94.601224, 40.002987, 36.988875) +VA Virginia ENVELOPE(-83.675177, -75.242219, 39.456998, 36.541623) +MO Missouri ENVELOPE(-95.767479, -89.105034, 40.609784, 35.989656) +AZ Arizona ENVELOPE(-114.821761, -109.045615, 37.003926, 31.335634) +OK Oklahoma ENVELOPE(-102.997709, -94.428552, 37.001478, 33.621136) +NC North Carolina ENVELOPE(-84.323773, -75.456580, 36.589767, 33.882164) +TN Tennessee ENVELOPE(-90.305448, -81.652272, 36.679683, 34.988759) +TX Texas ENVELOPE(-106.650062, -93.507389, 36.493912, 25.845557) +NM New Mexico ENVELOPE(-109.051346, -102.997401, 36.999760, 31.343453) +AL Alabama ENVELOPE(-88.472952, -84.894016, 35.016033, 30.233604) +MS Mississippi ENVELOPE(-91.643682, -88.090468, 35.005041, 30.194935) +GA Georgia ENVELOPE(-85.608960, -80.894753, 35.000366, 30.361291) +SC South Carolina ENVELOPE(-83.350685, -78.579453, 35.208356, 32.068173) +AR Arkansas ENVELOPE(-94.617257, -89.645479, 36.492811, 33.010151) +LA Louisiana ENVELOPE(-94.041785, -89.021803, 33.023422, 28.939655) +FL Florida ENVELOPE(-87.625711, -80.050911, 31.003157, 24.956376) +MI Michigan ENVELOPE(-90.408200, -82.419836, 48.173795, 41.697494) +AK Alaska ENVELOPE(-178.217598, -129.992235, 71.406235, 51.583032) Index: lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestQuery.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestQuery.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestQuery.java (revision ) @@ -18,10 +18,10 @@ */ import com.spatial4j.core.context.SpatialContext; -import com.spatial4j.core.io.LineReader; import org.apache.lucene.spatial.query.SpatialArgs; import org.apache.lucene.spatial.query.SpatialArgsParser; +import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -41,20 +41,23 @@ public List ids = new ArrayList(); /** - * Get Test Queries + * Get Test Queries. The InputStream is closed. */ public static Iterator getTestQueries( final SpatialArgsParser parser, final SpatialContext ctx, final String name, final InputStream in ) throws IOException { - return new LineReader(new InputStreamReader(in,"UTF-8")) { - @Override - public SpatialTestQuery parseLine(String line) { + List results = new ArrayList(); + + BufferedReader bufInput = new BufferedReader(new InputStreamReader(in,"UTF-8")); + try { + String line; + for (int lineNumber = 1; (line = bufInput.readLine()) != null; lineNumber++) { SpatialTestQuery test = new SpatialTestQuery(); test.line = line; - test.lineNumber = getLineNumber(); + test.lineNumber = lineNumber; try { // skip a comment @@ -71,13 +74,16 @@ test.ids.add(st.nextToken().trim()); } test.args = parser.parse(line.substring(idx + 1).trim(), ctx); - return test; + results.add(test); } catch( Exception ex ) { throw new RuntimeException( "invalid query line: "+test.line, ex ); } } - }; + } finally { + bufInput.close(); + } + return results.iterator(); } @Override Index: lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/SpatialExample.java (revision ) @@ -57,11 +57,11 @@ //Note: Test invoked via TestTestFramework.spatialExample() - public static void main(String[] args) throws IOException { + public static void main(String[] args) throws Exception { new SpatialExample().test(); } - public void test() throws IOException { + public void test() throws Exception { init(); indexPoints(); search(); @@ -102,7 +102,7 @@ this.directory = new RAMDirectory(); } - private void indexPoints() throws IOException { + private void indexPoints() throws Exception { IndexWriterConfig iwConfig = new IndexWriterConfig(TEST_VERSION_CURRENT,null); IndexWriter indexWriter = new IndexWriter(directory, iwConfig); @@ -110,10 +110,9 @@ indexWriter.addDocument(newSampleDocument( 2, ctx.makePoint(-80.93, 33.77))); - //When parsing a string to a shape, the presence of a comma means it's y-x - // order (lon, lat) + //Spatial4j has a WKT parser which is also "x y" order indexWriter.addDocument(newSampleDocument( - 4, ctx.readShape("-50.7693246, 60.9289094"))); + 4, ctx.readShapeFromWkt("POINT(60.9289094 -50.7693246)"))); indexWriter.addDocument(newSampleDocument( 20, ctx.makePoint(0.1,0.1), ctx.makePoint(0, 0))); @@ -131,13 +130,15 @@ doc.add(f); } //store it too; the format is up to you - doc.add(new StoredField(strategy.getFieldName(), ctx.toString(shape))); + // (assume point in this example) + Point pt = (Point) shape; + doc.add(new StoredField(strategy.getFieldName(), pt.getX()+" "+pt.getY())); } return doc; } - private void search() throws IOException { + private void search() throws Exception { IndexReader indexReader = DirectoryReader.open(directory); IndexSearcher indexSearcher = new IndexSearcher(indexReader); Sort idSort = new Sort(new SortField("id", SortField.Type.INT)); @@ -155,15 +156,19 @@ // (this computation is usually not redundant) StoredDocument doc1 = indexSearcher.doc(docs.scoreDocs[0].doc); String doc1Str = doc1.getField(strategy.getFieldName()).stringValue(); - Point doc1Point = (Point) ctx.readShape(doc1Str); - double doc1DistDEG = ctx.getDistCalc().distance(args.getShape().getCenter(), doc1Point); + //assume doc1Str is "x y" as written in newSampleDocument() + int spaceIdx = doc1Str.indexOf(' '); + double x = Double.parseDouble(doc1Str.substring(0, spaceIdx)); + double y = Double.parseDouble(doc1Str.substring(spaceIdx+1)); + double doc1DistDEG = ctx.calcDistance(args.getShape().getCenter(), x, y); assertEquals(121.6d, DistanceUtils.degrees2Dist(doc1DistDEG, DistanceUtils.EARTH_MEAN_RADIUS_KM), 0.1); + //or more simply: + assertEquals(121.6d, doc1DistDEG * DistanceUtils.DEG_TO_KM, 0.1); } //--Match all, order by distance ascending { Point pt = ctx.makePoint(60, -50); - double degToKm = DistanceUtils.degrees2Dist(1, DistanceUtils.EARTH_MEAN_RADIUS_KM); - ValueSource valueSource = strategy.makeDistanceValueSource(pt, degToKm);//the distance (in km) + ValueSource valueSource = strategy.makeDistanceValueSource(pt, DistanceUtils.DEG_TO_KM);//the distance (in km) Sort distSort = new Sort(valueSource.getSortField(false)).rewrite(indexSearcher);//false=asc dist TopDocs docs = indexSearcher.search(new MatchAllDocsQuery(), 10, distSort); assertDocMatchedIds(indexSearcher, docs, 4, 20, 2); @@ -178,7 +183,7 @@ { SpatialArgs args = new SpatialArgs(SpatialOperation.Intersects, ctx.makeCircle(-80.0, 33.0, 1)); - SpatialArgs args2 = new SpatialArgsParser().parse("Intersects(Circle(33,-80 d=1))", ctx); + SpatialArgs args2 = new SpatialArgsParser().parse("Intersects(BUFFER(POINT(-80 33),1))", ctx); assertEquals(args.toString(),args2.toString()); } Index: solr/core/src/java/org/apache/solr/search/function/distance/SquaredEuclideanFunction.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/search/function/distance/SquaredEuclideanFunction.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/search/function/distance/SquaredEuclideanFunction.java (revision ) @@ -18,7 +18,6 @@ import org.apache.lucene.queries.function.FunctionValues; import org.apache.lucene.queries.function.valuesource.MultiValueSource; -import com.spatial4j.core.distance.DistanceUtils; /** * While not strictly a distance, the Sq. Euclidean Distance is often all that is needed in many applications @@ -49,7 +48,7 @@ dv1.doubleVal(doc, vals1); dv2.doubleVal(doc, vals2); - return DistanceUtils.distSquaredCartesian(vals1, vals2); + return distSquaredCartesian(vals1, vals2); } @Override Index: lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/GeonamesLineParser.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/GeonamesLineParser.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/GeonamesLineParser.java (revision ) @@ -39,6 +39,8 @@ docData.setID(Integer.parseInt(parts[0]));//note: overwrites ID assigned by LineDocSource docData.setName(parts[1]); - docData.setBody(parts[4]+","+parts[5]); // latitude , longitude + String latitude = parts[4]; + String longitude = parts[5]; + docData.setBody("POINT("+longitude+" "+latitude+")");//WKT is x y order } } Index: lucene/spatial/src/test/org/apache/lucene/spatial/DistanceStrategyTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/DistanceStrategyTest.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/DistanceStrategyTest.java (revision ) @@ -93,8 +93,8 @@ adoc("103", (Shape)null);//test score for nothing commit(); //FYI distances are in docid order - checkDistValueSource("3,4", 2.8274937f, 5.0898066f, 180f); - checkDistValueSource("4,0", 3.6043684f, 0.9975641f, 180f); + checkDistValueSource(ctx.makePoint(4, 3), 2.8274937f, 5.0898066f, 180f); + checkDistValueSource(ctx.makePoint(0, 4), 3.6043684f, 0.9975641f, 180f); } @Test @@ -120,8 +120,7 @@ return super.newDoc(id, shape); } - void checkDistValueSource(String ptStr, float... distances) throws IOException { - Point pt = (Point) ctx.readShape(ptStr); + void checkDistValueSource(Point pt, float... distances) throws IOException { float multiplier = random().nextFloat() * 100f; float[] dists2 = Arrays.copyOf(distances, distances.length); for (int i = 0; i < dists2.length; i++) { Index: solr/licenses/spatial4j-0.3.jar.sha1 =================================================================== --- solr/licenses/spatial4j-0.3.jar.sha1 (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/licenses/spatial4j-0.3.jar.sha1 (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) @@ -1,1 +0,0 @@ -2fd58d1de64553db427ae4fbc1a6691adea460e2 Index: solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/search/function/distance/GeoDistValueSourceParser.java (revision ) @@ -17,9 +17,8 @@ * limitations under the License. */ +import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.distance.DistanceUtils; -import com.spatial4j.core.exception.InvalidShapeException; -import com.spatial4j.core.io.ParseUtils; import com.spatial4j.core.shape.Point; import org.apache.lucene.queries.function.ValueSource; import org.apache.lucene.queries.function.valuesource.ConstNumberSource; @@ -34,6 +33,7 @@ import org.apache.solr.search.FunctionQParser; import org.apache.solr.search.SyntaxError; import org.apache.solr.search.ValueSourceParser; +import org.apache.solr.util.SpatialUtils; import java.util.Arrays; import java.util.Collections; @@ -134,9 +134,7 @@ // note: uses Haversine by default but can be changed via distCalc=... SpatialStrategy strategy = ((SpatialStrategyMultiValueSource) mv2).strategy; Point queryPoint = strategy.getSpatialContext().makePoint(constants[1], constants[0]); - //TODO Spatial4j 0.4 will have a direct constant - double multiplier = DistanceUtils.degrees2Dist(1, DistanceUtils.EARTH_MEAN_RADIUS_KM); - return strategy.makeDistanceValueSource(queryPoint, multiplier); + return strategy.makeDistanceValueSource(queryPoint, DistanceUtils.DEG_TO_KM); } if (constants != null && other instanceof VectorValueSource) { @@ -158,15 +156,12 @@ } private MultiValueSource parsePoint(FunctionQParser fp) throws SyntaxError { - String pt = fp.getParam(SpatialParams.POINT); - if (pt == null) return null; - double[] point = null; - try { - point = ParseUtils.parseLatitudeLongitude(pt); - } catch (InvalidShapeException e) { - throw new SyntaxError("Bad spatial pt:" + pt); - } - return new VectorValueSource(Arrays.asList(new DoubleConstValueSource(point[0]), new DoubleConstValueSource(point[1]))); + String ptStr = fp.getParam(SpatialParams.POINT); + if (ptStr == null) return null; + Point point = SpatialUtils.parsePointSolrException(ptStr, SpatialContext.GEO); + //assume Lat Lon order + return new VectorValueSource( + Arrays.asList(new DoubleConstValueSource(point.getY()), new DoubleConstValueSource(point.getX()))); } private double[] getConstants(MultiValueSource vs) { Index: lucene/spatial/src/test/org/apache/lucene/spatial/prefix/TestTermQueryPrefixGridStrategy.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/prefix/TestTermQueryPrefixGridStrategy.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/prefix/TestTermQueryPrefixGridStrategy.java (revision ) @@ -46,7 +46,7 @@ for (Field field : prefixGridStrategy.createIndexableFields(point)) { losAngeles.add(field); } - losAngeles.add(new StoredField(prefixGridStrategy.getFieldName(), ctx.toString(point))); + losAngeles.add(new StoredField(prefixGridStrategy.getFieldName(), point.toString()));//just for diagnostics addDocumentsAndCommit(Arrays.asList(losAngeles)); Index: lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialFileQueryMaker.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialFileQueryMaker.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialFileQueryMaker.java (revision ) @@ -36,7 +36,7 @@ /** * Reads spatial data from the body field docs from an internally created {@link LineDocSource}. - * It's parsed by {@link com.spatial4j.core.context.SpatialContext#readShape(String)} and then + * It's parsed by {@link com.spatial4j.core.context.SpatialContext#readShapeFromWkt(String)} (String)} and then * further manipulated via a configurable {@link SpatialDocMaker.ShapeConverter}. When using point * data, it's likely you'll want to configure the shape converter so that the query shapes actually * cover a region. The queries are all created & cached in advance. This query maker works in Index: lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialDocMaker.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialDocMaker.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/benchmark/src/java/org/apache/lucene/benchmark/byTask/feeds/SpatialDocMaker.java (revision ) @@ -190,7 +190,7 @@ public static Shape makeShapeFromString(SpatialStrategy strategy, String name, String shapeStr) { if (shapeStr != null && shapeStr.length() > 0) { try { - return strategy.getSpatialContext().readShape(shapeStr); + return strategy.getSpatialContext().readShapeFromWkt(shapeStr); } catch (Exception e) {//InvalidShapeException TODO System.err.println("Shape "+name+" wasn't parseable: "+e+" (skipping it)"); return null; Index: lucene/licenses/spatial4j-NOTICE.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/licenses/spatial4j-NOTICE.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/licenses/spatial4j-NOTICE.txt (revision ) @@ -1,5 +1,5 @@ -Apache Commons Lang -Copyright 2001-2008 The Apache Software Foundation +Spatial4j +Copyright 2012-2014 The Apache Software Foundation This product includes software developed by The Apache Software Foundation (http://www.apache.org/). Index: lucene/benchmark/build.xml IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/benchmark/build.xml (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/benchmark/build.xml (revision ) @@ -67,7 +67,7 @@ - + Index: lucene/spatial/src/test-files/data/world-cities-points.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/data/world-cities-points.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/data/world-cities-points.txt (revision ) @@ -1,2680 +1,2680 @@ #id name shape -G292223 Dubai 55.280000 25.252220 -G292672 Sharjah 55.391110 25.362220 -G292913 Al ‘Ayn 55.760560 24.191670 -G292932 `Ajmān 55.435040 25.411110 -G292968 Abu Dhabi 54.366670 24.466670 -G1133616 Mazār-e Sharīf 67.110870 36.709040 -G1135689 Kunduz 68.857000 36.728960 -G1138336 Kandahār 65.710130 31.613320 -G1138958 Kabul 69.172330 34.528130 -G1139715 Jalālābād 70.451530 34.426470 -G1140026 Herāt 62.199670 34.348170 -G3183875 Tirana 19.818890 41.327500 -G616052 Yerevan 44.513610 40.181110 -G2240449 Luanda 13.234440 -8.838330 -G3347939 Lobito 13.545560 -12.348060 -G3348313 Huambo 15.739170 -12.776110 -G3351663 Benguela 13.407220 -12.578330 -G3429577 Resistencia -58.983330 -27.450000 -G3429652 Quilmes -58.269440 -34.720280 -G3429886 Posadas -55.883330 -27.383330 -G3430863 Mar del Plata -57.550000 -38.000000 -G3432043 La Plata -57.948890 -34.931390 -G3433899 Formosa -58.183330 -26.183330 -G3435217 Corrientes -58.833330 -27.466670 -G3435910 Buenos Aires -58.377230 -34.613150 -G3835869 Santiago del Estero -64.266670 -27.783330 -G3836277 Santa Fe de la Vera Cruz -60.700000 -31.633330 -G3836564 San Salvador de Jujuy -65.300000 -24.183330 -G3836873 San Miguel de Tucumán -65.216670 -26.816670 -G3837056 San Luis -66.350000 -33.300000 -G3837213 San Juan -68.536390 -31.537500 -G3837702 San Fernando del Valle de Catamarca -65.783330 -28.466670 -G3838233 Salta -65.416670 -24.783330 -G3838583 Rosario -60.666390 -32.951110 -G3838874 Río Cuarto -64.350000 -33.133330 -G3841956 Paraná -60.533330 -31.733330 -G3843123 Neuquén -68.066670 -38.950000 -G3844421 Mendoza -68.816670 -32.883330 -G3848950 La Rioja -66.850000 -29.433330 -G3860259 Córdoba -64.183330 -31.400000 -G3865086 Bahía Blanca -62.283330 -38.716670 -G2761369 Vienna 16.372080 48.208490 -G2766824 Salzburg 13.043990 47.799410 -G2772400 Linz 14.286110 48.306390 -G2778067 Graz 15.450000 47.066670 -G7279909 Linz-Wels-Steyr 14.183690 48.154580 -G2063523 Perth 115.833330 -31.933330 -G2078025 Adelaide 138.600000 -34.933330 -G2147714 Sydney 151.207320 -33.867850 -G2155472 Newcastle 151.776470 -32.927150 -G2158177 Melbourne 144.963320 -37.814000 -G2165087 Gold Coast 153.433330 -28.000000 -G2165796 Geelong West 144.350000 -38.133330 -G2165798 Geelong 144.360690 -38.147110 -G2171507 Wollongong 150.883330 -34.433330 -G2172517 Canberra 149.128070 -35.283460 -G2172797 Cairns 145.766670 -16.916670 -G2174003 Brisbane 153.028090 -27.467940 -G7280463 North Shore 152.901850 -31.402370 -G7281838 Logan City 153.109440 -27.639170 -G584923 Sumqayıt 49.668610 40.589720 -G586523 Kirowabad 46.360560 40.682780 -G587084 Baku 49.892010 40.377670 -G3186573 Zenica 17.906390 44.201390 -G3191281 Sarajevo 18.356440 43.848640 -G3204541 Banja Luka 17.185560 44.775830 -G1185098 Tungi 90.405830 23.890000 -G1185099 Sylhet 91.871670 24.896670 -G1185106 Jamālpur 89.933330 24.916670 -G1185117 Narsingdi 90.718060 23.920830 -G1185128 Rājshāhi 88.600000 24.366670 -G1185155 Nārāyanganj 90.501110 23.623330 -G1185162 Mymensingh 90.400000 24.750000 -G1185186 Comilla 91.204440 23.457780 -G1185188 Rangpur 89.250000 25.750000 -G1185241 Dhaka 90.407440 23.710400 -G1192366 Pār Naogaon 88.950840 24.802870 -G1203891 Dinājpur 88.638640 25.627150 -G1205733 Chittagong 91.836390 22.333060 -G1336134 Cox’s Bāzār 91.979770 21.453240 -G1336135 Khulna 89.567230 22.813480 -G1336137 Barisāl 90.371110 22.701940 -G1336140 Jessore 89.213150 23.168690 -G1336144 Tāngāil 89.916670 24.250000 -G1337233 Bogra 89.366670 24.850000 -G6545349 Saidpur 88.891690 25.777690 -G2792413 Liège 5.567490 50.633730 -G2797656 Gent 3.716670 51.050000 -G2800481 Charleroi 4.452480 50.409470 -G2800866 Brussels 4.348780 50.850450 -G2803138 Antwerpen 4.403460 51.219890 -G2357048 Ouagadougou -1.538340 12.364230 -G2362344 Bobo-Dioulasso -4.297900 11.177150 -G726050 Varna 27.916670 43.216670 -G727011 Sofia 23.324150 42.697510 -G727523 Ruse 25.970830 43.856390 -G728193 Plovdiv 24.750000 42.150000 -G732770 Burgas 27.467810 42.506060 -G425378 Bujumbura 29.364400 -3.382200 -G2392087 Porto-Novo 2.603590 6.496460 -G2392204 Parakou 2.616670 9.350000 -G2394560 Djougou 1.666940 9.705000 -G2394819 Cotonou 2.433330 6.350000 -G2395914 Abomey-Calavi 2.350000 6.450000 -G3903320 Tarija -64.729560 -21.535490 -G3903987 Sucre -65.262740 -19.033320 -G3904906 Santa Cruz de la Sierra -63.166670 -17.800000 -G3909234 Oruro -67.150000 -17.983330 -G3911925 La Paz -68.150000 -16.500000 -G3919968 Cochabamba -66.156800 -17.389500 -G3386496 Teresina -42.801940 -5.089170 -G3387296 Sobral -40.349720 -3.686110 -G3388368 São Luís -44.302780 -2.529720 -G3389353 Santarém -54.708330 -2.443060 -G3390760 Recife -34.881110 -8.053890 -G3392242 Petrolina -40.500830 -9.398610 -G3392740 Paulista -34.873060 -7.940830 -G3392998 Parnamirim -35.262780 -5.915560 -G3393536 Olinda -34.855280 -8.008890 -G3394023 Natal -35.209440 -5.795000 -G3394682 Mossoró -37.344170 -5.187500 -G3395473 Maracanaú -38.625560 -3.876670 -G3395981 Maceió -35.735280 -9.665830 -G3396016 Macapá -51.066390 0.038890 -G3397147 Juazeiro do Norte -39.315280 -7.213060 -G3397277 João Pessoa -34.863060 -7.115000 -G3397838 Jaboatão -35.001390 -8.180280 -G3398269 Imperatriz -47.491670 -5.526390 -G3399415 Fortaleza -38.543060 -3.717220 -G3402429 Caucaia -38.653060 -3.736110 -G3402655 Caruaru -35.976110 -8.283330 -G3403642 Campina Grande -35.881110 -7.230560 -G3405870 Belém -48.504440 -1.455830 -G3407327 Arapiraca -36.661110 -9.752500 -G3407669 Ananindeua -48.372220 -1.365560 -G3444876 Volta Redonda -44.104170 -22.523060 -G3444914 Vitória da Conquista -40.839440 -14.866110 -G3444924 Vitória -40.337780 -20.319440 -G3445026 Vila Velha -40.292500 -20.329720 -G3445156 Viamão -51.023330 -30.081110 -G3445451 Várzea Grande -56.132500 -15.646670 -G3445831 Uberlândia -48.277220 -18.918610 -G3445839 Uberaba -47.931940 -19.748330 -G3446682 Taubaté -45.555280 -23.026390 -G3447186 Taboão da Serra -46.791670 -23.626110 -G3447212 Suzano -46.310830 -23.542500 -G3447259 Sumaré -47.266940 -22.821940 -G3447399 Sorocaba -47.458060 -23.501670 -G3447624 Sete Lagoas -44.246670 -19.465830 -G3447779 Serra -40.307780 -20.128610 -G3448136 São Vicente -46.391940 -23.963060 -G3448439 São Paulo -46.636110 -23.547500 -G3448622 São Leopoldo -51.147220 -29.760280 -G3448636 São José dos Campos -45.886940 -23.179440 -G3448639 São José do Rio Preto -49.379440 -20.819720 -G3448742 São José -49.166670 -28.233330 -G3448877 São João de Meriti -43.372220 -22.803890 -G3449319 São Carlos -47.890830 -22.017500 -G3449344 São Bernardo do Campo -46.565000 -23.693890 -G3449433 Santos -46.333610 -23.960830 -G3449701 Santo André -46.538330 -23.663890 -G3450083 Santa Maria -53.806940 -29.684170 -G3450144 Santa Luzia -43.851390 -19.769720 -G3450404 Santa Bárbara d'Oeste -47.413610 -22.753610 -G3450554 Salvador -38.510830 -12.971110 -G3450909 Rondonópolis -54.635560 -16.470830 -G3451138 Rio Grande -52.098610 -32.035000 -G3451190 Rio de Janeiro -43.207500 -22.902780 -G3451234 Rio Claro -47.561390 -22.411390 -G3451328 Ribeirão Preto -47.810280 -21.177500 -G3451353 Ribeirão das Neves -44.086670 -19.766940 -G3452324 Presidente Prudente -51.388890 -22.125560 -G3452465 Praia Grande -46.402780 -24.005830 -G3452925 Porto Alegre -51.230000 -30.033060 -G3453186 Ponta Grossa -50.161940 -25.095000 -G3453643 Piracicaba -47.649170 -22.725280 -G3454031 Petrópolis -43.178610 -22.505000 -G3454244 Pelotas -52.342500 -31.771940 -G3454857 Passo Fundo -52.406670 -28.262780 -G3455775 Osasco -46.791670 -23.532500 -G3456068 Novo Hamburgo -51.130560 -29.678330 -G3456160 Nova Iguaçu -43.451110 -22.759170 -G3456166 Nova Friburgo -42.531110 -22.281940 -G3456223 Nossa Senhora do Socorro -37.126110 -10.855000 -G3456283 Niterói -43.103610 -22.883330 -G3456814 Montes Claros -43.861670 -16.735000 -G3457001 Mogi das Cruzes -46.188330 -23.522780 -G3457381 Mauá -46.461390 -23.667780 -G3457671 Maringá -51.938610 -23.425280 -G3457692 Marília -49.945830 -22.213890 -G3458449 Londrina -51.162780 -23.310280 -G3458575 Limeira -47.401670 -22.564720 -G3458930 Lages -50.326110 -27.816110 -G3459462 Jundiaí -46.884170 -23.186390 -G3459505 Juiz de Fora -43.350280 -21.764170 -G3459712 Joinville -48.845560 -26.304440 -G3460370 Jacareí -45.965830 -23.305280 -G3460644 Itaquaquecetuba -46.348330 -23.486110 -G3460718 Itapevi -46.934170 -23.548890 -G3460748 Itapecerica da Serra -46.849170 -23.716940 -G3460845 Itajaí -48.661940 -26.907780 -G3460949 Itabuna -39.280280 -14.785560 -G3460950 Itaboraí -42.859440 -22.744440 -G3461144 Ipatinga -42.536670 -19.468330 -G3461311 Indaiatuba -47.218060 -23.090280 -G3461408 Ilhéus -39.049440 -14.788890 -G3461655 Hortolândia -47.220000 -22.858330 -G3461786 Guarulhos -46.533330 -23.462780 -G3461789 Guarujá -46.256390 -23.993060 -G3461879 Guarapuava -51.458060 -25.395280 -G3462089 Gravataí -50.991940 -29.944440 -G3462315 Governador Valadares -41.949440 -18.851110 -G3462377 Goiânia -49.253890 -16.678610 -G3462980 Francisco Morato -46.745280 -23.281670 -G3463011 Franca -47.400830 -20.538610 -G3463030 Foz do Iguaçu -54.588060 -25.547780 -G3463237 Florianópolis -48.549170 -27.596670 -G3463422 Ferraz de Vasconcelos -46.368610 -23.540830 -G3463478 Feira de Santana -38.966670 -12.266670 -G3464305 Embu -46.852220 -23.648890 -G3464374 Duque de Caxias -43.311670 -22.785560 -G3464460 Dourados -54.805560 -22.221110 -G3464688 Divinópolis -44.883890 -20.138890 -G3464739 Diadema -46.622780 -23.686110 -G3464975 Curitiba -49.273060 -25.427780 -G3465038 Cuiabá -56.096670 -15.596110 -G3465196 Criciúma -49.369720 -28.677500 -G3465284 Cotia -46.919170 -23.603890 -G3465624 Contagem -44.053610 -19.931670 -G3465927 Colombo -49.224170 -25.291670 -G3466296 Chapecó -52.618330 -27.096390 -G3466537 Caxias do Sul -51.179440 -29.168060 -G3466779 Cascavel -53.455280 -24.955830 -G3466998 Carapicuíba -46.835560 -23.522500 -G3467467 Canoas -51.183610 -29.917780 -G3467693 Campos -41.300000 -21.750000 -G3467747 Campo Grande -54.646390 -20.442780 -G3467865 Campinas -47.060830 -22.905560 -G3468031 Camaçari -38.324170 -12.697500 -G3468376 Cachoeiro de Itapemirim -41.112780 -20.848890 -G3469058 Brasília -47.929720 -15.779720 -G3469968 Blumenau -49.066110 -26.919440 -G3470044 Betim -44.198330 -19.967780 -G3470127 Belo Horizonte -43.937780 -19.920830 -G3470142 Belford Roxo -43.399440 -22.764170 -G3470279 Bauru -49.060560 -22.314720 -G3470353 Barueri -46.876110 -23.510560 -G3470583 Barreiras -44.990000 -12.152780 -G3470636 Barra Mansa -44.171390 -22.544170 -G3471766 Araraquara -48.175560 -21.794440 -G3471859 Araçatuba -50.432780 -21.208890 -G3471872 Aracaju -37.071670 -10.911110 -G3472177 Angra dos Reis -44.318060 -23.006670 -G3472287 Anápolis -48.952780 -16.326670 -G3472343 Americana -47.331390 -22.739170 -G3474574 Palmas -48.360280 -10.212780 -G3662574 Rio Branco -67.810000 -9.974720 -G3662762 Porto Velho -63.903890 -8.761940 -G3663517 Manaus -60.025000 -3.101940 -G3664980 Boa Vista -60.673330 2.819720 -G6316406 Aparecida de Goiânia -49.243890 -16.823330 -G6317344 Jaboatão dos Guararapes -35.014720 -8.112780 -G3571824 Nassau -77.343060 25.058230 -G933773 Gaborone 25.908590 -24.654510 -G620127 Vitsyebsk 30.194440 55.192500 -G625144 Minsk 27.566670 53.900000 -G625665 Mahilyow 30.336390 53.913890 -G627904 Hrodna 23.814720 53.681390 -G627907 Homyel’ 30.983330 52.441670 -G629634 Brest 23.700000 52.100000 -G630429 Baranavichy 26.033330 53.133330 -G630468 Babruysk 29.233330 53.150000 -G5881791 Abbotsford -122.252570 49.057980 -G5894171 Barrie -79.666340 44.400110 -G5907364 Brampton -79.766330 43.683410 -G5911592 Burlington -79.837130 43.386210 -G5911606 Burnaby -122.952630 49.266360 -G5913490 Calgary -114.085290 51.050110 -G5946768 Edmonton -113.468710 53.550140 -G5959974 Gatineau -75.701640 45.477230 -G5964700 Greater Sudbury -80.990010 46.490000 -G5969785 Hamilton -79.949640 43.233410 -G5992996 Kitchener -80.482990 43.450100 -G6050610 Laval -73.692000 45.569950 -G6058560 London -81.233040 42.983390 -G6059891 Longueuil -73.518060 45.531210 -G6075357 Mississauga -79.658300 43.578900 -G6077243 Montréal -73.587810 45.508840 -G6091104 North York -79.416300 43.766810 -G6094578 Oshawa -78.849570 43.900120 -G6094817 Ottawa -75.698120 45.411170 -G6119109 Regina -104.617800 50.450080 -G6122085 Richmond -123.136830 49.170030 -G6141256 Saskatoon -106.634520 52.116790 -G6159905 Surrey -122.825090 49.106350 -G6167865 Toronto -79.416300 43.700110 -G6173331 Vancouver -123.119340 49.249660 -G6173577 Vaughan -79.532910 43.833410 -G6174041 Victoria -123.369300 48.432940 -G6182962 Windsor -83.016540 42.300080 -G6183235 Winnipeg -97.147040 49.884400 -G6324729 Halifax -63.572390 44.645330 -G6325494 Québec -71.214540 46.812280 -G7602078 Ladner -123.082410 49.089380 -G204405 Uvira 29.145830 -3.406670 -G204953 Tshikapa 20.800000 -6.416670 -G207570 Mwene-Ditu 23.450000 -7.000000 -G209228 Mbuji-Mayi 23.600000 -6.150000 -G212730 Kisangani 25.200000 0.516670 -G214481 Kananga 22.417780 -5.895830 -G216449 Gandajika 23.950000 -6.750000 -G217562 Butembo 29.283330 0.150000 -G217831 Bukavu 28.860830 -2.508330 -G922704 Lubumbashi 27.466670 -11.666670 -G922741 Likasi 26.733330 -10.981390 -G922773 Kolwezi 25.472500 -10.716670 -G2312895 Mbandaka 18.266670 0.066670 -G2313002 Matadi 13.450000 -5.816670 -G2314302 Kinshasa 15.321460 -4.324590 -G2314705 Kikwit 18.818060 -5.038610 -G2593460 Masina 15.391390 -4.383610 -G2389853 Bangui 18.554960 4.361220 -G2255414 Pointe-Noire 11.846110 -4.794720 -G2260535 Brazzaville 15.283270 -4.266900 -G2657896 Zürich 8.550000 47.366670 -G2660646 Genève 6.145690 46.202220 -G2661604 Basel 7.600000 47.566670 -G2279755 Yamoussoukro -5.283330 6.816670 -G2282006 San-Pédro -6.616670 4.733330 -G2286304 Korhogo -5.633330 9.450000 -G2290486 Daloa -6.451940 6.874720 -G2290956 Bouaké -5.033060 7.683330 -G2293521 Abobo -4.020560 5.418890 -G2293538 Abidjan -4.028060 5.341110 -G3868121 Viña del Mar -71.551830 -33.024570 -G3868626 Valparaíso -71.627250 -33.039320 -G3870011 Temuco -72.600000 -38.733330 -G3870282 Talcahuano -73.116670 -36.716670 -G3870294 Talca -71.666670 -35.433330 -G3871336 Santiago -70.566560 -33.426280 -G3872348 San Bernardo -70.716670 -33.600000 -G3873775 Rancagua -70.744440 -34.170830 -G3874960 Puerto Montt -72.936940 -41.471670 -G3875024 Puente Alto -70.583330 -33.616670 -G3884373 La Serena -71.254170 -29.907780 -G3887127 Iquique -70.143060 -20.220830 -G3893629 Coquimbo -71.343610 -29.953330 -G3893894 Concepción -73.049770 -36.826990 -G3895088 Chillán -72.103440 -36.606640 -G3899361 Arica -70.304170 -18.475000 -G3899539 Antofagasta -70.400000 -23.650000 -G7281017 La Pintana -70.634190 -33.583310 -G2220957 Yaoundé 11.516670 3.866670 -G2224827 Ngaoundéré 13.583330 7.316670 -G2226275 Mokolo 13.801880 10.739780 -G2228373 Maroua 14.315920 10.590950 -G2229152 Loum 9.735100 4.718200 -G2229798 Kousséri 15.030630 12.076890 -G2231320 Garoua 13.400000 9.300000 -G2232239 Edéa 10.133330 3.800000 -G2232593 Douala 9.708400 4.046900 -G2234359 Bertoua 13.683330 4.583330 -G2234974 Bamenda 10.158240 5.952660 -G2235189 Bafoussam 10.417860 5.473660 -G1280849 Kashi 75.979720 39.454720 -G1529102 Urunchi 87.583330 43.800000 -G1529114 Turpan 89.166670 42.933330 -G1529195 Shihezi 86.033330 44.300000 -G1529376 Korla 86.146940 41.759720 -G1529569 Changji 87.316670 44.016670 -G1529641 Aral 81.263610 40.515560 -G1529660 Aksu 80.264440 41.123060 -G1783621 Zunyi 106.907220 27.686670 -G1783633 Zoucheng 116.965560 35.400560 -G1783745 Zigong 104.776890 29.341620 -G1783763 Zhuzhou 113.150000 27.833330 -G1783873 Zhumadian 114.029440 32.979440 -G1783934 Shangqiu 115.650000 34.450000 -G1784130 Zhoukou 114.633330 33.633330 -G1784554 Zhicheng 111.504720 30.295560 -G1784580 Yizheng 119.178890 32.269170 -G1784642 Zhenjiang 119.434170 32.209170 -G1784658 Zhengzhou 113.648610 34.757780 -G1784853 Zhaoqing 112.459720 23.051160 -G1784990 Zhanjiang 110.342710 21.281450 -G1785018 Zhangzhou 117.655560 24.513330 -G1785286 Zibo 118.063330 36.790560 -G1785294 Anyang 114.328890 36.099440 -G1785453 Zaozhuang 117.554170 34.864720 -G1785462 Zaoyang 112.754170 32.127220 -G1785725 Yunfu 112.037300 22.930560 -G1785738 Yuncheng 110.992780 35.023060 -G1785974 Yuci 112.731940 37.680280 -G1786067 Yuanlin 112.885950 30.415130 -G1786640 Yingcheng 113.550000 30.950000 -G1786657 Yinchuan 106.273060 38.468060 -G1786746 Yichun 114.400000 27.833330 -G1786764 Yichang 111.284720 30.714440 -G1786770 Yibin 104.623830 28.766670 -G1787093 Yantai 121.400000 37.533330 -G1787227 Yangzhou 119.435830 32.397220 -G1787323 Yangshuo 110.489670 24.780810 -G1787351 Yangquan 113.563330 37.857500 -G1787746 Yancheng 120.125280 33.385560 -G1787824 Tongshan 117.157070 34.180450 -G1787858 Xuri 117.966670 28.466670 -G1788046 Xuchang 113.816670 34.016670 -G1788450 Xinzhou 112.733330 38.409170 -G1788534 Xinyang 114.065560 32.122780 -G1788572 Xinxiang 113.867220 35.308890 -G1788618 Xintai 117.751940 35.900560 -G1788694 Xinpu 119.159440 34.599720 -G1788852 Xining 101.766670 36.616670 -G1788927 Xingtai 114.494170 37.063060 -G1789137 Xindi 113.466670 29.816670 -G1789273 Sanshui 112.891610 23.154860 -G1790254 Xiaogan 113.900000 30.916670 -G1790353 Xianyang 108.702610 34.337780 -G1790371 Xiantao 113.400000 30.383330 -G1790396 Xianning 114.216670 29.883330 -G1790437 Zhuhai 113.567780 22.276940 -G1790492 Xiangtan 112.900000 27.850000 -G1790587 Xiangfan 112.145000 32.041670 -G1790630 Xi’an 108.928610 34.258330 -G1790645 Xiamen 118.081870 24.479790 -G1790840 Wuzhou 111.316670 23.483330 -G1790894 Wuxue 115.552500 29.850580 -G1790923 Wuxi 120.288570 31.568870 -G1791121 Changde 111.678060 29.032220 -G1791236 Wuhu 118.375480 31.336570 -G1791247 Wuhan 114.266670 30.583330 -G1791249 Wuhai 106.812220 39.664720 -G1791388 Wenzhou 120.666820 27.999420 -G1791636 Weinan 109.508910 34.503550 -G1791673 Weihai 122.113610 37.501670 -G1791681 Weifang 119.101940 36.710000 -G1791748 Wanxian 108.389720 30.803890 -G1792260 Wafangdian 122.008060 39.618330 -G1792520 Tongzhou 116.599440 39.905280 -G1792621 Wusong 117.783330 30.950000 -G1792947 Tianjin 117.176670 39.142220 -G1793346 Tangshan 118.183330 39.633330 -G1793424 Tanggu 117.646940 39.021110 -G1793505 Taizhou 119.910630 32.493330 -G1793511 Taiyuan 112.560280 37.869440 -G1793724 Tai’an 117.120000 36.185280 -G1793743 Suzhou 116.978890 33.636110 -G1793879 Suizhou 113.363060 31.711110 -G1794903 Shiyan 110.778060 32.647500 -G1794904 Shiyan 110.783330 32.566670 -G1795060 Shiqi 113.385210 22.516820 -G1795196 Tongchuan 109.089720 35.080560 -G1795270 Shijiazhuang 114.478610 38.041390 -G1795565 Shenzhen 114.068300 22.545540 -G1795816 Shashi 112.244720 30.307220 -G1795855 Shaoxing 120.581110 30.001670 -G1795874 Shaoguan 113.583330 24.800000 -G1795928 Shanwei 115.347500 22.781990 -G1795940 Shantou 116.714790 23.368140 -G1796236 Shanghai 121.458060 31.222220 -G1796663 Sanming 117.618610 26.248610 -G1797121 Jieyang 116.364160 23.528860 -G1797132 Rizhao 119.455280 35.427500 -G1797353 Quanzhou 118.585830 24.913890 -G1797595 Qinhuangdao 119.588330 39.931670 -G1797873 Huaiyin 119.019170 33.588610 -G1797929 Qingdao 120.371940 36.098610 -G1797945 Qingyuan 113.033330 23.700000 -G1798422 Puyang 115.005280 35.702780 -G1798425 Puyang 119.886110 29.460280 -G1798449 Putian 119.010280 25.439440 -G1798654 Pingxiang 113.850000 27.616670 -G1798827 Pingdingshan 113.301190 33.738470 -G1798998 Dadukou 101.705390 26.547900 -G1799397 Ningbo 121.549450 29.878190 -G1799491 Neijiang 105.062160 29.583540 -G1799629 Nanyang 112.532780 32.994720 -G1799722 Nantong 120.874720 32.030280 -G1799846 Nanping 118.173610 26.645000 -G1799869 Nanning 108.316670 22.816670 -G1799962 Nanjing 118.777780 32.061670 -G1800146 Nanchong 106.084740 30.795080 -G1800163 Nanchang 115.883330 28.683330 -G1800627 Mianyang 104.754240 31.459340 -G1800657 Mentougou 116.091670 39.939170 -G1801757 Luqiao 121.377150 28.580840 -G1801792 Luoyang 112.453610 34.683610 -G1801934 Luohe 114.035280 33.571670 -G1802204 Luancheng 114.651670 37.879170 -G1802238 Loudi 111.994440 27.734440 -G1802875 Liuyang 113.633330 28.150000 -G1803318 Linyi 118.342780 35.063060 -G1803331 Linxia 103.206390 35.600280 -G1803422 Linhai 121.116670 28.850000 -G1803567 Linfen 111.518890 36.088890 -G1803791 Licheng 113.828360 23.295540 -G1803834 Liaocheng 115.964720 36.443890 -G1804153 Leshan 103.763860 29.562280 -G1804386 Laohekou 111.667780 32.385830 -G1804430 Lanzhou 103.792220 36.056390 -G1804540 Langfang 116.694720 39.509720 -G1804586 Laiyang 120.713610 36.975830 -G1804651 Kunming 102.718330 25.038890 -G1804850 Kaiyuan 103.303720 23.697670 -G1804879 Kaifeng 114.348330 34.791110 -G1805179 Jiujiang 115.983330 29.733330 -G1805298 Jinzhou 121.716670 39.100000 -G1805518 Jining 116.581390 35.405000 -G1805540 Jingzhou 112.190280 30.350280 -G1805611 Jingmen 112.204720 31.033610 -G1805618 Jingling 113.100000 30.650000 -G1805680 Jingdezhen 117.207890 29.294700 -G1805741 Jincheng 112.832780 35.502220 -G1805753 Jinan 116.997220 36.668330 -G1805953 Jiaxing 120.748330 30.765560 -G1805987 Jiaozuo 113.233060 35.239720 -G1806096 Jiaozhou 120.003330 36.283890 -G1806299 Jiangmen 113.083330 22.583330 -G1806408 Yangjiang 111.966670 21.850000 -G1806445 Ji’an 114.979270 27.117160 -G1806466 Guangyuan 105.823000 32.442020 -G1806535 Huzhou 120.096390 30.866110 -G1806696 Humen 113.673060 22.818980 -G1806776 Huizhou 114.400000 23.083330 -G1806882 Xinhui 113.048200 22.456000 -G1807143 Huangyan 121.259440 28.647780 -G1807234 Huangshi 115.100000 30.216670 -G1807508 Huanggang 116.999610 23.677040 -G1807681 Huainan 116.996940 32.626390 -G1807700 Huaibei 116.791670 33.974440 -G1808198 Heze 115.441110 35.243060 -G1808316 Yiyang 112.328330 28.589170 -G1808370 Hengyang 112.615000 26.888060 -G1808392 Hengshui 115.701110 37.732220 -G1808722 Hefei 117.280830 31.863890 -G1808770 Hebi 114.192500 35.899170 -G1808926 Hangzhou 120.168890 30.255280 -G1808931 Hangu 117.789170 39.248890 -G1808963 Handan 114.467780 36.600560 -G1809061 Jiaojiang 121.442780 28.680280 -G1809078 Haikou 110.341670 20.045830 -G1809412 Guli 120.033330 28.883330 -G1809461 Guiyang 106.716670 26.583330 -G1809498 Guilin 110.286390 25.281940 -G1809858 Guangzhou 113.250000 23.116670 -G1809879 Guangshui 113.997800 31.619900 -G1810295 Gaozhou 110.846070 21.939240 -G1810437 Gaoping 106.102940 30.775760 -G1810458 Gaomi 119.752780 36.383330 -G1810821 Fuzhou 119.306110 26.061390 -G1810845 Fuyang 115.816670 32.900000 -G1810979 Fuling 107.391940 29.702220 -G1811103 Foshan 113.131480 23.026770 -G1811619 Ezhou 114.833330 30.400000 -G1812101 Dongying 118.485560 37.456390 -G1812521 Donghai 115.642040 22.945940 -G1812545 Dongguan 113.744720 23.048890 -G1812728 Dingzhou 114.995560 38.513060 -G1812955 Dezhou 116.292500 37.448610 -G1812961 Deyang 104.381980 31.130190 -G1813253 Dayan 100.220720 26.868790 -G1814082 Daliang 113.247010 22.850420 -G1814087 Dalian 121.602220 38.912220 -G1814757 Chuzhou 118.297780 32.321940 -G1814786 Yangchun 111.783330 22.166670 -G1814906 Chongqing 106.552780 29.562780 -G1815059 Chenzhou 113.033330 25.800000 -G1815286 Chengdu 104.066670 30.666670 -G1815302 Chenghua 116.770070 23.461320 -G1815395 Chaozhou 116.637860 23.665130 -G1815456 Changzhou 119.966670 31.783330 -G1815463 Changzhi 111.738610 35.208890 -G1815577 Changsha 112.966670 28.200000 -G1816080 Cangzhou 116.866670 38.316670 -G1816234 Bozhou 115.770280 33.877220 -G1816265 Boshan 117.833330 36.483330 -G1816440 Bengbu 117.360830 32.940830 -G1816670 Beijing 116.397230 39.907500 -G1816705 Beihai 109.100000 21.483330 -G1816971 Baoding 115.490280 38.851110 -G1817240 Baiyin 104.208060 36.558330 -G1817720 Shangyu 120.871110 30.015560 -G1817968 Anshun 105.933330 26.250000 -G1817993 Anqing 117.050560 30.509170 -G1818116 Anbu 116.680920 23.448950 -G1886760 Suzhou 120.618060 31.311390 -G1915223 Zhongshan 110.582910 21.322560 -G1919014 Lianghu 120.898450 29.991520 -G1927639 Yueyang 113.091940 29.333330 -G2033168 Zhaodong 125.983330 46.083330 -G2033196 Zhangjiakou 114.879440 40.810000 -G2033370 Yingkou 122.224720 40.668060 -G2033413 Yichun 128.900000 47.700000 -G2033467 Yanji 129.507780 42.907500 -G2033574 Xuanhua 115.044720 40.610280 -G2034312 Ulan Hot 122.083330 46.083330 -G2034400 Tongliao 122.265280 43.612500 -G2034439 Tieling 123.841390 42.293060 -G2034655 Suihua 126.996940 46.640560 -G2034714 Siping 124.368610 43.163330 -G2034786 Shuangyashan 131.153890 46.636110 -G2034937 Shenyang 123.432780 41.792220 -G2035225 Ranghulu 124.866670 46.650000 -G2035261 Qitaihe 130.850000 45.800000 -G2035265 Qiqihar 123.967220 47.340830 -G2035513 Panshan 122.049440 41.188060 -G2035644 Nanpiao 120.747920 41.098220 -G2035715 Mudanjiang 129.600000 44.583330 -G2035980 Longfeng 125.116670 46.550000 -G2036109 Liaoyuan 125.135830 42.903610 -G2036113 Liaoyang 123.173060 41.271940 -G2036389 Jixi 130.966670 45.300000 -G2036401 Jiutai 125.832780 44.152500 -G2036427 Jinzhou 121.141670 41.107780 -G2036434 Lianshan 120.853270 40.764320 -G2036458 Jining 113.105830 41.027500 -G2036502 Jilin 126.560280 43.850830 -G2036581 Jiamusi 130.350000 46.833330 -G2036670 Hulan Ergi 123.633330 47.204170 -G2036892 Hohhot 111.652220 40.810560 -G2036920 Hengshan 130.916670 45.200000 -G2036986 Hegang 130.366670 47.400000 -G2037013 Harbin 126.650000 45.750000 -G2037078 Hailar 119.700000 49.200000 -G2037086 Haicheng 122.741670 40.851940 -G2037346 Fuxin 121.658890 42.015560 -G2037355 Fushun 123.923330 41.855830 -G2037620 Dongling 123.575830 41.814440 -G2037799 Datong 113.291390 40.093610 -G2037860 Daqing 125.000000 46.583330 -G2037886 Dandong 124.394720 40.129170 -G2038067 Chifeng 118.963610 42.268330 -G2038087 Chengde 117.936110 40.972500 -G2038120 Chaoyang 120.458610 41.570280 -G2038180 Changchun 125.322780 43.880000 -G2038300 Benxi 123.765000 41.288610 -G2038342 Beipiao 120.779170 41.791940 -G2038432 Baotou 109.822220 40.652220 -G2038569 Baicheng 122.816670 45.616670 -G2038584 Baishan 126.428610 41.943060 -G2038632 Anshan 122.990000 41.123610 -G2038650 Anda 125.316670 46.400000 -G7158935 东海岛 110.396130 21.024480 -G7283386 Changshu City 120.742210 31.646150 -G7304020 Fenghuang 109.599610 27.935570 -G7602670 Zhu Cheng City 119.402590 35.995020 -G3665900 Villavicencio -73.626640 4.142000 -G3666304 Valledupar -73.250560 10.476940 -G3666645 Tuluá -76.200000 4.086670 -G3667849 Soledad -74.766670 10.917220 -G3667905 Soacha -74.221390 4.587220 -G3667983 Sincelejo -75.397780 9.304720 -G3668605 Santa Marta -74.201670 11.247220 -G3671916 Popayán -76.613160 2.438230 -G3672486 Pereira -75.696110 4.813330 -G3672778 Pasto -77.281110 1.213610 -G3673164 Palmira -76.303610 3.539440 -G3673899 Neiva -75.281880 2.927300 -G3674453 Montería -75.890000 8.757500 -G3674962 Medellín -75.536110 6.291390 -G3675443 Manizales -75.520560 5.070000 -G3680450 Itagüí -75.611390 6.171940 -G3680656 Ibagué -75.232220 4.438890 -G3682385 Floridablanca -73.089720 7.064720 -G3682631 Envigado -75.563890 6.173060 -G3685095 Dos Quebradas -75.672500 4.834720 -G3685533 Cúcuta -72.505280 7.883330 -G3687238 Cartagena -75.514440 10.399720 -G3687925 Cali -76.522500 3.437220 -G3688451 Buenaventura -77.069720 3.893330 -G3688465 Bucaramanga -73.125830 7.129720 -G3688689 Bogotá -74.081750 4.609710 -G3688928 Bello -75.562220 6.338890 -G3689147 Barranquilla -74.796390 10.963890 -G3689169 Barrancabermeja -73.854720 7.065280 -G3689560 Armenia -75.681110 4.533890 -G3621849 San José -84.083330 9.933330 -G3536729 Santiago de Cuba -75.821940 20.024720 -G3537906 Santa Clara -79.966670 22.400000 -G3544091 Pinar del Río -83.698060 22.417500 -G3550598 Las Tunas -76.951110 20.961670 -G3553478 Havana -82.383040 23.133020 -G3556969 Holguín -76.263060 20.887220 -G3557689 Guantánamo -75.209170 20.144440 -G3564124 Cienfuegos -80.435560 22.146110 -G3566067 Camagüey -77.916940 21.380830 -G3567597 Bayamo -76.643330 20.379170 -G146268 Nicosia 33.366670 35.166670 -G146384 Limassol 33.033330 34.675000 -G3067696 Praha 14.420760 50.088040 -G3068160 Plzeň 13.377590 49.747470 -G3068799 Ostrava 18.282040 49.834650 -G3078610 Brno 16.607960 49.195220 -G2805753 Wuppertal 7.183330 51.266670 -G2809346 Wiesbaden 8.250000 50.083330 -G2825297 Stuttgart 9.177020 48.782320 -G2831580 Solingen 7.083330 51.183330 -G2842647 Saarbrücken 7.000000 49.233330 -G2844588 Rostock 12.140490 54.088700 -G2848756 Berlin Reinickendorf 13.333330 52.566670 -G2855598 Berlin Pankow 13.401860 52.569260 -G2856883 Osnabrück 8.050000 52.266670 -G2857458 Oldenburg 8.200000 53.166670 -G2860410 Oberhausen 6.850000 51.466670 -G2861650 Nuremberg 11.068330 49.447780 -G2864072 Neue Neustadt 11.633330 52.150000 -G2864118 Neuß 6.683330 51.200000 -G2867543 Münster 7.625710 51.962360 -G2867714 München 11.575490 48.137430 -G2867838 Mülheim an der Ruhr 6.883330 51.433330 -G2869894 Mönchengladbach 6.433330 51.200000 -G2873891 Mannheim 8.464720 49.488330 -G2874225 Mainz 8.271110 50.000000 -G2874545 Magdeburg 11.666670 52.166670 -G2875376 Ludwigshafen am Rhein 8.435280 49.481110 -G2875601 Lübeck 10.687290 53.868930 -G2878234 Leverkusen 7.000000 51.033330 -G2879139 Leipzig 12.371290 51.339620 -G2884509 Krefeld 6.566670 51.333330 -G2886242 Köln 6.950000 50.933330 -G2891122 Kiel 10.134890 54.321330 -G2892518 Kassel 9.500000 51.316670 -G2892794 Karlsruhe 8.385830 49.004720 -G2905891 Herne 7.216670 51.550000 -G2910685 Harburg 9.983330 53.466670 -G2910831 Hannover 9.733220 52.370520 -G2911240 Hamm 7.820890 51.680330 -G2911285 Wandsbek 10.100000 53.566670 -G2911287 Marienthal 10.083330 53.566670 -G2911293 Eimsbüttel 9.983330 53.566670 -G2911296 Altona 9.933330 53.550000 -G2911298 Hamburg 10.000000 53.550000 -G2911522 Halle 12.000000 51.500000 -G2912621 Hagen 7.466670 51.350000 -G2921466 Gelsenkirchen 7.050000 51.516670 -G2925177 Freiburg 7.852220 47.995900 -G2925533 Frankfurt am Main 8.683330 50.116670 -G2928810 Essen 7.016670 51.450000 -G2929670 Erfurt 11.033330 50.983330 -G2934246 Düsseldorf 6.776160 51.221720 -G2934691 Duisburg 6.750000 51.433330 -G2935022 Dresden 13.738320 51.050890 -G2935517 Dortmund 7.450000 51.516670 -G2940132 Chemnitz 12.916670 50.833330 -G2944388 Bremen 8.807770 53.075160 -G2945024 Braunschweig 10.533330 52.266670 -G2946447 Bonn 7.100000 50.733330 -G2947416 Bochum 7.216670 51.483330 -G2949186 Bielefeld 8.533330 52.033330 -G2950159 Berlin 13.410530 52.524370 -G2954172 Augsburg 10.883330 48.366670 -G3247449 Aachen 6.083420 50.776640 -G6545310 Berlin Mitte 13.404890 52.520030 -G6941055 Bochum-Hordel 7.175600 51.501680 -G7289614 Halle Neustadt 11.916050 51.479240 -G7290245 Berlin Steglitz Zehlendorf 13.241830 52.434850 -G7290251 Berlin Wilmersdorf 13.290970 52.500970 -G7290252 Berlin Spandau 13.199210 52.551100 -G223817 Djibouti 43.144680 11.587670 -G2618425 Copenhagen 12.565530 55.675940 -G2624652 Århus 10.210760 56.156740 -G3492908 Santo Domingo -69.988570 18.500120 -G3492914 Santiago de los Caballeros -70.700000 19.450000 -G3493032 San Pedro de Macorís -69.297180 18.461560 -G3500957 La Romana -68.972850 18.427340 -G3511540 San Cristóbal -70.100000 18.416670 -G2474141 Boumerdas 3.477170 36.766390 -G2479536 Skikda 6.909210 36.876170 -G2481007 Sidi Bel Abbès -0.630850 35.189940 -G2485926 Oran -0.641670 35.691110 -G2498766 El Achir 4.627440 36.063860 -G2498954 Ech Chettia 1.255380 36.195910 -G2501152 Constantine 6.614720 36.365000 -G2505329 Bejaïa 5.084330 36.755870 -G2505572 Batna 6.174140 35.555970 -G2505854 Bab Ezzouar 3.182910 36.726150 -G2506999 Annaba 7.766670 36.900000 -G2507480 Algiers 3.041970 36.752500 -G3651297 Santo Domingo de los Colorados -79.150000 -0.250000 -G3652462 Quito -78.524950 -0.229850 -G3652941 Portoviejo -80.450000 -1.050000 -G3654410 Manta -80.733330 -0.950000 -G3654533 Machala -79.966670 -3.266670 -G3657509 Guayaquil -79.900000 -2.166670 -G3658192 Durán -79.833330 -2.200000 -G3658666 Cuenca -78.983330 -2.883330 -G3660689 Ambato -78.616750 -1.249080 -G588409 Tallinn 24.753530 59.436960 -G347497 Tanda 30.998060 30.791110 -G347591 Ṭalkha 31.373890 31.053060 -G347796 Sūhāj 31.700000 26.550000 -G350550 Qinā 32.727220 26.170000 -G354775 Kafr ad Dawwār 30.128430 31.133850 -G355795 Hilwan 31.333330 29.850000 -G358448 Damanhûr 30.466670 31.033330 -G358619 Port Said 32.307500 31.280560 -G359173 Banī Suwayf 31.088890 29.063890 -G359280 Banhā 31.187500 30.460830 -G359493 Az Zaqāzīq 31.510280 30.591390 -G359783 Asyūţ 31.182780 27.182780 -G359792 Aswān 32.898890 24.087500 -G359796 Suez 32.550000 29.966670 -G360502 Luxor 32.642100 25.698930 -G360630 Cairo 31.249670 30.062630 -G360686 Al Minyā 30.744440 28.119440 -G360761 Al Manşūrah 31.376670 31.043060 -G360829 Al Maḩallah al Kubrá 31.166940 30.976110 -G360995 Al Jīzah 31.212220 30.008610 -G361055 Ismailia 32.277220 30.605280 -G361058 Alexandria 29.919170 31.198060 -G361320 Al Fayyūm 30.840000 29.307780 -G411165 Idfu 32.874720 24.980280 -G2462881 Laâyoune / El Aaiún -13.203150 27.162240 -G343300 Asmara 38.933330 15.333330 -G2509954 Valencia -0.377390 39.469750 -G2510911 Sevilla -5.986940 37.377220 -G2511174 Santa Cruz de Tenerife -16.254620 28.468240 -G2511401 La Laguna -16.316670 28.483330 -G2512989 Palma 2.650240 39.569390 -G2513416 Murcia -1.116670 37.983330 -G2514256 Málaga -4.420340 36.720160 -G2515270 Las Palmas de Gran Canaria -15.416670 28.100000 -G2516326 Jerez de la Frontera -6.133330 36.683330 -G2517117 Granada -3.606670 37.188170 -G2518559 Elx -0.701070 38.262180 -G2519240 Córdoba -4.766670 37.883330 -G2519752 Castelló de la Plana -0.033330 39.983330 -G2520058 Cartagena -0.983330 37.600000 -G2521886 Almería -2.459740 36.838140 -G2521978 Alicante -0.481490 38.345170 -G2522258 Albacete -1.850000 38.983330 -G3104324 Zaragoza -0.877340 41.656060 -G3104499 Vitoria-Gasteiz -2.666670 42.850000 -G3105976 Vigo -8.716670 42.233330 -G3106672 Valladolid -4.716670 41.650000 -G3108286 Terrassa 2.016670 41.566670 -G3109718 Santander -3.804440 43.464720 -G3110044 San Sebastián -1.974990 43.312830 -G3111108 Salamanca -5.650000 40.966670 -G3111199 Sabadell 2.109420 41.543290 -G3114472 Pamplona -1.643230 42.816870 -G3114711 Oviedo -5.844760 43.360290 -G3116025 Móstoles -3.864960 40.322340 -G3117735 Madrid -3.702560 40.416500 -G3118150 Logroño -2.450000 42.466670 -G3118594 Leganés -3.763500 40.327180 -G3119841 A Coruña -8.396000 43.371350 -G3120619 L'Hospitalet de Llobregat 2.100280 41.359670 -G3121424 Gijón -5.664440 43.541110 -G3121437 Getafe -3.732950 40.305710 -G3121960 Fuenlabrada -3.800000 40.283330 -G3127461 Burgos -3.700000 42.350000 -G3128026 Bilbao -2.925280 43.262710 -G3128760 Barcelona 2.158990 41.388790 -G3129028 Badalona 2.247410 41.450040 -G3130564 Alcorcón -3.824870 40.345820 -G3130616 Alcalá de Henares -3.366670 40.483330 -G6252065 Nou Barris 2.177270 41.441630 -G6544100 Eixample 2.161790 41.388960 -G6544105 Sant Martí 2.199330 41.418140 -G330186 Nazrēt 39.266670 8.550000 -G331180 Mek’elē 39.475280 13.496670 -G336014 Gonder 37.466670 12.600000 -G338832 Dirē Dawa 41.866110 9.593060 -G342884 Bahir Dar 37.383330 11.600000 -G344979 Addis Ababa 38.746890 9.024970 -G632453 Vantaa 25.040990 60.294140 -G633679 Turku 22.268690 60.451480 -G634963 Tampere 23.787120 61.499110 -G658225 Helsinki 24.935450 60.169520 -G660158 Espoo 24.652200 60.205200 -G2972315 Toulouse 1.443670 43.604260 -G2972328 Toulon 5.933330 43.116670 -G2973783 Strasbourg 7.742960 48.583420 -G2980291 Saint-Étienne 4.400000 45.433330 -G2983990 Rennes -1.683330 48.083330 -G2984114 Reims 4.033330 49.250000 -G2988507 Paris 2.348800 48.853410 -G2990440 Nice 7.266080 43.703130 -G2990969 Nantes -1.553360 47.217250 -G2992166 Montpellier 3.883330 43.600000 -G2995469 Marseille 5.381070 43.296950 -G2996944 Lyon 4.850000 45.750000 -G2998324 Lille 3.066670 50.633330 -G3003796 Le Havre 0.107670 49.493800 -G3014728 Grenoble 5.716670 45.166670 -G3031582 Bordeaux -0.566670 44.833330 -G3037656 Angers -0.550000 47.466670 -G2399697 Libreville 9.450000 0.383330 -G2633691 Wolverhampton -2.122960 52.585470 -G2634853 Walsall -1.983960 52.585280 -G2636389 Swindon -1.781160 51.557970 -G2636432 Swansea -3.943230 51.620790 -G2636503 Sutton -0.200000 51.350000 -G2636531 Sunderland -1.382220 54.904650 -G2636841 Stoke-on-Trent -2.185380 53.004150 -G2637433 Southend-on-Sea 0.714330 51.537820 -G2637487 Southampton -1.404280 50.903950 -G2638077 Sheffield -1.465900 53.382970 -G2639577 Reading -0.971130 51.456250 -G2639912 Preston -2.716670 53.766670 -G2639996 Portsmouth -1.091250 50.798990 -G2640101 Poole -2.000000 50.716670 -G2640194 Plymouth -4.143050 50.371530 -G2640729 Oxford -1.255960 51.752220 -G2641170 Nottingham -1.150470 52.953600 -G2641181 Norwich 1.298340 52.627830 -G2641430 Northampton -0.883330 52.250000 -G2641673 Newcastle upon Tyne -1.613960 54.973280 -G2642465 Milton Keynes -0.755830 52.041720 -G2643123 Manchester -2.237430 53.480950 -G2643339 Luton -0.417480 51.879670 -G2643741 City of London -0.091840 51.512790 -G2643743 London -0.125740 51.508530 -G2644210 Liverpool -2.977940 53.410580 -G2644668 Leicester -1.131690 52.638600 -G2644688 Leeds -1.547850 53.796480 -G2645425 Hull -0.335250 53.744600 -G2646003 Islington -0.103040 51.536220 -G2648579 Glasgow -4.257630 55.865150 -G2650225 Edinburgh -3.196480 55.952060 -G2650752 Dundee -2.966670 56.500000 -G2650839 Dudley -2.083330 52.500000 -G2651347 Derby -1.476630 52.922770 -G2652221 Coventry -1.512170 52.406560 -G2653822 Cardiff -3.180000 51.480000 -G2654675 Bristol -2.596650 51.455230 -G2654993 Bradford -1.752060 53.793910 -G2655095 Bournemouth -1.879500 50.720480 -G2655603 Birmingham -1.899830 52.481420 -G2655984 Belfast -5.933330 54.583330 -G2657832 Aberdeen -2.098140 57.143690 -G7535661 London Borough of Harrow -0.333330 51.566670 -G611717 Tbilisi 44.833680 41.694110 -G613607 K'ut'aisi 42.699740 42.249610 -G2294700 Tema -0.016670 5.616670 -G2294877 Tamale -0.833330 9.400000 -G2294915 Takoradi -1.750000 4.883330 -G2298890 Kumasi -1.616670 6.683330 -G2306079 Achiaman -0.333330 5.700000 -G2306104 Accra -0.196900 5.556020 -G2422465 Conakry -13.677290 9.537950 -G2422488 Camayenne -13.687780 9.535000 -G2309527 Malabo 8.783330 3.750000 -G2310046 Bata 9.750000 1.850000 -G255274 Piraeus 23.637080 37.947450 -G255683 Pátrai 21.734440 38.244440 -G264371 Athens 23.716220 37.979450 -G734077 Thessaloníki 22.943890 40.640280 -G3587902 Villa Nueva -90.587500 14.526940 -G3592519 Mixco -90.606390 14.633330 -G3598132 Guatemala City -90.513270 14.640720 -G2374775 Bissau -15.583330 11.850000 -G3378644 Georgetown -58.155270 6.804480 -G1819609 Kowloon 114.183330 22.316670 -G1819729 Hong Kong 114.157690 22.285520 -G3600949 Tegucigalpa -87.206810 14.081800 -G3601782 San Pedro Sula -88.033330 15.500000 -G3186886 Zagreb 15.977980 45.814440 -G3190261 Split 16.439150 43.508910 -G6618983 Zagreb - Centar 15.977530 45.813130 -G3718426 Port-au-Prince -72.335000 18.539170 -G3719028 Pétionville -72.285280 18.512500 -G3726786 Delmas 73 -72.302780 18.544720 -G3727135 Croix des Bouquets -72.225000 18.575000 -G3728338 Carrefour -72.399220 18.541140 -G715429 Szeged 20.148240 46.253000 -G717582 Miskolc 20.783330 48.100000 -G721472 Debrecen 21.633330 47.533330 -G3046526 Pécs 18.233330 46.083330 -G3054643 Budapest 19.039910 47.498010 -G6942354 Nagyvárad 21.927340 47.060530 -G1213614 Sunggal 98.615100 3.576500 -G1214189 Percut 98.864000 3.625300 -G1214191 Perbaungan 98.956000 3.567900 -G1214204 Pematangsiantar 99.068700 2.959500 -G1214520 Medan 98.666670 3.583330 -G1215355 Binjai 98.485400 3.600100 -G1215502 Banda Aceh 95.322200 5.557700 -G1621177 Yogyakarta 110.360830 -7.782780 -G1622786 Makassar 119.422100 -5.140000 -G1624494 Tegal 109.140200 -6.869400 -G1624647 Tasikmalaya 108.200000 -7.333330 -G1624917 Bandarlampung 105.258030 -5.425440 -G1625084 Tangerang 106.630000 -6.178060 -G1625812 Surakarta 110.831670 -7.556110 -G1625822 Surabaya 112.750830 -7.249170 -G1626100 Sumedang Utara 107.916670 -6.850000 -G1626381 Sukabumi 106.926670 -6.918060 -G1626560 Soreang 107.518330 -7.033060 -G1626801 Situbondo 114.009760 -7.706230 -G1627549 Serang 106.150200 -6.114900 -G1627896 Semarang 110.420300 -6.993200 -G1629001 Samarinda 117.150000 -0.500000 -G1629131 Salatiga 110.492780 -7.331940 -G1629710 Rengasdengklok 107.298060 -6.159170 -G1630328 Purwokerto 109.234440 -7.421390 -G1630333 Purwodadi 110.915800 -7.086800 -G1630341 Purwakarta 107.443330 -6.556940 -G1630634 Probolinggo 113.215900 -7.754300 -G1630789 Pontianak 109.333330 -0.033330 -G1630997 Plumbon 108.472780 -6.705000 -G1631648 Pemalang 109.366670 -6.900000 -G1631761 Pekanbaru 101.450000 0.533330 -G1631766 Pekalongan 109.675300 -6.888600 -G1632033 Pasuruan 112.907500 -7.645300 -G1632228 Pasarkemis 106.530280 -6.170280 -G1632276 Parung 106.733060 -6.421390 -G1632937 Pamulang 106.738330 -6.342780 -G1633034 Palu 119.870700 -0.891700 -G1633070 Palembang 104.745800 -2.916730 -G1633419 Padang 100.354270 -0.949240 -G1635882 Mataram 116.116670 -8.583330 -G1636544 Manado 124.845500 1.487000 -G1636556 Mamuju 118.888500 -2.674800 -G1636722 Malang 112.630400 -7.979700 -G1636930 Madiun 111.523900 -7.629800 -G1637510 Loa Janan 117.095030 -0.582950 -G1638063 Lembang 107.617500 -6.811670 -G1638284 Lawang 112.694700 -7.835300 -G1638868 Labuhanbajo 119.887700 -8.496400 -G1640344 Kendari 122.498890 -3.945000 -G1640660 Kediri 112.016670 -7.816670 -G1642588 Jember 113.703170 -8.166040 -G1642858 Jambi 103.616670 -1.600000 -G1642911 Jakarta 106.845130 -6.214620 -G1645524 Depok 106.818610 -6.400000 -G1645528 Denpasar 115.216670 -8.650000 -G1645895 Curug 106.556390 -6.265830 -G1646170 Cirebon 108.557000 -6.706300 -G1646194 Ciputat 106.695560 -6.237500 -G1646448 Cimahi 107.542500 -6.872220 -G1646494 Cileungsi 106.959170 -6.394720 -G1647003 Cibinong 106.854170 -6.481670 -G1647383 Ciampea 106.700830 -6.554720 -G1648473 Bogor 106.789170 -6.594440 -G1649150 Bengkulu 102.265540 -3.800440 -G1649378 Bekasi 106.989600 -6.234900 -G1650213 Banjarmasin 114.591000 -3.324420 -G1650227 Banjaran 107.587780 -7.045280 -G1650357 Bandung 107.618610 -6.903890 -G1650527 Balikpapan 116.828870 -1.267530 -G1651531 Ambon 128.200000 -3.716670 -G1985663 Cikupa 106.508330 -6.236390 -G2057087 Kupang 123.583330 -10.166670 -G2964506 Dún Laoghaire -6.135860 53.293950 -G2964574 Dublin -6.267190 53.343990 -G2965140 Cork -8.470610 51.897970 -G281184 Jerusalem 35.225300 31.779020 -G293397 Tel Aviv 34.766670 32.066670 -G293703 Rishon LeẔiyyon 34.804440 31.964170 -G294071 Netanya 34.857780 32.333610 -G294751 H̱olon 34.772220 32.011390 -G294801 Haifa 34.989170 32.815560 -G295530 Beersheba 34.791300 31.251810 -G295629 Ashdod 34.650000 31.816670 -G6693674 Petah Tikva 34.885030 32.091740 -G7498240 West Jerusalem 35.219610 31.781990 -G1252797 Yamunānagar 77.283330 30.100000 -G1252948 Warangal 79.583330 18.000000 -G1253084 Vizianagaram 83.416670 18.116670 -G1253102 Vishākhapatnam 83.300000 17.700000 -G1253133 Virār 72.800000 19.466670 -G1253184 Vijayawāda 80.616670 16.516670 -G1253237 Verāval 70.366670 20.900000 -G1253286 Vellore 79.133330 12.933330 -G1253405 Benares 83.000000 25.333330 -G1253573 Vadodara 73.200000 22.300000 -G1253747 Unnāo 80.500000 26.533330 -G1253894 Ulhāsnagar 73.150000 19.216670 -G1253914 Ujjain 75.766670 23.183330 -G1253986 Udaipur 73.691830 24.571170 -G1254089 Tumkūr 77.101670 13.342220 -G1254163 Thiruvananthapuram 76.916670 8.483330 -G1254187 Trichūr 76.216670 10.516670 -G1254241 Tonk 75.783330 26.166670 -G1254348 Tiruppūr 77.350000 11.100000 -G1254360 Tirupati 79.416670 13.650000 -G1254361 Tirunelveli 77.700000 8.733330 -G1254388 Tiruchchirāppalli 78.683330 10.816670 -G1254649 Thanjāvūr 79.150000 10.800000 -G1254661 Thāne 72.966670 19.200000 -G1254745 Teni 77.483330 10.000000 -G1255349 Surendranagar 71.683330 22.700000 -G1255364 Sūrat 72.833330 21.166670 -G1255634 Srīnagar 74.816670 34.083330 -G1255744 Sonīpat 77.016670 28.983330 -G1255969 Sītāpur 80.683330 27.566670 -G1256052 Sirsa 75.016670 29.533330 -G1256237 Shimla 77.166670 31.100000 -G1256287 Silchar 92.800000 24.816670 -G1256320 Sīkar 75.150000 27.616670 -G1256422 Shrīrāmpur 88.342220 22.752780 -G1256436 Solāpur 75.916670 17.683330 -G1256451 Shivpurī 77.650000 25.433330 -G1256515 Shimoga 75.566670 13.916670 -G1256525 Shiliguri 88.433330 26.700000 -G1256728 Shāhjahānpur 79.916670 27.883330 -G1257022 Satna 80.833330 24.583330 -G1257416 Sāngli 74.564170 16.854380 -G1257540 Sambhal 78.550000 28.583330 -G1257542 Sambalpur 83.966670 21.450000 -G1257629 Salem 78.166670 11.650000 -G1257806 Sahāranpur 77.550000 29.966670 -G1257845 Sāgar 78.716670 23.833330 -G1258076 Rohtak 76.566670 28.900000 -G1258182 Rewa 81.300000 24.533330 -G1258342 Ratlām 75.066670 23.316670 -G1258526 Rānchī 85.333330 23.350000 -G1258599 Rāmpur 79.033330 28.816670 -G1258831 Rāj Nāndgaon 81.033330 21.100000 -G1258847 Rājkot 70.783330 22.300000 -G1258932 Rājahmundry 81.783330 16.983330 -G1258980 Raipur 81.633330 21.233330 -G1259004 Raigarh Fort 73.433330 18.250000 -G1259009 Rāiganj 88.116670 25.616670 -G1259012 Rāichūr 77.366670 16.200000 -G1259064 Rāe Bareli 81.233330 26.216670 -G1259091 Quilon 76.600000 8.883330 -G1259166 Pūrnia 87.466670 25.783330 -G1259184 Puri 85.850000 19.800000 -G1259229 Pune 73.855350 18.519570 -G1259239 Punāsa 76.400000 22.233330 -G1259312 Proddatūr 78.550000 14.733330 -G1259425 Pondicherry 79.830000 11.930000 -G1259652 Pimpri 73.800000 18.616670 -G1260086 Patna 85.116670 25.600000 -G1260107 Patiāla 76.400280 30.326670 -G1260137 Pathānkot 75.650000 32.283330 -G1260341 Parbhani 76.783330 19.266670 -G1260476 Pānīpat 76.968060 29.388890 -G1260482 Pānihāti 88.374440 22.694170 -G1260692 Pallāvaram 80.183610 12.976110 -G1260716 Pāli 73.333330 25.766670 -G1261039 Orai 79.466670 25.983330 -G1261045 Ongole 80.050000 15.500000 -G1261258 Nizāmābād 78.116670 18.666670 -G1261481 New Delhi 77.224450 28.635760 -G1261529 Nellore 79.966670 14.433330 -G1261731 Nāsik 73.800000 19.983330 -G1261913 Nāngloi Jāt 77.066670 28.683330 -G1261927 Nandyāl 78.483330 15.483330 -G1262131 Naihāti 88.416940 22.902780 -G1262180 Nāgpur 79.100000 21.150000 -G1262204 Nāgercoil 77.433330 8.166670 -G1262292 Nadiād 72.866670 22.700000 -G1262321 Mysore 76.649720 12.307220 -G1262330 Muzaffarpur 85.400000 26.116670 -G1262332 Muzaffarnagar 77.683330 29.466670 -G1262395 Murwāra 80.400000 23.850000 -G1262482 Munger 86.466670 25.383330 -G1262771 Morena 78.000000 26.496940 -G1262801 Morādābād 78.783330 28.833330 -G1262995 Mirzāpur 82.583330 25.150000 -G1263214 Meerut 77.700000 28.983330 -G1263220 Medinīpur 87.333330 22.433330 -G1263311 Mau 83.550000 25.950000 -G1263364 Mathura 77.683330 27.500000 -G1263780 Mangalore 74.883330 12.866670 -G1264115 Mālegaon 74.533330 20.550000 -G1264521 Madurai 78.116670 9.933330 -G1264527 Chennai 80.278470 13.087840 -G1264543 Madhyamgram 88.450000 22.700000 -G1264637 Machilīpatnam 81.133330 16.166670 -G1264728 Ludhiāna 75.850000 30.900000 -G1264733 Lucknow 80.916670 26.850000 -G1264773 Loni 77.283330 28.750000 -G1265014 Lātūr 76.583330 18.400000 -G1265711 Kulti 86.850000 23.733330 -G1265767 Kūkatpalli 78.416670 17.483330 -G1265873 Calicut 75.766670 11.250000 -G1266049 Kota 75.833330 25.183330 -G1266122 Korba 82.683330 22.350000 -G1266285 Kolhāpur 74.216670 16.700000 -G1266976 Kharagpur 87.333330 22.333330 -G1267031 Khandwa 76.333330 21.833330 -G1267076 Khammam 80.150000 17.250000 -G1267480 Katihār 87.583330 25.533330 -G1267708 Karnāl 76.983330 29.683330 -G1267755 Karīmnagar 79.150000 18.433330 -G1267995 Kānpur 80.350000 26.466670 -G1268159 Kānchipuram 79.716670 12.833330 -G1268257 Kāmārhāti 88.374720 22.671110 -G1268295 Kalyān 73.150000 19.250000 -G1268561 Kākināda 82.216670 16.933330 -G1268773 Jūnāgadh 70.466670 21.516670 -G1268782 Jalandhar 75.579170 31.325560 -G1268865 Jodhpur 73.030000 26.286670 -G1268907 Jīnd 76.316670 29.316670 -G1269006 Jhānsi 78.583330 25.433330 -G1269135 Jaunpur 82.683330 25.733330 -G1269280 Jāmuria 87.083330 23.700000 -G1269300 Jamshedpur 86.183330 22.800000 -G1269317 Jāmnagar 70.066670 22.466670 -G1269321 Jammu 74.866670 32.733330 -G1269395 Jālna 75.883330 19.833330 -G1269407 Jālgaon 75.566670 21.016670 -G1269515 Jaipur 75.816670 26.916670 -G1269633 Jabalpur 79.950060 23.166970 -G1269723 Ingrāj Bāzār 88.150000 25.000000 -G1269743 Indore 75.833300 22.717920 -G1269771 Imphāl 93.950000 24.816670 -G1269834 Ichalkaranji 74.466670 16.700000 -G1269843 Hyderābād 78.474440 17.375280 -G1269910 Hugli 88.402500 22.895560 -G1269920 Hubli 75.166670 15.350000 -G1269935 Hospet 76.400000 15.266670 -G1269937 Hoshiārpur 75.917220 31.532220 -G1270022 Hisār 75.716670 29.166670 -G1270351 Haridwār 78.166670 29.966670 -G1270393 Hāpur 77.783330 28.716670 -G1270396 Hāora 88.310280 22.589170 -G1270407 Hanumāngarh 74.316670 29.583330 -G1270583 Gwalior 78.179170 26.223610 -G1270642 Gurgaon 77.033330 28.466670 -G1270668 Guntūr 80.450000 16.300000 -G1270711 Guna 77.316670 24.650000 -G1270752 Gulbarga 76.833330 17.333330 -G1270926 Gorakhpur 75.683330 29.450000 -G1270927 Gorakhpur 83.373890 26.755000 -G1271308 Ghāziābād 77.433330 28.666670 -G1271439 Gaya 85.000000 24.783330 -G1271476 Guwāhāti 91.750950 26.186170 -G1271685 Gangānagar 73.883330 29.916670 -G1271715 Gāndhīnagar 72.683330 23.216670 -G1271850 Gadag 75.616670 15.416670 -G1271885 Fīrozābād 78.416670 27.150000 -G1271912 Fatehpur 80.800000 25.933330 -G1271942 Farrukhābād 79.566670 27.400000 -G1271951 Farīdābād 77.316670 28.433330 -G1271976 Faizābād 82.133330 26.783330 -G1271987 Etāwah 79.023900 26.776900 -G1272051 Elūru 81.100000 16.700000 -G1272175 Durgāpur 87.316670 23.483330 -G1272181 Durg 81.283330 21.183330 -G1272423 Dombivli 73.083330 19.216670 -G1272543 Dindigul 77.950000 10.350000 -G1272691 Dhule 74.783330 20.900000 -G1272979 Dhanbād 86.450000 23.800000 -G1273066 Dewās 76.066670 22.966670 -G1273294 Delhi 77.216670 28.666670 -G1273313 Dehra Dūn 78.033330 30.316670 -G1273491 Darbhanga 85.900000 26.166670 -G1273581 Dānāpur 85.050000 25.633330 -G1273780 Cuttack 85.879270 20.464970 -G1273802 Cuddalore 79.750000 11.750000 -G1273865 Coimbatore 76.966670 11.000000 -G1273874 Cochin 76.233330 9.966670 -G1274693 Chandrapur 79.300000 19.950000 -G1274746 Chandīgarh 76.793300 30.734300 -G1274784 Chandannagar 88.377220 22.869170 -G1275004 Calcutta 88.369720 22.569720 -G1275068 Burhānpur 76.233330 21.300000 -G1275120 Bulandshahr 77.850000 28.400000 -G1275163 Budaun 79.116670 28.050000 -G1275198 Brahmapur 84.783330 19.316670 -G1275248 Borivli 72.850000 19.233330 -G1275339 Mumbai 72.847940 19.014410 -G1275362 Bokāro 85.966670 23.783330 -G1275637 Bilāspur 82.150000 22.083330 -G1275665 Bīkāner 73.300000 28.016670 -G1275701 Bijāpur 75.700000 16.833330 -G1275716 Bihār Sharīf 85.516670 25.183330 -G1275738 Bīdar 77.550000 17.900000 -G1275778 Bhusāwal 75.766670 21.050000 -G1275817 Bhubaneshwar 85.833330 20.233330 -G1275841 Bhopāl 77.400000 23.266670 -G1275899 Bhiwāni 76.133330 28.783330 -G1275901 Bhiwandi 73.066670 19.300000 -G1275926 Bhind 78.788330 26.564170 -G1275960 Bhīlwāra 74.633330 25.350000 -G1275971 Bhilai 81.433330 21.216670 -G1276032 Bhāvnagar 72.150000 21.766670 -G1276058 Bhātpāra 88.408890 22.871390 -G1276070 Bhatinda 74.950000 30.200000 -G1276100 Bharūch 72.966670 21.700000 -G1276128 Bharatpur 77.483330 27.216670 -G1276300 Bhāgalpur 87.000000 25.250000 -G1276321 Bhadrāvati 75.716670 13.866670 -G1276509 Bellary 76.933330 15.150000 -G1276533 Belgaum 74.500000 15.866670 -G1277013 Bareilly 79.416670 28.350000 -G1277029 Barddhamān 87.850000 23.250000 -G1277065 Bārāsat 88.516670 22.716670 -G1277082 Baranagar 88.365280 22.643330 -G1277333 Bengalore 77.603290 12.976230 -G1277397 Bānda 80.333330 25.483330 -G1277539 Bāli 88.340280 22.646110 -G1277799 Bahraich 81.600000 27.583330 -G1277820 Baharampur 88.250000 24.100000 -G1277835 Bahādurgarh 76.916670 28.683330 -G1278130 Āvadi 80.101670 13.115560 -G1278149 Aurangābād 75.333330 19.883330 -G1278314 Āsansol 86.983330 23.683330 -G1278483 Ara 84.666670 25.566670 -G1278672 Anantapur 77.600000 14.683330 -G1278708 Amroha 78.466670 28.916670 -G1278710 Amritsar 74.865560 31.633060 -G1278718 Amrāvati 77.750000 20.933330 -G1278840 Ambattūr 80.162220 13.098330 -G1278903 Amarnāth 73.166670 19.200000 -G1278946 Alwar 76.600000 27.566670 -G1278985 Alleppey 76.326400 9.490040 -G1278994 Allahābād 81.850000 25.450000 -G1279017 Alīgarh 78.083330 27.883330 -G1279064 Alandur 80.206110 13.002500 -G1279105 Akola 77.000000 20.733330 -G1279159 Ajmer 74.633330 26.450000 -G1279186 Āīzawl 92.716670 23.733330 -G1279228 Ahmadnagar 74.733330 19.083330 -G1279233 Ahmadābād 72.616670 23.033330 -G1279259 Āgra 78.016670 27.183330 -G1279290 Agartala 91.275000 23.836390 -G1279335 Ādoni 77.283330 15.633330 -G1344377 Haldia 88.109750 22.060460 -G1348818 Nangi 88.215280 22.508330 -G6943660 Shivaji Nagar 73.852630 18.530170 -G7279746 Noida 77.330000 28.580000 -G7279754 Singrauli 82.675350 24.199730 -G7284820 Jaigaon 89.375580 26.847660 -G7302826 Lal Bahadur Nagar 78.557570 17.347690 -G7302833 Gajuwaka 83.216670 17.700000 -G7302845 Quthbullapur 78.458180 17.501070 -G7302856 Serilingampalle 78.301960 17.493130 -G91597 Sāmarrā’ 43.875620 34.200960 -G94787 Kirkuk 44.392220 35.468060 -G94824 Karbalā’ 44.008470 32.611440 -G95446 Arbīl 44.010620 36.192570 -G97990 Ba‘qūbah 44.655450 33.748460 -G98182 Baghdad 44.400880 33.340580 -G98463 As Sulaymānīyah 45.437490 35.561130 -G98530 As Samāwah 45.294400 31.331980 -G98717 Ar Ramādī 43.305840 33.422570 -G98854 An Nāşirīyah 46.261020 31.052050 -G98860 An Najaf al Ashraf 44.339760 31.998540 -G99071 Al Mawşil al Jadīdah 43.097770 36.334640 -G99072 Mosul 43.118890 36.335000 -G99131 Al Kūt 45.819020 32.514700 -G99347 Al Ḩillah 44.435260 32.480140 -G99454 Al Fallūjah 43.779510 33.353800 -G99532 Al Başrah 47.788850 30.534880 -G99608 Al ‘Amārah 47.139600 31.840640 -G99762 Ad Dīwānīyah 44.930630 31.990510 -G100077 Abū Ghurayb 44.185000 33.308330 -G388349 Al Başrat al Qadīmah 47.814910 30.497210 -G14256 Āzādshahr 48.570730 34.790880 -G23814 Kahrīz 47.055300 34.383800 -G32767 Qarchak 51.568890 35.439440 -G111453 Zanjān 48.478700 36.673600 -G111822 Yazd 54.367500 31.897220 -G112214 Varāmīn 51.645700 35.324200 -G112931 Tehrān 51.421510 35.694390 -G113646 Tabrīz 46.291900 38.080000 -G114259 Sīrjān 55.681400 29.452000 -G115019 Shīrāz 52.538800 29.603600 -G116667 Sāveh 50.356600 35.021300 -G116996 Shari-i-Tajan 53.056520 36.562970 -G117392 Saqqez 46.273500 36.249920 -G117574 Sanandaj 46.992300 35.314400 -G118063 Sabzevār 57.681910 36.212600 -G118743 Rasht 49.583190 37.280770 -G119208 Qom 50.876400 34.640100 -G119505 Qazvīn 50.004900 36.279700 -G121801 Orūmīyeh 45.076050 37.552740 -G122285 Neyshābūr 58.795760 36.213290 -G122438 Naz̧arābād 50.607500 35.952100 -G124665 Mashhad 59.606200 36.297000 -G125185 Malāyer 48.823500 34.296900 -G125446 Mahābād 45.722200 36.763100 -G126972 Khvoy 44.952100 38.550300 -G127319 Khorramshahr 48.166400 30.439700 -G127349 Khorramābād 48.355830 33.487780 -G128226 Kermānshāh 47.065000 34.314170 -G128234 Kermān 57.081230 30.293680 -G128477 Kāshān 51.436440 33.983080 -G128747 Karaj 51.010300 35.835500 -G132144 Hamadān 48.514560 34.799220 -G132892 Gorgān 54.434750 36.838660 -G139817 Bandar Būshehr 50.838500 28.968400 -G139889 Būkān 46.208900 36.521000 -G140044 Borūjerd 48.751600 33.897300 -G140380 Bojnūrd 57.329030 37.474730 -G140463 Bīrjand 59.221140 32.866280 -G141681 Bandar ‘Abbās 56.280800 27.186500 -G142363 Bābol 52.678950 36.551320 -G143083 Ardabīl 48.293300 38.249800 -G143127 Arāk 49.689160 34.091740 -G143534 Āmol 52.350720 36.469610 -G144448 Ahvāz 48.669300 31.320300 -G145459 Ābādān 48.304300 30.339200 -G418606 Najafābād 51.366800 32.634400 -G418710 Khomeynī Shahr 51.521130 32.700180 -G418863 Eşfahān 51.677610 32.657220 -G1159301 Zāhedān 60.862900 29.496300 -G2523630 Reggio di Calabria 15.661290 38.110470 -G2523920 Palermo 13.359760 38.115820 -G2524170 Messina 15.549690 38.193270 -G2525068 Catania 15.087190 37.502130 -G2525473 Cagliari 9.134620 39.207380 -G3164527 Verona 10.997790 45.434190 -G3164603 Venice 12.326670 45.438610 -G3165185 Trieste 13.780000 45.648610 -G3165524 Torino 7.686820 45.070490 -G3165926 Taranto 17.229720 40.476110 -G3169070 Roma 12.483900 41.894740 -G3169921 Prato 11.090920 43.884250 -G3171457 Parma 10.328980 44.802660 -G3171728 Padova 11.881810 45.415190 -G3172394 Napoli 14.250000 40.833330 -G3173331 Modena 10.925390 44.647830 -G3173435 Milano 9.189510 45.464270 -G3173529 Mestre 12.242500 45.490280 -G3174659 Livorno 10.316000 43.542640 -G3176219 Genova 8.933860 44.406320 -G3176885 Foggia 15.549250 41.460930 -G3176959 Florence 11.250000 43.766670 -G3181554 Brescia 10.227270 45.524780 -G3181928 Bologna 11.338750 44.493810 -G3182351 Bari 16.851180 41.117730 -G3489297 New Kingston -76.783190 18.007470 -G3489854 Kingston -76.793580 17.997020 -G246013 Wādī as Sīr 35.816670 31.950000 -G248946 Irbid 35.850000 32.555560 -G250090 Az Zarqā’ 36.087960 32.072750 -G250441 Amman 35.945030 31.955220 -G1847963 Atsugi 139.359720 35.438890 -G1847966 Akashi 134.983330 34.633330 -G1848254 Yono 139.633330 35.883330 -G1848313 Yokosuka 139.667220 35.283610 -G1848354 Yokohama-shi 139.642500 35.447780 -G1848373 Yokkaichi 136.616670 34.966670 -G1848522 Yao 135.600000 34.616670 -G1849053 Utsunomiya-shi 139.883610 36.565830 -G1849372 Uji 135.800000 34.883330 -G1849498 Ube 131.251110 33.943060 -G1849796 Tsu-shi 136.508610 34.730280 -G1849814 Toyota 137.150000 35.083330 -G1849837 Toyonaka 135.469320 34.782440 -G1849846 Toyohashi 137.383330 34.766670 -G1849876 Toyama-shi 137.211390 36.695280 -G1849892 Tottori 134.233330 35.500000 -G1850147 Tokyo 139.581300 35.614880 -G1850158 Tokushima-shi 134.559440 34.065830 -G1850181 Tokorozawa 139.469030 35.799160 -G1850692 Nishi-Tokyo-shi 139.538300 35.725260 -G1850910 Takatsuki 135.616780 34.848330 -G1851002 Takasaki 139.016670 36.333330 -G1851012 Takarazuka 135.356970 34.799360 -G1851032 Takaoka 137.016670 36.750000 -G1851100 Takamatsu-shi 134.043330 34.340280 -G1851307 Tachikawa 139.418060 35.692780 -G1851348 Suzuka 136.583330 34.883330 -G1851483 Suita 135.515670 34.761430 -G1851604 Sōka 139.804440 35.820280 -G1851717 Shizuoka-shi 138.383060 34.976940 -G1852140 Shinagawa-ku 139.730170 35.609020 -G1852225 Shimonoseki 130.950000 33.950000 -G1852383 Shimminatochō 135.200000 34.183330 -G1852899 Sasebo 129.722780 33.159170 -G1853195 Sakai 135.466670 34.583330 -G1853295 Sagamihara 139.354440 35.553060 -G1853303 Saga-shi 130.298800 33.249320 -G1853483 Oyama 139.800000 36.300000 -G1853574 Ōtsu-shi 135.868330 35.004440 -G1853677 Ōta 139.366670 36.300000 -G1853909 Ōsaka-shi 135.502180 34.693740 -G1854376 Okazaki 137.166670 34.950000 -G1854383 Okayama-shi 133.935000 34.661670 -G1854487 Ōita-shi 131.612500 33.238060 -G1854703 Ōgaki 136.616670 35.350000 -G1854747 Odawara 139.159720 35.255560 -G1854902 Numazu 138.866670 35.100000 -G1855207 Nishinomiya 135.333330 34.716670 -G1855431 Niigata-shi 139.023610 37.902220 -G1855503 Nerima 139.650000 35.733330 -G1855612 Nara-shi 135.804850 34.685050 -G1856035 Naha-shi 127.681110 26.212500 -G1856057 Nagoya-shi 136.906410 35.181470 -G1856177 Nagasaki-shi 129.873610 32.744720 -G1856184 Nagareyama 139.902660 35.856300 -G1856199 Nagaoka 138.850000 37.450000 -G1856215 Nagano-shi 138.181110 36.651390 -G1856717 Miyazaki-shi 131.423890 31.911110 -G1856942 Mitaka-shi 139.559630 35.683510 -G1857144 Minami-rinkan 139.450000 35.483330 -G1857519 Matsumoto 137.966670 36.233330 -G1857550 Matsue-shi 133.050560 35.472220 -G1857553 Matsudo 139.900000 35.783330 -G1857843 Maebashi-shi 139.060830 36.391110 -G1857871 Machida 139.450830 35.540280 -G1857910 Kyoto 135.753850 35.021070 -G1858088 Kurume 130.516670 33.316670 -G1858296 Kure 132.566670 34.233330 -G1858311 Kurashiki 133.766670 34.583330 -G1858421 Kumamoto-shi 130.741670 32.789720 -G1858428 Kumagaya 139.383330 36.133330 -G1858729 Koshigaya 139.783330 35.883330 -G1858926 Komaki 136.916670 35.283330 -G1859100 Kōfu-shi 138.568330 35.663890 -G1859116 Kodaira 139.483890 35.726390 -G1859146 Kōchi-shi 133.531110 33.559720 -G1859171 Kōbe-shi 135.183000 34.691300 -G1859307 Kitakyūshū 130.833330 33.833330 -G1859383 Kishiwada 135.366670 34.466670 -G1859642 Kawasaki 139.717220 35.520560 -G1859675 Kawanishi 135.416670 34.816670 -G1859730 Kawaguchi 139.720560 35.805000 -G1859740 Kawagoe 139.485280 35.908610 -G1859884 Kasukabe 139.753610 35.976390 -G1859891 Kasugai 136.972290 35.247620 -G1859924 Kashiwa 139.968890 35.854440 -G1860243 Kanazawa-shi 136.625560 36.594440 -G1860437 Kami-renjaku 139.550000 35.683330 -G1860672 Kamakura 139.550280 35.308890 -G1860704 Kakogawa 134.850000 34.766670 -G1860827 Kagoshima-shi 130.558140 31.560180 -G1861107 Izumi 135.433330 34.483330 -G1861310 Itami 135.401260 34.784270 -G1861949 Ichinomiya 136.800000 35.300000 -G1861968 Ichikawa 139.924720 35.719720 -G1862033 Ibaraki 135.568280 34.816410 -G1862415 Hiroshima-shi 132.459370 34.396270 -G1862462 Hiratsuka 139.342220 35.323060 -G1862540 Hirakata 135.649140 34.813520 -G1862599 Hino 139.400280 35.673060 -G1862627 Himeji 134.700000 34.816670 -G1863289 Hamamatsu 137.733330 34.700000 -G1863431 Hadano 139.223610 35.371110 -G1863440 Hachiōji 139.323890 35.655830 -G1863641 Gifu-shi 136.760390 35.422910 -G1863905 Funabashi 139.983330 35.693060 -G1863917 Fukuyama 133.366670 34.483330 -G1863967 Fukuoka-shi 130.418060 33.606390 -G1863985 Fukui-shi 136.222570 36.064430 -G1864092 Fujisawa 139.470000 35.341940 -G1864134 Fuji 138.683330 35.166670 -G1864154 Fuchū 139.483330 35.666670 -G1864518 Chōfu 139.552220 35.655560 -G1864624 Chigasaki 139.403890 35.326110 -G1865005 Ashikaga 139.450000 36.333330 -G1865294 Anjō 137.080540 34.958280 -G1865387 Amagasaki 135.416670 34.716670 -G1865714 Ageo 139.588610 35.969720 -G1907146 Sayama 139.412120 35.852950 -G1926004 Wakayama-shi 135.167500 34.226110 -G1926099 Matsuyama-shi 132.765740 33.839160 -G2110556 Yamagata-shi 140.363330 38.240560 -G2110683 Tsukuba 140.100000 36.200000 -G2111149 Sendai-shi 140.871940 38.268890 -G2111220 Sakura 140.233330 35.716670 -G2111687 Narashino 140.033330 35.683330 -G2111834 Morioka-shi 141.152500 39.703610 -G2111901 Mito-shi 140.446670 36.341390 -G2112141 Kōriyama 140.383330 37.400000 -G2112312 Katsuta 140.533330 36.383330 -G2112539 Iwaki 140.883330 37.050000 -G2112664 Ichihara 140.083330 35.516670 -G2112708 Hitachi 140.650000 36.600000 -G2112923 Fukushima-shi 140.467780 37.750000 -G2113015 Chiba-shi 140.123330 35.604720 -G2113126 Akita 140.116670 39.716670 -G2113719 Akita-shi 140.103330 39.718060 -G2127733 Tomakomai 141.603330 42.636940 -G2128295 Sapporo-shi 141.346940 43.064170 -G2128815 Obihiro 143.204440 42.917220 -G2129376 Kushiro 144.374720 42.975000 -G2130057 Hirosaki 140.472500 40.593060 -G2130188 Hakodate 140.736670 41.775830 -G2130203 Hachinohe 141.500000 40.500000 -G2130629 Asahikawa 142.370280 43.767780 -G2130658 Aomori-shi 140.740000 40.824440 -G6697563 Neyagawa 135.627590 34.766150 -G6822096 Hitachi-Naka 140.534790 36.396590 -G6825489 Jōetsu 138.236420 37.148280 -G6940394 Saitama 139.656570 35.908070 -G7279570 Higashimurayama-shi 139.468520 35.754590 -G184622 Nakuru 36.066670 -0.283330 -G184745 Nairobi 36.816670 -1.283330 -G186301 Mombasa 39.660500 -4.055000 -G191245 Kisumu 34.750000 -0.100000 -G198629 Eldoret 35.269920 0.520360 -G1527534 Osh 72.790000 40.529440 -G1528675 Bishkek 74.590000 42.870000 -G1821306 Phnom Penh 104.916010 11.562450 -G1831142 Sihanoukville 103.529580 10.609320 -G1831797 Bătdâmbâng 103.198220 13.102710 -G1866923 Wŏnsan 127.443610 39.152780 -G1869446 Songnim 125.645000 38.754170 -G1870883 Sariwŏn 125.755830 38.507220 -G1871859 Pyongyang 125.754320 39.033850 -G1873757 Namp’o 125.407780 38.737500 -G1876373 Kaesŏng 126.554440 37.970830 -G1877030 Hŭngnam 127.618610 39.831670 -G1877449 Hamhŭng 127.536390 39.918330 -G1877615 Haeju 125.714720 38.040560 -G2040893 Sinŭiju 124.398060 40.100560 -G2043572 Kanggye-si 126.585230 40.969460 -G2044757 Ch’ŏngjin 129.775830 41.795560 -G1832157 Yŏsu 127.737780 34.744170 -G1832847 Yangju 127.061690 37.833110 -G1833105 Wŏnju 127.945280 37.351390 -G1833747 Ulsan 129.316670 35.537220 -G1833788 Ŭijŏngbu 127.047400 37.741500 -G1835235 Taejŏn 127.419720 36.321390 -G1835329 Taegu 128.591110 35.870280 -G1835553 Suwŏn 127.008890 37.291110 -G1835648 Sunch’ŏn 127.489470 34.948080 -G1835848 Seoul 126.977830 37.568260 -G1838524 Pusan 129.040280 35.102780 -G1838716 Puch’ŏn 126.783060 37.498890 -G1839071 P’ohang 129.365000 36.032220 -G1839652 Osan 127.070560 37.152220 -G1841066 Mokp’o 126.388610 34.793610 -G1841245 Masan 128.572500 35.208060 -G1841603 Kyŏngju 129.211670 35.842780 -G1841811 Kwangju 126.915560 35.154720 -G1841988 Kuri 127.139400 37.598600 -G1842025 Kunsan 126.711390 35.978610 -G1842225 Kumi 128.336000 36.113600 -G1842485 Goyang 126.835000 37.656390 -G1842943 Kimhae 128.881110 35.234170 -G1843137 Kangnŭng 128.896110 37.755560 -G1843491 Iksan 126.954440 35.943890 -G1843564 Inch’ŏn 126.731670 37.453610 -G1843702 Ich'ŏn 127.442500 37.279170 -G1843847 Hwaseong 126.816900 37.206820 -G1845136 Ch’unch’ŏn 127.734170 37.874720 -G1845457 Chŏnju 127.148890 35.821940 -G1845604 Ch’ŏngju 127.489720 36.637220 -G1845759 Ch’ŏnan 127.152200 36.806500 -G1846052 Chinju 128.084720 35.192780 -G1846266 Cheju 126.521940 33.509720 -G1846326 Ch’angwŏn 128.681110 35.228060 -G1846898 Anyang 126.926940 37.392500 -G1846918 Ansan 126.821940 37.323610 -G1897000 Sŏngnam 127.137780 37.438610 -G1948005 Kwangmyŏng 126.866390 37.477220 -G608668 Oral 51.366670 51.233330 -G609655 Karagandy 54.866670 50.066670 -G610529 Atyrau 51.883330 47.116670 -G610611 Aqtöbe 57.207180 50.279690 -G1516905 Taraz 71.366670 42.900000 -G1518262 Temirtau 72.948330 50.054440 -G1518543 Taldyqorghan 77.916670 45.000000 -G1518980 Shymkent 69.600000 42.300000 -G1519422 Semey 80.227500 50.411110 -G1519922 Qyzylorda 65.509170 44.852780 -G1519928 Qostanay 63.583330 53.166670 -G1519942 Qaraghandy 73.099440 49.798890 -G1520172 Petropavlovsk 69.162780 54.875280 -G1520240 Pavlodar 76.950000 52.300000 -G1520316 Ust’-Kamenogorsk 82.610280 49.978890 -G1526273 Astana 71.445980 51.180100 -G1526384 Almaty 76.950000 43.250000 -G1651944 Vientiane 102.600000 17.966670 -G266826 Tripoli 35.849720 34.436670 -G268064 Sidon 35.368890 33.563060 -G268743 Ra’s Bayrūt 35.483330 33.900000 -G276781 Beirut 35.494420 33.888940 -G1234633 Moratuwa 79.881600 6.773000 -G1242833 Jaffna 80.013700 9.656700 -G1246321 Galkissa 79.863000 6.829300 -G1248991 Colombo 79.847780 6.931940 -G2274895 Monrovia -10.796900 6.300540 -G593116 Vilnius 25.279800 54.689160 -G598098 Klaipėda 21.117500 55.717220 -G598316 Kaunas 23.900000 54.900000 -G456172 Riga 24.105890 56.946000 -G88319 Banghāzī 20.066670 32.116670 -G89055 Al Bayḑā’ 21.755060 32.762720 -G2210221 Tarhūnah 13.633200 32.435020 -G2210247 Tripoli 13.187460 32.875190 -G2214846 Mişrātah 15.092540 32.375350 -G2216885 Ḩārat az Zāwiyah 12.715000 32.763060 -G2219905 Al Khums 14.266670 32.650000 -G2528910 Tétouan -5.372420 35.571090 -G2530335 Tangier -5.813650 35.780580 -G2537763 Salé -6.816600 34.038920 -G2537881 Safi -9.237180 32.299390 -G2538475 Rabat -6.832550 34.013250 -G2540483 Oujda -1.907640 34.680520 -G2542051 Mohammedia -7.394420 33.706590 -G2542715 Meknès -5.547270 33.893520 -G2542997 Marrakech -8.008280 31.631480 -G2544248 Khouribga -6.906300 32.881080 -G2544571 Kenitra -6.580200 34.261010 -G2548885 Fès -4.999800 34.037150 -G2553604 Casablanca -7.619160 33.592780 -G2555745 Beni Mellal -6.349840 32.337250 -G2561668 Agadir -9.598150 30.420180 -G617239 Tiraspol 29.643330 46.840280 -G618426 Chişinău 28.857500 47.005560 -G1053384 Toamasina 49.383330 -18.166670 -G1062663 Mahajanga 46.316670 -15.716670 -G1064890 Fianarantsoa 47.083330 -21.433330 -G1070940 Antananarivo 47.530980 -18.914330 -G785842 Skopje 21.433330 42.000000 -G2460596 Bamako -8.000000 12.650000 -G1293960 Taunggyi 97.033330 20.783330 -G1295765 Akyab 92.900000 20.150000 -G1298824 Rangoon 96.156110 16.805280 -G1300466 Bago 96.479720 17.336670 -G1308465 Mawlamyine 97.625560 16.491390 -G1308522 Monywa 95.133330 22.116670 -G1309611 Myeik 98.600000 12.433330 -G1309793 Meiktila 95.866670 20.866670 -G1311874 Mandalay 96.083590 21.974730 -G1328421 Pathein 94.733330 16.783330 -G6611854 Nay Pyi Taw 96.129720 19.745000 -G2028462 Ulaanbaatar 106.883240 47.907710 -G1821274 Macau 113.546110 22.200560 -G2377450 Nouakchott -15.949750 18.100330 -G934154 Port Louis 57.498890 -20.161940 -G927967 Lilongwe 33.783330 -13.983330 -G931755 Blantyre 35.013870 -15.786820 -G3514450 Xochimilco -99.107500 19.262220 -G3514519 Xico -98.933330 19.266670 -G3514663 Alvaro Obregón -99.225000 19.373330 -G3514670 Villahermosa -92.916670 17.983330 -G3514674 Gustavo A. Madero -99.095830 19.478610 -G3514783 Veracruz -96.133330 19.200000 -G3515001 Tuxtla Gutiérrez -93.116670 16.750000 -G3515302 Toluca -99.667220 19.288330 -G3515428 Tlalpan -99.166670 19.283330 -G3515431 Tlalnepantla -99.221670 19.526940 -G3515463 Tlahuac -99.003330 19.281670 -G3515807 Cuautitlán Izcalli -99.246670 19.646940 -G3516109 Tehuacán -97.383330 18.450000 -G3516266 Tapachula -92.283330 14.900000 -G3516355 Tampico -97.850000 22.216670 -G3518135 San Pablo de las Salinas -99.096390 19.665830 -G3520339 Reynosa -98.283330 26.083330 -G3521081 Puebla de Zaragoza -98.200000 19.050000 -G3521168 Poza Rica de Hidalgo -97.459460 20.533150 -G3522210 Pachuca de Soto -98.733290 20.116970 -G3522507 Oaxaca de Juárez -96.716670 17.050000 -G3522551 Nuevo Laredo -99.516670 27.500000 -G3522732 Nicolás Romero -99.313060 19.621940 -G3522790 Naucalpan de Juárez -99.239630 19.478510 -G3523183 Minatitlán -94.516670 17.983330 -G3523303 Metepec -99.607780 19.253610 -G3523349 Mérida -89.616670 20.966670 -G3523466 Heroica Matamoros -97.500000 25.883330 -G3523760 Magdalena Contreras -99.233330 19.283330 -G3523908 Los Reyes -98.966670 19.350000 -G3526485 Jiutepec -99.183330 18.866670 -G3526617 Jalapa Enríquez -96.916670 19.533330 -G3526682 Ixtapaluca -98.883330 19.316670 -G3526683 Iztapalapa -99.051940 19.351110 -G3526700 Iztacalco -99.084720 19.396670 -G3529612 Ecatepec -99.052500 19.601110 -G3529947 Cuernavaca -99.250000 18.916670 -G3530049 Cuajimalpa -99.301110 19.355830 -G3530139 Coyoacán -99.160280 19.328890 -G3530517 Coatzacoalcos -94.416670 18.150000 -G3530569 Coacalco -99.110280 19.631670 -G3530580 Ciudad Victoria -99.133330 23.733330 -G3530589 Ciudad Nezahualcóyotl -99.033060 19.413610 -G3530594 Ciudad Madero -97.833330 22.266670 -G3530597 Mexico City -99.127660 19.428470 -G3530757 Cholula -98.303520 19.064060 -G3530870 Chilpancingo de los Bravos -99.500000 17.550000 -G3531200 Chalco de Díaz Covarrubias -98.900000 19.266670 -G3531673 Cancún -86.846560 21.174290 -G3531732 Campeche -90.533330 19.850000 -G3532497 Azcapotzalco -99.183610 19.488890 -G3532624 Ciudad López Mateos -99.261390 19.558330 -G3533462 Acapulco de Juárez -99.890100 16.863360 -G3827406 Benito Juarez -99.165000 19.385000 -G3827407 Venustiano Carranza -99.099170 19.430000 -G3827408 Miguel Hidalgo -99.202780 19.422500 -G3827409 Cuauhtémoc -99.156940 19.417220 -G3979770 Zapopan -103.400000 20.716670 -G3980760 Uruapan del Progreso -102.066670 19.416670 -G3981254 Torreón -103.433330 25.550000 -G3981369 Tonalá -103.233330 20.616670 -G3981461 Tlaquepaque -103.316670 20.650000 -G3981609 Tijuana -117.016670 32.533330 -G3981941 Tepic -104.900000 21.500000 -G3982912 Soledad Díez Gutiérrez -100.950000 22.200000 -G3984583 Santa Catarina -100.458130 25.673250 -G3985241 San Nicolás de los Garza -100.300000 25.750000 -G3985606 San Luis Potosí -100.983330 22.150000 -G3988086 Saltillo -101.000000 25.416670 -G3991164 Querétaro -100.383330 20.600000 -G3991328 Puerto Vallarta -105.230660 20.620410 -G3995402 Morelia -101.184430 19.700780 -G3995465 Monterrey -100.316670 25.666670 -G3995523 Monclova -101.416670 26.900000 -G3996069 Mexicali -115.468330 32.651940 -G3996322 Mazatlán -106.416670 23.216670 -G3997479 Los Mochis -108.966670 25.766670 -G3998655 León -101.666670 21.116670 -G4000900 La Paz -110.300000 24.166670 -G4004330 Irapuato -101.350000 20.683330 -G4004886 Heroica Nogales -110.933330 31.333330 -G4004898 Hermosillo -110.966670 29.066670 -G4005492 Guadalupe -100.250000 25.683330 -G4005539 Guadalajara -103.333330 20.666670 -G4005775 Gómez Palacio -103.500000 25.566670 -G4005867 General Escobedo -100.333330 25.816670 -G4006702 Ensenada -116.616670 31.866670 -G4011743 Durango -104.666670 24.033330 -G4012176 Culiacán -107.389720 24.799440 -G4013704 Ciudad Obregón -109.933330 27.483330 -G4013708 Ciudad Juárez -106.483330 31.733330 -G4014338 Chihuahua -106.083330 28.633330 -G4014875 Celaya -100.816670 20.516670 -G4018390 Apodaca -100.200000 25.766670 -G4019233 Aguascalientes -102.300000 21.883330 -G7280708 Colonia del Valle -99.162040 19.386110 -G1732687 Batu Pahat 102.933330 1.850000 -G1732745 Sekudai 103.666670 1.533330 -G1732752 Johor Bahru 103.757800 1.465500 -G1732811 Kluang 103.332800 2.025100 -G1732903 Shah Alam 101.532810 3.085070 -G1732905 Klang 101.450000 3.033330 -G1733432 Kota Kinabalu 116.066670 5.983330 -G1734052 Sandakan 118.117900 5.840200 -G1734199 Tawau 117.900000 4.250000 -G1734393 Kulim 100.561770 5.364990 -G1734586 Taiping 100.733330 4.850000 -G1734634 Ipoh 101.082900 4.584100 -G1734705 Kuala Terengganu 103.140800 5.330200 -G1734759 Melaka 102.248060 2.196940 -G1734810 Seremban 101.933330 2.716670 -G1735079 Bukit Mertajam 100.466700 5.363010 -G1735106 George Town 100.335430 5.411230 -G1735158 Petaling Jaya 101.606710 3.107260 -G1735161 Kuala Lumpur 101.686530 3.141200 -G1735227 Kuantan 103.326000 3.807700 -G1735498 Sungai Petani 100.487720 5.647000 -G1735634 Kuching 110.333330 1.550000 -G1735902 Sibu 111.816670 2.300000 -G1736309 Alor Setar 100.360140 6.121040 -G1736376 Kota Bharu 102.238600 6.133280 -G1737486 Bintulu 113.033330 3.166670 -G1738050 Miri 113.983330 4.383330 -G1771023 Kampung Baru Subang 101.533330 3.150000 -G1028434 Quelimane 36.888330 -17.878610 -G1033356 Nampula 39.266600 -15.116460 -G1035025 Cidade de Nacala 40.672780 -14.542780 -G1039854 Matola 32.458890 -25.962220 -G1040652 Maputo 32.589170 -25.965280 -G1049261 Chimoio 33.483330 -19.116390 -G1052373 Beira 34.838890 -19.843610 -G3352136 Windhoek 17.083230 -22.559410 -G2437798 Zinder 8.988370 13.804870 -G2440485 Niamey 2.111780 13.512500 -G2441291 Maradi 7.101740 13.500000 -G2317765 Zaria 7.725180 11.113240 -G2319133 Warri 5.750000 5.516670 -G2320576 Umuahia 7.489590 5.526270 -G2320831 Ugep 8.081200 5.808600 -G2322794 Abuja 7.180830 9.175830 -G2322911 Sokoto 5.239020 13.060920 -G2323390 Saki 3.383330 8.666670 -G2323411 Shagamu 3.647760 6.843230 -G2323675 Sapele 5.676660 5.894050 -G2324774 Port Harcourt 7.013400 4.777420 -G2325200 Oyo 3.933330 7.850000 -G2325314 Owo 5.586810 7.196200 -G2325330 Owerri 7.030410 5.483330 -G2326016 Onitsha 6.788450 6.145430 -G2326171 Ondo 4.833330 7.100000 -G2328765 Nnewi 6.914780 6.019860 -G2329821 Mubi 13.264360 10.267610 -G2330100 Minna 6.556940 9.613890 -G2331140 Makurdi 8.512100 7.741100 -G2331447 Maiduguri 13.160270 11.846440 -G2332459 Lagos 3.395830 6.453060 -G2334327 Kishi 3.850000 9.083330 -G2334802 Katsina 7.600630 12.989430 -G2335204 Kano 8.513810 11.994350 -G2335727 Kaduna 7.438280 10.522240 -G2335953 Jos 8.900000 9.916670 -G2336056 Jimeta 12.466670 9.283330 -G2336905 Iwo 4.183330 7.633330 -G2337207 Ise-Ekiti 5.428100 7.463200 -G2337490 Inisa 4.333330 7.850000 -G2337639 Ilorin 4.550000 8.500000 -G2337704 Ilesa 4.733330 7.616670 -G2337765 Ila Orangun 4.900000 8.016670 -G2338106 Ikot-Ekpene 7.710820 5.179380 -G2338273 Ikire 4.183330 7.350000 -G2338385 Ijero-Ekiti 5.074200 7.813900 -G2338400 Ijebu-Ode 3.915880 6.816090 -G2339354 Ibadan 3.896390 7.387780 -G2339937 Gusau 6.661350 12.162780 -G2340451 Gombe 11.167290 10.289690 -G2343279 Enugu 7.494300 6.440200 -G2343983 Effon Alaiye 4.916670 7.650000 -G2344082 Ebute Ikorodu 3.488180 6.600860 -G2345521 Damaturu 11.960800 11.747000 -G2346229 Calabar 8.322000 4.951700 -G2347209 Bida 6.016670 9.083330 -G2347283 Benin City 5.627490 6.335040 -G2347470 Bauchi 9.843270 10.313440 -G2348773 Awka 7.074110 6.210090 -G2350841 Akure 5.193120 7.252560 -G2352778 Abuja 7.489760 9.057350 -G2352947 Abeokuta 3.350000 7.150000 -G2353151 Aba 7.366670 5.106580 -G3617763 Managua -86.250400 12.132820 -G2745912 Utrecht 5.122220 52.090830 -G2746301 Tilburg 5.091300 51.555510 -G2747373 Den Haag 4.298610 52.076670 -G2747891 Rotterdam 4.479170 51.922500 -G2750053 Nijmegen 5.852780 51.842500 -G2755251 Groningen 6.566670 53.219170 -G2756071 Enschede 6.895830 52.218330 -G2756253 Eindhoven 5.477780 51.440830 -G2758401 Breda 4.775960 51.586560 -G2759794 Amsterdam 4.889690 52.374030 -G2759879 Almere Stad 5.214130 52.370250 -G3143244 Oslo 10.746090 59.912730 -G3161732 Bergen 5.324150 60.392990 -G1282898 Pokhara 83.968510 28.266890 -G1282931 Pātan 85.333330 27.666670 -G1283240 Kathmandu 85.320600 27.701690 -G1283582 Birātnagar 87.283370 26.483100 -G2179537 Wellington 174.775570 -41.286640 -G2185964 North Shore 174.750000 -36.800000 -G2187404 Manukau City 174.879860 -36.992820 -G2190324 Hamilton 175.283330 -37.783330 -G2192362 Christchurch 172.633330 -43.533330 -G2193733 Auckland 174.766670 -36.866670 -G7302484 Waitakere 174.657730 -36.917540 -G286621 Şalālah 54.092370 17.015050 -G287286 Muscat 58.593330 23.613330 -G288764 Bawshar 58.410630 23.558270 -G288967 As Sīb 58.182500 23.680280 -G3701329 San Miguelito -79.500000 9.033330 -G3703443 Panamá -79.519730 8.993600 -G3691175 Trujillo -79.029980 -8.115990 -G3691674 Sullana -80.685280 -4.903890 -G3693345 Pucallpa -74.553870 -8.379150 -G3693528 Piura -80.633330 -5.200000 -G3696183 Iquitos -73.247220 -3.748060 -G3698304 Chimbote -78.578330 -9.085280 -G3698350 Chiclayo -79.841670 -6.773610 -G3928128 Tacna -70.248330 -18.005560 -G3936456 Lima -77.028240 -12.043180 -G3937513 Juliaca -70.133330 -15.500000 -G3938527 Ica -75.730830 -14.065280 -G3939459 Huancayo -75.233330 -12.066670 -G3941584 Cusco -71.978060 -13.518330 -G3943789 Chincha Alta -76.132350 -13.409850 -G3946083 Callao -77.150000 -12.066670 -G3947322 Arequipa -71.535000 -16.398890 -G2088122 Port Moresby 147.179720 -9.443140 -G1679432 Zamboanga 122.073890 6.910280 -G1681602 Toledo 123.641940 10.379170 -G1682598 Taytay 121.139400 14.567800 -G1682812 Tarlac 120.598610 15.488890 -G1687687 Santol 120.567500 15.162220 -G1687894 Santa Rosa 121.111390 14.312220 -G1688749 San Pedro 121.047300 14.359500 -G1688830 San Pablo 121.325830 14.066940 -G1689395 San Jose del Monte 121.045280 14.813890 -G1690039 San Fernando 120.689800 15.028600 -G1692685 Puerto Princesa 118.735280 9.739170 -G1695743 Panalanoy 125.006390 11.251110 -G1697175 Olongapo 120.282780 14.829170 -G1699802 Meycauayan 120.960830 14.736940 -G1701472 Mantampay 124.216670 8.166670 -G1701500 Mansilingan 122.978890 10.631110 -G1701668 Manila 120.982200 14.604200 -G1701947 Mandaue City 123.922220 10.323610 -G1702540 Malolos 120.811670 14.841940 -G1704703 Mabalacat 120.573600 15.221600 -G1705357 Lucena 121.617220 13.931390 -G1706090 Lipa 121.173890 13.939440 -G1706684 Libertad 125.501940 8.944170 -G1706889 Legaspi 123.734440 13.137220 -G1707267 Lapu-Lapu City 123.949440 10.310280 -G1710914 Imus 120.936670 14.429720 -G1711005 Iloilo 122.564440 10.696940 -G1711082 Iligan City 124.400000 8.250000 -G1712051 Guyong 120.979720 14.838610 -G1715348 Davao 125.612780 7.073060 -G1715430 Dasmariñas 120.936670 14.329440 -G1716771 Cotabato 124.246390 7.223610 -G1717512 Cebu City 123.890710 10.316720 -G1720681 Calamba 121.165280 14.211670 -G1720840 Cainta 121.122200 14.578600 -G1721080 Cagayan de Oro 124.647220 8.482220 -G1721906 Cabanatuan 120.967500 15.486940 -G1725094 Binangonan 121.192900 14.464600 -G1726280 Batangas 121.060000 13.759440 -G1728930 Baguio 120.593060 16.416390 -G1729085 Bago City 122.833330 10.533330 -G1729524 Bacoor 120.942500 14.457780 -G1729564 Bacolod City 122.950000 10.666670 -G1730501 Antipolo 121.175280 14.586390 -G1730737 Angeles City 120.583330 15.150000 -G1164408 Sukkur 68.866670 27.700000 -G1164909 Siālkot 74.543130 32.510100 -G1165108 Shikārpur 68.637890 27.957060 -G1165221 Sheikhupura 73.978330 31.713060 -G1166000 Sargodha 72.671110 32.083610 -G1166548 Montgomery 73.100000 30.666670 -G1166652 Sādiqābād 70.133330 28.300000 -G1166993 Rāwalpindi 73.067900 33.600700 -G1167528 Quetta 67.012500 30.187220 -G1168197 Peshāwar 71.580180 34.008370 -G1168718 Okāra 73.445830 30.808060 -G1169116 Nawābshāh 68.410520 26.252890 -G1169605 Muzaffargarh 71.192130 30.075370 -G1169692 Murīdke 74.261670 31.802500 -G1169825 Multān 71.475280 30.195560 -G1170295 Mīrpur Khās 69.015900 25.525100 -G1170395 Mingāora 72.362200 34.775000 -G1170880 Mardān 72.045830 34.198330 -G1172128 Lārkāna 68.216670 27.550000 -G1172451 Lahore 74.343610 31.549720 -G1173055 Kotli 73.916670 33.516670 -G1173491 Kohāt 71.442220 33.586940 -G1174625 Kasūr 74.446670 31.115560 -G1174872 Karachi 67.082200 24.905600 -G1175088 Kamoke 74.224440 31.974440 -G1175864 Jhelum 73.726370 32.933130 -G1175892 Jhang Sadr 72.316040 31.273960 -G1176515 Jacobābād 68.433160 28.286730 -G1176615 Islāmābād 73.043290 33.721480 -G1176734 Hyderābād 68.369900 25.382300 -G1177384 Hāfizābād 73.685450 32.067860 -G1177654 Gujrāt 74.089590 32.572760 -G1177662 Gujrānwāla 74.188310 32.161670 -G1179400 Faisalābād 73.083330 31.416670 -G1180289 Dera Ghāzi Khān 70.634770 30.056140 -G1181096 Chiniot 72.978890 31.720000 -G1182092 Būrewāla 72.650000 30.166670 -G1182637 Bhimbar 74.079260 32.975680 -G1183880 Bahāwalpur 71.683330 29.400000 -G756135 Warsaw 21.011780 52.229770 -G759734 Rzeszów 21.999010 50.041320 -G760778 Radom 21.147140 51.402530 -G763166 Olsztyn 20.483330 53.783330 -G765876 Lublin 22.566670 51.250000 -G769250 Kielce 20.627520 50.870330 -G776069 Białystok 23.150000 53.133330 -G3080985 Zabrze 18.785760 50.324920 -G3081368 Wrocław 17.033330 51.100000 -G3083271 Toruń 18.598140 53.013750 -G3083829 Szczecin 14.553020 53.428940 -G3085128 Sosnowiec 19.103850 50.286820 -G3088171 Poznań 16.966670 52.416670 -G3093133 Litzmannstadt 19.466670 51.750000 -G3094802 Kraków 19.916670 50.083330 -G3096472 Katowice 19.016670 50.266670 -G3099230 Gliwice 18.666670 50.283330 -G3099424 Gdynia 18.531880 54.518890 -G3099434 Gdańsk 18.646370 54.352050 -G3100946 Częstochowa 19.124090 50.796460 -G3101950 Bytom 18.966670 50.350000 -G3102014 Bydgoszcz 18.007620 53.123500 -G3103402 Bielsko-Biała 19.033330 49.816670 -G4562831 Bayamón -66.155720 18.398560 -G4563243 Carolina -65.957390 18.380780 -G4566880 Ponce -66.614060 18.011080 -G4568127 San Juan -66.105720 18.466330 -G281124 Khān Yūnis 34.306270 31.340180 -G281129 Jabālyā 34.486340 31.527220 -G281133 Gaza 34.466670 31.500000 -G285066 Hebron 35.100000 31.533330 -G7303419 East Jerusalem 35.233880 31.783360 -G2267057 Lisbon -9.133330 38.716670 -G2271772 Amadora -9.230830 38.753820 -G2735943 Porto -8.616670 41.150000 -G3437056 San Lorenzo -57.533330 -25.333330 -G3439214 Capiatá -57.416670 -25.350000 -G3439389 Asunción -57.635910 -25.300660 -G289888 Ar Rayyān 51.424440 25.291940 -G290030 Doha 51.522450 25.279320 -G665087 Timişoara 21.227220 45.749440 -G667268 Sibiu 24.150000 45.800000 -G670474 Ploieşti 26.016670 44.950000 -G670609 Piteşti 24.866670 44.850000 -G671768 Oradea 21.933330 47.066670 -G675810 Iaşi 27.600000 47.166670 -G677697 Galaţi 28.050000 45.450000 -G680332 Craiova 23.800000 44.316670 -G680963 Constanţa 28.650000 44.183330 -G681290 Cluj-Napoca 23.600000 46.766670 -G683506 Bucureşti 26.106260 44.432250 -G683844 Braşov 25.606130 45.648610 -G683902 Brăila 27.983330 45.266670 -G685948 Bacău 26.900000 46.566670 -G686254 Arad 21.316670 46.183330 -G783920 Zemun 20.401110 44.843060 -G787657 Niš 21.903330 43.324720 -G792680 Belgrade 20.465130 44.804010 -G3194360 Novi Sad 19.836940 45.251670 -G462444 Zlatoust 59.650830 55.171110 -G463829 Zelenograd 37.181390 55.982500 -G466806 Yoshkar-Ola 47.890780 56.638770 -G468902 Yaroslavl' 39.873680 57.629870 -G472045 Voronezh 39.192270 51.669900 -G472231 Volzhskiy 44.771670 48.790560 -G472459 Vologda 39.888600 59.218700 -G472757 Volgograd 44.585830 48.804720 -G472761 Volgodonsk 42.151390 47.513610 -G473247 Vladimir 40.398060 56.142780 -G473249 Vladikavkaz 44.667780 43.036670 -G479123 Ul'yanovsk 48.400000 54.333330 -G479561 Ufa 56.037500 54.775000 -G480060 Tver' 35.893060 56.861940 -G480562 Tula 37.611110 54.204440 -G482283 Tol’yatti 49.412500 53.523330 -G484646 Tambov 41.433890 52.731670 -G484907 Taganrog 38.890800 47.227300 -G484972 Syzran’ 48.474440 53.173060 -G485239 Syktyvkar 50.812220 61.666670 -G487495 Sterlitamak 55.954300 53.629500 -G487846 Stavropol’ 41.973330 45.042780 -G487928 Staryy Oskol 37.841670 51.296670 -G491422 Sochi 39.730280 43.600000 -G491687 Smolensk 32.040100 54.781800 -G496015 Shakhty 40.205830 47.712220 -G496285 Severodvinsk 39.847500 64.572220 -G498677 Saratov 46.033330 51.566670 -G498698 Saransk 45.174900 54.183800 -G498817 Saint Petersburg 30.264170 59.894440 -G499099 Samara 50.150000 53.200000 -G499292 Salavat 55.936500 53.358000 -G500004 Rybinsk 38.842590 58.044600 -G500096 Ryazan’ 39.691600 54.626900 -G501175 Rostov-na-Donu 39.713890 47.236390 -G504341 Pskov 28.349600 57.813600 -G508101 Podol’sk 37.544170 55.423890 -G509820 Petrozavodsk 34.346910 61.784910 -G511196 Perm’ 56.250000 58.000000 -G511565 Penza 45.000000 53.194400 -G514734 Orsk 58.570000 51.225280 -G515003 Orenburg 55.098800 51.772700 -G515012 Orël 36.080280 52.965830 -G518255 Novorossiysk 37.770830 44.723890 -G518970 Novocherkassk 40.093890 47.418060 -G519336 Velikiy Novgorod 31.283330 58.516670 -G520494 Nizhniy Tagil 59.965000 57.919440 -G520555 Nizhniy Novgorod 44.002050 56.328670 -G521118 Nizhnekamsk 51.822100 55.637600 -G523064 Nazran’ 44.765000 43.226110 -G523523 Nal’chik 43.618890 43.498060 -G523750 Naberezhnyye Chelny 52.410100 55.735400 -G523812 Mytishchi 37.730760 55.911630 -G524305 Murmansk 33.081940 68.971670 -G524901 Moscow 37.615560 55.752220 -G528293 Maykop 40.105830 44.607780 -G532096 Makhachkala 47.502220 42.975280 -G532288 Magnitogorsk 59.047220 53.418610 -G532615 Lyubertsy 37.893220 55.677190 -G535121 Lipetsk 39.574500 52.599500 -G538560 Kursk 36.193890 51.730280 -G542420 Krasnodar 38.972500 45.048800 -G543460 Kovrov 41.319170 56.357220 -G543878 Kostroma 40.926110 57.767220 -G548408 Kirov 49.658330 58.596940 -G551487 Kazan’ 49.124800 55.787700 -G553915 Kaluga 36.275420 54.529300 -G554234 Kaliningrad 20.500000 54.710000 -G554840 Izhevsk 53.233330 56.850000 -G555312 Ivanovo 40.985830 56.994170 -G558418 Groznyy 45.700280 43.308330 -G563464 Engel's 46.116670 51.500000 -G563708 Dzerzhinsk 43.463060 56.238890 -G569223 Cherepovets 37.900000 59.133330 -G569696 Cheboksary 47.251940 56.132220 -G571476 Bryansk 34.380560 53.287500 -G577206 Berezniki 56.794720 59.409720 -G578072 Belgorod 36.587000 50.603000 -G579464 Balashikha 37.958060 55.809450 -G579492 Balakovo 47.794110 52.024660 -G580497 Astrakhan’ 48.049170 46.349440 -G580922 Armavir 41.120280 44.989720 -G581049 Arkhangel’sk 40.548610 64.547220 -G1486209 Yekaterinburg 60.612500 56.857500 -G1488754 Tyumen’ 65.527220 57.152220 -G1489425 Tomsk 84.966670 56.500000 -G1490624 Surgut 73.416670 61.250000 -G1493467 Rubtsovsk 81.250000 51.500000 -G1494114 Prokop’yevsk 86.719000 53.905900 -G1496153 Omsk 73.400000 55.000000 -G1496747 Novosibirsk 82.934440 55.041110 -G1496990 Novokuznetsk 87.109900 53.755700 -G1497543 Nizhnevartovsk 76.553100 60.934400 -G1498894 Miass 60.108330 55.045000 -G1501321 Kurgan 65.333330 55.450000 -G1502026 Krasnoyarsk 92.791670 56.009720 -G1503901 Kemerovo 86.083330 55.333330 -G1504826 Kamensk-Ural’skiy 61.925870 56.413310 -G1508291 Chelyabinsk 61.429720 55.154440 -G1510018 Biysk 85.207220 52.536390 -G1510853 Barnaul 83.763610 53.360560 -G1512236 Abakan 91.429170 53.715560 -G2013159 Yakutsk 129.733060 62.033890 -G2013348 Vladivostok 131.873530 43.105620 -G2014006 Ussuriysk 132.009440 43.802500 -G2014407 Ulan-Ude 107.609790 51.826050 -G2021851 Komsomol’sk-na-Amure 137.015240 50.551990 -G2022890 Khabarovsk 135.092780 48.480830 -G2023469 Irkutsk 104.296390 52.297780 -G2025339 Chita 113.550000 52.033330 -G2026609 Blagoveshchensk 127.533330 50.266670 -G2027667 Angarsk 103.886390 52.536670 -G2051523 Bratsk 101.614170 56.132500 -G2056752 Khabarovsk Vtoroy 135.135560 48.443060 -G2119441 Yuzhno-Sakhalinsk 142.733660 46.958120 -G2122104 Petropavlovsk-Kamchatskiy 158.648300 53.045200 -G202061 Kigali 30.058850 -1.949950 -G100425 Yanbu‘ al Baḩr 38.048610 24.085280 -G101628 Tabūk 36.583330 28.383330 -G101760 Sulţānah 39.583330 24.500000 -G103630 Najrān 44.184170 17.505560 -G104515 Mecca 39.826110 21.426670 -G105072 Khamīs Mushayt 42.729170 18.306390 -G105343 Jiddah 39.219170 21.516940 -G106281 Hayil 41.696940 27.516390 -G107304 Buraydah 43.971670 26.331670 -G107968 Tayif 40.415830 21.270280 -G108410 Riyadh 46.721850 24.687730 -G109101 Al Mubarraz 49.580830 25.410000 -G109223 Medina 39.614170 24.468610 -G109323 Al Khubar 50.208330 26.279440 -G109435 Al Jubayl 49.661390 27.004720 -G109571 Al Hufūf 49.586670 25.378330 -G110336 Ad Dammām 50.114170 26.425830 -G110690 Abhā 42.505280 18.216390 -G364103 Wad Medani 33.498900 14.405600 -G365137 Omdurman 32.437220 15.636110 -G370737 Malakal 31.656110 9.536940 -G371760 Kūstī 32.666670 13.166670 -G372753 Kassala 36.400100 15.457000 -G373303 Juba 31.582470 4.851650 -G377039 Port Sudan 37.216390 19.615830 -G379003 El Obeid 30.216670 13.183330 -G379252 Khartoum 32.533610 15.546650 -G379303 El Geneina 22.450000 13.450000 -G379555 El Fasher 25.350000 13.633330 -G380174 Ed Damazin 34.359200 11.789100 -G2673730 Stockholm 18.064900 59.332580 -G2692969 Malmö 13.000730 55.605870 -G2711537 Göteborg 11.966790 57.707160 -G1880252 Singapore 103.850070 1.289670 -G3196359 Ljubljana 14.505130 46.051080 -G724443 Košice 21.250000 48.716670 -G3060972 Bratislava 17.106740 48.148160 -G2409306 Freetown -13.229940 8.484000 -G2410048 Bo -11.738330 7.964720 -G2243940 Ziguinchor -16.271940 12.583330 -G2244799 Thiès Nones -16.966670 14.783330 -G2246452 Saint-Louis -16.489620 16.017930 -G2246678 Pikine -17.400000 14.750000 -G2251339 Grand Dakar -17.455280 14.708890 -G2253354 Dakar -17.444060 14.693700 -G53654 Mogadishu 45.343750 2.037110 -G55671 Chisimayu 42.545360 -0.358170 -G56399 Jamaame 42.750560 0.072220 -G57289 Hargeysa 44.065000 9.560000 -G64435 Berbera 45.016390 10.435560 -G3383330 Paramaribo -55.166820 5.866380 -G3583096 Soyapango -89.151390 13.734720 -G3583334 Santa Ana -89.559720 13.994170 -G3583361 San Salvador -89.187180 13.689350 -G3583446 San Miquel -88.183330 13.483330 -G3584399 Mejicanos -89.213060 13.740280 -G169577 Hums 36.723390 34.726820 -G170017 Ḩamāh 36.757830 35.131790 -G170063 Aleppo 37.158610 36.202780 -G170654 Damascus 36.291280 33.510200 -G170794 Dayr az Zawr 40.150000 35.333330 -G172955 Ar Raqqah 39.016670 35.950000 -G173576 Latakia 35.783330 35.516670 -G2427123 N'Djamena 15.034790 12.110580 -G2365267 Lomé 1.212270 6.137480 -G1152473 Lampang 99.492770 18.292320 -G1153671 Chiang Mai 98.984680 18.790380 -G1605239 Udon Thani 102.785890 17.415670 -G1606250 Si Racha 100.931110 13.173720 -G1606590 Samut Prakan 100.596750 13.599340 -G1607508 Phra Pradaeng 100.533620 13.658540 -G1608048 Pak Kret 100.498830 13.913010 -G1608133 Mueang Nonthaburi 100.514770 13.860750 -G1608529 Nakhon Ratchasima 102.101960 14.970660 -G1609350 Bangkok 100.516670 13.750000 -G1610780 Hat Yai 100.476680 7.008360 -G1611110 Chon Buri 100.983450 13.362200 -G1221874 Dushanbe 68.779050 38.535750 -G162183 Ashgabat 58.383330 37.950000 -G601734 Daşoguz 59.966670 41.833330 -G1219649 Türkmenabat 63.575000 39.101390 -G2464470 Tunis 10.165790 36.818970 -G2464915 Sousse 10.636990 35.825390 -G2467454 Sfax 10.760280 34.740560 -G298033 Viranşehir 39.763060 37.235280 -G298117 Van 43.383110 38.492390 -G298299 Uşak 29.405800 38.673510 -G298333 Şanlıurfa 38.793920 37.167080 -G299817 Tarsus 34.878400 36.918760 -G300614 Siverek 39.316670 37.755020 -G300619 Sivas 37.016110 39.748330 -G303195 Osmaniye 36.247780 37.074170 -G304531 Mercin 34.617920 36.795260 -G304827 Manisa 27.426460 38.612020 -G304922 Malatya 38.316670 38.350180 -G305268 Kütahya 29.983330 39.424170 -G306571 Konya 32.482500 37.865560 -G307084 Kızıltepe 40.585000 37.193330 -G307654 Kırıkkale 33.506390 39.845280 -G308464 Kayseri 35.485280 38.732220 -G310859 Kahramanmaraş 36.926400 37.584700 -G311046 İzmir 27.138380 38.412730 -G311073 Isparta 30.552220 37.764440 -G311111 İskenderun 36.173470 36.587180 -G314830 Gaziantep 37.382500 37.059440 -G315202 Eskişehir 30.520560 39.776670 -G315368 Erzurum 41.276940 39.908610 -G315808 Elazığ 39.223210 38.674310 -G316541 Diyarbakır 40.218890 37.915830 -G317109 Denizli 29.087500 37.774170 -G321836 Batman 41.132210 37.887380 -G322165 Balıkesir 27.886110 39.649170 -G322830 Aydın 27.839630 37.845010 -G323777 Antalya 30.689720 36.912500 -G323779 Antioch 36.157220 36.206550 -G323786 Ankara 32.854270 39.919870 -G324496 Aksaray 34.025370 38.372550 -G325330 Adıyaman 38.276290 37.764410 -G325363 Adana 35.328890 37.001670 -G442301 Batikent 32.730830 39.968330 -G737071 Zeytinburnu 28.904170 40.994410 -G738377 Umraniye 29.124760 41.016430 -G738648 Trabzon 39.726940 41.005000 -G739549 Şişli 28.987170 41.060460 -G740264 Samsun 36.330000 41.286670 -G741763 Maltepe 29.155070 40.935670 -G745028 İzmit 29.916940 40.766940 -G745044 İstanbul 28.949660 41.013840 -G747014 Gebze 29.430680 40.802760 -G747323 Esenyurt 28.675280 41.033330 -G747340 Esenler 28.876190 41.043500 -G748879 Çorum 34.953330 40.548890 -G748893 Çorlu 27.800000 41.159170 -G750269 Bursa 29.061110 40.191670 -G751324 Bağcılar 28.856710 41.039030 -G752850 Adapazarı 30.403330 40.780560 -G6947637 Ataşehir 29.116700 40.983300 -G6947639 Başakşehir 28.802030 41.093070 -G6947641 Büyükçekmece 28.585020 41.020720 -G6955677 Çankaya 32.862680 39.917900 -G7627067 Bahçelievler 28.859800 41.002310 -G7628416 Sultangazi 28.868470 41.106520 -G7628419 Sultanbeyli 29.270670 40.960720 -G7628420 Sancaktepe 29.231870 41.002440 -G7701384 Karabağlar 27.135200 38.373960 -G1668341 Taipei 121.531850 25.047760 -G1668399 Taichung 120.683900 24.146900 -G1670029 Banqiao 121.467190 25.014270 -G1673820 Kaohsiung 120.313330 22.616260 -G1674504 Hualian 121.604440 23.976940 -G1675151 Xinzhushi 120.968610 24.803610 -G1678228 Keelung 121.741900 25.128250 -G6695168 Tainan City 120.168110 23.024760 -G6696918 Taoyuan City 121.296960 24.993680 -G148730 Zanzibar 39.197930 -6.163940 -G149606 Tanga 39.100000 -5.066670 -G152224 Mwanza 32.900000 -2.516670 -G153209 Moshi 37.333330 -3.350000 -G153220 Morogoro 37.666670 -6.816670 -G154380 Mbeya 33.450000 -8.900000 -G157738 Kigoma 29.626670 -4.876940 -G160196 Dodoma 35.737920 -6.174860 -G160263 Dar es Salaam 39.269510 -6.823490 -G161325 Arusha 36.683330 -3.366670 -G686967 Zhytomyr 28.666670 50.250000 -G687700 Zaporizhzhya 35.183330 47.816670 -G689558 Vinnytsya 28.483330 49.233330 -G691650 Ternopil’ 25.608750 49.551600 -G692194 Sumy 34.781940 50.919720 -G693805 Simferopol’ 34.105580 44.958440 -G694423 Sevastopol’ 33.522400 44.588830 -G695594 Rivne 26.250000 50.616670 -G696643 Poltava 34.566670 49.583330 -G698740 Odesa 30.732620 46.477470 -G700569 Mykolayiv 32.000000 46.966670 -G701404 Melitopol’ 35.373060 46.842220 -G701822 Mariupol' 37.500000 47.066670 -G702320 Makiyivka 37.966670 48.033330 -G702550 L'viv 24.023240 49.838260 -G702569 Luts’k 25.333330 50.750000 -G702658 Luhans’k 39.333330 48.566670 -G703448 Kiev 30.523800 50.454660 -G703845 Kryvyy Rih 33.350000 47.916670 -G704147 Kremenchuk 33.419720 49.097250 -G704508 Kramators’k 37.533330 48.716670 -G705812 Kirovohrad 32.263060 48.504170 -G706369 Khmel’nyts’kyy 27.000000 49.416670 -G706448 Kherson 32.600000 46.633330 -G706483 Kharkiv 36.250000 50.000000 -G706524 Kerch 36.467980 45.357990 -G707471 Ivano-Frankivs’k 24.709720 48.921500 -G707753 Horlivka 38.050000 48.300000 -G709717 Donets’k 37.800000 48.000000 -G709930 Dnipropetrovsk 34.983330 48.450000 -G709932 Dniprodzerzhyns’k 34.616670 48.500000 -G710719 Chernivtsi 25.933330 48.300000 -G710735 Chernihiv 31.300000 51.500000 -G710791 Cherkasy 32.066670 49.433330 -G712165 Bila Tserkva 30.116670 49.783330 -G232422 Kampala 32.582190 0.316280 -G4049979 Birmingham -86.802490 33.520660 -G4068590 Huntsville -86.586100 34.730370 -G4076598 Mobile -88.043050 30.694360 -G4076784 Montgomery -86.299970 32.366810 -G4119403 Little Rock -92.289590 34.746480 -G4140963 Washington, D. C. -77.036370 38.895110 -G4155966 Fort Lauderdale -80.143380 26.122310 -G4158476 Hialeah -80.278110 25.857600 -G4160021 Jacksonville -81.655650 30.332180 -G4164138 Miami -80.193660 25.774270 -G4167147 Orlando -81.379240 28.538340 -G4171563 Saint Petersburg -82.679270 27.770860 -G4174715 Tallahassee -84.280730 30.438260 -G4174757 Tampa -82.458430 27.947520 -G4180439 Atlanta -84.387980 33.749000 -G4188985 Columbus -84.987710 32.460980 -G4259418 Indianapolis -86.158040 39.768380 -G4281730 Wichita -97.337540 37.692240 -G4297983 Lexington -84.477720 37.988690 -G4297999 Lexington-Fayette -84.458550 38.049800 -G4299276 Louisville -85.759410 38.254240 -G4315588 Baton Rouge -91.154550 30.450750 -G4335045 New Orleans -90.075070 29.954650 -G4341513 Shreveport -93.750180 32.525150 -G4347778 Baltimore -76.612190 39.290380 -G4393217 Kansas City -94.578570 39.099730 -G4407066 Saint Louis -90.197890 38.627270 -G4409896 Springfield -93.298240 37.215330 -G4431410 Jackson -90.184810 32.298760 -G4460243 Charlotte -80.843130 35.227090 -G4464368 Durham -78.898620 35.994030 -G4469146 Greensboro -79.791980 36.072640 -G4487042 Raleigh -78.638610 35.772100 -G4498303 West Raleigh -78.663890 35.786820 -G4499612 Winston-Salem -80.244220 36.099860 -G4508722 Cincinnati -84.456890 39.162000 -G4509177 Columbus -82.998790 39.961180 -G4509884 Dayton -84.191610 39.758950 -G4544349 Oklahoma City -97.516430 35.467560 -G4553433 Tulsa -95.992780 36.153980 -G4560349 Philadelphia -75.163790 39.952340 -G4612862 Chattanooga -85.309680 35.045630 -G4619947 East Chattanooga -85.249120 35.065350 -G4634946 Knoxville -83.920740 35.960640 -G4641239 Memphis -90.048980 35.149530 -G4644585 Nashville -86.784440 36.165890 -G4645421 New South Memphis -90.056760 35.086760 -G4671240 Arlington -97.108070 32.735690 -G4671654 Austin -97.743060 30.267150 -G4676740 Brownsville -97.497480 25.901750 -G4683416 Corpus Christi -97.396380 27.800580 -G4684888 Dallas -96.806670 32.783060 -G4691930 Fort Worth -97.320850 32.725410 -G4693003 Garland -96.638880 32.912620 -G4699066 Houston -95.363270 29.763280 -G4700168 Irving -96.948890 32.814020 -G4705349 Laredo -99.507540 27.506410 -G4719457 Plano -96.698890 33.019840 -G4726206 San Antonio -98.493630 29.424120 -G4744709 Arlington -77.104280 38.881010 -G4752186 Chesapeake -76.274940 36.819040 -G4776024 Newport News -76.428000 36.978760 -G4776222 Norfolk -76.285220 36.846810 -G4781708 Richmond -77.460260 37.553760 -G4791259 Virginia Beach -75.977980 36.852930 -G4853828 Des Moines -93.609110 41.600540 -G4883817 Aurora -88.320070 41.760580 -G4887398 Chicago -87.650050 41.850030 -G4907959 Rockford -89.094000 42.271130 -G4920423 Fort Wayne -85.128860 41.130600 -G4930956 Boston -71.059770 42.358430 -G4951305 South Boston -71.049490 42.333430 -G4951788 Springfield -72.589810 42.101480 -G4956184 Worcester -71.802290 42.262590 -G4990729 Detroit -83.045750 42.331430 -G4994358 Grand Rapids -85.668090 42.963360 -G5037649 Minneapolis -93.263840 44.979970 -G5045360 Saint Paul -93.093270 44.944410 -G5072006 Lincoln -96.666960 40.800000 -G5074472 Omaha -95.937790 41.258610 -G5099836 Jersey City -74.077640 40.728160 -G5101798 Newark -74.172370 40.735660 -G5102466 Paterson -74.171810 40.916770 -G5110302 Brooklyn -73.949580 40.650100 -G5110629 Buffalo -78.878370 42.886450 -G5115985 East New York -73.882360 40.666770 -G5125771 Manhattan -73.966250 40.783430 -G5128581 New York City -74.005970 40.714270 -G5134086 Rochester -77.615560 43.154780 -G5145215 Yonkers -73.898750 40.931210 -G5145476 Akron -81.519010 41.081440 -G5150529 Cleveland -81.695410 41.499500 -G5174035 Toledo -83.555210 41.663940 -G5206379 Pittsburgh -79.995890 40.440620 -G5224151 Providence -71.412830 41.823990 -G5261457 Madison -89.401230 43.073050 -G5263045 Milwaukee -87.906470 43.038900 -G5289282 Chandler -111.841250 33.306160 -G5295903 Gilbert -111.789030 33.352830 -G5295985 Glendale -112.185990 33.538650 -G5304391 Mesa -111.822640 33.422270 -G5308655 Phoenix -112.074040 33.448380 -G5313457 Scottsdale -111.899030 33.509210 -G5317058 Tempe -111.909310 33.414770 -G5317071 Tempe Junction -111.943480 33.414210 -G5318313 Tucson -110.926480 32.221740 -G5323810 Anaheim -117.914500 33.835290 -G5325738 Bakersfield -119.018710 35.373290 -G5336899 Chula Vista -117.084200 32.640050 -G5339631 Corona -117.566440 33.875290 -G5349755 Fontana -117.435050 34.092230 -G5350734 Fremont -121.988570 37.548270 -G5350937 Fresno -119.772370 36.747730 -G5351515 Garden Grove -117.941450 33.773910 -G5352423 Glendale -118.255080 34.142510 -G5357527 Hollywood -118.326740 34.098340 -G5358705 Huntington Beach -117.999230 33.660300 -G5359777 Irvine -117.823110 33.669460 -G5367929 Long Beach -118.189230 33.766960 -G5368361 Los Angeles -118.243680 34.052230 -G5373900 Modesto -120.996880 37.639100 -G5374732 Moreno Valley -117.230590 33.937520 -G5377613 North Glendale -118.264520 34.160560 -G5378538 Oakland -122.270800 37.804370 -G5378771 Oceanside -117.379480 33.195870 -G5379439 Ontario -117.650890 34.063340 -G5380184 Oxnard -119.177050 34.197500 -G5380202 Oxnard Shores -119.241500 34.190840 -G5384170 Pomona -117.752280 34.055290 -G5385955 Rancho Cucamonga -117.593110 34.106400 -G5387877 Riverside -117.396160 33.953350 -G5389489 Sacramento -121.494400 38.581570 -G5391710 San Bernardino -117.289770 34.108340 -G5391811 San Diego -117.157260 32.715330 -G5391959 San Francisco -122.419420 37.774930 -G5392171 San Jose -121.894960 37.339390 -G5392900 Santa Ana -117.867830 33.745570 -G5393049 Santa Clarita -118.542590 34.391660 -G5393287 Santa Rosa -122.714430 38.440470 -G5399020 Stockton -121.290780 37.957700 -G5412347 Aurora -104.831920 39.729430 -G5417598 Colorado Springs -104.821360 38.833880 -G5419384 Denver -104.984700 39.739150 -G5454711 Albuquerque -106.651140 35.084490 -G5505411 Henderson -114.981940 36.039700 -G5506956 Las Vegas -115.137220 36.174970 -G5509952 Paradise -115.146660 36.097190 -G5511077 Reno -119.813800 39.529630 -G5512909 Spring Valley -115.245000 36.108030 -G5513343 Sunrise Manor -115.073060 36.211080 -G5516233 Amarillo -101.831300 35.222000 -G5520993 El Paso -106.486930 31.758720 -G5525577 Lubbock -101.855170 33.577860 -G5746545 Portland -122.676210 45.523450 -G5780993 Salt Lake City -111.891050 40.760780 -G5809844 Seattle -122.332070 47.606210 -G5811696 Spokane -117.426050 47.658780 -G5812944 Tacoma -122.444290 47.252880 -G5814616 Vancouver -122.661490 45.638730 -G5856195 Honolulu -157.858330 21.306940 -G5879400 Anchorage -149.900280 61.218060 -G3441575 Montevideo -56.167350 -34.833460 -G601294 Nukus 59.610280 42.453060 -G1216265 Samarqand 66.959720 39.654170 -G1216311 Qarshi 65.800000 38.866670 -G1217662 Buxoro 64.428610 39.774720 -G1512473 Urganch 60.633330 41.550000 -G1512569 Tashkent 69.216270 41.264650 -G1512979 Qo‘qon 70.942500 40.528610 -G1513157 Namangan 71.672570 40.998300 -G1513886 Jizzax 67.842220 40.115830 -G1514019 Farg`ona 71.784320 40.384210 -G1514210 Chirchiq 69.582220 41.468890 -G1514588 Andijon 72.343890 40.783060 -G3487903 Alto Barinas -70.226100 8.593100 -G3625549 Valencia -68.007650 10.162020 -G3625829 Turmero -67.472880 10.223880 -G3627047 Santa Teresa -66.663610 10.231390 -G3628473 San Cristóbal -72.225000 7.766940 -G3629672 Puerto La Cruz -64.616670 10.216670 -G3629706 Puerto Cabello -68.012500 10.473060 -G3630297 Petare -66.816670 10.483330 -G3631412 Ocumare del Tuy -66.771670 10.121670 -G3631741 Mucumpiz -71.133330 8.416670 -G3632308 Mérida -71.145000 8.598330 -G3632998 Maracay -67.595830 10.246940 -G3633009 Maracaibo -71.640560 10.631670 -G3639898 Guatire -66.533330 10.466670 -G3640049 Guarenas -66.616670 10.466670 -G3640465 Guacara -67.877000 10.226090 -G3641351 El Tigre -64.245440 8.887520 -G3644768 Cumaná -64.166670 10.466670 -G3644918 Cúa -66.885280 10.162220 -G3645213 Coro -69.673440 11.404500 -G3645528 Ciudad Guayana -62.641020 8.351220 -G3645532 Ciudad Bolívar -63.540860 8.129230 -G3646738 Caracas -66.916670 10.500000 -G3647651 Cabimas -71.446110 10.401940 -G3648439 Baruta -66.883330 10.433330 -G3648522 Barquisimeto -69.322780 10.073890 -G3648559 Barcelona -64.700000 10.133330 -G3778045 Maturín -63.176670 9.750000 -G1562414 Vũng Tàu 107.066670 10.350000 -G1562798 Vinh 105.666670 18.666670 -G1566083 Thành phố Hồ Chí Minh 106.666670 10.750000 -G1568510 Rạch Giá 105.083330 10.016670 -G1568574 Quy Nhơn 109.233330 13.766670 -G1571058 Phan Thiết 108.100000 10.933330 -G1572151 Nha Trang 109.183330 12.250000 -G1573517 Nam Ðịnh 106.166670 20.416670 -G1575627 Long Xuyên 105.416670 10.383330 -G1580240 Huế 107.600000 16.466670 -G1581130 Hà Nội 105.841170 21.024500 -G1581298 Haiphong 106.682220 20.856110 -G1583992 Turan 108.220830 16.067780 -G1584071 Ðà Lạt 108.441930 11.946460 -G1586203 Cần Thơ 105.783330 10.033330 -G1586296 Cần Duộc 106.666670 10.616670 -G1587923 Biên Hòa 106.816670 10.950000 -G786712 Prizren 20.739720 42.213890 -G786714 Pristina 21.166880 42.672720 -G70225 Ta‘izz 44.020910 13.579520 -G71137 Sanaa 44.206670 15.354720 -G74477 Ibb 44.183330 13.966670 -G78754 Al Mukallā 49.124240 14.542480 -G79415 Al Ḩudaydah 42.954520 14.797810 -G415189 Aden 45.036670 12.779440 -G936374 Roodepoort 27.872500 -26.162500 -G939270 Witbank 29.233330 -25.866670 -G940316 Westonaria 27.650000 -26.316670 -G940909 Welkom 26.733330 -27.983330 -G942470 Vryheid 30.800000 -27.766670 -G944385 Vereeniging 27.933330 -26.666670 -G944986 Vanderbijlpark 27.816670 -26.700000 -G946877 Uitenhage 25.402220 -33.765280 -G949880 Tembisa 28.226940 -25.998890 -G952865 Springs 28.400000 -26.250000 -G953781 Soweto 27.866670 -26.266670 -G962367 Richards Bay 32.100000 -28.800000 -G964137 Pretoria 28.187830 -25.744860 -G964420 Port Elizabeth 25.583330 -33.966670 -G965301 Pietermaritzburg 30.383330 -29.616670 -G971421 Newcastle 29.933330 -27.750000 -G976361 Middelburg 29.466670 -25.783330 -G986822 Krugersdorp 27.766670 -26.100000 -G989921 Klerksdorp 26.666670 -26.866670 -G993800 Johannesburg 28.043630 -26.202270 -G1002145 George 22.450000 -33.966670 -G1006984 East London 27.911620 -33.015290 -G1007311 Durban 31.016670 -29.850000 -G1014073 Carletonville 27.400000 -26.366670 -G1016181 Brakpan 28.366670 -26.233330 -G1016670 Botshabelo 26.733330 -29.233330 -G1017780 Boksburg 28.250000 -26.216670 -G1018725 Bloemfontein 26.200000 -29.133330 -G1020098 Benoni 28.316670 -26.183330 -G1105776 Midrand 28.137780 -25.963610 -G1105777 Centurion 28.170560 -25.874440 -G3363613 Noorder-Paarl 18.966670 -33.716670 -G3369157 Cape Town 18.416670 -33.916670 -G901344 Ndola 28.636590 -12.958670 -G909137 Lusaka 28.286360 -15.408090 -G911148 Kitwe 28.200000 -12.816670 -G916095 Kabwe 28.451740 -14.443220 -G884979 Mutare 32.670860 -18.970700 -G890299 Harare 31.053890 -17.829350 -G894701 Bulawayo 28.583330 -20.150000 -G1106542 Chitungwiza 31.075550 -18.012740 +G292223 Dubai POINT(55.280000 25.252220) +G292672 Sharjah POINT(55.391110 25.362220) +G292913 Al ‘Ayn POINT(55.760560 24.191670) +G292932 `Ajmān POINT(55.435040 25.411110) +G292968 Abu Dhabi POINT(54.366670 24.466670) +G1133616 Mazār-e Sharīf POINT(67.110870 36.709040) +G1135689 Kunduz POINT(68.857000 36.728960) +G1138336 Kandahār POINT(65.710130 31.613320) +G1138958 Kabul POINT(69.172330 34.528130) +G1139715 Jalālābād POINT(70.451530 34.426470) +G1140026 Herāt POINT(62.199670 34.348170) +G3183875 Tirana POINT(19.818890 41.327500) +G616052 Yerevan POINT(44.513610 40.181110) +G2240449 Luanda POINT(13.234440 -8.838330) +G3347939 Lobito POINT(13.545560 -12.348060) +G3348313 Huambo POINT(15.739170 -12.776110) +G3351663 Benguela POINT(13.407220 -12.578330) +G3429577 Resistencia POINT(-58.983330 -27.450000) +G3429652 Quilmes POINT(-58.269440 -34.720280) +G3429886 Posadas POINT(-55.883330 -27.383330) +G3430863 Mar del Plata POINT(-57.550000 -38.000000) +G3432043 La Plata POINT(-57.948890 -34.931390) +G3433899 Formosa POINT(-58.183330 -26.183330) +G3435217 Corrientes POINT(-58.833330 -27.466670) +G3435910 Buenos Aires POINT(-58.377230 -34.613150) +G3835869 Santiago del Estero POINT(-64.266670 -27.783330) +G3836277 Santa Fe de la Vera Cruz POINT(-60.700000 -31.633330) +G3836564 San Salvador de Jujuy POINT(-65.300000 -24.183330) +G3836873 San Miguel de Tucumán POINT(-65.216670 -26.816670) +G3837056 San Luis POINT(-66.350000 -33.300000) +G3837213 San Juan POINT(-68.536390 -31.537500) +G3837702 San Fernando del Valle de Catamarca POINT(-65.783330 -28.466670) +G3838233 Salta POINT(-65.416670 -24.783330) +G3838583 Rosario POINT(-60.666390 -32.951110) +G3838874 Río Cuarto POINT(-64.350000 -33.133330) +G3841956 Paraná POINT(-60.533330 -31.733330) +G3843123 Neuquén POINT(-68.066670 -38.950000) +G3844421 Mendoza POINT(-68.816670 -32.883330) +G3848950 La Rioja POINT(-66.850000 -29.433330) +G3860259 Córdoba POINT(-64.183330 -31.400000) +G3865086 Bahía Blanca POINT(-62.283330 -38.716670) +G2761369 Vienna POINT(16.372080 48.208490) +G2766824 Salzburg POINT(13.043990 47.799410) +G2772400 Linz POINT(14.286110 48.306390) +G2778067 Graz POINT(15.450000 47.066670) +G7279909 Linz-Wels-Steyr POINT(14.183690 48.154580) +G2063523 Perth POINT(115.833330 -31.933330) +G2078025 Adelaide POINT(138.600000 -34.933330) +G2147714 Sydney POINT(151.207320 -33.867850) +G2155472 Newcastle POINT(151.776470 -32.927150) +G2158177 Melbourne POINT(144.963320 -37.814000) +G2165087 Gold Coast POINT(153.433330 -28.000000) +G2165796 Geelong West POINT(144.350000 -38.133330) +G2165798 Geelong POINT(144.360690 -38.147110) +G2171507 Wollongong POINT(150.883330 -34.433330) +G2172517 Canberra POINT(149.128070 -35.283460) +G2172797 Cairns POINT(145.766670 -16.916670) +G2174003 Brisbane POINT(153.028090 -27.467940) +G7280463 North Shore POINT(152.901850 -31.402370) +G7281838 Logan City POINT(153.109440 -27.639170) +G584923 Sumqayıt POINT(49.668610 40.589720) +G586523 Kirowabad POINT(46.360560 40.682780) +G587084 Baku POINT(49.892010 40.377670) +G3186573 Zenica POINT(17.906390 44.201390) +G3191281 Sarajevo POINT(18.356440 43.848640) +G3204541 Banja Luka POINT(17.185560 44.775830) +G1185098 Tungi POINT(90.405830 23.890000) +G1185099 Sylhet POINT(91.871670 24.896670) +G1185106 Jamālpur POINT(89.933330 24.916670) +G1185117 Narsingdi POINT(90.718060 23.920830) +G1185128 Rājshāhi POINT(88.600000 24.366670) +G1185155 Nārāyanganj POINT(90.501110 23.623330) +G1185162 Mymensingh POINT(90.400000 24.750000) +G1185186 Comilla POINT(91.204440 23.457780) +G1185188 Rangpur POINT(89.250000 25.750000) +G1185241 Dhaka POINT(90.407440 23.710400) +G1192366 Pār Naogaon POINT(88.950840 24.802870) +G1203891 Dinājpur POINT(88.638640 25.627150) +G1205733 Chittagong POINT(91.836390 22.333060) +G1336134 Cox’s Bāzār POINT(91.979770 21.453240) +G1336135 Khulna POINT(89.567230 22.813480) +G1336137 Barisāl POINT(90.371110 22.701940) +G1336140 Jessore POINT(89.213150 23.168690) +G1336144 Tāngāil POINT(89.916670 24.250000) +G1337233 Bogra POINT(89.366670 24.850000) +G6545349 Saidpur POINT(88.891690 25.777690) +G2792413 Liège POINT(5.567490 50.633730) +G2797656 Gent POINT(3.716670 51.050000) +G2800481 Charleroi POINT(4.452480 50.409470) +G2800866 Brussels POINT(4.348780 50.850450) +G2803138 Antwerpen POINT(4.403460 51.219890) +G2357048 Ouagadougou POINT(-1.538340 12.364230) +G2362344 Bobo-Dioulasso POINT(-4.297900 11.177150) +G726050 Varna POINT(27.916670 43.216670) +G727011 Sofia POINT(23.324150 42.697510) +G727523 Ruse POINT(25.970830 43.856390) +G728193 Plovdiv POINT(24.750000 42.150000) +G732770 Burgas POINT(27.467810 42.506060) +G425378 Bujumbura POINT(29.364400 -3.382200) +G2392087 Porto-Novo POINT(2.603590 6.496460) +G2392204 Parakou POINT(2.616670 9.350000) +G2394560 Djougou POINT(1.666940 9.705000) +G2394819 Cotonou POINT(2.433330 6.350000) +G2395914 Abomey-Calavi POINT(2.350000 6.450000) +G3903320 Tarija POINT(-64.729560 -21.535490) +G3903987 Sucre POINT(-65.262740 -19.033320) +G3904906 Santa Cruz de la Sierra POINT(-63.166670 -17.800000) +G3909234 Oruro POINT(-67.150000 -17.983330) +G3911925 La Paz POINT(-68.150000 -16.500000) +G3919968 Cochabamba POINT(-66.156800 -17.389500) +G3386496 Teresina POINT(-42.801940 -5.089170) +G3387296 Sobral POINT(-40.349720 -3.686110) +G3388368 São Luís POINT(-44.302780 -2.529720) +G3389353 Santarém POINT(-54.708330 -2.443060) +G3390760 Recife POINT(-34.881110 -8.053890) +G3392242 Petrolina POINT(-40.500830 -9.398610) +G3392740 Paulista POINT(-34.873060 -7.940830) +G3392998 Parnamirim POINT(-35.262780 -5.915560) +G3393536 Olinda POINT(-34.855280 -8.008890) +G3394023 Natal POINT(-35.209440 -5.795000) +G3394682 Mossoró POINT(-37.344170 -5.187500) +G3395473 Maracanaú POINT(-38.625560 -3.876670) +G3395981 Maceió POINT(-35.735280 -9.665830) +G3396016 Macapá POINT(-51.066390 0.038890) +G3397147 Juazeiro do Norte POINT(-39.315280 -7.213060) +G3397277 João Pessoa POINT(-34.863060 -7.115000) +G3397838 Jaboatão POINT(-35.001390 -8.180280) +G3398269 Imperatriz POINT(-47.491670 -5.526390) +G3399415 Fortaleza POINT(-38.543060 -3.717220) +G3402429 Caucaia POINT(-38.653060 -3.736110) +G3402655 Caruaru POINT(-35.976110 -8.283330) +G3403642 Campina Grande POINT(-35.881110 -7.230560) +G3405870 Belém POINT(-48.504440 -1.455830) +G3407327 Arapiraca POINT(-36.661110 -9.752500) +G3407669 Ananindeua POINT(-48.372220 -1.365560) +G3444876 Volta Redonda POINT(-44.104170 -22.523060) +G3444914 Vitória da Conquista POINT(-40.839440 -14.866110) +G3444924 Vitória POINT(-40.337780 -20.319440) +G3445026 Vila Velha POINT(-40.292500 -20.329720) +G3445156 Viamão POINT(-51.023330 -30.081110) +G3445451 Várzea Grande POINT(-56.132500 -15.646670) +G3445831 Uberlândia POINT(-48.277220 -18.918610) +G3445839 Uberaba POINT(-47.931940 -19.748330) +G3446682 Taubaté POINT(-45.555280 -23.026390) +G3447186 Taboão da Serra POINT(-46.791670 -23.626110) +G3447212 Suzano POINT(-46.310830 -23.542500) +G3447259 Sumaré POINT(-47.266940 -22.821940) +G3447399 Sorocaba POINT(-47.458060 -23.501670) +G3447624 Sete Lagoas POINT(-44.246670 -19.465830) +G3447779 Serra POINT(-40.307780 -20.128610) +G3448136 São Vicente POINT(-46.391940 -23.963060) +G3448439 São Paulo POINT(-46.636110 -23.547500) +G3448622 São Leopoldo POINT(-51.147220 -29.760280) +G3448636 São José dos Campos POINT(-45.886940 -23.179440) +G3448639 São José do Rio Preto POINT(-49.379440 -20.819720) +G3448742 São José POINT(-49.166670 -28.233330) +G3448877 São João de Meriti POINT(-43.372220 -22.803890) +G3449319 São Carlos POINT(-47.890830 -22.017500) +G3449344 São Bernardo do Campo POINT(-46.565000 -23.693890) +G3449433 Santos POINT(-46.333610 -23.960830) +G3449701 Santo André POINT(-46.538330 -23.663890) +G3450083 Santa Maria POINT(-53.806940 -29.684170) +G3450144 Santa Luzia POINT(-43.851390 -19.769720) +G3450404 Santa Bárbara d'Oeste POINT(-47.413610 -22.753610) +G3450554 Salvador POINT(-38.510830 -12.971110) +G3450909 Rondonópolis POINT(-54.635560 -16.470830) +G3451138 Rio Grande POINT(-52.098610 -32.035000) +G3451190 Rio de Janeiro POINT(-43.207500 -22.902780) +G3451234 Rio Claro POINT(-47.561390 -22.411390) +G3451328 Ribeirão Preto POINT(-47.810280 -21.177500) +G3451353 Ribeirão das Neves POINT(-44.086670 -19.766940) +G3452324 Presidente Prudente POINT(-51.388890 -22.125560) +G3452465 Praia Grande POINT(-46.402780 -24.005830) +G3452925 Porto Alegre POINT(-51.230000 -30.033060) +G3453186 Ponta Grossa POINT(-50.161940 -25.095000) +G3453643 Piracicaba POINT(-47.649170 -22.725280) +G3454031 Petrópolis POINT(-43.178610 -22.505000) +G3454244 Pelotas POINT(-52.342500 -31.771940) +G3454857 Passo Fundo POINT(-52.406670 -28.262780) +G3455775 Osasco POINT(-46.791670 -23.532500) +G3456068 Novo Hamburgo POINT(-51.130560 -29.678330) +G3456160 Nova Iguaçu POINT(-43.451110 -22.759170) +G3456166 Nova Friburgo POINT(-42.531110 -22.281940) +G3456223 Nossa Senhora do Socorro POINT(-37.126110 -10.855000) +G3456283 Niterói POINT(-43.103610 -22.883330) +G3456814 Montes Claros POINT(-43.861670 -16.735000) +G3457001 Mogi das Cruzes POINT(-46.188330 -23.522780) +G3457381 Mauá POINT(-46.461390 -23.667780) +G3457671 Maringá POINT(-51.938610 -23.425280) +G3457692 Marília POINT(-49.945830 -22.213890) +G3458449 Londrina POINT(-51.162780 -23.310280) +G3458575 Limeira POINT(-47.401670 -22.564720) +G3458930 Lages POINT(-50.326110 -27.816110) +G3459462 Jundiaí POINT(-46.884170 -23.186390) +G3459505 Juiz de Fora POINT(-43.350280 -21.764170) +G3459712 Joinville POINT(-48.845560 -26.304440) +G3460370 Jacareí POINT(-45.965830 -23.305280) +G3460644 Itaquaquecetuba POINT(-46.348330 -23.486110) +G3460718 Itapevi POINT(-46.934170 -23.548890) +G3460748 Itapecerica da Serra POINT(-46.849170 -23.716940) +G3460845 Itajaí POINT(-48.661940 -26.907780) +G3460949 Itabuna POINT(-39.280280 -14.785560) +G3460950 Itaboraí POINT(-42.859440 -22.744440) +G3461144 Ipatinga POINT(-42.536670 -19.468330) +G3461311 Indaiatuba POINT(-47.218060 -23.090280) +G3461408 Ilhéus POINT(-39.049440 -14.788890) +G3461655 Hortolândia POINT(-47.220000 -22.858330) +G3461786 Guarulhos POINT(-46.533330 -23.462780) +G3461789 Guarujá POINT(-46.256390 -23.993060) +G3461879 Guarapuava POINT(-51.458060 -25.395280) +G3462089 Gravataí POINT(-50.991940 -29.944440) +G3462315 Governador Valadares POINT(-41.949440 -18.851110) +G3462377 Goiânia POINT(-49.253890 -16.678610) +G3462980 Francisco Morato POINT(-46.745280 -23.281670) +G3463011 Franca POINT(-47.400830 -20.538610) +G3463030 Foz do Iguaçu POINT(-54.588060 -25.547780) +G3463237 Florianópolis POINT(-48.549170 -27.596670) +G3463422 Ferraz de Vasconcelos POINT(-46.368610 -23.540830) +G3463478 Feira de Santana POINT(-38.966670 -12.266670) +G3464305 Embu POINT(-46.852220 -23.648890) +G3464374 Duque de Caxias POINT(-43.311670 -22.785560) +G3464460 Dourados POINT(-54.805560 -22.221110) +G3464688 Divinópolis POINT(-44.883890 -20.138890) +G3464739 Diadema POINT(-46.622780 -23.686110) +G3464975 Curitiba POINT(-49.273060 -25.427780) +G3465038 Cuiabá POINT(-56.096670 -15.596110) +G3465196 Criciúma POINT(-49.369720 -28.677500) +G3465284 Cotia POINT(-46.919170 -23.603890) +G3465624 Contagem POINT(-44.053610 -19.931670) +G3465927 Colombo POINT(-49.224170 -25.291670) +G3466296 Chapecó POINT(-52.618330 -27.096390) +G3466537 Caxias do Sul POINT(-51.179440 -29.168060) +G3466779 Cascavel POINT(-53.455280 -24.955830) +G3466998 Carapicuíba POINT(-46.835560 -23.522500) +G3467467 Canoas POINT(-51.183610 -29.917780) +G3467693 Campos POINT(-41.300000 -21.750000) +G3467747 Campo Grande POINT(-54.646390 -20.442780) +G3467865 Campinas POINT(-47.060830 -22.905560) +G3468031 Camaçari POINT(-38.324170 -12.697500) +G3468376 Cachoeiro de Itapemirim POINT(-41.112780 -20.848890) +G3469058 Brasília POINT(-47.929720 -15.779720) +G3469968 Blumenau POINT(-49.066110 -26.919440) +G3470044 Betim POINT(-44.198330 -19.967780) +G3470127 Belo Horizonte POINT(-43.937780 -19.920830) +G3470142 Belford Roxo POINT(-43.399440 -22.764170) +G3470279 Bauru POINT(-49.060560 -22.314720) +G3470353 Barueri POINT(-46.876110 -23.510560) +G3470583 Barreiras POINT(-44.990000 -12.152780) +G3470636 Barra Mansa POINT(-44.171390 -22.544170) +G3471766 Araraquara POINT(-48.175560 -21.794440) +G3471859 Araçatuba POINT(-50.432780 -21.208890) +G3471872 Aracaju POINT(-37.071670 -10.911110) +G3472177 Angra dos Reis POINT(-44.318060 -23.006670) +G3472287 Anápolis POINT(-48.952780 -16.326670) +G3472343 Americana POINT(-47.331390 -22.739170) +G3474574 Palmas POINT(-48.360280 -10.212780) +G3662574 Rio Branco POINT(-67.810000 -9.974720) +G3662762 Porto Velho POINT(-63.903890 -8.761940) +G3663517 Manaus POINT(-60.025000 -3.101940) +G3664980 Boa Vista POINT(-60.673330 2.819720) +G6316406 Aparecida de Goiânia POINT(-49.243890 -16.823330) +G6317344 Jaboatão dos Guararapes POINT(-35.014720 -8.112780) +G3571824 Nassau POINT(-77.343060 25.058230) +G933773 Gaborone POINT(25.908590 -24.654510) +G620127 Vitsyebsk POINT(30.194440 55.192500) +G625144 Minsk POINT(27.566670 53.900000) +G625665 Mahilyow POINT(30.336390 53.913890) +G627904 Hrodna POINT(23.814720 53.681390) +G627907 Homyel’ POINT(30.983330 52.441670) +G629634 Brest POINT(23.700000 52.100000) +G630429 Baranavichy POINT(26.033330 53.133330) +G630468 Babruysk POINT(29.233330 53.150000) +G5881791 Abbotsford POINT(-122.252570 49.057980) +G5894171 Barrie POINT(-79.666340 44.400110) +G5907364 Brampton POINT(-79.766330 43.683410) +G5911592 Burlington POINT(-79.837130 43.386210) +G5911606 Burnaby POINT(-122.952630 49.266360) +G5913490 Calgary POINT(-114.085290 51.050110) +G5946768 Edmonton POINT(-113.468710 53.550140) +G5959974 Gatineau POINT(-75.701640 45.477230) +G5964700 Greater Sudbury POINT(-80.990010 46.490000) +G5969785 Hamilton POINT(-79.949640 43.233410) +G5992996 Kitchener POINT(-80.482990 43.450100) +G6050610 Laval POINT(-73.692000 45.569950) +G6058560 London POINT(-81.233040 42.983390) +G6059891 Longueuil POINT(-73.518060 45.531210) +G6075357 Mississauga POINT(-79.658300 43.578900) +G6077243 Montréal POINT(-73.587810 45.508840) +G6091104 North York POINT(-79.416300 43.766810) +G6094578 Oshawa POINT(-78.849570 43.900120) +G6094817 Ottawa POINT(-75.698120 45.411170) +G6119109 Regina POINT(-104.617800 50.450080) +G6122085 Richmond POINT(-123.136830 49.170030) +G6141256 Saskatoon POINT(-106.634520 52.116790) +G6159905 Surrey POINT(-122.825090 49.106350) +G6167865 Toronto POINT(-79.416300 43.700110) +G6173331 Vancouver POINT(-123.119340 49.249660) +G6173577 Vaughan POINT(-79.532910 43.833410) +G6174041 Victoria POINT(-123.369300 48.432940) +G6182962 Windsor POINT(-83.016540 42.300080) +G6183235 Winnipeg POINT(-97.147040 49.884400) +G6324729 Halifax POINT(-63.572390 44.645330) +G6325494 Québec POINT(-71.214540 46.812280) +G7602078 Ladner POINT(-123.082410 49.089380) +G204405 Uvira POINT(29.145830 -3.406670) +G204953 Tshikapa POINT(20.800000 -6.416670) +G207570 Mwene-Ditu POINT(23.450000 -7.000000) +G209228 Mbuji-Mayi POINT(23.600000 -6.150000) +G212730 Kisangani POINT(25.200000 0.516670) +G214481 Kananga POINT(22.417780 -5.895830) +G216449 Gandajika POINT(23.950000 -6.750000) +G217562 Butembo POINT(29.283330 0.150000) +G217831 Bukavu POINT(28.860830 -2.508330) +G922704 Lubumbashi POINT(27.466670 -11.666670) +G922741 Likasi POINT(26.733330 -10.981390) +G922773 Kolwezi POINT(25.472500 -10.716670) +G2312895 Mbandaka POINT(18.266670 0.066670) +G2313002 Matadi POINT(13.450000 -5.816670) +G2314302 Kinshasa POINT(15.321460 -4.324590) +G2314705 Kikwit POINT(18.818060 -5.038610) +G2593460 Masina POINT(15.391390 -4.383610) +G2389853 Bangui POINT(18.554960 4.361220) +G2255414 Pointe-Noire POINT(11.846110 -4.794720) +G2260535 Brazzaville POINT(15.283270 -4.266900) +G2657896 Zürich POINT(8.550000 47.366670) +G2660646 Genève POINT(6.145690 46.202220) +G2661604 Basel POINT(7.600000 47.566670) +G2279755 Yamoussoukro POINT(-5.283330 6.816670) +G2282006 San-Pédro POINT(-6.616670 4.733330) +G2286304 Korhogo POINT(-5.633330 9.450000) +G2290486 Daloa POINT(-6.451940 6.874720) +G2290956 Bouaké POINT(-5.033060 7.683330) +G2293521 Abobo POINT(-4.020560 5.418890) +G2293538 Abidjan POINT(-4.028060 5.341110) +G3868121 Viña del Mar POINT(-71.551830 -33.024570) +G3868626 Valparaíso POINT(-71.627250 -33.039320) +G3870011 Temuco POINT(-72.600000 -38.733330) +G3870282 Talcahuano POINT(-73.116670 -36.716670) +G3870294 Talca POINT(-71.666670 -35.433330) +G3871336 Santiago POINT(-70.566560 -33.426280) +G3872348 San Bernardo POINT(-70.716670 -33.600000) +G3873775 Rancagua POINT(-70.744440 -34.170830) +G3874960 Puerto Montt POINT(-72.936940 -41.471670) +G3875024 Puente Alto POINT(-70.583330 -33.616670) +G3884373 La Serena POINT(-71.254170 -29.907780) +G3887127 Iquique POINT(-70.143060 -20.220830) +G3893629 Coquimbo POINT(-71.343610 -29.953330) +G3893894 Concepción POINT(-73.049770 -36.826990) +G3895088 Chillán POINT(-72.103440 -36.606640) +G3899361 Arica POINT(-70.304170 -18.475000) +G3899539 Antofagasta POINT(-70.400000 -23.650000) +G7281017 La Pintana POINT(-70.634190 -33.583310) +G2220957 Yaoundé POINT(11.516670 3.866670) +G2224827 Ngaoundéré POINT(13.583330 7.316670) +G2226275 Mokolo POINT(13.801880 10.739780) +G2228373 Maroua POINT(14.315920 10.590950) +G2229152 Loum POINT(9.735100 4.718200) +G2229798 Kousséri POINT(15.030630 12.076890) +G2231320 Garoua POINT(13.400000 9.300000) +G2232239 Edéa POINT(10.133330 3.800000) +G2232593 Douala POINT(9.708400 4.046900) +G2234359 Bertoua POINT(13.683330 4.583330) +G2234974 Bamenda POINT(10.158240 5.952660) +G2235189 Bafoussam POINT(10.417860 5.473660) +G1280849 Kashi POINT(75.979720 39.454720) +G1529102 Urunchi POINT(87.583330 43.800000) +G1529114 Turpan POINT(89.166670 42.933330) +G1529195 Shihezi POINT(86.033330 44.300000) +G1529376 Korla POINT(86.146940 41.759720) +G1529569 Changji POINT(87.316670 44.016670) +G1529641 Aral POINT(81.263610 40.515560) +G1529660 Aksu POINT(80.264440 41.123060) +G1783621 Zunyi POINT(106.907220 27.686670) +G1783633 Zoucheng POINT(116.965560 35.400560) +G1783745 Zigong POINT(104.776890 29.341620) +G1783763 Zhuzhou POINT(113.150000 27.833330) +G1783873 Zhumadian POINT(114.029440 32.979440) +G1783934 Shangqiu POINT(115.650000 34.450000) +G1784130 Zhoukou POINT(114.633330 33.633330) +G1784554 Zhicheng POINT(111.504720 30.295560) +G1784580 Yizheng POINT(119.178890 32.269170) +G1784642 Zhenjiang POINT(119.434170 32.209170) +G1784658 Zhengzhou POINT(113.648610 34.757780) +G1784853 Zhaoqing POINT(112.459720 23.051160) +G1784990 Zhanjiang POINT(110.342710 21.281450) +G1785018 Zhangzhou POINT(117.655560 24.513330) +G1785286 Zibo POINT(118.063330 36.790560) +G1785294 Anyang POINT(114.328890 36.099440) +G1785453 Zaozhuang POINT(117.554170 34.864720) +G1785462 Zaoyang POINT(112.754170 32.127220) +G1785725 Yunfu POINT(112.037300 22.930560) +G1785738 Yuncheng POINT(110.992780 35.023060) +G1785974 Yuci POINT(112.731940 37.680280) +G1786067 Yuanlin POINT(112.885950 30.415130) +G1786640 Yingcheng POINT(113.550000 30.950000) +G1786657 Yinchuan POINT(106.273060 38.468060) +G1786746 Yichun POINT(114.400000 27.833330) +G1786764 Yichang POINT(111.284720 30.714440) +G1786770 Yibin POINT(104.623830 28.766670) +G1787093 Yantai POINT(121.400000 37.533330) +G1787227 Yangzhou POINT(119.435830 32.397220) +G1787323 Yangshuo POINT(110.489670 24.780810) +G1787351 Yangquan POINT(113.563330 37.857500) +G1787746 Yancheng POINT(120.125280 33.385560) +G1787824 Tongshan POINT(117.157070 34.180450) +G1787858 Xuri POINT(117.966670 28.466670) +G1788046 Xuchang POINT(113.816670 34.016670) +G1788450 Xinzhou POINT(112.733330 38.409170) +G1788534 Xinyang POINT(114.065560 32.122780) +G1788572 Xinxiang POINT(113.867220 35.308890) +G1788618 Xintai POINT(117.751940 35.900560) +G1788694 Xinpu POINT(119.159440 34.599720) +G1788852 Xining POINT(101.766670 36.616670) +G1788927 Xingtai POINT(114.494170 37.063060) +G1789137 Xindi POINT(113.466670 29.816670) +G1789273 Sanshui POINT(112.891610 23.154860) +G1790254 Xiaogan POINT(113.900000 30.916670) +G1790353 Xianyang POINT(108.702610 34.337780) +G1790371 Xiantao POINT(113.400000 30.383330) +G1790396 Xianning POINT(114.216670 29.883330) +G1790437 Zhuhai POINT(113.567780 22.276940) +G1790492 Xiangtan POINT(112.900000 27.850000) +G1790587 Xiangfan POINT(112.145000 32.041670) +G1790630 Xi’an POINT(108.928610 34.258330) +G1790645 Xiamen POINT(118.081870 24.479790) +G1790840 Wuzhou POINT(111.316670 23.483330) +G1790894 Wuxue POINT(115.552500 29.850580) +G1790923 Wuxi POINT(120.288570 31.568870) +G1791121 Changde POINT(111.678060 29.032220) +G1791236 Wuhu POINT(118.375480 31.336570) +G1791247 Wuhan POINT(114.266670 30.583330) +G1791249 Wuhai POINT(106.812220 39.664720) +G1791388 Wenzhou POINT(120.666820 27.999420) +G1791636 Weinan POINT(109.508910 34.503550) +G1791673 Weihai POINT(122.113610 37.501670) +G1791681 Weifang POINT(119.101940 36.710000) +G1791748 Wanxian POINT(108.389720 30.803890) +G1792260 Wafangdian POINT(122.008060 39.618330) +G1792520 Tongzhou POINT(116.599440 39.905280) +G1792621 Wusong POINT(117.783330 30.950000) +G1792947 Tianjin POINT(117.176670 39.142220) +G1793346 Tangshan POINT(118.183330 39.633330) +G1793424 Tanggu POINT(117.646940 39.021110) +G1793505 Taizhou POINT(119.910630 32.493330) +G1793511 Taiyuan POINT(112.560280 37.869440) +G1793724 Tai’an POINT(117.120000 36.185280) +G1793743 Suzhou POINT(116.978890 33.636110) +G1793879 Suizhou POINT(113.363060 31.711110) +G1794903 Shiyan POINT(110.778060 32.647500) +G1794904 Shiyan POINT(110.783330 32.566670) +G1795060 Shiqi POINT(113.385210 22.516820) +G1795196 Tongchuan POINT(109.089720 35.080560) +G1795270 Shijiazhuang POINT(114.478610 38.041390) +G1795565 Shenzhen POINT(114.068300 22.545540) +G1795816 Shashi POINT(112.244720 30.307220) +G1795855 Shaoxing POINT(120.581110 30.001670) +G1795874 Shaoguan POINT(113.583330 24.800000) +G1795928 Shanwei POINT(115.347500 22.781990) +G1795940 Shantou POINT(116.714790 23.368140) +G1796236 Shanghai POINT(121.458060 31.222220) +G1796663 Sanming POINT(117.618610 26.248610) +G1797121 Jieyang POINT(116.364160 23.528860) +G1797132 Rizhao POINT(119.455280 35.427500) +G1797353 Quanzhou POINT(118.585830 24.913890) +G1797595 Qinhuangdao POINT(119.588330 39.931670) +G1797873 Huaiyin POINT(119.019170 33.588610) +G1797929 Qingdao POINT(120.371940 36.098610) +G1797945 Qingyuan POINT(113.033330 23.700000) +G1798422 Puyang POINT(115.005280 35.702780) +G1798425 Puyang POINT(119.886110 29.460280) +G1798449 Putian POINT(119.010280 25.439440) +G1798654 Pingxiang POINT(113.850000 27.616670) +G1798827 Pingdingshan POINT(113.301190 33.738470) +G1798998 Dadukou POINT(101.705390 26.547900) +G1799397 Ningbo POINT(121.549450 29.878190) +G1799491 Neijiang POINT(105.062160 29.583540) +G1799629 Nanyang POINT(112.532780 32.994720) +G1799722 Nantong POINT(120.874720 32.030280) +G1799846 Nanping POINT(118.173610 26.645000) +G1799869 Nanning POINT(108.316670 22.816670) +G1799962 Nanjing POINT(118.777780 32.061670) +G1800146 Nanchong POINT(106.084740 30.795080) +G1800163 Nanchang POINT(115.883330 28.683330) +G1800627 Mianyang POINT(104.754240 31.459340) +G1800657 Mentougou POINT(116.091670 39.939170) +G1801757 Luqiao POINT(121.377150 28.580840) +G1801792 Luoyang POINT(112.453610 34.683610) +G1801934 Luohe POINT(114.035280 33.571670) +G1802204 Luancheng POINT(114.651670 37.879170) +G1802238 Loudi POINT(111.994440 27.734440) +G1802875 Liuyang POINT(113.633330 28.150000) +G1803318 Linyi POINT(118.342780 35.063060) +G1803331 Linxia POINT(103.206390 35.600280) +G1803422 Linhai POINT(121.116670 28.850000) +G1803567 Linfen POINT(111.518890 36.088890) +G1803791 Licheng POINT(113.828360 23.295540) +G1803834 Liaocheng POINT(115.964720 36.443890) +G1804153 Leshan POINT(103.763860 29.562280) +G1804386 Laohekou POINT(111.667780 32.385830) +G1804430 Lanzhou POINT(103.792220 36.056390) +G1804540 Langfang POINT(116.694720 39.509720) +G1804586 Laiyang POINT(120.713610 36.975830) +G1804651 Kunming POINT(102.718330 25.038890) +G1804850 Kaiyuan POINT(103.303720 23.697670) +G1804879 Kaifeng POINT(114.348330 34.791110) +G1805179 Jiujiang POINT(115.983330 29.733330) +G1805298 Jinzhou POINT(121.716670 39.100000) +G1805518 Jining POINT(116.581390 35.405000) +G1805540 Jingzhou POINT(112.190280 30.350280) +G1805611 Jingmen POINT(112.204720 31.033610) +G1805618 Jingling POINT(113.100000 30.650000) +G1805680 Jingdezhen POINT(117.207890 29.294700) +G1805741 Jincheng POINT(112.832780 35.502220) +G1805753 Jinan POINT(116.997220 36.668330) +G1805953 Jiaxing POINT(120.748330 30.765560) +G1805987 Jiaozuo POINT(113.233060 35.239720) +G1806096 Jiaozhou POINT(120.003330 36.283890) +G1806299 Jiangmen POINT(113.083330 22.583330) +G1806408 Yangjiang POINT(111.966670 21.850000) +G1806445 Ji’an POINT(114.979270 27.117160) +G1806466 Guangyuan POINT(105.823000 32.442020) +G1806535 Huzhou POINT(120.096390 30.866110) +G1806696 Humen POINT(113.673060 22.818980) +G1806776 Huizhou POINT(114.400000 23.083330) +G1806882 Xinhui POINT(113.048200 22.456000) +G1807143 Huangyan POINT(121.259440 28.647780) +G1807234 Huangshi POINT(115.100000 30.216670) +G1807508 Huanggang POINT(116.999610 23.677040) +G1807681 Huainan POINT(116.996940 32.626390) +G1807700 Huaibei POINT(116.791670 33.974440) +G1808198 Heze POINT(115.441110 35.243060) +G1808316 Yiyang POINT(112.328330 28.589170) +G1808370 Hengyang POINT(112.615000 26.888060) +G1808392 Hengshui POINT(115.701110 37.732220) +G1808722 Hefei POINT(117.280830 31.863890) +G1808770 Hebi POINT(114.192500 35.899170) +G1808926 Hangzhou POINT(120.168890 30.255280) +G1808931 Hangu POINT(117.789170 39.248890) +G1808963 Handan POINT(114.467780 36.600560) +G1809061 Jiaojiang POINT(121.442780 28.680280) +G1809078 Haikou POINT(110.341670 20.045830) +G1809412 Guli POINT(120.033330 28.883330) +G1809461 Guiyang POINT(106.716670 26.583330) +G1809498 Guilin POINT(110.286390 25.281940) +G1809858 Guangzhou POINT(113.250000 23.116670) +G1809879 Guangshui POINT(113.997800 31.619900) +G1810295 Gaozhou POINT(110.846070 21.939240) +G1810437 Gaoping POINT(106.102940 30.775760) +G1810458 Gaomi POINT(119.752780 36.383330) +G1810821 Fuzhou POINT(119.306110 26.061390) +G1810845 Fuyang POINT(115.816670 32.900000) +G1810979 Fuling POINT(107.391940 29.702220) +G1811103 Foshan POINT(113.131480 23.026770) +G1811619 Ezhou POINT(114.833330 30.400000) +G1812101 Dongying POINT(118.485560 37.456390) +G1812521 Donghai POINT(115.642040 22.945940) +G1812545 Dongguan POINT(113.744720 23.048890) +G1812728 Dingzhou POINT(114.995560 38.513060) +G1812955 Dezhou POINT(116.292500 37.448610) +G1812961 Deyang POINT(104.381980 31.130190) +G1813253 Dayan POINT(100.220720 26.868790) +G1814082 Daliang POINT(113.247010 22.850420) +G1814087 Dalian POINT(121.602220 38.912220) +G1814757 Chuzhou POINT(118.297780 32.321940) +G1814786 Yangchun POINT(111.783330 22.166670) +G1814906 Chongqing POINT(106.552780 29.562780) +G1815059 Chenzhou POINT(113.033330 25.800000) +G1815286 Chengdu POINT(104.066670 30.666670) +G1815302 Chenghua POINT(116.770070 23.461320) +G1815395 Chaozhou POINT(116.637860 23.665130) +G1815456 Changzhou POINT(119.966670 31.783330) +G1815463 Changzhi POINT(111.738610 35.208890) +G1815577 Changsha POINT(112.966670 28.200000) +G1816080 Cangzhou POINT(116.866670 38.316670) +G1816234 Bozhou POINT(115.770280 33.877220) +G1816265 Boshan POINT(117.833330 36.483330) +G1816440 Bengbu POINT(117.360830 32.940830) +G1816670 Beijing POINT(116.397230 39.907500) +G1816705 Beihai POINT(109.100000 21.483330) +G1816971 Baoding POINT(115.490280 38.851110) +G1817240 Baiyin POINT(104.208060 36.558330) +G1817720 Shangyu POINT(120.871110 30.015560) +G1817968 Anshun POINT(105.933330 26.250000) +G1817993 Anqing POINT(117.050560 30.509170) +G1818116 Anbu POINT(116.680920 23.448950) +G1886760 Suzhou POINT(120.618060 31.311390) +G1915223 Zhongshan POINT(110.582910 21.322560) +G1919014 Lianghu POINT(120.898450 29.991520) +G1927639 Yueyang POINT(113.091940 29.333330) +G2033168 Zhaodong POINT(125.983330 46.083330) +G2033196 Zhangjiakou POINT(114.879440 40.810000) +G2033370 Yingkou POINT(122.224720 40.668060) +G2033413 Yichun POINT(128.900000 47.700000) +G2033467 Yanji POINT(129.507780 42.907500) +G2033574 Xuanhua POINT(115.044720 40.610280) +G2034312 Ulan Hot POINT(122.083330 46.083330) +G2034400 Tongliao POINT(122.265280 43.612500) +G2034439 Tieling POINT(123.841390 42.293060) +G2034655 Suihua POINT(126.996940 46.640560) +G2034714 Siping POINT(124.368610 43.163330) +G2034786 Shuangyashan POINT(131.153890 46.636110) +G2034937 Shenyang POINT(123.432780 41.792220) +G2035225 Ranghulu POINT(124.866670 46.650000) +G2035261 Qitaihe POINT(130.850000 45.800000) +G2035265 Qiqihar POINT(123.967220 47.340830) +G2035513 Panshan POINT(122.049440 41.188060) +G2035644 Nanpiao POINT(120.747920 41.098220) +G2035715 Mudanjiang POINT(129.600000 44.583330) +G2035980 Longfeng POINT(125.116670 46.550000) +G2036109 Liaoyuan POINT(125.135830 42.903610) +G2036113 Liaoyang POINT(123.173060 41.271940) +G2036389 Jixi POINT(130.966670 45.300000) +G2036401 Jiutai POINT(125.832780 44.152500) +G2036427 Jinzhou POINT(121.141670 41.107780) +G2036434 Lianshan POINT(120.853270 40.764320) +G2036458 Jining POINT(113.105830 41.027500) +G2036502 Jilin POINT(126.560280 43.850830) +G2036581 Jiamusi POINT(130.350000 46.833330) +G2036670 Hulan Ergi POINT(123.633330 47.204170) +G2036892 Hohhot POINT(111.652220 40.810560) +G2036920 Hengshan POINT(130.916670 45.200000) +G2036986 Hegang POINT(130.366670 47.400000) +G2037013 Harbin POINT(126.650000 45.750000) +G2037078 Hailar POINT(119.700000 49.200000) +G2037086 Haicheng POINT(122.741670 40.851940) +G2037346 Fuxin POINT(121.658890 42.015560) +G2037355 Fushun POINT(123.923330 41.855830) +G2037620 Dongling POINT(123.575830 41.814440) +G2037799 Datong POINT(113.291390 40.093610) +G2037860 Daqing POINT(125.000000 46.583330) +G2037886 Dandong POINT(124.394720 40.129170) +G2038067 Chifeng POINT(118.963610 42.268330) +G2038087 Chengde POINT(117.936110 40.972500) +G2038120 Chaoyang POINT(120.458610 41.570280) +G2038180 Changchun POINT(125.322780 43.880000) +G2038300 Benxi POINT(123.765000 41.288610) +G2038342 Beipiao POINT(120.779170 41.791940) +G2038432 Baotou POINT(109.822220 40.652220) +G2038569 Baicheng POINT(122.816670 45.616670) +G2038584 Baishan POINT(126.428610 41.943060) +G2038632 Anshan POINT(122.990000 41.123610) +G2038650 Anda POINT(125.316670 46.400000) +G7158935 东海岛 POINT(110.396130 21.024480) +G7283386 Changshu City POINT(120.742210 31.646150) +G7304020 Fenghuang POINT(109.599610 27.935570) +G7602670 Zhu Cheng City POINT(119.402590 35.995020) +G3665900 Villavicencio POINT(-73.626640 4.142000) +G3666304 Valledupar POINT(-73.250560 10.476940) +G3666645 Tuluá POINT(-76.200000 4.086670) +G3667849 Soledad POINT(-74.766670 10.917220) +G3667905 Soacha POINT(-74.221390 4.587220) +G3667983 Sincelejo POINT(-75.397780 9.304720) +G3668605 Santa Marta POINT(-74.201670 11.247220) +G3671916 Popayán POINT(-76.613160 2.438230) +G3672486 Pereira POINT(-75.696110 4.813330) +G3672778 Pasto POINT(-77.281110 1.213610) +G3673164 Palmira POINT(-76.303610 3.539440) +G3673899 Neiva POINT(-75.281880 2.927300) +G3674453 Montería POINT(-75.890000 8.757500) +G3674962 Medellín POINT(-75.536110 6.291390) +G3675443 Manizales POINT(-75.520560 5.070000) +G3680450 Itagüí POINT(-75.611390 6.171940) +G3680656 Ibagué POINT(-75.232220 4.438890) +G3682385 Floridablanca POINT(-73.089720 7.064720) +G3682631 Envigado POINT(-75.563890 6.173060) +G3685095 Dos Quebradas POINT(-75.672500 4.834720) +G3685533 Cúcuta POINT(-72.505280 7.883330) +G3687238 Cartagena POINT(-75.514440 10.399720) +G3687925 Cali POINT(-76.522500 3.437220) +G3688451 Buenaventura POINT(-77.069720 3.893330) +G3688465 Bucaramanga POINT(-73.125830 7.129720) +G3688689 Bogotá POINT(-74.081750 4.609710) +G3688928 Bello POINT(-75.562220 6.338890) +G3689147 Barranquilla POINT(-74.796390 10.963890) +G3689169 Barrancabermeja POINT(-73.854720 7.065280) +G3689560 Armenia POINT(-75.681110 4.533890) +G3621849 San José POINT(-84.083330 9.933330) +G3536729 Santiago de Cuba POINT(-75.821940 20.024720) +G3537906 Santa Clara POINT(-79.966670 22.400000) +G3544091 Pinar del Río POINT(-83.698060 22.417500) +G3550598 Las Tunas POINT(-76.951110 20.961670) +G3553478 Havana POINT(-82.383040 23.133020) +G3556969 Holguín POINT(-76.263060 20.887220) +G3557689 Guantánamo POINT(-75.209170 20.144440) +G3564124 Cienfuegos POINT(-80.435560 22.146110) +G3566067 Camagüey POINT(-77.916940 21.380830) +G3567597 Bayamo POINT(-76.643330 20.379170) +G146268 Nicosia POINT(33.366670 35.166670) +G146384 Limassol POINT(33.033330 34.675000) +G3067696 Praha POINT(14.420760 50.088040) +G3068160 Plzeň POINT(13.377590 49.747470) +G3068799 Ostrava POINT(18.282040 49.834650) +G3078610 Brno POINT(16.607960 49.195220) +G2805753 Wuppertal POINT(7.183330 51.266670) +G2809346 Wiesbaden POINT(8.250000 50.083330) +G2825297 Stuttgart POINT(9.177020 48.782320) +G2831580 Solingen POINT(7.083330 51.183330) +G2842647 Saarbrücken POINT(7.000000 49.233330) +G2844588 Rostock POINT(12.140490 54.088700) +G2848756 Berlin Reinickendorf POINT(13.333330 52.566670) +G2855598 Berlin Pankow POINT(13.401860 52.569260) +G2856883 Osnabrück POINT(8.050000 52.266670) +G2857458 Oldenburg POINT(8.200000 53.166670) +G2860410 Oberhausen POINT(6.850000 51.466670) +G2861650 Nuremberg POINT(11.068330 49.447780) +G2864072 Neue Neustadt POINT(11.633330 52.150000) +G2864118 Neuß POINT(6.683330 51.200000) +G2867543 Münster POINT(7.625710 51.962360) +G2867714 München POINT(11.575490 48.137430) +G2867838 Mülheim an der Ruhr POINT(6.883330 51.433330) +G2869894 Mönchengladbach POINT(6.433330 51.200000) +G2873891 Mannheim POINT(8.464720 49.488330) +G2874225 Mainz POINT(8.271110 50.000000) +G2874545 Magdeburg POINT(11.666670 52.166670) +G2875376 Ludwigshafen am Rhein POINT(8.435280 49.481110) +G2875601 Lübeck POINT(10.687290 53.868930) +G2878234 Leverkusen POINT(7.000000 51.033330) +G2879139 Leipzig POINT(12.371290 51.339620) +G2884509 Krefeld POINT(6.566670 51.333330) +G2886242 Köln POINT(6.950000 50.933330) +G2891122 Kiel POINT(10.134890 54.321330) +G2892518 Kassel POINT(9.500000 51.316670) +G2892794 Karlsruhe POINT(8.385830 49.004720) +G2905891 Herne POINT(7.216670 51.550000) +G2910685 Harburg POINT(9.983330 53.466670) +G2910831 Hannover POINT(9.733220 52.370520) +G2911240 Hamm POINT(7.820890 51.680330) +G2911285 Wandsbek POINT(10.100000 53.566670) +G2911287 Marienthal POINT(10.083330 53.566670) +G2911293 Eimsbüttel POINT(9.983330 53.566670) +G2911296 Altona POINT(9.933330 53.550000) +G2911298 Hamburg POINT(10.000000 53.550000) +G2911522 Halle POINT(12.000000 51.500000) +G2912621 Hagen POINT(7.466670 51.350000) +G2921466 Gelsenkirchen POINT(7.050000 51.516670) +G2925177 Freiburg POINT(7.852220 47.995900) +G2925533 Frankfurt am Main POINT(8.683330 50.116670) +G2928810 Essen POINT(7.016670 51.450000) +G2929670 Erfurt POINT(11.033330 50.983330) +G2934246 Düsseldorf POINT(6.776160 51.221720) +G2934691 Duisburg POINT(6.750000 51.433330) +G2935022 Dresden POINT(13.738320 51.050890) +G2935517 Dortmund POINT(7.450000 51.516670) +G2940132 Chemnitz POINT(12.916670 50.833330) +G2944388 Bremen POINT(8.807770 53.075160) +G2945024 Braunschweig POINT(10.533330 52.266670) +G2946447 Bonn POINT(7.100000 50.733330) +G2947416 Bochum POINT(7.216670 51.483330) +G2949186 Bielefeld POINT(8.533330 52.033330) +G2950159 Berlin POINT(13.410530 52.524370) +G2954172 Augsburg POINT(10.883330 48.366670) +G3247449 Aachen POINT(6.083420 50.776640) +G6545310 Berlin Mitte POINT(13.404890 52.520030) +G6941055 Bochum-Hordel POINT(7.175600 51.501680) +G7289614 Halle Neustadt POINT(11.916050 51.479240) +G7290245 Berlin Steglitz Zehlendorf POINT(13.241830 52.434850) +G7290251 Berlin Wilmersdorf POINT(13.290970 52.500970) +G7290252 Berlin Spandau POINT(13.199210 52.551100) +G223817 Djibouti POINT(43.144680 11.587670) +G2618425 Copenhagen POINT(12.565530 55.675940) +G2624652 Århus POINT(10.210760 56.156740) +G3492908 Santo Domingo POINT(-69.988570 18.500120) +G3492914 Santiago de los Caballeros POINT(-70.700000 19.450000) +G3493032 San Pedro de Macorís POINT(-69.297180 18.461560) +G3500957 La Romana POINT(-68.972850 18.427340) +G3511540 San Cristóbal POINT(-70.100000 18.416670) +G2474141 Boumerdas POINT(3.477170 36.766390) +G2479536 Skikda POINT(6.909210 36.876170) +G2481007 Sidi Bel Abbès POINT(-0.630850 35.189940) +G2485926 Oran POINT(-0.641670 35.691110) +G2498766 El Achir POINT(4.627440 36.063860) +G2498954 Ech Chettia POINT(1.255380 36.195910) +G2501152 Constantine POINT(6.614720 36.365000) +G2505329 Bejaïa POINT(5.084330 36.755870) +G2505572 Batna POINT(6.174140 35.555970) +G2505854 Bab Ezzouar POINT(3.182910 36.726150) +G2506999 Annaba POINT(7.766670 36.900000) +G2507480 Algiers POINT(3.041970 36.752500) +G3651297 Santo Domingo de los Colorados POINT(-79.150000 -0.250000) +G3652462 Quito POINT(-78.524950 -0.229850) +G3652941 Portoviejo POINT(-80.450000 -1.050000) +G3654410 Manta POINT(-80.733330 -0.950000) +G3654533 Machala POINT(-79.966670 -3.266670) +G3657509 Guayaquil POINT(-79.900000 -2.166670) +G3658192 Durán POINT(-79.833330 -2.200000) +G3658666 Cuenca POINT(-78.983330 -2.883330) +G3660689 Ambato POINT(-78.616750 -1.249080) +G588409 Tallinn POINT(24.753530 59.436960) +G347497 Tanda POINT(30.998060 30.791110) +G347591 Ṭalkha POINT(31.373890 31.053060) +G347796 Sūhāj POINT(31.700000 26.550000) +G350550 Qinā POINT(32.727220 26.170000) +G354775 Kafr ad Dawwār POINT(30.128430 31.133850) +G355795 Hilwan POINT(31.333330 29.850000) +G358448 Damanhûr POINT(30.466670 31.033330) +G358619 Port Said POINT(32.307500 31.280560) +G359173 Banī Suwayf POINT(31.088890 29.063890) +G359280 Banhā POINT(31.187500 30.460830) +G359493 Az Zaqāzīq POINT(31.510280 30.591390) +G359783 Asyūţ POINT(31.182780 27.182780) +G359792 Aswān POINT(32.898890 24.087500) +G359796 Suez POINT(32.550000 29.966670) +G360502 Luxor POINT(32.642100 25.698930) +G360630 Cairo POINT(31.249670 30.062630) +G360686 Al Minyā POINT(30.744440 28.119440) +G360761 Al Manşūrah POINT(31.376670 31.043060) +G360829 Al Maḩallah al Kubrá POINT(31.166940 30.976110) +G360995 Al Jīzah POINT(31.212220 30.008610) +G361055 Ismailia POINT(32.277220 30.605280) +G361058 Alexandria POINT(29.919170 31.198060) +G361320 Al Fayyūm POINT(30.840000 29.307780) +G411165 Idfu POINT(32.874720 24.980280) +G2462881 Laâyoune / El Aaiún POINT(-13.203150 27.162240) +G343300 Asmara POINT(38.933330 15.333330) +G2509954 Valencia POINT(-0.377390 39.469750) +G2510911 Sevilla POINT(-5.986940 37.377220) +G2511174 Santa Cruz de Tenerife POINT(-16.254620 28.468240) +G2511401 La Laguna POINT(-16.316670 28.483330) +G2512989 Palma POINT(2.650240 39.569390) +G2513416 Murcia POINT(-1.116670 37.983330) +G2514256 Málaga POINT(-4.420340 36.720160) +G2515270 Las Palmas de Gran Canaria POINT(-15.416670 28.100000) +G2516326 Jerez de la Frontera POINT(-6.133330 36.683330) +G2517117 Granada POINT(-3.606670 37.188170) +G2518559 Elx POINT(-0.701070 38.262180) +G2519240 Córdoba POINT(-4.766670 37.883330) +G2519752 Castelló de la Plana POINT(-0.033330 39.983330) +G2520058 Cartagena POINT(-0.983330 37.600000) +G2521886 Almería POINT(-2.459740 36.838140) +G2521978 Alicante POINT(-0.481490 38.345170) +G2522258 Albacete POINT(-1.850000 38.983330) +G3104324 Zaragoza POINT(-0.877340 41.656060) +G3104499 Vitoria-Gasteiz POINT(-2.666670 42.850000) +G3105976 Vigo POINT(-8.716670 42.233330) +G3106672 Valladolid POINT(-4.716670 41.650000) +G3108286 Terrassa POINT(2.016670 41.566670) +G3109718 Santander POINT(-3.804440 43.464720) +G3110044 San Sebastián POINT(-1.974990 43.312830) +G3111108 Salamanca POINT(-5.650000 40.966670) +G3111199 Sabadell POINT(2.109420 41.543290) +G3114472 Pamplona POINT(-1.643230 42.816870) +G3114711 Oviedo POINT(-5.844760 43.360290) +G3116025 Móstoles POINT(-3.864960 40.322340) +G3117735 Madrid POINT(-3.702560 40.416500) +G3118150 Logroño POINT(-2.450000 42.466670) +G3118594 Leganés POINT(-3.763500 40.327180) +G3119841 A Coruña POINT(-8.396000 43.371350) +G3120619 L'Hospitalet de Llobregat POINT(2.100280 41.359670) +G3121424 Gijón POINT(-5.664440 43.541110) +G3121437 Getafe POINT(-3.732950 40.305710) +G3121960 Fuenlabrada POINT(-3.800000 40.283330) +G3127461 Burgos POINT(-3.700000 42.350000) +G3128026 Bilbao POINT(-2.925280 43.262710) +G3128760 Barcelona POINT(2.158990 41.388790) +G3129028 Badalona POINT(2.247410 41.450040) +G3130564 Alcorcón POINT(-3.824870 40.345820) +G3130616 Alcalá de Henares POINT(-3.366670 40.483330) +G6252065 Nou Barris POINT(2.177270 41.441630) +G6544100 Eixample POINT(2.161790 41.388960) +G6544105 Sant Martí POINT(2.199330 41.418140) +G330186 Nazrēt POINT(39.266670 8.550000) +G331180 Mek’elē POINT(39.475280 13.496670) +G336014 Gonder POINT(37.466670 12.600000) +G338832 Dirē Dawa POINT(41.866110 9.593060) +G342884 Bahir Dar POINT(37.383330 11.600000) +G344979 Addis Ababa POINT(38.746890 9.024970) +G632453 Vantaa POINT(25.040990 60.294140) +G633679 Turku POINT(22.268690 60.451480) +G634963 Tampere POINT(23.787120 61.499110) +G658225 Helsinki POINT(24.935450 60.169520) +G660158 Espoo POINT(24.652200 60.205200) +G2972315 Toulouse POINT(1.443670 43.604260) +G2972328 Toulon POINT(5.933330 43.116670) +G2973783 Strasbourg POINT(7.742960 48.583420) +G2980291 Saint-Étienne POINT(4.400000 45.433330) +G2983990 Rennes POINT(-1.683330 48.083330) +G2984114 Reims POINT(4.033330 49.250000) +G2988507 Paris POINT(2.348800 48.853410) +G2990440 Nice POINT(7.266080 43.703130) +G2990969 Nantes POINT(-1.553360 47.217250) +G2992166 Montpellier POINT(3.883330 43.600000) +G2995469 Marseille POINT(5.381070 43.296950) +G2996944 Lyon POINT(4.850000 45.750000) +G2998324 Lille POINT(3.066670 50.633330) +G3003796 Le Havre POINT(0.107670 49.493800) +G3014728 Grenoble POINT(5.716670 45.166670) +G3031582 Bordeaux POINT(-0.566670 44.833330) +G3037656 Angers POINT(-0.550000 47.466670) +G2399697 Libreville POINT(9.450000 0.383330) +G2633691 Wolverhampton POINT(-2.122960 52.585470) +G2634853 Walsall POINT(-1.983960 52.585280) +G2636389 Swindon POINT(-1.781160 51.557970) +G2636432 Swansea POINT(-3.943230 51.620790) +G2636503 Sutton POINT(-0.200000 51.350000) +G2636531 Sunderland POINT(-1.382220 54.904650) +G2636841 Stoke-on-Trent POINT(-2.185380 53.004150) +G2637433 Southend-on-Sea POINT(0.714330 51.537820) +G2637487 Southampton POINT(-1.404280 50.903950) +G2638077 Sheffield POINT(-1.465900 53.382970) +G2639577 Reading POINT(-0.971130 51.456250) +G2639912 Preston POINT(-2.716670 53.766670) +G2639996 Portsmouth POINT(-1.091250 50.798990) +G2640101 Poole POINT(-2.000000 50.716670) +G2640194 Plymouth POINT(-4.143050 50.371530) +G2640729 Oxford POINT(-1.255960 51.752220) +G2641170 Nottingham POINT(-1.150470 52.953600) +G2641181 Norwich POINT(1.298340 52.627830) +G2641430 Northampton POINT(-0.883330 52.250000) +G2641673 Newcastle upon Tyne POINT(-1.613960 54.973280) +G2642465 Milton Keynes POINT(-0.755830 52.041720) +G2643123 Manchester POINT(-2.237430 53.480950) +G2643339 Luton POINT(-0.417480 51.879670) +G2643741 City of London POINT(-0.091840 51.512790) +G2643743 London POINT(-0.125740 51.508530) +G2644210 Liverpool POINT(-2.977940 53.410580) +G2644668 Leicester POINT(-1.131690 52.638600) +G2644688 Leeds POINT(-1.547850 53.796480) +G2645425 Hull POINT(-0.335250 53.744600) +G2646003 Islington POINT(-0.103040 51.536220) +G2648579 Glasgow POINT(-4.257630 55.865150) +G2650225 Edinburgh POINT(-3.196480 55.952060) +G2650752 Dundee POINT(-2.966670 56.500000) +G2650839 Dudley POINT(-2.083330 52.500000) +G2651347 Derby POINT(-1.476630 52.922770) +G2652221 Coventry POINT(-1.512170 52.406560) +G2653822 Cardiff POINT(-3.180000 51.480000) +G2654675 Bristol POINT(-2.596650 51.455230) +G2654993 Bradford POINT(-1.752060 53.793910) +G2655095 Bournemouth POINT(-1.879500 50.720480) +G2655603 Birmingham POINT(-1.899830 52.481420) +G2655984 Belfast POINT(-5.933330 54.583330) +G2657832 Aberdeen POINT(-2.098140 57.143690) +G7535661 London Borough of Harrow POINT(-0.333330 51.566670) +G611717 Tbilisi POINT(44.833680 41.694110) +G613607 K'ut'aisi POINT(42.699740 42.249610) +G2294700 Tema POINT(-0.016670 5.616670) +G2294877 Tamale POINT(-0.833330 9.400000) +G2294915 Takoradi POINT(-1.750000 4.883330) +G2298890 Kumasi POINT(-1.616670 6.683330) +G2306079 Achiaman POINT(-0.333330 5.700000) +G2306104 Accra POINT(-0.196900 5.556020) +G2422465 Conakry POINT(-13.677290 9.537950) +G2422488 Camayenne POINT(-13.687780 9.535000) +G2309527 Malabo POINT(8.783330 3.750000) +G2310046 Bata POINT(9.750000 1.850000) +G255274 Piraeus POINT(23.637080 37.947450) +G255683 Pátrai POINT(21.734440 38.244440) +G264371 Athens POINT(23.716220 37.979450) +G734077 Thessaloníki POINT(22.943890 40.640280) +G3587902 Villa Nueva POINT(-90.587500 14.526940) +G3592519 Mixco POINT(-90.606390 14.633330) +G3598132 Guatemala City POINT(-90.513270 14.640720) +G2374775 Bissau POINT(-15.583330 11.850000) +G3378644 Georgetown POINT(-58.155270 6.804480) +G1819609 Kowloon POINT(114.183330 22.316670) +G1819729 Hong Kong POINT(114.157690 22.285520) +G3600949 Tegucigalpa POINT(-87.206810 14.081800) +G3601782 San Pedro Sula POINT(-88.033330 15.500000) +G3186886 Zagreb POINT(15.977980 45.814440) +G3190261 Split POINT(16.439150 43.508910) +G6618983 Zagreb - Centar POINT(15.977530 45.813130) +G3718426 Port-au-Prince POINT(-72.335000 18.539170) +G3719028 Pétionville POINT(-72.285280 18.512500) +G3726786 Delmas 73 POINT(-72.302780 18.544720) +G3727135 Croix des Bouquets POINT(-72.225000 18.575000) +G3728338 Carrefour POINT(-72.399220 18.541140) +G715429 Szeged POINT(20.148240 46.253000) +G717582 Miskolc POINT(20.783330 48.100000) +G721472 Debrecen POINT(21.633330 47.533330) +G3046526 Pécs POINT(18.233330 46.083330) +G3054643 Budapest POINT(19.039910 47.498010) +G6942354 Nagyvárad POINT(21.927340 47.060530) +G1213614 Sunggal POINT(98.615100 3.576500) +G1214189 Percut POINT(98.864000 3.625300) +G1214191 Perbaungan POINT(98.956000 3.567900) +G1214204 Pematangsiantar POINT(99.068700 2.959500) +G1214520 Medan POINT(98.666670 3.583330) +G1215355 Binjai POINT(98.485400 3.600100) +G1215502 Banda Aceh POINT(95.322200 5.557700) +G1621177 Yogyakarta POINT(110.360830 -7.782780) +G1622786 Makassar POINT(119.422100 -5.140000) +G1624494 Tegal POINT(109.140200 -6.869400) +G1624647 Tasikmalaya POINT(108.200000 -7.333330) +G1624917 Bandarlampung POINT(105.258030 -5.425440) +G1625084 Tangerang POINT(106.630000 -6.178060) +G1625812 Surakarta POINT(110.831670 -7.556110) +G1625822 Surabaya POINT(112.750830 -7.249170) +G1626100 Sumedang Utara POINT(107.916670 -6.850000) +G1626381 Sukabumi POINT(106.926670 -6.918060) +G1626560 Soreang POINT(107.518330 -7.033060) +G1626801 Situbondo POINT(114.009760 -7.706230) +G1627549 Serang POINT(106.150200 -6.114900) +G1627896 Semarang POINT(110.420300 -6.993200) +G1629001 Samarinda POINT(117.150000 -0.500000) +G1629131 Salatiga POINT(110.492780 -7.331940) +G1629710 Rengasdengklok POINT(107.298060 -6.159170) +G1630328 Purwokerto POINT(109.234440 -7.421390) +G1630333 Purwodadi POINT(110.915800 -7.086800) +G1630341 Purwakarta POINT(107.443330 -6.556940) +G1630634 Probolinggo POINT(113.215900 -7.754300) +G1630789 Pontianak POINT(109.333330 -0.033330) +G1630997 Plumbon POINT(108.472780 -6.705000) +G1631648 Pemalang POINT(109.366670 -6.900000) +G1631761 Pekanbaru POINT(101.450000 0.533330) +G1631766 Pekalongan POINT(109.675300 -6.888600) +G1632033 Pasuruan POINT(112.907500 -7.645300) +G1632228 Pasarkemis POINT(106.530280 -6.170280) +G1632276 Parung POINT(106.733060 -6.421390) +G1632937 Pamulang POINT(106.738330 -6.342780) +G1633034 Palu POINT(119.870700 -0.891700) +G1633070 Palembang POINT(104.745800 -2.916730) +G1633419 Padang POINT(100.354270 -0.949240) +G1635882 Mataram POINT(116.116670 -8.583330) +G1636544 Manado POINT(124.845500 1.487000) +G1636556 Mamuju POINT(118.888500 -2.674800) +G1636722 Malang POINT(112.630400 -7.979700) +G1636930 Madiun POINT(111.523900 -7.629800) +G1637510 Loa Janan POINT(117.095030 -0.582950) +G1638063 Lembang POINT(107.617500 -6.811670) +G1638284 Lawang POINT(112.694700 -7.835300) +G1638868 Labuhanbajo POINT(119.887700 -8.496400) +G1640344 Kendari POINT(122.498890 -3.945000) +G1640660 Kediri POINT(112.016670 -7.816670) +G1642588 Jember POINT(113.703170 -8.166040) +G1642858 Jambi POINT(103.616670 -1.600000) +G1642911 Jakarta POINT(106.845130 -6.214620) +G1645524 Depok POINT(106.818610 -6.400000) +G1645528 Denpasar POINT(115.216670 -8.650000) +G1645895 Curug POINT(106.556390 -6.265830) +G1646170 Cirebon POINT(108.557000 -6.706300) +G1646194 Ciputat POINT(106.695560 -6.237500) +G1646448 Cimahi POINT(107.542500 -6.872220) +G1646494 Cileungsi POINT(106.959170 -6.394720) +G1647003 Cibinong POINT(106.854170 -6.481670) +G1647383 Ciampea POINT(106.700830 -6.554720) +G1648473 Bogor POINT(106.789170 -6.594440) +G1649150 Bengkulu POINT(102.265540 -3.800440) +G1649378 Bekasi POINT(106.989600 -6.234900) +G1650213 Banjarmasin POINT(114.591000 -3.324420) +G1650227 Banjaran POINT(107.587780 -7.045280) +G1650357 Bandung POINT(107.618610 -6.903890) +G1650527 Balikpapan POINT(116.828870 -1.267530) +G1651531 Ambon POINT(128.200000 -3.716670) +G1985663 Cikupa POINT(106.508330 -6.236390) +G2057087 Kupang POINT(123.583330 -10.166670) +G2964506 Dún Laoghaire POINT(-6.135860 53.293950) +G2964574 Dublin POINT(-6.267190 53.343990) +G2965140 Cork POINT(-8.470610 51.897970) +G281184 Jerusalem POINT(35.225300 31.779020) +G293397 Tel Aviv POINT(34.766670 32.066670) +G293703 Rishon LeẔiyyon POINT(34.804440 31.964170) +G294071 Netanya POINT(34.857780 32.333610) +G294751 H̱olon POINT(34.772220 32.011390) +G294801 Haifa POINT(34.989170 32.815560) +G295530 Beersheba POINT(34.791300 31.251810) +G295629 Ashdod POINT(34.650000 31.816670) +G6693674 Petah Tikva POINT(34.885030 32.091740) +G7498240 West Jerusalem POINT(35.219610 31.781990) +G1252797 Yamunānagar POINT(77.283330 30.100000) +G1252948 Warangal POINT(79.583330 18.000000) +G1253084 Vizianagaram POINT(83.416670 18.116670) +G1253102 Vishākhapatnam POINT(83.300000 17.700000) +G1253133 Virār POINT(72.800000 19.466670) +G1253184 Vijayawāda POINT(80.616670 16.516670) +G1253237 Verāval POINT(70.366670 20.900000) +G1253286 Vellore POINT(79.133330 12.933330) +G1253405 Benares POINT(83.000000 25.333330) +G1253573 Vadodara POINT(73.200000 22.300000) +G1253747 Unnāo POINT(80.500000 26.533330) +G1253894 Ulhāsnagar POINT(73.150000 19.216670) +G1253914 Ujjain POINT(75.766670 23.183330) +G1253986 Udaipur POINT(73.691830 24.571170) +G1254089 Tumkūr POINT(77.101670 13.342220) +G1254163 Thiruvananthapuram POINT(76.916670 8.483330) +G1254187 Trichūr POINT(76.216670 10.516670) +G1254241 Tonk POINT(75.783330 26.166670) +G1254348 Tiruppūr POINT(77.350000 11.100000) +G1254360 Tirupati POINT(79.416670 13.650000) +G1254361 Tirunelveli POINT(77.700000 8.733330) +G1254388 Tiruchchirāppalli POINT(78.683330 10.816670) +G1254649 Thanjāvūr POINT(79.150000 10.800000) +G1254661 Thāne POINT(72.966670 19.200000) +G1254745 Teni POINT(77.483330 10.000000) +G1255349 Surendranagar POINT(71.683330 22.700000) +G1255364 Sūrat POINT(72.833330 21.166670) +G1255634 Srīnagar POINT(74.816670 34.083330) +G1255744 Sonīpat POINT(77.016670 28.983330) +G1255969 Sītāpur POINT(80.683330 27.566670) +G1256052 Sirsa POINT(75.016670 29.533330) +G1256237 Shimla POINT(77.166670 31.100000) +G1256287 Silchar POINT(92.800000 24.816670) +G1256320 Sīkar POINT(75.150000 27.616670) +G1256422 Shrīrāmpur POINT(88.342220 22.752780) +G1256436 Solāpur POINT(75.916670 17.683330) +G1256451 Shivpurī POINT(77.650000 25.433330) +G1256515 Shimoga POINT(75.566670 13.916670) +G1256525 Shiliguri POINT(88.433330 26.700000) +G1256728 Shāhjahānpur POINT(79.916670 27.883330) +G1257022 Satna POINT(80.833330 24.583330) +G1257416 Sāngli POINT(74.564170 16.854380) +G1257540 Sambhal POINT(78.550000 28.583330) +G1257542 Sambalpur POINT(83.966670 21.450000) +G1257629 Salem POINT(78.166670 11.650000) +G1257806 Sahāranpur POINT(77.550000 29.966670) +G1257845 Sāgar POINT(78.716670 23.833330) +G1258076 Rohtak POINT(76.566670 28.900000) +G1258182 Rewa POINT(81.300000 24.533330) +G1258342 Ratlām POINT(75.066670 23.316670) +G1258526 Rānchī POINT(85.333330 23.350000) +G1258599 Rāmpur POINT(79.033330 28.816670) +G1258831 Rāj Nāndgaon POINT(81.033330 21.100000) +G1258847 Rājkot POINT(70.783330 22.300000) +G1258932 Rājahmundry POINT(81.783330 16.983330) +G1258980 Raipur POINT(81.633330 21.233330) +G1259004 Raigarh Fort POINT(73.433330 18.250000) +G1259009 Rāiganj POINT(88.116670 25.616670) +G1259012 Rāichūr POINT(77.366670 16.200000) +G1259064 Rāe Bareli POINT(81.233330 26.216670) +G1259091 Quilon POINT(76.600000 8.883330) +G1259166 Pūrnia POINT(87.466670 25.783330) +G1259184 Puri POINT(85.850000 19.800000) +G1259229 Pune POINT(73.855350 18.519570) +G1259239 Punāsa POINT(76.400000 22.233330) +G1259312 Proddatūr POINT(78.550000 14.733330) +G1259425 Pondicherry POINT(79.830000 11.930000) +G1259652 Pimpri POINT(73.800000 18.616670) +G1260086 Patna POINT(85.116670 25.600000) +G1260107 Patiāla POINT(76.400280 30.326670) +G1260137 Pathānkot POINT(75.650000 32.283330) +G1260341 Parbhani POINT(76.783330 19.266670) +G1260476 Pānīpat POINT(76.968060 29.388890) +G1260482 Pānihāti POINT(88.374440 22.694170) +G1260692 Pallāvaram POINT(80.183610 12.976110) +G1260716 Pāli POINT(73.333330 25.766670) +G1261039 Orai POINT(79.466670 25.983330) +G1261045 Ongole POINT(80.050000 15.500000) +G1261258 Nizāmābād POINT(78.116670 18.666670) +G1261481 New Delhi POINT(77.224450 28.635760) +G1261529 Nellore POINT(79.966670 14.433330) +G1261731 Nāsik POINT(73.800000 19.983330) +G1261913 Nāngloi Jāt POINT(77.066670 28.683330) +G1261927 Nandyāl POINT(78.483330 15.483330) +G1262131 Naihāti POINT(88.416940 22.902780) +G1262180 Nāgpur POINT(79.100000 21.150000) +G1262204 Nāgercoil POINT(77.433330 8.166670) +G1262292 Nadiād POINT(72.866670 22.700000) +G1262321 Mysore POINT(76.649720 12.307220) +G1262330 Muzaffarpur POINT(85.400000 26.116670) +G1262332 Muzaffarnagar POINT(77.683330 29.466670) +G1262395 Murwāra POINT(80.400000 23.850000) +G1262482 Munger POINT(86.466670 25.383330) +G1262771 Morena POINT(78.000000 26.496940) +G1262801 Morādābād POINT(78.783330 28.833330) +G1262995 Mirzāpur POINT(82.583330 25.150000) +G1263214 Meerut POINT(77.700000 28.983330) +G1263220 Medinīpur POINT(87.333330 22.433330) +G1263311 Mau POINT(83.550000 25.950000) +G1263364 Mathura POINT(77.683330 27.500000) +G1263780 Mangalore POINT(74.883330 12.866670) +G1264115 Mālegaon POINT(74.533330 20.550000) +G1264521 Madurai POINT(78.116670 9.933330) +G1264527 Chennai POINT(80.278470 13.087840) +G1264543 Madhyamgram POINT(88.450000 22.700000) +G1264637 Machilīpatnam POINT(81.133330 16.166670) +G1264728 Ludhiāna POINT(75.850000 30.900000) +G1264733 Lucknow POINT(80.916670 26.850000) +G1264773 Loni POINT(77.283330 28.750000) +G1265014 Lātūr POINT(76.583330 18.400000) +G1265711 Kulti POINT(86.850000 23.733330) +G1265767 Kūkatpalli POINT(78.416670 17.483330) +G1265873 Calicut POINT(75.766670 11.250000) +G1266049 Kota POINT(75.833330 25.183330) +G1266122 Korba POINT(82.683330 22.350000) +G1266285 Kolhāpur POINT(74.216670 16.700000) +G1266976 Kharagpur POINT(87.333330 22.333330) +G1267031 Khandwa POINT(76.333330 21.833330) +G1267076 Khammam POINT(80.150000 17.250000) +G1267480 Katihār POINT(87.583330 25.533330) +G1267708 Karnāl POINT(76.983330 29.683330) +G1267755 Karīmnagar POINT(79.150000 18.433330) +G1267995 Kānpur POINT(80.350000 26.466670) +G1268159 Kānchipuram POINT(79.716670 12.833330) +G1268257 Kāmārhāti POINT(88.374720 22.671110) +G1268295 Kalyān POINT(73.150000 19.250000) +G1268561 Kākināda POINT(82.216670 16.933330) +G1268773 Jūnāgadh POINT(70.466670 21.516670) +G1268782 Jalandhar POINT(75.579170 31.325560) +G1268865 Jodhpur POINT(73.030000 26.286670) +G1268907 Jīnd POINT(76.316670 29.316670) +G1269006 Jhānsi POINT(78.583330 25.433330) +G1269135 Jaunpur POINT(82.683330 25.733330) +G1269280 Jāmuria POINT(87.083330 23.700000) +G1269300 Jamshedpur POINT(86.183330 22.800000) +G1269317 Jāmnagar POINT(70.066670 22.466670) +G1269321 Jammu POINT(74.866670 32.733330) +G1269395 Jālna POINT(75.883330 19.833330) +G1269407 Jālgaon POINT(75.566670 21.016670) +G1269515 Jaipur POINT(75.816670 26.916670) +G1269633 Jabalpur POINT(79.950060 23.166970) +G1269723 Ingrāj Bāzār POINT(88.150000 25.000000) +G1269743 Indore POINT(75.833300 22.717920) +G1269771 Imphāl POINT(93.950000 24.816670) +G1269834 Ichalkaranji POINT(74.466670 16.700000) +G1269843 Hyderābād POINT(78.474440 17.375280) +G1269910 Hugli POINT(88.402500 22.895560) +G1269920 Hubli POINT(75.166670 15.350000) +G1269935 Hospet POINT(76.400000 15.266670) +G1269937 Hoshiārpur POINT(75.917220 31.532220) +G1270022 Hisār POINT(75.716670 29.166670) +G1270351 Haridwār POINT(78.166670 29.966670) +G1270393 Hāpur POINT(77.783330 28.716670) +G1270396 Hāora POINT(88.310280 22.589170) +G1270407 Hanumāngarh POINT(74.316670 29.583330) +G1270583 Gwalior POINT(78.179170 26.223610) +G1270642 Gurgaon POINT(77.033330 28.466670) +G1270668 Guntūr POINT(80.450000 16.300000) +G1270711 Guna POINT(77.316670 24.650000) +G1270752 Gulbarga POINT(76.833330 17.333330) +G1270926 Gorakhpur POINT(75.683330 29.450000) +G1270927 Gorakhpur POINT(83.373890 26.755000) +G1271308 Ghāziābād POINT(77.433330 28.666670) +G1271439 Gaya POINT(85.000000 24.783330) +G1271476 Guwāhāti POINT(91.750950 26.186170) +G1271685 Gangānagar POINT(73.883330 29.916670) +G1271715 Gāndhīnagar POINT(72.683330 23.216670) +G1271850 Gadag POINT(75.616670 15.416670) +G1271885 Fīrozābād POINT(78.416670 27.150000) +G1271912 Fatehpur POINT(80.800000 25.933330) +G1271942 Farrukhābād POINT(79.566670 27.400000) +G1271951 Farīdābād POINT(77.316670 28.433330) +G1271976 Faizābād POINT(82.133330 26.783330) +G1271987 Etāwah POINT(79.023900 26.776900) +G1272051 Elūru POINT(81.100000 16.700000) +G1272175 Durgāpur POINT(87.316670 23.483330) +G1272181 Durg POINT(81.283330 21.183330) +G1272423 Dombivli POINT(73.083330 19.216670) +G1272543 Dindigul POINT(77.950000 10.350000) +G1272691 Dhule POINT(74.783330 20.900000) +G1272979 Dhanbād POINT(86.450000 23.800000) +G1273066 Dewās POINT(76.066670 22.966670) +G1273294 Delhi POINT(77.216670 28.666670) +G1273313 Dehra Dūn POINT(78.033330 30.316670) +G1273491 Darbhanga POINT(85.900000 26.166670) +G1273581 Dānāpur POINT(85.050000 25.633330) +G1273780 Cuttack POINT(85.879270 20.464970) +G1273802 Cuddalore POINT(79.750000 11.750000) +G1273865 Coimbatore POINT(76.966670 11.000000) +G1273874 Cochin POINT(76.233330 9.966670) +G1274693 Chandrapur POINT(79.300000 19.950000) +G1274746 Chandīgarh POINT(76.793300 30.734300) +G1274784 Chandannagar POINT(88.377220 22.869170) +G1275004 Calcutta POINT(88.369720 22.569720) +G1275068 Burhānpur POINT(76.233330 21.300000) +G1275120 Bulandshahr POINT(77.850000 28.400000) +G1275163 Budaun POINT(79.116670 28.050000) +G1275198 Brahmapur POINT(84.783330 19.316670) +G1275248 Borivli POINT(72.850000 19.233330) +G1275339 Mumbai POINT(72.847940 19.014410) +G1275362 Bokāro POINT(85.966670 23.783330) +G1275637 Bilāspur POINT(82.150000 22.083330) +G1275665 Bīkāner POINT(73.300000 28.016670) +G1275701 Bijāpur POINT(75.700000 16.833330) +G1275716 Bihār Sharīf POINT(85.516670 25.183330) +G1275738 Bīdar POINT(77.550000 17.900000) +G1275778 Bhusāwal POINT(75.766670 21.050000) +G1275817 Bhubaneshwar POINT(85.833330 20.233330) +G1275841 Bhopāl POINT(77.400000 23.266670) +G1275899 Bhiwāni POINT(76.133330 28.783330) +G1275901 Bhiwandi POINT(73.066670 19.300000) +G1275926 Bhind POINT(78.788330 26.564170) +G1275960 Bhīlwāra POINT(74.633330 25.350000) +G1275971 Bhilai POINT(81.433330 21.216670) +G1276032 Bhāvnagar POINT(72.150000 21.766670) +G1276058 Bhātpāra POINT(88.408890 22.871390) +G1276070 Bhatinda POINT(74.950000 30.200000) +G1276100 Bharūch POINT(72.966670 21.700000) +G1276128 Bharatpur POINT(77.483330 27.216670) +G1276300 Bhāgalpur POINT(87.000000 25.250000) +G1276321 Bhadrāvati POINT(75.716670 13.866670) +G1276509 Bellary POINT(76.933330 15.150000) +G1276533 Belgaum POINT(74.500000 15.866670) +G1277013 Bareilly POINT(79.416670 28.350000) +G1277029 Barddhamān POINT(87.850000 23.250000) +G1277065 Bārāsat POINT(88.516670 22.716670) +G1277082 Baranagar POINT(88.365280 22.643330) +G1277333 Bengalore POINT(77.603290 12.976230) +G1277397 Bānda POINT(80.333330 25.483330) +G1277539 Bāli POINT(88.340280 22.646110) +G1277799 Bahraich POINT(81.600000 27.583330) +G1277820 Baharampur POINT(88.250000 24.100000) +G1277835 Bahādurgarh POINT(76.916670 28.683330) +G1278130 Āvadi POINT(80.101670 13.115560) +G1278149 Aurangābād POINT(75.333330 19.883330) +G1278314 Āsansol POINT(86.983330 23.683330) +G1278483 Ara POINT(84.666670 25.566670) +G1278672 Anantapur POINT(77.600000 14.683330) +G1278708 Amroha POINT(78.466670 28.916670) +G1278710 Amritsar POINT(74.865560 31.633060) +G1278718 Amrāvati POINT(77.750000 20.933330) +G1278840 Ambattūr POINT(80.162220 13.098330) +G1278903 Amarnāth POINT(73.166670 19.200000) +G1278946 Alwar POINT(76.600000 27.566670) +G1278985 Alleppey POINT(76.326400 9.490040) +G1278994 Allahābād POINT(81.850000 25.450000) +G1279017 Alīgarh POINT(78.083330 27.883330) +G1279064 Alandur POINT(80.206110 13.002500) +G1279105 Akola POINT(77.000000 20.733330) +G1279159 Ajmer POINT(74.633330 26.450000) +G1279186 Āīzawl POINT(92.716670 23.733330) +G1279228 Ahmadnagar POINT(74.733330 19.083330) +G1279233 Ahmadābād POINT(72.616670 23.033330) +G1279259 Āgra POINT(78.016670 27.183330) +G1279290 Agartala POINT(91.275000 23.836390) +G1279335 Ādoni POINT(77.283330 15.633330) +G1344377 Haldia POINT(88.109750 22.060460) +G1348818 Nangi POINT(88.215280 22.508330) +G6943660 Shivaji Nagar POINT(73.852630 18.530170) +G7279746 Noida POINT(77.330000 28.580000) +G7279754 Singrauli POINT(82.675350 24.199730) +G7284820 Jaigaon POINT(89.375580 26.847660) +G7302826 Lal Bahadur Nagar POINT(78.557570 17.347690) +G7302833 Gajuwaka POINT(83.216670 17.700000) +G7302845 Quthbullapur POINT(78.458180 17.501070) +G7302856 Serilingampalle POINT(78.301960 17.493130) +G91597 Sāmarrā’ POINT(43.875620 34.200960) +G94787 Kirkuk POINT(44.392220 35.468060) +G94824 Karbalā’ POINT(44.008470 32.611440) +G95446 Arbīl POINT(44.010620 36.192570) +G97990 Ba‘qūbah POINT(44.655450 33.748460) +G98182 Baghdad POINT(44.400880 33.340580) +G98463 As Sulaymānīyah POINT(45.437490 35.561130) +G98530 As Samāwah POINT(45.294400 31.331980) +G98717 Ar Ramādī POINT(43.305840 33.422570) +G98854 An Nāşirīyah POINT(46.261020 31.052050) +G98860 An Najaf al Ashraf POINT(44.339760 31.998540) +G99071 Al Mawşil al Jadīdah POINT(43.097770 36.334640) +G99072 Mosul POINT(43.118890 36.335000) +G99131 Al Kūt POINT(45.819020 32.514700) +G99347 Al Ḩillah POINT(44.435260 32.480140) +G99454 Al Fallūjah POINT(43.779510 33.353800) +G99532 Al Başrah POINT(47.788850 30.534880) +G99608 Al ‘Amārah POINT(47.139600 31.840640) +G99762 Ad Dīwānīyah POINT(44.930630 31.990510) +G100077 Abū Ghurayb POINT(44.185000 33.308330) +G388349 Al Başrat al Qadīmah POINT(47.814910 30.497210) +G14256 Āzādshahr POINT(48.570730 34.790880) +G23814 Kahrīz POINT(47.055300 34.383800) +G32767 Qarchak POINT(51.568890 35.439440) +G111453 Zanjān POINT(48.478700 36.673600) +G111822 Yazd POINT(54.367500 31.897220) +G112214 Varāmīn POINT(51.645700 35.324200) +G112931 Tehrān POINT(51.421510 35.694390) +G113646 Tabrīz POINT(46.291900 38.080000) +G114259 Sīrjān POINT(55.681400 29.452000) +G115019 Shīrāz POINT(52.538800 29.603600) +G116667 Sāveh POINT(50.356600 35.021300) +G116996 Shari-i-Tajan POINT(53.056520 36.562970) +G117392 Saqqez POINT(46.273500 36.249920) +G117574 Sanandaj POINT(46.992300 35.314400) +G118063 Sabzevār POINT(57.681910 36.212600) +G118743 Rasht POINT(49.583190 37.280770) +G119208 Qom POINT(50.876400 34.640100) +G119505 Qazvīn POINT(50.004900 36.279700) +G121801 Orūmīyeh POINT(45.076050 37.552740) +G122285 Neyshābūr POINT(58.795760 36.213290) +G122438 Naz̧arābād POINT(50.607500 35.952100) +G124665 Mashhad POINT(59.606200 36.297000) +G125185 Malāyer POINT(48.823500 34.296900) +G125446 Mahābād POINT(45.722200 36.763100) +G126972 Khvoy POINT(44.952100 38.550300) +G127319 Khorramshahr POINT(48.166400 30.439700) +G127349 Khorramābād POINT(48.355830 33.487780) +G128226 Kermānshāh POINT(47.065000 34.314170) +G128234 Kermān POINT(57.081230 30.293680) +G128477 Kāshān POINT(51.436440 33.983080) +G128747 Karaj POINT(51.010300 35.835500) +G132144 Hamadān POINT(48.514560 34.799220) +G132892 Gorgān POINT(54.434750 36.838660) +G139817 Bandar Būshehr POINT(50.838500 28.968400) +G139889 Būkān POINT(46.208900 36.521000) +G140044 Borūjerd POINT(48.751600 33.897300) +G140380 Bojnūrd POINT(57.329030 37.474730) +G140463 Bīrjand POINT(59.221140 32.866280) +G141681 Bandar ‘Abbās POINT(56.280800 27.186500) +G142363 Bābol POINT(52.678950 36.551320) +G143083 Ardabīl POINT(48.293300 38.249800) +G143127 Arāk POINT(49.689160 34.091740) +G143534 Āmol POINT(52.350720 36.469610) +G144448 Ahvāz POINT(48.669300 31.320300) +G145459 Ābādān POINT(48.304300 30.339200) +G418606 Najafābād POINT(51.366800 32.634400) +G418710 Khomeynī Shahr POINT(51.521130 32.700180) +G418863 Eşfahān POINT(51.677610 32.657220) +G1159301 Zāhedān POINT(60.862900 29.496300) +G2523630 Reggio di Calabria POINT(15.661290 38.110470) +G2523920 Palermo POINT(13.359760 38.115820) +G2524170 Messina POINT(15.549690 38.193270) +G2525068 Catania POINT(15.087190 37.502130) +G2525473 Cagliari POINT(9.134620 39.207380) +G3164527 Verona POINT(10.997790 45.434190) +G3164603 Venice POINT(12.326670 45.438610) +G3165185 Trieste POINT(13.780000 45.648610) +G3165524 Torino POINT(7.686820 45.070490) +G3165926 Taranto POINT(17.229720 40.476110) +G3169070 Roma POINT(12.483900 41.894740) +G3169921 Prato POINT(11.090920 43.884250) +G3171457 Parma POINT(10.328980 44.802660) +G3171728 Padova POINT(11.881810 45.415190) +G3172394 Napoli POINT(14.250000 40.833330) +G3173331 Modena POINT(10.925390 44.647830) +G3173435 Milano POINT(9.189510 45.464270) +G3173529 Mestre POINT(12.242500 45.490280) +G3174659 Livorno POINT(10.316000 43.542640) +G3176219 Genova POINT(8.933860 44.406320) +G3176885 Foggia POINT(15.549250 41.460930) +G3176959 Florence POINT(11.250000 43.766670) +G3181554 Brescia POINT(10.227270 45.524780) +G3181928 Bologna POINT(11.338750 44.493810) +G3182351 Bari POINT(16.851180 41.117730) +G3489297 New Kingston POINT(-76.783190 18.007470) +G3489854 Kingston POINT(-76.793580 17.997020) +G246013 Wādī as Sīr POINT(35.816670 31.950000) +G248946 Irbid POINT(35.850000 32.555560) +G250090 Az Zarqā’ POINT(36.087960 32.072750) +G250441 Amman POINT(35.945030 31.955220) +G1847963 Atsugi POINT(139.359720 35.438890) +G1847966 Akashi POINT(134.983330 34.633330) +G1848254 Yono POINT(139.633330 35.883330) +G1848313 Yokosuka POINT(139.667220 35.283610) +G1848354 Yokohama-shi POINT(139.642500 35.447780) +G1848373 Yokkaichi POINT(136.616670 34.966670) +G1848522 Yao POINT(135.600000 34.616670) +G1849053 Utsunomiya-shi POINT(139.883610 36.565830) +G1849372 Uji POINT(135.800000 34.883330) +G1849498 Ube POINT(131.251110 33.943060) +G1849796 Tsu-shi POINT(136.508610 34.730280) +G1849814 Toyota POINT(137.150000 35.083330) +G1849837 Toyonaka POINT(135.469320 34.782440) +G1849846 Toyohashi POINT(137.383330 34.766670) +G1849876 Toyama-shi POINT(137.211390 36.695280) +G1849892 Tottori POINT(134.233330 35.500000) +G1850147 Tokyo POINT(139.581300 35.614880) +G1850158 Tokushima-shi POINT(134.559440 34.065830) +G1850181 Tokorozawa POINT(139.469030 35.799160) +G1850692 Nishi-Tokyo-shi POINT(139.538300 35.725260) +G1850910 Takatsuki POINT(135.616780 34.848330) +G1851002 Takasaki POINT(139.016670 36.333330) +G1851012 Takarazuka POINT(135.356970 34.799360) +G1851032 Takaoka POINT(137.016670 36.750000) +G1851100 Takamatsu-shi POINT(134.043330 34.340280) +G1851307 Tachikawa POINT(139.418060 35.692780) +G1851348 Suzuka POINT(136.583330 34.883330) +G1851483 Suita POINT(135.515670 34.761430) +G1851604 Sōka POINT(139.804440 35.820280) +G1851717 Shizuoka-shi POINT(138.383060 34.976940) +G1852140 Shinagawa-ku POINT(139.730170 35.609020) +G1852225 Shimonoseki POINT(130.950000 33.950000) +G1852383 Shimminatochō POINT(135.200000 34.183330) +G1852899 Sasebo POINT(129.722780 33.159170) +G1853195 Sakai POINT(135.466670 34.583330) +G1853295 Sagamihara POINT(139.354440 35.553060) +G1853303 Saga-shi POINT(130.298800 33.249320) +G1853483 Oyama POINT(139.800000 36.300000) +G1853574 Ōtsu-shi POINT(135.868330 35.004440) +G1853677 Ōta POINT(139.366670 36.300000) +G1853909 Ōsaka-shi POINT(135.502180 34.693740) +G1854376 Okazaki POINT(137.166670 34.950000) +G1854383 Okayama-shi POINT(133.935000 34.661670) +G1854487 Ōita-shi POINT(131.612500 33.238060) +G1854703 Ōgaki POINT(136.616670 35.350000) +G1854747 Odawara POINT(139.159720 35.255560) +G1854902 Numazu POINT(138.866670 35.100000) +G1855207 Nishinomiya POINT(135.333330 34.716670) +G1855431 Niigata-shi POINT(139.023610 37.902220) +G1855503 Nerima POINT(139.650000 35.733330) +G1855612 Nara-shi POINT(135.804850 34.685050) +G1856035 Naha-shi POINT(127.681110 26.212500) +G1856057 Nagoya-shi POINT(136.906410 35.181470) +G1856177 Nagasaki-shi POINT(129.873610 32.744720) +G1856184 Nagareyama POINT(139.902660 35.856300) +G1856199 Nagaoka POINT(138.850000 37.450000) +G1856215 Nagano-shi POINT(138.181110 36.651390) +G1856717 Miyazaki-shi POINT(131.423890 31.911110) +G1856942 Mitaka-shi POINT(139.559630 35.683510) +G1857144 Minami-rinkan POINT(139.450000 35.483330) +G1857519 Matsumoto POINT(137.966670 36.233330) +G1857550 Matsue-shi POINT(133.050560 35.472220) +G1857553 Matsudo POINT(139.900000 35.783330) +G1857843 Maebashi-shi POINT(139.060830 36.391110) +G1857871 Machida POINT(139.450830 35.540280) +G1857910 Kyoto POINT(135.753850 35.021070) +G1858088 Kurume POINT(130.516670 33.316670) +G1858296 Kure POINT(132.566670 34.233330) +G1858311 Kurashiki POINT(133.766670 34.583330) +G1858421 Kumamoto-shi POINT(130.741670 32.789720) +G1858428 Kumagaya POINT(139.383330 36.133330) +G1858729 Koshigaya POINT(139.783330 35.883330) +G1858926 Komaki POINT(136.916670 35.283330) +G1859100 Kōfu-shi POINT(138.568330 35.663890) +G1859116 Kodaira POINT(139.483890 35.726390) +G1859146 Kōchi-shi POINT(133.531110 33.559720) +G1859171 Kōbe-shi POINT(135.183000 34.691300) +G1859307 Kitakyūshū POINT(130.833330 33.833330) +G1859383 Kishiwada POINT(135.366670 34.466670) +G1859642 Kawasaki POINT(139.717220 35.520560) +G1859675 Kawanishi POINT(135.416670 34.816670) +G1859730 Kawaguchi POINT(139.720560 35.805000) +G1859740 Kawagoe POINT(139.485280 35.908610) +G1859884 Kasukabe POINT(139.753610 35.976390) +G1859891 Kasugai POINT(136.972290 35.247620) +G1859924 Kashiwa POINT(139.968890 35.854440) +G1860243 Kanazawa-shi POINT(136.625560 36.594440) +G1860437 Kami-renjaku POINT(139.550000 35.683330) +G1860672 Kamakura POINT(139.550280 35.308890) +G1860704 Kakogawa POINT(134.850000 34.766670) +G1860827 Kagoshima-shi POINT(130.558140 31.560180) +G1861107 Izumi POINT(135.433330 34.483330) +G1861310 Itami POINT(135.401260 34.784270) +G1861949 Ichinomiya POINT(136.800000 35.300000) +G1861968 Ichikawa POINT(139.924720 35.719720) +G1862033 Ibaraki POINT(135.568280 34.816410) +G1862415 Hiroshima-shi POINT(132.459370 34.396270) +G1862462 Hiratsuka POINT(139.342220 35.323060) +G1862540 Hirakata POINT(135.649140 34.813520) +G1862599 Hino POINT(139.400280 35.673060) +G1862627 Himeji POINT(134.700000 34.816670) +G1863289 Hamamatsu POINT(137.733330 34.700000) +G1863431 Hadano POINT(139.223610 35.371110) +G1863440 Hachiōji POINT(139.323890 35.655830) +G1863641 Gifu-shi POINT(136.760390 35.422910) +G1863905 Funabashi POINT(139.983330 35.693060) +G1863917 Fukuyama POINT(133.366670 34.483330) +G1863967 Fukuoka-shi POINT(130.418060 33.606390) +G1863985 Fukui-shi POINT(136.222570 36.064430) +G1864092 Fujisawa POINT(139.470000 35.341940) +G1864134 Fuji POINT(138.683330 35.166670) +G1864154 Fuchū POINT(139.483330 35.666670) +G1864518 Chōfu POINT(139.552220 35.655560) +G1864624 Chigasaki POINT(139.403890 35.326110) +G1865005 Ashikaga POINT(139.450000 36.333330) +G1865294 Anjō POINT(137.080540 34.958280) +G1865387 Amagasaki POINT(135.416670 34.716670) +G1865714 Ageo POINT(139.588610 35.969720) +G1907146 Sayama POINT(139.412120 35.852950) +G1926004 Wakayama-shi POINT(135.167500 34.226110) +G1926099 Matsuyama-shi POINT(132.765740 33.839160) +G2110556 Yamagata-shi POINT(140.363330 38.240560) +G2110683 Tsukuba POINT(140.100000 36.200000) +G2111149 Sendai-shi POINT(140.871940 38.268890) +G2111220 Sakura POINT(140.233330 35.716670) +G2111687 Narashino POINT(140.033330 35.683330) +G2111834 Morioka-shi POINT(141.152500 39.703610) +G2111901 Mito-shi POINT(140.446670 36.341390) +G2112141 Kōriyama POINT(140.383330 37.400000) +G2112312 Katsuta POINT(140.533330 36.383330) +G2112539 Iwaki POINT(140.883330 37.050000) +G2112664 Ichihara POINT(140.083330 35.516670) +G2112708 Hitachi POINT(140.650000 36.600000) +G2112923 Fukushima-shi POINT(140.467780 37.750000) +G2113015 Chiba-shi POINT(140.123330 35.604720) +G2113126 Akita POINT(140.116670 39.716670) +G2113719 Akita-shi POINT(140.103330 39.718060) +G2127733 Tomakomai POINT(141.603330 42.636940) +G2128295 Sapporo-shi POINT(141.346940 43.064170) +G2128815 Obihiro POINT(143.204440 42.917220) +G2129376 Kushiro POINT(144.374720 42.975000) +G2130057 Hirosaki POINT(140.472500 40.593060) +G2130188 Hakodate POINT(140.736670 41.775830) +G2130203 Hachinohe POINT(141.500000 40.500000) +G2130629 Asahikawa POINT(142.370280 43.767780) +G2130658 Aomori-shi POINT(140.740000 40.824440) +G6697563 Neyagawa POINT(135.627590 34.766150) +G6822096 Hitachi-Naka POINT(140.534790 36.396590) +G6825489 Jōetsu POINT(138.236420 37.148280) +G6940394 Saitama POINT(139.656570 35.908070) +G7279570 Higashimurayama-shi POINT(139.468520 35.754590) +G184622 Nakuru POINT(36.066670 -0.283330) +G184745 Nairobi POINT(36.816670 -1.283330) +G186301 Mombasa POINT(39.660500 -4.055000) +G191245 Kisumu POINT(34.750000 -0.100000) +G198629 Eldoret POINT(35.269920 0.520360) +G1527534 Osh POINT(72.790000 40.529440) +G1528675 Bishkek POINT(74.590000 42.870000) +G1821306 Phnom Penh POINT(104.916010 11.562450) +G1831142 Sihanoukville POINT(103.529580 10.609320) +G1831797 Bătdâmbâng POINT(103.198220 13.102710) +G1866923 Wŏnsan POINT(127.443610 39.152780) +G1869446 Songnim POINT(125.645000 38.754170) +G1870883 Sariwŏn POINT(125.755830 38.507220) +G1871859 Pyongyang POINT(125.754320 39.033850) +G1873757 Namp’o POINT(125.407780 38.737500) +G1876373 Kaesŏng POINT(126.554440 37.970830) +G1877030 Hŭngnam POINT(127.618610 39.831670) +G1877449 Hamhŭng POINT(127.536390 39.918330) +G1877615 Haeju POINT(125.714720 38.040560) +G2040893 Sinŭiju POINT(124.398060 40.100560) +G2043572 Kanggye-si POINT(126.585230 40.969460) +G2044757 Ch’ŏngjin POINT(129.775830 41.795560) +G1832157 Yŏsu POINT(127.737780 34.744170) +G1832847 Yangju POINT(127.061690 37.833110) +G1833105 Wŏnju POINT(127.945280 37.351390) +G1833747 Ulsan POINT(129.316670 35.537220) +G1833788 Ŭijŏngbu POINT(127.047400 37.741500) +G1835235 Taejŏn POINT(127.419720 36.321390) +G1835329 Taegu POINT(128.591110 35.870280) +G1835553 Suwŏn POINT(127.008890 37.291110) +G1835648 Sunch’ŏn POINT(127.489470 34.948080) +G1835848 Seoul POINT(126.977830 37.568260) +G1838524 Pusan POINT(129.040280 35.102780) +G1838716 Puch’ŏn POINT(126.783060 37.498890) +G1839071 P’ohang POINT(129.365000 36.032220) +G1839652 Osan POINT(127.070560 37.152220) +G1841066 Mokp’o POINT(126.388610 34.793610) +G1841245 Masan POINT(128.572500 35.208060) +G1841603 Kyŏngju POINT(129.211670 35.842780) +G1841811 Kwangju POINT(126.915560 35.154720) +G1841988 Kuri POINT(127.139400 37.598600) +G1842025 Kunsan POINT(126.711390 35.978610) +G1842225 Kumi POINT(128.336000 36.113600) +G1842485 Goyang POINT(126.835000 37.656390) +G1842943 Kimhae POINT(128.881110 35.234170) +G1843137 Kangnŭng POINT(128.896110 37.755560) +G1843491 Iksan POINT(126.954440 35.943890) +G1843564 Inch’ŏn POINT(126.731670 37.453610) +G1843702 Ich'ŏn POINT(127.442500 37.279170) +G1843847 Hwaseong POINT(126.816900 37.206820) +G1845136 Ch’unch’ŏn POINT(127.734170 37.874720) +G1845457 Chŏnju POINT(127.148890 35.821940) +G1845604 Ch’ŏngju POINT(127.489720 36.637220) +G1845759 Ch’ŏnan POINT(127.152200 36.806500) +G1846052 Chinju POINT(128.084720 35.192780) +G1846266 Cheju POINT(126.521940 33.509720) +G1846326 Ch’angwŏn POINT(128.681110 35.228060) +G1846898 Anyang POINT(126.926940 37.392500) +G1846918 Ansan POINT(126.821940 37.323610) +G1897000 Sŏngnam POINT(127.137780 37.438610) +G1948005 Kwangmyŏng POINT(126.866390 37.477220) +G608668 Oral POINT(51.366670 51.233330) +G609655 Karagandy POINT(54.866670 50.066670) +G610529 Atyrau POINT(51.883330 47.116670) +G610611 Aqtöbe POINT(57.207180 50.279690) +G1516905 Taraz POINT(71.366670 42.900000) +G1518262 Temirtau POINT(72.948330 50.054440) +G1518543 Taldyqorghan POINT(77.916670 45.000000) +G1518980 Shymkent POINT(69.600000 42.300000) +G1519422 Semey POINT(80.227500 50.411110) +G1519922 Qyzylorda POINT(65.509170 44.852780) +G1519928 Qostanay POINT(63.583330 53.166670) +G1519942 Qaraghandy POINT(73.099440 49.798890) +G1520172 Petropavlovsk POINT(69.162780 54.875280) +G1520240 Pavlodar POINT(76.950000 52.300000) +G1520316 Ust’-Kamenogorsk POINT(82.610280 49.978890) +G1526273 Astana POINT(71.445980 51.180100) +G1526384 Almaty POINT(76.950000 43.250000) +G1651944 Vientiane POINT(102.600000 17.966670) +G266826 Tripoli POINT(35.849720 34.436670) +G268064 Sidon POINT(35.368890 33.563060) +G268743 Ra’s Bayrūt POINT(35.483330 33.900000) +G276781 Beirut POINT(35.494420 33.888940) +G1234633 Moratuwa POINT(79.881600 6.773000) +G1242833 Jaffna POINT(80.013700 9.656700) +G1246321 Galkissa POINT(79.863000 6.829300) +G1248991 Colombo POINT(79.847780 6.931940) +G2274895 Monrovia POINT(-10.796900 6.300540) +G593116 Vilnius POINT(25.279800 54.689160) +G598098 Klaipėda POINT(21.117500 55.717220) +G598316 Kaunas POINT(23.900000 54.900000) +G456172 Riga POINT(24.105890 56.946000) +G88319 Banghāzī POINT(20.066670 32.116670) +G89055 Al Bayḑā’ POINT(21.755060 32.762720) +G2210221 Tarhūnah POINT(13.633200 32.435020) +G2210247 Tripoli POINT(13.187460 32.875190) +G2214846 Mişrātah POINT(15.092540 32.375350) +G2216885 Ḩārat az Zāwiyah POINT(12.715000 32.763060) +G2219905 Al Khums POINT(14.266670 32.650000) +G2528910 Tétouan POINT(-5.372420 35.571090) +G2530335 Tangier POINT(-5.813650 35.780580) +G2537763 Salé POINT(-6.816600 34.038920) +G2537881 Safi POINT(-9.237180 32.299390) +G2538475 Rabat POINT(-6.832550 34.013250) +G2540483 Oujda POINT(-1.907640 34.680520) +G2542051 Mohammedia POINT(-7.394420 33.706590) +G2542715 Meknès POINT(-5.547270 33.893520) +G2542997 Marrakech POINT(-8.008280 31.631480) +G2544248 Khouribga POINT(-6.906300 32.881080) +G2544571 Kenitra POINT(-6.580200 34.261010) +G2548885 Fès POINT(-4.999800 34.037150) +G2553604 Casablanca POINT(-7.619160 33.592780) +G2555745 Beni Mellal POINT(-6.349840 32.337250) +G2561668 Agadir POINT(-9.598150 30.420180) +G617239 Tiraspol POINT(29.643330 46.840280) +G618426 Chişinău POINT(28.857500 47.005560) +G1053384 Toamasina POINT(49.383330 -18.166670) +G1062663 Mahajanga POINT(46.316670 -15.716670) +G1064890 Fianarantsoa POINT(47.083330 -21.433330) +G1070940 Antananarivo POINT(47.530980 -18.914330) +G785842 Skopje POINT(21.433330 42.000000) +G2460596 Bamako POINT(-8.000000 12.650000) +G1293960 Taunggyi POINT(97.033330 20.783330) +G1295765 Akyab POINT(92.900000 20.150000) +G1298824 Rangoon POINT(96.156110 16.805280) +G1300466 Bago POINT(96.479720 17.336670) +G1308465 Mawlamyine POINT(97.625560 16.491390) +G1308522 Monywa POINT(95.133330 22.116670) +G1309611 Myeik POINT(98.600000 12.433330) +G1309793 Meiktila POINT(95.866670 20.866670) +G1311874 Mandalay POINT(96.083590 21.974730) +G1328421 Pathein POINT(94.733330 16.783330) +G6611854 Nay Pyi Taw POINT(96.129720 19.745000) +G2028462 Ulaanbaatar POINT(106.883240 47.907710) +G1821274 Macau POINT(113.546110 22.200560) +G2377450 Nouakchott POINT(-15.949750 18.100330) +G934154 Port Louis POINT(57.498890 -20.161940) +G927967 Lilongwe POINT(33.783330 -13.983330) +G931755 Blantyre POINT(35.013870 -15.786820) +G3514450 Xochimilco POINT(-99.107500 19.262220) +G3514519 Xico POINT(-98.933330 19.266670) +G3514663 Alvaro Obregón POINT(-99.225000 19.373330) +G3514670 Villahermosa POINT(-92.916670 17.983330) +G3514674 Gustavo A. Madero POINT(-99.095830 19.478610) +G3514783 Veracruz POINT(-96.133330 19.200000) +G3515001 Tuxtla Gutiérrez POINT(-93.116670 16.750000) +G3515302 Toluca POINT(-99.667220 19.288330) +G3515428 Tlalpan POINT(-99.166670 19.283330) +G3515431 Tlalnepantla POINT(-99.221670 19.526940) +G3515463 Tlahuac POINT(-99.003330 19.281670) +G3515807 Cuautitlán Izcalli POINT(-99.246670 19.646940) +G3516109 Tehuacán POINT(-97.383330 18.450000) +G3516266 Tapachula POINT(-92.283330 14.900000) +G3516355 Tampico POINT(-97.850000 22.216670) +G3518135 San Pablo de las Salinas POINT(-99.096390 19.665830) +G3520339 Reynosa POINT(-98.283330 26.083330) +G3521081 Puebla de Zaragoza POINT(-98.200000 19.050000) +G3521168 Poza Rica de Hidalgo POINT(-97.459460 20.533150) +G3522210 Pachuca de Soto POINT(-98.733290 20.116970) +G3522507 Oaxaca de Juárez POINT(-96.716670 17.050000) +G3522551 Nuevo Laredo POINT(-99.516670 27.500000) +G3522732 Nicolás Romero POINT(-99.313060 19.621940) +G3522790 Naucalpan de Juárez POINT(-99.239630 19.478510) +G3523183 Minatitlán POINT(-94.516670 17.983330) +G3523303 Metepec POINT(-99.607780 19.253610) +G3523349 Mérida POINT(-89.616670 20.966670) +G3523466 Heroica Matamoros POINT(-97.500000 25.883330) +G3523760 Magdalena Contreras POINT(-99.233330 19.283330) +G3523908 Los Reyes POINT(-98.966670 19.350000) +G3526485 Jiutepec POINT(-99.183330 18.866670) +G3526617 Jalapa Enríquez POINT(-96.916670 19.533330) +G3526682 Ixtapaluca POINT(-98.883330 19.316670) +G3526683 Iztapalapa POINT(-99.051940 19.351110) +G3526700 Iztacalco POINT(-99.084720 19.396670) +G3529612 Ecatepec POINT(-99.052500 19.601110) +G3529947 Cuernavaca POINT(-99.250000 18.916670) +G3530049 Cuajimalpa POINT(-99.301110 19.355830) +G3530139 Coyoacán POINT(-99.160280 19.328890) +G3530517 Coatzacoalcos POINT(-94.416670 18.150000) +G3530569 Coacalco POINT(-99.110280 19.631670) +G3530580 Ciudad Victoria POINT(-99.133330 23.733330) +G3530589 Ciudad Nezahualcóyotl POINT(-99.033060 19.413610) +G3530594 Ciudad Madero POINT(-97.833330 22.266670) +G3530597 Mexico City POINT(-99.127660 19.428470) +G3530757 Cholula POINT(-98.303520 19.064060) +G3530870 Chilpancingo de los Bravos POINT(-99.500000 17.550000) +G3531200 Chalco de Díaz Covarrubias POINT(-98.900000 19.266670) +G3531673 Cancún POINT(-86.846560 21.174290) +G3531732 Campeche POINT(-90.533330 19.850000) +G3532497 Azcapotzalco POINT(-99.183610 19.488890) +G3532624 Ciudad López Mateos POINT(-99.261390 19.558330) +G3533462 Acapulco de Juárez POINT(-99.890100 16.863360) +G3827406 Benito Juarez POINT(-99.165000 19.385000) +G3827407 Venustiano Carranza POINT(-99.099170 19.430000) +G3827408 Miguel Hidalgo POINT(-99.202780 19.422500) +G3827409 Cuauhtémoc POINT(-99.156940 19.417220) +G3979770 Zapopan POINT(-103.400000 20.716670) +G3980760 Uruapan del Progreso POINT(-102.066670 19.416670) +G3981254 Torreón POINT(-103.433330 25.550000) +G3981369 Tonalá POINT(-103.233330 20.616670) +G3981461 Tlaquepaque POINT(-103.316670 20.650000) +G3981609 Tijuana POINT(-117.016670 32.533330) +G3981941 Tepic POINT(-104.900000 21.500000) +G3982912 Soledad Díez Gutiérrez POINT(-100.950000 22.200000) +G3984583 Santa Catarina POINT(-100.458130 25.673250) +G3985241 San Nicolás de los Garza POINT(-100.300000 25.750000) +G3985606 San Luis Potosí POINT(-100.983330 22.150000) +G3988086 Saltillo POINT(-101.000000 25.416670) +G3991164 Querétaro POINT(-100.383330 20.600000) +G3991328 Puerto Vallarta POINT(-105.230660 20.620410) +G3995402 Morelia POINT(-101.184430 19.700780) +G3995465 Monterrey POINT(-100.316670 25.666670) +G3995523 Monclova POINT(-101.416670 26.900000) +G3996069 Mexicali POINT(-115.468330 32.651940) +G3996322 Mazatlán POINT(-106.416670 23.216670) +G3997479 Los Mochis POINT(-108.966670 25.766670) +G3998655 León POINT(-101.666670 21.116670) +G4000900 La Paz POINT(-110.300000 24.166670) +G4004330 Irapuato POINT(-101.350000 20.683330) +G4004886 Heroica Nogales POINT(-110.933330 31.333330) +G4004898 Hermosillo POINT(-110.966670 29.066670) +G4005492 Guadalupe POINT(-100.250000 25.683330) +G4005539 Guadalajara POINT(-103.333330 20.666670) +G4005775 Gómez Palacio POINT(-103.500000 25.566670) +G4005867 General Escobedo POINT(-100.333330 25.816670) +G4006702 Ensenada POINT(-116.616670 31.866670) +G4011743 Durango POINT(-104.666670 24.033330) +G4012176 Culiacán POINT(-107.389720 24.799440) +G4013704 Ciudad Obregón POINT(-109.933330 27.483330) +G4013708 Ciudad Juárez POINT(-106.483330 31.733330) +G4014338 Chihuahua POINT(-106.083330 28.633330) +G4014875 Celaya POINT(-100.816670 20.516670) +G4018390 Apodaca POINT(-100.200000 25.766670) +G4019233 Aguascalientes POINT(-102.300000 21.883330) +G7280708 Colonia del Valle POINT(-99.162040 19.386110) +G1732687 Batu Pahat POINT(102.933330 1.850000) +G1732745 Sekudai POINT(103.666670 1.533330) +G1732752 Johor Bahru POINT(103.757800 1.465500) +G1732811 Kluang POINT(103.332800 2.025100) +G1732903 Shah Alam POINT(101.532810 3.085070) +G1732905 Klang POINT(101.450000 3.033330) +G1733432 Kota Kinabalu POINT(116.066670 5.983330) +G1734052 Sandakan POINT(118.117900 5.840200) +G1734199 Tawau POINT(117.900000 4.250000) +G1734393 Kulim POINT(100.561770 5.364990) +G1734586 Taiping POINT(100.733330 4.850000) +G1734634 Ipoh POINT(101.082900 4.584100) +G1734705 Kuala Terengganu POINT(103.140800 5.330200) +G1734759 Melaka POINT(102.248060 2.196940) +G1734810 Seremban POINT(101.933330 2.716670) +G1735079 Bukit Mertajam POINT(100.466700 5.363010) +G1735106 George Town POINT(100.335430 5.411230) +G1735158 Petaling Jaya POINT(101.606710 3.107260) +G1735161 Kuala Lumpur POINT(101.686530 3.141200) +G1735227 Kuantan POINT(103.326000 3.807700) +G1735498 Sungai Petani POINT(100.487720 5.647000) +G1735634 Kuching POINT(110.333330 1.550000) +G1735902 Sibu POINT(111.816670 2.300000) +G1736309 Alor Setar POINT(100.360140 6.121040) +G1736376 Kota Bharu POINT(102.238600 6.133280) +G1737486 Bintulu POINT(113.033330 3.166670) +G1738050 Miri POINT(113.983330 4.383330) +G1771023 Kampung Baru Subang POINT(101.533330 3.150000) +G1028434 Quelimane POINT(36.888330 -17.878610) +G1033356 Nampula POINT(39.266600 -15.116460) +G1035025 Cidade de Nacala POINT(40.672780 -14.542780) +G1039854 Matola POINT(32.458890 -25.962220) +G1040652 Maputo POINT(32.589170 -25.965280) +G1049261 Chimoio POINT(33.483330 -19.116390) +G1052373 Beira POINT(34.838890 -19.843610) +G3352136 Windhoek POINT(17.083230 -22.559410) +G2437798 Zinder POINT(8.988370 13.804870) +G2440485 Niamey POINT(2.111780 13.512500) +G2441291 Maradi POINT(7.101740 13.500000) +G2317765 Zaria POINT(7.725180 11.113240) +G2319133 Warri POINT(5.750000 5.516670) +G2320576 Umuahia POINT(7.489590 5.526270) +G2320831 Ugep POINT(8.081200 5.808600) +G2322794 Abuja POINT(7.180830 9.175830) +G2322911 Sokoto POINT(5.239020 13.060920) +G2323390 Saki POINT(3.383330 8.666670) +G2323411 Shagamu POINT(3.647760 6.843230) +G2323675 Sapele POINT(5.676660 5.894050) +G2324774 Port Harcourt POINT(7.013400 4.777420) +G2325200 Oyo POINT(3.933330 7.850000) +G2325314 Owo POINT(5.586810 7.196200) +G2325330 Owerri POINT(7.030410 5.483330) +G2326016 Onitsha POINT(6.788450 6.145430) +G2326171 Ondo POINT(4.833330 7.100000) +G2328765 Nnewi POINT(6.914780 6.019860) +G2329821 Mubi POINT(13.264360 10.267610) +G2330100 Minna POINT(6.556940 9.613890) +G2331140 Makurdi POINT(8.512100 7.741100) +G2331447 Maiduguri POINT(13.160270 11.846440) +G2332459 Lagos POINT(3.395830 6.453060) +G2334327 Kishi POINT(3.850000 9.083330) +G2334802 Katsina POINT(7.600630 12.989430) +G2335204 Kano POINT(8.513810 11.994350) +G2335727 Kaduna POINT(7.438280 10.522240) +G2335953 Jos POINT(8.900000 9.916670) +G2336056 Jimeta POINT(12.466670 9.283330) +G2336905 Iwo POINT(4.183330 7.633330) +G2337207 Ise-Ekiti POINT(5.428100 7.463200) +G2337490 Inisa POINT(4.333330 7.850000) +G2337639 Ilorin POINT(4.550000 8.500000) +G2337704 Ilesa POINT(4.733330 7.616670) +G2337765 Ila Orangun POINT(4.900000 8.016670) +G2338106 Ikot-Ekpene POINT(7.710820 5.179380) +G2338273 Ikire POINT(4.183330 7.350000) +G2338385 Ijero-Ekiti POINT(5.074200 7.813900) +G2338400 Ijebu-Ode POINT(3.915880 6.816090) +G2339354 Ibadan POINT(3.896390 7.387780) +G2339937 Gusau POINT(6.661350 12.162780) +G2340451 Gombe POINT(11.167290 10.289690) +G2343279 Enugu POINT(7.494300 6.440200) +G2343983 Effon Alaiye POINT(4.916670 7.650000) +G2344082 Ebute Ikorodu POINT(3.488180 6.600860) +G2345521 Damaturu POINT(11.960800 11.747000) +G2346229 Calabar POINT(8.322000 4.951700) +G2347209 Bida POINT(6.016670 9.083330) +G2347283 Benin City POINT(5.627490 6.335040) +G2347470 Bauchi POINT(9.843270 10.313440) +G2348773 Awka POINT(7.074110 6.210090) +G2350841 Akure POINT(5.193120 7.252560) +G2352778 Abuja POINT(7.489760 9.057350) +G2352947 Abeokuta POINT(3.350000 7.150000) +G2353151 Aba POINT(7.366670 5.106580) +G3617763 Managua POINT(-86.250400 12.132820) +G2745912 Utrecht POINT(5.122220 52.090830) +G2746301 Tilburg POINT(5.091300 51.555510) +G2747373 Den Haag POINT(4.298610 52.076670) +G2747891 Rotterdam POINT(4.479170 51.922500) +G2750053 Nijmegen POINT(5.852780 51.842500) +G2755251 Groningen POINT(6.566670 53.219170) +G2756071 Enschede POINT(6.895830 52.218330) +G2756253 Eindhoven POINT(5.477780 51.440830) +G2758401 Breda POINT(4.775960 51.586560) +G2759794 Amsterdam POINT(4.889690 52.374030) +G2759879 Almere Stad POINT(5.214130 52.370250) +G3143244 Oslo POINT(10.746090 59.912730) +G3161732 Bergen POINT(5.324150 60.392990) +G1282898 Pokhara POINT(83.968510 28.266890) +G1282931 Pātan POINT(85.333330 27.666670) +G1283240 Kathmandu POINT(85.320600 27.701690) +G1283582 Birātnagar POINT(87.283370 26.483100) +G2179537 Wellington POINT(174.775570 -41.286640) +G2185964 North Shore POINT(174.750000 -36.800000) +G2187404 Manukau City POINT(174.879860 -36.992820) +G2190324 Hamilton POINT(175.283330 -37.783330) +G2192362 Christchurch POINT(172.633330 -43.533330) +G2193733 Auckland POINT(174.766670 -36.866670) +G7302484 Waitakere POINT(174.657730 -36.917540) +G286621 Şalālah POINT(54.092370 17.015050) +G287286 Muscat POINT(58.593330 23.613330) +G288764 Bawshar POINT(58.410630 23.558270) +G288967 As Sīb POINT(58.182500 23.680280) +G3701329 San Miguelito POINT(-79.500000 9.033330) +G3703443 Panamá POINT(-79.519730 8.993600) +G3691175 Trujillo POINT(-79.029980 -8.115990) +G3691674 Sullana POINT(-80.685280 -4.903890) +G3693345 Pucallpa POINT(-74.553870 -8.379150) +G3693528 Piura POINT(-80.633330 -5.200000) +G3696183 Iquitos POINT(-73.247220 -3.748060) +G3698304 Chimbote POINT(-78.578330 -9.085280) +G3698350 Chiclayo POINT(-79.841670 -6.773610) +G3928128 Tacna POINT(-70.248330 -18.005560) +G3936456 Lima POINT(-77.028240 -12.043180) +G3937513 Juliaca POINT(-70.133330 -15.500000) +G3938527 Ica POINT(-75.730830 -14.065280) +G3939459 Huancayo POINT(-75.233330 -12.066670) +G3941584 Cusco POINT(-71.978060 -13.518330) +G3943789 Chincha Alta POINT(-76.132350 -13.409850) +G3946083 Callao POINT(-77.150000 -12.066670) +G3947322 Arequipa POINT(-71.535000 -16.398890) +G2088122 Port Moresby POINT(147.179720 -9.443140) +G1679432 Zamboanga POINT(122.073890 6.910280) +G1681602 Toledo POINT(123.641940 10.379170) +G1682598 Taytay POINT(121.139400 14.567800) +G1682812 Tarlac POINT(120.598610 15.488890) +G1687687 Santol POINT(120.567500 15.162220) +G1687894 Santa Rosa POINT(121.111390 14.312220) +G1688749 San Pedro POINT(121.047300 14.359500) +G1688830 San Pablo POINT(121.325830 14.066940) +G1689395 San Jose del Monte POINT(121.045280 14.813890) +G1690039 San Fernando POINT(120.689800 15.028600) +G1692685 Puerto Princesa POINT(118.735280 9.739170) +G1695743 Panalanoy POINT(125.006390 11.251110) +G1697175 Olongapo POINT(120.282780 14.829170) +G1699802 Meycauayan POINT(120.960830 14.736940) +G1701472 Mantampay POINT(124.216670 8.166670) +G1701500 Mansilingan POINT(122.978890 10.631110) +G1701668 Manila POINT(120.982200 14.604200) +G1701947 Mandaue City POINT(123.922220 10.323610) +G1702540 Malolos POINT(120.811670 14.841940) +G1704703 Mabalacat POINT(120.573600 15.221600) +G1705357 Lucena POINT(121.617220 13.931390) +G1706090 Lipa POINT(121.173890 13.939440) +G1706684 Libertad POINT(125.501940 8.944170) +G1706889 Legaspi POINT(123.734440 13.137220) +G1707267 Lapu-Lapu City POINT(123.949440 10.310280) +G1710914 Imus POINT(120.936670 14.429720) +G1711005 Iloilo POINT(122.564440 10.696940) +G1711082 Iligan City POINT(124.400000 8.250000) +G1712051 Guyong POINT(120.979720 14.838610) +G1715348 Davao POINT(125.612780 7.073060) +G1715430 Dasmariñas POINT(120.936670 14.329440) +G1716771 Cotabato POINT(124.246390 7.223610) +G1717512 Cebu City POINT(123.890710 10.316720) +G1720681 Calamba POINT(121.165280 14.211670) +G1720840 Cainta POINT(121.122200 14.578600) +G1721080 Cagayan de Oro POINT(124.647220 8.482220) +G1721906 Cabanatuan POINT(120.967500 15.486940) +G1725094 Binangonan POINT(121.192900 14.464600) +G1726280 Batangas POINT(121.060000 13.759440) +G1728930 Baguio POINT(120.593060 16.416390) +G1729085 Bago City POINT(122.833330 10.533330) +G1729524 Bacoor POINT(120.942500 14.457780) +G1729564 Bacolod City POINT(122.950000 10.666670) +G1730501 Antipolo POINT(121.175280 14.586390) +G1730737 Angeles City POINT(120.583330 15.150000) +G1164408 Sukkur POINT(68.866670 27.700000) +G1164909 Siālkot POINT(74.543130 32.510100) +G1165108 Shikārpur POINT(68.637890 27.957060) +G1165221 Sheikhupura POINT(73.978330 31.713060) +G1166000 Sargodha POINT(72.671110 32.083610) +G1166548 Montgomery POINT(73.100000 30.666670) +G1166652 Sādiqābād POINT(70.133330 28.300000) +G1166993 Rāwalpindi POINT(73.067900 33.600700) +G1167528 Quetta POINT(67.012500 30.187220) +G1168197 Peshāwar POINT(71.580180 34.008370) +G1168718 Okāra POINT(73.445830 30.808060) +G1169116 Nawābshāh POINT(68.410520 26.252890) +G1169605 Muzaffargarh POINT(71.192130 30.075370) +G1169692 Murīdke POINT(74.261670 31.802500) +G1169825 Multān POINT(71.475280 30.195560) +G1170295 Mīrpur Khās POINT(69.015900 25.525100) +G1170395 Mingāora POINT(72.362200 34.775000) +G1170880 Mardān POINT(72.045830 34.198330) +G1172128 Lārkāna POINT(68.216670 27.550000) +G1172451 Lahore POINT(74.343610 31.549720) +G1173055 Kotli POINT(73.916670 33.516670) +G1173491 Kohāt POINT(71.442220 33.586940) +G1174625 Kasūr POINT(74.446670 31.115560) +G1174872 Karachi POINT(67.082200 24.905600) +G1175088 Kamoke POINT(74.224440 31.974440) +G1175864 Jhelum POINT(73.726370 32.933130) +G1175892 Jhang Sadr POINT(72.316040 31.273960) +G1176515 Jacobābād POINT(68.433160 28.286730) +G1176615 Islāmābād POINT(73.043290 33.721480) +G1176734 Hyderābād POINT(68.369900 25.382300) +G1177384 Hāfizābād POINT(73.685450 32.067860) +G1177654 Gujrāt POINT(74.089590 32.572760) +G1177662 Gujrānwāla POINT(74.188310 32.161670) +G1179400 Faisalābād POINT(73.083330 31.416670) +G1180289 Dera Ghāzi Khān POINT(70.634770 30.056140) +G1181096 Chiniot POINT(72.978890 31.720000) +G1182092 Būrewāla POINT(72.650000 30.166670) +G1182637 Bhimbar POINT(74.079260 32.975680) +G1183880 Bahāwalpur POINT(71.683330 29.400000) +G756135 Warsaw POINT(21.011780 52.229770) +G759734 Rzeszów POINT(21.999010 50.041320) +G760778 Radom POINT(21.147140 51.402530) +G763166 Olsztyn POINT(20.483330 53.783330) +G765876 Lublin POINT(22.566670 51.250000) +G769250 Kielce POINT(20.627520 50.870330) +G776069 Białystok POINT(23.150000 53.133330) +G3080985 Zabrze POINT(18.785760 50.324920) +G3081368 Wrocław POINT(17.033330 51.100000) +G3083271 Toruń POINT(18.598140 53.013750) +G3083829 Szczecin POINT(14.553020 53.428940) +G3085128 Sosnowiec POINT(19.103850 50.286820) +G3088171 Poznań POINT(16.966670 52.416670) +G3093133 Litzmannstadt POINT(19.466670 51.750000) +G3094802 Kraków POINT(19.916670 50.083330) +G3096472 Katowice POINT(19.016670 50.266670) +G3099230 Gliwice POINT(18.666670 50.283330) +G3099424 Gdynia POINT(18.531880 54.518890) +G3099434 Gdańsk POINT(18.646370 54.352050) +G3100946 Częstochowa POINT(19.124090 50.796460) +G3101950 Bytom POINT(18.966670 50.350000) +G3102014 Bydgoszcz POINT(18.007620 53.123500) +G3103402 Bielsko-Biała POINT(19.033330 49.816670) +G4562831 Bayamón POINT(-66.155720 18.398560) +G4563243 Carolina POINT(-65.957390 18.380780) +G4566880 Ponce POINT(-66.614060 18.011080) +G4568127 San Juan POINT(-66.105720 18.466330) +G281124 Khān Yūnis POINT(34.306270 31.340180) +G281129 Jabālyā POINT(34.486340 31.527220) +G281133 Gaza POINT(34.466670 31.500000) +G285066 Hebron POINT(35.100000 31.533330) +G7303419 East Jerusalem POINT(35.233880 31.783360) +G2267057 Lisbon POINT(-9.133330 38.716670) +G2271772 Amadora POINT(-9.230830 38.753820) +G2735943 Porto POINT(-8.616670 41.150000) +G3437056 San Lorenzo POINT(-57.533330 -25.333330) +G3439214 Capiatá POINT(-57.416670 -25.350000) +G3439389 Asunción POINT(-57.635910 -25.300660) +G289888 Ar Rayyān POINT(51.424440 25.291940) +G290030 Doha POINT(51.522450 25.279320) +G665087 Timişoara POINT(21.227220 45.749440) +G667268 Sibiu POINT(24.150000 45.800000) +G670474 Ploieşti POINT(26.016670 44.950000) +G670609 Piteşti POINT(24.866670 44.850000) +G671768 Oradea POINT(21.933330 47.066670) +G675810 Iaşi POINT(27.600000 47.166670) +G677697 Galaţi POINT(28.050000 45.450000) +G680332 Craiova POINT(23.800000 44.316670) +G680963 Constanţa POINT(28.650000 44.183330) +G681290 Cluj-Napoca POINT(23.600000 46.766670) +G683506 Bucureşti POINT(26.106260 44.432250) +G683844 Braşov POINT(25.606130 45.648610) +G683902 Brăila POINT(27.983330 45.266670) +G685948 Bacău POINT(26.900000 46.566670) +G686254 Arad POINT(21.316670 46.183330) +G783920 Zemun POINT(20.401110 44.843060) +G787657 Niš POINT(21.903330 43.324720) +G792680 Belgrade POINT(20.465130 44.804010) +G3194360 Novi Sad POINT(19.836940 45.251670) +G462444 Zlatoust POINT(59.650830 55.171110) +G463829 Zelenograd POINT(37.181390 55.982500) +G466806 Yoshkar-Ola POINT(47.890780 56.638770) +G468902 Yaroslavl' POINT(39.873680 57.629870) +G472045 Voronezh POINT(39.192270 51.669900) +G472231 Volzhskiy POINT(44.771670 48.790560) +G472459 Vologda POINT(39.888600 59.218700) +G472757 Volgograd POINT(44.585830 48.804720) +G472761 Volgodonsk POINT(42.151390 47.513610) +G473247 Vladimir POINT(40.398060 56.142780) +G473249 Vladikavkaz POINT(44.667780 43.036670) +G479123 Ul'yanovsk POINT(48.400000 54.333330) +G479561 Ufa POINT(56.037500 54.775000) +G480060 Tver' POINT(35.893060 56.861940) +G480562 Tula POINT(37.611110 54.204440) +G482283 Tol’yatti POINT(49.412500 53.523330) +G484646 Tambov POINT(41.433890 52.731670) +G484907 Taganrog POINT(38.890800 47.227300) +G484972 Syzran’ POINT(48.474440 53.173060) +G485239 Syktyvkar POINT(50.812220 61.666670) +G487495 Sterlitamak POINT(55.954300 53.629500) +G487846 Stavropol’ POINT(41.973330 45.042780) +G487928 Staryy Oskol POINT(37.841670 51.296670) +G491422 Sochi POINT(39.730280 43.600000) +G491687 Smolensk POINT(32.040100 54.781800) +G496015 Shakhty POINT(40.205830 47.712220) +G496285 Severodvinsk POINT(39.847500 64.572220) +G498677 Saratov POINT(46.033330 51.566670) +G498698 Saransk POINT(45.174900 54.183800) +G498817 Saint Petersburg POINT(30.264170 59.894440) +G499099 Samara POINT(50.150000 53.200000) +G499292 Salavat POINT(55.936500 53.358000) +G500004 Rybinsk POINT(38.842590 58.044600) +G500096 Ryazan’ POINT(39.691600 54.626900) +G501175 Rostov-na-Donu POINT(39.713890 47.236390) +G504341 Pskov POINT(28.349600 57.813600) +G508101 Podol’sk POINT(37.544170 55.423890) +G509820 Petrozavodsk POINT(34.346910 61.784910) +G511196 Perm’ POINT(56.250000 58.000000) +G511565 Penza POINT(45.000000 53.194400) +G514734 Orsk POINT(58.570000 51.225280) +G515003 Orenburg POINT(55.098800 51.772700) +G515012 Orël POINT(36.080280 52.965830) +G518255 Novorossiysk POINT(37.770830 44.723890) +G518970 Novocherkassk POINT(40.093890 47.418060) +G519336 Velikiy Novgorod POINT(31.283330 58.516670) +G520494 Nizhniy Tagil POINT(59.965000 57.919440) +G520555 Nizhniy Novgorod POINT(44.002050 56.328670) +G521118 Nizhnekamsk POINT(51.822100 55.637600) +G523064 Nazran’ POINT(44.765000 43.226110) +G523523 Nal’chik POINT(43.618890 43.498060) +G523750 Naberezhnyye Chelny POINT(52.410100 55.735400) +G523812 Mytishchi POINT(37.730760 55.911630) +G524305 Murmansk POINT(33.081940 68.971670) +G524901 Moscow POINT(37.615560 55.752220) +G528293 Maykop POINT(40.105830 44.607780) +G532096 Makhachkala POINT(47.502220 42.975280) +G532288 Magnitogorsk POINT(59.047220 53.418610) +G532615 Lyubertsy POINT(37.893220 55.677190) +G535121 Lipetsk POINT(39.574500 52.599500) +G538560 Kursk POINT(36.193890 51.730280) +G542420 Krasnodar POINT(38.972500 45.048800) +G543460 Kovrov POINT(41.319170 56.357220) +G543878 Kostroma POINT(40.926110 57.767220) +G548408 Kirov POINT(49.658330 58.596940) +G551487 Kazan’ POINT(49.124800 55.787700) +G553915 Kaluga POINT(36.275420 54.529300) +G554234 Kaliningrad POINT(20.500000 54.710000) +G554840 Izhevsk POINT(53.233330 56.850000) +G555312 Ivanovo POINT(40.985830 56.994170) +G558418 Groznyy POINT(45.700280 43.308330) +G563464 Engel's POINT(46.116670 51.500000) +G563708 Dzerzhinsk POINT(43.463060 56.238890) +G569223 Cherepovets POINT(37.900000 59.133330) +G569696 Cheboksary POINT(47.251940 56.132220) +G571476 Bryansk POINT(34.380560 53.287500) +G577206 Berezniki POINT(56.794720 59.409720) +G578072 Belgorod POINT(36.587000 50.603000) +G579464 Balashikha POINT(37.958060 55.809450) +G579492 Balakovo POINT(47.794110 52.024660) +G580497 Astrakhan’ POINT(48.049170 46.349440) +G580922 Armavir POINT(41.120280 44.989720) +G581049 Arkhangel’sk POINT(40.548610 64.547220) +G1486209 Yekaterinburg POINT(60.612500 56.857500) +G1488754 Tyumen’ POINT(65.527220 57.152220) +G1489425 Tomsk POINT(84.966670 56.500000) +G1490624 Surgut POINT(73.416670 61.250000) +G1493467 Rubtsovsk POINT(81.250000 51.500000) +G1494114 Prokop’yevsk POINT(86.719000 53.905900) +G1496153 Omsk POINT(73.400000 55.000000) +G1496747 Novosibirsk POINT(82.934440 55.041110) +G1496990 Novokuznetsk POINT(87.109900 53.755700) +G1497543 Nizhnevartovsk POINT(76.553100 60.934400) +G1498894 Miass POINT(60.108330 55.045000) +G1501321 Kurgan POINT(65.333330 55.450000) +G1502026 Krasnoyarsk POINT(92.791670 56.009720) +G1503901 Kemerovo POINT(86.083330 55.333330) +G1504826 Kamensk-Ural’skiy POINT(61.925870 56.413310) +G1508291 Chelyabinsk POINT(61.429720 55.154440) +G1510018 Biysk POINT(85.207220 52.536390) +G1510853 Barnaul POINT(83.763610 53.360560) +G1512236 Abakan POINT(91.429170 53.715560) +G2013159 Yakutsk POINT(129.733060 62.033890) +G2013348 Vladivostok POINT(131.873530 43.105620) +G2014006 Ussuriysk POINT(132.009440 43.802500) +G2014407 Ulan-Ude POINT(107.609790 51.826050) +G2021851 Komsomol’sk-na-Amure POINT(137.015240 50.551990) +G2022890 Khabarovsk POINT(135.092780 48.480830) +G2023469 Irkutsk POINT(104.296390 52.297780) +G2025339 Chita POINT(113.550000 52.033330) +G2026609 Blagoveshchensk POINT(127.533330 50.266670) +G2027667 Angarsk POINT(103.886390 52.536670) +G2051523 Bratsk POINT(101.614170 56.132500) +G2056752 Khabarovsk Vtoroy POINT(135.135560 48.443060) +G2119441 Yuzhno-Sakhalinsk POINT(142.733660 46.958120) +G2122104 Petropavlovsk-Kamchatskiy POINT(158.648300 53.045200) +G202061 Kigali POINT(30.058850 -1.949950) +G100425 Yanbu‘ al Baḩr POINT(38.048610 24.085280) +G101628 Tabūk POINT(36.583330 28.383330) +G101760 Sulţānah POINT(39.583330 24.500000) +G103630 Najrān POINT(44.184170 17.505560) +G104515 Mecca POINT(39.826110 21.426670) +G105072 Khamīs Mushayt POINT(42.729170 18.306390) +G105343 Jiddah POINT(39.219170 21.516940) +G106281 Hayil POINT(41.696940 27.516390) +G107304 Buraydah POINT(43.971670 26.331670) +G107968 Tayif POINT(40.415830 21.270280) +G108410 Riyadh POINT(46.721850 24.687730) +G109101 Al Mubarraz POINT(49.580830 25.410000) +G109223 Medina POINT(39.614170 24.468610) +G109323 Al Khubar POINT(50.208330 26.279440) +G109435 Al Jubayl POINT(49.661390 27.004720) +G109571 Al Hufūf POINT(49.586670 25.378330) +G110336 Ad Dammām POINT(50.114170 26.425830) +G110690 Abhā POINT(42.505280 18.216390) +G364103 Wad Medani POINT(33.498900 14.405600) +G365137 Omdurman POINT(32.437220 15.636110) +G370737 Malakal POINT(31.656110 9.536940) +G371760 Kūstī POINT(32.666670 13.166670) +G372753 Kassala POINT(36.400100 15.457000) +G373303 Juba POINT(31.582470 4.851650) +G377039 Port Sudan POINT(37.216390 19.615830) +G379003 El Obeid POINT(30.216670 13.183330) +G379252 Khartoum POINT(32.533610 15.546650) +G379303 El Geneina POINT(22.450000 13.450000) +G379555 El Fasher POINT(25.350000 13.633330) +G380174 Ed Damazin POINT(34.359200 11.789100) +G2673730 Stockholm POINT(18.064900 59.332580) +G2692969 Malmö POINT(13.000730 55.605870) +G2711537 Göteborg POINT(11.966790 57.707160) +G1880252 Singapore POINT(103.850070 1.289670) +G3196359 Ljubljana POINT(14.505130 46.051080) +G724443 Košice POINT(21.250000 48.716670) +G3060972 Bratislava POINT(17.106740 48.148160) +G2409306 Freetown POINT(-13.229940 8.484000) +G2410048 Bo POINT(-11.738330 7.964720) +G2243940 Ziguinchor POINT(-16.271940 12.583330) +G2244799 Thiès Nones POINT(-16.966670 14.783330) +G2246452 Saint-Louis POINT(-16.489620 16.017930) +G2246678 Pikine POINT(-17.400000 14.750000) +G2251339 Grand Dakar POINT(-17.455280 14.708890) +G2253354 Dakar POINT(-17.444060 14.693700) +G53654 Mogadishu POINT(45.343750 2.037110) +G55671 Chisimayu POINT(42.545360 -0.358170) +G56399 Jamaame POINT(42.750560 0.072220) +G57289 Hargeysa POINT(44.065000 9.560000) +G64435 Berbera POINT(45.016390 10.435560) +G3383330 Paramaribo POINT(-55.166820 5.866380) +G3583096 Soyapango POINT(-89.151390 13.734720) +G3583334 Santa Ana POINT(-89.559720 13.994170) +G3583361 San Salvador POINT(-89.187180 13.689350) +G3583446 San Miquel POINT(-88.183330 13.483330) +G3584399 Mejicanos POINT(-89.213060 13.740280) +G169577 Hums POINT(36.723390 34.726820) +G170017 Ḩamāh POINT(36.757830 35.131790) +G170063 Aleppo POINT(37.158610 36.202780) +G170654 Damascus POINT(36.291280 33.510200) +G170794 Dayr az Zawr POINT(40.150000 35.333330) +G172955 Ar Raqqah POINT(39.016670 35.950000) +G173576 Latakia POINT(35.783330 35.516670) +G2427123 N'Djamena POINT(15.034790 12.110580) +G2365267 Lomé POINT(1.212270 6.137480) +G1152473 Lampang POINT(99.492770 18.292320) +G1153671 Chiang Mai POINT(98.984680 18.790380) +G1605239 Udon Thani POINT(102.785890 17.415670) +G1606250 Si Racha POINT(100.931110 13.173720) +G1606590 Samut Prakan POINT(100.596750 13.599340) +G1607508 Phra Pradaeng POINT(100.533620 13.658540) +G1608048 Pak Kret POINT(100.498830 13.913010) +G1608133 Mueang Nonthaburi POINT(100.514770 13.860750) +G1608529 Nakhon Ratchasima POINT(102.101960 14.970660) +G1609350 Bangkok POINT(100.516670 13.750000) +G1610780 Hat Yai POINT(100.476680 7.008360) +G1611110 Chon Buri POINT(100.983450 13.362200) +G1221874 Dushanbe POINT(68.779050 38.535750) +G162183 Ashgabat POINT(58.383330 37.950000) +G601734 Daşoguz POINT(59.966670 41.833330) +G1219649 Türkmenabat POINT(63.575000 39.101390) +G2464470 Tunis POINT(10.165790 36.818970) +G2464915 Sousse POINT(10.636990 35.825390) +G2467454 Sfax POINT(10.760280 34.740560) +G298033 Viranşehir POINT(39.763060 37.235280) +G298117 Van POINT(43.383110 38.492390) +G298299 Uşak POINT(29.405800 38.673510) +G298333 Şanlıurfa POINT(38.793920 37.167080) +G299817 Tarsus POINT(34.878400 36.918760) +G300614 Siverek POINT(39.316670 37.755020) +G300619 Sivas POINT(37.016110 39.748330) +G303195 Osmaniye POINT(36.247780 37.074170) +G304531 Mercin POINT(34.617920 36.795260) +G304827 Manisa POINT(27.426460 38.612020) +G304922 Malatya POINT(38.316670 38.350180) +G305268 Kütahya POINT(29.983330 39.424170) +G306571 Konya POINT(32.482500 37.865560) +G307084 Kızıltepe POINT(40.585000 37.193330) +G307654 Kırıkkale POINT(33.506390 39.845280) +G308464 Kayseri POINT(35.485280 38.732220) +G310859 Kahramanmaraş POINT(36.926400 37.584700) +G311046 İzmir POINT(27.138380 38.412730) +G311073 Isparta POINT(30.552220 37.764440) +G311111 İskenderun POINT(36.173470 36.587180) +G314830 Gaziantep POINT(37.382500 37.059440) +G315202 Eskişehir POINT(30.520560 39.776670) +G315368 Erzurum POINT(41.276940 39.908610) +G315808 Elazığ POINT(39.223210 38.674310) +G316541 Diyarbakır POINT(40.218890 37.915830) +G317109 Denizli POINT(29.087500 37.774170) +G321836 Batman POINT(41.132210 37.887380) +G322165 Balıkesir POINT(27.886110 39.649170) +G322830 Aydın POINT(27.839630 37.845010) +G323777 Antalya POINT(30.689720 36.912500) +G323779 Antioch POINT(36.157220 36.206550) +G323786 Ankara POINT(32.854270 39.919870) +G324496 Aksaray POINT(34.025370 38.372550) +G325330 Adıyaman POINT(38.276290 37.764410) +G325363 Adana POINT(35.328890 37.001670) +G442301 Batikent POINT(32.730830 39.968330) +G737071 Zeytinburnu POINT(28.904170 40.994410) +G738377 Umraniye POINT(29.124760 41.016430) +G738648 Trabzon POINT(39.726940 41.005000) +G739549 Şişli POINT(28.987170 41.060460) +G740264 Samsun POINT(36.330000 41.286670) +G741763 Maltepe POINT(29.155070 40.935670) +G745028 İzmit POINT(29.916940 40.766940) +G745044 İstanbul POINT(28.949660 41.013840) +G747014 Gebze POINT(29.430680 40.802760) +G747323 Esenyurt POINT(28.675280 41.033330) +G747340 Esenler POINT(28.876190 41.043500) +G748879 Çorum POINT(34.953330 40.548890) +G748893 Çorlu POINT(27.800000 41.159170) +G750269 Bursa POINT(29.061110 40.191670) +G751324 Bağcılar POINT(28.856710 41.039030) +G752850 Adapazarı POINT(30.403330 40.780560) +G6947637 Ataşehir POINT(29.116700 40.983300) +G6947639 Başakşehir POINT(28.802030 41.093070) +G6947641 Büyükçekmece POINT(28.585020 41.020720) +G6955677 Çankaya POINT(32.862680 39.917900) +G7627067 Bahçelievler POINT(28.859800 41.002310) +G7628416 Sultangazi POINT(28.868470 41.106520) +G7628419 Sultanbeyli POINT(29.270670 40.960720) +G7628420 Sancaktepe POINT(29.231870 41.002440) +G7701384 Karabağlar POINT(27.135200 38.373960) +G1668341 Taipei POINT(121.531850 25.047760) +G1668399 Taichung POINT(120.683900 24.146900) +G1670029 Banqiao POINT(121.467190 25.014270) +G1673820 Kaohsiung POINT(120.313330 22.616260) +G1674504 Hualian POINT(121.604440 23.976940) +G1675151 Xinzhushi POINT(120.968610 24.803610) +G1678228 Keelung POINT(121.741900 25.128250) +G6695168 Tainan City POINT(120.168110 23.024760) +G6696918 Taoyuan City POINT(121.296960 24.993680) +G148730 Zanzibar POINT(39.197930 -6.163940) +G149606 Tanga POINT(39.100000 -5.066670) +G152224 Mwanza POINT(32.900000 -2.516670) +G153209 Moshi POINT(37.333330 -3.350000) +G153220 Morogoro POINT(37.666670 -6.816670) +G154380 Mbeya POINT(33.450000 -8.900000) +G157738 Kigoma POINT(29.626670 -4.876940) +G160196 Dodoma POINT(35.737920 -6.174860) +G160263 Dar es Salaam POINT(39.269510 -6.823490) +G161325 Arusha POINT(36.683330 -3.366670) +G686967 Zhytomyr POINT(28.666670 50.250000) +G687700 Zaporizhzhya POINT(35.183330 47.816670) +G689558 Vinnytsya POINT(28.483330 49.233330) +G691650 Ternopil’ POINT(25.608750 49.551600) +G692194 Sumy POINT(34.781940 50.919720) +G693805 Simferopol’ POINT(34.105580 44.958440) +G694423 Sevastopol’ POINT(33.522400 44.588830) +G695594 Rivne POINT(26.250000 50.616670) +G696643 Poltava POINT(34.566670 49.583330) +G698740 Odesa POINT(30.732620 46.477470) +G700569 Mykolayiv POINT(32.000000 46.966670) +G701404 Melitopol’ POINT(35.373060 46.842220) +G701822 Mariupol' POINT(37.500000 47.066670) +G702320 Makiyivka POINT(37.966670 48.033330) +G702550 L'viv POINT(24.023240 49.838260) +G702569 Luts’k POINT(25.333330 50.750000) +G702658 Luhans’k POINT(39.333330 48.566670) +G703448 Kiev POINT(30.523800 50.454660) +G703845 Kryvyy Rih POINT(33.350000 47.916670) +G704147 Kremenchuk POINT(33.419720 49.097250) +G704508 Kramators’k POINT(37.533330 48.716670) +G705812 Kirovohrad POINT(32.263060 48.504170) +G706369 Khmel’nyts’kyy POINT(27.000000 49.416670) +G706448 Kherson POINT(32.600000 46.633330) +G706483 Kharkiv POINT(36.250000 50.000000) +G706524 Kerch POINT(36.467980 45.357990) +G707471 Ivano-Frankivs’k POINT(24.709720 48.921500) +G707753 Horlivka POINT(38.050000 48.300000) +G709717 Donets’k POINT(37.800000 48.000000) +G709930 Dnipropetrovsk POINT(34.983330 48.450000) +G709932 Dniprodzerzhyns’k POINT(34.616670 48.500000) +G710719 Chernivtsi POINT(25.933330 48.300000) +G710735 Chernihiv POINT(31.300000 51.500000) +G710791 Cherkasy POINT(32.066670 49.433330) +G712165 Bila Tserkva POINT(30.116670 49.783330) +G232422 Kampala POINT(32.582190 0.316280) +G4049979 Birmingham POINT(-86.802490 33.520660) +G4068590 Huntsville POINT(-86.586100 34.730370) +G4076598 Mobile POINT(-88.043050 30.694360) +G4076784 Montgomery POINT(-86.299970 32.366810) +G4119403 Little Rock POINT(-92.289590 34.746480) +G4140963 Washington, D. C. POINT(-77.036370 38.895110) +G4155966 Fort Lauderdale POINT(-80.143380 26.122310) +G4158476 Hialeah POINT(-80.278110 25.857600) +G4160021 Jacksonville POINT(-81.655650 30.332180) +G4164138 Miami POINT(-80.193660 25.774270) +G4167147 Orlando POINT(-81.379240 28.538340) +G4171563 Saint Petersburg POINT(-82.679270 27.770860) +G4174715 Tallahassee POINT(-84.280730 30.438260) +G4174757 Tampa POINT(-82.458430 27.947520) +G4180439 Atlanta POINT(-84.387980 33.749000) +G4188985 Columbus POINT(-84.987710 32.460980) +G4259418 Indianapolis POINT(-86.158040 39.768380) +G4281730 Wichita POINT(-97.337540 37.692240) +G4297983 Lexington POINT(-84.477720 37.988690) +G4297999 Lexington-Fayette POINT(-84.458550 38.049800) +G4299276 Louisville POINT(-85.759410 38.254240) +G4315588 Baton Rouge POINT(-91.154550 30.450750) +G4335045 New Orleans POINT(-90.075070 29.954650) +G4341513 Shreveport POINT(-93.750180 32.525150) +G4347778 Baltimore POINT(-76.612190 39.290380) +G4393217 Kansas City POINT(-94.578570 39.099730) +G4407066 Saint Louis POINT(-90.197890 38.627270) +G4409896 Springfield POINT(-93.298240 37.215330) +G4431410 Jackson POINT(-90.184810 32.298760) +G4460243 Charlotte POINT(-80.843130 35.227090) +G4464368 Durham POINT(-78.898620 35.994030) +G4469146 Greensboro POINT(-79.791980 36.072640) +G4487042 Raleigh POINT(-78.638610 35.772100) +G4498303 West Raleigh POINT(-78.663890 35.786820) +G4499612 Winston-Salem POINT(-80.244220 36.099860) +G4508722 Cincinnati POINT(-84.456890 39.162000) +G4509177 Columbus POINT(-82.998790 39.961180) +G4509884 Dayton POINT(-84.191610 39.758950) +G4544349 Oklahoma City POINT(-97.516430 35.467560) +G4553433 Tulsa POINT(-95.992780 36.153980) +G4560349 Philadelphia POINT(-75.163790 39.952340) +G4612862 Chattanooga POINT(-85.309680 35.045630) +G4619947 East Chattanooga POINT(-85.249120 35.065350) +G4634946 Knoxville POINT(-83.920740 35.960640) +G4641239 Memphis POINT(-90.048980 35.149530) +G4644585 Nashville POINT(-86.784440 36.165890) +G4645421 New South Memphis POINT(-90.056760 35.086760) +G4671240 Arlington POINT(-97.108070 32.735690) +G4671654 Austin POINT(-97.743060 30.267150) +G4676740 Brownsville POINT(-97.497480 25.901750) +G4683416 Corpus Christi POINT(-97.396380 27.800580) +G4684888 Dallas POINT(-96.806670 32.783060) +G4691930 Fort Worth POINT(-97.320850 32.725410) +G4693003 Garland POINT(-96.638880 32.912620) +G4699066 Houston POINT(-95.363270 29.763280) +G4700168 Irving POINT(-96.948890 32.814020) +G4705349 Laredo POINT(-99.507540 27.506410) +G4719457 Plano POINT(-96.698890 33.019840) +G4726206 San Antonio POINT(-98.493630 29.424120) +G4744709 Arlington POINT(-77.104280 38.881010) +G4752186 Chesapeake POINT(-76.274940 36.819040) +G4776024 Newport News POINT(-76.428000 36.978760) +G4776222 Norfolk POINT(-76.285220 36.846810) +G4781708 Richmond POINT(-77.460260 37.553760) +G4791259 Virginia Beach POINT(-75.977980 36.852930) +G4853828 Des Moines POINT(-93.609110 41.600540) +G4883817 Aurora POINT(-88.320070 41.760580) +G4887398 Chicago POINT(-87.650050 41.850030) +G4907959 Rockford POINT(-89.094000 42.271130) +G4920423 Fort Wayne POINT(-85.128860 41.130600) +G4930956 Boston POINT(-71.059770 42.358430) +G4951305 South Boston POINT(-71.049490 42.333430) +G4951788 Springfield POINT(-72.589810 42.101480) +G4956184 Worcester POINT(-71.802290 42.262590) +G4990729 Detroit POINT(-83.045750 42.331430) +G4994358 Grand Rapids POINT(-85.668090 42.963360) +G5037649 Minneapolis POINT(-93.263840 44.979970) +G5045360 Saint Paul POINT(-93.093270 44.944410) +G5072006 Lincoln POINT(-96.666960 40.800000) +G5074472 Omaha POINT(-95.937790 41.258610) +G5099836 Jersey City POINT(-74.077640 40.728160) +G5101798 Newark POINT(-74.172370 40.735660) +G5102466 Paterson POINT(-74.171810 40.916770) +G5110302 Brooklyn POINT(-73.949580 40.650100) +G5110629 Buffalo POINT(-78.878370 42.886450) +G5115985 East New York POINT(-73.882360 40.666770) +G5125771 Manhattan POINT(-73.966250 40.783430) +G5128581 New York City POINT(-74.005970 40.714270) +G5134086 Rochester POINT(-77.615560 43.154780) +G5145215 Yonkers POINT(-73.898750 40.931210) +G5145476 Akron POINT(-81.519010 41.081440) +G5150529 Cleveland POINT(-81.695410 41.499500) +G5174035 Toledo POINT(-83.555210 41.663940) +G5206379 Pittsburgh POINT(-79.995890 40.440620) +G5224151 Providence POINT(-71.412830 41.823990) +G5261457 Madison POINT(-89.401230 43.073050) +G5263045 Milwaukee POINT(-87.906470 43.038900) +G5289282 Chandler POINT(-111.841250 33.306160) +G5295903 Gilbert POINT(-111.789030 33.352830) +G5295985 Glendale POINT(-112.185990 33.538650) +G5304391 Mesa POINT(-111.822640 33.422270) +G5308655 Phoenix POINT(-112.074040 33.448380) +G5313457 Scottsdale POINT(-111.899030 33.509210) +G5317058 Tempe POINT(-111.909310 33.414770) +G5317071 Tempe Junction POINT(-111.943480 33.414210) +G5318313 Tucson POINT(-110.926480 32.221740) +G5323810 Anaheim POINT(-117.914500 33.835290) +G5325738 Bakersfield POINT(-119.018710 35.373290) +G5336899 Chula Vista POINT(-117.084200 32.640050) +G5339631 Corona POINT(-117.566440 33.875290) +G5349755 Fontana POINT(-117.435050 34.092230) +G5350734 Fremont POINT(-121.988570 37.548270) +G5350937 Fresno POINT(-119.772370 36.747730) +G5351515 Garden Grove POINT(-117.941450 33.773910) +G5352423 Glendale POINT(-118.255080 34.142510) +G5357527 Hollywood POINT(-118.326740 34.098340) +G5358705 Huntington Beach POINT(-117.999230 33.660300) +G5359777 Irvine POINT(-117.823110 33.669460) +G5367929 Long Beach POINT(-118.189230 33.766960) +G5368361 Los Angeles POINT(-118.243680 34.052230) +G5373900 Modesto POINT(-120.996880 37.639100) +G5374732 Moreno Valley POINT(-117.230590 33.937520) +G5377613 North Glendale POINT(-118.264520 34.160560) +G5378538 Oakland POINT(-122.270800 37.804370) +G5378771 Oceanside POINT(-117.379480 33.195870) +G5379439 Ontario POINT(-117.650890 34.063340) +G5380184 Oxnard POINT(-119.177050 34.197500) +G5380202 Oxnard Shores POINT(-119.241500 34.190840) +G5384170 Pomona POINT(-117.752280 34.055290) +G5385955 Rancho Cucamonga POINT(-117.593110 34.106400) +G5387877 Riverside POINT(-117.396160 33.953350) +G5389489 Sacramento POINT(-121.494400 38.581570) +G5391710 San Bernardino POINT(-117.289770 34.108340) +G5391811 San Diego POINT(-117.157260 32.715330) +G5391959 San Francisco POINT(-122.419420 37.774930) +G5392171 San Jose POINT(-121.894960 37.339390) +G5392900 Santa Ana POINT(-117.867830 33.745570) +G5393049 Santa Clarita POINT(-118.542590 34.391660) +G5393287 Santa Rosa POINT(-122.714430 38.440470) +G5399020 Stockton POINT(-121.290780 37.957700) +G5412347 Aurora POINT(-104.831920 39.729430) +G5417598 Colorado Springs POINT(-104.821360 38.833880) +G5419384 Denver POINT(-104.984700 39.739150) +G5454711 Albuquerque POINT(-106.651140 35.084490) +G5505411 Henderson POINT(-114.981940 36.039700) +G5506956 Las Vegas POINT(-115.137220 36.174970) +G5509952 Paradise POINT(-115.146660 36.097190) +G5511077 Reno POINT(-119.813800 39.529630) +G5512909 Spring Valley POINT(-115.245000 36.108030) +G5513343 Sunrise Manor POINT(-115.073060 36.211080) +G5516233 Amarillo POINT(-101.831300 35.222000) +G5520993 El Paso POINT(-106.486930 31.758720) +G5525577 Lubbock POINT(-101.855170 33.577860) +G5746545 Portland POINT(-122.676210 45.523450) +G5780993 Salt Lake City POINT(-111.891050 40.760780) +G5809844 Seattle POINT(-122.332070 47.606210) +G5811696 Spokane POINT(-117.426050 47.658780) +G5812944 Tacoma POINT(-122.444290 47.252880) +G5814616 Vancouver POINT(-122.661490 45.638730) +G5856195 Honolulu POINT(-157.858330 21.306940) +G5879400 Anchorage POINT(-149.900280 61.218060) +G3441575 Montevideo POINT(-56.167350 -34.833460) +G601294 Nukus POINT(59.610280 42.453060) +G1216265 Samarqand POINT(66.959720 39.654170) +G1216311 Qarshi POINT(65.800000 38.866670) +G1217662 Buxoro POINT(64.428610 39.774720) +G1512473 Urganch POINT(60.633330 41.550000) +G1512569 Tashkent POINT(69.216270 41.264650) +G1512979 Qo‘qon POINT(70.942500 40.528610) +G1513157 Namangan POINT(71.672570 40.998300) +G1513886 Jizzax POINT(67.842220 40.115830) +G1514019 Farg`ona POINT(71.784320 40.384210) +G1514210 Chirchiq POINT(69.582220 41.468890) +G1514588 Andijon POINT(72.343890 40.783060) +G3487903 Alto Barinas POINT(-70.226100 8.593100) +G3625549 Valencia POINT(-68.007650 10.162020) +G3625829 Turmero POINT(-67.472880 10.223880) +G3627047 Santa Teresa POINT(-66.663610 10.231390) +G3628473 San Cristóbal POINT(-72.225000 7.766940) +G3629672 Puerto La Cruz POINT(-64.616670 10.216670) +G3629706 Puerto Cabello POINT(-68.012500 10.473060) +G3630297 Petare POINT(-66.816670 10.483330) +G3631412 Ocumare del Tuy POINT(-66.771670 10.121670) +G3631741 Mucumpiz POINT(-71.133330 8.416670) +G3632308 Mérida POINT(-71.145000 8.598330) +G3632998 Maracay POINT(-67.595830 10.246940) +G3633009 Maracaibo POINT(-71.640560 10.631670) +G3639898 Guatire POINT(-66.533330 10.466670) +G3640049 Guarenas POINT(-66.616670 10.466670) +G3640465 Guacara POINT(-67.877000 10.226090) +G3641351 El Tigre POINT(-64.245440 8.887520) +G3644768 Cumaná POINT(-64.166670 10.466670) +G3644918 Cúa POINT(-66.885280 10.162220) +G3645213 Coro POINT(-69.673440 11.404500) +G3645528 Ciudad Guayana POINT(-62.641020 8.351220) +G3645532 Ciudad Bolívar POINT(-63.540860 8.129230) +G3646738 Caracas POINT(-66.916670 10.500000) +G3647651 Cabimas POINT(-71.446110 10.401940) +G3648439 Baruta POINT(-66.883330 10.433330) +G3648522 Barquisimeto POINT(-69.322780 10.073890) +G3648559 Barcelona POINT(-64.700000 10.133330) +G3778045 Maturín POINT(-63.176670 9.750000) +G1562414 Vũng Tàu POINT(107.066670 10.350000) +G1562798 Vinh POINT(105.666670 18.666670) +G1566083 Thành phố Hồ Chí Minh POINT(106.666670 10.750000) +G1568510 Rạch Giá POINT(105.083330 10.016670) +G1568574 Quy Nhơn POINT(109.233330 13.766670) +G1571058 Phan Thiết POINT(108.100000 10.933330) +G1572151 Nha Trang POINT(109.183330 12.250000) +G1573517 Nam Ðịnh POINT(106.166670 20.416670) +G1575627 Long Xuyên POINT(105.416670 10.383330) +G1580240 Huế POINT(107.600000 16.466670) +G1581130 Hà Nội POINT(105.841170 21.024500) +G1581298 Haiphong POINT(106.682220 20.856110) +G1583992 Turan POINT(108.220830 16.067780) +G1584071 Ðà Lạt POINT(108.441930 11.946460) +G1586203 Cần Thơ POINT(105.783330 10.033330) +G1586296 Cần Duộc POINT(106.666670 10.616670) +G1587923 Biên Hòa POINT(106.816670 10.950000) +G786712 Prizren POINT(20.739720 42.213890) +G786714 Pristina POINT(21.166880 42.672720) +G70225 Ta‘izz POINT(44.020910 13.579520) +G71137 Sanaa POINT(44.206670 15.354720) +G74477 Ibb POINT(44.183330 13.966670) +G78754 Al Mukallā POINT(49.124240 14.542480) +G79415 Al Ḩudaydah POINT(42.954520 14.797810) +G415189 Aden POINT(45.036670 12.779440) +G936374 Roodepoort POINT(27.872500 -26.162500) +G939270 Witbank POINT(29.233330 -25.866670) +G940316 Westonaria POINT(27.650000 -26.316670) +G940909 Welkom POINT(26.733330 -27.983330) +G942470 Vryheid POINT(30.800000 -27.766670) +G944385 Vereeniging POINT(27.933330 -26.666670) +G944986 Vanderbijlpark POINT(27.816670 -26.700000) +G946877 Uitenhage POINT(25.402220 -33.765280) +G949880 Tembisa POINT(28.226940 -25.998890) +G952865 Springs POINT(28.400000 -26.250000) +G953781 Soweto POINT(27.866670 -26.266670) +G962367 Richards Bay POINT(32.100000 -28.800000) +G964137 Pretoria POINT(28.187830 -25.744860) +G964420 Port Elizabeth POINT(25.583330 -33.966670) +G965301 Pietermaritzburg POINT(30.383330 -29.616670) +G971421 Newcastle POINT(29.933330 -27.750000) +G976361 Middelburg POINT(29.466670 -25.783330) +G986822 Krugersdorp POINT(27.766670 -26.100000) +G989921 Klerksdorp POINT(26.666670 -26.866670) +G993800 Johannesburg POINT(28.043630 -26.202270) +G1002145 George POINT(22.450000 -33.966670) +G1006984 East London POINT(27.911620 -33.015290) +G1007311 Durban POINT(31.016670 -29.850000) +G1014073 Carletonville POINT(27.400000 -26.366670) +G1016181 Brakpan POINT(28.366670 -26.233330) +G1016670 Botshabelo POINT(26.733330 -29.233330) +G1017780 Boksburg POINT(28.250000 -26.216670) +G1018725 Bloemfontein POINT(26.200000 -29.133330) +G1020098 Benoni POINT(28.316670 -26.183330) +G1105776 Midrand POINT(28.137780 -25.963610) +G1105777 Centurion POINT(28.170560 -25.874440) +G3363613 Noorder-Paarl POINT(18.966670 -33.716670) +G3369157 Cape Town POINT(18.416670 -33.916670) +G901344 Ndola POINT(28.636590 -12.958670) +G909137 Lusaka POINT(28.286360 -15.408090) +G911148 Kitwe POINT(28.200000 -12.816670) +G916095 Kabwe POINT(28.451740 -14.443220) +G884979 Mutare POINT(32.670860 -18.970700) +G890299 Harare POINT(31.053890 -17.829350) +G894701 Bulawayo POINT(28.583330 -20.150000) +G1106542 Chitungwiza POINT(31.075550 -18.012740) \ No newline at end of file Index: lucene/spatial/src/test-files/simple-Queries-BBox.txt IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test-files/simple-Queries-BBox.txt (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test-files/simple-Queries-BBox.txt (revision ) @@ -1,13 +1,8 @@ -C5 @ IsWithin(-6 -6 6 6) -C5 @ BBoxWithin(-6 -6 6 6) -C10 @ Contains(-6 -6 6 6) -C10 @ IsEqualTo(-10 -10 10 10) -C5 C10 @ Intersects(-2 -2 2 2) -C5 C10 @ Overlaps(-2 -2 2 2) -C5 C10 @ BBoxIntersects(-2 -2 2 2) -NW15 @ IsDisjointTo(-10 -10 10 10) - - - - - +C5 @ IsWithin(ENVELOPE(-6, 6, 6, -6)) +C5 @ BBoxWithin(ENVELOPE(-6, 6, 6, -6)) +C10 @ Contains(ENVELOPE(-6, 6, 6, -6)) +C10 @ IsEqualTo(ENVELOPE(-10, 10, 10, -10)) +C5 C10 @ Intersects(ENVELOPE(-2, 2, 2, -2)) +C5 C10 @ Overlaps(ENVELOPE(-2, 2, 2, -2)) +C5 C10 @ BBoxIntersects(ENVELOPE(-2, 2, 2, -2)) +NW15 @ IsDisjointTo(ENVELOPE(-10, 10, 10, -10)) \ No newline at end of file Index: lucene/spatial/src/test/org/apache/lucene/spatial/TestTestFramework.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/TestTestFramework.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/TestTestFramework.java (revision ) @@ -44,7 +44,7 @@ InputStream in = getClass().getClassLoader().getResourceAsStream(name); SpatialContext ctx = SpatialContext.GEO; Iterator iter = SpatialTestQuery.getTestQueries( - new SpatialArgsParser(), ctx, name, in ); + new SpatialArgsParser(), ctx, name, in );//closes the InputStream List tests = new ArrayList(); while( iter.hasNext() ) { tests.add( iter.next() ); @@ -52,15 +52,15 @@ Assert.assertEquals( 3, tests.size() ); SpatialTestQuery sf = tests.get(0); - // assert + // assert Assert.assertEquals( 1, sf.ids.size() ); Assert.assertTrue( sf.ids.get(0).equals( "G5391959" ) ); Assert.assertTrue( sf.args.getShape() instanceof Rectangle); - Assert.assertEquals( SpatialOperation.Intersects, sf.args.getOperation() ); + Assert.assertEquals(SpatialOperation.Intersects, sf.args.getOperation()); } @Test - public void spatialExample() throws IOException { + public void spatialExample() throws Exception { //kind of a hack so that SpatialExample is tested despite // it not starting or ending with "Test". SpatialExample.main(null); Index: lucene/licenses/spatial4j-0.3.jar.sha1 =================================================================== --- lucene/licenses/spatial4j-0.3.jar.sha1 (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/licenses/spatial4j-0.3.jar.sha1 (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) @@ -1,1 +0,0 @@ -2fd58d1de64553db427ae4fbc1a6691adea460e2 Index: solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java (revision ) @@ -23,8 +23,7 @@ import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.context.SpatialContextFactory; import com.spatial4j.core.distance.DistanceUtils; -import com.spatial4j.core.exception.InvalidShapeException; -import com.spatial4j.core.io.ParseUtils; +import com.spatial4j.core.io.LegacyShapeReadWriterFormat; import com.spatial4j.core.shape.Point; import com.spatial4j.core.shape.Rectangle; import com.spatial4j.core.shape.Shape; @@ -47,10 +46,12 @@ import org.apache.solr.search.QParser; import org.apache.solr.search.SpatialOptions; import org.apache.solr.util.MapListener; +import org.apache.solr.util.SpatialUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.text.ParseException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -89,14 +90,34 @@ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Must specify units=\"degrees\" on field types with class "+getClass().getSimpleName()); + //replace legacy rect format with ENVELOPE + String wbStr = args.get("worldBounds"); + if (wbStr != null && !wbStr.toUpperCase().startsWith("ENVELOPE")) { + log.warn("Using old worldBounds format? Should use ENVELOPE(xMin, xMax, yMax, yMin)."); + String[] parts = wbStr.split(" ");//"xMin yMin xMax yMax" + if (parts.length == 4) { + args.put("worldBounds", + "ENVELOPE(" + parts[0] + ", " + parts[2] + ", " + parts[3] + ", " + parts[1] + ")"); + } //else likely eventual exception + } + //Solr expects us to remove the parameters we've used. MapListener argsWrap = new MapListener(args); ctx = SpatialContextFactory.makeSpatialContext(argsWrap, schema.getResourceLoader().getClassLoader()); args.keySet().removeAll(argsWrap.getSeenKeys()); - argsParser = new SpatialArgsParser();//might make pluggable some day? + argsParser = newSpatialArgsParser(); } + protected SpatialArgsParser newSpatialArgsParser() { + return new SpatialArgsParser() { + @Override + protected Shape parseShape(String str, SpatialContext ctx) throws ParseException { + return AbstractSpatialFieldType.this.parseShape(str); + } + }; + } + //-------------------------------------------------------------- // Indexing //-------------------------------------------------------------- @@ -136,16 +157,39 @@ return result; } - protected Shape parseShape(String shapeStr) { + protected Shape parseShape(String str) { + if (str.length() == 0) + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "empty string shape"); + //In Solr trunk we only support "lat, lon" (or x y) as an additional format; in v4.0 we do the + // weird Circle & Rect formats too (Spatial4j LegacyShapeReadWriterFormat). try { - return ctx.readShape(shapeStr); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); + Shape shape = LegacyShapeReadWriterFormat.readShapeOrNull(str, ctx); + if (shape != null) + return shape; + return ctx.readShapeFromWkt(str); + } catch (Exception e) { + String message = e.getMessage(); + if (!message.contains(str)) + message = "Couldn't parse shape '" + str + "' because: " + message; + throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, message, e); } } + /** + * Returns a String version of a shape to be used for the stored value. This method in Solr is only called if for some + * reason a Shape object is passed to the field type (perhaps via a custom UpdateRequestProcessor), + * *and* the field is marked as stored. The default implementation throws an exception. + *

+ * Spatial4j 0.4 is probably the last release to support SpatialContext.toString(shape) but it's deprecated with no + * planned replacement. Shapes do have a toString() method but they are generally internal/diagnostic and not + * standard WKT. + * The solution is subclassing and calling ctx.toString(shape) or directly using LegacyShapeReadWriterFormat or + * passing in some sort of custom wrapped shape that holds a reference to a String or can generate it. + */ protected String shapeToString(Shape shape) { - return ctx.toString(shape); +// return ctx.toString(shape); + throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, + "Getting a String from a Shape is no longer possible. See javadocs for commentary."); } /** Called from {@link #getStrategy(String)} upon first use by fieldName. } */ @@ -161,27 +205,16 @@ //-------------------------------------------------------------- /** - * Implemented for compatibility with Solr 3 spatial geofilt & bbox query parsers: + * Implemented for compatibility with geofilt & bbox query parsers: * {@link SpatialQueryable}. */ @Override public Query createSpatialQuery(QParser parser, SpatialOptions options) { - //--WARNING: the code from here to the next marker is identical to LatLonType's impl. - double[] point = null; - try { - point = ParseUtils.parseLatitudeLongitude(options.pointStr); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + Point pt = SpatialUtils.parsePointSolrException(options.pointStr, ctx); - // lat & lon in degrees - double latCenter = point[0]; - double lonCenter = point[1]; - double distDeg = DistanceUtils.dist2Degrees(options.distance, options.radius); - //--END-WARNING - Shape shape = ctx.makeCircle(lonCenter, latCenter, distDeg); + Shape shape = ctx.makeCircle(pt, distDeg); if (options.bbox) shape = shape.getBoundingBox(); @@ -193,12 +226,9 @@ public Query getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive) { if (!minInclusive || !maxInclusive) throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Both sides of spatial range query must be inclusive: " + field.getName()); - Shape shape1 = parseShape(part1); - Shape shape2 = parseShape(part2); - if (!(shape1 instanceof Point) || !(shape2 instanceof Point)) - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Both sides of spatial range query must be points: " + field.getName()); - Point p1 = (Point) shape1; - Point p2 = (Point) shape2; + Point p1 = SpatialUtils.parsePointSolrException(part1, ctx); + Point p2 = SpatialUtils.parsePointSolrException(part2, ctx); + Rectangle bbox = ctx.makeRectangle(p1, p2); SpatialArgs spatialArgs = new SpatialArgs(SpatialOperation.Intersects, bbox); return getQueryFromSpatialArgs(parser, field, spatialArgs);//won't score by default @@ -220,6 +250,8 @@ protected SpatialArgs parseSpatialArgs(String externalVal) { try { return argsParser.parse(externalVal, ctx); + } catch (SolrException e) { + throw e; } catch (Exception e) { throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); } Index: lucene/spatial/src/test/org/apache/lucene/spatial/StrategyTestCase.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/StrategyTestCase.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/test/org/apache/lucene/spatial/StrategyTestCase.java (revision ) @@ -19,8 +19,6 @@ */ import com.spatial4j.core.context.SpatialContext; -import com.spatial4j.core.io.sample.SampleData; -import com.spatial4j.core.io.sample.SampleDataReader; import com.spatial4j.core.shape.Shape; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; @@ -40,6 +38,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.text.ParseException; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -88,21 +87,21 @@ return getDocuments(getSampleData(testDataFile)); } - protected List getDocuments(Iterator sampleData) { + protected List getDocuments(Iterator sampleData) { List documents = new ArrayList(); while (sampleData.hasNext()) { - SampleData data = sampleData.next(); + SpatialTestData data = sampleData.next(); Document document = new Document(); document.add(new StringField("id", data.id, Field.Store.YES)); document.add(new StringField("name", data.name, Field.Store.YES)); - Shape shape = ctx.readShape(data.shape); + Shape shape = data.shape; shape = convertShapeFromGetDocuments(shape); if (shape != null) { for (Field f : strategy.createIndexableFields(shape)) { document.add(f); } - if (storeShape) - document.add(new StoredField(strategy.getFieldName(), ctx.toString(shape))); + if (storeShape)//just for diagnostics + document.add(new StoredField(strategy.getFieldName(), shape.toString())); } documents.add(document); @@ -115,18 +114,18 @@ return shape; } - protected Iterator getSampleData(String testDataFile) throws IOException { + protected Iterator getSampleData(String testDataFile) throws IOException { String path = "data/" + testDataFile; InputStream stream = getClass().getClassLoader().getResourceAsStream(path); if (stream == null) throw new FileNotFoundException("classpath resource not found: "+path); - return new SampleDataReader(stream); + return SpatialTestData.getTestData(stream, ctx);//closes the InputStream } protected Iterator getTestQueries(String testQueryFile, SpatialContext ctx) throws IOException { InputStream in = getClass().getClassLoader().getResourceAsStream(testQueryFile); return SpatialTestQuery.getTestQueries( - argsParser, ctx, testQueryFile, in ); + argsParser, ctx, testQueryFile, in );//closes the InputStream } public void runTestQueries( @@ -142,8 +141,8 @@ String msg = q.toString(); //"Query: " + q.args.toString(ctx); SearchResults got = executeQuery(strategy.makeQuery(q.args), Math.max(100, q.ids.size()+1)); if (storeShape && got.numFound > 0) { - //check stored value is there & parses - assertNotNull(ctx.readShape(got.results.get(0).document.get(strategy.getFieldName()))); + //check stored value is there + assertNotNull(got.results.get(0).document.get(strategy.getFieldName())); } if (concern.orderIsImportant) { Iterator ids = q.ids.iterator(); @@ -184,8 +183,8 @@ } } - protected void adoc(String id, String shapeStr) throws IOException { - Shape shape = shapeStr==null ? null : ctx.readShape(shapeStr); + protected void adoc(String id, String shapeStr) throws IOException, ParseException { + Shape shape = shapeStr==null ? null : ctx.readShapeFromWkt(shapeStr); addDocument(newDoc(id, shape)); } protected void adoc(String id, Shape shape) throws IOException { @@ -200,7 +199,7 @@ doc.add(f); } if (storeShape) - doc.add(new StoredField(strategy.getFieldName(), ctx.toString(shape))); + doc.add(new StoredField(strategy.getFieldName(), shape.toString()));//not to be parsed; just for debug } return doc; } Index: lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestData.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestData.java (revision ) +++ lucene/spatial/src/test/org/apache/lucene/spatial/SpatialTestData.java (revision ) @@ -0,0 +1,71 @@ +package org.apache.lucene.spatial; + +/* + * 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. + */ + +import com.spatial4j.core.context.SpatialContext; +import com.spatial4j.core.shape.Shape; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +// This class is modelled after SpatialTestQuery. +// Before Lucene 4.7, this was a bit different in Spatial4j as SampleData & SampleDataReader. + +public class SpatialTestData { + public String id; + public String name; + public Shape shape; + + /** Reads the stream, consuming a format that is a tab-separated values of 3 columns: + * an "id", a "name" and the "shape". Empty lines and lines starting with a '#' are skipped. + * The stream is closed. + */ + public static Iterator getTestData(InputStream in, SpatialContext ctx) throws IOException { + List results = new ArrayList(); + BufferedReader bufInput = new BufferedReader(new InputStreamReader(in,"UTF-8")); + try { + String line; + while ((line = bufInput.readLine()) != null) { + if (line.length() == 0 || line.charAt(0) == '#') + continue; + + SpatialTestData data = new SpatialTestData(); + String[] vals = line.split("\t"); + if (vals.length != 3) + throw new RuntimeException("bad format; expecting 3 tab-separated values for line: "+line); + data.id = vals[0]; + data.name = vals[1]; + try { + data.shape = ctx.readShapeFromWkt(vals[2]); + } catch (ParseException e) { + throw new RuntimeException(e); + } + results.add(data); + } + } finally { + bufInput.close(); + } + return results.iterator(); + } +} Index: lucene/spatial/src/java/org/apache/lucene/spatial/query/SpatialArgsParser.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- lucene/spatial/src/java/org/apache/lucene/spatial/query/SpatialArgsParser.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ lucene/spatial/src/java/org/apache/lucene/spatial/query/SpatialArgsParser.java (revision ) @@ -19,9 +19,9 @@ import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.exception.InvalidShapeException; -import com.spatial4j.core.io.ShapeReadWriter; import com.spatial4j.core.shape.Shape; +import java.text.ParseException; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -30,11 +30,11 @@ /** * Parses a string that usually looks like "OPERATION(SHAPE)" into a {@link SpatialArgs} * object. The set of operations supported are defined in {@link SpatialOperation}, such - * as "Intersects" being a common one. The shape portion is defined by {@link - * ShapeReadWriter#readShape(String)}. There are some optional name-value pair parameters - * that follow the closing parenthesis. Example: + * as "Intersects" being a common one. The shape portion is defined by WKT {@link com.spatial4j.core.io.WktShapeParser}, + * but it can be overridden/customized via {@link #parseShape(String, com.spatial4j.core.context.SpatialContext)}. + * There are some optional name-value pair parameters that follow the closing parenthesis. Example: *

- *   Intersects(-10,20,-8,22) distErrPct=0.025
+ *   Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025
  * 
*

* In the future it would be good to support something at least semi-standardized like a @@ -63,45 +63,58 @@ } /** - * Parses a string such as "Intersects(-10,20,-8,22) distErrPct=0.025". + * Parses a string such as "Intersects(ENVELOPE(-10,-8,22,20)) distErrPct=0.025". * * @param v The string to parse. Mandatory. * @param ctx The spatial context. Mandatory. * @return Not null. - * @throws IllegalArgumentException If there is a problem parsing the string. - * @throws InvalidShapeException Thrown from {@link ShapeReadWriter#readShape(String)} + * @throws IllegalArgumentException if the parameters don't make sense or an add-on parameter is unknown + * @throws ParseException If there is a problem parsing the string + * @throws InvalidShapeException When the coordinates are invalid for the shape */ - public SpatialArgs parse(String v, SpatialContext ctx) throws IllegalArgumentException, InvalidShapeException { + public SpatialArgs parse(String v, SpatialContext ctx) throws ParseException, InvalidShapeException { int idx = v.indexOf('('); int edx = v.lastIndexOf(')'); if (idx < 0 || idx > edx) { - throw new IllegalArgumentException("missing parens: " + v, null); + throw new ParseException("missing parens: " + v, -1); } SpatialOperation op = SpatialOperation.get(v.substring(0, idx).trim()); String body = v.substring(idx + 1, edx).trim(); if (body.length() < 1) { - throw new IllegalArgumentException("missing body : " + v, null); + throw new ParseException("missing body : " + v, idx + 1); } - Shape shape = ctx.readShape(body); + Shape shape = parseShape(body, ctx); - SpatialArgs args = new SpatialArgs(op, shape); + SpatialArgs args = newSpatialArgs(op, shape); if (v.length() > (edx + 1)) { body = v.substring(edx + 1).trim(); if (body.length() > 0) { Map aa = parseMap(body); - args.setDistErrPct(readDouble(aa.remove(DIST_ERR_PCT))); - args.setDistErr(readDouble(aa.remove(DIST_ERR))); + readNameValuePairs(args, aa); if (!aa.isEmpty()) { - throw new IllegalArgumentException("unused parameters: " + aa, null); + throw new IllegalArgumentException("unused parameters: " + aa); } } } args.validate(); return args; + } + + protected SpatialArgs newSpatialArgs(SpatialOperation op, Shape shape) { + return new SpatialArgs(op, shape); + } + + protected void readNameValuePairs(SpatialArgs args, Map nameValPairs) { + args.setDistErrPct(readDouble(nameValPairs.remove(DIST_ERR_PCT))); + args.setDistErr(readDouble(nameValPairs.remove(DIST_ERR))); + } + + protected Shape parseShape(String str, SpatialContext ctx) throws ParseException { + return ctx.readShapeFromWkt(str); } protected static Double readDouble(String v) { Index: solr/core/src/java/org/apache/solr/schema/LatLonType.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/schema/LatLonType.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/schema/LatLonType.java (revision ) @@ -22,6 +22,7 @@ import java.util.Map; import java.util.Set; +import com.spatial4j.core.shape.Point; import org.apache.lucene.document.FieldType; import org.apache.lucene.index.AtomicReaderContext; import org.apache.lucene.index.IndexReader; @@ -49,9 +50,8 @@ import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.distance.DistanceUtils; -import com.spatial4j.core.exception.InvalidShapeException; -import com.spatial4j.core.io.ParseUtils; import com.spatial4j.core.shape.Rectangle; +import org.apache.solr.util.SpatialUtils; /** @@ -71,24 +71,16 @@ @Override public List createFields(SchemaField field, Object value, float boost) { String externalVal = value.toString(); - //we could have tileDiff + 3 fields (two for the lat/lon, one for storage) + //we could have 3 fields (two for the lat & lon, one for storage) List f = new ArrayList(3); if (field.indexed()) { - int i = 0; - double[] latLon; - try { - latLon = ParseUtils.parseLatitudeLongitude(null, externalVal); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + Point point = SpatialUtils.parsePointSolrException(externalVal, SpatialContext.GEO); //latitude - SchemaField lat = subField(field, i, schema); - f.add(lat.createField(String.valueOf(latLon[LAT]), lat.indexed() && !lat.omitNorms() ? boost : 1f)); - i++; + SchemaField subLatSF = subField(field, LAT, schema); + f.add(subLatSF.createField(String.valueOf(point.getY()), subLatSF.indexed() && !subLatSF.omitNorms() ? boost : 1f)); //longitude - SchemaField lon = subField(field, i, schema); - f.add(lon.createField(String.valueOf(latLon[LON]), lon.indexed() && !lon.omitNorms() ? boost : 1f)); - + SchemaField subLonSF = subField(field, LON, schema); + f.add(subLonSF.createField(String.valueOf(point.getX()), subLonSF.indexed() && !subLonSF.omitNorms() ? boost : 1f)); } if (field.stored()) { @@ -102,59 +94,43 @@ @Override public Query getRangeQuery(QParser parser, SchemaField field, String part1, String part2, boolean minInclusive, boolean maxInclusive) { - int dimension = 2; + Point p1 = SpatialUtils.parsePointSolrException(part1, SpatialContext.GEO); + Point p2 = SpatialUtils.parsePointSolrException(part2, SpatialContext.GEO); - String[] p1; - String[] p2; - try { - p1 = ParseUtils.parsePoint(null, part1, dimension); - p2 = ParseUtils.parsePoint(null, part2, dimension); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + SchemaField latSF = subField(field, LAT, parser.getReq().getSchema()); + SchemaField lonSF = subField(field, LON, parser.getReq().getSchema()); BooleanQuery result = new BooleanQuery(true); - for (int i = 0; i < dimension; i++) { - SchemaField subSF = subField(field, i, parser.getReq().getSchema()); - // points must currently be ordered... should we support specifying any two opposite corner points? + // points must currently be ordered... should we support specifying any two opposite corner points? - result.add(subSF.getType().getRangeQuery(parser, subSF, p1[i], p2[i], minInclusive, maxInclusive), BooleanClause.Occur.MUST); - } + 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; - } @Override public Query getFieldQuery(QParser parser, SchemaField field, String externalVal) { - int dimension = 2; + Point p1 = SpatialUtils.parsePointSolrException(externalVal, SpatialContext.GEO); - + - String[] p1 = new String[0]; - try { - p1 = ParseUtils.parsePoint(null, externalVal, dimension); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); + SchemaField latSF = subField(field, LAT, parser.getReq().getSchema()); + SchemaField lonSF = subField(field, LON, parser.getReq().getSchema()); + BooleanQuery result = new BooleanQuery(true); + 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; - } + } - BooleanQuery bq = new BooleanQuery(true); - for (int i = 0; i < dimension; i++) { - SchemaField sf = subField(field, i, parser.getReq().getSchema()); - Query tq = sf.getType().getFieldQuery(parser, sf, p1[i]); - bq.add(tq, BooleanClause.Occur.MUST); - } - return bq; - } @Override public Query createSpatialQuery(QParser parser, SpatialOptions options) { - double[] point = null; - try { - point = ParseUtils.parseLatitudeLongitude(options.pointStr); - } catch (InvalidShapeException e) { - throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e); - } + Point point = SpatialUtils.parsePointSolrException(options.pointStr, SpatialContext.GEO); // lat & lon in degrees - double latCenter = point[LAT]; - double lonCenter = point[LON]; + 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); @@ -176,8 +152,8 @@ IndexSchema schema = parser.getReq().getSchema(); // Now that we've figured out the ranges, build them! - SchemaField latField = subField(options.field, LAT, schema); - SchemaField lonField = subField(options.field, LON, schema); + SchemaField latSF = subField(options.field, LAT, schema); + SchemaField lonSF = subField(options.field, LON, schema); SpatialDistanceQuery spatial = new SpatialDistanceQuery(); @@ -185,14 +161,14 @@ if (options.bbox) { BooleanQuery result = new BooleanQuery(); - Query latRange = latField.getType().getRangeQuery(parser, latField, + 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 = lonField.getType().getRangeQuery(parser, lonField, + Query lonRange = lonSF.getType().getRangeQuery(parser, lonSF, String.valueOf(lonMin), String.valueOf(lonMax), true, true); @@ -201,7 +177,7 @@ BooleanQuery bothLons = new BooleanQuery(); bothLons.add(lonRange, BooleanClause.Occur.SHOULD); - lonRange = lonField.getType().getRangeQuery(parser, lonField, + lonRange = lonSF.getType().getRangeQuery(parser, lonSF, String.valueOf(lon2Min), String.valueOf(lon2Max), true, true); @@ -218,8 +194,8 @@ spatial.origField = options.field.getName(); - spatial.latSource = latField.getType().getValueSource(latField, parser); - spatial.lonSource = lonField.getType().getValueSource(lonField, parser); + spatial.latSource = latSF.getType().getValueSource(latSF, parser); + spatial.lonSource = lonSF.getType().getValueSource(lonSF, parser); spatial.latMin = latMin; spatial.latMax = latMax; spatial.lonMin = lonMin; Index: solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/test/org/apache/solr/search/TestSolr4Spatial.java (revision ) @@ -21,12 +21,22 @@ import com.carrotsearch.randomizedtesting.annotations.ParametersFactory; import com.spatial4j.core.context.SpatialContext; import com.spatial4j.core.distance.DistanceUtils; +import com.spatial4j.core.shape.Point; +import com.spatial4j.core.shape.Rectangle; +import com.spatial4j.core.shape.impl.RectangleImpl; +import org.apache.lucene.spatial.SpatialStrategy; import org.apache.solr.SolrTestCaseJ4; import org.apache.solr.common.SolrException; +import org.apache.solr.core.SolrCore; +import org.apache.solr.schema.AbstractSpatialFieldType; +import org.apache.solr.schema.FieldType; +import org.apache.solr.schema.IndexSchema; +import org.apache.solr.util.SpatialUtils; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; +import java.text.ParseException; import java.util.Arrays; /** @@ -151,20 +161,20 @@ assertQ(req( "fl", "id," + fieldName, "q", "*:*", "rows", "1000", - "fq", "{!field f="+fieldName+"}Intersects(Circle(89.9,-130 d=9))"), + "fq", "{!geofilt sfield="+fieldName+" pt="+IN+" d=9}"), "//result/doc/*[@name='" + fieldName + "']//text()='" + OUT + "'"); } @Test - public void checkQueryEmptyIndex() { + public void checkQueryEmptyIndex() throws ParseException { checkHits(fieldName, "0,0", 100, 0);//doesn't error } - private void checkHits(String fieldName, String pt, double distKM, int count, int ... docIds) { + private void checkHits(String fieldName, String pt, double distKM, int count, int ... docIds) throws ParseException { checkHits(fieldName, true, pt, distKM, count, docIds); } - private void checkHits(String fieldName, boolean exact, String ptStr, double distKM, int count, int ... docIds) { + private void checkHits(String fieldName, boolean exact, String ptStr, double distKM, int count, int ... docIds) throws ParseException { String [] tests = new String[docIds != null && docIds.length > 0 ? docIds.length + 1 : 1]; //test for presence of required ids first int i = 0; @@ -177,20 +187,23 @@ // that there may be a more specific detailed id to investigate. tests[i++] = "*[count(//doc)=" + count + "]"; - //Test using the Solr 4 syntax + //Test using the Lucene spatial syntax { //never actually need the score but lets test String score = new String[]{null, "none","distance","recipDistance"}[random().nextInt(4)]; double distDEG = DistanceUtils.dist2Degrees(distKM, DistanceUtils.EARTH_MEAN_RADIUS_KM); - String circleStr = "Circle(" + ptStr.replaceAll(" ", "") + " d=" + distDEG + ")"; + Point point = SpatialUtils.parsePoint(ptStr, SpatialContext.GEO); + String circleStr = "BUFFER(POINT(" + point.getX()+" "+point.getY()+")," + distDEG + ")"; String shapeStr; if (exact) { shapeStr = circleStr; } else {//bbox //the GEO is an assumption SpatialContext ctx = SpatialContext.GEO; - shapeStr = ctx.toString( ctx.readShape(circleStr).getBoundingBox() ); + Rectangle bbox = ctx.readShapeFromWkt(circleStr).getBoundingBox(); + shapeStr = "ENVELOPE(" + bbox.getMinX() + ", " + bbox.getMaxX() + + ", " + bbox.getMaxY() + ", " + bbox.getMinY() + ")"; } //FYI default distErrPct=0.025 works with the tests in this file @@ -200,7 +213,7 @@ + "}Intersects(" + shapeStr + ")"), tests); } - //Test using the Solr 3 syntax + //Test using geofilt { assertQ(req( "fl", "id", "q", "*:*", "rows", "1000", @@ -219,8 +232,8 @@ String score = random().nextBoolean() ? "none" : "distance";//never actually need the score but lets test assertQ(req( - "fl", "id", "q","*:*", "rows", "1000", - "fq", "{! score="+score+" df="+fieldName+"}[32,-80 TO 33,-79]"),//lower-left to upper-right + "fl", "id", "q","*:*", "rows", "1000", // testing quotes in range too + "fq", "{! score="+score+" df="+fieldName+"}[32,-80 TO \"33 , -79\"]"),//lower-left to upper-right "//result/doc/*[@name='id'][.='" + docId + "']", "*[count(//doc)=" + count + "]"); @@ -234,8 +247,9 @@ assertU(commit()); //test absence of score=distance means it doesn't score + assertJQ(req( - "q", fieldName +":\"Intersects(Circle(3,4 d=9))\"", + "q", radiusQuery(3, 4, 9, null, null), "fl","id,score") , 1e-9 , "/response/docs/[0]/score==1.0" @@ -244,7 +258,7 @@ //score by distance assertJQ(req( - "q", "{! score=distance}"+fieldName +":\"Intersects(Circle(3,4 d=9))\"", + "q", radiusQuery(3, 4, 9, "distance", null), "fl","id,score", "sort","score asc")//want ascending due to increasing distance , 1e-3 @@ -255,7 +269,7 @@ ); //score by recipDistance assertJQ(req( - "q", "{! score=recipDistance}"+fieldName +":\"Intersects(Circle(3,4 d=9))\"", + "q", radiusQuery(3, 4, 9, "recipDistance", null), "fl","id,score", "sort","score desc")//want descending , 1e-3 @@ -268,7 +282,7 @@ //score by distance and don't filter assertJQ(req( //circle radius is small and shouldn't match either, but we disable filtering - "q", "{! score=distance filter=false}"+fieldName +":\"Intersects(Circle(3,4 d=0.000001))\"", + "q", radiusQuery(3, 4, 0.000001, "distance", "false"), "fl","id,score", "sort","score asc")//want ascending due to increasing distance , 1e-3 @@ -280,7 +294,7 @@ //query again with the query point closer to #101, and check the new ordering assertJQ(req( - "q", "{! score=distance}"+fieldName +":\"Intersects(Circle(4,0 d=9))\"", + "q", radiusQuery(4, 0, 9, "distance", null), "fl","id,score", "sort","score asc")//want ascending due to increasing distance , 1e-4 @@ -293,7 +307,7 @@ "q","-id:999",//exclude that doc "fl","id,score", "sort","query($sortQuery) asc", //want ascending due to increasing distance - "sortQuery", "{! score=distance}"+fieldName +":\"Intersects(Circle(3,4 d=9))\"" ) + "sortQuery", radiusQuery(3, 4, 9, "distance", null)) , 1e-4 , "/response/docs/[0]/id=='100'" , "/response/docs/[1]/id=='101'" ); @@ -303,12 +317,28 @@ "q","-id:999",//exclude that doc "fl","id,score", "sort","query($sortQuery) asc", //want ascending due to increasing distance - "sortQuery", "{! score=distance}"+fieldName +":\"Intersects(Circle(4,0 d=9))\"" ) + "sortQuery", radiusQuery(4, 0, 9, "distance", null)) , 1e-4 , "/response/docs/[0]/id=='101'" , "/response/docs/[1]/id=='100'" ); } + private String radiusQuery(double lat, double lon, double dDEG, String score, String filter) { + //Choose between the Solr/Geofilt syntax, and the Lucene spatial module syntax + if (random().nextBoolean()) { + return "{!geofilt " + + "sfield=" + fieldName + " " + + (score != null ? "score="+score : "") + " " + + (filter != null ? "filter="+filter : "") + " " + + "pt=" + lat + "," + lon + " d=" + (dDEG * DistanceUtils.DEG_TO_KM) + "}"; + } else { + return "{! " + + (score != null ? "score="+score : "") + " " + + (filter != null ? "filter="+filter : "") + " " + + "}" + fieldName + ":\"Intersects(BUFFER(POINT(" + lon + " " + lat + ")," + dDEG + "))\""; + } + } + @Test public void testSortMultiVal() throws Exception { RandomizedTest.assumeFalse("Multivalue not supported for this field", fieldName.equals("pointvector")); @@ -318,13 +348,40 @@ assertU(commit()); assertJQ(req( - "q", "{! score=distance}"+fieldName +":\"Intersects(Circle(3,4 d=9))\"", + "q", radiusQuery(3, 4, 9, "distance", null), "fl","id,score", "sort","score asc")//want ascending due to increasing distance , 1e-4 , "/response/docs/[0]/id=='101'" , "/response/docs/[0]/score==0.99862987"//dist to 3,5 ); + } + + @Test + public void solr4OldShapeSyntax() throws Exception { + assumeFalse("Mostly just valid for prefix-tree", fieldName.equals("pointvector")); + + //we also test that the old syntax is parsed in worldBounds in the schema + { + IndexSchema schema = h.getCore().getLatestSchema(); + AbstractSpatialFieldType type = (AbstractSpatialFieldType) schema.getFieldTypeByName("stqpt_u_oldworldbounds"); + SpatialContext ctx = type.getStrategy("foo").getSpatialContext(); + assertEquals(new RectangleImpl(0, 1000, 0, 1000, ctx), ctx.getWorldBounds()); + } + + //syntax supported in Solr 4 but not beyond + // See Spatial4j LegacyShapeReadWriterFormat + String rect = "-74.093 41.042 -69.347 44.558";//minX minY maxX maxY + String circ = "Circle(4.56,1.23 d=0.0710)"; + + //show we can index this (without an error) + assertU(adoc("id", "rect", fieldName, rect)); + assertU(adoc("id", "circ", fieldName, circ)); + assertU(commit()); + + //only testing no error + assertJQ(req("q", "{!field f=" + fieldName + "}Intersects(" + rect + ")")); + assertJQ(req("q", "{!field f=" + fieldName + "}Intersects(" + circ + ")")); } } Index: solr/core/src/java/org/apache/solr/search/function/distance/VectorDistanceFunction.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== --- solr/core/src/java/org/apache/solr/search/function/distance/VectorDistanceFunction.java (revision 4a34493358cdbdacd069e4cf0a74d05ad0d6f5fc) +++ solr/core/src/java/org/apache/solr/search/function/distance/VectorDistanceFunction.java (revision ) @@ -22,7 +22,6 @@ import org.apache.lucene.queries.function.docvalues.DoubleDocValues; import org.apache.lucene.queries.function.valuesource.MultiValueSource; import org.apache.lucene.search.IndexSearcher; -import com.spatial4j.core.distance.DistanceUtils; import org.apache.solr.common.SolrException; import java.io.IOException; @@ -75,7 +74,79 @@ double[] vals2 = new double[source1.dimension()]; dv1.doubleVal(doc, vals1); dv2.doubleVal(doc, vals2); - return DistanceUtils.vectorDistance(vals1, vals2, power, oneOverPower); + return vectorDistance(vals1, vals2, power, oneOverPower); + } + + /** + * Calculate the p-norm (i.e. length) between two vectors. + *

+ * See Lp space + * + * @param vec1 The first vector + * @param vec2 The second vector + * @param power The power (2 for cartesian distance, 1 for manhattan, etc.) + * @return The length. + * + * @see #vectorDistance(double[], double[], double, double) + * + */ + public static double vectorDistance(double[] vec1, double[] vec2, double power) { + //only calc oneOverPower if it's needed + double oneOverPower = (power == 0 || power == 1.0 || power == 2.0) ? Double.NaN : 1.0 / power; + return vectorDistance(vec1, vec2, power, oneOverPower); + } + + /** + * Calculate the p-norm (i.e. length) between two vectors. + * + * @param vec1 The first vector + * @param vec2 The second vector + * @param power The power (2 for cartesian distance, 1 for manhattan, etc.) + * @param oneOverPower If you've pre-calculated oneOverPower and cached it, use this method to save + * one division operation over {@link #vectorDistance(double[], double[], double)}. + * @return The length. + */ + public static double vectorDistance(double[] vec1, double[] vec2, double power, double oneOverPower) { + double result = 0; + + if (power == 0) { + for (int i = 0; i < vec1.length; i++) { + result += vec1[i] - vec2[i] == 0 ? 0 : 1; + } + } else if (power == 1.0) { // Manhattan + for (int i = 0; i < vec1.length; i++) { + result += Math.abs(vec1[i] - vec2[i]); + } + } else if (power == 2.0) { // Cartesian + result = Math.sqrt(distSquaredCartesian(vec1, vec2)); + } else if (power == Integer.MAX_VALUE || Double.isInfinite(power)) {//infinite norm? + for (int i = 0; i < vec1.length; i++) { + result = Math.max(result, Math.max(vec1[i], vec2[i])); + } + } else { + for (int i = 0; i < vec1.length; i++) { + result += Math.pow(vec1[i] - vec2[i], power); + } + result = Math.pow(result, oneOverPower); + } + return result; + } + + /** + * The square of the cartesian Distance. Not really a distance, but useful if all that matters is + * comparing the result to another one. + * + * @param vec1 The first point + * @param vec2 The second point + * @return The squared cartesian distance + */ + public static double distSquaredCartesian(double[] vec1, double[] vec2) { + double result = 0; + for (int i = 0; i < vec1.length; i++) { + double v = vec1[i] - vec2[i]; + result += v * v; + } + return result; } @Override