As consultas geoespaciais dividem-se nos seguintes tipos: consulta por distância geográfica, consulta por caixa delimitadora geográfica e consulta por polígono geográfico.
Pré-requisitos
Instância OTSClient inicializada. Para mais informações, consulte Inicializar uma instância OTSClient.
Tabela de dados criada e preenchida. Para mais informações, consulte Criar tabelas de dados e Gravar dados.
Índice de busca criado para a tabela de dados. Para mais informações, consulte Criar índices de busca.
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 cujo valor da coluna especificada esteja dentro dessa área circular.
-
Parâmetros
Parâmetro
Descrição
FieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
CenterPoint
Par de coordenadas do ponto central, composto pelos valores de latitude e longitude.
O formato do par de coordenadas é latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo: "35.8,-45.91".
DistanceInMeter
Raio da área geográfica circular. O valor deste parâmetro é do tipo de dados DOUBLE. Unidade: metro.
Query
Instrução de consulta para o índice de busca. Defina o tipo de consulta como GeoDistanceQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de busca.
ColumnsToGet
Define se todas as colunas das linhas correspondentes às condições da consulta serão retornadas. Configure os parâmetros ReturnAll, Columns e ReturnAllFromIndex.
Por padrão,
ReturnAlléfalse, ou seja, apenas as colunas de chave primária são retornadas. Para retornar colunas adicionais, use uma das seguintes opções:-
Defina
Columnspara especificar quais colunas retornar. -
Defina
ReturnAllFromIndexcomotruepara retornar todas as colunas do índice de busca.
Defina
ReturnAllcomotruepara retornar todas as colunas da tabela de dados. -
-
Exemplo
O código de exemplo a seguir mostra como consultar as linhas em que o valor da coluna geo_type_col está dentro de uma área geográfica circular na tabela.
/// <summary> /// Query the rows in which the value of the geo_type_col column falls within a circular geographical area in a table. /// </summary> /// <param name="client"></param> public static void GeoDistanceQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoDistanceQuery geoDistanceQuery = new GeoDistanceQuery(); // Set the query type to GeoDistanceQuery. geoDistanceQuery.FieldName = Geo_type_col; geoDistanceQuery.CenterPoint = "10,11"; // Specify the coordinate pair for a central point. geoDistanceQuery.DistanceInMeter = 10000; // Set the radius of the circular geographical area to 10,000. Unit: meter. searchQuery.Query = geoDistanceQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
Consulta por caixa delimitadora geográfica
Na consulta por caixa delimitadora geográfica, especifique uma área geográfica retangular com um canto superior esquerdo e um canto inferior direito. O Tablestore retorna as linhas cujo valor da coluna especificada esteja dentro dessa área retangular.
-
Parâmetros
Parâmetro
Descrição
FieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
TopLeft
Par de coordenadas do canto superior esquerdo da área geográfica retangular.
BottomRight
Par de coordenadas do canto inferior direito da área geográfica retangular. Os pares de coordenadas dos cantos superior esquerdo e inferior direito definem uma área geográfica retangular única.
O formato do par de coordenadas é latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo: "35.8,-45.91".
Query
Instrução de consulta para o índice de busca. Defina o tipo de consulta como GeoBoundingBoxQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de busca.
ColumnsToGet
Define se todas as colunas das linhas correspondentes às condições da consulta serão retornadas. Configure os parâmetros ReturnAll, Columns e ReturnAllFromIndex.
Por padrão,
ReturnAlléfalse, ou seja, apenas as colunas de chave primária são retornadas. Para retornar colunas adicionais, use uma das seguintes opções:-
Defina
Columnspara especificar quais colunas retornar. -
Defina
ReturnAllFromIndexcomotruepara retornar todas as colunas do índice de busca.
Defina
ReturnAllcomotruepara retornar todas as colunas da tabela de dados. -
-
Exemplo
O código de exemplo a seguir demonstra como consultar as linhas em que o valor da coluna geo_type_col está dentro da área geográfica retangular cujo canto superior esquerdo é "10,0" e o canto inferior direito é "0,10".
/// <summary> /// Query the rows in which the value of the geo_type_col column is within a rectangular geographical area in a table. The value of the geo_type_col column is of the GEOPOINT data type. The rectangular geographical area is specified by an upper-left corner whose coordinate pair is "10,0" and a lower-right corner whose coordinate pair is "0,10". /// </summary> /// <param name="client"></param> public static void GeoBoundingBoxQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoBoundingBoxQuery geoBoundingBoxQuery = new GeoBoundingBoxQuery(); // Set the query type to GeoBoundingBoxQuery. geoBoundingBoxQuery.FieldName = Geo_type_col; // Specify the name of the column that you want to query. geoBoundingBoxQuery.TopLeft = "10,0"; // Specify the coordinate pair for the upper-left corner of the rectangular geographical area. geoBoundingBoxQuery.BottomRight = "0,10"; // Specify coordinate pair for the lower-right corner of the rectangular geographical area. searchQuery.Query = geoBoundingBoxQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); var columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string> { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
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 cujo valor da coluna especificada esteja contido nessa área poligonal.
-
Parâmetros
Parâmetro
Descrição
FieldName
Nome da coluna a consultar. O valor deste parâmetro deve ser do tipo de dados GEOPOINT.
Points
Pares de coordenadas dos pontos que definem uma área geográfica poligonal.
O formato do par de coordenadas é latitude,longitude. Valores válidos de latitude: [-90,+90]. Valores válidos de longitude: [-180,+180]. Exemplo: "35.8,-45.91".
Query
Instrução de consulta para o índice de busca. Defina o tipo de consulta como GeoPolygonQuery.
TableName
Nome da tabela de dados.
IndexName
Nome do índice de busca.
ColumnsToGet
Define se todas as colunas das linhas correspondentes às condições da consulta serão retornadas. Configure os parâmetros ReturnAll, Columns e ReturnAllFromIndex.
Por padrão,
ReturnAlléfalse, ou seja, apenas as colunas de chave primária são retornadas. Para retornar colunas adicionais, use uma das seguintes opções:-
Defina
Columnspara especificar quais colunas retornar. -
Defina
ReturnAllFromIndexcomotruepara retornar todas as colunas do índice de busca.
Defina
ReturnAllcomotruepara retornar todas as colunas da tabela de dados. -
-
Exemplo
O código de exemplo a seguir ilustra como consultar as linhas em que o valor da coluna geo_type_col está dentro de uma área geográfica poligonal na tabela.
/// <summary> /// Query the rows in which the value of the geo_type_col column is within a polygon geographical area in a table. /// </summary> /// <param name="client"></param> public static void GeoPolygonQuery(OTSClient client) { SearchQuery searchQuery = new SearchQuery(); GeoPolygonQuery geoPolygonQuery = new GeoPolygonQuery(); // Set the query type to GeoPolygonQuery. geoPolygonQuery.FieldName = Geo_type_col; geoPolygonQuery.Points = new List<string>() { "0,0", "10,0", "10,10" }; // Specify coordinate pairs for vertices of a polygon geographical area. searchQuery.Query = geoPolygonQuery; SearchRequest searchRequest = new SearchRequest(TableName, IndexName, searchQuery); ColumnsToGet columnsToGet = new ColumnsToGet(); columnsToGet.Columns = new List<string>() { Geo_type_col }; // Specify that the Geo_type_col column is returned. searchRequest.ColumnsToGet = columnsToGet; SearchResponse response = client.Search(searchRequest); Console.WriteLine(response.TotalCount); }
Perguntas frequentes
Referências
-
Ao usar um índice de busca para consultar dados, utilize os seguintes métodos: consulta por termo, consulta por termos, consulta match all, consulta match, consulta match phrase, consulta por prefixo, consulta por intervalo, consulta por curinga, consulta booleana, consulta geoespacial, consulta aninhada e consulta exists. Combine diferentes métodos para buscar dados em múltiplas dimensões conforme as necessidades do seu negócio.
Utilize os recursos de ordenação e paginação para classificar ou paginar as linhas correspondentes às condições da consulta. Para mais informações, consulte Ordenação e paginação.
Aplique o recurso de colapso (distinct) para agrupar o conjunto de resultados com base em uma coluna específica. Assim, os dados do tipo especificado aparecem apenas uma vez nos resultados da consulta. Para mais informações, consulte Colapso (distinct).
Para analisar dados em uma tabela, utilize o recurso de agregação da operação Search ou execute instruções SQL. Por exemplo, obtenha valores mínimos e máximos, somas e o número total de linhas. Para mais informações, consulte Agregação e Consulta SQL.
Para obter todas as linhas correspondentes às condições da consulta sem precisar ordená-las, chame as operações ParallelScan e ComputeSplits para usar o recurso de varredura paralela. Para mais informações, consulte Varredura paralela.