[Tynstep-svn] r229 - in trunk/step: step-core step-core/src/main/java/com/tyndalehouse/step/core/data/common step-core/src/main/java/com/tyndalehouse/step/core/data/create step-core/src/main/java/com/tyndalehouse/step/core/data/entities step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference step-core/src/main/java/com/tyndalehouse/step/core/guice step-core/src/main/java/com/tyndalehouse/step/core/guice/providers step-core/src/main/java/com/tyndalehouse/step/core/service step-core/src/main/java/com/tyndalehouse/step/core/service/impl step-core/src/main/java/com/tyndalehouse/step/core/utils step-core/src/main/resources step-core/src/main/resources/com/tyndalehouse/step/core/data/create step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography step-core/src/test/java/com/tyndalehouse/step/core/data/create step-core/src/test/java/com/tyndalehouse/step/core/prebuild step-core/src/test/java/com/tyndalehouse/step/core/service step-core/src/test/java/com/tyndalehouse/step/core/service/impl step-core/src/test/java/com/tyndalehouse/step/core/utils step-core/src/test/resources step-parent step-web/src/main/java/com/tyndalehouse/step/rest/controllers step-web/src/main/resources step-web/src/main/webapp step-web/src/main/webapp/js

ChrisBurrell at crosswire.org ChrisBurrell at crosswire.org
Thu May 12 09:40:33 MST 2011


Author: ChrisBurrell
Date: 2011-05-12 09:40:32 -0700 (Thu, 12 May 2011)
New Revision: 229

Added:
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/common/GeoPrecision.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/GeographyModuleLoader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/ModuleLoader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/GeoPlace.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/GeographyService.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImpl.java
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/openbible.tab
   trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/readme.txt
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImplTest.java
   trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/GeographyController.java
   trunk/step/step-web/src/main/webapp/js/geography.js
Removed:
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java
Modified:
   trunk/step/step-core/pom.xml
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/JSwordService.java
   trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/JSwordServiceImpl.java
   trunk/step/step-core/src/main/resources/log4j.properties
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/prebuild/DownloadJSwordBiblesPreReq.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/JSwordServiceImplTest.java
   trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/UserDataServiceImplTest.java
   trunk/step/step-core/src/test/resources/log4j.properties
   trunk/step/step-parent/pom.xml
   trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java
   trunk/step/step-web/src/main/resources/log4j.properties
   trunk/step/step-web/src/main/webapp/index.html
   trunk/step/step-web/src/main/webapp/js/init.js
   trunk/step/step-web/src/main/webapp/js/passage.js
   trunk/step/step-web/src/main/webapp/js/ui_hooks.js
   trunk/step/step-web/src/main/webapp/panemenu.html
Log:
submitting geography module first draft

Modified: trunk/step/step-core/pom.xml
===================================================================
--- trunk/step/step-core/pom.xml	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/pom.xml	2011-05-12 16:40:32 UTC (rev 229)
@@ -138,8 +138,7 @@
 		
 		<dependency>
 			<groupId>net.sf.ehcache</groupId>
-			<artifactId>ehcache</artifactId>
-			<type>pom</type>
+			<artifactId>ehcache-core</artifactId>
 		</dependency>
 		
 		<dependency>

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/common/GeoPrecision.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/common/GeoPrecision.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/common/GeoPrecision.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,16 @@
+package com.tyndalehouse.step.core.data.common;
+
+/**
+ * indicates how accurate a location is
+ * 
+ * @author cjburrell
+ * 
+ */
+public enum GeoPrecision {
+    /** an exact location */
+    EXACT,
+    /** an approximate location */
+    APPROXIMATE,
+    /** an unknown location */
+    UNKNOWN,
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/common/GeoPrecision.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/GeographyModuleLoader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/GeographyModuleLoader.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/GeographyModuleLoader.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,185 @@
+package com.tyndalehouse.step.core.data.create;
+
+import static org.apache.commons.lang.StringUtils.isEmpty;
+import static org.apache.commons.lang.StringUtils.isNotEmpty;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.io.LineIterator;
+import org.apache.commons.lang.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.avaje.ebean.EbeanServer;
+import com.google.inject.Inject;
+import com.tyndalehouse.step.core.data.common.GeoPrecision;
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.service.JSwordService;
+
+/**
+ * Loads anything related to the timeline
+ * 
+ * @author Chris
+ * 
+ */
+public class GeographyModuleLoader implements ModuleLoader {
+    private static final String OPENBIBLE_DATA = "geography/openbible.tab";
+    private static final Logger LOG = LoggerFactory.getLogger(GeographyModuleLoader.class);
+    private static final int IGNORE_LINES = 1;
+    private final EbeanServer ebean;
+    private final JSwordService jsword;
+
+    /**
+     * we need to persist object through an orm
+     * 
+     * @param ebean the persistence server
+     * @param jsword the jsword service
+     */
+    @Inject
+    public GeographyModuleLoader(final EbeanServer ebean, final JSwordService jsword) {
+        this.ebean = ebean;
+        this.jsword = jsword;
+    }
+
+    /**
+     * loads up the timeline data
+     */
+    public void init() {
+        final long currentTime = System.currentTimeMillis();
+
+        final List<GeoPlace> geoPlaces = loadOpenBibleData();
+
+        // finally persist to database
+        this.ebean.save(geoPlaces);
+
+        final long duration = System.currentTimeMillis() - currentTime;
+        LOG.info("Took {}ms to load {} places", Long.valueOf(duration), geoPlaces.size());
+    }
+
+    /**
+     * reads in the data and populates the scripture references
+     * 
+     * @return a list of places
+     */
+    private List<GeoPlace> loadOpenBibleData() {
+        LOG.debug("Loading geography data");
+        final List<GeoPlace> places = new ArrayList<GeoPlace>(2000);
+
+        LineIterator lineIterator = null;
+        InputStream placeFileStream = null;
+
+        try {
+
+            placeFileStream = getClass().getResourceAsStream(OPENBIBLE_DATA);
+            lineIterator = IOUtils.lineIterator(placeFileStream, null);
+
+            for (int ii = 0; ii < IGNORE_LINES && lineIterator.hasNext(); ii++) {
+                lineIterator.next();
+            }
+
+            while (lineIterator.hasNext()) {
+                final String geoLine = lineIterator.nextLine();
+                final String[] geoFields = StringUtils.splitPreserveAllTokens(geoLine, '\t');
+
+                final GeoPlace gp = new GeoPlace();
+                gp.setEsvName(geoFields[0]);
+                gp.setRoot(geoFields[1]);
+                setCoordinates(gp, geoFields[2], geoFields[3]);
+                final List<ScriptureReference> passageReferences = this.jsword
+                        .getPassageReferences(geoFields[4].replace(',', ';').replace("Sng", "Song"));
+
+                gp.setReferences(passageReferences);
+                gp.setComment(geoFields[5]);
+
+                LOG.trace("Adding [{}] [{}]", gp.getEsvName(), geoFields[4]);
+                places.add(gp);
+                LOG.trace("Added [{}] [{}]", gp.getId(), gp.getEsvName());
+
+            }
+        } catch (final IOException e) {
+            LOG.error("IO Exception while loading geography data", e);
+        } finally {
+            LineIterator.closeQuietly(lineIterator);
+            IOUtils.closeQuietly(placeFileStream);
+        }
+
+        return places;
+    }
+
+    /**
+     * A helper to set the coordinates and an indication of how precise things are...
+     * 
+     * @param gp the place
+     * @param latitude latitude
+     * @param longitude longitude
+     */
+    private void setCoordinates(final GeoPlace gp, final String latitude, final String longitude) {
+        setCoordinate(gp, latitude, true);
+        setCoordinate(gp, longitude, false);
+    }
+
+    /**
+     * sets a coordinate
+     * 
+     * @param gp the place
+     * @param coordinate the number value, e.g. ~25.40
+     * @param isLatitude whether the coordinate is a latitude (true), or longitude (false)
+     */
+    private void setCoordinate(final GeoPlace gp, final String coordinate, final boolean isLatitude) {
+        if (isEmpty(coordinate)) {
+            // unknown
+            gp.setPrecision(GeoPrecision.UNKNOWN);
+            return;
+        }
+
+        // advance to first digit
+        int ii = 0;
+        final int coordLength = coordinate.length();
+        LOG.trace("Parsing value coordinate [{}]", coordinate);
+        while (ii < coordLength && !Character.isDigit(coordinate.charAt(ii))) {
+            // do something with the characters we find
+
+            ii++;
+        }
+
+        // check last character, and remove
+        int jj = coordinate.length() - 1;
+        while (jj > 0 && !Character.isDigit(coordinate.charAt(jj))) {
+            if (coordinate.charAt(jj) == '?') {
+                gp.setPrecision(GeoPrecision.APPROXIMATE);
+            }
+
+            jj--;
+        }
+
+        if (jj <= ii) {
+            // then we have only dodgy characters indicating unknown
+            gp.setPrecision(GeoPrecision.UNKNOWN);
+            return;
+        }
+
+        try {
+            LOG.trace("Substring of [{}] and [{}]", ii, jj);
+            final String coordinateSuffix = coordinate.substring(ii, jj + 1);
+
+            if (isNotEmpty(coordinateSuffix)) {
+                final Double coordValue = Double.parseDouble(coordinateSuffix);
+                if (isLatitude) {
+                    gp.setLatitude(coordValue);
+                } else {
+                    gp.setLongitude(coordValue);
+                }
+            } else {
+                // set to unknown
+                gp.setPrecision(GeoPrecision.UNKNOWN);
+            }
+        } catch (final NumberFormatException e) {
+            LOG.error("Unable to parse number: " + coordinate, e);
+        }
+    }
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/GeographyModuleLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/Loader.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,15 +1,11 @@
 package com.tyndalehouse.step.core.data.create;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.avaje.ebean.EbeanServer;
 import com.avaje.ebean.Transaction;
 import com.google.inject.Inject;
-import com.tyndalehouse.step.core.data.entities.ScriptureReference;
 
 /**
  * The object that will be responsible for loading all the data into a database
@@ -18,21 +14,25 @@
  * 
  */
 public class Loader {
-    private static final int BATCH_SIZE = 1000;
+    private static final int BATCH_SIZE = 10000;
     private static final Logger LOG = LoggerFactory.getLogger(Loader.class);
     private final TimelineModuleLoader timelineModuleLoader;
     private final EbeanServer ebean;
+    private final GeographyModuleLoader geoModuleLoader;
 
     /**
      * The loader is given a connection source to load the data
      * 
      * @param timelineModuleLoader loader that loads the timeline module
+     * @param geoModuleLoader the loader for geography data
      * @param ebean the persistence server
      */
     @Inject
-    public Loader(final EbeanServer ebean, final TimelineModuleLoader timelineModuleLoader) {
+    public Loader(final EbeanServer ebean, final TimelineModuleLoader timelineModuleLoader,
+            final GeographyModuleLoader geoModuleLoader) {
         this.ebean = ebean;
         this.timelineModuleLoader = timelineModuleLoader;
+        this.geoModuleLoader = geoModuleLoader;
     }
 
     /**
@@ -49,15 +49,18 @@
         LOG.debug("Loading initial data");
         final Transaction transaction = this.ebean.beginTransaction();
         try {
-            transaction.setBatchMode(true);
-            transaction.setBatchSize(BATCH_SIZE);
-            transaction.setReadOnly(false);
+            // transaction.setBatchMode(true);
+            // transaction.setBatchSize(BATCH_SIZE);
+            // transaction.setReadOnly(false);
 
             // set up a list of scripture references that can be populated as we populate the database
-            final List<ScriptureReference> scriptureReferences = new ArrayList<ScriptureReference>();
-            this.timelineModuleLoader.init(scriptureReferences);
+            // final List<ScriptureReference> scriptureReferences = new ArrayList<ScriptureReference>();
 
-            this.ebean.save(scriptureReferences);
+            // TODO deduplicate? so that we have many-1 mapping?
+            this.timelineModuleLoader.init();
+            this.geoModuleLoader.init();
+
+            // this.ebean.save(scriptureReferences);
             this.ebean.commitTransaction();
         } finally {
             this.ebean.endTransaction();

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/ModuleLoader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/ModuleLoader.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/ModuleLoader.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,18 @@
+package com.tyndalehouse.step.core.data.create;
+
+
+/**
+ * A simple interface for all module loaders to implement
+ * 
+ * @author cjburrell
+ * 
+ */
+public interface ModuleLoader {
+    /**
+     * loads up the timeline data
+     * 
+     * @param scriptureReferences the scripture references that might be found as part of the loading
+     */
+    void init();
+
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/ModuleLoader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/create/TimelineModuleLoader.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -29,7 +29,7 @@
 import com.tyndalehouse.step.core.data.entities.TimelineEvent;
 import com.tyndalehouse.step.core.data.entities.reference.TimeUnitType;
 import com.tyndalehouse.step.core.exceptions.StepInternalException;
-import com.tyndalehouse.step.core.utils.PassageReferenceUtils;
+import com.tyndalehouse.step.core.service.JSwordService;
 import com.tyndalehouse.step.core.utils.StepIOUtils;
 
 /**
@@ -38,7 +38,7 @@
  * @author Chris
  * 
  */
-public class TimelineModuleLoader {
+public class TimelineModuleLoader implements ModuleLoader {
     private static final String TIMELINE_DIRECTORY = "timeline/";
     private static final String HOTSPOTS_CSV_DATA_FILE = "hotspot/hotspots.csv";
     private static final String TIMEBAND_CSV_DATA_FILE = "timeband/timebands.csv";
@@ -56,6 +56,7 @@
 
     private static final Logger LOG = LoggerFactory.getLogger(TimelineModuleLoader.class);
     private final EbeanServer ebean;
+    private final JSwordService jsword;
 
     /**
      * we need to persist object through an orm
@@ -63,26 +64,27 @@
      * @param ebean the persistence server
      */
     @Inject
-    public TimelineModuleLoader(final EbeanServer ebean) {
+    public TimelineModuleLoader(final EbeanServer ebean, final JSwordService jsword) {
         this.ebean = ebean;
+        this.jsword = jsword;
     }
 
-    /**
-     * loads up the timeline data
-     * 
-     * @param scriptureReferences the scripture references that might be found as part of the loading
-     */
-    public void init(final List<ScriptureReference> scriptureReferences) {
+    @Override
+    public void init() {
+        LOG.debug("Loading timeline events");
+        final long currentTime = System.currentTimeMillis();
 
         final Map<String, Timeband> bands = loadTimebands();
         final Map<String, HotSpot> hotSpots = loadHotSpots(bands);
         final List<CsvData> timelineDataFiles = getTimelineDataFiles();
-        final List<TimelineEvent> timelineEvents = loadTimelineEvents(hotSpots, timelineDataFiles,
-                scriptureReferences);
+        final List<TimelineEvent> timelineEvents = loadTimelineEvents(hotSpots, timelineDataFiles);
 
         // finally persist to database
         this.ebean.save(timelineEvents);
 
+        final long duration = System.currentTimeMillis() - currentTime;
+        LOG.info("Took {}ms to load {} timeline events", Long.valueOf(duration), timelineEvents.size());
+
     }
 
     /**
@@ -140,7 +142,7 @@
      * 
      */
     private List<TimelineEvent> loadTimelineEvents(final Map<String, HotSpot> hotspots,
-            final List<CsvData> csvDataFiles, final List<ScriptureReference> scriptureReferences) {
+            final List<CsvData> csvDataFiles) {
         LOG.debug("Loading timeline events data");
         final List<TimelineEvent> events = new ArrayList<TimelineEvent>();
 
@@ -162,13 +164,13 @@
                     event.setToPrecision(to.getPrecision());
 
                 }
+                // finally add any scripture reference required
+                final List<ScriptureReference> passageReferences = this.jsword.getPassageReferences(data
+                        .getData(ii, "Refs"));
 
+                event.setReferences(passageReferences);
+
                 events.add(event);
-
-                // finally add any scripture reference required
-
-                scriptureReferences.addAll(PassageReferenceUtils.getPassageReferences(event,
-                        data.getData(ii, "Refs")));
             }
         }
 

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/GeoPlace.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/GeoPlace.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/GeoPlace.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,142 @@
+package com.tyndalehouse.step.core.data.entities;
+
+import java.io.Serializable;
+import java.util.List;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+
+import com.avaje.ebean.annotation.CacheStrategy;
+import com.tyndalehouse.step.core.data.common.GeoPrecision;
+
+/**
+ * An entity representing a particular geographical location
+ * 
+ * @author cjburrell
+ * 
+ */
+ at CacheStrategy(readOnly = true)
+ at Entity
+public class GeoPlace extends ScriptureTarget implements Serializable {
+    private static final long serialVersionUID = -3798208225083529282L;
+
+    @Column
+    private String esvName;
+    @Column
+    private String root;
+    @Column(precision = 17)
+    private Double latitude;
+    @Column(precision = 17)
+    private Double longitude;
+    @Column
+    private String comment;
+
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "geoPlace")
+    private List<ScriptureReference> references;
+
+    @Column
+    private GeoPrecision precision;
+
+    // private static final long serialVersionUID = -3343458338757180529L;
+
+    /**
+     * @return the esvName
+     */
+    public String getEsvName() {
+        return this.esvName;
+    }
+
+    /**
+     * @param esvName the esvName to set
+     */
+    public void setEsvName(final String esvName) {
+        this.esvName = esvName;
+    }
+
+    /**
+     * @return the root
+     */
+    public String getRoot() {
+        return this.root;
+    }
+
+    /**
+     * @param root the root to set
+     */
+    public void setRoot(final String root) {
+        this.root = root;
+    }
+
+    /**
+     * @return the latitude
+     */
+    public Double getLatitude() {
+        return this.latitude;
+    }
+
+    /**
+     * @param latitude the latitude to set
+     */
+    public void setLatitude(final Double latitude) {
+        this.latitude = latitude;
+    }
+
+    /**
+     * @return the longitude
+     */
+    public Double getLongitude() {
+        return this.longitude;
+    }
+
+    /**
+     * @param longitude the longitude to set
+     */
+    public void setLongitude(final Double longitude) {
+        this.longitude = longitude;
+    }
+
+    /**
+     * @return the comment
+     */
+    public String getComment() {
+        return this.comment;
+    }
+
+    /**
+     * @param comment the comment to set
+     */
+    public void setComment(final String comment) {
+        this.comment = comment;
+    }
+
+    /**
+     * @return the precision
+     */
+    public GeoPrecision getPrecision() {
+        return this.precision;
+    }
+
+    /**
+     * @param precision the precision to set
+     */
+    public void setPrecision(final GeoPrecision precision) {
+        this.precision = precision;
+    }
+
+    /**
+     * @return the references
+     */
+    public List<ScriptureReference> getReferences() {
+        return this.references;
+    }
+
+    /**
+     * @param references the references to set
+     */
+    public void setReferences(final List<ScriptureReference> references) {
+        this.references = references;
+    }
+
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/GeoPlace.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureReference.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -21,11 +21,16 @@
 
     @Id
     @GeneratedValue
-    private Integer scriptureReferenceId;
+    private Integer id;
 
-    @ManyToOne
-    private ScriptureTarget target;
+    @ManyToOne(optional = true)
+    @Column(nullable = true)
+    private GeoPlace geoPlace;
 
+    @ManyToOne(optional = true)
+    @Column(nullable = true)
+    private TimelineEvent timelineEvent;
+
     @Column
     private TargetType targetType;
 
@@ -36,33 +41,19 @@
     private int endVerseId;
 
     /**
-     * @return the scriptureReferenceId
+     * @return the id
      */
-    public Integer getScriptureReferenceId() {
-        return this.scriptureReferenceId;
+    public Integer getId() {
+        return this.id;
     }
 
     /**
-     * @param scriptureReferenceId the scriptureReferenceId to set
+     * @param id the id to set
      */
-    public void setScriptureReferenceId(final Integer scriptureReferenceId) {
-        this.scriptureReferenceId = scriptureReferenceId;
+    public void setId(final Integer id) {
+        this.id = id;
     }
 
-    // /**
-    // * @return the target
-    // */
-    // public AbstractScriptureTarget getTarget() {
-    // return this.target;
-    // }
-    //
-    // /**
-    // * @param target the target to set
-    // */
-    // public void setTarget(final AbstractScriptureTarget target) {
-    // this.target = target;
-    // }
-
     /**
      * @return the targetType
      */
@@ -106,17 +97,30 @@
     }
 
     /**
-     * @return the target
+     * @return the geoPlace
      */
-    public ScriptureTarget getTarget() {
-        return this.target;
+    public GeoPlace getGeoPlace() {
+        return this.geoPlace;
     }
 
     /**
-     * @param target the target to set
+     * @param geoPlace the geoPlace to set
      */
-    public void setTarget(final ScriptureTarget target) {
-        this.target = target;
+    public void setGeoPlace(final GeoPlace geoPlace) {
+        this.geoPlace = geoPlace;
     }
 
+    /**
+     * @return the timelineEvent
+     */
+    public TimelineEvent getTimelineEvent() {
+        return this.timelineEvent;
+    }
+
+    /**
+     * @param timelineEvent the timelineEvent to set
+     */
+    public void setTimelineEvent(final TimelineEvent timelineEvent) {
+        this.timelineEvent = timelineEvent;
+    }
 }

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/ScriptureTarget.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -2,28 +2,23 @@
 
 import java.io.Serializable;
 
-import javax.persistence.DiscriminatorColumn;
-import javax.persistence.DiscriminatorType;
-import javax.persistence.Entity;
 import javax.persistence.GeneratedValue;
 import javax.persistence.Id;
-import javax.persistence.Inheritance;
-import javax.persistence.InheritanceType;
+import javax.persistence.MappedSuperclass;
 
-import com.avaje.ebean.annotation.CacheStrategy;
-
 /**
  * A marker interface meaning this object can be attached to scripture references
  * 
  * @author Chris
  * 
  */
- at CacheStrategy(readOnly = true)
- at Entity
- at Inheritance(strategy = InheritanceType.JOINED)
- at DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER, name = "targetTypeId")
-public class ScriptureTarget implements Serializable {
-    private static final long serialVersionUID = -3343458338757180529L;
+// @Entity
+// @Inheritance(strategy = InheritanceType.SINGLE_TABLE)
+// @DiscriminatorColumn(discriminatorType = DiscriminatorType.INTEGER)
+ at MappedSuperclass
+public abstract class ScriptureTarget implements Serializable {
+    private static final long serialVersionUID = 1598422350749055247L;
+
     @Id
     @GeneratedValue
     private Integer id;
@@ -41,4 +36,5 @@
     public void setId(final Integer id) {
         this.id = id;
     }
+
 }

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/TimelineEvent.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,12 +1,13 @@
 package com.tyndalehouse.step.core.data.entities;
 
 import java.io.Serializable;
+import java.util.List;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
 import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
 
 import org.joda.time.LocalDateTime;
 
@@ -20,7 +21,6 @@
  */
 @CacheStrategy(readOnly = true)
 @Entity
- at DiscriminatorValue("1")
 public class TimelineEvent extends ScriptureTarget implements Serializable {
     private static final long serialVersionUID = -4642904574412249515L;
 
@@ -42,6 +42,9 @@
     @ManyToOne(cascade = CascadeType.ALL)
     private HotSpot hotSpot;
 
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "timelineEvent")
+    private List<ScriptureReference> references;
+
     /**
      * @return the summary
      */
@@ -127,25 +130,17 @@
     }
 
     /**
-     * to get rid of a findbugs bug, we override to make clear we are using the parent's equal method
-     * 
-     * @param obj the object that we are comparing
-     * @return true if objects are equals
+     * @return the references
      */
-    @SuppressWarnings("PMD.UselessOverridingMethod")
-    @Override
-    public boolean equals(final Object obj) {
-        return super.equals(obj);
+    public List<ScriptureReference> getReferences() {
+        return this.references;
     }
 
     /**
-     * overriding the hashcode because we've override the equals
-     * 
-     * @return the parent's hashcode
+     * @param references the references to set
      */
-    @SuppressWarnings("PMD.UselessOverridingMethod")
-    @Override
-    public int hashCode() {
-        return super.hashCode();
+    public void setReferences(final List<ScriptureReference> references) {
+        this.references = references;
     }
+
 }

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/data/entities/reference/TargetType.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -9,4 +9,7 @@
 public enum TargetType {
     /** a timeline event */
     TIMELINE_EVENT,
+
+    /** a geo place **/
+    GEO_PLACE,
 }

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/StepCoreModule.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -27,12 +27,14 @@
 import com.tyndalehouse.step.core.guice.providers.TestData;
 import com.tyndalehouse.step.core.service.BibleInformationService;
 import com.tyndalehouse.step.core.service.FavouritesService;
+import com.tyndalehouse.step.core.service.GeographyService;
 import com.tyndalehouse.step.core.service.JSwordService;
 import com.tyndalehouse.step.core.service.ModuleService;
 import com.tyndalehouse.step.core.service.TimelineService;
 import com.tyndalehouse.step.core.service.UserDataService;
 import com.tyndalehouse.step.core.service.impl.BibleInformationServiceImpl;
 import com.tyndalehouse.step.core.service.impl.FavouritesServiceImpl;
+import com.tyndalehouse.step.core.service.impl.GeographyServiceImpl;
 import com.tyndalehouse.step.core.service.impl.JSwordServiceImpl;
 import com.tyndalehouse.step.core.service.impl.ModuleServiceImpl;
 import com.tyndalehouse.step.core.service.impl.TimelineServiceImpl;
@@ -60,6 +62,7 @@
         bind(BibleInformationService.class).to(BibleInformationServiceImpl.class).asEagerSingleton();
         bind(ModuleService.class).to(ModuleServiceImpl.class).asEagerSingleton();
         bind(TimelineService.class).to(TimelineServiceImpl.class);
+        bind(GeographyService.class).to(GeographyServiceImpl.class);
         bind(FavouritesService.class).to(FavouritesServiceImpl.class);
         bind(UserDataService.class).to(UserDataServiceImpl.class);
         bind(Loader.class);

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/guice/providers/DatabaseConfigProvider.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -9,6 +9,7 @@
 import com.google.inject.Provider;
 import com.google.inject.name.Named;
 import com.tyndalehouse.step.core.data.entities.Bookmark;
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
 import com.tyndalehouse.step.core.data.entities.History;
 import com.tyndalehouse.step.core.data.entities.HotSpot;
 import com.tyndalehouse.step.core.data.entities.ScriptureReference;
@@ -111,15 +112,17 @@
      */
     private void addEntities(final ServerConfig config) {
         // timeline entities
+        config.addClass(ScriptureTarget.class);
+        config.addClass(ScriptureReference.class);
         config.addClass(HotSpot.class);
         config.addClass(Timeband.class);
         config.addClass(TimelineEvent.class);
-        config.addClass(ScriptureTarget.class);
-        config.addClass(ScriptureReference.class);
         config.addClass(User.class);
         config.addClass(Session.class);
         config.addClass(Bookmark.class);
         config.addClass(History.class);
+        config.addClass(GeoPlace.class);
+
     }
 
 }

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/GeographyService.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/GeographyService.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/GeographyService.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,21 @@
+package com.tyndalehouse.step.core.service;
+
+import java.util.List;
+
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
+
+/**
+ * Access to the geography module
+ * 
+ * @author cjburrell
+ * 
+ */
+public interface GeographyService {
+    /**
+     * returns all places that are within a passage reference
+     * 
+     * @param reference the biblical reference
+     * @return the list of places (lat/long/precisions)
+     */
+    List<GeoPlace> getPlaces(String reference);
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/GeographyService.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/JSwordService.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/JSwordService.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/JSwordService.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -5,6 +5,7 @@
 import org.crosswire.jsword.book.Book;
 import org.crosswire.jsword.book.BookCategory;
 
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
 import com.tyndalehouse.step.core.models.LookupOption;
 
 /**
@@ -81,4 +82,11 @@
      */
     List<Book> getAllModules(BookCategory... bookCategory);
 
+    /**
+     * 
+     * @param references a list of references
+     * @param target id of the event
+     * @return the list of references strongly-typed
+     */
+    List<ScriptureReference> getPassageReferences(final String references);
 }

Added: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImpl.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImpl.java	                        (rev 0)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImpl.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,55 @@
+package com.tyndalehouse.step.core.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.avaje.ebean.EbeanServer;
+import com.google.inject.Inject;
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.service.GeographyService;
+import com.tyndalehouse.step.core.service.JSwordService;
+
+/**
+ * Returns geography data
+ * 
+ * @author cjburrell
+ * 
+ */
+public class GeographyServiceImpl implements GeographyService {
+    private static final Logger LOG = LoggerFactory.getLogger(GeographyServiceImpl.class);
+    private final EbeanServer ebean;
+    private final JSwordService jsword;
+
+    /**
+     * creates a new Geography service implementation
+     * 
+     * @param ebean ebean server
+     * @param jsword the jsword service for access to Crosswire functionality
+     */
+    @Inject
+    public GeographyServiceImpl(final EbeanServer ebean, final JSwordService jsword) {
+        this.ebean = ebean;
+        this.jsword = jsword;
+    }
+
+    @Override
+    public List<GeoPlace> getPlaces(final String reference) {
+        LOG.debug("Returning places for reference [{}]", reference);
+        final List<ScriptureReference> passageReferences = this.jsword.getPassageReferences(reference);
+        final List<GeoPlace> placesInScope = new ArrayList<GeoPlace>();
+
+        final String rawQuery = "t0.id in (select geo_place_id from scripture_reference "
+                + "where start_verse_id <= %s and end_verse_id >= %s and geo_place_id is not null)";
+
+        for (final ScriptureReference sr : passageReferences) {
+            placesInScope.addAll(this.ebean.find(GeoPlace.class).where().raw(
+                    String.format(rawQuery, sr.getEndVerseId(), sr.getStartVerseId())).findList());
+        }
+
+        return placesInScope;
+    }
+}


Property changes on: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImpl.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/JSwordServiceImpl.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/JSwordServiceImpl.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/service/impl/JSwordServiceImpl.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,5 +1,6 @@
 package com.tyndalehouse.step.core.service.impl;
 
+import static java.lang.Integer.valueOf;
 import static org.apache.commons.lang.StringUtils.isBlank;
 import static org.apache.commons.lang.StringUtils.isNotBlank;
 import static org.apache.commons.lang.StringUtils.isNotEmpty;
@@ -29,13 +30,22 @@
 import org.crosswire.jsword.book.FeatureType;
 import org.crosswire.jsword.book.install.InstallException;
 import org.crosswire.jsword.book.install.Installer;
+import org.crosswire.jsword.passage.KeyFactory;
 import org.crosswire.jsword.passage.NoSuchKeyException;
+import org.crosswire.jsword.passage.NoSuchVerseException;
+import org.crosswire.jsword.passage.PassageKeyFactory;
+import org.crosswire.jsword.passage.RestrictionType;
+import org.crosswire.jsword.passage.RocketPassage;
+import org.crosswire.jsword.passage.Verse;
+import org.crosswire.jsword.passage.VerseRange;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.xml.sax.SAXException;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+import com.tyndalehouse.step.core.data.entities.reference.TargetType;
 import com.tyndalehouse.step.core.exceptions.StepInternalException;
 import com.tyndalehouse.step.core.models.LookupOption;
 import com.tyndalehouse.step.core.service.JSwordService;
@@ -327,4 +337,40 @@
                 "An unknown error has occurred: the job has disappeared of the job list, "
                         + "but the module is not installed");
     }
+
+    @Override
+    public List<ScriptureReference> getPassageReferences(final String references) {
+        final List<ScriptureReference> refs = new ArrayList<ScriptureReference>();
+
+        if (isNotBlank(references)) {
+            LOGGER.trace("Resolving references for [{}]", references);
+            try {
+                final KeyFactory keyFactory = PassageKeyFactory.instance();
+                final RocketPassage rp = (RocketPassage) keyFactory.getKey(references);
+                for (int ii = 0; ii < rp.countRanges(RestrictionType.NONE); ii++) {
+                    final VerseRange vr = rp.getRangeAt(ii, RestrictionType.NONE);
+                    final Verse start = vr.getStart();
+                    final Verse end = vr.getEnd();
+
+                    final int startVerseId = start.getOrdinal();
+                    final int endVerseId = end.getOrdinal();
+
+                    LOGGER.trace("Found reference [{}] to [{}]", valueOf(startVerseId), valueOf(endVerseId));
+                    final ScriptureReference sr = new ScriptureReference();
+
+                    // TODO ensure scripture references are linked to targets...
+                    // sr.setTarget(target);
+                    sr.setStartVerseId(startVerseId);
+                    sr.setEndVerseId(endVerseId);
+                    sr.setTargetType(TargetType.TIMELINE_EVENT);
+                    refs.add(sr);
+                }
+            } catch (final NoSuchVerseException nsve) {
+                throw new StepInternalException(nsve.getMessage(), nsve);
+            } catch (final NoSuchKeyException e) {
+                throw new StepInternalException(e.getMessage(), e);
+            }
+        }
+        return refs;
+    }
 }

Deleted: trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java
===================================================================
--- trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/java/com/tyndalehouse/step/core/utils/PassageReferenceUtils.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,83 +0,0 @@
-package com.tyndalehouse.step.core.utils;
-
-import static java.lang.Integer.valueOf;
-import static org.apache.commons.lang.StringUtils.isNotBlank;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.crosswire.jsword.passage.KeyFactory;
-import org.crosswire.jsword.passage.NoSuchKeyException;
-import org.crosswire.jsword.passage.NoSuchVerseException;
-import org.crosswire.jsword.passage.PassageKeyFactory;
-import org.crosswire.jsword.passage.RestrictionType;
-import org.crosswire.jsword.passage.RocketPassage;
-import org.crosswire.jsword.passage.Verse;
-import org.crosswire.jsword.passage.VerseRange;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.tyndalehouse.step.core.data.entities.ScriptureReference;
-import com.tyndalehouse.step.core.data.entities.ScriptureTarget;
-import com.tyndalehouse.step.core.data.entities.reference.TargetType;
-import com.tyndalehouse.step.core.exceptions.StepInternalException;
-
-/**
- * A helper class to deal with passage references
- * 
- * @author Chris
- * 
- * 
- */
-public final class PassageReferenceUtils {
-    private static final Logger LOG = LoggerFactory.getLogger(PassageReferenceUtils.class);
-
-    /** prevent initialisation */
-    private PassageReferenceUtils() {
-        // no implementation
-    }
-
-    /**
-     * 
-     * @param references a list of references
-     * @param target id of the event
-     * @return the list of references strongly-typed
-     */
-    public static List<ScriptureReference> getPassageReferences(final ScriptureTarget target,
-            final String references) {
-        final List<ScriptureReference> refs = new ArrayList<ScriptureReference>();
-
-        if (isNotBlank(references)) {
-            LOG.debug("Resolving references for [{}]", references);
-            try {
-                final KeyFactory keyFactory = PassageKeyFactory.instance();
-                final RocketPassage rp = (RocketPassage) keyFactory.getKey(references);
-                for (int ii = 0; ii < rp.countRanges(RestrictionType.NONE); ii++) {
-                    final VerseRange vr = rp.getRangeAt(ii, RestrictionType.NONE);
-                    final Verse start = vr.getStart();
-                    final Verse end = vr.getEnd();
-
-                    final int startVerseId = start.getOrdinal();
-                    final int endVerseId = end.getOrdinal();
-
-                    LOG.trace("Found reference [{}] to [{}]", valueOf(startVerseId), valueOf(endVerseId));
-                    final ScriptureReference sr = new ScriptureReference();
-
-                    // TODO: fix the broken references in csv files
-                    sr.setTarget(target);
-
-                    sr.setStartVerseId(startVerseId);
-                    sr.setEndVerseId(endVerseId);
-                    sr.setTargetType(TargetType.TIMELINE_EVENT);
-                    refs.add(sr);
-                }
-            } catch (final NoSuchVerseException nsve) {
-                // Nehemiah 6.20 might not exist for example...
-                LOG.error("Scripture reference does not exist", nsve);
-            } catch (final NoSuchKeyException e) {
-                throw new StepInternalException(e.getMessage(), e);
-            }
-        }
-        return refs;
-    }
-}

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/openbible.tab
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/openbible.tab	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/openbible.tab	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,914 @@
+ESV	Root	Lat	Lon	Verses	Comment
+Ekron		31.77761410537458	34.85214575880509	Josh 13:3, Josh 15:11, Josh 15:45, Josh 15:46, Josh 19:43, Judg 1:18, 1 Sam 5:10, 1 Sam 6:16, 1 Sam 6:17, 1 Sam 7:14, 1 Sam 17:52, 2 Kgs 1:2, 2 Kgs 1:3, 2 Kgs 1:6, 2 Kgs 1:16, Jer 25:20, Amos 1:8, Zeph 2:4, Zech 9:5, Zech 9:7	
+Elam	Susa	>32.18919123705116	>48.25788647687722	Gen 14:1, Gen 14:9, Isa 11:11, Isa 21:2, Isa 22:6, Jer 25:25, Jer 49:34, Jer 49:35, Jer 49:36, Jer 49:37, Jer 49:38, Jer 49:39, Ezek 32:24, Dan 8:2	region
+Elath		29.528502	35.005732	Deut 2:8, 2 Kgs 14:22, 2 Kgs 16:6	
+El-bethel	Bethel 1	<31.93053920580005	<35.22103274923676	Gen 35:7	
+Elealeh		31.813796	35.824275	Num 32:3, Num 32:37, Isa 15:4, Isa 16:9, Jer 48:34	
+Elim		29.306194	32.980924	Ex 15:27, Ex 16:1, Num 33:9, Num 33:10	~
+Elishah	Cyprus	35.018306	33.207693	Ezek 27:7	
+Elkosh		?		Nahum 1:1	
+Ellasar		>37.056944	>40.997222	Gen 14:1, Gen 14:9	region; http://en.wikipedia.org/wiki/Urkesh
+Elon		31.973818	35.116531	Josh 19:43	
+Elonbeth-hanan		31.852593	35.109078	1 Kgs 4:9	
+Eloth	Elath	29.528502	35.005732	1 Kgs 9:26, 2 Chr 8:17, 2 Chr 26:2	
+El-paran	Paran	~29.151667	~33.541944	Gen 14:6	
+Elteke	Eltekeh	31.869521	35.066880	Josh 21:23	
+Eltekeh		31.869521	35.066880	Josh 19:44	
+Eltekon		31.660570	34.995406	Josh 15:59	from tyndale
+Eltolad	Baalath-beer	~32.049953	~35.733402	Josh 15:30, Josh 19:4	
+Emek-keziz	Beth-hoglah	~31.837062	~35.513151	Josh 18:21	
+Emmaus		31.83945022372554	34.9895293285359	Luke 24:13	
+Enaim	Timnah 1	~31.784368	~34.909680	Gen 38:14, Gen 38:21	
+Enam		~32.15	~35.1260	Josh 15:34	
+En-dor		32.62570020915744	35.38566744418715	Josh 17:11, 1 Sam 28:7, Ps 83:10	
+Eneglaim		~30.998062	~35.498547	Ezek 47:10	
+En-gannim 1		31.750000	34.950106	Josh 15:34	~
+En-gannim 2		32.46349905885267	35.3036831926058	Josh 19:21, Josh 21:29	
+Engedi		31.46152536164766	35.39241108242345	Josh 15:62, 1 Sam 23:29, 1 Sam 24:1, 2 Chr 20:2, Sng 1:14, Ezek 47:10	
+En-haddah		32.478425	35.254452	Josh 19:21	
+En-hakkore	Beth-shemesh 1	~31.75274835811488	~34.97660913147738	Judg 15:19	
+En-hazor		33.100000	35.350000	Josh 19:37	~
+En-mishpat	Kadesh-barnea	30.68771281376111	34.49479554246946	Gen 14:7	
+En-rimmon	Ain 2	31.370835	34.860665	Neh 11:29	
+En-rogel		31.767775	35.234408	Josh 15:7, Josh 18:16, 2 Sam 17:17, 1 Kgs 1:9	
+En-shemesh		31.774020	35.270231	Josh 15:7, Josh 18:17	
+En-tappuah	Tappuah 1	32.11666666666667	35.23333333333333	Josh 17:7	
+Ephah	Midian	~>28.932881	~>34.90832	Isa 60:6	
+Ephes-dammim		31.691186	34.944496	1 Sam 17:1	
+Ephesus		37.95331433666365	27.36782511573013	Acts 18:19, Acts 18:21, Acts 18:24, Acts 19:1, Acts 19:17, Acts 19:26, Acts 19:35, Acts 20:16, Acts 20:17, 1 Cor 15:32, 1 Cor 16:8, Eph 1:1, 1 Tim 1:3, 2 Tim 1:18, 2 Tim 4:12, Rev 1:11, Rev 2:1	
+Ephraim	Ophrah 1	31.95378955858199	35.29913577541004	John 11:54	
+Ephraim Gate	Jerusalem	<31.777444	<35.234935	2 Kgs 14:13, 2 Chr 25:23	
+Ephrath	Bethlehem 1	31.70536129174666	35.21026630105202	Gen 35:16, Gen 35:19, Gen 48:7	
+Ephrathah	Bethlehem 1	31.70536129174666	35.21026630105202	Ruth 4:11, Ps 132:6	
+Ephron 1	Mount Ephron	~31.675746	~35.042407	Josh 18:15	
+Ephron 2	Ophrah 1	31.95378955858199	35.29913577541004	2 Chr 13:19	
+Erech		32.322222	45.636111	Gen 10:10, Ezra 4:9	now Uruk
+Esau	Bozrah 1	>30.734691	>35.606250	Gen 36:40, Jer 49:10, Obad 1:6, Obad 1:18	
+Esek	Gerar	~31.39129109635703	~34.56057015639144	Gen 26:20	
+Eshan		31.420175	35.033537	Josh 15:52	
+Eshtaol		31.782429	35.009012	Josh 15:33, Josh 19:41, Judg 13:25, Judg 16:31, Judg 18:2, Judg 18:8, Judg 18:11	
+Eshtemoa	Anim	31.373521	35.074552	Josh 21:14, 1 Sam 30:28, 1 Chr 6:57	
+Eshtemoh	Anim	31.373521	35.074552	Josh 15:50	
+Etam 1		31.736294	35.054850	Judg 15:8, Judg 15:11	http://www.tiuli.com/english/Judean_Mountains/Judean_Mountains.asp
+Etam 2	Ain 2	~31.370835	~34.860665	1 Chr 4:32	
+Etam 3		31.686465	35.174740	2 Chr 11:6	now Khirbet el Khokh; palestine-family.net/index.php?nav=8-18&cid=17&did=193
+Etham		30.467511	32.282767	Ex 13:20, Num 33:6, Num 33:7, Num 33:8	~
+Ether	Ashnah	~31.8099	~34.9365	Josh 15:42, Josh 19:7	
+Ethiopia		>21.959788	>31.343557	Est 1:1, Est 8:9, Job 28:19	region
+Eth-kazin	Dimnah	~32.781808	~35.321364	Josh 19:13	
+Euphrates		35.090577	40.427780	Gen 2:14, Gen 15:18, Gen 31:21, Gen 36:37, Ex 23:31, Deut 1:7, Deut 11:24, Josh 1:4, Josh 24:2, 2 Sam 8:3, 2 Sam 10:16, 1 Kgs 4:21, 1 Kgs 4:24, 1 Kgs 14:15, 2 Kgs 23:29, 2 Kgs 24:7, 1 Chr 1:48, 1 Chr 5:9, 1 Chr 18:3, 1 Chr 19:16, 2 Chr 9:26, 2 Chr 35:20, Isa 27:12, Jer 2:18, Jer 13:4, Jer 13:5, Jer 13:6, Jer 13:7, Jer 46:2, Jer 46:6, Jer 46:10, Jer 51:63, Rev 9:14, Rev 16:12	river
+Ezem	Baalath-beer	~32.049953	~35.733402	Josh 15:29, Josh 19:3, 1 Chr 4:29	
+Ezion-geber		29.75804307645581	35.0306017443078	Num 33:35, Num 33:36, Deut 2:8, 1 Kgs 9:26, 1 Kgs 22:48, 2 Chr 8:17, 2 Chr 20:36	
+Fair Havens		34.92138418681769	24.73114125973342	Acts 27:8	
+Field of Blood	Jerusalem	~31.777444	~35.234935	Matt 27:8, Acts 1:19	
+Fish Gate	Jerusalem	<31.777444	<35.234935	2 Chr 33:14, Neh 3:3, Neh 12:39, Zeph 1:10	
+Forum of Appius		41.468706	12.993929	Acts 28:15	http://gnswww.nga.mil/geonames/Gazetteer/Search/Results.jsp?Feature__Unique_Feature_ID=-117178&Diacritics=Yes&reload=1
+Fountain Gate	Jerusalem	<31.777444	<35.234935	Neh 2:14, Neh 3:15, Neh 12:37	
+Gaash	Timnath-heres	~32.121473	~35.150392	Josh 24:30, Judg 2:9, 2 Sam 23:30, 1 Chr 11:32	
+Gabbatha	Jerusalem	~31.777444	~35.234935	John 19:13	
+Galatia	Lystra	>37.57813498250009	>32.45318282875567	Acts 16:6, Acts 18:23, 1 Cor 16:1, Gal 1:2, 2 Tim 4:10, 1 Pet 1:1	
+Galeed	Ramoth-gilead	32.56526757366849	36.00555930879645	Gen 31:47, Gen 31:48	
+Galilee	Nazareth	>32.70674542474383	>35.30152807767973	Josh 12:23, Josh 20:7, Josh 21:32, 1 Kgs 9:11, 2 Kgs 15:29, 1 Chr 6:76, Isa 9:1, Matt 2:22, Matt 3:13, Matt 4:12, Matt 4:15, Matt 4:23, Matt 4:25, Matt 17:22, Matt 19:1, Matt 21:11, Matt 26:32, Matt 27:55, Matt 28:7, Matt 28:10, Matt 28:16, Mark 1:9, Mark 1:14, Mark 1:28, Mark 1:39, Mark 3:7, Mark 6:21, Mark 9:30, Mark 14:28, Mark 15:41, Mark 16:7, Luke 1:26, Luke 2:4, Luke 2:39, Luke 3:1, Luke 4:14, Luke 4:31, Luke 5:17, Luke 8:26, Luke 17:11, Luke 23:5, Luke 23:49, Luke 23:55, Luke 24:6, John 1:43, John 2:1, John 2:11, John 4:3, John 4:43, John 4:45, John 4:46, John 4:47, John 4:54, John 7:1, John 7:9, John 7:41, John 7:52, John 12:21, John 21:2, Acts 1:11, Acts 9:31, Acts 10:37, Acts 13:31	region
+Gallim		31.816667	35.250000	1 Sam 25:44, Isa 10:30	~; from tyndale
+Gamad	Arvad	~34.856082	~35.858485	Ezek 27:11	
+Gareb	Jerusalem	<31.777444	<35.234935	Jer 31:39	
+Gate of Benjamin	Jerusalem	<31.777444	<35.234935	Zech 14:10	
+Gate of Ephraim	Jerusalem	<31.777444	<35.234935	Neh 8:16, Neh 12:39	
+Gate of Yeshanah	Jerusalem	<31.777444	<35.234935	Neh 3:6, Neh 12:39	
+Gate of the Foundation	Jerusalem	<31.777444	<35.234935	2 Chr 23:5	
+Gate of the Guard	Jerusalem	<31.777444	<35.234935	Neh 12:39	
+Gath		31.69352950368834	34.84388288576839	Josh 11:22, Josh 13:3, 1 Sam 5:8, 1 Sam 6:17, 1 Sam 7:14, 1 Sam 17:4, 1 Sam 17:23, 1 Sam 17:52, 1 Sam 21:10, 1 Sam 21:12, 1 Sam 27:2, 1 Sam 27:3, 1 Sam 27:4, 1 Sam 27:11, 2 Sam 1:20, 2 Sam 15:18, 2 Sam 21:20, 2 Sam 21:22, 1 Kgs 2:39, 1 Kgs 2:40, 1 Kgs 2:41, 2 Kgs 12:17, 1 Chr 7:21, 1 Chr 8:13, 1 Chr 18:1, 1 Chr 20:6, 1 Chr 20:8, 2 Chr 11:8, 2 Chr 26:6, Ps 56:1, Amos 6:2, Mic 1:10	
+Gath-hepher		32.73918470119603	35.32822661816711	Josh 19:13, 2 Kgs 14:25	
+Gath-rimmon 1		32.06972222222223	34.88305555555556	Josh 19:45, Josh 21:24, 1 Chr 6:69	
+Gath-rimmon 2	Ibleam	32.45	35.2833	Josh 21:25	
+Gaza		31.52481769532773	34.4333647185274	Gen 10:19, Deut 2:23, Josh 10:41, Josh 11:22, Josh 13:3, Josh 15:47, Judg 1:18, Judg 6:4, Judg 16:1, Judg 16:21, 1 Sam 6:17, 1 Kgs 4:24, 2 Kgs 18:8, Jer 25:20, Jer 47:1, Jer 47:5, Amos 1:6, Amos 1:7, Zeph 2:4, Zech 9:5, Acts 8:26	
+Geba 1		31.85787804122625	35.25975521608824	Josh 18:24, Josh 21:17, 1 Sam 13:3, 1 Sam 13:16, 1 Sam 14:5, 1 Kgs 15:22, 2 Kgs 23:8, 1 Chr 6:60, 1 Chr 8:6, 2 Chr 16:6, Ezra 2:26, Neh 7:30, Neh 11:31, Neh 12:29, Isa 10:29, Zech 14:10	
+Geba 2	Gibeon	31.84684772753698	35.18491237777512	2 Sam 5:25	
+Gebal		34.11910360710159	35.6461419556213	1 Kgs 5:18, Ps 83:7, Ezek 27:9	
+Gebim		31.800000	35.250000	Isa 10:31	~
+Geder	Gedor 1	31.633330	35.083333	Josh 12:13	
+Gederah		31.823337	34.777779	Josh 15:36, 1 Chr 4:23, 1 Chr 12:4	
+Gederoth	Gederah	~31.823337	~34.777779	Josh 15:41, 2 Chr 28:18	
+Gederothaim	Gederah	~31.823337	~34.777779	Josh 15:36	
+Gedor 1		31.633330	35.083333	Josh 15:58, 1 Chr 12:7	
+Gedor 2	Gederah	~31.823337	~34.777779	1 Chr 4:39	
+Geliloth	Gilgal 1	31.86378328132916	35.51854651224448	Josh 18:17	
+Gennesaret		32.85935860372527	35.50993742021974	Matt 14:34, Mark 6:53, Luke 5:1	
+Gerar		31.39129109635703	34.56057015639144	Gen 10:19, Gen 20:1, Gen 20:2, Gen 26:1, Gen 26:6, Gen 26:20, Gen 26:26, 2 Chr 14:13, 2 Chr 14:14	
+Geruth Chimham	Bethlehem 1	~31.70536129174666	~35.21026630105202	Jer 41:17	
+Geshur		33.000000	36.416670	Josh 13:13, 2 Sam 3:3, 2 Sam 13:37, 2 Sam 13:38, 2 Sam 14:23, 2 Sam 14:32, 2 Sam 15:8, 1 Chr 2:23, 1 Chr 3:2	~; now Leja
+Gethsemane	Jerusalem	~31.777444	~35.234935	Matt 26:36, Mark 14:32	
+Gezer		31.87611111111111	34.9225	Josh 10:33, Josh 12:12, Josh 16:3, Josh 16:10, Josh 21:21, Judg 1:29, 2 Sam 5:25, 1 Kgs 9:15, 1 Kgs 9:16, 1 Kgs 9:17, 1 Chr 6:67, 1 Chr 7:28, 1 Chr 14:16, 1 Chr 20:4	
+Giah	Ammah	~31.869005	~35.343177	2 Sam 2:24	
+Gibbethon		31.976623	35.004896	Josh 19:44, Josh 21:23, 1 Kgs 15:27, 1 Kgs 16:15, 1 Kgs 16:17	now Qibya
+Gibeah 1		31.82378102460309	35.23100936128631	Josh 18:28, Josh 24:33, Judg 19:12, Judg 19:13, Judg 19:14, Judg 19:15, Judg 19:16, Judg 20:4, Judg 20:5, Judg 20:9, Judg 20:10, Judg 20:13, Judg 20:14, Judg 20:15, Judg 20:19, Judg 20:20, Judg 20:21, Judg 20:25, Judg 20:29, Judg 20:30, Judg 20:31, Judg 20:34, Judg 20:36, Judg 20:37, Judg 20:43, 1 Sam 10:10, 1 Sam 10:26, 1 Sam 11:4, 1 Sam 13:2, 1 Sam 13:15, 1 Sam 14:2, 1 Sam 14:16, 1 Sam 15:34, 1 Sam 22:6, 1 Sam 23:19, 1 Sam 26:1, 2 Sam 21:6, 2 Sam 23:29, 1 Chr 11:31, 1 Chr 12:3, Isa 10:29, Hos 5:8, Hos 9:9, Hos 10:9	
+Gibeah 2	Carmel	~31.43333151674604	~35.13333188530802	Josh 15:57, 2 Chr 13:2	
+Gibeath-elohim	Bethel 1	~31.93053920580005	~35.22103274923676	1 Sam 10:5	
+Gibeath-haaraloth	Gilgal 1	31.86378328132916	35.51854651224448	Josh 5:3	
+Gibeon		31.84684772753698	35.18491237777512	Josh 9:3, Josh 9:17, Josh 10:1, Josh 10:2, Josh 10:4, Josh 10:5, Josh 10:6, Josh 10:10, Josh 10:12, Josh 10:41, Josh 11:19, Josh 18:25, Josh 21:17, 2 Sam 2:12, 2 Sam 2:13, 2 Sam 2:16, 2 Sam 2:24, 2 Sam 3:30, 2 Sam 20:8, 1 Kgs 3:4, 1 Kgs 3:5, 1 Kgs 9:2, 1 Chr 6:60, 1 Chr 8:29, 1 Chr 9:35, 1 Chr 12:4, 1 Chr 14:16, 1 Chr 16:39, 1 Chr 21:29, 2 Chr 1:3, 2 Chr 1:13, Neh 3:7, Neh 7:25, Jer 28:1, Jer 41:12, Jer 41:16	
+Gidom	Rimmon 1	~31.934660	~35.297063	Judg 20:45	
+Gihon 1		?	?	Gen 2:13	
+Gihon 2		31.773116	35.237186	1 Kgs 1:33, 1 Kgs 1:38, 1 Kgs 1:45, 2 Chr 32:30, 2 Chr 33:14	
+Gilboa		32.516667	35.400000	1 Sam 28:4, 2 Sam 1:21, 2 Sam 21:12	
+Gilead		>32.042523	>35.724241	Gen 31:21, Gen 31:23, Gen 31:25, Gen 37:25, Num 32:1, Num 32:26, Num 32:29, Num 32:39, Num 32:40, Deut 2:36, Deut 3:10, Deut 3:12, Deut 3:13, Deut 3:15, Deut 3:16, Deut 4:43, Deut 34:1, Josh 12:2, Josh 12:5, Josh 13:11, Josh 13:25, Josh 13:31, Josh 17:1, Josh 17:5, Josh 17:6, Josh 20:8, Josh 21:38, Josh 22:9, Josh 22:13, Josh 22:15, Josh 22:32, Judg 5:17, Judg 10:4, Judg 10:8, Judg 10:17, Judg 10:18, Judg 11:5, Judg 11:7, Judg 11:8, Judg 11:9, Judg 11:10, Judg 11:11, Judg 11:29, Judg 12:4, Judg 12:5, Judg 12:7, Judg 20:1, 1 Sam 13:7, 2 Sam 2:9, 2 Sam 17:26, 2 Sam 24:6, 1 Kgs 4:13, 1 Kgs 4:19, 1 Kgs 17:1, 2 Kgs 10:33, 2 Kgs 15:25, 2 Kgs 15:29, 1 Chr 2:22, 1 Chr 5:9, 1 Chr 5:10, 1 Chr 5:16, 1 Chr 6:80, 1 Chr 26:31, 1 Chr 27:21, Ps 60:7, Ps 108:8, Sng 4:1, Sng 6:5, Jer 8:22, Jer 22:6, Jer 46:11, Jer 50:19, Ezek 47:18, Hos 6:8, Hos 12:11, Amos 1:3, Amos 1:13, Obad 1:19, Mic 7:14, Zech 10:10	region
+Gilgal 1		31.86378328132916	35.51854651224448	Deut 11:30, Josh 4:19, Josh 4:20, Josh 5:9, Josh 5:10, Josh 9:6, Josh 10:6, Josh 10:7, Josh 10:9, Josh 10:15, Josh 10:43, Josh 14:6, Josh 15:7, Judg 2:1, Judg 3:19, 1 Sam 7:16, 1 Sam 10:8, 1 Sam 11:14, 1 Sam 11:15, 1 Sam 13:4, 1 Sam 13:7, 1 Sam 13:8, 1 Sam 13:12, 1 Sam 13:15, 1 Sam 15:12, 1 Sam 15:21, 1 Sam 15:33, 2 Sam 19:15, 2 Sam 19:40, Hos 4:15, Hos 9:15, Hos 12:11, Amos 4:4, Amos 5:5, Mic 6:5	
+Gilgal 2		32.029737	35.222604	2 Kgs 2:1, 2 Kgs 4:38	
+Gilo	Giloh	31.616667	35.083333	2 Sam 23:34	
+Giloh		31.616667	35.083333	Josh 15:51, 2 Sam 15:12	~
+Gimzo		31.928659	34.943219	2 Chr 28:18	
+Gittaim	Hadid	~31.963575	~34.952536	2 Sam 4:3, Neh 11:33	
+Goah	Jerusalem	<31.777444	<35.234935	Jer 31:39	
+Gob	Gezer	31.87611111111111	34.9225	2 Sam 21:18, 2 Sam 21:19	
+Gog		>46	>47	Rev 20:8	region
+Goiim		?	?	Gen 14:1, Gen 14:9, Josh 12:23	
+Golan		32.80007552505443	35.93730130476259	Deut 4:43, Josh 20:8, Josh 21:27, 1 Chr 6:71	
+Golgotha	Jerusalem	<31.777444	<35.234935	Matt 27:33, Mark 15:22, John 19:17	
+Gomer		?		Ezek 38:6	
+Gomorrah		31.15724866533878	35.4739543300078	Gen 10:19, Gen 13:10, Gen 14:2, Gen 14:8, Gen 14:10, Gen 14:11, Gen 18:20, Gen 19:24, Gen 19:28, Deut 29:23, Deut 32:32, Isa 1:9, Isa 1:10, Isa 13:19, Jer 23:14, Jer 49:18, Jer 50:40, Amos 4:11, Zeph 2:9, Matt 10:15, Rom 9:29, 2 Pet 2:6, Jude 1:7	
+Goshen 1		30.72850163814402	31.80469223616506	Gen 45:10, Gen 46:28, Gen 46:29, Gen 46:34, Gen 47:1, Gen 47:4, Gen 47:6, Gen 47:27, Gen 50:8, Ex 8:22, Ex 9:26	
+Goshen 2		31.450000	34.916667	Josh 10:41, Josh 11:16, Josh 15:51	~; from harper
+Gozan		36.840013	40.068890	2 Kgs 17:6, 2 Kgs 18:11, 2 Kgs 19:12, 1 Chr 5:26, Isa 37:12	from harper
+Great Sea		>33.24	>33.47	Num 34:6, Num 34:7, Josh 1:4, Josh 9:1, Josh 15:12, Josh 15:47, Josh 23:4, Ezek 47:10, Ezek 47:15, Ezek 47:19, Ezek 47:20, Ezek 48:28	sea
+Great Sidon	Sidon	33.56316734135746	35.36634649354799	Josh 11:8	
+Greece	Athens	>37.98333333333333	>23.73333333333333	Dan 8:21, Dan 10:20, Dan 11:2, Zech 9:13, Acts 20:2	region
+Gudgodah	Hor-haggidgad	30.358285?	35.190270?	Deut 10:7	
+Gur	Ibleam	~32.45	~35.2833	2 Kgs 9:27	
+Gurbaal	Bozrah 1	~>30.734691	~>35.606250	2 Chr 26:7	
+Habor		36.344972	40.789333	2 Kgs 17:6, 2 Kgs 18:11, 1 Chr 5:26	river
+Hachilah		31.466604	35.216691	1 Sam 23:19, 1 Sam 26:1, 1 Sam 26:3	?; now Zahrat al Kula
+Hadad-rimmon		32.524106	35.205136	Zech 12:11	now Rommanah
+Hadashah		31.679512	34.695903	Josh 15:37	now Ibdis
+Hadid		31.963575	34.952536	Ezra 2:33, Neh 7:37, Neh 11:34	
+Hadrach	Damascus	~33.519299	~36.31344999999999	Zech 9:1	
+Haeleph		31.792733	35.196862	Josh 18:28	now Lifta
+Hahiroth	Pi-hahiroth	29.94658?	32.425144?	Num 33:8	from tyndale
+Hakkephirim	Ono	32.02222222222223	34.86666666666667	Neh 6:2	
+Halah	Habor	~36.344972	~40.789333	2 Kgs 17:6, 2 Kgs 18:11, 1 Chr 5:26	
+Halhul		31.579549	35.099103	Josh 15:58	
+Hali	Beten	~32.934736	~35.270799	Josh 19:25	
+Hall of Judgment	Jerusalem	<31.777444	<35.234935	1 Kgs 7:7	
+Hall of Pillars	Jerusalem	<31.777444	<35.234935	1 Kgs 7:6	
+Hall of the Throne	Jerusalem	<31.777444	<35.234935	1 Kgs 7:7	
+Ham 1	Ammon	31.95018855468469	35.92413135872749	Gen 14:5	
+Ham 2	On	>30.108086	>31.338220	Ps 105:23, Ps 105:27, Ps 106:22	
+Hamath		35.136204	36.749488	2 Sam 8:9, 2 Kgs 14:28, 2 Kgs 17:24, 2 Kgs 17:30, 2 Kgs 18:34, 2 Kgs 19:13, 2 Kgs 23:33, 2 Kgs 25:21, 1 Chr 18:9, 2 Chr 8:4, Isa 10:9, Isa 11:11, Isa 36:19, Isa 37:13, Jer 39:5, Jer 49:23, Jer 52:9, Jer 52:27, Ezek 47:16, Ezek 47:17, Ezek 48:1, Amos 6:2, Zech 9:2	
+Hamath-zobah	Hamath	35.136204	36.749488	2 Chr 8:3	
+Hammath		33.125828	35.165000	Josh 19:35, 1 Chr 2:55	
+Hammon	Hammath	33.125828	35.165000	Josh 19:28, 1 Chr 6:76	
+Hammoth-dor	Hammath	33.125828	35.165000	Josh 21:32	
+Hamonah	Dibon 1	~31.49684513710609	~35.78284105296996	Ezek 39:16	
+Hanes		29.085425	30.934402	Isa 30:4	http://www.digitalegypt.ucl.ac.uk/ehnasya/index.html
+Hannathon		32.916002	35.426637	Josh 19:14	
+Hapharaim	Ophrah 2	32.60868269540592	35.28826433084549	Josh 19:19	?
+Hara	Habor	~36.344972	~40.789333	1 Chr 5:26	
+Haradah	Mount Hor 1	~30.317396	~35.407152	Num 33:24, Num 33:25	
+Haran		36.86386407659651	39.03219672227345	Gen 11:31, Gen 11:32, Gen 12:4, Gen 12:5, Gen 27:43, Gen 28:10, Gen 29:4, 2 Kgs 19:12, Isa 37:12, Ezek 27:23, Acts 7:2, Acts 7:4	
+Harmon	Samaria	~32.28023100000001	~35.19792900000002	Amos 4:3	
+Harod		32.549638	35.355647	Judg 7:1, 2 Sam 23:25, 1 Chr 11:27	now Ein Harod
+Harosheth-hagoyim		32.691177	35.110039	Judg 4:2, Judg 4:13, Judg 4:16	
+Hashmonah	Mount Hor 1	~30.317396	~35.407152	Num 33:29, Num 33:30	
+Hauran	Golan	>32.80007552505443	>35.93730130476259	Ezek 47:16, Ezek 47:18	region
+Havilah 1		?	?	Gen 2:11	
+Havilah 2		>30.14	>35.22	Gen 25:18, 1 Sam 15:7	
+Havvoth-jair	Gilead	~>32.042523	~>35.724241	Num 32:41, Deut 3:14, Judg 10:4, 1 Chr 2:23	
+Hazar-addar	Addar	~30.9522	~34.7187	Num 34:4	
+Hazar-enan		34.229499	37.240077	Num 34:9, Num 34:10, Ezek 47:17, Ezek 48:1	now Al Qaryatayn
+Hazar-gaddah	Moladah	~31.162327	~35.057114	Josh 15:27	
+Hazar-shual		31.215418	34.942986	Josh 15:28, Josh 19:3, 1 Chr 4:28, Neh 11:27	
+Hazar-susah	Madmannah	~31.391668	~34.940502	Josh 19:5	
+Hazar-susim	Madmannah	~31.391668	~34.940502	1 Chr 4:31	
+Hazazon-tamar	Engedi	31.46152536164766	35.39241108242345	Gen 14:7, 2 Chr 20:2	
+Hazer-hatticon	Hamath	~35.136204	~36.749488	Ezek 47:16	
+Hazeroth		28.916667	34.500000	Num 11:35, Num 12:16, Num 33:17, Num 33:18, Deut 1:1	~
+Hazor 1		33.01718199667929	35.56804856758258	Josh 11:1, Josh 11:10, Josh 11:11, Josh 11:13, Josh 12:19, Josh 19:36, Judg 4:2, Judg 4:17, 1 Sam 12:9, 1 Kgs 9:15, 2 Kgs 15:29	
+Hazor 2	Kadesh-barnea	~30.68771281376111	~34.49479554246946	Josh 15:23	
+Hazor 3	Moladah	~31.162327	~35.057114	Josh 15:25	
+Hazor 4		~31.833333	~35.20000	Neh 11:33	
+Hazor 5		?	?	Jer 49:28, Jer 49:30, Jer 49:33	
+Hazor-hadattah	Moladah	~31.162327	~35.057114	Josh 15:25	
+Hebron		31.53577362133176	35.09409986578734	Gen 13:18, Gen 23:2, Gen 23:19, Gen 35:27, Num 13:22, Josh 10:3, Josh 10:5, Josh 10:23, Josh 10:36, Josh 10:39, Josh 11:21, Josh 12:10, Josh 14:13, Josh 14:14, Josh 14:15, Josh 15:13, Josh 15:54, Josh 20:7, Josh 21:11, Josh 21:13, Judg 1:10, Judg 1:20, Judg 16:3, 1 Sam 30:31, 2 Sam 2:1, 2 Sam 2:3, 2 Sam 2:11, 2 Sam 2:32, 2 Sam 3:2, 2 Sam 3:5, 2 Sam 3:19, 2 Sam 3:20, 2 Sam 3:22, 2 Sam 3:27, 2 Sam 3:32, 2 Sam 4:1, 2 Sam 4:8, 2 Sam 4:12, 2 Sam 5:1, 2 Sam 5:3, 2 Sam 5:5, 2 Sam 5:13, 2 Sam 15:7, 2 Sam 15:9, 2 Sam 15:10, 1 Kgs 2:11, 1 Chr 3:1, 1 Chr 3:4, 1 Chr 6:55, 1 Chr 6:57, 1 Chr 11:1, 1 Chr 11:3, 1 Chr 12:23, 1 Chr 12:38, 1 Chr 29:27, 2 Chr 11:10	
+Helam	Peniel	~32.1843727808126	~35.70287002746794	2 Sam 10:16, 2 Sam 10:17	
+Helbah	Aphek 1	~34.066067	~35.865801	Judg 1:31	
+Helbon		33.664912	36.248576	Ezek 27:18	now Halbon
+Helech	Arvad	~34.856082	~35.858485	Ezek 27:11	
+Heleph		33.134416	35.332157	Josh 19:33	
+Heliopolis	On	30.108086	31.338220	Jer 43:13	
+Helkath		32.955448	35.211971	Josh 19:25, Josh 21:31	
+Helkath-hazzurim		31.880126	35.280188	2 Sam 2:16	
+Hena		34.467725	41.964955	2 Kgs 18:34, 2 Kgs 19:13, Isa 37:13	
+Hepher		32.3667	34.8833	Josh 12:17, 1 Kgs 4:10	
+Heres	Succoth 1	~32.19998298531073	~35.63331303389634	Judg 8:13	
+Hereth		31.621492	35.029273	1 Sam 22:5	
+Hermon	Mount Hermon	33.41615982399708	35.85725617635589	Deut 3:9, Deut 4:48, Josh 11:3, Ps 42:6, Ps 89:12, Ps 133:3, Sng 4:8	
+Heshbon		31.80052000870321	35.80901866717255	Num 21:25, Num 21:26, Num 21:27, Num 21:28, Num 21:30, Num 21:34, Num 32:3, Num 32:37, Deut 1:4, Deut 2:24, Deut 2:26, Deut 2:30, Deut 3:2, Deut 3:6, Deut 4:46, Deut 29:7, Josh 9:10, Josh 12:2, Josh 12:5, Josh 13:10, Josh 13:17, Josh 13:21, Josh 13:26, Josh 13:27, Josh 21:39, Judg 11:19, Judg 11:26, 1 Chr 6:81, Neh 9:22, Sng 7:4, Isa 15:4, Isa 16:8, Isa 16:9, Jer 48:2, Jer 48:34, Jer 48:45, Jer 49:3	
+Heshmon	Hazar-shual	~31.215418	~34.942986	Josh 15:27	
+Hethlon		34.737990	36.340918	Ezek 47:15, Ezek 48:1	~
+Hezron	Hazor 1	33.01718199667929	35.56804856758258	Josh 15:3	
+Hierapolis		37.924517	29.124525	Col 4:13	
+Hilen	Holon 1	31.583333	34.950000	1 Chr 6:58	
+Hobah		33.500000	36.466667	Gen 14:15	
+Holon 1		31.583333	34.950000	Josh 15:51, Josh 21:15	~
+Holon 2	Jahaz	~31.50100308502659	~35.92063125199366	Jer 48:21	
+Holy Place 1		?	?	Ex 26:33, Ex 28:29, Ex 28:35, Ex 28:43, Ex 29:30, Ex 31:11, Ex 35:19, Ex 39:1, Ex 39:41, Lev 6:30, Lev 16:2, Lev 16:3, Lev 16:16, Lev 16:17, Lev 16:20, Lev 16:23, Lev 16:27, Num 28:7	mobile
+Holy Place 2	Jerusalem	<31.777444	<35.234935	1 Kgs 8:8, 1 Kgs 8:10, 2 Chr 5:9, 2 Chr 5:11, 2 Chr 29:5, 2 Chr 29:7, 2 Chr 35:5, Ezek 41:21, Ezek 41:23, Ezek 42:14, Ezek 44:27, Heb 9:2	
+Horeb	Mount Sinai	28.539722	33.973333	Ex 3:1, Ex 17:6, Deut 1:2, Deut 1:6, Deut 1:19, Deut 4:10, Deut 4:15, Deut 5:2, Deut 9:8, Deut 18:16, Deut 29:1, 1 Kgs 8:9, 1 Kgs 19:8, 2 Chr 5:10, Ps 106:19, Mal 4:4	
+Horem		33.166667	35.433333	Josh 19:38	~
+Horesh		31.45113920529978	35.08840337232346	1 Sam 23:15, 1 Sam 23:16, 1 Sam 23:18, 1 Sam 23:19	
+Hor-haggidgad		30.358285?	35.190270?	Num 33:32, Num 33:33	
+Hormah	Zephath	30.880918	34.630620	Num 14:45, Num 21:3, Deut 1:44, Josh 12:14, Josh 15:30, Josh 19:4, Judg 1:17, 1 Sam 30:30, 1 Chr 4:30	
+Horonaim		31.288056	35.515000	Isa 15:5, Jer 48:3, Jer 48:5, Jer 48:34	~
+Horse Gate	Jerusalem	<31.777444	<35.234935	Neh 3:28, Jer 31:40	
+Hosah		32.178502	35.227580	Josh 19:29	
+House of the Forest	Jerusalem	<31.777444	<35.234935	Isa 22:8	
+House of the Forest of Lebanon	Jerusalem	<31.777444	<35.234935	1 Kgs 7:2, 1 Kgs 10:17, 1 Kgs 10:21, 2 Chr 9:16, 2 Chr 9:20	
+Hukkok		32.882153	35.496694	Josh 19:34	
+Hukok	Helkath	32.955448	35.211971	1 Chr 6:75	
+Humtah	Hebron	~31.53577362133176	~35.09409986578734	Josh 15:54	
+Ibleam		32.45	35.2833	Josh 17:11, Judg 1:27, 2 Kgs 9:27, 2 Kgs 15:10	
+Iconium		37.88353038890398	32.4942625657248	Acts 13:51, Acts 14:1, Acts 14:19, Acts 14:21, Acts 16:2, 2 Tim 3:11	
+Idalah		32.733333	35.166667	Josh 19:15	
+Idumea	Bozrah 1	>30.734691	>35.606250	Mark 3:8	
+Iim	Baalath-beer	~32.049953	~35.733402	Josh 15:29	
+Ijon		33.32804402945069	35.61187505342423	1 Kgs 15:20, 2 Kgs 15:29, 2 Chr 16:4	
+Illyricum	Dalmatia	>43.515484	>16.071538	Rom 15:19	region
+Immer	Nineveh	~36.359410	~43.152887	Ezra 2:59, Neh 7:61	
+India		>22	>77	Est 1:1, Est 8:9	
+Iphtah	Ashnah	~31.8099	~34.9365	Josh 15:43	
+Irpeel		31.869343	35.197712	Josh 18:27	
+Ir-shemesh	Beth-shemesh 1	31.75274835811488	34.97660913147738	Josh 19:41	
+Italy	Rome	>41.9	>12.48333333333333	Acts 18:2, Acts 27:1, Acts 27:6, Heb 13:24	region
+Ithlah		31.823593	35.075769	Josh 19:42	Now Bayt Thul
+Ithnan	Moladah	~31.162327	~35.057114	Josh 15:23	
+Ituraea	Mount Hermon	>33.41615982399708	>35.85725617635589	Luke 3:1	region
+Ivvah	Hena	~34.467725	~41.964955	2 Kgs 18:34, 2 Kgs 19:13, Isa 37:13	
+Iye-abarim	Dibon 1	~31.49684513710609	~35.78284105296996	Num 21:11, Num 33:44	
+Iyim	Dibon 1	~31.49684513710609	~35.78284105296996	Num 33:45	
+Jaar	Kiriath-jearim	31.771104?	34.993812?	Ps 132:6	
+Jabbok		32.193237	35.676305	Gen 32:22, Num 21:24, Deut 2:37, Deut 3:16, Josh 12:2, Judg 11:13, Judg 11:22	
+Jabesh	Jabesh-gilead	32.37982175236296	35.61158746493092	1 Sam 11:1, 1 Sam 11:3, 1 Sam 11:5, 1 Sam 11:9, 1 Sam 11:10, 1 Sam 31:12, 1 Sam 31:13, 1 Chr 10:12	
+Jabesh-gilead		32.37982175236296	35.61158746493092	Judg 21:8, Judg 21:9, Judg 21:10, Judg 21:12, Judg 21:14, 1 Sam 11:1, 1 Sam 11:9, 1 Sam 31:11, 2 Sam 2:4, 2 Sam 2:5, 2 Sam 21:12, 1 Chr 10:11	
+Jabez	Bethlehem 1	~31.70536129174666	~35.21026630105202	1 Chr 2:55	
+Jabneel 1		31.865518	34.746856	Josh 15:11	now Yavneh
+Jabneel 2		32.700000	35.500000	Josh 19:33	now Yavneel
+Jabneh	Jabneel 1	31.865518	34.746856	2 Chr 26:6	
+Jagur	Adadah	~31.1858	~34.96745	Josh 15:21	
+Jahaz		31.50100308502659	35.92063125199366	Num 21:23, Deut 2:32, Josh 13:18, Josh 21:36, Judg 11:20, Isa 15:4, Jer 48:34	
+Jahzah	Jahaz	31.50100308502659	35.92063125199366	1 Chr 6:78, Jer 48:21	
+Jair	Gilead	~>32.042523	~>35.724241	Josh 13:30	region
+Janim		31.516667	35.166667	Josh 15:53	now Bani Naim
+Janoah 1		33.260246	35.302915	Josh 16:6, Josh 16:7	now Yanouh
+Janoah 2		32.155895	35.361606	2 Kgs 15:29	
+Japhia		32.691633	35.274955	Josh 19:12	now Yafa
+Jarmuth 1		31.70926894307416	34.96995387025439	Josh 10:3, Josh 10:5, Josh 10:23, Josh 12:11, Josh 15:35, Neh 11:29	
+Jarmuth 2	Jezreel 2	~32.5559631396043	~35.33078927843792	Josh 21:29	
+Jattir		31.40143851886152	35.06941349210527	Josh 15:48, Josh 21:14, 1 Sam 30:27, 1 Chr 6:57	
+Javan	Ephesus	>37.95331433666365	>27.36782511573013	Isa 66:19, Ezek 27:13	from harper; http://en.wikipedia.org/wiki/Ionia
+Jazer		31.94352951689796	35.72776961157128	Num 21:32, Num 32:1, Num 32:3, Num 32:35, Josh 13:25, Josh 21:39, 2 Sam 24:5, 1 Chr 6:81, 1 Chr 26:31, Isa 16:8, Isa 16:9, Jer 48:32	
+Jebus	Jerusalem	31.777444	35.234935	Josh 18:28, Judg 19:10, Judg 19:11, 1 Chr 11:4, 1 Chr 11:5	
+Jebusite	Jerusalem	31.777444	35.234935	Josh 15:8	
+Jegar-sahadutha	Ramoth-gilead	32.56526757366849	36.00555930879645	Gen 31:47	
+Jehud		32.033636	34.889599	Josh 19:45	now Yehud
+Jekabzeel	Adadah	~31.1858	~34.96745	Neh 11:25	
+Jericho		31.87060143818292	35.44386371224434	Num 22:1, Num 26:3, Num 26:63, Num 31:12, Num 33:48, Num 33:50, Num 34:15, Num 35:1, Num 36:13, Deut 32:49, Deut 34:1, Josh 2:1, Josh 2:2, Josh 2:3, Josh 3:16, Josh 4:13, Josh 4:19, Josh 5:10, Josh 5:13, Josh 6:1, Josh 6:2, Josh 6:25, Josh 6:26, Josh 7:2, Josh 8:2, Josh 9:3, Josh 10:1, Josh 10:28, Josh 10:30, Josh 12:9, Josh 13:32, Josh 16:1, Josh 16:7, Josh 18:12, Josh 18:21, Josh 20:8, Josh 24:11, 2 Sam 10:5, 1 Kgs 16:34, 2 Kgs 2:4, 2 Kgs 2:5, 2 Kgs 2:15, 2 Kgs 2:18, 2 Kgs 25:5, 1 Chr 6:78, 1 Chr 19:5, 2 Chr 28:15, Ezra 2:34, Neh 3:2, Neh 7:36, Jer 39:5, Jer 52:8, Matt 20:29, Mark 10:46, Luke 10:30, Luke 18:35, Luke 19:1, Heb 11:30	
+Jeruel	Ziz	~31.572903	~35.406346	2 Chr 20:16	
+Jerusalem		31.777444	35.234935	Josh 10:1, Josh 10:3, Josh 10:5, Josh 10:23, Josh 12:10, Josh 15:8, Josh 15:63, Josh 18:28, Judg 1:7, Judg 1:8, Judg 1:21, Judg 19:10, 1 Sam 17:54, 2 Sam 5:5, 2 Sam 5:6, 2 Sam 5:13, 2 Sam 5:14, 2 Sam 8:7, 2 Sam 9:13, 2 Sam 10:14, 2 Sam 11:1, 2 Sam 11:12, 2 Sam 12:31, 2 Sam 14:23, 2 Sam 14:28, 2 Sam 15:8, 2 Sam 15:11, 2 Sam 15:14, 2 Sam 15:29, 2 Sam 15:37, 2 Sam 16:3, 2 Sam 16:15, 2 Sam 17:20, 2 Sam 19:19, 2 Sam 19:25, 2 Sam 19:33, 2 Sam 19:34, 2 Sam 20:2, 2 Sam 20:3, 2 Sam 20:7, 2 Sam 20:22, 2 Sam 24:8, 2 Sam 24:16, 1 Kgs 2:11, 1 Kgs 2:36, 1 Kgs 2:38, 1 Kgs 2:41, 1 Kgs 3:1, 1 Kgs 3:15, 1 Kgs 8:1, 1 Kgs 9:15, 1 Kgs 9:19, 1 Kgs 10:2, 1 Kgs 10:26, 1 Kgs 10:27, 1 Kgs 11:7, 1 Kgs 11:13, 1 Kgs 11:29, 1 Kgs 11:32, 1 Kgs 11:36, 1 Kgs 11:42, 1 Kgs 12:18, 1 Kgs 12:21, 1 Kgs 12:27, 1 Kgs 12:28, 1 Kgs 14:21, 1 Kgs 14:25, 1 Kgs 15:2, 1 Kgs 15:4, 1 Kgs 15:10, 1 Kgs 22:42, 2 Kgs 8:17, 2 Kgs 8:26, 2 Kgs 9:28, 2 Kgs 12:1, 2 Kgs 12:17, 2 Kgs 12:18, 2 Kgs 14:2, 2 Kgs 14:13, 2 Kgs 14:19, 2 Kgs 14:20, 2 Kgs 15:2, 2 Kgs 15:33, 2 Kgs 16:2, 2 Kgs 16:5, 2 Kgs 18:2, 2 Kgs 18:17, 2 Kgs 18:22, 2 Kgs 18:35, 2 Kgs 19:10, 2 Kgs 19:21, 2 Kgs 19:31, 2 Kgs 21:1, 2 Kgs 21:4, 2 Kgs 21:7, 2 Kgs 21:12, 2 Kgs 21:13, 2 Kgs 21:16, 2 Kgs 21:19, 2 Kgs 22:1, 2 Kgs 22:14, 2 Kgs 23:1, 2 Kgs 23:2, 2 Kgs 23:4, 2 Kgs 23:5, 2 Kgs 23:6, 2 Kgs 23:9, 2 Kgs 23:13, 2 Kgs 23:20, 2 Kgs 23:23, 2 Kgs 23:24, 2 Kgs 23:27, 2 Kgs 23:30, 2 Kgs 23:31, 2 Kgs 23:33, 2 Kgs 23:36, 2 Kgs 24:4, 2 Kgs 24:8, 2 Kgs 24:10, 2 Kgs 24:14, 2 Kgs 24:15, 2 Kgs 24:18, 2 Kgs 24:20, 2 Kgs 25:1, 2 Kgs 25:8, 2 Kgs 25:9, 2 Kgs 25:10, 1 Chr 3:4, 1 Chr 3:5, 1 Chr 6:10, 1 Chr 6:15, 1 Chr 6:32, 1 Chr 8:28, 1 Chr 8:32, 1 Chr 9:3, 1 Chr 9:34, 1 Chr 9:38, 1 Chr 11:4, 1 Chr 14:3, 1 Chr 14:4, 1 Chr 15:3, 1 Chr 18:7, 1 Chr 19:15, 1 Chr 20:1, 1 Chr 20:3, 1 Chr 21:4, 1 Chr 21:15, 1 Chr 21:16, 1 Chr 23:25, 1 Chr 28:1, 1 Chr 29:27, 2 Chr 1:4, 2 Chr 1:13, 2 Chr 1:14, 2 Chr 1:15, 2 Chr 2:7, 2 Chr 2:16, 2 Chr 3:1, 2 Chr 5:2, 2 Chr 6:6, 2 Chr 8:6, 2 Chr 9:1, 2 Chr 9:25, 2 Chr 9:27, 2 Chr 9:30, 2 Chr 10:18, 2 Chr 11:1, 2 Chr 11:5, 2 Chr 11:14, 2 Chr 11:16, 2 Chr 12:2, 2 Chr 12:4, 2 Chr 12:5, 2 Chr 12:7, 2 Chr 12:9, 2 Chr 12:13, 2 Chr 13:2, 2 Chr 14:15, 2 Chr 15:10, 2 Chr 17:13, 2 Chr 19:1, 2 Chr 19:4, 2 Chr 19:8, 2 Chr 20:5, 2 Chr 20:15, 2 Chr 20:17, 2 Chr 20:18, 2 Chr 20:20, 2 Chr 20:27, 2 Chr 20:27, 2 Chr 20:28, 2 Chr 20:31, 2 Chr 21:5, 2 Chr 21:11, 2 Chr 21:13, 2 Chr 21:20, 2 Chr 22:1, 2 Chr 22:2, 2 Chr 23:2, 2 Chr 24:1, 2 Chr 24:6, 2 Chr 24:9, 2 Chr 24:18, 2 Chr 24:23, 2 Chr 25:1, 2 Chr 25:1, 2 Chr 25:23, 2 Chr 25:23, 2 Chr 25:27, 2 Chr 26:3, 2 Chr 26:3, 2 Chr 26:9, 2 Chr 26:15, 2 Chr 27:1, 2 Chr 27:8, 2 Chr 28:1, 2 Chr 28:10, 2 Chr 28:24, 2 Chr 28:27, 2 Chr 29:1, 2 Chr 29:8, 2 Chr 30:1, 2 Chr 30:2, 2 Chr 30:3, 2 Chr 30:5, 2 Chr 30:11, 2 Chr 30:13, 2 Chr 30:14, 2 Chr 32:19, 2 Chr 32:22, 2 Chr 32:23, 2 Chr 32:25, 2 Chr 32:26, 2 Chr 32:33, 2 Chr 33:1, 2 Chr 33:4, 2 Chr 33:7, 2 Chr 33:9, 2 Chr 33:13, 2 Chr 33:15, 2 Chr 33:21, 2 Chr 34:1, 2 Chr 34:3, 2 Chr 34:5, 2 Chr 34:7, 2 Chr 34:9, 2 Chr 34:22, 2 Chr 34:29, 2 Chr 34:30, 2 Chr 34:32, 2 Chr 35:1, 2 Chr 35:18, 2 Chr 35:24, 2 Chr 36:1, 2 Chr 36:2, 2 Chr 36:3, 2 Chr 36:4, 2 Chr 36:5, 2 Chr 36:9, 2 Chr 36:10, 2 Chr 36:11, 2 Chr 36:14, 2 Chr 36:19, 2 Chr 36:23, Ezra 1:2, Ezra 1:3, Ezra 1:4, Ezra 1:5, Ezra 1:7, Ezra 1:11, Ezra 2:1, Ezra 2:68, Ezra 3:1, Ezra 3:8, Ezra 4:6, Ezra 4:8, Ezra 4:12, Ezra 4:20, Ezra 4:23, Ezra 4:24, Ezra 5:1, Ezra 5:2, Ezra 5:14, Ezra 5:15, Ezra 5:16, Ezra 5:17, Ezra 6:3, Ezra 6:5, Ezra 6:9, Ezra 6:12, Ezra 6:18, Ezra 7:7, Ezra 7:8, Ezra 7:9, Ezra 7:13, Ezra 7:14, Ezra 7:15, Ezra 7:16, Ezra 7:17, Ezra 7:19, Ezra 7:27, Ezra 8:29, Ezra 8:30, Ezra 8:31, Ezra 8:32, Ezra 9:9, Ezra 10:7, Ezra 10:9, Neh 1:2, Neh 1:3, Neh 2:11, Neh 2:12, Neh 2:13, Neh 2:17, Neh 2:20, Neh 3:8, Neh 3:9, Neh 3:12, Neh 4:7, Neh 4:8, Neh 4:22, Neh 6:7, Neh 7:2, Neh 7:3, Neh 7:6, Neh 8:15, Neh 11:1, Neh 11:2, Neh 11:3, Neh 11:4, Neh 11:6, Neh 11:22, Neh 12:27, Neh 12:28, Neh 12:29, Neh 12:43, Neh 13:6, Neh 13:7, Neh 13:15, Neh 13:16, Neh 13:19, Neh 13:20, Est 2:6, Ps 51:18, Ps 68:29, Ps 79:1, Ps 79:3, Ps 102:21, Ps 116:19, Ps 122:2, Ps 122:3, Ps 122:6, Ps 125:2, Ps 128:5, Ps 135:21, Ps 137:5, Ps 137:6, Ps 137:7, Ps 147:2, Ps 147:12, Eccl 1:1, Eccl 1:12, Eccl 1:16, Eccl 2:7, Eccl 2:9, Sng 1:5, Sng 2:7, Sng 3:5, Sng 3:10, Sng 5:8, Sng 5:16, Sng 6:4, Sng 8:4, Isa 1:1, Isa 2:1, Isa 2:3, Isa 3:1, Isa 3:8, Isa 4:3, Isa 4:4, Isa 5:3, Isa 5:14, Isa 7:1, Isa 8:14, Isa 10:10, Isa 10:11, Isa 10:12, Isa 10:32, Isa 22:10, Isa 22:21, Isa 24:23, Isa 27:13, Isa 28:14, Isa 30:19, Isa 31:5, Isa 31:9, Isa 33:20, Isa 36:2, Isa 36:7, Isa 36:20, Isa 37:10, Isa 37:22, Isa 37:32, Isa 40:2, Isa 40:9, Isa 41:27, Isa 44:26, Isa 44:28, Isa 51:17, Isa 52:1, Isa 52:2, Isa 52:9, Isa 62:6, Isa 62:7, Isa 64:10, Isa 65:18, Isa 65:19, Isa 66:10, Isa 66:13, Isa 66:20, Jer 1:3, Jer 1:15, Jer 2:2, Jer 3:17, Jer 4:3, Jer 4:4, Jer 4:5, Jer 4:10, Jer 4:11, Jer 4:14, Jer 4:16, Jer 5:1, Jer 6:1, Jer 6:6, Jer 6:8, Jer 7:17, Jer 7:34, Jer 8:1, Jer 9:11, Jer 11:2, Jer 11:6, Jer 11:9, Jer 11:12, Jer 11:13, Jer 13:9, Jer 13:13, Jer 13:27, Jer 14:2, Jer 14:16, Jer 15:4, Jer 15:5, Jer 17:19, Jer 17:20, Jer 17:21, Jer 17:25, Jer 17:26, Jer 17:27, Jer 18:11, Jer 19:3, Jer 19:7, Jer 19:13, Jer 22:19, Jer 23:14, Jer 23:15, Jer 24:1, Jer 24:8, Jer 25:2, Jer 25:18, Jer 26:18, Jer 27:3, Jer 27:18, Jer 27:20, Jer 27:21, Jer 29:1, Jer 29:2, Jer 29:4, Jer 29:20, Jer 29:25, Jer 32:2, Jer 32:32, Jer 32:44, Jer 33:10, Jer 33:13, Jer 33:16, Jer 34:1, Jer 34:6, Jer 34:7, Jer 34:8, Jer 34:19, Jer 35:11, Jer 35:13, Jer 35:17, Jer 36:9, Jer 36:31, Jer 37:5, Jer 37:11, Jer 37:12, Jer 38:28, Jer 39:1, Jer 39:8, Jer 40:1, Jer 42:18, Jer 44:2, Jer 44:6, Jer 44:9, Jer 44:13, Jer 44:17, Jer 44:21, Jer 51:35, Jer 51:50, Jer 52:1, Jer 52:3, Jer 52:4, Jer 52:12, Jer 52:13, Jer 52:14, Jer 52:29, Lam 1:7, Lam 1:8, Lam 1:17, Lam 2:10, Lam 2:13, Lam 2:15, Lam 4:12, Ezek 4:1, Ezek 4:7, Ezek 4:16, Ezek 5:5, Ezek 8:3, Ezek 9:4, Ezek 9:8, Ezek 11:15, Ezek 12:10, Ezek 12:19, Ezek 13:16, Ezek 14:21, Ezek 14:22, Ezek 15:6, Ezek 16:2, Ezek 16:3, Ezek 17:12, Ezek 21:2, Ezek 21:20, Ezek 21:22, Ezek 22:19, Ezek 23:4, Ezek 24:2, Ezek 26:2, Ezek 33:21, Ezek 36:38, Dan 1:1, Dan 5:2, Dan 5:3, Dan 6:10, Dan 9:2, Dan 9:7, Dan 9:12, Dan 9:16, Dan 9:25, Joel 2:32, Joel 3:1, Joel 3:6, Joel 3:16, Joel 3:17, Joel 3:20, Amos 1:2, Amos 2:5, Obad 1:11, Obad 1:20, Mic 1:1, Mic 1:5, Mic 1:9, Mic 1:12, Mic 3:10, Mic 3:12, Mic 4:2, Mic 4:8, Zeph 1:4, Zeph 1:12, Zeph 3:14, Zeph 3:16, Zech 1:12, Zech 1:14, Zech 1:16, Zech 1:17, Zech 1:19, Zech 2:2, Zech 2:4, Zech 2:12, Zech 3:2, Zech 7:7, Zech 8:3, Zech 8:4, Zech 8:8, Zech 8:15, Zech 8:22, Zech 9:9, Zech 9:10, Zech 12:2, Zech 12:3, Zech 12:5, Zech 12:6, Zech 12:7, Zech 12:8, Zech 12:9, Zech 12:10, Zech 12:11, Zech 13:1, Zech 14:2, Zech 14:4, Zech 14:8, Zech 14:10, Zech 14:11, Zech 14:12, Zech 14:14, Zech 14:16, Zech 14:17, Zech 14:21, Mal 2:11, Mal 3:4, Matt 2:1, Matt 2:3, Matt 3:5, Matt 4:25, Matt 5:35, Matt 15:1, Matt 16:21, Matt 20:17, Matt 20:18, Matt 21:1, Matt 21:10, Matt 23:37, Mark 1:5, Mark 3:8, Mark 3:22, Mark 7:1, Mark 10:32, Mark 10:33, Mark 11:1, Mark 11:11, Mark 11:15, Mark 11:27, Mark 15:41, Luke 2:22, Luke 2:25, Luke 2:38, Luke 2:41, Luke 2:43, Luke 2:45, Luke 4:9, Luke 5:17, Luke 6:17, Luke 9:31, Luke 9:51, Luke 9:53, Luke 10:30, Luke 13:4, Luke 13:22, Luke 13:33, Luke 13:34, Luke 17:11, Luke 18:31, Luke 19:11, Luke 19:28, Luke 21:20, Luke 21:24, Luke 23:7, Luke 23:28, Luke 24:13, Luke 24:18, Luke 24:33, Luke 24:47, Luke 24:52, John 1:19, John 2:13, John 2:23, John 4:20, John 4:21, John 4:45, John 5:1, John 5:2, John 7:25, John 10:22, John 11:18, John 11:55, John 12:12, Acts 1:4, Acts 1:8, Acts 1:12, Acts 1:19, Acts 2:5, Acts 2:14, Acts 4:5, Acts 4:16, Acts 5:16, Acts 5:28, Acts 6:7, Acts 8:1, Acts 8:14, Acts 8:25, Acts 8:26, Acts 8:27, Acts 9:2, Acts 9:13, Acts 9:21, Acts 9:26, Acts 9:28, Acts 10:39, Acts 11:2, Acts 11:22, Acts 11:27, Acts 12:25, Acts 13:13, Acts 13:27, Acts 13:31, Acts 15:2, Acts 15:4, Acts 16:4, Acts 19:21, Acts 20:16, Acts 20:22, Acts 21:4, Acts 21:11, Acts 21:12, Acts 21:13, Acts 21:15, Acts 21:17, Acts 21:31, Acts 22:5, Acts 22:17, Acts 22:18, Acts 23:11, Acts 24:11, Acts 25:1, Acts 25:3, Acts 25:7, Acts 25:9, Acts 25:15, Acts 25:20, Acts 25:24, Acts 26:4, Acts 26:10, Acts 26:20, Acts 28:17, Rom 15:19, Rom 15:25, Rom 15:26, Rom 15:31, 1 Cor 16:3, Gal 1:17, Gal 1:18, Gal 2:1, Gal 4:25, Gal 4:26, Heb 12:22, Rev 3:12, Rev 21:2, Rev 21:10	
+Jerusalem's	Jerusalem	31.777444	35.234935	Isa 62:1	
+Jeshanah		31.980029	35.229709	2 Chr 13:19	now Ein Sinya
+Jeshimon	Engedi	~31.46152536164766	~35.39241108242345	1 Sam 23:19, 1 Sam 23:24, 1 Sam 26:1, 1 Sam 26:3	
+Jeshua	Moladah	~31.162327	~35.057114	Neh 11:26	
+Jetur	Mount Hermon	>33.41615982399708	>35.85725617635589	1 Chr 5:19	
+Jezreel	Hebron	~31.53577362133176	~35.09409986578734	Josh 15:56, 1 Sam 25:43, 1 Sam 27:3, 1 Sam 29:1, 1 Sam 29:11, 1 Sam 30:5, 2 Sam 2:2, 2 Sam 3:2	
+Jezreel 2		32.5559631396043	35.33078927843792	Josh 19:18, 2 Sam 2:9, 1 Kgs 18:45, 1 Kgs 18:46, 1 Kgs 21:1, 2 Kgs 8:29, 2 Kgs 9:15, 2 Kgs 9:16, 2 Kgs 9:17, 2 Kgs 9:30, 2 Kgs 9:36, 2 Kgs 9:37, 2 Kgs 10:11, Hos 1:4, Hos 1:11, 1 Kgs 4:12, 1 Kgs 21:23, 2 Kgs 9:10, 2 Kgs 10:6, 2 Kgs 10:7, 2 Chr 22:6, Hos 2:22	
+Jezreel 3	Jezreel 2	~32.5559631396043	~35.33078927843792	2 Sam 4:4	
+Jogbehah		32.028743	35.862887	Num 32:35, Judg 8:11	
+Jokdeam	Zanoah 2	~31.366667	~35.000000	Josh 15:56	
+Jokmeam 1	Jokneam	32.66454576550823	35.10891818863304	1 Kgs 4:12	
+Jokmeam 2	Kibzaim	31.833333	35.300000	1 Chr 6:68	
+Jokneam		32.66454576550823	35.10891818863304	Josh 12:22, Josh 19:11, Josh 21:34	
+Joktheel 1	Lachish	~31.56485056116292	~34.8467256730566	Josh 15:38	
+Joktheel 2	Sela	30.32243571223214	35.45627946919968	2 Kgs 14:7	
+Joppa		32.05351968494696	34.75042606009946	Josh 19:46, 2 Chr 2:16, Ezra 3:7, Jonah 1:3, Acts 9:36, Acts 9:38, Acts 9:42, Acts 9:43, Acts 10:5, Acts 10:8, Acts 10:23, Acts 10:32, Acts 11:5, Acts 11:13	
+Jordan	Jordan Valley	32.309099	35.559900	Gen 32:10, Gen 50:10, Gen 50:11, Num 13:29, Num 22:1, Num 26:3, Num 26:63, Num 31:12, Num 32:5, Num 32:19, Num 32:21, Num 32:29, Num 32:32, Num 33:48, Num 33:49, Num 33:50, Num 33:51, Num 34:12, Num 34:15, Num 35:1, Num 35:10, Num 35:14, Num 36:13, Deut 1:1, Deut 1:5, Deut 2:29, Deut 3:8, Deut 3:17, Deut 3:20, Deut 3:25, Deut 3:27, Deut 4:21, Deut 4:22, Deut 4:26, Deut 4:41, Deut 4:46, Deut 4:47, Deut 4:49, Deut 9:1, Deut 11:30, Deut 11:31, Deut 12:10, Deut 27:2, Deut 27:4, Deut 27:12, Deut 30:18, Deut 31:2, Deut 31:13, Deut 32:47, Josh 1:2, Josh 1:11, Josh 1:14, Josh 1:15, Josh 2:7, Josh 2:10, Josh 3:1, Josh 3:8, Josh 3:11, Josh 3:13, Josh 3:14, Josh 3:15, Josh 3:17, Josh 4:1, Josh 4:3, Josh 4:5, Josh 4:7, Josh 4:8, Josh 4:9, Josh 4:10, Josh 4:16, Josh 4:17, Josh 4:18, Josh 4:19, Josh 4:20, Josh 4:22, Josh 4:23, Josh 5:1, Josh 7:7, Josh 9:1, Josh 9:10, Josh 12:1, Josh 12:7, Josh 13:8, Josh 13:23, Josh 13:27, Josh 13:32, Josh 14:3, Josh 15:5, Josh 16:1, Josh 16:7, Josh 17:5, Josh 18:7, Josh 18:12, Josh 18:19, Josh 18:20, Josh 19:22, Josh 19:33, Josh 19:34, Josh 20:8, Josh 22:4, Josh 22:7, Josh 22:10, Josh 22:11, Josh 22:25, Josh 23:4, Josh 24:8, Josh 24:11, Judg 3:28, Judg 5:17, Judg 6:33, Judg 7:24, Judg 7:25, Judg 8:4, Judg 10:8, Judg 10:9, Judg 11:13, Judg 11:22, Judg 12:5, Judg 12:6, 1 Sam 13:7, 1 Sam 31:7, 2 Sam 2:29, 2 Sam 10:17, 2 Sam 16:14, 2 Sam 17:22, 2 Sam 17:24, 2 Sam 19:15, 2 Sam 19:17, 2 Sam 19:18, 2 Sam 19:31, 2 Sam 19:36, 2 Sam 19:39, 2 Sam 19:41, 2 Sam 20:2, 2 Sam 24:5, 1 Kgs 2:8, 1 Kgs 7:46, 1 Kgs 17:3, 1 Kgs 17:5, 2 Kgs 2:6, 2 Kgs 2:7, 2 Kgs 2:13, 2 Kgs 5:10, 2 Kgs 5:14, 2 Kgs 6:2, 2 Kgs 6:4, 2 Kgs 7:15, 2 Kgs 10:33, 1 Chr 6:78, 1 Chr 12:15, 1 Chr 12:37, 1 Chr 19:17, 1 Chr 26:30, 2 Chr 4:17, Job 40:23, Ps 42:6, Ps 114:3, Ps 114:5, Isa 9:1, Jer 12:5, Jer 49:19, Jer 50:44, Ezek 47:18, Zech 11:3, Matt 3:5, Matt 3:6, Matt 3:13, Matt 4:15, Matt 4:25, Matt 19:1, Mark 1:5, Mark 1:9, Mark 3:8, Mark 10:1, Luke 3:3, Luke 4:1, John 1:28, John 3:26, John 10:40	river
+Jordan Valley		32.309099	35.559900	Gen 13:10, Gen 13:11	
+Jotbah	Ezion-geber	~29.75804307645581	~35.0306017443078	2 Kgs 21:19	
+Jotbathah	Ezion-geber	~29.75804307645581	~35.0306017443078	Num 33:33, Num 33:34, Deut 10:7	
+Judea	Jerusalem	>31.777444	>35.234935	Ezra 9:9, Matt 2:1, Matt 2:5, Matt 2:22, Matt 3:1, Matt 3:5, Matt 4:25, Matt 19:1, Matt 24:16, Mark 1:5, Mark 3:7, Mark 10:1, Mark 13:14, Luke 1:5, Luke 1:65, Luke 2:4, Luke 3:1, Luke 4:44, Luke 5:17, Luke 6:17, Luke 7:17, Luke 21:21, Luke 23:5, John 4:3, John 4:47, John 4:54, John 7:1, John 7:3, John 11:7, Acts 1:8, Acts 2:9, Acts 2:14, Acts 8:1, Acts 9:31, Acts 10:37, Acts 11:1, Acts 11:29, Acts 12:19, Acts 15:1, Acts 21:10, Acts 26:20, Acts 28:21, Rom 15:31, 2 Cor 1:16, Gal 1:22, 1 Thes 2:14	region
+Judean	Jerusalem	>31.777444	>35.234935	John 3:22	
+Juttah		31.450000	35.083333	Josh 15:55, Josh 21:16	~; now Yatta
+Kabzeel	Adadah	~31.1858	~34.96745	Josh 15:21, 2 Sam 23:20, 1 Chr 11:22	
+Kadesh 1	Kadesh-barnea	30.68771281376111	34.49479554246946	Gen 14:7, Gen 16:14, Gen 20:1, Num 13:26, Num 20:1, Num 20:14, Num 20:16, Num 20:22, Num 27:14, Num 33:36, Num 33:37, Deut 1:46, Judg 11:16, Judg 11:17, Ps 29:8	
+Kadesh 2		34.558327	36.522943	2 Sam 24:6	
+Kadesh-barnea		30.68771281376111	34.49479554246946	Num 32:8, Num 34:4, Deut 1:2, Deut 1:19, Deut 2:14, Deut 9:23, Josh 10:41, Josh 14:6, Josh 14:7, Josh 15:3	
+Kain		31.500000	35.166667	Num 24:22, Josh 15:57	now Yaqin
+Kamon	Gilead	<>32.042523	<>35.724241	Judg 10:5	
+Kanah 1		32.138219	35.038971	Josh 16:8, Josh 17:9	
+Kanah 2	Cana	32.74701517958585	35.33877162058164	Josh 19:28	
+Karka	Azmon	~30.958506	~34.380500	Josh 15:3	
+Karkor	Peniel	~32.1843727808126	~35.70287002746794	Judg 8:10	
+Karnaim	Ashteroth-karnaim	32.7666666667	36.0166666667	Amos 6:13	
+Kartah	Kitron	32.753141	35.279335	Josh 21:34	
+Kartan	Hammath	~33.125828	~35.165000	Josh 21:32	
+Kattath	Kitron	32.753141	35.279335	Josh 19:15	
+Kedar	Arabia	~>27.4	~>37.7	Ps 120:5, Sng 1:5, Isa 21:16, Isa 21:17, Isa 42:11, Isa 60:7, Jer 2:10, Jer 49:28, Ezek 27:21	
+Kedemoth		31.646073	35.894537	Deut 2:26, Josh 13:18, Josh 21:37, 1 Chr 6:79	~; esv map
+Kedesh 1		33.11298357486105	35.53361334150225	Josh 12:22, Josh 19:37, Josh 20:7, Josh 21:32, Judg 4:9, Judg 4:10, Judg 4:11, 2 Kgs 15:29, 1 Chr 6:76	
+Kedesh 2	Kadesh-barnea	30.68771281376111	34.49479554246946	Josh 15:23	
+Kedesh 3	Kishion	32.559061	35.246206	1 Chr 6:72	
+Kedesh-naphtali	Kedesh 1	33.11298357486105	35.53361334150225	Judg 4:6	
+Kehelathah	Mount Hor 1	~30.317396	~35.407152	Num 33:22, Num 33:23	
+Keilah		31.614175	35.002752	Josh 15:44, 1 Sam 23:1, 1 Sam 23:2, 1 Sam 23:3, 1 Sam 23:4, 1 Sam 23:5, 1 Sam 23:6, 1 Sam 23:7, 1 Sam 23:8, 1 Sam 23:10, 1 Sam 23:11, 1 Sam 23:12, 1 Sam 23:13, Neh 3:17, Neh 3:18	now Khirbet Qila
+Kenath		32.756919	36.616400	Num 32:42, 1 Chr 2:23	
+Kerioth	Kiriathaim 1	31.58333333329998	35.70000000000012	Jer 48:24, Amos 2:2	
+Kerioth-hezron	Moladah	~31.162327	~35.057114	Josh 15:25	
+Kibroth-hattaavah	Hazeroth	~28.916667	~34.500000	Num 11:34, Num 11:35, Num 33:16, Num 33:17, Deut 9:22	
+Kibzaim		31.833333	35.300000	Josh 21:22	~; now Kabus
+Kidron		31.772134	35.236596	2 Sam 15:23, 1 Kgs 2:37, 1 Kgs 15:13, 2 Kgs 23:4, 2 Kgs 23:6, 2 Kgs 23:12, 2 Chr 15:16, 2 Chr 29:16, Jer 31:40	
+Kidron Valley	Kidron	31.772134	35.236596	2 Chr 30:14, John 18:1	
+Kinah	Adadah	~31.1858	~34.96745	Josh 15:22	
+King's Highway	Kir	~31.18132579594509	~35.70214779044711	Num 20:17, Num 21:22	
+King's Pool	Jerusalem	<31.777444	<35.234935	Neh 2:14	
+King's Valley	Jerusalem	~31.777444	~35.234935	Gen 14:17, 2 Sam 18:18	
+Kir		31.18132579594509	35.70214779044711	2 Kgs 16:9, Isa 15:1, Isa 22:6, Amos 1:5, Amos 9:7	
+Kir-hareseth	Kir	31.18132579594509	35.70214779044711	2 Kgs 3:25, Isa 16:7, Isa 16:11, Jer 48:31, Jer 48:36	
+Kiriathaim 1		31.58333333329998	35.70000000000012	Num 32:37, Josh 13:19, Jer 48:1, Jer 48:23, Ezek 25:9	
+Kiriathaim 2	Hammath	~33.125828	~35.165000	1 Chr 6:76	
+Kiriath-arba	Hebron	31.53577362133176	35.09409986578734	Gen 23:2, Gen 35:27, Josh 14:15, Josh 15:13, Josh 15:54, Josh 20:7, Josh 21:11, Judg 1:10, Neh 11:25	
+Kiriath-arim	Kiriath-jearim	31.771104?	34.993812?	Ezra 2:25	
+Kiriath-baal	Kiriath-jearim	31.771104?	34.993812?	Josh 15:60, Josh 18:14	
+Kiriath-huzoth	Pisgah	~31.76503129703305	~35.71856575741812	Num 22:39	
+Kiriath-jearim		31.771104?	34.993812?	Josh 9:17, Josh 15:9, Josh 15:60, Josh 18:14, Josh 18:15, Josh 18:28, Judg 18:12, 1 Sam 6:21, 1 Sam 7:1, 1 Sam 7:2, 1 Chr 13:5, 1 Chr 13:6, 2 Chr 1:4, Neh 7:29, Jer 26:20	
+Kiriath-sannah	Debir 1	31.41666959977098	34.96667012280085	Josh 15:49	
+Kiriath-sepher	Debir 1	31.41666959977098	34.96667012280085	Josh 15:15, Josh 15:16, Judg 1:11, Judg 1:12	
+Kishion		32.559061	35.246206	Josh 19:20, Josh 21:28	~
+Kishon		32.761948	35.064096	Judg 4:7, Judg 4:13, Judg 5:21, 1 Kgs 18:40, Ps 83:9	river
+Kitron		32.753141	35.279335	Judg 1:30	
+Kittim	Cyprus	35.018306	33.207693	Num 24:24, Dan 11:30	
+Koa	Ecbatana	>34.798311	>48.514966	Ezek 23:23	http://www.answers.com/topic/mede
+Kue	Tarsus	>36.91802695356275	>34.89153398422567	1 Kgs 10:28, 2 Chr 1:16	from tyndale
+Laban	Ashnah	~31.8099	~34.9365	Deut 1:1	
+Lachish		31.56485056116292	34.8467256730566	Josh 10:3, Josh 10:5, Josh 10:23, Josh 10:31, Josh 10:32, Josh 10:33, Josh 10:34, Josh 10:35, Josh 12:11, Josh 15:39, 2 Kgs 14:19, 2 Kgs 18:14, 2 Kgs 18:17, 2 Kgs 19:8, 2 Chr 11:9, 2 Chr 25:27, 2 Chr 32:9, Neh 11:30, Isa 36:2, Isa 37:8, Jer 34:7, Mic 1:13	
+Lahmam		31.566667	34.900000	Josh 15:40	~
+Laish	Dan	33.24865997897308	35.65248345039043	Judg 18:7, Judg 18:14, Judg 18:27, Judg 18:29	
+Laishah		31.800000	35.250000	Isa 10:30	now Isawiya
+Lakkum	Mount Tabor	~32.68695640243183	~35.39091304299688	Josh 19:33	
+Laodicea		37.76986723761415	29.06450110237073	Col 2:1, Col 4:13, Col 4:15, Col 4:16, Rev 1:11, Rev 3:14	
+Lasea		34.93491734364034	24.80919899172515	Acts 27:8	
+Lasha		31.718148	35.584826	Gen 10:19	http://www.christusrex.org/www1/ofm/mad/sections/section3.html
+Lasharon		32.725440	35.467002	Josh 12:18	now Sharona
+Lebanon		>33.752479	>35.590804	Deut 1:7, Deut 3:25, Deut 11:24, Josh 1:4, Josh 9:1, Josh 13:5, Josh 13:6, Judg 9:15, 1 Kgs 4:33, 1 Kgs 5:6, 1 Kgs 5:9, 1 Kgs 5:14, 1 Kgs 9:19, 2 Kgs 14:9, 2 Kgs 19:23, 2 Chr 2:8, 2 Chr 2:16, 2 Chr 8:6, 2 Chr 25:18, Ezra 3:7, Ps 29:5, Ps 29:6, Ps 72:16, Ps 92:12, Ps 104:16, Sng 3:9, Sng 4:8, Sng 4:11, Sng 4:15, Sng 5:15, Sng 7:4, Isa 2:13, Isa 10:34, Isa 14:8, Isa 29:17, Isa 33:9, Isa 35:2, Isa 37:24, Isa 40:16, Isa 60:13, Jer 18:14, Jer 22:6, Jer 22:20, Jer 22:23, Ezek 17:3, Ezek 27:5, Ezek 31:3, Ezek 31:15, Ezek 31:16, Hos 14:5, Hos 14:6, Hos 14:7, Nahum 1:4, Hab 2:17, Zech 10:10, Zech 11:1	region
+Lebaoth	Madmannah	~31.391668	~34.940502	Josh 15:32	
+Leb-kamai	Ur	>30.9620520474569	>46.10374195774169	Jer 51:1	
+Lebo-hamath	Hamath	35.136204	36.749488	Num 13:21, Num 34:8, Josh 13:5, Judg 3:3, 1 Kgs 8:65, 2 Kgs 14:25, 1 Chr 13:5, 2 Chr 7:8, Ezek 47:15, Ezek 47:20, Ezek 48:1, Amos 6:14	
+Lebonah		32.070770	35.239871	Judg 21:19	now al-Lubban
+Lehem	Bethlehem 1	31.70536129174666	35.21026630105202	1 Chr 4:22	?
+Lehi	Beth-shemesh 1	~31.75274835811488	~34.97660913147738	Judg 15:9, Judg 15:14, Judg 15:19, 2 Sam 23:11	
+Leshem	Dan	33.24865997897308	35.65248345039043	Josh 19:47	
+Libnah 1	Lachish	~31.56485056116292	~34.8467256730566	Josh 10:29, Josh 10:31, Josh 10:32, Josh 10:39, Josh 12:15, Josh 15:42, Josh 21:13, 2 Kgs 8:22, 2 Kgs 19:8, 2 Kgs 23:31, 2 Kgs 24:18, 1 Chr 6:57, 2 Chr 21:10, Isa 37:8, Jer 52:1	
+Libnah 2	Ashnah	~31.8099	~34.9365	Num 33:20, Num 33:21	
+Libya	Cyrene	>32.824979	>21.858301	Ezek 30:5, Acts 2:10	
+Lod		31.95138888888889	34.89527777777778	1 Chr 8:12, Ezra 2:33, Neh 7:37, Neh 11:35	
+Lo-debar		32.662488	35.783568	2 Sam 9:4, 2 Sam 9:5, 2 Sam 17:27, Amos 6:13	
+Lower Beth-horon		31.87892595986906	35.12356744466153	Josh 16:3, Josh 18:13, 1 Kgs 9:17, 2 Chr 8:5	
+Lower and Upper Beth-horon	Lower Beth-horon	31.87892595986906	35.12356744466153	1 Chr 7:24	
+Lud	Lod	31.95138888888889	34.89527777777778	Isa 66:19, Jer 46:9, Ezek 27:10, Ezek 30:5	
+Luhith	Horonaim	~31.288056	~35.515000	Isa 15:5, Jer 48:5	
+Luz 1	Bethel 1	31.93053920580005	35.22103274923676	Gen 28:19, Gen 35:6, Gen 48:3, Josh 16:2, Josh 18:13, Judg 1:23	
+Luz 2		37?	36.57?	Judg 1:26	~
+Lycaonia	Iconium	>37.88353038890398	>32.4942625657248	Acts 14:6	region
+Lycia	Patara	>36.27471786927205	>29.3186378339052	Acts 27:5	region
+Lydda	Lod	31.95138888888889	34.89527777777778	Acts 9:32, Acts 9:35, Acts 9:38	
+Lystra		37.57813498250009	32.45318282875567	Acts 14:6, Acts 14:8, Acts 14:21, Acts 16:1, Acts 16:2, 2 Tim 3:11	
+Maacah	Aram-maacah	~33.2	~36.5	2 Sam 10:6, 2 Sam 10:8, 2 Sam 23:34, 1 Chr 19:7	
+Maacath	Aram-maacah	~33.2	~36.5	Josh 13:13	
+Maarath		31.621003	35.102328	Josh 15:59	now Bayt Ummar
+Maareh-geba	Gibeah 1	~31.82378102460309	~35.23100936128631	Judg 20:33	
+Macedonia	Thessalonica	>40.632155565205	>22.9320868699276	Acts 16:9, Acts 16:10, Acts 16:12, Acts 18:5, Acts 19:21, Acts 19:22, Acts 20:1, Acts 20:3, Rom 15:26, 1 Cor 16:5, 2 Cor 1:16, 2 Cor 2:13, 2 Cor 7:5, 2 Cor 8:1, 2 Cor 9:2, 2 Cor 11:9, Phil 4:15, 1 Thes 1:7, 1 Thes 1:8, 1 Thes 4:10, 1 Tim 1:3	region
+Machpelah		31.52464794555393	35.11073465087356	Gen 23:9, Gen 23:17, Gen 23:19, Gen 25:9, Gen 49:30, Gen 50:13	
+Madmannah		31.391668	34.940502	Josh 15:31, 1 Chr 2:49	
+Madmen	Dibon 1	31.49684513710609	35.78284105296996	Jer 48:2	
+Madmenah	Gebim	~31.800000	~35.250000	Isa 10:31	
+Madon		32.799879	35.459506	Josh 11:1, Josh 12:19	
+Magadan		32.84733494629723	35.5229361797708	Matt 15:39	
+Magog	Gog	~>46	~>47	Ezek 38:2, Ezek 39:6, Rev 20:8	
+Mahalab	Ahlab	33.02498036359259	35.44544657992798	Josh 19:29	
+Mahanaim		32.214708?	35.632914?	Gen 32:2, Josh 13:26, Josh 13:30, Josh 21:38, 2 Sam 2:8, 2 Sam 2:12, 2 Sam 2:29, 2 Sam 17:24, 2 Sam 17:27, 2 Sam 19:32, 1 Kgs 2:8, 1 Kgs 4:14, 1 Chr 6:80	
+Mahaneh-dan		31.758315	34.994252	Judg 13:25, Judg 18:12	~
+Makaz	Shaalbim	~31.870364	~34.981728	1 Kgs 4:9	
+Makheloth	Mount Hor 1	~30.317396	~35.407152	Num 33:25, Num 33:26	
+Makkedah		31.935117	34.781326	Josh 10:10, Josh 10:16, Josh 10:17, Josh 10:21, Josh 10:28, Josh 10:29, Josh 12:16, Josh 15:41	~
+Malta		35.85282675242785	14.53243601407711	Acts 28:1	
+Mamre		31.54909871686872	35.09356062020027	Gen 23:17, Gen 23:19, Gen 25:9, Gen 35:27, Gen 49:30, Gen 50:13	
+Manahath		31.752603	35.181972	1 Chr 8:6	now Malha
+Maon		31.41666666666668	35.1166666666667	Josh 15:55, 1 Sam 23:24, 1 Sam 23:25, 1 Sam 25:2	
+Marah		29.350000	32.933333	Ex 15:23, Num 33:8, Num 33:9	~
+Mareal		32.697409	35.241789	Josh 19:11	now Malul
+Mareshah		31.60393321295081	34.90237777777779	Josh 15:44, 2 Chr 11:8, 2 Chr 14:9, 2 Chr 14:10, 2 Chr 20:37, Mic 1:15	
+Maroth	Shaphir	~31.743719	~34.694006	Mic 1:12	
+Mashal	Abdon	~33.046264	~35.172513	1 Chr 6:74	
+Masrekah	Bozrah 1	~30.734691	~35.606250	Gen 36:36, 1 Chr 1:47	
+Massah	Rephidim	~28.73106102564323	~33.84169995726504	Ex 17:7, Deut 6:16, Deut 9:22, Deut 33:8, Ps 95:8	
+Mattanah	Lasha	~31.718148	~35.584826	Num 21:18, Num 21:19	
+Mearah		33.633333	35.433333	Josh 13:4	~
+Meconah	Ain 2	~31.370835	~34.860665	Neh 11:28	
+Medeba		31.72045763248588	35.79197231962891	Num 21:30, Josh 13:9, Josh 13:16, 1 Chr 19:7, Isa 15:2	
+Media	Ecbatana	>34.798311	>48.514966	Ezra 6:2, Est 1:3, Est 1:14, Est 1:18, Est 10:2, Isa 21:2, Jer 25:25, Dan 8:20	
+Megiddo		32.58418313614938	35.18229165870594	Josh 12:21, Josh 17:11, Judg 1:27, Judg 5:19, 1 Kgs 4:12, 1 Kgs 9:15, 2 Kgs 9:27, 2 Kgs 23:29, 2 Kgs 23:30, 1 Chr 7:29, 2 Chr 35:22, Zech 12:11	
+Me-jarkon	Rakkon	~32.132898	~34.788144	Josh 19:46	
+Memphis		29.849632	31.253958	Isa 19:13, Jer 2:16, Jer 44:1, Jer 46:14, Jer 46:19, Ezek 30:13, Ezek 30:16, Hos 9:6	http://en.wikipedia.org/wiki/Memphis%2C_Egypt
+Mephaath		31.850000	35.933333	Josh 13:18, Josh 21:37, 1 Chr 6:79, Jer 48:21	
+Merathaim	Babel	32.53650368616845	44.42088287373876	Jer 50:21	
+Meribah 1	Kadesh-barnea	~30.68771281376111	~34.49479554246946	Num 20:13, Num 20:24, Num 27:14, Ps 81:7, Ps 106:32	
+Meribah 2	Rephidim	~28.73106102564323	~33.84169995726504	Ex 17:7, Deut 33:8, Ps 95:8	
+Meribah-kadesh	Kadesh-barnea	~30.68771281376111	~34.49479554246946	Deut 32:51, Ezek 47:19, Ezek 48:28	
+Merom		33.075269	35.605480	Josh 11:5, Josh 11:7	lake
+Meroz	Mount Tabor	~32.68695640243183	~35.39091304299688	Judg 5:23	
+Mesha		28.857260?	34.859127?	Gen 10:30	~
+Meshech	Gog	>46	>47	Ps 120:5, Ezek 27:13, Ezek 38:2, Ezek 38:3, Ezek 39:1	
+Meshech-Tubal	Gog	>46	>47	Ezek 32:26	
+Mesopotamia	Babel	>32.53650368616845	>44.42088287373876	Gen 24:10, Deut 23:4, Judg 3:8, Judg 3:10, 1 Chr 19:6, Acts 2:9, Acts 7:2	region
+Metheg-ammah	Gath	31.69352950368834	34.84388288576839	2 Sam 8:1	
+Michmas	Michmash	31.87018434231688	35.27923581936973	Ezra 2:27, Neh 7:31	
+Michmash		31.87018434231688	35.27923581936973	1 Sam 13:2, 1 Sam 13:5, 1 Sam 13:11, 1 Sam 13:16, 1 Sam 13:23, 1 Sam 14:5, 1 Sam 14:31, Neh 11:31, Isa 10:28	
+Michmethath		32.183333	35.283333	Josh 16:6, Josh 17:7	~
+Middin		31.743894	35.401591	Josh 15:61	
+Midian		>28.932881	>34.90832	Gen 36:35, Ex 2:15, Ex 2:16, Ex 3:1, Ex 4:19, Ex 18:1, Num 22:4, Num 22:7, Num 25:15, Num 25:18, Num 31:3, Num 31:7, Num 31:8, Num 31:9, Josh 13:21, Judg 6:1, Judg 6:2, Judg 6:6, Judg 6:13, Judg 6:14, Judg 7:1, Judg 7:8, Judg 7:13, Judg 7:14, Judg 7:15, Judg 7:23, Judg 7:25, Judg 8:1, Judg 8:3, Judg 8:5, Judg 8:12, Judg 8:22, Judg 8:26, Judg 8:28, Judg 9:17, 1 Kgs 11:18, 1 Chr 1:46, Ps 83:9, Isa 9:4, Isa 10:26, Isa 60:6, Hab 3:7, Acts 7:29	region
+Migdal-el		33.232131	35.362942	Josh 19:38	
+Migdal-gad		31.666667	34.583333	Josh 15:37	~
+Migdol		30.020296?	32.372233?	Ex 14:2, Num 33:7, Jer 44:1, Jer 46:14, Ezek 29:10, Ezek 30:6	
+Migron	Gibeah 1	~31.82378102460309	~35.23100936128631	1 Sam 14:2, Isa 10:28	
+Miletus		37.5	27.3	Acts 20:15, Acts 20:17, 2 Tim 4:20	
+Millo	Jerusalem	<31.777444	<35.234935	2 Sam 5:9, 1 Kgs 9:15, 1 Kgs 9:24, 1 Kgs 11:27, 1 Chr 11:8, 2 Chr 32:5	
+Minni	Ashkenaz	~40.6	~44.6	Jer 51:27	
+Minnith		31.750000	35.850000	Judg 11:33, Ezek 27:17	~
+Mishal	Abdon	~33.046264	~35.172513	Josh 19:26, Josh 21:30	
+Misrephoth-maim		33.118952	35.139434	Josh 11:8, Josh 13:6	now Narouq
+Mithkah	Mount Hor 1	~30.317396	~35.407152	Num 33:28, Num 33:29	
+Mitylene		39.10033557286295	26.55180477541001	Acts 20:14	
+Mizpah 1	Ramoth-gilead	32.56526757366849	36.00555930879645	Gen 31:49, Judg 10:17, Judg 11:11, Judg 11:29, Judg 11:34, Hos 5:1	
+Mizpah 2	Valley of Mizpeh	33.281770	35.573371	Josh 11:3	
+Mizpah 3		31.83273947023218	35.1801628605877	Judg 20:1, Judg 20:3, Judg 21:1, Judg 21:5, Judg 21:8, 1 Sam 7:5, 1 Sam 7:6, 1 Sam 7:7, 1 Sam 7:11, 1 Sam 7:12, 1 Sam 7:16, 1 Sam 10:17,1 Kgs 15:22, 2 Kgs 25:23, 2 Kgs 25:25, 2 Chr 16:6, Neh 3:7, Neh 3:15, Neh 3:19, Jer 40:6, Jer 40:8, Jer 40:10, Jer 40:12, Jer 40:13, Jer 40:15, Jer 41:1, Jer 41:3, Jer 41:6, Jer 41:10, Jer 41:14, Jer 41:16	
+Mizpeh 1	Mizpah 3	31.83273947023218	35.1801628605877	Josh 18:26	
+Mizpeh 2	Lachish	~31.56485056116292	~34.8467256730566	Josh 15:38	
+Mizpeh 3	Kir	31.18132579594509	35.70214779044711	1 Sam 22:3	
+Moab	Dibon 1	>31.49684513710609	>35.78284105296996	Gen 36:35, Ex 15:15, Num 21:11, Num 21:13, Num 21:15, Num 21:20, Num 21:26, Num 21:28, Num 21:29, Num 22:1, Num 22:3, Num 22:4, Num 22:7, Num 22:8, Num 22:10, Num 22:14, Num 22:21, Num 22:36, Num 23:6, Num 23:7, Num 23:17, Num 24:17, Num 25:1, Num 26:3, Num 26:63, Num 31:12, Num 33:44, Num 33:48, Num 33:49, Num 33:50, Num 35:1, Num 36:13, Deut 1:5, Deut 2:8, Deut 2:9, Deut 2:18, Deut 29:1, Deut 32:49, Deut 34:1, Deut 34:5, Deut 34:6, Deut 34:8, Josh 13:32, Josh 24:9, Judg 3:12, Judg 3:14, Judg 3:15, Judg 3:17, Judg 3:30, Judg 10:6, Judg 11:15, Judg 11:17, Judg 11:18, Judg 11:25, Ruth 1:1, Ruth 1:2, Ruth 1:6, Ruth 1:22, Ruth 2:6, Ruth 4:3, 1 Sam 12:9, 1 Sam 14:47, 1 Sam 22:3, 1 Sam 22:4, 2 Sam 8:2, 2 Sam 8:12, 2 Sam 23:20, 1 Kgs 11:7, 1 Kgs 11:33, 2 Kgs 1:1, 2 Kgs 3:4, 2 Kgs 3:5, 2 Kgs 3:7, 2 Kgs 3:10, 2 Kgs 3:13, 2 Kgs 3:23, 2 Kgs 3:26, 2 Kgs 23:13, 1 Chr 1:46, 1 Chr 4:22, 1 Chr 8:8, 1 Chr 11:22, 1 Chr 18:2, 1 Chr 18:11, 2 Chr 20:10, 2 Chr 20:22, 2 Chr 20:23, Neh 13:23, Ps 60:8, Ps 83:6, Ps 108:9, Isa 11:14, Isa 15:1, Isa 15:2, Isa 15:4, Isa 15:5, Isa 15:8, Isa 15:9, Isa 16:2, Isa 16:4, Isa 16:6, Isa 16:7, Isa 16:11, Isa 16:12, Isa 16:13, Isa 16:14, Isa 25:10, Jer 9:26, Jer 25:21, Jer 27:3, Jer 40:11, Jer 48:1, Jer 48:2, Jer 48:4, Jer 48:9, Jer 48:11, Jer 48:13, Jer 48:15, Jer 48:16, Jer 48:18, Jer 48:20, Jer 48:24, Jer 48:25, Jer 48:26, Jer 48:28, Jer 48:29, Jer 48:31, Jer 48:33, Jer 48:35, Jer 48:36, Jer 48:38, Jer 48:39, Jer 48:40, Jer 48:41, Jer 48:42, Jer 48:43, Jer 48:44, Jer 48:45, Jer 48:46, Jer 48:47, Ezek 25:8, Ezek 25:9, Ezek 25:11, Dan 11:41, Amos 2:1, Amos 2:2, Mic 6:5, Zeph 2:8, Zeph 2:9	
+Moladah		31.162327	35.057114	Josh 15:26, Josh 19:2, 1 Chr 4:28, Neh 11:26	
+Moreh 1	Shechem	~32.21369123124062	~35.2817986718367	Gen 12:6, Deut 11:30	
+Moreh 2		32.61773063505183	35.35737645291343	Judg 7:1	
+Moresheth	Mareshah	~31.60393321295081	~34.90237777777779	Jer 26:18, Mic 1:1	
+Moresheth-gath	Mareshah	~31.60393321295081	~34.90237777777779	Mic 1:14	
+Moriah	Mount Moriah	31.77759385009378	35.23525140955081	Gen 22:2	
+Mortar	Jerusalem	<31.777444	<35.234935	Zeph 1:11	
+Moserah	Mount Hor 1	~30.317396	~35.407152	Deut 10:6	
+Moseroth	Mount Hor 1	~30.317396	~35.407152	Num 33:30, Num 33:31	
+Most Holy		?	?	Ex 26:33	mobile
+Most Holy Place 1		?	?	Ex 26:34	mobile
+Most Holy Place 2	Jerusalem	<31.777444	<35.234935	1 Kgs 6:16, 1 Kgs 7:50, 1 Kgs 8:6, 1 Chr 6:49, 2 Chr 3:8, 2 Chr 3:10, 2 Chr 4:22, 2 Chr 5:7, Ezek 41:4, Ezek 45:3, Heb 9:3	
+Mount	Mount of Olives	31.77809503341373	35.2471976093501	Zech 14:4	
+Mount Baal-hermon	Mount Hermon	33.41615982399708	35.85725617635589	Judg 3:3	
+Mount Baalah	Jabneel 1	~31.865518	~34.746856	Josh 15:11	
+Mount Carmel		32.729350157734	35.04978957235391	1 Kgs 18:19, 1 Kgs 18:20, 1 Kgs 18:42, 2 Kgs 2:25, 2 Kgs 4:25	
+Mount Ebal		32.23293813761263	35.27304180036391	Deut 11:29, Deut 27:4, Deut 27:13, Josh 8:30, Josh 8:33	
+Mount Ephraim	Mount Ebal	32.23293813761263	35.27304180036391	Jer 4:15	?
+Mount Ephron		~31.675746	~35.042407	Josh 15:9	
+Mount Esau	Bozrah 1	>30.734691	>35.606250	Obad 1:8, Obad 1:9, Obad 1:19, Obad 1:21	
+Mount Gerizim		32.19956174365378	35.27285228460234	Deut 11:29, Deut 27:12, Josh 8:33, Judg 9:7	
+Mount Gilboa		32.50984080716704	35.40843470396692	1 Sam 31:1, 1 Sam 31:8, 2 Sam 1:6, 1 Chr 10:1, 1 Chr 10:8	
+Mount Gilead	Mount Gilboa	32.50984080716704	35.40843470396692	Judg 7:3	
+Mount Halak		30.916667	34.833333	Josh 11:17, Josh 12:7	?; http://www.bibleorigins.net/MountHalakGebelHalaqMap.html
+Mount Heres	Beth-shemesh 1	31.75274835811488	34.97660913147738	Judg 1:35	
+Mount Hermon		33.41615982399708	35.85725617635589	Deut 3:8, Josh 11:17, Josh 12:1, Josh 12:5, Josh 13:5, Josh 13:11, 1 Chr 5:23	
+Mount Hor 1		30.317396	35.407152	Num 20:22, Num 20:23, Num 20:25, Num 20:27, Num 21:4, Num 33:37, Num 33:38, Num 33:39, Num 33:41, Deut 32:50	
+Mount Hor 2		~35.710069	~36.188080	Num 34:7, Num 34:8	
+Mount Horeb	Mount Sinai	28.539722	33.973333	Ex 33:6	
+Mount Jearim	Chesalon	31.781049	35.051130	Josh 15:10	
+Mount Lebanon	Lebanon	>33.752479	>35.590804	Judg 3:3	
+Mount Mizar	Mount Hermon	~33.41615982399708	~35.85725617635589	Ps 42:6	
+Mount Moriah		31.77759385009378	35.23525140955081	2 Chr 3:1	
+Mount Nebo		31.76135780447535	35.74614824478083	Deut 32:49, Deut 34:1	
+Mount Paran	Paran	<~29.151667	<~33.541944	Deut 33:2, Hab 3:3	
+Mount Perazim	Valley of Rephaim	~31.756332	~35.223059	Isa 28:21	
+Mount Seir 1	Bozrah 1	>30.734691	>35.606250	Deut 1:2, Deut 2:1, Deut 2:5, 1 Chr 4:42, 2 Chr 20:10, 2 Chr 20:22, 2 Chr 20:23, Ezek 35:2, Ezek 35:3, Ezek 35:7, Ezek 35:15	mountain range
+Mount Seir 2		31.783333	34.994000	Josh 15:10	
+Mount Shepher	Mount Hor 1	~30.317396	~35.407152	Num 33:23, Num 33:24	
+Mount Sinai		28.539722	33.973333	Ex 19:11, Ex 19:18, Ex 19:20, Ex 19:23, Ex 24:16, Ex 31:18, Ex 34:2, Ex 34:4, Ex 34:29, Ex 34:32, Lev 7:38, Lev 25:1, Lev 26:46, Lev 27:34, Num 3:1, Num 28:6, Neh 9:13, Acts 7:30, Acts 7:38, Gal 4:24, Gal 4:25	
+Mount Sirion	Mount Hermon	33.41615982399708	35.85725617635589	Deut 4:48	
+Mount Tabor		32.68695640243183	35.39091304299688	Judg 4:6, Judg 4:12, Judg 4:14	
+Mount Zalmon	Mount Ebal	32.23293813761263	35.27304180036391	Judg 9:48	
+Mount Zemaraim	Zemaraim	31.910999	35.457280	2 Chr 13:4	
+Mount Zion	Jerusalem	<31.777444	<35.234935	2 Kgs 19:31, Ps 48:2, Ps 48:11, Ps 74:2, Ps 78:68, Ps 125:1, Isa 4:5, Isa 8:18, Isa 10:12, Isa 18:7, Isa 24:23, Isa 29:8, Isa 31:4, Isa 37:32, Lam 5:18, Joel 2:32, Obad 1:17, Obad 1:21, Mic 4:7, Heb 12:22, Rev 14:1	
+Mount of Olives		31.77809503341373	35.2471976093501	2 Sam 15:30, Zech 14:4, Matt 21:1, Matt 24:3, Matt 26:30, Mark 11:1, Mark 13:3, Mark 14:26, Luke 19:37, Luke 22:39, John 8:1	
+Mozah		31.802641	35.158376	Josh 18:26	~
+Muster Gate	Jerusalem	<31.777444	<35.234935	Neh 3:31	
+Myra		36.2307717908834	30.01145882074154	Acts 27:5	
+Mysia	Troas	~39.50664305923271	~26.08059270470616	Acts 16:7, Acts 16:8	
+Naamah		31.871782	34.871894	Josh 15:41	
+Naarah	Naaran	31.949518	35.458730	Josh 16:7	
+Naaran		31.949518	35.458730	1 Chr 7:28	~
+Nahalal	Nahalol	32.722209	35.352820	Josh 19:15, Josh 21:35	
+Nahaliel	Lasha	31.718148	35.584826	Num 21:19	?
+Nahalol		32.722209	35.352820	Judg 1:30	
+Nain		32.63083336680386	35.34782689102158	Luke 7:11	
+Naioth	Mizpah 3	~31.83273947023218	~35.1801628605877	1 Sam 19:18, 1 Sam 19:19, 1 Sam 19:22, 1 Sam 19:23, 1 Sam 20:1	
+Naphath	Megiddo	~32.58418313614938	~35.18229165870594	Josh 17:11	
+Naphath-dor	Dor	32.61323618394521	34.91889683434057	Josh 12:23, 1 Kgs 4:11	
+Naphish	Golan	<>32.80007552505443	<>35.93730130476259	1 Chr 5:19	
+Naphoth-dor	Dor	32.61323618394521	34.91889683434057	Josh 11:2	
+Nazareth		32.70674542474383	35.30152807767973	Matt 2:23, Matt 4:13, Matt 21:11, Matt 26:71, Mark 1:9, Mark 1:24, Mark 10:47, Mark 16:6, Luke 1:26, Luke 2:4, Luke 2:39, Luke 2:51, Luke 4:16, Luke 4:34, Luke 18:37, Luke 24:19, John 1:45, John 1:46, John 18:5, John 18:7, John 19:19, Acts 2:22, Acts 3:6, Acts 4:10, Acts 6:14, Acts 10:38, Acts 22:8, Acts 26:9	
+Neah	Neiel	32.894254	35.221877	Josh 19:13	
+Neapolis		40.94413199321298	24.41767995412326	Acts 16:11	
+Nebaioth	Sela	>30.32243571223214	>35.45627946919968	Isa 60:7	(Nabateans ~ Petra)
+Neballat		31.992079	34.957563	Neh 11:34	now Bayt Nabala
+Nebo 1		31.748024	35.743257	Num 32:3, Num 32:38, Num 33:47, 1 Chr 5:8, Isa 15:2, Jer 48:1, Jer 48:22	from harper; now El Mekhaiyat
+Nebo 2		31.606256	35.037417	Ezra 2:29, Ezra 10:43, Neh 7:33	
+Negeb		>30.3	>34.2	Gen 12:9, Gen 13:1, Gen 13:3, Gen 20:1, Gen 24:62, Num 13:17, Num 13:22, Num 13:29, Num 21:1, Num 33:40, Deut 1:7, Deut 34:3, Josh 10:40, Josh 11:16, Josh 12:8, Josh 15:19, Josh 19:8, Judg 1:9, Judg 1:15, Judg 1:16, 1 Sam 27:10, 1 Sam 30:1, 1 Sam 30:14, 1 Sam 30:27, 2 Sam 24:7, 2 Chr 28:18, Ps 126:4, Isa 21:1, Isa 30:6, Jer 13:19, Jer 17:26, Jer 32:44, Jer 33:13, Ezek 20:46, Ezek 20:47, Obad 1:19, Obad 1:20	
+Nehelam		?	?	Jer 29:24, Jer 29:31, Jer 29:32	
+Neiel		32.894254	35.221877	Josh 19:27	~; now Yenin
+Nephtoah		31.683036	35.167987	Josh 15:9, Josh 18:15	~
+Netaim	Gederah	~31.823337	~34.777779	1 Chr 4:23	
+Netophah		31.735465	35.220503	2 Sam 23:28, 2 Sam 23:29, 1 Chr 11:30, 1 Chr 27:13, Ezra 2:22, Neh 7:26	~
+New Gate	Jerusalem	<31.777444	<35.234935	Jer 26:10, Jer 36:10	
+Nezib		31.588050	34.992389	Josh 15:43	
+Nibshan	Engedi	~31.46152536164766	~35.39241108242345	Josh 15:62	
+Nicopolis		39.024033	20.735730	Titus 3:12	
+Nile		30.092632	31.230987	Gen 41:1, Gen 41:2, Gen 41:3, Gen 41:17, Gen 41:18, Ex 1:22, Ex 4:9, Ex 7:15, Ex 7:17, Ex 7:18, Ex 7:20, Ex 7:21, Ex 7:24, Ex 7:25, Ex 8:3, Ex 8:9, Ex 8:11, Ex 17:5, 1 Chr 13:5, Isa 19:6, Isa 19:7, Isa 19:8, Isa 23:3, Isa 23:10, Jer 2:18, Jer 46:7, Jer 46:8, Ezek 29:3, Ezek 29:9, Ezek 30:12, Amos 8:8, Amos 9:5, Nahum 3:8, Zech 10:11	
+Nimrah	Beth-nimrah	31.900811	35.625693	Num 32:3	
+Nimrim		31.133191	35.531138	Isa 15:6, Jer 48:34	from harper; now Numeira
+Nimrod	Babel	>32.53650368616845	>44.42088287373876	Mic 5:6	figurative
+Nineveh		36.359410	43.152887	Gen 10:11, Gen 10:12, 2 Kgs 19:36, Isa 37:37, Jonah 1:2, Jonah 3:2, Jonah 3:3, Jonah 3:4, Jonah 3:5, Jonah 3:6, Jonah 3:7, Jonah 4:11, Nahum 1:1, Nahum 2:8, Nahum 3:7, Zeph 2:13, Matt 12:41, Luke 11:30, Luke 11:32	Nineveh in KML
+Nob		31.799605	35.232980	1 Sam 21:1, 1 Sam 22:9, 1 Sam 22:11, 1 Sam 22:19, Neh 11:32, Isa 10:32	~
+Nobah	Kenath	32.756919	36.616400	Num 32:42, Judg 8:11	
+Nod		?	?	Gen 4:16	
+Nodab	Golan	<>32.80007552505443	<>35.93730130476259	1 Chr 5:19	
+Nohah	Manahath	31.752603	35.181972	Judg 20:43	?
+Nophah	Kenath	32.756919	36.616400	Num 21:30	
+Oboth	Dibon 1	~31.49684513710609	~35.78284105296996	Num 21:10, Num 21:11, Num 33:43, Num 33:44	
+Olivet	Mount of Olives	31.77809503341373	35.2471976093501	Luke 19:29, Luke 21:37, Acts 1:12	
+On		30.108086	31.338220	Gen 41:45, Gen 41:50, Gen 46:20, Ezek 30:17	
+Ono		32.02222222222223	34.86666666666667	1 Chr 8:12, Ezra 2:33, Neh 6:2, Neh 7:37, Neh 11:35	
+Ophel	Jerusalem	<31.777444	<35.234935	2 Chr 27:3, 2 Chr 33:14, Neh 3:26, Neh 3:27, Neh 11:21	
+Ophir	India	>22	>77	1 Kgs 9:28, 1 Kgs 10:11, 1 Kgs 22:48, 1 Chr 29:4, 2 Chr 8:18, 2 Chr 9:10, Job 22:24, Job 28:16, Ps 45:9, Isa 13:12	
+Ophni		31.961989	35.215483	Josh 18:24	
+Ophrah 1		31.95378955858199	35.29913577541004	Josh 18:23, 1 Sam 13:17	
+Ophrah 2		32.60868269540592	35.28826433084549	Judg 6:11, Judg 6:24, Judg 8:27, Judg 8:32, Judg 9:5	
+Paddan	Haran	>36.86386407659651	>39.03219672227345	Gen 48:7	
+Paddan-aram	Haran	>36.86386407659651	>39.03219672227345	Gen 25:20, Gen 28:2, Gen 28:5, Gen 28:6, Gen 28:7, Gen 31:18, Gen 33:18, Gen 35:9, Gen 35:26, Gen 46:15	
+Pai	Bozrah 1	<>30.734691	<>35.606250	1 Chr 1:50	
+Pamphylia	Perga	>37.00520811721595	>30.90494591606115	Acts 2:10, Acts 13:13, Acts 14:24, Acts 15:38, Acts 27:5	
+Paphos		34.75410576175517	32.40016213313376	Acts 13:6, Acts 13:13	
+Parah		31.833333	35.300000	Josh 18:23	~
+Paran		~29.151667	~33.541944	Gen 21:21, Num 10:12, Num 12:16, Num 13:3, Num 13:26, Deut 1:1, 1 Sam 25:1, 1 Kgs 11:18	
+Parvaim		?	?	2 Chr 3:6	
+Pas-dammim	Ephes-dammim	31.691186	34.944496	1 Chr 11:13	
+Patara		36.27471786927205	29.3186378339052	Acts 21:1	
+Pathros		>28.322364	>30.692312	Isa 11:11, Jer 44:1, Jer 44:15, Ezek 29:14, Ezek 30:14	region
+Patmos		37.307520	26.548274	Rev 1:9	
+Pau	Bozrah 1	<>30.734691	<>35.606250	Gen 36:39	
+Pekod	Babel	32.53650368616845	44.42088287373876	Jer 50:21, Ezek 23:23	
+Pelusium	Sin	>28.838778	>33.420573	Ezek 30:15, Ezek 30:16	
+Peniel		32.1843727808126	35.70287002746794	Gen 32:30	
+Penuel	Peniel	32.1843727808126	35.70287002746794	Gen 32:31, Judg 8:8, Judg 8:9, Judg 8:17, 1 Kgs 12:25	
+People's Gate	Jerusalem	<31.777444	<35.234935	Jer 17:19	
+Peor	Pisgah	~31.76503129703305	~35.71856575741812	Num 23:28, Num 25:3, Num 25:5, Num 25:18, Num 31:16, Deut 4:3, Josh 22:17, Ps 106:28	
+Perez-uzza	Jerusalem	~31.777444	~35.234935	1 Chr 13:11	
+Perez-uzzah	Jerusalem	~31.777444	~35.234935	2 Sam 6:8	?
+Perga		37.00520811721595	30.90494591606115	Acts 13:13, Acts 13:14, Acts 14:25	
+Pergamum		39.11894592031751	27.16512610475739	Rev 1:11, Rev 2:12	
+Persia	Ecbatana	>34.798311	>48.514966	2 Chr 36:20, 2 Chr 36:22, 2 Chr 36:23, Ezra 1:1, Ezra 1:2, Ezra 1:8, Ezra 3:7, Ezra 4:3, Ezra 4:5, Ezra 4:7, Ezra 4:24, Ezra 6:14, Ezra 7:1, Ezra 9:9, Est 1:3, Est 1:14, Est 1:18, Est 10:2, Ezek 27:10, Ezek 38:5, Dan 8:20, Dan 10:1, Dan 10:13, Dan 10:20, Dan 11:2	
+Pethor		36.654616	38.068879	Num 22:5, Deut 23:4	http://www.aushariye.hum.ku.dk/images/large/fig-01.htm
+Pharpar		33.379601	36.306085	2 Kgs 5:12	river
+Philadelphia		38.34904803135629	28.51946209047604	Rev 1:11, Rev 3:7	
+Philippi		41.0119594798466	24.28619097780519	Acts 16:12, Acts 20:6, Phil 1:1, 1 Thes 2:2	
+Philistia	Sidon	>33.56316734135746	>35.36634649354799	Ex 15:14, Ps 60:8, Ps 83:7, Ps 87:4, Ps 108:9, Isa 14:29, Isa 14:31, Joel 3:4, Zech 9:6	
+Phoenicia	Sidon	>33.56316734135746	>35.36634649354799	Acts 11:19, Acts 15:3, Acts 21:2	
+Phoenix		35.1988857652248	24.08098202270813	Acts 27:12	
+Phrygia	Laodicea	~37.76986723761415	~29.06450110237073	Acts 2:10, Acts 16:6, Acts 18:23	
+Pi-beseth		30.583333	31.500000	Ezek 30:17	~
+Pi-hahiroth		29.94658?	32.425144?	Ex 14:2, Ex 14:9, Num 33:7	
+Pirathon		32.286022	35.022944	Judg 12:15, 2 Sam 23:30, 1 Chr 11:31, 1 Chr 27:14	now Faroun
+Pisgah		31.76503129703305	35.71856575741812	Num 21:20, Num 23:14, Deut 3:17, Deut 3:27, Deut 4:49, Deut 34:1, Josh 12:3, Josh 13:20	
+Pishon		?	?	Gen 2:11	
+Pisidia	Antioch 2	~38.31643056393041	~31.17948683048973	Acts 13:14, Acts 14:24	
+Pithom		30.59385132817632	32.18555803140015	Ex 1:11	
+Place of a Skull	Jerusalem	~31.777444	~35.234935	Matt 27:33, Mark 15:22	
+Plain	Jericho	>31.87060143818292	>35.44386371224434	Deut 34:3	
+Pontus		>40.905222	>37.799969	Acts 2:9, Acts 18:2, 1 Pet 1:1	region
+Pool of Shelah	Jerusalem	<31.777444	<35.234935	Neh 3:15	
+Potsherd Gate	Jerusalem	<31.777444	<35.234935	Jer 19:2	
+Ptolemais	Acco	32.927583	35.081555	Acts 21:7	
+Pul	Cyrene	>32.824979	>21.858301	Isa 66:19	
+Punon	Dibon 1	~31.49684513710609	~35.78284105296996	Num 33:42, Num 33:43	
+Put	Cyrene	>32.824979	>21.858301	Jer 46:9, Ezek 27:10, Ezek 30:5, Ezek 38:5, Nahum 3:9	?
+Puteoli		40.83563065297087	14.2677438666742	Acts 28:13	
+Raamah		~15.68	~42.78	Ezek 27:22	?
+Raamses	Pithom	~30.59385132817632	~32.18555803140015	Ex 1:11	
+Rabbah	Ammon	31.95018855468469	35.92413135872749	Deut 3:11, Josh 13:25, Josh 15:60, 2 Sam 11:1, 2 Sam 12:26, 2 Sam 12:27, 2 Sam 12:29, 2 Sam 17:27, 1 Chr 20:1, Jer 49:2, Jer 49:3, Ezek 21:20, Ezek 25:5, Amos 1:14	
+Rabbith		32.391416	35.377302	Josh 19:20	
+Racal	Carmel	31.43333151674604	35.13333188530802	1 Sam 30:29	
+Rahab	On	>30.108086	>31.338220	Job 9:13, Job 26:12, Ps 87:4, Ps 89:10, Isa 30:7, Isa 51:9	
+Rakkath	Tiberias	32.79553799444466	35.52922039819518	Josh 19:35	
+Rakkon		32.132898	34.788144	Josh 19:46	~
+Ramah 1		31.89637863532434	35.20173068977705	Josh 18:25, Josh 19:8, Judg 4:5, Judg 19:13, 1 Kgs 15:17, 1 Kgs 15:21, 1 Kgs 15:22, 2 Chr 16:1, 2 Chr 16:5, 2 Chr 16:6, Ezra 2:26, Neh 7:30, Neh 11:33, Isa 10:29, Jer 31:15, Jer 40:1, Hos 5:8, Matt 2:18	
+Ramah 2		33.111078	35.310464	Josh 19:29	
+Ramah 3		32.939010	35.368123	Josh 19:36	
+Ramah 4	Mizpah 3	31.83273947023218	35.1801628605877	1 Sam 1:19, 1 Sam 2:11, 1 Sam 7:17, 1 Sam 8:4, 1 Sam 15:34, 1 Sam 16:13, 1 Sam 19:18, 1 Sam 19:19, 1 Sam 19:22, 1 Sam 19:23, 1 Sam 20:1, 1 Sam 25:1, 1 Sam 28:3	
+Ramah 5	Ramoth-gilead	32.56526757366849	36.00555930879645	2 Kgs 8:29, 2 Chr 22:6	
+Ramathaim-zophim	Mizpah 3	31.83273947023218	35.1801628605877	1 Sam 1:1	
+Ramath-lehi	Beth-shemesh 1	~31.75274835811488	~34.97660913147738	Judg 15:17	
+Ramath-mizpeh	Ramoth-gilead	32.56526757366849	36.00555930879645	Josh 13:26	
+Rameses		30.799370210096	31.834216685474	Gen 47:11, Ex 12:37, Num 33:3, Num 33:5	
+Ramoth 1	Jezreel 2	~32.5559631396043	~35.33078927843792	1 Chr 6:73, 1 Chr 6:80	
+Ramoth 2	Baalath-beer	32.049953	35.733402	1 Sam 30:27	
+Ramoth 3	Ramoth-gilead	32.56526757366849	36.00555930879645	Deut 4:43, Josh 20:8, Josh 21:38	
+Ramoth-gilead		32.56526757366849	36.00555930879645	1 Kgs 4:13, 1 Kgs 22:3, 1 Kgs 22:4, 1 Kgs 22:6, 1 Kgs 22:12, 1 Kgs 22:15, 1 Kgs 22:20, 1 Kgs 22:29, 2 Kgs 8:28, 2 Kgs 9:1, 2 Kgs 9:4, 2 Kgs 9:14, 2 Chr 18:2, 2 Chr 18:3, 2 Chr 18:5, 2 Chr 18:11, 2 Chr 18:14, 2 Chr 18:19, 2 Chr 18:28, 2 Chr 22:5	
+Recah	Bethlehem 1	~31.70536129174666	~35.21026630105202	1 Chr 4:12	?
+Red Sea		>27.088473	>34.771729	Ex 10:19, Ex 13:18, Ex 15:4, Ex 15:22, Ex 23:31, Num 14:25, Num 21:4, Num 33:10, Num 33:11, Deut 1:40, Deut 2:1, Deut 11:4, Josh 2:10, Josh 4:23, Josh 24:6, Judg 11:16, 1 Kgs 9:26, Neh 9:9, Ps 106:7, Ps 106:9, Ps 106:22, Ps 136:13, Ps 136:15, Jer 49:21, Acts 7:36, Heb 11:29	water
+Rehob 1	Beth-rehob	33.219354	35.544122	Num 13:21, 2 Sam 10:8	
+Rehob 2	Hammath	~33.125828	~35.165000	Josh 19:28	
+Rehob 3	Helkath	~32.955448	~35.211971	Josh 19:30, Josh 21:31, Judg 1:31, 1 Chr 6:75	
+Rehoboth 1		31.066829	34.597830	Gen 26:22	
+Rehoboth 2	Zered	~30.884128	~35.897633	Gen 36:37, 1 Chr 1:48	
+Rehoboth-Ir	Nineveh	36.359410	43.152887	Gen 10:11	
+Rekem	Irpeel	~31.869343	~35.197712	Josh 18:27	
+Remeth	Jezreel 2	~32.5559631396043	~35.33078927843792	Josh 19:21	
+Rephaim	Golan	~>32.80007552505443	~>35.93730130476259	Deut 3:13	
+Rephidim		28.73106102564323	33.84169995726504	Ex 17:1, Ex 17:8, Ex 19:2, Num 33:14, Num 33:15	
+Resen	Nineveh	~36.359410	~43.152887	Gen 10:12	
+Rezeph		35.950000	39.016667	2 Kgs 19:12, Isa 37:12	~; from http://en.wikipedia.org/wiki/Resafa
+Rhegium		38.11158003147303	15.64327902497161	Acts 28:13	
+Rhodes		36.44192632910195	28.22672173336723	Acts 21:1	
+Riblah 1		34.431703	36.545259	2 Kgs 23:33, 2 Kgs 25:6, 2 Kgs 25:20, 2 Kgs 25:21, Jer 39:5, Jer 39:6, Jer 52:9, Jer 52:10, Jer 52:26, Jer 52:27, Ezek 6:14	
+Riblah 2	Ain 1	~34.353071	~36.385705	Num 34:11	
+Rimmon 1		31.934660	35.297063	Judg 20:45, Judg 20:47, Judg 21:13	
+Rimmon 2	Ain 1	34.353071	36.385705	Josh 15:32, Josh 19:7, 1 Chr 4:32, Zech 14:10	
+Rimmon 3	Dimnah	32.781808	35.321364	Josh 19:13	
+Rimmono	Dimnah	32.781808	35.321364	1 Chr 6:77	
+Rimmon-perez	Ashnah	~31.8099	~34.9365	Num 33:19, Num 33:20	
+Rissah	Mount Hor 1	~30.317396	~35.407152	Num 33:21, Num 33:22	
+Rithmah	Ashnah	~31.8099	~34.9365	Num 33:18, Num 33:19	
+River	Euphrates	35.090577	40.427780	Num 22:5, Deut 11:24, Josh 24:3, Josh 24:14, Josh 24:15, Ps 72:8, Ps 80:11, Isa 7:20, Isa 8:7, Isa 11:15, Mic 7:12, Zech 9:10	
+Rock of Escape	Maon	~31.41666666666668	~35.1166666666667	1 Sam 23:28	
+Rogelim	Mahanaim	~32.214708?	~35.632914?	2 Sam 17:27, 2 Sam 19:31	
+Rome		41.9	12.48333333333333	Acts 2:10, Acts 18:2, Acts 19:21, Acts 23:11, Acts 28:14, Acts 28:16, Rom 1:7, Rom 1:15, 2 Tim 1:17	
+Rumah	Arumah	32.154887	35.318192	2 Kgs 23:36	?
+Sahar	Helbon	~33.664912	~36.248576	Ezek 27:18	?
+Salamis		35.17724606944397	33.90755212865949	Acts 13:5	
+Salecah		32.493941	36.710337	Deut 3:10, Josh 12:5, Josh 13:11, 1 Chr 5:11	
+Salem	Jerusalem	31.777444	35.234935	Gen 14:18, Ps 76:2, Heb 7:1, Heb 7:2	
+Salim		32.39933414034645	35.52644309698702	John 3:23	
+Salmone		35.21229729880597	26.27449174374278	Acts 27:7	
+Salt Sea		31.538593	35.482268	Gen 14:3, Num 34:3, Num 34:12, Deut 3:17, Josh 3:16, Josh 12:3, Josh 15:2, Josh 15:5, Josh 18:19	
+Samaria		32.28023100000001	35.19792900000002	1 Kgs 13:32, 1 Kgs 16:24, 1 Kgs 16:28, 1 Kgs 16:29, 1 Kgs 16:32, 1 Kgs 18:2, 1 Kgs 20:1, 1 Kgs 20:10, 1 Kgs 20:17, 1 Kgs 20:34, 1 Kgs 20:43, 1 Kgs 21:1, 1 Kgs 21:18, 1 Kgs 22:10, 1 Kgs 22:37, 1 Kgs 22:38, 1 Kgs 22:51, 2 Kgs 1:2, 2 Kgs 1:3, 2 Kgs 2:25, 2 Kgs 3:1, 2 Kgs 3:6, 2 Kgs 5:3, 2 Kgs 6:19, 2 Kgs 6:20, 2 Kgs 6:24, 2 Kgs 6:25, 2 Kgs 7:1, 2 Kgs 7:18, 2 Kgs 10:1, 2 Kgs 10:12, 2 Kgs 10:17, 2 Kgs 10:35, 2 Kgs 10:36, 2 Kgs 13:1, 2 Kgs 13:6, 2 Kgs 13:9, 2 Kgs 13:10, 2 Kgs 13:13, 2 Kgs 14:14, 2 Kgs 14:16, 2 Kgs 14:23, 2 Kgs 15:8, 2 Kgs 15:13, 2 Kgs 15:14, 2 Kgs 15:17, 2 Kgs 15:23, 2 Kgs 15:25, 2 Kgs 15:27, 2 Kgs 17:1, 2 Kgs 17:5, 2 Kgs 17:6, 2 Kgs 17:24, 2 Kgs 17:26, 2 Kgs 17:28, 2 Kgs 18:9, 2 Kgs 18:10, 2 Kgs 18:34, 2 Kgs 21:13, 2 Kgs 23:18, 2 Kgs 23:19, 2 Chr 18:2, 2 Chr 18:9, 2 Chr 22:9, 2 Chr 25:13, 2 Chr 25:24, 2 Chr 28:8, 2 Chr 28:9, 2 Chr 28:15, Ezra 4:10, Ezra 4:17, Neh 4:2, Isa 7:9, Isa 8:4, Isa 9:9, Isa 10:9, Isa 10:10, Isa 10:11, Isa 36:19, Jer 23:13, Jer 31:5, Jer 41:5, Ezek 16:46, Ezek 16:51, Ezek 16:53, Ezek 16:55, Ezek 23:4, Ezek 23:33, Hos 7:1, Hos 8:5, Hos 8:6, Hos 10:5, Hos 13:16, Amos 3:9, Amos 3:12, Amos 4:1, Amos 6:1, Obad 1:19, Mic 1:1, Mic 1:5, Mic 1:6, Luke 17:11, John 4:4, John 4:5, John 4:7, John 4:9, Acts 1:8, Acts 8:1, Acts 8:5, Acts 8:9, Acts 8:14, Acts 9:31, Acts 15:3	
+Samaria's	Samaria	32.28023100000001	35.19792900000002	Hos 10:7	
+Samos		37.715172	26.934167	Acts 20:15	
+Samothrace		40.467279	25.486069	Acts 16:11	
+Sansannah	Madmannah	~31.391668	~34.940502	Josh 15:31	
+Sardis		38.47682690345803	28.11413118732089	Rev 1:11, Rev 3:1, Rev 3:4	
+Sarid		32.68978573733861	35.19666870006055	Josh 19:10, Josh 19:12	
+Sea of Chinnereth	Sea of Galilee	32.80677585520321	35.58936052679091	Num 34:11, Josh 13:27	
+Sea of Chinneroth	Sea of Galilee	32.80677585520321	35.58936052679091	Josh 12:3	
+Sea of Egypt	Red Sea	>27.088473	>34.771729	Isa 11:15	water
+Sea of Galilee		32.80677585520321	35.58936052679091	Matt 4:18, Matt 15:29, Mark 1:16, Mark 7:31, John 6:1	water
+Sea of Jazer	Jazer	~31.94352951689796	~35.72776961157128	Jer 48:32	water
+Sea of Tiberias	Sea of Galilee	32.80677585520321	35.58936052679091	John 6:1, John 21:1	water
+Sea of the Arabah	Salt Sea	31.538593	35.482268	Deut 3:17, Deut 4:49, Josh 3:16, Josh 12:3, 2 Kgs 14:25	water
+Sea of the Philistines	Great Sea	>33.24	>33.47	Ex 23:31	water
+Seba	Sheba	>9.022736	>38.746799	Ps 72:10, Isa 43:3	
+Sebam	Sibmah	~31.815283	~35.766738	Num 32:3	
+Secacah		31.766667	35.283333	Josh 15:61	~
+Second Quarter	Jerusalem	<31.777444	<35.234935	2 Kgs 22:14, 2 Chr 34:22, Zeph 1:10	
+Secu		31.883333	35.200000	1 Sam 19:22	~; now Suweika
+Seir	Bozrah 1	>30.734691	>35.606250	Gen 14:6, Gen 32:3, Gen 33:14, Gen 33:16, Gen 36:8, Gen 36:9, Gen 36:30, Num 24:18, Deut 1:44, Deut 2:4, Deut 2:8, Deut 2:12, Deut 2:22, Deut 2:29, Deut 33:2, Josh 11:17, Josh 12:7, Josh 24:4, Judg 5:4, 2 Chr 20:23, 2 Chr 25:11, 2 Chr 25:14, Isa 21:11, Ezek 25:8	
+Seirah	Bethel 1	~31.93053920580005	~35.22103274923676	Judg 3:26	SE Ephraim
+Sela		30.32243571223214	35.45627946919968	Judg 1:36, 2 Kgs 14:7, Isa 16:1, Isa 42:11	
+Seleucia		36.11101750333098	35.92680788324002	Acts 13:4	
+Seneh		31.85309428405443	35.28616916703533	1 Sam 14:4	
+Senir	Mount Hermon	33.41615982399708	35.85725617635589	Deut 3:9, 1 Chr 5:23, Sng 4:8, Ezek 27:5	
+Sephar		14.550219	44.392642	Gen 10:30	~
+Sepharad	Sardis	38.47682690345803	28.11413118732089	Obad 1:20	
+Sepharvaim		33.789693?	44.459399?	2 Kgs 17:24, 2 Kgs 17:31, 2 Kgs 18:34, 2 Kgs 19:13, Isa 36:19, Isa 37:13	
+Serpent's Stone	En-rogel	31.767775	35.234408	1 Kgs 1:9	
+Shaalabbin	Shaalbim	31.870364	34.981728	Josh 19:42	
+Shaalbim		31.870364	34.981728	Judg 1:35, 1 Kgs 4:9	now Salbit
+Shaalim	Gibeon	~31.84684772753698	~35.18491237777512	1 Sam 9:4	
+Shaaraim 1		~31.7001	~34.89532	Josh 15:36, 1 Sam 17:52	
+Shaaraim 2	Sharuhen	31.282222	34.482500	1 Chr 4:31	
+Shahazumah	Beth-shemesh 2	~32.406430	~35.504628	Josh 19:22	
+Shalishah	Gibeon	~31.84684772753698	~35.18491237777512	1 Sam 9:4	
+Shallecheth	Jerusalem	<31.777444	<35.234935	1 Chr 26:16	
+Shamir 1		31.416667	34.933333	Josh 15:48	~
+Shamir 2		32.360470	35.250054	Judg 10:1, Judg 10:2	now Sanur
+Shaphir		~31.743719	~34.694006	Mic 1:11	
+Sharon 1		>32.639068	>34.945929	1 Chr 27:29, Sng 2:1, Isa 33:9, Isa 35:2, Isa 65:10, Acts 9:35	region
+Sharon 2	Mount Hermon	~33.41615982399708	~35.85725617635589	1 Chr 5:16	
+Sharuhen		31.282222	34.482500	Josh 19:6	now Tel Sharuhen
+Shaveh-kiriathaim	Kiriathaim 1	~31.58333333329998	~35.70000000000012	Gen 14:5	
+Sheba		>9.022736	>38.746799	Josh 19:2, 1 Kgs 10:1, 1 Kgs 10:4, 1 Kgs 10:10, 1 Kgs 10:13, 2 Chr 9:1, 2 Chr 9:3, 2 Chr 9:9, 2 Chr 9:12, Job 6:19, Ps 72:10, Ps 72:15, Isa 60:6, Jer 6:20, Ezek 27:22, Ezek 27:23, Ezek 38:13	region
+Shebarim	Ai 1	~31.91697811712517	~35.26122639380886	Josh 7:5	
+Shechem		32.21369123124062	35.2817986718367	Gen 12:6, Gen 33:18, Gen 35:4, Gen 37:12, Gen 37:13, Gen 37:14, Josh 17:7, Josh 20:7, Josh 21:21, Josh 24:1, Josh 24:25, Josh 24:32, Judg 8:31, Judg 9:1, Judg 9:2, Judg 9:3, Judg 9:6, Judg 9:7, Judg 9:18, Judg 9:20, Judg 9:23, Judg 9:24, Judg 9:25, Judg 9:26, Judg 9:28, Judg 9:31, Judg 9:34, Judg 9:39, Judg 9:41, Judg 9:57, Judg 21:19, 1 Kgs 12:1, 1 Kgs 12:25, 1 Chr 6:67, 1 Chr 7:28, 2 Chr 10:1, Ps 60:6, Ps 108:7, Jer 41:5, Hos 6:9, Acts 7:16	
+Sheep Gate	Jerusalem	<31.777444	<35.234935	Neh 3:1, Neh 3:32, Neh 12:39, John 5:2	
+Shema	Moladah	~31.162327	~35.057114	Josh 15:26	
+Shen	Mizpah 3	~31.83273947023218	~35.1801628605877	1 Sam 7:12	
+Shepham	Ain 1	~34.353071	~36.385705	Num 34:10, Num 34:11	
+Shephelah	Ekron	>31.77761410537458	>34.85214575880509	1 Kgs 10:27, 1 Chr 27:28, 2 Chr 1:15, 2 Chr 9:27, 2 Chr 26:10, 2 Chr 28:18, Jer 17:26, Jer 32:44, Jer 33:13, Obad 1:19	region
+Shibah	Beersheba	31.24495217357714	34.8408885849849	Gen 26:33	
+Shihor	Brook of Egypt	31.032047	33.854957	Josh 13:3, Isa 23:3	?; river
+Shihor-libnath		32.538496	34.907697	Josh 19:26	river; now Nahar Tanninim?
+Shikkeron	Ekron	~31.77761410537458	~34.85214575880509	Josh 15:11	
+Shilhim	Sharuhen	31.282222	34.482500	Josh 15:32	
+Shiloah	Jerusalem	<31.777444	<35.234935	Isa 8:6	
+Shiloh		32.05570050712985	35.28952869712683	Josh 18:1, Josh 18:8, Josh 18:9, Josh 18:10, Josh 19:51, Josh 21:2, Josh 22:9, Josh 22:12, Judg 18:31, Judg 21:12, Judg 21:19, Judg 21:21, 1 Sam 1:3, 1 Sam 1:9, 1 Sam 1:24, 1 Sam 2:14, 1 Sam 3:21, 1 Sam 4:3, 1 Sam 4:4, 1 Sam 4:12, 1 Sam 14:3, 1 Kgs 2:27, 1 Kgs 14:2, 1 Kgs 14:4, Ps 78:60, Jer 7:12, Jer 7:14, Jer 26:6, Jer 26:9, Jer 41:5	
+Shimron		32.70528895585606	35.21333285757741	Josh 11:1, Josh 19:15	
+Shimron-meron	Shimron	32.70528895585606	35.21333285757741	Josh 12:20	
+Shinar	Babel	>32.53650368616845	>44.42088287373876	Gen 10:10, Gen 11:2, Gen 14:1, Gen 14:9, Josh 7:21, Isa 11:11, Dan 1:2, Zech 5:11	region
+Shion		32.716666	35.333334	Josh 19:19	~
+Shittim	Abel-shittim	31.85826217905818	35.64156652792805	Num 25:1, Josh 2:1, Josh 3:1, Mic 6:5	
+Shoa	Ecbatana	~>34.798311	~>48.514966	Ezek 23:23	
+Shual	Ophrah 1	~31.95378955858199	~35.29913577541004	1 Sam 13:17	
+Shunem		32.60563102234625	35.33430585716489	Josh 19:18, 1 Sam 28:4, 2 Kgs 4:8	
+Shur		>30.2354	>33.247	Gen 16:7, Gen 20:1, Gen 25:18, Ex 15:22, 1 Sam 15:7, 1 Sam 27:8	
+Sibmah		~31.815283	~35.766738	Num 32:38, Josh 13:19, Isa 16:8, Isa 16:9, Jer 48:32	
+Sibraim	Hamath	~35.136204	~36.749488	Ezek 47:16	
+Sidon		33.56316734135746	35.36634649354799	Gen 10:19, Gen 49:13, Judg 1:31, Judg 10:6, Judg 18:28, 2 Sam 24:6, 1 Kgs 17:9, Isa 23:2, Isa 23:4, Isa 23:12, Jer 25:22, Jer 27:3, Jer 47:4, Ezek 27:8, Ezek 28:21, Ezek 28:22, Joel 3:4, Zech 9:2, Matt 11:21, Matt 11:22, Matt 15:21, Mark 3:8, Mark 7:24, Mark 7:31, Luke 4:26, Luke 6:17, Luke 10:13, Luke 10:14, Acts 12:20, Acts 27:3	
+Sidon the Great	Sidon	33.56316734135746	35.36634649354799	Josh 19:28	
+Silla	Jerusalem	~31.777444	~35.234935	2 Kgs 12:20	
+Siloam	Jerusalem	<31.777444	<35.234935	Luke 13:4, John 9:7, John 9:11	
+Sin		>28.838778	>33.420573	Ex 16:1, Ex 17:1, Num 33:11, Num 33:12	region
+Sinai	Mount Sinai	28.539722	33.973333	Ex 16:1, Ex 19:1, Ex 19:2, Lev 7:38, Num 1:1, Num 1:19, Num 3:4, Num 3:14, Num 9:1, Num 9:5, Num 10:12, Num 26:64, Num 33:15, Num 33:16, Deut 33:2, Judg 5:5, Ps 68:17	
+Siphmoth	Anim	~31.373521	~35.074552	1 Sam 30:28	
+Sirah		~31.55	~35.1	2 Sam 3:26	
+Sirion	Mount Hermon	33.41615982399708	35.85725617635589	Deut 3:9, Ps 29:6, Jer 18:14	
+Sitnah	Gerar	~31.39129109635703	~34.56057015639144	Gen 26:21	
+Smyrna		38.45196037886051	27.16192104844777	Rev 1:11, Rev 2:8	
+Soco	Socoh 1	31.68123465358001	34.97639817516712	2 Chr 11:7, 2 Chr 28:18	
+Socoh 1		31.68123465358001	34.97639817516712	Josh 15:35, 1 Sam 17:1, 1 Kgs 4:10	
+Socoh 2	Debir 1	~31.41666959977098	~34.96667012280085	Josh 15:48	
+Sodom		31.19656033132318	35.39648411813492	Gen 10:19, Gen 13:10, Gen 13:12, Gen 13:13, Gen 14:2, Gen 14:8, Gen 14:10, Gen 14:11, Gen 14:12, Gen 14:17, Gen 14:21, Gen 14:22, Gen 18:16, Gen 18:20, Gen 18:22, Gen 18:26, Gen 19:1, Gen 19:4, Gen 19:24, Gen 19:28, Deut 29:23, Deut 32:32, Isa 1:9, Isa 1:10, Isa 3:9, Isa 13:19, Jer 23:14, Jer 49:18, Jer 50:40, Lam 4:6, Ezek 16:46, Ezek 16:48, Ezek 16:49, Ezek 16:53, Ezek 16:55, Ezek 16:56, Amos 4:11, Zeph 2:9, Matt 10:15, Matt 11:23, Matt 11:24, Luke 10:12, Luke 17:29, Rom 9:29, 2 Pet 2:6, Jude 1:7, Rev 11:8	
+Solomon's	Jerusalem	<31.777444	<35.234935	Acts 3:11	
+Solomon's Portico	Jerusalem	<31.777444	<35.234935	Acts 5:12	KMZ:Solomons porch
+South		?	?	Zech 7:7, Matt 12:42, Luke 11:31	
+Spain		>40.481391	>-3.175332	Rom 15:24, Rom 15:28	region
+Straight	Damascus	~33.519299	~36.31344999999999	Acts 9:11	
+Succoth 1		32.19998298531073	35.63331303389634	Gen 33:17, Josh 13:27, Judg 8:5, Judg 8:6, Judg 8:8, Judg 8:14, Judg 8:15, Judg 8:16, 1 Kgs 7:46, 2 Chr 4:17	
+Succoth 2		30.62077414398056	32.25869322351544	Ex 12:37, Ex 13:20, Num 33:5, Num 33:6	
+Suph	Red Sea	>27.088473	>34.771729	Deut 1:1	
+Suphah	Red Sea	>27.088473	>34.771729	Num 21:14	?
+Sur	Jerusalem	<31.777444	<35.234935	2 Kgs 11:6	
+Susa		32.18919123705116	48.25788647687722	Ezra 4:9, Neh 1:1, Est 1:2, Est 1:5, Est 2:3, Est 2:5, Est 2:8, Est 3:15, Est 4:8, Est 4:16, Est 8:14, Est 8:15, Est 9:6, Est 9:11, Est 9:12, Est 9:13, Est 9:14, Est 9:15, Est 9:18, Dan 8:2	
+Sychar		32.20307656686443	35.31192106402537	John 4:5	
+Syene		24.066181	32.895862	Isa 49:12, Ezek 29:10, Ezek 30:6	now Aswan
+Syracuse		37.06823247873927	15.2948238829937	Acts 28:12	
+Syria	Damascus	>33.519299	>36.31344999999999	Judg 10:6, 1 Kgs 10:29, 1 Kgs 11:25, 1 Kgs 15:18, 1 Kgs 19:15, 1 Kgs 20:1, 1 Kgs 20:20, 1 Kgs 20:22, 1 Kgs 20:23, 1 Kgs 22:1, 1 Kgs 22:3, 1 Kgs 22:31, 2 Kgs 5:1, 2 Kgs 5:5, 2 Kgs 6:8, 2 Kgs 6:11, 2 Kgs 6:24, 2 Kgs 8:7, 2 Kgs 8:9, 2 Kgs 8:13, 2 Kgs 8:28, 2 Kgs 8:29, 2 Kgs 9:14, 2 Kgs 9:15, 2 Kgs 12:17, 2 Kgs 12:18, 2 Kgs 13:3, 2 Kgs 13:4, 2 Kgs 13:7, 2 Kgs 13:17, 2 Kgs 13:19, 2 Kgs 13:22, 2 Kgs 13:24, 2 Kgs 15:37, 2 Kgs 16:5, 2 Kgs 16:6, 2 Kgs 16:7, 1 Chr 18:6, 2 Chr 1:17, 2 Chr 16:2, 2 Chr 16:7, 2 Chr 18:30, 2 Chr 22:5, 2 Chr 22:6, 2 Chr 28:5, 2 Chr 28:23, Isa 7:1, Isa 7:2, Isa 7:4, Isa 7:5, Isa 7:8, Isa 17:3, Ezek 16:57, Ezek 27:16, Amos 1:5, Matt 4:24, Luke 2:2, Acts 15:23, Acts 15:41, Acts 18:18, Acts 20:3, Acts 21:3, Gal 1:21	region
+Syrtis		31.766667	18.505556	Acts 27:17	water; from harper; now Sidra
+Taanach		32.51723975501718	35.21632508826309	Josh 12:21, Josh 17:11, Josh 21:25, Judg 1:27, Judg 5:19, 1 Kgs 4:12, 1 Chr 7:29	
+Taanath-shiloh		32.150000	35.383333	Josh 16:6	~; now Khirbat Tana
+Tabbath	Abel-meholah	~32.356010	~35.536929	Judg 7:22	
+Taberah	Hazeroth	~28.916667	~34.500000	Num 11:3, Deut 9:22	
+Tabor 1	Mount Tabor	32.68695640243183	35.39091304299688	Josh 19:22, Judg 8:18, Ps 89:12, Jer 46:18, Hos 5:1	
+Tabor 2	Chesulloth	32.683231	35.324694	1 Chr 6:77	
+Tabor 3	Bethel 1	~31.93053920580005	~35.22103274923676	1 Sam 10:3	
+Tadmor		34.5540491686839	38.26590497164145	2 Chr 8:4	
+Tahath	Mount Hor 1	~30.317396	~35.407152	Num 33:26, Num 33:27	
+Tahpanhes		30.860556	32.171389	Jer 2:16, Jer 43:7, Jer 43:8, Jer 43:9, Jer 44:1, Jer 46:14	http://en.wikipedia.org/wiki/Tahpanhes
+Tamar 1	Tadmor	34.5540491686839	38.26590497164145	1 Kgs 9:18	
+Tamar 2		31.024923	35.064154	Ezek 47:18, Ezek 47:19, Ezek 48:28	now Kurnub; from New Bible Dictionary
+Tappuah 1		32.11666666666667	35.23333333333333	Josh 12:17, Josh 16:8, Josh 17:8	
+Tappuah 2	Enam	~32.15	~35.1260	Josh 15:34	
+Taralah	Haeleph	~31.792733	~35.196862	Josh 18:27	
+Tarshish		36.95299512880268	-6.379340234132555	1 Kgs 10:22, 1 Kgs 22:48, 2 Chr 9:21, 2 Chr 20:36, 2 Chr 20:37, Ps 48:7, Ps 72:10, Isa 2:16, Isa 23:1, Isa 23:6, Isa 23:10, Isa 23:14, Isa 60:9, Isa 66:19, Jer 10:9, Ezek 27:12, Ezek 27:25, Ezek 38:13, Jonah 1:3, Jonah 4:2	
+Tarsus		36.91802695356275	34.89153398422567	Acts 9:11, Acts 9:30, Acts 11:25, Acts 21:39, Acts 22:3	
+Tehaphnehes	Tahpanhes	30.860556	32.171389	Ezek 30:18	
+Tekoa		31.63622127191993	35.21407721824517	2 Sam 14:2, 2 Sam 14:4, 2 Sam 14:9, 2 Sam 23:26, 1 Chr 11:28, 2 Chr 11:6, 2 Chr 20:20, Jer 6:1, Amos 1:1	
+Tel-abib	Calneh	~32.127213	~45.229995	Ezek 3:15	?; from Arch. Enc. of Holy Land
+Telaim	Moladah	~31.162327	~35.057114	1 Sam 15:4	
+Telassar	Susa	~32.18919123705116	~48.25788647687722	2 Kgs 19:12, Isa 37:12	from http://en.wikipedia.org/wiki/Elam
+Telem	Moladah	~31.162327	~35.057114	Josh 15:24	
+Tel-harsha	Calneh	~32.127213	~45.229995	Ezra 2:59, Neh 7:61	near the sea
+Tel-melah	Calneh	~32.127213	~45.229995	Ezra 2:59, Neh 7:61	from tyndale
+Tema		27.633172	38.554125	Job 6:19, Isa 21:14, Jer 25:23	
+Teman		>30.203813	>35.732568	Jer 49:7, Jer 49:20, Ezek 25:13, Amos 1:12, Obad 1:9, Hab 3:3	region
+Terah	Mount Hor 1	~30.317396	~35.407152	Num 33:27, Num 33:28	
+The Lord Is There	Jerusalem	31.777444	35.234935	Ezek 48:35	
+The Place of a Skull	Jerusalem	~31.777444	~35.234935	John 19:17	
+The Skull	Jerusalem	~31.777444	~35.234935	Luke 23:33	
+The Stone Pavement	Jerusalem	<31.777444	<35.234935	John 19:13	
+Thebes		25.700025	32.639441	Jer 46:25, Ezek 30:14, Ezek 30:15, Ezek 30:16, Nahum 3:8	
+Thebez		32.3241024517848	35.36825275634464	Judg 9:50, 2 Sam 11:21	
+Thessalonica		40.632155565205	22.9320868699276	Acts 17:1, Acts 17:11, Acts 17:13, Acts 27:2, Phil 4:16, 2 Tim 4:10	
+Three Taverns		41.591320	12.828636	Acts 28:15	
+Thyatira		38.92579128786831	27.85655574592795	Acts 16:14, Rev 1:11, Rev 2:18, Rev 2:24	
+Tiberias		32.79553799444466	35.52922039819518	John 6:23	
+Tibhath	Berothah	~33.931480	~36.152049	1 Chr 18:8	
+Tigris		35.983343	43.346466	Gen 2:14, Dan 10:4	
+Timnah 1		31.784368	34.909680	Gen 38:12, Gen 38:13, Gen 38:14, Josh 15:10, Josh 19:43, Judg 14:1, Judg 14:2, Judg 14:5, 2 Chr 28:18	now Tel Batash
+Timnah 2		31.699323	35.040359	Josh 15:57	~
+Timnath-heres		32.121473	35.150392	Judg 2:9	
+Timnath-serah	Timnath-heres	32.121473	35.150392	Josh 19:50, Josh 24:30	
+Tiphsah 1		35.847967	38.732350	1 Kgs 4:24	
+Tiphsah 2		32.166667	35.166667	2 Kgs 15:16	~
+Tirzah		32.27136869937776	35.29430386845415	Josh 12:24, 1 Kgs 14:17, 1 Kgs 15:21, 1 Kgs 15:33, 1 Kgs 16:6, 1 Kgs 16:8, 1 Kgs 16:9, 1 Kgs 16:15, 1 Kgs 16:17, 1 Kgs 16:23, 2 Kgs 15:14, 2 Kgs 15:16, Sng 6:4	
+Tishbe	Hazor 1	~33.01718199667929	~35.56804856758258	1 Kgs 17:1	from http://www.britam.org/naphtali.html
+Tob		32.561735	36.240494	Judg 11:3, Judg 11:5, 2 Sam 10:6, 2 Sam 10:8	from harper; now et-Taiyibeh
+Tochen	Ashnah	~31.8099	~34.9365	1 Chr 4:32	
+Tolad	Baalath-beer	~32.049953	~35.733402	1 Chr 4:29	
+Tophel		30.936991	35.616870	Deut 1:1	
+Topheth	Valley of Hinnom	31.769079	35.227994	2 Kgs 23:10, Jer 7:31, Jer 7:32, Jer 19:6, Jer 19:11, Jer 19:12, Jer 19:13, Jer 19:14	
+Tower of Hananel	Jerusalem	<31.777444	<35.234935	Neh 3:1, Neh 12:39, Jer 31:38, Zech 14:10	
+Tower of Shechem	Shechem	<32.21369123124062	<35.2817986718367	Judg 9:46, Judg 9:47, Judg 9:49	
+Tower of the Hundred	Jerusalem	<31.777444	<35.234935	Neh 3:1, Neh 12:39	
+Tower of the Ovens	Jerusalem	<31.777444	<35.234935	Neh 3:11, Neh 12:38	
+Trachonitis		>32.833333	>36.5	Luke 3:1	region
+Troas		39.50664305923271	26.08059270470616	Acts 16:8, Acts 16:11, Acts 20:5, Acts 20:6, 2 Cor 2:12, 2 Tim 4:13	
+Tubal	Pontus	~>40.905222	~>37.799969	Isa 66:19, Ezek 27:13, Ezek 38:2, Ezek 38:3, Ezek 39:1	region
+Tyre		33.27582782266882	35.19257453545583	Josh 19:29, 2 Sam 5:11, 2 Sam 24:7, 1 Kgs 5:1, 1 Kgs 7:13, 1 Kgs 7:14, 1 Kgs 9:11, 1 Kgs 9:12, 1 Chr 14:1, 2 Chr 2:3, 2 Chr 2:11, 2 Chr 2:14, Ps 45:12, Ps 83:7, Ps 87:4, Isa 23:1, Isa 23:5, Isa 23:8, Isa 23:15, Isa 23:17, Jer 25:22, Jer 27:3, Jer 47:4, Ezek 26:2, Ezek 26:3, Ezek 26:4, Ezek 26:7, Ezek 26:15, Ezek 27:2, Ezek 27:3, Ezek 27:8, Ezek 27:32, Ezek 28:2, Ezek 28:12, Ezek 29:18, Joel 3:4, Amos 1:9, Amos 1:10, Zech 9:2, Zech 9:3, Matt 11:21, Matt 11:22, Matt 15:21, Mark 3:8, Mark 7:24, Mark 7:31, Luke 6:17, Luke 10:13, Luke 10:14, Acts 12:20, Acts 21:3, Acts 21:7	
+Ulai		32.178696	48.224890	Dan 8:2, Dan 8:16	river; from http://en.wikipedia.org/wiki/Ulai
+Ummah		33.104377	35.180623	Josh 19:30	now Alma el Shaab
+Uphaz	India	>22	>77	Jer 10:9, Dan 10:5	
+Upper Beth-horon		31.85891795409998	35.12831317484221	Josh 16:5, 1 Chr 7:24, 2 Chr 8:5	
+Ur		30.9620520474569	46.10374195774169	Gen 11:28, Gen 11:31, Gen 15:7, Neh 9:7	
+Uz		>30.0334	>36.44839	Job 1:1, Jer 25:20, Lam 4:21	
+Uzal		15.354879	44.215092	Ezek 27:19	now Sanaa
+Uzza	Jerusalem	<31.777444	<35.234935	2 Kgs 21:18, 2 Kgs 21:26	?
+Uzzen-sheerah		31.887821	35.045649	1 Chr 7:24	now Beit Sera
+Vale of Succoth	Succoth 1	32.19998298531073	35.63331303389634	Ps 60:6	
+Valley Gate	Jerusalem	<31.777444	<35.234935	2 Chr 26:9, Neh 2:13, Neh 2:15, Neh 3:13	
+Valley of Achor		31.836890	35.399737	Josh 7:24, Josh 7:26, Josh 15:7, Isa 65:10, Hos 2:15	
+Valley of Aijalon	Aijalon	31.84117376619545	35.02537926743067	Josh 10:12	
+Valley of Aven		34.006944	36.203889	Amos 1:5	
+Valley of Baca	Valley of Hinnom	31.769079	35.227994	Ps 84:6	?
+Valley of Beracah		31.610650	35.165648	2 Chr 20:26	
+Valley of Elah		31.690629	34.963136	1 Sam 17:2, 1 Sam 17:19, 1 Sam 21:9	
+Valley of Eshcol	Mamre	>31.54909871686872	>35.09356062020027	Num 13:23, Num 13:24, Num 32:9, Deut 1:24	
+Valley of Gerar	Gerar	31.39129109635703	34.56057015639144	Gen 26:17	
+Valley of Gibeon	Gibeon	>31.84684772753698	>35.18491237777512	Isa 28:21	
+Valley of Hamon-gog	Dibon 1	~31.49684513710609	~35.78284105296996	Ezek 39:11, Ezek 39:15	
+Valley of Hebron	Mamre	>31.54909871686872	>35.09356062020027	Gen 37:14	?
+Valley of Hinnom		31.769079	35.227994	Josh 15:8, Josh 18:16, Neh 11:30	
+Valley of Iphtahel		32.832774	35.277225	Josh 19:14, Josh 19:27	
+Valley of Jehoshaphat	Kidron	31.772134	35.236596	Joel 3:2, Joel 3:12	
+Valley of Jericho	Jericho	>31.87060143818292	>35.44386371224434	Deut 34:3	
+Valley of Jezreel	Jezreel 2	~32.5559631396043	~35.33078927843792	Josh 17:16, Judg 6:33, Hos 1:5	
+Valley of Lebanon	Mount Hermon	33.41615982399708	35.85725617635589	Josh 11:17, Josh 12:7	
+Valley of Mizpeh		33.281770	35.573371	Josh 11:8	
+Valley of Rephaim		31.756332	35.223059	Josh 15:8, Josh 18:16, 2 Sam 5:18, 2 Sam 5:22, 2 Sam 23:13, 1 Chr 11:15, 1 Chr 14:9, Isa 17:5	
+Valley of Salt		31.087328	35.383740	2 Sam 8:13, 2 Kgs 14:7, 1 Chr 18:12, 2 Chr 25:11, Ps 60:1	from nbd
+Valley of Shaveh	Jerusalem	~31.777444	~35.234935	Gen 14:17	
+Valley of Shittim	Abel-shittim	>31.85826217905818	>35.64156652792805	Joel 3:18	
+Valley of Siddim		31.235341	35.517624	Gen 14:3, Gen 14:8, Gen 14:10	~
+Valley of Slaughter	Valley of Hinnom	31.769079	35.227994	Jer 7:32, Jer 19:6	
+Valley of Sorek		31.825731	34.989013	Judg 16:4	now Wadi es-Sarar
+Valley of Succoth	Succoth 1	32.19998298531073	35.63331303389634	Ps 108:7	
+Valley of Zeboim		31.936283	35.424836	1 Sam 13:18	from tyndale; now Wadi ed Dubba
+Valley of Zephathah		31.615198	34.910085	2 Chr 14:10	
+Valley of Zered	Zered	30.884128	35.897633	Num 21:12	
+Valley of the Arnon	Arnon	31.428800	35.677009	Deut 2:24, Deut 2:36, Deut 3:8, Deut 3:12, Deut 3:16, Deut 4:48, Josh 12:1, Josh 12:2, Josh 13:9, Josh 13:16, 2 Kgs 10:33	
+Valley of the Son of Hinnom	Valley of Hinnom	31.769079	35.227994	Josh 15:8, Josh 18:16, 2 Kgs 23:10, 2 Chr 28:3, 2 Chr 33:6, Jer 7:31, Jer 7:32, Jer 19:2, Jer 19:6, Jer 32:35	
+Valley of the Travelers	Dibon 1	~31.49684513710609	~35.78284105296996	Ezek 39:11	
+Waheb	Red Sea	~>27.088473	~>34.771729	Num 21:14	
+Washer's Field	Valley of Hinnom	~31.769079	~35.227994	2 Kgs 18:17, Isa 7:3, Isa 36:2	
+Water Gate	Jerusalem	<31.777444	<35.234935	Neh 3:26, Neh 8:1, Neh 8:3, Neh 8:16, Neh 12:37	
+Way of Holiness	Jerusalem	~31.777444	~35.234935	Isa 35:8	road
+Wildgoats' Rocks	Engedi	~31.46152536164766	~35.39241108242345	1 Sam 24:2	
+Yiron		33.088748	35.414111	Josh 19:38	now Yaroun
+Zaanan	Shaphir	~31.743719	~34.694006	Mic 1:11	
+Zaanannim	Kedesh 1	~33.11298357486105	~35.53361334150225	Josh 19:33, Judg 4:11	
+Zair	Zoar	30.9265225301655	35.4190606947832	2 Kgs 8:21	
+Zalmon	Mount Ebal	32.23293813761263	35.27304180036391	Ps 68:14	
+Zalmonah	Dibon 1	~31.49684513710609	~35.78284105296996	Num 33:41, Num 33:42	
+Zanoah 1		31.716667	35.000000	Josh 15:34, Neh 3:13, Neh 11:30	
+Zanoah 2		31.366667	35.000000	Josh 15:56	
+Zaphon		32.237710	35.585865	Josh 13:27, Judg 12:1	~; now Qos
+Zarephath		33.4333	35.3	1 Kgs 17:9, 1 Kgs 17:10, Obad 1:20, Luke 4:26	
+Zarethan		32.267821	35.576613	Josh 3:16, 1 Kgs 4:12, 1 Kgs 7:46	now Tell es Saidiyeh; from harper
+Zeboiim	Admah	~31.11942270162137	~35.41253049195169	Gen 10:19, Gen 14:2, Gen 14:8, Deut 29:23, Hos 11:8	
+Zeboim		31.10182240291489	35.47633656511371	Neh 11:34	
+Zedad		34.312571	36.925484	Num 34:8, Ezek 47:15	
+Zela	Haeleph	~31.792733	~35.196862	Josh 18:28, 2 Sam 21:14	
+Zelzah		31.717666	35.187019	1 Sam 10:2	
+Zemaraim		31.910999	35.457280	Josh 18:22	
+Zenan	Shaphir	~31.743719	~34.694006	Josh 15:37	
+Zephath		30.880918	34.630620	Judg 1:17	
+Zer	Hammath	~33.125828	~35.165000	Josh 19:35	
+Zered		30.884128	35.897633	Deut 2:13, Deut 2:14	river
+Zeredah 1	Mount Ebal	~32.23293813761263	~35.27304180036391	1 Kgs 11:26	
+Zeredah 2	Zarethan	32.267821	35.576613	2 Chr 4:17	
+Zererah	Zarethan	32.267821	35.576613	Judg 7:22	?; from tyndale
+Zereth-shahar		31.616962	35.567522	Josh 13:19	
+Ziddim		32.814279	35.435872	Josh 19:35	~
+Ziklag		31.37760000000001	34.87356199999998	Josh 15:31, Josh 19:5, 1 Sam 27:6, 1 Sam 30:1, 1 Sam 30:14, 1 Sam 30:26, 2 Sam 1:1, 2 Sam 4:10, 1 Chr 4:30, 1 Chr 12:1, 1 Chr 12:20, Neh 11:28	
+Zimri	Susa	~>32.18919123705116	~>48.25788647687722	Jer 25:25	?
+Zin 1	Kadesh-barnea	>30.68771281376111	>34.49479554246946	Num 13:21, Num 20:1, Num 27:14, Num 33:36, Num 34:3, Deut 32:51, Josh 15:1	region
+Zin 2	Kadesh-barnea	~30.68771281376111	~34.49479554246946	Num 34:4, Josh 15:3	
+Zion	Jerusalem	31.777444	35.234935	2 Sam 5:7, 1 Kgs 8:1, 2 Kgs 19:21, 1 Chr 11:5, 2 Chr 5:2, Ps 2:6, Ps 9:11, Ps 9:14, Ps 14:7, Ps 20:2, Ps 48:12, Ps 50:2, Ps 51:18, Ps 53:6, Ps 65:1, Ps 69:35, Ps 76:2, Ps 84:5, Ps 84:7, Ps 87:2, Ps 87:5, Ps 97:8, Ps 99:2, Ps 102:13, Ps 102:16, Ps 102:21, Ps 110:2, Ps 126:1, Ps 128:5, Ps 129:5, Ps 132:13, Ps 133:3, Ps 134:3, Ps 135:21, Ps 137:1, Ps 137:3, Ps 146:10, Ps 147:12, Ps 149:2, Sng 3:11, Isa 1:8, Isa 1:27, Isa 2:3, Isa 3:16, Isa 3:17, Isa 4:3, Isa 4:4, Isa 10:24, Isa 10:32, Isa 12:6, Isa 14:32, Isa 16:1, Isa 28:16, Isa 30:19, Isa 31:9, Isa 33:5, Isa 33:14, Isa 33:20, Isa 34:8, Isa 35:10, Isa 37:22, Isa 40:9, Isa 41:27, Isa 46:13, Isa 49:14, Isa 51:3, Isa 51:11, Isa 51:16, Isa 52:1, Isa 52:2, Isa 52:7, Isa 52:8, Isa 59:20, Isa 60:14, Isa 61:3, Isa 62:11, Isa 64:10, Isa 66:8, Jer 3:14, Jer 4:6, Jer 4:31, Jer 6:2, Jer 6:23, Jer 8:19, Jer 9:19, Jer 14:19, Jer 26:18, Jer 30:17, Jer 31:6, Jer 31:12, Jer 50:5, Jer 50:28, Jer 51:10, Jer 51:24, Jer 51:35, Lam 1:4, Lam 1:6, Lam 1:17, Lam 2:1, Lam 2:4, Lam 2:6, Lam 2:8, Lam 2:10, Lam 2:13, Lam 2:18, Lam 4:2, Lam 4:11, Lam 4:22, Lam 5:11, Joel 2:1, Joel 2:15, Joel 2:23, Joel 3:16, Joel 3:17, Joel 3:21, Amos 1:2, Amos 6:1, Mic 1:13, Mic 3:10, Mic 3:12, Mic 4:2, Mic 4:8, Mic 4:10, Mic 4:11, Mic 4:13, Zeph 3:14, Zeph 3:16, Zech 1:14, Zech 1:17, Zech 2:7, Zech 2:10, Zech 8:2, Zech 8:3, Zech 9:9, Zech 9:13, Matt 21:5, John 12:15, Rom 9:33, Rom 11:26, 1 Pet 2:6	
+Zion's	Jerusalem	31.777444	35.234935	Isa 33:6, Isa 62:1	
+Zior		31.589719	35.148296	Josh 15:54	
+Ziph 1		31.4833	35.1333	Josh 15:55, 1 Sam 23:14, 1 Sam 23:15, 1 Sam 23:24, 1 Sam 26:2, 2 Chr 11:8	
+Ziph 2	Moladah	~31.162327	~35.057114	Josh 15:24	
+Ziphron	Hazar-enan	~34.229499	~37.240077	Num 34:9	
+Ziz		31.572903	35.406346	2 Chr 20:16	
+Zoan		30.97461982407924	31.88417306768534	Num 13:22, Ps 78:12, Ps 78:43, Isa 19:11, Isa 19:13, Isa 30:4, Ezek 30:14	
+Zoar		30.9265225301655	35.4190606947832	Gen 13:10, Gen 14:2, Gen 14:8, Gen 19:22, Gen 19:23, Gen 19:30, Deut 34:3, Isa 15:5, Jer 48:34	
+Zobah	Zedad	>34.312571	>36.925484	1 Sam 14:47, 2 Sam 8:3, 2 Sam 8:5, 2 Sam 8:12, 2 Sam 10:6, 2 Sam 10:8, 2 Sam 23:36, 1 Kgs 11:23, 1 Chr 18:5, 1 Chr 18:9, 1 Chr 19:6	region
+Zobah-Hamath	Zedad	>34.312571	>36.925484	1 Chr 18:3	
+Zophim		31.767811	35.725296	Num 23:14	~
+Zorah		31.762141	34.969319	Josh 15:33, Josh 19:41, Judg 13:2, Judg 13:25, Judg 16:31, Judg 18:2, Judg 18:8, Judg 18:11, 2 Chr 11:10, Neh 11:29	
+Zuph	Gibeon	~31.84684772753698	~35.18491237777512	1 Sam 9:5	

Added: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/readme.txt
===================================================================
--- trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/readme.txt	                        (rev 0)
+++ trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/readme.txt	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,2 @@
+openbible.tab is taken from http://www.openbible.info/geo/data/places.txt
+and is licensed under Creative Commons


Property changes on: trunk/step/step-core/src/main/resources/com/tyndalehouse/step/core/data/create/geography/readme.txt
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/main/resources/log4j.properties
===================================================================
--- trunk/step/step-core/src/main/resources/log4j.properties	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/main/resources/log4j.properties	2011-05-12 16:40:32 UTC (rev 229)
@@ -10,4 +10,3 @@
 # Categories
 org.crosswire.jsword.book.sword.ConfigEntry=WARN
 log4j.category.com.tyndalehouse.step=INFO
-

Modified: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/data/create/DataTest.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,7 +1,6 @@
 package com.tyndalehouse.step.core.data.create;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -9,7 +8,6 @@
 
 import com.avaje.ebean.SqlRow;
 import com.tyndalehouse.step.core.data.DataDrivenTestExtension;
-import com.tyndalehouse.step.core.data.entities.Timeband;
 
 /**
  * Basic test for the loader
@@ -40,25 +38,28 @@
         LOG.debug("Got " + i + "  - DataSource good.");
     }
 
-    /**
-     * testing the loading process
-     * <p />
-     * TODO: don't want to test the whole timeline component every build
-     */
-    @Test
-    public void tryLoadingProcess() {
-        final TimelineModuleLoader timelineLoaderModule = new TimelineModuleLoader(getEbean());
-        final Loader l = new Loader(getEbean(), timelineLoaderModule);
-        l.init();
-
-        // we check that we entities in all three tables
-        final Timeband timeband = getEbean().find(Timeband.class).fetch("hotspots.events").where()
-                .eq("id", 1).findUnique();
-
-        assertNotNull(timeband);
-        assertNotNull(timeband.getHotspots());
-        assertNotNull(timeband.getHotspots().get(0));
-        assertNotNull(timeband.getHotspots().get(0).getEvents());
-        assertNotNull(timeband.getHotspots().get(0).getEvents().get(0).getSummary());
-    }
+    // /**
+    // * testing the loading process
+    // * <p />
+    // * TODO: don't want to test the whole timeline/geography component every build
+    // */
+    // @Test
+    // public void tryLoadingProcess() {
+    // final TimelineModuleLoader timelineLoaderModule = new TimelineModuleLoader(getEbean(),
+    // new JSwordServiceImpl(null));
+    // final GeographyModuleLoader geoLoaderModule = new GeographyModuleLoader(getEbean(),
+    // new JSwordServiceImpl(null));
+    // final Loader l = new Loader(getEbean(), timelineLoaderModule, geoLoaderModule);
+    // l.init();
+    //
+    // // we check that we entities in all three tables
+    // final Timeband timeband = getEbean().find(Timeband.class).fetch("hotspots.events").where()
+    // .eq("id", 1).findUnique();
+    //
+    // assertNotNull(timeband);
+    // assertNotNull(timeband.getHotspots());
+    // assertNotNull(timeband.getHotspots().get(0));
+    // assertNotNull(timeband.getHotspots().get(0).getEvents());
+    // assertNotNull(timeband.getHotspots().get(0).getEvents().get(0).getSummary());
+    // }
 }

Modified: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/prebuild/DownloadJSwordBiblesPreReq.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/prebuild/DownloadJSwordBiblesPreReq.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/prebuild/DownloadJSwordBiblesPreReq.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,5 +1,7 @@
 package com.tyndalehouse.step.core.prebuild;
 
+import static org.apache.commons.lang.StringUtils.isNotBlank;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -38,21 +40,31 @@
             if (!jsword.isInstalled(moduleInitials)) {
                 LOGGER.debug("Installing [{}] to install: ", moduleInitials);
                 jsword.installBook(moduleInitials);
-            }
-        }
 
-        for (final String moduleInitials : modules) {
-            // now wait for book to install
-            while (!jsword.isInstalled(moduleInitials)) {
-                LOGGER.debug("Waiting for [{}] to install: ", moduleInitials);
-                try {
-                    Thread.sleep(1000);
-                } catch (final InterruptedException e) {
-                    // we ignore this and wait some more
-                    LOGGER.warn("Download was interrupted: [{}]", moduleInitials);
+                while (!jsword.isInstalled(moduleInitials)) {
+                    LOGGER.debug("Waiting for [{}] to install: ", moduleInitials);
+                    try {
+                        Thread.sleep(1000);
+                    } catch (final InterruptedException e) {
+                        // we ignore this and wait some more
+                        LOGGER.warn("Download was interrupted: [{}]", moduleInitials);
+                    }
                 }
             }
         }
+        //
+        // for (final String moduleInitials : modules) {
+        // // now wait for book to install
+        // while (!jsword.isInstalled(moduleInitials)) {
+        // LOGGER.debug("Waiting for [{}] to install: ", moduleInitials);
+        // try {
+        // Thread.sleep(1000);
+        // } catch (final InterruptedException e) {
+        // // we ignore this and wait some more
+        // LOGGER.warn("Download was interrupted: [{}]", moduleInitials);
+        // }
+        // }
+        // }
     }
 
     /**
@@ -68,6 +80,18 @@
         installer.setPackageDirectory("/ftpmirror/pub/sword/packages/rawzip");
         installer.setCatalogDirectory("/ftpmirror/pub/sword/raw");
 
+        final String proxyHost = System.getProperty("http.proxyHost");
+        final String proxyPort = System.getProperty("http.proxyPort");
+        LOGGER.info("Using [{}:{}]", proxyHost, proxyPort);
+
+        if (isNotBlank(proxyHost)) {
+            installer.setProxyHost(proxyHost);
+        }
+
+        if (isNotBlank(proxyPort)) {
+            installer.setProxyPort(Integer.parseInt(proxyPort));
+        }
+
         // reload if never used before
         if (installer.getBooks().size() == 0) {
             installer.reloadBookList();

Modified: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/JSwordServiceImplTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/JSwordServiceImplTest.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/JSwordServiceImplTest.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,6 +1,7 @@
 package com.tyndalehouse.step.core.service;
 
 import static com.tyndalehouse.step.core.models.LookupOption.INTERLINEAR;
+import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -23,6 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
 import com.tyndalehouse.step.core.models.LookupOption;
 import com.tyndalehouse.step.core.service.impl.JSwordServiceImpl;
 
@@ -99,6 +101,63 @@
     }
 
     /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testSingleReference() {
+        final JSwordServiceImpl jsi = new JSwordServiceImpl(null);
+        final List<ScriptureReference> refs = jsi.getPassageReferences("Gen.1.1");
+
+        assertEquals(refs.size(), 1);
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(1, refs.get(0).getEndVerseId());
+    }
+
+    /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testMultipleReference() {
+        final JSwordServiceImpl jsi = new JSwordServiceImpl(null);
+        final List<ScriptureReference> refs = jsi.getPassageReferences("Gen.1.1;Gen.1.3");
+
+        assertEquals(2, refs.size());
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(1, refs.get(0).getEndVerseId());
+        assertEquals(3, refs.get(1).getStartVerseId());
+        assertEquals(3, refs.get(1).getEndVerseId());
+    }
+
+    /**
+     * Tests the resolving of passage references
+     */
+    @Test
+    public void testMultiplePassages() {
+        final JSwordServiceImpl jsi = new JSwordServiceImpl(null);
+        final List<ScriptureReference> refs = jsi.getPassageReferences("Gen.1.1-2;Gen.1.4-5");
+
+        assertEquals(refs.size(), 2);
+        assertEquals(1, refs.get(0).getStartVerseId());
+        assertEquals(2, refs.get(0).getEndVerseId());
+        assertEquals(4, refs.get(1).getStartVerseId());
+        assertEquals(5, refs.get(1).getEndVerseId());
+    }
+
+    /**
+     * Tests an example from the geo file
+     */
+    @Test
+    public void testGeoPassageExample() {
+        final JSwordServiceImpl jsi = new JSwordServiceImpl(null);
+
+        // TODO change spaces between 1 and Kgs! This doesn't seem to work...
+
+        // final List<ScriptureReference> refs = getPassageReferences(target, "Josh 12:24; Sng 6:4");
+        final List<ScriptureReference> refs = jsi.getPassageReferences("Song 6:4");
+        assertEquals(refs.size(), 1);
+    }
+
+    /**
      * tries to replicate the issue with bookdata not being able to be read in a concurrent fashion
      * 
      * @throws NoSuchKeyException a no such key exception

Added: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImplTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImplTest.java	                        (rev 0)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImplTest.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,57 @@
+package com.tyndalehouse.step.core.service.impl;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+
+import com.tyndalehouse.step.core.data.DataDrivenTestExtension;
+import com.tyndalehouse.step.core.data.common.GeoPrecision;
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
+import com.tyndalehouse.step.core.data.entities.ScriptureReference;
+
+/**
+ * tests the geography data retrieval queries
+ * 
+ * @author Chris
+ * 
+ */
+ at RunWith(MockitoJUnitRunner.class)
+public class GeographyServiceImplTest extends DataDrivenTestExtension {
+    /**
+     * Tests the successful path of registering a user
+     */
+    @Test
+    public void testGetPlace() {
+        // create a place
+        final List<ScriptureReference> references = new ArrayList<ScriptureReference>();
+        final ScriptureReference r = new ScriptureReference();
+        r.setStartVerseId(10);
+        r.setEndVerseId(10);
+        references.add(r);
+
+        final GeoPlace gp = new GeoPlace();
+        gp.setEsvName("ESV Name");
+        gp.setLatitude(10.0);
+        gp.setLongitude(20.0);
+        gp.setPrecision(GeoPrecision.EXACT);
+        gp.setReferences(references);
+
+        // save place
+        super.getEbean().save(gp);
+
+        // get place from reference, we check persistence-cascading worked correctly
+        final List<GeoPlace> geoPlaces = super.getEbean().find(GeoPlace.class).findList();
+        assertEquals(1, geoPlaces.size());
+        assertEquals(1, geoPlaces.get(0).getReferences().size());
+
+        final GeographyServiceImpl geo = new GeographyServiceImpl(getEbean(), new JSwordServiceImpl(null));
+        final List<GeoPlace> places = geo.getPlaces("Genesis 1:1-15");
+
+        assertEquals("ESV Name", places.get(0).getEsvName());
+    }
+}


Property changes on: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/GeographyServiceImplTest.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/UserDataServiceImplTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/UserDataServiceImplTest.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/service/impl/UserDataServiceImplTest.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -59,8 +59,8 @@
 
         this.userService.register(testEmail, testName, testCountry, testPassword);
 
-        final Session session = getEbean().find(Session.class).fetch("user").where()
-                .eq("user.emailAddress", testEmail).findUnique();
+        final Session session = getEbean().find(Session.class).fetch("user").where().eq("user.emailAddress",
+                testEmail).findUnique();
         final User user = session.getUser();
 
         assertEquals(user.getEmailAddress(), testEmail);
@@ -126,4 +126,5 @@
         // check that the user is logged in
         assertEquals(currentServerSession.getUser().getName(), testName);
     }
+
 }

Deleted: trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java
===================================================================
--- trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/java/com/tyndalehouse/step/core/utils/PassageReferenceUtilsTest.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -1,64 +0,0 @@
-package com.tyndalehouse.step.core.utils;
-
-import static com.tyndalehouse.step.core.utils.PassageReferenceUtils.getPassageReferences;
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.mock;
-
-import java.util.List;
-
-import org.junit.Test;
-
-import com.tyndalehouse.step.core.data.entities.ScriptureReference;
-import com.tyndalehouse.step.core.data.entities.ScriptureTarget;
-
-/**
- * testing the passage reference utils class
- * 
- * @author Chris
- * 
- */
-public class PassageReferenceUtilsTest {
-    /**
-     * Tests the resolving of passage references
-     */
-    @Test
-    public void testSingleReference() {
-        final ScriptureTarget target = mock(ScriptureTarget.class);
-        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1");
-
-        assertEquals(refs.size(), 1);
-        assertEquals(1, refs.get(0).getStartVerseId());
-        assertEquals(1, refs.get(0).getEndVerseId());
-    }
-
-    /**
-     * Tests the resolving of passage references
-     */
-    @Test
-    public void testMultipleReference() {
-        final ScriptureTarget target = mock(ScriptureTarget.class);
-        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1;Gen.1.3");
-
-        assertEquals(2, refs.size());
-        assertEquals(1, refs.get(0).getStartVerseId());
-        assertEquals(1, refs.get(0).getEndVerseId());
-        assertEquals(3, refs.get(1).getStartVerseId());
-        assertEquals(3, refs.get(1).getEndVerseId());
-    }
-
-    /**
-     * Tests the resolving of passage references
-     */
-    @Test
-    public void testMultiplePassages() {
-        final ScriptureTarget target = mock(ScriptureTarget.class);
-        final List<ScriptureReference> refs = getPassageReferences(target, "Gen.1.1-2;Gen.1.4-5");
-
-        assertEquals(refs.size(), 2);
-        assertEquals(1, refs.get(0).getStartVerseId());
-        assertEquals(2, refs.get(0).getEndVerseId());
-        assertEquals(4, refs.get(1).getStartVerseId());
-        assertEquals(5, refs.get(1).getEndVerseId());
-    }
-
-}

Modified: trunk/step/step-core/src/test/resources/log4j.properties
===================================================================
--- trunk/step/step-core/src/test/resources/log4j.properties	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-core/src/test/resources/log4j.properties	2011-05-12 16:40:32 UTC (rev 229)
@@ -7,6 +7,10 @@
 log4j.appender.A1.layout=org.apache.log4j.PatternLayout
 log4j.appender.A1.layout.ConversionPattern=%d %-5p %C{1}:%L - %m%n
 
+log4j.category.org.crosswire=DEBUG
 log4j.category.org.crosswire.jsword.book.sword.ConfigEntry=WARN
+log4j.category.org.crosswire.common.util.Reporter=INFO
 log4j.category.com.tyndalehouse.step=DEBUG
-
+log4j.category.com.tyndalehouse.step.core.data.create.TimelineModuleLoader=INFO
+log4j.category.com.tyndalehouse.step.core.data.create.GeographyModuleLoader=INFO
+log4j.category.com.tyndalehouse.step.core.utils.PassageReferenceUtils=INFO

Modified: trunk/step/step-parent/pom.xml
===================================================================
--- trunk/step/step-parent/pom.xml	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-parent/pom.xml	2011-05-12 16:40:32 UTC (rev 229)
@@ -11,6 +11,10 @@
 		<project.build.sourceEncoding>iso-8859-1</project.build.sourceEncoding>
 		<project.reporting.outputEncoding>iso-8859-1</project.reporting.outputEncoding>
 		<java.version>1.6</java.version>
+		
+		<junit.parallel>method</junit.parallel>
+		<junit.threads>4</junit.threads>
+		
 
 		<db.directory>${user.home}/TyndaleStep/StepDB</db.directory>
 		<db.driver>org.apache.derby.jdbc.EmbeddedDriver</db.driver>
@@ -37,7 +41,7 @@
 		<jetty.version>6.1.26</jetty.version>
 
 		<ebean.version>2.7.2</ebean.version>
-		<ehcache.version>2.3.1</ehcache.version>
+		<ehcache.version>2.4.2</ehcache.version>
 		<lucene.version>3.0.3</lucene.version>
 
 		<!-- Commons -->
@@ -302,9 +306,8 @@
 			</dependency>
 			<dependency>
 				<groupId>net.sf.ehcache</groupId>
-				<artifactId>ehcache</artifactId>
+				<artifactId>ehcache-core</artifactId>
 				<version>${ehcache.version}</version>
-				<type>pom</type>
 			</dependency>
 			
 			<dependency>
@@ -347,8 +350,8 @@
 					<version>2.7.1</version>
 					<configuration>
 						<junitArtifactName>junit:junit-dep</junitArtifactName>
-						<parallel>method</parallel>
-						<threadCount>4</threadCount>
+						<parallel>${junit.parallel}</parallel>
+						<threadCount>${junit.threads}</threadCount>
 					</configuration>
 					<dependencies>
 						<dependency>

Modified: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java
===================================================================
--- trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/FrontController.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -2,6 +2,7 @@
 
 import java.io.IOException;
 import java.lang.reflect.Method;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -119,8 +120,8 @@
         final Object controllerInstance = getController(sr.getControllerName());
 
         // resolve method
-        final Method controllerMethod = getControllerMethod(sr.getMethodName(), controllerInstance,
-                sr.getArgs(), sr.getCacheKey().getMethodKey());
+        final Method controllerMethod = getControllerMethod(sr.getMethodName(), controllerInstance, sr
+                .getArgs(), sr.getCacheKey().getMethodKey());
 
         // invoke the three together
         Object returnVal;
@@ -177,14 +178,10 @@
             if (responseValue == null) {
                 return new byte[0];
             } else {
-                final String responsePackage = responseValue.getClass().getPackage().getName();
-                if (responsePackage.startsWith(ENTITIES_PACKAGE)
-                        || responseValue.getClass().getPackage().getName().startsWith(AVAJE_PACKAGE)) {
-
-                    // convert list of beans into JSON
+                if (isPojo(responseValue)) {
+                    response = this.jsonMapper.writeValueAsString(responseValue);
+                } else {
                     response = this.ebeanJson.toJsonString(responseValue);
-                } else {
-                    response = this.jsonMapper.writeValueAsString(responseValue);
                 }
             }
 
@@ -199,6 +196,28 @@
     }
 
     /**
+     * inspects the response value to determine the correct serialiser
+     * 
+     * @param responseValue the response value
+     * @return true if normal serialisation should be used
+     */
+    private boolean isPojo(final Object responseValue) {
+        if (responseValue instanceof java.util.Collection<?>) {
+            // inspect what the collection contains...
+            final Collection<?> c = (Collection<?>) responseValue;
+            if (((java.util.Collection<?>) responseValue).size() != 0) {
+                final Object o = c.iterator().next();
+                return isPojo(o);
+            }
+        }
+
+        final String responsePackage = responseValue.getClass().getPackage().getName();
+        return !responsePackage.startsWith(ENTITIES_PACKAGE)
+                && !responseValue.getClass().getPackage().getName().startsWith(AVAJE_PACKAGE);
+
+    }
+
+    /**
      * caches the results for future use
      * 
      * @param jsonEncoded json encoding of the response

Added: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/GeographyController.java
===================================================================
--- trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/GeographyController.java	                        (rev 0)
+++ trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/GeographyController.java	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,42 @@
+package com.tyndalehouse.step.rest.controllers;
+
+import java.util.List;
+
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.tyndalehouse.step.core.data.entities.GeoPlace;
+import com.tyndalehouse.step.core.service.GeographyService;
+
+/**
+ * Getting some geographical data to display
+ * 
+ * @author Chris
+ * 
+ */
+ at Singleton
+public class GeographyController {
+
+    private final GeographyService geoService;
+
+    /**
+     * Constructs a simple geography service
+     * 
+     * @param geoService the geo lookup service
+     */
+    @Inject
+    public GeographyController(final GeographyService geoService) {
+        this.geoService = geoService;
+
+    }
+
+    /**
+     * returns all places that are within a passage reference
+     * 
+     * @param reference the biblical reference
+     * @return the list of places (lat/long/precisions)
+     */
+    public List<GeoPlace> getPlaces(final String reference) {
+        return this.geoService.getPlaces(reference);
+    }
+
+}


Property changes on: trunk/step/step-web/src/main/java/com/tyndalehouse/step/rest/controllers/GeographyController.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-web/src/main/resources/log4j.properties
===================================================================
--- trunk/step/step-web/src/main/resources/log4j.properties	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/resources/log4j.properties	2011-05-12 16:40:32 UTC (rev 229)
@@ -8,6 +8,6 @@
 log4j.appender.A1.layout.ConversionPattern=%d %-5p %l %x - %m%n
 
 log4j.category.com.tyndalehouse=INFO
-log4j.category.com.tyndalehouse.step.rest.controllers.FrontController=DEBUG
+log4j.category.com.tyndalehouse.step.rest.controllers.FrontController=INFO
 log4j.category.org.crosswire.jsword.book.sword.ConfigEntry=WARN
 

Modified: trunk/step/step-web/src/main/webapp/index.html
===================================================================
--- trunk/step/step-web/src/main/webapp/index.html	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/webapp/index.html	2011-05-12 16:40:32 UTC (rev 229)
@@ -3,6 +3,10 @@
 <HEAD>
 
     <META http-equiv="Content-Type" content="text/html; charset=utf-8">
+
+	<!--  for google maps -->
+	<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
+
     <TITLE>STEP :: Scripture Tools for Every Pastor</TITLE>
 
 
@@ -18,17 +22,21 @@
     <script src="libs/timeline_js/timeline-api.js?bundle=true" type="text/javascript"></script>
     <script src="libs/jquery-1.4.2.min.js" type="text/javascript"></script>
     <script src="libs/jquery-ui-1.8.5.custom.min.js" type="text/javascript"></script>
-    
-    
+       
     <script src="libs/jquery-shout.js" type="text/javascript"></script>
 	<script src="libs/menu/ddsmoothmenu.js" type="text/javascript"></script>
     <script src="libs/cookies/jquery_cookie.js" type="text/javascript"></script>
+    
+    <!-- load the maps - eventually this has to be dynamic, so that no all loading happens -->
+    <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
+    
     <script src="js/util.js" type="text/javascript"></script>
     <script src="js/passage.js" type="text/javascript"></script>
     <script src="js/bookmark.js" type="text/javascript"></script>
     <script src="js/lexicon_definition.js" type="text/javascript"></script>
     <script src="js/ui_hooks.js" type="text/javascript"></script>
     <script src="js/timeline.js" type="text/javascript"></script>
+    <script src="js/geography.js" type="text/javascript"></script>
     <script src="js/toolbar_menu.js" type="text/javascript"></script>
     <script src="js/interlinear_popup.js" type="text/javascript"></script>
     <script src="js/login.js" type="text/javascript"></script>

Added: trunk/step/step-web/src/main/webapp/js/geography.js
===================================================================
--- trunk/step/step-web/src/main/webapp/js/geography.js	                        (rev 0)
+++ trunk/step/step-web/src/main/webapp/js/geography.js	2011-05-12 16:40:32 UTC (rev 229)
@@ -0,0 +1,59 @@
+/**
+ * Code for showing and interacting with the timeline
+ */
+
+function GeographyWidget(rootElement, passages) {
+	this.rootElement = rootElement;
+	this.initialised = false;
+	this.passages = passages; 
+	
+	var self = this;
+	$(rootElement).hear("show-maps", function(selfElement, data) {
+		$(window).resize(self.onResize);
+		self.initialiseMaps();
+		self.goToReference(self.passages[data.passageId].getReference());
+	});
+	
+	$(rootElement).hear("hide-maps", function(selfElement) {
+		//TODO remove listener to passage change
+	});
+	
+	$(rootElement).hear("passage-changed", function(selfElement, data) {
+		self.goToReference(data.reference);
+	});
+};
+
+/**
+ * initialises the maps
+ */
+GeographyWidget.prototype.initialiseMaps = function() {
+	//default could be Jerusalem
+	var latlng = new google.maps.LatLng(31.777444, 35.234935);
+
+	if(!this.initialised) {
+	    var myOptions = {
+	      zoom: 6,
+	      center: latlng,
+	      mapTypeId: google.maps.MapTypeId.TERRAIN
+	    };
+	    this.map = new google.maps.Map(this.rootElement.get(0), myOptions);
+	    initialised = true;
+	}
+};
+
+GeographyWidget.prototype.goToReference = function(reference) {
+	if(this.map) {
+		var self = this;
+		
+		$.getSafe(GEOGRAPHY_GET_PLACES + reference, function(places) {
+			$.each(places, function(index, place) {
+				var marker = new google.maps.Marker({
+						position: new google.maps.LatLng(place.latitude, place.longitude),
+						map: self.map,
+						title: place.esvName
+				});
+			});
+		});
+	}
+};
+


Property changes on: trunk/step/step-web/src/main/webapp/js/geography.js
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Modified: trunk/step/step-web/src/main/webapp/js/init.js
===================================================================
--- trunk/step/step-web/src/main/webapp/js/init.js	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/webapp/js/init.js	2011-05-12 16:40:32 UTC (rev 229)
@@ -13,9 +13,11 @@
 		initLayout();
 		initDefaultValues();
 		initLexicon();
-		initTimeline();
 		initBookmarks();
+		
 		initData();
+		
+		
 		initInitialEvents();
 		initLogin();
 	});
@@ -127,7 +129,9 @@
 	
 }
 
-
+/**
+ * sets up the initial data and passages
+ */
 function initData() {
 	
 	//get all supported versions
@@ -161,8 +165,9 @@
 		
 		//add the ALL Version, by iterating through all found versions and adding them as the value
 		var allVersionsKey = "";
-		initPassages(parsedResponse, options);
+		var passages = initPassages(parsedResponse, options);
 		initInterlinearPopup(strongedVersions);
+		initModules(passages);
 	});
 }
 
@@ -181,16 +186,20 @@
  * @param allVersions the list of versions to be given to a dropdown
  * @param strongedVersions a list of version containing strong tagging
  * @param options a list of options to be displayed in the toolbar
+ * @return a list of passage objects so that synchronous calls can be made
  */
 function initPassages(allVersions, options) {
 	//set up initial passages with reference data:
+	var passages = [];
+	
 	$(".column").each(
 		function(index) {
 			var passageContainer = $(".passageContainer", this);
 			passageContainer.attr("passage-id", index);
-			new Passage(passageContainer, allVersions, index);
+			passages.push(new Passage(passageContainer, allVersions, index));
 		}
 	);
+	return passages;
 }
 
 /**
@@ -253,8 +262,15 @@
 	new Login();
 }
 
-function initTimeline(mainAppLayout) {
-	new TimelineWidget($("#bottomSection"));
+/**
+ * initialises the modules 
+ * @param passages a list of passages that were provided
+ */
+function initModules(passages) {
+	var bottomSection = $("#bottomSection");
+	
+	new TimelineWidget(bottomSection);
+	new GeographyWidget(bottomSection, passages);
 }
 
 function raiseError(error) {

Modified: trunk/step/step-web/src/main/webapp/js/passage.js
===================================================================
--- trunk/step/step-web/src/main/webapp/js/passage.js	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/webapp/js/passage.js	2011-05-12 16:40:32 UTC (rev 229)
@@ -64,7 +64,7 @@
 		.click(function() {
 			$.shout("bookmark-addition-requested", { reference: self.reference.val() });
 		});
-}
+};
 
 /**
  * sets up the initial passages based on the cookie state
@@ -79,7 +79,7 @@
 	if(cookieVersion != null) {
 		this.version.val(cookieVersion);
 	}
-}
+};
 
 /**
  * changes the passage, with optional parameters
@@ -131,7 +131,7 @@
 			$.shout("passage-changed", { reference: self.reference.val(), passageId: self.passageId, init: init } );
 		});
 	}
-}
+};
 
 
 /**
@@ -144,7 +144,7 @@
 		$(".verse span[onclick*=" + strongReference + "]", this.container).css("text-decoration", "underline");
 		$("span.w[onclick*=" + strongReference + "] span.text", this.container).css("text-decoration", "underline");
 	}
-}
+};
 
 /**
  * This method scans the currently selected options in the menu
@@ -157,7 +157,7 @@
 		selectedOptions.push(value.name);
 	});
 	return selectedOptions;
-}
+};
 
 
 Passage.prototype.getSelectedInterlinearVersion = function() {
@@ -171,7 +171,7 @@
 		return $(".interlinearPopup[passage-id = '" + passageId + "'] > .interlinearVersions").val();
 	}
 	return "";
-}
+};
 
 /**
  * if a number of strongs are given, separated by a space, highlights all of them
@@ -190,14 +190,14 @@
 		} 
 		//we ignore everything else
 	}
-}
+};
 
 /**
  * static method that returns strongs that should not be tagged in the UI
  */
 Passage.getBlackListedStrongs = function() {
 	return ["strong:G3588"];
-}
+};
 
 
 /**
@@ -205,11 +205,18 @@
  */
 Passage.prototype.setToolbar = function(toolbar) {
 	this.toolbar = toolbar;
-}
+};
 
 /**
  * sets the passage container, so that others can insert themselves into it
  */
 Passage.prototype.getPassageContainer = function() {
 	return this.container;
-}
+};
+
+/**
+ * @return the reference text
+ */
+Passage.prototype.getReference = function() {
+	return this.reference.val();
+};

Modified: trunk/step/step-web/src/main/webapp/js/ui_hooks.js
===================================================================
--- trunk/step/step-web/src/main/webapp/js/ui_hooks.js	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/webapp/js/ui_hooks.js	2011-05-12 16:40:32 UTC (rev 229)
@@ -36,16 +36,28 @@
 USER_LOGOUT = "rest/user/logout/";
 USER_REGISTER = "rest/user/register/"
 USER_GET_LOGGED_IN_USER = "rest/user/getLoggedInUser";
+
+GEOGRAPHY_GET_PLACES = "rest/geography/getPlaces/"
 	
 //////////////////////////
 // SOME DEFAULTS
 //////////////////////////
 var DEFAULT_POPUP_WIDTH = 500;
 
+/**
+ * a helper function that returns the passageId relevant to the menu item provided
+ * @param menuItem the menuItem 
+ * @return id of the passage
+ */
+function getPassageId(menuItem) {
+	return $(menuItem).closest(".passageContainer").attr("passage-id");
+}
+
+
 /** a simpler toggler for the menu items */
 function toggleMenuItem(menuItem) {
 	//the hook needs to find the passage id
-	$.shout("pane-menu-toggle-item-" + $(menuItem).closest(".passageContainer").attr("passage-id"), menuItem.name);
+	$.shout("pane-menu-toggle-item-" + getPassageId(menuItem), menuItem.name);
 };
 
 /**
@@ -61,7 +73,7 @@
  */
 function showInterlinearChoices(menuItem) {
 	//get passage id from menu parent
-	$.shout("interlinear-menu-option-triggered-" + $(menuItem).closest(".passageContainer").attr("passage-id")); 
+	$.shout("interlinear-menu-option-triggered-" + getPassageId(menuItem)); 
 };
 
 /**
@@ -117,6 +129,14 @@
 };
 
 /**
+ * shows the geography module
+ */
+function showGeographyModule(menuItem) {
+	showBottomSection();
+	$.shout("show-maps", { passageId : + getPassageId(menuItem) } );
+};
+
+/**
  * shows the bottom section
  */
 function showBottomSection() {

Modified: trunk/step/step-web/src/main/webapp/panemenu.html
===================================================================
--- trunk/step/step-web/src/main/webapp/panemenu.html	2011-05-10 07:04:55 UTC (rev 228)
+++ trunk/step/step-web/src/main/webapp/panemenu.html	2011-05-12 16:40:32 UTC (rev 229)
@@ -11,6 +11,7 @@
 	<li><a href="#">Context</a>
 	<ul>
 		<li><a href="#" onclick="showTimelineModule();">Timeline</a></li>
+		<li><a href="#" onclick="showGeographyModule(this);">Maps</a></li>
 	</ul>
 	</li>
 	<li><a href="#">Tools</a>




More information about the Tynstep-svn mailing list