As consultas geoespaciais se dividem nos seguintes tipos: consulta por distância geográfica, consulta por caixa delimitadora geográfica e consulta por polígono geográfico.
Pré-requisitos
Inicialize uma instância do OTSClient. Para mais informações, consulte Inicialize uma instância do OTSClient.
Crie uma tabela de dados e grave dados nela. Para mais informações, consulte Crie uma tabela de dados e Grave dados.
Crie um índice de pesquisa para a tabela de dados. Para mais informações, consulte Crie um índice de pesquisa.
Consulta por distância geográfica
Para executar uma consulta por distância geográfica, especifique uma área geográfica circular com um ponto central e um raio. O Tablestore retorna as linhas em que o valor de uma coluna específica se encontra na área geográfica circular.
-
Parâmetros
Parâmetro
Descrição
table_name
O nome da tabela de dados.
index_name
O nome do índice de pesquisa.
query
A instrução de consulta para o índice de pesquisa. Para usar a consulta por distância geográfica, defina o tipo de consulta como QueryTypeConst::GEO_DISTANCE_QUERY.
field_name
O nome da coluna a ser consultada. O valor deste parâmetro é do tipo de dados GEOPOINT.
center_point
O par de coordenadas do ponto central. O par de coordenadas consiste em valores de latitude e longitude.
O par de coordenadas está no formato
latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo:35.8,-45.91.distance
O raio da área geográfica circular. O valor deste parâmetro é do tipo de dados DOUBLE. Unidade: metros.
-
Exemplos
O exemplo a seguir mostra como consultar todas as linhas em que os dados da coluna geo estão a no máximo 1.000 metros do ponto central
30.001,120.001em uma tabela de dados.$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_DISTANCE_QUERY, 'query' => array( 'field_name' => 'geo', 'center_point' => '30.001,120.001', 'distance' => 1000 ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Consulta por caixa delimitadora geográfica
Para executar uma consulta por caixa delimitadora geográfica, especifique uma área geográfica retangular com o canto superior esquerdo e o canto inferior direito. O Tablestore retorna as linhas em que o valor de uma coluna específica se encontra na área geográfica retangular.
-
Parâmetros
Parâmetro
Descrição
table_name
O nome da tabela de dados.
index_name
O nome do índice de pesquisa.
query
A instrução de consulta para o índice de pesquisa. Para usar a consulta por caixa delimitadora, defina o tipo de consulta como QueryTypeConst::GEO_BOUNDING_BOX_QUERY.
field_name
O nome da coluna a ser consultada. O valor deste parâmetro é do tipo de dados GEOPOINT.
top_left
O par de coordenadas do canto superior esquerdo da área geográfica retangular.
bottom_right
O par de coordenadas do canto inferior direito da caixa retangular. Especifique uma área geográfica retangular com um canto superior esquerdo e um canto inferior direito.
O par de coordenadas está no formato
latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo:35.8,-45.91. -
Exemplos
O exemplo a seguir mostra como consultar todas as linhas em que os dados da coluna geo estão dentro da área retangular definida por um ponto superior esquerdo (coordenadas:
31,119) e um ponto inferior direito (coordenadas:29,121) em uma tabela de dados.$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_BOUNDING_BOX_QUERY, 'query' => array( 'field_name' => 'geo', 'top_left' => '31,119', 'bottom_right' => '29,121' ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Consulta por polígono geográfico
Para executar uma consulta por polígono geográfico, especifique uma área geográfica poligonal com os pares de coordenadas de vários pontos. O Tablestore retorna as linhas em que o valor de uma coluna específica se encontra na área geográfica poligonal.
-
Parâmetros
Parâmetro
Descrição
table_name
O nome da tabela de dados.
index_name
O nome do índice de pesquisa.
query
A instrução de consulta para o índice de pesquisa. Para usar a consulta por polígono geográfico, defina o tipo de consulta como QueryTypeConst::GEO_POLYGON_QUERY.
field_name
O nome da coluna a ser consultada. O valor deste parâmetro é do tipo de dados GEOPOINT.
points
Os pares de coordenadas dos pontos que definem a área geográfica poligonal. Especifique um polígono com vários pares de coordenadas.
O par de coordenadas está no formato
latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo:35.8,-45.91. -
Exemplos
O exemplo a seguir mostra como consultar todas as linhas em que os dados da coluna geo estão dentro da área poligonal definida pelos pontos com coordenadas
31,120,29,121e29,119em uma tabela de dados.$request = array( 'table_name' => 'php_sdk_test', 'index_name' => 'php_sdk_test_search_index', 'search_query' => array( 'offset' => 0, 'limit' => 2, 'get_total_count' => true, 'query' => array( 'query_type' => QueryTypeConst::GEO_POLYGON_QUERY, 'query' => array( 'field_name' => 'geo', 'points' => array( "31,120", "29,121", "29,119" ) ) ), 'sort' => array( array( 'geo_distance_sort' => array( 'field_name' => 'geo', 'order' => SortOrderConst::SORT_ORDER_ASC, 'distance_type' => GeoDistanceTypeConst::GEO_DISTANCE_PLANE, 'points' => array('30,120') ) ), ) ), 'columns_to_get' => array( 'return_type' => ColumnReturnTypeConst::RETURN_SPECIFIED, 'return_names' => array('geo') ) ); $response = $otsClient->search($request);
Perguntas frequentes
Referências
-
Ao usar um índice de pesquisa para consultar dados, utilize os seguintes métodos de consulta: consulta de termo, consulta de termos, consulta de correspondência total, consulta de correspondência, consulta de frase de correspondência, consulta de prefixo, consulta de intervalo, consulta de curinga, consulta booleana, consulta geoespacial, consulta aninhada e consulta de existência. Utilize diferentes métodos de consulta para buscar dados de várias dimensões de acordo com os requisitos do seu negócio.
Para ordenar ou paginar as linhas que atendem às condições de consulta, use o recurso de ordenação e paginação. Para mais informações, consulte Ordenação e paginação.
Caso precise deduplicar o conjunto de resultados com base em uma coluna específica, utilize o recurso de deduplicação (distinct). Dessa forma, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Deduplicação (distinct).
Para analisar dados em uma tabela de dados, como obter valores extremos, soma e número total de linhas, execute operações de agregação ou instruções SQL. Para mais informações, consulte Agregação e Consulta SQL.
Para obter rapidamente todas as linhas que atendem às condições de consulta sem a necessidade de ordenação, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.