Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 251 lines (186 sloc) 6.61 KB

Overview

The Geofinder application leverages DSE Search's geospatial, type-ahead, and facet query capabilities to provide the easy-to-use UI end users expect. As new POI data is added to the cluster, it will be indexed immediately and be searchable as soon as it is ingested.

--

Assumptions

DSE running, and already loaded the sample data into DSE that is backed by DSE Search.

  • Java 8 installed
  • maven

build:

git clone https://github.com/payamp/geofinder-api.git

mvn clean package

run:

usage: java -jar geofinder-api.jar
 -h,--hostname <arg>   cassandra host (required)
 -p,--password <arg>   Cassandra user password
 -s,--ssl              Use SSL, expects a truststore.jks file to be in
                       current directory
 -u,--user <arg>       Cassandra username

##Connecting app to DSE

SSL with authentication enabled example:

java -Djavax.net.ssl.trustStore=/path/to/client.truststore -Djavax.net.ssl.trustStorePassword=password -jar target/geofinder-api.jar -h 192.168.1.190 -u cassandra -p ChangeMe123 -ssl

If you installed using OpsCenter LCM, you will find the truststore here:

/etc/dse/keystores/client.truststore

using localhost without auth or SSL:

java -jar target/geofinder-api.jar -h localhost

User interface

The web app is exposed on port 9000

If you are running this from assethub, you will need to point your web browser at:

http://node0:9000/


JSON Endpoints

Name Suggest

GET /api/name-suggest?name=string&sort=sortfield (asc desc)

URL Parameters:

Field Description Required Example
name the place name you want to search YES
sort The field you want to sort on NO "population desc" or "date asc"

Sample response

{
  "names": [
    "Chalgomchin",
    "Chichali Karam",
    "Chichali-e Seh",
    "Park-e Jangali-ye Chitgar",
    "Qanchi Gol",
    "Kuh-e Saghalchi",
    "Chin Parch",
    "Ilkhchi Kumeh",
    "Ichin",
    "Chinam Dahaneh",
    "Parchi Kola",
    "Shilat Chikrud",
    "Kuh-e Qal`ehchi",
    "Garachi",
    "Kuh-e Lak Chir",
    "Kuh-e Chidar",
    "Chir-e `Olya",
    "Chichuran",
    "Hajjiabad-e Okhtachi",
    "Alichin",
    "Chianeh",
    "Baleqchi",
    "Qomchian",
    "Eynehchi",
    "Turchi",
    "Kuh-e Chia",
    "Kuh-e Nochirya",
    "Kuh-e Tofangchian",
    "Pasha Chiftlik",
    "Pano Chiftlik",
    "Chai Chill",
    "Kachiones",
    "Chchinnokefalos",
    "Laxia tou Vachioti",
    "Kokkinorachi",
    "Chchinnomoutti",
    "Archistratigos",
    "Kuh-e Cheraghchi",
    "Kuh-e Kachi",
    "Kalateh-ye Chikal",
    "Kuh-e Chidandar",
    "Saqarchin",
    "Chiftlikoudhkia",
    "Kochinoyia",
    "Kochinoin",
    "Agios Vichianos",
    "Agios Tychikos",
    "Chistron Vounon",
    "Uqchi Kuchek",
    "Hivehchi-ye Bala"
  ],
  "query": "SELECT name from geonames.locations where solr_query = '{ \"q\":\"*:*\", \"fq\":\"name_lowercase:*chi*\"}' LIMIT 50"
}

Geo Contextual suggest

For example:

  • Things Near me
GET /api/geo-name-suggest

URL Parameters:

Field Description Required Default min / max
name the string you want to search YES N/A
lat Latitude YES N/A -90.0 / 90.0
lng Longitude YES N/A -180.0 / 180.0
r The radius of the search in (km) NO 5.0 1.0 / 20.0

Faceting using a geospatial filter query

Given a map extent, what category, and subcategory of POIs are available.

In solr you can filter on an arbitrary rectangle by using the search geo:[45,-94 TO 46,-93] searching for a bounding.

The order of the query is [lower-left TO upper-right], and the order is lat, lng.

GET /api/geo-facet-category?parameters

URL Parameters:

Field Description Required min / max
lllat Lower Left Latitude YES -90.0 / 90.0
lllng Lower Left Longitude YES -180.0 / 180.0
urlat Upper Right Latitude YES -90.0 / 90.0
urlng Upper Right Longitude YES -180.0 / 180.0
GET /api/geo-facet-category-subcategory?parameters

URL Parameters:

Field Description Required min / max
lllat Lower Left Latitude YES -90.0 / 90.0
lllng Lower Left Longitude YES -180.0 / 180.0
urlat Upper Right Latitude YES -90.0 / 90.0
urlng Upper Right Longitude YES -180.0 / 180.0

Searching for a particular category or subcategory of POI within a map extent.

GET /api/geo-bbox-filter-on-category?parameters
Field Description Required min / max
category Category YES N/A
subcategory Subcategory NO N/A
num_records Number of records (default 20) NO
lllat Lower Left Latitude YES -90.0 / 90.0
lllng Lower Left Longitude YES -180.0 / 180.0
urlat Upper Right Latitude YES -90.0 / 90.0
urlng Upper Right Longitude YES -180.0 / 180.0

###sample response (truncated):

{
  "category,subcategory": [
    {
      "field": "category",
      "value": "Airline",
      "count": 116,
      "pivot": [
        {
          "field": "subcategory",
          "value": "",
          "count": 116
        }
      ]
    },
    {
      "field": "category",
      "value": "Airport",
      "count": 23,
      "pivot": [
        {
          "field": "subcategory",
          "value": "",
          "count": 23
        }
      ]
    }
  ]
}

Reference:

calculation on converting how many degrees will be lat lon info

theta = latitude;
let one_deg_lon_in_km = 111.13295 - 0.55982 * Math.cos(2 * theta) + 0.00117 * Math.cos(4 * theta);
You can’t perform that action at this time.