[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