@bicharts/chart-host 0.6.76 → 0.6.77

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,54 +1,4 @@
1
1
  /*! @bicharts/chart-host — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; Natural Earth and US Census/TIGER (public domain). Full text: NOTICE in this package. */
2
- import {
3
- NA_ISO3,
4
- NA_LAT_MAX,
5
- clipFeatureToLat
6
- } from "./chunk-A2GMXZP7.mjs";
7
- import {
8
- ACTIVE_TICK_CLASS,
9
- ANIM_LOOP_DELAY_DEFAULT,
10
- ANIM_LOOP_DELAY_MIN,
11
- ANIM_MAX_IDEAL_FRAMES_DEFAULT,
12
- ANIM_MAX_IDEAL_FRAMES_MAX,
13
- ANIM_MAX_IDEAL_FRAMES_MIN,
14
- ANIM_PLAY_SPEED_DEFAULT,
15
- ANIM_PLAY_SPEED_MAX,
16
- ANIM_PLAY_SPEED_MIN,
17
- APPROXIMATE_POSITIONS_DEFAULT,
18
- AXIS_FILTER_CLASS,
19
- COLOR_SCALE_SELF_CLAMP_PCT_DEFAULT,
20
- COLOR_SCALE_SELF_CLAMP_PCT_MAX,
21
- COLOR_SCALE_SELF_CLAMP_PCT_MIN,
22
- CONTAINER_SLOT_ANIM_STOP,
23
- CONTAINER_SLOT_CLICKED_MARKS,
24
- CONTAINER_SLOT_INITIAL_XF_MARK,
25
- CONTAINER_SLOT_UI_STATE,
26
- CONTAINER_SLOT_XF_CLEAR,
27
- CONTROL_CLASS,
28
- DIM_OPACITY_DEFAULT,
29
- DIM_OPACITY_VAR,
30
- FLIP_DIRECTION_DEFAULT,
31
- FLIP_MODE_DEFAULT,
32
- HOST_CONTAINER_CLASS,
33
- HOST_CONTRACT_VERSION,
34
- LEGEND_MARK_CLASS,
35
- LIFT_SELECTED_CLASS,
36
- MARK_CLASS,
37
- MARK_KEY_ATTR,
38
- MARK_SELECTED_CLASS,
39
- MAX_MAP_POINTS_DEFAULT,
40
- NO_ROW_MARKS_ATTR,
41
- ROW_IDX_ATTR,
42
- SEASONAL_MARKERS_DEFAULT,
43
- SELECTION_ACTIVE_CLASS,
44
- SELECTION_RULE_ATTR,
45
- SELECTION_RULE_CLICKED_MARKS,
46
- SNAPSHOT_SVG_ATTR,
47
- VALUE_AXIS_BASELINE_DEFAULT,
48
- XFILTER_REFRESH_EVENT,
49
- chartOwnsTimeline,
50
- periodTickSuppressesFeedback
51
- } from "./chunk-7JWL6LYE.mjs";
52
2
  import {
53
3
  __commonJS,
54
4
  __toESM
@@ -98,7 +48,7 @@ var require_papaparse_min = __commonJS({
98
48
  q2(this._config.error) ? this._config.error(e2) : a3 && this._config.error && n.postMessage({ workerId: v.WORKER_ID, error: e2, finished: false });
99
49
  };
100
50
  }
101
- function f4(e) {
51
+ function f2(e) {
102
52
  var r4;
103
53
  (e = e || {}).chunkSize || (e.chunkSize = v.RemoteChunkSize), u4.call(this, e), this._nextChunk = s2 ? function() {
104
54
  this._readChunk(), this._chunkLoaded();
@@ -182,7 +132,7 @@ var require_papaparse_min = __commonJS({
182
132
  }, this);
183
133
  }
184
134
  function i(m5) {
185
- var n2, s4, a4, t, o5 = Math.pow(2, 53), h5 = -o5, u5 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d4 = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/, i2 = this, r4 = 0, f5 = 0, l4 = false, e = false, c4 = [], p5 = { data: [], errors: [], meta: {} };
135
+ var n2, s4, a4, t, o5 = Math.pow(2, 53), h5 = -o5, u5 = /^\s*-?(\d+\.?|\.\d+|\d+\.\d+)([eE][-+]?\d+)?\s*$/, d4 = /^((\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z)))$/, i2 = this, r4 = 0, f4 = 0, l4 = false, e = false, c4 = [], p5 = { data: [], errors: [], meta: {} };
186
136
  function y4(e2) {
187
137
  return "greedy" === m5.skipEmptyLines ? "" === e2.join("").trim() : 1 === e2.length && 0 === e2[0].length;
188
138
  }
@@ -209,10 +159,10 @@ var require_papaparse_min = __commonJS({
209
159
  })(t5) ? parseFloat(t5) : d4.test(t5) ? new Date(t5) : "" === t5 ? null : t5) : t5)(n4 = m5.header ? r6 >= c4.length ? "__parsed_extra" : c4[r6] : n4, s5 = m5.transform ? m5.transform(s5, n4) : s5);
210
160
  "__parsed_extra" === n4 ? (i5[n4] = i5[n4] || [], i5[n4].push(s5)) : i5[n4] = s5;
211
161
  }
212
- return m5.header && (r6 > c4.length ? k3("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r6, f5 + t4) : r6 < c4.length && k3("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r6, f5 + t4)), i5;
162
+ return m5.header && (r6 > c4.length ? k3("FieldMismatch", "TooManyFields", "Too many fields: expected " + c4.length + " fields but parsed " + r6, f4 + t4) : r6 < c4.length && k3("FieldMismatch", "TooFewFields", "Too few fields: expected " + c4.length + " fields but parsed " + r6, f4 + t4)), i5;
213
163
  }
214
164
  var r5;
215
- p5 && (m5.header || m5.dynamicTyping || m5.transform) && (r5 = 1, !p5.data.length || Array.isArray(p5.data[0]) ? (p5.data = p5.data.map(i4), r5 = p5.data.length) : p5.data = i4(p5.data, 0), m5.header && p5.meta && (p5.meta.fields = c4), f5 += r5);
165
+ p5 && (m5.header || m5.dynamicTyping || m5.transform) && (r5 = 1, !p5.data.length || Array.isArray(p5.data[0]) ? (p5.data = p5.data.map(i4), r5 = p5.data.length) : p5.data = i4(p5.data, 0), m5.header && p5.meta && (p5.meta.fields = c4), f4 += r5);
216
166
  }
217
167
  function _5() {
218
168
  return m5.header && 0 === c4.length;
@@ -228,8 +178,8 @@ var require_papaparse_min = __commonJS({
228
178
  var s5, a5, o6, h6;
229
179
  n4 = n4 || [",", " ", "|", ";", v.RECORD_SEP, v.UNIT_SEP];
230
180
  for (var u6 = 0; u6 < n4.length; u6++) {
231
- for (var d5, f6 = n4[u6], l5 = 0, c5 = 0, p6 = 0, g7 = (o6 = void 0, new E4({ comments: r6, delimiter: f6, newline: t4, preview: 10 }).parse(e4)), _6 = 0; _6 < g7.data.length; _6++) i5 && y4(g7.data[_6]) ? p6++ : (d5 = g7.data[_6].length, c5 += d5, void 0 === o6 ? o6 = d5 : 0 < d5 && (l5 += Math.abs(d5 - o6), o6 = d5));
232
- 0 < g7.data.length && (c5 /= g7.data.length - p6), (void 0 === a5 || l5 <= a5) && (void 0 === h6 || h6 < c5) && 1.99 < c5 && (a5 = l5, s5 = f6, h6 = c5);
181
+ for (var d5, f5 = n4[u6], l5 = 0, c5 = 0, p6 = 0, g7 = (o6 = void 0, new E4({ comments: r6, delimiter: f5, newline: t4, preview: 10 }).parse(e4)), _6 = 0; _6 < g7.data.length; _6++) i5 && y4(g7.data[_6]) ? p6++ : (d5 = g7.data[_6].length, c5 += d5, void 0 === o6 ? o6 = d5 : 0 < d5 && (l5 += Math.abs(d5 - o6), o6 = d5));
182
+ 0 < g7.data.length && (c5 /= g7.data.length - p6), (void 0 === a5 || l5 <= a5) && (void 0 === h6 || h6 < c5) && 1.99 < c5 && (a5 = l5, s5 = f5, h6 = c5);
233
183
  }
234
184
  return { successful: !!(m5.delimiter = s5), bestDelimiter: s5 };
235
185
  })(e2, m5.newline, m5.skipEmptyLines, m5.comments, m5.delimitersToGuess)).successful ? m5.delimiter = r5.bestDelimiter : (a4 = true, m5.delimiter = v.DefaultDelimiter), p5.meta.delimiter = m5.delimiter), b4(m5));
@@ -262,7 +212,7 @@ var require_papaparse_min = __commonJS({
262
212
  var z2 = 0, M2 = false;
263
213
  this.parse = function(i2, t, r4) {
264
214
  if ("string" != typeof i2) throw new Error("Input must be a string");
265
- var n2 = i2.length, e = S2.length, s4 = O4.length, a4 = x3.length, o5 = q2(I2), h5 = [], u5 = [], d4 = [], f5 = z2 = 0;
215
+ var n2 = i2.length, e = S2.length, s4 = O4.length, a4 = x3.length, o5 = q2(I2), h5 = [], u5 = [], d4 = [], f4 = z2 = 0;
266
216
  if (!i2) return w3();
267
217
  if (T || false !== T && -1 === i2.indexOf(F4)) {
268
218
  for (var l4 = i2.split(O4), c4 = 0; c4 < l4.length; c4++) {
@@ -308,7 +258,7 @@ var require_papaparse_min = __commonJS({
308
258
  }
309
259
  return E5();
310
260
  function k3(e2) {
311
- h5.push(e2), f5 = z2;
261
+ h5.push(e2), f4 = z2;
312
262
  }
313
263
  function v2(e2) {
314
264
  var t2 = 0;
@@ -335,7 +285,7 @@ var require_papaparse_min = __commonJS({
335
285
  }
336
286
  n4 && console.warn("Duplicate headers found and renamed."), L4 = true;
337
287
  }
338
- return { data: h5, errors: u5, meta: { delimiter: S2, linebreak: O4, aborted: M2, truncated: !!e2, cursor: f5 + (t || 0), renamedHeaders: D2 } };
288
+ return { data: h5, errors: u5, meta: { delimiter: S2, linebreak: O4, aborted: M2, truncated: !!e2, cursor: f4 + (t || 0), renamedHeaders: D2 } };
339
289
  }
340
290
  function R4() {
341
291
  I2(w3()), h5 = [], u5 = [];
@@ -384,7 +334,7 @@ var require_papaparse_min = __commonJS({
384
334
  return v.parse = function(e, t) {
385
335
  var i2 = (t = t || {}).dynamicTyping || false;
386
336
  q2(i2) && (t.dynamicTypingFunction = i2, i2 = {});
387
- if (t.dynamicTyping = i2, t.transform = !!q2(t.transform) && t.transform, !t.worker || !v.WORKERS_SUPPORTED) return i2 = null, v.NODE_STREAM_INPUT, "string" == typeof e ? (e = P4(e), i2 = new (t.download ? f4 : c2)(t)) : true === e.readable && q2(e.read) && q2(e.on) ? i2 = new p4(t) : (n.File && e instanceof File || e instanceof Object) && (i2 = new l2(t)), i2.stream(e);
337
+ if (t.dynamicTyping = i2, t.transform = !!q2(t.transform) && t.transform, !t.worker || !v.WORKERS_SUPPORTED) return i2 = null, v.NODE_STREAM_INPUT, "string" == typeof e ? (e = P4(e), i2 = new (t.download ? f2 : c2)(t)) : true === e.readable && q2(e.read) && q2(e.on) ? i2 = new p4(t) : (n.File && e instanceof File || e instanceof Object) && (i2 = new l2(t)), i2.stream(e);
388
338
  (i2 = (() => {
389
339
  var e2;
390
340
  return !!v.WORKERS_SUPPORTED && (e2 = (() => {
@@ -419,11 +369,11 @@ var require_papaparse_min = __commonJS({
419
369
  for (var o6 = 0; o6 < t2.length; o6++) {
420
370
  var h6 = (n4 ? e2 : t2[o6]).length, u6 = false, d4 = n4 ? 0 === Object.keys(t2[o6]).length : 0 === t2[o6].length;
421
371
  if (i4 && !n4 && (u6 = "greedy" === i4 ? "" === t2[o6].join("").trim() : 1 === t2[o6].length && 0 === t2[o6][0].length), "greedy" === i4 && n4) {
422
- for (var f5 = [], l4 = 0; l4 < h6; l4++) {
372
+ for (var f4 = [], l4 = 0; l4 < h6; l4++) {
423
373
  var c4 = s5 ? e2[l4] : l4;
424
- f5.push(t2[o6][c4]);
374
+ f4.push(t2[o6][c4]);
425
375
  }
426
- u6 = "" === f5.join("").trim();
376
+ u6 = "" === f4.join("").trim();
427
377
  }
428
378
  if (!u6) {
429
379
  for (var p5 = 0; p5 < h6; p5++) {
@@ -443,7 +393,7 @@ var require_papaparse_min = __commonJS({
443
393
  return false;
444
394
  })(r5, v.BAD_DELIMITERS) || -1 < r5.indexOf(m5) || -1 < i4.indexOf(a4) || " " === r5.charAt(0) || " " === r5.charAt(r5.length - 1)) ? a4 + r5 + a4 : r5);
445
395
  }
446
- }, v.RECORD_SEP = String.fromCharCode(30), v.UNIT_SEP = String.fromCharCode(31), v.BYTE_ORDER_MARK = "\uFEFF", v.BAD_DELIMITERS = ["\r", "\n", '"', v.BYTE_ORDER_MARK], v.WORKERS_SUPPORTED = !s2 && !!n.Worker, v.NODE_STREAM_INPUT = 1, v.LocalChunkSize = 10485760, v.RemoteChunkSize = 5242880, v.DefaultDelimiter = ",", v.Parser = E4, v.ParserHandle = i, v.NetworkStreamer = f4, v.FileStreamer = l2, v.StringStreamer = c2, v.ReadableStreamStreamer = p4, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o5) {
396
+ }, v.RECORD_SEP = String.fromCharCode(30), v.UNIT_SEP = String.fromCharCode(31), v.BYTE_ORDER_MARK = "\uFEFF", v.BAD_DELIMITERS = ["\r", "\n", '"', v.BYTE_ORDER_MARK], v.WORKERS_SUPPORTED = !s2 && !!n.Worker, v.NODE_STREAM_INPUT = 1, v.LocalChunkSize = 10485760, v.RemoteChunkSize = 5242880, v.DefaultDelimiter = ",", v.Parser = E4, v.ParserHandle = i, v.NetworkStreamer = f2, v.FileStreamer = l2, v.StringStreamer = c2, v.ReadableStreamStreamer = p4, n.jQuery && ((d2 = n.jQuery).fn.parse = function(o5) {
447
397
  var i2 = o5.config || {}, h5 = [];
448
398
  return this.each(function(e2) {
449
399
  if (!("INPUT" === d2(this).prop("tagName").toUpperCase() && "file" === d2(this).attr("type").toLowerCase() && n.FileReader) || !this.files || 0 === this.files.length) return true;
@@ -474,737 +424,11 @@ var require_papaparse_min = __commonJS({
474
424
  e = e.data;
475
425
  void 0 === v.WORKER_ID && e && (v.WORKER_ID = e.workerId);
476
426
  "string" == typeof e.input ? n.postMessage({ workerId: v.WORKER_ID, results: v.parse(e.input, e.config), finished: true }) : (n.File && e.input instanceof File || e.input instanceof Object) && (e = v.parse(e.input, e.config)) && n.postMessage({ workerId: v.WORKER_ID, results: e, finished: true });
477
- }), (f4.prototype = Object.create(u4.prototype)).constructor = f4, (l2.prototype = Object.create(u4.prototype)).constructor = l2, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p4.prototype = Object.create(u4.prototype)).constructor = p4, v;
427
+ }), (f2.prototype = Object.create(u4.prototype)).constructor = f2, (l2.prototype = Object.create(u4.prototype)).constructor = l2, (c2.prototype = Object.create(c2.prototype)).constructor = c2, (p4.prototype = Object.create(u4.prototype)).constructor = p4, v;
478
428
  });
479
429
  }
480
430
  });
481
431
 
482
- // src/labelContrast.ts
483
- function parseRGBA(c2) {
484
- if (typeof c2 !== "string") return null;
485
- const s2 = c2.trim();
486
- const m4 = s2.match(/^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)\s*(?:,\s*([\d.]+)\s*)?\)$/i);
487
- if (m4) return [parseFloat(m4[1]), parseFloat(m4[2]), parseFloat(m4[3]), m4[4] !== void 0 ? parseFloat(m4[4]) : 1];
488
- let h4 = s2.replace(/^#/, "");
489
- if (h4.length === 3) h4 = h4.split("").map((ch) => ch + ch).join("");
490
- if (h4.length === 6 && /^[0-9a-fA-F]{6}$/.test(h4)) {
491
- return [parseInt(h4.slice(0, 2), 16), parseInt(h4.slice(2, 4), 16), parseInt(h4.slice(4, 6), 16), 1];
492
- }
493
- return null;
494
- }
495
- var DARK_TEXT = "#111111";
496
- var LIGHT_TEXT = "#ffffff";
497
- var MIN_CONTRAST = 3;
498
- var WHITE_TEXT_BG_LUM = 0.5;
499
- var PILL_MIN_ALPHA = 0.05;
500
- var PILL_OPAQUE_ALPHA = 0.85;
501
- var PAGE_MATCH_TOLERANCE = 2;
502
- function isPillBackdropAlpha(a3) {
503
- return a3 >= PILL_MIN_ALPHA && a3 < PILL_OPAQUE_ALPHA;
504
- }
505
- var PILL_MIN_COVERAGE = 0.6;
506
- function pillBacksGlyph(overlapArea, glyphArea) {
507
- if (!(glyphArea > 0) || !isFinite(overlapArea) || overlapArea <= 0) return false;
508
- return overlapArea / glyphArea >= PILL_MIN_COVERAGE;
509
- }
510
- var BACKING_MAJORITY = 0.5;
511
- function backingHoldsGlyph(backedArea, glyphArea) {
512
- if (!(glyphArea > 0) || !isFinite(backedArea) || backedArea <= 0) return false;
513
- return backedArea / glyphArea >= BACKING_MAJORITY;
514
- }
515
- function cellSuppressesNormalize(cellClass) {
516
- return typeof cellClass === "string" && /(^|\s)lch-deck-panel(\s|$)/.test(cellClass);
517
- }
518
- var NAMED = {
519
- white: [255, 255, 255, 1],
520
- black: [0, 0, 0, 1],
521
- none: [0, 0, 0, 0],
522
- transparent: [0, 0, 0, 0]
523
- };
524
- function toRGBA(c2) {
525
- if (typeof c2 !== "string") return null;
526
- const k3 = c2.trim().toLowerCase();
527
- if (k3 in NAMED) return NAMED[k3];
528
- return parseRGBA(c2);
529
- }
530
- function compositeOver(fg, bg) {
531
- const a3 = Math.max(0, Math.min(1, fg[3]));
532
- return [
533
- Math.round(fg[0] * a3 + bg[0] * (1 - a3)),
534
- Math.round(fg[1] * a3 + bg[1] * (1 - a3)),
535
- Math.round(fg[2] * a3 + bg[2] * (1 - a3))
536
- ];
537
- }
538
- function relativeLuminance(rgb) {
539
- const lin = rgb.map((v) => {
540
- const s2 = v / 255;
541
- return s2 <= 0.03928 ? s2 / 12.92 : Math.pow((s2 + 0.055) / 1.055, 2.4);
542
- });
543
- return 0.2126 * lin[0] + 0.7152 * lin[1] + 0.0722 * lin[2];
544
- }
545
- function contrastRatio(l1, l2) {
546
- const hi = Math.max(l1, l2);
547
- const lo = Math.min(l1, l2);
548
- return (hi + 0.05) / (lo + 0.05);
549
- }
550
- function decideLabelColor(textColor, fill, fillOpacity, pageBg, minContrast = MIN_CONTRAST, normalize = false) {
551
- const fillRGBA = toRGBA(fill);
552
- if (!fillRGBA) return { fix: false, color: "", reason: "fill-unparsed" };
553
- const pageRGBA = toRGBA(pageBg) || [255, 255, 255, 1];
554
- const pageRGB = [pageRGBA[0], pageRGBA[1], pageRGBA[2]];
555
- const effFill = [fillRGBA[0], fillRGBA[1], fillRGBA[2], fillRGBA[3] * clamp01(fillOpacity)];
556
- const bgRGB = compositeOver(effFill, pageRGB);
557
- const bgLum = relativeLuminance(bgRGB);
558
- const bgIsPage = Math.abs(bgRGB[0] - pageRGB[0]) <= PAGE_MATCH_TOLERANCE && Math.abs(bgRGB[1] - pageRGB[1]) <= PAGE_MATCH_TOLERANCE && Math.abs(bgRGB[2] - pageRGB[2]) <= PAGE_MATCH_TOLERANCE;
559
- const effNormalize = normalize && !bgIsPage;
560
- const textRGBA = toRGBA(textColor);
561
- if (!effNormalize && textRGBA) {
562
- const txtRGB = compositeOver(textRGBA, bgRGB);
563
- const cur = contrastRatio(relativeLuminance(txtRGB), bgLum);
564
- if (cur >= minContrast) return { fix: false, color: "", reason: "ok" };
565
- }
566
- const darkC = contrastRatio(relativeLuminance(hexToRGB(DARK_TEXT)), bgLum);
567
- const lightC = contrastRatio(relativeLuminance(hexToRGB(LIGHT_TEXT)), bgLum);
568
- let useLight = bgLum <= WHITE_TEXT_BG_LUM;
569
- if (useLight && lightC < minContrast && darkC >= minContrast) useLight = false;
570
- if (!useLight && darkC < minContrast && lightC >= minContrast) useLight = true;
571
- return useLight ? { fix: true, color: LIGHT_TEXT, reason: "fixed-light" } : { fix: true, color: DARK_TEXT, reason: "fixed-dark" };
572
- }
573
- var GLYPH_SAMPLE_N = 3;
574
- function glyphSampleGrid(box2, n = GLYPH_SAMPLE_N) {
575
- const out = [];
576
- if (!box2 || !(box2.width > 0) || !(box2.height > 0) || !(n >= 1)) return out;
577
- const k3 = Math.floor(n);
578
- for (let i = 0; i < k3; i++) {
579
- for (let j4 = 0; j4 < k3; j4++) {
580
- out.push({
581
- x: box2.left + box2.width * (i + 0.5) / k3,
582
- y: box2.top + box2.height * (j4 + 0.5) / k3
583
- });
584
- }
585
- }
586
- return out;
587
- }
588
- var STRADDLE_COLS = 8;
589
- var STRADDLE_ROWS = 2;
590
- var STRADDLE_MIN_SHARE = 0.125;
591
- var STRADDLE_TARGET_CONTRAST = 4.5;
592
- var STRADDLE_PILL_ALPHA = 0.9;
593
- function straddleSampleGrid(box2) {
594
- const out = [];
595
- if (!box2 || !(box2.width > 0) || !(box2.height > 0)) return out;
596
- for (let i = 0; i < STRADDLE_COLS; i++) {
597
- for (let j4 = 0; j4 < STRADDLE_ROWS; j4++) {
598
- out.push({
599
- x: box2.left + box2.width * (i + 0.5) / STRADDLE_COLS,
600
- y: box2.top + box2.height * (j4 + 0.5) / STRADDLE_ROWS
601
- });
602
- }
603
- }
604
- return out;
605
- }
606
- function backgroundGroups(bgs, tol = 8) {
607
- const groups = [];
608
- for (const b4 of bgs || []) {
609
- const g5 = groups.find((x3) => Math.abs(x3.rgb[0] - b4[0]) <= tol && Math.abs(x3.rgb[1] - b4[1]) <= tol && Math.abs(x3.rgb[2] - b4[2]) <= tol);
610
- if (g5) g5.n++;
611
- else groups.push({ rgb: [b4[0], b4[1], b4[2]], n: 1 });
612
- }
613
- return groups.sort((a3, b4) => b4.n - a3.n);
614
- }
615
- function straddles(bgs) {
616
- if (!bgs || bgs.length < 2) return false;
617
- const g5 = backgroundGroups(bgs);
618
- return g5.length >= 2 && g5[1].n / bgs.length >= STRADDLE_MIN_SHARE;
619
- }
620
- function minContrastOver(textColor, bgs) {
621
- const t = toRGBA(textColor);
622
- if (!t || !bgs || !bgs.length) return 0;
623
- let worst = Infinity;
624
- for (const b4 of bgs) {
625
- const tx = compositeOver(t, b4);
626
- worst = Math.min(worst, contrastRatio(relativeLuminance(tx), relativeLuminance(b4)));
627
- }
628
- return worst;
629
- }
630
- function pickColorOver(textColor, bgs, target = STRADDLE_TARGET_CONTRAST) {
631
- const cur = minContrastOver(textColor, bgs);
632
- if (cur >= target) return { color: String(textColor), contrast: cur, keep: true };
633
- const d2 = minContrastOver(DARK_TEXT, bgs), l2 = minContrastOver(LIGHT_TEXT, bgs);
634
- const best = d2 >= l2 ? { color: DARK_TEXT, contrast: d2 } : { color: LIGHT_TEXT, contrast: l2 };
635
- return best.contrast > cur ? { ...best, keep: false } : { color: String(textColor), contrast: cur, keep: true };
636
- }
637
- function clamp01(v) {
638
- if (typeof v !== "number" || !isFinite(v)) return 1;
639
- return Math.max(0, Math.min(1, v));
640
- }
641
- function hexToRGB(hex2) {
642
- const p4 = toRGBA(hex2);
643
- return [p4[0], p4[1], p4[2]];
644
- }
645
-
646
- // src/deltaE.ts
647
- function linearise(c2) {
648
- const v = c2 / 255;
649
- return v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
650
- }
651
- var Xn = 0.95047;
652
- var Yn = 1;
653
- var Zn = 1.08883;
654
- var EPS = 216 / 24389;
655
- var KAPPA = 24389 / 27;
656
- function f(t) {
657
- return t > EPS ? Math.cbrt(t) : (KAPPA * t + 16) / 116;
658
- }
659
- function rgbToLab(r2, g5, b4) {
660
- const R4 = linearise(r2), G4 = linearise(g5), B4 = linearise(b4);
661
- const X3 = 0.4124564 * R4 + 0.3575761 * G4 + 0.1804375 * B4;
662
- const Y4 = 0.2126729 * R4 + 0.7151522 * G4 + 0.072175 * B4;
663
- const Z4 = 0.0193339 * R4 + 0.119192 * G4 + 0.9503041 * B4;
664
- const fx = f(X3 / Xn), fy = f(Y4 / Yn), fz = f(Z4 / Zn);
665
- return { L: 116 * fy - 16, a: 500 * (fx - fy), b: 200 * (fy - fz) };
666
- }
667
- function hexToLab(hex2) {
668
- const m4 = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(hex2.trim());
669
- if (!m4) return null;
670
- const h4 = m4[1].length === 3 ? m4[1][0] + m4[1][0] + m4[1][1] + m4[1][1] + m4[1][2] + m4[1][2] : m4[1];
671
- return rgbToLab(parseInt(h4.slice(0, 2), 16), parseInt(h4.slice(2, 4), 16), parseInt(h4.slice(4, 6), 16));
672
- }
673
- var RAD = Math.PI / 180;
674
- var DEG = 180 / Math.PI;
675
- var NEUTRAL_CHROMA = 1e-4;
676
- function deltaE2000(c1, c2) {
677
- const C1 = Math.hypot(c1.a, c1.b), C2 = Math.hypot(c2.a, c2.b);
678
- const Cbar = (C1 + C2) / 2;
679
- const C7 = Math.pow(Cbar, 7);
680
- const G4 = 0.5 * (1 - Math.sqrt(C7 / (C7 + Math.pow(25, 7))));
681
- const a1p = (1 + G4) * c1.a, a2p = (1 + G4) * c2.a;
682
- const C1p = Math.hypot(a1p, c1.b), C2p = Math.hypot(a2p, c2.b);
683
- const neutral = C1p < NEUTRAL_CHROMA || C2p < NEUTRAL_CHROMA;
684
- const h1p = C1p < NEUTRAL_CHROMA ? 0 : (Math.atan2(c1.b, a1p) * DEG + 360) % 360;
685
- const h2p = C2p < NEUTRAL_CHROMA ? 0 : (Math.atan2(c2.b, a2p) * DEG + 360) % 360;
686
- const dLp = c2.L - c1.L;
687
- const dCp = C2p - C1p;
688
- let dhp;
689
- if (neutral) dhp = 0;
690
- else if (Math.abs(h2p - h1p) <= 180) dhp = h2p - h1p;
691
- else if (h2p - h1p > 180) dhp = h2p - h1p - 360;
692
- else dhp = h2p - h1p + 360;
693
- const dHp = 2 * Math.sqrt(C1p * C2p) * Math.sin(dhp / 2 * RAD);
694
- const Lbarp = (c1.L + c2.L) / 2;
695
- const Cbarp = (C1p + C2p) / 2;
696
- let hbarp;
697
- if (neutral) hbarp = h1p + h2p;
698
- else if (Math.abs(h1p - h2p) <= 180) hbarp = (h1p + h2p) / 2;
699
- else if (h1p + h2p < 360) hbarp = (h1p + h2p + 360) / 2;
700
- else hbarp = (h1p + h2p - 360) / 2;
701
- const T = 1 - 0.17 * Math.cos((hbarp - 30) * RAD) + 0.24 * Math.cos(2 * hbarp * RAD) + 0.32 * Math.cos((3 * hbarp + 6) * RAD) - 0.2 * Math.cos((4 * hbarp - 63) * RAD);
702
- const dTheta = 30 * Math.exp(-Math.pow((hbarp - 275) / 25, 2));
703
- const Cbarp7 = Math.pow(Cbarp, 7);
704
- const RC = 2 * Math.sqrt(Cbarp7 / (Cbarp7 + Math.pow(25, 7)));
705
- const RT = -RC * Math.sin(2 * dTheta * RAD);
706
- const Lm50 = Math.pow(Lbarp - 50, 2);
707
- const SL = 1 + 0.015 * Lm50 / Math.sqrt(20 + Lm50);
708
- const SC = 1 + 0.045 * Cbarp;
709
- const SH = 1 + 0.015 * Cbarp * T;
710
- const tL = dLp / SL, tC = dCp / SC, tH = dHp / SH;
711
- return Math.sqrt(tL * tL + tC * tC + tH * tH + RT * tC * tH);
712
- }
713
- function labToHex(lab) {
714
- const finv = (t) => {
715
- const t32 = t * t * t;
716
- return t32 > EPS ? t32 : (116 * t - 16) / KAPPA;
717
- };
718
- const fy = (lab.L + 16) / 116, fx = fy + lab.a / 500, fz = fy - lab.b / 200;
719
- const X3 = Xn * finv(fx);
720
- const Y4 = Yn * (lab.L > KAPPA * EPS ? fy * fy * fy : lab.L / KAPPA);
721
- const Z4 = Zn * finv(fz);
722
- const lin = [
723
- 3.2404542 * X3 - 1.5371385 * Y4 - 0.4985314 * Z4,
724
- -0.969266 * X3 + 1.8760108 * Y4 + 0.041556 * Z4,
725
- 0.0556434 * X3 - 0.2040259 * Y4 + 1.0572252 * Z4
726
- ];
727
- return "#" + lin.map((v) => {
728
- const c2 = Math.max(0, Math.min(1, v));
729
- const g5 = c2 <= 31308e-7 ? 12.92 * c2 : 1.055 * Math.pow(c2, 1 / 2.4) - 0.055;
730
- return Math.round(g5 * 255).toString(16).padStart(2, "0");
731
- }).join("");
732
- }
733
- function deltaEHex(a3, b4) {
734
- const la = hexToLab(a3), lb = hexToLab(b4);
735
- return la && lb ? deltaE2000(la, lb) : NaN;
736
- }
737
-
738
- // src/colourSpread.ts
739
- var SAME_SHADE_DELTA_E = 5;
740
- var MIN_RAMP_FILLS = 4;
741
- var RAMP_SLACK_MAX = 0.15;
742
- var MIN_MARKS = 24;
743
- var ELEMENT_CAP = 5e3;
744
- var MAX_CELLS = 48;
745
- var CELL_STEP = 32;
746
- var EMPTY = { marks: 0, distinctFills: 0, crowdShare: 0, spanDeltaE: 0 };
747
- function styleOf(el, doc) {
748
- try {
749
- const view = doc?.defaultView;
750
- return view?.getComputedStyle ? view.getComputedStyle(el) : null;
751
- } catch {
752
- return null;
753
- }
754
- }
755
- function fillOf(el, cs) {
756
- const a3 = el.getAttribute?.("fill");
757
- if (a3 !== null && a3 !== void 0 && String(a3).trim() !== "") return String(a3).trim();
758
- const c2 = cs?.fill;
759
- return c2 === null || c2 === void 0 ? "" : String(c2).trim();
760
- }
761
- function toRgb(raw) {
762
- const s2 = raw.trim().toLowerCase();
763
- if (!s2 || s2 === "none" || s2 === "transparent") return null;
764
- const hex2 = /^#([0-9a-f]{3}|[0-9a-f]{6})$/.exec(s2);
765
- if (hex2) {
766
- const h4 = hex2[1];
767
- const full = h4.length === 3 ? h4[0] + h4[0] + h4[1] + h4[1] + h4[2] + h4[2] : h4;
768
- return [
769
- parseInt(full.slice(0, 2), 16),
770
- parseInt(full.slice(2, 4), 16),
771
- parseInt(full.slice(4, 6), 16)
772
- ];
773
- }
774
- const m4 = /^rgba?\(\s*([\d.]+)[\s,]+([\d.]+)[\s,]+([\d.]+)\s*(?:[,/]\s*([\d.]+)\s*)?\)$/.exec(s2);
775
- if (!m4) return null;
776
- if (m4[4] !== void 0 && parseFloat(m4[4]) === 0) return null;
777
- return [Math.round(parseFloat(m4[1])), Math.round(parseFloat(m4[2])), Math.round(parseFloat(m4[3]))];
778
- }
779
- function cellKey(rgb) {
780
- return [
781
- Math.round(rgb[0] / CELL_STEP),
782
- Math.round(rgb[1] / CELL_STEP),
783
- Math.round(rgb[2] / CELL_STEP)
784
- ].join(",");
785
- }
786
- function hex(rgb) {
787
- return "#" + rgb.map((v) => Math.max(0, Math.min(255, v)).toString(16).padStart(2, "0")).join("");
788
- }
789
- function censusColourSpread(container, doc) {
790
- if (!container || typeof container.querySelectorAll !== "function") return EMPTY;
791
- try {
792
- const els = Array.from(
793
- container.querySelectorAll(`.${MARK_CLASS}, [${ROW_IDX_ATTR}]`)
794
- );
795
- if (els.length === 0 || els.length > ELEMENT_CAP) return EMPTY;
796
- const ownerDoc = doc ?? container.ownerDocument;
797
- const painted = [];
798
- for (const el of els) {
799
- const rgb = toRgb(fillOf(el, styleOf(el, ownerDoc)));
800
- if (rgb) painted.push({ rgb, tag: String(el.tagName || "").toLowerCase() });
801
- }
802
- const byTag = /* @__PURE__ */ new Map();
803
- for (const p4 of painted) {
804
- const g5 = byTag.get(p4.tag) ?? { fills: /* @__PURE__ */ new Set(), n: 0 };
805
- g5.fills.add(p4.rgb.join(","));
806
- g5.n++;
807
- byTag.set(p4.tag, g5);
808
- }
809
- const overlays = new Set([...byTag].filter(([, g5]) => g5.fills.size === 1 && g5.n >= MIN_MARKS).map(([t]) => t));
810
- const restFills = new Set([...byTag].filter(([t]) => !overlays.has(t)).flatMap(([, g5]) => [...g5.fills]));
811
- const counted = restFills.size > 1 ? painted.filter((p4) => !overlays.has(p4.tag)) : painted;
812
- const distinct = /* @__PURE__ */ new Set();
813
- const cells = /* @__PURE__ */ new Map();
814
- let marks = 0;
815
- for (const { rgb } of counted) {
816
- marks++;
817
- distinct.add(rgb.join(","));
818
- const k3 = cellKey(rgb);
819
- const cur = cells.get(k3);
820
- if (cur) cur.n++;
821
- else cells.set(k3, { rgb, n: 1 });
822
- }
823
- if (marks < MIN_MARKS || distinct.size < MIN_RAMP_FILLS) return EMPTY;
824
- const top = [...cells.values()].sort((a3, b4) => b4.n - a3.n).slice(0, MAX_CELLS);
825
- const cs = top.map((c2) => hexToLab(hex(c2.rgb))).filter((l2) => l2 !== null);
826
- if (cs.length < MIN_RAMP_FILLS) return EMPTY;
827
- const d2 = cs.map(() => new Array(cs.length).fill(0));
828
- let span = 0, lo = 0, hi = 1;
829
- for (let i = 0; i < cs.length; i++) {
830
- for (let j4 = i + 1; j4 < cs.length; j4++) {
831
- const v = deltaE2000(cs[i], cs[j4]);
832
- d2[i][j4] = v;
833
- d2[j4][i] = v;
834
- if (v > span) {
835
- span = v;
836
- lo = i;
837
- hi = j4;
838
- }
839
- }
840
- }
841
- if (span <= 0) return EMPTY;
842
- let slack = 0, interior = 0;
843
- for (let i = 0; i < cs.length; i++) {
844
- if (i === lo || i === hi) continue;
845
- slack += (d2[lo][i] + d2[i][hi]) / span - 1;
846
- interior++;
847
- }
848
- if (interior < 2 || slack / interior > RAMP_SLACK_MAX) return EMPTY;
849
- let crowd = 0;
850
- for (let i = 0; i < cs.length; i++) {
851
- let n = 0;
852
- for (let j4 = 0; j4 < cs.length; j4++) {
853
- if (i === j4 || d2[i][j4] <= SAME_SHADE_DELTA_E) n += top[j4].n;
854
- }
855
- if (n > crowd) crowd = n;
856
- }
857
- return {
858
- marks,
859
- distinctFills: distinct.size,
860
- crowdShare: Math.round(crowd / marks * 100),
861
- spanDeltaE: Math.round(span)
862
- };
863
- } catch {
864
- return EMPTY;
865
- }
866
- }
867
- function colourSpreadFlag(c2) {
868
- if (c2.marks === 0) return "";
869
- return "ramp:d3:crowd" + Math.min(80, Math.floor(c2.crowdShare / 20) * 20);
870
- }
871
-
872
- // src/autoRamp.ts
873
- var AUTO_RAMP_CLASSES = 7;
874
- var AUTO_RAMP_DRAWN_OPACITY = 0.5;
875
- var AUTO_RAMP_MIN_STEP_DELTA_E = 2.3;
876
- var FALLBACK_ACCENT = "#3182bd";
877
- var MIN_ACCENT_VS_CANVAS = 20;
878
- var HEX = /^#?([0-9a-f]{3}|[0-9a-f]{6})$/i;
879
- function normHex(raw) {
880
- if (typeof raw !== "string") return null;
881
- const m4 = HEX.exec(raw.trim());
882
- if (!m4) return null;
883
- const h4 = m4[1].length === 3 ? m4[1].split("").map((c2) => c2 + c2).join("") : m4[1];
884
- return "#" + h4.toLowerCase();
885
- }
886
- function mixLab(a3, b4, t) {
887
- return { L: a3.L + (b4.L - a3.L) * t, a: a3.a + (b4.a - a3.a) * t, b: a3.b + (b4.b - a3.b) * t };
888
- }
889
- function paintedOver(fg, canvas, alpha) {
890
- const f4 = [1, 3, 5].map((i) => parseInt(fg.slice(i, i + 2), 16));
891
- const c2 = [1, 3, 5].map((i) => parseInt(canvas.slice(i, i + 2), 16));
892
- const mixed = f4.map((v, i) => Math.round(v * alpha + c2[i] * (1 - alpha))).map((v) => v.toString(16).padStart(2, "0"));
893
- return hexToLab("#" + mixed.join(""));
894
- }
895
- function autoRampMinStep(low, high, canvas, classes = AUTO_RAMP_CLASSES, opacity = AUTO_RAMP_DRAWN_OPACITY) {
896
- const lo = hexToLab(low), hi = hexToLab(high);
897
- const bg = normHex(canvas);
898
- if (!lo || !hi || !bg || classes < 2) return NaN;
899
- let prev = null, min = Infinity;
900
- for (let k3 = 0; k3 < classes; k3++) {
901
- const painted = paintedOver(labToHex(mixLab(lo, hi, k3 / (classes - 1))), bg, opacity);
902
- if (prev) min = Math.min(min, deltaE2000(prev, painted));
903
- prev = painted;
904
- }
905
- return min;
906
- }
907
- function autoRampCanvas(p4) {
908
- return normHex(p4.backgroundColor) ?? normHex(p4.themeBg) ?? "#ffffff";
909
- }
910
- var memoKey = "";
911
- var memoValue = { low: "", high: "" };
912
- function resolveAutoColorScale(p4) {
913
- const canvas = autoRampCanvas(p4);
914
- const palette = Array.isArray(p4.palette) ? p4.palette : [];
915
- const key = [canvas, p4.isHighContrast ? 1 : 0, p4.themeAccent ?? "", p4.themeFg ?? "", palette.join(",")].join("|");
916
- if (key === memoKey) return memoValue;
917
- const bg = hexToLab(canvas);
918
- const darkCanvas = bg.L < 50;
919
- const usable = (hex2) => {
920
- const lab = hex2 ? hexToLab(hex2) : null;
921
- return !!lab && deltaE2000(lab, bg) >= MIN_ACCENT_VS_CANVAS;
922
- };
923
- const candidates = p4.isHighContrast ? [normHex(p4.themeAccent), normHex(p4.themeFg)] : [...palette.map(normHex), normHex(p4.themeAccent), normHex(p4.themeFg)];
924
- const accent = candidates.find(usable) ?? FALLBACK_ACCENT;
925
- const A2 = hexToLab(accent);
926
- let t = 0.1;
927
- let low = mixLab(bg, A2, t);
928
- while (t < 0.6 && deltaE2000(paintedOver(labToHex(low), canvas, AUTO_RAMP_DRAWN_OPACITY), bg) < SAME_SHADE_DELTA_E) {
929
- t += 0.02;
930
- low = mixLab(bg, A2, t);
931
- }
932
- const lowHex = labToHex(low);
933
- let high = { ...A2 };
934
- let highHex = labToHex(high);
935
- for (let step = 0; step < 80 && autoRampMinStep(lowHex, highHex, canvas) < AUTO_RAMP_MIN_STEP_DELTA_E; step++) {
936
- const L4 = Math.max(4, Math.min(98, high.L + (darkCanvas ? 1 : -1)));
937
- if (L4 === high.L) break;
938
- high = { ...high, L: L4 };
939
- highHex = labToHex(high);
940
- }
941
- memoKey = key;
942
- memoValue = { low: lowHex, high: highHex };
943
- return memoValue;
944
- }
945
-
946
- // src/defaults.ts
947
- function themedLand(p4) {
948
- const bg = p4.geoLandColor ? null : toRGBA(p4.backgroundColor);
949
- if (!bg || bg[3] < 1 || relativeLuminance([bg[0], bg[1], bg[2]]) > 0.2) return void 0;
950
- const fg = toRGBA(p4.themeFg) ?? [255, 255, 255, 1];
951
- return "#" + compositeOver([fg[0], fg[1], fg[2], 0.18], [bg[0], bg[1], bg[2]]).map((v) => v.toString(16).padStart(2, "0")).join("");
952
- }
953
- var clamp = (n, lo, hi) => Math.max(lo, Math.min(hi, n));
954
- var numberOr = (raw, dflt) => {
955
- const n = raw == null || raw === "" ? NaN : Number(raw);
956
- return Number.isFinite(n) ? n : dflt;
957
- };
958
- function resolveOptions(p4) {
959
- return {
960
- // ---- host fields: pass through exactly as supplied ----
961
- width: p4.width,
962
- height: p4.height,
963
- palette: p4.palette,
964
- geoUnmatched: p4.geoUnmatched,
965
- geo: p4.geo,
966
- geoPoint: p4.geoPoint,
967
- // THIRD AND FOURTH OCCURRENCES OF THE animLoopDelaySec OMISSION, found together by
968
- // reading the contract against this list rather than by a bug report. geoPointDest is
969
- // declared on RenderOptions, passed by the visual and read by the route archetypes, and
970
- // was missing here - so a chart that claims "an arc is only as honest as its worse
971
- // endpoint" never saw the destination end at all. The guard test at the bottom of
972
- // tests/defaults.test.ts now compares the two lists, because four instances of one
973
- // omission is a missing check, not four mistakes.
974
- geoPointDest: p4.geoPointDest,
975
- // A host FACT about the data it serialised (contract 1.9.0), passed through untouched.
976
- dateCellsAreUtcDays: p4.dateCellsAreUtcDays,
977
- // NO LONGER A PASS-THROUGH. A host without a Max Map Points setting used to leave this
978
- // undefined, and every map chart then fell back to whatever number its own code carried -
979
- // 1000 in every archetype written so far - while the offer gate used the server's. One
980
- // default here makes the chart and the gate agree in every host. A positive value from
981
- // the host wins; absent, blank, zero or junk means the shared default.
982
- maxMapPoints: (() => {
983
- const n = numberOr(p4.maxMapPoints, 0);
984
- return n > 0 ? Math.round(n) : MAX_MAP_POINTS_DEFAULT;
985
- })(),
986
- // FIFTH AND SIXTH OCCURRENCES, and the two that argue hardest for the guard test: both
987
- // were passed by the visual AND read by the charts, and neither was ever declared here or
988
- // in the contract - so the contract-vs-whitelist check could not see them either. What
989
- // found them was scanning the OTHER direction, from the caller and the charts inward.
990
- // 0 is MEANINGFUL for both ("let the chart choose", "no paging"), so numberOr rather than
991
- // `|| DEFAULT`, which would turn an explicit 0 into something else. Clamping stays
992
- // chart-side for the same reason it does for flipIntervalMs.
993
- geoPointRadiusPx: Math.max(0, numberOr(p4.geoPointRadiusPx, 0)),
994
- pageSize: Math.max(0, numberOr(p4.pageSize, 0)),
995
- uiState: p4.uiState,
996
- setUiState: p4.setUiState,
997
- backgroundColor: p4.backgroundColor,
998
- themeBg: p4.themeBg,
999
- themeFg: p4.themeFg,
1000
- isHighContrast: p4.isHighContrast,
1001
- themeAccent: p4.themeAccent,
1002
- cultureCode: p4.cultureCode,
1003
- allowTooltips: p4.allowTooltips,
1004
- noDataText: p4.noDataText,
1005
- onSelect: p4.onSelect,
1006
- // Control gestures (1.10.0). Passed straight through like onSelect: the host owns what a gesture MEANS,
1007
- // and a host that supplies nothing leaves every control behaving exactly as before.
1008
- onControlChange: p4.onControlChange,
1009
- // ---- live-restyle knobs: `raw || undefined` / `.toString() || undefined` ----
1010
- colorScaleLow: p4.colorScaleLow || void 0,
1011
- colorScaleHigh: p4.colorScaleHigh || void 0,
1012
- // DERIVED, never passed: the automatic ends a blank picker stands for, resolved from the
1013
- // same palette and canvas the chart is handed on this render (autoRamp.ts).
1014
- colorScaleAutoLow: resolveAutoColorScale(p4).low,
1015
- colorScaleAutoHigh: resolveAutoColorScale(p4).high,
1016
- // "" (global, the default), "frame", or "self"; anything else fails open to global.
1017
- colorScaleScope: p4.colorScaleScope === "frame" || p4.colorScaleScope === "self" ? p4.colorScaleScope : "",
1018
- // Math.max(50, Math.min(100, Number(raw) || 95)) — only meaningful under "self".
1019
- colorScaleSelfClampPct: clamp(Number(p4.colorScaleSelfClampPct) || COLOR_SCALE_SELF_CLAMP_PCT_DEFAULT, COLOR_SCALE_SELF_CLAMP_PCT_MIN, COLOR_SCALE_SELF_CLAMP_PCT_MAX),
1020
- // Map fills: `raw || undefined` like the colour-scale endpoints. The no-data ->
1021
- // land cascade is left to the chart (so the fallback chain is visible in the
1022
- // generated code); HC substitution has already happened in the caller.
1023
- geoLandColor: p4.geoLandColor || themedLand(p4) || void 0,
1024
- geoNoDataColor: p4.geoNoDataColor || void 0,
1025
- aggregation: (p4.aggregation == null ? "" : String(p4.aggregation)) || void 0,
1026
- // A recognised value wins, anything else falls to the default: an unknown string must
1027
- // never reach a chart as a live mode. Both of these are read on EVERY render, so a
1028
- // reader can change their mind about a cached chart without regenerating it.
1029
- approximatePositions: (() => {
1030
- const v = (p4.approximatePositions == null ? "" : String(p4.approximatePositions)).toLowerCase();
1031
- return v === "mark" || v === "aggregate" || v === "skip" ? v : APPROXIMATE_POSITIONS_DEFAULT;
1032
- })(),
1033
- valueAxisBaseline: (() => {
1034
- const v = (p4.valueAxisBaseline == null ? "" : String(p4.valueAxisBaseline)).toLowerCase();
1035
- return v === "zero" || v === "fit" || v === "auto" ? v : VALUE_AXIS_BASELINE_DEFAULT;
1036
- })(),
1037
- // Same shape, and the same reason for it: an unrecognised string must never reach a chart
1038
- // as a live mode. Failing open to "auto" is the conservative direction here — "auto" is
1039
- // the setting that makes the chart PROVE the grid before it names a period, so a garbled
1040
- // value withdraws the claim rather than asserting one.
1041
- seasonalMarkers: (() => {
1042
- const v = (p4.seasonalMarkers == null ? "" : String(p4.seasonalMarkers)).toLowerCase();
1043
- return v === "auto" || v === "always" || v === "never" ? v : SEASONAL_MARKERS_DEFAULT;
1044
- })(),
1045
- // ---- animation: booleans, default+clamp numerics, "" default enum ----
1046
- animAutoPlay: !!p4.animAutoPlay,
1047
- // Math.max(250, Math.min(5000, Number(raw) || 1000))
1048
- animPlaySpeedMs: clamp(Number(p4.animPlaySpeedMs) || ANIM_PLAY_SPEED_DEFAULT, ANIM_PLAY_SPEED_MIN, ANIM_PLAY_SPEED_MAX),
1049
- // Loop-restart delay (seconds on the overview between auto-play passes).
1050
- // Floored at 0, deliberately NO upper clamp (huge = play once per viewing),
1051
- // and 0 must survive as 0 — hence numberOr, not `|| DEFAULT`. This field was
1052
- // MISSING from the resolve list when the assembly moved here, so callers
1053
- // that passed it saw it dropped: the scrubber read undefined -> 0 -> every
1054
- // pass restarted instantly and resumed-state auto-play lost its pacing.
1055
- animLoopDelaySec: Math.max(ANIM_LOOP_DELAY_MIN, numberOr(p4.animLoopDelaySec, ANIM_LOOP_DELAY_DEFAULT)),
1056
- // Math.max(3, Math.min(500, Number(raw) || 60))
1057
- animMaxIdealFrames: clamp(Number(p4.animMaxIdealFrames) || ANIM_MAX_IDEAL_FRAMES_DEFAULT, ANIM_MAX_IDEAL_FRAMES_MIN, ANIM_MAX_IDEAL_FRAMES_MAX),
1058
- animStopAtEnd: !!p4.animStopAtEnd,
1059
- filtersDuringPlay: !!p4.filtersDuringPlay,
1060
- animTimelineStyle: (p4.animTimelineStyle || "").toString(),
1061
- // ---- card deck ----
1062
- // SECOND OCCURRENCE OF THE animLoopDelaySec BUG, six lines above (2026-08-13). The
1063
- // visual passed both of these, the generated code read both correctly, and this
1064
- // function — a whitelist that returns a NEW object — dropped them in between. Symptoms
1065
- // were exactly what the two defaults produce: flipSync undefined -> `!== false` -> true
1066
- // -> always synced, so "Flip Cards Together = Off" did nothing and the deck kept its
1067
- // shared strip; flipIntervalMs undefined -> `+(undefined || 0)` -> 0 -> the timer branch
1068
- // never ran, so a 1000 ms interval produced no flips. Two dead knobs, one omission.
1069
- //
1070
- // flipSync DEFAULTS TRUE, so it cannot use `!!p.flipSync` — that would read a missing
1071
- // value as "independent" and hand every deck twelve control strips. Absent means
1072
- // synced; only an explicit false switches it.
1073
- flipSync: p4.flipSync === void 0 || p4.flipSync === null ? true : !!p4.flipSync,
1074
- // WHERE the controls live, which is a different question from whether the cards move
1075
- // together (2026-08-13: "the ability to flip individual cards shouldn't necessarily
1076
- // stop being able to flip all together too"). Resolution order matters and is the whole
1077
- // back-compat story:
1078
- // 1. an explicit, recognised flipMode wins;
1079
- // 2. otherwise DERIVE from flipSync, so a chart generated before this option existed
1080
- // behaves exactly as it did - true -> "all", false -> "single";
1081
- // 3. and a caller that sends neither gets the default.
1082
- // Deriving rather than defaulting is the point: a cached chart must not change behaviour
1083
- // because a newer client shipped, and "both" would have done exactly that to every deck
1084
- // already in a report.
1085
- flipMode: (() => {
1086
- const m4 = (p4.flipMode == null ? "" : String(p4.flipMode)).toLowerCase();
1087
- if (m4 === "single" || m4 === "all" || m4 === "both") return m4;
1088
- if (p4.flipSync === false) return "single";
1089
- if (p4.flipSync === true) return "all";
1090
- return FLIP_MODE_DEFAULT;
1091
- })(),
1092
- // WHICH WAY A FACE TURNS. Anything unrecognised - including absent, which is every host
1093
- // that predates the option - is the default, side to side, which is what every chart that
1094
- // turns did before it existed.
1095
- flipDirection: (() => {
1096
- const d2 = (p4.flipDirection == null ? "" : String(p4.flipDirection)).toLowerCase();
1097
- return d2 === "horizontal" || d2 === "vertical" ? d2 : FLIP_DIRECTION_DEFAULT;
1098
- })(),
1099
- // 0 is MEANINGFUL here (manual only), so numberOr — not `|| DEFAULT` — for the same
1100
- // reason animLoopDelaySec uses it. UNSET STAYS UNSET (undefined), because the default is
1101
- // the CHART's, not this function's: the card deck reads `+(x || 0)` and is manual, a
1102
- // carousel reads `x == null ? 5000 : +x` and turns by itself. Resolving unset to 0 here
1103
- // made the carousel's default unreachable - every host handed it an explicit "manual".
1104
- // Clamping stays chart-side too: the archetypes clamp 500..120000, and two clamps in two
1105
- // repositories is how they end up disagreeing.
1106
- flipIntervalMs: (() => {
1107
- const n = numberOr(p4.flipIntervalMs, NaN);
1108
- return Number.isFinite(n) ? Math.max(0, n) : void 0;
1109
- })(),
1110
- // `raw || undefined`, the same idiom as the colour-scale endpoints and the map fills:
1111
- // blank must arrive as ABSENT, not as an empty string, because the chart's fallback is
1112
- // `options.cardBackgroundColor || <its own choice>` and "" would satisfy a truthiness
1113
- // test in some hands while painting nothing in others.
1114
- cardBackgroundColor: p4.cardBackgroundColor || void 0,
1115
- // A reader's on / off, or UNSET - never filled with false, for the flipIntervalMs reason: the
1116
- // default is the chart's (on only where its request asked for drop lines), and a host that
1117
- // turned unset into false would make that default unreachable. Pane choices arrive as text.
1118
- hoverDropLines: (() => {
1119
- const v = p4.hoverDropLines;
1120
- if (typeof v === "boolean") return v;
1121
- const s2 = v == null ? "" : String(v).trim().toLowerCase();
1122
- return s2 === "on" || s2 === "true" || s2 === "1" ? true : s2 === "off" || s2 === "false" || s2 === "0" ? false : void 0;
1123
- })()
1124
- };
1125
- }
1126
-
1127
- // src/geoLazy.ts
1128
- var byKind = /* @__PURE__ */ new Map();
1129
- var byAsset = /* @__PURE__ */ new Map();
1130
- var _na;
1131
- function geoAssetFor(geoKind) {
1132
- if (!geoKind) return null;
1133
- const k3 = geoKind.toLowerCase();
1134
- if (/^country/.test(k3)) return "world";
1135
- if (k3 === "north-america") return "world";
1136
- if (k3 === "world") return "world";
1137
- if (k3 === "us-state-code" || k3 === "us-state-name") return "us-states";
1138
- if (k3 === "us-zip5") return "us-zip3";
1139
- return null;
1140
- }
1141
- var _worldBase;
1142
- function worldBasemap(world) {
1143
- if (!_worldBase) {
1144
- _worldBase = {
1145
- type: "FeatureCollection",
1146
- features: world.features.filter((f4) => f4?.geometry && f4.geometry.type !== "Point")
1147
- };
1148
- }
1149
- return _worldBase;
1150
- }
1151
- function northAmerica(world) {
1152
- if (!_na) {
1153
- _na = {
1154
- type: "FeatureCollection",
1155
- features: world.features.filter((f4) => NA_ISO3.has(f4?.id) && f4?.geometry && f4.geometry.type !== "Point").map((f4) => clipFeatureToLat(f4, NA_LAT_MAX)).filter((f4) => f4 !== null)
1156
- };
1157
- }
1158
- return _na;
1159
- }
1160
- function fromAssets(key) {
1161
- const asset = geoAssetFor(key);
1162
- if (!asset) return void 0;
1163
- const geo = byAsset.get(asset);
1164
- if (!geo) return void 0;
1165
- if (key === "north-america") return northAmerica(geo);
1166
- if (key === "world") return worldBasemap(geo);
1167
- return geo;
1168
- }
1169
- async function loadGeo(geoKind) {
1170
- if (!geoKind) return void 0;
1171
- const key = geoKind.toLowerCase();
1172
- const already = geoFromCache(key);
1173
- if (already) return already;
1174
- const asset = geoAssetFor(key);
1175
- if (!asset) return void 0;
1176
- if (asset === "us-states") {
1177
- byAsset.set(asset, (await import("./geoUsStates.generated-JEFM6OHO.mjs")).US_STATES);
1178
- } else if (asset === "us-zip3") {
1179
- byAsset.set(asset, (await import("./geoUsZip3.generated-VSWL7D6F.mjs")).US_ZIP3);
1180
- } else {
1181
- byAsset.set(asset, (await import("./geoWorld110m.generated-TD2TA7S7.mjs")).WORLD_110M);
1182
- }
1183
- return fromAssets(key);
1184
- }
1185
- function geoFromCache(geoKind) {
1186
- if (!geoKind) return void 0;
1187
- const key = geoKind.toLowerCase();
1188
- return byKind.get(key) ?? fromAssets(key);
1189
- }
1190
- function registerGeo(geoKind, geo) {
1191
- if (geoKind && geo) byKind.set(geoKind.toLowerCase(), geo);
1192
- }
1193
- function registerGeoAsset(asset, geo) {
1194
- if (!asset || !geo) return;
1195
- byAsset.set(asset, geo);
1196
- if (asset === "world") {
1197
- _na = void 0;
1198
- _worldBase = void 0;
1199
- }
1200
- }
1201
- function clearGeoCache() {
1202
- byKind.clear();
1203
- byAsset.clear();
1204
- _na = void 0;
1205
- _worldBase = void 0;
1206
- }
1207
-
1208
432
  // ../shape-core/dist/chunk-5MRZID36.mjs
1209
433
  /*! @bicharts/shape-core — Apache-2.0. Bundled reference data: GeoNames (https://www.geonames.org/) CC BY 4.0; US Census/TIGER (public domain). Full text: NOTICE in this package. */
1210
434
  var a = "6th of October City|giza|EG|31.05|29.82|368|W|,A Coruna|galicia|ES|-8.4|43.37|250|W|corunha;la coruna;coruna;la corogne;the groyne,Aachen|north rhine westphalia|DE|6.08|50.78|265|W|aix la chapelle;aquisgrao;aken;akwizgran;aquisgrana;aquisgrano;aquisgran;cachy;kreisfreie stadt aachen,Aalborg|north denmark|DK|9.92|57.05|142|W|alborg,Aba|abia state|NG|7.37|5.11|1160|W|,Abadan|khuzestan|IR|48.3|30.34|231|W|,Abaetetuba|para|BR|-48.88|-1.72|158|W|,Abakaliki|ebonyi state|NG|8.11|6.32|134|W|,Abakan|khakasiya republic|RU|91.43|53.72|184|W|,Abasolo|MX11|MX|-101.53|20.45|27|N|,Abbotsford|BC|CA|-122.25|49.06|141|NW|,Abbottabad|khyber pakhtunkhwa|PK|73.21|34.15|275|W|,Abeche|ouadai|TD|20.83|13.83|139|W|,Abengourou|comoe district|CI|-3.5|6.73|130|W|,Abeokuta|ogun state|NG|3.35|7.16|735|W|,Aberdeen|scotland|GB|-2.1|57.14|198|W|,Aberdeen|southern district|HK|114.15|22.25|157|W|aberdeen harbour,Aberdeen|SD|US|-98.49|45.46|28|N|,Abha|asir region|SA|42.51|18.22|210|W|,Abidjan|abidjan autonomous district|CI|-4|5.35|6321|W|abican;abidzan;abiyan,Abiko|chiba|JP|140.02|35.87|131|W|,Abilene|TX|US|-99.73|32.45|125|N|,Abington|PA|US|-75.12|40.12|55|N|abington township;municipio de abington,Abobo|abidjan autonomous district|CI|-4.02|5.42|1340|W|,Abohar|punjab|IN|74.2|30.14|145|W|,Abomey-Calavi|atlantique|BJ|2.36|6.45|385|W|,Abu al-Kahsib|basra|IQ|47.88|30.44|357|W|,Abu Dhabi|abu dhabi|AE|54.4|24.45|1807|W|abou dabi;abu dabi;abu zabi,Abu Ghurayb|baghdad|IQ|44.18|33.31|900|W|abou ghraib;abu ghraib;abu ghuraib,Abu Kabir|sharqia|EG|31.67|30.73|154|W|,Abuja|fct|NG|7.5|9.06|2690|W|abudza;abuya,Acambaro|MX11|MX|-100.72|20.03|57|N|,Acapulco de Juarez|MX12|MX|-99.91|16.85|658|NW|acapulco,Acarigua|portuguesa|VE|-69.2|9.55|188|W|,Acatzingo|MX21|MX|-97.78|18.98|25|N|san juan acatzingo,Acayucan|MX30|MX|-94.91|17.95|50|N|,Accra|greater accra|GH|-0.2|5.56|1963|W|acra;akra,Acheng|heilongjiang|CN|126.95|45.55|144|W|,Actopan|MX13|MX|-98.94|20.27|32|N|,Ad-Damazin|blue nile|SD|34.36|11.79|186|W|damazin,Ad-Dawahy|port said|EG|32.28|31.24|148|W|al dawahi,Adachi|tokyo|JP|139.81|35.76|695|W|adachi city,Adana|adana|TR|35.33|36.99|1816|W|antioch on sarus,Adapazari|sakarya|TR|30.4|40.78|286|W|,Addis Ababa|addis ababa|ET|38.75|9.02|3860|W|addis abeba;adis abeba,Addison|IL|US|-87.99|41.93|37|N|,Adelaide|south australia|AU|138.6|-34.93|1469|W|adelaida;adelajda,Adelanto|CA|US|-117.41|34.58|33|N|,Aden|aden|YE|45.04|12.78|1079|W|adem,Adiwerna|central java|ID|109.13|-6.94|134|W|,Adiyaman|adiyaman province|TR|38.28|37.76|290|W|adiyamanska,Admiralteisky|st petersburg|RU|30.3|59.92|157|W|,Ado-Ekiti|ekiti state|NG|5.22|7.62|435|W|,Adoni|andhra pradesh|IN|77.27|15.63|184|W|,Afyonkarahisar|afyonkarahisar province|TR|30.54|38.76|251|W|afyon;afyonkarahissar,Agadez|agadez|NE|7.99|16.97|149|W|agades,Agadir|souss massa|MA|-9.6|30.42|698|W|santa cruz,Agartala|tripura|IN|91.28|23.84|400|W|,Agawam|MA|US|-72.61|42.07|28|N|,Agege|lagos|NG|3.33|6.62|683|W|,Ageo|saitama|JP|139.61|35.97|226|W|,Agincourt North|ON|CA|-79.28|43.8|29|N|,Agra|uttar pradesh|IN|78.02|27.18|1430|W|,Agua Caliente|CA|US|-122.49|38.32|27|N|,Agua Dulce|MX30|MX|-94.15|18.14|36|N|,Agua Prieta|MX26|MX|-109.54|31.32|77|N|,Aguas Lindas de Goias|goias|BR|-48.28|-15.76|245|W|,Aguascalientes|MX01|MX|-102.28|21.88|722|NW|aguascalientes city;aguascalientes by,Ahilyanagar|maharashtra|IN|74.74|19.09|367|W|,Ahmadpur East|punjab|PK|71.26|29.14|196|W|ahmedpur east;ahmedpur sharqia;ahmedpur sarki,Ahmedabad|gujarat|IN|72.59|23.03|6357|W|ahmadabad,Ahuntsic-Cartierville|QC|CA|-73.67|45.57|135|NW|,Ahvaz|khuzestan|IR|48.68|31.32|841|W|ahwas;ahwaz,Ahwatukee Foothills|AZ|US|-111.98|33.34|83|N|,Aihara|kanagawa|JP|139.32|35.6|725|W|,Aihui|heilongjiang|CN|127.48|49.98|192|W|,Aiken|SC|US|-81.72|33.56|30|N|,Airdrie|AB|CA|-114.04|51.3|90|N|,Airport|HI|US|-157.93|21.34|28|N|,Ait Melloul|souss massa|MA|-9.5|30.34|187|W|,Aix-en-Provence|provence alpes cote d azur|FR|5.45|43.53|146|W|,Aizawl|mizoram|IN|92.72|23.73|293|W|aijal;aizol;aizwal,Ajalpan|MX21|MX|-97.26|18.38|28|N|,Ajax|ON|CA|-79.03|43.85|119|N|,Ajdabiya|al wahat|LY|20.23|30.76|131|W|adjdabia;adschdabiya;adzdabija;adzedabija;ajdabiyah;ecdebiye,Ajegunle|lagos|NG|3.33|6.45|550|W|,Ajman|ajman|AE|55.48|25.4|490|W|acman;adschman;adzman;ajman city;ajma;ujman,Ajmer|rajasthan|IN|74.64|26.45|542|W|adzmer,Akashi|hyogo|JP|135.01|34.66|303|W|,Akhmim|sohag|EG|31.75|26.56|151|W|,Akita|akita|JP|140.12|39.72|307|W|akita shi,Akola|maharashtra|IN|77|20.71|428|W|,Akowonjo|lagos|NG|3.31|6.61|308|W|,Akron|OH|US|-81.52|41.08|197|NW|,Aksaray|aksaray|TR|34.03|38.37|327|W|,Aktau|mangystau|KZ|51.17|43.66|147|W|aktaou;aktav;aqtau;aqtaw;shevchenko,Aktobe|aktobe|KZ|57.21|50.28|500|W|aktioube;aktiube;aqtobe;aktyubinsk,Akure|ondo state|NG|5.19|7.25|730|W|,Al Ahmadi|al ahmadi|KW|48.08|29.08|637|W|el ahmedi,Al Ain City|abu dhabi|AE|55.76|24.19|846|W|al ain;al ajn;al ayn,Al Ajaylat|an nuqat al khams|LY|12.38|32.76|130|W|,Al 'Amarah|maysan|IQ|47.14|31.84|323|W|amarah;amara,Al 'Ashir min Ramadan|sharqia|EG|31.75|30.3|246|W|cidade do ramadao;citta del decimo ramadan,Al Bab|aleppo|SY|37.52|36.37|130|W|,Al Basrah al Qadimah|basra|IQ|47.82|30.5|2015|W|,Al Diwaniyah|al qadisiyah|IQ|44.93|31.99|318|W|ad diwaniyah;diwaniya;diwaniyya;divanija;ed divaniye,Al Fallujah|anbar|IQ|43.79|33.35|190|W|al falludza;al falluja;falloujah;falludscha;falluja;fallujah;falludza;faluja;faluya;felluce,Al Fayyum|faiyum|EG|30.84|29.31|519|W|el fayum;faijum;fajum;fayoum;fayyum;fayun,Al Hasakah|al hasakah|SY|40.75|36.5|422|W|al hasaka;hasaka;hasakah;haseke;hassake,Al Hawamidiyah|giza|EG|31.25|29.9|155|W|,Al Hillah|babil|IQ|44.42|32.46|455|W|hillah;al hilla;el hille;hilla,Al Hindiyah|karbala|IQ|44.22|32.54|139|W|,Al Hoceima|tanger tetouan al hoceima|MA|-3.94|35.25|395|W|al husajma;alhucemas;villa alhucemas;villa sanjurjo,Al Hudaydah|al hudaydah|YE|42.95|14.8|734|W|el hudeyda,Al Hufuf|eastern province|SA|49.59|25.36|293|W|hofuf;al hofuf;hufuf,Al Jubayl|eastern province|SA|49.62|27.02|237|W|jubail;al jubail;al dschubail;al dzubajl;el cubeyl,Al-Junaynah|western darfur|SD|22.45|13.45|162|W|geneina;al dschunaina;al dzunajna;el geneina,Al Kharj|riyadh region|SA|47.33|24.16|425|W|al khardj;el harc,Al Khums|al marqab|LY|14.26|32.65|201|W|al jums;al chums;el hums;qabilat al khums,Al Khusus|qalyubia|EG|31.32|30.15|488|W|,Al-Kut|wasit|IQ|45.82|32.51|315|W|kut;al koet,Al Madinah|basra|IQ|47.27|30.96|255|W|,Al Mahallah al Kubra|gharbia|EG|31.17|30.97|592|W|,Al Mahmudiyah|baghdad|IQ|44.37|33.06|350|W|,Al Mansurah|dakahlia|EG|31.38|31.04|621|W|al mansura;el mansura;mansourah;mansura,Al Matariyah|dakahlia|EG|32.03|31.18|162|W|,Al Mawsil al Jadidah|nineveh|IQ|43.11|36.33|2065|W|,Al'met'yevsk|tatarstan republic|RU|52.32|54.9|140|W|almetjevsk;almetjewsk,Al Miqdadiyah|diyala|IQ|44.94|33.98|155|W|,Al Mubarraz|eastern province|SA|49.59|25.41|290|W|,Al Muharraq|muharraq|BH|50.61|26.26|176|W|al muharrak;muharraq,Al Qadarif|al qadarif|SD|35.38|14.03|363|W|gedaref;al kadarif;el gadarif;gadaref;gadarif,Al Qahirah al Jadidah||EG|31.44|30.04|313|W|,Al Qamishli|al hasakah|SY|41.23|37.05|184|W|kamischli;kamishli;kamishlie;kamisli;qamichli;qamischli,Al Qurnah|basra|IQ|47.43|31.02|134|W|,Al-'Ubur|qalyubia|EG|31.48|30.23|138|W|,Alabaster|AL|US|-86.82|33.24|32|N|,Alafaya|FL|US|-81.21|28.56|78|N|,Alagoinhas|bahia|BR|-38.42|-12.14|161|W|,Alameda|CA|US|-122.26|37.77|78|N|,Alamo|MX30|MX|-97.68|20.91|25|N|,Alamogordo|NM|US|-105.96|32.9|30|N|,Alandur|tamil nadu|IN|80.21|13|164|W|,Alanya|antalya|TR|32|36.54|364|W|,Alappuzha|kerala|IN|76.33|9.49|240|W|alleppey,Albacete|castille la mancha|ES|-1.86|38.99|173|W|,Albany|NY|US|-73.76|42.65|101|N|,Albany|GA|US|-84.16|31.58|74|N|albania,Albany|OR|US|-123.11|44.64|52|N|,Albany Park|IL|US|-87.72|41.97|52|N|,Albuquerque|NM|US|-106.65|35.08|564|NW|alburquerque;methville,Alcala de Henares|madrid|ES|-3.36|40.48|193|W|compluto,Alcorcon|madrid|ES|-3.82|40.35|172|W|,Aleppo|aleppo|SY|37.16|36.2|2098|W|alep;alepo;halep,Alexandra|gauteng|ZA|28.1|-26.11|179|W|,Alexandria|alexandria|EG|29.92|31.2|5263|W|alejandria;aleksandria;alessandria d egitto;alexandrie;iskandariyah;iskenderiye,Alexandria|VA|US|-77.05|38.8|159|NW|,Alexandria|LA|US|-92.45|31.31|47|N|,Aley|mount lebanon|LB|35.6|33.81|130|W|alayh,Algiers|algiers|DZ|3.09|36.73|2364|W|alger;algeri;algier;aljir;alzir;argel;cezayir,Algonquin|IL|US|-88.29|42.17|30|N|,Alhambra|AZ|US|-112.13|33.5|127|N|,Alhambra|CA|US|-118.13|34.1|85|N|,Aliamanu / Salt Lakes / Foster Village|HI|US|-157.92|21.36|38|N|salt lake,Aliayabiagba|lagos|NG|3.33|6.45|228|W|,Alicante|valencia|ES|-0.48|38.35|348|W|alacante,Alief|TX|US|-95.6|29.71|98|N|,Aligarh|uttar pradesh|IN|78.07|27.88|753|W|,Alimosho|lagos|NG|3.3|6.61|308|W|,Aliso Viejo|CA|US|-117.73|33.57|50|N|,Allapattah|FL|US|-80.22|25.81|54|N|,Allen|TX|US|-96.67|33.1|98|N|,Allen Park|MI|US|-83.21|42.26|27|N|,Allentown|PA|US|-75.49|40.61|120|N|,Allston|MA|US|-71.13|42.36|28|N|,Alma|QC|CA|-71.65|48.55|29|N|,Almaty|almaty|KZ|76.91|43.25|1977|W|almati;alma ata;werny,Almendares|havana|CU|-82.42|23.11|240|W|,Almere Stad|flevoland|NL|5.21|52.37|176|W|almere,Almeria|andalusia|ES|-2.46|36.84|196|W|,Aloha|OR|US|-122.87|45.49|49|N|,Alor Setar|kedah|MY|100.36|6.12|417|W|alor star,Alpharetta|GA|US|-84.29|34.08|63|N|,Altadena|CA|US|-118.13|34.19|42|N|,Altamira|para|BR|-52.21|-3.2|138|W|,Altamira|MX28|MX|-97.94|22.39|59|N|,Altamonte Springs|FL|US|-81.37|28.66|43|N|,Alto Barinas|barinas|VE|-70.23|8.59|284|W|,Alto Hospicio|tarapaca|CL|-70.1|-20.27|142|W|,Alton|IL|US|-90.18|38.89|27|N|,Altona|hamburg|DE|9.93|53.55|250|W|arrondissement daltona;bezirk altona;distretto di altona;hamburgo altona,Altoona|PA|US|-78.39|40.52|45|N|,Alvaro Obregon|MX09|MX|-99.2|19.36|726|NW|,Alvin|TX|US|-95.24|29.42|25|N|,Alvorada|rio grande do sul|BR|-51.08|-30|187|W|,Alwar|rajasthan|IN|76.62|27.56|322|W|,Amadora|lisbon|PT|-9.23|38.75|178|W|,Amagasaki|hyogo|JP|135.42|34.72|459|W|,Amarapura|mandalay region|MM|96.05|21.91|237|W|,Amarillo|TX|US|-101.83|35.22|198|NW|,Ambala|haryana|IN|76.8|30.36|195|W|,Ambarnath|maharashtra|IN|73.17|19.2|253|W|,Ambato|tungurahua province|EC|-78.62|-1.25|387|W|,Ambattur|tamil nadu|IN|80.16|13.1|466|W|,Ambon|maluku|ID|128.18|-3.7|347|W|ambon city;kota ambon,Ameca|MX14|MX|-104.05|20.55|36|N|municipio ameca,Amecameca|MX15|MX|-98.77|19.12|31|N|amecameca de juarez,American Fork|UT|US|-111.8|40.38|28|N|,Americana|sao paulo|BR|-47.33|-22.74|246|W|,Amersfoort|utrecht|NL|5.39|52.16|139|W|,Ames|IA|US|-93.62|42.03|65|N|,Amherst|NY|US|-78.8|42.98|122|N|,Amherst|MA|US|-72.52|42.37|39|N|,Amiens|hauts de france|FR|2.3|49.9|143|W|,Amman|amman|JO|35.95|31.96|1275|W|aman;ama,Amol|mazandaran|IR|52.35|36.47|237|W|,Amozoc de Mota|MX21|MX|-98.05|19.05|95|N|amozoc,Amravati|maharashtra|IN|77.75|20.93|647|W|,Amritsar|punjab|IN|74.88|31.62|1159|W|,Amroha|uttar pradesh|IN|78.47|28.9|176|W|,Amsterdam|north holland|NL|4.89|52.37|741|W|amesterda;amesterdao;amseutereudam;amsterda;amsterodam;amsut erudam;amusuterudamu;aemstelredamme;aemsterdam,An Nhon|gia lai|VN|109.11|13.89|308|W|,Anaco|anzoategui|VE|-64.46|9.43|139|W|,Anaheim|CA|US|-117.91|33.84|350|NW|,Anand|gujarat|IN|72.96|22.55|209|W|,Ananindeua|para|BR|-48.37|-1.37|535|W|,Anantapur|andhra pradesh|IN|77.61|14.68|267|W|,Anantnag|jammu and kashmir|IN|75.15|33.73|150|W|,Anapolis|goias|BR|-48.95|-16.33|319|W|,Anbu|guangdong|CN|116.68|23.45|162|W|,Ancaster|ON|CA|-79.99|43.22|40|N|,Anchorage|AK|US|-149.9|61.22|289|NW|,Anda|heilongjiang|CN|125.3|46.45|181|W|,Anderlecht|brussels capital|BE|4.31|50.84|160|W|,Anderson|IN|US|-85.68|40.11|55|N|,Anderson|SC|US|-82.65|34.5|27|N|,Andijon|andijan region|UZ|72.35|40.78|747|W|andican;andijan;andisjan;andizan;andizjan,Andimeshk|khuzestan|IR|48.35|32.46|135|W|,Andong|gyeongsangbuk do|KR|128.72|36.57|153|W|,Andover|MN|US|-93.29|45.23|32|N|,Ang Mo Kio New Town||SG|103.84|1.38|159|W|,Angarsk|irkutsk oblast|RU|103.91|52.56|243|W|,Angeles City|central luzon|PH|120.58|15.15|483|W|,Angers|pays de la loire|FR|-0.55|47.47|168|W|,Angono|calabarzon|PH|121.15|14.53|134|W|,Angra dos Reis|rio de janeiro|BR|-44.32|-23.01|179|W|,Angren|tashkent region|UZ|70.14|41.02|191|W|,Anjo|aichi|JP|137.08|34.96|188|W|,Ankang|shaanxi|CN|109.02|32.68|870|W|,Ankara|ankara|TR|32.85|39.92|3517|W|ancara;angora,Ankeny|IA|US|-93.61|41.73|56|N|,Ann Arbor|MI|US|-83.74|42.28|117|N|,Annaba|annaba|DZ|7.77|36.9|342|W|bone,Annandale|VA|US|-77.2|38.83|41|N|,Annapolis|MD|US|-76.49|38.98|40|N|,Annex|ON|CA|-79.4|43.67|30|N|,Anqing|anhui|CN|117.05|30.51|804|W|an khanh;an cching;anking,Anqiu|shandong|CN|119.19|36.43|364|W|,Ansan-si|gyeonggi do|KR|126.82|37.32|623|W|ansan,Anshan|liaoning|CN|122.99|41.12|1450|W|an son;an san,Anshun|guizhou|CN|105.93|26.25|765|W|an sun,Antakya|hatay|TR|36.16|36.21|399|W|antioche;antiochia am orontes;antiochia di siria;antiochia vid orontes;antiochie;antiokia;antioquia;antioch;teopolis,Antalya|antalya|TR|30.7|36.91|1335|W|antalia,Antananarivo|analamanga|MG|47.54|-18.91|1349|W|antananarywa;tananarive,Antelope|CA|US|-121.33|38.71|45|N|,Antioch|CA|US|-121.81|38|110|N|,Antipolo|calabarzon|PH|121.12|14.63|913|W|antipolo city,Antofagasta|antofagasta|CL|-70.4|-23.65|401|W|,Antsirabe|vakinankaratra|MG|47.03|-19.87|260|W|,Antsiranana|diana|MG|49.29|-12.32|136|W|diego suarez,Antwerp|flanders|BE|4.4|51.22|529|W|amberes;antuerpia;antverpy;antwerpen;antwerpia;anvers;anversa;kota antwerpen,Anyama|abidjan autonomous district|CI|-4.05|5.49|133|W|,Anyang|henan|CN|114.38|36.1|1146|W|an duong;an jang,Anyang-si|gyeonggi do|KR|126.93|37.39|595|W|anyang,Aomori|aomori|JP|140.73|40.82|298|W|,Apache Junction|AZ|US|-111.55|33.42|38|N|,Apan|MX13|MX|-98.45|19.71|26|N|,Aparecida de Goiania|goias|BR|-49.24|-16.82|527|W|,Apaseo el Alto|MX11|MX|-100.62|20.46|27|N|,Apaseo el Grande|MX11|MX|-100.69|20.55|26|N|,Apatzingan|MX16|MX|-102.36|19.09|102|N|,Apeldoorn|gelderland|NL|5.97|52.21|136|W|,Apex|NC|US|-78.85|35.73|45|N|,Apizaco|MX29|MX|-98.14|19.41|49|N|ciudad de apizaco,Apopka|FL|US|-81.51|28.68|48|N|,Apple Valley|CA|US|-117.19|34.5|72|N|,Apple Valley|MN|US|-93.22|44.73|51|N|,Appleton|WI|US|-88.42|44.26|74|N|,Apucarana|parana|BR|-51.46|-23.55|134|W|,Aqsu|xinjiang|CN|80.28|41.18|535|W|aksou;aksu;ciudad de aksu,Ar Ramtha|irbid|JO|36.01|32.56|155|W|,Ar Raqqah|raqqa|SY|39.01|35.95|531|W|raqqa;rakka,Ar Rayyan|baladiyat ar rayyan|QA|51.42|25.29|272|W|al rayyan,Arabi|somali|ET|42.49|9.96|148|W|,Aracaju|sergipe|BR|-37.07|-10.91|664|W|,Aracatuba|sao paulo|BR|-50.43|-21.21|208|W|,Arad|arad county|RO|21.32|46.18|169|W|,Araguaina|tocantins|BR|-48.21|-7.19|183|W|,Arak|markazi|IR|49.7|34.09|503|W|,Arakawa|tokyo|JP|139.78|35.74|216|W|arakawa city,Arandas|MX14|MX|-102.35|20.71|52|N|,Arapiraca|alagoas|BR|-36.66|-9.75|243|W|,Arar|northern borders region|SA|41.04|30.98|148|W|,Araraquara|sao paulo|BR|-48.18|-21.79|168|W|,Araras|sao paulo|BR|-47.38|-22.36|135|W|,Araruama|rio de janeiro|BR|-42.34|-22.87|137|W|,Araucaria|parana|BR|-49.41|-25.59|162|W|,Araure|portuguesa|VE|-69.24|9.58|181|W|,Arba Minch|south ethiopia regional state|ET|37.55|6.03|201|W|,Arcadia|CA|US|-118.04|34.14|58|N|,Arcahaie|ouest|HT|-72.51|18.77|130|W|,Archway|england|GB|-0.13|51.57|215|W|,Arcola East|SK|CA|-104.54|50.43|33|N|,Ardabil|ardabil province|IR|48.29|38.25|410|W|ardebil;erdebil,Arden-Arcade|CA|US|-121.38|38.6|92|N|,Ardmore|OK|US|-97.14|34.17|25|N|,Arequipa|arequipa|PE|-71.54|-16.4|1195|W|,Arganzuela|madrid|ES|-3.7|40.4|148|W|,Arhus|central jutland|DK|10.21|56.16|285|W|aarhus,Arica|arica y parinacota region|CL|-70.3|-18.48|241|W|,Arif Wala|balochistan|PK|66.3|26.32|157|W|,Arifwala|punjab|PK|73.07|30.29|854|W|,Arish|north sinai|EG|33.8|31.13|199|W|al arisch;al arish;al arisz;alarixe;aris;el arish;el aris;el arich;city of cut noses,Arkhangel'sk|arkhangelskaya|RU|40.55|64.55|349|W|arkhangelsk;arcangelo;archangelsk;arcangel;arkangeli,Arlington|TX|US|-97.11|32.74|388|NW|,Arlington|VA|US|-77.1|38.88|207|NW|,Arlington|MA|US|-71.16|42.42|42|N|,Arlington Heights|IL|US|-87.98|42.09|75|N|,Armavir|krasnodar krai|RU|41.11|45|199|W|armawir,Armenia|quindio department|CO|-75.67|4.54|304|W|armenien;armenie;ermenistan,Arnavutkoey|istanbul|TR|28.74|41.18|198|W|arnavutkoy,Arnhem|gelderland|NL|5.91|51.98|162|W|arnheim;arnhemia,Arrah|bihar|IN|84.66|25.56|261|W|,Arroyo Naranjo|havana|CU|-82.38|23.04|210|W|,Artux|xinjiang|CN|76.18|39.71|285|W|,Arusha|arusha|TZ|36.68|-3.37|617|W|,Arvada|CO|US|-105.09|39.8|115|N|,As Salimiyah|hawalli|KW|48.08|29.33|147|W|,As Samawah|muthanna|IQ|45.29|31.33|152|W|samawa;samawah;semave,Asahikawa|hokkaido|JP|142.36|43.77|333|W|,Asaka|saitama|JP|139.6|35.8|141|W|,Asansol|west bengal|IN|86.98|23.68|504|W|,Asela|oromiya|ET|39.13|7.95|139|W|,Ash Sharqat|salah ad din|IQ|43.23|35.52|160|W|,Ash Shatrah|dhi qar|IQ|46.17|31.41|182|W|,Ashaiman|greater accra|GH|-0.03|5.7|190|W|ashiaman,Ashburn|VA|US|-77.49|39.04|43|N|,Ashburn|IL|US|-87.71|41.75|42|N|,Ashdod|southern district|IL|34.65|31.79|226|W|aschdod;asdod;asdode;ashdod yam;asjdod;aszdod,Asheboro|NC|US|-79.81|35.71|26|N|,Asheville|NC|US|-82.55|35.6|95|N|,Ashgabat|ashgabat|TM|58.38|37.95|1030|W|achgabat;aschgabat;asgabate;ashkabad;ashkhabad;asjabad;asjchabad;asjkhabad;aszchabad;asgabat;askabat;aschabad,Ashikaga|tochigi|JP|139.45|36.33|144|W|,Ashkelon|southern district|IL|34.57|31.67|144|W|ashqelon;ashquelon,Ashmont|MA|US|-71.07|42.28|30|N|,Ashuganj City|chittagong|BD|91.01|24.04|210|W|,Asmara|maekel|ER|38.93|15.34|563|W|,Aspen Hill|MD|US|-77.07|39.08|48|N|,Assiut|asyut|EG|31.18|27.18|528|W|asyut,Astana|astana|KZ|71.45|51.18|1544|W|akmolinsk;noer soeltan;nour soultan;nur sultan;tselinograd,Astanajapura|west java|ID|108.63|-6.8|148|W|,Astoria|NY|US|-73.93|40.77|150|NW|,Astrakhan|astrakhan oblast|RU|48.04|46.35|533|W|astrachan;astracan;astraca;astrahan,Asuncion|asuncion|PY|-57.65|-25.29|1482|W|assuncao,Aswan|aswan|EG|32.9|24.09|379|W|assouan;assuan;assuao;asuan;asvan,Atani|anambra|NG|6.75|6.01|230|W|,Atascadero|CA|US|-120.67|35.49|29|N|,Atascocita|TX|US|-95.18|30|65|N|,Atasehir|istanbul|TR|29.12|40.98|361|W|,Athens|attica|GR|23.73|37.98|664|W|ateena;aten;atena;atenas;atene;ateny;athen;athena;athene;athenes;atheny;athinai;atina;kota athena,Athens|GA|US|-83.38|33.96|127|N|,Athens|OH|US|-82.1|39.33|25|N|,Athlone|western cape|ZA|18.5|-33.97|237|W|,Atibaia|sao paulo|BR|-46.55|-23.12|158|W|,Atlanta|GA|US|-84.39|33.75|510|NW|,Atlantic City|NJ|US|-74.42|39.36|39|N|kota atlantic,Atlixco|MX21|MX|-98.44|18.91|86|N|,Atotonilco el Alto|MX14|MX|-102.51|20.55|26|N|,Atsiaman|greater accra|GH|-0.33|5.7|202|W|achiaman;ashaiman,Atsugi|kanagawa|JP|139.37|35.44|223|W|acugi,Attleboro|MA|US|-71.29|41.94|44|N|,Attock City|punjab|PK|72.36|33.77|141|W|,Atwater|CA|US|-120.61|37.35|29|N|,Atyrau|atyrau oblisi|KZ|51.88|47.1|290|W|atyraou;atyraw;atirau;atirav;atiraw,Auburn|WA|US|-122.23|47.31|77|N|,Auburn|AL|US|-85.48|32.61|62|N|,Auburn|NY|US|-76.57|42.93|26|N|,Auburn Gresham|IL|US|-87.65|41.74|45|N|,Auckland|auckland|NZ|174.76|-36.85|1547|W|,Augsburg|bavaria|DE|10.9|48.37|301|W|augsbourg;augsburg innenstadt;augsburgo;augusta,Augusta|GA|US|-81.97|33.47|43|N|,Aurangabad|maharashtra|IN|75.34|19.88|1175|W|,Aurora|CO|US|-104.83|39.73|359|NW|,Aurora|IL|US|-88.32|41.76|200|NW|,Aurora|ON|CA|-79.47|44|55|N|,Austin|TX|US|-97.74|30.27|974|NW|,Austintown|OH|US|-80.76|41.1|29|N|,Autlan de Navarro|MX14|MX|-104.37|19.77|45|N|,Avadi|tamil nadu|IN|80.11|13.11|345|W|,Avellaneda|buenos aires|AR|-58.37|-34.66|367|W|,Aventura|FL|US|-80.14|25.96|37|N|,Avondale|AZ|US|-112.35|33.44|80|N|,Avondale|IL|US|-87.71|41.94|39|N|,Avtozavodskyi|poltava|UA|33.43|49.1|157|W|avtozavodskyi rayon;avtozavodskyy;avtozavodskyy rayon,Awasa|sidama region|ET|38.48|7.06|422|W|awassa,Awka|anambra|NG|7.07|6.21|167|W|avka,Ayacucho|ayacucho|PE|-74.22|-13.16|140|W|,Aydin|aydin|TR|27.84|37.85|163|W|tralleis;tralli,Aylmer|QC|CA|-75.81|45.4|56|N|,Az Zawiyah|az zawiyah|LY|12.73|32.76|200|W|ez zaviye;zawiyah,Az-Zuhur|port said|EG|32.26|31.27|266|W|al zohur,Azcapotzalco|MX09|MX|-99.19|19.49|414|NW|,Azusa|CA|US|-117.91|34.13|49|N|,Ba Dinh|hanoi|VN|105.83|21.04|221|W|,Ba Vi|hanoi|VN|105.38|21.08|282|W|,Bab Ezzouar|algiers|DZ|3.18|36.73|275|W|,Babol|mazandaran|IR|52.68|36.55|202|W|,Bac Giang|bac ninh|VN|106.19|21.27|450|W|,Bac Lieu|ca mau|VN|105.73|9.29|156|W|,Bac Ninh|bac ninh|VN|106.08|21.19|287|W|,Bac Tu Liem|hanoi|VN|105.75|21.07|340|W|,Bacau|bacau county|RO|26.91|46.57|136|W|,Bachuan|chongqing|CN|106.05|29.85|208|W|,Back Mountain|PA|US|-76|41.34|26|N|,Bacolod City|western visayas|PH|122.95|10.67|454|W|bacolod,Bacoor|calabarzon|PH|120.94|14.46|356|W|,Badajoz|extremadura|ES|-6.97|38.88|150|W|badajos,Badalona|catalonia|ES|2.25|41.45|217|W|,Bade|taiwan|TW|121.28|24.93|209|W|bade district,Badlapur|maharashtra|IN|73.27|19.16|174|W|,Bafoussam|west|CM|10.42|5.48|373|W|bafousam;bafusam;befoussam,Bagcilar|istanbul|TR|28.86|41.04|740|W|,Bagerhat|khulna division|BD|89.79|22.66|266|W|,Baghdad|baghdad|IQ|44.4|33.34|7216|W|bagdad;bagda;bagdat,Bago|bago region|MM|96.48|17.34|244|W|pegu;pegou,Bago City|western visayas|PH|122.83|10.53|192|W|bago,Bagong Silang|national capital region|PH|121.04|14.78|261|W|,Baguio|cordillera|PH|120.59|16.42|272|W|baguio city;kota baguio,Bahadurgarh|haryana|IN|76.94|28.69|170|W|,Baharampur|west bengal|IN|88.25|24.1|180|W|,Baharkah|erbil|IQ|44.04|36.32|130|W|,Bahawalnagar|punjab|PK|73.25|30|241|W|bahawalpur,Bahawalpur|punjab|PK|71.68|29.4|903|W|,Bahcelievler|istanbul|TR|28.86|41|576|W|,Bahia Blanca|buenos aires|AR|-62.27|-38.72|299|W|,Bahir Dar|amhara|ET|37.39|11.59|350|W|bahar dar;baher dar;bahyr dar,Bahraigh|uttar pradesh|IN|81.59|27.57|182|W|bahraich,Baicheng|jilin|CN|122.83|45.62|316|W|paj ccheng,Baise|guangxi|CN|106.63|23.89|686|W|baise city,Baishan|jilin|CN|126.42|41.94|183|W|paj san,Baiyin|gansu|CN|104.17|36.55|294|W|paj jin,Bakersfield|CA|US|-119.02|35.37|373|NW|,Baku|baki|AZ|49.89|40.38|2351|W|bacu;bakoe;bakou,Balakovo|saratov oblast|RU|47.8|52.03|199|W|balakowo,Balashikha|moscow oblast|RU|37.95|55.79|150|W|balachikha;balaschicha;balasjicha;balasjikha;balasiha;balasicha;balaszycha,Balasore|odisha|IN|86.93|21.49|144|W|baleshwar;baleswar,Balbala|djibouti|DJ|43.11|11.56|554|W|,Balch Springs|TX|US|-96.62|32.73|25|N|,Balcon de la Lisa|havana|CU|-82.45|23.05|147|W|,Baldwin Park|CA|US|-117.96|34.09|77|N|,Bali|west bengal|IN|88.34|22.65|296|W|,Balikesir|balikesir|TR|27.89|39.65|238|W|,Balikpapan|east kalimantan|ID|116.83|-1.27|695|W|kota balikpapan,Baliuag|central luzon|PH|120.9|14.95|135|W|,Ballari|karnataka|IN|76.92|15.14|410|W|bellary,Ballwin|MO|US|-90.55|38.6|30|N|,Balneario Camboriu|santa catarina|BR|-48.63|-26.99|139|W|camboriu,Baltimore|MD|US|-76.61|39.29|585|NW|baltimora,Balurghat|west bengal|IN|88.78|25.22|153|W|,Balvanera|buenos aires f d|AR|-58.4|-34.61|152|W|,Bamako|bamako|ML|-7.98|12.61|4227|W|,Bamenda|north west|CM|10.15|5.96|420|W|,Ban Khlong Prawet|bangkok|TH|100.68|13.72|160|W|,Banan|chongqing|CN|106.54|29.38|508|W|,Banbury-Don Mills|ON|CA|-79.35|43.74|27|N|,Banda|uttar pradesh|IN|80.33|25.48|152|W|,Banda Aceh|aceh|ID|95.33|5.54|267|W|banda acheh;banda achem;banda atjeh;kota banda aceh,Bandar Abbas|hormozgan|IR|56.28|27.19|352|W|bandar e abbas;bender abbas;cambarao;gombroon;gumrun;port comorao,Bandar Bukit Raja|selangor|MY|101.43|3.09|146|W|,Bandar-e Mahshahr|khuzestan|IR|49.19|30.56|162|W|,Bandar Lampung|lampung|ID|105.26|-5.43|1166|W|bandarlampung;kota bandar lampung,Bandar Seri Alam|johor|MY|103.88|1.5|220|W|seri alam city,Bandar Sunway|selangor|MY|101.61|3.07|200|W|sunway city,Bandar Tasik Puteri|selangor|MY|101.47|3.29|150|W|puteri lake city,Bandar Utama|kuala lumpur|MY|101.61|3.15|200|W|,Bandarban|chittagong|BD|92.22|22.2|495|W|,Bandundu Province|kwilu|CD|17.38|-3.32|202|W|bandundu;bandundu bolgesi;provincia de bandundu;provincia di bandundu;provinsi bandundu;provinz bandundu,Bandung|west java|ID|107.61|-6.92|2528|W|kota bandung,Bang Kapi|bangkok|TH|100.65|13.77|147|W|,Bang Khae|bangkok|TH|100.41|13.69|193|W|,Bang Khun Thian|bangkok|TH|100.43|13.66|165|W|,Bangkok|bangkok|TH|100.5|13.75|5104|W|banguecoque;bancoque,Bangor|ME|US|-68.77|44.8|32|N|,Bangui|bangui|CF|18.55|4.36|812|W|bangi,Banha|qalyubia|EG|31.18|30.46|182|W|,Bani Suwayf|beni suweif|EG|31.1|29.07|273|W|,Banja Luka|srpska|BA|17.21|44.78|221|W|bania luka;banya luka,Banjar|west java|ID|107.43|-7.2|209|W|,Banjaran|west java|ID|107.59|-7.05|164|W|,Banjarbaru|south kalimantan|ID|114.84|-3.44|293|W|bandjarbaru,Banjarmasin|south kalimantan|ID|114.59|-3.32|657|W|,Bankura|west bengal|IN|87.07|23.23|133|W|,Banning|CA|US|-116.88|33.93|30|N|,Bannu|khyber pakhtunkhwa|PK|70.6|32.99|1357|W|,Banqiao|taipei|TW|121.47|25.01|551|W|banqiao district;banciao;banciao district,Bao'an|guangdong|CN|113.88|22.55|4476|W|,Bao Loc|lam dong|VN|107.81|11.55|170|W|,Baoding|hebei|CN|115.46|38.87|2739|W|prefettura di baoding,Baoji|shaanxi|CN|107.24|34.37|1437|W|,Baoshan|shanghai|CN|121.49|31.41|2265|W|,Baoshan|yunnan|CN|99.16|25.12|935|W|pao san,Baotou|inner mongolia|CN|109.84|40.65|2150|W|pao tchou,Baqubah|diyala|IQ|44.61|33.75|152|W|bakouba;bakuba;baquba,Barakpur|west bengal|IN|88.36|22.77|148|W|,Baranagar|west bengal|IN|88.38|22.64|260|W|barahanagore,Baranovichi|brest|BY|26.01|53.13|170|W|baranavitsjy;baranawitschy;baranovitchi;baranovitsi;baranowicze,Barasat|west bengal|IN|88.48|22.72|298|W|,Barberton|OH|US|-81.61|41.01|26|N|,Barcarena|para|BR|-48.63|-1.51|139|W|,Barcelona|catalonia|ES|2.16|41.39|1686|W|barcellona;barcelone;barselona;la ciudad condal,Barcelona|anzoategui|VE|-64.69|10.14|815|W|barselona,Barddhaman|west bengal|IN|87.86|23.26|301|W|bardhaman;burdwan,Bareilly|uttar pradesh|IN|79.43|28.37|745|W|bareli,Bari|apulia|IT|16.87|41.12|316|W|,Bariadi|simiyu|TZ|33.98|-2.8|260|W|,Barinas|barinas|VE|-70.23|8.62|397|W|,Barishal|barisal division|BD|90.37|22.7|202|W|,Barking|england|GB|0.08|51.53|218|W|barking town,Barnaul|altai krai|RU|83.73|53.36|632|W|barnaoel;barnaoul,Barnstable|MA|US|-70.3|41.7|47|N|,Barquisimeto|lara|VE|-69.36|10.06|1240|W|,Barra da Tijuca|rio de janeiro|BR|-43.37|-23|421|W|kiki,Barra Mansa|rio de janeiro|BR|-44.17|-22.54|181|W|,Barrancabermeja|santander department|CO|-73.85|7.07|191|W|barracana bermeja,Barranquilla|atlantico|CO|-74.78|10.97|1206|W|barranquilha,Barreiras|bahia|BR|-44.99|-12.15|171|W|,Barrie|ON|CA|-79.67|44.4|147|NW|,Bartlesville|OK|US|-95.98|36.75|36|N|,Bartlett|TN|US|-89.87|35.2|58|N|,Bartlett|IL|US|-88.19|42|41|N|,Barueri|sao paulo|BR|-46.88|-23.51|316|W|tambore,Baruta|miranda|VE|-66.88|10.43|244|W|,Barysaw|minsk|BY|28.5|54.23|133|W|borisov,Basaksehir|istanbul|TR|28.79|41.11|193|W|,Basel|basel city|CH|7.57|47.56|177|W|basilea;basileia;basilej;bazel;bazylea;bale,Basildon|england|GB|0.46|51.57|144|W|,Basirhat City|west bengal|IN|88.85|22.66|143|W|,Basrah|basra|IQ|47.78|30.51|1326|W|basra;al basra;basora;bassora;bassorah;bacora,Basuo|hainan|CN|108.67|19.1|444|W|,Bata|litoral|GQ|9.77|1.86|173|W|,Batala|punjab|IN|75.2|31.81|158|W|,Batam|riau|ID|104.02|1.15|1296|W|kota batam,Batang|central java|ID|110.71|-6.48|139|W|,Batangas|calabarzon|PH|121.06|13.76|237|W|,Batavia|IL|US|-88.31|41.85|26|N|,Bath Beach|NY|US|-74|40.6|33|N|,Bathinda|punjab|IN|74.94|30.21|285|W|,Batikent|ankara|TR|32.73|39.97|300|W|,Batman|batman|TR|41.13|37.89|452|W|,Batna|batna|DZ|6.17|35.56|289|W|batina;batna city;batnah,Baton Rouge|LA|US|-91.19|30.44|227|NW|,Battagram|khyber pakhtunkhwa|PK|73.02|34.68|700|W|battagram city,Battle Creek|MI|US|-85.18|42.32|51|N|,Batu|east java|ID|112.53|-7.87|225|W|kota batu,Batu Caves|selangor|MY|101.68|3.24|254|W|,Batu Pahat|johor|MY|102.93|1.85|156|W|,Batumi|adjara|GE|41.63|41.64|186|W|bat umi;batoemi;batoumi;batum,Baturaja|south sumatra|ID|104.17|-4.13|134|W|,Baubau|southeast sulawesi|ID|122.6|-5.46|161|W|bau bau,Bauchi|bauchi|NG|9.84|10.31|693|W|bauczi,Bauru|sao paulo|BR|-49.06|-22.31|392|W|,Bawshar|muscat|OM|58.4|23.58|383|W|,Bay City|MI|US|-83.89|43.59|33|N|kota bay,Bay Shore|NY|US|-73.25|40.73|26|N|,Bay Street Corridor|ON|CA|-79.39|43.66|25|N|,Bayamo|granma province|CU|-76.64|20.37|192|W|,Bayamon|bayamon|PR|-66.16|18.4|203|W|,Bayan Lepas|penang|MY|100.26|5.3|130|W|,Bayan Nur|inner mongolia|CN|107.39|40.74|1760|W|,Bayji|salah ad din|IQ|43.49|34.93|173|W|,Bayonne|NJ|US|-74.11|40.67|66|N|,Bayside|NY|US|-73.78|40.77|66|N|,Baytown|TX|US|-94.98|29.74|76|N|,Bayview-Hunters Point|CA|US|-122.38|37.73|34|N|,Bazhong|sichuan|CN|106.74|31.87|2712|W|,Beaumont|TX|US|-94.1|30.09|115|N|,Beaumont|CA|US|-116.98|33.93|43|N|,Beauport|QC|CA|-71.19|46.86|81|N|montmorency,Beavercreek|OH|US|-84.06|39.71|46|N|beaver creek,Beaverton|OR|US|-122.8|45.49|96|N|,Beawar|rajasthan|IN|74.32|26.1|151|W|,Bechar|bechar|DZ|-2.22|31.62|165|W|basyar;baszszar,Bedford|TX|US|-97.14|32.84|49|N|,Bedok New Town||SG|103.94|1.33|276|W|,Beed|maharashtra|IN|75.76|18.99|146|W|,Beersheba|southern district|IL|34.79|31.25|186|W|be er scheva;be er sheva;beer sheba;beer szewa;beer seva;beer sheva;beerseba;beerseva;berseba;bersyeba;beer sjeva,Begoua|ombella m poko|CF|18.53|4.45|264|W|,Begusarai|bihar|IN|86.13|25.42|252|W|,Bei'an|heilongjiang|CN|126.6|48.27|436|W|,Beibei|chongqing|CN|106.44|29.83|247|W|,Beihai|guangxi|CN|109.12|21.48|525|W|pej chaj,Beijing|beijing|CN|116.4|39.91|18960|W|pechino;pekin;peking;pequim,Beiliu|guangxi|CN|110.35|22.71|199|W|,Beining|liaoning|CN|121.79|41.6|152|W|,Beipiao|liaoning|CN|120.78|41.79|190|W|,Beira|sofala|MZ|34.84|-19.84|687|W|,Beirut|beirut|LB|35.5|33.89|1916|W|beiroet;beirute;bejrut;beyrouth;beyrut,Bejaia|bejaia|DZ|5.08|36.76|176|W|bidschaya;bijaya;bougie;bugia,Bekasi|west java|ID|106.99|-6.23|2648|W|kota bekasi,Bel Air North|MD|US|-76.37|39.55|30|N|,Bel Air South|MD|US|-76.32|39.51|47|N|,Belagavi|karnataka|IN|74.5|15.85|490|W|belgaum,Belem|para|BR|-48.5|-1.46|1499|W|,Belfast|northern ireland|GB|-5.93|54.6|348|W|belfast city,Belford Roxo|rio de janeiro|BR|-43.4|-22.76|518|W|,Belgorod|belgorod oblast|RU|36.58|50.6|345|W|bielgorod;bilhorod;bilhorod dnistrovskyi,Belgrade|central serbia|RS|20.47|44.8|1273|W|belgrad;belgrado;beograd;belehrad,Belgrano|buenos aires f d|AR|-58.46|-34.56|138|W|barrio belgrano,Bell|CA|US|-118.19|33.98|36|N|,Bell Gardens|CA|US|-118.15|33.97|43|N|,Bella Vista|nacional|DO|-69.95|18.46|175|W|,Bella Vista|AR|US|-94.27|36.48|27|N|,Belleville|ON|CA|-77.38|44.17|50|N|,Belleville|IL|US|-89.98|38.52|42|N|,Belleville|NJ|US|-74.15|40.79|36|N|,Bellevue|WA|US|-122.2|47.61|139|NW|,Bellevue|NE|US|-95.89|41.14|55|N|,Bellflower|CA|US|-118.12|33.88|78|N|,Bellingham|WA|US|-122.49|48.76|85|N|,Bello|antioquia|CO|-75.56|6.34|392|W|,Belmont|CA|US|-122.28|37.52|27|N|,Belmont Cragin|IL|US|-87.77|41.93|79|N|,Belo Horizonte|minas gerais|BR|-43.94|-19.92|2721|W|b h;belo hte;bhte,Beloit|WI|US|-89.03|42.51|36|N|,Beltline|AB|CA|-114.07|51.04|25|N|,Belvidere|IL|US|-88.84|42.26|25|N|,Ben Cat|ho chi minh city hcmc|VN|106.6|11.15|364|W|,Bend|OR|US|-121.32|44.06|87|N|,Bendale|ON|CA|-79.25|43.77|29|N|,Benfica|luanda|AO|13.16|-8.94|191|W|,Bengaluru|karnataka|IN|77.59|12.97|8495|W|bangalore,Bengbu|anhui|CN|117.36|32.94|972|W|,Benghazi|banghazi|LY|20.07|32.11|757|W|banghazi;bengasi;bengazi;bingazi,Bengkulu|bengkulu|ID|102.27|-3.8|397|W|,Benguela|benguela|AO|13.4|-12.58|555|W|,Beni|north kivu|CD|29.47|0.49|140|W|new beni;nouveau beni,Beni Mellal|beni mellal khenifra|MA|-6.35|32.34|210|W|bani mallal;beni melal,Benicia|CA|US|-122.16|38.05|28|N|,Benin City|edo state|NG|5.63|6.34|1782|W|benim;benin;benin by;benin stadt;ciudad de benin;kota benin,Benito Juarez|MX09|MX|-99.16|19.37|385|NW|,Benoni|gauteng|ZA|28.32|-26.19|605|W|,Bensalem|PA|US|-74.95|40.1|60|N|bensalem township;municipio de bensalem;xa bensalem,Bensonhurst|NY|US|-73.99|40.6|60|N|,Benton|AR|US|-92.59|34.56|34|N|,Bentonville|AR|US|-94.21|36.37|44|N|,Benxi|liaoning|CN|123.77|41.29|987|W|pen si,Berazategui|buenos aires|AR|-58.21|-34.77|180|W|,Berbera|woqooyi galbeed|SO|45.01|10.44|242|W|,Bercham|perak|MY|101.14|4.64|150|W|,Berezniki|perm krai|RU|56.82|59.41|167|W|beresniki;bieriezniki,Bergen|vestland|NO|5.32|60.39|294|W|,Bergenfield|NJ|US|-74|40.93|27|N|,Berkeley|CA|US|-122.27|37.87|120|N|,Berlin|state of berlin|DE|13.41|52.52|3426|W|berliini;berlijn;berlim;berlino,Berrechid|casablanca settat|MA|-7.59|33.27|149|W|,Berriozabal|MX05|MX|-93.27|16.8|28|N|,Bertoua|east|CM|13.68|4.58|137|W|,Berwyn|IL|US|-87.79|41.85|56|N|,Bessemer|AL|US|-86.95|33.4|26|N|,Bethel Park|PA|US|-80.04|40.33|32|N|,Bethesda|MD|US|-77.1|38.98|60|N|,Bethlehem|PA|US|-75.37|40.63|74|N|,Betim|minas gerais|BR|-44.2|-19.97|384|W|,Bettendorf|IA|US|-90.52|41.52|35|N|,Bettiah|bihar|IN|84.5|26.8|132|W|,Beverly|MA|US|-70.88|42.56|41|N|,Beverly Cove|MA|US|-70.85|42.55|40|N|,Beverly Hills|CA|US|-118.4|34.07|34|N|,Bexley|england|GB|0.15|51.44|228|W|london borough of bexley,Beylikduezue|istanbul|TR|28.64|40.98|415|W|beylikduzu,Bhadravati|karnataka|IN|75.71|13.85|163|W|,Bhagalpur|bihar|IN|86.97|25.24|400|W|,Bhakkar|punjab|PK|71.06|31.63|131|W|,Bhalswa Jahangirpur|delhi|IN|77.17|28.74|197|W|,Bharatpur|bagmati province|NP|84.44|27.68|369|W|,Bharatpur|rajasthan|IN|77.49|27.22|252|W|,Bharuch|gujarat|IN|72.98|21.69|169|W|,Bhatara|dhaka division|BD|90.45|23.8|324|W|,Bhatpara|west bengal|IN|88.4|22.87|483|W|,Bhavnagar|gujarat|IN|72.15|21.76|605|W|,Bhawana|punjab|PK|72.65|31.57|373|W|bhanawa,Bhayandar|maharashtra|IN|72.85|19.3|809|W|,Bhetia|jharkhand|IN|86.14|22.79|174|W|,Bhilai|chhattisgarh|IN|81.43|21.21|627|W|bhilai nagar;bhilaj nagar,Bhilwara|rajasthan|IN|74.64|25.35|359|W|,Bhimavaram|andhra pradesh|IN|81.52|16.54|146|W|,Bhind|madhya pradesh|IN|78.79|26.57|197|W|,Bhisho|eastern cape|ZA|27.44|-32.85|137|W|bisho,Bhiwandi|maharashtra|IN|73.06|19.3|874|W|,Bhiwani|haryana|IN|76.14|28.79|196|W|,Bhopal|madhya pradesh|IN|77.4|23.25|1798|W|,Bhubaneswar|odisha|IN|85.83|20.27|885|W|bhubaneshwar,Bhuj|gujarat|IN|69.67|23.25|148|W|,Bhusawal|maharashtra|IN|75.79|21.04|187|W|,Bialystok|podlasie|PL|23.16|53.13|295|W|,Bibirevo|moscow|RU|37.6|55.88|159|W|,Bida|niger state|NG|6.01|9.08|400|W|,Bidar|karnataka|IN|77.52|17.91|216|W|,Bielany|mazovia|PL|20.94|52.29|131|W|,Bielefeld|north rhine westphalia|DE|8.53|52.03|331|W|,Bielsko-Biala|silesia|PL|19.05|49.82|176|W|bielitz biala;bilsko bela,Bien Hoa|dong nai|VN|106.82|10.94|1272|W|bienhoa,Big Spring|TX|US|-101.48|32.25|28|N|,Bihar Sharif|bihar|IN|85.52|25.2|297|W|,Bijie|guizhou|CN|105.29|27.3|1137|W|pi tie;prefecture de bijie,Bikaner|rajasthan|IN|73.31|28.02|644|W|,Bila Tserkva|kyiv oblast|UA|30.12|49.8|207|W|belaya tserkov;biala cerkiew;bila cerkva;bila zerkwa;bila terkva,Bilaspur|chhattisgarh|IN|82.16|22.08|365|W|,Bilbao|basque country|ES|-2.93|43.26|347|W|bilbau;el bocho,Bilbeis|sharqia|EG|31.56|30.42|185|W|bilbajs;bilbays;bilbeys,Bilimora|gujarat|IN|72.96|20.77|510|W|,Billerica|MA|US|-71.27|42.56|39|N|,Billings|MT|US|-108.5|45.78|117|N|,Biloxi|MS|US|-88.89|30.4|45|N|,Bilqas|dakahlia|EG|31.36|31.21|137|W|,Bima|west nusa tenggara|ID|118.73|-8.46|165|W|,Bimbo|ombella m poko|CF|18.42|4.26|348|W|,Binan|calabarzon|PH|121.08|14.34|300|W|binan city;kota binan,Binangonan|calabarzon|PH|121.19|14.46|219|W|,Binghamton|NY|US|-75.92|42.1|46|N|,Binh Thanh|ho chi minh city hcmc|VN|106.71|10.81|552|W|,Binjai|north sumatra|ID|98.49|3.6|279|W|kota binjai,Bintulu|sarawak|MY|113.03|3.17|151|W|,Binzhou|shandong|CN|118.02|37.37|682|W|pin cou;tan chau,Biratnagar|koshi|NP|87.27|26.46|244|W|,Birendranagar|karnali pradesh|NP|81.62|28.6|154|W|birendra nagar;birendranagara,Birganj|madhesh|NP|84.88|27.02|268|W|birgunj,Birjand|south khorasan province|IR|59.22|32.87|196|W|birdschand,Birkenhead|england|GB|-3.01|53.39|325|W|,Birmingham|england|GB|-1.9|52.48|1157|W|,Birmingham|AL|US|-86.8|33.52|196|NW|,Biryulevo|moscow|RU|37.68|55.59|144|W|,Bishan|chongqing|CN|106.22|29.59|204|W|,Bishkek|bishkek|KG|74.59|42.87|900|W|bichkek;bischkek;bisjkek;biskek;bisqueque;biszkek,Bishoftu|oromiya|ET|38.98|8.75|207|W|,Biskra|biskra|DZ|5.73|34.85|204|W|biskira,Bismarck|ND|US|-100.78|46.81|75|N|bismarck i nord dakota,Bissau|bissau|GW|-15.6|11.86|439|W|bisau,Bitung|north sulawesi|ID|125.13|1.44|225|W|kota bitung,Biysk|altai krai|RU|85.2|52.53|215|W|biejsk;bijsk,Bizerte|bizerte governorate|TN|9.87|37.27|138|W|biserta;bizert;bizerta,Blackburn|england|GB|-2.48|53.75|146|W|,Blackpool|england|GB|-3.05|53.82|145|W|,Blacksburg|VA|US|-80.41|37.23|44|N|,Blagoveshchensk|amur oblast|RU|127.53|50.28|225|W|blagovesjtsjensk;blagovechtchensk;blagoveschensk;blagovesjtjensk;blagovescensk;blagovestsensk;blagoweschtschensk;blagowieszczensk,Blaine|MN|US|-93.23|45.16|62|N|,Blainville|QC|CA|-73.88|45.67|46|N|,Blantyre|southern region|MW|35.01|-15.78|902|W|,Blida|blida|DZ|2.83|36.47|331|W|al bulajda;buleyde,Blitar|east java|ID|112.17|-8.1|161|W|kota blitar,Bloemfontein|free state|ZA|26.21|-29.12|556|W|,Bloomfield|NJ|US|-74.19|40.81|49|N|,Bloomington|MN|US|-93.3|44.84|86|N|,Bloomington|IN|US|-86.53|39.17|84|N|,Bloomington|IL|US|-88.99|40.48|78|N|,Blue Springs|MO|US|-94.28|39.02|54|N|,Blumenau|santa catarina|BR|-49.07|-26.92|361|W|,Bnei Brak|tel aviv|IL|34.83|32.08|214|W|benai beraq;bene berak;bene beraq;benei beraq;beney beraq;bnei berak;bnej brak;bney brak;bne beraq,Bo|southern province|SL|-11.74|7.96|233|W|,Boa Vista|roraima|BR|-60.67|2.82|419|W|,Boardman|OH|US|-80.66|41.02|35|N|,Bobo-Dioulasso|hauts bassins|BF|-4.29|11.18|904|W|,Bobruysk|mogilev|BY|29.21|53.15|205|W|babroejsk;babruisk;babrujsk;babruysk;bobruisk;bobrujsk,Boca Raton|FL|US|-80.08|26.36|93|N|boca de ratones;wta boca raton,Bochum|north rhine westphalia|DE|7.22|51.48|385|W|,Bocoio|benguela|AO|14.14|-12.47|164|W|,Bogor|west java|ID|106.79|-6.59|1078|W|kota bogor,Bogota|bogota d c|CO|-74.08|4.61|7674|W|santafe de bogota,Bogra|rajshahi division|BD|89.37|24.85|210|W|,Bohuniya|zhytomyr oblast|UA|28.61|50.28|147|W|bohunia;bohuniia;bohunskyi;bohunskyi rayon,Boisbriand|QC|CA|-73.83|45.62|26|N|,Boise|ID|US|-116.2|43.61|235|NW|,Bojnurd|north khorasan|IR|57.33|37.47|192|W|bojnourd,Bokaro|jharkhand|IN|86.15|23.67|564|W|bokaro steel city,Boksburg|gauteng|ZA|28.26|-26.21|445|W|,Bole|xinjiang|CN|82.07|44.89|235|W|,Bolingbrook|IL|US|-88.07|41.7|74|N|,Bologna|emilia romagna|IT|11.34|44.49|394|W|bologne;bolonha;bolonia;bolonya,Bolton|england|GB|-2.43|53.58|141|W|,Bolton|ON|CA|-79.74|43.88|26|N|,Bolu|bolu|TR|31.61|40.74|184|W|,Boma|bas congo|CD|13.05|-5.85|297|W|,Bondoukou|zanzan district|CI|-2.8|8.04|141|W|,Bonita Springs|FL|US|-81.78|26.34|51|N|,Bonn|north rhine westphalia|DE|7.1|50.73|330|W|bona,Bontang|east kalimantan|ID|117.49|0.13|194|W|kota bontang,Borama|awdal|SO|43.18|9.94|597|W|boorama,Bordeaux|new aquitaine|FR|-0.58|44.84|265|W|bordeus;burdeos,Bordj Bou Arreridj|bordj bou arreridj|DZ|4.76|36.07|158|W|burdz bu urajridz,Borivli|maharashtra|IN|72.86|19.23|609|W|borivali,Borough Park|NY|US|-74|40.63|149|NW|,Borshchahivka|kyiv city|UA|30.39|50.43|179|W|,Borujerd|lorestan province|IR|48.75|33.9|251|W|,Boshan|shandong|CN|117.83|36.48|153|W|,Bossier City|LA|US|-93.73|32.52|68|N|,Boston|MA|US|-71.06|42.36|653|NW|,Botad|gujarat|IN|71.67|22.17|130|W|,Bothell|WA|US|-122.21|47.76|42|N|,Botshabelo|free state|ZA|26.73|-29.27|309|W|,Botucatu|sao paulo|BR|-48.45|-22.89|145|W|,Bouake|vallee du bandama district|CI|-5.03|7.69|832|W|,Boucherville|QC|CA|-73.44|45.59|39|N|,Boulder|CO|US|-105.27|40.01|106|N|,Bountiful|UT|US|-111.88|40.89|43|N|,Bournemouth|england|GB|-1.88|50.72|163|W|,Bowie|MD|US|-76.73|38.94|58|N|bowie station;huntington city;huntington station,Bowling Green|KY|US|-86.44|36.99|63|N|,Bowling Green|OH|US|-83.65|41.37|31|N|,Bowmanville|ON|CA|-78.68|43.92|39|N|,Boyeros|havana|CU|-82.4|23.01|188|W|,Boyle Heights|CA|US|-118.21|34.03|92|N|,Boynton Beach|FL|US|-80.07|26.53|73|N|,Bozeman|MT|US|-111.04|45.68|43|N|,Bozhou|anhui|CN|115.77|33.88|1409|W|po cou,Bradenton|FL|US|-82.57|27.5|54|N|,Bradford|england|GB|-1.75|53.79|366|W|,Braga|braga|PT|-8.42|41.55|193|W|,Braganca|para|BR|-46.77|-1.05|132|W|,Braganca Paulista|sao paulo|BR|-46.54|-22.95|176|W|,Brahmanbaria|chittagong|BD|91.11|23.97|264|W|,Brahmapur|odisha|IN|84.79|19.31|356|W|,Braila|braila county|RO|27.97|45.27|154|W|berail;ibrail;brillago;drinago,Braintree|MA|US|-71|42.2|37|N|,Brakpan|gauteng|ZA|28.37|-26.24|305|W|,Brampton|ON|CA|-79.77|43.68|656|NW|,Brandon|FL|US|-82.29|27.94|103|N|,Brandon|MB|CA|-99.95|49.85|48|N|,Branford|CT|US|-72.82|41.28|29|N|,Brant|ON|CA|-80.35|43.13|34|N|,Brantford|ON|CA|-80.27|43.13|104|N|,Brasilandia|sao paulo|BR|-46.69|-23.45|243|W|,Brasilia|federal district|BR|-47.93|-15.78|2207|W|,Brasov|brasov county|RO|25.61|45.65|253|W|kronstadt;braszow,Bratislava|bratislava region|SK|17.11|48.15|423|W|bratyslawa;presbourg;pressburg,Bratsk|irkutsk oblast|RU|101.61|56.13|256|W|brack,Braunschweig|lower saxony|DE|10.53|52.27|244|W|brunswick;brunszwik,Brawley|CA|US|-115.53|32.98|25|N|,Brazzaville|brazzaville|CG|15.28|-4.27|1982|W|brazavil,Brea|CA|US|-117.9|33.92|41|N|,Breda|north brabant|NL|4.78|51.59|184|W|,Bremen|bremen|DE|8.81|53.08|546|W|brema;bremy;breme,Bremerton|WA|US|-122.63|47.57|39|N|,Brent|england|GB|-0.3|51.55|329|W|london borough of brent,Brentwood|NY|US|-73.25|40.78|60|N|,Brentwood|CA|US|-121.7|37.93|58|N|,Brentwood|TN|US|-86.78|36.03|41|N|,Brentwood Estates|TN|US|-86.78|36.03|31|N|,Brescia|lombardy|IT|10.21|45.54|200|W|,Brest|brest|BY|23.72|52.11|347|W|brest nad bugem;brest litovsk;brzesc;brest litowsk,Brest|brittany|FR|-4.49|48.39|144|W|,Briarwood|NY|US|-73.82|40.71|53|N|,Brick|NJ|US|-74.14|40.06|76|N|,Bridgeport|CT|US|-73.19|41.18|147|NW|,Bridgeport|IL|US|-87.65|41.84|33|N|,Bridgeton|NJ|US|-75.23|39.43|25|N|,Bridgewater|NJ|US|-74.65|40.6|44|N|,Brighouse-City Centre|BC|CA|-123.13|49.17|62|N|brighouse;richmond brighouse,Brighton|england|GB|-0.14|50.83|283|W|,Brighton|MA|US|-71.16|42.35|45|N|,Brighton|CO|US|-104.82|39.99|37|N|,Brighton|NY|US|-77.55|43.15|36|N|,Brighton Beach|NY|US|-73.96|40.58|31|N|,Brighton Park|IL|US|-87.7|41.82|44|N|,Brisbane|queensland|AU|153.03|-27.47|2780|W|brisbane city,Bristol|england|GB|-2.6|51.46|479|W|,Bristol|CT|US|-72.95|41.67|60|N|,Bristol|TN|US|-82.19|36.6|26|N|,Brno|south moravian|CZ|16.61|49.2|379|W|brunn,Brockton|MA|US|-71.02|42.08|95|N|,Broken Arrow|OK|US|-95.79|36.05|106|N|,Brookfield|WI|US|-88.11|43.06|38|N|,Brookhaven|GA|US|-84.34|33.86|51|N|north atlanta,Brooklin|ON|CA|-78.96|43.96|25|N|,Brookline|MA|US|-71.12|42.33|58|N|,Brooklyn|NY|US|-73.95|40.65|2736|NW|borough of brooklyn,Brooklyn Center|MN|US|-93.33|45.08|30|N|,Brooklyn Park|MN|US|-93.36|45.09|79|N|,Broomfield|CO|US|-105.09|39.92|65|N|,Brossard|QC|CA|-73.47|45.45|69|N|,Brownsville|TX|US|-97.5|25.9|186|NW|,Brownsville|NY|US|-73.92|40.66|74|N|,Brunswick|OH|US|-81.84|41.24|34|N|,Brusque|santa catarina|BR|-48.91|-27.1|155|W|,Brussels|brussels capital|BE|4.35|50.85|1019|W|brussel;bruxelles;bruksela;brusel;bruselas;bruxelas;bryssel;bruksel;citta di bruxelles;city of brussels;kota brusel,Bryan|TX|US|-96.37|30.67|82|N|,Bryansk|bryansk oblast|RU|34.32|53.27|427|W|brjansk;breansk;briansk;brianski,Bucaramanga|santander department|CO|-73.12|7.12|581|W|,Bucharest|bucharest|RO|26.11|44.43|1877|W|boekarest;bucarest;bucareste;bucuresti;bukarest;bukareszt;bukurest;bukres,Bucheon-si|gyeonggi do|KR|126.78|37.5|850|W|bucheon,Buckeye|AZ|US|-112.58|33.37|50|N|,Buda|budapest|HU|19.03|47.5|510|W|altofen;boeda;budin;ofen,Budapest|budapest|HU|19.04|47.5|1741|W|boedapest;budapesta;budapeste;budapeszt;ofen pest,Budapest XI. keruelet|budapest|HU|19.04|47.48|139|W|budapest xi kerulet;ujbuda,Budaun|uttar pradesh|IN|79.13|28.04|161|W|badaun,Budta|autonomous region in muslim mindanao|PH|124.44|7.2|1273|W|,Buea|south west|CM|9.24|4.15|140|W|,Buena Park|CA|US|-118|33.87|83|N|,Buenaventura|valle del cauca department|CO|-77|3.58|432|W|,Buenaventura Lakes|FL|US|-81.35|28.34|26|N|,Buenavista|MX15|MX|-99.17|19.61|216|NW|,Bueng Kum|bangkok|TH|100.67|13.79|145|W|ban bueng kum;ban cum,Buenos Aires|buenos aires f d|AR|-58.38|-34.61|2891|W|santa maria del buen ayre,Bueyuekcekmece|istanbul|TR|28.59|41.02|163|W|buyukcekmece,Buffalo|NY|US|-78.88|42.89|258|NW|bufalo,Buffalo Grove|IL|US|-87.96|42.15|41|N|,Buguma|rivers state|NG|6.86|4.74|135|W|,Bujumbura|bujumbura mairie|BI|29.36|-3.38|769|W|buyumbura;buzumbura,Bukan|west azerbaijan|IR|46.21|36.52|193|W|,Bukavu|south kivu|CD|28.84|-2.49|816|W|costermansstad;costermansville,Bukhara|bukhara|UZ|64.43|39.77|280|W|boukhara;bucara;buchara;buhara;bujara,Bukit Batok New Town||SG|103.76|1.36|158|W|,Bukit Jalil|kuala lumpur|MY|101.68|3.05|200|W|,Bukit Merah Estate||SG|103.82|1.28|151|W|,Bukit Mertajam|penang|MY|100.47|5.36|212|W|bukit mertarajam,Bukit Panjang New Town||SG|103.76|1.38|138|W|,Bukit Rahman Putra|selangor|MY|101.56|3.22|607|W|,Bukoba|kagera|TZ|31.81|-1.33|144|W|,Bulandshahr|uttar pradesh|IN|77.86|28.4|198|W|bulendsehr,Bulaon|central luzon|PH|120.66|15.08|131|W|,Bulawayo|bulawayo|ZW|28.58|-20.15|665|W|,Bullhead City|AZ|US|-114.57|35.15|39|N|,Bumba|mongala|CD|22.47|2.19|154|W|,Bunamwaya|central region|UG|32.56|0.25|413|W|,Bunda|mara|TZ|33.87|-2.02|182|W|,Bunia|ituri|CD|30.25|1.56|399|W|,Bunkyo|kanagawa|JP|139.42|35.53|240|W|bunkyo city,Buon Ma Thuot|dak lak|VN|108.04|12.67|434|W|,Burari|delhi|IN|77.2|28.76|146|W|,Buraydah|al qassim region|SA|43.97|26.33|745|W|buraidah;burajda;burayda,Burbank|CA|US|-118.31|34.18|105|N|,Burbank|IL|US|-87.78|41.73|29|N|,Burewala|punjab|PK|72.65|30.17|361|W|,Burgas|burgas|BG|27.47|42.51|210|W|boergas;bourgas;burgaz,Burgos|castille and leon|ES|-3.7|42.34|176|W|,Burhanpur|madhya pradesh|IN|76.23|21.31|210|W|,Burien|WA|US|-122.35|47.47|50|N|,Burke|VA|US|-77.27|38.79|41|N|,Burleson|TX|US|-97.32|32.54|43|N|,Burlingame|CA|US|-122.37|37.58|30|N|,Burlington|ON|CA|-79.84|43.39|186|NW|,Burlington|NC|US|-79.44|36.1|52|N|,Burlington|VT|US|-73.21|44.48|42|N|,Burlington|IA|US|-91.11|40.81|25|N|,Burnaby|BC|CA|-122.95|49.27|249|NW|,Burnley|england|GB|-2.23|53.8|149|W|,Burnsville|MN|US|-93.28|44.77|61|N|,Bursa|bursa province|TR|29.06|40.2|3101|W|,Burton|MI|US|-83.62|43|28|N|,Busan|busan|KR|129.03|35.1|3285|W|busan si;pusan,Bush|beni suweif|EG|31.13|29.15|136|W|,Bushehr|bushehr|IR|50.84|28.97|165|W|bandar bushehr;buschehr;bushire;busehr,Bushwick|NY|US|-73.92|40.69|112|N|,Business Bay|dubai|AE|55.27|25.19|191|W|,Bustleton|PA|US|-75.03|40.08|32|N|,Butembo|north kivu|CD|29.29|0.14|286|W|,Butte|MT|US|-112.53|46|34|N|,Butuan|caraga|PH|125.54|8.95|309|W|butuan city;city of butuan;kota butuan,Butwal|lumbini province|NP|83.45|27.69|195|W|,Bydgoszcz|kujawsko pomorskie|PL|18.01|53.12|330|W|bromberg;bydhost,Bytom|silesia|PL|18.93|50.35|189|W|beuthen,Ca Mau|ca mau|VN|105.15|9.18|226|W|,Caala|huambo|AO|15.56|-12.85|130|W|,Cabanatuan City|central luzon|PH|120.97|15.49|343|W|cabanatuan,Cabimas|zulia|VE|-71.45|10.4|351|W|,Cabinda|cabinda|AO|12.19|-5.56|550|W|,Cabo de Santo Agostinho|pernambuco|BR|-35.03|-8.29|216|W|,Cabo Frio|rio de janeiro|BR|-42.03|-22.89|238|W|,Cabo San Lucas|MX03|MX|-109.91|22.89|202|NW|,Cabot|AR|US|-92.02|34.97|25|N|,Cabuyao|calabarzon|PH|121.13|14.27|308|W|cabuyao city,Cachoeirinha|sao paulo|BR|-46.66|-23.45|143|W|,Cachoeirinha|rio grande do sul|BR|-51.09|-29.95|141|W|,Cachoeiro de Itapemirim|espirito santo|BR|-41.11|-20.85|198|W|,Cacuaco|luanda|AO|13.37|-8.78|146|W|,Cadereyta|MX19|MX|-99.98|25.58|67|N|,Cadereyta Jimenez|MX19|MX|-100|25.59|68|N|,Cagayan de Oro|northern mindanao|PH|124.65|8.48|741|W|,Cagliari|sardinia|IT|9.12|39.23|149|W|casteddu,Cai Lay|dong thap|VN|106.12|10.4|143|W|,Cainta|calabarzon|PH|121.12|14.58|283|W|,Cairns|queensland|AU|145.77|-16.92|153|W|,Cairo|cairo|EG|31.25|30.06|9606|W|el cairo;kairo;le caire;il cairo;kahire;kair;kahira,Cajamarca|cajamarca department|PE|-78.5|-7.16|201|W|,Calabar|cross river state|NG|8.33|4.96|540|W|,Calabozo|guarico|VE|-67.43|8.92|168|W|,Calama|antofagasta|CL|-68.92|-22.46|166|W|,Calamba|calabarzon|PH|121.17|14.21|575|W|calamba city;kota calamba,Caldwell|ID|US|-116.69|43.66|51|N|,Caledon|ON|CA|-79.99|43.87|76|N|,Calexico|CA|US|-115.5|32.68|40|N|,Calgary|AB|CA|-114.09|51.05|1306|NW|,Cali|valle del cauca department|CO|-76.52|3.43|2392|W|santiago de cali,Callao|callao|PE|-77.13|-12.05|1226|W|el callao,Caloocan|national capital region|PH|120.97|14.65|1712|W|caloocan city;lungsod ng caloocan,Calpulalpan|MX29|MX|-98.57|19.59|33|N|,Calumbo|bengo|AO|13.42|-9.15|652|W|,Calumet City|IL|US|-87.53|41.62|37|N|calumet,Cam Pha|quang ninh|VN|107.27|21.01|190|W|,Cam Pha Mines|quang ninh|VN|107.3|21.02|135|W|,Cam Ranh|khanh hoa|VN|109.16|11.92|146|W|,Camacari|bahia|BR|-38.32|-12.7|321|W|,Camagueey|camaguey|CU|-77.92|21.38|347|W|camaguey,Camama|luanda|AO|13.27|-8.94|667|W|,Camaragibe|pernambuco|BR|-34.98|-8.02|160|W|,Camarillo|CA|US|-119.04|34.22|67|N|,Camayenne|conakry|GN|-13.69|9.54|1871|W|,Cambridge|england|GB|0.12|52.2|145|W|,Cambridge|ON|CA|-80.31|43.36|129|N|,Cambridge|MA|US|-71.11|42.38|110|N|,Camden|NJ|US|-75.12|39.93|76|N|,Cameta|para|BR|-49.5|-2.24|134|W|,Campbell|CA|US|-121.95|37.29|41|N|,Campbell River|BC|CA|-125.24|50.02|33|N|,Campeche|MX04|MX|-90.52|19.84|220|NW|san francisco de campeche,Campina Grande|paraiba|BR|-35.88|-7.23|443|W|,Campinas|sao paulo|BR|-47.06|-22.91|1031|W|campinas e regiao;regiao de campinas,Campo Grande|mato grosso do sul|BR|-54.65|-20.44|906|W|,Campo Largo|parana|BR|-49.53|-25.46|144|W|,Campo Limpo|sao paulo|BR|-46.77|-23.64|236|W|,Campos dos Goytacazes|rio de janeiro|BR|-41.33|-21.75|483|W|,Can Giuoc|tay ninh|VN|106.67|10.61|152|W|,Can Tho|can tho city|VN|105.79|10.04|1507|W|,Canakkale|canakkale|TR|26.41|40.16|143|W|,Cananea|MX26|MX|-110.3|30.98|31|N|heroica ciudad de cananea,Canarsie|NY|US|-73.9|40.64|87|N|,Canberra|australian capital territory|AU|149.13|-35.28|367|W|camberra;kanberra,Cancun|MX23|MX|-86.85|21.17|888|NW|ciudad cancun,Candelaria|calabarzon|PH|121.42|13.93|137|W|,Cangaiba|sao paulo|BR|-46.52|-23.5|141|W|,Cangzhou|hebei|CN|116.85|38.31|527|W|cchang cou;thuong chau,Cankaya|ankara|TR|32.86|39.92|792|W|,Canoas|rio grande do sul|BR|-51.18|-29.92|328|W|,Canoga Park|CA|US|-118.6|34.2|60|N|,Canton|MI|US|-83.48|42.31|86|N|,Canton|OH|US|-81.38|40.8|71|N|,Canton|GA|US|-84.49|34.24|25|N|,Cantonment|FL|US|-87.34|30.61|26|N|,Canyon Country|CA|US|-118.47|34.42|59|N|,Cao Lanh|dong thap|VN|105.63|10.46|211|W|,Cap-Haitien|nord|HT|-72.2|19.76|134|W|cabo haitiano,Capao Redondo|sao paulo|BR|-46.78|-23.67|270|W|,Capas|central luzon|PH|120.59|15.33|162|W|,Cape Coast|central|GH|-1.25|5.11|212|W|,Cape Coral|FL|US|-81.95|26.56|175|NW|cabo coral,Cape Girardeau|MO|US|-89.52|37.31|39|N|cap girardeau,Cape Town|western cape|ZA|18.42|-33.93|4772|W|citta del capo;cidade do cabo;ciudad del cabo;el cabo;kaapstad;kapkaupunki;kapske mesto;kapstaden;kapstadt;kapsztad;le cap,Capiata|central department|PY|-57.45|-25.36|198|W|,Carabanchel|madrid|ES|-3.72|40.39|253|W|,Caracas|distrito federal|VE|-66.88|10.49|3000|W|karakas,Carapicuiba|sao paulo|BR|-46.84|-23.52|386|W|,Carbondale|IL|US|-89.22|37.73|26|N|,Cardenas|MX27|MX|-93.38|18|91|N|,Cardiff|wales|GB|-3.18|51.48|372|W|,Cariacica|espirito santo|BR|-40.42|-20.26|376|W|,Carletonville|gauteng|ZA|27.4|-26.36|182|W|,Carlsbad|CA|US|-117.35|33.16|114|N|,Carlsbad|NM|US|-104.23|32.42|28|N|,Carmel|IN|US|-86.12|39.98|88|N|,Carmichael|CA|US|-121.33|38.62|61|N|,Carney|MD|US|-76.52|39.39|29|N|,Carol City|FL|US|-80.25|25.94|63|N|,Carol Stream|IL|US|-88.13|41.91|40|N|,Carolina|carolina|PR|-65.96|18.38|170|W|caroline,Carpentersville|IL|US|-88.26|42.12|38|N|,Carrefour|ouest|HT|-72.4|18.53|511|W|,Carrollton|TX|US|-96.89|32.95|133|NW|,Carrollton|GA|US|-85.08|33.58|26|N|,Carrollwood|FL|US|-82.49|28.05|33|N|,Carrollwood Village|FL|US|-82.52|28.07|40|N|,Carson|CA|US|-118.28|33.83|93|N|,Carson City|NV|US|-119.77|39.16|58|N|kota carson,Cartagena|bolivar|CO|-75.49|10.4|914|W|carthagene;cartagena de indias;cartagena das indias;carthagene des indes,Cartagena|murcia|ES|-0.98|37.6|213|W|carthagene;kartagena,Cartago|valle del cauca department|CO|-75.91|4.75|134|W|,Cartierville|QC|CA|-73.7|45.53|34|N|,Caruaru|pernambuco|BR|-35.98|-8.28|402|W|,Carupano|sucre|VE|-63.25|10.67|167|W|,Cary|NC|US|-78.78|35.79|159|NW|,Casa Grande|AZ|US|-111.76|32.88|51|N|,Casablanca|casablanca settat|MA|-7.61|33.59|3665|W|dar ul beyda;kazablanka;white house,Casas Adobes|AZ|US|-111|32.32|66|N|,Cascavel|parana|BR|-53.46|-24.96|368|W|ular derik,Casper|WY|US|-106.31|42.87|60|N|,Casselberry|FL|US|-81.33|28.68|27|N|,Castanhal|para|BR|-47.93|-1.29|192|W|,Castello de la Plana|valencia|ES|-0.05|39.99|171|W|castellon;castellon de la plana,Castle Rock|CO|US|-104.86|39.37|55|N|,Castlewood|CO|US|-104.9|39.58|25|N|,Castro Valley|CA|US|-122.09|37.69|61|N|,Catacamas|olancho department|HN|-85.89|14.85|140|W|,Catalina Foothills|AZ|US|-110.92|32.3|50|N|,Catamarca|catamarca|AR|-65.79|-28.47|159|W|,Catania|sicily|IT|15.07|37.49|311|W|catane;katania,Catemaco|MX30|MX|-95.11|18.42|27|N|,Cathedral City|CA|US|-116.47|33.78|53|N|,Catonsville|MD|US|-76.73|39.27|41|N|,Cau Giay|hanoi|VN|105.8|21.03|292|W|,Caucaia|ceara|BR|-38.65|-3.74|378|W|,Caxias|maranhao|BR|-43.36|-4.86|163|W|,Caxias do Sul|rio grande do sul|BR|-51.18|-29.17|479|W|,Cazenga|luanda|AO|13.28|-8.84|394|W|,Cebu City|central visayas|PH|123.89|10.32|965|W|cebu;ciudad de cebu;cebu sehri;cidade de cebu;city of cebu;kota cebu,Cedar City|UT|US|-113.06|37.68|30|N|,Cedar Falls|IA|US|-92.45|42.53|41|N|,Cedar Hill|TX|US|-96.96|32.59|48|N|,Cedar Park|TX|US|-97.82|30.51|65|N|,Cedar Rapids|IA|US|-91.64|42.01|130|NW|,Ceilandia|federal district|BR|-48.13|-15.81|287|W|,Celaya|MX11|MX|-100.81|20.52|340|NW|,Celina|TX|US|-96.78|33.32|64|N|,Centennial|CO|US|-104.88|39.58|109|N|,Center City|PA|US|-75.16|39.95|57|N|centro de filadelfia,Centereach|NY|US|-73.1|40.86|31|N|,Central|LA|US|-91.04|30.55|28|N|,Central 14th Street / Spring Road|DC|US|-77.03|38.94|25|N|,Central City|AZ|US|-112.06|33.44|58|N|,Central Coast|new south wales|AU|151.37|-33.43|346|W|costa central,Central Islip|NY|US|-73.2|40.79|34|N|,Centralniy|st petersburg|RU|30.36|59.93|214|W|,Centre City|AB|CA|-114.07|51.05|41|N|,Centretown|ON|CA|-75.7|45.42|25|N|,Centreville|VA|US|-77.43|38.84|71|N|,Centro Familiar la Soledad|MX11|MX|-101.75|21.14|32|N|,Centro Habana|havana|CU|-82.37|23.13|158|W|,Centurion|gauteng|ZA|28.19|-25.86|236|W|,Ceres|CA|US|-120.96|37.59|47|N|,Cergy-Pontoise|ile de france|FR|2.08|49.04|183|W|,Cerritos|CA|US|-118.06|33.86|49|N|,Cerro|havana|CU|-82.38|23.11|132|W|,Ch'ongdan-up|south hwanghae|KP|125.94|37.97|142|W|,Chak Jhumra|punjab|PK|73.18|31.57|385|W|,Chakwama|jigawa state|NG|9.66|11.56|200|W|,Chalco|MX15|MX|-98.9|19.26|168|NW|,Chaman|balochistan|PK|66.45|30.92|130|W|caman,Chamartin|madrid|ES|-3.68|40.46|140|W|,Chamberi|madrid|ES|-3.7|40.43|145|W|,Chamblee|GA|US|-84.3|33.89|28|N|,Champaign|IL|US|-88.24|40.12|86|N|,Champoton|MX04|MX|-90.72|19.34|30|N|,Chanda|maharashtra|IN|79.3|19.95|328|W|chandrapur;candrapur,Chandannagar|west bengal|IN|88.37|22.86|180|W|chandernagor;chandernagore;candarnagar,Chandigarh|chandigarh|IN|76.79|30.74|970|W|czandigarh;candigarh,Chandler|AZ|US|-111.84|33.31|260|NW|,Chandpur|chittagong|BD|90.65|23.23|203|W|,Chang-hua|taiwan|TW|120.56|24.07|226|W|,Changam-ch'on|south hamgyong|KP|128.78|40.61|207|W|,Changchun|jilin|CN|125.32|43.88|4714|W|tschangtung;cangcun;cchang cchun,Changde|hunan|CN|111.7|29.03|1457|W|cchang te;changteh,Changhua|taiwan|TW|120.55|24.07|226|W|,Changji|xinjiang|CN|87.3|44.01|198|W|,Changle|shandong|CN|118.83|36.71|259|W|,Changning|shanghai|CN|121.42|31.22|694|W|,Changsha|hunan|CN|112.97|28.2|3093|W|cchang sa,Changsha|guangdong|CN|112.68|22.38|688|W|,Changshu|jiangsu|CN|120.74|31.65|1677|W|,Changwon|gyeongsangnam do|KR|128.68|35.23|1025|W|ch angwon;cchangwon,Changyi|shandong|CN|119.39|36.85|302|W|,Changyuan|chongqing|CN|105.59|29.4|186|W|,Changzheng|shanghai|CN|121.37|31.24|229|W|,Changzhi|shanxi|CN|113.11|36.18|1214|W|cchang c,Changzhou|jiangsu|CN|119.95|31.77|3290|W|cchang cou,Chanhassen|MN|US|-93.53|44.86|25|N|,Channelview|TX|US|-95.11|29.78|38|N|,Chaohu|anhui|CN|117.87|31.6|138|W|,Chaoyang|liaoning|CN|120.46|41.57|410|W|,Chaozhou|guangdong|CN|116.62|23.65|1750|W|cchao cou,Chapeco|santa catarina|BR|-52.62|-27.1|282|W|,Chapel Hill|NC|US|-79.06|35.91|59|N|,Chapra|bihar|IN|84.75|25.78|202|W|,Charleroi|wallonia|BE|4.44|50.41|200|W|,Charlesbourg|QC|CA|-71.31|46.9|82|N|,Charleston|SC|US|-79.93|32.78|132|NW|,Charleston|WV|US|-81.63|38.35|46|N|,Charlotte|NC|US|-80.84|35.23|911|NW|,Charlottesville|VA|US|-78.48|38.03|46|N|,Charlottetown|PE|CA|-63.13|46.23|38|N|,Chas|jharkhand|IN|86.17|23.64|141|W|,Chaska|MN|US|-93.6|44.79|25|N|,Chateauguay|QC|CA|-73.75|45.38|42|N|,Chatham|ON|CA|-82.18|42.41|43|N|,Chatham|IL|US|-87.61|41.74|31|N|,Chatsworth|CA|US|-118.6|34.26|41|N|,Chattanooga|TN|US|-85.31|35.05|181|NW|,Chattogram|chittagong|BD|91.83|22.34|3920|W|chittagong;cottogram;cattagram,Chatuchak|bangkok|TH|100.56|13.83|160|W|,Cheboksary|chuvash republic|RU|47.25|56.13|492|W|ceboksari;czeboksary;tcheboksary;tjeboksary;tscheboksary;tsjeboksary;tseboksary;ceboksary;supaskar,Cheektowaga|NY|US|-78.75|42.9|75|N|,Chelmsford|MA|US|-71.37|42.6|33|N|,Chelsea|MA|US|-71.03|42.39|39|N|,Chelyabinsk|chelyabinsk|RU|61.43|55.16|1202|W|tsjeljabinsk;celeabinsk;celiabinsc;cheliabinsk;czelabinsk;tcheliabinsk;tjeljabinsk;tscheljabinsk;tseljabinsk;celyabinsk;celjabinsk,Chemnitz|saxony|DE|12.93|50.84|247|W|saska kamenice,Chengde|hebei|CN|117.96|40.95|449|W|ccheng te,Chengdu|sichuan|CN|104.07|30.67|13568|W|thanh do;cengdu;ccheng tu,Chengguan Qu|tibet|CN|91.04|29.64|478|W|,Chenghua|guangdong|CN|116.77|23.46|152|W|,Chengzhong|hubei|CN|113.55|30.94|265|W|,Chennai|tamil nadu|IN|80.28|13.09|4681|W|cennaj;cennai;madras,Chenzhou|hunan|CN|113.03|25.8|822|W|,Cheonan|chungcheongnam do|KR|127.15|36.81|658|W|cchonan,Cheongju-si|north chungcheong|KR|127.49|36.64|852|W|cheongju,Cheras|selangor|MY|101.73|3.11|135|W|,Cherepovets|vologda oblast|RU|37.9|59.13|315|W|cerepovet;czerepowiec;tcherepovets;tjerepovets;tscherepowez;tsjerepovets;tserepovets;cerepovets;cerepovec,Cherkasy|cherkasy|UA|32.06|49.44|269|W|cerkasi;czerkasy;tcherkassy;tcherkassi;tjerkasy;tscherkassy;tsjerkasy;tserkasy;cerkassi;cerkasy;cherkassy,Chernihiv|chernihiv oblast|UA|31.29|51.51|282|W|cernigau;chernigov;czernihow;tchernihiv;tjernihiv;tschernihiw;tsjernihiv;tsernihiv;cernigiv;cernihiv;cernihov;cernigovia,Chernivtsi|chernivtsi|UA|25.93|48.29|264|W|cernivci;cernovizza;cernauti;czerniowce;czernowitz;tchernivtsi;tjernivtsi;tschernowitz;tsjernivtsi;tsernivtsi;cernivtsi;cernovice,Cherry Hill|NJ|US|-75.03|39.93|70|N|,Chertanovo Yuzhnoye|moscow|RU|37.6|55.59|142|W|,Chesapeake|VA|US|-76.27|36.82|235|NW|,Cheshire|CT|US|-72.9|41.5|29|N|,Chester|PA|US|-75.36|39.85|34|N|,Chesterfield|MO|US|-90.58|38.66|47|N|,Chestermere|AB|CA|-113.82|51.03|32|N|,Chetumal|MX23|MX|-88.3|18.52|169|NW|,Cheyenne|WY|US|-104.82|41.14|65|N|,Chhatarpur|madhya pradesh|IN|79.59|24.92|142|W|chhattarpur,Chhindwara|madhya pradesh|IN|78.94|22.06|175|W|,Chi Linh|hai phong|VN|106.32|21.07|220|W|,Chiapa de Corzo|MX05|MX|-93.01|16.71|45|N|,Chiayi City|taiwan|TW|120.45|23.48|263|W|jiayi shi,Chiba|chiba|JP|140.12|35.6|979|W|ciba,Chicago|IL|US|-87.65|41.85|2664|NW|sikago,Chicago Heights|IL|US|-87.64|41.51|30|N|,Chicago Lawn|IL|US|-87.7|41.78|55|N|,Chicago Loop|IL|US|-87.63|41.88|33|N|loop,Chichicastenango|quiche|GT|-91.11|14.94|141|W|,Chiclayo|lambayeque|PE|-79.85|-6.77|609|W|,Chico|CA|US|-121.84|39.73|121|N|,Chicoloapan|MX15|MX|-98.9|19.42|172|NW|san vicente chicoloapan,Chicopee|MA|US|-72.61|42.15|56|N|,Chicoutimi|QC|CA|-71.06|48.42|69|N|,Chifeng|inner mongolia|CN|118.96|42.27|346|W|tschifong;xich phong;cch feng,Chigasaki|kanagawa|JP|139.4|35.34|242|W|,Chihuahua|MX06|MX|-106.09|28.64|925|NW|chihuahua city;chihuahua by,Chilanzar|tashkent|UZ|69.18|41.28|260|W|,Chilapa de Alvarez|MX12|MX|-99.17|17.6|31|N|,Chillan|nuble|CL|-72.1|-36.61|150|W|,Chilliwack|BC|CA|-121.95|49.17|101|N|,Chilliwack-Downtown|BC|CA|-121.96|49.16|31|N|,Chillum|MD|US|-76.99|38.96|33|N|,Chilpancingo|MX12|MX|-99.5|17.55|187|NW|chilpancingo de los bravo,Chimbote|ancash|PE|-78.59|-9.08|316|W|,Chimoio|manica|MZ|33.48|-19.12|422|W|,Chinatown|CA|US|-122.41|37.8|100|N|,Chinatown|NY|US|-74|40.72|90|N|,Chincha Alta|ica|PE|-76.13|-13.41|153|W|,Chingola|copperbelt|ZM|27.88|-12.53|256|W|,Chiniot|punjab|PK|72.98|31.72|318|W|,Chinju|gyeongsangnam do|KR|128.08|35.19|307|W|jinju,Chino|CA|US|-117.69|34.01|85|N|,Chino Hills|CA|US|-117.76|33.99|78|N|,Chipata|eastern province|ZM|32.65|-13.63|327|W|,Chirchiq|tashkent region|UZ|69.58|41.47|162|W|circik;tchirtchik;tjirtjik;circig,Chishtian|punjab|PK|72.86|29.8|149|W|,Chisinau|chisinau municipality|MD|28.86|47.01|635|W|kishinev;kiszyniow;kisinev,Chita|zabaykalskiy transbaikal kray|RU|113.49|52.04|349|W|tsjita;tchita;tschita;tsita;cita,Chitato|luanda norte|AO|20.73|-7.3|246|W|,Chitradurga|karnataka|IN|76.4|14.22|145|W|,Chittoor|andhra pradesh|IN|79.1|13.21|160|W|chittur,Chitungwiza|harare|ZW|31.08|-18.01|371|W|,Chizhou|anhui|CN|117.48|30.66|615|W|,Chlef|chlef|DZ|1.33|36.17|178|W|ech cheliff;szalif;asch schalif;ash shalif;al asnam,Cho Lon|ho chi minh city hcmc|VN|106.65|10.75|561|W|,Choa Chu Kang New Town||SG|103.75|1.38|187|W|,Chofu|tokyo|JP|139.55|35.66|242|W|,Choloma|cortes department|HN|-87.95|15.61|139|W|,Cholula|MX21|MX|-98.3|19.06|292|NW|cholula de rivadavia;san pedro cholula,Chom Thong|bangkok|TH|100.48|13.68|158|W|,Chomedey|QC|CA|-73.75|45.53|94|N|,Chon Buri|chon buri|TH|100.98|13.36|219|W|,Chongjin|north hamgyong|KP|129.78|41.8|327|W|ch ongjin;cchongdzin,Chongming||CN|121.7|31.62|637|W|,Chongqing|chongqing|CN|106.56|29.56|7457|W|trung khanh;tsjoengking;congcing;cchung cching,Chongzuo|guangxi|CN|107.37|22.38|384|W|,Christchurch|canterbury|NZ|172.63|-43.53|419|W|,Chula Vista|CA|US|-117.08|32.64|265|NW|,Chuncheon|gangwon do|KR|127.73|37.87|284|W|cunceon;cchuncchon,Chungju|north chungcheong|KR|127.93|36.98|209|W|cungcu;cchungdzu,Chunian|punjab|PK|73.98|30.97|634|W|,Chuo|tokyo|JP|139.78|35.67|169|W|chuo city,Church-Yonge Corridor|ON|CA|-79.38|43.66|31|N|,Chuxiong|yunnan|CN|101.55|25.04|555|W|,Chuzhou|anhui|CN|118.3|32.32|782|W|cchu cou,Ciampea|west java|ID|106.7|-6.55|207|W|,Cianjur|west java|ID|107.14|-6.82|174|W|kabupaten de cianjur,Cibinong|west java|ID|106.85|-6.48|363|W|,Cibolo|TX|US|-98.23|29.56|33|N|,Cicero|IL|US|-87.75|41.85|83|N|,Cicero|NY|US|-76.12|43.18|31|N|,Cidade Ademar|sao paulo|BR|-46.66|-23.67|249|W|,Cidade Dutra|sao paulo|BR|-46.7|-23.73|182|W|,Cidade Lider|sao paulo|BR|-46.49|-23.56|136|W|,Cidade Tiradentes|sao paulo|BR|-46.4|-23.58|192|W|,Ciego de Avila|ciego de avila province|CU|-78.76|21.84|142|W|,Cienfuegos|cienfuegos province|CU|-80.45|22.15|186|W|,Cigli|izmir province|TR|27.07|38.5|214|W|,Cihuatlan|MX14|MX|-104.57|19.24|40|N|,Cikupa|west java|ID|106.51|-6.24|174|W|,Cilacap|central java|ID|109.01|-7.73|256|W|,Cilegon|banten|ID|106.05|-6.01|470|W|,Cileungsir|west java|ID|106.96|-6.39|289|W|,Cimahi|west java|ID|107.54|-6.87|581|W|kota cimahi,Cincinnati|OH|US|-84.51|39.13|311|NW|,Cintalapa de Figueroa|MX05|MX|-93.72|16.68|42|N|,Ciputat|west java|ID|106.7|-6.24|207|W|,Circoiscrizione II|piedmont|IT|7.64|45.05|141|W|,Circoiscrizione III|piedmont|IT|7.63|45.06|130|W|,Circoiscrizione VIII|piedmont|IT|7.67|45.04|134|W|,Cirebon|west java|ID|108.56|-6.71|344|W|kota cirebon,Citeureup|west java|ID|106.88|-6.49|214|W|,Citrus Heights|CA|US|-121.28|38.71|87|N|,City of Milford (balance)|CT|US|-73.06|41.22|51|N|,City of Sammamish|WA|US|-122.04|47.6|45|N|,City of Westminster|england|GB|-0.14|51.5|247|W|,Ciudad Acuna|MX07|MX|-100.95|29.32|216|NW|acuna,Ciudad Altamirano|MX12|MX|-100.67|18.36|25|N|,Ciudad Apodaca|MX19|MX|-100.19|25.78|467|NW|apodaca,Ciudad Benito Juarez|MX19|MX|-100.09|25.65|308|NW|,Ciudad Bolivar|bolivar|VE|-63.55|8.12|412|W|,Ciudad Camilo Cienfuegos|havana|CU|-82.33|23.16|178|W|,Ciudad Constitucion|MX03|MX|-111.66|25.03|40|N|,Ciudad de Allende|MX19|MX|-100.02|25.28|26|N|allende,Ciudad de Huajuapan de Leon|MX20|MX|-97.78|17.81|53|N|huajuapan;huajuapan de leon;huajuapam;huajuapam de leon,Ciudad de Villa de Alvarez|MX08|MX|-103.74|19.27|117|N|,Ciudad del Carmen|MX04|MX|-91.83|18.65|191|NW|cd carmen;cd del carmen;carmen,Ciudad del Este|alto parana department|PY|-54.65|-25.5|301|W|kota del este,Ciudad Delicias|MX06|MX|-105.47|28.19|148|NW|akitakata;delicias,Ciudad Fernandez|MX24|MX|-100.01|21.94|32|N|,Ciudad General Escobedo|MX19|MX|-100.32|25.8|454|NW|gral escobedo;general escobedo,Ciudad Guayana|bolivar|VE|-62.64|8.35|978|W|cidade guaiana;guayana,Ciudad Guzman|MX14|MX|-103.46|19.7|111|N|cd guzman,Ciudad Hidalgo|MX16|MX|-100.56|19.69|60|N|,Ciudad Juarez|MX06|MX|-106.46|31.72|1512|NW|juarez,Ciudad Lazaro Cardenas|MX16|MX|-102.2|17.96|196|NW|lazaro cardenas,Ciudad Lineal|madrid|ES|-3.65|40.45|228|W|,Ciudad Lopez Mateos|MX15|MX|-99.26|19.56|489|NW|adolfo lopez mateos,Ciudad Madero|MX28|MX|-97.84|22.25|197|NW|cd madero,Ciudad Mante|MX28|MX|-98.97|22.74|84|N|,Ciudad Melchor Muzquiz|MX07|MX|-101.52|27.88|35|N|,Ciudad Mendoza|MX30|MX|-97.18|18.81|35|N|,Ciudad Nezahualcoyotl|MX15|MX|-99.01|19.4|1077|NW|cd neza;cd nezahualcoyotl;ciudad neza;neza;nezahualcoyotl,Ciudad Obregon|MX26|MX|-109.94|27.49|329|NW|cd obregon,Ciudad Ojeda|zulia|VE|-71.31|10.2|240|W|,Ciudad Rio Bravo|MX28|MX|-98.09|25.99|95|N|,Ciudad Sabinas Hidalgo|MX19|MX|-100.18|26.5|33|N|,Ciudad Sahagun|MX13|MX|-98.57|19.78|28|N|,Ciudad Valles|MX24|MX|-99.01|22|124|N|,Ciudad Victoria|MX28|MX|-99.14|23.74|332|NW|cd victoria;victoria,Cixi|zhejiang|CN|121.25|30.18|1457|W|,Cizre|sirnak|TR|42.18|37.33|134|W|,Clairlea-Birchmount|ON|CA|-79.28|43.71|26|N|,Claremont|CA|US|-117.72|34.1|36|N|,Clarksville|TN|US|-87.36|36.53|166|NW|,Clay|NY|US|-76.17|43.19|58|N|,Clearfield|UT|US|-112.03|41.11|30|N|,Clearwater|FL|US|-82.8|27.97|117|N|,Cleburne|TX|US|-97.39|32.35|30|N|,Clermont|FL|US|-81.77|28.55|32|N|,Clermont-Ferrand|rhone alpes|FR|3.09|45.78|147|W|,Cleveland|OH|US|-81.7|41.5|365|NW|,Cleveland|TN|US|-84.88|35.16|43|N|,Cleveland Heights|OH|US|-81.56|41.52|44|N|,Clifton|NJ|US|-74.16|40.86|86|N|,Clifton Park|NY|US|-73.77|42.87|36|N|,Clinton|MD|US|-76.9|38.77|35|N|robeystown;surrats;surratsville;surratts;surrattsville,Clinton|IA|US|-90.19|41.84|26|N|,Clinton|MS|US|-90.32|32.34|25|N|,Clinton Township|MI|US|-82.92|42.59|99|N|,Cloverdale|BC|CA|-122.73|49.11|73|N|,Clovis|CA|US|-119.7|36.83|104|N|,Clovis|NM|US|-103.21|34.4|39|N|,Cluj-Napoca|cluj county|RO|23.6|46.77|286|W|klausenburg;clausenburg;kalosvar;kluz napoka;kluz;kolozsvar;clausemburgo,Coacalco|MX15|MX|-99.11|19.63|277|NW|coacalco de berriozaval;san francisco coacalco,Coachella|CA|US|-116.17|33.68|44|N|,Coatepec|MX30|MX|-96.96|19.45|53|N|,Coatzacoalcos|MX30|MX|-94.44|18.15|310|NW|puerto mexico;port of mexico,Coatzintla|MX30|MX|-97.47|20.49|34|N|,Coban|alta verapaz|GT|-90.37|15.47|212|W|,Cobbs Creek|PA|US|-75.24|39.95|33|N|,Cochabamba|cochabamba|BO|-66.16|-17.38|841|W|,Cochrane|AB|CA|-114.47|51.18|32|N|,Coconut Creek|FL|US|-80.18|26.25|59|N|,Cocula|MX14|MX|-103.82|20.37|29|N|,Coeur d'Alene|ID|US|-116.78|47.68|49|N|,Coimbatore|tamil nadu|IN|76.97|11.01|2136|W|koimbatur,Coimbra|coimbra|PT|-8.42|40.21|140|W|,Colchester|england|GB|0.9|51.89|130|W|,Colima|MX08|MX|-103.71|19.24|146|NW|,Colina|santiago metropolitan|CL|-70.67|-33.2|146|W|,College Park|MD|US|-76.94|38.98|32|N|,College Point|NY|US|-73.85|40.79|27|N|,College Station|TX|US|-96.33|30.63|107|N|,Colleyville|TX|US|-97.16|32.88|25|N|,Collierville|TN|US|-89.66|35.04|48|N|,Collinwood|OH|US|-81.57|41.56|34|N|,Colombo|western province|LK|79.85|6.94|648|W|kolombo,Colombo|parana|BR|-49.22|-25.29|232|W|,Colonia del Sol|MX03|MX|-109.93|22.91|48|N|,Colonia del Valle|MX09|MX|-99.16|19.39|250|NW|col del valle;del valle,Colonia Lindavista|MX15|MX|-99.12|19.49|100|N|col lindavista;lindavista,Colonia Nativitas|MX09|MX|-99.14|19.38|60|N|col nativitas;nativitas,Colorado Springs|CO|US|-104.82|38.83|456|NW|colorado spgs,Colton|CA|US|-117.31|34.07|54|N|,Columbia|SC|US|-81.03|34|142|NW|,Columbia|MO|US|-92.33|38.95|129|N|,Columbia|MD|US|-76.84|39.24|99|N|,Columbia|TN|US|-87.04|35.62|36|N|,Columbia Heights|DC|US|-77.03|38.93|38|N|meridian hill;meridian hill heights,Columbus|OH|US|-83|39.96|913|NW|,Columbus|GA|US|-84.99|32.46|206|NW|,Columbus|IN|US|-85.92|39.2|46|N|,Comalcalco|MX27|MX|-93.22|18.26|41|N|,Comilla|chittagong|BD|91.19|23.46|634|W|kumilla,Comitan|MX05|MX|-92.14|16.24|166|NW|comitan de dominguez,Commack|NY|US|-73.29|40.84|36|N|,Commerce City|CO|US|-104.93|39.81|53|N|,Commonwealth|national capital region|PH|121.08|14.7|215|W|,Comodoro Rivadavia|chubut|AR|-67.49|-45.86|140|W|,Compton|CA|US|-118.22|33.9|98|N|,Conakry|conakry|GN|-13.68|9.54|1928|W|conacri;konakry,Concepcion|biobio|CL|-73.05|-36.83|223|W|konsepsi,Concepcion|central luzon|PH|120.66|15.33|178|W|,Conception Bay South|NL|CA|-53|47.5|27|N|,Concord|CA|US|-122.03|37.98|128|N|,Concord|NC|US|-80.58|35.41|87|N|,Concord|NH|US|-71.54|43.21|43|N|,Concordia|entre rios|AR|-58.02|-31.39|145|W|,Coney Island|NY|US|-73.99|40.58|60|N|coney adasi,Confederation|SK|CA|-106.7|52.14|70|N|,Conroe|TX|US|-95.46|30.31|68|N|,Conselheiro Lafaiete|minas gerais|BR|-43.79|-20.66|138|W|,Constanta|constanta county|RO|28.63|44.18|317|W|konstanza;constanza;constanca;costanza;konstanca;kostence;kustence,Constantine|constantine|DZ|6.61|36.37|448|W|constantina,Contagem|minas gerais|BR|-44.05|-19.93|627|W|,Contla|MX29|MX|-98.17|19.33|27|N|,Conway|AR|US|-92.44|35.09|64|N|,Cookeville|TN|US|-85.5|36.16|32|N|,Coon Rapids|MN|US|-93.29|45.12|62|N|,Cooper City|FL|US|-80.27|26.06|35|N|,Copenhagen|capital region|DK|12.57|55.68|1153|W|copenaghen;copenhaga;copenhague;kodan;kopenhag;kopenhaga;kopenhagen;kopenhamn;koopenhamina;kobenhavn,Coppell|TX|US|-97.02|32.95|41|N|,Copperas Cove|TX|US|-97.9|31.12|33|N|,Coquimbo|coquimbo region|CL|-71.34|-29.95|161|W|,Coquitlam|BC|CA|-122.78|49.28|148|NW|,Coquitlam West|BC|CA|-122.88|49.26|25|N|,Coral Gables|FL|US|-80.27|25.72|51|N|,Coral Springs|FL|US|-80.27|26.27|129|N|,Coram|NY|US|-73|40.87|39|N|,Cordoba|cordoba|AR|-64.19|-31.41|2106|W|ciudad de cordoba;cordova,Cordoba|andalusia|ES|-4.77|37.89|325|W|cordoue;cordova;kordoba,Cordoba|MX30|MX|-96.93|18.88|204|NW|,Cordova|TN|US|-89.78|35.16|68|N|,Core Neighbourhoods|SK|CA|-106.67|52.13|36|N|,Cork|munster|IE|-8.47|51.9|224|W|cork city,Corlu|tekirdag|TR|27.8|41.16|202|W|,Cornelius|NC|US|-80.86|35.49|28|N|,Cornwall|ON|CA|-74.73|45.02|48|N|,Coro|falcon|VE|-69.68|11.41|246|W|,Corona|CA|US|-117.57|33.88|164|NW|,Corona|NY|US|-73.86|40.75|109|N|,Corpus Christi|TX|US|-97.4|27.8|316|NW|,Corrientes|corrientes|AR|-58.83|-27.47|346|W|ciudad de corrientes,Cortazar|MX11|MX|-100.96|20.48|61|N|,Corum|corum|TR|34.95|40.55|269|W|,Corvallis|OR|US|-123.26|44.56|55|N|,Cosamaloapan|MX30|MX|-95.8|18.37|30|N|,Costa Mesa|CA|US|-117.92|33.64|113|N|,Cotabato|autonomous region in muslim mindanao|PH|124.25|7.22|383|W|cotabato city,Cote-Saint-Luc|QC|CA|-73.67|45.47|31|N|,Cotia|sao paulo|BR|-46.92|-23.6|253|W|,Cotonou|littoral|BJ|2.42|6.37|679|W|cotonu;kotonu,Cottage Grove|MN|US|-92.94|44.83|35|N|,Cottonwood Heights|UT|US|-111.81|40.62|34|N|,Council Bluffs|IA|US|-95.86|41.26|62|N|co bluffs,Country Club|FL|US|-80.32|25.95|47|N|,Courtenay|BC|CA|-124.99|49.69|28|N|,Coventry|england|GB|-1.51|52.41|345|W|,Coventry|RI|US|-71.68|41.7|35|N|,Covina|CA|US|-117.89|34.09|48|N|,Covington|KY|US|-84.51|39.08|40|N|,Cox's Bazar|chittagong|BD|92.01|21.44|253|W|,Coyoacan|MX09|MX|-99.16|19.35|614|NW|,Coyotepec|MX15|MX|-99.21|19.78|35|N|,Coyula|MX14|MX|-103.23|20.66|29|N|,Cozumel|MX23|MX|-86.94|20.5|77|N|san miguel de cozumel,Craiova|dolj|RO|23.8|44.32|234|W|krajowa,Cranberry Township|PA|US|-80.11|40.68|28|N|,Cranston|RI|US|-71.44|41.78|81|N|,Crato|ceara|BR|-39.41|-7.23|139|W|,Criciuma|santa catarina|BR|-49.37|-28.68|227|W|,Crofton|MD|US|-76.69|39|27|N|,Croix-des-Bouquets|ouest|HT|-72.23|18.58|229|W|,Crown Point|IN|US|-87.37|41.42|28|N|,Croydon|england|GB|-0.1|51.38|173|W|croydon grants,Crystal Lake|IL|US|-88.32|42.24|40|N|,Cua|miranda|VE|-66.88|10.16|182|W|,Cuauhtemoc|MX09|MX|-99.15|19.45|531|NW|,Cuauhtemoc|MX06|MX|-106.87|28.41|168|NW|,Cuautitlan|MX15|MX|-99.18|19.67|178|NW|,Cuautitlan Izcalli|MX15|MX|-99.22|19.64|555|NW|izcalli,Cuautla|MX17|MX|-98.94|18.81|157|NW|,Cuautlancingo|MX21|MX|-98.27|19.09|25|N|san juan b cuautlancingo,Cucuta|norte de santander department|CO|-72.5|7.91|777|W|kukuta,Cuddalore|tamil nadu|IN|79.77|11.76|173|W|gondelour,Cuenca|azuay|EC|-79|-2.9|636|W|,Cuernavaca|MX17|MX|-99.23|18.93|338|NW|,Cuiaba|mato grosso|BR|-56.1|-15.6|618|W|culaba,Cuito|bie|AO|16.93|-12.38|355|W|kuito,Culiacan|MX25|MX|-107.39|24.8|808|NW|,Culver City|CA|US|-118.4|34.02|39|N|,Cumana|sucre|VE|-64.18|10.46|405|W|,Cumberland|RI|US|-71.43|41.97|34|N|,Cupertino|CA|US|-122.03|37.32|60|N|,Curitiba|parana|BR|-49.27|-25.43|1948|W|kurytyba,Curug|banten|ID|106.56|-6.27|191|W|,Cusco|cuzco department|PE|-71.97|-13.53|428|W|ciudad del cuzco;cuzco,Cutler Bay|FL|US|-80.34|25.58|45|N|cutler ridge,Cutler Ridge|FL|US|-80.35|25.58|26|N|,Cuttack|odisha|IN|85.88|20.46|610|W|,Cuyahoga Falls|OH|US|-81.48|41.13|49|N|,Cypress|TX|US|-95.7|29.97|200|NW|,Cypress|CA|US|-118.04|33.82|49|N|,Cypress Hills|NY|US|-73.89|40.68|54|N|,Czestochowa|silesia|PL|19.12|50.8|248|W|czenstochau;censtochova;tschenstochau,Da Lat|lam dong|VN|108.44|11.95|258|W|,Da Nang|da nang city|VN|108.22|16.07|1276|W|danang;thanh thai phien,Dabou|lagunes district|CI|-4.38|5.33|138|W|,Dachang|shanghai|CN|121.42|31.31|371|W|,Dadu|sindh|PK|67.78|26.73|201|W|,Daegu|daegu|KR|128.59|35.87|2365|W|daegu si;taegu;tegu,Daejeon|daejeon|KR|127.38|36.35|1441|W|daejeon si;taejon,Dagupan|ilocos|PH|120.33|16.04|171|W|kota dagupan,Dajal|punjab|PK|70.38|29.56|200|W|,Dakar|dakar|SN|-17.44|14.69|2646|W|dacar,Dakota Ridge|CO|US|-105.14|39.62|33|N|,Dale City|VA|US|-77.31|38.64|65|N|,Dali|yunnan|CN|100.21|25.58|235|W|,Dalian|liaoning|CN|121.6|38.91|4913|W|luta;luda,Daliang|guangdong|CN|113.25|22.84|210|W|shunde,Dallas|TX|US|-96.81|32.78|1326|NW|,Daloa|sassandra marahoue|CI|-6.45|6.88|421|W|,Dalton|GA|US|-84.97|34.77|33|N|,Dalupura|delhi|IN|77.32|28.61|154|W|,Daly City|CA|US|-122.46|37.71|106|N|,Damanhur|beheira|EG|30.47|31.03|318|W|,Damascus|damascus governorate|SY|36.29|33.51|1569|W|damasco;damas;damasc;damaskos;damaskus;damaszek;damasek;sam,Damietta|damietta|EG|31.81|31.42|305|W|damieta;damiette;dimyat;dimyath,Dammam|eastern province|SA|50.1|26.43|1252|W|ad dammam;ed dammam,Damoh|madhya pradesh|IN|79.44|23.83|139|W|,Dana Point|CA|US|-117.7|33.47|34|N|,Danbury|CT|US|-73.45|41.39|84|N|,Dandong|liaoning|CN|124.39|40.13|631|W|dan dong;andong,Dania Beach|FL|US|-80.14|26.05|31|N|,Danli|el paraiso department|HN|-86.58|14.03|233|W|,Danshui|taipei|TW|121.44|25.17|189|W|tamsui,Danvers|MA|US|-70.93|42.58|26|N|,Danville|CA|US|-122|37.82|44|N|,Danville|VA|US|-79.4|36.59|42|N|,Danville|IL|US|-87.63|40.12|32|N|,Daqing|heilongjiang|CN|125|46.58|1604|W|ta cching;taching,Dar Bouazza|casablanca settat|MA|-7.82|33.52|165|W|,Dar es Salaam|dar es salaam region|TZ|39.27|-6.82|5383|W|dar es salam;daressalam;darusselam,Darbhanga|bihar|IN|85.9|26.15|296|W|,Darmstadt|hesse|DE|8.65|49.87|167|W|,Darnytsya|kyiv city|UA|30.7|50.42|343|W|darnytsia;darnytskyi raion;darnytskyi rayon;darnytskyy raion;darnytskyy rayon,Dartmouth|NS|CA|-63.58|44.67|101|N|darmouth,Darwin|northern territory|AU|130.84|-12.46|139|W|port darwin,Dasmarinas|calabarzon|PH|120.94|14.33|441|W|kota dasmarinas,Dasoguz|dasoguz|TM|59.97|41.84|201|W|dashoguz;daszoguz;dashowuz;tasjauz,Datong|shanxi|CN|113.29|40.09|1850|W|ta tchung,Daule|guayas|EC|-79.98|-1.86|173|W|,Davangere|karnataka|IN|75.93|14.47|435|W|,Davao|davao region|PH|125.61|7.07|1848|W|davao city,Davenport|IA|US|-90.58|41.52|102|N|,Davie|FL|US|-80.23|26.06|100|N|,Davis|CA|US|-121.74|38.54|67|N|,Dawei|tanintharyi region|MM|98.19|14.08|136|W|tavoy,Dawukou|ningxia|CN|106.4|39.04|131|W|,Daxing'anling|heilongjiang|CN|124.71|52.33|520|W|,Daye|hubei|CN|114.95|30.08|347|W|,Dayrah|dubai|AE|55.3|25.27|400|W|deira,Dayton|OH|US|-84.19|39.76|135|NW|,Daytona Beach|FL|US|-81.02|29.21|72|N|daytona,Dazhou|sichuan|CN|107.46|31.21|1589|W|ta cou,Dearborn|MI|US|-83.18|42.32|95|N|,Dearborn Heights|MI|US|-83.27|42.34|56|N|,Debre Birhan|amhara|ET|39.53|9.68|146|W|debre berhan;debre byrhan,Debre Mark'os|amhara|ET|37.73|10.35|140|W|,Debrecen|hajdu bihar|HU|21.62|47.53|202|W|debreczyn;debrecin;debretin,Decatur|IL|US|-88.95|39.84|73|N|,Decatur|AL|US|-86.98|34.61|55|N|,Deer Park|TX|US|-95.12|29.71|33|N|,Deer Park|NY|US|-73.33|40.76|27|N|,Deer Valley|AZ|US|-112.13|33.68|165|NW|,Deerfield Beach|FL|US|-80.1|26.32|79|N|,Dehiwala-Mount Lavinia|western province|LK|79.87|6.84|219|W|mount lavinia,Dehradun|uttarakhand|IN|78.03|30.32|522|W|dehra dun,Deir ez-Zor|deir ez zor|SY|40.14|35.34|271|W|dayr az zawr;dajr az zaur;dayr al zawr;deir azzor;deir al zour;deir el zor;deir es sor;der ezzor;deyrez zor;deyrizor,DeKalb|IL|US|-88.75|41.93|43|N|,Del Rio|TX|US|-100.9|29.36|36|N|,DeLand|FL|US|-81.3|29.03|30|N|de land,Delano|CA|US|-119.25|35.77|52|N|,Delaware|OH|US|-83.07|40.3|37|N|,Delegacion Cuajimalpa de Morelos|MX09|MX|-99.29|19.37|160|NW|cuajimalpa de morelos,Delhi|delhi|IN|77.23|28.65|11034|W|dilli;deli;sahdzahanabad,Delmas|ouest|HT|-72.3|18.54|395|W|,Delray Beach|FL|US|-80.07|26.46|66|N|del ray beach,Delta|BC|CA|-123.05|49.09|101|N|,Deltona|FL|US|-81.26|28.9|88|N|,Dengzhou|henan|CN|112.09|32.68|285|W|,Denizli|denizli|TR|29.09|37.77|313|W|,Denpasar|bali|ID|115.22|-8.65|670|W|dempasar;dempassar;denpasar bali;kota denpasar,Denton|TX|US|-97.13|33.21|131|NW|,Denver|CO|US|-104.98|39.74|729|NW|,Deoghar|jharkhand|IN|86.7|24.49|203|W|,Deoli|delhi|IN|77.23|28.5|169|W|,Depok|west java|ID|106.82|-6.4|2163|W|kota depok,Dera Ghazi Khan|punjab|PK|70.64|30.05|494|W|,Dera Ismail Khan|khyber pakhtunkhwa|PK|70.9|31.83|763|W|,Derby|england|GB|-1.48|52.92|270|W|,Derry Village|NH|US|-71.31|42.89|34|N|,Des Moines|IA|US|-93.61|41.6|214|NW|,Des Moines|WA|US|-122.32|47.4|31|N|desmoines,Des Plaines|IL|US|-87.88|42.03|58|N|,Desert Hot Springs|CA|US|-116.5|33.96|28|N|,Desmarchais-Crawford|QC|CA|-73.58|45.45|29|N|,Desna|kyiv city|UA|30.68|50.52|368|W|,Desnyanskyi|chernihiv oblast|UA|31.32|51.51|179|W|desnianskyi;desnianskyi raion;desnyanskyi rayon,DeSoto|TX|US|-96.86|32.59|52|N|,Dessalines|artibonite|HT|-72.52|19.26|181|W|,Dessie|amhara|ET|39.63|11.13|270|W|dese;desje,Detroit|MI|US|-83.05|42.33|645|NW|,Dewas|madhya pradesh|IN|76.06|22.97|289|W|,Deyang|sichuan|CN|104.38|31.13|735|W|te jang,Dezful|khuzestan|IR|48.41|32.38|264|W|dezfoul,Dezhou|shandong|CN|116.37|37.45|679|W|te cou,Dhaka|dhaka division|BD|90.41|23.71|10356|W|daca;dacca;dakka,Dhamar|dhamar|YE|44.41|14.54|160|W|damar,Dhanbad|jharkhand|IN|86.43|23.8|1196|W|,Dhangadhi|sudurpashchim pradesh|NP|80.59|28.7|204|W|,Dharan|koshi|NP|87.28|26.81|173|W|,Dharavi|maharashtra|IN|72.87|19.05|700|W|,Dhaulpur|rajasthan|IN|77.88|26.69|133|W|,Dhirkot|azad kashmir|PK|73.58|34.04|195|W|,Dhule|maharashtra|IN|74.78|20.9|375|W|,Di An|ho chi minh city hcmc|VN|106.77|10.91|463|W|,Diadema|sao paulo|BR|-46.62|-23.69|403|W|,Diamond Bar|CA|US|-117.81|34.03|56|N|,Dibrugarh|assam|IN|94.91|27.48|145|W|,Dieppe|NB|CA|-64.69|46.08|27|N|,Diepsloot|gauteng|ZA|28.01|-25.93|350|W|,Diez de Octubre|havana|CU|-82.36|23.09|227|W|,Digri|sindh|PK|69.11|25.16|234|W|,Dihok|duhok|IQ|42.99|36.87|340|W|dahuk;dohuk;duhok,Dijon|bourgogne|FR|5.01|47.31|159|W|digione,Dila|south ethiopia regional state|ET|38.32|6.42|158|W|,Dili|dili municipality|TL|125.57|-8.56|150|W|,Dimapur|nagaland|IN|93.72|25.91|135|W|,Dimitrovgrad|ulyanovsk|RU|49.62|54.21|132|W|dimitrowgrad,Din Daeng|bangkok|TH|100.57|13.79|130|W|,Dinajpur|rangpur division|BD|88.64|25.63|206|W|,Dinapore|bihar|IN|85.05|25.64|152|W|,Dinapur Nizamat|bihar|IN|85.05|25.64|182|W|,Dindigul|tamil nadu|IN|77.98|10.37|292|W|dindukkal,Dingxi|gansu|CN|104.62|35.57|420|W|,Dingzhou|hebei|CN|114.99|38.51|152|W|,Diourbel|diourbel region|SN|-16.24|14.65|157|W|,Dire Dawa|dire dawa|ET|41.87|9.59|343|W|dire daua,Disuq|kafr el sheikh|EG|30.65|31.13|149|W|,Divinopolis|minas gerais|BR|-44.89|-20.14|231|W|,Divo|goh djiboua|CI|-5.36|5.84|136|W|,Dix Hills|NY|US|-73.34|40.8|26|N|,Dixinn|conakry|GN|-13.67|9.55|137|W|,Diyarbakir|diyarbakir province|TR|40.22|37.91|1833|W|amida,Djelfa|djelfa|DZ|3.26|34.67|265|W|dzilfa,Djibouti|djibouti|DJ|43.15|11.59|626|W|cibuti;dschibuti;dzibuti;gibuti;yibuti,Dnipro|dnipropetrovsk|UA|35.04|48.47|968|W|dniepr;dnjepropetrovsk;dnepropetrovsk;caterinoslavia;catherinoslav;dnipropetrovs k;dnipropetrovsk;dniproslav;katerynoslav;novorosiynsk;novyy kodak;sicheslav,Dniprovskyi|kyiv city|UA|30.6|50.45|357|W|,Dodge City|KS|US|-100.02|37.75|27|N|,Dodoma|dodoma|TZ|35.74|-6.17|765|W|,Doha|baladiyat ad dawhah|QA|51.53|25.29|344|W|ad dauha;dauha,Doilungdeqen|tibet|CN|90.99|29.66|137|W|,Dollard-Des Ormeaux|QC|CA|-73.82|45.49|48|N|,Dolores Hidalgo|MX11|MX|-100.93|21.16|67|N|ciudad de dolores hidalgo,Dombivali|maharashtra|IN|73.08|19.22|1247|W|dombivli,Don Valley Village|ON|CA|-79.35|43.78|27|N|,Donaustadt|state of vienna|AT|16.46|48.23|187|W|,Donetsk|donetsk|UA|37.8|48.02|901|W|donezk;donec k;donetk;donieck;doneck;dinetsk;dinetske;iuziv;iuzivka;iuzove;oleksandrivka;yuziv;yuzove,Dong Ha|quang tri|VN|107.1|16.82|164|W|,Dongguan|guangdong|CN|113.75|23.02|9644|W|,Donghai|guangdong|CN|115.64|22.95|264|W|,Dongling|liaoning|CN|123.58|41.81|171|W|,Dongtai|jiangsu|CN|120.31|32.85|262|W|,Dongyang|zhejiang|CN|120.23|29.27|130|W|,Dongying|shandong|CN|118.49|37.46|998|W|tung jing;dong dinh,Doral|FL|US|-80.36|25.82|75|N|,Dorchester|MA|US|-71.07|42.3|97|N|,Dorset Park|ON|CA|-79.28|43.75|25|N|,Dortmund|north rhine westphalia|DE|7.47|51.51|588|W|,Dosquebradas|risaralda department|CO|-75.67|4.84|206|W|dos quebradas,Dothan|AL|US|-85.39|31.22|68|N|,Douala|littoral|CM|9.7|4.05|1338|W|duala,Douglasville|GA|US|-84.75|33.75|32|N|,Dourados|mato grosso do sul|BR|-54.81|-22.22|264|W|,Dover|DE|US|-75.52|39.16|39|N|,Dover|NH|US|-70.87|43.2|30|N|,Dovercourt-Wallace Emerson-Junction|ON|CA|-79.44|43.67|36|N|,Downers Grove|IL|US|-88.01|41.81|49|N|,Downey|CA|US|-118.13|33.94|114|N|,Downsview-Roding-CFB|ON|CA|-79.49|43.73|35|N|,Downtown DC|DC|US|-77.02|38.89|52|N|,Downtown Halifax|NS|CA|-63.58|44.65|25|N|,Downtown Vancouver|BC|CA|-123.12|49.28|62|N|,Dracut|MA|US|-71.3|42.67|28|N|,Draper|UT|US|-111.86|40.52|46|N|,Dresden|saxony|DE|13.74|51.05|564|W|dresda;dresde;drezno;drazdany,Drexel Heights|AZ|US|-111.03|32.14|27|N|,Drexel Hill|PA|US|-75.29|39.95|28|N|,Drummondville|QC|CA|-72.48|45.88|59|N|,Dubai|dubai|AE|55.31|25.08|3790|W|dubai city;dubaj,Dubai Investments Park|dubai|AE|55.16|25.01|160|W|,Dublin|leinster|IE|-6.25|53.33|1024|W|dublin city;dublino,Dublin|CA|US|-121.94|37.7|57|N|,Dublin|OH|US|-83.11|40.1|45|N|,Dubreka|kindia|GN|-13.52|9.79|182|W|,Dubuque|IA|US|-90.66|42.5|58|N|,Dudley|england|GB|-2.08|52.5|199|W|,Duesseldorf|north rhine westphalia|DE|6.78|51.22|618|W|dusseldorf,Duezce|duzce|TR|31.16|40.84|194|W|duzce,Duisburg|north rhine westphalia|DE|6.77|51.43|504|W|duisbourg;duisburgo,Duluth|MN|US|-92.11|46.78|86|N|,Duluth|GA|US|-84.14|34|29|N|,Dumai|riau|ID|101.44|1.67|349|W|kota dumai,Duncanville|TX|US|-96.91|32.65|39|N|,Dundalk|MD|US|-76.52|39.25|63|N|,Dundee|scotland|GB|-2.97|56.47|148|W|,Dundo|luanda norte|AO|20.82|-7.37|177|W|,Dunedin|otago|NZ|170.5|-45.87|132|W|,Dunedin|FL|US|-82.77|28.02|36|N|,Dunhua|jilin|CN|128.23|43.37|148|W|,Dunhuang|gansu|CN|94.68|40.17|186|W|tun chuang;don hoang,Dunwoody|GA|US|-84.33|33.95|48|N|,Duque de Caxias|rio de janeiro|BR|-43.31|-22.79|866|W|,Durban|kwazulu natal|ZA|31.03|-29.86|3338|W|port natal,Durg|chhattisgarh|IN|81.28|21.19|268|W|,Durgapur|west bengal|IN|87.31|23.52|518|W|,Durham|NC|US|-78.9|35.99|257|NW|,Durres|durres county|AL|19.45|41.32|195|W|drac;durazzo,Dushanbe|dushanbe|TJ|68.78|38.54|679|W|doesjanbe;douchanbe;duschanbe;dusjanbe;duszanbe;dusanbe,Duvernay|QC|CA|-73.67|45.58|37|N|,Duyun|guizhou|CN|107.52|26.27|198|W|,Dyker Heights|NY|US|-74.01|40.62|34|N|,Dzerzhinsk|nizhny novgorod oblast|RU|43.46|56.24|233|W|dserschinsk;dzerjinsk;dzerzjinsk;dzerzinsk;dzierzynsk,E'zhou|hubei|CN|114.89|30.4|668|W|ezhou;wuchang,Eagan|MN|US|-93.17|44.8|66|N|,Eagle Mountain|UT|US|-112.01|40.31|27|N|,Eagle Pass|TX|US|-100.5|28.71|28|N|,East Boston|MA|US|-71.04|42.38|43|N|,East Brunswick|NJ|US|-74.42|40.43|48|N|e brunswick;east brunswick township,East Chattanooga|TN|US|-85.25|35.07|154|NW|,East Chicago|IN|US|-87.45|41.64|28|N|,East Concord|NH|US|-71.54|43.24|42|N|,East Flatbush|NY|US|-73.93|40.65|178|NW|,East Florence|AL|US|-87.65|34.81|35|N|,East Hampton|VA|US|-76.33|37.04|147|NW|,East Harlem|NY|US|-73.94|40.79|115|N|harlem del este,East Hartford|CT|US|-72.61|41.78|51|N|,East Hastings|BC|CA|-123.06|49.27|80|N|,East Haven|CT|US|-72.87|41.28|29|N|,East Helsinki|uusimaa|FI|25.08|60.21|170|W|ita helsinki;ostra helsingfors,East Hill-Meridian|WA|US|-122.17|47.41|29|N|,East Honolulu|HI|US|-157.72|21.29|49|N|,East Independence|MO|US|-94.36|39.1|110|N|,East Jerusalem|west bank|PS|35.23|31.78|428|W|dogu kudus;gerusalemme est;jerusalem oriental;jerusalen este;jerusalem est;oost jeruzalem;ostjerusalem;vychodni jeruzalem;wschodnia jerozolima;yerusalem timur;ostra jerusalem;ost jerusalem;dong jerusalem,East Lake|FL|US|-82.69|28.11|30|N|,East Lansing|MI|US|-84.48|42.74|48|N|,East London|eastern cape|ZA|27.91|-33.02|478|W|buffalo city;kugompo city,East Los Angeles|CA|US|-118.17|34.02|126|N|dogu los angeles;este de los angeles,East Meadow|NY|US|-73.56|40.71|38|N|,East New York|NY|US|-73.88|40.67|173|NW|,East Norwalk|CT|US|-73.4|41.11|84|N|,East Orange|NJ|US|-74.2|40.77|64|N|,East Palo Alto|CA|US|-122.14|37.47|29|N|palo alto timur,East Pensacola Heights|FL|US|-87.18|30.43|54|N|,East Point|GA|US|-84.44|33.68|35|N|,East Providence|RI|US|-71.37|41.81|47|N|dong providence,East Saint Louis|IL|US|-90.15|38.62|27|N|,East Village|NY|US|-73.99|40.73|62|N|,Easton|PA|US|-75.22|40.69|26|N|,Eastpointe|MI|US|-82.96|42.47|32|N|,Eastvale|CA|US|-117.56|33.96|59|N|,Eau Claire|WI|US|-91.5|44.81|67|N|,Ebetsu|hokkaido|JP|141.55|43.11|133|W|,Ebina|kanagawa|JP|139.4|35.38|136|W|,Ebute Ikorodu|lagos|NG|3.49|6.6|535|W|,Ecatepec de Morelos|MX15|MX|-99.06|19.6|1645|NW|ecatepec,Echo Park|CA|US|-118.26|34.08|43|N|,Ede|osun state|NG|4.44|7.74|159|W|,Eden Prairie|MN|US|-93.47|44.85|63|N|,Edgewater|IL|US|-87.66|41.98|54|N|,Edgewood|MD|US|-76.29|39.42|25|N|,Edina|MN|US|-93.35|44.89|50|N|,Edinburg|TX|US|-98.16|26.3|84|N|,Edinburgh|scotland|GB|-3.2|55.95|514|W|edimburgo;edynburg;edimbourg,Edirne|edirne|TR|26.56|41.68|180|W|adrianopol;adrianopoli,Edison|NJ|US|-74.41|40.52|102|N|gmina edison,Edmond|OK|US|-97.48|35.65|90|N|,Edmonds|WA|US|-122.38|47.81|41|N|,Edmonton|AB|CA|-113.47|53.55|1010|NW|,Edogawe|tokyo|JP|139.87|35.69|697|W|edogawa city,Efon-Alaaye|ekiti state|NG|4.92|7.66|279|W|,Egypt Lake-Leto|FL|US|-82.51|28.02|35|N|,Eimsbuettel|hamburg|DE|9.96|53.57|269|W|eimsbuttel;bezirk eimsbuttel;distretto di eimsbuttel;hambourg eimsbuttel;hamburg eimsbuttel,Eindhoven|north brabant|NL|5.48|51.44|235|W|,Eixample|catalonia|ES|2.16|41.39|266|W|distrito del ensanche,Ejigbo|osun state|NG|4.31|7.9|138|W|,El Achir|bordj bou arreridj|DZ|4.63|36.06|158|W|,El Cajon|CA|US|-116.96|32.79|103|N|,El Centro|CA|US|-115.56|32.79|43|N|,El Daein|eastern darfur|SD|26.13|11.46|264|W|ad du ayn;ad duajn;ad du ain;ed daein,El Dibir|bari|SO|51.22|11.77|200|W|,El Dorado Hills|CA|US|-121.08|38.69|42|N|,El Eulma|setif|DZ|5.69|36.15|145|W|,El Fasher|northern darfur|SD|25.35|13.63|252|W|al fashir;al faschir,El Geneina Fort|western darfur|SD|22.46|13.47|134|W|,El Jadida|casablanca settat|MA|-8.51|33.26|212|W|al dzadida;el yadida;mazagao;castilho real;mazaghan,El Limon|aragua|VE|-67.63|10.31|148|W|,El Mirage|AZ|US|-112.32|33.61|33|N|,El Monte|CA|US|-118.03|34.07|116|N|,El Obeid|north kordofan|SD|30.22|13.18|393|W|al ubayyid,El Oued|el oued|DZ|6.86|33.36|186|W|al wadi;oued souf,El Paso|TX|US|-106.49|31.76|678|NW|,El Pueblito|MX22|MX|-100.44|20.54|71|N|corregidora,El Tigre|anzoategui|VE|-64.25|8.89|222|W|,El Vigia|merida|VE|-71.66|8.61|162|W|,Elazig|elazig|TR|39.22|38.67|443|W|,Elche|valencia|ES|-0.7|38.26|234|W|elx,Eldersburg|MD|US|-76.95|39.4|30|N|eldersburgh,Eldoret|uasin gishu county|KE|35.27|0.52|475|W|,Elektrostal'|moscow oblast|RU|38.46|55.79|144|W|,Elgin|IL|US|-88.28|42.04|112|N|,Elizabeth|NJ|US|-74.21|40.66|129|N|,Elizabethtown|KY|US|-85.86|37.69|29|N|,Elk Grove|CA|US|-121.37|38.41|166|NW|,Elk Grove Village|IL|US|-87.97|42|33|N|,Elkhart|IN|US|-85.98|41.68|52|N|,Ellendale|TN|US|-89.83|35.23|25|N|,Ellicott City|MD|US|-76.8|39.27|65|N|,Elmhurst|NY|US|-73.88|40.74|113|N|,Elmhurst|IL|US|-87.94|41.9|45|N|,Elmira|NY|US|-76.81|42.09|28|N|,Elmont|NY|US|-73.71|40.7|33|N|,Eloy Alfaro|guayas|EC|-79.84|-2.17|315|W|duran,Eluru|andhra pradesh|IN|81.1|16.71|218|W|,Elyria|OH|US|-82.11|41.37|53|N|,Emalahleni|mpumalanga|ZA|29.23|-25.87|373|W|,eMbalenhle|mpumalanga|ZA|29.07|-26.53|142|W|,Embu das Artes|sao paulo|BR|-46.85|-23.65|259|W|embu arte,Emiliano Zapata|MX17|MX|-99.18|18.84|49|N|,Emiliano Zapata|MX15|MX|-98.97|19.34|25|N|,Eminabad|punjab|PK|74.26|32.04|150|W|,Empalme|MX26|MX|-110.81|27.96|42|N|,Encanto|AZ|US|-112.08|33.48|54|N|,Encarnacion de Diaz|MX14|MX|-102.24|21.53|25|N|la chona,Enchanted Hills|NM|US|-106.59|35.34|87|N|,Encinitas|CA|US|-117.29|33.04|62|N|,Encino|CA|US|-118.5|34.16|44|N|,Enfield|CT|US|-72.59|41.98|45|N|,Enfield Town|england|GB|-0.08|51.65|156|W|enfield,Engels|saratov oblast|RU|46.11|51.48|196|W|enehl s;engel s;pokrovs ka sloboda,Englewood|CO|US|-104.99|39.65|33|N|new dawn rejuvenation,Englewood|NJ|US|-73.97|40.89|28|N|,Englewood|IL|US|-87.65|41.78|26|N|,Enid|OK|US|-97.88|36.4|51|N|,Enschede|overijssel|NL|6.9|52.22|153|W|,Ensenada|MX02|MX|-116.6|31.87|443|NW|enseada,Enshi|hubei|CN|109.48|30.3|279|W|,Enterprise|NV|US|-115.24|36.03|108|N|,Enterprise|AL|US|-85.86|31.32|27|N|,Enugu|enugu state|NG|7.5|6.44|950|W|,Envigado|antioquia|CO|-75.59|6.18|163|W|,Epworth|harare|ZW|31.15|-17.89|206|W|,Erbil|erbil|IQ|44.01|36.19|1612|W|arbil;hawler;irbil,Eregli|konya|TR|34.05|37.51|156|W|heraclea;heraclea minoa;herakleia,Erfurt|thuringia|DE|11.04|50.98|218|W|,Erie|PA|US|-80.09|42.13|99|N|,Erode|tamil nadu|IN|77.73|11.34|521|W|irodu,Erzincan|erzincan|TR|39.49|39.74|150|W|erzincam;erzinca,Erzurum|erzurum|TR|41.28|39.91|767|W|,Escarcega|MX04|MX|-90.75|18.61|29|N|,Escondido|CA|US|-117.09|33.12|151|NW|,Escuinapa de Hidalgo|MX25|MX|-105.78|22.83|30|N|,Escuintla|escuintla|GT|-90.79|14.3|156|W|,Esenler|istanbul|TR|28.88|41.04|520|W|,Esenyurt|istanbul|TR|28.68|41.03|983|W|,Eskisehir|eskisehir|TR|30.52|39.78|921|W|,Eslamshahr|tehran|IR|51.24|35.55|450|W|eslamchahr;eslamschahr;shadshahr,Esmeraldas|esmeraldas|EC|-79.65|0.96|218|W|,Esna|qena|EG|32.55|25.29|462|W|,Esperanza|MX26|MX|-109.93|27.58|38|N|,Espoo|uusimaa|FI|24.65|60.21|323|W|esbo,Essen|north rhine westphalia|DE|7.01|51.46|593|W|,Essex|MD|US|-76.47|39.31|39|N|,Estero|FL|US|-81.81|26.44|30|N|,Etah|uttar pradesh|IN|78.66|27.56|131|W|,Etawah|uttar pradesh|IN|79.02|26.78|257|W|,Etobicoke|ON|CA|-79.57|43.64|365|NW|,Etwatwa|gauteng|ZA|28.45|-26.13|151|W|,Euclid|OH|US|-81.53|41.59|47|N|,Eugene|OR|US|-123.09|44.05|176|NW|,Euless|TX|US|-97.08|32.84|54|N|,Eureka|CA|US|-124.16|40.8|27|N|,Evans|GA|US|-82.13|33.53|29|N|,Evanston|IL|US|-87.69|42.04|75|N|,Evansville|IN|US|-87.56|37.97|119|N|,Evaton|gauteng|ZA|27.85|-26.53|725|W|,Everett|WA|US|-122.2|47.98|108|N|,Everett|MA|US|-71.05|42.41|46|N|,'Ewa Gentry-West Loch|HI|US|-158.03|21.35|35|N|,Ewing|NJ|US|-74.8|40.27|36|N|,Exeter|england|GB|-3.53|50.72|130|W|,Ezhou|hubei|CN|114.83|30.4|193|W|,Facatativa|cundinamarca|CO|-74.35|4.81|141|W|,Fair Lawn|NJ|US|-74.13|40.94|33|N|,Fair Oaks|CA|US|-121.27|38.64|30|N|,Fairbanks|AK|US|-147.72|64.84|32|N|,Fairborn|OH|US|-84.02|39.82|33|N|,Fairfield|CA|US|-122.04|38.25|112|N|,Fairfield|CT|US|-73.26|41.14|59|N|,Fairfield|OH|US|-84.56|39.35|42|N|,Fairview|BC|CA|-123.13|49.26|33|N|,Faisalabad|punjab|PK|73.09|31.42|3800|W|fajsalabad;lyallpur,Fall River|MA|US|-71.16|41.7|94|N|,Fallbrook|CA|US|-117.25|33.38|30|N|,Fallingbrook|ON|CA|-75.48|45.48|25|N|,Fangchenggang|guangxi|CN|108.36|21.77|276|W|,Fanling|north district|HK|114.14|22.49|263|W|,Far Rockaway|NY|US|-73.76|40.61|39|N|,Fardis|tehran|IR|51|35.76|181|W|,Fargo|ND|US|-96.79|46.88|118|N|,Faridabad|haryana|IN|77.31|28.41|1414|W|,Farmers Branch|TX|US|-96.9|32.93|32|N|,Farmington|NM|US|-108.22|36.73|42|N|,Farmington|CT|US|-72.83|41.72|25|N|,Farmington Hills|MI|US|-83.38|42.49|81|N|,Farrukhabad|uttar pradesh|IN|79.58|27.39|241|W|,Fatehpur|uttar pradesh|IN|80.81|25.93|166|W|,Fatih|istanbul|TR|28.94|41.02|356|W|,Favoriten|state of vienna|AT|16.38|48.16|201|W|,Fayetteville|NC|US|-78.88|35.05|201|NW|,Fayetteville|AR|US|-94.16|36.06|82|N|,Fazenda Rio Grande|parana|BR|-49.31|-25.66|148|W|,Federal Way|WA|US|-122.31|47.32|95|N|,Feira de Santana|bahia|BR|-38.97|-12.27|616|W|,Felipe Carrillo Puerto|MX23|MX|-88.05|19.58|25|N|,Fendou|heilongjiang|CN|124.86|46.64|226|W|,Fengcheng|chongqing|CN|107.06|29.83|175|W|changshohein,Fengcheng|jiangsu|CN|116.59|34.7|161|W|,Fenghuang|hunan|CN|109.6|27.94|370|W|,Fengshan|takao|TW|120.36|22.63|356|W|feng san;fongshan district,Fengxiang|shanghai|CN|121.47|30.86|1140|W|,Fenway/Kenmore|MA|US|-71.1|42.34|37|N|,Fergana|fergana|UZ|71.78|40.38|299|W|ferghana,Ferrara|emilia romagna|IT|11.62|44.84|132|W|ferrare,Ferraz de Vasconcelos|sao paulo|BR|-46.37|-23.54|179|W|,Ferry Pass|FL|US|-87.21|30.51|28|N|,Fes|fes meknes|MA|-5|34.03|1191|W|fez,Fes al Bali|fes meknes|MA|-4.95|34.07|156|W|,Fianarantsoa|upper matsiatra|MG|47.09|-21.45|203|W|,Financial District|NY|US|-74.01|40.71|60|N|,Findlay|OH|US|-83.65|41.04|41|N|,Firozabad|uttar pradesh|IN|78.4|27.15|306|W|,Fishers|IN|US|-86.01|39.96|76|N|,Fitchburg|MA|US|-71.8|42.58|40|N|,Fitchburg|WI|US|-89.47|42.96|27|N|,Flagami|FL|US|-80.32|25.76|50|N|,Flagstaff|AZ|US|-111.65|35.2|70|N|,Flatbush|NY|US|-73.96|40.65|93|N|,Flatlands|NY|US|-73.93|40.62|63|N|,Fleetwood|BC|CA|-122.8|49.17|65|N|,Fleming Island|FL|US|-81.72|30.09|27|N|,Flint|MI|US|-83.69|43.01|98|N|,Florence|tuscany|IT|11.25|43.78|367|W|florencja;firenze;floransa;florencia;florencie;florens;florenz;florenca;florenta,Florence|AL|US|-87.68|34.8|40|N|,Florence|SC|US|-79.76|34.2|38|N|,Florence|KY|US|-84.63|39|32|N|,Florence|AZ|US|-111.39|33.03|31|N|,Florence-Graham|CA|US|-118.24|33.97|63|N|,Florencia|caqueta|CO|-75.6|1.62|168|W|,Florianopolis|santa catarina|BR|-48.55|-27.6|508|W|floripa;nossa senhora do desterro;santa catherina,Floridablanca|santander department|CO|-73.09|7.06|267|W|,Floridsdorf|state of vienna|AT|16.4|48.25|162|W|,Florin|CA|US|-121.41|38.5|47|N|,Florissant|MO|US|-90.32|38.79|52|N|,Flower Mound|TX|US|-97.1|33.01|71|N|,Foggia|apulia|IT|15.55|41.46|137|W|,Folsom|CA|US|-121.18|38.68|76|N|,Fond du Lac|WI|US|-88.44|43.77|42|N|,Fontana|CA|US|-117.44|34.09|212|NW|,Fontanar|havana|CU|-82.41|23.02|178|W|,Foothill Farms|CA|US|-121.35|38.68|33|N|,Fordham|NY|US|-73.9|40.86|94|N|,Forest Hills|NY|US|-73.85|40.72|67|N|,Forest Hills|MI|US|-85.49|42.96|25|N|,Formosa|formosa|AR|-58.17|-26.18|222|W|ciudad de formosa,Fort Bragg|NC|US|-79.01|35.14|29|N|phao dai bragg;fort liberty,Fort Cavazos|TX|US|-97.78|31.13|29|N|,Fort Collins|CO|US|-105.08|40.59|170|NW|ft collins,Fort Erie|ON|CA|-78.93|42.9|30|N|,Fort Garry South|MB|CA|-97.16|49.79|65|N|,Fort Hamilton|NY|US|-74.03|40.62|28|N|,Fort Lauderdale|FL|US|-80.14|26.12|183|NW|,Fort Lee|NJ|US|-73.97|40.85|36|N|,Fort McMurray|AB|CA|-111.38|56.73|66|N|,Fort Myers|FL|US|-81.84|26.62|74|N|,Fort Pierce|FL|US|-80.33|27.45|44|N|ft pierce,Fort Smith|AR|US|-94.4|35.39|88|N|,Fort Wayne|IN|US|-85.13|41.13|260|NW|,Fort Worth|TX|US|-97.32|32.73|1008|NW|ft worth,Fortaleza|ceara|BR|-38.54|-3.72|2400|W|,Fortechnyi|kirovohrad|UA|32.25|48.5|167|W|,Fortuna Foothills|AZ|US|-114.41|32.66|26|N|,Foshan|guangdong|CN|113.13|23.03|9042|W|fo san,Foster City|CA|US|-122.27|37.56|33|N|,Foumban|west|CM|10.9|5.73|130|W|foumbam;fumban,Fountain|CO|US|-104.7|38.68|27|N|,Fountain Valley|CA|US|-117.95|33.71|56|N|,Fountainebleau|FL|US|-80.35|25.77|59|N|fountainbleau,Four Corners|FL|US|-81.65|28.33|26|N|,Foz do Iguacu|parana|BR|-54.59|-25.55|297|W|foz de iguazu,Fraccionamiento Real Palmas|MX19|MX|-100.16|25.9|34|N|,Framingham|MA|US|-71.42|42.28|68|N|,Framingham Center|MA|US|-71.44|42.3|65|N|,Franca|sao paulo|BR|-47.4|-20.54|365|W|,Franceville|haut ogooue|GA|13.58|-1.63|132|W|,Francisco I. Madero|MX07|MX|-103.27|25.77|26|N|,Francisco Morato|sao paulo|BR|-46.75|-23.28|165|W|,Franco da Rocha|sao paulo|BR|-46.73|-23.32|144|W|,Frankfort|KY|US|-84.87|38.2|28|N|,Frankfurt am Main|hesse|DE|8.68|50.12|650|W|francfort sur le main;francoforte sul meno;francfort del meno;francfort;francoforte;frankfurt;frankfurt nad menem;frankfurt nad mohanem;franckfurt,Franklin|TN|US|-86.87|35.93|72|N|,Franklin|WI|US|-88.04|42.89|36|N|,Franklin|MA|US|-71.4|42.08|30|N|,Franklin Square|NY|US|-73.68|40.71|29|N|,Fraser Heights|BC|CA|-122.78|49.2|25|N|,Frederick|MD|US|-77.41|39.41|69|N|,Fredericksburg|VA|US|-77.46|38.3|28|N|,Fredericton|NB|CA|-66.67|45.95|63|N|,Fredericton Northside|NB|CA|-66.64|45.98|28|N|northside fredericton,Freeport|NY|US|-73.58|40.66|43|N|,Freetown|western area|SL|-13.24|8.49|802|W|,Freguesia do O|sao paulo|BR|-46.7|-23.5|137|W|nossa senhora do o,Freiburg|baden wurttemberg|DE|7.85|48|237|W|freiburg im breisgau;fribourg en brisgau;friburgo de brisgovia;friburgo in brisgovia;fryburg bryzgowijski,Fremont|CA|US|-121.99|37.55|232|NW|,Fremont|NE|US|-96.5|41.43|26|N|,Fresh Meadows|NY|US|-73.79|40.73|28|N|,Fresnillo|MX32|MX|-102.87|23.17|143|NW|,Fresno|CA|US|-119.77|36.75|542|NW|,Fridley|MN|US|-93.26|45.09|27|N|,Friendswood|TX|US|-95.2|29.53|38|N|,Frisco|TX|US|-96.82|33.15|154|NW|,Frontera|MX07|MX|-101.45|26.93|69|N|ciudad frontera,Fruit Cove|FL|US|-81.64|30.11|29|N|,Fu'an|fujian|CN|119.64|27.09|154|W|,Fuchu|tokyo|JP|139.48|35.67|262|W|,Fuding|fujian|CN|120.21|27.33|192|W|,Fuencarral|madrid|ES|-3.68|40.5|238|W|,Fuencarral-El Pardo|madrid|ES|-3.73|40.5|220|W|,Fuenlabrada|madrid|ES|-3.79|40.28|190|W|,Fuentes del Valle|MX15|MX|-99.14|19.63|74|N|,Fuerth|bavaria|DE|10.99|49.48|132|W|furth,Fuji|shizuoka|JP|138.68|35.17|245|W|fudzi,Fuji|sichuan|CN|105.37|29.15|131|W|,Fujieda|shizuoka|JP|138.27|34.87|145|W|,Fujinomiya|shizuoka|JP|138.62|35.22|132|W|,Fujisawa|kanagawa|JP|139.48|35.35|439|W|,Fukayacho|saitama|JP|139.28|36.2|141|W|,Fukui-shi|fukui|JP|136.22|36.06|262|W|,Fukuoka|fukuoka|JP|130.42|33.6|1612|W|fukuoka shi;fukuokashi,Fukushima|fukushima|JP|140.47|37.75|294|W|,Fukuyama|hiroshima|JP|133.37|34.48|468|W|,Fuling|chongqing|CN|107.39|29.71|268|W|fuchow,Fullerton|CA|US|-117.93|33.87|140|NW|,Funtua|katsina state|NG|7.31|11.52|136|W|,Fushun|liaoning|CN|123.94|41.89|1400|W|fu sun,Fuxin|liaoning|CN|121.66|42.02|689|W|fu sin,Fuyang|anhui|CN|115.82|32.9|1768|W|fu jang,Fuyu|jilin|CN|124.82|45.18|138|W|,Fuzhou|fujian|CN|119.31|26.06|3740|W|fu cou;fucheu;phuc chau,Fuzhou|jiangxi|CN|116.33|27.96|1089|W|fu cou,Fyzabad|uttar pradesh|IN|82.15|26.78|153|W|faizabad,Gaborone|gaborone|BW|25.91|-24.65|246|W|,Gabriel Leyva Solano|MX25|MX|-108.64|25.66|27|N|benito juarez;leyva solano,Gadag|karnataka|IN|75.63|15.43|172|W|,Gadag-Betageri|karnataka|IN|75.62|15.42|172|W|,Gadsden|AL|US|-86.01|34.01|36|N|,Gage Park|IL|US|-87.7|41.8|41|N|,Gagnoa|goh djiboua|CI|-5.95|6.13|277|W|,Gahanna|OH|US|-82.88|40.02|34|N|,Gainesville|FL|US|-82.32|29.65|145|NW|,Gainesville|GA|US|-83.82|34.3|38|N|,Gaithersburg|MD|US|-77.2|39.14|67|N|,Gajuwaka|andhra pradesh|IN|83.22|17.7|258|W|,Galati|galati county|RO|28.05|45.44|217|W|galatz;galacz,Galesburg|IL|US|-90.37|40.95|31|N|,Gallatin|TN|US|-86.45|36.39|34|N|,Galt|CA|US|-121.3|38.25|25|N|,Galveston|TX|US|-94.8|29.3|50|N|,Gama|federal district|BR|-48.07|-16.03|139|W|,Gandajika|lomami|CD|23.95|-6.75|208|W|,Gandhidham|gujarat|IN|70.13|23.08|247|W|,Gandhinagar|gujarat|IN|72.68|23.22|292|W|,Gangneung|gangwon do|KR|128.87|37.75|208|W|,Ganja|gence|AZ|46.36|40.68|330|W|ganca;gandja;gandza;gence;gandzja,Ganzhou|jiangxi|CN|114.93|25.85|1977|W|cam chau;kan cou,Gao|gao|ML|-0.04|16.27|133|W|,Gaomi|shandong|CN|119.75|36.38|391|W|,Gaoping|sichuan|CN|106.1|30.78|204|W|,Gaozhou|guangdong|CN|110.86|21.92|292|W|,Garanhuns|pernambuco|BR|-36.5|-8.88|151|W|,Garcia|MX19|MX|-100.59|25.8|93|N|,Garden City|KS|US|-100.87|37.97|27|N|,Garden City|MI|US|-83.33|42.33|26|N|,Garden Grove|CA|US|-117.94|33.77|175|NW|,Gardena|CA|US|-118.31|33.89|60|N|,Garfield|NJ|US|-74.11|40.88|31|N|,Garfield Heights|OH|US|-81.61|41.42|28|N|garfield hts,Garhi Khairo|sindh|PK|67.98|28.06|193|W|,Garissa|garissa county|KE|39.65|-0.45|163|W|,Garland|TX|US|-96.64|32.91|236|NW|,Garner|NC|US|-78.61|35.71|28|N|,Garut|west java|ID|107.92|-7.25|131|W|,Gary|IN|US|-87.35|41.59|77|N|,Gasteiz / Vitoria|basque country|ES|-2.67|42.85|257|W|vitoria;vitoria gasteiz,Gastonia|NC|US|-81.19|35.26|74|N|,Gatineau|QC|CA|-75.7|45.48|300|NW|,Gaya|bihar|IN|85|24.8|474|W|,Gaza|gaza strip|PS|34.47|31.5|410|W|gaza city;gazze,Gaziantep|gaziantep|TR|37.38|37.06|2222|W|,Gazipur|dhaka division|BD|90.42|24|2674|W|,Gboko|benue state|NG|9|7.32|365|W|,Gbongan|osun state|NG|4.35|7.48|139|W|,Gdansk|pomerania|PL|18.65|54.35|487|W|danzica;danzig,Gdynia|pomerania|PL|18.53|54.52|257|W|gdingen;gdyne,Gebze|kocaeli|TR|29.43|40.8|281|W|,Geelong|victoria|AU|144.36|-38.15|282|W|,Geita|geita|TZ|32.23|-2.87|318|W|,Gejiu|yunnan|CN|103.15|23.36|136|W|,Gelsenkirchen|north rhine westphalia|DE|7.1|51.51|270|W|,Gemena|sud ubangi|CD|19.77|3.26|197|W|,General Santos|soccsksargen|PH|125.17|6.11|722|W|kota general santos,Geneva|geneva|CH|6.15|46.2|201|W|cenevre;genebra;geneve;genewa;genf;ginebra;ginevra;jenewa;zeneva,Genoa|liguria|IT|8.94|44.4|580|W|genova;cenova;genua;genes;janov,Gent|flanders|BE|3.72|51.05|265|W|gand;gandawa;gante;ghent,Geoje|gyeongsangnam do|KR|128.71|34.81|232|W|,George|western cape|ZA|22.46|-33.96|188|W|,George Town|penang|MY|100.34|5.41|158|W|georgetown;penang,Georgetown|demerara mahaica|GY|-58.16|6.8|235|W|,Georgetown|TX|US|-97.68|30.63|63|N|,Georgetown|ON|CA|-79.92|43.65|44|N|,Georgetown|KY|US|-84.56|38.21|32|N|,Germantown|MD|US|-77.27|39.17|86|N|,Germantown|TN|US|-89.81|35.09|39|N|,Germiston|gauteng|ZA|28.18|-26.23|255|W|germinston,Getafe|madrid|ES|-3.73|40.31|187|W|,Ghardaia|ghardaia|DZ|3.67|32.49|142|W|gardaya;ghardaja,Ghaziabad|uttar pradesh|IN|77.44|28.67|1199|W|gaziabade,Ghazni|ghazni|AF|68.42|33.55|141|W|gazni,Ghulja|xinjiang|CN|81.32|43.92|269|W|yining,Gia Lam|hanoi|VN|105.94|21.02|309|W|,Gia Rai|ca mau|VN|105.46|9.23|145|W|,Gifu|gifu|JP|136.76|35.42|402|W|gifu city,Gijang|busan|KR|129.21|35.24|176|W|,Gijon|asturias|ES|-5.66|43.54|271|W|,Gilbert|AZ|US|-111.79|33.35|247|NW|,Gilgit|gilgit baltistan|PK|74.31|35.92|216|W|,Gillette|WY|US|-105.5|44.29|32|N|,Gilroy|CA|US|-121.57|37.01|53|N|,Gimcheon|gyeongsangbuk do|KR|128.12|36.12|150|W|kimcchon,Gimpo-si|gyeonggi do|KR|126.71|37.62|203|W|gimpo,Gingoog|northern mindanao|PH|125.1|8.83|138|W|,Girga|sohag|EG|31.89|26.34|151|W|jirja,Gisenyi|western province|RW|29.26|-1.7|172|W|gosenyi,Giza|giza|EG|31.21|30.01|4367|W|gizeh;gize;guiza,GJien Ban|da nang city|VN|108.25|15.89|226|W|,GJong GJa|hanoi|VN|105.83|21.01|371|W|,GJong Hoi|quang tri|VN|106.62|17.47|133|W|dong hoi,GJong Xoai|dong nai|VN|106.88|11.53|168|W|dong xoai,GJuc Pho|quang ngai|VN|108.96|14.81|155|W|,GJuc Trong|lam dong|VN|108.37|11.74|161|W|lien nghia,Gladstone|MO|US|-94.55|39.2|26|N|,Glasgow|scotland|GB|-4.26|55.87|626|W|,Glastonbury|CT|US|-72.61|41.71|31|N|,Glen Burnie|MD|US|-76.62|39.16|67|N|,Glen Cove|NY|US|-73.63|40.86|27|N|,Glen Ellyn|IL|US|-88.07|41.88|28|N|,Glendale|AZ|US|-112.19|33.54|240|NW|,Glendale|CA|US|-118.26|34.14|201|NW|,Glendale|NY|US|-73.89|40.7|34|N|,Glendale Heights|IL|US|-88.06|41.91|34|N|,Glendora|CA|US|-117.87|34.14|52|N|,Glenfield-Jane Heights|ON|CA|-79.51|43.75|30|N|,Glenview|IL|US|-87.79|42.07|47|N|,Glenville|NY|US|-74.05|42.93|29|N|,Gliwice|silesia|PL|18.68|50.3|198|W|gleiwitz,Gloucester|ON|CA|-75.63|45.35|150|NW|,Gloucester|england|GB|-2.24|51.87|132|W|,Gloucester|MA|US|-70.66|42.61|29|N|,Godhra|gujarat|IN|73.61|22.78|143|W|,Godome|atlantique|BJ|2.35|6.39|253|W|,Goelbasi|ankara|TR|32.81|39.79|165|W|golbasi,Goiania|goias|BR|-49.25|-16.68|1536|W|,Gojra|punjab|PK|72.68|31.15|214|W|gorja,Gol'yanovo|moscow|RU|37.81|55.82|158|W|,Gold Coast|queensland|AU|153.43|-28|640|W|costa dorada;gold,Golden Glades|FL|US|-80.2|25.91|33|N|,Goldsboro|NC|US|-77.99|35.38|35|N|,Golestan|tehran|IR|51.18|35.52|240|W|,Goleta|CA|US|-119.83|34.44|30|N|goelette;kuunari;schoener;schoner;schooner;skonert;skonnert;szkuner,Golfe|luanda|AO|13.26|-8.87|655|W|,Goma|north kivu|CD|29.23|-1.67|432|W|,Gombe|gombe state|NG|11.17|10.29|560|W|,Gomez Palacio|MX10|MX|-103.5|25.57|257|NW|,Gonbad-e Kavus|golestan|IR|55.17|37.25|151|W|,Gonda City|uttar pradesh|IN|81.95|27.13|133|W|,Gonder|amhara|ET|37.47|12.6|466|W|gondar,Gondia|maharashtra|IN|80.19|21.46|132|W|gondiya,Gongheyong|guangdong|CN|113.79|22.76|204|W|,Gongzhuling|jilin|CN|124.82|43.5|140|W|,Goodyear|AZ|US|-112.36|33.44|79|N|,Goose Creek|SC|US|-80.03|32.98|40|N|,Gorakhpur|haryana|IN|75.67|29.45|1324|W|,Gorakhpur|uttar pradesh|IN|83.37|26.77|674|W|,Gorgan|golestan|IR|54.44|36.84|244|W|,Gorontalo|gorontalo|ID|123.06|0.54|205|W|,Goshen|IN|US|-85.83|41.58|32|N|,Gothenburg|vastra gotaland|SE|11.97|57.71|608|W|goteborg;gotemburgo;gotenburg;gothembourg,Governador Valadares|minas gerais|BR|-41.95|-18.85|266|W|gov valadares;valadares,Goyang-si|gyeonggi do|KR|126.83|37.66|1061|W|goyang,Gqeberha|eastern cape|ZA|25.61|-33.96|1050|W|port elizabeth;porto elizabeth;puerto elizabeth,Grajau|sao paulo|BR|-46.67|-23.77|384|W|,Gramercy Park|NY|US|-73.99|40.74|27|N|,Granada|andalusia|ES|-3.61|37.19|233|W|grenada;grenade;girnata,Granby|QC|CA|-72.73|45.4|66|N|,Grand Forks|ND|US|-97.03|47.93|57|N|,Grand Island|NE|US|-98.34|40.93|51|N|,Grand Junction|CO|US|-108.55|39.06|60|N|,Grand Prairie|TX|US|-97|32.75|187|NW|,Grand Rapids|MI|US|-85.67|42.96|195|NW|,Grande Prairie|AB|CA|-118.8|55.17|70|N|,Grandview|MO|US|-94.53|38.89|25|N|,Grandview-Woodlands|BC|CA|-123.07|49.28|29|N|,Granger|IN|US|-86.11|41.75|30|N|,Granite City|IL|US|-90.15|38.7|29|N|,Grants Pass|OR|US|-123.33|42.44|37|N|,Grapevine|TX|US|-97.08|32.93|51|N|,Gravatai|rio grande do sul|BR|-50.99|-29.94|265|W|,Gravesend|NY|US|-73.97|40.6|112|N|,Graz|styria|AT|15.44|47.07|303|W|styrsky hradec,Great Falls|MT|US|-111.3|47.5|59|N|,Greater Grand Crossing|IL|US|-87.61|41.76|32|N|,Greater Noida|uttar pradesh|IN|77.54|28.5|293|W|,Greater Sudbury|ON|CA|-80.99|46.49|166|NW|sudbury;gran sudbury;grand sudbury,Greeley|CO|US|-104.71|40.42|108|N|,Green|OH|US|-81.48|40.95|25|N|,Green Bay|WI|US|-88.02|44.52|105|N|,Greenacres City|FL|US|-80.13|26.62|32|N|,Greenburgh|NY|US|-73.84|41.03|86|N|,Greenfield|WI|US|-88.01|42.96|37|N|,Greenpoint|NY|US|-73.95|40.72|34|N|,Greensboro|NC|US|-79.79|36.07|285|NW|,Greenville|NC|US|-77.37|35.61|90|N|,Greenville|SC|US|-82.39|34.85|64|N|,Greenville|MS|US|-91.06|33.41|32|N|,Greenville|TX|US|-96.11|33.14|26|N|,Greenwood|IN|US|-86.11|39.61|55|N|,Greer|SC|US|-82.23|34.94|28|N|,Grenoble|rhone alpes|FR|5.71|45.18|158|W|,Gresham|OR|US|-122.43|45.5|110|N|,Grimsby|ON|CA|-79.57|43.2|27|N|,Groningen|groningen|NL|6.57|53.22|244|W|groninga;groningue,Grove City|OH|US|-83.09|39.88|39|N|,Grozny|chechnya|RU|45.69|43.31|297|W|grosnij;grosny;grozni;groznyi;groznyj;groznyy;groznai;groznii,Guacara|carabobo|VE|-67.88|10.23|198|W|,Guadalajara|MX14|MX|-103.35|20.68|1385|NW|,Guadalupe|MX19|MX|-100.26|25.68|673|NW|ciudad guadalupe;villa de guadalupe,Guadalupe|MX32|MX|-102.52|22.75|170|NW|,Guamuchil|MX25|MX|-108.08|25.46|72|N|,Guanajuato|MX11|MX|-101.26|21.02|72|N|guanajuato city,Guang'an|sichuan|CN|106.64|30.47|858|W|,Guangshui|hubei|CN|114|31.62|154|W|,Guangyuan|sichuan|CN|105.82|32.44|516|W|kuang juan,Guangzhou|guangdong|CN|113.25|23.12|16096|W|canton;cantao;kanton;koshu,Guankou|hunan|CN|113.63|28.16|1380|W|,Guantanamo|guantanamo province|CU|-75.21|20.14|272|W|,Guarapari|espirito santo|BR|-40.5|-20.67|136|W|,Guarapuava|parana|BR|-51.47|-25.39|189|W|,Guarenas|miranda|VE|-66.62|10.47|248|W|,Guaruja|sao paulo|BR|-46.26|-23.99|294|W|,Guarulhos|sao paulo|BR|-46.53|-23.46|1345|W|,Guasave|MX25|MX|-108.47|25.57|71|N|,Guatemala City|guatemala|GT|-90.51|14.64|994|W|citta del guatemala;ciudad de guatemala;guatemala;guatemala stadt;guate;cidade da guatemala;ciudad guatemala;guatemala by;guatemala stad;gwatemala;new guatemala;nueva guatemala;santiago de guatimala,Guatire|miranda|VE|-66.54|10.47|227|W|,Guayaquil|guayas|EC|-79.89|-2.2|2723|W|guaiaquil,Gucun|shanghai|CN|121.39|31.35|240|W|,Guediawaye|dakar|SN|-17.4|14.77|329|W|,Guelph|ON|CA|-80.26|43.55|143|NW|,Guigang|guangxi|CN|109.59|23.12|1086|W|kuej kang,Guildford|BC|CA|-122.8|49.19|64|N|,Guilin|guangxi|CN|110.3|25.28|1572|W|kuej lin,Guixi|chongqing|CN|107.35|30.33|188|W|,Guiyang|guizhou|CN|106.72|26.58|3037|W|kuej jang;quy duong,Gujangbagh|xinjiang|CN|79.93|37.11|408|W|chotan;ciudad de jotan;hotan;hoten;khotan,Gujranwala|punjab|PK|74.19|32.16|2511|W|gudzranwala;gudzranvala,Gujrat|punjab|PK|74.08|32.57|574|W|,Gulfport|MS|US|-89.09|30.37|71|N|,Guli|zhejiang|CN|120.03|28.88|536|W|,Gulu|northern region|UG|32.3|2.77|177|W|,Gumi|gyeongsangbuk do|KR|128.34|36.11|404|W|,Guna|madhya pradesh|IN|77.31|24.65|180|W|,Gunan|chongqing|CN|106.65|29.02|208|W|,Gundupalaiyam|puducherry|IN|79.8|11.94|300|W|,Gunpo|gyeonggi do|KR|126.95|37.37|286|W|,Gunsan|jeollabuk do|KR|126.71|35.98|264|W|kunsan;kunsanpo,Guntur|andhra pradesh|IN|80.46|16.3|670|W|gunturu,Gunungsitoli|north sumatra|ID|97.61|1.29|136|W|,Guri-si|gyeonggi do|KR|127.14|37.6|195|W|guri,Gurnee|IL|US|-87.9|42.37|31|N|,Gurue|zambezia province|MZ|36.98|-15.47|168|W|,Gurugram|haryana|IN|77.03|28.46|886|W|gurgaon,Gusau|zamfara state|NG|6.66|12.17|226|W|,Gustavo Adolfo Madero|MX09|MX|-99.11|19.49|1185|NW|gustavo a madero,Guwahati|assam|IN|91.75|26.18|962|W|gauhati,Guyong|central luzon|PH|120.98|14.84|155|W|,Guyuan|ningxia|CN|106.28|36.01|411|W|,Gwalior|madhya pradesh|IN|78.17|26.23|1054|W|,Gwangju|gwangju|KR|126.92|35.15|1401|W|gwangju si;kwangdzu;kwangju,Gwangmyeong|gyeonggi do|KR|126.87|37.48|357|W|,Gwangyang|jeollanam do|KR|127.7|34.94|154|W|,Gweru|midlands province|ZW|29.82|-19.45|158|W|,Gwynn Oak|MD|US|-76.69|39.33|47|N|,Gyanpur|uttar pradesh|IN|82.47|25.33|200|W|,Gyeongju|gyeongsangbuk do|KR|129.21|35.84|245|W|,Gyeongsan-si|gyeongsangbuk do|KR|128.74|35.82|266|W|gyeongsan,Ha'il|ha il region|SA|41.69|27.52|605|W|hail,Ha Long|quang ninh|VN|107.07|20.95|270|W|,Ha Tinh|ha tinh province|VN|105.91|18.34|266|W|ha thin;thanh sen,Haarlem|north holland|NL|4.64|52.38|162|W|,Habra|west bengal|IN|88.66|22.84|139|W|,Hachinohe|aomori|JP|141.5|40.5|239|W|,Hachioji|tokyo|JP|139.32|35.66|579|W|hachiouji,Hacienda Heights|CA|US|-117.97|33.99|54|N|,Hacienda Santa Fe|MX14|MX|-103.38|20.52|86|N|,Hackensack|NJ|US|-74.04|40.89|44|N|,Hada'iq al Qubbah|cairo|EG|31.28|30.09|339|W|,Hadano|kanagawa|JP|139.22|35.37|163|W|,Haeju|south hwanghae|KP|125.71|38.04|222|W|,Hafar Al-Batin|eastern province|SA|45.97|28.43|271|W|,Hafizabad|punjab|PK|73.69|32.07|318|W|,Hagen|north rhine westphalia|DE|7.47|51.36|198|W|,Hagerstown|MD|US|-77.72|39.64|40|N|,Hai Ba Trung|hanoi|VN|105.85|21.01|303|W|hai batrung,Hai Chau|da nang city|VN|108.13|15.92|131|W|,Hai Duong|hai phong|VN|106.33|20.94|241|W|,Haicheng|liaoning|CN|122.75|40.85|191|W|,Haifa|haifa|IL|35|32.81|285|W|hajfa;hayfa,Haikou|hainan|CN|110.35|20.03|2873|W|chaj kchou,Hailar|inner mongolia|CN|119.7|49.2|211|W|,Hailin|heilongjiang|CN|129.39|44.57|144|W|,Haiphong|hai phong|VN|106.68|20.86|2625|W|hai phong;hajfong,Hajipur|bihar|IN|85.21|25.69|147|W|,Hakodate|hokkaido|JP|140.74|41.78|275|W|,Haldia|west bengal|IN|88.11|22.06|170|W|,Haldwani|uttarakhand|IN|79.53|29.22|139|W|haldwani kathgodam;haldwani cum kathgodam,Halifax|NS|CA|-63.58|44.64|471|NW|,Hallandale Beach|FL|US|-80.15|25.98|39|N|hallandale,Halle (Saale)|saxony anhalt|DE|11.98|51.48|237|W|halle;halle an der saale;halle sul saale,Haltom City|TX|US|-97.27|32.8|44|N|,Halton Hills|ON|CA|-79.93|43.64|62|N|,Halwan|cairo|EG|31.3|29.84|230|W|helwan,Hamadan|hamadan province|IR|48.51|34.8|528|W|,Hamah|hama|SY|36.76|35.13|460|W|hama,Hamamatsu|shizuoka|JP|137.73|34.7|791|W|hamamacu;hamamatsu city;hamamatsu shi,Hamburg|hamburg|DE|9.99|53.55|1973|W|hamburgo;amburgo;hamborg;hambourg;hamburk;hampuri,Hamburg-Mitte|hamburg|DE|10.02|53.55|301|W|bezirk hamburg mitte;hamburg centru,Hamburg-Nord|hamburg|DE|9.98|53.59|315|W|bezirk hamburg nord;distretto di hamburg nord,Hamden|CT|US|-72.9|41.4|59|N|,Hamhung|south hamgyong|KP|127.54|39.92|559|W|,Hami|xinjiang|CN|93.51|42.83|246|W|kumul,Hamilton|ON|CA|-79.85|43.25|569|NW|,Hamilton|waikato region|NZ|175.28|-37.78|192|W|,Hamilton|OH|US|-84.56|39.4|62|N|,Hamm|north rhine westphalia|DE|7.82|51.68|178|W|,Hammond|IN|US|-87.5|41.58|77|N|,Hampton|VA|US|-76.35|37.03|137|NW|,Hanam|gyeonggi do|KR|127.21|37.54|254|W|,Handan|hebei|CN|114.49|36.61|1358|W|chan tan;ham dan,Hanfeng|chongqing|CN|108.4|31.17|196|W|,Hanford|CA|US|-119.65|36.33|55|N|,Hangu|tianjin|CN|117.79|39.25|208|W|,Hangzhou|zhejiang|CN|120.16|30.29|9236|W|chang cou;hang chau,Hannover|lower saxony|DE|9.73|52.37|515|W|hanover;hanovra;hanovre;hanower,Hanoi|hanoi|VN|105.84|21.02|8053|W|hanoj;kecho;kescio;thang long,Hanover|MD|US|-76.72|39.19|38|N|,Hanover Park|IL|US|-88.15|42|38|N|,Hanumangarh|rajasthan|IN|74.33|29.58|155|W|,Hanzhong|shaanxi|CN|107.02|33.08|1006|W|chan cung;han trung,Hapur|uttar pradesh|IN|77.78|28.73|242|W|,Harar|harari|ET|42.12|9.31|157|W|harar jugol;harer,Harare|harare|ZW|31.05|-17.83|1542|W|,Harbin|heilongjiang|CN|126.65|45.75|5242|W|charbin;cap nhi tan,Harburg|hamburg|DE|9.98|53.46|169|W|hamburg harburg;bezirk harburg;distretto di harburg;hambourg harburg;hamburgo harburgo,Hargeysa|woqooyi galbeed|SO|44.06|9.56|477|W|hargeisa,Haridwar|uttarakhand|IN|78.16|29.95|186|W|hardwar;haridvar,Harker Heights|TX|US|-97.66|31.08|29|N|,Harlem|NY|US|-73.95|40.81|116|N|,Harlingen|TX|US|-97.7|26.19|65|N|,Harrisburg|PA|US|-76.88|40.27|50|N|,Harrison|NY|US|-73.71|40.97|28|N|,Harrisonburg|VA|US|-78.87|38.45|52|N|,Harrow|england|GB|-0.33|51.58|149|W|,Hartford|CT|US|-72.69|41.76|121|N|,Harunabad|punjab|PK|73.14|29.61|149|W|,Harvey|IL|US|-87.65|41.61|25|N|,Hashtsal|delhi|IN|77.06|28.63|176|W|,Hasilpur|punjab|PK|72.55|29.69|168|W|,Hassan|karnataka|IN|76.1|13.01|155|W|,Hastings-Sunrise|BC|CA|-123.03|49.28|34|N|,Hat Yai|songkhla|TH|100.48|7.01|191|W|,Hathazari|chittagong|BD|91.81|22.51|498|W|,Hattiesburg|MS|US|-89.29|31.33|46|N|,Havana|havana|CU|-82.38|23.13|2163|W|havanna;hawana;l avana;la habana;la havane,Haverhill|MA|US|-71.08|42.78|62|N|,Havertown|PA|US|-75.31|39.98|50|N|,Hawai'i Kai|HI|US|-157.7|21.3|30|N|,Hawalli|hawalli|KW|48.03|29.33|164|W|havalli,Hawthorne|CA|US|-118.35|33.92|88|N|,Hayward|CA|US|-122.08|37.67|158|NW|,Hayy Khilda|amman|JO|35.84|31.99|251|W|,Hazaribagh|jharkhand|IN|85.36|23.99|153|W|hazaribag,Hazelwood|MO|US|-90.37|38.77|25|N|,Hebi|henan|CN|114.29|35.73|634|W|che pi,Hebron|west bank|PS|35.09|31.53|160|W|el halil;hebrom,Hechi|guangxi|CN|108.08|24.69|330|W|,Hechuan|chongqing|CN|106.26|29.99|377|W|,Hefei|anhui|CN|117.28|31.86|5050|W|che fej,Hegang|heilongjiang|CN|130.29|47.35|743|W|che kang,Heidelberg|baden wurttemberg|DE|8.69|49.41|143|W|edelberga;heidelberga,Heihe|heilongjiang|CN|127.49|50.24|223|W|chej che,Hejiang|sichuan|CN|105.83|28.81|137|W|,Helena|MT|US|-112.04|46.59|32|N|,Hell's Kitchen|NY|US|-73.99|40.76|45|N|la cocina del infierno;midtown west,Helsinki|uusimaa|FI|24.94|60.17|658|W|helsingfors;helsinky;helsinquia;khel sinki,Hemet|CA|US|-116.97|33.75|83|N|,Hempstead|NY|US|-73.62|40.71|55|N|,Henderson|NV|US|-114.98|36.04|285|NW|,Henderson|KY|US|-87.59|37.84|28|N|,Hendersonville|TN|US|-86.62|36.3|56|N|,Hengshan|heilongjiang|CN|130.9|45.21|164|W|,Hengshui|hebei|CN|115.68|37.74|522|W|cheng suej,Hengyang|hunan|CN|112.62|26.89|1075|W|cheng jang;hanh duong,Henrietta|NY|US|-77.61|43.06|42|N|,Hepo|guangdong|CN|115.83|23.43|131|W|,Hepu|guangxi|CN|109.2|21.66|192|W|,Herat|herat|AF|62.2|34.35|574|W|,Hercules|CA|US|-122.29|38.02|25|N|,Hermitage|TN|US|-86.62|36.2|37|N|,Hermosillo|MX26|MX|-110.97|29.09|812|NW|,Herne|north rhine westphalia|DE|7.23|51.54|172|W|,Heroica Caborca|MX26|MX|-112.16|30.72|59|N|caborca,Heroica Ciudad de Juchitan de Zaragoza|MX20|MX|-95.02|16.43|88|N|juchitan de zaragoza;juchitan,Heroica Guaymas|MX26|MX|-110.9|27.92|117|N|guaymas,Heroica Matamoros|MX28|MX|-97.5|25.88|510|NW|matamoros,Heroica Zitacuaro|MX16|MX|-100.36|19.44|84|N|,Herriman|UT|US|-112.03|40.51|30|N|,Heshan|hunan|CN|112.35|28.57|1249|W|,Hesperia|CA|US|-117.3|34.43|93|N|,Hetauda|bagmati province|NP|85.03|27.43|195|W|,Heyuan|guangdong|CN|114.68|23.73|463|W|che juan;ha nguyen,Heze|shandong|CN|115.47|35.24|1346|W|che ce,Hezhou|guangxi|CN|111.57|24.4|1005|W|che cou,Hialeah|FL|US|-80.28|25.86|237|NW|,Hickory|NC|US|-81.34|35.73|40|N|,Hicksville|NY|US|-73.53|40.77|41|N|,Hidalgo del Parral|MX06|MX|-105.67|26.93|104|N|parral,Higashihiroshima|hiroshima|JP|132.74|34.41|196|W|,Higashimurayama|tokyo|JP|139.47|35.75|151|W|,Higashiosaka|osaka|JP|135.58|34.67|493|W|,High Point|NC|US|-80.01|35.96|110|N|,High Wycombe|england|GB|-0.75|51.63|133|W|,Highland|CA|US|-117.21|34.13|54|N|,Highland Park|IL|US|-87.8|42.18|29|N|,Highlands Ranch|CO|US|-104.97|39.55|96|N|,Hilliard|OH|US|-83.16|40.03|33|N|,Hillsboro|OR|US|-122.99|45.52|102|N|,Hillsborough|NJ|US|-74.63|40.48|38|N|,Hilo|HI|US|-155.09|19.73|43|N|baie de hilo,Hilton Head|SC|US|-80.75|32.22|37|N|hilton head island,Hilton Head Island|SC|US|-80.74|32.19|40|N|ile de hilton head,Himeji|hyogo|JP|134.7|34.82|530|W|,Hindupur|andhra pradesh|IN|77.49|13.83|151|W|,Hinesville|GA|US|-81.6|31.85|33|N|,Hino|tokyo|JP|139.4|35.67|190|W|,Hinthada|ayeyarwady|MM|95.46|17.65|134|W|henzada,Hirakata|osaka|JP|135.65|34.81|406|W|,Hiratsuka|kanagawa|JP|139.34|35.33|258|W|,Hirosaki|aomori|JP|140.47|40.59|168|W|,Hiroshima|hiroshima|JP|132.45|34.4|1200|W|hiroshima shi;hiroshimashi;hiroszima;hiroxima;hirosima,Hisar|haryana|IN|75.72|29.15|307|W|,Hitachi|ibaraki|JP|140.65|36.6|174|W|,Hitachi-Naka|ibaraki|JP|140.53|36.4|156|W|,Hlaingthaya|yangon|MM|96.07|16.85|687|W|,Ho|volta|GH|0.47|6.6|130|W|,Ho Chi Minh City|ho chi minh city hcmc|VN|106.63|10.82|14002|W|ho chi minh stadt;ho chi minh ville;hcmv;tphcm;cidade de ho chi minh;ciudad ho chi minh;ho chi minh;ho chi minh byen;ho chi minh staden;ho chi minhstad;ho ci minovo mesto;saigon;sai gon,Hoa Thanh|tay ninh|VN|106.13|11.29|147|W|,Hoan Kiem|hanoi|VN|105.85|21.03|135|W|,Hobart|tasmania|AU|147.33|-42.88|254|W|,Hobart|IN|US|-87.26|41.53|28|N|,Hobbs|NM|US|-103.14|32.7|38|N|,Hoboken|NJ|US|-74.03|40.74|53|N|,Hoffman Estates|IL|US|-88.08|42.04|52|N|,Hohhot|inner mongolia|CN|111.65|40.81|2350|W|choch chot;huhhot;kweisui,Hoji ya Henda|luanda|AO|13.29|-8.81|642|W|,Holbrook|NY|US|-73.08|40.81|27|N|,Holguin|holguin province|CU|-76.26|20.89|319|W|,Holladay|UT|US|-111.82|40.67|30|N|,Holland|MI|US|-86.11|42.79|33|N|,Hollister|CA|US|-121.4|36.85|37|N|,Holly Springs|NC|US|-78.83|35.65|31|N|,Hollywood|CA|US|-118.33|34.1|167|NW|,Hollywood|FL|US|-80.15|26.01|149|NW|,Holmesburg|PA|US|-75.03|40.04|28|N|,Holon|tel aviv|IL|34.78|32.01|196|W|cholon;jolon,Holyoke|MA|US|-72.62|42.2|40|N|,Homestead|FL|US|-80.48|25.47|80|N|,Homewood|AL|US|-86.8|33.47|25|N|,Homs|homs|SY|36.73|34.72|775|W|hims;hums;humus,Homyel'|homyel voblasc|BY|30.98|52.43|501|W|homel;homiel;gomel,Honcho|chiba|JP|139.99|35.7|644|W|funabashi,Hong Kong||HK|114.17|22.28|7396|W|hongkong;victoria,Hong Kong Island||HK|114.18|22.26|1195|W|hong kong,Honggang|heilongjiang|CN|124.88|46.4|147|W|,Hongkou|shanghai|CN|121.49|31.25|687|W|,Honolulu|HI|US|-157.86|21.31|350|NW|,Hoofddorp|north holland|NL|4.69|52.3|132|W|,Hoover|AL|US|-86.81|33.41|84|N|,Hopkinsville|KY|US|-87.49|36.87|32|N|,Horlivka|donetsk|UA|38.02|48.3|239|W|gorlowka;gorlovka;horliwka,Horn Lake|MS|US|-90.03|34.96|26|N|,Horta-Guinardo|catalonia|ES|2.17|41.42|168|W|,Hortaleza|madrid|ES|-3.64|40.47|161|W|,Hortolandia|sao paulo|BR|-47.22|-22.86|236|W|,Hosa'ina|central ethiopia regional state|ET|37.85|7.55|188|W|,Hosapete|karnataka|IN|76.39|15.27|206|W|hospet,Hoshiarpur|punjab|IN|75.91|31.54|168|W|,Hosur|tamil nadu|IN|77.83|12.74|229|W|,Hot Springs|AR|US|-93.06|34.5|35|N|,Hougang New Town||SG|103.89|1.36|227|W|hougang,Houma|LA|US|-90.72|29.6|34|N|,Houston|TX|US|-95.36|29.76|2314|NW|,Howard Beach|NY|US|-73.84|40.66|26|N|,Howrah|west bengal|IN|88.32|22.58|1027|W|haora,Hrodna|grodnenskaya|BY|23.83|53.68|363|W|goradnia;grodno,Hsinchu|taiwan|TW|120.97|24.8|453|W|kota hsinchu;sin cu;tan truc;xinzhu,Huadian|jilin|CN|126.74|42.97|139|W|,Huai'an|jiangsu|CN|119.02|33.59|2494|W|chuaj an;huaiyin,Huaibei|anhui|CN|116.79|33.97|1113|W|chuaj pej,Huaihua|hunan|CN|110|27.56|552|W|chuaj chua;hoai hoa,Huainan|anhui|CN|117|32.63|1666|W|,Huamantla|MX29|MX|-97.93|19.31|51|N|,Huambo|huambo|AO|15.74|-12.78|595|W|,Huancayo|junin|PE|-75.21|-12.07|456|W|,Huanggang|hubei|CN|114.87|30.45|366|W|chuang kang;hoang cuong;hwang chau;hwang chow;hwangchow;wangchau;wangchou,Huanggang|guangdong|CN|117|23.68|225|W|,Huangpu|shanghai|CN|121.48|31.24|504|W|,Huangshan|anhui|CN|118.31|29.71|460|W|chuang san;hoang son;huangshan city,Huangshi|hubei|CN|115.05|30.25|688|W|chuang s,Huanuco|huanuco department|PE|-76.24|-9.93|196|W|,Huatabampo|MX26|MX|-109.64|26.83|30|N|,Huatusco|MX30|MX|-96.97|19.15|31|N|,Huauchinango|MX21|MX|-98.05|20.17|56|N|,Huayin|shaanxi|CN|110.07|34.57|242|W|,Hub|balochistan|PK|66.89|25.03|195|W|,Hubballi|karnataka|IN|75.13|15.35|943|W|hubli,Huber Heights|OH|US|-84.12|39.84|38|N|,Huddersfield|england|GB|-1.78|53.65|149|W|,Hue|thua thien hue province|VN|107.6|16.46|1380|W|,Huejotzingo|MX21|MX|-98.41|19.16|25|N|,Huejutla de Reyes|MX13|MX|-98.42|21.14|40|N|,Huelva|andalusia|ES|-6.94|37.27|144|W|,Hugli|west bengal|IN|88.4|22.91|177|W|,Huimanguillo|MX27|MX|-93.39|17.83|27|N|,Huinong|ningxia|CN|106.77|39.23|136|W|,Huixing|chongqing|CN|106.61|29.68|186|W|,Huixquilucan|MX15|MX|-99.35|19.36|124|N|,Huixtla|MX05|MX|-92.46|15.14|32|N|,Huizhou|guangdong|CN|114.42|23.11|2900|W|chuej cou,Hulan Ergi|heilongjiang|CN|123.63|47.2|265|W|,Hull|QC|CA|-75.71|45.43|63|N|,Huludao|liaoning|CN|120.84|40.75|944|W|,Hulunbuir|inner mongolia|CN|119.76|49.21|349|W|,Humen|guangdong|CN|113.67|22.82|191|W|,Hungnam|south hamgyong|KP|127.63|39.84|346|W|,Huntersville|NC|US|-80.84|35.41|52|N|,Huntington|WV|US|-82.45|38.42|48|N|,Huntington Beach|CA|US|-118|33.66|201|NW|,Huntington Park|CA|US|-118.23|33.98|59|N|,Huntington Station|NY|US|-73.41|40.85|33|N|,Huntley|IL|US|-88.43|42.17|26|N|,Hunts Point|NY|US|-73.88|40.81|27|N|,Huntsville|AL|US|-86.59|34.73|215|NW|,Huntsville|TX|US|-95.55|30.72|40|N|,Huocheng|xinjiang|CN|80.87|44.05|360|W|huocheng county,Hurghada|red sea|EG|33.81|27.26|207|W|hurgada,Hurst|TX|US|-97.17|32.82|39|N|,Hutchinson|KS|US|-97.93|38.06|41|N|,Huyen Lam Ha|lam dong|VN|108.21|11.82|144|W|lam ha;lam ha district,Huzhou|zhejiang|CN|120.09|30.87|1015|W|,Hwaseong-si|gyeonggi do|KR|126.82|37.21|640|W|hwaseong,Hyde Park|MA|US|-71.12|42.26|31|N|,Hyde Park|IL|US|-87.59|41.79|26|N|,Hyderabad|telangana|IN|78.46|17.38|6993|W|haiderabad;hajdarabad,Hyderabad|sindh|PK|68.38|25.4|1921|W|hajdarabad;haydarabad,Hyesan|yanggang do|KP|128.18|41.4|192|W|,Iasi|iasi county|RO|27.6|47.17|378|W|jassy;jasy;yas;jassenmarkt,Ibadan|oyo state|NG|3.91|7.38|3649|W|,Ibague|tolima department|CO|-75.2|4.44|529|W|,Ibaraki|osaka|JP|135.57|34.82|287|W|,Ibarra|imbabura|EC|-78.12|0.35|221|W|,Ibb|ibb governorate|YE|44.18|13.97|771|W|,Ibirite|minas gerais|BR|-44.06|-20.02|179|W|,'Ibri|ad dhahirah|OM|56.52|23.23|163|W|,Ica|ica|PE|-75.73|-14.08|282|W|ika,Ichalkaranji|maharashtra|IN|74.46|16.69|287|W|,Icheon-si|gyeonggi do|KR|127.44|37.28|196|W|icheon,Ichihara|chiba|JP|140.08|35.52|283|W|,Ichikawa|chiba|JP|139.91|35.73|496|W|,Ichinomiya|aichi|JP|136.8|35.3|380|W|owari ichinomiya,Idaho Falls|ID|US|-112.03|43.47|59|N|,Idku|beheira|EG|30.3|31.31|177|W|,Ifakara|morogoro|TZ|36.68|-8.13|205|W|,Igboho|oyo state|NG|3.76|8.84|136|W|,Iguala de la Independencia|MX12|MX|-99.54|18.35|118|N|,Iguatemi|sao paulo|BR|-46.43|-23.61|149|W|,Ijebu Ode|ogun state|NG|3.92|6.82|360|W|,Ijero-Ekiti|ekiti state|NG|5.07|7.82|167|W|,Ikare|ondo state|NG|5.75|7.53|465|W|,Ikeja|lagos|NG|3.34|6.6|313|W|,Ikire|osun state|NG|4.19|7.37|222|W|,Ikirun|osun state|NG|4.67|7.91|134|W|,Ikot Ekpene|akwa ibom state|NG|7.71|5.18|254|W|,Iksan|jeollabuk do|KR|126.95|35.94|307|W|,Ila Orangun|osun state|NG|4.9|8.02|179|W|,Ilagan|cagayan valley|PH|121.89|17.15|164|W|,Ilam|ilam province|IR|46.42|33.64|140|W|,Ile-Ife|osun state|NG|4.56|7.48|560|W|,Ilesa|osun state|NG|4.74|7.63|325|W|,Ilford|england|GB|0.07|51.56|168|W|,Ilheus|bahia|BR|-39.03|-14.8|189|W|sao jorge dos ilheos,Iligan|northern mindanao|PH|124.24|8.23|342|W|,Iligan City|soccsksargen|PH|124.4|8.25|312|W|,Iloilo|western visayas|PH|122.56|10.7|473|W|iloilo city,Ilorin|kwara state|NG|4.54|8.5|1080|W|,Imabari|ehime|JP|133|34.07|170|W|,Imperatriz|maranhao|BR|-47.49|-5.53|273|W|,Imperial Beach|CA|US|-117.11|32.58|27|N|,Imphal|manipur|IN|93.94|24.81|277|W|,Imus|calabarzon|PH|120.94|14.43|481|W|,Inazawa|aichi|JP|136.78|35.25|134|W|,Incheon|incheon|KR|126.71|37.46|3015|W|inch on;incheon si;inchon;incchon;nhan xuyen;chemulpo,Indaiatuba|sao paulo|BR|-47.21|-23.09|256|W|,Independence|MO|US|-94.42|39.09|117|N|,Independence|KY|US|-84.54|38.94|26|N|,Indian Trail|NC|US|-80.67|35.08|37|N|,Indianapolis|IN|US|-86.16|39.77|887|NW|indpls,Indio|CA|US|-116.22|33.72|87|N|,Indore|madhya pradesh|IN|75.83|22.72|1994|W|indhur,Inegol|bursa province|TR|29.51|40.08|133|W|,Inezgane|souss massa|MA|-9.54|30.36|142|W|,Inglewood|CA|US|-118.35|33.96|111|N|,Ingombota|luanda|AO|13.23|-8.82|144|W|,Inisa|osun state|NG|4.33|7.85|164|W|,Innisfil|ON|CA|-79.65|44.3|43|N|,Innsbruck|tyrol|AT|11.39|47.26|132|W|,Insein|yangon|MM|96.1|16.89|247|W|,Inver Grove Heights|MN|US|-93.04|44.85|34|N|inver grove,Iowa City|IA|US|-91.53|41.66|74|N|,Ipatinga|minas gerais|BR|-42.54|-19.47|235|W|,Ipoh|perak|MY|101.08|4.58|759|W|,Ipswich|england|GB|1.16|52.06|178|W|,Iquique|tarapaca|CL|-70.15|-20.21|199|W|,Iquitos|loreto|PE|-73.25|-3.75|377|W|,Irakleion|crete|GR|25.14|35.33|137|W|heraklion;candia;heracliao;heraclion;herakleion;iraklio;iraklion;iraclio;kandiye,Iranshahr|sistan and baluchestan|IR|60.68|27.2|131|W|,Irapuato|MX11|MX|-101.36|20.67|380|NW|,Irbid|irbid|JO|35.85|32.56|569|W|,Irewe|lagos|NG|3.14|6.42|139|W|,Iringa|iringa|TZ|35.7|-7.77|202|W|,Irkutsk|irkutsk oblast|RU|104.29|52.3|623|W|irkoetsk;irkoutsk;irkuck;irkutsc;irkutk,Irondequoit|NY|US|-77.58|43.21|51|N|,Iruma|saitama|JP|139.37|35.82|147|W|,Irvine|CA|US|-117.82|33.67|256|NW|,Irving|TX|US|-96.95|32.81|236|NW|,Irving Park|IL|US|-87.74|41.95|56|N|,Irvington|NJ|US|-74.23|40.73|61|N|,Isahaya|nagasaki|JP|130.04|32.84|135|W|,Ise-Ekiti|ekiti state|NG|5.42|7.46|190|W|,Isesaki|gunma|JP|139.2|36.32|211|W|,Iseyin|oyo state|NG|3.6|7.97|365|W|,Isfahan|isfahan|IR|51.67|32.65|1547|W|esfahan;ispahan;kota isfahan,Isfara|sughd|TJ|70.63|40.13|274|W|,Ishinomaki|miyagi|JP|141.3|38.42|140|W|,Isidro Casanova|buenos aires|AR|-58.59|-34.7|131|W|,Isiro|haut uele|CD|27.62|2.77|255|W|,Iskandar Puteri|johor|MY|103.62|1.39|575|W|,Iskenderun|hatay|TR|36.17|36.59|251|W|alejandreta;aleksandretta;alexandretta,Isla|MX30|MX|-95.53|18.03|26|N|,Islamabad|islamabad|PK|73.04|33.72|601|W|islamabade,Islington|england|GB|-0.1|51.54|319|W|,Islington-City Centre West|ON|CA|-79.54|43.63|43|N|,Ismailia|ismailia|EG|32.27|30.6|429|W|el ismalia;ismalia;ismailija;ismailiye,Isparta|isparta|TR|30.55|37.76|172|W|,Issaquah|WA|US|-122.03|47.53|36|N|,Istanbul|istanbul|TR|28.95|41.01|15701|W|estambul;istambul;stambul;byzance;byzantion;byzantium;constantinopla;constantinople;constantinopolen;costantinopoli;konstantinopel;micklagard,Istaravshan|sughd|TJ|69|39.91|273|W|istaravchan;istaravsjan;istaravsan;istarawschan;istarawshan;istarawszan,Itabashi|tokyo|JP|139.71|35.75|584|W|tabashi city,Itaborai|rio de janeiro|BR|-42.86|-22.74|240|W|,Itabuna|bahia|BR|-39.28|-14.79|196|W|,Itaguei|antioquia|CO|-75.6|6.18|281|W|itagui,Itaim Paulista|sao paulo|BR|-46.39|-23.5|205|W|,Itaituba|para|BR|-55.98|-4.28|135|W|,Itajai|santa catarina|BR|-48.66|-26.91|294|W|itajahy,Itami|hyogo|JP|135.4|34.78|198|W|,Itapecerica da Serra|sao paulo|BR|-46.85|-23.72|163|W|,Itapetininga|sao paulo|BR|-48.05|-23.59|164|W|,Itapevi|sao paulo|BR|-46.93|-23.55|240|W|,Itapipoca|ceara|BR|-39.58|-3.49|138|W|,Itaquaquecetuba|sao paulo|BR|-46.35|-23.49|369|W|,Itaquera|sao paulo|BR|-46.44|-23.53|210|W|,Ithaca|NY|US|-76.5|42.44|30|N|,Itu|sao paulo|BR|-47.3|-23.26|175|W|,Ituzaingo|corrientes|AR|-56.69|-27.59|168|W|,Ivano-Frankivsk|ivano frankivsk|UA|24.71|48.92|238|W|ivano frankivs k;iwano frankiwsk;stanislaopoli;stanislau;stanislaw;stanislawow,Ivanovo|ivanovo oblast|RU|40.97|57|406|W|iwanowo,Ivory Park|gauteng|ZA|28.2|-26|184|W|,Iwaki|fukushima|JP|140.88|37.05|357|W|,Iwata|shizuoka|JP|137.85|34.7|166|W|,Iwo|osun state|NG|4.18|7.64|250|W|,Ixmiquilpan|MX13|MX|-99.22|20.48|34|N|,Ixtaczoquitlan|MX30|MX|-97.06|18.85|26|N|,Ixtapa|MX14|MX|-105.21|20.72|29|N|,Ixtapa-Zihuatanejo|MX12|MX|-101.55|17.64|67|N|jose azueta;zihuatanejo,Ixtapaluca|MX15|MX|-98.88|19.32|322|NW|iztapaluca,Ixtepec|MX20|MX|-95.1|16.56|25|N|san geronimo ixtepec;ciudad ixtepec,Izhevsk|udmurtiya republic|RU|53.2|56.85|648|W|izjevsk;ijevsk;ischewsk;izewsk;izevsk,Izmir|izmir province|TR|27.14|38.41|2938|W|esmirna;smirne,Izmit|kocaeli|TR|29.93|40.76|196|W|nicomedia;nicomedie;nikomedia,Iztacalco|MX09|MX|-99.1|19.4|384|NW|,Iztapalapa|MX09|MX|-99.06|19.36|1835|NW|delegacion iztapalapa;delegazione iztapalapa,Izucar de Matamoros|MX21|MX|-98.46|18.6|42|N|izucar,Izumi|osaka|JP|135.43|34.48|184|W|,Izumo|shimane|JP|132.77|35.37|172|W|,Jabalpur|madhya pradesh|IN|79.95|23.17|1081|W|dzabalpur,Jabalya|gaza strip|PS|34.48|31.53|168|W|jabalia,Jabaquara|sao paulo|BR|-46.65|-23.65|214|W|,Jaboatao dos Guararapes|pernambuco|BR|-35.01|-8.11|644|W|,Jacarei|sao paulo|BR|-45.97|-23.31|250|W|,Jackson|MS|US|-90.18|32.3|153|NW|,Jackson|TN|US|-88.81|35.61|66|N|,Jackson|NJ|US|-74.86|39.78|54|N|,Jackson|MI|US|-84.4|42.25|33|N|,Jackson Heights|NY|US|-73.89|40.76|67|N|,Jacksonville|FL|US|-81.66|30.33|1009|NW|,Jacksonville|NC|US|-77.43|34.75|67|N|,Jacksonville|AR|US|-92.11|34.87|28|N|,Jacmel|sud est|HT|-72.54|18.24|137|W|yaquimo,Jacobabad|sindh|PK|68.44|28.28|219|W|khangarh,Jacona de Plancarte|MX16|MX|-102.31|19.96|53|N|,Jaffna|northern province|LK|80.01|9.67|169|W|dzafna,Jahrom|fars|IR|53.56|28.5|141|W|,Jaigaon|west bengal|IN|89.38|26.85|158|W|,Jaipur|rajasthan|IN|75.79|26.92|3046|W|dzajpur,Jajmau|uttar pradesh|IN|80.41|26.43|652|W|,Jakarta|jakarta|ID|106.85|-6.21|8540|W|cakarta;djakarta;dzakarta;giacarta;yakarta;batavia;sunda kelapa;sundapura,Jalalabad|nangarhar|AF|70.45|34.43|271|W|celalabad;dschalalabad;dzalalabad,Jalalpur Jattan|punjab|PK|74.21|32.64|146|W|,Jalalpur Pirwala|punjab|PK|71.22|29.51|500|W|dzalalpur pirwala,Jalandhar|punjab|IN|75.58|31.33|868|W|dzalandhar,Jalapa|jalapa|GT|-89.99|14.64|159|W|,Jalgaon|maharashtra|IN|75.57|21|460|W|,Jalna|maharashtra|IN|75.89|19.84|285|W|,Jaltipan de Morelos|MX30|MX|-94.71|17.97|32|N|,Jamaica|NY|US|-73.81|40.69|216|NW|,Jamaica Plain|MA|US|-71.12|42.31|37|N|,Jamalpur|mymensingh division|BD|89.95|24.92|167|W|,Jambi City|jambi|ID|103.62|-1.6|635|W|jambi,Jamestown|NY|US|-79.24|42.1|30|N|,Jammu|jammu and kashmir|IN|74.86|32.74|576|W|dzammu,Jamnagar|gujarat|IN|70.07|22.47|600|W|dzamnagar,Jampur|punjab|PK|70.6|29.64|155|W|,Jamshedpur|jharkhand|IN|86.19|22.8|1339|W|cemsidpur;dzamsedpur,Jamuria|west bengal|IN|87.08|23.7|160|W|,Janakpur|madhesh|NP|85.93|26.73|195|W|janakpur dham,Janesville|WI|US|-89.02|42.68|64|N|,Janzur|al jafarah|LY|13.02|32.82|154|W|,Jaragua|sao paulo|BR|-46.74|-23.44|211|W|,Jaragua do Sul|santa catarina|BR|-49.07|-26.49|199|W|,Jaranwala|punjab|PK|73.42|31.33|150|W|,Jardim Angela|sao paulo|BR|-46.77|-23.72|311|W|,Jardim Sao Luis|sao paulo|BR|-46.74|-23.68|259|W|,Jardines de la Silla|MX19|MX|-100.19|25.63|53|N|,Jau|sao paulo|BR|-48.56|-22.3|133|W|,Jaunpur|uttar pradesh|IN|82.69|25.75|169|W|jawnpur,Jayapura|papua|ID|140.72|-2.53|410|W|jaya pura;kota jayapura;port numbay;hollandia;noordwijk,Jebel Ali|dubai|AE|55.11|25|210|W|,Jeddah|mecca region|SA|39.19|21.49|4697|W|cidde;djedda;djeddah;dschidda;dzudda;dzidda;jedda;jidda;jida;yida;yidda,Jefferson City|MO|US|-92.17|38.58|42|N|kota jefferson,Jeffersontown|KY|US|-85.56|38.19|26|N|,Jeffersonville|IN|US|-85.74|38.28|46|N|,Jeju City|jeju do|KR|126.52|33.51|488|W|czedzu;jeju;jeju sehri;kota jeju,Jember|east java|ID|113.7|-8.17|298|W|,Jeongeup|jeollabuk do|KR|126.92|35.6|139|W|,Jeonju|jeollabuk do|KR|127.15|35.82|638|W|chonju;condzu,Jepara|central java|ID|110.67|-6.59|1257|W|,Jerez de Garcia Salinas|MX32|MX|-102.99|22.65|43|N|,Jerez de la Frontera|andalusia|ES|-6.14|36.69|212|W|jerez;xeres,Jersey City|NJ|US|-74.08|40.73|264|NW|,Jerusalem|jerusalem|IL|35.22|31.77|971|W|gerusalemme;jerozolima;jerusalen;jeruzalem;al quds;ariel;ierusalim;kudus;yerusalem;zion,Jessore|khulna division|BD|89.21|23.17|243|W|,Jesus Maria|MX01|MX|-102.34|21.96|43|N|,Jhang Sadr|punjab|PK|72.32|31.27|606|W|jhang;jhang sadar,Jhansi|uttar pradesh|IN|78.58|25.46|412|W|,Jhelum|punjab|PK|73.73|32.93|190|W|alessandria bucefala;dzhelam;jhelam,Ji'an|jiangxi|CN|114.98|27.12|538|W|,Ji Parana|rondonia|BR|-61.95|-10.89|140|W|,Jiading|shanghai|CN|121.24|31.39|1886|W|,Jiagedaqi|inner mongolia|CN|124.12|50.42|135|W|jagdaqi,Jiamusi|heilongjiang|CN|130.31|46.8|549|W|tia mu s,Jiangmen|guangdong|CN|113.08|22.58|1795|W|giang mon;kongmoon;tiang men,Jiangyin|jiangsu|CN|120.26|31.91|1779|W|kiang ying,Jianshui|yunnan|CN|101.22|24.28|490|W|,Jiaojiang|zhejiang|CN|121.47|28.7|470|W|,Jiaozhou|shandong|CN|120|36.28|619|W|,Jiaozuo|henan|CN|113.24|35.24|865|W|tieu tac;tiao cuo,Jiashan|zhejiang|CN|120.93|30.85|137|W|,Jiawang|jiangsu|CN|117.44|34.43|133|W|,Jiaxing|zhejiang|CN|120.75|30.75|1180|W|gia hung;tia sing,Jiayuguan|gansu|CN|98.29|39.81|231|W|tia ju kuan,Jiazi|guangdong|CN|116.07|22.88|130|W|,Jieshi|guangdong|CN|115.83|22.81|137|W|,Jieshou|anhui|CN|115.36|33.26|141|W|,Jieyang|guangdong|CN|116.37|23.54|1899|W|tie jang,Jijel|jijel|DZ|5.76|36.82|131|W|dzidzili;yiyel;jijelli,Jijiang|chongqing|CN|106.25|29.29|196|W|,Jijiga|somali|ET|42.8|9.35|483|W|djidjiga;dschidschiga;dzidziga,Jilin|jilin|CN|126.56|43.85|1895|W|jilin city;ciudad de jilin;cat lam;kota jilin;ti lin,Jimeta|adamawa|NG|12.46|9.28|248|W|,Jimma|oromiya|ET|36.83|7.67|250|W|dzimma;gimma;jima,Jinan|shandong|CN|117|36.67|4335|W|ti nan,Jinchang|gansu|CN|102.19|38.5|228|W|kim xuong;tin cchang,Jincheng|shanxi|CN|112.83|35.5|476|W|,Jind|haryana|IN|76.32|29.32|167|W|,Jing'an|shanghai|CN|121.42|31.22|936|W|,Jing'an|guangdong|CN|113.29|22.21|186|W|,Jingdezhen|jiangxi|CN|117.21|29.29|473|W|,Jinghong|yunnan|CN|100.77|22|205|W|,Jingling|hubei|CN|113.1|30.65|224|W|,Jingmen|hubei|CN|112.2|31.03|632|W|kinh mon;ting men,Jingzhou|hubei|CN|112.19|30.35|1052|W|kinh chau;ting cou,Jinhua|zhejiang|CN|119.64|29.11|1463|W|kim hoa;tin chua,Jining|shandong|CN|116.58|35.41|1241|W|ti ning,Jining|inner mongolia|CN|113.11|41.03|258|W|,Jinjiang|fujian|CN|118.57|24.82|1416|W|,Jinshan|shanghai|CN|121.29|30.84|822|W|,Jinshanlu|xinjiang|CN|88.13|47.85|190|W|altay,Jinzhong|shanxi|CN|112.75|37.68|1226|W|,Jinzhou|liaoning|CN|121.14|41.11|604|W|tin cou,Jiroft|kerman|IR|57.74|28.68|130|W|,Jiujiang|jiangxi|CN|116|29.7|1164|W|ciuciang;tiou tiang,Jiuquan|gansu|CN|98.52|39.74|428|W|tiou cchuan,Jiutai|jilin|CN|125.83|44.15|175|W|,Jiutepec|MX17|MX|-99.18|18.88|215|NW|,Jixi|heilongjiang|CN|130.96|45.29|403|W|ke tay;ti si,Jiyuan|henan|CN|112.59|35.09|242|W|,Jizhou|hebei|CN|115.57|37.55|362|W|,Jizzax|jizzakh region|UZ|67.83|40.13|179|W|cizzak;djizak;djizaks;dschizak;dzjizak;dzyzak;jizzak;jizzakh,Joao Pessoa|paraiba|BR|-34.86|-7.12|817|W|,Jodhpur|rajasthan|IN|73.01|26.27|1056|W|dzodhpur;dzodpur,Joetsu|niigata|JP|138.24|37.15|189|W|,Johannesburg|gauteng|ZA|28.04|-26.2|9418|W|johannesbourg;jo anna;joanesburgo;johannesburgo,Johns Creek|GA|US|-84.2|34.03|83|N|,Johnson City|TN|US|-82.35|36.31|66|N|,Johnston|RI|US|-71.51|41.82|29|N|,Johor Bahru|johor|MY|103.76|1.47|858|W|johor baharu,Joint Base Pearl Harbor Hickam|HI|US|-157.95|21.35|42|N|,Joinville|santa catarina|BR|-48.85|-26.3|664|W|,Joliet|IL|US|-88.08|41.53|147|NW|,Joliette|QC|CA|-73.42|46.02|34|N|,Jomvu|mombasa county|KE|39.61|-3.99|163|W|,Jonesboro|AR|US|-90.7|35.84|73|N|,Jonquiere|QC|CA|-71.25|48.42|54|N|,Joplin|MO|US|-94.51|37.08|51|N|,Jos|plateau state|NG|8.89|9.93|1040|W|dzos,Jose C. Paz|buenos aires|AR|-58.77|-34.52|230|W|,Jose Mariano Jimenez|MX06|MX|-104.92|27.13|34|N|,Juazeiro|bahia|BR|-40.5|-9.41|256|W|,Juazeiro do Norte|ceara|BR|-39.32|-7.21|305|W|,Juba|central equatoria|SS|31.58|4.85|450|W|djouba;dschuba,Juiz de Fora|minas gerais|BR|-43.35|-21.76|540|W|,Juja|kiambu county|KE|37.01|-1.1|156|W|,Juliaca|puno|PE|-70.13|-15.5|245|W|,Junagadh|gujarat|IN|70.46|21.52|319|W|,Jundiai|sao paulo|BR|-46.88|-23.19|443|W|,Juneau|AK|US|-134.42|58.3|31|N|,Jupiter|FL|US|-80.09|26.93|62|N|,Jurong Town||SG|103.72|1.33|262|W|,Jurong West||SG|103.72|1.35|253|W|,Jutiapa|jutiapa|GT|-89.89|14.28|145|W|,Juventino Rosas|MX11|MX|-101|20.64|42|N|,Jyvaeskylae|central finland|FI|25.72|62.24|148|W|jyvaskyla,Kabankalan|western visayas|PH|122.81|9.98|210|W|,Kabin Buri|prachin buri|TH|101.72|13.95|140|W|,Kabinda|lomami|CD|24.48|-6.14|219|W|,Kabul|kabul|AF|69.17|34.53|4434|W|cabul;kaboel;kaboul;kabil,Kabwe|central province|ZM|28.45|-14.45|288|W|,Kadapa|andhra pradesh|IN|78.82|14.48|344|W|cuddapah,Kadoma|osaka|JP|135.57|34.74|131|W|,Kaduna|kaduna state|NG|7.44|10.53|1850|W|,Kaech'on|south pyongan|KP|125.89|39.7|319|W|,Kaesong|kaesong|KP|126.55|37.97|338|W|,Kafr ash Shaykh|kafr el sheikh|EG|30.94|31.11|194|W|,Kafrul|dhaka division|BD|90.37|23.79|339|W|,Kagoshima|kagoshima|JP|130.55|31.57|595|W|kagosima,Kahama|shinyanga|TZ|32.6|-3.83|453|W|,Kahramanmaras|kahramanmaras|TR|36.93|37.58|384|W|,Kahului|HI|US|-156.47|20.89|26|N|,Kaifeng|henan|CN|114.31|34.8|1451|W|kai feng;kchaj feng;khai phong,Kaili|guizhou|CN|107.98|26.59|275|W|,Kailua|HI|US|-157.74|21.4|38|N|,Kairouan|kairouan|TN|10.1|35.68|139|W|cairuao;kairuan;kayravan;qairawan;qayrawan,Kaithal|haryana|IN|76.4|29.8|144|W|,Kaiyuan|yunnan|CN|103.3|23.7|198|W|,Kajang|selangor|MY|101.79|2.99|236|W|,Kajansi|central region|UG|32.53|0.22|135|W|,Kakamega|kakamega county|KE|34.75|0.28|1867|W|,Kakamigahara|gifu|JP|136.87|35.42|144|W|,Kakinada|andhra pradesh|IN|82.24|16.96|384|W|,Kakogawacho-honmachi|hyogo|JP|134.83|34.77|271|W|kakogawa,Kalaban Koro|koulikoro|ML|-8.03|12.57|148|W|,Kalaburagi|karnataka|IN|76.84|17.34|543|W|gulbarga;kalaburgi,Kalamazoo|MI|US|-85.59|42.29|76|N|,Kalemie|tanganyika|CD|29.19|-5.95|160|W|,Kalemyo|sagaing region|MM|94.06|23.19|348|W|,Kalihi-Palama|HI|US|-157.88|21.33|43|N|kalihi,Kaliningrad|kaliningrad oblast|RU|20.51|54.71|475|W|krolewiec;caliningrado;kaliningrado;konigsberg;konigsberg in preussen,Kalininskiy|st petersburg|RU|30.39|60|504|W|,Kallakurichi|tamil nadu|IN|78.96|11.73|1682|W|,Kalol|gujarat|IN|72.5|23.25|134|W|,Kaluga|kaluga oblast|RU|36.27|54.53|340|W|kaloega;kalouga,Kalyan|maharashtra|IN|73.14|19.24|1262|W|,Kamakura|kanagawa|JP|139.55|35.31|172|W|,Kamalia|punjab|PK|72.65|30.73|166|W|,Kamalshahr|alborz province|IR|50.87|35.86|141|W|,Kamarhati|west bengal|IN|88.37|22.67|332|W|,Kamensk-Ural'skiy|sverdlovsk oblast|RU|61.93|56.41|182|W|kamensk uralskij;kamensk uralsky;kamensk uralski,Kamina|haut lomami|CD|25|-8.74|200|W|,Kamirenjaku|tokyo|JP|139.55|35.69|195|W|,Kamloops|BC|CA|-120.32|50.67|104|N|,Kamoke|punjab|PK|74.22|31.98|292|W|,Kampala|central region|UG|32.58|0.32|1680|W|campala,Kampong Baharu Cheras Batu Sebelas|selangor|MY|101.77|3.05|232|W|,Kampong Pasir Ris||SG|103.93|1.38|144|W|,Kampung Baru Subang|selangor|MY|101.53|3.15|833|W|,Kampung Kangkar Teberau|johor|MY|103.75|1.53|412|W|,Kampung Larkin Lama|johor|MY|103.74|1.5|500|W|,Kampung Pasir Gudang Baru|johor|MY|103.88|1.47|145|W|,Kampung Sungai Ara|penang|MY|100.27|5.33|140|W|,Kampung Sungai Glugur|penang|MY|100.31|5.37|145|W|,Kamyanske|dnipropetrovsk|UA|34.61|48.52|226|W|dnieprodzierzynsk;dniprodzerzyns k;kam jans ke;kamianske;kamienskie;dniprodzerzhynsk,Kananga|kasai central|CD|22.42|-5.9|1247|W|kanange,Kanasin|MX31|MX|-89.56|20.93|77|N|,Kanata|ON|CA|-75.92|45.3|90|N|,Kanayannur|kerala|IN|76.27|9.97|851|W|,Kanazawa|ishikawa|JP|136.62|36.6|466|W|,Kanchipuram|tamil nadu|IN|79.7|12.84|221|W|kancheepuram;kancipuram;conjevaram,Kanchrapara|west bengal|IN|88.43|22.96|136|W|,Kandahar|kandahar|AF|65.71|31.61|523|W|kandehar,Kaneohe|HI|US|-157.8|21.4|34|N|,Kanggye|chagang|KP|126.59|40.97|209|W|,Kankakee|IL|US|-87.86|41.12|26|N|,Kankan|kankan region|GN|-9.31|10.39|221|W|,Kannapolis|NC|US|-80.62|35.49|46|N|,Kano|kano state|NG|8.52|12|4910|W|,Kanpur|uttar pradesh|IN|80.35|26.47|2823|W|cawnporne,Kansas City|MO|US|-94.58|39.1|475|NW|kota kansas,Kansas City|KS|US|-94.63|39.11|152|NW|,Kaohsiung|takao|TW|120.31|22.62|2737|W|kaohsiung city;cao hung;gaoxiong;takao,Kaolack|kaolack|SN|-16.07|14.15|298|W|,Kapar|selangor|MY|101.38|3.13|269|W|,Karabaglar|izmir province|TR|27.13|38.38|479|W|,Karachi|sindh|PK|67.01|24.86|11624|W|carachi;karaczi;karanchi;karatschi;karaci,Karagandy|karaganda|KZ|73.1|49.8|497|W|karaganda;qaraghandy;qaragandi,Karaikkudi|tamil nadu|IN|78.77|10.07|181|W|karaikudi,Karaj|alborz province|IR|50.99|35.83|1448|W|karadsch;karadz;kerec,Karaman|karaman|TR|33.22|37.18|175|W|,Karamay|xinjiang|CN|84.89|45.58|261|W|kelamayi,Karawalnagar|delhi|IN|77.27|28.73|224|W|,Karawang|west java|ID|107.32|-6.31|307|W|,Karbala|karbala|IQ|44.02|32.62|1218|W|kerbela;kerbala,Kariega|eastern cape|ZA|25.4|-33.76|291|W|uitenhage,Karimnagar|telangana|IN|79.13|18.44|289|W|,Kariya|aichi|JP|136.98|34.98|153|W|,Karlsruhe|baden wurttemberg|DE|8.4|49.01|283|W|,Karnal|haryana|IN|76.98|29.69|302|W|,Karnaphuli|chittagong|BD|92.23|22.69|203|W|,Karol Bagh|delhi|IN|77.19|28.65|505|W|,Karsiyaka|izmir province|TR|27.11|38.46|339|W|cordaleo;cordelio,Karur|tamil nadu|IN|78.08|10.96|234|W|,Karuri|kiambu county|KE|36.76|-1.18|194|W|,Karuri|murang a|KE|37.18|-0.7|194|W|,Kasama|northern province|ZM|31.18|-10.21|179|W|arcidiocesi di kasama,Kasangati|central region|UG|32.6|0.44|207|W|,Kashan|isfahan|IR|51.43|33.98|304|W|,Kashgar|xinjiang|CN|75.99|39.47|506|W|kachgar;kaschgar;kasgar;kaszgar,Kashiwa|chiba|JP|139.98|35.86|433|W|,Kashmar|razavi khorasan|IR|58.47|35.24|131|W|,Kassala|kassala|SD|36.4|15.45|401|W|statul kassala,Kassel|hesse|DE|9.5|51.32|197|W|cassel,Kasugai|aichi|JP|136.97|35.25|308|W|,Kasukabe|saitama|JP|139.75|35.98|229|W|,Kasulu|kigoma|TZ|30.1|-4.58|238|W|,Kasur|punjab|PK|74.45|31.12|510|W|,Katabi|central region|UG|32.47|0.08|154|W|,Kathmandu|bagmati province|NP|85.32|27.7|1442|W|katmandou;catmandu;kathmandou;katmandu,Kati|koulikoro|ML|-8.07|12.74|130|W|,Katihar|bihar|IN|87.57|25.54|240|W|,Katowice|silesia|PL|19.02|50.26|286|W|katovice;kattowitz,Katsina|katsina state|NG|7.6|12.99|670|W|,Katsushika|tokyo|JP|139.85|35.73|453|W|katsushika ku;katsushika city,Katsuta|ibaraki|JP|140.53|36.38|155|W|,Kaunas|kaunas|LT|23.91|54.9|289|W|kowno;kauen,Kawagoe|saitama|JP|139.49|35.91|354|W|,Kawaguchi|saitama|JP|139.71|35.81|607|W|,Kawanishi|hyogo|JP|135.42|34.82|155|W|,Kawasaki|kanagawa|JP|139.72|35.52|1538|W|kawasaki city,Kayes|kayes|ML|-11.44|14.45|194|W|,Kayseri|kayseri|TR|35.49|38.73|1452|W|cesarea in cappadocia,Kaysville|UT|US|-111.94|41.04|30|N|,Kazan|tatarstan republic|RU|49.12|55.79|1243|W|caza;kasan,Kearney|NE|US|-99.08|40.7|33|N|,Kearns|UT|US|-112|40.66|35|N|,Kearny|NJ|US|-74.15|40.77|42|N|,Kediri|east java|ID|112.02|-7.82|301|W|kota kediri,Keelung|taiwan|TW|121.74|25.13|362|W|chilung;co long;kota keelung;ti lung,Keizer|OR|US|-123.03|44.99|37|N|,Kelar|sulaymaniyah|IQ|45.32|34.63|250|W|,Keller|TX|US|-97.25|32.93|45|N|,Kelowna|BC|CA|-119.49|49.88|144|NW|,Kembangan||SG|103.91|1.32|130|W|,Kemerovo|kuzbass|RU|86.1|55.35|558|W|kemerowo,Ken Caryl|CO|US|-105.11|39.58|32|N|,Kendale Lakes|FL|US|-80.41|25.71|56|N|,Kendall|FL|US|-80.32|25.68|80|N|,Kendall West|FL|US|-80.44|25.71|36|N|,Kendari|southeast sulawesi|ID|122.52|-3.98|351|W|kota kendari,Kenema|eastern province|SL|-11.19|7.88|255|W|,Keng Tung|shan state|MM|99.93|21.63|171|W|,Kenitra|rabat sale kenitra|MA|-6.58|34.26|470|W|al kunajtira;kenitre,Kennedy|bogota d c|CO|-74.15|4.62|979|W|,Kenner|LA|US|-90.24|29.99|67|N|,Kennesaw|GA|US|-84.62|34.02|33|N|,Kennewick|WA|US|-119.14|46.21|78|N|,Kenosha|WI|US|-87.82|42.58|99|N|,Kensington|NY|US|-73.97|40.65|39|N|,Kensington-Cedar Cottage|BC|CA|-123.07|49.25|49|N|,Kent|WA|US|-122.23|47.38|126|N|,Kent|OH|US|-81.36|41.15|29|N|,Kentron|yerevan|AM|44.51|40.18|133|W|kentron district,Kentwood|MI|US|-85.64|42.87|51|N|,Kerch|crimea|UA|36.48|45.36|148|W|kerci;kercz;kertch;kertj;kertsch;kertsj;kerts;kerc,Kerman|kerman|IR|57.08|30.28|577|W|,Kermanshah|kermanshah province|IR|47.06|34.31|621|W|kermanschah;kirmansah;province de kermanshah;provincia de kermanshah,Kettering|OH|US|-84.17|39.69|55|N|,Kew Gardens Hills|NY|US|-73.82|40.73|37|N|,Key West|FL|US|-81.78|24.56|25|N|cayo hueso,Khabarovsk|khabarovsk|RU|135.1|48.46|618|W|chabarovsk;chabarowsk;habarovsk;jabarovsk,Khairpur Mir's|sindh|PK|68.76|27.53|191|W|khairpur,Khamis Mushait|asir region|SA|42.73|18.3|387|W|chamis muschait;chamis muszajt;hamis musayt;khamis mushayt,Khammam|telangana|IN|80.14|17.25|196|W|,Khan Yunis|gaza strip|PS|34.31|31.34|173|W|jan yunis;khan younis,Khanaqin|diyala|IQ|45.39|34.35|175|W|,Khandwa|madhya pradesh|IN|76.35|21.82|200|W|,Khanpur|punjab|PK|70.66|28.65|142|W|,Kharagpur|west bengal|IN|87.33|22.34|219|W|,Kharkiv|kharkiv|UA|36.25|49.98|1421|W|charkiv;carcovia;charkiw;charkov;charkow;harkov;harkova;jarkov;kharkov,Khartoum|khartoum|SD|32.53|15.55|1974|W|cartum;chartum;hartum;jartum;khartoem;khartum,Khartoum North|khartoum|SD|32.53|15.65|1012|W|bahri;jartum norte;khartoum nord;khartum nord,Khasnahzan|erbil|IQ|44.14|36.2|146|W|,Khemisset|rabat sale kenitra|MA|-6.07|33.82|143|W|,Khimki|moscow oblast|RU|37.43|55.9|239|W|chimki;himki;jimki,Khirdalan|abseron|AZ|49.76|40.45|196|W|hirdalan;xirdalan,Khlong Sam Wa|bangkok|TH|100.74|13.87|169|W|,Khmelnytskyi|khmelnytskyi|UA|26.98|49.42|274|W|chmel nyc kyj;chmelnyzkyj;chmielnicki;khmel nyts kyy;proscurovia;ploskurow,Khobar|eastern province|SA|50.21|26.28|165|W|al chubar;al khobar;el huber,Khomeyni Shahr|isfahan|IR|51.54|32.69|277|W|three castles,Khoroshevo-Mnevniki|moscow|RU|37.47|55.78|159|W|,Khorramabad|lorestan province|IR|48.36|33.49|329|W|,Khorramshahr|khuzestan|IR|48.18|30.44|330|W|chorramschahr;chorramszahr;chorramsahr;hurremsehr;jorramchar;koramsjar,Khouribga|beni mellal khenifra|MA|-6.91|32.88|214|W|,Khujand|sughd|TJ|69.62|40.28|191|W|choedzjand;chudschand;chudzjand;hucand;hudzand;khodjent,Khulna|khulna division|BD|89.56|22.81|1500|W|,Khuraybat as Suq|amman|JO|35.92|31.88|186|W|,Khuy|west azerbaijan|IR|44.95|38.55|198|W|,Khuzdar|balochistan|PK|66.61|27.81|218|W|,Kiambu|kiambu county|KE|36.84|-1.17|147|W|,Kibaha|pwani|TZ|38.92|-6.77|265|W|,Kiel|schleswig holstein|DE|10.13|54.32|252|W|kilonia,Kielce|swietokrzyskie|PL|20.63|50.87|192|W|,Kigali|kigali|RW|30.06|-1.95|1132|W|,Kigoma|kigoma|TZ|29.63|-4.88|232|W|,Kikolo|luanda|AO|13.33|-8.78|728|W|quicolo,Kikuyu|kiambu county|KE|36.66|-1.25|323|W|,Kikwit|kwilu|CD|18.82|-5.04|509|W|,Kilamba|luanda|AO|13.28|-8.85|237|W|kilamba kiaxi,Killarney|BC|CA|-123.04|49.23|29|N|,Killeen|TX|US|-97.73|31.12|140|NW|,Kima Kieza|luanda|AO|13.3|-8.83|428|W|quima quieza,Kimberley|northern cape|ZA|24.76|-28.73|142|W|,Kimhae|gyeongsangnam do|KR|128.88|35.23|531|W|gimhae,Kindia|kindia|GN|-12.87|10.06|161|W|,Kindu|maniema|CD|25.92|-2.94|234|W|,Kingman|AZ|US|-114.05|35.19|28|N|,Kings Bridge|NY|US|-73.91|40.88|75|N|,Kingsport|TN|US|-82.56|36.55|53|N|,Kingston|kingston|JM|-76.79|18|937|W|,Kingston|ON|CA|-76.48|44.23|132|NW|cataraqui,Kingston upon Hull|england|GB|-0.34|53.74|314|W|hull,Kingsville|TX|US|-97.86|27.52|26|N|,Kinshasa|kinshasa|CD|15.31|-4.33|16000|W|kinsasa;kinszasa;quinxassa,Kipushi|haut katanga|CD|27.25|-11.76|169|W|,Kira|central region|UG|32.63|0.4|462|W|,Kirari Sulemannagar|delhi|IN|77.06|28.7|283|W|,Kirdasah|giza|EG|31.11|30.03|137|W|kerdasa,Kirikkale|kirikkale|TR|33.51|39.85|186|W|,Kirkland|WA|US|-122.21|47.68|87|N|,Kirkuk|kirkuk|IQ|44.39|35.47|1031|W|kerkuk;kirkoek;kirkouk,Kirkwood|MO|US|-90.41|38.58|27|N|,Kirov|kirov oblast|RU|49.66|58.6|507|W|kirow,Kirsehir|kirsehir|TR|34.16|39.15|150|W|,Kiryas Joel|NY|US|-74.17|41.34|32|N|,Kisangani|tshopo|CD|25.19|0.52|1181|W|stanleystad;stanleyville,Kisaran|north sumatra|ID|99.62|2.98|141|W|,Kisarazu|chiba|JP|139.93|35.38|136|W|,Kishangarh|rajasthan|IN|74.85|26.59|154|W|,Kishiwada|osaka|JP|135.37|34.47|205|W|,Kisi|oyo state|NG|3.85|9.08|155|W|,Kislovodsk|stavropol kray|RU|42.72|43.91|132|W|kislowodsk;kislowodzk,Kismayo|lower juba|SO|42.55|-0.36|234|W|chisimayu;kismaayo,Kissimmee|FL|US|-81.42|28.3|69|N|,Kisumu|kisumu county|KE|34.76|-0.1|397|W|,Kita|tokyo|JP|139.73|35.75|332|W|kita ku,Kitakyushu|fukuoka|JP|130.85|33.85|940|W|kitakjusu,Kitale|trans nzoia|KE|35.01|1.02|162|W|,Kitchener|ON|CA|-80.51|43.43|256|NW|,Kitengela|kajiado county|KE|36.96|-1.48|154|W|,Kitsilano|BC|CA|-123.17|49.27|43|N|,Kitwe|copperbelt|ZM|28.21|-12.8|665|W|,Kiziltepe|mardin|TR|40.58|37.19|150|W|,Klaipeda|klaipeda county|LT|21.14|55.71|172|W|klajpeda;memel,Klang|selangor|MY|101.44|3.04|240|W|kelang,Klerksdorp|north west|ZA|26.67|-26.85|227|W|,Kluang|johor|MY|103.32|2.03|323|W|,Klungkung|bali|ID|115.4|-8.53|223|W|,Knoxville|TN|US|-83.92|35.96|190|NW|,Kobe|hyogo|JP|135.18|34.69|1525|W|,Kochi|kerala|IN|76.26|9.94|633|W|cochim;cochin;ernakulam;koczin,Kochi|kochi|JP|133.53|33.55|332|W|kochi shi;kochishi,Kodaira|tokyo|JP|139.49|35.73|198|W|,Koeln|north rhine westphalia|DE|6.95|50.93|1024|W|koln;cologne;colonia;keulen;kolonia;kolin nad rynem,Koforidua|eastern|GH|-0.26|6.09|151|W|,Kofu|yamanashi|JP|138.57|35.67|189|W|,Koga|ibaraki|JP|139.72|36.18|139|W|,Kohat|khyber pakhtunkhwa|PK|71.45|33.58|151|W|,Kokomo|IN|US|-86.13|40.49|57|N|,Kokshetau|aqmola|KZ|69.39|53.28|150|W|kokchetaou;kokczetaw;koksetau;kokcetau;kokschetau;koksjetau;koksetaw,Kolar|karnataka|IN|78.13|13.14|138|W|,Kolhapur|maharashtra|IN|74.23|16.7|549|W|,Kolkata|west bengal|IN|88.36|22.56|4631|W|calcutta;calcuta;kalkata;kalkuta;kalkutta,Kollam|kerala|IN|76.58|8.88|367|W|quilon;coulao,Kolomna|moscow oblast|RU|38.78|55.07|147|W|,Kolpino|st petersburg|RU|30.59|59.75|138|W|kolppina,Kolwezi|lualaba|CD|25.47|-10.71|790|W|,Kom Ombo|aswan|EG|32.95|24.48|409|W|,Komaki|aichi|JP|136.92|35.28|148|W|,Kombolcha|amhara|ET|39.74|11.08|132|W|kembolcza,Komsomolsk-on-Amur|khabarovsk|RU|137.01|50.55|275|W|komsomolsk am amur;komsomolsk del amur;komsomolsk na amure;komsomolsk sur l amour,Kon Tum|quang ngai|VN|108.01|14.35|205|W|,Konak|izmir province|TR|27.1|38.4|332|W|,Konibodom|sughd|TJ|70.43|40.29|211|W|,Konya|konya|TR|32.48|37.87|1433|W|iconio,Korba|chhattisgarh|IN|82.7|22.35|419|W|,Koreatown|CA|US|-118.3|34.06|124|N|,Korhogo|savanes district|CI|-5.63|9.46|440|W|,Koriyama|fukushima|JP|140.38|37.4|327|W|,Korla|xinjiang|CN|86.15|41.76|549|W|,Korolev|moscow oblast|RU|37.83|55.91|139|W|korolyov;koroliov;koroljov;korolow,Koronadal|soccsksargen|PH|124.85|6.5|201|W|koronadal city;kota koronadal,Koshigaya|saitama|JP|139.79|35.89|345|W|,Kosice|kosice region|SK|21.26|48.71|225|W|koszyce;kaschau,Kostanay|kostanay|KZ|63.62|53.21|210|W|kostanai;kostanaj;kustanaj;qostanai;qostanaj;qostanay;kustanay;nikolayevsk,Kosti|white nile|SD|32.66|13.16|345|W|kusti,Kostroma|kostroma oblast|RU|40.93|57.77|277|W|,Kota|rajasthan|IN|75.84|25.18|1001|W|,Kota Bharu|kelantan|MY|102.24|6.12|568|W|kota bahru,Kota Damansara|selangor|MY|101.58|3.15|500|W|,Kota Kinabalu|sabah|MY|116.07|5.97|500|W|,Kota Kuala Muda|kedah|MY|100.37|5.59|544|W|,Koto|kumamoto|JP|130.75|32.78|543|W|koto city,Koudougou|centre ouest|BF|-2.37|12.25|160|W|,Koumassi|abidjan autonomous district|CI|-3.97|5.3|412|W|,Kousseri|far north|CM|15.03|12.08|139|W|,Koutiala|sikasso|ML|-5.47|12.39|218|W|,Kovpakivskyi|sumy|UA|34.79|50.93|142|W|kovpakivskyi rayon,Kovrov|vladimir oblast|RU|41.32|56.36|154|W|kowrow,Kowloon||HK|114.18|22.32|2232|W|koulun,Kowloon City|kowloon city|HK|114.19|22.33|418|W|,Kowloon City Centre|kowloon city|HK|114.19|22.33|194|W|,Kozhikode|kerala|IN|75.78|11.25|550|W|kozikkot;calecute;calicut,Kragujevac|central serbia|RS|20.92|44.02|147|W|,Krakow|lesser poland|PL|19.94|50.06|816|W|cracovia;cracovie;krakau;krakov;krakova;cracow,Kramatorsk|donetsk|UA|37.57|48.73|147|W|kramators k,Krasnodar|krasnodar krai|RU|38.98|45.05|899|W|,Krasnogvargeisky|st petersburg|RU|30.48|59.97|337|W|,Krasnoyarsk|krasnoyarsk krai|RU|92.93|56.04|1090|W|krasnojarsk;krasnoiarsk,Krefeld|north rhine westphalia|DE|6.55|51.34|237|W|,Kremenchuk|poltava|UA|33.4|49.06|224|W|kremencuk;kremenciuk;krementchouk;krementjuk;krementschuk;krementsjoek;krementsjuk;krementsuk;kremencug;krzemienczuk;kremenchug;kreminchuk,Kreuzberg|state of berlin|DE|13.4|52.5|153|W|berlin kreuzberg,Krishnanagar|west bengal|IN|88.49|23.41|145|W|,Kropyvnytskyi|kirovohrad|UA|32.27|48.51|219|W|kropywnycki;kropywnyzkyj;elisavetgrad;elizabethgrad;jelisawetgrad;jelizawietgrad;kirovo;kirovograd;kirovogrado;kirovohrad;kirowograd;kirowohrad;yelisavetgrad;zinovievsk;zinovyevsk;zinowjewsk,Krugersdorp|gauteng|ZA|27.78|-26.09|378|W|,Kryvyy Rih|dnipropetrovsk|UA|33.39|47.91|603|W|krivoj rog;kryvy rig;kryvy rih;kryvyi rih;kryvyj rih;krywyj rih;krzywy rog;krivii rih,Ksar El Kebir|tanger tetouan al hoceima|MA|-5.9|35|138|W|,Kuala Kubu Baharu|selangor|MY|101.66|3.56|194|W|kuala kubu;kuala kubu baru;kuala kubu bharu,Kuala Lumpur|kuala lumpur|MY|101.69|3.14|1453|W|,Kuala Terengganu|terengganu|MY|103.14|5.33|426|W|,Kuantan|pahang|MY|103.33|3.81|548|W|,Kuching|sarawak|MY|110.33|1.55|402|W|,Kuecuekcekmece|istanbul|TR|28.77|40.99|792|W|kucukcekmece,Kuetahya|kutahya|TR|29.98|39.42|185|W|kutahya,Kukatpally|telangana|IN|78.41|17.48|341|W|kukatpalle;kukatpalli,Kukichuo|saitama|JP|139.67|36.07|150|W|,Kulim|kedah|MY|100.56|5.36|170|W|,Kulob|khatlon province|TJ|69.78|37.91|214|W|,Kulti|west bengal|IN|86.84|23.73|305|W|,Kumagaya|saitama|JP|139.39|36.13|195|W|,Kumamoto|kumamoto|JP|130.69|32.81|738|W|kumamoto shi,Kumarapalayam|tamil nadu|IN|77.71|11.44|195|W|komarapalayam,Kumasi|ashanti|GH|-1.62|6.69|2544|W|,Kumba|south west|CM|9.45|4.64|225|W|,Kumbakonam|tamil nadu|IN|79.39|10.96|167|W|,Kunduz|kunduz|AF|68.86|36.73|161|W|konduz;kondoz;kundus;qunduz,Kunming|yunnan|CN|102.72|25.04|3855|W|con minh;kchun ming,Kunri|sindh|PK|69.57|25.18|237|W|,Kunshan|jiangsu|CN|120.95|31.38|2092|W|con son;kchun san,Kuntsevo|moscow|RU|37.4|55.74|147|W|kuncevo;kuncewo;kuntsevo district,Kupang|east nusa tenggara|ID|123.61|-10.17|474|W|kota kupang,Kurashiki|okayama|JP|133.77|34.58|483|W|,Kure|hiroshima|JP|132.57|34.23|214|W|,Kurgan|kurgan oblast|RU|65.34|55.45|309|W|curgan;koergan;kourgan,Kurnool|andhra pradesh|IN|78.04|15.83|460|W|karnulu,Kursk|kursk oblast|RU|36.18|51.73|448|W|koersk;koursk,Kurume|fukuoka|JP|130.52|33.32|303|W|,Kusatsu|shiga|JP|135.97|35.02|143|W|,Kushinagar|uttar pradesh|IN|83.89|26.74|274|W|,Kushiro|hokkaido|JP|144.37|42.98|167|W|kushiro shi;kusiro,Kushtia|khulna division|BD|89.12|23.9|135|W|,Kutaisi|imereti|GE|42.69|42.27|135|W|koutaissi;kutaissi;koetaisi;kutayis,Kuwana|mie|JP|136.67|35.05|140|W|,Kuz'minki|moscow|RU|37.8|55.7|143|W|,KwaDukuza|kwazulu natal|ZA|31.29|-29.33|161|W|,Kwai Chung|kwai tsing district|HK|114.14|22.37|331|W|,Ky Anh|ha tinh province|VN|106.3|18.06|150|W|,Kyaukpyu|rakhine|MM|93.55|19.43|180|W|,Kyauktan|yangon|MM|96.33|16.64|132|W|,Kyengera|central region|UG|32.5|0.3|285|W|,Kyiv|kyiv city|UA|30.52|50.45|2952|W|kiev;kyjiw;ki ep;kiew;kijow;kiova;kyiw;kyjev;chiovia,Kyivskyi|donetsk|UA|37.78|48.05|139|W|kyivskyi rayon,Kyle|TX|US|-97.88|29.99|35|N|,Kyoto|kyoto|JP|135.75|35.02|1463|W|kioto;kjoto;kyoto shi;quioto,Kyzylorda|kyzylorda|KZ|65.51|44.85|354|W|kizilorda;qysylorda;qyzylorda;qizilorda;ak mechet;fort perovsky;kzyl orda;perovsk,L'Amoreaux|ON|CA|-79.31|43.8|43|N|,L'Hospitalet de Llobregat|catalonia|ES|2.1|41.36|257|W|hospitalet de llobregat,La Barca|MX14|MX|-102.54|20.29|35|N|,La Ceiba|atlantida department|HN|-86.78|15.76|222|W|,La Cite-Limoilou|QC|CA|-71.23|46.83|108|N|,La Crosse|WI|US|-91.24|43.8|52|N|,La Gi|lam dong|VN|107.77|10.66|160|W|,La Habra|CA|US|-117.95|33.93|62|N|,La Haute-Saint-Charles|QC|CA|-71.37|46.89|88|N|,La Jolla|CA|US|-117.27|32.85|42|N|,La Joya|MX02|MX|-117|32.44|26|N|,La Laguna|canary islands|ES|-16.32|28.49|150|W|,La Mesa|CA|US|-117.02|32.77|60|N|,La Mirada|CA|US|-118.01|33.92|49|N|,La Paz|la paz department|BO|-68.15|-16.5|2004|W|ciudad la paz,La Paz|MX03|MX|-110.31|24.14|250|NW|,La Piedad de Cabadas|MX16|MX|-102.02|20.34|83|N|la piedad;municipio la piedad,La Pintana|santiago metropolitan|CL|-70.63|-33.58|201|W|,La Plata|buenos aires|AR|-57.95|-34.92|195|W|,La Porte|TX|US|-95.02|29.67|35|N|,La Presa|CA|US|-117|32.71|34|N|,La Puente|CA|US|-117.95|34.02|40|N|,La Quinta|CA|US|-116.31|33.66|40|N|,La Rioja|la rioja|AR|-66.86|-29.41|178|W|ciudad de la rioja;rioja,La Romana|la romana|DO|-68.97|18.42|208|W|,La Serena|coquimbo region|CL|-71.25|-29.91|154|W|,La Trinidad|cordillera|PH|120.59|16.45|142|W|,La Vergne|TN|US|-86.58|36.02|34|N|,La Verne|CA|US|-117.77|34.1|32|N|,Laayoune||EH|-13.19|27.14|196|W|el aaiun;aaiun;al ajoen;al ayun;al ujun;el ayun,Labuan Bajo|east nusa tenggara|ID|119.89|-8.5|188|W|labuanbajo,Lacey|WA|US|-122.82|47.03|46|N|,Ladysmith|kwazulu natal|ZA|29.78|-28.56|143|W|,Lafayette|LA|US|-92.02|30.22|121|N|,Lafayette|IN|US|-86.88|40.42|71|N|,Lafayette|CO|US|-105.09|39.99|27|N|,Lafayette|CA|US|-122.12|37.89|25|N|,Lages|santa catarina|BR|-50.33|-27.82|172|W|,Laghouat|laghouat|DZ|2.87|33.8|134|W|al aghwat;lagouat,Lagos|lagos|NG|3.39|6.45|15388|W|,Lagos de Moreno|MX14|MX|-101.93|21.36|98|N|,LaGrange|GA|US|-85.03|33.04|29|N|la grange,Laguna|CA|US|-121.42|38.42|46|N|,Laguna Hills|CA|US|-117.71|33.61|31|N|,Laguna Niguel|CA|US|-117.71|33.52|65|N|,Lahore|punjab|PK|74.35|31.56|13004|W|lahaur;lahor,Laibin|guangxi|CN|109.22|23.75|910|W|lai tan;laj pin,Laiwu|shandong|CN|117.66|36.19|989|W|lai vu;laj wu,Laixi|shandong|CN|120.53|36.86|341|W|,Laiyang|shandong|CN|120.71|36.98|169|W|,Laizhou|shandong|CN|119.94|37.18|188|W|laichow,Lajeado|sao paulo|BR|-46.41|-23.53|164|W|,Lake Charles|LA|US|-93.2|30.21|76|N|,Lake Elsinore|CA|US|-117.33|33.67|61|N|,Lake Forest|CA|US|-117.69|33.65|82|N|,Lake Havasu City|AZ|US|-114.32|34.48|53|N|,Lake in the Hills|IL|US|-88.33|42.18|29|N|,Lake Jackson|TX|US|-95.43|29.03|27|N|,Lake Magdalene|FL|US|-82.47|28.07|28|N|,Lake Oswego|OR|US|-122.67|45.42|38|N|,Lake Ridge|VA|US|-77.3|38.69|41|N|,Lake Stevens|WA|US|-122.06|48.02|30|N|,Lake Worth Beach|FL|US|-80.07|26.62|37|N|lake worth,Lakeland|FL|US|-81.95|28.04|104|N|,Lakeside|FL|US|-81.77|30.13|30|N|,Lakeville|MN|US|-93.24|44.65|60|N|,Lakewood|CO|US|-105.08|39.7|152|NW|,Lakewood|CA|US|-118.13|33.85|81|N|,Lakewood|WA|US|-122.52|47.17|59|N|,Lakewood|NJ|US|-74.22|40.1|53|N|lakewood township;municipio de lakewood,Lakewood|SK|CA|-106.59|52.11|51|N|,Lakewood|OH|US|-81.8|41.48|50|N|,Lakhimpur|uttar pradesh|IN|80.78|27.95|140|W|,Lal Bahadur Nagar|telangana|IN|78.56|17.35|261|W|,Lampang|lampang|TH|99.49|18.29|156|W|,Lancaster|CA|US|-118.14|34.7|161|NW|,Lancaster|PA|US|-76.31|40.04|59|N|,Lancaster|OH|US|-82.6|39.71|39|N|,Lancaster|TX|US|-96.76|32.59|38|N|,Land O' Lakes|FL|US|-82.46|28.22|31|N|,Lander|miranda|VE|-66.7|10.18|176|W|,Lang'ata|nairobi county|KE|36.73|-1.37|172|W|,Lang Son|lang son province|VN|106.76|21.85|200|W|,Langfang|hebei|CN|116.71|39.52|868|W|,Langford|BC|CA|-123.5|48.45|46|N|,Langley|BC|CA|-122.66|49.1|132|NW|ciudad de langley,Langsa|aceh|ID|97.97|4.47|184|W|,Lansing|MI|US|-84.56|42.73|112|N|,Lansing|IL|US|-87.54|41.56|28|N|,Lanus|buenos aires|AR|-58.39|-34.71|212|W|,Lanzhou|gansu|CN|103.84|36.06|3000|W|lan chau;lan cou,Lao Cai|lao cai|VN|103.97|22.49|130|W|laos,Laohekou|hubei|CN|111.67|32.39|253|W|,Laplace|LA|US|-90.48|30.07|29|N|,Lapu-Lapu City|central visayas|PH|123.95|10.31|497|W|lapu lapu,Larache|tanger tetouan al hoceima|MA|-6.16|35.19|136|W|al araisz;laraxe,Laramie|WY|US|-105.59|41.31|32|N|,Laredo|TX|US|-99.51|27.51|256|NW|,Largo|FL|US|-82.79|27.91|81|N|,Larisa|thessaly|GR|22.42|39.63|146|W|larissa;yenisehir,Larkana|sindh|PK|68.21|27.56|364|W|,Las Choapas|MX30|MX|-94.1|17.91|42|N|,Las Cruces|NM|US|-106.78|32.31|101|N|,Las Guacamayas|MX16|MX|-102.21|18.02|37|N|,Las Palmas de Gran Canaria|canary islands|ES|-15.42|28.1|383|W|las palmas;las palmas de g c;palmas de gran canaria,Las Pinas|national capital region|PH|120.98|14.45|615|W|,Las Pintitas|MX14|MX|-103.3|20.56|26|N|,Las Tunas|las tunas province|CU|-76.95|20.96|203|W|victoria de las tunas,Las Vegas|NV|US|-115.14|36.17|641|NW|,LaSalle|ON|CA|-83.06|42.24|32|N|,Lashio|shan state|MM|97.75|22.94|131|W|lasho;lasio,Lat Krabang|bangkok|TH|100.78|13.72|163|W|,Latacunga|cotopaxi|EC|-78.62|-0.93|205|W|,Latakia|latakia|SY|35.79|35.53|709|W|laodicea;lataquia;lattakia;lattaquie;lazkiye;lazikija,Latina|madrid|ES|-3.75|40.39|256|W|,Latkrabang|bangkok|TH|100.75|13.73|173|W|,Latur|maharashtra|IN|76.57|18.4|382|W|,Lauderdale Lakes|FL|US|-80.21|26.17|34|N|,Lauderhill|FL|US|-80.21|26.14|71|N|,Laurel|MD|US|-76.85|39.1|26|N|,Lauro de Freitas|bahia|BR|-38.33|-12.89|203|W|,Lausanne|vaud|CH|6.63|46.52|139|W|lausana;losanna;lozan;lozanna,Laval|QC|CA|-73.69|45.57|438|NW|,Laval-des-Rapides|QC|CA|-73.7|45.56|36|N|,Lawndale|CA|US|-118.35|33.89|33|N|,Lawrence|KS|US|-95.24|38.97|93|N|,Lawrence|MA|US|-71.16|42.71|80|N|,Lawrence|IN|US|-86.03|39.84|47|N|,Lawrenceville|GA|US|-83.99|33.96|30|N|,Lawson|SK|CA|-106.64|52.16|34|N|,Lawton|OK|US|-98.39|34.61|96|N|,Layton|UT|US|-111.97|41.06|74|N|,Layyah|punjab|PK|70.94|30.96|151|W|,Le Havre|normandy|FR|0.11|49.49|185|W|el havre;hawr;le port de grace,Le Mans|pays de la loire|FR|0.2|48|144|W|,Le Plateau-Mont-Royal|QC|CA|-73.58|45.53|105|N|,Le Sud-Ouest|QC|CA|-73.59|45.47|86|N|,Le Vieux-Longueuil|QC|CA|-73.51|45.54|135|NW|,League City|TX|US|-95.09|29.51|98|N|,Leamington|ON|CA|-82.6|42.05|35|N|,Leander|TX|US|-97.85|30.58|59|N|,Leavenworth|KS|US|-94.92|39.31|35|N|,Leawood|KS|US|-94.62|38.97|34|N|,Lebanon|TN|US|-86.29|36.21|30|N|,Lebanon|PA|US|-76.41|40.34|25|N|,Lee's Summit|MO|US|-94.38|38.91|95|N|,Leeds|england|GB|-1.55|53.8|536|W|,Leesburg|VA|US|-77.56|39.12|51|N|,Leganes|madrid|ES|-3.76|40.33|188|W|,Legaspi|bicol region|PH|123.74|13.14|179|W|legazpi;legaspi city;legazpi city,Lehi|UT|US|-111.85|40.39|58|N|,Lehigh Acres|FL|US|-81.62|26.63|86|N|,Leicester|england|GB|-1.13|52.64|368|W|,Leipzig|saxony|DE|12.37|51.34|504|W|lipsca;lipsia;lipsk;lipsko,Leisure City|FL|US|-80.43|25.5|26|N|,Lekki|lagos|NG|3.48|6.45|401|W|,Lembang|west java|ID|107.62|-6.81|183|W|,Lemon Grove|CA|US|-117.03|32.74|26|N|,Lemoore|CA|US|-119.78|36.3|25|N|,Lenexa|KS|US|-94.73|38.95|52|N|,Leogane|ouest|HT|-72.63|18.51|134|W|,Leominster|MA|US|-71.76|42.53|41|N|,Leon|leon department|NI|-86.88|12.44|144|W|,Leon de los Aldama|MX11|MX|-101.68|21.12|1579|NW|leon;leon guanajuato;leon de los aldamas,Lerdo|MX10|MX|-103.52|25.54|79|N|,Les Rivieres|QC|CA|-71.27|46.82|77|N|,Leshan|sichuan|CN|103.76|29.56|662|W|le san,Lethbridge|AB|CA|-112.82|49.7|103|N|,Leverkusen|north rhine westphalia|DE|6.98|51.03|162|W|,Levis|QC|CA|-71.18|46.8|143|NW|,Levittown|PA|US|-74.83|40.16|52|N|,Levittown|NY|US|-73.51|40.73|51|N|lewittown,Lewiston|ME|US|-70.21|44.1|36|N|,Lewiston|ID|US|-117.02|46.42|32|N|,Lewiston Orchards|ID|US|-116.98|46.38|31|N|,Lewisville|TX|US|-96.99|33.05|104|N|,Lexington|KY|US|-84.48|37.99|320|NW|,Lexington|MA|US|-71.22|42.45|31|N|lexington village;cambridge farms;lexington centre,Lexington-Fayette|KY|US|-84.46|38.05|314|NW|,Lhoka|tibet|CN|91.77|29.24|353|W|,Lhokseumawe|aceh|ID|97.15|5.18|200|W|kota lhokseumawe,Lianghu|zhejiang|CN|120.9|29.99|155|W|,Liangping|chongqing|CN|107.77|30.66|137|W|,Lianshan|liaoning|CN|120.85|40.76|313|W|,Lianyungang|jiangsu|CN|119.22|34.6|2001|W|,Liaocheng|shandong|CN|116|36.45|1229|W|liao ccheng;lieu thanh,Liaoyang|liaoning|CN|123.17|41.27|687|W|liao jang;lieu duong,Libertad|caraga|PH|125.5|8.94|250|W|,Liberty|MO|US|-94.42|39.25|30|N|,Libreville|estuaire|GA|9.45|0.39|846|W|,Licheng|guangdong|CN|113.82|23.3|172|W|,Lichinga|niassa province|MZ|35.24|-13.31|281|W|,Liege|wallonia|BE|5.57|50.63|195|W|luttich;liegi;lieja;luik;lutych,Lijiang|yunnan|CN|100.22|26.87|211|W|cidade antiga de lijiang;li tiang,Likasi|haut katanga|CD|26.74|-10.98|635|W|jadotstad;jadotsville,Lille|hauts de france|FR|3.06|50.63|238|W|rijsel;lila;lilla,Lilongwe|central region|MW|33.79|-13.97|1115|W|lilongue,Lima|lima province|PE|-77.03|-12.04|7737|W|,Lima|OH|US|-84.11|40.74|37|N|,Limassol|limassol|CY|33.04|34.68|154|W|lemesos;limasol;limisso,Limbe|south west|CM|9.21|4.02|131|W|,Limeira|sao paulo|BR|-47.4|-22.56|291|W|,Limoges|new aquitaine|FR|1.25|45.83|141|W|,Limuru|kiambu county|KE|36.64|-1.11|159|W|,Linares|MX19|MX|-99.57|24.86|70|N|,Lincang|yunnan|CN|100.09|23.88|323|W|,Lincoln|NE|US|-96.67|40.8|294|NW|,Lincoln|CA|US|-121.29|38.89|49|N|,Lincoln Park|IL|US|-87.65|41.92|66|N|,Lincoln Park|MI|US|-83.18|42.25|37|N|,Lincoln Square|IL|US|-87.69|41.98|40|N|,Linden|NJ|US|-74.24|40.62|42|N|,Lindenhurst|NY|US|-73.37|40.69|27|N|,Linfen|shanxi|CN|111.52|36.09|959|W|lin fen,Linhares|espirito santo|BR|-40.07|-19.39|183|W|,Linkoeping|ostergotland|SE|15.62|58.41|166|W|linkoping,Linqu|shandong|CN|118.54|36.52|299|W|,Linton Hall|VA|US|-77.57|38.76|35|N|,Linxia Chengguanzhen|gansu|CN|103.21|35.6|274|W|linxia,Linyi|shandong|CN|118.34|35.06|2743|W|lam nghi,Linz|upper austria|AT|14.29|48.31|204|W|linec,Lipa City|calabarzon|PH|121.16|13.94|212|W|,Lipetsk|lipetsk oblast|RU|39.55|52.59|509|W|lipezk;lipeck;lipetk;lipieck,Lisbon|lisbon|PT|-9.15|38.73|517|W|lisboa;lisabon;lisabona;lisbona;lisbonne;lissabon;lizbon;lizbona,Lishui|zhejiang|CN|119.91|28.46|451|W|li suej,Little Elm|TX|US|-96.94|33.16|38|N|,Little Havana|FL|US|-80.23|25.77|53|N|la pequena habana,Little Rock|AR|US|-92.29|34.75|202|NW|,Littleton|CO|US|-105.02|39.61|46|N|,Liupanshui|guizhou|CN|104.83|26.59|1320|W|liou pchan suej,Liuzhi|guizhou|CN|105.43|26.23|138|W|,Liuzhou|guangxi|CN|109.41|24.32|1436|W|liou cou;liuchow,Livermore|CA|US|-121.77|37.68|88|N|,Liverpool|england|GB|-2.98|53.41|496|W|,Livingston|NJ|US|-74.31|40.8|27|N|,Livingstone|southern province|ZM|25.85|-17.84|178|W|,Livonia|MI|US|-83.35|42.37|94|N|,Livorno|tuscany|IT|10.33|43.54|157|W|livourne,Lizhi|chongqing|CN|107.4|29.7|156|W|,Ljubljana|ljubljana|SI|14.51|46.05|272|W|liubliana;lubiana;lublana;lublan;laibach,Lleida|catalonia|ES|0.62|41.62|140|W|lerida,Lloydminster|AB|CA|-110.02|53.27|31|N|,Loa Janan|east kalimantan|ID|117.1|-0.58|212|W|,Lobito|benguela|AO|13.54|-12.36|393|W|,Lochearn|MD|US|-76.72|39.34|25|N|,Lockport|IL|US|-88.06|41.59|25|N|,Lodhran|punjab|PK|71.63|29.53|144|W|,Lodi|CA|US|-121.27|38.13|64|N|,Lodz|lodz voivodeship|PL|19.47|51.77|639|W|litzmannstadt,Logan|UT|US|-111.83|41.74|50|N|,Logan City|queensland|AU|153.11|-27.64|345|W|citta di logan;logan,Logan Square|IL|US|-87.7|41.92|73|N|,Logrono|la rioja|ES|-2.45|42.47|151|W|,Loja|loja|EC|-79.2|-3.99|274|W|,Loma Bonita|MX20|MX|-95.88|18.11|40|N|,Lombard|IL|US|-88.01|41.88|43|N|,Lome|maritime|TG|1.22|6.13|2188|W|,Lompoc|CA|US|-120.46|34.64|44|N|,London|england|GB|-0.13|51.51|8961|W|londres;londen;londra;londyn;lontoo;luan don,London|ON|CA|-81.23|42.98|422|NW|,Londrina|parana|BR|-51.16|-23.31|581|W|,Long Beach|CA|US|-118.19|33.77|474|NW|,Long Beach|NY|US|-73.66|40.59|33|N|,Long Bien|hanoi|VN|105.9|21.03|347|W|,Long Branch|NJ|US|-73.99|40.3|30|N|,Long Island City|NY|US|-73.95|40.74|25|N|lic,Long Khanh|dong nai|VN|107.25|10.93|171|W|,Long Xuyen|an giang|VN|105.44|10.39|286|W|,Longfellow Community|MN|US|-93.23|44.94|29|N|,Longfeng|heilongjiang|CN|125.1|46.53|152|W|,Longgang|guangdong|CN|114.26|22.72|215|W|district de longgang;long cuong;longgang district,Longling County|yunnan|CN|98.69|24.59|270|W|,Longmont|CO|US|-105.1|40.17|92|N|,Longshan|jilin|CN|125.14|42.89|465|W|liao juan;liaoyuan;lieu nguyen,Longueuil|QC|CA|-73.47|45.52|229|NW|,Longview|TX|US|-94.74|32.5|82|N|,Longview|WA|US|-122.94|46.14|36|N|,Longyan|fujian|CN|117.02|25.07|1025|W|long nham;lung jen,Loni|uttar pradesh|IN|77.29|28.75|516|W|,Lorain|OH|US|-82.18|41.45|63|N|,Los Altos|CA|US|-122.11|37.39|30|N|,Los Angeles|CA|US|-118.24|34.05|3820|NW|l a,Los Banos|CA|US|-120.85|37.06|37|N|,Los Gatos|CA|US|-121.97|37.23|30|N|,Los Mochis|MX25|MX|-109|25.79|256|NW|,Los Reyes Acaquilpan|MX15|MX|-98.98|19.36|85|N|los reyes la paz;reyes la paz,Los Reyes de Salgado|MX16|MX|-102.47|19.59|39|N|,Los Teques|miranda|VE|-67.04|10.35|252|W|,Loudi|hunan|CN|111.99|27.73|497|W|,Louisville|KY|US|-85.76|38.25|624|NW|,Loveland|CO|US|-105.07|40.4|75|N|,Lowell|MA|US|-71.32|42.63|110|N|,Lower Sackville|NS|CA|-63.68|44.78|51|N|,Lower West Side|IL|US|-87.67|41.85|34|N|,Lu'an|anhui|CN|116.52|31.74|1644|W|,Luancheng|hebei|CN|114.65|37.88|597|W|,Luanda|luanda|AO|13.23|-8.84|2776|W|loanda,Luanshya|copperbelt|ZM|28.42|-13.14|193|W|,Lubango|huila|AO|13.49|-14.92|600|W|sa da bandeira,Lubbock|TX|US|-101.86|33.58|249|NW|,Lublin|lublin|PL|22.57|51.25|336|W|lublino,Lubuklinggau|south sumatra|ID|102.86|-3.29|234|W|kota lubuklinggau,Lubumbashi|haut katanga|CD|27.48|-11.66|2221|W|elizabethstad;elisabethville,Lucena|calabarzon|PH|121.62|13.93|228|W|kota lucena;lucena city,Lucknow|uttar pradesh|IN|80.92|26.84|2472|W|lakhnau;laknau,Ludhiana|punjab|IN|75.85|30.91|1618|W|ludhijana,Ludwigshafen am Rhein|rheinland pfalz|DE|8.45|49.48|163|W|ludwigshafen;ludwigshafen sul reno,Luebeck|schleswig holstein|DE|10.69|53.87|212|W|lubeck;lubeca;lubecca;lubeka;lyypekki,Lueliang|shanxi|CN|111.14|37.52|3346|W|luliang,Luena|moxico|AO|19.92|-11.78|273|W|,Lufkin|TX|US|-94.73|31.34|36|N|,Luhansk|luhansk|UA|39.31|48.57|397|W|loehansk;louhansk;lugansk;luhans k;voroshilovgrad;woroschilowgrad,Luohe|henan|CN|114.03|33.57|1294|W|luo che;thap ha,Luohu District|guangdong|CN|114.13|22.55|1143|W|,Luojiang|sichuan|CN|104.5|31.3|212|W|,Luoyang|henan|CN|112.44|34.67|1390|W|luo jang,Lusail|al daayen|QA|51.51|25.42|198|W|,Lusaka|lusaka province|ZM|28.29|-15.41|2212|W|,Lushui|yunnan|CN|98.86|25.82|197|W|,Luton|england|GB|-0.42|51.88|225|W|,Lutsk|volyn|UA|25.35|50.76|215|W|loetsk;loutsk;luc k;luzk;luck;lucioria,Luxor|luxor|EG|32.64|25.7|422|W|el uksur;louxor;luksor,Luzhou|sichuan|CN|105.43|28.89|998|W|lu cou;lo chau,Luziania|goias|BR|-47.95|-16.25|221|W|,Lviv|lviv|UA|24.02|49.84|717|W|leopoli;lwow;leopolo;leopolis;liov;lvov;lwiw;lemberg,Lynchburg|VA|US|-79.14|37.41|79|N|,Lynn|MA|US|-70.95|42.47|92|N|,Lynnwood|WA|US|-122.32|47.82|36|N|,Lynwood|CA|US|-118.21|33.93|71|N|,Lyon|rhone alpes|FR|4.85|45.75|520|W|lione,Lyubertsy|moscow oblast|RU|37.89|55.68|154|W|lioubertsy;liubertsi;liuberti;liubertsy;ljoebertsy;ljubercy;ljubertsy;ljuberzy;lubiercy,Lyublino|moscow|RU|37.76|55.68|172|W|,M'Sila|m sila|DZ|4.54|35.71|132|W|,Ma'anshan|anhui|CN|118.51|31.69|741|W|,Ma On Shan|sha tin|HK|114.24|22.41|215|W|,Mabalacat City|central luzon|PH|120.57|15.22|188|W|mabalacat,Mableton|GA|US|-84.58|33.82|37|N|,Macae|rio de janeiro|BR|-41.78|-22.38|264|W|,Macapa|amapa|BR|-51.07|0.04|512|W|,Macau||MO|113.55|22.2|649|W|ma cao;macao;makao;makau,Maceio|alagoas|BR|-35.74|-9.67|1031|W|macelo,Machala|el oro|EC|-79.96|-3.26|289|W|,Machida|tokyo|JP|139.45|35.54|431|W|,Machilipatnam|andhra pradesh|IN|81.14|16.19|192|W|masulipatao,Machiques|zulia|VE|-72.55|10.06|132|W|,Macon|GA|US|-83.63|32.84|91|N|,Macuspana|MX27|MX|-92.6|17.76|32|N|,Madanapalle|andhra pradesh|IN|78.5|13.55|180|W|,Madera|CA|US|-120.06|36.96|64|N|,Madhurampur Dehri|bihar|IN|84.2|24.97|137|W|,Madhyamgram|west bengal|IN|88.45|22.69|161|W|,Madinah|medina region|SA|39.61|24.47|1300|W|medina;al madinah al munawwarah;medine;medyna,Madinat an Nasr|cairo|EG|31.3|30.07|668|W|,Madinat Hamad|northern|BH|50.51|26.12|133|W|hamad town,Madison|WI|US|-89.4|43.07|280|NW|,Madison|AL|US|-86.75|34.7|46|N|,Madison|MS|US|-90.12|32.46|25|N|,Madison Heights|MI|US|-83.11|42.49|30|N|madison hts,Madiun|east java|ID|111.52|-7.63|202|W|kota madiun,Madrid|madrid|ES|-3.7|40.42|3255|W|madryt,Madrid|cundinamarca|CO|-74.26|4.73|135|W|,Madrid Centro|madrid|ES|-3.7|40.42|149|W|madrid city center,Madurai|tamil nadu|IN|78.12|9.92|1465|W|maduraj,Maebashi|gunma|JP|139.08|36.4|332|W|maebasi,Magdalena Atlicpac|MX15|MX|-98.95|19.37|26|N|,Magdalena Contreras|MX09|MX|-99.21|19.33|238|NW|,Magdalena de Kino|MX26|MX|-110.96|30.63|26|N|,Magdeburg|saxony anhalt|DE|11.63|52.13|244|W|maagdenburg;magdebourg;magdeburgo;magdeburk,Mage|rio de janeiro|BR|-43.04|-22.65|244|W|,Magna|UT|US|-112.1|40.71|26|N|,Magnitogorsk|chelyabinsk|RU|59.01|53.4|413|W|,Magugpo Poblacion|davao region|PH|125.8|7.45|233|W|tagum;tagum city,Mahabad|west azerbaijan|IR|45.72|36.76|168|W|mehabad,Mahajanga|boeny|MG|46.32|-15.72|260|W|,Maharagama|western province|LK|79.93|6.85|195|W|,Mahbubnagar|telangana|IN|77.99|16.74|190|W|,Mahesana|gujarat|IN|72.38|23.6|190|W|,Maheshtala|west bengal|IN|88.25|22.51|448|W|,Mahilyow|mogilev|BY|30.34|53.91|352|W|mahiljou;mogilev;maguilov;mahiliou;mahiljow;mahileu;mogiljow;moguilev;mohylew,Maianga|luanda|AO|13.24|-8.85|727|W|,Maicao|la guajira department|CO|-72.24|11.38|166|W|,Maiduguri|borno state|NG|13.16|11.85|1110|W|,Maijdi|chittagong|BD|91.1|22.87|132|W|,Mainz|rheinland pfalz|DE|8.28|49.98|222|W|magonza;maguncia;mayence;moguncja;moguncia;mohuc;maienta;ments,Maipu|santiago metropolitan|CL|-70.77|-33.51|503|W|,Majie|yunnan|CN|102.64|25.03|131|W|,Makakilo / Kapolei / Honokai Hale|HI|US|-158.1|21.34|46|N|,Makassar|south sulawesi|ID|119.43|-5.15|1474|W|kota makassar;macassar;makasar,Makati City|national capital region|PH|121.03|14.55|510|W|makati,Makhachkala|dagestan|RU|47.5|42.98|596|W|machaczkala;machatjkala;machatschkala;machatsjkala;machackala;mahackala;mahatskala;mahckale;majachkala;makhatchkala;makhatsjkala,Makiki / Lower Punchbowl / Tantalus|HI|US|-157.83|21.32|31|N|,Makiyivka|donetsk|UA|37.93|48.05|338|W|makiejewka;makiivka,Makkah|mecca region|SA|39.83|21.43|1578|W|mecca;la meca;la mecca;la mecque;makkah al mukarramah;meca;mecka;mekka;mekkah;mekke,Makurdi|benue state|NG|8.52|7.73|390|W|,Malabo|bioko norte|GQ|8.78|3.76|155|W|ciudad de malabo;santa isabel,Malabon|national capital region|PH|120.94|14.67|365|W|,Malacca|melaka|MY|102.24|2.2|579|W|malakka;malaca;malaka;melaka,Malaga|andalusia|ES|-4.42|36.72|592|W|,Malakal|upper nile|SS|31.66|9.53|160|W|,Malang|east java|ID|112.63|-7.98|889|W|kabupaten malang;kota malang,Malanje|malanje|AO|16.34|-9.54|455|W|,Malatia-Sebastia|yerevan|AM|44.45|40.17|150|W|,Malatya|malatya|TR|38.32|38.35|750|W|,Malayer|hamadan province|IR|48.82|34.3|170|W|,Malda|west bengal|IN|88.15|25|170|W|english bazar,Malden|MA|US|-71.07|42.43|61|N|,Malegaon|maharashtra|IN|74.53|20.55|481|W|,Maler Kotla|punjab|IN|75.88|30.53|135|W|,Malingao|soccsksargen|PH|124.47|7.16|1121|W|,Malir Cantonment|sindh|PK|67.21|24.94|300|W|,Malkajgiri|telangana|IN|78.53|17.45|150|W|,Mallawi|minya|EG|30.84|27.73|212|W|,Malmoe|skane|SE|13|55.61|362|W|malmo,Malolos|central luzon|PH|120.81|14.84|269|W|malolos city,Maltepe|istanbul|TR|29.16|40.94|427|W|,Malvern|ON|CA|-79.22|43.81|43|N|,Man|montagnes|CI|-7.55|7.41|241|W|,Man'gyongdae-ri|pyongyang|KP|125.66|38.99|321|W|,Manado|north sulawesi|ID|124.85|1.48|458|W|kota manado,Managua|managua department|NI|-86.25|12.13|973|W|,Manama|manama|BH|50.59|26.23|147|W|al manamah;manamah,Manassas|VA|US|-77.48|38.75|41|N|,Manaus|amazonas|BR|-60.02|-3.1|2219|W|manaos,Manchester|england|GB|-2.24|53.48|568|W|,Manchester|NH|US|-71.45|43|110|N|,Manchester|CT|US|-72.52|41.78|30|N|,Mandalay|mandalay region|MM|96.08|21.97|1208|W|mandalaj,Mandaluyong|national capital region|PH|121.04|14.58|425|W|,Mandaluyong City|national capital region|PH|121.04|14.58|465|W|mandaluyong,Mandaue City|central visayas|PH|123.92|10.32|331|W|,Mandsaur|madhya pradesh|IN|75.07|24.07|141|W|,Mandya|karnataka|IN|76.9|12.52|137|W|mandja,Maneah|kindia|GN|-13.42|9.73|194|W|,Mangaluru|karnataka|IN|74.86|12.92|499|W|mangalore,Mango|jharkhand|IN|86.22|22.83|223|W|,Manhattan|NY|US|-73.97|40.78|1487|NW|,Manhattan|KS|US|-96.57|39.18|56|N|,Manhattan Beach|CA|US|-118.41|33.88|35|N|,Manhattan Valley|NY|US|-73.97|40.79|38|N|,Manila|national capital region|PH|120.98|14.6|1600|W|city of manila;manila city;manilla;manille,Manisa|manisa|TR|27.43|38.61|243|W|magnesia ad sipylum;magnesia am sipylos,Manitowoc|WI|US|-87.66|44.09|33|N|,Manizales|caldas department|CO|-75.51|5.07|434|W|,Manjhand|sindh|PK|68.24|25.91|140|W|,Mankato|MN|US|-94.01|44.16|41|N|,Mannheim|baden wurttemberg|DE|8.47|49.49|307|W|,Manokwari|west papua|ID|134.06|-0.86|132|W|,Mansa|luapula province|ZM|28.89|-11.2|170|W|,Mansfield|england|GB|-1.2|53.13|171|W|,Mansfield|TX|US|-97.14|32.56|64|N|,Mansfield|OH|US|-82.52|40.76|46|N|,Mansfield City|CT|US|-72.23|41.77|26|N|,Mansilingan|western visayas|PH|122.98|10.63|454|W|,Manta|manabi|EC|-80.73|-0.95|264|W|manta ecuador,Mantampay|northern mindanao|PH|124.22|8.17|265|W|,Manteca|CA|US|-121.22|37.8|75|N|,Mantilla|havana|CU|-82.34|23.07|206|W|,Manukau City|auckland|NZ|174.88|-36.99|362|W|manukau,Manzanillo|MX08|MX|-104.34|19.12|159|NW|,Maoming|guangdong|CN|110.91|21.67|1307|W|chaozhou;mao ming,Maple Grove|MN|US|-93.46|45.07|68|N|,Maple Ridge|BC|CA|-122.6|49.22|82|N|,Maple Valley|WA|US|-122.05|47.39|25|N|,Maplewood|MN|US|-93|44.95|40|N|,Maplewood|NJ|US|-74.27|40.73|25|N|,Maputo|maputo city|MZ|32.58|-25.97|1254|W|lourenco marques,Mar del Plata|buenos aires|AR|-57.56|-38|593|W|,Mar'ino|moscow|RU|37.72|55.65|243|W|,Maraba|para|BR|-49.13|-5.38|283|W|,Maracaibo|zulia|VE|-71.61|10.64|1752|W|,Maracanau|ceara|BR|-38.63|-3.88|251|W|,Maracay|aragua|VE|-67.59|10.25|464|W|,Maradi|maradi region|NE|7.1|13.5|361|W|,Maragheh|east azerbaijan|IR|46.24|37.39|262|W|,Maragheh|razavi khorasan|IR|59.63|35.83|262|W|,Marana|AZ|US|-111.23|32.44|41|N|,Maravatio de Ocampo|MX16|MX|-100.44|19.89|34|N|,Marawi City|autonomous region in muslim mindanao|PH|124.28|8|259|W|,Marbella|andalusia|ES|-4.89|36.52|156|W|,Marcory|abidjan autonomous district|CI|-3.99|5.31|214|W|,Mardan|khyber pakhtunkhwa|PK|72.05|34.2|300|W|,Marfil|MX11|MX|-101.29|21|29|N|,Marg'ilon|fergana|UZ|71.72|40.47|253|W|margilan,Margate|FL|US|-80.21|26.24|57|N|,Marianao|havana|CU|-82.43|23.07|134|W|,Marica|rio de janeiro|BR|-42.82|-22.92|211|W|,Maricopa|AZ|US|-112.05|33.06|48|N|,Marienthal|hamburg|DE|10.08|53.57|287|W|hamburg marienthal,Marietta|GA|US|-84.55|33.95|59|N|,Marikina City|national capital region|PH|121.11|14.65|471|W|,Marilia|sao paulo|BR|-49.95|-22.21|237|W|,Maringa|parana|BR|-51.94|-23.43|409|W|,Marion|IA|US|-91.6|42.03|37|N|,Marion|OH|US|-83.13|40.59|36|N|,Marion|IN|US|-85.66|40.56|29|N|,Mariupol|donetsk|UA|37.54|47.1|230|W|marioepol;marioupol,Marivan|kurdistan province|IR|46.18|35.52|136|W|,Mariveles|central luzon|PH|120.49|14.43|156|W|,Marka|lower shabeelle|SO|44.77|1.72|230|W|merca,Markham|ON|CA|-79.27|43.87|338|NW|,Marlboro|NJ|US|-74.25|40.32|40|N|,Marlborough|MA|US|-71.55|42.35|39|N|,Marne La Vallee|ile de france|FR|2.64|48.84|318|W|,Maroua|far north|CM|14.32|10.59|314|W|,Marpole|BC|CA|-123.13|49.21|27|N|,Marrakesh|marrakesh safi|MA|-8|31.63|995|W|marrakech;marakes;marrakesch;marrakesz;marraquexe;marrakes,Marrero|LA|US|-90.1|29.9|33|N|,Marsa Matruh|matruh|EG|27.24|31.35|176|W|mersa matruh,Marseille|provence alpes cote d azur|FR|5.38|43.3|877|W|marselha;marsella;marsiglia;marsilia;marsilya;marsylia,Marshalltown|IA|US|-92.91|42.05|27|N|,Martapura|south kalimantan|ID|114.86|-3.41|131|W|,Martinez|CA|US|-122.13|38.02|38|N|,Martinez|GA|US|-82.08|33.52|35|N|,Martinez de la Torre|MX30|MX|-97.06|20.07|60|N|,Marvdasht|fars|IR|52.8|29.87|148|W|,Mary|mary|TM|61.83|37.59|167|W|,Maryland Heights|MO|US|-90.43|38.71|27|N|,Marysville|WA|US|-122.18|48.05|66|N|,Maryvale|AZ|US|-112.18|33.5|208|NW|,Maryville|TN|US|-83.97|35.76|28|N|,Masai|johor|MY|103.88|1.49|141|W|,Masan|gwangju|KR|126.83|35.13|434|W|,Masaya|masaya department|NI|-86.1|11.97|130|W|,Mascouche|QC|CA|-73.6|45.75|34|N|,Maseru|maseru district|LS|27.48|-29.32|359|W|,Mashhad|razavi khorasan|IR|59.61|36.3|2307|W|maschhad;mashad;masyhad;meszhed;mexed;meshed;alexandria;sanaabad,Masina|kinshasa|CD|15.39|-4.38|485|W|,Mason|OH|US|-84.31|39.36|32|N|,Mason City|IA|US|-93.2|43.15|27|N|,Maspeth|NY|US|-73.91|40.72|48|N|,Massillon|OH|US|-81.52|40.8|32|N|,Matadi|bas congo|CD|13.46|-5.84|425|W|,Matamoros|MX07|MX|-103.23|25.53|52|N|,Matanzas|matanzas province|CU|-81.58|23.04|146|W|,Mataram|west nusa tenggara|ID|116.12|-8.58|441|W|kota mataram,Matehuala|MX24|MX|-100.64|23.65|77|N|,Mathura|uttar pradesh|IN|77.67|27.5|330|W|matura,Matola|maputo province|MZ|32.46|-25.96|1198|W|,Matsubara|osaka|JP|135.55|34.57|130|W|,Matsudo|chiba|JP|139.9|35.78|498|W|,Matsue|shimane|JP|133.05|35.48|203|W|macue,Matsumoto|nagano|JP|137.97|36.23|241|W|macumoto,Matsusaka|mie|JP|136.54|34.58|159|W|,Matsuyama|ehime|JP|132.77|33.84|511|W|macujama;matsuyama shi,Mattapan|MA|US|-71.09|42.27|36|N|,Matthews|NC|US|-80.72|35.12|30|N|,Matuga|kwale county|KE|39.57|-4.17|194|W|,Maturin|monagas|VE|-63.18|9.75|647|W|,Mau|uttar pradesh|IN|83.56|25.94|246|W|,Maua|sao paulo|BR|-46.46|-23.67|418|W|,Mauldin|SC|US|-82.31|34.78|25|N|,Mawlamyine|mon|MM|97.63|16.49|438|W|mawlamyaing;moulmein;mulmejn,Maykop|adygeya republic|RU|40.1|44.61|141|W|maikop;majkop,Maywood|CA|US|-118.19|33.99|27|N|,Mazar-e Sharif|balkh|AF|67.11|36.71|523|W|masar e scharif;mazar e charif;mazar i szarif;mazari sharif;mazar e sarif;mezirek i serif,Mazatlan|MX25|MX|-106.42|23.22|381|NW|ciudad mazatlan,Mbandaka|equateur|CD|18.26|0.05|455|W|,Mbanza Kongo|zaire|AO|14.24|-6.27|148|W|mbanza congo,Mbanza-Ngungu|bas congo|CD|14.86|-5.26|142|W|,Mbarara|western region|UG|30.65|-0.6|221|W|,Mbeya|mbeya|TZ|33.45|-8.9|541|W|,Mbour|thies|SN|-16.96|14.42|284|W|,Mbuji-Mayi|east kasai|CD|23.59|-6.14|2101|W|,McAllen|TX|US|-98.23|26.2|140|NW|,McCully - Moiliili|HI|US|-157.83|21.29|28|N|,McHenry|IL|US|-88.27|42.33|26|N|,McKinney|TX|US|-96.62|33.2|162|NW|,McLean|VA|US|-77.18|38.93|48|N|,McMinnville|OR|US|-123.2|45.21|33|N|,Mdantsane|eastern cape|ZA|27.78|-32.93|205|W|,Meadow Woods|FL|US|-81.37|28.39|25|N|,Meads|KY|US|-82.71|38.41|288|NW|,Mechanicsville|VA|US|-77.37|37.61|36|N|,Medan|north sumatra|ID|98.67|3.58|2486|W|kota medan,Medea|medea|DZ|2.75|36.26|145|W|al madijja,Medellin|antioquia|CO|-75.57|6.25|1999|W|medelim,Medford|OR|US|-122.88|42.33|79|N|,Medford|MA|US|-71.11|42.42|57|N|,Medicine Hat|AB|CA|-110.68|50.04|63|N|,Medina|OH|US|-81.86|41.14|26|N|,Medinipur|west bengal|IN|87.32|22.42|153|W|,Meerut|uttar pradesh|IN|77.71|28.98|1223|W|merath,Meguro|tokyo|JP|139.7|35.63|288|W|meguro city,Mehlville|MO|US|-90.32|38.51|28|N|,Meiktila|mandalay region|MM|95.86|20.88|177|W|miktila,Meishan|sichuan|CN|103.84|30.04|1107|W|mej san;mi son,Meizhou|guangdong|CN|116.12|24.29|992|W|mai chau;mej cou,Mejicanos|san salvador department|SV|-89.19|13.72|160|W|,Mek'ele|tigray|ET|39.48|13.5|457|W|macalle;mekelie,Meknes|fes meknes|MA|-5.55|33.89|568|W|,Melbourne|victoria|AU|144.96|-37.81|5435|W|greater melbourne;melbourne city,Melbourne|FL|US|-80.61|28.08|84|N|,Melchor Ocampo|MX15|MX|-99.14|19.7|38|N|,Melitopol|zaporizhzhia|UA|35.38|46.85|148|W|kyzyl yar;melitopoli;novoalexandrovka,Melrose|MA|US|-71.07|42.46|27|N|,Melrose Park|IL|US|-87.86|41.9|25|N|,Memphis|TN|US|-90.05|35.15|633|NW|menfis,Mengzi|yunnan|CN|103.38|23.37|595|W|,Menifee|CA|US|-117.15|33.73|87|N|,Menlo Park|CA|US|-122.18|37.45|33|N|,Menomonee Falls|WI|US|-88.12|43.18|36|N|,Menongue|cubango|AO|17.69|-14.66|251|W|,Mentor|OH|US|-81.34|41.67|46|N|,Mentougou|beijing|CN|116.09|39.94|197|W|,Merced|CA|US|-120.48|37.3|82|N|,Mercer Island|WA|US|-122.22|47.57|25|N|,Mercerville-Hamilton Square|NJ|US|-74.67|40.23|26|N|hamilton square,Mercier-Hochelaga-Maisonneuve|QC|CA|-73.55|45.57|142|NW|,Merida|MX31|MX|-89.62|20.97|1201|NW|,Merida|merida|VE|-71.17|8.58|300|W|,Meriden|CT|US|-72.81|41.54|59|N|,Meridian|ID|US|-116.39|43.61|90|N|,Meridian|MS|US|-88.7|32.36|39|N|,Merkezefendi|denizli|TR|29.04|37.81|280|W|,Merlo|buenos aires|AR|-58.73|-34.67|268|W|,Merrillville|IN|US|-87.33|41.48|35|N|,Merrimack|NH|US|-71.49|42.87|26|N|east merrimack,Merritt Island|FL|US|-80.69|28.36|34|N|,Mersin|mersin|TR|34.64|36.81|537|W|myrte;icel,Mesa|AZ|US|-111.82|33.42|471|NW|,Mesquite|TX|US|-96.6|32.77|144|NW|,Messina|sicily|IT|15.55|38.19|219|W|mesina;messine;mesyna,Mestre|veneto|IT|12.25|45.49|147|W|mestre bei venedig,Metairie|LA|US|-90.15|29.98|138|NW|,Metairie Terrace|LA|US|-90.16|29.98|142|NW|,Metepec|MX15|MX|-99.6|19.26|28|N|municipio metepec;municipio de metepec,Methuen|MA|US|-71.19|42.73|52|N|,Metro|lampung|ID|105.31|-5.11|182|W|kota metro,Metrotown|BC|CA|-123|49.23|52|N|,Mexicali|MX02|MX|-115.45|32.63|1032|NW|,Mexico City|MX09|MX|-99.13|19.43|12294|NW|ciudad de mexico;mexico by;cidade do mexico;citta del messico;ciudad de mejico;meksyk;mexico;mexico d f;mexico stad;mexiko stadt;mexico distrito federal;valle de mexico,Meycauayan|central luzon|PH|120.96|14.74|228|W|kota meycauayan;meycauayan city,Miami|FL|US|-80.19|25.77|487|NW|,Miami Beach|FL|US|-80.13|25.79|92|N|,Miami Gardens|FL|US|-80.25|25.94|113|N|,Miami Lakes|FL|US|-80.31|25.91|30|N|,Mian Channun|punjab|PK|72.36|30.44|140|W|mian channu,Miandoab|west azerbaijan|IR|46.11|36.97|134|W|,Mianyang|sichuan|CN|104.68|31.47|1550|W|mien jang;mien duong,Mianzhu Deyang Sichuan|sichuan|CN|104.22|31.34|510|W|,Miass|chelyabinsk|RU|60.11|55.05|167|W|,Michigan City|IN|US|-86.9|41.71|31|N|,Mid-City|CA|US|-118.36|34.04|83|N|,Middelburg|mpumalanga|ZA|29.46|-25.78|196|W|,Middle River|MD|US|-76.44|39.33|25|N|,Middle Village|NY|US|-73.88|40.72|29|N|,Middlesbrough|england|GB|-1.23|54.58|142|W|,Middletown|NJ|US|-74.12|40.39|65|N|middletown township;municipio de middletown,Middletown|OH|US|-84.4|39.52|48|N|,Middletown|CT|US|-72.65|41.56|46|N|,Middletown|NY|US|-74.42|41.45|27|N|,Midland|TX|US|-102.08|32|132|NW|,Midland|MI|US|-84.25|43.62|42|N|,Midvale|UT|US|-111.9|40.61|32|N|,Midwest City|OK|US|-97.4|35.45|57|N|,Miguel Aleman (La Doce)|MX26|MX|-111.48|28.84|30|N|,Miguel Hidalgo|MX09|MX|-99.2|19.43|372|NW|delegacion miguel hidalgo,Milagro|guayas|EC|-79.59|-2.13|133|W|,Milan|lombardy|IT|9.19|45.46|1371|W|milano;mailand;mediolan;milaan;milao,Milford|CT|US|-73.06|41.22|52|N|,Milford|MA|US|-71.52|42.14|25|N|,Milford Mill|MD|US|-76.77|39.35|29|N|,Mililani Town|HI|US|-158.02|21.45|27|N|,Millcreek|UT|US|-111.88|40.69|62|N|,Milliken|ON|CA|-79.3|43.82|26|N|,Millville|NJ|US|-75.04|39.4|28|N|,Milpitas|CA|US|-121.91|37.43|77|N|,Milton|ON|CA|-79.88|43.52|132|NW|,Milton|GA|US|-84.3|34.13|37|N|,Milton|MA|US|-71.07|42.25|27|N|,Milton Keynes|england|GB|-0.76|52.04|256|W|,Milwaukee|WI|US|-87.91|43.04|563|NW|,Mimico|ON|CA|-79.51|43.62|33|N|,Minamirinkan|kanagawa|JP|139.44|35.5|224|W|,Minatitlan|MX30|MX|-94.56|18|112|N|,Minato|wakayama|JP|135.15|34.22|375|W|,Minato City|tokyo|JP|139.75|35.66|260|W|minato,Mingala Tangnyunt|yangon|MM|96.17|16.79|132|W|,Mingaladon|yangon|MM|96.1|16.92|136|W|,Mingora|khyber pakhtunkhwa|PK|72.36|34.78|361|W|mingaora,Minhang|shanghai|CN|121.37|31.11|2716|W|,Minna|niger state|NG|6.55|9.62|425|W|,Minneapolis|MN|US|-93.26|44.98|410|NW|mineapolis,Minnetonka|MN|US|-93.5|44.91|51|N|,Minnetonka Mills|MN|US|-93.44|44.94|50|N|,Minoh|osaka|JP|135.47|34.83|136|W|,Minot|ND|US|-101.3|48.23|49|N|,Minsk|minsk city|BY|27.57|53.9|1742|W|,Mint Hill|NC|US|-80.65|35.18|25|N|,Minya|minya|EG|30.76|28.09|283|W|,Mira Mesa|CA|US|-117.14|32.92|70|N|,Mirabel|QC|CA|-74.08|45.65|34|N|,Miraflores|lima region|PE|-77.03|-12.11|187|W|san borja,Miramar|FL|US|-80.23|25.99|137|NW|,Miramar|MX28|MX|-97.9|22.36|118|N|,Miri|sarawak|MY|113.99|4.4|300|W|marabu,Mirpur Khas|sindh|PK|69.01|25.53|267|W|,Mirpur Model Thana|dhaka division|BD|90.36|23.81|546|W|,Mirzapur|uttar pradesh|IN|82.57|25.14|220|W|,Misantla|MX30|MX|-96.85|19.93|26|N|,Misato Saitama|saitama|JP|139.88|35.84|142|W|,Mishawaka|IN|US|-86.16|41.66|48|N|,Miskolc|borsod abauj zemplen|HU|20.78|48.1|154|W|miszkolc,Misratah|misratah|LY|15.09|32.38|355|W|al misratah;misrata,Mission|TX|US|-98.33|26.22|83|N|,Mission|BC|CA|-122.3|49.13|41|N|,Mission Bend|TX|US|-95.66|29.69|36|N|,Mission District|CA|US|-122.42|37.76|47|N|,Mission Viejo|CA|US|-117.67|33.6|97|N|,Mississauga|ON|CA|-79.66|43.58|717|NW|,Missoula|MT|US|-113.99|46.87|71|N|,Missouri City|TX|US|-95.54|29.62|74|N|,Mit Ghamr|dakahlia|EG|31.26|30.72|153|W|,Mito|ibaraki|JP|140.45|36.35|270|W|,Mixco|guatemala|GT|-90.61|14.63|465|W|,Mixquiahuala de Juarez|MX13|MX|-99.21|20.23|25|N|,Miyakonojo|miyazaki|JP|131.07|31.73|161|W|,Miyazaki|miyazaki|JP|131.42|31.92|401|W|miyazaki shi;miyazakishi,Mlolongo|machakos county|KE|36.94|-1.4|136|W|,Mobile|AL|US|-88.04|30.69|183|NW|,Mocuba|zambezia province|MZ|36.99|-16.84|196|W|,Modena|emilia romagna|IT|10.93|44.65|184|W|modene,Modesto|CA|US|-121|37.64|211|NW|,Modinagar|uttar pradesh|IN|77.57|28.83|475|W|,Moenchengladbach|north rhine westphalia|DE|6.44|51.19|261|W|monchengladbach,Moga|punjab|IN|75.17|30.81|163|W|,Mogadishu|banaadir|SO|45.34|2.04|2587|W|mogadischu;mogadiscio;mogadiszu;mogadisu;mogadiso,Mogi das Cruzes|sao paulo|BR|-46.19|-23.52|325|W|,Mogi Guacu|sao paulo|BR|-46.95|-22.37|160|W|,Mohali|punjab|IN|76.72|30.68|166|W|,Mohammadpur|rajshahi division|BD|88.53|24.9|527|W|,Mohammedia|casablanca settat|MA|-7.38|33.69|227|W|al muhammadijja;muhammediye;fedala,Mojokerto|east java|ID|112.43|-7.47|141|W|kota mojokerto,Mokotow|mazovia|PL|21.03|52.19|217|W|,Mokpo|jeollanam do|KR|126.39|34.81|268|W|mogpo,Moline|IL|US|-90.52|41.51|42|N|,Mombasa|mombasa county|KE|39.66|-4.05|1208|W|mombassa;mombaca,Monclova|MX07|MX|-101.42|26.91|215|NW|,Moncton|NB|CA|-64.8|46.09|86|N|,Monroe|LA|US|-92.12|32.51|49|N|,Monroe|NC|US|-80.55|34.99|34|N|,Monroeville|PA|US|-79.79|40.42|28|N|,Monrovia|montserrado county|LR|-10.8|6.3|1542|W|monrowia,Monrovia|CA|US|-118|34.15|37|N|,Montclair|NJ|US|-74.21|40.83|39|N|,Montclair|CA|US|-117.69|34.08|38|N|,Montebello|CA|US|-118.11|34.01|63|N|,Montemorelos|MX19|MX|-99.83|25.19|67|N|,Monterey|CA|US|-121.89|36.6|28|N|monterrey,Monterey Park|CA|US|-118.12|34.06|61|N|,Monteria|cordoba|CO|-75.88|8.75|490|W|,Monterrey|MX19|MX|-100.32|25.68|1135|NW|monterrei;monterrey city,Montes Claros|minas gerais|BR|-43.86|-16.73|437|W|,Montevideo|montevideo department|UY|-56.19|-34.9|1270|W|montevideu,Montgomery|AL|US|-86.3|32.37|195|NW|,Montgomery Village|MD|US|-77.2|39.18|32|N|,Montpellier|occitanie|FR|3.88|43.61|248|W|,Montreal|QC|CA|-73.59|45.51|1762|NW|montreal city,Montreal-Nord|QC|CA|-73.63|45.6|86|N|,Monywa|sagaing region|MM|95.14|22.11|182|W|munywa,Moore|OK|US|-97.49|35.34|60|N|,Mooresville|NC|US|-80.81|35.58|36|N|,Moorhead|MN|US|-96.77|46.87|42|N|,Moorpark|CA|US|-118.88|34.29|36|N|,Moose Jaw|SK|CA|-105.53|50.4|33|N|,Mopti|mopti|ML|-4.18|14.48|186|W|,Moradabad|uttar pradesh|IN|78.78|28.84|721|W|,Moratuwa|western province|LK|79.88|6.77|168|W|,Morelia|MX16|MX|-101.18|19.7|743|NW|,Morena|madhya pradesh|IN|78|26.5|200|W|,Moreno|buenos aires|AR|-58.79|-34.63|148|W|,Moreno Valley|CA|US|-117.23|33.94|204|NW|,Morgan Hill|CA|US|-121.65|37.13|42|N|,Morgantown|WV|US|-79.96|39.63|30|N|,Moriguchi|osaka|JP|135.57|34.73|143|W|,Morioka|iwate|JP|141.15|39.7|290|W|,Morningside Heights|NY|US|-73.96|40.81|55|N|,Moro|sindh|PK|68|26.66|142|W|,Morogoro|morogoro|TZ|37.66|-6.82|471|W|,Moroleon|MX11|MX|-101.19|20.13|43|N|,Morris Heights|NY|US|-73.92|40.85|40|N|,Morristown|TN|US|-83.29|36.21|29|N|,Morvi|gujarat|IN|70.84|22.82|210|W|,Moscow|moscow|RU|37.62|55.75|10381|W|moscou;moscova;moscovo;moscu;matxcova;mosca;moskau;moskou;moskova;moskva;moskwa;mat xco va,Moscow|ID|US|-117|46.73|25|N|,Moshi|kilimanjaro|TZ|37.33|-3.35|221|W|,Mossamedes|namibe|AO|12.15|-15.2|255|W|mocamedes;namibe,Mossoro|rio grande do norte|BR|-37.34|-5.19|264|W|,Mostaganem|mostaganem|DZ|0.09|35.93|162|W|mustaghanam,Mostoles|madrid|ES|-3.86|40.32|207|W|,Mosul|nineveh|IQ|43.12|36.34|1683|W|mosoel;mossoul;mossul;musul,Motijheel|dhaka division|BD|90.42|23.73|202|W|,Mott Haven|NY|US|-73.92|40.81|51|N|,Moundou|logone occidental|TD|16.08|8.57|196|W|,Mount Juliet|TN|US|-86.52|36.2|31|N|,Mount Laurel|NJ|US|-74.89|39.93|41|N|,Mount Lebanon|PA|US|-80.05|40.36|32|N|,Mount Olive-Silverstone-Jamestown|ON|CA|-79.59|43.75|32|N|,Mount Pleasant|SC|US|-79.86|32.79|81|N|mt pleasant,Mount Pleasant|DC|US|-77.04|38.93|35|N|ingleside;mount pleasant village;rosemont park;walbridge,Mount Pleasant|BC|CA|-123.1|49.27|33|N|,Mount Pleasant|WI|US|-87.86|42.7|26|N|,Mount Pleasant|MI|US|-84.77|43.6|26|N|mt pleasant,Mount Pleasant West|ON|CA|-79.39|43.7|29|N|,Mount Prospect|IL|US|-87.94|42.07|54|N|,Mount Vernon|NY|US|-73.84|40.91|68|N|,Mount Vernon|WA|US|-122.33|48.42|34|N|,Mountain View|CA|US|-122.08|37.39|80|N|,Moyotzingo|MX21|MX|-98.4|19.25|27|N|,Mpanda|katavi|TZ|31.07|-6.34|204|W|,Mpumalanga|kwazulu natal|ZA|30.64|-29.81|140|W|epumalanga;hammarsdale,Mt Pleasant|BC|CA|-123.1|49.26|32|N|,Mthatha|eastern cape|ZA|28.78|-31.59|164|W|umtata,Mtwara|mtwara|TZ|40.18|-10.27|140|W|,Mu-se|shan state|MM|97.9|24|165|W|,Muar|johor|MY|102.57|2.04|314|W|muar town,Mubi|adamawa|NG|13.27|10.27|225|W|,Mudanjiang|heilongjiang|CN|129.63|44.55|665|W|mu tan tiang,Mueang Nonthaburi|nonthaburi|TH|100.51|13.86|254|W|nonthaburi,Muelheim|north rhine westphalia|DE|6.88|51.43|173|W|mulheim;muelheim an der ruhr;mulheim an der ruhr,Muenster|north rhine westphalia|DE|7.63|51.96|308|W|munster,Mufulira|copperbelt|ZM|28.24|-12.55|169|W|,Mukalla|muhafazat hadramaout|YE|49.12|14.54|594|W|al mukalla;mukala,Mukim Pulai|johor|MY|103.67|1.53|505|W|,Mukono|central region|UG|32.76|0.35|191|W|,Mulenvos|luanda|AO|13.33|-8.87|882|W|,Multan|punjab|PK|71.48|30.2|2169|W|,Mulugu|telangana|IN|79.94|18.19|297|W|,Mumbai|maharashtra|IN|72.88|19.07|12691|W|mumbaj;mumbay;bombay;bombaim;bombaj,Muncie|IN|US|-85.39|40.19|70|N|,Mundelein|IL|US|-88|42.26|31|N|,Munger|bihar|IN|86.47|25.37|213|W|,Munich|bavaria|DE|11.58|48.14|1505|W|munchen;mnichov;monachium;monaco di baviera;muenchen;munique;munih,Muntinlupa|calabarzon|PH|121.05|14.39|552|W|city of muntinlupa,Muratpasa|antalya|TR|30.76|36.89|450|W|,Murcia|murcia|ES|-1.13|37.99|471|W|murcie;murcja,Murfreesboro|TN|US|-86.39|35.85|165|NW|,Muricay|zamboanga peninsula|PH|123.48|7.83|132|W|,Muridke|punjab|PK|74.26|31.8|254|W|muridike,Murmansk|murmansk|RU|33.1|68.97|295|W|moermansk;mourmansk;muurmanski;romanov;romanov on murman;semenova,Murray|UT|US|-111.89|40.67|49|N|,Murrieta|CA|US|-117.21|33.55|109|N|,Murwara|madhya pradesh|IN|80.39|23.84|221|W|,Musaffah|abu dhabi|AE|54.48|24.36|243|W|musaffah city,Musanze|northern province|RW|29.63|-1.5|153|W|ruhengeri,Musashino|tokyo|JP|139.56|35.71|150|W|,Muscat|muscat|OM|58.41|23.58|797|W|mascate;maskat;masqat;muskat,Mushin|lagos|NG|3.35|6.53|199|W|,Muskegon|MI|US|-86.25|43.23|38|N|,Muskogee|OK|US|-95.37|35.75|38|N|,Musoma|mara|TZ|33.8|-1.5|164|W|,Mutare|manicaland|ZW|32.67|-18.97|224|W|,Muzaffarabad|azad kashmir|PK|73.47|34.37|725|W|,Muzaffargarh|punjab|PK|71.19|30.07|235|W|,Muzaffarnagar|uttar pradesh|IN|77.7|29.47|349|W|,Muzaffarpur|bihar|IN|85.39|26.12|354|W|,Mwala|machakos county|KE|37.45|-1.35|181|W|,Mwanza|mwanza|TZ|32.9|-2.52|1104|W|,Mwene|lualaba|CD|22.87|-9.82|295|W|,Mwene-Ditu|lomami|CD|23.45|-7.01|189|W|,My Tho|dong thap|VN|106.36|10.36|270|W|,Myeik|tanintharyi region|MM|98.6|12.44|173|W|mergui,Myingyan|mandalay region|MM|95.39|21.46|141|W|,Mykolayiv|mykolaiv|UA|31.99|46.98|470|W|mikolajow;mykolaiv;nicolopoli;vernoleninsk,Mymensingh|mymensingh division|BD|90.41|24.76|225|W|,Myrtle Beach|SC|US|-78.89|33.69|31|N|,Mysuru|karnataka|IN|76.64|12.3|920|W|maisur;mysore,Mytishchi|moscow oblast|RU|37.73|55.91|160|W|mitischi;mytichtchi;mytischtschi;mytisjtji;mytisjtsji;mytiszczi;mytistsi;mytisci;mitisci;miytisci,Mzuzu|northern region|MW|34.02|-11.47|249|W|,N'dalatando|cuanza norte|AO|14.91|-9.3|161|W|ndalatando,N'Djamena|n djamena|TD|15.04|12.11|1359|W|yamena;indschamina;ndjamena;ndzamena,Naberezhnyye Chelny|tatarstan republic|RU|52.42|55.74|509|W|naberezhnye chelny;naberejnye chelny;nabereschnyje tschelny;naberezjnye tsjelny;nabereznyje tselny;nabereznyje celny;brezhnev,Nablus|west bank|PS|35.25|32.22|130|W|naplouse;shechem;sichem;siquem;sychem,Nacala|nampula|MZ|40.69|-14.56|239|W|cidade de nacala;nacala porto,Nacogdoches|TX|US|-94.66|31.6|33|N|,Nada|hainan|CN|109.58|19.52|256|W|danzhou,Nadiad|gujarat|IN|72.86|22.69|225|W|,Nador|oriental|MA|-2.93|35.17|176|W|,Naga|bicol region|PH|123.18|13.62|174|W|kota naga,Naga|central visayas|PH|123.76|10.21|138|W|city of naga;kota naga;naga city,Nagano|nagano|JP|138.18|36.65|372|W|,Nagaoka|niigata|JP|138.85|37.45|266|W|,Nagar Naluakot|dhaka division|BD|90.77|24.16|273|W|nogor noluakot,Nagareyama|chiba|JP|139.9|35.86|200|W|,Nagarpur|dhaka division|BD|89.88|24.06|238|W|,Nagasaki|nagasaki|JP|129.88|32.75|409|W|nagasaki shi;nagasakishi;nangasaque,Nagercoil|tamil nadu|IN|77.43|8.18|224|W|nagarkoil;nagarkovil,Nagoya|aichi|JP|136.91|35.18|2332|W|nagoia;nagoja;nagoya city;nagoya shi,Nagpur|maharashtra|IN|79.08|21.15|2405|W|,Naha|okinawa|JP|127.68|26.21|317|W|,Naihati|west bengal|IN|88.42|22.89|253|W|,Nairobi|nairobi county|KE|36.82|-1.28|4397|W|,Naivasha|nakuru county|KE|36.43|-0.71|198|W|,Najaf|najaf|IQ|44.35|32.03|482|W|an nadzaf;an najaf;nadjaf;nadschaf;nadzaf;nayaf;necef,Najafabad|isfahan|IR|51.37|32.63|235|W|,Najafgarh|delhi|IN|76.98|28.61|1365|W|,Najran|najran region|SA|44.13|17.49|505|W|necran,Nakano|tokyo|JP|139.67|35.7|344|W|nakano city,Nakhodka|primorye|RU|132.92|42.84|146|W|nachodka;nahodka;najodka;langouwai,Nakuru|nakuru county|KE|36.07|-0.31|570|W|,Nalchik|kabardino balkariya republic|RU|43.62|43.5|239|W|nal chik;naltschik;naltsik;nalcik,Nalgonda|telangana|IN|79.27|17.05|154|W|,Nam GJinh|ninh binh|VN|106.18|20.43|448|W|nam dinh,Namangan|namangan|UZ|71.67|41|713|W|namanga;nemengan,Namp'o|nampo|KP|125.41|38.74|455|W|nampo,Nampa|ID|US|-116.56|43.54|89|N|,Nampula|nampula|MZ|39.27|-15.12|770|W|,Nanaimo|BC|CA|-123.94|49.17|90|N|,Nanchang|jiangxi|CN|115.85|28.68|2357|W|nam xuong;nan cchang,Nanchital de Lazaro Cardenas del Rio|MX30|MX|-94.41|18.07|25|N|villa nanchital,Nanchong|sichuan|CN|106.08|30.8|1858|W|nam sung;nan cchung,Nanchuan|chongqing|CN|107.1|29.15|204|W|,Nanded|maharashtra|IN|77.31|19.16|550|W|,Nandyal|andhra pradesh|IN|78.48|15.48|211|W|,Nangloi Jat|delhi|IN|77.07|28.68|205|W|,Nanjin|chongqing|CN|106.27|29.98|143|W|,Nanjing|jiangsu|CN|118.78|32.06|9314|W|nankin;nam kinh;nanchino;nanquim;nankijn,Nankana Sahib|punjab|PK|73.71|31.45|130|W|,Nanning|guangxi|CN|108.32|22.82|3839|W|nam ninh;nan ning,Nanpiao|liaoning|CN|120.75|41.1|157|W|,Nanping|fujian|CN|118.17|26.64|467|W|nam binh;nan pching,Nanqiao|shanghai|CN|121.45|30.92|361|W|,Nansana|central region|UG|32.53|0.36|532|W|,Nantes|pays de la loire|FR|-1.55|47.22|325|W|,Nantong|jiangsu|CN|120.87|32.03|2273|W|nam thong;nan tchung,Nantou|guangdong|CN|113.29|22.72|130|W|,Nanyang|henan|CN|112.55|33.01|1811|W|nam duong;nan jang,Napa|CA|US|-122.29|38.3|80|N|,Naperville|IL|US|-88.15|41.79|147|NW|,Naples|campania|IT|14.27|40.85|909|W|neapel;napels;napoli;neapol;neapole;napoles,Nara-shi|nara|JP|135.8|34.69|367|W|nara,Narashino|chiba|JP|140.04|35.68|176|W|,Narayanganj|dhaka division|BD|90.5|23.61|223|W|,Narela|delhi|IN|77.09|28.85|800|W|,Narita|chiba|JP|140.32|35.78|132|W|,Narowal|punjab|PK|74.87|32.1|130|W|,Narsingdi|dhaka division|BD|90.72|23.92|281|W|,Nashik|maharashtra|IN|73.79|20|1486|W|,Nashua|NH|US|-71.47|42.77|87|N|,Nashville|TN|US|-86.78|36.17|689|NW|,Nasim Shahr|tehran|IR|51.16|35.57|200|W|,Nasimshahr|tehran|IR|51.16|35.57|200|W|,Nasiriyah|dhi qar|IQ|46.26|31.06|558|W|an nasiriya;nasirijja;nasiriya,Nassau|new providence|BS|-77.34|25.06|227|W|nasau,Natal|rio grande do norte|BR|-35.21|-5.79|896|W|,Natick|MA|US|-71.35|42.28|32|N|,National City|CA|US|-117.1|32.68|61|N|,Natore|rajshahi division|BD|88.99|24.41|369|W|,Naucalpan de Juarez|MX15|MX|-99.24|19.48|834|NW|naucalpan,Naugatuck|CT|US|-73.05|41.49|31|N|,Navarre|FL|US|-86.86|30.4|31|N|,Navegantes|benguela|AO|13.39|-12.59|240|W|,Navi Mumbai|maharashtra|IN|73.02|19.04|2600|W|nova bombaim;new bombay,Navoiy|navoiy region|UZ|65.38|40.08|144|W|navoi;nawoi;nevai,Navojoa|MX26|MX|-109.44|27.07|113|N|,Navolato|MX25|MX|-107.7|24.77|29|N|,Navotas|national capital region|PH|120.95|14.67|249|W|,Navsari|gujarat|IN|72.92|20.94|171|W|,Nawabganj|rajshahi division|BD|88.27|24.59|142|W|,Nawabshah|sindh|PK|68.4|26.24|363|W|,Nay Pyi Taw|nay pyi taw|MM|96.13|19.75|925|W|naipidau;naypyidaw;naypyitaw,Nazarabad|alborz province|IR|50.61|35.95|213|W|,Nazran|ingushetiya republic|RU|44.77|43.23|164|W|nasran,Nazret|oromiya|ET|39.27|8.55|456|W|,Ndola|copperbelt|ZM|28.64|-12.96|627|W|,Near North Side|IL|US|-87.63|41.9|85|N|,Needham|MA|US|-71.23|42.28|28|N|,Neenah|WI|US|-88.46|44.19|25|N|,Negombo|western province|LK|79.84|7.21|137|W|negumbo,Neihu|taiwan|TW|121.59|25.08|274|W|distretto di neihu;district de neihu;distrik neihu;neihu district,Neijiang|sichuan|CN|105.06|29.58|1251|W|nej tiang,Neiva|huila department|CO|-75.28|2.93|357|W|,Nek'emte|oromiya|ET|36.55|9.08|156|W|,Nellore|andhra pradesh|IN|79.99|14.45|547|W|nellur,Nepalgunj|lumbini province|NP|81.62|28.05|166|W|,Nepean|ON|CA|-75.72|45.34|180|NW|,Netanya|central district|IL|34.86|32.33|228|W|netania;netanja,Neue Neustadt|saxony anhalt|DE|11.63|52.15|226|W|,Neufchatel-Est-Lebourgneuf|QC|CA|-71.34|46.85|37|N|,Neukoelln|state of berlin|DE|13.43|52.48|164|W|neukolln;berlin neukolln,Neuquen|neuquen|AR|-68.06|-38.95|231|W|ciudad de neuquen,Neuss|north rhine westphalia|DE|6.69|51.2|152|W|,Nevinnomyssk|stavropol kray|RU|41.94|44.63|134|W|nevinnomissk;newinnomyssk;niewinnomyssk,New Albany|IN|US|-85.82|38.29|36|N|,New Bedford|MA|US|-70.93|41.64|101|N|,New Berlin|WI|US|-88.11|42.98|39|N|,New Bern|NC|US|-77.04|35.11|30|N|,New Braunfels|TX|US|-98.12|29.7|70|N|,New Britain|CT|US|-72.78|41.66|72|N|,New Brunswick|NJ|US|-74.45|40.49|57|N|nuevo brunswick,New Cairo|cairo|EG|31.47|30.03|313|W|,New City|IL|US|-87.66|41.81|40|N|,New City|NY|US|-73.99|41.15|33|N|,New Delhi|delhi|IN|77.21|28.62|317|W|neu delhi;nova deli;nove dilli;nueva delhi;nuova delhi;yeni delhi,New Haven|CT|US|-72.93|41.31|130|NW|,New Iberia|LA|US|-91.82|30|30|N|la nouvelle iberie;nueva iberia,New Kingston|saint andrew parish|JM|-76.78|18.01|583|W|,New Lenox|IL|US|-87.97|41.51|25|N|,New London|CT|US|-72.1|41.36|27|N|,New Orleans|LA|US|-90.08|29.95|362|NW|nova orleaes;nowy orlean;nueva orleans;new orleans louisiana;la nouvelle orleans,New Rochelle|NY|US|-73.78|40.91|79|N|nouvelle rochelle;nueva rochelle,New South Memphis|TN|US|-90.06|35.09|641|NW|,New Taipei City|taipei|TW|121.46|25.06|4004|W|new taipei;neu taipeh;nieuw taipei;nouveau taipei;nova taipe;nova tchaj pej;nowe tajpej;nueva taipei;nuova taipei;xinbei city;yeni taipei,New Territories||HK|114.11|22.42|3984|W|new territory hong kong,New Westminster|BC|CA|-122.91|49.21|78|N|new westminister,New York City|NY|US|-74.01|40.71|8804|NW|new york;nueva york;kota new york;new york kenti;nova iorque;nowy jork;nuova york,Newark|NJ|US|-74.17|40.74|281|NW|,Newark|OH|US|-82.4|40.06|47|N|,Newark|CA|US|-122.04|37.53|45|N|,Newark|DE|US|-75.75|39.68|33|N|,Newburgh|NY|US|-74.01|41.5|28|N|,Newcastle|new south wales|AU|151.78|-32.93|508|W|,Newcastle|kwazulu natal|ZA|29.93|-27.76|404|W|,Newcastle upon Tyne|england|GB|-1.61|54.97|300|W|newcastle;newcastle tren song tyne;newcastle on tyne,Newington|CT|US|-72.72|41.7|30|N|,Newmarket|ON|CA|-79.47|44.05|91|N|,Newnan|GA|US|-84.8|33.38|37|N|,Newport|wales|GB|-3|51.59|161|W|,Newport Beach|CA|US|-117.93|33.62|87|N|,Newport News|VA|US|-76.43|36.98|186|NW|,Newton|BC|CA|-122.85|49.13|159|NW|surrey newton,Newton|MA|US|-71.21|42.34|88|N|,Neyagawa|osaka|JP|135.63|34.77|238|W|,Neyshabur|razavi khorasan|IR|58.8|36.21|220|W|nichapur;nischapur;nishapur,Neyveli|tamil nadu|IN|79.5|11.61|179|W|,Ngaoundere|adamaoua|CM|13.58|7.33|238|W|ngaundere,Nghi Son|thanh hoa province|VN|105.82|19.33|302|W|,Nha Trang|khanh hoa|VN|109.19|12.25|579|W|,NIA Valencia|northern mindanao|PH|125.09|7.91|223|W|kota valencia;valencia city,Niagara|ON|CA|-79.41|43.64|31|N|,Niagara Falls|ON|CA|-79.07|43.1|99|N|cataratas del niagara;chutes niagara,Niagara Falls|NY|US|-79.06|43.09|48|N|,Niamey|niamey|NE|2.11|13.51|1323|W|,Nianbo|qinghai|CN|102.42|36.48|260|W|haidong,Nice|provence alpes cote d azur|FR|7.27|43.7|342|W|niza;nicea;nisa;nizza,Nicholasville|KY|US|-84.57|37.88|29|N|,Nicolas Romero|MX15|MX|-99.31|19.64|281|NW|ciudad nicolas romero,Nicosia|nicosia|CY|33.35|35.17|200|W|lefkosa;nikosia;lefkosia;nicosie;nikozja;nikosie,Nigel|gauteng|ZA|28.48|-26.43|140|W|,Niigata|niigata|JP|139.04|37.92|797|W|,Niiza|saitama|JP|139.56|35.82|166|W|,Nijmegen|gelderland|NL|5.85|51.84|177|W|nimwegen;nimega;nimegue,Niles|IL|US|-87.8|42.02|29|N|,Nilopolis|rio de janeiro|BR|-43.41|-22.81|155|W|,Niluefer|bursa province|TR|28.92|40.21|536|W|nilufer,Nimes|occitanie|FR|4.36|43.84|148|W|,Ning'er|yunnan|CN|101.04|23.04|162|W|,Ningbo|zhejiang|CN|121.55|29.88|3731|W|ninh ba,Ningde|fujian|CN|119.52|26.66|429|W|ningteh,Ninh Hoa|khanh hoa|VN|109.12|12.49|230|W|,Nis|central serbia|RS|21.9|43.32|250|W|nisz,Nishi-Tokyo-shi|tokyo|JP|139.54|35.73|207|W|,Nishinomiya|hyogo|JP|135.33|34.72|485|W|,Nishio|aichi|JP|137.05|34.87|169|W|,Niteroi|rio de janeiro|BR|-43.1|-22.88|515|W|,Nizamabad|telangana|IN|78.1|18.67|311|W|,Nizhnekamsk|tatarstan republic|RU|51.82|55.64|234|W|nijnekamsk;nischnekamsk;nizjnekamsk;nizniekamsk;niznekamsk;tubenkama;tuban kama,Nizhnevartovsk|khanty mansia|RU|76.55|60.93|244|W|nijnevartovsk;nischnewartowsk;nizjnevartovsk;nizniewartowsk;niznevartovsk,Nizhniy Novgorod|nizhny novgorod oblast|RU|44|56.33|1259|W|nijni novgorod;nischni nowgorod;nizhny novgorod;nizhni novgorod;nizjnij novgorod;nizni novgorod;gorkij,Nizhny Tagil|sverdlovsk oblast|RU|59.97|57.92|381|W|nizjnij tagil,Njeru|central region|UG|33.18|0.44|178|W|,Nkongsamba|littoral|CM|9.94|4.95|162|W|,Nnewi|anambra|NG|6.92|6.02|193|W|,Noblesville|IN|US|-86.01|40.05|59|N|,Noda|chiba|JP|139.87|35.95|154|W|noda shi,Nogales|MX26|MX|-110.94|31.31|264|NW|heroica nogales;los nogales,Noida|uttar pradesh|IN|77.33|28.58|293|W|,Nong Chok|bangkok|TH|100.86|13.86|157|W|,Nong Khaem|bangkok|TH|100.35|13.71|150|W|,Nor Nork|yerevan|AM|44.57|40.2|137|W|,Norco|CA|US|-117.55|33.93|26|N|,Norfolk|VA|US|-76.29|36.85|238|NW|,Norfolk County|ON|CA|-80.38|42.83|60|N|,Norilsk|krasnoyarsk krai|RU|88.2|69.35|140|W|noril sk;norylsk,Normal|IL|US|-88.99|40.51|54|N|,Norman|OK|US|-97.44|35.22|128|N|,Norristown|PA|US|-75.34|40.12|34|N|,North Andover|MA|US|-71.14|42.7|28|N|,North Bay|ON|CA|-79.47|46.32|50|N|,North Bel Air|MD|US|-76.35|39.54|33|N|,North Bergen|NJ|US|-74.01|40.8|63|N|,North Bethesda|MD|US|-77.12|39.04|43|N|,North Brunswick|NJ|US|-74.48|40.45|43|N|,North Center|IL|US|-87.68|41.95|34|N|,North Charleston|SC|US|-79.97|32.85|108|N|,North Chicago|IL|US|-87.84|42.33|29|N|,North Chicopee|MA|US|-72.6|42.18|55|N|,North Cowichan|BC|CA|-123.69|48.84|29|N|,North Creek|WA|US|-122.18|47.82|26|N|,North Delta|BC|CA|-122.92|49.17|60|N|nord delta,North Fort Myers|FL|US|-81.88|26.67|39|N|n ft myers,North Highlands|CA|US|-121.37|38.69|42|N|,North Hills|CA|US|-118.48|34.24|56|N|,North Hollywood|CA|US|-118.38|34.17|64|N|lankershim;toluca,North Kingstown|RI|US|-71.47|41.55|28|N|n kingstown,North La Crosse|WI|US|-91.25|43.85|50|N|,North Las Vegas|NV|US|-115.12|36.2|234|NW|,North Lauderdale|FL|US|-80.23|26.22|43|N|n lauderdale,North Lawndale|IL|US|-87.72|41.86|35|N|,North Little Rock|AR|US|-92.27|34.77|66|N|,North Miami|FL|US|-80.19|25.89|62|N|,North Miami Beach|FL|US|-80.16|25.93|43|N|,North Olmsted|OH|US|-81.92|41.42|32|N|,North Peoria|IL|US|-89.58|40.72|113|N|,North Port|FL|US|-82.24|27.04|62|N|,North Providence|RI|US|-71.47|41.85|33|N|,North Richland Hills|TX|US|-97.23|32.83|69|N|,North Ridgeville|OH|US|-82.02|41.39|32|N|,North Royalton|OH|US|-81.72|41.31|30|N|n royalton,North Shore|auckland|NZ|174.75|-36.8|258|W|,North Stamford|CT|US|-73.54|41.14|121|N|,North Tonawanda|NY|US|-78.86|43.04|30|N|,North Vancouver|BC|CA|-123.07|49.32|88|N|vancouver utara,Northampton|england|GB|-0.88|52.25|245|W|,Northampton|MA|US|-72.64|42.33|28|N|,Northbrook|IL|US|-87.83|42.13|33|N|,Northglenn|CO|US|-104.99|39.89|39|N|,Northridge|CA|US|-118.54|34.23|68|N|,Norwalk|CA|US|-118.08|33.9|107|N|,Norwalk|CT|US|-73.41|41.12|88|N|,Norwich|england|GB|1.3|52.63|143|W|,Norwich|CT|US|-72.08|41.52|39|N|,Norwood|MA|US|-71.2|42.19|28|N|,Norzagaray|central luzon|PH|121.05|14.91|140|W|,Nossa Senhora do Socorro|sergipe|BR|-37.13|-10.86|204|W|,Notre-Dame-de-Grace|QC|CA|-73.61|45.48|68|N|,Nottingham|england|GB|-1.15|52.95|323|W|,Nou Barris|catalonia|ES|2.18|41.44|166|W|distrito nou barris;distrito de nou barris,Nouadhibou|dakhlet nouadhibou|MR|-17.04|20.94|146|W|nawazibu;nouadibou;nuadibu;port etienne,Nouakchott||MR|-15.98|18.09|1184|W|nawakszut;nuakchot;nuaksot;nuaksott,Nova Friburgo|rio de janeiro|BR|-42.53|-22.28|189|W|nueva friburgo,Nova Iguacu|rio de janeiro|BR|-43.45|-22.76|843|W|,Nova Vida|luanda|AO|13.22|-8.91|464|W|,Novato|CA|US|-122.57|38.11|55|N|,Novi|MI|US|-83.48|42.48|58|N|,Novi Sad|vojvodina|RS|19.84|45.25|215|W|nowy sad;neusatz,Novo Hamburgo|rio grande do sul|BR|-51.13|-29.68|253|W|,Novocherkassk|rostov|RU|40.09|47.42|166|W|novotcherkassk;novotjerkassk;novotsjerkassk;novotserkassk;novocerkassk;nowoczerkask;nowotscherkassk,Novokuznetsk|kuzbass|RU|87.14|53.76|539|W|novokoeznetsk;novokouznetsk;novokusnetsk;novokuzneck;novokuznetk;nowokusnezk;nowokuznieck,Novomoskovsk|tula oblast|RU|38.29|54.01|130|W|nowomoskowsk,Novorossiysk|krasnodar krai|RU|37.76|44.73|241|W|novorossijsk;novorossiejsk;noworossijsk;noworosyjsk,Novosibirsk|novosibirsk oblast|RU|82.93|55.02|1612|W|novossibirsk;nowosibirsk;nowosybirsk;novo nikolaevsk;novonikolayevsk,Novozavodskyi|chernihiv oblast|UA|31.26|51.49|179|W|novozavodskyi raion;novozavodskyi rayon,Novyye Kuz'minki|moscow|RU|37.75|55.7|143|W|,Nowrangapur|odisha|IN|82.55|19.23|1220|W|,Nueva Italia de Ruiz|MX16|MX|-102.09|19.02|32|N|,Nueva Rosita|MX07|MX|-101.22|27.94|38|N|,Nuevo Casas Grandes|MX06|MX|-107.91|30.42|55|N|,Nuevo Laredo|MX28|MX|-99.52|27.48|416|NW|novo laredo,Nuevo Mexico|MX14|MX|-103.44|20.76|28|N|,Nukus|karakalpakstan|UZ|59.61|42.46|332|W|noukous,Numazu|shizuoka|JP|138.87|35.1|189|W|,Nunoa|santiago metropolitan|CL|-70.58|-33.45|255|W|,Nuremberg|bavaria|DE|11.08|49.45|515|W|nurnberg;neurenberg;norimberga;norimberk;norymberga;nuremberga,Nusantara|east kalimantan|ID|116.71|-0.97|147|W|ikn nusantara;ibu kota negara nusantara;nusantara capital city,Nutana Sector|SK|CA|-106.64|52.1|72|N|,Nutley|NJ|US|-74.16|40.82|27|N|,Nyala|southern darfur|SD|24.88|12.05|565|W|niala;nijala,Nyingchi|tibet|CN|94.36|29.65|200|W|,Nyzhnodniprovsk|dnipropetrovsk|UA|35.12|48.48|160|W|nyzhnodniprovsk vuzol,Nzerekore|nzerekore region|GN|-8.82|7.76|226|W|,O'Fallon|MO|US|-90.7|38.81|85|N|,O'Fallon|IL|US|-89.91|38.59|29|N|,Oak Creek|WI|US|-87.86|42.89|35|N|,Oak Forest|IL|US|-87.74|41.6|28|N|,Oak Hill|VA|US|-77.4|38.93|33|N|,Oak Lawn|IL|US|-87.76|41.71|56|N|oaklawn,Oak Park|IL|US|-87.78|41.89|52|N|,Oak Park|MI|US|-83.18|42.46|29|N|,Oak Ridge|TN|US|-84.27|36.01|29|N|,Oakdale|MN|US|-92.96|44.96|28|N|,Oakland|CA|US|-122.27|37.8|419|NW|,Oakland Park|FL|US|-80.13|26.17|44|N|,Oakley|CA|US|-121.71|38|39|N|,Oakton|VA|US|-77.3|38.88|34|N|,Oakville|ON|CA|-79.68|43.45|213|NW|,Oakville|MO|US|-90.3|38.47|36|N|,Oaxaca|MX20|MX|-96.73|17.06|255|NW|oaxaca city;oaxaca by;oaxaca de juarez,Obalende|lagos|NG|3.42|6.45|342|W|,Oberhausen|north rhine westphalia|DE|6.86|51.48|219|W|,Obihiro|hokkaido|JP|143.2|42.92|166|W|,Obolon|kyiv city|UA|30.51|50.51|239|W|obolonskyi raion;obolonskyi rayon;obolonskyy raion;obolonskyy rayon,Obuase|ashanti|GH|-1.67|6.2|179|W|obuasi,Ocala|FL|US|-82.14|29.19|58|N|,Oceanside|CA|US|-117.38|33.2|175|NW|,Oceanside|NY|US|-73.64|40.64|32|N|,Ocoee|FL|US|-81.54|28.57|43|N|,Ocosingo|MX05|MX|-92.09|16.91|41|N|,Ocotlan|MX14|MX|-102.77|20.35|83|N|,Ocoyoacac|MX15|MX|-99.46|19.27|26|N|,Ocozocoautla de Espinosa|MX05|MX|-93.37|16.76|39|N|la ventosa,Ocumare del Tuy|miranda|VE|-66.78|10.12|166|W|ocumare,Odawara|kanagawa|JP|139.16|35.26|188|W|,Odense|south denmark|DK|10.39|55.4|180|W|ottensee,Odenton|MD|US|-76.7|39.08|37|N|,Odesa|odesa|UA|30.74|46.49|1010|W|odessa;khadjibey,Odessa|TX|US|-102.37|31.85|114|N|,Odintsovo|moscow oblast|RU|37.28|55.67|137|W|odincovo;odincowo;odinzowo;odintovo,OErebro|orebro|SE|15.21|59.27|155|W|orebro,Ogaki|gifu|JP|136.62|35.35|161|W|,Ogbomoso|oyo state|NG|4.24|8.13|433|W|,Ogden|UT|US|-111.97|41.22|85|N|,Oildale|CA|US|-119.02|35.42|32|N|,Oita|oita|JP|131.6|33.23|477|W|oita shi;oitashi,Ojinaga|MX06|MX|-104.54|29.57|28|N|,Ojo de Agua|MX15|MX|-99.01|19.68|386|NW|,Okanagan Mission|BC|CA|-119.48|49.82|38|N|,Okara|punjab|PK|73.45|30.81|533|W|,Okayama|okayama|JP|133.93|34.65|724|W|okajama,Okazaki|aichi|JP|137.17|34.95|384|W|,Okene|kogi state|NG|6.24|7.55|479|W|,Okinawa|okinawa|JP|127.8|26.34|142|W|,Oklahoma City|OK|US|-97.52|35.47|681|NW|kota oklahoma;okla city,Okotoks|AB|CA|-113.98|50.73|30|N|,Okrika|rivers state|NG|7.08|4.74|133|W|,Olathe|KS|US|-94.82|38.88|134|NW|,Oldenburg|lower saxony|DE|8.21|53.14|159|W|oldemburgo;oldenbourg;oldenburgo,Oldham|england|GB|-2.12|53.54|237|W|,Olinda|pernambuco|BR|-34.86|-8.01|364|W|,Olive Branch|MS|US|-89.83|34.96|36|N|,Olmaliq|tashkent region|UZ|69.6|40.84|133|W|almalyk;almalik,Olney|PA|US|-75.12|40.04|39|N|mccartersville,Olney|MD|US|-77.07|39.15|33|N|,Olongapo|central luzon|PH|120.28|14.83|221|W|kota olongapo;olongapo city,Olsztyn|warmia masuria|PL|20.49|53.78|169|W|olstyn;allenstein,Olympia|WA|US|-122.9|47.04|55|N|,Omaha|NE|US|-95.94|41.26|486|NW|,Omdurman|khartoum|SD|32.48|15.64|1849|W|omdourman;umm durman,Ome|tokyo|JP|139.24|35.78|133|W|oume,Omsk|omsk oblast|RU|73.37|54.99|1172|W|omsc,Omuta|fukuoka|JP|130.45|33.03|131|W|,Ondo|ondo state|NG|4.84|7.09|375|W|,Ongata Rongai|kajiado county|KE|36.76|-1.4|172|W|,Ongole|andhra pradesh|IN|80.04|15.5|208|W|,Onitsha|anambra|NG|6.79|6.15|1553|W|,Onomichi|hiroshima|JP|133.2|34.42|131|W|onomici,Ontario|CA|US|-117.65|34.06|171|NW|,Ooty|tamil nadu|IN|76.7|11.41|233|W|ootacamund;udagamandalam;udhagamandalam;utakamand,Opelika|AL|US|-85.38|32.65|29|N|,Opportunity|WA|US|-117.24|47.65|25|N|,Oradea|bihor county|RO|21.92|47.05|183|W|grosswardein;gran varadino;oradea mare;oradia;velky varadin,Orai|uttar pradesh|IN|79.45|25.99|158|W|,Oral|west kazakhstan|KZ|51.43|51.25|330|W|oural;uralsk;ural sk,Oran|oran|DZ|-0.64|35.7|803|W|orano;ora,Orange|CA|US|-117.85|33.79|140|NW|,Orange|NJ|US|-74.23|40.77|34|N|,Orangevale|CA|US|-121.23|38.68|33|N|,Orangeville|ON|CA|-80.1|43.92|30|N|,Orcutt|CA|US|-120.44|34.87|28|N|,Ordos|inner mongolia|CN|109.78|39.61|1940|W|,Ordu|ordu|TR|37.89|40.98|229|W|cotyora,Oregon City|OR|US|-122.61|45.36|35|N|,Orekhovo-Borisovo|moscow|RU|37.73|55.61|144|W|,Orel|oryol oblast|RU|36.08|52.97|303|W|orjol;oryol;orzel,Orem|UT|US|-111.69|40.3|94|N|,Orenburg|orenburg oblast|RU|55.1|51.77|564|W|orenbourg;oremburgo,Orillia|ON|CA|-79.42|44.61|31|N|,Orizaba|MX30|MX|-97.1|18.85|123|N|,Orland Park|IL|US|-87.85|41.63|58|N|,Orlando|FL|US|-81.38|28.54|334|NW|,Orleans|ON|CA|-75.5|45.46|125|N|,Ormoc|eastern visayas|PH|124.61|11.01|238|W|kota ormoc;ormoc city,Ormond Beach|FL|US|-81.06|29.29|40|N|,Oro Valley|AZ|US|-110.97|32.39|45|N|,Orsk|orenburg oblast|RU|58.49|51.23|246|W|,Orumiyeh|west azerbaijan|IR|45.08|37.55|577|W|ourmia;urmia;urmiye,Oruro|oruro|BO|-67.09|-17.97|208|W|,Osaka|osaka|JP|135.5|34.69|2753|W|osaka shi;osaacke,Osan|gyeonggi do|KR|127.07|37.15|238|W|,Osasco|sao paulo|BR|-46.79|-23.53|728|W|,Osh|osh region|KG|72.8|40.53|322|W|och;osch;osj;osz,Oshawa|ON|CA|-78.85|43.9|175|NW|,Oshkosh|WI|US|-88.54|44.02|66|N|,Oshodi|lagos|NG|3.34|6.56|170|W|,Oslo|oslo|NO|10.75|59.91|1082|W|,Osmaniye|osmaniye|TR|36.25|37.07|202|W|,Osnabrueck|lower saxony|DE|8.05|52.27|166|W|osnabruck,Osogbo|osun state|NG|4.56|7.77|645|W|oshogbo,Osorno|los lagos region|CL|-73.13|-40.57|135|W|,Ossining|NY|US|-73.86|41.16|25|N|,Ostrava|moravian silesian region|CZ|18.28|49.83|279|W|mahrisch ostrau;ostrawa,Oswego|IL|US|-88.35|41.68|33|N|,Ota|tokyo|JP|139.72|35.56|748|W|ota ku,Ota|ogun state|NG|3.23|6.69|251|W|,Ota|gunma|JP|139.37|36.3|224|W|,Otsu|shiga|JP|135.87|35|345|W|ocu,Ottawa|ON|CA|-75.7|45.41|1017|NW|otava;aa,Ottawa South|ON|CA|-75.69|45.39|125|N|,Ouagadougou|centre|BF|-1.53|12.37|2415|W|uagadugu;wagadugu,Ouargla|ouargla|DZ|5.33|31.95|169|W|uargla;warkala,Oujda|oriental|MA|-1.91|34.68|539|W|ucda;ujda;wadzda,Oulu|north ostrobothnia|FI|25.47|65.01|216|W|uleaborg,Overbrook|PA|US|-75.24|39.99|32|N|,Overland Park|KS|US|-94.67|38.98|186|NW|,Oviedo|asturias|ES|-5.84|43.36|220|W|,Oviedo|FL|US|-81.21|28.67|38|N|,Owasso|OK|US|-95.85|36.27|34|N|,Owatonna|MN|US|-93.23|44.08|25|N|,Owensboro|KY|US|-87.11|37.77|59|N|,Owerri|imo state|NG|7.03|5.48|545|W|,Owings Mills|MD|US|-76.78|39.42|30|N|,Owo|ondo state|NG|5.59|7.2|276|W|,Oxford|england|GB|-1.26|51.75|162|W|oksford;oxonia;oxnaford,Oxford Circle|PA|US|-75.07|40.05|48|N|,Oxnard|CA|US|-119.18|34.2|207|NW|,Oxon Hill-Glassmanor|MD|US|-76.97|38.8|35|N|,Oyama|tochigi|JP|139.8|36.3|167|W|,Oyo|oyo state|NG|3.93|7.85|736|W|oio,Ozone Park|NY|US|-73.84|40.68|53|N|,Paarl|western cape|ZA|18.98|-33.73|236|W|,Pabellon de Arteaga|MX01|MX|-102.28|22.15|28|N|,Pabna|rajshahi division|BD|89.24|24.01|186|W|,Pachuca de Soto|MX13|MX|-98.73|20.12|256|NW|pachuca,Pacifica|CA|US|-122.49|37.61|39|N|,Paco do Lumiar|maranhao|BR|-44.11|-2.53|155|W|,Padalarang|west java|ID|107.47|-6.84|193|W|,Padang|west sumatra|ID|100.35|-0.95|942|W|kota padang,Padangsidempuan|north sumatra|ID|99.27|1.38|243|W|,Paderborn|north rhine westphalia|DE|8.75|51.72|142|W|,Padua|veneto|IT|11.89|45.41|203|W|padova;padoa;padoue;padwa,Paech'on-up|south hwanghae|KP|126.3|37.99|159|W|,Pagadian|zamboanga peninsula|PH|123.44|7.83|206|W|,Pahrump|NV|US|-115.98|36.21|36|N|,Pak Kret|nonthaburi|TH|100.5|13.91|190|W|,Pakdasht|tehran|IR|51.68|35.48|236|W|,Palakkad|kerala|IN|76.65|10.77|132|W|palakkat,Palangkaraya|central kalimantan|ID|113.92|-2.21|318|W|kota palangka raya;palangka raya,Palanpur|gujarat|IN|72.44|24.17|141|W|,Palatine|IL|US|-88.03|42.11|69|N|,Palembang|south sumatra|ID|104.75|-2.92|1801|W|kota palembang;palimbao,Palenque|MX05|MX|-91.98|17.51|42|N|ruinas de palenque,Palermo|sicily|IT|13.36|38.12|648|W|palerme;palermu,Palhoca|santa catarina|BR|-48.67|-27.65|222|W|,Pali|rajasthan|IN|73.32|25.77|230|W|,Pallabi|dhaka division|BD|90.37|23.82|597|W|,Pallavaram|tamil nadu|IN|80.15|12.97|233|W|,Palm Bay|FL|US|-80.59|28.03|119|N|,Palm Beach Gardens|FL|US|-80.14|26.82|52|N|,Palm Coast|FL|US|-81.21|29.58|82|N|,Palm Desert|CA|US|-116.38|33.72|51|N|,Palm Harbor|FL|US|-82.76|28.08|57|N|,Palm Springs|CA|US|-116.55|33.83|47|N|,Palma|balearic islands|ES|2.65|39.57|438|W|palma de mallorca;palma de maiorca;palma di maiorca,Palmas|tocantins|BR|-48.33|-10.17|306|W|,Palmdale|CA|US|-118.12|34.58|158|NW|,Palmira|valle del cauca department|CO|-76.3|3.54|312|W|,Palo Alto|CA|US|-122.14|37.44|66|N|,Palopo|south sulawesi|ID|120.2|-2.99|184|W|,Paltan|dhaka division|BD|90.41|23.74|184|W|,Palu|central sulawesi|ID|119.87|-0.91|389|W|kabupaten poso;kota palu,Palwal|haryana|IN|77.33|28.14|131|W|,Pamplona|navarre|ES|-1.64|42.82|208|W|pampeluna;pampelune,Pamulang|west java|ID|106.74|-6.34|174|W|,Panabo|davao region|PH|125.68|7.31|211|W|panabo city,Panalanoy|eastern visayas|PH|125.01|11.25|189|W|,Panama City|panama|PA|-79.52|8.99|408|W|panama;ciudad de panama;panama by;panama stadt;panama stad,Panama City|FL|US|-85.66|30.16|38|N|,Panchkula|haryana|IN|76.85|30.69|211|W|panchkula urban estate,Pandi|central luzon|PH|120.96|14.87|162|W|,Pangkalpinang|bangka belitung islands|ID|106.11|-2.13|226|W|,Panguila|bengo|AO|13.45|-8.69|158|W|,Panihati|west bengal|IN|88.37|22.69|378|W|,Panipat|haryana|IN|76.97|29.39|295|W|,Panjin|liaoning|CN|122.07|41.12|1166|W|,Panorama Hills|AB|CA|-114.08|51.15|25|N|,Panshan|liaoning|CN|122.05|41.19|625|W|,Panuco|MX30|MX|-98.18|22.05|40|N|,Panvel|maharashtra|IN|73.11|18.99|195|W|,Panzhihua|sichuan|CN|101.71|26.59|787|W|,Papantla de Olarte|MX30|MX|-97.32|20.45|53|N|,Par Naogaon|rajshahi division|BD|88.95|24.8|192|W|naogaon,Paracho de Verduzco|MX16|MX|-102.05|19.65|37|N|,Paradise|NV|US|-115.15|36.1|223|NW|,Paradise|CA|US|-121.62|39.76|26|N|,Paragould|AR|US|-90.5|36.06|27|N|,Paraiso|MX27|MX|-93.21|18.4|86|N|,Parakou|borgou|BJ|2.63|9.34|255|W|,Paramaribo|paramaribo district|SR|-55.17|5.87|223|W|,Paramount|CA|US|-118.16|33.89|55|N|,Paramus|NJ|US|-74.08|40.94|26|N|,Parana|entre rios|AR|-60.53|-31.73|247|W|,Paranagua|parana|BR|-48.53|-25.52|150|W|,Paranaque City|national capital region|PH|121.02|14.48|703|W|,Parauapebas|para|BR|-49.9|-6.07|305|W|,Parbhani|maharashtra|IN|76.77|19.27|307|W|,Parc-Extension|QC|CA|-73.63|45.53|33|N|,Parelheiros|sao paulo|BR|-46.73|-23.83|153|W|,Parepare|south sulawesi|ID|119.63|-4.01|160|W|,Paris|ile de france|FR|2.35|48.85|2138|W|parijs;pa ri;parigi;pariisi;paryz;pariz,Paris 11 Popincourt|ile de france|FR|2.38|48.86|138|W|,Paris 11e Arrondissement|ile de france|FR|2.38|48.86|144|W|,Paris 12 Reuilly|ile de france|FR|2.39|48.84|138|W|,Paris 12e Arrondissement|ile de france|FR|2.44|48.84|140|W|,Paris 13 Gobelins|ile de france|FR|2.36|48.83|181|W|,Paris 13e Arrondissement|ile de france|FR|2.36|48.83|177|W|,Paris 14 Observatoire|ile de france|FR|2.33|48.83|136|W|,Paris 15 Vaugirard|ile de france|FR|2.3|48.84|229|W|,Paris 16 Passy|ile de france|FR|2.28|48.86|159|W|,Paris 17 Batignolles-Monceau|ile de france|FR|2.32|48.88|159|W|,Paris 18 Buttes-Montmartre|ile de france|FR|2.34|48.89|183|W|,Paris 19 Buttes-Chaumont|ile de france|FR|2.38|48.88|178|W|,Paris 20 Menilmontant|ile de france|FR|2.4|48.86|185|W|,Park Ridge|IL|US|-87.84|42.01|37|N|,Park Slope|NY|US|-73.99|40.67|65|N|,Parkchester|NY|US|-73.86|40.84|65|N|,Parker|CO|US|-104.76|39.52|49|N|,Parkersburg|WV|US|-81.56|39.27|30|N|,Parkland|WA|US|-122.43|47.16|35|N|,Parkland|FL|US|-80.24|26.31|30|N|,Parkville|MD|US|-76.54|39.38|30|N|,Parkwoods-Donalda|ON|CA|-79.33|43.76|34|N|,Parma|emilia romagna|IT|10.33|44.8|198|W|parme,Parma|OH|US|-81.72|41.4|79|N|,Parnaiba|piaui|BR|-41.78|-2.9|170|W|,Parnamirim|rio grande do norte|BR|-35.26|-5.92|271|W|,Parras de la Fuente|MX07|MX|-102.18|25.44|33|N|,Parsippany|NJ|US|-74.43|40.86|51|N|,Pasadena|TX|US|-95.21|29.69|153|NW|,Pasadena|CA|US|-118.14|34.15|142|NW|,Pasarkemis|west java|ID|106.53|-6.17|263|W|,Pasay|national capital region|PH|121|14.54|416|W|,Pasco|WA|US|-119.1|46.24|69|N|,Pasig City|national capital region|PH|121.06|14.59|853|W|pasig,Pasir Gudang|johor|MY|103.91|1.46|534|W|,Pasir Mas|kelantan|MY|102.14|6.05|230|W|,Pasir Puteh|kelantan|MY|102.4|5.83|137|W|,Paso Robles|CA|US|-120.69|35.63|27|N|el paso de robles,Passaic|NJ|US|-74.13|40.86|71|N|,Passo Fundo|rio grande do sul|BR|-52.41|-28.26|214|W|,Pasto|narino|CO|-77.28|1.21|392|W|,Pasuruan|east java|ID|112.91|-7.65|213|W|kota pasuruan;pasoeroean,Patan|bagmati province|NP|85.31|27.68|299|W|lalitpur,Patan|gujarat|IN|72.13|23.85|133|W|,Paterson|NJ|US|-74.17|40.92|147|NW|,Pathankot|punjab|IN|75.65|32.27|174|W|,Pathein|ayeyarwady|MM|94.73|16.78|237|W|basejn,Patiala|punjab|IN|76.39|30.34|446|W|,Patna|bihar|IN|85.14|25.59|1684|W|,Patos de Minas|minas gerais|BR|-46.52|-18.58|159|W|,Patra|west greece|GR|21.74|38.25|168|W|patrai;patras;patrasso,Patzcuaro|MX16|MX|-101.61|19.51|55|N|,Paulista|pernambuco|BR|-34.87|-7.94|342|W|,Pavlodar|pavlodar region|KZ|76.97|52.28|329|W|pawlodar,Pawtucket|RI|US|-71.38|41.88|71|N|,Paya Terubong|penang|MY|100.28|5.37|226|W|,Payakumbuh|west sumatra|ID|100.63|-0.22|139|W|kota payakumbuh,Peabody|MA|US|-70.93|42.53|52|N|,Peachtree City|GA|US|-84.6|33.4|35|N|,Peachtree Corners|GA|US|-84.22|33.97|40|N|,Pearl|MS|US|-90.13|32.27|26|N|,Pearl City|HI|US|-157.98|21.4|47|N|,Pearland|TX|US|-95.29|29.56|108|N|,Pecs|baranya|HU|18.23|46.08|145|W|cinquechiese;funfkirchen;pecz,Pedreira|sao paulo|BR|-46.65|-23.71|163|W|,Peicheng|jiangsu|CN|116.92|34.74|195|W|,Pekalongan|central java|ID|109.68|-6.89|324|W|kota pekalongan,Pekanbaru|riau|ID|101.44|0.52|1167|W|kota pekanbaru;pakanbaru,Pekin|IL|US|-89.64|40.57|33|N|,Pelentong|johor|MY|103.82|1.52|583|W|,Pelotas|rio grande do sul|BR|-52.34|-31.77|336|W|,Pemalang|central java|ID|109.38|-6.89|184|W|,Pematangsiantar|north sumatra|ID|99.07|2.96|279|W|,Pemba|cabo delgado province|MZ|40.52|-12.97|232|W|,Pembroke Pines|FL|US|-80.22|26|166|NW|,Penalolen|santiago metropolitan|CL|-70.53|-33.47|241|W|,Pengpu|shanghai|CN|121.44|31.29|152|W|,Pengze|jiangxi|CN|116.55|29.9|350|W|,Penjamo|MX11|MX|-101.72|20.43|40|N|,Penn Hills|PA|US|-79.84|40.5|44|N|,Pennsauken|NJ|US|-75.06|39.96|36|N|,Pennsport|PA|US|-75.15|39.93|26|N|,Pensacola|FL|US|-87.22|30.42|53|N|pensacola i florida,Penticton|BC|CA|-119.59|49.48|33|N|,Penza|penza oblast|RU|45.01|53.2|523|W|pensa,Peoria|AZ|US|-112.24|33.58|190|NW|,Peoria|IL|US|-89.59|40.69|115|N|,Perbaungan|north sumatra|ID|98.96|3.57|157|W|,Percut|north sumatra|ID|98.86|3.63|311|W|,Pereira|risaralda department|CO|-75.69|4.81|467|W|,Peristeri|attica|GR|23.69|38.02|139|W|peristerion,Perm|perm krai|RU|56.25|58.01|982|W|molotov,Perote|MX30|MX|-97.24|19.56|37|N|,Perris|CA|US|-117.23|33.78|74|N|,Perry Hall|MD|US|-76.46|39.41|28|N|,Perth|western australia|AU|115.86|-31.95|2384|W|,Perth Amboy|NJ|US|-74.27|40.51|52|N|,Pervouralsk|sverdlovsk oblast|RU|59.94|56.91|133|W|perwouralsk,Peshawar|khyber pakhtunkhwa|PK|71.58|34.01|4758|W|peschawar;pesjawar;peszawar;pexauar;pesaver;pesavar,Pest|budapest|HU|19.08|47.5|1001|W|pesta;peste;peszt,Petah Tiqva|central district|IL|34.89|32.09|253|W|petah tikva;mulebbis;petach tikva;petach tikwa;petah tikwah;petah tiqwa;petaj tikva;pethah tiqva,Petaling Jaya|selangor|MY|101.61|3.11|807|W|,Petaluma|CA|US|-122.64|38.23|60|N|,Petapa|guatemala|GT|-90.56|14.5|135|W|,Petare|miranda|VE|-66.81|10.48|364|W|,Peterborough|england|GB|-0.25|52.57|163|W|,Peterborough|ON|CA|-78.32|44.3|85|N|,Petersburg|VA|US|-77.4|37.23|32|N|,Petionville|ouest|HT|-72.29|18.51|376|W|,Petrogradka|st petersburg|RU|30.31|59.97|130|W|,Petrolina|pernambuco|BR|-40.5|-9.4|418|W|,Petropavl|north kazakhstan|KZ|69.15|54.87|200|W|kizilyar;petropawl;pietropawlowsk,Petropavlovsk-Kamchatsky|kamchatka|RU|158.63|53.06|181|W|petropavlovsk kamchatskiy;petropavlovsk kamciatki;petropavlovsk kamchatski;petropavlovsk kamtchatski;petropavlovsk kamtjatskij;petropavlovsk kamtsjatski;petropavlovsk kamtsatski;petropavlovsk kamcatski;petropavlovsk kamcatskij;pietropawlowsk kamczacki,Petropolis|rio de janeiro|BR|-43.18|-22.5|294|W|,Petrozavodsk|karelia|RU|34.35|61.78|279|W|petroskoi;petrosavodsk;petrosawodsk;petroskoj;petrozawodzk;pietrozawodsk;aanislinna,Pflugerville|TX|US|-97.62|30.44|57|N|,Phan Rang-Thap Cham|khanh hoa|VN|108.99|11.56|207|W|phan rang,Phan Thiet|lam dong|VN|108.1|10.93|228|W|,Pharr|TX|US|-98.18|26.19|76|N|,Phenix City|AL|US|-85|32.47|37|N|,Philadelphia|PA|US|-75.16|39.95|1573|NW|filadelfia;filadelfie;philadelphie,Phnom Penh|phnom penh|KH|104.92|11.56|1573|W|nom pen;phnompenh;phon phen;pnom pene;pnom penh,Pho Yen|thai nguyen|VN|105.89|21.42|231|W|,Phoenix|AZ|US|-112.07|33.45|1650|NW|,Phra Pradaeng|samut prakan|TH|100.53|13.66|196|W|amphoe phra pradaeng,Phu Ly|ninh binh|VN|105.91|20.55|136|W|,Phu My|ho chi minh city hcmc|VN|107.07|10.63|287|W|,Phu Quoc|an giang|VN|103.97|10.22|294|W|koh trol,Phuc Yen|phu tho|VN|105.7|21.24|180|W|,Phusro|jharkhand|IN|86.01|23.76|185|W|,Pickering|ON|CA|-79.13|43.9|91|N|,Pico Rivera|CA|US|-118.1|33.98|64|N|,Piedecuesta|santander department|CO|-73.05|6.99|163|W|,Piedras Negras|MX07|MX|-100.52|28.7|150|NW|piedrasnegras,Pierrefonds|QC|CA|-73.89|45.46|59|N|,Pierrefonds-Roxboro|QC|CA|-73.84|45.5|73|N|,Pietermaritzburg|kwazulu natal|ZA|30.39|-29.62|839|W|,Pijijiapan|MX05|MX|-93.21|15.69|50|N|,Pikesville|MD|US|-76.72|39.37|30|N|,Pikine|dakar|SN|-17.39|14.76|1170|W|,Pilibhit|uttar pradesh|IN|79.8|28.63|131|W|,Pilsen|plzen region|CZ|13.38|49.75|168|W|plzen;pilzno,Pimpri|maharashtra|IN|73.81|18.62|1284|W|,Pimpri-Chinchwad|maharashtra|IN|73.8|18.62|1727|W|pimpri cincvad,Pinar del Rio|pinar del rio|CU|-83.7|22.42|186|W|,Pindamonhangaba|sao paulo|BR|-45.46|-22.92|172|W|,Pindi Bhattian|punjab|PK|73.27|31.9|493|W|,Pine Bluff|AR|US|-92|34.23|44|N|,Pine Hills|FL|US|-81.45|28.56|60|N|,Pinellas Park|FL|US|-82.7|27.84|51|N|,Pinetown|kwazulu natal|ZA|30.89|-29.82|144|W|,Pingdingshan|henan|CN|113.32|33.73|979|W|pching ting san,Pingdu|shandong|CN|119.95|36.78|542|W|,Pingliang|gansu|CN|106.69|35.54|504|W|binh luong;pching liang,Pingwu County|sichuan|CN|104.53|32.41|180|W|,Pingxiang|jiangxi|CN|113.85|27.62|893|W|binh huong;pching siang,Pinotepa Nacional|MX20|MX|-98.05|16.34|29|N|pinotepa,Piracicaba|sao paulo|BR|-47.65|-22.73|440|W|,Piraeus|attica|GR|23.65|37.94|163|W|el pireo;il pireo;le piree;peiraias;peiraiefs;pire;pireo;pireu;pireus;piraus,Piranshahr|west azerbaijan|IR|45.14|36.7|168|W|khaneh;piranschahr;piranszahr;piransehr,Pirituba|sao paulo|BR|-46.73|-23.49|179|W|,Piscataway|NJ|US|-74.4|40.5|56|N|,Pitalito|huila department|CO|-76.05|1.85|135|W|,Pitesti|arges|RO|24.87|44.85|141|W|piteszt;pitest;pitesk,Pittsburg|CA|US|-121.88|38.03|69|N|,Pittsburgh|PA|US|-80|40.44|304|NW|pitsburgo,Pittsfield|MA|US|-73.25|42.45|43|N|,Piura|piura|PE|-80.66|-5.18|630|W|,Pizhou|jiangsu|CN|117.95|34.31|343|W|,Placentia|CA|US|-117.87|33.87|52|N|,Plainfield|NJ|US|-74.41|40.63|51|N|,Plainfield|IL|US|-88.2|41.63|42|N|,Plainfield|IN|US|-86.4|39.7|30|N|,Plainview|NY|US|-73.47|40.78|26|N|,Planaltina|federal district|BR|-47.65|-15.62|189|W|,Plano|TX|US|-96.7|33.02|283|NW|,Plano Piloto|federal district|BR|-47.88|-15.79|198|W|,Plant City|FL|US|-82.11|28.02|37|N|,Plantation|FL|US|-80.23|26.13|92|N|,Playa del Carmen|MX23|MX|-87.08|20.63|149|NW|,Plaza de la Revolucion|havana|CU|-82.39|23.12|139|W|,Pleasant Grove|UT|US|-111.74|40.36|38|N|pleasant grv,Pleasant Hill|CA|US|-122.06|37.95|34|N|,Pleasanton|CA|US|-121.87|37.66|79|N|,Pleasure Ridge Park|KY|US|-85.86|38.15|25|N|,Ploiesti|prahova|RO|26.02|44.95|180|W|ploeszti,Plovdiv|plovdiv|BG|24.75|42.15|329|W|filibe;filippopoli;plowdiw,Plum|PA|US|-79.75|40.5|27|N|,Plumbon|west java|ID|108.47|-6.71|167|W|,Plymouth|england|GB|-4.14|50.37|260|W|,Plymouth|MN|US|-93.46|45.01|75|N|,Pocatello|ID|US|-112.45|42.87|54|N|,Pocos de Caldas|minas gerais|BR|-46.56|-21.79|172|W|,Podgorica|podgorica|ME|19.26|42.44|236|W|,Podolsk|moscow oblast|RU|37.55|55.42|179|W|,Pohang|gyeongsangbuk do|KR|129.36|36.03|492|W|,Poinciana|FL|US|-81.46|28.14|53|N|,Pointe-Claire|QC|CA|-73.82|45.45|30|N|,Pointe-Noire|pointe noire|CG|11.86|-4.78|1032|W|,Pokhara|gandaki pradesh|NP|83.97|28.27|600|W|,Polanco|MX09|MX|-99.2|19.43|50|N|col polanco;colonia polanco,Polokwane|limpopo|ZA|29.47|-23.9|272|W|pietersburg,Poltava|poltava|UA|34.55|49.59|279|W|poltawa;pultava;baltavar;ltava,Pomona|CA|US|-117.75|34.06|153|NW|,Pompano Beach|FL|US|-80.12|26.24|107|N|,Ponce|ponce|PR|-66.62|18.01|137|W|,Ponta Grossa|parana|BR|-50.16|-25.09|292|W|,Ponte Vedra Beach|FL|US|-81.39|30.24|35|N|,Pontiac|MI|US|-83.29|42.64|59|N|,Pontianak|west kalimantan|ID|109.33|-0.03|686|W|kota pontianak,Poole|england|GB|-1.98|50.71|151|W|,Popayan|cauca department|CO|-76.61|2.44|318|W|,Porbandar|gujarat|IN|69.61|21.64|152|W|,Porlamar|nueva esparta|VE|-63.87|10.96|216|W|,Port Arthur|TX|US|-93.94|29.89|55|N|,Port-au-Prince|ouest|HT|-72.34|18.54|1234|W|porto principe;puerto principe,Port Charlotte|FL|US|-82.09|26.98|54|N|,Port Chester|NY|US|-73.67|41|29|N|,Port Coquitlam|BC|CA|-122.77|49.27|58|N|,Port-de-Paix|nord ouest|HT|-72.83|19.94|306|W|porto da paz,Port-Gentil|ogooue maritime|GA|8.78|-0.72|164|W|mandji,Port Harcourt|rivers state|NG|7.01|4.78|2120|W|,Port Huron|MI|US|-82.42|42.97|29|N|,Port Louis|port louis|MU|57.5|-20.16|155|W|puerto louis,Port Moody|BC|CA|-122.82|49.28|27|N|,Port Moresby|national capital|PG|147.15|-9.48|283|W|puerto moresby,Port Orange|FL|US|-81|29.14|59|N|,Port Richmond|PA|US|-75.1|39.99|27|N|richmond,Port Said|port said|EG|32.3|31.27|780|W|bursaid;porto said;puerto said,Port Saint Lucie|FL|US|-80.35|27.29|164|NW|,Port Sudan|red sea|SD|37.22|19.62|489|W|bur sudan;port soudan;porto sudan;porto sudao;puerto sudan,Portage|MI|US|-85.58|42.2|48|N|,Portage|IN|US|-87.18|41.58|36|N|,Portage Park|IL|US|-87.77|41.96|64|N|,Porterville|CA|US|-119.02|36.07|56|N|,Porticos de San Antonio|MX02|MX|-117.03|32.44|34|N|,Portland|OR|US|-122.68|45.52|652|NW|,Portland|ME|US|-70.26|43.66|66|N|,Porto|porto|PT|-8.61|41.15|252|W|oporto,Porto Alegre|rio grande do sul|BR|-51.23|-30.03|1488|W|puerto alegre,Porto-Novo|oueme|BJ|2.6|6.5|264|W|,Porto Seguro|bahia|BR|-39.06|-16.45|182|W|,Porto Velho|rondonia|BR|-63.9|-8.76|548|W|,Portoviejo|manabi|EC|-80.45|-1.06|321|W|,Portsmouth|england|GB|-1.09|50.8|208|W|,Portsmouth|VA|US|-76.3|36.84|96|N|,Portsmouth Heights|VA|US|-76.37|36.82|99|N|,Posadas|misiones|AR|-55.92|-27.39|305|W|,Post Falls|ID|US|-116.95|47.72|30|N|,Potchefstroom|north west|ZA|27.1|-26.72|178|W|,Potomac|MD|US|-77.21|39.02|44|N|,Potosi|potosi department|BO|-65.75|-19.58|141|W|,Potsdam|brandenburg|DE|13.07|52.4|184|W|poczdam;postupim,Poughkeepsie|NY|US|-73.92|41.7|30|N|,Pouso Alegre|minas gerais|BR|-45.94|-22.23|162|W|,Poway|CA|US|-117.04|32.96|50|N|,Poza Rica de Hidalgo|MX30|MX|-97.46|20.53|185|NW|poza rica,Poznan|greater poland|PL|16.93|52.41|536|W|posen;posnania;possen,Praga Poludnie|mazovia|PL|21.09|52.24|179|W|,Prague|prague|CZ|14.42|50.09|1165|W|praag;prag;praga;praha,Praia|praia|CV|-23.51|14.93|137|W|cidade da praia;municipio da praia,Praia Grande|sao paulo|BR|-46.4|-24.01|367|W|,Prairieville|LA|US|-90.97|30.3|26|N|,Prato|tuscany|IT|11.1|43.88|195|W|,Prattville|AL|US|-86.46|32.46|35|N|,Pravyi Bereh|donetsk|UA|37.59|47.11|352|W|pravyy bereh,Prayagraj|uttar pradesh|IN|81.84|25.44|1073|W|allahabad,Prenzlauer Berg Bezirk|state of berlin|DE|13.42|52.54|148|W|prenzlauer berg,Prescott|AZ|US|-112.47|34.54|41|N|,Prescott Valley|AZ|US|-112.32|34.61|42|N|,Presidente Prudente|sao paulo|BR|-51.39|-22.13|234|W|,Preston|england|GB|-2.7|53.76|313|W|,Pretoria|gauteng|ZA|28.19|-25.74|2112|W|pretorie,Prince Albert|SK|CA|-105.77|53.2|35|N|,Prince Edward|ON|CA|-77.25|44|25|N|prince edward county,Prince George|BC|CA|-122.75|53.92|78|N|,Princeton|FL|US|-80.41|25.54|39|N|,Princeton|NJ|US|-74.66|40.35|29|N|stony brook,Prior Lake|MN|US|-93.42|44.71|25|N|,Probolinggo|east java|ID|113.22|-7.75|243|W|kota probolinggo,Proddatur|andhra pradesh|IN|78.55|14.75|177|W|,Progreso|MX31|MX|-89.66|21.28|37|N|progreso de castro,Prokop'yevsk|kuzbass|RU|86.72|53.92|219|W|prokopjevsk;prokopyevsk;prokopjewsk,Providence|RI|US|-71.41|41.82|190|NW|,Provo|UT|US|-111.66|40.23|115|N|,Pskov|pskov oblast|RU|28.33|57.82|210|W|pihkova;pleskau;pskow,Pu'er|yunnan|CN|100.97|22.79|296|W|,Pucallpa|ucayali|PE|-74.55|-8.38|326|W|,Puchong|selangor|MY|101.62|3|375|W|,Pudong|shanghai|CN|121.5|31.24|5681|W|,Puducherry|puducherry|IN|79.83|11.93|657|W|pondichery;pondicherry;territoire de pondichery;pondicherri,Puebla|MX21|MX|-98.21|19.05|1692|NW|puebla city;puebla de zaragoza;puebla de los angeles,Pueblo|CO|US|-104.61|38.25|109|N|,Pueblo West|CO|US|-104.72|38.35|29|N|,Puente Alto|santiago metropolitan|CL|-70.58|-33.61|568|W|,Puente de Vallecas|madrid|ES|-3.66|40.39|244|W|,Puerto Cabello|carabobo|VE|-68.01|10.47|174|W|,Puerto Cortez|cortes department|HN|-87.93|15.83|142|W|puerto cortes,Puerto Escondido|MX20|MX|-97.07|15.86|29|N|,Puerto La Cruz|anzoategui|VE|-64.63|10.21|370|W|puerto cruz;puerto de la cruz,Puerto Montt|los lagos region|CL|-72.94|-41.47|245|W|port montt,Puerto Penasco|MX26|MX|-113.54|31.32|62|N|,Puerto Plata|puerto plata|DO|-70.69|19.79|146|W|,Puerto Princesa|mimaropa|PH|118.74|9.74|222|W|kota puerto princesa;puerto princesa city,Puerto Vallarta|MX14|MX|-105.23|20.62|224|NW|pto vallarta,Pullman|WA|US|-117.18|46.73|32|N|,Punasa|madhya pradesh|IN|76.39|22.24|350|W|,Pune|maharashtra|IN|73.86|18.52|3124|W|poona,Punggol||SG|103.91|1.41|204|W|,Puning|guangdong|CN|116.17|23.31|874|W|,Punto Fijo|falcon|VE|-70.2|11.69|141|W|,Puqi|hubei|CN|113.88|29.72|132|W|,Puri|odisha|IN|85.82|19.8|200|W|,Purisima de Bustos|MX11|MX|-101.88|21.03|43|N|,Purnia|bihar|IN|87.47|25.78|282|W|,Puruandiro|MX16|MX|-101.52|20.09|30|N|,Purwakarta|west java|ID|107.44|-6.56|179|W|kota purwakarta,Purwodadi|central java|ID|110.92|-7.09|139|W|purwodadi grobogan,Purwokerto|central java|ID|109.23|-7.42|230|W|kota purwokerto,Puthia|rajshahi division|BD|88.83|24.37|159|W|,Putian|fujian|CN|119.01|25.44|1539|W|pchu tchien,Putuo|shanghai|CN|121.39|31.25|1239|W|,Puxi|shanghai|CN|121.47|31.24|6683|W|,Puyallup|WA|US|-122.29|47.19|39|N|,Puyang|zhejiang|CN|119.89|29.46|3590|W|pujiang,Puyang|henan|CN|115.04|35.76|655|W|pchu jang,Pyatigorsk|stavropol kray|RU|43.05|44.05|142|W|piatigorsk;pjatigorsk,Pyay|bago region|MM|95.22|18.82|135|W|prome;pyain,Pyeongtaek|gyeonggi do|KR|127.09|36.99|364|W|pyeongtaek si,Pyongyang|pyongyang|KP|125.75|39.03|3222|W|p yongyang;p yongyang si;pchjongjang;phenian;pionguiangue;pionyang;pjongjang;pyongyang si,Qa'em Shahr|mazandaran|IR|52.87|36.47|204|W|,Qadirpur Ran|punjab|PK|71.67|30.29|200|W|,Qalyub|qalyubia|EG|31.21|30.18|156|W|,Qarchak|tehran|IR|51.58|35.43|251|W|,Qarshi|qashqadaryo|UZ|65.79|38.86|278|W|karchi;karsji;karszy;karsi;qarsi,Qazvin|qazvin province|IR|50|36.27|333|W|kazvin;kazwin,Qeladize|sulaymaniyah|IQ|45.13|36.18|140|W|,Qianjiang|hubei|CN|112.89|30.42|179|W|,Qianjiang|chongqing|CN|108.77|29.53|143|W|,Qibao|shanghai|CN|121.36|31.15|283|W|,Qina|qena|EG|32.73|26.16|252|W|,Qingdao|shandong|CN|120.38|36.06|7172|W|cching tao;tsingtau,Qingpu|shanghai|CN|121.11|31.15|1271|W|,Qingyang|gansu|CN|107.64|35.71|2125|W|,Qingyuan|guangdong|CN|113.03|23.7|1738|W|cching juan,Qingzhou|shandong|CN|118.48|36.7|236|W|,Qinhuangdao|hebei|CN|119.59|39.94|759|W|cchin chuang tao,Qinzhou|guangxi|CN|108.65|21.98|1296|W|kham chau;cchin cou,Qionghai|hainan|CN|110.46|19.24|528|W|,Qiqihar|heilongjiang|CN|123.96|47.34|882|W|cicikar,Qitaihe|heilongjiang|CN|131|45.77|345|W|,Qo'qon|fergana|UZ|70.94|40.53|259|W|kokand,Qods|tehran|IR|51.11|35.72|309|W|,Qom|qom province|IR|50.88|34.64|900|W|kom;kum,Quan Ba|ho chi minh city hcmc|VN|106.69|10.77|220|W|,Quan Bon|ho chi minh city hcmc|VN|106.71|10.77|199|W|,Quan GJuc Thinh||VN|105.74|10.31|132|W|,Quan Muoi|ho chi minh city hcmc|VN|106.67|10.77|399|W|,Quan Muoi Mot|ho chi minh city hcmc|VN|106.64|10.76|332|W|,Quan Nam|ho chi minh city hcmc|VN|106.67|10.76|187|W|,Quan Sau|ho chi minh city hcmc|VN|106.65|10.75|271|W|,Quang Ngai|quang ngai|VN|108.79|15.12|278|W|,Quanzhou|fujian|CN|118.59|24.91|1469|W|cchuan cou;chinchew;chinchu;zayton,Quarto Oggiaro|lombardy|IT|9.14|45.51|182|W|,Quebec|QC|CA|-71.21|46.81|531|NW|kota quebec;quebec city,Queen Creek|AZ|US|-111.63|33.25|34|N|,Queens|NY|US|-73.84|40.68|2316|NW|borough of queens;comte de queens;condado de queens;queens county,Queens Village|NY|US|-73.74|40.73|51|N|,Queensbury|NY|US|-73.61|43.38|27|N|,Queimados|rio de janeiro|BR|-43.56|-22.72|149|W|,Quelimane|zambezia province|MZ|36.89|-17.88|349|W|,Quetta|balochistan|PK|67|30.18|1565|W|ketta;kveta;kweta,Quetzaltenango|quetzaltenango|GT|-91.52|14.84|180|W|,Quevedo|los rios|EC|-79.46|-1.03|213|W|,Quezon City|national capital region|PH|121.05|14.65|3084|W|ciudad quezon;quezon stadt,Qui Nhon|gia lai|VN|109.22|13.78|519|W|quy nhon,Quilicura|santiago metropolitan|CL|-70.71|-33.37|210|W|,Quillacollo|cochabamba|BO|-66.28|-17.39|172|W|,Quilmes|buenos aires|AR|-58.25|-34.72|262|W|,Quilpue|valparaiso|CL|-71.44|-33.05|130|W|,Quincy|MA|US|-71|42.25|93|N|,Quincy|IL|US|-91.41|39.94|40|N|,Quinte West|ON|CA|-77.57|44.18|43|N|,Quito|pichincha|EC|-78.52|-0.23|2781|W|san francisco de quito,Qujing|yunnan|CN|103.78|25.48|1408|W|khuc tinh;cchu ting,Quthbullapur|telangana|IN|78.46|17.5|225|W|,Quzhou|zhejiang|CN|118.87|28.96|902|W|cu chau;cchu cou,Ra's Bayrut|beirut|LB|35.48|33.9|1251|W|,Rabak|white nile|SD|32.74|13.18|135|W|,Rabat|rabat sale kenitra|MA|-6.83|34.01|1655|W|,Rach Gia|an giang|VN|105.08|10.01|459|W|,Racine|WI|US|-87.78|42.73|77|N|,Radnor|PA|US|-75.36|40.05|30|N|,Radom|mazovia|PL|21.15|51.4|226|W|,Raebareli|uttar pradesh|IN|81.23|26.23|186|W|rae bareli,Rafsanjan|kerman|IR|55.99|30.41|147|W|,Rahim Yar Khan|punjab|PK|70.3|28.42|517|W|rahimjar khan;rahimyar khan,Rahway|NJ|US|-74.28|40.61|29|N|,Raichur|karnataka|IN|77.36|16.21|234|W|,Raiganj|west bengal|IN|88.12|25.61|170|W|,Raigarh|chhattisgarh|IN|83.4|21.9|150|W|rajgarh,Raipur|chhattisgarh|IN|81.63|21.23|1027|W|,Raj-Nandgaon|chhattisgarh|IN|81.03|21.1|163|W|,Rajamahendravaram|andhra pradesh|IN|81.78|17.01|376|W|rajahmundry,Rajapalayam|tamil nadu|IN|77.55|9.45|130|W|,Rajkot|gujarat|IN|70.79|22.29|1390|W|radzkot,Rajpur Sonarpur|west bengal|IN|88.43|22.44|424|W|rajpur;sonarpur;sonarpur rajpur,Rajshahi|rajshahi division|BD|88.6|24.37|763|W|,Raleigh|NC|US|-78.64|35.77|482|NW|,Ramadi|anbar|IQ|43.31|33.42|223|W|al ramadi;al rumadi;ar ramadi,Ramagundam|telangana|IN|79.47|18.75|242|W|,Ramat Gan|tel aviv|IL|34.81|32.08|170|W|,Ramenki|moscow|RU|37.5|55.7|130|W|,Ramgundam|telangana|IN|79.45|18.8|452|W|,Ramiros|luanda|AO|13.05|-9.06|323|W|,Ramna Maidan|dhaka division|BD|90.4|23.73|143|W|,Ramos Arizpe|MX07|MX|-100.95|25.54|66|N|,Rampur|uttar pradesh|IN|79.03|28.81|296|W|,Ramsey|MN|US|-93.45|45.26|25|N|,Rancagua|o higgins region|CL|-70.74|-34.17|212|W|,Ranchi|jharkhand|IN|85.31|23.34|1120|W|ranci,Rancho Cordova|CA|US|-121.3|38.59|71|N|,Rancho Cucamonga|CA|US|-117.59|34.11|175|NW|,Rancho Palos Verdes|CA|US|-118.39|33.74|42|N|,Rancho Penasquitos|CA|US|-117.12|32.96|60|N|,Rancho Santa Margarita|CA|US|-117.6|33.64|49|N|,Randallstown|MD|US|-76.8|39.37|32|N|,Randburg|gauteng|ZA|28|-26.09|337|W|rendburg,Randfontein|gauteng|ZA|27.7|-26.18|133|W|,Randolph|MA|US|-71.04|42.16|32|N|,Randolph|NJ|US|-74.58|40.85|25|N|randolph township,Rangel|luanda|AO|13.26|-8.83|190|W|,Rangkasbitung|banten|ID|106.25|-6.36|137|W|,Rangpur|rangpur division|BD|89.25|25.75|1031|W|rangpur city;rongpur,Raniganj|telangana|IN|78.49|17.43|217|W|,Raniganj|west bengal|IN|87.13|23.62|131|W|,Ranipet|tamil nadu|IN|79.33|12.92|264|W|,Rapid City|SD|US|-103.23|44.08|73|N|,Ras Al Khaimah|ras al khaimah|AE|55.94|25.79|351|W|ras el khaimah;ra s al chaima;ras al khaimah city;ras al chajma;ras el kheima;resu l hayme,Rasapudipalem|andhra pradesh|IN|83.32|17.73|1728|W|,Rasht|gilan province|IR|49.59|37.28|594|W|rascht;rasjt;raszt;rast;rest,Ratlam|madhya pradesh|IN|75.04|23.33|264|W|,Raurkela Industrial Township|odisha|IN|84.86|22.2|216|W|,Rawalpindi|punjab|PK|73.05|33.6|3357|W|ravalpindi,Rawang|selangor|MY|101.58|3.32|199|W|,Rawson|san juan|AR|-68.54|-31.58|130|W|,Rayon KTZ|kharkiv|UA|36.37|49.94|200|W|khtz district;khtz settlement;novyy kharkiv;rayon khtz;new kharkiv;novyi kharkiv,Raytown|MO|US|-94.46|39.01|29|N|,Reading|england|GB|-0.97|51.46|318|W|,Reading|PA|US|-75.93|40.34|87|N|,Recife|pernambuco|BR|-34.88|-8.05|1653|W|,Red Deer|AB|CA|-113.8|52.27|100|N|,Redan|GA|US|-84.13|33.75|33|N|,Redding|CA|US|-122.39|40.59|91|N|,Redford|MI|US|-83.3|42.38|49|N|,Redlands|CA|US|-117.18|34.06|71|N|,Redmond|WA|US|-122.12|47.67|60|N|,Redmond|OR|US|-121.17|44.27|28|N|,Redondo Beach|CA|US|-118.39|33.85|68|N|,Redwood City|CA|US|-122.24|37.49|85|N|,Reedley|CA|US|-119.45|36.6|25|N|,Reforma|MX05|MX|-93.15|17.86|26|N|,Regensburg|bavaria|DE|12.1|49.02|151|W|ratisbona;ratisbonne;ratyzbona;regensburgo;rezno,Reggio Calabria|calabria|IT|15.66|38.11|182|W|reggio de calabre;reggio di calabria;regio de calabria,Reggio nell'Emilia|emilia romagna|IT|10.63|44.7|171|W|reggio emilia;reggio d emilie,Regina|SK|CA|-104.62|50.45|226|NW|,Rego Park|NY|US|-73.85|40.73|43|N|,Rehovot|central district|IL|34.81|31.89|149|W|rechovot;rechowot;rejovot,Reims|grand est|FR|4.03|49.27|196|W|remes,Reisterstown|MD|US|-76.83|39.47|25|N|,Renca|santiago metropolitan|CL|-70.71|-33.4|147|W|,Renfrew-Collingwood|BC|CA|-123.04|49.24|51|N|,Rengasdengklok|west java|ID|107.3|-6.16|201|W|,Rennes|brittany|FR|-1.67|48.11|227|W|,Reno|NV|US|-119.81|39.53|264|NW|,Renton|WA|US|-122.22|47.48|100|N|,Repentigny|QC|CA|-73.45|45.74|84|N|,Reseda|CA|US|-118.54|34.2|65|N|,Resende|rio de janeiro|BR|-44.45|-22.47|137|W|,Resistencia|chaco|AR|-58.99|-27.46|290|W|ciudad de resistencia,Reston|VA|US|-77.34|38.97|58|N|,Revere|MA|US|-71.01|42.41|53|N|,Rewa|madhya pradesh|IN|81.29|24.53|235|W|,Rewari|haryana|IN|76.62|28.2|143|W|,Rexburg|ID|US|-111.79|43.83|27|N|,Reynoldsburg|OH|US|-82.81|39.95|37|N|,Reynosa|MX28|MX|-98.28|26.08|589|NW|,Rhawnhurst|PA|US|-75.06|40.06|25|N|,Rialto|CA|US|-117.37|34.11|103|N|,Ribeirao das Neves|minas gerais|BR|-44.09|-19.77|346|W|,Ribeirao Preto|sao paulo|BR|-47.81|-21.18|698|W|ribeirao,Richards Bay|kwazulu natal|ZA|32.04|-28.78|252|W|,Richardson|TX|US|-96.73|32.95|110|N|,Richfield|MN|US|-93.28|44.88|36|N|,Richland|WA|US|-119.28|46.29|54|N|,Richmond|VA|US|-77.46|37.55|226|NW|,Richmond|BC|CA|-123.14|49.17|209|NW|,Richmond|CA|US|-122.35|37.94|109|N|,Richmond|IN|US|-84.89|39.83|35|N|,Richmond|KY|US|-84.29|37.75|33|N|,Richmond Hill|ON|CA|-79.44|43.87|202|NW|,Richmond Hill|NY|US|-73.83|40.7|98|N|,Richmond West|FL|US|-80.43|25.61|35|N|,Ridgecrest|CA|US|-117.67|35.62|28|N|,Ridgewood|NY|US|-73.91|40.7|69|N|,Ridgewood|NJ|US|-74.12|40.98|25|N|,Riga|riga|LV|24.11|56.95|742|W|riika;ryga,Rimini|emilia romagna|IT|12.57|44.06|148|W|,Rimouski|QC|CA|-68.52|48.45|42|N|,Rincon de Romos|MX01|MX|-102.32|22.23|27|N|,Rio Blanco|MX30|MX|-97.16|18.83|40|N|,Rio Branco|acre|BR|-67.81|-9.97|419|W|,Rio Claro|sao paulo|BR|-47.56|-22.41|201|W|,Rio Cuarto|cordoba|AR|-64.35|-33.13|157|W|ciudad de rio cuarto,Rio das Ostras|rio de janeiro|BR|-41.95|-22.53|168|W|,Rio de Janeiro|rio de janeiro|BR|-43.18|-22.91|6747|W|,Rio de Teapa|MX27|MX|-92.9|17.77|26|N|,Rio Grande|rio grande do sul|BR|-52.1|-32.03|198|W|,Rio Grande|MX32|MX|-103.03|23.83|32|N|,Rio Pequeno|sao paulo|BR|-46.76|-23.57|131|W|,Rio Rancho|NM|US|-106.66|35.23|87|N|,Rio Verde|goias|BR|-50.93|-17.8|241|W|,Riobamba|chimborazo province|EC|-78.66|-1.67|264|W|,Riohacha|la guajira department|CO|-72.91|11.54|188|W|rio de la hacha,Rioverde|MX24|MX|-99.99|21.93|53|N|,Rishon LeTsiyyon|central district|IL|34.79|31.97|258|W|rishon leziyyon;rischon lezion;rishon le zion;rishon lezion;rishon letsiyon;rishon lsiyon;rishon le siyon;rishon le ziyon;risjon letsion;riszon le cijjon,Riverside|CA|US|-117.4|33.95|317|NW|,Riverton|UT|US|-111.94|40.52|41|N|,Riverview|FL|US|-82.33|27.87|71|N|,Riviera Beach|FL|US|-80.06|26.78|34|N|,Riviere-des-Prairies-Pointe-aux-Trembles|QC|CA|-73.58|45.64|113|N|,Rivne|rivne oblast|UA|26.24|50.62|243|W|riwne;rowne,Riyadh|riyadh region|SA|46.72|24.69|4205|W|riad;riade;rijad;riyad,Rizhao|shandong|CN|119.53|35.41|661|W|z cao,Roanoke|VA|US|-79.94|37.27|100|N|,Robertsonpet|karnataka|IN|78.28|12.96|162|W|robertson pet,Rochester|NY|US|-77.62|43.15|209|NW|,Rochester|MN|US|-92.47|44.02|112|N|,Rochester|NH|US|-70.98|43.3|30|N|,Rochester Hills|MI|US|-83.15|42.66|73|N|,Rock Forest|QC|CA|-72|45.36|35|N|,Rock Hill|SC|US|-81.03|34.92|71|N|,Rock Island|IL|US|-90.58|41.51|38|N|,Rockford|IL|US|-89.09|42.27|148|NW|,Rocklin|CA|US|-121.24|38.79|61|N|,Rockville|MD|US|-77.15|39.08|66|N|hungerford s tavern;hungerfords;hungerfords tavern;montgomery court house;montgomery courthouse;owen s ordinary;williamsburg;williamsburgh,Rockwall|TX|US|-96.46|32.93|42|N|,Rocky Mount|NC|US|-77.79|35.94|55|N|,Rodriguez|calabarzon|PH|121.2|14.76|134|W|,Rogers|AR|US|-94.12|36.33|63|N|,Rogers Park|IL|US|-87.67|42.01|54|N|,Rohini|delhi|IN|77.07|28.74|860|W|,Rohnert Park|CA|US|-122.7|38.34|42|N|,Rohtak|haryana|IN|76.59|28.89|374|W|,Rome|lazio|IT|12.51|41.89|2318|W|rom;roma;rooma;rzym;rim,Rome|GA|US|-85.16|34.26|36|N|,Rome|NY|US|-75.46|43.21|32|N|roma,Romeoville|IL|US|-88.09|41.65|39|N|,Rondonopolis|mato grosso|BR|-54.64|-16.47|263|W|,Roodepoort|gauteng|ZA|27.87|-26.16|326|W|,Rosario|santa fe|AR|-60.64|-32.95|948|W|,Rosarito|MX02|MX|-117.05|32.36|100|N|rosario;rosarito beach baja,Rosedale|NY|US|-73.74|40.66|25|N|,Rosemead|CA|US|-118.07|34.08|54|N|,Rosemont-La Petite-Patrie|QC|CA|-73.61|45.54|146|NW|,Rosenberg|TX|US|-95.81|29.56|35|N|,Rosetta|beheira|EG|30.42|31.4|301|W|rasyid;resid;roseta;rosette,Roseville|CA|US|-121.29|38.75|130|NW|,Roseville|MI|US|-82.94|42.5|47|N|,Roseville|MN|US|-93.16|45.01|35|N|,Roslindale|MA|US|-71.12|42.29|27|N|,Rostock|mecklenburg vorpommern|DE|12.14|54.09|198|W|,Rostov-on-Don|rostov|RU|39.71|47.22|1130|W|rostov na donu;rostow am don;rostov aan de don;rostov del don;rostov do don;rostov sul don;rostov tren song dong;rostov ved don;rostov pe don;rostov sur le don;rostow nad donem,Roswell|GA|US|-84.36|34.02|94|N|,Roswell|NM|US|-104.52|33.39|48|N|,Rotterdam|south holland|NL|4.48|51.92|868|W|roterdao;roterdam,Rouge|ON|CA|-79.17|43.8|46|N|,Round Lake Beach|IL|US|-88.09|42.37|27|N|,Round Rock|TX|US|-97.68|30.51|115|N|,Rourkela|odisha|IN|84.86|22.22|273|W|,Rowland Heights|CA|US|-117.91|33.98|48|N|,Rowlett|TX|US|-96.56|32.9|60|N|,Roxas City|western visayas|PH|122.75|11.59|185|W|,Roy|UT|US|-112.03|41.16|37|N|,Royal Oak|MI|US|-83.14|42.49|59|N|,Royal Palm Beach|FL|US|-80.23|26.71|37|N|,Rubidoux|CA|US|-117.41|34|34|N|,Rubtsovsk|altai krai|RU|81.21|51.51|161|W|roebtsovsk;roubtsovsk;rubcovsk;rubcowsk;rubzowsk;rubtovsk,Ruda Slaska|silesia|PL|18.86|50.26|146|W|ruda o s,Rudrapur|uttarakhand|IN|79.4|28.98|154|W|,Rufisque|dakar|SN|-17.27|14.72|295|W|,Rufisque est|dakar|SN|-17.27|14.72|221|W|,Rugao|jiangsu|CN|120.58|32.37|257|W|,Rui'an|zhejiang|CN|120.66|27.78|927|W|,Ruiru|kiambu county|KE|36.96|-1.15|490|W|,Ruqi|awdal|SO|43.43|9.97|148|W|,Russeifa|zarqa|JO|36.05|32.02|268|W|ar rusajfa;rusajfa;ruseyfa,Russellville|AR|US|-93.13|35.28|29|N|,Rustenburg|north west|ZA|27.24|-25.67|373|W|rustemburgo,Rutchenkivskyi|donetsk|UA|37.7|47.98|168|W|rutchenkivskyi district;rutchenkivskyi rayon;rutchenkove;kirovskyi;kirovskyi rayon,Rutland|BC|CA|-119.39|49.9|34|N|,Ryazan'|ryazan oblast|RU|39.7|54.63|538|W|rjazan;riazan;rjasan,Rybinsk|yaroslavl oblast|RU|38.84|58.05|216|W|ribinsk,Rybnik|silesia|PL|18.54|50.1|142|W|,Rzeszow|subcarpathia|PL|22|50.04|198|W|resov,'s-Hertogenbosch|north brabant|NL|5.3|51.7|160|W|den bosch;bois le duc;bolduque;boscoducale;hertogenbosch;herzogenbusch,Sa Dec|dong thap|VN|105.76|10.29|214|W|,Saaba|centre|BF|-1.41|12.37|136|W|,Saanich|BC|CA|-123.37|48.55|117|N|,Saarbruecken|saarland|DE|7.01|49.23|182|W|saarbrucken;sarrebruck,Sabadell|catalonia|ES|2.11|41.54|211|W|,Sabah as Salim|mubarak al kabir|KW|48.06|29.26|139|W|sabah al salem,Sabha|sabha district|LY|14.43|27.04|149|W|sebha,Sabinas|MX07|MX|-101.12|27.86|54|N|ciudad sabinas,Sabya|jazan region|SA|42.63|17.15|228|W|,Sabzevar|razavi khorasan|IR|57.68|36.21|243|W|sabzawar;sabzewar;sebzevar,Sacaba|cochabamba|BO|-66.04|-17.4|180|W|,Sacoma|sao paulo|BR|-46.6|-23.63|261|W|,Sacramento|CA|US|-121.49|38.58|524|NW|,Saddiqabad|punjab|PK|70.13|28.31|274|W|,Sadr City|baghdad|IQ|44.46|33.39|1211|W|,Safi|marrakesh safi|MA|-9.24|32.3|336|W|asfi;safim;asafi,Saga|saga|JP|130.3|33.23|233|W|saga shi,Sagamihara|kanagawa|JP|139.24|35.57|720|W|,Saginaw|MI|US|-83.95|43.42|49|N|,Saguenay|QC|CA|-71.07|48.42|148|NW|,Saham|al batinah north|OM|56.89|24.17|140|W|,Saharanpur|uttar pradesh|IN|77.55|29.97|484|W|,Saharsa|bihar|IN|86.6|25.87|156|W|,Sahiwal|punjab|PK|72.33|31.97|538|W|,Sahuarita|AZ|US|-110.96|31.96|25|N|,Sahuayo de Morelos|MX16|MX|-102.72|20.06|64|N|,Sai Mai|bangkok|TH|100.65|13.92|188|W|,Saida|saida|DZ|0.15|34.83|142|W|sa ida,Saidpur|rangpur division|BD|88.89|25.78|199|W|,Saint Charles|MO|US|-90.48|38.78|65|N|st charles,Saint Charles|MD|US|-76.94|38.6|36|N|st charles,Saint Clair Shores|MI|US|-82.89|42.5|59|N|st clair shores;saint clr shores,Saint Cloud|MN|US|-94.16|45.56|65|N|st cloud,Saint Cloud|FL|US|-81.28|28.25|35|N|st cloud,Saint-Constant|QC|CA|-73.57|45.37|27|N|,Saint-Denis|reunion|RE|55.45|-20.88|154|W|saint denis de la reunion;st denis,Saint-Etienne|rhone alpes|FR|4.39|45.43|176|W|st etienne,Saint-Eustache|QC|CA|-73.91|45.56|42|N|,Saint George|UT|US|-113.58|37.1|72|N|st george,Saint-Georges|QC|CA|-70.67|46.11|31|N|,Saint-Hubert|QC|CA|-73.42|45.5|82|N|,Saint-Hyacinthe|QC|CA|-72.96|45.63|50|N|st hyacinthe,Saint-Jean-sur-Richelieu|QC|CA|-73.26|45.31|98|N|,Saint-Jerome|QC|CA|-74|45.78|54|N|,Saint John|NB|CA|-66.06|45.27|71|N|saint jean,Saint Joseph|MO|US|-94.85|39.77|76|N|st joseph,Saint-Laurent|QC|CA|-73.67|45.5|98|N|st laurent,Saint-Leonard|QC|CA|-73.6|45.59|79|N|,Saint-Louis|saint louis|SN|-16.49|16.02|254|W|,Saint-Louis-de-Terrebonne|QC|CA|-73.79|45.7|119|N|,Saint Louis Park|MN|US|-93.35|44.95|45|N|st louis park,Saint-Marc|artibonite|HT|-72.7|19.11|266|W|,Saint-Michel|QC|CA|-73.62|45.57|56|N|,Saint Paul|MN|US|-93.09|44.94|303|NW|st paul,Saint Peters|MO|US|-90.63|38.8|52|N|city of saint peters,Saint Petersburg|st petersburg|RU|30.31|59.94|5351|W|pietari;san petersburgo;st petersburg;petrohrad;saint petersbourg;san pietroburgo;sankt peterburg;sankt petersborg;sankt petersburg;sint petersburg;sao petersburgo;leningrad;leningrado;petrograd;petrogrado,Saint-Quentin-en-Yvelines|ile de france|FR|2.02|48.77|146|W|,Sainte-Foy|QC|CA|-71.29|46.78|111|N|,Sainte-Julie|QC|CA|-73.33|45.58|29|N|,Sainte-Therese|QC|CA|-73.83|45.64|25|N|,Saitama|saitama|JP|139.66|35.91|1324|W|,Sakai|osaka|JP|135.47|34.58|826|W|,Saki|oyo state|NG|3.39|8.67|178|W|,Sakura|chiba|JP|140.23|35.72|173|W|,Salaberry-de-Valleyfield|QC|CA|-74.13|45.25|42|N|,Salalah|dhofar|OM|54.09|17.02|163|W|salala,Salamanca|MX11|MX|-101.2|20.57|160|NW|,Salamanca|madrid|ES|-3.68|40.43|147|W|,Salamanca|castille and leon|ES|-5.66|40.97|144|W|salamanka;salamanque,Salatiga|central java|ID|110.49|-7.33|198|W|,Salavat|bashkortostan republic|RU|55.91|53.38|159|W|salauat;salawat,Sale|rabat sale kenitra|MA|-6.8|34.05|972|W|sala,Sale Al Jadida|rabat sale kenitra|MA|-6.74|34|200|W|,Salem|tamil nadu|IN|78.16|11.65|917|W|selam,Salem|OR|US|-123.04|44.94|175|NW|,Salem|MA|US|-70.9|42.52|42|N|,Salem|NH|US|-71.2|42.79|29|N|,Salem|VA|US|-80.05|37.29|25|N|,Salina|KS|US|-97.61|38.84|47|N|,Salina Cruz|MX20|MX|-95.19|16.18|84|N|,Salinas|CA|US|-121.66|36.68|157|NW|,Salisbury|NC|US|-80.47|35.67|34|N|,Salisbury|MD|US|-75.6|38.36|32|N|,Salt Lake City|UT|US|-111.89|40.76|215|NW|kota salt lake,Salta|salta|AR|-65.42|-24.81|520|W|ciudad de salta,Saltillo|MX07|MX|-100.98|25.43|709|NW|,Saltivka|kharkiv|UA|36.35|50.02|409|W|saltivskyi masyv,Salto|sao paulo|BR|-47.29|-23.2|141|W|,Salvador|bahia|BR|-38.49|-12.98|2711|W|salvador de bahia,Salvatierra|MX11|MX|-100.88|20.22|37|N|,Salzburg|state of salzburg|AT|13.04|47.8|157|W|salcburk;salisburgo;salzbourg;salzburgo,Samalut|minya|EG|30.71|28.31|142|W|,Samambaia|federal district|BR|-48.1|-15.88|218|W|,Samara|samara oblast|RU|50.14|53.21|1163|W|kuibyschew;kuibyshev;kuybyshev,Samarinda|east kalimantan|ID|117.15|-0.49|865|W|kota samarinda,Samarkand|samarqand region|UZ|66.96|39.65|595|W|samarcanda;samarcande;samarkanda;samarqand;semerkant,Samarra'|salah ad din|IQ|43.89|34.2|158|W|,Samba|luanda|AO|13.2|-8.88|364|W|,Sambalpur|odisha|IN|83.98|21.47|189|W|,Sambhal|uttar pradesh|IN|78.57|28.58|196|W|,Sambizanga|luanda|AO|13.28|-8.79|177|W|sambizanha,Sammamish|WA|US|-122.08|47.64|52|N|,Sampit|central kalimantan|ID|112.95|-2.53|166|W|,Samsun|samsun|TR|36.34|41.28|394|W|,Samut Prakan|samut prakan|TH|100.6|13.6|388|W|mueang samut prakan;paknam,San Agustin|MX14|MX|-103.47|20.55|30|N|colonia san agustin,San Andres Cholula|MX21|MX|-98.3|19.05|39|N|,San Andres Tuxtla|MX30|MX|-95.21|18.45|61|N|,San Angelo|TX|US|-100.44|31.46|99|N|,San Antonio|TX|US|-98.49|29.42|1526|NW|,San Bernardino|CA|US|-117.29|34.11|216|NW|,San Bernardino Tlaxcalancingo|MX21|MX|-98.28|19.03|54|N|,San Bernardo|santiago metropolitan|CL|-70.7|-33.59|249|W|,San Blas-Canillejas|madrid|ES|-3.62|40.44|157|W|,San Bruno|CA|US|-122.41|37.63|43|N|,San Buenaventura|MX15|MX|-98.86|19.3|44|N|,San Carlos|CA|US|-122.26|37.51|29|N|,San Clemente|CA|US|-117.61|33.43|65|N|,San Cristobal|tachira|VE|-72.24|7.77|289|W|,San Cristobal|san cristobal|DO|-70.11|18.42|154|W|,San Cristobal de las Casas|MX05|MX|-92.64|16.73|215|NW|san cristobal,San Diego|CA|US|-117.16|32.72|1404|NW|,San Dimas|CA|US|-117.81|34.11|34|N|,San Felipe|yaracuy|VE|-68.74|10.34|206|W|,San Felipe|MX11|MX|-101.22|21.48|28|N|,San Fernando|central luzon|PH|120.68|15.03|251|W|kota san fernando;san fernando city,San Fernando|MX28|MX|-98.15|24.85|29|N|,San Fernando de Apure|apure|VE|-67.47|7.89|229|W|san fernando,San Francisco|CA|US|-122.42|37.77|827|NW|sao francisco,San Francisco Acuautla|MX15|MX|-98.86|19.35|27|N|acuautla,San Francisco del Rincon|MX11|MX|-101.86|21.02|71|N|,San Francisco Tesistan|MX14|MX|-103.48|20.8|62|N|,San Gabriel|CA|US|-118.11|34.1|40|N|sao gabriel,San Isidro|MX15|MX|-98.95|19.34|33|N|,San Jacinto|CA|US|-116.96|33.78|46|N|,San Jeronimo|MX15|MX|-99.59|19.28|26|N|,San Jeronimo Cuatro Vientos|MX15|MX|-98.84|19.29|36|N|,San Jose|CA|US|-121.89|37.34|997|NW|,San Jose|san jose|CR|-84.08|9.93|335|W|,San Jose|mimaropa|PH|121.07|12.35|143|W|,San Jose del Cabo|MX03|MX|-109.7|23.05|136|NW|,San Jose del Castillo|MX14|MX|-103.24|20.51|39|N|,San Jose del Monte|central luzon|PH|121.05|14.81|357|W|kota san jose del monte;san jose del monte city,San Jose Guadalupe Otzacatipan|MX15|MX|-99.59|19.34|31|N|,San Juan|san juan|PR|-66.11|18.47|418|W|,San Juan|national capital region|PH|121.03|14.6|134|W|san juan city,San Juan|TX|US|-98.16|26.19|36|N|,San Juan Capistrano|CA|US|-117.66|33.5|36|N|,San Juan de los Lagos|MX14|MX|-102.33|21.25|48|N|,San Juan de los Morros|guarico|VE|-67.35|9.91|160|W|,San Juan del Rio|MX22|MX|-100|20.39|138|NW|,San Juan Sacatepequez|guatemala|GT|-90.64|14.72|136|W|,San Leandro|CA|US|-122.16|37.72|90|N|,San Lorenzo|central department|PY|-57.51|-25.34|227|W|,San Luis|san luis|AR|-66.32|-33.29|169|W|ciudad de san luis,San Luis|AZ|US|-114.78|32.49|31|N|,San Luis de la Paz|MX11|MX|-100.51|21.3|49|N|,San Luis Obispo|CA|US|-120.66|35.28|47|N|,San Luis Potosi|MX24|MX|-100.97|22.15|722|NW|san luis potosi city,San Luis Rio Colorado|MX26|MX|-114.77|32.46|176|NW|,San Marcos|CA|US|-117.17|33.14|92|N|,San Marcos|TX|US|-97.94|29.88|60|N|,San Martin|piura|PE|-80.67|-5.19|130|W|,San Martin Azcatepec|MX15|MX|-98.97|19.69|35|N|,San Martin Texmelucan de Labastida|MX21|MX|-98.44|19.28|155|NW|san martin texmelucan,San Mateo|calabarzon|PH|121.12|14.7|134|W|,San Mateo|CA|US|-122.33|37.56|103|N|,San Mateo Atenco|MX15|MX|-99.53|19.27|67|N|,San Miguel|san miguel department|SV|-88.18|13.48|247|W|,San Miguel|buenos aires|AR|-58.71|-34.54|168|W|,San Miguel Ajusco|MX09|MX|-99.2|19.22|29|N|,San Miguel de Allende|MX11|MX|-100.74|20.92|174|NW|,San Miguel de Tucuman|tucuman|AR|-65.21|-26.82|548|W|tucuman,San Miguel del Padron|havana|CU|-82.33|23.1|159|W|,San Miguel Topilejo|MX09|MX|-99.14|19.2|34|N|,San Miguelito|panama|PA|-79.47|9.05|321|W|,San Nicolas de los Arroyos|buenos aires|AR|-60.21|-33.33|134|W|san nicolas,San Nicolas de los Garza|MX19|MX|-100.3|25.74|412|NW|san nicolas de los garzas,San Pablo|calabarzon|PH|121.33|14.07|300|W|san pablo city,San Pablo|CA|US|-122.35|37.96|30|N|,San Pablo Autopan|MX15|MX|-99.66|19.36|35|N|,San Pablo de las Salinas|MX15|MX|-99.09|19.67|156|NW|san pablo,San-Pedro|bas sassandra district|CI|-6.64|4.75|390|W|,San Pedro|calabarzon|PH|121.05|14.36|348|W|,San Pedro|CA|US|-118.29|33.74|83|N|san pedro y san pablo,San Pedro|MX07|MX|-102.98|25.76|48|N|san pedro de las colonias,San Pedro de Macoris|san pedro de macoris|DO|-69.31|18.45|217|W|,San Pedro Garza Garcia|MX19|MX|-100.4|25.66|132|NW|garza garcia;san pedro,San Pedro Sula|cortes department|HN|-88.03|15.51|801|W|,San Rafael|CA|US|-122.53|37.97|59|N|sao rafael,San Ramon|CA|US|-121.98|37.78|76|N|,San Salvador|san salvador department|SV|-89.19|13.69|525|W|salvador;san salwador,San Salvador de Jujuy|jujuy|AR|-65.29|-24.19|257|W|,San Salvador Tizatlalli|MX15|MX|-99.59|19.26|61|N|,San Sebastian|basque country|ES|-1.97|43.31|185|W|donostia;la bella easo;saint sebastien;sanse;sao sebastiao,San Sebastian el Grande|MX14|MX|-103.43|20.53|28|N|,San Tan Valley|AZ|US|-111.53|33.19|81|N|,Sanaa|amanat alasimah|YE|44.21|15.35|1937|W|san a;sana;sana a,Sanandaj|kurdistan province|IR|47|35.31|349|W|sanandadsch;sanandadz;sanandij;senendec,Sancaktepe|istanbul|TR|29.23|41|489|W|,Sanctorum|MX21|MX|-98.25|19.1|27|N|,Sandacho|hyogo|JP|135.23|34.88|132|W|,Sandakan|sabah|MY|118.12|5.84|439|W|,Sandusky|OH|US|-82.71|41.45|25|N|,Sandy|UT|US|-111.88|40.59|87|N|sandy city,Sandy Hills|UT|US|-111.85|40.58|89|N|,Sandy Springs|GA|US|-84.38|33.92|105|N|,Sanford|FL|US|-81.27|28.8|58|N|,Sanford|NC|US|-79.18|35.48|29|N|,Sangli|maharashtra|IN|74.56|16.85|601|W|turmeric city,Sanhe|hebei|CN|117.07|39.98|965|W|,Sanhe|chongqing|CN|107.73|29.87|140|W|fengdu xian;fengtuhein,Sanliurfa|sanliurfa|TR|38.79|37.17|449|W|sanli urfa;edesse;edesa;edessa,Sanmenxia|henan|CN|111.19|34.78|669|W|san men sia,Sanming|fujian|CN|117.62|26.25|602|W|san ming;tam minh,Sanshui|guangdong|CN|112.89|23.15|153|W|,Sant Andreu|catalonia|ES|2.19|41.44|142|W|distrito sant andreu,Sant Marti|catalonia|ES|2.2|41.42|235|W|distrito de sant marti,Santa Ana|CA|US|-117.87|33.75|310|NW|,Santa Ana|santa ana department|SV|-89.56|13.99|176|W|,Santa Ana Chiautempan|MX29|MX|-98.19|19.31|48|N|,Santa Anita - Los Ficus|lima region|PE|-76.97|-12.05|184|W|,Santa Barbara|CA|US|-119.7|34.42|91|N|,Santa Barbara d'Oeste|sao paulo|BR|-47.41|-22.75|189|W|,Santa Catarina|MX19|MX|-100.46|25.67|304|NW|ciudad santa catarina,Santa Clara|villa clara province|CU|-79.97|22.41|250|W|,Santa Clara|CA|US|-121.96|37.35|126|N|,Santa Clarita|CA|US|-118.54|34.39|182|NW|,Santa Cruz|CA|US|-122.03|36.97|64|N|,Santa Cruz de la Sierra|santa cruz department|BO|-63.18|-17.79|1831|W|santa cruz;santa cruz da serra,Santa Cruz de Tenerife|canary islands|ES|-16.25|28.47|211|W|tenerife;teneriffa,Santa Cruz do Sul|rio grande do sul|BR|-52.43|-29.72|138|W|,Santa Cruz Xoxocotlan|MX20|MX|-96.74|17.03|67|N|santa cruz;xoxocotlan,Santa Fe|santa fe|AR|-60.71|-31.65|391|W|ciudad de santa fe,Santa Fe|NM|US|-105.94|35.69|87|N|,Santa Isabel|MX02|MX|-115.57|32.63|29|N|,Santa Luzia|minas gerais|BR|-43.85|-19.77|219|W|,Santa Maria|rio grande do sul|BR|-53.81|-29.68|271|W|,Santa Maria|CA|US|-120.44|34.95|105|N|,Santa Maria Chimalhuacan|MX15|MX|-98.95|19.42|70|N|,Santa Marta|magdalena department|CO|-74.19|11.24|499|W|,Santa Monica|CA|US|-118.49|34.02|93|N|,Santa Paula|CA|US|-119.06|34.35|30|N|,Santa Rita|paraiba|BR|-34.98|-7.11|149|W|,Santa Rosa|calabarzon|PH|121.11|14.31|216|W|kota santa rosa;santa rosa city,Santa Rosa|CA|US|-122.71|38.44|178|NW|,Santa Rosa Beach|FL|US|-86.23|30.4|32|N|,Santa Rosalia de Camargo|MX06|MX|-105.17|27.68|40|N|,Santa Teresa|MX15|MX|-99.23|19.84|36|N|,Santa Teresa del Tuy|miranda|VE|-66.66|10.23|278|W|,Santana de Parnaiba|sao paulo|BR|-46.92|-23.44|163|W|,Santander|cantabria|ES|-3.8|43.47|173|W|,Santarem|para|BR|-54.71|-2.44|360|W|,Santee|CA|US|-116.97|32.84|57|N|,Santiago|santiago metropolitan|CL|-70.65|-33.46|4837|W|santiago de chile;santiago del cile;santiago do chile;santiago du chili,Santiago|MX19|MX|-100.15|25.43|36|N|villa de santiago,Santiago de Cuba|santiago de cuba province|CU|-75.82|20.02|555|W|santiago di cuba,Santiago de los Caballeros|santiago province|DO|-70.69|19.45|1200|W|santiago,Santiago de Queretaro|MX22|MX|-100.39|20.59|1594|NW|queretaro city,Santiago de Surco|lima region|PE|-77.01|-12.14|251|W|,Santiago del Estero|santiago del estero|AR|-64.26|-27.8|252|W|,Santiago Papasquiaro|MX10|MX|-105.42|25.04|26|N|,Santiago Teyahualco|MX15|MX|-99.12|19.66|53|N|teyahualco,Santo Andre|sao paulo|BR|-46.54|-23.66|662|W|,Santo Domingo|nacional|DO|-69.89|18.47|2201|W|saint domingue;santo domingo city;ciudad trujillo,Santo Domingo de los Colorados|santo domingo de los tsachilas|EC|-79.18|-0.25|458|W|santo domingo,Santo Domingo Este|santo domingo province|DO|-69.85|18.49|700|W|,Santo Domingo Oeste|santo domingo province|DO|-70|18.5|701|W|,Santo Domingo Tehuantepec|MX20|MX|-95.24|16.32|67|N|,Santol|central luzon|PH|120.57|15.16|298|W|,Santos|sao paulo|BR|-46.33|-23.96|418|W|baixada santista,Sants-Montjuic|catalonia|ES|2.15|41.37|183|W|,Sanya|hainan|CN|109.51|18.25|1031|W|san ja;tam a,Sao Bernardo do Campo|sao paulo|BR|-46.56|-23.69|840|W|,Sao Caetano do Sul|sao paulo|BR|-46.55|-23.62|172|W|,Sao Carlos|sao paulo|BR|-47.89|-22.02|266|W|,Sao Felix do Xingu|para|BR|-51.99|-6.64|132|W|,Sao Joao de Meriti|rio de janeiro|BR|-43.37|-22.8|466|W|,Sao Jose|santa catarina|BR|-48.63|-27.62|295|W|,Sao Jose de Ribamar|maranhao|BR|-44.06|-2.56|259|W|,Sao Jose do Rio Preto|sao paulo|BR|-49.38|-20.82|480|W|rio preto,Sao Jose dos Campos|sao paulo|BR|-45.89|-23.18|727|W|sjcampos;vale paraiba;vale do paraiba,Sao Jose dos Pinhais|parana|BR|-49.21|-25.53|349|W|,Sao Leopoldo|rio grande do sul|BR|-51.15|-29.76|209|W|,Sao Lucas|sao paulo|BR|-46.54|-23.59|138|W|,Sao Luis|maranhao|BR|-44.3|-2.53|917|W|maranham,Sao Mateus|sao paulo|BR|-46.48|-23.61|155|W|,Sao Mateus|espirito santo|BR|-39.86|-18.72|134|W|,Sao Paulo|sao paulo|BR|-46.64|-23.55|12400|W|san paolo;sao paulo capital,Sao Rafael|sao paulo|BR|-46.45|-23.63|148|W|,Sao Vicente|sao paulo|BR|-46.39|-23.96|338|W|,Sapele|delta|NG|5.68|5.89|305|W|,Sapopemba|sao paulo|BR|-46.52|-23.6|266|W|,Sapporo|hokkaido|JP|141.35|43.07|1973|W|sapporo shi;sapporoshi,Sapucaia do Sul|rio grande do sul|BR|-51.15|-29.82|132|W|,Saqqez|kurdistan province|IR|46.27|36.25|165|W|saggiz;saghghez,Sarajevo|federation of b h|BA|18.36|43.85|696|W|sarajewo;saraybosna,Saransk|mordoviya republic|RU|45.17|54.18|318|W|,Sarasota|FL|US|-82.53|27.34|55|N|,Saratoga|CA|US|-122.02|37.26|30|N|,Saratoga Springs|NY|US|-73.78|43.08|27|N|saratoga spgs,Saratoga Springs|UT|US|-111.9|40.35|25|N|,Saratov|saratov oblast|RU|45.99|51.54|844|W|saratow,Sargodha|punjab|PK|72.67|32.09|975|W|,Sarh|moyen chari|TD|18.38|9.15|138|W|,Sari|mazandaran|IR|53.06|36.56|255|W|,Sariwon-si|north hwanghae|KP|125.76|38.51|310|W|sariwon,Sarnia|ON|CA|-82.4|42.98|72|N|,Sarria-Sant Gervasi|catalonia|ES|2.14|41.4|147|W|,Sasaram|bihar|IN|84.02|24.95|147|W|,Sasebo|nagasaki|JP|129.73|33.17|243|W|,Saskatoon|SK|CA|-106.67|52.13|266|NW|,Sasolburg|free state|ZA|27.82|-26.81|135|W|,Satna|madhya pradesh|IN|80.83|24.58|282|W|,Saugor|madhya pradesh|IN|78.74|23.84|274|W|,Saugus|MA|US|-71.01|42.46|26|N|,Sault Ste. Marie|ON|CA|-84.33|46.52|72|N|sault sainte marie,Saurimo|lunda sul|AO|20.39|-9.66|393|W|,Savage|MN|US|-93.34|44.78|30|N|,Savannah|GA|US|-81.1|32.08|147|NW|,Savar|dhaka division|BD|90.25|23.85|286|W|sabhar;savar upazila,Saveh|markazi|IR|50.36|35.02|220|W|,Sawangan|west java|ID|106.77|-6.4|197|W|,Sawtelle|CA|US|-118.45|34.04|39|N|,Sayama|saitama|JP|139.41|35.85|160|W|,Sayreville|NJ|US|-74.36|40.46|44|N|,Sayreville Junction|NJ|US|-74.33|40.47|42|N|,Sayula|MX14|MX|-103.6|19.88|26|N|,Schaerbeek|brussels capital|BE|4.38|50.87|132|W|schaarbeek;schaerbeek schaarbeek,Schaumburg|IL|US|-88.08|42.03|74|N|,Schenectady|NY|US|-73.94|42.81|65|N|,Schererville|IN|US|-87.45|41.48|28|N|,Schertz|TX|US|-98.27|29.55|43|N|,Scottsdale|AZ|US|-111.9|33.51|236|NW|,Scranton|PA|US|-75.66|41.41|77|N|,Seaside|CA|US|-121.85|36.61|33|N|,SeaTac|WA|US|-122.29|47.45|28|N|,Seattle|WA|US|-122.33|47.61|780|NW|,Sector 1|bucharest|RO|26.05|44.49|225|W|,Sector 2|bucharest|RO|26.13|44.45|290|W|,Sector 3|bucharest|RO|26.17|44.42|385|W|,Sector 4|bucharest|RO|26.12|44.38|287|W|,Sector 5|bucharest|RO|26.07|44.39|271|W|,Sector 6|bucharest|RO|26.02|44.44|367|W|,Secunderabad|telangana|IN|78.54|17.5|204|W|,Security-Widefield|CO|US|-104.71|38.75|32|N|,Seeb|muscat|OM|58.19|23.67|470|W|as sib;sib,Segou|segou|ML|-6.26|13.44|205|W|segu,Seguin|TX|US|-97.96|29.57|27|N|,Sejong|sejong si|KR|127.29|36.59|394|W|sedzong;yeongi,Sekondi|western|GH|-1.71|4.93|285|W|,Sekondi-Takoradi|western|GH|-1.76|4.93|138|W|sekondi,Selayang Baru Utara|selangor|MY|101.67|3.25|542|W|,Semarang|central java|ID|110.42|-6.99|1694|W|kota semarang,Semey|abai region|KZ|80.25|50.42|292|W|semei;semej;alash kala;semipalatinsk,Senador Canedo|goias|BR|-49.09|-16.71|175|W|,Sendai|miyagi|JP|140.87|38.27|1096|W|,Sengkang New Town||SG|103.89|1.39|267|W|sengkang,Sennar|sennar|SD|33.57|13.57|130|W|sannar;sinnar,Seogwipo|jeju do|KR|126.56|33.25|178|W|,Seongnam-si|gyeonggi do|KR|127.14|37.44|914|W|seongnam,Seoul|seoul|KR|126.98|37.57|10349|W|seoel;seoul si;seul;soul;hanyang,Sepang|selangor|MY|101.75|2.69|212|W|,Sept-Iles|QC|CA|-66.38|50.2|28|N|,Serang|banten|ID|106.15|-6.12|735|W|kabupaten serang,Serekunda|banjul|GM|-16.68|13.44|340|W|serrekunda,Seremban|negeri sembilan|MY|101.94|2.73|372|W|,Seri Kembangan|selangor|MY|101.72|3.03|130|W|,Serilingampalle|telangana|IN|78.3|17.49|150|W|,Serra|espirito santo|BR|-40.31|-20.13|520|W|,Setagaya|tokyo|JP|139.65|35.64|940|W|setagaya city,Setapak|selangor|MY|101.73|3.21|353|W|,Sete Lagoas|minas gerais|BR|-44.25|-19.47|238|W|,Setia Alam|selangor|MY|101.46|3.1|150|W|,Setif|setif|DZ|5.41|36.19|252|W|sathif;satif,Settat|casablanca settat|MA|-7.62|33|155|W|sattat,Sevastopol|sevastopol city|UA|33.52|44.61|547|W|akyar;sebastopol;sebastopoli;sewastopol;sivastopol,Severn|MD|US|-76.7|39.14|44|N|,Severna Park|MD|US|-76.55|39.07|37|N|,Severnyy|moscow|RU|37.55|55.94|200|W|,Severodvinsk|arkhangelskaya|RU|39.83|64.56|194|W|sewerodwinsk;siewierodwinsk,Sevilla|andalusia|ES|-5.97|37.38|686|W|seville;sevilha;sevilia;sewilla;siviglia,Sewell|NJ|US|-75.14|39.77|37|N|,Sfax|sfax governorate|TN|10.76|34.74|280|W|safakes;safakis,Sha Tin|sha tin|HK|114.18|22.38|495|W|shatin,Shagamu|ogun state|NG|3.65|6.85|214|W|sagamu,Shah Alam|selangor|MY|101.53|3.09|740|W|,Shahin Shahr|isfahan|IR|51.55|32.86|173|W|,Shahjanpur|uttar pradesh|IN|79.91|27.88|320|W|shahjahanpur,Shahkot|punjab|PK|73.49|31.57|244|W|,Shahreza|isfahan|IR|51.86|32.01|134|W|,Shahriar|tehran|IR|51.06|35.66|309|W|,Shahrisabz|qashqadaryo|UZ|66.83|39.06|142|W|chakhrisabz;sachrisabz;sjachrisabz;sehr i sebz;sachrizabz,Shahrud|semnan|IR|54.98|36.42|165|W|emamshahr,Shahuwadi|maharashtra|IN|73.95|16.91|180|W|,Shaker Heights|OH|US|-81.54|41.47|27|N|,Shakhty|rostov|RU|40.22|47.72|221|W|chakhty;schachty;shajty;sjachty;sjakhty;szachty;sahti;sachty;sahty,Shakopee|MN|US|-93.53|44.8|39|N|,Sham Shui Po|sham shui po district|HK|114.16|22.33|431|W|,Shanghai|shanghai|CN|121.46|31.22|24874|W|schanghai;shangai;sjanghai;szanghaj;xangai;sangay;sanghay;sanghaj,Shangluo|shaanxi|CN|109.93|33.87|531|W|,Shangqiu|henan|CN|115.66|34.41|1859|W|,Shangrao|jiangxi|CN|117.94|28.45|1116|W|sang zao,Shangri-La|yunnan|CN|99.71|27.83|186|W|,Shangyu|zhejiang|CN|120.87|30.02|770|W|,Shangzhi|heilongjiang|CN|128|45.21|131|W|,Shanhaiguan|hebei|CN|119.75|40|140|W|,Shantipur|west bengal|IN|88.43|23.25|149|W|,Shantou|guangdong|CN|116.68|23.35|3838|W|san tchou,Shanwei|guangdong|CN|115.35|22.78|491|W|san vi;san wej,Shaoguan|guangdong|CN|113.58|24.8|1028|W|sao kuan,Shaoxing|zhejiang|CN|120.58|30|2300|W|sao sing,Shaoyang|hunan|CN|111.46|27.24|753|W|sao jang,Sharjah|sharjah|AE|55.41|25.33|1800|W|sharjah city;charjah;sarja;schardscha;sharja;szardza;sarika;sardza,Shashamane|oromiya|ET|38.6|7.2|208|W|shashemene,Shawinigan|QC|CA|-72.75|46.57|38|N|,Shawnee|KS|US|-94.72|39.04|65|N|,Shawnee|OK|US|-96.93|35.33|31|N|,Sheboygan|WI|US|-87.71|43.75|48|N|,Sheepshead Bay|NY|US|-73.94|40.59|122|N|,Sheffield|england|GB|-1.47|53.38|556|W|,Shekhupura|punjab|PK|73.99|31.71|591|W|sekhupura,Shelby|MI|US|-83.03|42.67|74|N|,Shelton|CT|US|-73.09|41.32|41|N|,Shengavit|yerevan|AM|44.48|40.16|140|W|,Shenglilu|chongqing|CN|105.88|29.35|134|W|,Shenyang|liaoning|CN|123.43|41.79|7050|W|sen jang,Shenzhen|guangdong|CN|114.07|22.55|17494|W|sen cen,Sherbrooke|QC|CA|-71.9|45.4|129|N|,Sherman|TX|US|-96.61|33.64|40|N|,Sherman Oaks|CA|US|-118.45|34.15|52|N|,Sherwood|AR|US|-92.22|34.82|30|N|,Sherwood Park|AB|CA|-113.32|53.52|70|N|,Shevchenkivskyi|kyiv city|UA|30.47|50.46|220|W|,Shevchenko|poltava|UA|34.54|49.56|147|W|shevchenkivskyi rayon,Shibganj|rajshahi division|BD|89.32|25|378|W|,Shibin al Kawm|monufia|EG|31.01|30.55|267|W|,Shibuya|tokyo|JP|139.71|35.66|230|W|shibuya city,Shihezi|xinjiang|CN|86.04|44.3|572|W|,Shijiazhuang|hebei|CN|114.48|38.04|3938|W|s tia cuang,Shijie|guangdong|CN|113.79|23.1|246|W|,Shikarpur|sindh|PK|68.64|27.96|204|W|,Shillong|meghalaya|IN|91.88|25.57|143|W|,Shimla|himachal pradesh|IN|77.17|31.1|173|W|simla,Shimonoseki|yamaguchi|JP|130.94|33.96|265|W|simonoseki,Shimotoda|saitama|JP|139.69|35.81|140|W|,Shinagawa|ehime|JP|133.01|33.64|422|W|shinagawa city,Shinjuku|tokyo|JP|139.71|35.69|349|W|,Shinyanga|shinyanga|TZ|33.42|-3.66|139|W|,Shiqi|guangdong|CN|113.39|22.52|342|W|,Shiqiao|guangdong|CN|113.36|22.95|135|W|,Shiraz|fars|IR|52.53|29.61|1249|W|schiras;chiraz;sziraz;xiraz;siraz,Shirley|NY|US|-72.87|40.8|27|N|,Shivaji Nagar|maharashtra|IN|73.85|18.53|1000|W|,Shivamogga|karnataka|IN|75.57|13.93|322|W|shimoga,Shivpuri|madhya pradesh|IN|77.66|25.42|179|W|,Shiyan|hubei|CN|110.78|32.65|3460|W|s jen,Shizuishan|ningxia|CN|106.39|38.98|739|W|,Shizuoka|shizuoka|JP|138.38|34.98|693|W|sizuoka,Sholapur|maharashtra|IN|75.91|17.67|997|W|solapur,Shomolu|lagos|NG|3.37|6.54|154|W|,Shoreline|WA|US|-122.34|47.76|55|N|,Shoreview|MN|US|-93.15|45.08|26|N|,Shouguang|shandong|CN|118.74|36.88|473|W|,Shreveport|LA|US|-93.75|32.53|187|NW|,Shrewsbury|MA|US|-71.71|42.3|33|N|,Shrirampur|west bengal|IN|88.34|22.75|226|W|serampore,Shuangcheng|heilongjiang|CN|126.31|45.38|130|W|,Shuangyashan|heilongjiang|CN|131.13|46.68|600|W|song ap son;suang ja san,Shubra al Khaymah|qalyubia|EG|31.25|30.13|1240|W|,Shuizhai|guangdong|CN|115.76|23.93|140|W|,Shujaabad|punjab|PK|71.29|29.88|151|W|,Shulin|taipei|TW|121.42|24.99|180|W|shulin district;sulin,Shunan|yamaguchi|JP|131.83|34.08|149|W|,Shuozhou|shanxi|CN|112.42|39.32|433|W|,Shyamnagar|west bengal|IN|88.37|22.83|441|W|,Shymkent|shymkent|KZ|69.6|42.31|1200|W|chymkent;schymkent;sjymkent;szymkent;tsjimkent;cimkent;simkent;symkent,Si Racha|chon buri|TH|100.93|13.17|178|W|,Sialkot|punjab|PK|74.53|32.49|911|W|sijalkot,Sibiu|sibiu county|RO|24.15|45.8|134|W|hermannstadt;sybin;sibin,Sibu|sarawak|MY|111.82|2.3|198|W|,Sicklerville|NJ|US|-74.97|39.72|42|N|,Sidi Bel Abbes|sidi bel abbes|DZ|-0.63|35.19|210|W|sidi belabbas;sidi bilabbas;sidi bu l abbas,Sidoarjo|east java|ID|112.72|-7.45|139|W|,Sidon|south governorate|LB|35.37|33.56|163|W|saida;sayda;sidone;sydon,Siem Reap|siem reap|KH|103.86|13.36|139|W|ciudad de siem riep;khett siem reab;siem reab,Sierra Vista|AZ|US|-110.3|31.55|43|N|,Siguiri|kankan region|GN|-9.17|11.42|148|W|,Sikar|rajasthan|IN|75.14|27.61|244|W|,Sikasso|sikasso|ML|-5.67|11.32|349|W|,Silao de la Victoria|MX11|MX|-101.43|20.94|74|N|silao,Silchar|assam|IN|92.8|24.83|178|W|,Silifke|mersin|TR|33.93|36.38|132|W|,Siliguri|west bengal|IN|88.43|26.71|515|W|shiliguri,Silver Lake|CA|US|-118.27|34.09|32|N|,Silver Spring|MD|US|-77.03|38.99|71|N|,Simele|duhok|IQ|42.85|36.86|152|W|,Simferopol|crimea|UA|34.11|44.96|336|W|simferopoli;akmescit;sinferopoli;symferopol,Simi Valley|CA|US|-118.78|34.27|126|N|,Sincelejo|sucre department|CO|-75.39|9.3|277|W|,Sinch'on-up|south hwanghae|KP|125.48|38.35|141|W|,Sinfra|zanzan district|CI|-5.91|6.62|245|W|,Singa|sennar|SD|33.93|13.15|250|W|sindscha;sindza,Singapore||SG|103.85|1.29|5638|W|singapour;singapur;singapura;danmaxi;temasek,Singaraja|bali|ID|115.09|-8.11|133|W|,Singida|singida|TZ|34.74|-4.82|232|W|,Singkawang|west kalimantan|ID|108.98|0.91|253|W|,Singosari|east java|ID|112.67|-7.89|182|W|,Singrauli|madhya pradesh|IN|82.68|24.2|220|W|,Sinjhoro|sindh|PK|68.81|26.03|354|W|,Sinnuris|faiyum|EG|30.87|29.41|133|W|,Sinop|mato grosso|BR|-55.5|-11.86|223|W|,Sinp'o|south hamgyong|KP|128.19|40.04|152|W|,Sinuiju|p yongan bukto|KP|124.4|40.1|288|W|,Sioux City|IA|US|-96.4|42.5|82|N|kota sioux,Sioux Falls|SD|US|-96.73|43.54|171|NW|,Siping|jilin|CN|124.38|43.16|555|W|s pching;ssupingkai,Sirjan|kerman|IR|55.68|29.45|199|W|sircan;sirdschan;sirdzan,Sirsa|haryana|IN|75.03|29.53|182|W|,Sisli|istanbul|TR|28.99|41.06|314|W|,Sitapur|uttar pradesh|IN|80.68|27.56|164|W|,Sitiawan|perak|MY|100.7|4.22|156|W|,Sittwe|rakhine|MM|92.9|20.15|177|W|akyab,Situbondo|east java|ID|114.01|-7.71|685|W|,Sivakasi|tamil nadu|IN|77.8|9.45|234|W|,Sivas|sivas|TR|37.02|39.75|264|W|,Siverek|sanliurfa|TR|39.32|37.76|175|W|,Siwan|bihar|IN|84.36|26.22|135|W|,Skardu|gilgit baltistan|PK|75.63|35.3|260|W|,Skikda|skikda|DZ|6.91|36.88|182|W|sukaikida;sukajkida,Skokie|IL|US|-87.73|42.03|64|N|,Skopje|grad skopje|MK|21.43|42|474|W|escopia;uskup,Skudai|johor|MY|103.66|1.54|159|W|,Slidell|LA|US|-89.78|30.28|27|N|,Slough|england|GB|-0.6|51.51|164|W|,Smithtown|NY|US|-73.2|40.86|26|N|,Smolensk|smolensk oblast|RU|32.05|54.78|330|W|,Smyrna|GA|US|-84.51|33.88|56|N|,Smyrna|TN|US|-86.52|35.98|46|N|,Snowdon|QC|CA|-73.63|45.49|32|N|,Soacha|cundinamarca|CO|-74.22|4.58|655|W|,Sobral|ceara|BR|-40.35|-3.69|216|W|,Soc Trang|can tho city|VN|105.97|9.6|221|W|,Sochi|krasnodar krai|RU|39.72|43.6|327|W|sotsji;soci;soczi;sotchi;sotji;sotschi;sotsi,Socorro|TX|US|-106.3|31.65|33|N|,Socorro Mission Number 1 Colonia|TX|US|-106.29|31.64|28|N|,Sodo|south ethiopia regional state|ET|37.76|6.86|204|W|,Sofia|sofia capital|BG|23.32|42.7|1152|W|sofie;sofya,Sohag|sohag|EG|31.69|26.56|266|W|sauhadz;sevhac,Soka|saitama|JP|139.8|35.84|249|W|,Sokoto|sokoto|NG|5.24|13.06|1040|W|,Soledad|atlantico|CO|-74.76|10.92|342|W|,Soledad|CA|US|-121.33|36.42|25|N|solebad,Soledad de Graciano Sanchez|MX24|MX|-100.94|22.19|332|NW|,Solingen|north rhine westphalia|DE|7.08|51.17|164|W|,Sollentuna|stockholm|SE|17.95|59.43|139|W|,Solwezi|north western|ZM|26.39|-12.17|301|W|solwesi,Somerset West|western cape|ZA|18.82|-34.08|225|W|somerset wes,Somerton|PA|US|-75.01|40.12|33|N|,Somerville|MA|US|-71.1|42.39|80|N|,Son Tay|hanoi|VN|105.51|21.14|230|W|,Sonargaon|dhaka division|BD|90.62|23.65|130|W|,Songcheng|fujian|CN|120|26.88|165|W|,Songea|ruvuma|TZ|35.65|-10.68|286|W|,Songjiang|shanghai|CN|121.22|31.03|1973|W|,Songnim-ni|north hwanghae|KP|125.64|38.76|152|W|,Sonipat|haryana|IN|77.02|28.99|289|W|,Sorel-Tracy|QC|CA|-73.11|46.04|41|N|sorel,Sorocaba|sao paulo|BR|-47.46|-23.5|762|W|,Sorong|southwest papua|ID|131.26|-0.88|219|W|kota sorong,Sorsogon|bicol region|PH|123.99|12.97|187|W|,Soshanguve|gauteng|ZA|28.1|-25.47|872|W|,Sosnowiec|silesia|PL|19.1|50.29|227|W|sosnovec,Soubre|bas sassandra district|CI|-6.59|5.78|131|W|,Souk Ahras|souk ahras|DZ|7.95|36.29|153|W|souq ahras;suk aharas;suk ahras,Sousse|sousse governorate|TN|10.64|35.83|221|W|susa,South Bel Air|MD|US|-76.34|39.53|48|N|,South Bend|IN|US|-86.25|41.68|101|N|,South Boston|MA|US|-71.05|42.33|571|NW|,South Chicago|IL|US|-87.55|41.74|28|N|guney chicago,South Dublin|leinster|IE|-6.34|53.29|301|W|comte de dublin sud;condado de dublin sur;condado de south dublin;contea di south dublin;dublin poludniowy;dublin south;jizni dublin,South Fulton|GA|US|-84.67|33.59|107|N|,South Gate|CA|US|-118.21|33.95|96|N|,South Gate|MD|US|-76.63|39.13|29|N|,South Hill|WA|US|-122.27|47.14|52|N|,South Jordan|UT|US|-111.93|40.56|66|N|,South Jordan Heights|UT|US|-111.95|40.56|37|N|,South Kingstown|RI|US|-71.52|41.45|30|N|,South Laurel|MD|US|-76.85|39.07|26|N|,South Lawndale|IL|US|-87.71|41.84|73|N|,South Miami Heights|FL|US|-80.38|25.6|36|N|,South Ozone Park|NY|US|-73.82|40.67|75|N|,South Pasadena|CA|US|-118.15|34.12|26|N|,South Peabody|MA|US|-70.95|42.51|50|N|,South Portland|ME|US|-70.24|43.64|25|N|,South Riverdale|ON|CA|-79.34|43.65|27|N|,South San Francisco|CA|US|-122.41|37.65|67|N|,South Shore|IL|US|-87.58|41.76|51|N|,South Suffolk|VA|US|-76.59|36.72|80|N|,South Surrey|BC|CA|-122.79|49.05|77|N|,South Tangerang|banten|ID|106.72|-6.29|1429|W|tangerang selatan,South Valley|NM|US|-106.68|35.01|40|N|,South Vineland|NJ|US|-75.03|39.45|58|N|,South Whittier|CA|US|-118.04|33.95|57|N|,Southampton|england|GB|-1.4|50.9|269|W|,Southaven|MS|US|-90.01|34.99|52|N|southhaven,Southend-on-Sea|england|GB|0.71|51.54|295|W|,Southfield|MI|US|-83.22|42.47|73|N|,Southgate|MI|US|-83.19|42.21|29|N|,Southglenn|CO|US|-104.95|39.59|42|N|,Southington|CT|US|-72.88|41.6|43|N|,Southlake|TX|US|-97.13|32.94|29|N|,Soweto|gauteng|ZA|27.86|-26.27|1695|W|,Soyapango|san salvador department|SV|-89.14|13.71|329|W|,Soyo|zaire|AO|12.37|-6.13|221|W|,Spanaway|WA|US|-122.43|47.1|27|N|,Spanish Fork|UT|US|-111.65|40.11|37|N|,Spanish Town|saint catherine parish|JM|-76.96|17.99|145|W|,Sparks|NV|US|-119.75|39.53|96|N|,Spartanburg|SC|US|-81.93|34.95|37|N|,Split|split dalmatia|HR|16.44|43.51|149|W|spalato,Spokane|WA|US|-117.43|47.66|229|NW|,Spokane Valley|WA|US|-117.24|47.67|94|N|,Spring|TX|US|-95.42|30.08|54|N|,Spring Hill|FL|US|-82.53|28.48|98|N|,Spring Hill|TN|US|-86.93|35.75|36|N|,Spring Valley|NV|US|-115.25|36.11|178|NW|,Spring Valley|NY|US|-74.04|41.11|32|N|,Spring Valley|CA|US|-117|32.74|28|N|,Springdale|AR|US|-94.13|36.19|77|N|,Springfield|MO|US|-93.3|37.22|170|NW|,Springfield|MA|US|-72.59|42.1|154|NW|,Springfield|IL|US|-89.64|39.8|114|N|,Springfield|OR|US|-123.02|44.05|60|N|,Springfield|OH|US|-83.81|39.92|59|N|,Springfield|VA|US|-77.19|38.79|30|N|,Springfield Gardens|NY|US|-73.76|40.66|30|N|,Springs|gauteng|ZA|28.4|-26.25|186|W|,Springville|UT|US|-111.61|40.17|32|N|,Spruce Grove|AB|CA|-113.92|53.53|38|N|,Sri Ganganagar|rajasthan|IN|73.87|29.92|237|W|,Srikakulam|andhra pradesh|IN|83.9|18.3|137|W|,Srinagar|jammu and kashmir|IN|74.81|34.09|1206|W|,St. Albert|AB|CA|-113.64|53.63|57|N|saint albert,St. Catharines|ON|CA|-79.24|43.17|136|NW|sainte catharine,St. Charles|MD|US|-76.92|38.61|33|N|,St. Charles|IL|US|-88.31|41.91|32|N|,St Helens|england|GB|-2.73|53.45|183|W|,St. James-Assiniboia East|MB|CA|-97.23|49.89|27|N|,St. John's|NL|CA|-52.71|47.56|110|N|saint john s;saint jean de terre neuve;saint jean;san juan de terranova;st johns,St. Johns|FL|US|-81.55|30.08|40|N|,St. Louis|MO|US|-90.2|38.63|279|NW|saint louis;san luis,St. Petersburg|FL|US|-82.68|27.77|257|NW|saint pete;saint petersburg,St. Thomas|ON|CA|-81.18|42.77|38|N|saint thomas,Stamford|CT|US|-73.54|41.05|128|N|,Stanton|CA|US|-117.99|33.8|38|N|,Starkville|MS|US|-88.82|33.45|25|N|,Staryy Oskol|belgorod oblast|RU|37.85|51.3|226|W|stary oskol;staryi oskol,State College|PA|US|-77.86|40.79|42|N|,Staten Island|NY|US|-74.14|40.56|468|NW|borough of staten island,Statesboro|GA|US|-81.78|32.45|30|N|,Statesville|NC|US|-80.89|35.78|26|N|,Stavanger|rogaland|NO|5.73|58.97|151|W|,Stavropol|stavropol kray|RU|41.96|45.03|433|W|stawropol;stauropoli,Sterling|VA|US|-77.43|39.01|27|N|,Sterling Heights|MI|US|-83.03|42.58|132|NW|,Sterlitamak|bashkortostan republic|RU|55.95|53.64|267|W|starletamaq,Stevens Point|WI|US|-89.57|44.52|26|N|,Steveston|BC|CA|-123.18|49.13|25|N|,Stillwater|OK|US|-97.06|36.12|48|N|,Stittsville|ON|CA|-75.92|45.25|40|N|,Stockbridge|GA|US|-84.23|33.54|28|N|,Stockholm|stockholm|SE|18.07|59.33|1515|W|estocolmo;stoccolma;stokolm;sztokholm;tukholma,Stockport|england|GB|-2.16|53.41|139|W|,Stockton|CA|US|-121.29|37.96|305|NW|,Stoke-on-Trent|england|GB|-2.19|53|258|W|,Stonecrest|GA|US|-84.13|33.71|50|N|,Stonegate-Queensway|ON|CA|-79.5|43.64|25|N|,Stoney Creek|ON|CA|-79.77|43.22|76|N|,Stouffville|ON|CA|-79.25|43.97|36|N|,Stoughton|MA|US|-71.1|42.13|26|N|,Stow|OH|US|-81.44|41.16|34|N|,Strasbourg|grand est|FR|7.75|48.58|274|W|estrasburgo;straatsburg;strasburg;strasburgo;strazburg;strassburg;strasburk,Stratford|CT|US|-73.13|41.18|51|N|,Stratford|ON|CA|-80.95|43.37|31|N|,Strawberry Hill|BC|CA|-122.88|49.13|41|N|,Streamwood|IL|US|-88.18|42.03|40|N|,Strogino|moscow|RU|37.41|55.82|152|W|,Strongsville|OH|US|-81.84|41.31|44|N|,Studio City|CA|US|-118.4|34.15|34|N|,Stuttgart|baden wurttemberg|DE|9.18|48.78|612|W|estugarda;stoccarda,Subang|west java|ID|107.76|-6.57|137|W|,Subang Jaya|selangor|MY|101.58|3.04|708|W|,Sucre|chuquisaca department|BO|-65.26|-19.03|224|W|,Suez|suez|EG|32.53|29.97|699|W|sues;suveys,Suffolk|VA|US|-76.58|36.73|88|N|,Sugar Land|TX|US|-95.63|29.62|88|N|,Suginami|ibaraki|JP|140.28|36.2|588|W|suginami city,Suicheng|jiangsu|CN|117.93|33.9|256|W|,Suihua|heilongjiang|CN|126.97|46.65|252|W|suej chua;tuy hoa,Suining|sichuan|CN|105.57|30.51|656|W|suej ning,Suisun|CA|US|-122.04|38.24|28|N|,Suita|osaka|JP|135.52|34.76|385|W|,Suitland|MD|US|-76.92|38.85|25|N|,Suitland-Silver Hill|MD|US|-76.93|38.85|33|N|silver hill,Suizhou|hubei|CN|113.36|31.71|618|W|suej cou;tuy chau,Sujangarh|rajasthan|IN|74.47|27.7|183|W|,Sujiatun|liaoning|CN|123.34|41.66|148|W|,Sukabumi|west java|ID|106.93|-6.92|365|W|kota sukabumi,Sukkur|sindh|PK|68.86|27.7|563|W|,Sukrah|ariana governorate|TN|10.25|36.88|159|W|,Sulaymaniyah|sulaymaniyah|IQ|45.43|35.56|878|W|as sulajmanijja;slemani;solimania;souleimaniye;sulaimaniyya;sulaymaniyya;suleimania;suleimaniya;sulejmanie;suleymaniye,Suleja|niger state|NG|7.18|9.18|162|W|,Sullana|piura|PE|-80.69|-4.9|160|W|,Sultan Pur Majra|delhi|IN|77.08|28.69|181|W|,Sultanah|medina region|SA|39.59|24.49|946|W|,Sultanbeyli|istanbul|TR|29.27|40.96|358|W|,Sultangazi|istanbul|TR|28.87|41.11|436|W|,Sumare|sao paulo|BR|-47.27|-22.82|279|W|,Sumayl|duhok|IQ|42.85|36.86|152|W|,Sumbawanga|rukwa|TZ|31.62|-7.97|303|W|,Sumbe|kwanza sul|AO|13.84|-11.21|205|W|,Sumedang|west java|ID|107.92|-6.86|200|W|,Sumgayit|sumqayit|AZ|49.67|40.59|427|W|sumgait;sumgjajet;sumqayit,Sumida|tokyo|JP|139.82|35.73|287|W|sumida city,Summerville|SC|US|-80.18|33.02|48|N|,Sumter|SC|US|-80.34|33.92|40|N|,Sumy|sumy|UA|34.8|50.92|256|W|soemy;soumy;sumi,Sun City|AZ|US|-112.27|33.6|37|N|,Sun Prairie|WI|US|-89.21|43.18|32|N|,Sunch'on|south pyongan|KP|125.93|39.43|437|W|,Suncheon|jeollanam do|KR|127.49|34.95|276|W|sunch on,Sunderland|england|GB|-1.38|54.9|170|W|,Sungai Buloh|selangor|MY|101.56|3.21|222|W|,Sungai Petani|kedah|MY|100.49|5.65|544|W|,Sunggal|north sumatra|ID|98.62|3.58|157|W|,Sunnyside|NY|US|-73.94|40.74|49|N|,Sunnyvale|CA|US|-122.04|37.37|155|NW|,Sunrise|FL|US|-80.11|26.13|84|N|,Sunrise Manor|NV|US|-115.07|36.21|189|NW|,Sunset|BC|CA|-123.1|49.22|36|N|,Sunset Park|NY|US|-74.01|40.65|126|N|,Sunshine Coast|queensland|AU|153.08|-26.66|398|W|costa de sunshine;costa do sunshine;cote du soleil,Superior|WI|US|-92.1|46.72|26|N|,Suqian|jiangsu|CN|118.3|33.95|1437|W|,Surabaya|east java|ID|112.75|-7.25|3018|W|kota surabaya;soerabaja;surabaia;surabaja,Surakarta|central java|ID|110.83|-7.56|526|W|kota surakarta,Surat|gujarat|IN|72.83|21.2|4591|W|surate,Surat Thani|surat thani|TH|99.33|9.14|132|W|,Surendranagar|gujarat|IN|71.65|22.73|179|W|,Surgut|khanty mansia|RU|73.42|61.26|300|W|soergoet;sourgout,Surprise|AZ|US|-112.33|33.63|143|NW|,Surrey|BC|CA|-122.83|49.11|568|NW|,Surrey City Centre|BC|CA|-122.85|49.19|33|N|,Surulere|lagos|NG|3.36|6.5|191|W|,Sutton|england|GB|-0.2|51.35|187|W|london borough of sutton,Suwaylih|balqa|JO|35.84|32.02|151|W|,Suwon|gyeonggi do|KR|127.01|37.29|1234|W|suwon si,Suzano|sao paulo|BR|-46.31|-23.54|320|W|,Suzhou|jiangsu|CN|120.6|31.3|6715|W|su cou;to chau,Suzhou|anhui|CN|116.98|33.64|1647|W|,Suzuka|mie|JP|136.58|34.88|195|W|,Swansea|wales|GB|-3.94|51.62|300|W|,Swindon|england|GB|-1.78|51.56|201|W|,Sydney|new south wales|AU|151.21|-33.87|5638|W|sidney;syd;sydney city,Sydney|NS|CA|-60.18|46.14|105|N|,Sykhiv|lviv|UA|24.06|49.79|151|W|,Syktyvkar|komi|RU|50.82|61.66|245|W|syktywkar;siktivkar,Sylhet|sylhet division|BD|91.87|24.9|237|W|srihotto,Sylmar|CA|US|-118.45|34.31|79|N|,Syracuse|NY|US|-76.15|43.05|144|NW|siracusa,Syracuse|UT|US|-112.06|41.09|27|N|,Syzran|samara oblast|RU|48.47|53.16|189|W|sysran,Szczecin|west pomerania|PL|14.55|53.43|395|W|stettin;estetino;stettino;stetin,Szeged|csongrad|HU|20.15|46.25|160|W|seghedin;seghedino;szegedin;szeghed,Ta'if|mecca region|SA|40.42|21.27|688|W|at ta if;taif;taef,Taboao da Serra|sao paulo|BR|-46.79|-23.63|273|W|,Tabora|tabora|TZ|32.83|-5.02|308|W|,Tabriz|east azerbaijan|IR|46.29|38.08|1424|W|tebriz;tabris,Tabuk|tabuk region|SA|36.57|28.4|667|W|tebuk,Tacambaro de Codallos|MX16|MX|-101.46|19.24|25|N|,Tacheng|xinjiang|CN|82.96|46.75|161|W|,Tachikawa|tokyo|JP|139.42|35.71|183|W|,Tacloban|eastern visayas|PH|125|11.24|259|W|kota tacloban;tacloban city,Tacna|tacna|PE|-70.25|-18.01|286|W|,Tacoma|WA|US|-122.44|47.25|222|NW|,Taganrog|rostov|RU|38.91|47.24|279|W|,Taguatinga|federal district|BR|-48.06|-15.83|193|W|,Taguig|national capital region|PH|121.08|14.52|1308|W|city of taguig,Tahoua|tahoua region|NE|5.27|14.89|159|W|,Tahta|sohag|EG|31.5|26.77|134|W|,Tai'an|shandong|CN|117.12|36.19|1735|W|,Tai Po|tai po|HK|114.17|22.45|274|W|,Taicang|jiangsu|CN|121.09|31.45|831|W|,Taichung|taiwan|TW|120.68|24.15|2850|W|kota taichung;taizhong;tchaj cung;dai trung,Tainan|taiwan|TW|120.21|22.99|1856|W|kota tainan;tainan city;tchaj nan;dai nam,Taipei|taiwan|TW|121.53|25.05|7871|W|kota taipei;taipeh;taipe;tajpej;tchaj pej,Taiping|perak|MY|100.73|4.85|217|W|,Taishan|guangdong|CN|112.78|22.25|145|W|dai son,Taito|tokyo|JP|139.78|35.71|211|W|taito city,Taiyuan|shanxi|CN|112.56|37.87|4303|W|tchaj juan;thai nguyen,Taiz|ta izz|YE|44.02|13.58|940|W|taez,Taizhou|jiangsu|CN|119.91|32.49|1607|W|tchaj cou;thai chau,Taizhou|zhejiang|CN|121.43|28.66|1485|W|tchaj cou;thai chau,Takamatsu|kagawa|JP|134.05|34.33|418|W|takamacu;takamatsu shi;takamatsushi,Takaoka|toyama|JP|137.02|36.75|170|W|,Takarazuka|hyogo|JP|135.36|34.8|226|W|,Takasaki|gunma|JP|139.02|36.33|372|W|,Takatsuki|osaka|JP|135.62|34.85|354|W|,Takeo|takeo|KH|104.78|10.99|843|W|,Takoradi|western|GH|-1.76|4.9|389|W|takoradze,Tala|MX14|MX|-103.7|20.65|35|N|,Talatona|luanda|AO|13.19|-8.92|500|W|,Talca|maule region|CL|-71.65|-35.42|197|W|,Talcahuano|biobio|CL|-73.12|-36.72|150|W|,Talhar|sindh|PK|68.81|24.88|200|W|,Talisay|central visayas|PH|123.85|10.24|133|W|talisay city,Tallahassee|FL|US|-84.28|30.44|201|NW|,Tallinn|harjumaa|EE|24.75|59.44|394|W|tallinna;talin;tallin;lindanas;reval;revel;raaveli,Tam Ky|da nang city|VN|108.47|15.57|165|W|,Tam O'Shanter-Sullivan|ON|CA|-79.3|43.78|27|N|,Tama|tokyo|JP|139.47|35.64|148|W|,Tamale|northern|GH|-0.84|9.4|464|W|,Taman Petaling|kuala lumpur|MY|101.65|3.2|423|W|,Tamarac|FL|US|-80.25|26.21|64|N|,Tambacounda|tambacounda|SN|-13.67|13.77|149|W|,Tambaram|tamil nadu|IN|80.13|12.92|174|W|,Tambov|tambov oblast|RU|41.44|52.74|293|W|tambow,Tamiami|FL|US|-80.4|25.76|55|N|,Tampa|FL|US|-82.46|27.95|414|NW|,Tampere|pirkanmaa|FI|23.79|61.5|260|W|tammerfors,Tampico|MX28|MX|-97.88|22.29|309|NW|,Tampines Estate||SG|103.94|1.36|265|W|tampines,Tampines New Town||SG|103.95|1.35|259|W|,Tan An|tay ninh|VN|106.41|10.54|215|W|,Tan Chau|an giang|VN|105.24|10.8|175|W|,Tando Adam|sindh|PK|68.66|25.77|174|W|,Tando Allahyar|sindh|PK|68.72|25.46|421|W|,Tando Bago|sindh|PK|68.97|24.79|426|W|,Tanga|tanga|TZ|39.1|-5.07|393|W|,Tangail|dhaka division|BD|89.92|24.25|180|W|,Tangerang|banten|ID|106.63|-6.18|1927|W|kota tangerang,Tanggu|tianjin|CN|117.65|39.02|535|W|taku,Tanghe|henan|CN|112.83|32.69|278|W|,Tangier|tanger tetouan al hoceima|MA|-5.8|35.77|1035|W|tanger;tanca;tangeri,Tangshan|hebei|CN|118.18|39.64|3372|W|tchang san,Tanjung Pinang|riau islands|ID|104.46|0.92|227|W|kota tanjungpinang,Tanjungbalai|north sumatra|ID|99.8|2.97|190|W|,Tanta|gharbia|EG|31|30.79|576|W|,Tantou|guangdong|CN|113.83|22.75|320|W|,Tantoyuca|MX30|MX|-98.23|21.35|30|N|,Tanzhou|guangdong|CN|113.47|22.26|382|W|,Taoyuan|taiwan|TW|121.3|24.99|475|W|taoyuan district;dao vien;taoyuan city,Taozhou|anhui|CN|119.41|30.91|146|W|,Tapachula|MX05|MX|-92.26|14.91|353|NW|,Tarakan|north kalimantan|ID|117.59|3.31|255|W|kota tarakan,Taranto|apulia|IT|17.25|40.46|198|W|tarde;tarent;tarente;tarento,Taraz|zhambyl|KZ|71.37|42.9|358|W|taras,Targu Mures|mures county|RO|24.56|46.54|212|W|neumarkt am mieresch;neumarkt;tirgu mures,Tariba|tachira|VE|-72.22|7.82|138|W|,Tarija|tarija department|BO|-64.73|-21.54|159|W|,Tarime|mara|TZ|34.37|-1.35|133|W|,Tarlac City|central luzon|PH|120.6|15.48|401|W|,Tarragona|catalonia|ES|1.25|41.12|141|W|tarragone,Tarsus|mersin|TR|34.89|36.92|350|W|tars;tarse;tarso,Tartus|tartus|SY|35.89|34.89|458|W|tartous,Tasek Glugor|penang|MY|100.5|5.48|135|W|tasek gelugor,Tashkent|tashkent|UZ|69.22|41.26|1978|W|tachkent;taschkent;tasjkent;taskent;taszkent,Tasikmalaya|west java|ID|108.22|-7.33|770|W|kota tasikmalaya,Taubate|sao paulo|BR|-45.56|-23.03|322|W|,Taunggyi|shan state|MM|97.04|20.79|160|W|,Taunton|MA|US|-71.09|41.9|56|N|,Tauranga|bay of plenty|NZ|176.17|-37.69|161|W|,Tawau|sabah|MY|117.89|4.24|372|W|tawao,Taxco de Alarcon|MX12|MX|-99.61|18.55|50|N|taxco,Tay Ho|hanoi|VN|105.81|21.07|168|W|,Tay Ninh|tay ninh|VN|106.1|11.31|135|W|,Taylor|MI|US|-83.27|42.24|61|N|,Taylorsville|UT|US|-111.94|40.67|60|N|,Taytay|calabarzon|PH|121.13|14.56|231|W|,Taza|fes meknes|MA|-4.01|34.21|162|W|,Tbilisi|tbilisi|GE|44.83|41.69|1049|W|tbilissi;tiblissi;tiflis,Teaneck|NJ|US|-74.02|40.9|40|N|,Teapa|MX27|MX|-92.95|17.56|26|N|,Tebessa|tebessa|DZ|8.12|35.4|194|W|tibissa,Tecamachalco|MX21|MX|-97.73|18.88|28|N|,Tecate|MX02|MX|-116.63|32.57|64|N|,Tecax|MX31|MX|-89.29|20.21|25|N|tekax,Tecoman|MX08|MX|-103.88|18.92|85|N|,Tegal|central java|ID|109.14|-6.87|297|W|kota tegal,Tegucigalpa|francisco morazan department|HN|-87.21|14.08|850|W|,Tehran|tehran|IR|51.42|35.69|7153|W|tahran;teera;teerao;teheran,Tehuacan|MX21|MX|-97.4|18.46|248|NW|,Teixeira de Freitas|bahia|BR|-39.74|-17.54|145|W|,Tejupilco de Hidalgo|MX15|MX|-100.15|18.9|25|N|,Tel Aviv|tel aviv|IL|34.78|32.08|432|W|tel aviv yaffo;tel aviv yafo;tel awiw,Telford|england|GB|-2.45|52.68|155|W|,Teluk Intan|perak|MY|101.02|4.02|232|W|teluk anson,Teluknaga|west java|ID|106.64|-6.1|175|W|,Tema|greater accra|GH|-0.02|5.67|155|W|,Temara|rabat sale kenitra|MA|-6.91|33.93|342|W|,Temecula|CA|US|-117.15|33.49|110|N|,Temirtau|karaganda|KZ|72.95|50.05|170|W|temirtaou;temirtaw;temyrtau,Temixco|MX17|MX|-99.23|18.85|97|N|,Tempe|AZ|US|-111.91|33.41|175|NW|,Tempe Junction|AZ|US|-111.94|33.41|158|NW|,Temple|TX|US|-97.34|31.1|72|N|,Temple City|CA|US|-118.06|34.11|36|N|,Temple Terrace|FL|US|-82.39|28.04|25|N|,Temuco|araucania|CL|-72.6|-38.74|238|W|,Teni|tamil nadu|IN|77.48|10.01|1034|W|theni,Tenosique|MX27|MX|-91.42|17.47|32|N|,Teofilo Otoni|minas gerais|BR|-41.51|-17.86|142|W|,Teoloyucan|MX15|MX|-99.18|19.74|51|N|,Tepatitlan de Morelos|MX14|MX|-102.76|20.82|91|N|,Tepeaca|MX21|MX|-97.9|18.97|27|N|tepeaca de negrete,Tepeji del Rio de Ocampo|MX13|MX|-99.34|19.9|80|N|,Tepexpan|MX15|MX|-98.94|19.61|102|N|,Tepic|MX18|MX|-104.89|21.51|332|NW|,Tepotzotlan|MX15|MX|-99.22|19.72|38|N|,Tequila|MX14|MX|-103.84|20.88|29|N|municipio tequila,Tequisquiapan|MX22|MX|-99.89|20.52|29|N|,Teresina|piaui|BR|-42.8|-5.09|871|W|,Teresopolis|rio de janeiro|BR|-42.98|-22.42|176|W|,Ternate|north maluku|ID|127.38|0.79|210|W|kota ternate,Ternopil|ternopil|UA|25.59|49.55|225|W|tarnopol;tarnopoli,Terrassa|catalonia|ES|2.02|41.57|218|W|,Terre Haute|IN|US|-87.41|39.47|60|N|,Terrebonne|QC|CA|-73.65|45.7|111|N|,Teshi Old Town|greater accra|GH|-0.11|5.58|144|W|teshie,Tete|tete|MZ|33.59|-16.16|357|W|vila de santiago maior,Tetouan|tanger tetouan al hoceima|MA|-5.37|35.58|415|W|tetuan;tetuao,Tetuan de las Victorias|madrid|ES|-3.7|40.46|155|W|tetuan,Tewksbury|MA|US|-71.23|42.61|29|N|,Texarkana|TX|US|-94.05|33.43|37|N|,Texarkana|AR|US|-94.04|33.44|30|N|,Texas City|TX|US|-94.9|29.38|47|N|,Texcoco de Mora|MX15|MX|-98.88|19.51|105|N|texcoco,Teziutlan|MX21|MX|-97.36|19.82|103|N|,Thai Nguyen|thai nguyen|VN|105.85|21.59|420|W|,Thane|maharashtra|IN|72.96|19.2|1841|W|thana,Thanesar|haryana|IN|76.83|29.97|155|W|,Thanh Hoa|thanh hoa province|VN|105.77|19.8|850|W|,Thanh Khe|da nang city|VN|108.19|16.07|201|W|,Thanh Pho Ba Ria|ho chi minh city hcmc|VN|107.17|10.5|235|W|,Thanh Xuan|hanoi|VN|105.8|20.99|293|W|,Thanjavur|tamil nadu|IN|79.14|10.79|291|W|tanjavur;tandzawur;tancavur,The Acreage|FL|US|-80.27|26.79|38|N|,The Bronx|NY|US|-73.87|40.85|1385|NW|bronx;borough of bronx,The Colony|TX|US|-96.89|33.09|41|N|,The Hague|south holland|NL|4.3|52.08|474|W|den haag;a haia;haag;haga;l aia;la haya;la haye;lahey;s gravenhage,The Hammocks|FL|US|-80.44|25.67|51|N|,The Trails of Frisco|TX|US|-96.87|33.16|51|N|,The Villages|FL|US|-81.96|28.93|51|N|,The Woodlands|TX|US|-95.49|30.16|93|N|woodlands,Thembisa|gauteng|ZA|28.23|-26|511|W|,Thenali|andhra pradesh|IN|80.64|16.24|164|W|,Thessaloniki|central macedonia|GR|22.93|40.64|317|W|salonica;ftohomana;salonic;salonicco;saloniki;selanik;solun;tesalonica;thessalonique,Thetford-Mines|QC|CA|-71.31|46.09|25|N|,Thi Tran GJai Tu|thai nguyen|VN|105.64|21.63|179|W|,Thi Tran GJong Trieu|quang ninh|VN|106.51|21.08|248|W|,Thi Tran Thuan Chau|son la province|VN|103.69|21.44|153|W|,Thies|thies|SN|-16.93|14.79|317|W|,Thies Nones|thies|SN|-16.97|14.78|252|W|,Thika|nairobi county|KE|37.07|-1.03|251|W|,Thiruvananthapuram|kerala|IN|76.95|8.49|788|W|tiruvanantapuram;trivandrum,Thomasville|NC|US|-80.08|35.88|27|N|,Thoothukudi|tamil nadu|IN|78.13|8.77|410|W|thoothukkudi;tuticorin,Thornton|CO|US|-104.97|39.87|133|NW|,Thot Not|can tho city|VN|105.53|10.27|158|W|,Thousand Oaks|CA|US|-118.84|34.17|129|N|,Thrissur|kerala|IN|76.22|10.52|315|W|trichur,Throgs Neck|NY|US|-73.82|40.82|33|N|,Thu Dau Mot|ho chi minh city hcmc|VN|106.65|10.98|373|W|,Thu GJuc|ho chi minh city hcmc|VN|106.77|10.85|524|W|,Thuan An|ho chi minh city hcmc|VN|106.71|10.92|588|W|,Thuan Thanh|bac ninh|VN|106.08|21.05|199|W|,Thunder Bay|ON|CA|-89.25|48.38|108|N|,Thuqbah|eastern province|SA|50.2|26.26|248|W|,Tianjin|tianjin|CN|117.18|39.14|11090|W|tchien tin;thien tan;tiencin;tientsin,Tianshui|gansu|CN|105.74|34.58|1212|W|,Tiaret|tiaret|DZ|1.32|35.37|178|W|tijarat,Ticul|MX31|MX|-89.53|20.4|32|N|,Tieling|liaoning|CN|123.84|42.29|333|W|,Tierra Blanca|MX30|MX|-96.36|18.45|47|N|,Tigard|OR|US|-122.77|45.43|51|N|,Tijuana|MX02|MX|-117|32.5|1922|NW|,Tilburg|north brabant|NL|5.09|51.56|221|W|tilburgo,Timika|central papua|ID|136.68|-4.61|142|W|,Timisoara|timis county|RO|21.23|45.75|250|W|temeswar;freidorf;josephs stadt;temeschburg;temeschwar;temesvar,Timmins|ON|CA|-81.33|48.47|41|N|,Timon|maranhao|BR|-42.84|-5.09|174|W|,Tin Shui Wai|yuen long|HK|114|22.46|286|W|,Tinh Bien|an giang|VN|104.94|10.6|143|W|,Tinley Park|IL|US|-87.78|41.57|57|N|,Tirana|tirana|AL|19.82|41.33|418|W|tiran,Tiraspol|transnistria|MD|29.63|46.84|157|W|tiraspoli;tyraspol,Tirmiz|surxondaryo region|UZ|67.28|37.22|182|W|termez;termiz,Tiruchirappalli|tamil nadu|IN|78.7|10.82|1022|W|tiruchchirappalli;tiruchirapalli;tiruccirappalli;tiruchi;trichinopoly;trichy,Tirunelveli|tamil nadu|IN|77.68|8.73|1435|W|tirunelweli,Tirupati|andhra pradesh|IN|79.42|13.64|295|W|tirumala tirupati,Tiruppur|tamil nadu|IN|77.35|11.12|963|W|tirupur,Tiruvannamalai|tamil nadu|IN|79.07|12.23|145|W|,Tiruvottiyur|tamil nadu|IN|80.3|13.16|249|W|,Titusville|FL|US|-80.81|28.61|45|N|,Tizayuca|MX13|MX|-98.98|19.84|43|N|,Tizimin|MX31|MX|-88.15|21.14|46|N|,Tlahuac|MX09|MX|-99.01|19.29|305|NW|delegacion tlahuac,Tlajomulco de Zuniga|MX14|MX|-103.45|20.47|30|N|,Tlalnepantla|MX15|MX|-99.2|19.54|653|NW|tlalnepantla de baz;tlanepantla de baz,Tlalpan|MX09|MX|-99.16|19.3|574|NW|delegacion tlalpan,Tlapa de Comonfort|MX12|MX|-98.58|17.55|46|N|,Tlapacoyan|MX30|MX|-97.21|19.96|35|N|,Tlaquepaque|MX14|MX|-103.29|20.64|650|NW|san pedro tlaquepaque,Tlaxcala|MX29|MX|-98.24|19.32|84|N|tlaxcala city;tlaxcala de xicotencatl,Tlemcen|tlemcen|DZ|-1.31|34.88|173|W|tilimsan;tremecen,Toamasina|atsinanana|MG|49.4|-18.15|345|W|tamatave,Tobruk|al butnan|LY|23.95|32.09|141|W|thubruq;tobroek;tobrouk;tobruch,Tochigi|tochigi|JP|139.73|36.38|159|W|,Tokch'on|south pyongan|KP|126.26|39.75|237|W|,Tokorozawa|saitama|JP|139.47|35.8|344|W|,Tokushima|tokushima|JP|134.57|34.07|267|W|tokusima,Tokyo|tokyo|JP|139.69|35.69|9733|W|tokio;toquio;edo,Toledo|OH|US|-83.56|41.66|265|NW|,Toledo|central visayas|PH|123.64|10.38|206|W|toledo city,Toledo|parana|BR|-53.74|-24.71|160|W|,Toli-Toli|central sulawesi|ID|120.82|1.04|242|W|tolitoli,Toliara|atsimo andrefana|MG|43.67|-23.35|178|W|tulear,Toluca|MX15|MX|-99.65|19.29|489|NW|toluca de lerdo,Tolyatti|samara oblast|RU|49.35|53.53|702|W|togliatti;togliattigrad;tol yatti;toliatti;toljatti;stavropol,Tomakomai|hokkaido|JP|141.6|42.64|174|W|,Toms River|NJ|US|-74.2|39.95|88|N|,Tomsk|tomsk oblast|RU|84.98|56.5|574|W|,Tonala|MX14|MX|-103.24|20.62|408|NW|,Tonala|MX05|MX|-93.75|16.09|35|N|,Tondabayashicho|osaka|JP|135.6|34.5|132|W|tondabayashi,Tongchuan|shaanxi|CN|108.95|34.9|417|W|,Tongchuanshi|shaanxi|CN|109.08|35.07|223|W|tchung cchuan,Tonghua|jilin|CN|125.93|41.72|510|W|tchung chua;thong hoa,Tongliao|inner mongolia|CN|122.27|43.61|261|W|thong lieu,Tongling|anhui|CN|117.78|30.95|402|W|,Tongshan|jiangsu|CN|117.16|34.18|329|W|xuzhou,Tongzhou|beijing|CN|116.66|39.9|163|W|,Tonk|rajasthan|IN|75.79|26.17|165|W|,Tooele|UT|US|-112.3|40.53|33|N|,Toowoomba|queensland|AU|151.95|-27.56|142|W|,Topeka|KS|US|-95.68|39.05|125|N|,Torbat-e Heydariyeh|razavi khorasan|IR|59.22|35.27|140|W|,Tordher|khyber pakhtunkhwa|PK|72.29|33.99|150|W|,Toronto|ON|CA|-79.4|43.71|2794|NW|,Torrance|CA|US|-118.34|33.84|143|NW|,Torreon|MX07|MX|-103.42|25.54|735|NW|,Torrington|CT|US|-73.12|41.8|34|N|,Torun|kujawsko pomorskie|PL|18.6|53.01|196|W|thorn,Toshima|tokyo|JP|139.74|35.76|301|W|toshima city,Tottenham|england|GB|-0.07|51.6|130|W|,Tottori-shi|tottori|JP|134.23|35.5|188|W|,Touba|diourbel region|SN|-15.88|14.86|1120|W|,Touggourt|touggourt|DZ|6.07|33.11|143|W|tukkurt,Toulon|provence alpes cote d azur|FR|5.93|43.12|168|W|tolone;tolon;tulon,Toulouse|occitanie|FR|1.44|43.6|511|W|tolosa;tolosa de francia;tuluza,Tours|centre val de loire|FR|0.7|47.39|141|W|,Town 'n' Country|FL|US|-82.58|28.01|78|N|,Townsville|queensland|AU|146.81|-19.27|201|W|,Towson|MD|US|-76.6|39.4|55|N|,Toyama|toyama|JP|137.22|36.7|415|W|toyama shi;toyamashi,Toyohashi|aichi|JP|137.38|34.77|377|W|toyohashi shi,Toyokawa|aichi|JP|137.4|34.82|184|W|,Toyonaka|osaka|JP|135.47|34.78|401|W|,Toyota|aichi|JP|137.15|35.08|426|W|tojota,Tra Vinh|vinh long|VN|106.34|9.95|160|W|thanh pho tra vinh,Trabzon|trabzon|TR|39.73|41.01|244|W|trapisonda;trebisonda;trebizonda,Tracy|CA|US|-121.43|37.74|87|N|,Trang Bang|tay ninh|VN|106.36|11.03|161|W|,Trenton|NJ|US|-74.74|40.22|89|N|,Tres Lagoas|mato grosso do sul|BR|-51.7|-20.79|143|W|,Tri-Cities|WA|US|-119.2|46.25|244|NW|,Trieste|friuli venezia giulia|IT|13.78|45.65|204|W|terst;triest,Trindade|goias|BR|-49.49|-16.65|142|W|,Tripoli|tripoli|LY|13.19|32.89|1302|W|trablus;tripolis;trypolis,Tripoli|north lebanon|LB|35.84|34.43|229|W|trablussam;tripolis;trypolis,Trois-Rivieres|QC|CA|-72.55|46.35|144|NW|,Trondheim|trondelag|NO|10.4|63.43|216|W|,Troy|MI|US|-83.15|42.61|83|N|,Troy|NY|US|-73.69|42.73|49|N|,Troy|OH|US|-84.2|40.04|25|N|,Trujillo|la libertad|PE|-79.03|-8.12|1067|W|,Trumbull|CT|US|-73.2|41.24|36|N|,Tsentralnyi|donetsk|UA|37.55|47.1|179|W|tsentralnyi rayon;molotovskyi;molotovskyi rayon;zhovtnevyi;zhovtnevyi rayon,Tseung Kwan O|sai kung district|HK|114.25|22.33|412|W|,Tshikapa|kasai|CD|20.8|-6.42|634|W|,Tsing Yi Town|kwai tsing district|HK|114.1|22.35|182|W|tsing yi,Tsu|mie|JP|136.52|34.73|274|W|,Tsuchiura|ibaraki|JP|140.21|36.09|144|W|,Tsuen Wan|tsuen wan|HK|114.11|22.37|318|W|,Tsukuba|ibaraki|JP|140.12|36.08|241|W|cukuba,Tualatin|OR|US|-122.76|45.38|27|N|,Tuckahoe|VA|US|-77.56|37.59|44|N|,Tucker|GA|US|-84.22|33.85|27|N|,Tucson|AZ|US|-110.93|32.22|542|NW|,Tuen Mun|tuen mun|HK|113.97|22.39|507|W|tuenmen,Tuerkmenabat|lebap|TM|63.58|39.07|230|W|turkmenabat;charjou,Tuguegarao|cagayan valley|PH|121.72|17.62|167|W|tuguegarao city;tuguegaro,Tujunga|CA|US|-118.29|34.25|26|N|,Tula|tula oblast|RU|37.62|54.2|482|W|toela;toula,Tula de Allende|MX13|MX|-99.34|20.05|28|N|,Tulancingo|MX13|MX|-98.36|20.08|102|N|tulancingo de bravo,Tulare|CA|US|-119.35|36.21|62|N|,Tulsa|OK|US|-95.99|36.15|413|NW|,Tultepec|MX15|MX|-99.13|19.68|65|N|,Tultitlan de Mariano Escobedo|MX15|MX|-99.17|19.65|28|N|,Tulua|valle del cauca department|CO|-76.2|4.08|221|W|,Tumkur|karnataka|IN|77.1|13.34|307|W|tumakuru,Tumxuk|xinjiang|CN|79.06|39.87|135|W|tumushuke,Tunduma|songwe|TZ|32.77|-9.3|219|W|,Tungi|dhaka division|BD|90.4|23.89|337|W|tongi,Tunis|tunis governorate|TN|10.17|36.82|693|W|tunez;tunes;tunisi;tunus,Tunja|boyaca|CO|-73.36|5.54|172|W|,Tuong Mai|hanoi|VN|105.86|20.99|136|W|,Tupelo|MS|US|-88.7|34.26|35|N|,Turin|piedmont|IT|7.69|45.07|847|W|torino;turijn;turim;turyn,Turkistan|turkistan|KZ|68.26|43.29|227|W|turkestan;turquistao,Turku|southwest finland|FI|22.27|60.45|206|W|abo,Turlock|CA|US|-120.85|37.49|72|N|,Turmero|aragua|VE|-67.47|10.23|344|W|,Turpan|xinjiang|CN|89.18|42.95|273|W|tourfan;turfan,Tuscaloosa|AL|US|-87.57|33.21|111|N|,Tustin|CA|US|-117.83|33.75|80|N|,Tuxpam de Rodriguez Cano|MX30|MX|-97.41|20.96|84|N|tuxpam,Tuxpan|MX14|MX|-103.38|19.56|27|N|,Tuxtepec|MX20|MX|-96.13|18.09|159|NW|san juan bautista;san juan bautista tuxtla,Tuxtla|MX05|MX|-93.12|16.75|604|NW|tuxtla gtz;tuxtla gutierrez,Tuy Hoa|dak lak|VN|109.32|13.1|155|W|,Tuzla|federation of b h|BA|18.67|44.54|142|W|,Tver|tver oblast|RU|35.9|56.86|420|W|twer;kalinin,Twentynine Palms|CA|US|-116.05|34.14|26|N|,Twin Falls|ID|US|-114.46|42.56|47|N|,Tychy|silesia|PL|18.97|50.14|130|W|tichau,Tyler|TX|US|-95.3|32.35|103|N|,Tyre|south governorate|LB|35.19|33.27|135|W|sur;tiro;tyr;tyros;tyrus,Tyumen|tyumen oblast|RU|65.53|57.15|768|W|tioumen;tjumen;tiumen;tjoemen;tumen,Ube|yamaguchi|JP|131.25|33.94|173|W|,Uberaba|minas gerais|BR|-47.93|-19.75|356|W|,Uberlandia|minas gerais|BR|-48.28|-18.92|754|W|,Udaipur|rajasthan|IN|73.71|24.59|451|W|udajpur,Udon Thani|udon thani|TH|102.79|17.42|130|W|,Udupi|karnataka|IN|74.75|13.33|165|W|,Ueda|nagano|JP|138.28|36.4|157|W|,UEruemqi|xinjiang|CN|87.6|43.8|3029|W|urumqi;urumchi;urumczi;urumtschi;urumci;dihua,UEskuedar|istanbul|TR|29.01|41.02|524|W|uskudar;scutari;skutari,Ufa|bashkortostan republic|RU|55.97|54.74|1120|W|oefa;oufa,Ugep|cross river state|NG|8.08|5.81|200|W|,Uige|uige|AO|15.06|-7.61|322|W|,Uijeongbu-si|gyeonggi do|KR|127.05|37.74|479|W|uijeongbu,Uji|kyoto|JP|135.8|34.89|192|W|udzi,Ujjain|madhya pradesh|IN|75.78|23.18|515|W|udzdzain,Ulan Bator|ulaanbaatar|MN|106.88|47.91|844|W|ulaanbaatar;oulan bator;ulaan baatar;ulan batur;ulanbatar;ula bator,Ulan-Ude|buryatiya republic|RU|107.6|51.83|360|W|oelan oede;oulan oude,Ulanhot|inner mongolia|CN|122.08|46.08|165|W|,Ulanqab|inner mongolia|CN|113.13|40.99|550|W|,Ulhasnagar|maharashtra|IN|73.15|19.22|516|W|,Ulsan|ulsan|KR|129.32|35.54|1098|W|ulsan si,Ulu Bedok||SG|103.93|1.33|276|W|,Uluberiya|west bengal|IN|88.1|22.48|235|W|,Ulyanovsk|ulyanovsk|RU|48.39|54.33|626|W|oulianovsk;uljanowsk;oeljanovsk;ul janovsk;ulianovsk;uljanovsk,Uman|MX31|MX|-89.75|20.88|39|N|,Umarkot|sindh|PK|69.74|25.36|144|W|,Umea|vasterbotten|SE|20.26|63.83|130|W|uumaja,Umraniye|istanbul|TR|29.12|41.02|573|W|,Umuahia|abia state|NG|7.49|5.52|370|W|,Unaizah|al qassim region|SA|44|26.1|183|W|,Ungaran|central java|ID|110.41|-7.14|171|W|,Union|NJ|US|-74.26|40.7|56|N|,Union City|CA|US|-122.02|37.6|74|N|,Union City|NJ|US|-74.02|40.78|69|N|east cost cities,Universal City|CA|US|-118.35|34.14|105|N|,University|FL|US|-82.44|28.07|41|N|,University City|MO|US|-90.31|38.66|35|N|,University Heights|SK|CA|-106.58|52.14|51|N|,University Heights|NY|US|-73.91|40.86|27|N|,University of Texas|TX|US|-97.74|30.29|53|N|,University Park|FL|US|-80.37|25.75|26|N|,University Place|WA|US|-122.55|47.24|32|N|,Unnao|uttar pradesh|IN|80.49|26.55|161|W|,Upland|CA|US|-117.65|34.1|76|N|,Upper Alton|IL|US|-90.15|38.91|29|N|,Upper Arlington|OH|US|-83.06|39.99|34|N|,Upper West Side|NY|US|-73.98|40.79|226|NW|,Uppsala|uppsala|SE|17.64|59.86|177|W|upsala,Uptown|IL|US|-87.65|41.97|55|N|,Urayasu|chiba|JP|139.9|35.66|171|W|,Urbana|IL|US|-88.21|40.11|42|N|,Urbandale|IA|US|-93.71|41.63|44|N|,Urdaneta|ilocos|PH|120.57|15.98|145|W|kota urdaneta;urdaneta de pangasinan,Urganch|xorazm region|UZ|60.63|41.55|145|W|ourguentch;urgench;urgentj;urgenc,Uriangato|MX11|MX|-101.18|20.14|51|N|,Ursynow|mazovia|PL|21.05|52.15|149|W|,Uruapan|MX16|MX|-102.06|19.42|299|NW|uruapan del progreso,Usak|usak|TR|29.41|38.67|369|W|,Usera|madrid|ES|-3.7|40.39|141|W|,Ussuriysk|primorye|RU|131.96|43.8|157|W|oessoeriejsk;ussurijsk;ussuryjsk,Ust-Kamenogorsk|east kazakhstan|KZ|82.61|49.97|319|W|ust kamienogorsk;oskemen,Utica|NY|US|-75.23|43.1|61|N|,Utrecht|utrecht|NL|5.12|52.09|376|W|utreque,Utsunomiya|tochigi|JP|139.88|36.57|518|W|ucunomija,Uvira|south kivu|CD|29.14|-3.4|407|W|,Uyo|akwa ibom state|NG|7.93|5.05|436|W|,Vacaville|CA|US|-121.99|38.36|96|N|,Vadodara|gujarat|IN|73.21|22.3|1822|W|,Val-d'Or|QC|CA|-77.8|48.1|25|N|,Val-des-Arbres|QC|CA|-73.68|45.6|40|N|,Valdivia|los rios region|CL|-73.25|-39.81|133|W|,Valdosta|GA|US|-83.28|30.83|55|N|,Valencia|carabobo|VE|-68|10.16|1619|W|,Valencia|valencia|ES|-0.38|39.47|824|W|valence;valencie;valensiya;valenza;walencja,Valencia|CA|US|-118.61|34.44|148|NW|,Valente Diaz|MX30|MX|-96.22|19.16|25|N|,Valenzuela|national capital region|PH|120.97|14.7|725|W|,Valera|trujillo|VE|-70.6|9.32|244|W|,Valinhos|sao paulo|BR|-47|-22.97|132|W|,Valladolid|castille and leon|ES|-4.72|41.66|300|W|pincia;pucela,Valladolid|MX31|MX|-88.2|20.69|48|N|,Valle de Bravo|MX15|MX|-100.13|19.2|25|N|,Valle de La Pascua|guarico|VE|-66.01|9.22|153|W|,Valle de Santiago|MX11|MX|-101.19|20.39|68|N|,Valle Hermoso|MX28|MX|-97.81|25.67|48|N|,Valledupar|cesar department|CO|-73.25|10.47|490|W|,Vallejo|CA|US|-122.26|38.1|121|N|,Valley Glen|CA|US|-118.42|34.19|60|N|,Valley Stream|NY|US|-73.71|40.66|37|N|,Valparaiso|valparaiso|CL|-71.63|-33.04|282|W|,Valparaiso|IN|US|-87.06|41.47|32|N|,Valparaiso de Goias|goias|BR|-47.98|-16.07|218|W|,Valrico|FL|US|-82.24|27.94|35|N|,Valsad|gujarat|IN|72.93|20.61|139|W|,Van|van|TR|43.38|38.49|525|W|,Van Nuys|CA|US|-118.45|34.19|136|NW|,Vancouver|BC|CA|-123.12|49.25|662|NW|vancover,Vancouver|WA|US|-122.66|45.64|196|NW|,Vanderbijlpark|gauteng|ZA|27.84|-26.71|246|W|,Vantaa|uusimaa|FI|25.04|60.29|252|W|vanda,Vapi|gujarat|IN|72.9|20.37|163|W|,Varamin|tehran|IR|51.65|35.32|225|W|,Varanasi|uttar pradesh|IN|83.01|25.32|1164|W|benares;kashi;waranasi,Varginha|minas gerais|BR|-45.43|-21.55|136|W|,Varna|varna|BG|27.91|43.22|318|W|warna,Varzea Grande|mato grosso|BR|-56.13|-15.65|300|W|,Vasyl'evsky Ostrov|st petersburg|RU|30.25|59.94|203|W|vasilinsaari,Vaudreuil-Dorion|QC|CA|-74.03|45.4|25|N|,Vaughan|ON|CA|-79.5|43.84|323|NW|,Velikiy Novgorod|novgorod oblast|RU|31.27|58.52|222|W|velikij novgorod;novgorod;nowogrod wielki;veliki novgorod;veliky novgorod;weliki nowgorod,Vellore|tamil nadu|IN|79.13|12.92|484|W|velur,Venice|CA|US|-118.46|33.99|40|N|venice beach,Ventura|CA|US|-119.29|34.28|96|N|,Venustiano Carranza|MX09|MX|-99.1|19.44|430|NW|,Veracruz|MX30|MX|-96.14|19.18|428|NW|veracruz llave,Veraval|gujarat|IN|70.37|20.91|171|W|,Verdun|QC|CA|-73.57|45.46|69|N|,Vereeniging|gauteng|ZA|27.93|-26.67|474|W|,Verhunskyi|luhansk|UA|39.37|48.59|185|W|verhunskyi rayon;zhovtnevyi;zhovtnevyi rayon,Vermont Square|CA|US|-118.3|34|47|N|,Vernon|BC|CA|-119.27|50.27|40|N|,Vernon Hills|IL|US|-87.98|42.22|26|N|,Verona|veneto|IT|10.99|45.44|258|W|verone;werona,Vespasiano|minas gerais|BR|-43.92|-19.69|138|W|,Vestal|NY|US|-76.05|42.09|28|N|,Vestavia Hills|AL|US|-86.79|33.45|34|N|,Viamao|rio grande do sul|BR|-51.02|-30.08|231|W|,Viana|luanda|AO|13.37|-8.91|865|W|,Victor Rosales|MX32|MX|-102.7|22.95|32|N|,Victoria|central and western|HK|114.14|22.29|956|W|,Victoria|BC|CA|-123.35|48.44|289|NW|,Victoria|TX|US|-97|28.81|67|N|,Victoria de Durango|MX10|MX|-104.66|24.02|518|NW|durango,Victoria-Downtown|BC|CA|-123.36|48.43|46|N|downtown victoria,Victoria-Fraserview|BC|CA|-123.07|49.22|31|N|,Victoriaville|QC|CA|-71.97|46.05|34|N|,Victorville|CA|US|-117.29|34.54|122|N|,Vidisha|madhya pradesh|IN|77.81|23.53|155|W|vidisa,Vienna|state of vienna|AT|16.37|48.21|1691|W|viena;viyana;wien;vienne;vien;viden;wenen;wieden;bec,Vientiane|vientiane prefecture|LA|102.6|17.97|840|W|vienciana;vientian;wientian,Viet Tri|phu tho|VN|105.4|21.32|415|W|,Viet Yen|bac ninh|VN|106.13|21.27|205|W|distretto di viet yen,Vigo|galicia|ES|-8.72|42.23|293|W|,Vijayapura|karnataka|IN|75.72|16.82|327|W|bidzapur;bijapur;vijapura,Vijayawada|andhra pradesh|IN|80.65|16.51|1143|W|vidzajavada;widzajawada;bejawada,Vila Andrade|sao paulo|BR|-46.73|-23.63|168|W|,Vila Curuca|sao paulo|BR|-46.42|-23.51|140|W|,Vila Flor|luanda|AO|13.31|-8.98|256|W|,Vila Jacui|sao paulo|BR|-46.46|-23.5|134|W|,Vila Velha|espirito santo|BR|-40.29|-20.33|394|W|,Villa Canales|guatemala|GT|-90.53|14.48|155|W|,Villa Mercedes|biobio|CL|-71.98|-37.4|131|W|,Villa Nueva|guatemala|GT|-90.59|14.53|618|W|,Villa Vicente Guerrero|MX29|MX|-98.17|19.12|60|N|,Villaflores|MX05|MX|-93.27|16.23|37|N|,Villagran|MX11|MX|-101|20.51|27|N|,Villahermosa|MX27|MX|-92.94|17.99|353|NW|villa hermosa,Villavicencio|meta department|CO|-73.63|4.13|321|W|,Ville-Emard|QC|CA|-73.6|45.45|30|N|,Ville-Marie|QC|CA|-73.57|45.5|104|N|,Villeray-Saint-Michel-Parc-Extension|QC|CA|-73.61|45.56|144|NW|,Villeurbanne|rhone alpes|FR|4.88|45.77|131|W|,Vilnius|vilnius|LT|25.28|54.69|542|W|vilna;vilnus;wilno;wilna,Vina del Mar|valparaiso|CL|-71.55|-33.02|334|W|,Vineland|NJ|US|-75.03|39.49|60|N|,Vinh|nghe an province|VN|105.69|18.67|790|W|,Vinh Chau|can tho city|VN|105.98|9.32|183|W|,Vinh Long|vinh long|VN|105.97|10.25|137|W|,Vinnytsya|vinnytsia|UA|28.47|49.23|430|W|vinnycja;vinniza;vinnytsia;winnica;winnyzja,Viransehir|sanliurfa|TR|39.76|37.22|154|W|,Virar|maharashtra|IN|72.81|19.46|1222|W|,Virginia Beach|VA|US|-75.98|36.85|454|NW|virginian bch,Visakhapatnam|andhra pradesh|IN|83.2|17.68|1063|W|vishakhapatnam;vizag,Visalia|CA|US|-119.29|36.33|130|NW|,Vista|CA|US|-117.24|33.2|100|N|,Vitebsk|vitebsk|BY|30.2|55.19|358|W|wizebsk;vicebsk;vitsebsk;vitsyebsk;witebsk,Vitoria|espirito santo|BR|-40.34|-20.32|312|W|,Vitoria da Conquista|bahia|BR|-40.84|-14.87|396|W|,Vitoria de Santo Antao|pernambuco|BR|-35.29|-8.12|134|W|,Vizianagaram|andhra pradesh|IN|83.41|18.12|228|W|,Vladikavkaz|north ossetia alania|RU|44.67|43.04|306|W|vladicaucaso;wladikawkas;wladykaukaz,Vladimir|vladimir oblast|RU|40.4|56.14|357|W|wladimir;wladymir;wlodzimierz,Vladivostok|primorye|RU|131.87|43.11|604|W|vladyvostok;wladiwostok;wladywostok,Volgodonsk|rostov|RU|42.15|47.51|167|W|wolgodonsk,Volgograd|volgograd oblast|RU|44.5|48.71|1013|W|volgogrado;wolgograd;estalingrado;stalingrad;stalingrado;tsaritsyn;zarizyn,Vologda|vologda oblast|RU|39.88|59.22|312|W|wologda,Volta Redonda|rio de janeiro|BR|-44.1|-22.52|279|W|v redonda,Volzhsky|volgograd oblast|RU|44.78|48.79|323|W|volzjskij;volzski;wolschski,Voronezh|voronezh oblast|RU|39.19|51.67|1047|W|voronej;voronezj;voronez;woronesch;woronez,Votorantim|sao paulo|BR|-47.44|-23.55|133|W|,Vryheid|kwazulu natal|ZA|30.79|-27.77|150|W|,Vung Tau|ho chi minh city hcmc|VN|107.08|10.35|464|W|cap saint jacques;cape saint james;saint james;st james;ville du cap,Vyhurivshchyna-Troyeshchyna|kyiv city|UA|30.6|50.51|240|W|,Vykhino-Zhulebino|moscow|RU|37.81|55.7|216|W|,Waco|TX|US|-97.15|31.55|132|NW|,Wad Medani|al jazirah|SD|33.52|14.4|332|W|vad medeni;wad madani,Wadi as Sir|amman|JO|35.82|31.95|181|W|wadi al seer,Wafangdian|liaoning|CN|122.01|39.62|454|W|,Wah Cantt|punjab|PK|72.75|33.77|400|W|,Waiau-Pacific Palisades|HI|US|-157.95|21.4|47|N|,Waipahu|HI|US|-158.01|21.39|38|N|,Wakayama|wakayama|JP|135.17|34.23|356|W|,Wake Forest|NC|US|-78.51|35.98|38|N|,Wakefield|NY|US|-73.85|40.9|52|N|,Waldorf|MD|US|-76.94|38.62|67|N|,Walla Walla|WA|US|-118.34|46.06|32|N|,Walnut|CA|US|-117.87|34.02|30|N|,Walnut Creek|CA|US|-122.06|37.91|68|N|,Walnut Grove|BC|CA|-122.64|49.16|25|N|,Walsall|england|GB|-1.98|52.59|172|W|,Waltham|MA|US|-71.24|42.38|63|N|,Wan Chai|wan chai|HK|114.17|22.28|166|W|wanchai,Wandsbek|hamburg|DE|10.08|53.58|411|W|,Wangsa Maju|kuala lumpur|MY|101.74|3.2|215|W|,Wanning|hainan|CN|110.38|18.8|545|W|,Wanxian|chongqing|CN|108.37|30.82|859|W|wan hsien;wanshien,Wanzhou|chongqing|CN|108.4|30.76|1545|W|,Warangal|telangana|IN|79.58|18|704|W|,Warder|somali|ET|45.34|6.97|450|W|,Warner Robins|GA|US|-83.63|32.62|73|N|,Warren|MI|US|-83.01|42.49|134|NW|,Warren|OH|US|-80.82|41.24|40|N|,Warri|delta|NG|5.75|5.52|910|W|,Warrington|england|GB|-2.58|53.39|172|W|,Warsaw|mazovia|PL|21.01|52.23|1702|W|warszawa;varsavia;varsova;varsovia;varsovie;varsava;warsawa;warschau,Warwick|RI|US|-71.42|41.7|81|N|,Wasco|CA|US|-119.34|35.59|26|N|,Washington|DC|US|-77.04|38.9|689|NW|washington d c;district of columbia;washington dc;waszyngton;territory of columbia,Washington Heights|NY|US|-73.94|40.85|152|NW|,Watampone|south sulawesi|ID|120.33|-4.54|149|W|,Waterbury|CT|US|-73.05|41.56|108|N|,Waterford|MI|US|-83.41|42.69|75|N|,Waterfront Communities-The Island|ON|CA|-79.38|43.63|65|N|,Waterloo|ON|CA|-80.52|43.47|104|N|,Waterloo|IA|US|-92.34|42.49|68|N|,Watertown|MA|US|-71.18|42.37|31|N|,Watertown|NY|US|-75.91|43.97|26|N|,Watsonville|CA|US|-121.76|36.91|53|N|,Watthana|bangkok|TH|100.59|13.73|171|W|vadhana,Waukegan|IL|US|-87.84|42.36|88|N|,Waukesha|WI|US|-88.23|43.01|71|N|,Wausau|WI|US|-89.63|44.96|39|N|,Wauwatosa|WI|US|-88.01|43.05|47|N|,Waxahachie|TX|US|-96.85|32.39|33|N|,Wayne|NJ|US|-74.28|40.93|57|N|,Wayne|PA|US|-75.39|40.04|30|N|,Wazirabad|punjab|PK|74.12|32.44|152|W|,Weatherford|TX|US|-97.8|32.76|28|N|,Weifang|shandong|CN|119.1|36.71|2044|W|wej fang,Weihai|shandong|CN|122.11|37.51|844|W|wej chaj,Weinan|shaanxi|CN|109.51|34.5|1199|W|wej nan,Welkom|free state|ZA|26.74|-27.98|431|W|,Welland|ON|CA|-79.25|42.98|52|N|,Wellesley|MA|US|-71.29|42.3|27|N|,Wellington|wellington region|NZ|174.78|-41.29|381|W|,Wellington|FL|US|-80.24|26.66|62|N|,Wenatchee|WA|US|-120.31|47.42|33|N|,Wenchang|hainan|CN|110.8|19.55|560|W|van xuong,Wenshan City|yunnan|CN|104.25|23.36|450|W|,Wentzville|MO|US|-90.85|38.81|35|N|,Wenzhou|zhejiang|CN|120.67|28|2650|W|wen cou;on chau;yongjia,Weru|west java|ID|108.5|-6.71|139|W|,Weslaco|TX|US|-97.99|26.16|39|N|,Wesley Chapel|FL|US|-82.33|28.24|44|N|,West Albany|NY|US|-73.78|42.68|93|N|,West Allis|WI|US|-88.01|43.02|60|N|,West Babylon|NY|US|-73.35|40.72|43|N|,West Bend|WI|US|-88.18|43.43|31|N|,West Bloomfield Township|MI|US|-83.38|42.57|64|N|west bloomfield;xa west bloomfield,West Chicago|IL|US|-88.2|41.88|27|N|,West Coon Rapids|MN|US|-93.35|45.16|62|N|,West Covina|CA|US|-117.94|34.07|108|N|,West Des Moines|IA|US|-93.71|41.58|64|N|,West Elkridge|MD|US|-76.73|39.21|28|N|,West End|BC|CA|-123.13|49.28|47|N|vancouver west end,West Englewood|IL|US|-87.67|41.78|32|N|,West Falls Church|VA|US|-77.19|38.86|29|N|,West Fargo|ND|US|-96.9|46.87|33|N|tay fargo,West Gulfport|MS|US|-89.09|30.4|71|N|,West Hartford|CT|US|-72.74|41.76|63|N|,West Haven|CT|US|-72.95|41.27|54|N|,West Hill|ON|CA|-79.18|43.77|27|N|,West Hills|CA|US|-118.64|34.2|41|N|,West Hollywood|FL|US|-80.18|26.02|60|N|,West Hollywood|CA|US|-118.36|34.09|36|N|tay hollywood,West Humber-Clairville|ON|CA|-79.6|43.72|33|N|,West Islip|NY|US|-73.31|40.71|28|N|,West Jerusalem|jerusalem|IL|35.22|31.78|400|W|vest jerusalem;vestjerusalem;vastra jerusalem;westjerusalem,West Jordan|UT|US|-111.94|40.61|111|N|,West Kelowna|BC|CA|-119.58|49.86|28|N|district of west kelowna,West Lafayette|IN|US|-86.91|40.43|45|N|,West Lake Sammamish|WA|US|-122.1|47.58|33|N|,West Lawn|IL|US|-87.72|41.77|32|N|,West Linn|OR|US|-122.61|45.37|26|N|,West Little River|FL|US|-80.24|25.86|34|N|,West Lynchburg|VA|US|-79.18|37.4|65|N|,West Memphis|AR|US|-90.18|35.15|25|N|,West Milford|NJ|US|-74.37|41.13|26|N|,West New York|NJ|US|-74.01|40.79|53|N|,West Oak Lane|PA|US|-75.17|40.07|38|N|,West Orange|NJ|US|-74.24|40.8|48|N|,West Palm Beach|FL|US|-80.05|26.72|120|N|,West Raleigh|NC|US|-78.66|35.79|338|NW|,West Ridge|IL|US|-87.69|42|72|N|,West Roxbury|MA|US|-71.15|42.28|30|N|,West Sacramento|CA|US|-121.53|38.58|52|N|,West Scarborough|ME|US|-70.39|43.57|27|N|,West Seneca|NY|US|-78.8|42.85|44|N|,West Springfield|MA|US|-72.62|42.11|27|N|,West Torrington|CT|US|-73.14|41.82|36|N|,West Town|IL|US|-87.67|41.89|86|N|,West Valley City|UT|US|-112|40.69|136|NW|west valley,West Vancouver|BC|CA|-123.16|49.33|45|N|vancouver barat,West Village|NY|US|-74.01|40.73|32|N|,West Warwick|RI|US|-71.52|41.7|30|N|,West Whittier-Los Nietos|CA|US|-118.07|33.98|25|N|,Westchester|FL|US|-80.33|25.75|29|N|,Westerville|OH|US|-82.93|40.13|38|N|,Westfield|MA|US|-72.75|42.13|41|N|westfield centre,Westfield|IN|US|-86.13|40.04|36|N|,Westfield|NJ|US|-74.35|40.66|30|N|,Westlake|OH|US|-81.92|41.46|32|N|,Westland|MI|US|-83.4|42.32|82|N|,Westminster|CO|US|-105.04|39.84|116|N|,Westminster|CA|US|-118.01|33.76|92|N|,Westminster-Branson|ON|CA|-79.45|43.78|26|N|,Westmont|CA|US|-118.3|33.94|31|N|,Weston|FL|US|-80.4|26.1|69|N|,Westonaria|gauteng|ZA|27.65|-26.32|156|W|,Westport|CT|US|-73.36|41.14|26|N|,Wethersfield|CT|US|-72.65|41.71|26|N|,Wexford/Maryvale|ON|CA|-79.3|43.75|27|N|,Weymouth|MA|US|-70.94|42.22|54|N|,Whalley|BC|CA|-122.87|49.18|102|N|,Wharton|PA|US|-75.16|39.93|49|N|,Wheat Ridge|CO|US|-105.08|39.77|31|N|wheatridge,Wheaton|IL|US|-88.11|41.87|53|N|,Wheaton|MD|US|-77.06|39.04|48|N|,Wheeling|IL|US|-87.93|42.14|38|N|,Wheeling|WV|US|-80.72|40.06|27|N|,Whitby|ON|CA|-78.93|43.88|138|NW|,Whitchurch-Stouffville|ON|CA|-79.32|44|49|N|,White Bear Lake|MN|US|-93.01|45.08|25|N|,White Plains|NY|US|-73.76|41.03|58|N|,Whitehorse|YT|CA|-135.05|60.72|28|N|,Whitestone|NY|US|-73.82|40.79|36|N|,Whitman|PA|US|-75.16|39.92|49|N|,Whitney|NV|US|-115.04|36.1|38|N|,Whittier|CA|US|-118.03|33.98|87|N|,Wichita|KS|US|-97.34|37.69|396|NW|,Wichita Falls|TX|US|-98.49|33.91|104|N|,Wiesbaden|hesse|DE|8.24|50.09|288|W|,Wigan|england|GB|-2.64|53.54|175|W|,Wildomar|CA|US|-117.28|33.6|35|N|,Wildwood|MO|US|-90.66|38.58|35|N|,Wilkes-Barre|PA|US|-75.88|41.25|40|N|,Williamsburg|NY|US|-73.95|40.71|33|N|,Williamsport|PA|US|-77|41.24|29|N|,Willingboro|NJ|US|-74.87|40.03|31|N|,Williston|ND|US|-103.62|48.15|26|N|,Willoughby|BC|CA|-122.68|49.13|31|N|,Willowbrook|CA|US|-118.26|33.92|35|N|,Willowdale|ON|CA|-79.4|43.77|79|N|,Willowdale East|ON|CA|-79.4|43.77|50|N|,Wilmette|IL|US|-87.72|42.07|27|N|,Wilmington|NC|US|-77.95|34.24|115|N|,Wilmington|DE|US|-75.55|39.75|70|N|,Wilmington|CA|US|-118.26|33.78|52|N|,Wilson|NC|US|-77.92|35.72|49|N|,Winchester|NV|US|-115.12|36.13|27|N|,Winchester|VA|US|-78.16|39.19|27|N|,Windhoek|khomas region|NA|17.08|-22.56|386|W|vinduque;windhuk,Windsor|ON|CA|-83.02|42.3|229|NW|,Windsor|CO|US|-104.9|40.48|32|N|,Windsor|CT|US|-72.64|41.85|28|N|,Windsor|CA|US|-122.82|38.55|27|N|,Winejok|northern bahr al ghazal|SS|27.57|9.01|300|W|,Winnetka|CA|US|-118.57|34.21|47|N|,Winnipeg|MB|CA|-97.15|49.88|749|NW|vinnipeg;winnipeg city,Winona|MN|US|-91.64|44.05|27|N|,Winston-Salem|NC|US|-80.24|36.1|241|NW|,Winter Garden|FL|US|-81.59|28.57|40|N|,Winter Haven|FL|US|-81.73|28.02|37|N|,Winter Park|FL|US|-81.34|28.6|29|N|,Winter Springs|FL|US|-81.31|28.7|34|N|,Woburn|ON|CA|-79.23|43.77|53|N|,Woburn|MA|US|-71.15|42.48|39|N|,Wola|mazovia|PL|20.96|52.23|140|W|,Wollongong|new south wales|AU|150.89|-34.42|280|W|,Wolverhampton|england|GB|-2.12|52.59|263|W|,Wong Tai Sin|wong tai sin district|HK|114.18|22.35|425|W|,Wonju|gangwon do|KR|127.95|37.35|332|W|,Wonsan|kangwon do|KP|127.44|39.15|329|W|gensan,Woodburn|OR|US|-122.86|45.14|25|N|,Woodbury|MN|US|-92.96|44.92|67|N|,Woodhaven|NY|US|-73.86|40.69|36|N|,Woodland|CA|US|-121.77|38.68|58|N|,Woodland Hills|CA|US|-118.61|34.17|70|N|,Woodlands||SG|103.79|1.44|254|W|,Woodlawn|MD|US|-76.73|39.32|37|N|,Woodridge|IL|US|-88.05|41.75|33|N|,Woodside|NY|US|-73.91|40.75|41|N|,Woodstock|ON|CA|-80.75|43.13|40|N|,Woodstock|GA|US|-84.52|34.1|29|N|,Woodstock|IL|US|-88.45|42.31|25|N|,Woonsocket|RI|US|-71.51|42|41|N|,Wooster|OH|US|-81.94|40.81|26|N|,Worcester|MA|US|-71.8|42.26|206|NW|,Wroclaw|lower silesia|PL|17.03|51.1|672|W|breslau;breslavia;vratislav;bresslau;vratislavie,Wuerzburg|bavaria|DE|9.95|49.79|133|W|wurzburg;wurtzbourg;wurtzburgo;wurzburgo,Wugang|hunan|CN|110.63|26.73|132|W|,Wuhai|inner mongolia|CN|106.82|39.68|218|W|wu chaj,Wuhan|hubei|CN|114.27|30.58|10392|W|vuhan;vu han;wu chan,Wuhu|anhui|CN|118.43|31.35|1598|W|wu chu,Wujiaqu|xinjiang|CN|87.52|44.16|154|W|,Wuppertal|north rhine westphalia|DE|7.15|51.26|360|W|,Wuwei|gansu|CN|102.63|37.93|1010|W|,Wuxi|jiangsu|CN|120.29|31.57|4396|W|vo tich;wu si,Wuxue|hubei|CN|115.55|29.85|220|W|,Wuyishan|fujian|CN|118.03|27.76|137|W|ciudad de wuyishan;vu di son;wuyishan city,Wuzhong|ningxia|CN|106.2|37.99|7202|W|,Wuzhou|guangxi|CN|111.29|23.48|761|W|ngo chau;wu cou,Wyandotte|MI|US|-83.15|42.21|25|N|,Wylie|TX|US|-96.54|33.02|46|N|,Wyoming|MI|US|-85.71|42.91|75|N|,Xai-Xai|gaza province|MZ|33.64|-25.05|154|W|,Xalapa de Enriquez|MX30|MX|-96.92|19.53|424|NW|xalapa;jalapa;jalapa enriques;jalapa enriquez,Xalisco|MX18|MX|-104.9|21.44|35|N|jalisco,Xenia|OH|US|-83.93|39.68|25|N|,Xi'an|shaanxi|CN|108.93|34.26|9600|W|tay an;xian,Xiamen|fujian|CN|118.08|24.48|4617|W|amoy;sia men,Xiangtan|hunan|CN|112.9|27.85|959|W|siang tchan;tuong dam,Xiangyang|hubei|CN|112.14|32.04|1294|W|siang jang;tuong duong;xiangfan,Xianning|hubei|CN|114.32|29.84|512|W|,Xiantao|hubei|CN|113.44|30.37|239|W|sientaochen,Xianyang|shaanxi|CN|108.7|34.34|1034|W|ham duong;sien jang,Xiaogan|hubei|CN|113.92|30.93|908|W|siao kan,Xiayang|shanghai|CN|121.12|31.15|137|W|,Xichang|sichuan|CN|102.26|27.9|481|W|,Xico|MX15|MX|-98.95|19.27|384|NW|san miguel xico,Xicotepec de Juarez|MX21|MX|-97.96|20.28|39|N|,Xilinhot|inner mongolia|CN|116.07|43.94|349|W|,Xindi|hubei|CN|113.47|29.82|175|W|,Xingning|guangdong|CN|115.72|24.15|274|W|,Xingtai|hebei|CN|114.49|37.06|798|W|hinh dai;sing tchaj,Xingyi|guizhou|CN|104.91|25.1|322|W|,Xining|qinghai|CN|101.76|36.63|1677|W|si ning;sining;tay ninh,Xinji|hebei|CN|115.22|37.93|145|W|,Xinqiao|shanghai|CN|121.31|31.07|155|W|,Xintai|shandong|CN|117.75|35.9|222|W|,Xinxiang|henan|CN|113.8|35.19|1047|W|,Xinyang|henan|CN|114.07|32.12|1230|W|,Xinyi|jiangsu|CN|118.35|34.38|300|W|,Xinyu|jiangxi|CN|114.93|27.8|839|W|sin ju;tan du,Xinyuan|xinjiang|CN|83.25|43.43|282|W|,Xinzhou|shanxi|CN|112.73|38.41|544|W|han chau;sin cou,Xiuying|hainan|CN|110.29|20|290|W|,Xizhi|taipei|TW|121.66|25.07|204|W|hsichih;xizhi district,Xochimilco|MX09|MX|-99.1|19.25|442|NW|delegacion xochimilco,Xuan Loc|dong nai|VN|107.23|10.93|253|W|,Xuancheng|anhui|CN|118.76|30.95|774|W|,Xuanhua|hebei|CN|115.06|40.61|373|W|,Xuchang|henan|CN|113.86|34.03|1265|W|,Xuhui|shanghai|CN|121.45|31.2|1109|W|,Xuzhou|jiangsu|CN|117.28|34.2|1253|W|pengcheng,Ya'an|sichuan|CN|103|29.99|612|W|,Yachiyo|chiba|JP|140.12|35.74|199|W|,Yaizu|shizuoka|JP|138.32|34.87|139|W|,Yakima|WA|US|-120.51|46.6|93|N|,Yakutsk|sakha|RU|129.72|62.03|235|W|iakoutsk;jakutsk,Yamagata|yamagata|JP|140.37|38.23|248|W|,Yamaguchi|yamaguchi|JP|131.47|34.18|193|W|jamaguci,Yamato|kanagawa|JP|139.45|35.47|242|W|,Yamoussoukro|lacs district|CI|-5.28|6.82|275|W|jamusukro;yamusukro,Yamuna Nagar|haryana|IN|77.28|30.13|217|W|yamunanagar,Yan'an|shaanxi|CN|109.49|36.6|475|W|,Yanbu|medina region|SA|38.06|24.09|200|W|yambo;yanbu al bahr;yenbo,Yancheng|jiangsu|CN|120.16|33.36|1615|W|diem thanh;jen ccheng,Yangcheng|chongqing|CN|106.26|30|186|W|,Yangchun|guangdong|CN|111.78|22.17|153|W|,Yanghang|shanghai|CN|121.44|31.37|204|W|,Yangjiang|guangdong|CN|111.96|21.86|1292|W|duong giang;jang tiang,Yangju|gyeonggi do|KR|127.06|37.83|179|W|,Yangon|yangon|MM|96.16|16.81|4477|W|rangoon;rangoun;rangum;rangun;yankoun,Yangpu|shanghai|CN|121.52|31.26|1210|W|,Yangquan|shanxi|CN|113.56|37.86|731|W|jang cchuan,Yangsan|gyeongsangnam do|KR|129.03|35.34|358|W|jangsan,Yangshuo|guangxi|CN|110.49|24.78|300|W|,Yangzhou|jiangsu|CN|119.44|32.4|1584|W|duong chau;jang cou,Yanji|jilin|CN|129.5|42.89|326|W|dien cat,Yantai|shandong|CN|121.44|37.48|2227|W|jen tchaj;yen dai;chefoo,Yanzhou|shandong|CN|116.83|35.55|254|W|,Yao|osaka|JP|135.6|34.62|273|W|,Yaounde|centre|CM|11.52|3.87|1299|W|jaunde;yaunde,Yarmouth|MA|US|-70.23|41.71|25|N|,Yaroslavl|yaroslavl oblast|RU|39.87|57.63|608|W|jaroslawl;iaroslavl;jaroslavl;jaroslaw,Yasenevo|moscow|RU|37.52|55.61|180|W|,Yautepec|MX17|MX|-99.07|18.88|105|N|yautepec de zaragoza,Yawnghwe|shan state|MM|96.93|20.66|188|W|,Yazd|yazd province|IR|54.37|31.9|477|W|jasd;jazd,Yei|central equatoria|SS|30.68|4.09|260|W|,Yekaterinburg|sverdlovsk oblast|RU|60.62|56.86|1495|W|jekaterinburg;ekaterimburgo;ekaterinbourg;ekaterinburg;ekaterinburgo;jekaterinenburg;jekaterynburg,Yenagoa|bayelsa state|NG|6.27|4.93|365|W|,Yeosu|jeollanam do|KR|127.66|34.76|268|W|josu,Yerevan|yerevan|AM|44.51|40.18|1144|W|erevan;erivan;erywan;jerevan;jerewan,Yibin|sichuan|CN|104.64|28.76|836|W|nghi tan,Yichang|hubei|CN|111.28|30.71|1350|W|i cchang;nghi xuong,Yichun|jiangxi|CN|114.4|27.83|1045|W|i cchun;nghi xuan,Yichun|heilongjiang|CN|128.88|47.72|155|W|i cchun;y xuan,Yinchuan|ningxia|CN|106.27|38.47|1487|W|jin cchuan;ngan xuyen,Yingkou|liaoning|CN|122.23|40.66|591|W|newchwang;eiko,Yingtan|jiangxi|CN|117|28.23|214|W|jing tchan;ung dam,Yintai|shaanxi|CN|109.1|35.12|217|W|,Yishun New Town||SG|103.83|1.43|228|W|,Yiwu|zhejiang|CN|120.08|29.32|1481|W|,Yixing|jiangsu|CN|119.82|31.36|1285|W|,Yizhou|guangxi|CN|108.67|24.5|155|W|,Yogyakarta|yogyakarta|ID|110.36|-7.8|375|W|di yogyakarta;jogjakarta;kota yogyakarta,Yokkaichi|mie|JP|136.62|34.97|305|W|,Yokohama|kanagawa|JP|139.65|35.43|3777|W|jokohama,Yokosuka|kanagawa|JP|139.67|35.28|409|W|jokosuka,Yola|adamawa|NG|12.48|9.21|460|W|,Yonago|tottori|JP|133.33|35.43|148|W|,Yong'an|chongqing|CN|109.46|31.02|144|W|fengjie;feng chieh;kweichow,Yongchuan|chongqing|CN|105.89|29.35|192|W|,Yongji|shanxi|CN|110.44|34.87|452|W|,Yongkang|taiwan|TW|120.26|23.02|233|W|vinh khang;yongkang district,Yongzhou|hunan|CN|111.61|26.42|1020|W|lingling,Yonkers|NY|US|-73.9|40.93|201|NW|,Yopal|casanare department|CO|-72.39|5.34|168|W|,Yorba Linda|CA|US|-117.81|33.89|67|N|,York|england|GB|-1.08|53.96|156|W|,York|PA|US|-76.73|39.96|43|N|,York University Heights|ON|CA|-79.49|43.77|27|N|,Yoshkar-Ola|mariy el republic|RU|47.89|56.64|268|W|iochkar ola;joschkar ola;josjkar ola;joszkar ola;joskar ola,Youngstown|OH|US|-80.65|41.1|64|N|,Yuba City|CA|US|-121.62|39.14|66|N|kota yuba,Yucaipa|CA|US|-117.04|34.03|53|N|,Yuci|shanxi|CN|112.73|37.68|235|W|,Yuen Long|yuen long|HK|114.03|22.45|200|W|,Yuen Long Kau Hui|yuen long|HK|114.03|22.45|169|W|,Yuen Long San Hui|yuen long|HK|114.03|22.43|200|W|,Yuepu|shanghai|CN|121.42|31.43|139|W|,Yueyang|hunan|CN|113.09|29.37|991|W|jue jang,Yukon|OK|US|-97.76|35.51|25|N|,Yulin|guangxi|CN|110.15|22.63|1056|W|ju lin,Yuma|AZ|US|-114.62|32.73|95|N|,Yuncheng|shanxi|CN|110.99|35.02|680|W|jun ccheng,Yunfu|guangdong|CN|112.04|22.93|2612|W|jun fu;van phu,Yunlong|jiangsu|CN|117.25|34.25|345|W|,Yunusobod|tashkent|UZ|69.28|41.37|352|W|,Yuriria|MX11|MX|-101.13|20.21|25|N|,Yushu|qinghai|CN|97.01|33|141|W|,Yuzhno-Sakhalinsk|sakhalin oblast|RU|142.74|46.95|198|W|juzjno sakhalinsk;ioujno sakhalinsk;iujno sahalinsk;iujno sakhalinsk;joezjno sachalinsk;juschno sachalinsk;juzjno sachalinsk;juznosachalinsk;juzno sachalinsk;juzno sahalinsk;yujno sahalinsk;yuzhno sajalinsk,Zaanstad|north holland|NL|4.81|52.45|140|W|,Zabrze|silesia|PL|18.79|50.32|192|W|hindenburg,Zacapu|MX16|MX|-101.79|19.82|50|N|,Zacatecas|MX32|MX|-102.58|22.77|129|N|zacatecas city,Zacatelco|MX29|MX|-98.24|19.22|42|N|,Zacatlan|MX21|MX|-97.96|19.94|33|N|,Zagazig|sharqia|EG|31.5|30.59|430|W|,Zagreb|zagreb|HR|15.98|45.81|663|W|zagabria;zagrep;zagrzeb;zahreb;agram,Zahedan|sistan and baluchestan|IR|60.86|29.5|551|W|,Zama|kanagawa|JP|139.39|35.49|132|W|,Zamboanga|zamboanga peninsula|PH|122.07|6.91|1018|W|zamboanga city,Zamora de Hidalgo|MX16|MX|-102.29|19.98|186|NW|zamora,Zanesville|OH|US|-82.01|39.94|25|N|,Zango|luanda|AO|13.38|-9.01|198|W|,Zanjan|zanjan|IR|48.5|36.68|357|W|zandschan,Zanzibar|zanzibar urban west|TZ|39.2|-6.16|709|W|sansibar stadt;zanzibar by,Zaoyang|hubei|CN|112.75|32.13|184|W|,Zaozhuang|shandong|CN|117.55|34.86|899|W|cao cuang,Zapopan|MX14|MX|-103.39|20.72|1476|NW|,Zaporizhzhya|zaporizhzhia|UA|35.12|47.85|710|W|zaporizjzja;zaporizzja;alessandrovia;saporischschja;zaporiggia;zaporijjia;zaporiyia;zaporizhzhia;zaporoye;zaporozhye;zaporoze;zaporozi;alexandrovsk;saporoschje;saporoshje,Zapotlanejo|MX14|MX|-103.07|20.62|32|N|,Zaragoza|aragon|ES|-0.88|41.66|686|W|saragossa;saragosse;saragozza;saragoca;zaragosa,Zaria|kaduna state|NG|7.72|11.11|980|W|,Zarichnyi|sumy|UA|34.81|50.9|150|W|zarichnyi rayon,Zarqa|zarqa|JO|36.09|32.07|792|W|zarka,Zawiya|az zawiyah|LY|12.73|32.75|186|W|,Zelenograd|moscow|RU|37.18|55.98|215|W|selenograd,Zemun|central serbia|RS|20.4|44.85|155|W|semlin,Zenica|federation of b h|BA|17.9|44.2|164|W|,Zeytinburnu|istanbul|TR|28.9|40.99|280|W|,Zhabei|shanghai|CN|121.46|31.26|840|W|,Zhalantun|inner mongolia|CN|122.74|48.01|132|W|,Zhangjiagang|jiangsu|CN|120.54|31.86|1432|W|,Zhangjiajie|hunan|CN|110.48|29.13|441|W|cang tia tie,Zhangjiakou|hebei|CN|114.87|40.78|692|W|cang tia kchou,Zhangye|gansu|CN|100.45|38.93|507|W|cang jie,Zhangzhou|fujian|CN|117.66|24.51|589|W|chuong chau;cang cou,Zhanjiang|guangdong|CN|110.39|21.23|1400|W|,Zhaodong|heilongjiang|CN|125.96|46.05|154|W|,Zhaoqing|guangdong|CN|112.46|23.05|1553|W|cao cching;shiu hing,Zhaotong|yunnan|CN|103.72|27.32|787|W|chieu thong;cao tchung,Zheleznodorozhnyy|moscow oblast|RU|38.02|55.74|141|W|zjeleznodorozjnyj,Zhengding|hebei|CN|114.57|38.15|193|W|,Zhengzhou|henan|CN|113.65|34.76|4253|W|czengczou;cengcou;ceng cou,Zhenjiang|jiangsu|CN|119.46|32.21|950|W|chinkiang,Zhenping|henan|CN|112.23|33.03|181|W|,Zhenzhou|jiangsu|CN|119.17|32.28|176|W|icheng ku,Zhicheng|hubei|CN|111.5|30.3|159|W|chihkiang,Zhongshan|guangdong|CN|113.38|22.52|3841|W|trung son;xiangshan;cung san,Zhongwei|ningxia|CN|105.19|37.51|1174|W|cung wej,Zhoukou|henan|CN|114.63|33.63|505|W|cou kchou,Zhoushan|zhejiang|CN|122.2|29.99|882|W|,Zhu Cheng City|shandong|CN|119.4|36|1000|W|,Zhubei|taiwan|TW|121.01|24.84|212|W|cu pej,Zhucheng|shandong|CN|119.4|35.99|499|W|,Zhuhai|guangdong|CN|113.57|22.28|2207|W|cu chaj,Zhulebino|moscow|RU|37.85|55.7|150|W|,Zhumadian|henan|CN|114.03|32.98|721|W|,Zhuzhou|hunan|CN|113.15|27.83|1129|W|chu chau;cu cou;jianning,Zhytomyr|zhytomyr oblast|UA|28.68|50.26|261|W|jytomyr;jitomir;schytomyr;zjytomyr;zytomierz;zitomir;zytomyr,Zibo|shandong|CN|118.06|36.79|3129|W|c po;truy bac,Zigong|sichuan|CN|104.78|29.34|1262|W|c kung,Ziguinchor|ziguinchor|SN|-16.27|12.57|214|W|,Zinacantepec|MX15|MX|-99.73|19.28|54|N|,Zinder|zinder region|NE|8.99|13.81|318|W|,Zionsville|IN|US|-86.26|39.95|26|N|,Zipaquira|cundinamarca|CO|-74|5.02|130|W|,Zitong|chongqing|CN|105.83|30.18|212|W|,Ziyang|sichuan|CN|104.65|30.12|905|W|,Zlatoust|chelyabinsk|RU|59.65|55.17|191|W|slatoust;zlato oest;zlatooust,Zliten|misratah|LY|14.57|32.47|203|W|zalitan;zlitan,Zoucheng|shandong|CN|116.97|35.4|277|W|trau thanh,Zuerich|zurich|CH|8.55|47.37|415|W|zurich;curych;zurigo;zurique;zurych;zurih,Zuglo|budapest|HU|19.11|47.52|130|W|lerchenfeld,Zumpango|MX15|MX|-99.1|19.8|280|NW|zumpango de ocampo,Zunyi|guizhou|CN|106.91|27.69|2037|W|cun i;tuan nghia";
@@ -1524,20 +748,20 @@ function E3(n) {
1524
748
  if (a3 && i && P3(a3) !== i && (a3 = null), n.city !== void 0 && n.city !== null) {
1525
749
  let r2 = u2(String(n.city)), s2 = D(r2, R(String(n.city))), c2 = s2 ? _(s2, n.mapKind) : null;
1526
750
  if (c2 && c2.length) {
1527
- let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), T = d2 ? u2(d2) : "", y2 = d2 ? t3(d2) : null, f4 = [], N2 = -1;
751
+ let d2 = n.state === void 0 || n.state === null ? "" : String(n.state).trim(), T = d2 ? u2(d2) : "", y2 = d2 ? t3(d2) : null, f2 = [], N2 = -1;
1528
752
  for (let M2 of c2) {
1529
753
  let l2 = M2.row, p4 = 0;
1530
754
  if (d2 && l2.a1 !== "") if (y2 && l2.a1 === y2 || u2(l2.a1) === T) p4++;
1531
755
  else continue;
1532
756
  if (i) if (G(l2.cc) === i) p4++;
1533
757
  else continue;
1534
- p4 > N2 ? (N2 = p4, f4 = [M2]) : p4 === N2 && f4.push(M2);
758
+ p4 > N2 ? (N2 = p4, f2 = [M2]) : p4 === N2 && f2.push(M2);
1535
759
  }
1536
- f4.some((M2) => M2.primary) && (f4 = f4.filter((M2) => M2.primary));
760
+ f2.some((M2) => M2.primary) && (f2 = f2.filter((M2) => M2.primary));
1537
761
  let A2 = /* @__PURE__ */ new Map();
1538
- for (let M2 of f4) A2.set(M2.row.lon.toFixed(2) + "," + M2.row.lat.toFixed(2), M2.row);
762
+ for (let M2 of f2) A2.set(M2.row.lon.toFixed(2) + "," + M2.row.lat.toFixed(2), M2.row);
1539
763
  if (A2.size === 1) {
1540
- let M2 = f4[0].row;
764
+ let M2 = f2[0].row;
1541
765
  return { lat: M2.lat, lon: M2.lon, precision: "city" };
1542
766
  }
1543
767
  if (A2.size > 1) return { ambiguous: true, matches: A2.size };
@@ -1560,7 +784,7 @@ function E3(n) {
1560
784
  var b = { latlon: 0, city: 1, zip3: 2, state: 3, country: 4 };
1561
785
  var e3 = 8;
1562
786
  function J3(n, e) {
1563
- let t = new Array(n.length), o4 = new Array(n.length), i = new Array(n.length), a3 = /* @__PURE__ */ new Set(), r2 = [], s2 = /* @__PURE__ */ new Set(), c2 = [], d2 = /* @__PURE__ */ new Set(), T = [], y2 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, f4 = 0, N2 = 0, A2 = null;
787
+ let t = new Array(n.length), o4 = new Array(n.length), i = new Array(n.length), a3 = /* @__PURE__ */ new Set(), r2 = [], s2 = /* @__PURE__ */ new Set(), c2 = [], d2 = /* @__PURE__ */ new Set(), T = [], y2 = { latlon: 0, city: 0, zip3: 0, state: 0, country: 0 }, f2 = 0, N2 = 0, A2 = null;
1564
788
  for (let l2 = 0; l2 < n.length; ++l2) {
1565
789
  let p4 = n[l2], C2 = E3({ ...p4, mapKind: e });
1566
790
  if (B3(C2)) {
@@ -1568,7 +792,7 @@ function J3(n, e) {
1568
792
  let S2 = W(p4);
1569
793
  S2 && !d2.has(S2.toLowerCase()) && (d2.add(S2.toLowerCase()), T.length < e3 && T.push(S2));
1570
794
  } else if (C2) {
1571
- if (t[l2] = C2.lat, o4[l2] = C2.lon, i[l2] = C2.precision, f4++, y2[C2.precision]++, (A2 === null || b[C2.precision] > b[A2]) && (A2 = C2.precision), b[C2.precision] > b.city) {
795
+ if (t[l2] = C2.lat, o4[l2] = C2.lon, i[l2] = C2.precision, f2++, y2[C2.precision]++, (A2 === null || b[C2.precision] > b[A2]) && (A2 = C2.precision), b[C2.precision] > b.city) {
1572
796
  let S2 = W(p4);
1573
797
  S2 && !s2.has(S2.toLowerCase()) && (s2.add(S2.toLowerCase()), c2.length < e3 && c2.push(S2));
1574
798
  }
@@ -1579,7 +803,7 @@ function J3(n, e) {
1579
803
  }
1580
804
  }
1581
805
  let M2 = !C3() && n.some((l2) => l2.city !== null && l2.city !== void 0 && String(l2.city).trim() !== "");
1582
- return { lat: t, lon: o4, precisions: i, precision: A2, precisionCounts: y2, coarseExamples: c2, unmatched: r2, ambiguousRows: N2, ambiguousExamples: T, matchedRows: f4, totalRows: n.length, ...M2 ? { cityTableMissing: true } : {} };
806
+ return { lat: t, lon: o4, precisions: i, precision: A2, precisionCounts: y2, coarseExamples: c2, unmatched: r2, ambiguousRows: N2, ambiguousExamples: T, matchedRows: f2, totalRows: n.length, ...M2 ? { cityTableMissing: true } : {} };
1583
807
  }
1584
808
  function W(n) {
1585
809
  let e = [n.city, n.state, n.zip, n.country].filter((t) => t != null && String(t).trim() !== "").map((t) => String(t).trim()).join(", ");
@@ -1740,7 +964,7 @@ function En(n, s2) {
1740
964
  return null;
1741
965
  }
1742
966
  }
1743
- function Yn2(n) {
967
+ function Yn(n) {
1744
968
  switch (n) {
1745
969
  case "country-iso3":
1746
970
  case "country-iso2":
@@ -1867,7 +1091,7 @@ function Qe(t) {
1867
1091
  return ["sum", "average", "median", "min", "max", "count", "distinctcount", "first"];
1868
1092
  }
1869
1093
  }
1870
- function Zn2(t) {
1094
+ function Zn(t) {
1871
1095
  return Qe(t)[0];
1872
1096
  }
1873
1097
  function Qn(t, e) {
@@ -1938,7 +1162,7 @@ function re2(e) {
1938
1162
  function de(e, t) {
1939
1163
  return y(t, fn) ? true : oe2(e).some((n) => /^\d{5}(-\d{4})?$/.test(n.replace(/\.0+$/, "")));
1940
1164
  }
1941
- function Yn3(e, t) {
1165
+ function Yn2(e, t) {
1942
1166
  let n = F3(e);
1943
1167
  if (n.length === 0) return 0;
1944
1168
  let o4 = 0;
@@ -1955,7 +1179,7 @@ function Qn2(e, t) {
1955
1179
  for (let o4 of oe2(e)) t(o4) && n++;
1956
1180
  return n;
1957
1181
  }
1958
- function Xn2(e, t, n, o4, l2) {
1182
+ function Xn(e, t, n, o4, l2) {
1959
1183
  let u4 = [], a3 = [], i = {}, h4 = {}, C2 = new Set(e), y2 = (s2) => t.map((d2) => d2[s2]);
1960
1184
  for (let s2 of ["city", "country"]) {
1961
1185
  let d2 = n?.[s2];
@@ -1966,10 +1190,10 @@ function Xn2(e, t, n, o4, l2) {
1966
1190
  let d2 = n?.[s2];
1967
1191
  d2 && g5.has(d2) && (i[s2] = d2);
1968
1192
  }
1969
- let f4 = n?.zip;
1970
- if (f4 && C2.has(f4)) {
1971
- let s2 = y2(f4), d2 = re2(s2);
1972
- d2 < 95 ? a3.push(`zip=${f4} (only ${d2}% of values read as ZIPs)`) : de(s2, f4) ? i.zip = f4 : a3.push(`zip=${f4} (all values are 3-4 digits with nothing to say they are postal)`);
1193
+ let f2 = n?.zip;
1194
+ if (f2 && C2.has(f2)) {
1195
+ let s2 = y2(f2), d2 = re2(s2);
1196
+ d2 < 95 ? a3.push(`zip=${f2} (only ${d2}% of values read as ZIPs)`) : de(s2, f2) ? i.zip = f2 : a3.push(`zip=${f2} (all values are 3-4 digits with nothing to say they are postal)`);
1973
1197
  }
1974
1198
  let c2 = n?.state;
1975
1199
  if (c2 && C2.has(c2)) {
@@ -2011,7 +1235,7 @@ function Xn2(e, t, n, o4, l2) {
2011
1235
  let s2 = null;
2012
1236
  for (let d2 of b4) {
2013
1237
  if (p4.has(d2)) continue;
2014
- let S2 = y2(d2), O4 = Yn3(S2, o4);
1238
+ let S2 = y2(d2), O4 = Yn2(S2, o4);
2015
1239
  O4 < D3 || ee3(S2, (K3) => j3(K3, o4)) < Z3 || (!s2 || O4 > s2.pct) && (s2 = { name: d2, pct: O4 });
2016
1240
  }
2017
1241
  s2 && (i.city = s2.name, u4.push(`city=${s2.name} (${s2.pct}% known cities)`));
@@ -2031,3033 +1255,19 @@ var kr = Object.freeze({ RENDER_START: "render-start", RENDER_OK: "render-ok", R
2031
1255
  var Gr = Object.freeze(["open", "generate", "version", "rebind", "data", "sample", "fix", "resize", "other"]);
2032
1256
  var Ae = 2 ** 31 - 1;
2033
1257
 
2034
- // src/payload.ts
2035
- var ROW_IDX_COLUMN = "__rowIdx__";
2036
- function resolvePointChannel(cols, rowObjs, point) {
2037
- let pLat = null;
2038
- let pLon = null;
2039
- let pPrec = null;
2040
- let geoPoint;
2041
- let bind = point ?? null;
2042
- let rolesBackfilled = [];
2043
- let rolesRefused = [];
2044
- let labelCol;
2045
- if (bind) {
2046
- const dims = cols.filter((c2) => !c2.isMeasure).map((c2) => c2.name);
2047
- const res = Xn2(dims, rowObjs, bind, point?.mapKind, cols.map((c2) => c2.name));
2048
- bind = res.bind;
2049
- rolesBackfilled = res.backfilled;
2050
- rolesRefused = res.refused;
2051
- const lf = res.labelFallback;
2052
- labelCol = lf && (lf.country || lf.city || lf.state || lf.zip);
2053
- }
2054
- const hasPointBind = !!bind && !!(bind.city || bind.state || bind.zip || bind.country || bind.lat && bind.lon);
2055
- if (hasPointBind) {
2056
- const p4 = bind;
2057
- const built = J3(rowObjs.map((r2) => ({
2058
- lat: p4.lat ? r2[p4.lat] : null,
2059
- lon: p4.lon ? r2[p4.lon] : null,
2060
- city: p4.city ? r2[p4.city] : null,
2061
- state: p4.state ? r2[p4.state] : null,
2062
- zip: p4.zip ? r2[p4.zip] : null,
2063
- country: p4.country ? r2[p4.country] : null,
2064
- label: labelCol ? r2[labelCol] : null
2065
- })), point?.mapKind);
2066
- pLat = built.lat;
2067
- pLon = built.lon;
2068
- pPrec = built.precisions;
2069
- geoPoint = {
2070
- precision: built.precision,
2071
- precisionCounts: built.precisionCounts,
2072
- coarseExamples: built.coarseExamples,
2073
- // STRICTLY no-match. Ambiguous rows are deliberately NOT in here: new charts
2074
- // report them from ambiguousRows/ambiguousExamples, while OLD generated code
2075
- // still shows them — it computes its own off-map count from null coordinates
2076
- // and takes max(offMap, unplaced), so the not-shown total stays right without
2077
- // double-counting on either side of the upgrade.
2078
- unplaced: built.totalRows - built.matchedRows - built.ambiguousRows,
2079
- unplacedExamples: built.unmatched.slice(0, 8),
2080
- ambiguousRows: built.ambiguousRows,
2081
- ...built.ambiguousExamples.length ? { ambiguousExamples: built.ambiguousExamples } : {},
2082
- // Omitted entirely when nothing was adjusted, so the common case adds no bytes
2083
- // and a chart can treat presence as "something about this binding is worth
2084
- // saying".
2085
- ...rolesBackfilled.length ? { rolesBackfilled } : {},
2086
- ...rolesRefused.length ? { rolesRefused } : {}
2087
- };
2088
- }
2089
- return { lat: pLat, lon: pLon, prec: pPrec, geoPoint, rolesRefused };
2090
- }
2091
- function buildRenderPayload(cols, rowObjs, geo, point, destination, opts) {
2092
- cols = cols.filter((c2) => c2.name !== ROW_IDX_COLUMN);
2093
- let utcDayColumns = null;
2094
- if (opts?.utcDays) {
2095
- const norm = ge(cols, rowObjs);
2096
- rowObjs = norm.rows;
2097
- utcDayColumns = norm.columns;
2098
- }
2099
- const o4 = resolvePointChannel(cols, rowObjs, point);
2100
- const d2 = resolvePointChannel(cols, rowObjs, destination);
2101
- const pLat = o4.lat, pLon = o4.lon, pPrec = o4.prec;
2102
- const dLat = d2.lat, dLon = d2.lon, dPrec = d2.prec;
2103
- const geoPoint = o4.geoPoint;
2104
- const geoPointDest = d2.geoPoint;
2105
- const rolesRefused = [...o4.rolesRefused, ...d2.rolesRefused.map((s2) => `destination: ${s2}`)];
2106
- let geoIso = null;
2107
- let geoUnmatched;
2108
- let geoUnmatchedDistinct;
2109
- if (geo && geo.column && geo.kind && Yn2(geo.kind)) {
2110
- const built = Fn(rowObjs.map((r2) => r2[geo.column]), geo.kind);
2111
- geoIso = built.iso;
2112
- geoUnmatched = { count: built.totalRows - built.matchedRows, examples: built.unmatched.slice(0, 8) };
2113
- geoUnmatchedDistinct = built.unmatched.length;
2114
- }
2115
- const hostNames = [ROW_IDX_COLUMN];
2116
- if (geoIso) hostNames.push("__geoIso__");
2117
- if (pLat) hostNames.push("__geoLat__", "__geoLon__", "__geoPrecision__");
2118
- if (dLat) hostNames.push("__geoLatD__", "__geoLonD__", "__geoPrecisionD__");
2119
- const owned = new Set(hostNames);
2120
- if (cols.some((c2) => owned.has(c2.name))) cols = cols.filter((c2) => !owned.has(c2.name));
2121
- const colNames = cols.map((c2) => c2.name);
2122
- const aliasCols = [];
2123
- if (opts?.aliases && opts.aliases.length > 0) {
2124
- const claimed = /* @__PURE__ */ new Set([...colNames, ...hostNames]);
2125
- for (const a3 of opts.aliases) {
2126
- const from = a3 ? colNames.indexOf(a3.name) : -1;
2127
- if (from < 0 || !a3.alias || claimed.has(a3.alias)) continue;
2128
- claimed.add(a3.alias);
2129
- aliasCols.push({ from, name: a3.alias });
2130
- }
2131
- }
2132
- const extra = hostNames.length + aliasCols.length;
2133
- const out = new Array(rowObjs.length);
2134
- for (let r2 = 0; r2 < rowObjs.length; r2++) {
2135
- const row = rowObjs[r2];
2136
- const a3 = new Array(cols.length + extra);
2137
- for (let c2 = 0; c2 < cols.length; c2++) {
2138
- const v = row[colNames[c2]];
2139
- if (v instanceof Date) {
2140
- a3[c2] = v.toISOString();
2141
- } else {
2142
- a3[c2] = v ?? null;
2143
- }
2144
- }
2145
- let k3 = cols.length;
2146
- a3[k3++] = r2;
2147
- if (geoIso) a3[k3++] = geoIso[r2];
2148
- if (pLat && pLon) {
2149
- a3[k3++] = pLat[r2];
2150
- a3[k3++] = pLon[r2];
2151
- a3[k3++] = pPrec ? pPrec[r2] : null;
2152
- }
2153
- if (dLat && dLon) {
2154
- a3[k3++] = dLat[r2];
2155
- a3[k3++] = dLon[r2];
2156
- a3[k3++] = dPrec ? dPrec[r2] : null;
2157
- }
2158
- for (const ac of aliasCols) a3[k3++] = a3[ac.from];
2159
- out[r2] = a3;
2160
- }
2161
- const colsOut = [...cols, { name: ROW_IDX_COLUMN, dataType: "Integer", isMeasure: false, modelDesc: "" }];
2162
- if (geoIso) colsOut.push({ name: "__geoIso__", dataType: "String", isMeasure: false, modelDesc: "" });
2163
- if (pLat) colsOut.push(
2164
- { name: "__geoLat__", dataType: "Double", isMeasure: false, modelDesc: "" },
2165
- { name: "__geoLon__", dataType: "Double", isMeasure: false, modelDesc: "" },
2166
- // Host metadata like the two above: which TIER placed this row ("latlon" | "city" |
2167
- // "zip3" | "state" | "country"), null when it was not placed. Never a dimension,
2168
- // never a label, never a colour grouping.
2169
- { name: "__geoPrecision__", dataType: "String", isMeasure: false, modelDesc: "" }
2170
- );
2171
- if (dLat) colsOut.push(
2172
- { name: "__geoLatD__", dataType: "Double", isMeasure: false, modelDesc: "" },
2173
- { name: "__geoLonD__", dataType: "Double", isMeasure: false, modelDesc: "" },
2174
- { name: "__geoPrecisionD__", dataType: "String", isMeasure: false, modelDesc: "" }
2175
- );
2176
- for (const ac of aliasCols) colsOut.push({ ...cols[ac.from], name: ac.name, aliasOf: cols[ac.from].name });
2177
- return {
2178
- columns: colsOut,
2179
- rows: out,
2180
- geoUnmatched,
2181
- geoUnmatchedDistinct,
2182
- geoPoint,
2183
- // Omitted when there is no second endpoint, so every existing chart's options object
2184
- // is unchanged rather than gaining an undefined key.
2185
- ...geoPointDest ? { geoPointDest } : {},
2186
- // Survives a refusal that placed nothing — see geoPointRefused. Omitted when empty so
2187
- // the ordinary case adds no bytes.
2188
- ...rolesRefused.length ? { geoPointRefused: rolesRefused } : {},
2189
- ...utcDayColumns ? { dateCellsAreUtcDays: true, utcDayColumns } : {}
2190
- };
2191
- }
2192
-
2193
- // src/codeComments.ts
2194
- function stripJsComments(code) {
2195
- const src = String(code ?? "");
2196
- const n = src.length;
2197
- let out = "";
2198
- let i = 0;
2199
- const templates = [];
2200
- let prevSig = "";
2201
- let prevWord = "";
2202
- let wordOpen = false;
2203
- const regexMayFollow = () => {
2204
- if (prevSig === "") return true;
2205
- if ("(,=:[!&|?{};+-*%<>~^".includes(prevSig)) return true;
2206
- return /^(return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await)$/.test(prevWord);
2207
- };
2208
- while (i < n) {
2209
- const ch = src[i];
2210
- const next = i + 1 < n ? src[i + 1] : "";
2211
- const top = templates.length > 0 ? templates[templates.length - 1] : null;
2212
- if (top === -1) {
2213
- if (ch === "\\") {
2214
- out += src.slice(i, i + 2);
2215
- i += 2;
2216
- continue;
2217
- }
2218
- if (ch === "`") {
2219
- templates.pop();
2220
- out += ch;
2221
- i++;
2222
- prevSig = "`";
2223
- prevWord = "";
2224
- wordOpen = false;
2225
- continue;
2226
- }
2227
- if (ch === "$" && next === "{") {
2228
- templates[templates.length - 1] = 0;
2229
- out += "${";
2230
- i += 2;
2231
- prevSig = "{";
2232
- prevWord = "";
2233
- wordOpen = false;
2234
- continue;
2235
- }
2236
- out += ch;
2237
- i++;
2238
- continue;
2239
- }
2240
- if (ch === "/" && next === "/") {
2241
- let j4 = i + 2;
2242
- while (j4 < n && src[j4] !== "\n" && src[j4] !== "\r") j4++;
2243
- out += " ";
2244
- i = j4;
2245
- wordOpen = false;
2246
- continue;
2247
- }
2248
- if (ch === "/" && next === "*") {
2249
- const end = src.indexOf("*/", i + 2);
2250
- const body = end < 0 ? src.slice(i + 2) : src.slice(i + 2, end);
2251
- const newlines = body.match(/\r\n|\r|\n/g);
2252
- out += newlines ? newlines.join("") : " ";
2253
- i = end < 0 ? n : end + 2;
2254
- wordOpen = false;
2255
- continue;
2256
- }
2257
- if (ch === "'" || ch === '"') {
2258
- let j4 = i + 1;
2259
- while (j4 < n && src[j4] !== ch && src[j4] !== "\n") j4 += src[j4] === "\\" ? 2 : 1;
2260
- out += src.slice(i, Math.min(j4 + 1, n));
2261
- i = j4 + 1;
2262
- prevSig = ch;
2263
- prevWord = "";
2264
- wordOpen = false;
2265
- continue;
2266
- }
2267
- if (ch === "`") {
2268
- templates.push(-1);
2269
- out += ch;
2270
- i++;
2271
- wordOpen = false;
2272
- continue;
2273
- }
2274
- if (ch === "/" && regexMayFollow()) {
2275
- let j4 = i + 1, inClass = false;
2276
- while (j4 < n && src[j4] !== "\n") {
2277
- const c2 = src[j4];
2278
- if (c2 === "\\") {
2279
- j4 += 2;
2280
- continue;
2281
- }
2282
- if (c2 === "[") inClass = true;
2283
- else if (c2 === "]") inClass = false;
2284
- else if (c2 === "/" && !inClass) break;
2285
- j4++;
2286
- }
2287
- if (j4 < n && src[j4] === "/") {
2288
- j4++;
2289
- while (j4 < n && /[A-Za-z]/.test(src[j4])) j4++;
2290
- out += src.slice(i, j4);
2291
- i = j4;
2292
- prevSig = "/";
2293
- prevWord = "";
2294
- wordOpen = false;
2295
- continue;
2296
- }
2297
- }
2298
- if (top !== null && top >= 0) {
2299
- if (ch === "{") templates[templates.length - 1] = top + 1;
2300
- else if (ch === "}") {
2301
- if (top === 0) {
2302
- templates[templates.length - 1] = -1;
2303
- out += ch;
2304
- i++;
2305
- continue;
2306
- }
2307
- templates[templates.length - 1] = top - 1;
2308
- }
2309
- }
2310
- out += ch;
2311
- i++;
2312
- if (/\s/.test(ch)) {
2313
- wordOpen = false;
2314
- } else {
2315
- if (/[A-Za-z0-9_$]/.test(ch)) {
2316
- prevWord = wordOpen ? prevWord + ch : ch;
2317
- wordOpen = true;
2318
- } else {
2319
- prevWord = "";
2320
- wordOpen = false;
2321
- }
2322
- prevSig = ch;
2323
- }
2324
- }
2325
- return out;
2326
- }
2327
-
2328
- // src/selection.ts
2329
- function rowIdxsFromMark(el) {
2330
- if (!el) return [];
2331
- const raw = el.getAttribute("data-row-idx");
2332
- if (!raw) return [];
2333
- const out = [];
2334
- for (const tok of raw.split(",")) {
2335
- const n = parseInt(tok.trim(), 10);
2336
- if (!isNaN(n) && n >= 0) out.push(n);
2337
- }
2338
- return out;
2339
- }
2340
- function nextSelection(current, rowIdxs, mods = {}) {
2341
- const cur = Array.from(current ?? []);
2342
- if (mods.ctrl || mods.shift) {
2343
- const next = new Set(cur);
2344
- for (const r2 of rowIdxs) {
2345
- if (next.has(r2)) next.delete(r2);
2346
- else next.add(r2);
2347
- }
2348
- return Array.from(next);
2349
- }
2350
- const same = cur.length === rowIdxs.length && rowIdxs.every((r2) => cur.includes(r2));
2351
- return same ? [] : rowIdxs.slice();
2352
- }
2353
- function selectionRuleOf(container) {
2354
- try {
2355
- const el = container?.querySelector?.(`[${SELECTION_RULE_ATTR}]`);
2356
- return el?.getAttribute(SELECTION_RULE_ATTR) === SELECTION_RULE_CLICKED_MARKS ? "clicked-marks" : "any-row";
2357
- } catch {
2358
- return "any-row";
2359
- }
2360
- }
2361
- function markKeyOf(el) {
2362
- if (!el) return "";
2363
- const k3 = el.getAttribute(MARK_KEY_ATTR);
2364
- if (k3 != null && k3 !== "") return k3;
2365
- return "rows:" + (el.getAttribute(ROW_IDX_ATTR) || "").replace(/\s+/g, "");
2366
- }
2367
- var toSet = (s2) => new Set(Array.from(s2 ?? []));
2368
- function sameRowSet(a3, b4) {
2369
- const A2 = toSet(a3), B4 = toSet(b4);
2370
- if (A2.size !== B4.size) return false;
2371
- for (const r2 of A2) if (!B4.has(r2)) return false;
2372
- return true;
2373
- }
2374
- function planSelectionPaint(marks, selection, rule, clicked) {
2375
- const sel = toSet(selection);
2376
- if (sel.size === 0) return { on: marks.map(() => false), mode: "none", keys: [] };
2377
- const anyRow = () => marks.map((m4) => m4.rows.some((r2) => sel.has(r2)));
2378
- if (rule !== "clicked-marks") return { on: anyRow(), mode: "any-row", keys: [] };
2379
- if (clicked && clicked.keys.length && sameRowSet(clicked.selection, sel)) {
2380
- const want = new Set(clicked.keys);
2381
- const on = marks.map((m4) => m4.rows.length > 0 && want.has(m4.key));
2382
- if (on.some(Boolean)) return { on, mode: "clicked", keys: marks.filter((_4, i) => on[i]).map((m4) => m4.key) };
2383
- }
2384
- const exact = marks.map((m4) => m4.rows.length > 0 && sameRowSet(m4.rows, sel));
2385
- if (exact.some(Boolean)) return { on: exact, mode: "exact", keys: marks.filter((_4, i) => exact[i]).map((m4) => m4.key) };
2386
- return { on: anyRow(), mode: "fallback-any-row", keys: [] };
2387
- }
2388
- function nextClickedMarks(prev, current, key, next, mods = {}) {
2389
- if (!next.length) return null;
2390
- if (!(mods.ctrl || mods.shift)) return { keys: [key], selection: next.slice() };
2391
- const held = prev && sameRowSet(prev.selection, current) ? prev.keys : [];
2392
- const keys = held.includes(key) ? held.filter((k3) => k3 !== key) : [...held, key];
2393
- return { keys, selection: next.slice() };
2394
- }
2395
- function isInsideControl(target, container) {
2396
- let el = target;
2397
- if (el && el.nodeType !== 1) el = el.parentElement ?? el.parentNode ?? null;
2398
- while (el && el !== container) {
2399
- if (el.nodeType === 1 && el.classList?.contains?.(CONTROL_CLASS)) return true;
2400
- el = el.parentElement ?? el.parentNode ?? null;
2401
- }
2402
- return false;
2403
- }
2404
- function createMarkResolver(env) {
2405
- const { root, doc, log } = env;
2406
- const isElement = (t) => {
2407
- const E4 = doc?.defaultView?.Element ?? globalThis.Element;
2408
- if (E4 && t instanceof E4) return true;
2409
- return !!t && typeof t.closest === "function" && typeof t.getAttribute === "function";
2410
- };
2411
- const viewStyle = (n) => {
2412
- try {
2413
- const gcs = doc?.defaultView?.getComputedStyle ?? (typeof getComputedStyle === "function" ? getComputedStyle : null);
2414
- return gcs ? gcs(n).pointerEvents : "";
2415
- } catch {
2416
- return "";
2417
- }
2418
- };
2419
- const isInvisibleStrokePath = (el) => {
2420
- if (el.tagName.toLowerCase() !== "path") return false;
2421
- const f4 = el.getAttribute("fill");
2422
- if (f4 !== null && f4 !== "" && f4 !== "none" && f4 !== "transparent") return false;
2423
- const s2 = (el.getAttribute("stroke") || "").trim().toLowerCase();
2424
- const so = parseFloat(el.getAttribute("stroke-opacity") || "1");
2425
- return s2 === "transparent" || s2 === "none" || so <= 0.01;
2426
- };
2427
- const distToPathCenterline = (el, x3, y2) => {
2428
- const L4 = el.getTotalLength();
2429
- if (!(L4 > 0)) return Number.MAX_VALUE;
2430
- const m4 = el.getScreenCTM();
2431
- if (!m4) return Number.MAX_VALUE;
2432
- let best = Number.MAX_VALUE;
2433
- const N2 = 64;
2434
- for (let i = 0; i <= N2; i++) {
2435
- const pt2 = el.getPointAtLength(L4 * i / N2);
2436
- const dx = m4.a * pt2.x + m4.c * pt2.y + m4.e - x3;
2437
- const dy = m4.b * pt2.x + m4.d * pt2.y + m4.f - y2;
2438
- const d2 = dx * dx + dy * dy;
2439
- if (d2 < best) best = d2;
2440
- }
2441
- return Math.sqrt(best);
2442
- };
2443
- const refineHitCorridor = (mark, x3, y2, sel) => {
2444
- try {
2445
- if (!mark || !isInvisibleStrokePath(mark) || !mark.getAttribute("data-row-idx")) return mark;
2446
- const stack = doc.elementsFromPoint(x3, y2);
2447
- const candidates = [];
2448
- for (const el of stack) {
2449
- if (!root.contains(el)) continue;
2450
- if (!el.matches || !el.matches(sel)) continue;
2451
- if (!el.getAttribute("data-row-idx")) continue;
2452
- if (!isInvisibleStrokePath(el)) continue;
2453
- candidates.push(el);
2454
- }
2455
- if (candidates.indexOf(mark) < 0) candidates.push(mark);
2456
- if (candidates.length < 2) return mark;
2457
- let best = mark;
2458
- let bestD = Number.MAX_VALUE;
2459
- for (const el of candidates) {
2460
- const d2 = distToPathCenterline(el, x3, y2);
2461
- if (d2 < bestD) {
2462
- bestD = d2;
2463
- best = el;
2464
- }
2465
- }
2466
- if (best !== mark) {
2467
- log("d3-hit-corridor-refined", {
2468
- candidates: candidates.length,
2469
- distPx: Math.round(bestD),
2470
- fromRows: (mark.getAttribute("data-row-idx") || "").slice(0, 24),
2471
- toRows: (best.getAttribute("data-row-idx") || "").slice(0, 24)
2472
- });
2473
- }
2474
- return best;
2475
- } catch {
2476
- return mark;
2477
- }
2478
- };
2479
- const findMark = (target, sel = ".d3-mark", ev) => {
2480
- if (!isElement(target)) return null;
2481
- const el = target;
2482
- const m4 = el.closest(sel);
2483
- if (m4 && ev) return refineHitCorridor(m4, ev.clientX, ev.clientY, sel);
2484
- return m4;
2485
- };
2486
- const penetrateOverlayAt = (x3, y2, sel) => {
2487
- try {
2488
- const stack = doc.elementsFromPoint(x3, y2);
2489
- for (const el of stack) {
2490
- if (!root.contains(el) || !isElement(el)) continue;
2491
- const cand = el.matches(sel) ? el : el.closest(sel);
2492
- if (!cand || !root.contains(cand) || !cand.getAttribute("data-row-idx")) continue;
2493
- log("d3_click-overlay-penetrated", { tag: el.tagName, cls: el.getAttribute("class"), via: el === cand ? "self" : "closest" });
2494
- return cand;
2495
- }
2496
- } catch {
2497
- }
2498
- return null;
2499
- };
2500
- const resolveByGeometry = (x3, y2, sel) => {
2501
- try {
2502
- const cands = root.querySelectorAll(sel);
2503
- let best = null, bestArea = Number.MAX_VALUE;
2504
- if (cands.length <= 600) {
2505
- for (const el of Array.from(cands)) {
2506
- if (!el.getAttribute("data-row-idx")) continue;
2507
- const r2 = el.getBoundingClientRect ? el.getBoundingClientRect() : null;
2508
- if (!r2 || r2.width <= 0 || r2.height <= 0) continue;
2509
- if (x3 < r2.left || x3 > r2.right || y2 < r2.top || y2 > r2.bottom) continue;
2510
- const area2 = r2.width * r2.height;
2511
- if (area2 < bestArea) {
2512
- bestArea = area2;
2513
- best = el;
2514
- }
2515
- }
2516
- }
2517
- const hasHittableShape = (node) => {
2518
- const SHAPE = /^(rect|circle|ellipse|path|line|polygon|polyline|text|image|use)$/;
2519
- const all = [node, ...Array.from(node.querySelectorAll("*"))];
2520
- for (const n of all) {
2521
- const tag = (n.tagName || "").toLowerCase();
2522
- if (!SHAPE.test(tag)) continue;
2523
- const pe = viewStyle(n);
2524
- if (pe && pe !== "none") return true;
2525
- }
2526
- return false;
2527
- };
2528
- if (best && !hasHittableShape(best)) {
2529
- log("d3_click-geom-resolved", { rows: (best.getAttribute("data-row-idx") || "").slice(0, 24) });
2530
- return best;
2531
- } else if (best) {
2532
- log("d3_click-geom-skip-hittable", {});
2533
- }
2534
- } catch {
2535
- }
2536
- return null;
2537
- };
2538
- return { isInvisibleStrokePath, distToPathCenterline, refineHitCorridor, findMark, rowIdxsFromMark, penetrateOverlayAt, resolveByGeometry };
2539
- }
2540
- function collectD3GlyphCenters(container, baseRect, out) {
2541
- const Point = container.ownerDocument?.defaultView?.DOMPoint ?? globalThis.DOMPoint;
2542
- const marks = container.querySelectorAll(`.${MARK_CLASS}.${MARK_SELECTED_CLASS}`);
2543
- const rects = [];
2544
- for (let i = 0; i < marks.length; i++) {
2545
- const r2 = marks[i].getBoundingClientRect();
2546
- rects.push(r2);
2547
- }
2548
- const CONTAINMENT_CAP = 300;
2549
- const EPS2 = 1;
2550
- const filterContainers = marks.length <= CONTAINMENT_CAP;
2551
- const enclosesAnother = (ci) => {
2552
- const c2 = rects[ci];
2553
- const cArea = c2.width * c2.height;
2554
- if (cArea <= 0) return false;
2555
- for (let mj = 0; mj < rects.length; mj++) {
2556
- if (mj === ci) continue;
2557
- const m4 = rects[mj];
2558
- const mArea = m4.width * m4.height;
2559
- if (mArea <= 0 || mArea >= cArea) continue;
2560
- if (m4.left >= c2.left - EPS2 && m4.right <= c2.right + EPS2 && m4.top >= c2.top - EPS2 && m4.bottom <= c2.bottom + EPS2) return true;
2561
- }
2562
- return false;
2563
- };
2564
- for (let i = 0; i < marks.length; i++) {
2565
- const el = marks[i];
2566
- const r2 = rects[i];
2567
- if (r2.width === 0 && r2.height === 0) continue;
2568
- if (filterContainers && enclosesAnother(i)) continue;
2569
- const tag = el.tagName.toLowerCase();
2570
- let sx;
2571
- let sy;
2572
- const cxA = el.getAttribute("data-cx"), cyA = el.getAttribute("data-cy");
2573
- if (cxA != null && cyA != null && typeof el.getScreenCTM === "function") {
2574
- const ctm = el.getScreenCTM();
2575
- const cxN = parseFloat(cxA), cyN = parseFloat(cyA);
2576
- if (ctm && isFinite(cxN) && isFinite(cyN)) {
2577
- const p4 = new Point(cxN, cyN).matrixTransform(ctm);
2578
- sx = p4.x;
2579
- sy = p4.y;
2580
- }
2581
- }
2582
- if (sx === void 0 && tag === "path" && typeof el.getPointAtLength === "function") {
2583
- try {
2584
- const len = el.getTotalLength();
2585
- const ctm = el.getScreenCTM();
2586
- if (len > 0 && ctm) {
2587
- const dAttr = el.getAttribute("d") || "";
2588
- const isArcSector = /[Aa]/.test(dAttr) && !/[CcSsQqTt]/.test(dAttr);
2589
- let local;
2590
- if (isArcSector) {
2591
- const N2 = 24;
2592
- let ax = 0, ay = 0;
2593
- for (let k3 = 0; k3 < N2; k3++) {
2594
- const sp = el.getPointAtLength(len * k3 / N2);
2595
- ax += sp.x;
2596
- ay += sp.y;
2597
- }
2598
- const cand = new Point(ax / N2, ay / N2);
2599
- let inside = true;
2600
- try {
2601
- if (typeof el.isPointInFill === "function") {
2602
- inside = el.isPointInFill(cand);
2603
- }
2604
- } catch {
2605
- inside = true;
2606
- }
2607
- if (inside) local = cand;
2608
- }
2609
- if (!local) local = el.getPointAtLength(len / 2);
2610
- const p4 = local.matrixTransform(ctm);
2611
- sx = p4.x;
2612
- sy = p4.y;
2613
- }
2614
- } catch {
2615
- }
2616
- }
2617
- if (sx === void 0 || sy === void 0) {
2618
- const isRect = tag === "rect";
2619
- sx = isRect ? r2.left + r2.width * 0.8 : r2.left + r2.width / 2;
2620
- sy = isRect ? r2.top + r2.height * 0.2 : r2.top + r2.height / 2;
2621
- }
2622
- out.push({ x: sx - baseRect.left, y: sy - baseRect.top });
2623
- }
2624
- }
2625
- var SELECTION_GLYPH_CLASS = "lch-sel-glyph";
2626
- function clearSelectionGlyphs(overlay) {
2627
- if (overlay) {
2628
- while (overlay.firstChild) overlay.removeChild(overlay.firstChild);
2629
- }
2630
- }
2631
- function paintSelectionGlyphs(overlay, centers, style) {
2632
- const doc = overlay.ownerDocument;
2633
- const frag = doc.createDocumentFragment();
2634
- const count = Math.min(centers.length, style.max ?? 600);
2635
- for (let i = 0; i < count; i++) {
2636
- const c2 = centers[i];
2637
- const g5 = doc.createElement("span");
2638
- g5.className = SELECTION_GLYPH_CLASS;
2639
- g5.textContent = style.symbol;
2640
- g5.style.position = "absolute";
2641
- g5.style.left = c2.x + "px";
2642
- g5.style.top = c2.y + "px";
2643
- g5.style.transform = "translate(-50%, -50%)";
2644
- g5.style.font = "700 11px/1 system-ui, -apple-system, Segoe UI, sans-serif";
2645
- g5.style.color = style.color;
2646
- const halo = style.halo;
2647
- g5.style.textShadow = `-1px -1px 1px ${halo}, 1px -1px 1px ${halo}, -1px 1px 1px ${halo}, 1px 1px 1px ${halo}, 0 0 2px ${halo}`;
2648
- g5.style.pointerEvents = "none";
2649
- frag.appendChild(g5);
2650
- }
2651
- overlay.appendChild(frag);
2652
- return count;
2653
- }
2654
-
2655
- // src/hitTargets.ts
2656
- var SVG_NS = "http://www.w3.org/2000/svg";
2657
- var HIT_ATTR = "data-lch-hit";
2658
- var ELEMENT_CAP2 = 5e3;
2659
- var mapsPresentationAttributes = /* @__PURE__ */ new WeakMap();
2660
- function engineMapsPresentationAttributes(ownerDoc, view) {
2661
- if (!ownerDoc || typeof ownerDoc !== "object") return false;
2662
- const known = mapsPresentationAttributes.get(ownerDoc);
2663
- if (known !== void 0) return known;
2664
- let maps = false;
2665
- try {
2666
- const host = ownerDoc.documentElement;
2667
- const probe = ownerDoc.createElementNS(SVG_NS, "svg");
2668
- const shape = ownerDoc.createElementNS(SVG_NS, "rect");
2669
- shape.setAttribute("fill", "none");
2670
- probe.appendChild(shape);
2671
- host.appendChild(probe);
2672
- try {
2673
- maps = String(view.getComputedStyle(shape).fill ?? "").trim().toLowerCase() === "none";
2674
- } finally {
2675
- host.removeChild(probe);
2676
- }
2677
- } catch {
2678
- maps = false;
2679
- }
2680
- mapsPresentationAttributes.set(ownerDoc, maps);
2681
- return maps;
2682
- }
2683
- function ensureCrossfilterHitTargets(container, doc) {
2684
- const report = { tagged: 0, hitRects: 0, peFlips: 0, peStrokeOnly: 0 };
2685
- try {
2686
- if (!container || typeof container.querySelectorAll !== "function") return report;
2687
- const els = container.querySelectorAll(
2688
- `.${MARK_CLASS}, .${LEGEND_MARK_CLASS}, .${AXIS_FILTER_CLASS}`
2689
- );
2690
- report.tagged = els.length;
2691
- if (els.length === 0 || els.length > ELEMENT_CAP2) return report;
2692
- const ownerDoc = doc ?? container.ownerDocument;
2693
- const view = ownerDoc?.defaultView;
2694
- const computed = (el) => {
2695
- try {
2696
- return view?.getComputedStyle ? view.getComputedStyle(el) : null;
2697
- } catch {
2698
- return null;
2699
- }
2700
- };
2701
- for (const el of Array.from(els)) {
2702
- const tag = String(el.tagName || "").toLowerCase();
2703
- if (tag === "g") {
2704
- if (!el.hasAttribute?.(ROW_IDX_ATTR)) continue;
2705
- if (el.querySelector?.(`rect[${HIT_ATTR}="1"]`)) continue;
2706
- const cls = el.getAttribute?.("class") || "";
2707
- const isFurniture = cls.indexOf(LEGEND_MARK_CLASS) >= 0 || cls.indexOf(AXIS_FILTER_CLASS) >= 0;
2708
- if (!isFurniture) {
2709
- let hasHittableChild = false;
2710
- const kids = el.querySelectorAll?.("*") ?? [];
2711
- for (const kid of Array.from(kids)) {
2712
- const ktag = String(kid.tagName || "").toLowerCase();
2713
- if (ktag === "g" || ktag === "tspan" || ktag === "title" || ktag === "defs") continue;
2714
- const cs = computed(kid);
2715
- if (!cs || cs.pointerEvents !== "none") {
2716
- hasHittableChild = true;
2717
- break;
2718
- }
2719
- }
2720
- if (hasHittableChild) continue;
2721
- }
2722
- let bb = null;
2723
- try {
2724
- bb = el.getBBox?.();
2725
- } catch {
2726
- bb = null;
2727
- }
2728
- if (!bb || !(bb.width > 0) || !(bb.height > 0)) continue;
2729
- const rect = ownerDoc.createElementNS(SVG_NS, "rect");
2730
- rect.setAttribute("x", String(bb.x));
2731
- rect.setAttribute("y", String(bb.y));
2732
- rect.setAttribute("width", String(bb.width));
2733
- rect.setAttribute("height", String(bb.height));
2734
- rect.setAttribute("fill", "transparent");
2735
- rect.setAttribute(HIT_ATTR, "1");
2736
- if (rect.style) {
2737
- rect.style.pointerEvents = "all";
2738
- rect.style.cursor = "pointer";
2739
- }
2740
- el.insertBefore(rect, el.firstChild);
2741
- report.hitRects++;
2742
- } else {
2743
- const cs = computed(el);
2744
- if (cs && cs.pointerEvents === "none") {
2745
- const fill = String((engineMapsPresentationAttributes(ownerDoc, view) ? cs.fill : el.getAttribute?.("fill") ?? cs.fill) ?? "").trim().toLowerCase();
2746
- const unfilled = fill === "none" || fill === "transparent" || fill === "rgba(0, 0, 0, 0)";
2747
- if (el.style) el.style.pointerEvents = unfilled ? "stroke" : "all";
2748
- report.peFlips++;
2749
- if (unfilled) report.peStrokeOnly++;
2750
- }
2751
- }
2752
- }
2753
- } catch {
2754
- }
2755
- return report;
2756
- }
2757
-
2758
- // src/blankRender.ts
2759
- var EMPTY2 = { markCount: 0, legendMarkCount: 0, containerKind: "empty", declaresNoRowMarks: false };
2760
- function censusMarks(container) {
2761
- if (!container || typeof container.querySelectorAll !== "function") return EMPTY2;
2762
- try {
2763
- const marks = /* @__PURE__ */ new Set();
2764
- for (const el of Array.from(container.querySelectorAll(`.${MARK_CLASS}`))) marks.add(el);
2765
- for (const el of Array.from(container.querySelectorAll(`[${ROW_IDX_ATTR}]`))) marks.add(el);
2766
- const legend = /* @__PURE__ */ new Set();
2767
- for (const el of Array.from(container.querySelectorAll(`.${LEGEND_MARK_CLASS}`))) {
2768
- legend.add(el);
2769
- marks.delete(el);
2770
- }
2771
- const hasSvg = !!container.querySelector("svg");
2772
- const hasAnything = hasSvg || (container.childElementCount ?? 0) > 0;
2773
- return {
2774
- markCount: marks.size,
2775
- legendMarkCount: legend.size,
2776
- containerKind: hasSvg ? "svg" : hasAnything ? "html" : "empty",
2777
- declaresNoRowMarks: !!container.querySelector(`[${NO_ROW_MARKS_ATTR}]`)
2778
- };
2779
- } catch {
2780
- return EMPTY2;
2781
- }
2782
- }
2783
- function isBlankRender(i) {
2784
- if (i.contractUntagged) return false;
2785
- if (i.declaresNoRowMarks) return false;
2786
- if (i.animated) return false;
2787
- if (i.authoredNoDataText) return false;
2788
- if (!(i.rows > 0)) return false;
2789
- return i.markCount === 0;
2790
- }
2791
- function blankRenderFlag(lang, cause) {
2792
- const clean = (s2) => String(s2 || "unknown").toLowerCase().replace(/[^a-z0-9-]+/g, "-");
2793
- return `blankrender:${clean(lang)}:${clean(cause)}`;
2794
- }
2795
-
2796
- // src/hitBands.ts
2797
- var MIN_HIT_BAND_PX = 8;
2798
- var ELEMENT_CAP3 = 5e3;
2799
- var EMPTY3 = {
2800
- openStrokes: 0,
2801
- interactive: 0,
2802
- hairline: 0,
2803
- uncovered: 0,
2804
- widestPx: 0
2805
- };
2806
- var OPEN_TAGS = /* @__PURE__ */ new Set(["path", "line", "polyline"]);
2807
- function styleOf2(el, doc) {
2808
- try {
2809
- const view = doc?.defaultView;
2810
- return view?.getComputedStyle ? view.getComputedStyle(el) : null;
2811
- } catch {
2812
- return null;
2813
- }
2814
- }
2815
- function attrOrComputed(el, name, cs) {
2816
- const a3 = el.getAttribute?.(name);
2817
- if (a3 !== null && a3 !== void 0 && String(a3).trim() !== "") return String(a3).trim();
2818
- const c2 = cs?.[name === "stroke-width" ? "strokeWidth" : name];
2819
- return c2 === null || c2 === void 0 ? "" : String(c2).trim();
2820
- }
2821
- function isUnfilled(fill) {
2822
- const f4 = fill.toLowerCase();
2823
- return f4 === "none" || f4 === "transparent" || f4 === "rgba(0, 0, 0, 0)" || f4 === "rgba(0,0,0,0)";
2824
- }
2825
- function widthPx(raw) {
2826
- const m4 = /^(-?\d+(?:\.\d+)?)\s*(px)?$/i.exec(raw);
2827
- if (!m4) return NaN;
2828
- const n = parseFloat(m4[1]);
2829
- return isFinite(n) ? n : NaN;
2830
- }
2831
- function censusHitBands(container, doc) {
2832
- if (!container || typeof container.querySelectorAll !== "function") return EMPTY3;
2833
- try {
2834
- const els = Array.from(
2835
- container.querySelectorAll(`.${MARK_CLASS}, [${ROW_IDX_ATTR}]`)
2836
- );
2837
- if (els.length === 0 || els.length > ELEMENT_CAP3) return EMPTY3;
2838
- const ownerDoc = doc ?? container.ownerDocument;
2839
- const widestByGeom = /* @__PURE__ */ new Map();
2840
- const rows = [];
2841
- for (const el of els) {
2842
- const tag = String(el.tagName || "").toLowerCase();
2843
- if (!OPEN_TAGS.has(tag)) continue;
2844
- const cs = styleOf2(el, ownerDoc);
2845
- const open = isUnfilled(attrOrComputed(el, "fill", cs));
2846
- const w3 = widthPx(attrOrComputed(el, "stroke-width", cs) || "1");
2847
- const geom = String(el.getAttribute?.("d") ?? "") || `${tag}#${String(el.getAttribute?.(ROW_IDX_ATTR) ?? "")}`;
2848
- const inert = String(cs?.pointerEvents ?? el.style?.pointerEvents ?? "") === "none";
2849
- rows.push({ el, geom, w: w3, open, inert });
2850
- if (isFinite(w3)) {
2851
- const prev = widestByGeom.get(geom);
2852
- if (prev === void 0 || w3 > prev) widestByGeom.set(geom, w3);
2853
- }
2854
- }
2855
- const out = { ...EMPTY3 };
2856
- for (const r2 of rows) {
2857
- if (!r2.open) continue;
2858
- out.openStrokes++;
2859
- if (r2.inert) continue;
2860
- out.interactive++;
2861
- if (isFinite(r2.w) && r2.w > out.widestPx) out.widestPx = Math.round(r2.w);
2862
- if (!(r2.w < MIN_HIT_BAND_PX)) continue;
2863
- out.hairline++;
2864
- const best = widestByGeom.get(r2.geom);
2865
- if (best === void 0 || best < MIN_HIT_BAND_PX) out.uncovered++;
2866
- }
2867
- return out;
2868
- } catch {
2869
- return EMPTY3;
2870
- }
2871
- }
2872
- function hitBandFlag(c2) {
2873
- if (c2.interactive === 0) return "";
2874
- return c2.uncovered > 0 ? "hitband:d3:thin" : "hitband:d3:ok";
2875
- }
2876
-
2877
- // src/clippedText.ts
2878
- var CLIP_TOLERANCE_PX = 1;
2879
- var MAX_REPORTED = 8;
2880
- function censusClippedText(container) {
2881
- const none = { measured: 0, clipped: [], clippedCount: 0, laidOut: false };
2882
- try {
2883
- const svg = container?.querySelector?.("svg");
2884
- if (!svg) return none;
2885
- const f4 = svg.getBoundingClientRect();
2886
- if (!f4 || !(f4.width > 0) || !(f4.height > 0)) return none;
2887
- const view = svg.ownerDocument?.defaultView;
2888
- const clipped = [];
2889
- let measured = 0;
2890
- for (const t of Array.from(svg.querySelectorAll("text"))) {
2891
- const r2 = t.getBoundingClientRect();
2892
- if (!r2 || !(r2.width > 0) || !(r2.height > 0)) continue;
2893
- const s2 = view?.getComputedStyle?.(t);
2894
- if (s2 && (s2.display === "none" || s2.visibility === "hidden" || s2.opacity === "0")) continue;
2895
- measured++;
2896
- const top = f4.top - r2.top, left = f4.left - r2.left, bottom = r2.bottom - f4.bottom, right = r2.right - f4.right;
2897
- if (top > CLIP_TOLERANCE_PX || left > CLIP_TOLERANCE_PX || bottom > CLIP_TOLERANCE_PX || right > CLIP_TOLERANCE_PX) {
2898
- clipped.push({
2899
- text: String(t.textContent ?? "").slice(0, 40),
2900
- top: Math.max(0, Math.round(top)),
2901
- left: Math.max(0, Math.round(left)),
2902
- bottom: Math.max(0, Math.round(bottom)),
2903
- right: Math.max(0, Math.round(right))
2904
- });
2905
- }
2906
- }
2907
- clipped.sort((a3, b4) => Math.max(b4.top, b4.left, b4.bottom, b4.right) - Math.max(a3.top, a3.left, a3.bottom, a3.right));
2908
- return { measured, clipped: clipped.slice(0, MAX_REPORTED), clippedCount: clipped.length, laidOut: true };
2909
- } catch {
2910
- return none;
2911
- }
2912
- }
2913
- function clippedTextFlag(c2) {
2914
- if (!c2.laidOut || c2.clippedCount === 0) return "";
2915
- const worst = c2.clipped[0];
2916
- const side = ["top", "left", "bottom", "right"].reduce((a3, k3) => worst[k3] > worst[a3] ? k3 : a3, "top");
2917
- return `${c2.clippedCount} of ${c2.measured} text label(s) are cut off by the frame; the worst, "${worst.text}", by ${worst[side]}px at the ${side}.`;
2918
- }
2919
-
2920
- // src/valuePlacement.ts
2921
- var MIN_MARKS2 = 24;
2922
- var ELEMENT_CAP4 = 5e3;
2923
- var FIT_SAMPLE = 90;
2924
- var VALUE_AXIS_MIN_FIT = 0.8;
2925
- var MIN_AXIS_SPAN_PX = 40;
2926
- var EMPTY4 = { marks: 0, axis: "", column: "", fit: 0, offShare: 0, medianOffRadii: 0 };
2927
- function num(el, name) {
2928
- const v = el.getAttribute?.(name);
2929
- if (v === null || v === void 0 || String(v).trim() === "") return NaN;
2930
- return parseFloat(String(v));
2931
- }
2932
- function median(xs) {
2933
- if (!xs.length) return NaN;
2934
- const s2 = [...xs].sort((a3, b4) => a3 - b4);
2935
- const m4 = s2.length >> 1;
2936
- return s2.length % 2 ? s2[m4] : (s2[m4 - 1] + s2[m4]) / 2;
2937
- }
2938
- function robustLine(v, pos) {
2939
- const n = v.length;
2940
- const step = Math.max(1, Math.floor(n / FIT_SAMPLE));
2941
- const idx = [];
2942
- for (let i = 0; i < n; i += step) idx.push(i);
2943
- const slopes = [];
2944
- for (let p4 = 0; p4 < idx.length; p4++) {
2945
- for (let q2 = p4 + 1; q2 < idx.length; q2++) {
2946
- const dv = v[idx[q2]] - v[idx[p4]];
2947
- if (Math.abs(dv) < 1e-12) continue;
2948
- slopes.push((pos[idx[q2]] - pos[idx[p4]]) / dv);
2949
- }
2950
- }
2951
- if (slopes.length < 3) return null;
2952
- const b4 = median(slopes);
2953
- if (!Number.isFinite(b4) || Math.abs(b4) < 1e-12) return null;
2954
- const a3 = median(pos.map((y2, i) => y2 - b4 * v[i]));
2955
- return Number.isFinite(a3) ? { a: a3, b: b4 } : null;
2956
- }
2957
- function censusValuePlacement(container, data) {
2958
- try {
2959
- if (!container || typeof container.querySelectorAll !== "function") return EMPTY4;
2960
- const rows = data?.rows;
2961
- const columns = data?.columns ?? [];
2962
- if (!Array.isArray(rows) || !rows.length || !columns.length) return EMPTY4;
2963
- const els = Array.from(container.querySelectorAll(`circle[${ROW_IDX_ATTR}]`));
2964
- if (els.length < MIN_MARKS2 || els.length > ELEMENT_CAP4) return EMPTY4;
2965
- const dots = [];
2966
- const seen = /* @__PURE__ */ new Set();
2967
- for (const el of els) {
2968
- const raw = String(el.getAttribute(ROW_IDX_ATTR) ?? "").trim();
2969
- if (!/^\d+$/.test(raw)) continue;
2970
- const i = +raw;
2971
- const row = rows[i];
2972
- const x3 = num(el, "cx"), y2 = num(el, "cy"), r2 = num(el, "r");
2973
- if (!row || !Number.isFinite(x3) || !Number.isFinite(y2) || !(r2 > 0)) continue;
2974
- seen.add(i);
2975
- dots.push({ row, x: x3, y: y2, r: r2 });
2976
- }
2977
- if (dots.length < MIN_MARKS2 || seen.size < dots.length * 0.9) return EMPTY4;
2978
- let best = null;
2979
- for (let c2 = 0; c2 < columns.length; c2++) {
2980
- if (/^__.*__$/.test(String(columns[c2]?.name ?? ""))) continue;
2981
- const vals = dots.map((d2) => {
2982
- const v = d2.row[c2];
2983
- return v === null || v === void 0 || v === "" ? NaN : typeof v === "number" ? v : Number(v);
2984
- });
2985
- const finite = vals.filter(Number.isFinite);
2986
- if (finite.length < dots.length * 0.9 || new Set(finite).size < 8) continue;
2987
- const logs = finite.every((v) => v > 0) ? [false, true] : [false];
2988
- for (const log of logs) {
2989
- for (const axis of ["x", "y"]) {
2990
- const keep = [];
2991
- const v = [], pos = [];
2992
- dots.forEach((d2, k3) => {
2993
- if (!Number.isFinite(vals[k3])) return;
2994
- keep.push(k3);
2995
- v.push(log ? Math.log10(vals[k3]) : vals[k3]);
2996
- pos.push(axis === "x" ? d2.x : d2.y);
2997
- });
2998
- const line = robustLine(v, pos);
2999
- if (!line) continue;
3000
- const lo = Math.min(...pos), hi = Math.max(...pos);
3001
- if (hi - lo < MIN_AXIS_SPAN_PX) continue;
3002
- const mean = pos.reduce((s2, p4) => s2 + p4, 0) / pos.length;
3003
- let ssRes = 0, ssTot = 0;
3004
- const res = pos.map((p4, k3) => {
3005
- const e = p4 - (line.a + line.b * v[k3]);
3006
- ssRes += e * e;
3007
- ssTot += (p4 - mean) ** 2;
3008
- return e;
3009
- });
3010
- if (ssTot <= 0) continue;
3011
- const fit = 1 - ssRes / ssTot;
3012
- if (fit >= VALUE_AXIS_MIN_FIT && (!best || fit > best.fit)) {
3013
- const full = new Array(dots.length).fill(NaN);
3014
- keep.forEach((k3, j4) => {
3015
- full[k3] = res[j4];
3016
- });
3017
- best = { col: c2, axis, fit, res: full, log };
3018
- }
3019
- }
3020
- }
3021
- }
3022
- if (!best) return EMPTY4;
3023
- let off = 0, measured = 0;
3024
- const radii = [];
3025
- dots.forEach((d2, k3) => {
3026
- const e = best.res[k3];
3027
- if (!Number.isFinite(e)) return;
3028
- measured++;
3029
- const inRadii = Math.abs(e) / Math.max(d2.r, 1);
3030
- radii.push(inRadii);
3031
- if (inRadii > 1) off++;
3032
- });
3033
- if (measured < MIN_MARKS2) return EMPTY4;
3034
- return {
3035
- marks: measured,
3036
- axis: best.axis,
3037
- column: String(columns[best.col]?.name ?? ""),
3038
- fit: Math.round(best.fit * 1e3) / 1e3,
3039
- offShare: Math.round(off / measured * 1e3) / 10,
3040
- medianOffRadii: Math.round(median(radii) * 100) / 100
3041
- };
3042
- } catch {
3043
- return EMPTY4;
3044
- }
3045
- }
3046
- function valuePlacementFlag(c2) {
3047
- if (c2.marks === 0) return "";
3048
- const s2 = c2.offShare;
3049
- const bucket = s2 <= 0 ? 0 : s2 < 5 ? 1 : s2 < 20 ? 5 : s2 < 50 ? 20 : 50;
3050
- return "place:d3:off" + bucket;
3051
- }
3052
-
3053
- // src/fit.ts
3054
- var SCROLL_SLACK_PX = 8;
3055
- function needsScroll(contentPx, viewportPx, slackPx = SCROLL_SLACK_PX) {
3056
- if (!isFinite(contentPx) || !isFinite(viewportPx)) return false;
3057
- if (contentPx <= 0 || viewportPx <= 0) return false;
3058
- return contentPx - viewportPx > slackPx;
3059
- }
3060
- function contentExtentOf(boxes) {
3061
- if (!boxes || boxes.length === 0) return { w: 0, h: 0, source: "none" };
3062
- const usable = boxes.filter((b4) => b4 && isFinite(b4.right) && isFinite(b4.bottom) && (b4.right > 0 || b4.bottom > 0));
3063
- if (usable.length === 0) return { w: 0, h: 0, source: "none" };
3064
- const inFlow = usable.filter((b4) => !b4.floating);
3065
- const counted = inFlow.length > 0 ? inFlow : usable;
3066
- let w3 = 0, h4 = 0;
3067
- for (const b4 of counted) {
3068
- if (b4.right > w3) w3 = b4.right;
3069
- if (b4.bottom > h4) h4 = b4.bottom;
3070
- }
3071
- return { w: w3, h: h4, source: inFlow.length > 0 ? "in-flow" : "all-floating" };
3072
- }
3073
- function scrollFitFor(contentW, contentH, viewportW, viewportH, slackPx = SCROLL_SLACK_PX) {
3074
- return {
3075
- overflowX: needsScroll(contentW, viewportW, slackPx) ? "auto" : "hidden",
3076
- overflowY: needsScroll(contentH, viewportH, slackPx) ? "auto" : "hidden"
3077
- };
3078
- }
3079
- var FIT_CONTENT_SELECTOR = "text, .d3-mark, .d3-legend-mark";
3080
- var PHANTOM_FRACTION = 0.95;
3081
- function isPhantomBox(w3, h4, refW, refH) {
3082
- return w3 > refW * PHANTOM_FRACTION || h4 > refH * PHANTOM_FRACTION;
3083
- }
3084
- var MAX_FRAME_GROW_FACTOR = 20;
3085
- function planFrameGrow(inkBottomPx, elHeightPx, viewBoxH, ctmScale, slackPx = SCROLL_SLACK_PX, maxFactor = MAX_FRAME_GROW_FACTOR) {
3086
- const none = (reason) => ({ grow: false, heightPx: elHeightPx, viewBoxH, reason });
3087
- if (!isFinite(inkBottomPx) || !isFinite(elHeightPx) || elHeightPx <= 0) return none("unmeasurable");
3088
- if (!needsScroll(inkBottomPx, elHeightPx, slackPx)) return none("fits");
3089
- if (inkBottomPx > elHeightPx * maxFactor) return none("beyond-ceiling");
3090
- const heightPx = Math.ceil(inkBottomPx);
3091
- const delta = heightPx - elHeightPx;
3092
- if (!(viewBoxH > 0)) return { grow: true, heightPx, viewBoxH, reason: "grow-no-viewbox" };
3093
- if (!(ctmScale > 0) || !isFinite(ctmScale)) return none("no-scale");
3094
- return { grow: true, heightPx, viewBoxH: viewBoxH + delta / ctmScale, reason: "grow" };
3095
- }
3096
- var AXIS_PIN_MIN_LABELS = 2;
3097
- var AXIS_PIN_BAND_PAD_PX = 2;
3098
- var AXIS_PIN_MAX_BAND_FRACTION = 0.4;
3099
- var AXIS_PIN_TRACK_REACH_PX = 12;
3100
- function isHorizontalLabelRow(boxes) {
3101
- if (!boxes || boxes.length < 2) return false;
3102
- let minX = Infinity, maxX = -Infinity, minY = Infinity, maxY = -Infinity;
3103
- for (const b4 of boxes) {
3104
- const cx = (b4.left + b4.right) / 2, cy = (b4.top + b4.bottom) / 2;
3105
- if (!isFinite(cx) || !isFinite(cy)) return false;
3106
- if (cx < minX) minX = cx;
3107
- if (cx > maxX) maxX = cx;
3108
- if (cy < minY) minY = cy;
3109
- if (cy > maxY) maxY = cy;
3110
- }
3111
- return maxX - minX > maxY - minY;
3112
- }
3113
- function labelBand(boxes, tracks = [], pad = AXIS_PIN_BAND_PAD_PX, trackReach = AXIS_PIN_TRACK_REACH_PX) {
3114
- if (!boxes || boxes.length === 0) return null;
3115
- let top = Infinity, bottom = -Infinity;
3116
- for (const b4 of boxes) {
3117
- if (!isFinite(b4.top) || !isFinite(b4.bottom)) continue;
3118
- if (b4.top < top) top = b4.top;
3119
- if (b4.bottom > bottom) bottom = b4.bottom;
3120
- }
3121
- if (!isFinite(top) || !isFinite(bottom) || bottom <= top) return null;
3122
- for (const t of tracks || []) {
3123
- if (!isFinite(t.top) || !isFinite(t.bottom)) continue;
3124
- const gap = t.bottom < top ? top - t.bottom : t.top > bottom ? t.top - bottom : 0;
3125
- if (gap > trackReach) continue;
3126
- if (t.top < top) top = t.top;
3127
- if (t.bottom > bottom) bottom = t.bottom;
3128
- }
3129
- return { top: top - pad, bottom: bottom + pad };
3130
- }
3131
- function planAxisPin(candidates, viewportH, minLabels = AXIS_PIN_MIN_LABELS, maxFraction = AXIS_PIN_MAX_BAND_FRACTION) {
3132
- const none = (reason) => ({ pin: false, index: -1, band: null, reason });
3133
- if (!isFinite(viewportH) || viewportH <= 0) return none("unmeasurable");
3134
- let sawAxis = false, best = null;
3135
- for (const c2 of candidates || []) {
3136
- if (!c2 || !c2.labels || c2.labels.length < minLabels) continue;
3137
- sawAxis = true;
3138
- if (!isHorizontalLabelRow(c2.labels)) continue;
3139
- if (!best || c2.labels.length > best.labels.length) best = c2;
3140
- }
3141
- if (!best) return none(sawAxis ? "vertical-only" : "no-axis");
3142
- const band = labelBand(best.labels, best.tracks || []);
3143
- if (!band) return none("unmeasurable");
3144
- if (band.bottom - band.top > viewportH * maxFraction) return none("band-too-tall");
3145
- return { pin: true, index: best.index, band, reason: "pinned" };
3146
- }
3147
- function axisPinPlacement(band, scrollTop, viewportH) {
3148
- if (!band || !isFinite(band.top) || !isFinite(band.bottom)) return null;
3149
- if (!isFinite(scrollTop) || !isFinite(viewportH) || viewportH <= 0) return null;
3150
- if (band.top < scrollTop) return "top";
3151
- if (band.bottom > scrollTop + viewportH) return "bottom";
3152
- return null;
3153
- }
3154
-
3155
- // src/fitDom.ts
3156
- var FIT_WALK_CAP = 8e3;
3157
- function ctmScaleOf(m4) {
3158
- if (!m4) return 0;
3159
- const s2 = Math.hypot(m4.a, m4.b);
3160
- return isFinite(s2) && s2 > 0 ? s2 : 0;
3161
- }
3162
- function svgInkReach(svg) {
3163
- try {
3164
- const box2 = svg.getBoundingClientRect();
3165
- if (!(box2.width > 0) || !(box2.height > 0)) return null;
3166
- const els = svg.querySelectorAll(FIT_CONTENT_SELECTOR);
3167
- const clipOf = clipWindowReader(svg);
3168
- let right = -Infinity, bottom = -Infinity, seen = 0;
3169
- for (let i = 0; i < els.length && seen < FIT_WALK_CAP; i++) {
3170
- const r2 = els[i].getBoundingClientRect();
3171
- if (r2.width <= 0 && r2.height <= 0) continue;
3172
- if (isPhantomBox(r2.width, r2.height, box2.width, box2.height)) continue;
3173
- let rr = r2.right, rb = r2.bottom;
3174
- const clip = clipOf(els[i]);
3175
- if (clip) {
3176
- if (r2.left >= clip.right || r2.top >= clip.bottom) continue;
3177
- rr = Math.min(rr, clip.right);
3178
- rb = Math.min(rb, clip.bottom);
3179
- }
3180
- seen++;
3181
- if (rr > right) right = rr;
3182
- if (rb > bottom) bottom = rb;
3183
- }
3184
- if (seen === 0) return null;
3185
- return { right: right - box2.left, bottom: bottom - box2.top };
3186
- } catch {
3187
- return null;
3188
- }
3189
- }
3190
- function clipWindowOf(el) {
3191
- try {
3192
- const m4 = /url\(\s*['"]?#([^'")\s]+)['"]?\s*\)/.exec(el.getAttribute("clip-path") || "");
3193
- const cp = m4 ? (el.closest("svg") ?? el.ownerDocument).querySelector(`clipPath[id="${m4[1].replace(/"/g, '\\"')}"]`) : null;
3194
- const ctm = cp ? el.getScreenCTM?.() : null;
3195
- if (!cp || !ctm || cp.getAttribute("clipPathUnits") === "objectBoundingBox") return null;
3196
- let l2 = Infinity, t = Infinity, r2 = -Infinity, b4 = -Infinity;
3197
- for (let i = 0; i < cp.children.length; i++) {
3198
- const bb = cp.children[i].getBBox?.();
3199
- if (!bb || !(bb.width > 0) || !(bb.height > 0)) continue;
3200
- for (const [x3, y2] of [[bb.x, bb.y], [bb.x + bb.width, bb.y], [bb.x, bb.y + bb.height], [bb.x + bb.width, bb.y + bb.height]]) {
3201
- const sx = ctm.a * x3 + ctm.c * y2 + ctm.e, sy = ctm.b * x3 + ctm.d * y2 + ctm.f;
3202
- l2 = Math.min(l2, sx);
3203
- t = Math.min(t, sy);
3204
- r2 = Math.max(r2, sx);
3205
- b4 = Math.max(b4, sy);
3206
- }
3207
- }
3208
- return isFinite(r2) && isFinite(b4) ? { left: l2, top: t, right: r2, bottom: b4 } : null;
3209
- } catch {
3210
- return null;
3211
- }
3212
- }
3213
- function clipWindowReader(svg) {
3214
- const own = /* @__PURE__ */ new Map();
3215
- const windowOf = (el) => {
3216
- if (!own.has(el)) own.set(el, clipWindowOf(el));
3217
- return own.get(el);
3218
- };
3219
- return (el) => {
3220
- let acc = null;
3221
- for (let a3 = el; a3 && a3 !== svg; a3 = a3.parentElement) {
3222
- const w3 = windowOf(a3);
3223
- if (w3) acc = acc ? { right: Math.min(acc.right, w3.right), bottom: Math.min(acc.bottom, w3.bottom) } : w3;
3224
- }
3225
- return acc;
3226
- };
3227
- }
3228
- function measureContainerBoxes(c2, inkOf) {
3229
- const boxes = [];
3230
- if (!c2 || !c2.children) return boxes;
3231
- const view = c2.ownerDocument && c2.ownerDocument.defaultView || globalThis;
3232
- const cRect = c2.getBoundingClientRect();
3233
- for (let i = 0; i < c2.children.length; i++) {
3234
- const el = c2.children[i];
3235
- let floating = false;
3236
- try {
3237
- const cs = view.getComputedStyle(el);
3238
- if (cs.display === "none") continue;
3239
- floating = cs.position === "absolute" || cs.position === "fixed";
3240
- } catch {
3241
- }
3242
- const r2 = el.getBoundingClientRect();
3243
- let right = r2.right - cRect.left - c2.clientLeft + c2.scrollLeft;
3244
- let bottom = r2.bottom - cRect.top - c2.clientTop + c2.scrollTop;
3245
- if (inkOf) {
3246
- try {
3247
- const ink = inkOf(el);
3248
- if (ink) {
3249
- const originX = r2.left - cRect.left - c2.clientLeft + c2.scrollLeft;
3250
- const originY = r2.top - cRect.top - c2.clientTop + c2.scrollTop;
3251
- if (isFinite(ink.right)) right = Math.max(right, originX + ink.right);
3252
- if (isFinite(ink.bottom)) bottom = Math.max(bottom, originY + ink.bottom);
3253
- }
3254
- } catch {
3255
- }
3256
- }
3257
- boxes.push({ right, bottom, floating });
3258
- }
3259
- return boxes;
3260
- }
3261
- function fitReadingFor(lane, c2, slackPx = SCROLL_SLACK_PX, inkOf) {
3262
- if (!c2) return null;
3263
- const viewW = c2.clientWidth, viewH = c2.clientHeight;
3264
- if (!(viewW > 0) || !(viewH > 0)) return null;
3265
- const boxes = measureContainerBoxes(c2, inkOf);
3266
- const extent = contentExtentOf(boxes);
3267
- const contentW = extent.source === "none" ? c2.scrollWidth : extent.w;
3268
- const contentH = extent.source === "none" ? c2.scrollHeight : extent.h;
3269
- if (!isFinite(contentW) || !isFinite(contentH)) return null;
3270
- return {
3271
- lane,
3272
- contentW: Math.round(contentW),
3273
- contentH: Math.round(contentH),
3274
- viewW,
3275
- viewH,
3276
- overflowsX: needsScroll(contentW, viewW, slackPx),
3277
- overflowsY: needsScroll(contentH, viewH, slackPx),
3278
- extentSource: extent.source,
3279
- boxes: boxes.length,
3280
- floating: boxes.filter((b4) => b4.floating).length,
3281
- scrollW: c2.scrollWidth,
3282
- scrollH: c2.scrollHeight
3283
- };
3284
- }
3285
- var noPin = (reason) => ({ pinned: false, reason, bandPx: 0, axisAt: "", labels: 0, carried: 0, edge: null });
3286
- var CONTAINER_SLOT_AXIS_PIN = "__bicAxisPin";
3287
- var SVG_NS2 = "http://www.w3.org/2000/svg";
3288
- var AXIS_PIN_MAX_CARRIED = 12;
3289
- function unpinScrolledAxis(container) {
3290
- if (!container) return;
3291
- const st = container[CONTAINER_SLOT_AXIS_PIN];
3292
- if (!st) return;
3293
- try {
3294
- container.removeEventListener("scroll", st.onScroll);
3295
- } catch {
3296
- }
3297
- try {
3298
- if (st.overlay.parentNode) st.overlay.parentNode.removeChild(st.overlay);
3299
- } catch {
3300
- }
3301
- try {
3302
- delete container[CONTAINER_SLOT_AXIS_PIN];
3303
- } catch {
3304
- }
3305
- }
3306
- function textHidden(t, view) {
3307
- if (t.getAttribute("display") === "none" || t.getAttribute("visibility") === "hidden") return true;
3308
- try {
3309
- const cs = view.getComputedStyle(t);
3310
- if (cs && (cs.display === "none" || cs.visibility === "hidden")) return true;
3311
- } catch {
3312
- }
3313
- return false;
3314
- }
3315
- function backdropFill(svg, container, view, svgBox) {
3316
- try {
3317
- const rects = svg.querySelectorAll("rect");
3318
- for (let i = 0; i < rects.length && i < 6; i++) {
3319
- const r2 = rects[i];
3320
- if (r2.closest(".d3-mark")) continue;
3321
- const b4 = r2.getBoundingClientRect();
3322
- if (b4.width >= svgBox.width * 0.9 && b4.height >= svgBox.height * 0.9) {
3323
- let fill = "";
3324
- try {
3325
- fill = view.getComputedStyle(r2).fill || "";
3326
- } catch {
3327
- }
3328
- if (!fill || fill === "none") fill = r2.getAttribute("fill") || "";
3329
- if (fill && fill !== "none" && fill !== "transparent") return fill;
3330
- break;
3331
- }
3332
- }
3333
- } catch {
3334
- }
3335
- try {
3336
- let el = container;
3337
- for (let hops = 0; el && hops < 12; hops++, el = el.parentElement) {
3338
- const bg = view.getComputedStyle(el).backgroundColor;
3339
- if (bg && bg !== "transparent" && bg !== "rgba(0, 0, 0, 0)") return bg;
3340
- }
3341
- } catch {
3342
- }
3343
- return "#ffffff";
3344
- }
3345
- function cloneWithChain(el, svg, root) {
3346
- const chain = [];
3347
- let n = el.parentElement;
3348
- while (n && n !== svg) {
3349
- chain.unshift(n);
3350
- n = n.parentElement;
3351
- }
3352
- let parent = root;
3353
- for (const anc of chain) {
3354
- const c2 = anc.cloneNode(false);
3355
- parent.appendChild(c2);
3356
- parent = c2;
3357
- }
3358
- parent.appendChild(el.cloneNode(true));
3359
- const ids = root.querySelectorAll("[id]");
3360
- for (let i = 0; i < ids.length; i++) ids[i].removeAttribute("id");
3361
- }
3362
- function pinScrolledAxis(container, svg) {
3363
- unpinScrolledAxis(container);
3364
- if (!container) return noPin("no-container");
3365
- if (!svg) return noPin("no-svg");
3366
- try {
3367
- const doc = svg.ownerDocument;
3368
- const view = doc && doc.defaultView || globalThis;
3369
- const svgBox = svg.getBoundingClientRect();
3370
- if (!(svgBox.width > 0) || !(svgBox.height > 0)) return noPin("unmeasurable");
3371
- const m4 = typeof svg.getScreenCTM === "function" ? svg.getScreenCTM() : null;
3372
- if (!m4 || !(m4.a > 0) || !(m4.d > 0) || !isFinite(m4.e) || !isFinite(m4.f)) return noPin("no-ctm");
3373
- const viewportH = container.clientHeight;
3374
- if (!(viewportH > 0)) return noPin("unmeasurable");
3375
- const rel = (r2) => ({ left: r2.left - svgBox.left, top: r2.top - svgBox.top, right: r2.right - svgBox.left, bottom: r2.bottom - svgBox.top });
3376
- const ticks = svg.querySelectorAll(".tick");
3377
- const byAxis = /* @__PURE__ */ new Map();
3378
- for (let i = 0; i < ticks.length; i++) {
3379
- const t = ticks[i];
3380
- if (t.closest("svg") !== svg) continue;
3381
- const p4 = t.parentElement;
3382
- if (!p4) continue;
3383
- const list = byAxis.get(p4);
3384
- if (list) list.push(t);
3385
- else byAxis.set(p4, [t]);
3386
- }
3387
- const axes = [];
3388
- const cands = [];
3389
- byAxis.forEach((group, axis2) => {
3390
- const labels = [];
3391
- for (const tick of group) {
3392
- const txt = tick.querySelector("text");
3393
- if (!txt || textHidden(txt, view)) continue;
3394
- const r2 = txt.getBoundingClientRect();
3395
- if (!(r2.width > 0) || !(r2.height > 0)) continue;
3396
- labels.push(rel(r2));
3397
- }
3398
- const tracks = [];
3399
- for (let i = 0; i < axis2.children.length; i++) {
3400
- const ch = axis2.children[i];
3401
- if (ch.tagName.toLowerCase() !== "path" || !(ch.getAttribute("class") || "").split(/\s+/).includes("domain")) continue;
3402
- const r2 = ch.getBoundingClientRect();
3403
- if (r2.width > 0 && r2.height <= 4) tracks.push(rel(r2));
3404
- }
3405
- cands.push({ index: axes.length, labels, tracks });
3406
- axes.push(axis2);
3407
- });
3408
- const plan = planAxisPin(cands, viewportH);
3409
- if (!plan.pin || !plan.band) return noPin(plan.reason);
3410
- const axis = axes[plan.index];
3411
- const band = { top: Math.max(0, plan.band.top), bottom: Math.min(svgBox.height, plan.band.bottom) };
3412
- const bandPx = band.bottom - band.top;
3413
- if (!(bandPx > 0)) return noPin("unmeasurable");
3414
- const carried = [];
3415
- const texts = svg.querySelectorAll("text");
3416
- for (let i = 0; i < texts.length && carried.length < AXIS_PIN_MAX_CARRIED; i++) {
3417
- const t = texts[i];
3418
- if (t.closest("svg") !== svg) continue;
3419
- if (t.closest(".tick") || t.closest(".d3-mark") || t.closest(".d3-legend-mark")) continue;
3420
- if (axis.contains(t) || textHidden(t, view)) continue;
3421
- const r2 = rel(t.getBoundingClientRect());
3422
- if (!(r2.right > r2.left) || !(r2.bottom > r2.top)) continue;
3423
- if (r2.top >= band.top && r2.bottom <= band.bottom) carried.push(t);
3424
- }
3425
- const pinSvg = doc.createElementNS(SVG_NS2, "svg");
3426
- for (const a3 of ["font-family", "font-size", "font-weight", "font", "fill", "color", "text-rendering"]) {
3427
- const v = svg.getAttribute(a3);
3428
- if (v) pinSvg.setAttribute(a3, v);
3429
- }
3430
- const styles = svg.querySelectorAll("style");
3431
- for (let i = 0; i < styles.length; i++) pinSvg.appendChild(styles[i].cloneNode(true));
3432
- const vbX = (svgBox.left - m4.e) / m4.a, vbY = (svgBox.top + band.top - m4.f) / m4.d;
3433
- const vbW = svgBox.width / m4.a, vbH = bandPx / m4.d;
3434
- pinSvg.setAttribute("viewBox", `${vbX} ${vbY} ${vbW} ${vbH}`);
3435
- pinSvg.setAttribute("preserveAspectRatio", "none");
3436
- pinSvg.setAttribute("width", String(svgBox.width));
3437
- pinSvg.setAttribute("height", String(bandPx));
3438
- pinSvg.setAttribute("aria-hidden", "true");
3439
- pinSvg.style.display = "block";
3440
- pinSvg.style.pointerEvents = "none";
3441
- const back = doc.createElementNS(SVG_NS2, "rect");
3442
- back.setAttribute("x", String(vbX));
3443
- back.setAttribute("y", String(vbY));
3444
- back.setAttribute("width", String(vbW));
3445
- back.setAttribute("height", String(vbH));
3446
- back.setAttribute("fill", backdropFill(svg, container, view, svgBox));
3447
- pinSvg.appendChild(back);
3448
- cloneWithChain(axis, svg, pinSvg);
3449
- for (const t of carried) cloneWithChain(t, svg, pinSvg);
3450
- const overlay = doc.createElement("div");
3451
- overlay.setAttribute("data-bic-axis-pin", "1");
3452
- const o4 = overlay.style;
3453
- o4.position = "absolute";
3454
- o4.margin = "0";
3455
- o4.padding = "0";
3456
- o4.border = "0";
3457
- o4.width = `${svgBox.width}px`;
3458
- o4.height = `${bandPx}px`;
3459
- o4.overflow = "hidden";
3460
- o4.pointerEvents = "none";
3461
- o4.zIndex = "3";
3462
- o4.display = "none";
3463
- overlay.appendChild(pinSvg);
3464
- try {
3465
- const cs = view.getComputedStyle(container);
3466
- const pos = cs && cs.position || container.style.position;
3467
- if (!pos || pos === "static") container.style.position = "relative";
3468
- } catch {
3469
- container.style.position = container.style.position || "relative";
3470
- }
3471
- const cRect = container.getBoundingClientRect();
3472
- const svgLeft = svgBox.left - cRect.left - container.clientLeft + container.scrollLeft;
3473
- const svgTop = svgBox.top - cRect.top - container.clientTop + container.scrollTop;
3474
- const contentBand = { top: svgTop + band.top, bottom: svgTop + band.bottom };
3475
- const place = () => {
3476
- const st = container.scrollTop, vh = container.clientHeight;
3477
- const edge2 = axisPinPlacement(contentBand, st, vh);
3478
- if (!edge2) {
3479
- o4.display = "none";
3480
- return null;
3481
- }
3482
- o4.display = "block";
3483
- o4.left = `${svgLeft}px`;
3484
- o4.top = `${edge2 === "top" ? st : st + vh - bandPx}px`;
3485
- return edge2;
3486
- };
3487
- const onScroll = () => {
3488
- try {
3489
- if (!overlay.isConnected) {
3490
- unpinScrolledAxis(container);
3491
- return;
3492
- }
3493
- place();
3494
- } catch {
3495
- }
3496
- };
3497
- container.appendChild(overlay);
3498
- container.addEventListener("scroll", onScroll, { passive: true });
3499
- container[CONTAINER_SLOT_AXIS_PIN] = { overlay, onScroll };
3500
- const edge = place();
3501
- const mid = (band.top + band.bottom) / 2 / svgBox.height;
3502
- return {
3503
- pinned: true,
3504
- reason: "pinned",
3505
- bandPx: Math.round(bandPx),
3506
- axisAt: mid < 1 / 3 ? "top" : mid > 2 / 3 ? "bottom" : "middle",
3507
- labels: cands[plan.index].labels.length,
3508
- carried: carried.length,
3509
- edge
3510
- };
3511
- } catch {
3512
- unpinScrolledAxis(container);
3513
- return noPin("threw");
3514
- }
3515
- }
3516
- function fitRenderedChart(container, opts = {}) {
3517
- const slackPx = opts.slackPx ?? SCROLL_SLACK_PX;
3518
- const result = {
3519
- grew: false,
3520
- growFrom: 0,
3521
- growTo: 0,
3522
- growReason: "no-container",
3523
- overflowX: "hidden",
3524
- overflowY: "hidden",
3525
- reading: null,
3526
- axisPin: noPin("no-container")
3527
- };
3528
- if (!container) return result;
3529
- try {
3530
- let svg = container.querySelector(`svg[${SNAPSHOT_SVG_ATTR}]`);
3531
- for (let i = 0; i < container.children.length && !svg; i++) {
3532
- const el = container.children[i];
3533
- if (el.tagName && el.tagName.toLowerCase() === "svg") svg = el;
3534
- }
3535
- if (!svg) svg = container.querySelector("svg");
3536
- let inkCache;
3537
- const svgInk = (el) => {
3538
- if (inkCache === void 0) inkCache = svgInkReach(el);
3539
- return inkCache;
3540
- };
3541
- const inkOf = (el) => el && el.tagName && el.tagName.toLowerCase() === "svg" ? svgInk(el) : null;
3542
- if (svg && opts.grow !== false) {
3543
- try {
3544
- const ink = svgInk(svg);
3545
- const elH = svg.getBoundingClientRect().height;
3546
- const vb = svg.viewBox && svg.viewBox.baseVal ? svg.viewBox.baseVal.height : 0;
3547
- const ctm = typeof svg.getScreenCTM === "function" ? svg.getScreenCTM() : null;
3548
- const plan = planFrameGrow(
3549
- ink ? ink.bottom : NaN,
3550
- elH,
3551
- vb,
3552
- ctmScaleOf(ctm),
3553
- slackPx
3554
- );
3555
- result.growFrom = Math.round(elH);
3556
- result.growTo = plan.heightPx;
3557
- result.growReason = plan.reason;
3558
- if (plan.grow) {
3559
- svg.setAttribute("height", String(plan.heightPx));
3560
- if (vb > 0) {
3561
- const b4 = svg.viewBox.baseVal;
3562
- svg.setAttribute("viewBox", `${b4.x} ${b4.y} ${b4.width} ${plan.viewBoxH}`);
3563
- }
3564
- result.grew = true;
3565
- }
3566
- } catch {
3567
- result.growReason = "grow-threw";
3568
- }
3569
- } else if (!svg) {
3570
- result.growReason = "no-svg";
3571
- } else {
3572
- result.growReason = "grow-disabled";
3573
- }
3574
- const reading = fitReadingFor(opts.lane ?? "chart", container, slackPx, inkOf);
3575
- result.reading = reading;
3576
- const boxes = measureContainerBoxes(container, inkOf);
3577
- const extent = contentExtentOf(boxes);
3578
- const svgBox = svg ? svg.getBoundingClientRect() : null;
3579
- const contentW = extent.source === "none" ? Math.max(container.scrollWidth, svgBox ? svgBox.width : 0) : extent.w;
3580
- const contentH = extent.source === "none" ? Math.max(container.scrollHeight, svgBox ? svgBox.height : 0) : extent.h;
3581
- const fit = scrollFitFor(contentW, contentH, container.clientWidth, container.clientHeight, slackPx);
3582
- result.overflowX = fit.overflowX;
3583
- result.overflowY = fit.overflowY;
3584
- if (opts.applyOverflow !== false) {
3585
- container.style.overflowX = fit.overflowX;
3586
- container.style.overflowY = fit.overflowY;
3587
- if (fit.overflowY !== "auto") {
3588
- unpinScrolledAxis(container);
3589
- result.axisPin = noPin("not-scrolling");
3590
- } else if (opts.pinAxis === false) {
3591
- unpinScrolledAxis(container);
3592
- result.axisPin = noPin("disabled");
3593
- } else result.axisPin = pinScrolledAxis(container, svg);
3594
- } else {
3595
- unpinScrolledAxis(container);
3596
- result.axisPin = noPin("overflow-not-applied");
3597
- }
3598
- } catch {
3599
- }
3600
- return result;
3601
- }
3602
-
3603
- // src/labelContrastDom.ts
3604
- var LABEL_CONTRAST_DONE_ATTR = "data-lch-contrast";
3605
- var LABEL_CONTRAST_CAP = 2e3;
3606
- var EMPTY5 = {
3607
- rects: 0,
3608
- scanned: 0,
3609
- fixed: 0,
3610
- pillsBoosted: 0,
3611
- offFill: 0,
3612
- pageMajority: 0,
3613
- paintedOver: 0,
3614
- straddlePills: 0,
3615
- pillsExtended: 0,
3616
- raised: 0
3617
- };
3618
- function backedSamples(el, pts) {
3619
- try {
3620
- const ge2 = el;
3621
- if (typeof ge2.isPointInFill !== "function" || typeof ge2.getScreenCTM !== "function") return null;
3622
- const m4 = ge2.getScreenCTM();
3623
- const svg = ge2.ownerSVGElement;
3624
- if (!m4 || !svg || typeof svg.createSVGPoint !== "function") return null;
3625
- if (pts.length === 0) return null;
3626
- const inv = m4.inverse();
3627
- const hit = [];
3628
- for (let i = 0; i < pts.length; i++) {
3629
- const p4 = svg.createSVGPoint();
3630
- p4.x = pts[i].x;
3631
- p4.y = pts[i].y;
3632
- hit.push(ge2.isPointInFill(p4.matrixTransform(inv)));
3633
- }
3634
- return hit;
3635
- } catch {
3636
- return null;
3637
- }
3638
- }
3639
- var DOC_POSITION_FOLLOWING = 4;
3640
- function paintRoot(el, container) {
3641
- let root = null;
3642
- for (let n = el.parentElement; n; n = n.parentElement) {
3643
- if (String(n.tagName || "").toLowerCase() === "svg") root = n;
3644
- if (n === container) break;
3645
- }
3646
- return root;
3647
- }
3648
- function drawnBeneath(shape, text2, textRoot) {
3649
- if (!shape.root || shape.root !== textRoot) return true;
3650
- if (typeof shape.el.compareDocumentPosition !== "function") return true;
3651
- return (shape.el.compareDocumentPosition(text2) & DOC_POSITION_FOLLOWING) !== 0;
3652
- }
3653
- function sampleBackgrounds(shapes, pts, pageRGB, effAlpha) {
3654
- if (pts.length === 0 || shapes.length === 0) return null;
3655
- const ordered = shapes.slice().sort((a3, b4) => a3.ord - b4.ord);
3656
- const masks = [];
3657
- for (const mk of ordered) {
3658
- const m4 = backedSamples(mk.el, pts);
3659
- if (m4 === null) return null;
3660
- masks.push(m4);
3661
- }
3662
- return pts.map((_4, i) => {
3663
- let bg = [pageRGB[0], pageRGB[1], pageRGB[2]];
3664
- for (let k3 = 0; k3 < ordered.length; k3++) {
3665
- if (!masks[k3][i]) continue;
3666
- const a3 = effAlpha(ordered[k3]);
3667
- if (a3 < PILL_MIN_ALPHA) continue;
3668
- const c2 = toRGBA(ordered[k3].fill);
3669
- if (c2) bg = compositeOver([c2[0], c2[1], c2[2], a3], bg);
3670
- }
3671
- return bg;
3672
- });
3673
- }
3674
- function extendPillOver(pill, tr) {
3675
- try {
3676
- if (String(pill.tagName || "").toLowerCase() !== "rect") return false;
3677
- const ge2 = pill;
3678
- if (typeof ge2.getScreenCTM !== "function") return false;
3679
- const m4 = ge2.getScreenCTM();
3680
- if (!m4 || Math.abs(m4.b) > 1e-6 || Math.abs(m4.c) > 1e-6 || !(m4.a > 0) || !(m4.d > 0)) return false;
3681
- const inv = m4.inverse();
3682
- const toUser = (x4, y4) => ({ x: inv.a * x4 + inv.c * y4 + inv.e, y: inv.b * x4 + inv.d * y4 + inv.f });
3683
- const a3 = toUser(tr.left, tr.top), b4 = toUser(tr.right, tr.bottom);
3684
- const num2 = (k3) => {
3685
- const v = parseFloat(pill.getAttribute(k3) || "");
3686
- return isFinite(v) ? v : NaN;
3687
- };
3688
- const x3 = num2("x"), y2 = num2("y"), w3 = num2("width"), h4 = num2("height");
3689
- if (![x3, y2, w3, h4].every((v) => isFinite(v)) || !(w3 > 0) || !(h4 > 0)) return false;
3690
- const pad = 1 / m4.a;
3691
- const x0 = Math.min(x3, Math.min(a3.x, b4.x) - pad), x1 = Math.max(x3 + w3, Math.max(a3.x, b4.x) + pad);
3692
- const y0 = Math.min(y2, Math.min(a3.y, b4.y) - pad), y1 = Math.max(y2 + h4, Math.max(a3.y, b4.y) + pad);
3693
- if (x0 >= x3 - 0.01 && x1 <= x3 + w3 + 0.01 && y0 >= y2 - 0.01 && y1 <= y2 + h4 + 0.01) return false;
3694
- pill.setAttribute("x", String(+x0.toFixed(2)));
3695
- pill.setAttribute("y", String(+y0.toFixed(2)));
3696
- pill.setAttribute("width", String(+(x1 - x0).toFixed(2)));
3697
- pill.setAttribute("height", String(+(y1 - y0).toFixed(2)));
3698
- return true;
3699
- } catch {
3700
- return false;
3701
- }
3702
- }
3703
- function raiseOverOccluders(tx, occluders, tr, effAlpha) {
3704
- try {
3705
- const parent = tx.parentNode;
3706
- if (!parent || typeof parent.contains !== "function") return false;
3707
- if (!occluders.every((o4) => parent.contains(o4.el))) return false;
3708
- const pts = straddleSampleGrid(tr);
3709
- if (pts.length === 0) return false;
3710
- const covered = pts.map(() => false);
3711
- let opaque = 0;
3712
- for (const o4 of occluders) {
3713
- if (effAlpha(o4) < PILL_OPAQUE_ALPHA) continue;
3714
- const m4 = backedSamples(o4.el, pts);
3715
- if (m4 === null) return false;
3716
- opaque++;
3717
- for (let i = 0; i < m4.length; i++) if (m4[i]) covered[i] = true;
3718
- }
3719
- const n = covered.filter(Boolean).length;
3720
- if (opaque === 0 || n === 0 || n === pts.length) return false;
3721
- parent.appendChild(tx);
3722
- return true;
3723
- } catch {
3724
- return false;
3725
- }
3726
- }
3727
- var LABEL_PILL_CLASS = "lch-label-pill";
3728
- function addPill(tx, fill) {
3729
- try {
3730
- const parent = tx.parentNode;
3731
- if (!parent || typeof tx.getBBox !== "function") return null;
3732
- const bb = tx.getBBox();
3733
- if (!bb || !(bb.width > 0) || !(bb.height > 0)) return null;
3734
- const doc = tx.ownerDocument;
3735
- if (!doc) return null;
3736
- const r2 = doc.createElementNS("http://www.w3.org/2000/svg", "rect");
3737
- const px = Math.max(2, bb.height * 0.2), py = 1;
3738
- r2.setAttribute("x", String(+(bb.x - px).toFixed(2)));
3739
- r2.setAttribute("y", String(+(bb.y - py).toFixed(2)));
3740
- r2.setAttribute("width", String(+(bb.width + 2 * px).toFixed(2)));
3741
- r2.setAttribute("height", String(+(bb.height + 2 * py).toFixed(2)));
3742
- r2.setAttribute("rx", "2");
3743
- r2.setAttribute("fill", fill);
3744
- r2.setAttribute("fill-opacity", String(STRADDLE_PILL_ALPHA));
3745
- r2.setAttribute("pointer-events", "none");
3746
- r2.setAttribute("class", LABEL_PILL_CLASS);
3747
- r2.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3748
- const tf = tx.getAttribute("transform");
3749
- if (tf) r2.setAttribute("transform", tf);
3750
- parent.insertBefore(r2, tx);
3751
- return r2;
3752
- } catch {
3753
- return null;
3754
- }
3755
- }
3756
- function applyLabelContrast(container, opts = {}) {
3757
- const report = { ...EMPTY5 };
3758
- if (!container) {
3759
- report.skipped = "no-container";
3760
- return report;
3761
- }
3762
- const CAP = opts.cap ?? LABEL_CONTRAST_CAP;
3763
- const pageBg = opts.pageBg || "#ffffff";
3764
- try {
3765
- const rects = [];
3766
- let ord = 0;
3767
- const pushShape = (el) => {
3768
- const tag = el.tagName.toLowerCase();
3769
- if (tag !== "rect" && tag !== "path") return;
3770
- const r2 = el.getBoundingClientRect();
3771
- if (r2.width <= 0 || r2.height <= 0) return;
3772
- let fill = el.getAttribute("fill") || "";
3773
- const win2 = container.ownerDocument?.defaultView;
3774
- if ((!fill || fill === "none") && win2 && typeof win2.getComputedStyle === "function") {
3775
- fill = win2.getComputedStyle(el).fill || "";
3776
- }
3777
- if (!fill || fill === "none") return;
3778
- const opAttr = el.getAttribute("fill-opacity");
3779
- const op = opAttr === null ? 1 : parseFloat(opAttr);
3780
- rects.push({
3781
- r: r2,
3782
- fill,
3783
- op: isFinite(op) ? op : 1,
3784
- area: r2.width * r2.height,
3785
- el,
3786
- ord: ord++,
3787
- root: paintRoot(el, container)
3788
- });
3789
- };
3790
- const shapeEls = container.querySelectorAll("rect, path");
3791
- if (shapeEls.length === 0) {
3792
- report.skipped = "no-shapes";
3793
- return report;
3794
- }
3795
- if (shapeEls.length > CAP) {
3796
- report.skipped = "too-many-shapes";
3797
- return report;
3798
- }
3799
- for (let i = 0; i < shapeEls.length; i++) pushShape(shapeEls[i]);
3800
- if (rects.length === 0) {
3801
- report.skipped = "no-shapes";
3802
- return report;
3803
- }
3804
- report.rects = rects.length;
3805
- const pageRGBA = toRGBA(pageBg) || [255, 255, 255, 1];
3806
- const pageRGB = [pageRGBA[0], pageRGBA[1], pageRGBA[2]];
3807
- const effAlpha = (mk) => {
3808
- const c2 = toRGBA(mk.fill);
3809
- return (c2 ? c2[3] : 1) * mk.op;
3810
- };
3811
- const texts = container.querySelectorAll("text");
3812
- if (texts.length > CAP) {
3813
- report.skipped = "too-many-texts";
3814
- return report;
3815
- }
3816
- const win = container.ownerDocument?.defaultView;
3817
- for (let t = 0; t < texts.length; t++) {
3818
- const tx = texts[t];
3819
- if (tx.getAttribute(LABEL_CONTRAST_DONE_ATTR) === "1") continue;
3820
- const tr = tx.getBoundingClientRect();
3821
- if (tr.width <= 0 || tr.height <= 0) continue;
3822
- const ovArea = (r2) => Math.max(0, Math.min(r2.right, tr.right) - Math.max(r2.left, tr.left)) * Math.max(0, Math.min(r2.bottom, tr.bottom) - Math.max(r2.top, tr.top));
3823
- const glyphArea = tr.width * tr.height;
3824
- const txRoot = paintRoot(tx, container);
3825
- let over = 0;
3826
- const occluders = [];
3827
- const boxed = rects.map((mk) => ({ mk, ov: ovArea(mk.r) })).filter((x3) => {
3828
- if (!(x3.ov > 0)) return false;
3829
- if (drawnBeneath(x3.mk, tx, txRoot)) return true;
3830
- if (effAlpha(x3.mk) >= PILL_MIN_ALPHA) {
3831
- over++;
3832
- occluders.push(x3.mk);
3833
- }
3834
- return false;
3835
- });
3836
- const raised = occluders.length > 0 && raiseOverOccluders(tx, occluders, tr, effAlpha);
3837
- if (raised) {
3838
- report.raised++;
3839
- tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3840
- for (const mk of occluders) boxed.push({ mk, ov: ovArea(mk.r) });
3841
- over = 0;
3842
- }
3843
- if (over > 0) report.paintedOver++;
3844
- const pts = glyphSampleGrid({ left: tr.left, top: tr.top, width: tr.width, height: tr.height });
3845
- const painted = pts.map(() => false);
3846
- let unmeasured = 0;
3847
- const under = boxed.map((x3) => {
3848
- const mask = backedSamples(x3.mk.el, pts);
3849
- if (mask === null) {
3850
- unmeasured++;
3851
- return x3;
3852
- }
3853
- let inside = 0;
3854
- const paints = effAlpha(x3.mk) >= PILL_MIN_ALPHA;
3855
- for (let i = 0; i < mask.length; i++) {
3856
- if (!mask[i]) continue;
3857
- inside++;
3858
- if (paints) painted[i] = true;
3859
- }
3860
- return { mk: x3.mk, ov: glyphArea * (inside / mask.length) };
3861
- }).filter((x3) => x3.ov > 0);
3862
- if (under.length === 0 && boxed.length > 0) report.offFill++;
3863
- if (under.length === 0) continue;
3864
- let raisedOnPage = false;
3865
- if (unmeasured === 0 && pts.length > 0) {
3866
- let held = 0;
3867
- for (let i = 0; i < painted.length; i++) if (painted[i]) held++;
3868
- if (!backingHoldsGlyph(glyphArea * (held / pts.length), glyphArea)) {
3869
- if (!raised) {
3870
- report.pageMajority++;
3871
- continue;
3872
- }
3873
- raisedOnPage = true;
3874
- }
3875
- }
3876
- report.scanned++;
3877
- const opaqueUnder = under.filter((x3) => effAlpha(x3.mk) >= PILL_OPAQUE_ALPHA);
3878
- const cellEntry = (opaqueUnder.length ? opaqueUnder : under).reduce((a3, b4) => b4.ov > a3.ov || b4.ov === a3.ov && b4.mk.ord > a3.mk.ord ? b4 : a3);
3879
- const cell = cellEntry.mk;
3880
- const pill = under.find((x3) => x3.mk !== cell && isPillBackdropAlpha(effAlpha(x3.mk)) && x3.mk.ord > cell.ord && pillBacksGlyph(x3.ov, glyphArea))?.mk;
3881
- const cellRGBA = toRGBA(cell.fill);
3882
- let bgRGB = cellRGBA ? compositeOver([cellRGBA[0], cellRGBA[1], cellRGBA[2], cellRGBA[3] * cell.op], pageRGB) : pageRGB;
3883
- if (pill) {
3884
- const pr = toRGBA(pill.fill);
3885
- if (pr) {
3886
- bgRGB = compositeOver([pr[0], pr[1], pr[2], 0.9], bgRGB);
3887
- pill.el.setAttribute("fill", `rgb(${pr[0]}, ${pr[1]}, ${pr[2]})`);
3888
- pill.el.setAttribute("fill-opacity", "0.9");
3889
- report.pillsBoosted++;
3890
- if (extendPillOver(pill.el, tr)) report.pillsExtended++;
3891
- }
3892
- }
3893
- const cur = tx.getAttribute("fill") || (win && typeof win.getComputedStyle === "function" ? win.getComputedStyle(tx).fill : "");
3894
- if (!pill && unmeasured === 0) {
3895
- const bgs = sampleBackgrounds(boxed.map((x3) => x3.mk), straddleSampleGrid(tr), pageRGB, effAlpha);
3896
- if (bgs && straddles(bgs)) {
3897
- if (minContrastOver(cur, bgs) >= STRADDLE_TARGET_CONTRAST) continue;
3898
- const pillEl = addPill(tx, `rgb(${pageRGB[0]}, ${pageRGB[1]}, ${pageRGB[2]})`);
3899
- const behind = pillEl ? bgs.map((b4) => compositeOver([pageRGB[0], pageRGB[1], pageRGB[2], STRADDLE_PILL_ALPHA], b4)) : bgs;
3900
- if (pillEl) report.straddlePills++;
3901
- const pick = pickColorOver(cur, behind);
3902
- if (!pick.keep) {
3903
- tx.setAttribute("fill", pick.color);
3904
- report.fixed++;
3905
- }
3906
- tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3907
- continue;
3908
- }
3909
- }
3910
- if (raisedOnPage) continue;
3911
- const normalize = !cellSuppressesNormalize(cell.el.getAttribute("class"));
3912
- const d2 = decideLabelColor(cur, `rgb(${bgRGB[0]}, ${bgRGB[1]}, ${bgRGB[2]})`, 1, pageBg, MIN_CONTRAST, normalize);
3913
- if (d2.fix) {
3914
- tx.setAttribute("fill", d2.color);
3915
- report.fixed++;
3916
- }
3917
- if (pill || d2.fix) tx.setAttribute(LABEL_CONTRAST_DONE_ATTR, "1");
3918
- }
3919
- return report;
3920
- } catch {
3921
- report.skipped = "error";
3922
- return report;
3923
- }
3924
- }
3925
-
3926
- // src/idScope.ts
3927
- var seq = 0;
3928
- function newIdScope() {
3929
- seq += 1;
3930
- return "h" + seq;
3931
- }
3932
- var URL_REF = /url\(\s*(['"]?)#([^'")\s]+)\1\s*\)/g;
3933
- function scopeChartIds(c2, scope) {
3934
- const r2 = { renamed: 0, collisions: [] };
3935
- try {
3936
- const tag = "--" + scope, doc = c2.ownerDocument, map = /* @__PURE__ */ new Map();
3937
- const refs = [], used = /* @__PURE__ */ new Set();
3938
- c2.querySelectorAll("*").forEach((el) => {
3939
- for (const a3 of el.getAttributeNames()) {
3940
- const v = el.getAttribute(a3);
3941
- const href = (a3 === "href" || a3 === "xlink:href") && v[0] === "#";
3942
- if (!href && v.indexOf("url(") < 0) continue;
3943
- refs.push([el, a3, v]);
3944
- if (href) used.add(v.slice(1));
3945
- for (const m4 of v.matchAll(URL_REF)) used.add(m4[2]);
3946
- }
3947
- });
3948
- c2.querySelectorAll("[id]").forEach((el) => {
3949
- const id = el.id;
3950
- if (!used.has(id) || id.endsWith(tag)) return;
3951
- const q2 = id.replace(/["\\]/g, "\\$&");
3952
- if (doc && Array.from(doc.querySelectorAll(`[id="${q2}"],[id^="${q2}--h"]`)).some((o4) => !c2.contains(o4))) {
3953
- r2.collisions.push(id);
3954
- }
3955
- map.set(id, el.id = id + tag);
3956
- r2.renamed++;
3957
- });
3958
- for (const [el, a3, v] of refs) {
3959
- const nv = v[0] === "#" && map.has(v.slice(1)) ? "#" + map.get(v.slice(1)) : v.replace(URL_REF, (m4, q2, id) => map.has(id) ? `url(${q2}#${map.get(id)}${q2})` : m4);
3960
- if (nv !== v) el.setAttribute(a3, nv);
3961
- }
3962
- } catch {
3963
- }
3964
- return r2;
3965
- }
3966
-
3967
- // src/invalidSentinel.ts
3968
- function isInvalidSentinelError(text2) {
3969
- if (!text2) return false;
3970
- return /\bINVALID\s*:/.test(text2);
3971
- }
3972
- function invalidSentinelReason(text2, max = 240) {
3973
- if (!text2) return "";
3974
- const m4 = /\bINVALID\s*:\s*([^\r\n]*)/.exec(text2);
3975
- if (!m4) return "";
3976
- const reason = m4[1].trim();
3977
- const cap = Math.max(0, Math.floor(max));
3978
- if (reason.length <= cap) return reason;
3979
- return cap <= 3 ? reason.slice(0, cap) : reason.slice(0, cap - 3).trimEnd() + "...";
3980
- }
3981
-
3982
- // src/annotations.ts
3983
- var ANNOTATION_LAYER_CLASS = "bic-annotations";
3984
- var ANNOTATION_CLASS = "bic-annotation";
3985
- var ZOOM_PAD_CLASS = "llm-zoom-pad";
3986
- var text = (v) => v == null ? "" : String(v).trim();
3987
- var FREE = { l: -Infinity, t: -Infinity, r: Infinity, b: Infinity };
3988
- var box = (r2) => ({ l: r2.left, t: r2.top, r: r2.right, b: r2.bottom });
3989
- var area = (b4) => (b4.r - b4.l) * (b4.b - b4.t);
3990
- var cut = (a3, b4) => {
3991
- if (!a3) return null;
3992
- const c2 = { l: Math.max(a3.l, b4.l), t: Math.max(a3.t, b4.t), r: Math.min(a3.r, b4.r), b: Math.min(a3.b, b4.b) };
3993
- return c2.r > c2.l && c2.b > c2.t ? c2 : null;
3994
- };
3995
- function shapeTest(mark) {
3996
- const g5 = mark;
3997
- let inv = null;
3998
- try {
3999
- inv = g5?.isPointInFill ? g5.getScreenCTM?.()?.inverse() ?? null : null;
4000
- } catch {
4001
- inv = null;
4002
- }
4003
- if (!g5 || !inv) return () => true;
4004
- const m4 = inv;
4005
- return (x3, y2) => {
4006
- try {
4007
- return g5.isPointInFill({ x: m4.a * x3 + m4.c * y2 + m4.e, y: m4.b * x3 + m4.d * y2 + m4.f });
4008
- } catch {
4009
- return true;
4010
- }
4011
- };
4012
- }
4013
- var parseIdxs = (s2) => (s2 || "").split(",").map((x3) => parseInt(x3, 10)).filter((n) => Number.isFinite(n));
4014
- function createAnnotationLayer(container, onClick) {
4015
- let list = [];
4016
- let report = { shown: 0, notShown: 0 };
4017
- let last = null;
4018
- const doc = container.ownerDocument;
4019
- const win = doc.defaultView;
4020
- let observer = null;
4021
- let queued = false;
4022
- const redrawSoon = () => {
4023
- if (queued || !last) return;
4024
- queued = true;
4025
- const run = () => {
4026
- queued = false;
4027
- if (last) paint(last.data, last.theme);
4028
- };
4029
- if (win?.requestAnimationFrame) win.requestAnimationFrame(run);
4030
- else setTimeout(run, 16);
4031
- };
4032
- const watch = (on) => {
4033
- const MO = win?.MutationObserver;
4034
- if (on && !observer && MO) {
4035
- observer = new MO((records) => {
4036
- if (records.some((r2) => !r2.target.closest?.(`.${ANNOTATION_LAYER_CLASS}`))) redrawSoon();
4037
- });
4038
- observer.observe(container, { subtree: true, attributes: true, attributeFilter: ["transform", "d", "cx", "cy", "x", "y", "points"] });
4039
- } else if (!on && observer) {
4040
- observer.disconnect();
4041
- observer = null;
4042
- }
4043
- };
4044
- function paint(data, theme) {
4045
- let layer = container.querySelector(`:scope > .${ANNOTATION_LAYER_CLASS}`);
4046
- if (!list.length) {
4047
- layer?.remove();
4048
- report = { shown: 0, notShown: 0 };
4049
- return;
4050
- }
4051
- if (!layer) {
4052
- layer = doc.createElement("div");
4053
- layer.className = ANNOTATION_LAYER_CLASS;
4054
- layer.setAttribute("aria-hidden", "false");
4055
- Object.assign(layer.style, { position: "absolute", left: "0", top: "0", width: "0", height: "0", overflow: "visible", zIndex: "2" });
4056
- if (win?.getComputedStyle(container).position === "static") container.style.position = "relative";
4057
- container.appendChild(layer);
4058
- }
4059
- layer.textContent = "";
4060
- const names = (data.columns || []).map((c2) => typeof c2 === "string" ? c2 : c2?.name);
4061
- const marks = Array.from(container.querySelectorAll(`.${MARK_CLASS}[${ROW_IDX_ATTR}]`)).filter((m4) => !m4.closest(`.${ANNOTATION_LAYER_CLASS}`));
4062
- const marksByRow = /* @__PURE__ */ new Map();
4063
- for (const m4 of marks) for (const r2 of parseIdxs(m4.getAttribute(ROW_IDX_ATTR))) {
4064
- const at = marksByRow.get(r2);
4065
- if (at) at.push(m4);
4066
- else marksByRow.set(r2, [m4]);
4067
- }
4068
- const origin = container.getBoundingClientRect();
4069
- const open = origin.width > 0 && origin.height > 0 ? box(origin) : FREE;
4070
- const clipOf = /* @__PURE__ */ new Map();
4071
- const viewOf = (m4) => {
4072
- let v = open;
4073
- const svg = m4.closest("svg");
4074
- if (svg) {
4075
- const s2 = svg.getBoundingClientRect();
4076
- if (s2.width > 0 && s2.height > 0) v = cut(v, box(s2));
4077
- }
4078
- for (let el = m4.parentElement; v && el && el !== svg && el !== container; el = el.parentElement) {
4079
- if (!clipOf.has(el)) {
4080
- const w4 = clipWindowOf(el);
4081
- clipOf.set(el, w4 && box(w4));
4082
- }
4083
- const w3 = clipOf.get(el);
4084
- if (w3) v = cut(v, w3);
4085
- }
4086
- return v;
4087
- };
4088
- const controls = Array.from(container.querySelectorAll(`.${CONTROL_CLASS}, .${ZOOM_PAD_CLASS}`)).map((c2) => c2.getBoundingClientRect()).filter((r2) => r2.width > 0 && r2.height > 0).map(box);
4089
- const clear = (v, len, mark) => {
4090
- const hw = Math.max(16, len * 6 + 8) / 2, hh = 8, g5 = 2;
4091
- const cx = (v.l + v.r) / 2, cy = (v.t + v.b) / 2;
4092
- const free = (x3, y2) => x3 >= v.l && x3 <= v.r && y2 >= v.t && y2 <= v.b && controls.every((c2) => x3 + hw <= c2.l || x3 - hw >= c2.r || y2 + hh <= c2.t || y2 - hh >= c2.b);
4093
- const onShape = shapeTest(mark);
4094
- const tries = [[cx, cy]];
4095
- for (let i = 0; i <= 8; i++) for (let j4 = 0; j4 <= 6; j4++) tries.push([v.l + (v.r - v.l) * i / 8, v.t + (v.b - v.t) * j4 / 6]);
4096
- tries.sort((p4, q2) => Math.hypot(p4[0] - cx, p4[1] - cy) - Math.hypot(q2[0] - cx, q2[1] - cy));
4097
- for (const c2 of controls) tries.push([cx, c2.b + hh + g5], [cx, c2.t - hh - g5], [c2.l - hw - g5, cy], [c2.r + hw + g5, cy]);
4098
- return tries.find(([x3, y2]) => free(x3, y2) && onShape(x3, y2)) ?? tries.find(([x3, y2]) => free(x3, y2)) ?? null;
4099
- };
4100
- let shown = 0;
4101
- for (const a3 of list) {
4102
- const pairs = (a3.where ? Object.entries(a3.where) : a3.column != null ? [[a3.column, a3.value]] : []).map(([c2, v]) => [names.indexOf(c2), text(v)]);
4103
- const want = pairs.map((p4) => p4[1]).join(" / ");
4104
- const hits = /* @__PURE__ */ new Set();
4105
- if (pairs.length && pairs.every((p4) => p4[0] >= 0)) (data.rows || []).forEach((row, r2) => {
4106
- if (pairs.every(([ci, v]) => text(row?.[ci]) === v)) for (const m4 of marksByRow.get(r2) ?? []) hits.add(m4);
4107
- });
4108
- if (!hits.size) continue;
4109
- let best = null, bestMark = null, laidOut = false;
4110
- for (const m4 of hits) {
4111
- const b4 = m4.getBoundingClientRect();
4112
- if (!(b4.width > 0 && b4.height > 0)) continue;
4113
- laidOut = true;
4114
- const v = cut(box(b4), viewOf(m4));
4115
- if (v && (!best || area(v) > area(best))) {
4116
- best = v;
4117
- bestMark = m4;
4118
- }
4119
- }
4120
- const pt2 = best ? clear(best, (a3.label ?? "\u2022").length, bestMark) : null;
4121
- if (laidOut && !pt2) continue;
4122
- shown++;
4123
- const badge = doc.createElement("div");
4124
- badge.className = ANNOTATION_CLASS;
4125
- badge.textContent = a3.label ?? "\u2022";
4126
- if (a3.title) badge.setAttribute("title", a3.title);
4127
- badge.setAttribute("role", "button");
4128
- badge.setAttribute("aria-label", a3.title ? `Note: ${a3.title}` : `Note on ${want}`);
4129
- Object.assign(badge.style, {
4130
- position: "absolute",
4131
- left: `${Math.round(pt2 ? pt2[0] - origin.left : 0)}px`,
4132
- top: `${Math.round(pt2 ? pt2[1] - origin.top : 0)}px`,
4133
- transform: "translate(-50%, -50%)",
4134
- minWidth: "16px",
4135
- height: "16px",
4136
- padding: "0 4px",
4137
- boxSizing: "border-box",
4138
- borderRadius: "8px",
4139
- font: "600 10px/16px system-ui, sans-serif",
4140
- textAlign: "center",
4141
- color: theme.bg || "#ffffff",
4142
- background: theme.accent || theme.fg || "#0f6cbd",
4143
- boxShadow: `0 0 0 1.5px ${theme.bg || "#ffffff"}`,
4144
- cursor: onClick ? "pointer" : "default",
4145
- // Never pointer-events (a host failsafe turns it back on); visibility hides a badge whose mark
4146
- // has no box yet.
4147
- visibility: laidOut ? "visible" : "hidden"
4148
- });
4149
- badge.addEventListener("click", (e) => {
4150
- e.stopPropagation();
4151
- onClick?.(a3);
4152
- });
4153
- layer.appendChild(badge);
4154
- }
4155
- report = { shown, notShown: list.length - shown };
4156
- }
4157
- return {
4158
- set(next) {
4159
- list = Array.isArray(next) ? next.slice() : [];
4160
- watch(list.length > 0);
4161
- if (last) paint(last.data, last.theme);
4162
- },
4163
- draw(data, theme) {
4164
- last = { data, theme };
4165
- paint(data, theme);
4166
- },
4167
- get report() {
4168
- return report;
4169
- },
4170
- destroy() {
4171
- watch(false);
4172
- list = [];
4173
- last = null;
4174
- container.querySelector(`:scope > .${ANNOTATION_LAYER_CLASS}`)?.remove();
4175
- }
4176
- };
4177
- }
4178
-
4179
- // src/host.ts
4180
- function sessionViewStateProvider(container) {
4181
- const holder = container;
4182
- const existing = holder[CONTAINER_SLOT_UI_STATE];
4183
- const store = existing && typeof existing === "object" ? existing : holder[CONTAINER_SLOT_UI_STATE] = {};
4184
- return {
4185
- load: () => store,
4186
- save: (next) => {
4187
- if (!next || typeof next !== "object") return;
4188
- for (const k3 of Object.keys(store)) delete store[k3];
4189
- Object.assign(store, next);
4190
- }
4191
- };
4192
- }
4193
- function noopViewStateProvider() {
4194
- return { load: () => ({}), save: () => {
4195
- } };
4196
- }
4197
- var parseRowIdxs = (s2) => (s2 || "").split(",").map((x3) => parseInt(x3, 10)).filter((n) => Number.isFinite(n));
4198
- function assembleD3(base, ...plugins) {
4199
- return Object.assign({}, base, ...plugins);
4200
- }
4201
- var D3_PLUGIN_PACKAGES = Object.freeze({
4202
- sankey: "d3-sankey",
4203
- sankeyLinkHorizontal: "d3-sankey",
4204
- sankeyJustify: "d3-sankey",
4205
- sankeyCenter: "d3-sankey",
4206
- sankeyLeft: "d3-sankey",
4207
- sankeyRight: "d3-sankey",
4208
- hexbin: "d3-hexbin",
4209
- voronoiTreemap: "d3-voronoi-treemap",
4210
- voronoiMap: "d3-voronoi-map",
4211
- weightedVoronoi: "d3-weighted-voronoi",
4212
- // Attached onto d3 like the rest, but reached as d3.mermaid.render(...) — a NAMESPACE
4213
- // OBJECT with methods, not a function on d3. The scan below accounts for that shape.
4214
- mermaid: "mermaid",
4215
- // AND THE NAME A REAL CHART ACTUALLY WRITES. This one is not a member of the mermaid
4216
- // package at all: it is a helper the SERVER prepends into the generated code, and the
4217
- // helper is what reaches for the library. So a genuine diagram chart contains
4218
- // `d3.llmMermaid(` and never once writes `d3.mermaid` — measured on the first real
4219
- // generation of that type, for which this scan returned an EMPTY list. It drew, because
4220
- // the host it ran in happened to carry the library; a host relying on this answer to
4221
- // decide what to install would have been told nothing and failed several frames deep.
4222
- //
4223
- // Mapping the helper is right rather than a hack, because this map answers "what must a
4224
- // host INSTALL for this code to run" and not "which package exports this symbol". For
4225
- // code that calls the helper, the answer is the library the helper reaches for.
4226
- llmMermaid: "mermaid"
4227
- });
4228
- function requiredD3Plugins(code) {
4229
- const out = /* @__PURE__ */ new Set();
4230
- const body = stripJsComments(String(code || ""));
4231
- const add = (name) => {
4232
- const pkg = D3_PLUGIN_PACKAGES[name];
4233
- if (pkg) out.add(pkg);
4234
- };
4235
- for (const m4 of body.matchAll(/\bd3\s*\.\s*(\w+)/g)) add(m4[1]);
4236
- for (const m4 of body.matchAll(/\bd3\s*\[\s*['"](\w+)['"]\s*\]/g)) add(m4[1]);
4237
- for (const m4 of body.matchAll(/\{([^{}]*)\}\s*=\s*d3\b/g)) {
4238
- for (const part of m4[1].split(",")) add(part.split(":")[0].trim());
4239
- }
4240
- return [...out].sort();
4241
- }
4242
- function explainRenderFailure(err, d32) {
4243
- const msg = String(err?.message ?? err ?? "");
4244
- if (!d32) {
4245
- return new Error(
4246
- "[@bicharts/chart-host] no d3 was provided, so the generated chart could not run. Pass it explicitly \u2014 createChartHost(el, { d3 }) / <BicChart d3={d3} /> \u2014 or set window.d3. The chart needs D3 v7 (npm install d3@7). Original error: " + msg
4247
- );
4248
- }
4249
- if (typeof d32?.mermaid?.render !== "function" && /\bmermaid\b/i.test(msg)) {
4250
- return new Error(
4251
- "[@bicharts/chart-host] this chart draws its diagram with Mermaid, which it reaches as d3.mermaid.render(...), and the d3 you passed has no mermaid on it \u2014 this host did not load the library. A host supplies it exactly the way the other plugins are supplied: hand createChartHost ONE d3 that carries it, the SAME d3 every chart gets \u2014 npm install mermaid then import * as d3base from 'd3'; import mermaid from 'mermaid'; import { assembleD3 } from '@bicharts/chart-host'; const d3 = assembleD3(d3base, { mermaid }); (an ES-module d3 namespace is frozen, so assigning onto it throws) Original error: " + msg
4252
- );
4253
- }
4254
- const m4 = /d3\.(\w+) is not a function|(\w+) is not a function/.exec(msg);
4255
- const name = m4?.[1] ?? m4?.[2] ?? "";
4256
- const pkg = D3_PLUGIN_PACKAGES[name];
4257
- if (pkg) {
4258
- return new Error(
4259
- `[@bicharts/chart-host] this chart calls d3.${name}(), which comes from the separate "${pkg}" package and is not attached to the d3 you passed. Install it and hand the host ONE d3 that carries it, the SAME d3 every chart gets: npm install ${pkg} then import * as d3base from "d3"; import { ${name} } from "${pkg}"; import { assembleD3 } from "@bicharts/chart-host"; const d3 = assembleD3(d3base, { ${name} }); (an ES-module d3 namespace is frozen, so assigning onto it throws) Original error: ` + msg
4260
- );
4261
- }
4262
- return err;
4263
- }
4264
- var ESM_EXPORT_CLAUSE = /^[ \t]*export[ \t]+(?:\{[^}]*\}|default[ \t]+[A-Za-z_$][\w$]*)[ \t]*;?[ \t]*$/gm;
4265
- var ESM_EXPORT_DECL = /^([ \t]*)export[ \t]+(?=(?:async[ \t]+)?function\b|const\b|let\b|var\b|class\b)/gm;
4266
- function stripEsmExports(code) {
4267
- return String(code || "").replace(ESM_EXPORT_CLAUSE, "").replace(ESM_EXPORT_DECL, "$1");
4268
- }
4269
- function writableD3(d32) {
4270
- if (d32 == null || typeof d32 !== "object") return d32;
4271
- if (Object.isExtensible(d32)) return d32;
4272
- return { ...d32 };
4273
- }
4274
- function compileRenderFn(code, win, doc, d32) {
4275
- const body = stripEsmExports(code) + "\n;return (typeof render === 'function') ? render : null;";
4276
- let factory;
4277
- try {
4278
- factory = new Function("container", "data", "options", "window", "document", "d3", body);
4279
- } catch (e) {
4280
- const msg = String(e?.message ?? e ?? "");
4281
- const modular = /\bimport\b|\bexport\b/.test(String(code || ""));
4282
- throw new Error(
4283
- "[@bicharts/chart-host] the generated code could not be COMPILED, so nothing was drawn. This path evaluates the chart as a code string, which cannot contain ES-module syntax" + (modular ? " \u2014 and this code still has `import`/`export` in it after the export clause was stripped. Either request the plain form from the generator, or `import` the module yourself and pass the render function directly." : ".") + " Original error: " + msg
4284
- );
4285
- }
4286
- const fn3 = factory.call(null, null, null, null, win, doc, writableD3(d32));
4287
- if (typeof fn3 !== "function") throw new Error("generated code did not define render(container, data, options)");
4288
- return fn3;
4289
- }
4290
- var ASYNC_RENDER_TIMEOUT_MS = 15e3;
4291
- var isThenable = (v) => !!v && (typeof v === "object" || typeof v === "function") && typeof v.then === "function";
4292
- function createChartHost(container, config) {
4293
- const doc = container.ownerDocument;
4294
- const win = doc?.defaultView ?? globalThis;
4295
- const d32 = config.d3 ?? globalThis.d3 ?? win?.d3;
4296
- let data = config.data;
4297
- {
4298
- const stamped = config.data?.meta?.hostContract;
4299
- const major = (v) => (v || "").split(".")[0];
4300
- if (stamped && major(stamped) !== major(HOST_CONTRACT_VERSION)) {
4301
- try {
4302
- (win?.console ?? console)?.warn(
4303
- `[@bicharts/chart-host] contract MAJOR mismatch: this chart was generated against v${stamped}, the host implements v${HOST_CONTRACT_VERSION}. Marks, container slots or the cross-filter event may not line up \u2014 regenerate the chart.`
4304
- );
4305
- } catch {
4306
- }
4307
- }
4308
- }
4309
- let raw = { ...config.options ?? {} };
4310
- if (typeof raw.setUiState !== "function") {
4311
- const provider = config.viewState ?? sessionViewStateProvider(container);
4312
- let bag;
4313
- try {
4314
- bag = provider.load() ?? {};
4315
- } catch {
4316
- bag = {};
4317
- }
4318
- if (raw.uiState && typeof raw.uiState === "object" && Object.keys(bag).length === 0)
4319
- Object.assign(bag, raw.uiState);
4320
- raw.uiState = bag;
4321
- raw.setUiState = (s2) => {
4322
- if (!s2 || typeof s2 !== "object") return;
4323
- try {
4324
- provider.save(s2);
4325
- } catch {
4326
- }
4327
- };
4328
- }
4329
- const resolveForHost = (input) => {
4330
- const out = resolveOptions(input);
4331
- return out.allowTooltips == null ? { ...out, allowTooltips: true } : out;
4332
- };
4333
- let resolved = resolveForHost(raw);
4334
- let renderFn = config.renderFn ?? null;
4335
- let destroyed = false;
4336
- let warnedGeo = false;
4337
- let warnedBlank = false;
4338
- let warnedIds = false;
4339
- const idScope = newIdScope();
4340
- let renderSeq = 0;
4341
- const annotationLayer = createAnnotationLayer(container, (a3) => config.onAnnotationClick?.(a3));
4342
- const drawAnnotations = () => annotationLayer.draw(
4343
- { columns: data.columns, rows: data.rows },
4344
- {
4345
- fg: resolved.themeFg,
4346
- accent: resolved.themeAccent,
4347
- bg: resolved.backgroundColor ?? resolved.themeBg
4348
- }
4349
- );
4350
- annotationLayer.set(config.annotations ?? []);
4351
- let renderedPromise = Promise.resolve();
4352
- const settle = (p4) => {
4353
- renderedPromise = p4;
4354
- p4.catch(() => {
4355
- });
4356
- };
4357
- let current = null;
4358
- let activeTickEl = null;
4359
- let selectionIsPeriod = false;
4360
- let selectionFromChart = false;
4361
- const clickedMarks = () => container[CONTAINER_SLOT_CLICKED_MARKS] ?? null;
4362
- const setClickedMarks = (c2) => {
4363
- try {
4364
- container[CONTAINER_SLOT_CLICKED_MARKS] = c2;
4365
- } catch {
4366
- }
4367
- };
4368
- const subs = /* @__PURE__ */ new Set();
4369
- const ensureAffordanceStyles = () => {
4370
- try {
4371
- if (!doc || doc.getElementById("bic-chart-host-affordances")) return;
4372
- const st = doc.createElement("style");
4373
- st.id = "bic-chart-host-affordances";
4374
- st.textContent = `
4375
- /* TYPOGRAPHY FIREWALL. Generated charts set font-size but almost never line-height or
4376
- letter-spacing, so they INHERIT whatever the host page cascades in. A page with
4377
- \`:root { font: 18px/145% }\` (the stock Vite template does exactly this) hands every
4378
- chart an inherited 26.1px line box; an 11px label in a 14px band is then sliced through
4379
- the middle. The chart is not wrong and the host is not wrong \u2014 the boundary between
4380
- them is, so the boundary fixes it. Both properties are overridable: a chart that sets
4381
- its own line-height still wins. Deliberately NOT resetting font-family or color, which
4382
- a host SHOULD be able to theme. Found 2026-07-26 in the React demo, on a chart that
4383
- renders perfectly inside Power BI. */
4384
- .${HOST_CONTAINER_CLASS} { line-height: normal; letter-spacing: normal; }
4385
- /* BACKGROUND MARKS ARE NOT DATA. A mark whose ${ROW_IDX_ATTR} is EMPTY has no rows in the
4386
- CURRENT frame \u2014 an animated map's region before its country enters the series. Every
4387
- affordance below therefore skips it: brightening or dimming it manufactures a shade
4388
- that appears in no legend, and at 25% grey over white it comes out LIGHTER than plain
4389
- land, which reads as a real bottom-of-scale value rather than as absence. The guard is
4390
- exactly [${ROW_IDX_ATTR}=""] \u2014 an ABSENT attribute is a tagged companion layer (an
4391
- anomaly badge, a highlight stroke) and must keep dimming with its datum. */
4392
- .${HOST_CONTAINER_CLASS} .${MARK_CLASS} { cursor: pointer; transition: opacity 120ms ease-in-out, filter 100ms ease-in-out; }
4393
- .${HOST_CONTAINER_CLASS} .${MARK_CLASS}:not([${ROW_IDX_ATTR}=""]):hover { filter: brightness(1.1) drop-shadow(0 0 1.5px rgba(0,0,0,0.5)) !important; }
4394
- .${HOST_CONTAINER_CLASS}:has(.${MARK_CLASS}:not([${ROW_IDX_ATTR}=""]):hover) .${MARK_CLASS}:not(:hover):not([${ROW_IDX_ATTR}=""]) { opacity: 0.55; }
4395
- .${HOST_CONTAINER_CLASS}.${SELECTION_ACTIVE_CLASS} .${MARK_CLASS}:not(.${MARK_SELECTED_CLASS}):not([${ROW_IDX_ATTR}=""]) {
4396
- opacity: var(${DIM_OPACITY_VAR}, ${DIM_OPACITY_DEFAULT}) !important;
4397
- }
4398
- /* THE LIFT, BY DECLARATION ONLY. Dimming the others is all the rule above does; a selected
4399
- mark keeps whatever paint its chart gave it. A chart that draws every mark pale on purpose
4400
- (a parallel-coordinates plot at 0.38 so overplotting reads) therefore shows its SELECTED
4401
- lines at 38% - the same eye-reading as dimmed. Inside a group the chart stamps
4402
- ${LIFT_SELECTED_CLASS} on, a selected mark is painted at full opacity. Opacity only, never
4403
- stroke geometry. Undeclared charts are byte-identical, which is what keeps an alpha
4404
- ENCODING (a depth cue, a hierarchy level) from being flattened by a fix meant for one. */
4405
- .${HOST_CONTAINER_CLASS}.${SELECTION_ACTIVE_CLASS} .${LIFT_SELECTED_CLASS} .${MARK_CLASS}.${MARK_SELECTED_CLASS},
4406
- .${HOST_CONTAINER_CLASS}.${SELECTION_ACTIVE_CLASS} .${MARK_CLASS}.${LIFT_SELECTED_CLASS}.${MARK_SELECTED_CLASS} {
4407
- opacity: 1 !important; stroke-opacity: 1 !important; fill-opacity: 1 !important;
4408
- }
4409
- .${HOST_CONTAINER_CLASS} .${LEGEND_MARK_CLASS} { cursor: pointer; }
4410
- /* An axis/group header that filters when clicked LOOKS like inert text, and until it is
4411
- marked there is no way to tell a landed filter from a dead label \u2014 the report reads
4412
- "the axis labels are not clickable" even when every click resolved. Weight + underline
4413
- rather than a colour: these labels sit wherever the host page's theme puts them, and
4414
- the host has no reliable contrast partner out in the axis gutter. This paints NO marks,
4415
- so it is the one acknowledgement a PERIOD tick can have without breaking the rule that
4416
- a timeline never dims its own chart. */
4417
- .${HOST_CONTAINER_CLASS} .${AXIS_FILTER_CLASS} { cursor: pointer; }
4418
- .${HOST_CONTAINER_CLASS} .${ACTIVE_TICK_CLASS},
4419
- .${HOST_CONTAINER_CLASS} .${ACTIVE_TICK_CLASS} text {
4420
- font-weight: 700 !important;
4421
- text-decoration: underline !important;
4422
- }`;
4423
- (doc.head || doc.documentElement)?.appendChild(st);
4424
- } catch {
4425
- }
4426
- };
4427
- const paintSelection = () => {
4428
- try {
4429
- const sel = current;
4430
- const active = !!sel && sel.length > 0;
4431
- const dim = active && !selectionIsPeriod;
4432
- container.classList?.[dim ? "add" : "remove"](SELECTION_ACTIVE_CLASS);
4433
- const lit = container.querySelectorAll(`.${ACTIVE_TICK_CLASS}`);
4434
- for (const t of Array.from(lit)) t.classList?.remove(ACTIVE_TICK_CLASS);
4435
- const tickStillDrawn = !!activeTickEl && (typeof container.contains === "function" ? container.contains(activeTickEl) : activeTickEl.isConnected !== false);
4436
- if (active && tickStillDrawn) activeTickEl.classList?.add(ACTIVE_TICK_CLASS);
4437
- const wanted = new Set(sel ?? []);
4438
- const marks = container.querySelectorAll(`.${MARK_CLASS}[${ROW_IDX_ATTR}], .${LEGEND_MARK_CLASS}[${ROW_IDX_ATTR}]`);
4439
- const rule = selectionRuleOf(container);
4440
- if (rule !== "any-row") {
4441
- const list = Array.from(marks);
4442
- const plan = planSelectionPaint(
4443
- list.map((m4) => ({ key: markKeyOf(m4), rows: parseRowIdxs(m4.getAttribute(ROW_IDX_ATTR)) })),
4444
- active ? wanted : [],
4445
- rule,
4446
- clickedMarks()
4447
- );
4448
- list.forEach((m4, i) => m4.classList?.[plan.on[i] ? "add" : "remove"](MARK_SELECTED_CLASS));
4449
- setClickedMarks(plan.keys.length ? { keys: plan.keys, selection: Array.from(wanted) } : null);
4450
- if (active) {
4451
- try {
4452
- config.onSelectionPaint?.({
4453
- rule,
4454
- mode: plan.mode,
4455
- lit: plan.on.filter(Boolean).length,
4456
- marks: list.length,
4457
- selection: wanted.size
4458
- });
4459
- } catch {
4460
- }
4461
- }
4462
- return;
4463
- }
4464
- for (const m4 of Array.from(marks)) {
4465
- const rows = parseRowIdxs(m4.getAttribute(ROW_IDX_ATTR));
4466
- const on = active && rows.some((r2) => wanted.has(r2));
4467
- m4.classList?.[on ? "add" : "remove"](MARK_SELECTED_CLASS);
4468
- }
4469
- } catch {
4470
- }
4471
- };
4472
- const notify = (rowIdxs, source, tick, fromChart = false) => {
4473
- current = rowIdxs;
4474
- selectionFromChart = rowIdxs.length > 0 && fromChart;
4475
- activeTickEl = rowIdxs.length ? tick ?? null : null;
4476
- selectionIsPeriod = rowIdxs.length > 0 && periodTickSuppressesFeedback(!!tick, chartOwnsTimeline(container));
4477
- paintSelection();
4478
- for (const cb of subs) {
4479
- try {
4480
- cb(rowIdxs, source);
4481
- } catch {
4482
- }
4483
- }
4484
- };
4485
- let xfAt = 0;
4486
- const XF_ECHO_MS = 150;
4487
- const onXf = (e) => {
4488
- const d2 = e?.detail || {};
4489
- xfAt = Date.now();
4490
- if (d2.clear) notify([], d2.source || "chart");
4491
- else if (d2.mark) notify(parseRowIdxs(d2.mark.getAttribute?.(ROW_IDX_ATTR)), d2.source || "chart", d2.mark, true);
4492
- };
4493
- const resolver = createMarkResolver({
4494
- root: container,
4495
- doc,
4496
- log: () => {
4497
- }
4498
- });
4499
- const clickSel = `.${MARK_CLASS}[${ROW_IDX_ATTR}], .${LEGEND_MARK_CLASS}[${ROW_IDX_ATTR}], .${AXIS_FILTER_CLASS}[${ROW_IDX_ATTR}]`;
4500
- const onClick = (e) => {
4501
- if (Date.now() - xfAt < XF_ECHO_MS) return;
4502
- if (isInsideControl(e?.target, container)) return;
4503
- let el = resolver.findMark(e?.target, clickSel, e);
4504
- if (!el) el = resolver.penetrateOverlayAt(e?.clientX, e?.clientY, clickSel);
4505
- if (!el) el = resolver.resolveByGeometry(e?.clientX, e?.clientY, clickSel);
4506
- if (!el) {
4507
- if (current && current.length) {
4508
- const slot = container[CONTAINER_SLOT_XF_CLEAR];
4509
- if (selectionFromChart && typeof slot === "function") {
4510
- try {
4511
- slot();
4512
- } catch {
4513
- }
4514
- }
4515
- if (current && current.length) notify([], "user");
4516
- }
4517
- return;
4518
- }
4519
- const rows = parseRowIdxs(el.getAttribute(ROW_IDX_ATTR));
4520
- if (!rows.length) return;
4521
- const tick = el.classList?.contains?.(AXIS_FILTER_CLASS) ? el : null;
4522
- const multi = !!(e?.ctrlKey || e?.metaKey || e?.shiftKey);
4523
- const next = nextSelection(current, rows, { ctrl: !!(e?.ctrlKey || e?.metaKey), shift: !!e?.shiftKey });
4524
- const toggledOff = !multi && next.length === 0;
4525
- setClickedMarks(nextClickedMarks(
4526
- clickedMarks(),
4527
- current,
4528
- markKeyOf(el),
4529
- next,
4530
- { ctrl: !!(e?.ctrlKey || e?.metaKey), shift: !!e?.shiftKey }
4531
- ));
4532
- notify(next, "user", toggledOff ? null : tick);
4533
- };
4534
- container.addEventListener(XFILTER_REFRESH_EVENT, onXf);
4535
- container.addEventListener("click", onClick);
4536
- container.classList?.add(HOST_CONTAINER_CLASS);
4537
- ensureAffordanceStyles();
4538
- const fitOpts = config.fit ?? true;
4539
- const labelContrastOpts = config.labelContrast ?? true;
4540
- const stopAnim = () => {
4541
- const s2 = container[CONTAINER_SLOT_ANIM_STOP];
4542
- if (typeof s2 === "function") {
4543
- try {
4544
- s2();
4545
- } catch {
4546
- }
4547
- }
4548
- };
4549
- const runPostRenderPasses = () => {
4550
- try {
4551
- const r2 = scopeChartIds(container, idScope);
4552
- if (r2.collisions.length && !warnedIds) {
4553
- warnedIds = true;
4554
- try {
4555
- (win?.console ?? console)?.warn(
4556
- `[@bicharts/chart-host] ids shared with another chart, scoped: ${r2.collisions.slice(0, 5).join(", ")}`
4557
- );
4558
- } catch {
4559
- }
4560
- }
4561
- config.onIdScope?.(r2);
4562
- } catch {
4563
- }
4564
- if (labelContrastOpts !== false) {
4565
- try {
4566
- const lc = labelContrastOpts === true ? {} : { ...labelContrastOpts };
4567
- if (!lc.pageBg) {
4568
- const bg = resolved.backgroundColor ?? resolved.themeBg;
4569
- if (typeof bg === "string" && bg) lc.pageBg = bg;
4570
- }
4571
- const r2 = applyLabelContrast(container, lc);
4572
- config.onLabelContrast?.(r2);
4573
- } catch {
4574
- }
4575
- }
4576
- ensureCrossfilterHitTargets(container, doc);
4577
- paintSelection();
4578
- try {
4579
- const census = censusMarks(container);
4580
- if (isBlankRender({
4581
- markCount: census.markCount,
4582
- rows: data.rows ? data.rows.length : 0,
4583
- animated: config.animated,
4584
- contractUntagged: config.contractUntagged,
4585
- declaresNoRowMarks: census.declaresNoRowMarks
4586
- })) {
4587
- if (!warnedBlank) {
4588
- warnedBlank = true;
4589
- try {
4590
- (win?.console ?? console)?.warn(
4591
- `[@bicharts/chart-host] this chart rendered without error but painted no data marks, against ${data.rows.length} row(s) \u2014 so the container is empty. The usual cause is that the generated code binds a column BY NAME that is no longer in the data, sending it down its own "no data" branch. Check that the columns in your table still match the ones the chart was generated for.`
4592
- );
4593
- } catch {
4594
- }
4595
- }
4596
- config.onBlankRender?.({ census, rows: data.rows ? data.rows.length : 0 });
4597
- }
4598
- } catch {
4599
- }
4600
- if (config.onHitBandCensus) {
4601
- try {
4602
- config.onHitBandCensus(censusHitBands(container, doc));
4603
- } catch {
4604
- }
4605
- }
4606
- if (config.onColourSpreadCensus) {
4607
- try {
4608
- config.onColourSpreadCensus(censusColourSpread(container, doc));
4609
- } catch {
4610
- }
4611
- }
4612
- if (config.onClippedTextCensus) {
4613
- try {
4614
- config.onClippedTextCensus(censusClippedText(container));
4615
- } catch {
4616
- }
4617
- }
4618
- if (config.onValuePlacementCensus) {
4619
- try {
4620
- config.onValuePlacementCensus(censusValuePlacement(container, data));
4621
- } catch {
4622
- }
4623
- }
4624
- if (fitOpts !== false) {
4625
- try {
4626
- const r2 = fitRenderedChart(container, fitOpts === true ? {} : fitOpts);
4627
- config.onFit?.(r2);
4628
- } catch {
4629
- }
4630
- }
4631
- try {
4632
- drawAnnotations();
4633
- } catch {
4634
- }
4635
- };
4636
- const renderFailure = (err) => {
4637
- const message = String(err?.message ?? err ?? "");
4638
- if (config.onInvalidSentinel && isInvalidSentinelError(message)) {
4639
- stopAnim();
4640
- container.innerHTML = "";
4641
- config.onInvalidSentinel({ reason: invalidSentinelReason(message), message });
4642
- return null;
4643
- }
4644
- return explainRenderFailure(err, d32);
4645
- };
4646
- const host = {
4647
- render() {
4648
- if (destroyed) return;
4649
- const seq2 = ++renderSeq;
4650
- stopAnim();
4651
- container.innerHTML = "";
4652
- if (!renderFn) {
4653
- if (!config.code) throw new Error("createChartHost: provide code or renderFn");
4654
- renderFn = compileRenderFn(config.code, win, doc, d32);
4655
- }
4656
- if (resolved.geo === void 0 && config.geoKind) {
4657
- const g5 = config.geoProvider?.(config.geoKind) ?? geoFromCache(config.geoKind);
4658
- if (g5) resolved = { ...resolved, geo: g5 };
4659
- else if (!warnedGeo) {
4660
- warnedGeo = true;
4661
- try {
4662
- (win?.console ?? console)?.warn(
4663
- `[@bicharts/chart-host] geoKind "${config.geoKind}" was set but no geometry is available, so this chart will draw without a basemap. Either \`await loadGeo("${config.geoKind}")\` before rendering, pass a geoProvider, or import { geoForKind } from "@bicharts/chart-host/geo" and set options.geo.`
4664
- );
4665
- } catch {
4666
- }
4667
- }
4668
- }
4669
- if (resolved.geoUnmatched === void 0 && data.geoUnmatched) resolved = { ...resolved, geoUnmatched: data.geoUnmatched };
4670
- if (resolved.geoPoint === void 0 && data.geoPoint) resolved = { ...resolved, geoPoint: data.geoPoint };
4671
- if (resolved.geoPointDest === void 0 && data.geoPointDest) resolved = { ...resolved, geoPointDest: data.geoPointDest };
4672
- if (resolved.dateCellsAreUtcDays === void 0 && data.dateCellsAreUtcDays) resolved = { ...resolved, dateCellsAreUtcDays: true };
4673
- let outcome;
4674
- try {
4675
- outcome = renderFn(container, { columns: data.columns, rows: data.rows }, resolved);
4676
- } catch (err) {
4677
- const fatal = renderFailure(err);
4678
- if (fatal) {
4679
- settle(Promise.reject(fatal));
4680
- throw fatal;
4681
- }
4682
- settle(Promise.resolve());
4683
- return;
4684
- }
4685
- if (!isThenable(outcome)) {
4686
- runPostRenderPasses();
4687
- settle(Promise.resolve());
4688
- return;
4689
- }
4690
- settle(new Promise((resolve, reject) => {
4691
- const timer = setTimeout(() => {
4692
- reject(new Error(
4693
- `[@bicharts/chart-host] the chart did not finish drawing within ${Math.round(ASYNC_RENDER_TIMEOUT_MS / 1e3)}s, so the host stopped waiting for it. Nothing past that point ran: no label-contrast pass, no hit-target heal, no census, no fit. A render() that returns a promise has to settle it.`
4694
- ));
4695
- }, ASYNC_RENDER_TIMEOUT_MS);
4696
- const done = (fn3) => {
4697
- clearTimeout(timer);
4698
- fn3();
4699
- };
4700
- Promise.resolve(outcome).then(
4701
- () => done(() => {
4702
- if (destroyed || seq2 !== renderSeq) {
4703
- resolve();
4704
- return;
4705
- }
4706
- runPostRenderPasses();
4707
- resolve();
4708
- }),
4709
- (err) => done(() => {
4710
- if (destroyed || seq2 !== renderSeq) {
4711
- resolve();
4712
- return;
4713
- }
4714
- const fatal = renderFailure(err);
4715
- if (fatal) reject(fatal);
4716
- else resolve();
4717
- })
4718
- );
4719
- }));
4720
- },
4721
- setOptions(partial) {
4722
- raw = { ...raw, ...partial };
4723
- resolved = resolveForHost(raw);
4724
- host.render();
4725
- },
4726
- setData(next) {
4727
- data = next;
4728
- host.render();
4729
- },
4730
- get options() {
4731
- return resolved;
4732
- },
4733
- setAnnotations(list) {
4734
- annotationLayer.set(list);
4735
- if (!destroyed) try {
4736
- drawAnnotations();
4737
- } catch {
4738
- }
4739
- },
4740
- get annotationReport() {
4741
- return annotationLayer.report;
4742
- },
4743
- // A GETTER, not a captured value: `rendered` names the LATEST render, so a host that
4744
- // read it once would otherwise hold the promise of a draw long since replaced.
4745
- get rendered() {
4746
- return renderedPromise;
4747
- },
4748
- selection: {
4749
- onChange(cb) {
4750
- subs.add(cb);
4751
- return () => subs.delete(cb);
4752
- },
4753
- clear() {
4754
- const s2 = container[CONTAINER_SLOT_XF_CLEAR];
4755
- if (typeof s2 === "function") {
4756
- try {
4757
- s2();
4758
- } catch {
4759
- }
4760
- }
4761
- setClickedMarks(null);
4762
- notify([], "host");
4763
- },
4764
- highlight(rowIdxs) {
4765
- notify(Array.isArray(rowIdxs) ? rowIdxs.slice() : [], "host");
4766
- },
4767
- get current() {
4768
- return current;
4769
- }
4770
- },
4771
- animation: { stop: stopAnim },
4772
- initialMark() {
4773
- return container[CONTAINER_SLOT_INITIAL_XF_MARK] ?? null;
4774
- },
4775
- destroy() {
4776
- if (destroyed) return;
4777
- destroyed = true;
4778
- stopAnim();
4779
- container.removeEventListener(XFILTER_REFRESH_EVENT, onXf);
4780
- container.removeEventListener("click", onClick);
4781
- subs.clear();
4782
- annotationLayer.destroy();
4783
- unpinScrolledAxis(container);
4784
- container.innerHTML = "";
4785
- }
4786
- };
4787
- return host;
4788
- }
4789
-
4790
- // src/group.ts
4791
- var EMPTY6 = Object.freeze({ sourceId: null, rows: Object.freeze([]) });
4792
- function toSourceRows(rowMap, payloadRowIdxs) {
4793
- if (!rowMap) return payloadRowIdxs.slice();
4794
- return payloadRowIdxs.map((i) => rowMap[i]).filter((i) => i !== void 0);
4795
- }
4796
- function toPayloadRows(rowMap, sourceRowIdxs) {
4797
- const at = /* @__PURE__ */ new Map();
4798
- rowMap.forEach((src, k3) => {
4799
- if (!at.has(src)) at.set(src, k3);
4800
- });
4801
- return sourceRowIdxs.map((s2) => at.get(s2)).filter((k3) => k3 !== void 0);
4802
- }
4803
- var sameRows = (a3, b4) => {
4804
- if (a3.length !== b4.length) return false;
4805
- const x3 = a3.slice().sort((p4, q2) => p4 - q2), y2 = b4.slice().sort((p4, q2) => p4 - q2);
4806
- return x3.every((v, i) => v === y2[i]);
4807
- };
4808
- function syncMemberSelection(host, selection, id, highlight, incoming, rowMap) {
4809
- const mine = selection.sourceId === id && selection.rows.length > 0;
4810
- if (mine) {
4811
- if (rowMap) {
4812
- const want = toPayloadRows(rowMap, selection.rows);
4813
- if (!sameRows(want, host.selection.current ?? [])) host.selection.highlight(want);
4814
- }
4815
- return;
4816
- }
4817
- if (highlight && incoming && incoming.length) {
4818
- host.selection.highlight(incoming.slice());
4819
- return;
4820
- }
4821
- if (host.selection.current && host.selection.current.length) host.selection.clear();
4822
- }
4823
- function createChartGroup(columns, rows, opts = {}) {
4824
- let cols = columns;
4825
- let table = rows;
4826
- let geo = opts.geo ?? null;
4827
- let point = opts.point ?? null;
4828
- let destination = opts.destination ?? null;
4829
- let selection = EMPTY6;
4830
- const subs = /* @__PURE__ */ new Set();
4831
- const members = /* @__PURE__ */ new Set();
4832
- const notify = (change) => {
4833
- for (const cb of Array.from(subs)) cb(selection, change);
4834
- };
4835
- const incomingFor = (id, filteredBy) => {
4836
- const s2 = selection;
4837
- const forId = s2.rows.length && s2.sourceId && s2.sourceId !== id ? s2.rows.slice() : null;
4838
- if (filteredBy) return s2.sourceId === filteredBy ? forId : null;
4839
- return forId;
4840
- };
4841
- const payloadFor = (sourceRowIdxs) => {
4842
- const idxs = sourceRowIdxs ? sourceRowIdxs.slice() : table.map((_4, i) => i);
4843
- const subset = idxs.map((i) => table[i]);
4844
- const payload = buildRenderPayload(
4845
- cols,
4846
- subset,
4847
- geo ?? void 0,
4848
- point ?? void 0,
4849
- destination ?? void 0
4850
- );
4851
- return { payload, rowMap: idxs };
4852
- };
4853
- const memberPayload = (id, o4 = {}) => payloadFor(o4.respondsWith === "highlight" ? null : incomingFor(id, o4.filteredBy));
4854
- const group = {
4855
- get selection() {
4856
- return selection;
4857
- },
4858
- get columns() {
4859
- return cols;
4860
- },
4861
- get rows() {
4862
- return table;
4863
- },
4864
- incomingFor,
4865
- payloadFor,
4866
- memberPayload,
4867
- publish(id, sourceRowIdxs) {
4868
- selection = sourceRowIdxs.length ? { sourceId: id, rows: sourceRowIdxs.slice() } : { sourceId: null, rows: [] };
4869
- notify(sourceRowIdxs.length ? "select" : "clear");
4870
- },
4871
- clear() {
4872
- selection = { sourceId: null, rows: [] };
4873
- notify("clear");
4874
- },
4875
- setSource(nextColumns, nextRows, o4 = {}) {
4876
- cols = nextColumns;
4877
- table = nextRows;
4878
- geo = o4.geo ?? null;
4879
- point = o4.point ?? null;
4880
- destination = o4.destination ?? null;
4881
- notify("source");
4882
- },
4883
- onChange(cb) {
4884
- subs.add(cb);
4885
- return () => {
4886
- subs.delete(cb);
4887
- };
4888
- },
4889
- attach(id, host, o4 = {}) {
4890
- const highlight = o4.respondsWith === "highlight";
4891
- let rowMap = memberPayload(id, o4).rowMap;
4892
- const filterKey = (incoming) => highlight || !incoming ? "*" : incoming.join(",");
4893
- let drawnUnder = filterKey(incomingFor(id, o4.filteredBy));
4894
- const offHost = host.selection.onChange((payloadIdxs, source) => {
4895
- if (source === "host") return;
4896
- const sourceIdxs = toSourceRows(rowMap, payloadIdxs);
4897
- if (id) group.publish(id, sourceIdxs);
4898
- o4.onSelect?.(sourceIdxs);
4899
- });
4900
- const offGroup = group.onChange((sel, change) => {
4901
- const incoming = incomingFor(id, o4.filteredBy);
4902
- const key = filterKey(incoming);
4903
- if (change === "source" || key !== drawnUnder) {
4904
- const next = payloadFor(highlight ? null : incoming);
4905
- rowMap = next.rowMap;
4906
- drawnUnder = key;
4907
- host.setData(next.payload);
4908
- }
4909
- syncMemberSelection(host, sel, id, highlight, incoming, rowMap);
4910
- });
4911
- const member = {
4912
- get rowMap() {
4913
- return rowMap;
4914
- },
4915
- detach() {
4916
- offHost();
4917
- offGroup();
4918
- members.delete(member);
4919
- }
4920
- };
4921
- members.add(member);
4922
- return member;
4923
- },
4924
- destroy() {
4925
- for (const m4 of Array.from(members)) m4.detach();
4926
- subs.clear();
4927
- }
4928
- };
4929
- return group;
4930
- }
4931
-
4932
1258
  export {
4933
- DARK_TEXT,
4934
- LIGHT_TEXT,
4935
- MIN_CONTRAST,
4936
- WHITE_TEXT_BG_LUM,
4937
- PILL_MIN_ALPHA,
4938
- PILL_OPAQUE_ALPHA,
4939
- PAGE_MATCH_TOLERANCE,
4940
- isPillBackdropAlpha,
4941
- PILL_MIN_COVERAGE,
4942
- pillBacksGlyph,
4943
- BACKING_MAJORITY,
4944
- backingHoldsGlyph,
4945
- cellSuppressesNormalize,
4946
- toRGBA,
4947
- compositeOver,
4948
- relativeLuminance,
4949
- contrastRatio,
4950
- decideLabelColor,
4951
- GLYPH_SAMPLE_N,
4952
- glyphSampleGrid,
4953
- STRADDLE_COLS,
4954
- STRADDLE_ROWS,
4955
- STRADDLE_MIN_SHARE,
4956
- STRADDLE_TARGET_CONTRAST,
4957
- STRADDLE_PILL_ALPHA,
4958
- straddleSampleGrid,
4959
- straddles,
4960
- minContrastOver,
4961
- pickColorOver,
4962
- deltaEHex,
4963
- SAME_SHADE_DELTA_E,
4964
- MIN_RAMP_FILLS,
4965
- censusColourSpread,
4966
- colourSpreadFlag,
4967
- AUTO_RAMP_CLASSES,
4968
- AUTO_RAMP_DRAWN_OPACITY,
4969
- AUTO_RAMP_MIN_STEP_DELTA_E,
4970
- autoRampMinStep,
4971
- autoRampCanvas,
4972
- resolveAutoColorScale,
4973
- resolveOptions,
4974
- geoAssetFor,
4975
- loadGeo,
4976
- geoFromCache,
4977
- registerGeo,
4978
- registerGeoAsset,
4979
- clearGeoCache,
4980
1259
  le,
4981
1260
  L2 as L,
1261
+ ge,
4982
1262
  l,
4983
1263
  o,
4984
1264
  _3,
1265
+ J3,
1266
+ Yn,
1267
+ Fn,
4985
1268
  qe,
4986
1269
  Qe,
4987
- Zn2 as Zn,
1270
+ Zn,
4988
1271
  Qn,
4989
- buildRenderPayload,
4990
- stripJsComments,
4991
- rowIdxsFromMark,
4992
- nextSelection,
4993
- selectionRuleOf,
4994
- markKeyOf,
4995
- sameRowSet,
4996
- planSelectionPaint,
4997
- nextClickedMarks,
4998
- isInsideControl,
4999
- createMarkResolver,
5000
- collectD3GlyphCenters,
5001
- SELECTION_GLYPH_CLASS,
5002
- clearSelectionGlyphs,
5003
- paintSelectionGlyphs,
5004
- ensureCrossfilterHitTargets,
5005
- censusMarks,
5006
- isBlankRender,
5007
- blankRenderFlag,
5008
- MIN_HIT_BAND_PX,
5009
- censusHitBands,
5010
- hitBandFlag,
5011
- CLIP_TOLERANCE_PX,
5012
- censusClippedText,
5013
- clippedTextFlag,
5014
- VALUE_AXIS_MIN_FIT,
5015
- censusValuePlacement,
5016
- valuePlacementFlag,
5017
- SCROLL_SLACK_PX,
5018
- needsScroll,
5019
- contentExtentOf,
5020
- scrollFitFor,
5021
- FIT_CONTENT_SELECTOR,
5022
- PHANTOM_FRACTION,
5023
- isPhantomBox,
5024
- MAX_FRAME_GROW_FACTOR,
5025
- planFrameGrow,
5026
- AXIS_PIN_MIN_LABELS,
5027
- AXIS_PIN_BAND_PAD_PX,
5028
- AXIS_PIN_MAX_BAND_FRACTION,
5029
- AXIS_PIN_TRACK_REACH_PX,
5030
- isHorizontalLabelRow,
5031
- labelBand,
5032
- planAxisPin,
5033
- axisPinPlacement,
5034
- ctmScaleOf,
5035
- svgInkReach,
5036
- measureContainerBoxes,
5037
- fitReadingFor,
5038
- unpinScrolledAxis,
5039
- pinScrolledAxis,
5040
- fitRenderedChart,
5041
- LABEL_CONTRAST_DONE_ATTR,
5042
- LABEL_CONTRAST_CAP,
5043
- LABEL_PILL_CLASS,
5044
- applyLabelContrast,
5045
- newIdScope,
5046
- scopeChartIds,
5047
- isInvalidSentinelError,
5048
- invalidSentinelReason,
5049
- ANNOTATION_LAYER_CLASS,
5050
- ANNOTATION_CLASS,
5051
- sessionViewStateProvider,
5052
- noopViewStateProvider,
5053
- assembleD3,
5054
- D3_PLUGIN_PACKAGES,
5055
- requiredD3Plugins,
5056
- explainRenderFailure,
5057
- stripEsmExports,
5058
- compileRenderFn,
5059
- createChartHost,
5060
- toSourceRows,
5061
- syncMemberSelection,
5062
- createChartGroup
1272
+ Xn
5063
1273
  };