Fix spring street

This commit is contained in:
Victor Shcherb 2020-06-04 14:47:59 +02:00
parent 811e6ebbf9
commit 3c9d940fbb
4 changed files with 234 additions and 191 deletions

View file

@ -141,18 +141,51 @@ public class SearchCoreFactory {
protected void subSearchApiOrPublish(SearchPhrase phrase, SearchResultMatcher resultMatcher, SearchResult res, SearchBaseAPI api)
throws IOException {
phrase.countUnknownWordsMatchMainResult(res);
// TODO select word & delete found words
List<String> ws = phrase.getUnknownSearchWords(res.otherWordsMatch);
if (!res.firstUnknownWordMatches) {
ws.add(phrase.getFirstUnknownSearchWord());
boolean firstUnknownWordMatches = res.firstUnknownWordMatches;
List<String> leftUnknownSearchWords = new ArrayList<String>(phrase.getUnknownSearchWords());
if(res.otherWordsMatch != null) {
leftUnknownSearchWords.removeAll(res.otherWordsMatch);
}
SearchResult newParentSearchResult = null;
if (res.parentSearchResult == null && resultMatcher.getParentSearchResult() == null &&
res.objectType == ObjectType.STREET && res.object instanceof Street && ((Street) res.object).getCity() != null) {
City ct = ((Street) res.object).getCity();
SearchResult cityResult = new SearchResult(phrase);
cityResult.object = ct;
cityResult.objectType = ObjectType.CITY;
cityResult.localeName = ct.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate());
cityResult.otherNames = ct.getAllNames(true);
cityResult.location = ct.getLocation();
cityResult.localeRelatedObjectName = res.file.getRegionName();
cityResult.file = res.file;
phrase.countUnknownWordsMatchMainResult(cityResult);
boolean match = cityResult.firstUnknownWordMatches;
if (cityResult.firstUnknownWordMatches) {
firstUnknownWordMatches = true;
}
if (cityResult.otherWordsMatch != null) {
match = match || leftUnknownSearchWords.removeAll(cityResult.otherWordsMatch);
}
if (match) {
newParentSearchResult = cityResult;
}
}
if (!firstUnknownWordMatches) {
leftUnknownSearchWords.add(0, phrase.getFirstUnknownSearchWord());
}
// publish result to set parentSearchResult before search
resultMatcher.publish(res);
if (!ws.isEmpty() && api != null && api.isSearchAvailable(phrase)) {
SearchPhrase nphrase = phrase.selectWord(res, ws, phrase.isLastUnknownSearchWordComplete());
resultMatcher.setParentSearchResult(res);
if(newParentSearchResult != null) {
SearchResult prev = resultMatcher.setParentSearchResult(newParentSearchResult);
resultMatcher.publish(res);
resultMatcher.setParentSearchResult(prev);
} else {
resultMatcher.publish(res);
}
if (!leftUnknownSearchWords.isEmpty() && api != null && api.isSearchAvailable(phrase)) {
SearchPhrase nphrase = phrase.selectWord(res, leftUnknownSearchWords, phrase.isLastUnknownSearchWordComplete());
SearchResult prev = resultMatcher.setParentSearchResult(res);
api.search(nphrase, resultMatcher);
resultMatcher.setParentSearchResult(res.parentSearchResult);
resultMatcher.setParentSearchResult(prev);
}
}
@ -452,10 +485,6 @@ public class SearchCoreFactory {
r.searchAddressDataByName(req);
for (SearchResult res : immediateResults) {
if (res.objectType == ObjectType.STREET) {
City ct = ((Street) res.object).getCity();
phrase.countUnknownWordsMatch(res,
ct.getName(phrase.getSettings().getLang(), phrase.getSettings().isTransliterate()),
ct.getAllNames(true), 0);
subSearchApiOrPublish(phrase, resultMatcher, res, streetsApi);
} else {
subSearchApiOrPublish(phrase, resultMatcher, res, cityApi);
@ -852,7 +881,7 @@ public class SearchCoreFactory {
int mwords = phrase.countWords(foundName) ;
if (csm.matches(phrase.getUnknownSearchPhrase()) && countExtraWords < mwords) {
countExtraWords = phrase.countWords(foundName);
List<String> otherSearchWords = phrase.getUnknownSearchWords(null);
List<String> otherSearchWords = phrase.getUnknownSearchWords();
nameFilter = null;
if (countExtraWords - 1 < otherSearchWords.size()) {
nameFilter = "";

View file

@ -42,8 +42,10 @@ public class SearchPhrase {
private String fullTextSearchPhrase = "";
private String unknownSearchPhrase = "";
// Words of 2 parts
// words to be used for words span
private List<SearchWord> words = new ArrayList<>();
// Words of 2 parts
private String firstUnknownSearchWord = "";
private List<String> otherUnknownWords = new ArrayList<>();
private boolean lastUnknownSearchWordComplete;
@ -306,17 +308,8 @@ public class SearchPhrase {
return otherUnknownWords.size() > 0;
}
public List<String> getUnknownSearchWords(Collection<String> exclude) {
if(exclude == null || otherUnknownWords.size() == 0 || exclude.size() == 0) {
return otherUnknownWords;
}
List<String> l = new ArrayList<>();
for(String uw : otherUnknownWords) {
if(exclude == null || !exclude.contains(uw)) {
l.add(uw);
}
}
return l;
public List<String> getUnknownSearchWords() {
return otherUnknownWords;
}
@ -752,20 +745,21 @@ public class SearchPhrase {
}
public void countUnknownWordsMatchMainResult(SearchResult sr) {
countUnknownWordsMatch(sr, sr.localeName, sr.otherNames, 0);
public int countUnknownWordsMatchMainResult(SearchResult sr) {
return countUnknownWordsMatch(sr, sr.localeName, sr.otherNames, 0);
}
public void countUnknownWordsMatchMainResult(SearchResult sr, int startsWith) {
countUnknownWordsMatch(sr, sr.localeName, sr.otherNames, startsWith);
public int countUnknownWordsMatchMainResult(SearchResult sr, int amountMatchingWords) {
return countUnknownWordsMatch(sr, sr.localeName, sr.otherNames, amountMatchingWords);
}
public void countUnknownWordsMatch(SearchResult sr, String localeName, Collection<String> otherNames, int startWith) {
public int countUnknownWordsMatch(SearchResult sr, String localeName, Collection<String> otherNames, int amountMatchingWords) {
int r = 0;
if (otherUnknownWords.size() > 0) {
for (int i = 0; i < otherUnknownWords.size(); i++) {
boolean match = false;
if (i < startWith - 1) {
if (i < amountMatchingWords - 1) {
match = true;
} else {
NameStringMatcher ms = getUnknownNameStringMatcher(i);
@ -778,17 +772,23 @@ public class SearchPhrase {
sr.otherWordsMatch = new TreeSet<>();
}
sr.otherWordsMatch.add(otherUnknownWords.get(i));
r++;
}
}
}
if (startWith > 0) {
if (amountMatchingWords > 0) {
sr.firstUnknownWordMatches = true;
r++;
} else {
sr.firstUnknownWordMatches = localeName.equals(getFirstUnknownSearchWord())
boolean match = localeName.equals(getFirstUnknownSearchWord())
|| getFirstUnknownNameStringMatcher().matches(localeName)
|| getFirstUnknownNameStringMatcher().matches(otherNames);
if(match) {
r++;
}
sr.firstUnknownWordMatches = match || sr.firstUnknownWordMatches;
}
return r;
}

View file

@ -20,7 +20,7 @@ public class SearchResult {
// internal package fields (used for sorting)
public SearchResult parentSearchResult;
String wordsSpan ;
boolean firstUnknownWordMatches = true;
boolean firstUnknownWordMatches;
Collection<String> otherWordsMatch = null;

View file

@ -11,161 +11,175 @@
},
"phrase": "spring street",
"results": [
"Spring (Natural)",
"Spring (Spring / Natural)",
"Spring (Ice rink / Sport)",
"Spring (Bridge / Transport construction)",
"Spring Street, South Nyack",
"Spring Street, Tomkins Cove",
"Spring Street, Southfields",
"Spring Street, Hastings-on-Hudson",
"Spring Street, Pleasantville",
"Spring Street (Mount Pleasant), Hawthorne",
"Spring Street, Durland",
"Spring Street, Warwick",
"Spring Street, Nelsonville",
"Spring Street, Goshen",
"Spring Street (Little Italy), Manhattan",
"Spring Street, Maybrook",
"West Spring Street, Maybrook",
"Spring Street, South Salem",
"Spring Street, Groveville",
"Spring Street, East Middletown",
"Spring Street, Montgomery",
"Spring Street, Chelsea",
"Spring Street, Wappingers Falls",
"Spring Street, Cold Spring Harbor",
"Spring Street, Staten Island",
"Spring Street, East Meadow",
"Spring Street, Inwood",
"Spring Street, Port Jervis",
"Spring Street, Roosevelt",
"Spring Street, Pawling",
"Spring Street, Fairview",
"Spring Street (Wyandanch), Wheatley Heights",
"Spring Street, Wyandanch",
"Spring Street, East Massapequa",
"Spring Street, Ellenville",
"Spring Street, Monticello",
"Spring Street, Tillson",
"Spring Street, Port Jefferson",
"Spring Street (Smallwood), Bethel",
"Spring Street, Liberty",
"Spring Street (Livingston Manor), Rockland",
"Spring Street, Livingston Manor",
"Market Street, Cold Spring",
"New Street, Cold Spring",
"West Street, Cold Spring",
"Fish Street, Cold Spring",
"North Street, Cold Spring",
"Rock Street, Cold Spring",
"Stone Street, Cold Spring",
"Wall Street, Cold Spring",
"Cross Street, Cold Spring",
"Main Street, Cold Spring",
"Chestnut Street, Cold Spring",
"Furnace Street, Cold Spring",
"Garden Street, Cold Spring",
"Church Street, Cold Spring",
"Oak Street, Cold Spring",
"Cherry Street, Cold Spring",
"High Street, Cold Spring",
"Academy Street, Cold Spring",
"Haldane Street, Cold Spring",
"West Bank Street, Cold Spring",
"B Street, Cold Spring",
"West Belvedere Street, Cold Spring",
"Parrot Street, Cold Spring",
"Bank Street, Cold Spring",
"Orchard Street, Cold Spring",
"East Belvedere Street, Cold Spring",
"Pine Street, Cold Spring",
"Parsonage Street, Cold Spring",
"Hamilton Street, Cold Spring",
"Fair Street, Cold Spring",
"Cedar Street, Cold Spring",
"Flora Street, Cold Spring Harbor",
"West Main Street, Cold Spring Harbor",
"Grove Street, Cold Spring Harbor",
"Midland Street, Cold Spring Harbor",
"Rusco Street, Cold Spring Harbor",
"Main Street, Cold Spring Harbor",
"Chestnut Street, Cold Spring Harbor",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Academy Street, Cold Spring",
"Bank Street, Cold Spring",
"B Street, Cold Spring",
"Cedar Street, Cold Spring",
"Cherry Street, Cold Spring",
"Chestnut Street, Cold Spring",
"Church Street, Cold Spring",
"Cross Street, Cold Spring",
"East Belvedere Street, Cold Spring",
"Fair Street, Cold Spring",
"Fish Street, Cold Spring",
"Furnace Street, Cold Spring",
"Garden Street, Cold Spring",
"Haldane Street, Cold Spring",
"Hamilton Street, Cold Spring",
"High Street, Cold Spring",
"Main Street, Cold Spring",
"Market Street, Cold Spring",
"New Street, Cold Spring",
"North Street, Cold Spring",
"Oak Street, Cold Spring",
"Orchard Street, Cold Spring",
"Parrot Street, Cold Spring",
"Parsonage Street, Cold Spring",
"Pine Street, Cold Spring",
"Rock Street, Cold Spring",
"Stone Street, Cold Spring",
"Wall Street, Cold Spring",
"West Bank Street, Cold Spring",
"West Belvedere Street, Cold Spring",
"West Street, Cold Spring",
"Chestnut Street, Cold Spring Harbor",
"Flora Street, Cold Spring Harbor",
"Grove Street, Cold Spring Harbor",
"Main Street, Cold Spring Harbor",
"Midland Street, Cold Spring Harbor",
"Rusco Street, Cold Spring Harbor",
"Spring Street, Cold Spring Harbor",
"West Main Street, Cold Spring Harbor",
"Kraw Street, Spring Glen",
"Munro Street, Cold Spring",
"State Street, Cold Spring",
"Spring Street Salt Shed",
"6th Avenue & Spring Street",
"Spring Street Park",
"Broadway & Spring Street",
"Broadway/Spring Street",
"Spring Street Station (6) - Downtown",
"Spring Street Station (6) - Uptown & The Bronx",
"Richmond Road & Spring Street",
"West Spring Street School",
"Spring Street Gallery",
"Spring Street Apartments",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring Street",
"Spring (Natural) [[1, POI_TYPE, 1.000, 0.00 km]]",
"Spring (Spring / Natural) [[1, POI_TYPE, 1.000, 0.00 km]]",
"Spring (Ice rink / Sport) [[1, POI_TYPE, 1.000, 0.00 km]]",
"Spring (Bridge / Transport construction) [[1, POI_TYPE, 1.000, 0.00 km]]",
"Spring Street, Cold Spring Harbor [[3, STREET, 0.310, 56.10 km]]",
"Spring Street, South Nyack [[2, STREET, 3.000, 10.57 km]]",
"Spring Street, Tomkins Cove [[2, STREET, 3.000, 16.77 km]]",
"Spring Street, Southfields [[2, STREET, 3.000, 18.10 km]]",
"Spring Street, Hastings-on-Hudson [[2, STREET, 3.000, 18.94 km]]",
"Spring Street, Pleasantville [[2, STREET, 3.000, 20.89 km]]",
"Spring Street (Mount Pleasant), Hawthorne [[2, STREET, 3.000, 21.20 km]]",
"Spring Street, Durland [[2, STREET, 3.000, 28.46 km]]",
"Spring Street, Warwick [[2, STREET, 3.000, 30.94 km]]",
"Spring Street, Nelsonville [[2, STREET, 3.000, 35.60 km]]",
"Spring Street, Goshen [[2, STREET, 3.000, 40.16 km]]",
"Spring Street (Little Italy), Manhattan [[2, STREET, 3.000, 43.76 km]]",
"Spring Street, Maybrook [[2, STREET, 3.000, 43.78 km]]",
"West Spring Street, Maybrook [[2, STREET, 3.000, 43.83 km]]",
"Spring Street, South Salem [[2, STREET, 3.000, 44.74 km]]",
"Spring Street, Groveville [[2, STREET, 3.000, 45.81 km]]",
"Spring Street, East Middletown [[2, STREET, 3.000, 47.95 km]]",
"Spring Street, Montgomery [[2, STREET, 3.000, 48.53 km]]",
"Spring Street, Chelsea [[2, STREET, 3.000, 49.19 km]]",
"Spring Street, Wappingers Falls [[2, STREET, 3.000, 55.17 km]]",
"Spring Street, Staten Island [[2, STREET, 3.000, 56.86 km]]",
"Spring Street, East Meadow [[2, STREET, 3.000, 59.81 km]]",
"Spring Street, Inwood [[2, STREET, 3.000, 60.63 km]]",
"Spring Street, Port Jervis [[2, STREET, 3.000, 61.24 km]]",
"Spring Street, Roosevelt [[2, STREET, 3.000, 61.89 km]]",
"Spring Street, Pawling [[2, STREET, 3.000, 62.39 km]]",
"Spring Street, Fairview [[2, STREET, 3.000, 68.69 km]]",
"Spring Street (Wyandanch), Wheatley Heights [[2, STREET, 3.000, 69.75 km]]",
"Spring Street, Wyandanch [[2, STREET, 3.000, 69.95 km]]",
"Spring Street, East Massapequa [[2, STREET, 3.000, 71.81 km]]",
"Spring Street, Ellenville [[2, STREET, 3.000, 73.53 km]]",
"Spring Street, Monticello [[2, STREET, 3.000, 79.96 km]]",
"Spring Street, Tillson [[2, STREET, 3.000, 80.56 km]]",
"Spring Street, Port Jefferson [[2, STREET, 3.000, 84.37 km]]",
"Spring Street (Smallwood), Bethel [[2, STREET, 3.000, 88.85 km]]",
"Spring Street, Liberty [[2, STREET, 3.000, 95.92 km]]",
"Spring Street (Livingston Manor), Rockland [[2, STREET, 3.000, 108.88 km]]",
"Spring Street, Livingston Manor [[2, STREET, 3.000, 108.88 km]]",
"Spring Street Salt Shed [[2, POI, 2.000, 43.18 km]]",
"6th Avenue & Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.31 km]]",
"Spring Street Park [[2, POI, 2.000, 43.32 km]]",
"Broadway & Spring Street [[2, POI, 2.000, 43.60 km]]",
"Broadway/Spring Street [[2, POI, 2.000, 43.61 km]]",
"Spring Street Station (6) - Downtown [[2, POI, 2.000, 43.65 km]]",
"Spring Street [[2, POI, 2.000, 43.67 km]]",
"Spring Street Station (6) - Uptown & The Bronx [[2, POI, 2.000, 43.68 km]]",
"Richmond Road & Spring Street [[2, POI, 2.000, 56.88 km]]",
"Spring Street [[2, POI, 2.000, 183.80 km]]",
"West Spring Street School [[2, POI, 2.000, 204.27 km]]",
"Spring Street [[2, POI, 2.000, 208.18 km]]",
"Spring Street [[2, POI, 2.000, 217.24 km]]",
"Spring Street Gallery [[2, POI, 2.000, 219.70 km]]",
"Spring Street [[2, POI, 2.000, 220.16 km]]",
"Spring Street [[2, POI, 2.000, 252.77 km]]",
"Spring Street [[2, POI, 2.000, 267.17 km]]",
"Spring Street Apartments [[2, POI, 2.000, 279.20 km]]",
"Spring Street [[2, POI, 2.000, 414.96 km]]",
"Spring Street Salt Shed [[2, POI, 2.000, 43.18 km]]",
"6th Avenue & Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.25 km]]",
"Spring Street [[2, POI, 2.000, 43.31 km]]",
"Spring Street Park [[2, POI, 2.000, 43.32 km]]",
"Broadway & Spring Street [[2, POI, 2.000, 43.60 km]]",
"Broadway/Spring Street [[2, POI, 2.000, 43.61 km]]",
"Spring Street Station (6) - Downtown [[2, POI, 2.000, 43.65 km]]",
"Spring Street [[2, POI, 2.000, 43.67 km]]",
"Spring Street Station (6) - Uptown & The Bronx [[2, POI, 2.000, 43.68 km]]",
"Richmond Road & Spring Street [[2, POI, 2.000, 56.88 km]]",
"Spring Street [[2, POI, 2.000, 183.80 km]]",
"West Spring Street School [[2, POI, 2.000, 204.27 km]]",
"Spring Street [[2, POI, 2.000, 208.18 km]]",
"Spring Street [[2, POI, 2.000, 217.24 km]]",
"Spring Street Gallery [[2, POI, 2.000, 219.70 km]]",
"Spring Street [[2, POI, 2.000, 220.16 km]]",
"Spring Street [[2, POI, 2.000, 252.77 km]]",
"Spring Street [[2, POI, 2.000, 267.17 km]]",
"Spring Street Apartments [[2, POI, 2.000, 279.20 km]]",
"Spring Street [[2, POI, 2.000, 414.96 km]]",
"Academy Street, Cold Spring [[2, STREET, 0.310, 35.00 km]]",
"Bank Street, Cold Spring [[2, STREET, 0.310, 35.19 km]]",
"B Street, Cold Spring [[2, STREET, 0.310, 35.11 km]]",
"Cedar Street, Cold Spring [[2, STREET, 0.310, 35.36 km]]",
"Cherry Street, Cold Spring [[2, STREET, 0.310, 34.92 km]]",
"Chestnut Street, Cold Spring [[2, STREET, 0.310, 34.79 km]]",
"Church Street, Cold Spring [[2, STREET, 0.310, 34.84 km]]",
"Cross Street, Cold Spring [[2, STREET, 0.310, 34.75 km]]",
"East Belvedere Street, Cold Spring [[2, STREET, 0.310, 35.24 km]]",
"Fair Street, Cold Spring [[2, STREET, 0.310, 35.35 km]]",
"Fish Street, Cold Spring [[2, STREET, 0.310, 34.51 km]]",
"Furnace Street, Cold Spring [[2, STREET, 0.310, 34.81 km]]",
"Garden Street, Cold Spring [[2, STREET, 0.310, 34.84 km]]",
"Haldane Street, Cold Spring [[2, STREET, 0.310, 35.00 km]]",
"Hamilton Street, Cold Spring [[2, STREET, 0.310, 35.31 km]]",
"High Street, Cold Spring [[2, STREET, 0.310, 34.95 km]]",
"Main Street, Cold Spring [[2, STREET, 0.310, 34.78 km]]",
"Market Street, Cold Spring [[2, STREET, 0.310, 34.29 km]]",
"New Street, Cold Spring [[2, STREET, 0.310, 34.40 km]]",
"North Street, Cold Spring [[2, STREET, 0.310, 34.51 km]]",
"Oak Street, Cold Spring [[2, STREET, 0.310, 34.89 km]]",
"Orchard Street, Cold Spring [[2, STREET, 0.310, 35.20 km]]",
"Parrot Street, Cold Spring [[2, STREET, 0.310, 35.18 km]]",
"Parsonage Street, Cold Spring [[2, STREET, 0.310, 35.31 km]]",
"Pine Street, Cold Spring [[2, STREET, 0.310, 35.28 km]]",
"Rock Street, Cold Spring [[2, STREET, 0.310, 34.63 km]]",
"Stone Street, Cold Spring [[2, STREET, 0.310, 34.67 km]]",
"Wall Street, Cold Spring [[2, STREET, 0.310, 34.74 km]]",
"West Bank Street, Cold Spring [[2, STREET, 0.310, 35.05 km]]",
"West Belvedere Street, Cold Spring [[2, STREET, 0.310, 35.15 km]]",
"West Street, Cold Spring [[2, STREET, 0.310, 34.48 km]]",
"Chestnut Street, Cold Spring Harbor [[2, STREET, 0.310, 58.45 km]]",
"Flora Street, Cold Spring Harbor [[2, STREET, 0.310, 56.16 km]]",
"Grove Street, Cold Spring Harbor [[2, STREET, 0.310, 56.67 km]]",
"Main Street, Cold Spring Harbor [[2, STREET, 0.310, 58.23 km]]",
"Midland Street, Cold Spring Harbor [[2, STREET, 0.310, 57.04 km]]",
"Rusco Street, Cold Spring Harbor [[2, STREET, 0.310, 57.95 km]]",
"Spring Street, Cold Spring Harbor [[2, STREET, 0.310, 56.10 km]]",
"West Main Street, Cold Spring Harbor [[2, STREET, 0.310, 56.26 km]]",
"Kraw Street, Spring Glen [[2, STREET, 0.310, 69.40 km]]",
"Munro Street, Cold Spring [[2, STREET, 0.310, 292.27 km]]",
"State Street, Cold Spring [[2, STREET, 0.310, 292.31 km]]",
"Cold Spring, Cold Spring [[2, STREET, 0.310, 34.42 km]]",
"Spring Hill Road, Cold Spring Harbor [[2, STREET, 0.310, 55.96 km]]",
"Spring, Cold Spring Harbor [[2, STREET, 0.310, 56.22 km]]",
"Spring Road, Cold Spring Harbor [[2, STREET, 0.310, 56.79 km]]",
"Market Street, Cold Spring [[2, STREET, 0.310, 34.29 km]]",
"New Street, Cold Spring [[2, STREET, 0.310, 34.40 km]]",
"Fish Street, Cold Spring [[2, STREET, 0.310, 34.51 km]]",
"North Street, Cold Spring [[2, STREET, 0.310, 34.51 km]]",
"Rock Street, Cold Spring [[2, STREET, 0.310, 34.63 km]]",
"Stone Street, Cold Spring [[2, STREET, 0.310, 34.67 km]]",
"Wall Street, Cold Spring [[2, STREET, 0.310, 34.74 km]]",
"Cross Street, Cold Spring [[2, STREET, 0.310, 34.75 km]]",
"Main Street, Cold Spring [[2, STREET, 0.310, 34.78 km]]",
"Chestnut Street, Cold Spring [[2, STREET, 0.310, 34.79 km]]",
"Furnace Street, Cold Spring [[2, STREET, 0.310, 34.81 km]]",
"Garden Street, Cold Spring [[2, STREET, 0.310, 34.84 km]]",
"Church Street, Cold Spring [[2, STREET, 0.310, 34.84 km]]",
"Oak Street, Cold Spring [[2, STREET, 0.310, 34.89 km]]",
"Cherry Street, Cold Spring [[2, STREET, 0.310, 34.92 km]]",
"High Street, Cold Spring [[2, STREET, 0.310, 34.95 km]]",
"Academy Street, Cold Spring [[2, STREET, 0.310, 35.00 km]]",
"Haldane Street, Cold Spring [[2, STREET, 0.310, 35.00 km]]",
"West Bank Street, Cold Spring [[2, STREET, 0.310, 35.05 km]]",
"B Street, Cold Spring [[2, STREET, 0.310, 35.11 km]]",
"West Belvedere Street, Cold Spring [[2, STREET, 0.310, 35.15 km]]",
"Parrot Street, Cold Spring [[2, STREET, 0.310, 35.18 km]]",
"Bank Street, Cold Spring [[2, STREET, 0.310, 35.19 km]]",
"Orchard Street, Cold Spring [[2, STREET, 0.310, 35.20 km]]",
"East Belvedere Street, Cold Spring [[2, STREET, 0.310, 35.24 km]]",
"Pine Street, Cold Spring [[2, STREET, 0.310, 35.28 km]]",
"Parsonage Street, Cold Spring [[2, STREET, 0.310, 35.31 km]]",
"Hamilton Street, Cold Spring [[2, STREET, 0.310, 35.31 km]]",
"Fair Street, Cold Spring [[2, STREET, 0.310, 35.35 km]]",
"Cedar Street, Cold Spring [[2, STREET, 0.310, 35.36 km]]",
"Flora Street, Cold Spring Harbor [[2, STREET, 0.310, 56.16 km]]",
"West Main Street, Cold Spring Harbor [[2, STREET, 0.310, 56.26 km]]",
"Grove Street, Cold Spring Harbor [[2, STREET, 0.310, 56.67 km]]",
"Midland Street, Cold Spring Harbor [[2, STREET, 0.310, 57.04 km]]",
"Rusco Street, Cold Spring Harbor [[2, STREET, 0.310, 57.95 km]]",
"Main Street, Cold Spring Harbor [[2, STREET, 0.310, 58.23 km]]",
"Chestnut Street, Cold Spring Harbor [[2, STREET, 0.310, 58.45 km]]"
],
"amenities": [
{