2

うまくいけば、私は私の問題を説明することができます。

私はGoogleのオートコンプリートを使用して人の目的地を取得しています。目的地が決まったら、googleのplaceapiを使用してジオメトリビューポートを検索できます。しかし、ビューポートは北/東から南/西にあります。私の問題はElasticsearchで、geo_bboxが上/左から下/右に移動することです。以下の例を参照してください。

Google Place APIの応答:

{
   "html_attributions" : [],
   "result" : {
      "address_components" : [
         {
            "long_name" : "Devon",
            "short_name" : "Devon",
            "types" : [ "administrative_area_level_2", "political" ]
         },
         {
            "long_name" : "England",
            "short_name" : "England",
            "types" : [ "administrative_area_level_1", "political" ]
         },
         {
            "long_name" : "United Kingdom",
            "short_name" : "GB",
            "types" : [ "country", "political" ]
         }
      ],
      "adr_address" : "\u003cspan class=\"region\"\u003eDevon\u003c/span\u003e, \u003cspan class=\"country-name\"\u003eUK\u003c/span\u003e",
      "formatted_address" : "Devon, UK",
      "geometry" : {
         "location" : {
            "lat" : 50.77721349999999,
            "lng" : -3.9994610
         },
         "viewport" : {
            "northeast" : {
               "lat" : 51.24619840,
               "lng" : -2.88664060
            },
            "southwest" : {
               "lat" : 50.20189620,
               "lng" : -4.68065630
            }
         }
      },
      "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png",
      "id" : "065fb13848aeae653fe25ee19d8a0a0289bd64dc",
      "name" : "Devon",
      "reference" : "CnRoAAAAN84gxrolBJLF_flpuwIyGum7pjln_KP9NJIHydIHMfbAo93nUdHSyYbv90GPUlW8Jx5D2ba-2fJHyzcHAdkZLkaJzSBEfj7dkR4NnBWzK9mFikZdyz3cee9IvOruHCZaicKfiXJP18jSfxXkvVv8gBIQrAopOdNbGQ6ovqEaEUqrxxoUaUYJEahZx7mTfJwEWOnxjTP3e9A",
      "types" : [ "administrative_area_level_2", "political" ],
      "url" : "https://maps.google.com/maps/place?q=Devon&ftid=0x486bf8abdac00247:0x12c6ba0cca9c58fd"
   },
   "status" : "OK"
}

ElasticSearchの例

{
    "filtered" : {
        "query" : {
            "match_all" : {}
        },
        "filter" : {
            "geo_bounding_box" : {
                "pin.location" : {
                    "top_left" : {
                        "lat" : 40.73,
                        "lon" : -74.1
                    },
                    "bottom_right" : {
                        "lat" : 40.717,
                        "lon" : -73.99
                    }
                }
            }
        }
    }
}

グーグルからより多くの情報を取得するためのより良い方法はありますか、またはelasticsearchは別のコーナーから機能することができますか?ドキュメントはこれを言っていませんが?

4

2 に答える 2

3

ああ、私はどれほど厚いのか。

私がする必要があるのは、結果をエラスティック検索と交換することだけでした。すなわち、

{
    "filtered" : {
        "query" : {
            "match_all" : {}
        },
        "filter" : {
            "geo_bounding_box" : {
                "pin.location" : {
                    "top_left" : {
                        "lat" : result.northeast.lat,
                        "lon" : result.southwest.lon
                    },
                    "bottom_right" : {
                        "lat" : result.southwest.lat,
                        "lon" : result.northwest.lon
                    }
                }
            }
        }
    }
}
于 2013-01-10T22:13:13.050 に答える
0

北東と南西の角がわかっている場合は、北西(左上)と南東(右下)の角を計算できます。

var NE = bounds.getNorthEast();
var SW = bounds.getSouthWest();

// calculated points
var NW = new google.maps.LatLng(NE.lat(), SW.lng());
var SE = new google.maps.LatLng(SW.lat(),NE.lng());
于 2013-01-10T15:47:44.003 に答える