Qual é o melhor tipo de dados a ser usado ao armazenar dados geográficos em C #? Eu usaria decimal para sua exatidão, mas as operações em números de ponto flutuante decimal são mais lentas do que os números de ponto flutuante binário (duplo).
Eu li que na maioria das vezes você não precisará de mais de 6 ou 7 dígitos de precisão para latitude ou longitude. A inexatidão dos duplos importa então ou pode ser ignorada?
c#
latitude-longitude
geopoints
KRTac
fonte
fonte
double
,double
pode ser o melhor ajuste.Respostas:
Vá em frente
double
, há vários motivos.fonte
Um duplo tem até 15 dígitos decimais de precisão. Então, vamos supor que três desses dígitos estarão à esquerda da vírgula decimal para os valores de latitude / longitude (máximo de 180 graus). Isso deixa 12 dígitos de precisão à direita. Como um grau de latitude / longitude é ~ 111km, 5 desses 12 dígitos nos dariam a precisão do metro. Mais 3 dígitos nos dariam a precisão milimétrica. Os 4 dígitos restantes nos forneceriam uma precisão de cerca de 100 nanômetros. Já que o dobro vai ganhar do ponto de vista de desempenho e memória, não vejo razão para sequer considerar o uso de decimal.
fonte
Enfrentei essa questão há algum tempo, quando comecei com a programação espacial. Eu li um livro há algum tempo que me levou a isso.
//SqlGeography.Point(dblLat, dblLon, srid)
Esta é a melhor maneira de trabalhar em sua aplicação com dados espaciais. então para salvar os dados use isto em sql
senão, se você estiver usando algo que não seja sql, apenas converta o ponto em hexadecimal e armazene-o. Sei depois de muito tempo usando o espaço que esse é o mais seguro.
fonte
Duplo
Combinando as respostas, é como a Microsoft se representa na biblioteca SqlGeography
[obter: Microsoft.SqlServer.Server.SqlMethod (IsDeterministic = true, IsPrecise = true)] public System.Data.SqlTypes.SqlDouble Lat {get; } Valor da propriedade SqlDouble Um valor SqlDouble que especifica a latitude.
fonte