Daha çox

Giriş uzunluğuna ən yaxın lat uzunluğunu tapın (SQL Server 2008)

Giriş uzunluğuna ən yaxın lat uzunluğunu tapın (SQL Server 2008)


Verilənlər bazasında bir nöqtə buludum var (SQL Server 2008 məkan). Bu, təxminən 6 milyon qeyddir. 3 sütun var: id, dəyər, geom. Giriş uzunluğunda 'dəyər' əldə etməyin optimal yolu nədir?

Mən SQL Server 2008 -də məkan sorğuları üçün yeniyəm. Kimsə geom sütununda nöqtəni tapmağın sadə bir nümunəsini göndərə bilərmi?


Axtardığınız ən Yaxın Qonşu Sorğusudur. Aşağıdakı bağlantılara baxın, düşünürəm ki, axtardığınızı tapacaqsınız.

Ən Yaxın Qonşu Sorğusu

Ən Yaxın Qonşular

SQL Server Denali -də ən yaxın qonşu optimallaşdırması


Burada Geometriya deyil, Coğrafiya istifadə olunur (məlumatlar Lat/Lng olarsa, məlumatlar Geometriya deyil, Coğrafiya Tipi olmalıdır)

"SQL Server coğrafiya məlumat növü, GPS enlemi və boylam koordinatları kimi ellipsoidal (yuvarlaq yer) məlumatlarını saxlayır."

İstifadə edə biləcəyiniz bir lat/lng (-122.0 37.0) nöqtəsindən ən yaxın 5 ən yaxşı qeydləri seçmək üçün.

TOP 5 coğrafiyasını seçin :: STGeomFromText ('POINT (-122.0 37.0)', 4326) .STDistance (p) markerlərdən WHERE coğrafiya :: STGeomFromText ('POINT (-122.0 37.0)', 4326) .STDistance (p) <25 Coğrafiyaya görə SİFARİŞ: STGeomFromText ('POINT (-122.0 37.0)', 4326) .STDistance (p);

Məkan növləri - coğrafiya

Coğrafiya məkan məlumat növü, coğrafiya, SQL Server -də .NET ümumi dil iş vaxtı (CLR) məlumat növü olaraq tətbiq olunur. Bu tip, yuvarlaq bir yer koordinat sistemindəki məlumatları təmsil edir. SQL Server coğrafiya məlumat növü, GPS enlemi və boylam koordinatları kimi ellipsoidal (yuvarlaq dünya) məlumatları saxlayır.

SQL Server, bir sıra metodları dəstəkləyir coğrafiya məkan məlumat növü. Buraya üsullar daxildir coğrafiya Open Geospatial Consortium (OGC) standartı və bu standarta uyğun Microsoft uzantıları dəsti ilə müəyyən edilənlər.

Üçün səhv tolerantlığı coğrafiya metodlar 1.0e-7 * ölçüləri qədər böyük ola bilər. Əhatə nöqtələri arasındakı təxmini maksimum məsafəyə aiddir coğrafiyaobyekt.


Uzun bir girişə ən yaxın lat uzunluğunu tapın (SQL Server 2008) - Coğrafi İnformasiya Sistemləri

Beləliklə, son yazımdakı Garmin POI məlumatlarından istifadə edən bəzi nümunələr düşünməyə çalışdım. POI məlumatlarının təbii olaraq ən yaxın qonşu sorğularına aid olduğunu görərək, bu barədə bir az yazacağımı düşündüm.

Ən yaxın qonşu sorğusunun ümumi forması belədir: “Mənə bu yerə ən yaxın x restoranları/meyxanalarını/qatar stansiyalarını göstərin", Məsələn, istifadəçinin cari yerinə yaxın POI-lər tapmaq üçün məkandan xəbərdar olan tətbiqlərin istifadə etdiyi sorğu nümunəsidir. Ancaq daha az nümunə gördüyüm başqa bir nümunə, cədvəldəki hər bir satır üçün ən yaxın qonşunu təyin etmək və doldurmaq üçün bütün qeydlər cədvəlini necə yeniləməkdir (həqiqətən də bu sual MSDN məkan forumunda ortaya çıxdı. yalnız keçən həftə).

Bunu nəzərə alaraq, praktik bir ssenari nümayiş etdirəcəyimi düşündüm: tutaq ki, yerli hovuzda üzməyi planlaşdırırsınız və 50 uzunluğa üzdükdən sonra, yəqin ki, özünüzü bir az pis hiss edəcəksiniz - bəlkə də bəzi balıq 'n' cipslərinə ehtiyac. Beləliklə, bu nümunədə əvvəlcə İngiltərədəki hovuzlar və balıqlar "n" çip mağazaları üçün Garmin POI məlumatlarını idxal edəcəyəm, hər biri coğrafiya Point nümunəsi ilə təmsil olunur. Hovuz masasına əlavə bir sütun əlavə edəcəyəm və hər hovuza ən yaxın balıq və çip dükanı ilə dolduracağam.

Başlamaq üçün balıq və çip dükanları və hovuzlar üçün məlumatları ehtiva edən cədvəllər yaradın (məlumatları buradan yükləyin). Hər cədvələ daha sonra məkan indeksi əlavə etmək üçün ehtiyac duyduğum IDENTITY əsas açar sahəsini daxil etdiyimə diqqət yetirin:

İndi ən yaxın balıq 'n' çip mağazası haqqında məlumatlarla dolduracağımız Üzgüçülük Hovuzları masasına əlavə sütunlar əlavə edəcəyik:

İndi yox ehtiyac yeniləmə sorğusunu yerinə yetirmək üçün bir məkan indeksi əlavə etmək üçün, amma olmayan birindən daha sürətli olacaq. SQL Server cədvəllər arasındakı birləşmədə yalnız bir məkan indeksindən istifadə edə bilər, buna görə hər iki cədvələ indeks əlavə etməyə ehtiyac yoxdur. Yalnız Balıq və Cips cədvəlinə aşağıdakı kimi əlavə edəcəyik:

Sonra, doldurmaq üçün UPDATE sorğusu işlədin Ən yaxın FishBarMəsafə sütunlar, aşağıdakı kimi:

Yəqin ki, bu sorğuya bir izahat lazımdır:

  • Ümumiyyətlə, hər bir hovuza ən yaxın balıq və çip mağazası əldə etmək üçün əlaqəli bir alt sorğu istifadə etməyinizi gözləyə bilərsiniz. Bununla birlikdə, əlaqəli alt sorğular yalnız bir dəyəri qaytara bilər və mən həm adını, həm də ən yaxın balıq çubuğuna olan məsafəni əldə etmək istəyirəm, buna görə də CROSS APPLY istifadə etdim.
  • Tətbiq olunan funksiyada, balıq və cips dükanlarının cədvəlini, mövcud üzgüçülük hovuzundan aralarındakı məsafəyə görə sıralayıram (FishAndChips.Location.STDistance (SwimmingPools.Location) ASC SİFARİŞ EDİN) və sonra seçin TOP 1 Adı və yeri (yəni ən yaxın).
  • Sorğunu səmərəli etmək üçün, Balıq və Cips masasındakı məkan indeksindən istifadə etmək üçün bir göstəriş də əlavə etdim - İLƏ (indeks (sidx_FishAndChips))və əlavə bir predikat daxil etdim, FishAndChips.Location.STDistance (SwimmingPools.Location) NULL DEYİL. Bu əlavə predikat, sorğu optimallaşdırıcısına SQL Server 2012 və SQL Azure -da təqdim olunan ən yaxın qonşu sorğu planını seçməyə kömək edəcək.
  • Qeyd edək ki, məkan indeksi üçün optimallaşdırılmış ən yaxın qonşu sorğu planı yalnız SQL Server 2012/SQL Azure-da mövcuddur. Yuxarıda SQL Server 2008/R2 -də yazıldığı kimi UPDATE sorğusunu icra etməyə çalışsanız, bir səhv alacaqsınız:

Sorğu prosessoru, məkan indeksi işarəsi olan bir sorğu üçün sorğu planı hazırlaya bilmədi. Səbəb: Məkan indeksləri predikatda verilən müqayisəni dəstəkləmir. İndeks göstərişlərini və ya SET FORCEPLAN -ı silməyə çalışın.

Qeyd edildiyi kimi, bu problemi həll etmək üçün onu silmək lazımdır İLƏ (indeks (sidx_FishAndChips)) göstərici göstərişi (və sorğunuzun daha yavaş işləməsini gözləyin!). Bunun əvəzinə SQL Server 2008/R2 -də ən yaxın qonşuları səmərəli tapmaq üçün alternativ yanaşmalardan birini sınamalı ola bilərsiniz.

Bu sorğunun işə salınması bir neçə saniyə çəkməlidir (və ya məkan indeksini yaratmasanız/istifadə etməsəniz, bir neçə dəqiqə), sonra nəticələri aşağıdakı kimi yoxlaya bilərsiniz:

Və orada hər birinin adı və ən yaxın balıq və çip dükanına qədər olan məsafəsi olan tam hovuz masanız var:

Suyun içindən bir paket cipsə 100 metrdən az bir məsafə qaldığını görüb, növbəti dalğamı Farnworth hovuzunda alacağımı düşünürəm….


Məkan İstinad Sistemi

Enlem və Boylam, bütün dünyada qəbul edilən mütləq dəyərlər olaraq düşünülür, amma bu belə deyil. Məsələn, Baş Meridianlar və ya sıfır dərəcə Boylamlar təbiətdə olduqca özbaşına olur. Ümumiyyətlə Greenwich, London, İngiltərədən keçən bir Şimal-Cənub xətti olaraq adlandırılır, amma əslində tarixən Greenwichdən keçən dörd fərqli Baş Meridian var. GPS sistemi (və əksər İnternet xəritələşdirmə saytları) tərəfindən istifadə edilən hazırkı Baş Meridian, əslində başqa bir şəkildə qəbul edilmiş Baş Meridianı qeyd edən "rəsmi" xəttinin 102.5 metr şərqindədir.

Bir sıra məlumatların istifadə etdiyi koordinat sisteminin dəqiq başlanğıc nöqtələrini bildikdən sonra, iki nöqtə arasındakı məsafəni hesablamağa çalışdığımız zaman başqa bir çıxılmaz vəziyyətə düşürük. Yerin öz oxunda fırlandığı üçün əslində sferik deyil, əksinə ellipsoidaldır (ortada qütblərdən daha yağlıdır). Məsafəni və ərazini vahid bir şəkildə dəqiq hesablamaq qabiliyyətini çətinləşdirir, lakin bunu mümkün etmir.

Dünyanın iki nöqtəsi arasındakı məsafəni ölçmək üçün Yerin radiusunu (yəni hər nöqtənin Yerin mərkəzindən nə qədər uzaqda olduğunu) bilmək lazımdır. Məsələ burasındadır ki, torpaq kütlələri səbəbindən Yer kürəsinin bütün dünyada tətbiq oluna biləcək tək vahid radiusu yoxdur. Dəniz səviyyəsində bir dərəcə ayrı olan iki nöqtə arasındakı məsafəni ölçsəniz, dəniz səviyyəsindən 5000 fut yüksəklikdə ola biləcək dağlarda bir dərəcə ayrı olan iki nöqtədən fərqli bir nəticə əldə edəcəksiniz.

Beləliklə, bir yer araşdırıldıqda və qlobal koordinatlar baxımından nöqtələr müəyyən edildikdə, bunlar o lokallaşdırılmış ərazi üçün olduqca doğru olan, lakin bəlkə də başqa yerdə dəqiq olmayan bir yer modelinə əsaslanır. Yerin xüsusi modelini təyin edən parametrlərə Məkan İstinad Sistemi deyilir. Məlumat toplusu üçün hansı Məkan İstinad Sisteminin istifadə edildiyini bilmək vacibdir, çünki həmişə bir dəstdən digərinə məlumatları qarışdırıb dəqiq nəticələr əldə edə bilməzsiniz.

GPS məlumatlarının yayılması ilə, bu gün ən çox istifadə olunan Məkan İstinad Sisteminin WGS84 olduğunu iddia edərdim.


Əlaqəli vəzifələr

Həndəsə nümunələri yaradın, qurun və sorğu edin
Həndəsə məlumat növünün nümunələri ilə istifadə edə biləcəyiniz üsulları təsvir edir.

Coğrafiya nümunələrini yaradın, qurun və sorğu edin
Coğrafiya məlumat növünün nümunələri ilə istifadə edə biləcəyiniz üsulları təsvir edir.

Ən Yaxın Qonşu üçün Məkan Məlumatlarını Soruşdurun
Xüsusi bir məkan obyektinə ən yaxın məkan obyektlərini tapmaq üçün istifadə olunan ümumi sorğu modelini təsvir edir.

Məkan indekslərini yaradın, dəyişdirin və buraxın
Məkan indeksinin yaradılması, dəyişdirilməsi və düşməsi haqqında məlumat verir.


Göz üçün daha asanlaşdırılması

Marketinq qrupu, bütün satışlarının harada edildiyini görə bildikləri və buna görə də daha yaxşı iş qərarları verdikləri üçün çox xoşbəxtdir. Ancaq bir problem var, çünki bəzi sahələr digərlərindən daha yaxşı işləyir və sancaqlar bir -birinin üstündədir, xəritəni oxumağı çox çətinləşdirir. Bunu həll etmək və gözü asanlaşdırmaq üçün API -nin kümelenme funksiyasından istifadə edəcəyik. Kümelenme açıldığında, Bing Maps, bir -birinə çox yaxın olan və xüsusi bir simge göstərən bütün düymələri qruplaşdıracaq. Bu, istifadəçiyə həmin yerdə birdən çox düymənin olduğunu bilməsinə imkan verir. İstifadəçi yaxınlaşırsa, API bütün düymələri avtomatik olaraq qrupdan çıxarmağa başlayır. Bu nümunədə son nümunə ilə eyni sorğudan istifadə edəcəyik və avtomatik olaraq səhifənin yüklənməsinə endirəcəyik. Yeganə fərq, nəticələri avtomatik olaraq qruplaşdıracağımız və istifadəçilərin qruplaşdırılmış və ya yığılmayan itələyicilər görmək istədiklərinə qərar vermələrinə imkan verməyimizdir. Şəkil 17, əvvəlkindən bir qədər fərqlənən GetMap javascript funksiyasını göstərir.

map.SetCenterAndZoom (yeni VELatLong (43.79488907226601, -121.014), 6)

Şəkil 17: Bütün nəticələri avtomatik olaraq qruplaşdıran GetMap javascript funksiyası.

Kümelenmeyi aktiv etmək üçün xəritənin üstünə bir qat əlavə etməliyik, qat və rsquos klaster konfiqurasiyasını VEClusteringType.Grid və xəritənin yerinə təbəqəyə bütün sancaqlar əlavə edin. Kümelenmeyi açmaq və ya söndürmək, yalnız qat və rsquos klaster konfiqurasiyasını dəyişdirməkdir ŞəbəkəHeç biri. Şəkil 18 bunun necə ediləcəyini göstərir və Şəkil 19 və 20 son nəticəni göstərir.

Şəkil 18: Kümelenme və kümelenme üçün Javascript

Şəkil 20: Kümelenmiş sancaqlar baxımından böyüdülmüşdür


Uzun bir girişə ən yaxın lat uzunluğunu tapın (SQL Server 2008) - Coğrafi İnformasiya Sistemləri

Düşünürəm ki, Microsoft bu spesifikasiyanın şərhini dəstəkləyən daha çox sübut göstərməlidir. Bu təfsir müştərilər üçün Microsoft texnologiyalarının mənimsənilməsinin qarşısıalınmazlığı və maneəsi baxımından çox baha başa gələcək.

Sənayenin qalan hissəsi, standartı lon/lat olaraq şərh etdi, əgər Microsoft bunu başqa cür şərh edərsə, niyə SQL-də lat/lon sifarişini istifadə edən yeganə tətbiqlərdən biri olduğunu əsaslandıran güllə keçirməyən bir izahat verməlidir.

Mənim anlayışım OGC üzvlərinin əksəriyyətinin bu standartı lon/lat olaraq şərh etməsidir. belə ki, Microsoftun təfsirində haqlı olsa belə, komitə klaviaturaları ilə standartın mənasına səs verdi. Düşünürəm ki, Microsoft-un müştəri bazasından istifadə edərək bu uyğunluq mübarizəsi ilə mübarizə aparması məntiqsiz olardı-bu, OGC görüşlərinin dumanlı otaqlarında baş verməlidir.

Standartın yalnız planar sistemlərə tətbiq edildiyini və ya başqa bir şəkildə coğrafi sistemləri istisna etdiyi bu sənədin, səhifənin, paraqrafın və cümlənin harada olduğunu göstərə bilərsinizmi? Sənədi bir neçə dəfə oxudum və həmkarlarım tərəfindən də nəzərdən keçirildim. heç kim heç birimizi coğrafi crs -in istisna olduğuna inanmağa vadar etməmişdir.

6.1, hər bir həndəsi cismin & quot; Məkan İstinad Sistemi & quot; ilə əlaqəli olduğunu açıq şəkildə ifadə edən Həndəsə modelinin memarlığını təsvir edir. bunu koordinat sistemlərinin layihələndirilməsi ilə məhdudlaşdırmır.

Bölmə 9, Məkan İstinad Sistemlərinin WKT -ni təqdim edir. Bu həm coğrafi, həm də proqnozlaşdırılan sistemləri əhatə edir. Heç bir yerdə spesifikasiyanı yalnız planar sistemlərlə məhdudlaşdırmır.

SFA 1-ci hissəsinin Əlavə B.8-də "quotlatitude_of_origin" & quot; y-koordinatlarının mənşəyi olaraq seçilmiş enlikdir & quot; deyilir. saxta şərq/şimal oxşar bir tərifə malikdir. Bu bölmə, X/Y -ni proqnozlaşdırılan bir koordinat sistemində açıq şəkildə təyin etdiyi üçün X və Y üçün CRS sifarişinin istifadəsi ilə bağlı hər hansı bir fikirlə ziddiyyət təşkil edir.

Microsoft, CRS -in enlemi uzunluq yerinə X -ə çevirə biləcəyi münaqişəni necə həll edir? Standartda göstərilən tərifə və ya ən yaxşı təcrübəyə müraciət edirsiniz?

İşarə edildiyi kimi, SFA spesifikasiyası tərəfindən təyin olunan WKT, planar olmayan sistemlər üçün uyğun işarələrdən istifadə etmir. Beləliklə, Microsoftun doğru olduğunu və SFA-nın yalnız planar üçün tətbiq olunduğunu düşünsək, SFA-ya görə WKT istifadə edərək hər hansı bir coğrafi koordinat sistemini təmsil etmək qeyri-standart olardı. Bu halda, Microsoft defacto standartlarından imtina etməlidir.

Microsoft bu tətbiqdə tək başına getməyi seçərsə, bunu etməyi təklif edərdim tamamilə aydındırSQL Server, OGC 05-126 standartını İyun 2005/06-135r1 ən yaxşı təcrübəsindən istifadə edərək həyata keçirir və bu standart OGC 99-049-dan fərqlidir.

Bu vəziyyətdə, lon/lat konvensiyasını həyata keçirən bir OGC 99-049 uyğunluq rejiminin olması lazımdır. OGC 99-049 standartından istifadə edərkən lon/lat düzgün digər məkan məhsulları üzrə OGC sertifikatları ilə təsdiqlənən standartın təfsiri.

OGC 99-049 uyğun bir tətbiqin daxil edilməməsi, təşkilatımın SQL Server qəbul etməsinə mane olacaq ciddi bir qarşılıqlı əlaqə problemi yaradacaq.

Birlikdə çalışmaq problemini başa düşürük və bu boşluğu necə asanlaşdıracağımızı araşdırırıq. Niyə bu qərarı verdiyimizi izah etməyə çalışım. Başlanğıc nöqtəsi olaraq:

Birlikdə götürülənlər, bunun necə idarə olunacağına şübhə yaradır. Bununla birlikdə standartlar işə düşür:

2005 -ci ilin iyun ayı üçün TC plenar iclasında iştirak edən üzvlər razılaşdılar:

1. İrəlidə, yeni spesifikasiyalar üçün, koordinat dəyərləri istinad edilən koordinat istinad sistemi (CRS) tərəfindən göstərildiyi kimi ox sırasına daxil edilməlidir.

2. Gələcəkdə, bir RWG CRS və ox sırası ilə əlaqədar mövcud qəbul edilmiş spesifikasiyada düzəlişlər üzərində işləyərkən, koordinat dəyərləri istinad edilən koordinat istinad sistemi (CRS) tərəfindən müəyyən edilmiş eksen sırasına daxil edilməlidir.

  • Nəhayət, coğrafiya növü üçün qəbul etdiyimiz CRS -lərin standart EPSG siyahısı, vahid bütün coğrafi koordinat sistemləri üçün enlem/uzunluq sırasını istifadə edir.

Bunun insanlar üçün bəzi problemlərə səbəb olacağını anlayırıq və onları yumşaltmağın yollarını axtarırıq, amma ümid edirəm bu, düşüncəmizi anlamağa kömək edir.

Əvvəlcə bir daha təkrar edim ki, digər oyunçulardan bir az fərqli bir şey etdiyimizi və bunun bir az ağrı verdiyini başa düşdüyümü başa düşürəm. Bu mövzuda əldə etdiyimiz məlumatları dinləyirik və aramızda digər sistemlərlə məlumatların idxalını/ixracını necə asanlaşdıra biləcəyimizə baxırıq.

Yəni, standartlarla bağlı razı deyiləm. Düşünürəm ki, coğrafi koordinatlar haqqında çox az şey söyləyirlər və az dedikləri bizə dəstək verir.

Əvvəlcə OGC 99-049-a nəzər salaq. Coğrafi sistemləri istisna etdiklərini açıq şəkildə ifadə etmədikləri ilə razılaşsam da, & quot; xüsusiyyətlərinin 2D həndəsəyə əsaslandığını söyləyirlər və zirvələr arasında xətti interpolasiya var & quot [bölmənin əvvəlində]. Bu mənə təyyarədə işlədiklərini göstərir.

Ayrıca, spesifikasiyanın coğrafi koordinatları əhatə etdiyini düşünsək, spesifikasiyanın olduqca qeyri -kafi olduğunu görürük. Məsələn:

Həm də unutmayın ki, coğrafiya tipimizlə mümkün olduğu qədər 99-049-a sadiq qalmağa çalışsaq da, həndəsə tipimizlə yalnız çətin bir məqsəd olan uyğunluğu hədəfləmirik. Coğrafi sistemlər üçün 99-049 ilə uyğunluğun çox məntiqli olmadığını iddia edərdik və coğrafi sistemlərə aid bir standart görmək istərdik.

Nəhayət, 05-126 ilə əlaqədar olaraq, çəkdiyiniz sitat doğru olsa da, bunu əlaqəli görmürəm: Düşünürəm ki, heç kim (əksəriyyəti) xəritə proqnozlarında enin y oxu boyunca təmsil olunduğunu mübahisə etmir. süjet 6.4.2 -ci hissədə "koordinat sistemi olaraq da adlandırılan" Məkan İstinad Sistemi "nin coğrafi olması maraqlıdır. (Enlem Boylam), proqnozlaşdırılan (X, Y) və ya geosentrik (X, Y, Z) koordinat sistemi. & quot [vurğu minası]

OGC 99-049 ilə OGC, coğrafi sistemlər üçün lon/lat ox sifarişini istifadə edərək coğrafi koordinat sistemlərində istifadə üçün digər sistemləri təsdiq etmişdir. Təfsiriniz standart hərflə düzgün olsa belə, standartın tətbiqinə, tətbiqinə və sınağına əsaslanaraq səhvdir. Komitə bu standartı coğrafi sistemlərə tətbiq etmək niyyətini nümayiş etdirdi.

Bəli-99-049-un coğrafi koordinatlar üçün çox acınacaqlı olduğu tamamilə doğrudur. Başqa cür inandığımı səsləndirsəm, heç vaxt niyyətim olmadığı üçün üzr istəyirəm.

Ancaq qeyri -adekvatlıq və ya qeyri -müəyyənlik niyyət deyil. İnanıram ki, OGC wrt 99-049-un hərəkətləri bu standartı tətbiq edərkən OGC-nin niyyətini göstərir-və dediyiniz heç bir şey başqa cür göstərmir (şübhələndiyimi qeyd etdiniz-OGC stnadards yarı bişmiş və & quot; yaxşı & quot; olmaq üçün çox iş lazımdır. OGC -nin digər sistemləri səhv sertifikatlaşdırdığını və ya onların sertifikatlaşdırılmasının tətbiqlərin coğrafi hissələrini istisna etdiyini göstərə bilməsəniz, Microsoftun mövqeyinin hələ də səhv olduğunu düşünürəm.

Sitat olduqca aktualdır. Qeyd edirəm ki, yalnız coğrafi sistemlərdə deyil, həndəsi sistemlərdə standartda qeyri-müəyyənlik var. Bu anlaşılmazlıqları və/və ya münaqişələri necə həll edəcəksiniz? Yoxsa daha da əhəmiyyətlisi, sənayenin qalan hissəsindən fərqli bir tətbiq seçəcəksinizmi?

Əgər 99-049 (SQL üçün Sadə Xüsusiyyətlər Şərtləri) uyğunluğu istiqamətində iş aparırsınızsa, 2005-ci ilin İyun iclası tətbiq edilməyəcəkdir (bu görüşün əvvəlcədən təyin olunduğu bir standart olaraq-yeniləmələr yeni sayılmır). 05-126/06-104r3 (Coğrafi Məlumat üçün Təchizat Xüsusiyyəti-Sadə Xüsusiyyətlərə Giriş) istiqamətində işləyirsinizsə, 2005-ci ilin iyun ayı görüşü tətbiq oluna bilər. yeni standart 99-049.

Hələ də inanıram ki, ən yaxşı həll yolu, müştərilərə, sənaye sahəsinin tətbiq etdiyi 99-049 və ya Nov CTP-dən etibarən Katmai-də tətbiq edildiyi kimi 06-104r3 istifadə etmək istədiklərini seçmək imkanı verməkdir.

Zəhmət olmasa, yardım sənədlərində hansı standartı dəstəklədiyinizi əks etdirdiyinizə əmin olun, çünki onlar 06-104r3 tələb edirlər.

Standartlarla bağlı müzakirəyə çox şey əlavə edə bilmərəm. İllər keçdikcə, bir CİS meneceri olaraq çalışdığım təşkilatda faydalı olub -olmadığını öyrənmək üçün gözlərimi tutdum, ancaq bunları yalnız əsas (əsas demək istədiyim) qarşılıqlı əlaqədə faydalı hesab etdim.

İndi Katmai-dən gözlədiyim şey, özünəməxsus bir verilənlər bazası baxımından funksionallıq və rahatlıqdır. Coğrafiya tipində gec/uzun koordinat sifarişi ilə bağlı məhdud təcrübəmə əsaslanan problem, sifarişdən daha azdır (Qeyd: Google Xəritələr Lat/Uzun istifadə edir - Virtual Yer nədən istifadə edir?), Lakin xəritədə heç bir funksiya yoxdur. həndəsə və coğrafiya və ya həndəsə/coğrafiya obyektlərinə daxil olmaq üçün çevik bir API arasında. Məsələn, WKT simlərini sındırmaqla (2D məhdud və SRIDS daxil deyil) istisna olmaqla, hazırda bir həndəsənin/coğrafiyanın koordinatlarını yeniləyə bilmirəm. Diqqət yetirin ki, YENİLƏYİN dedim və OXUMAYIN. Bəli, STPointN vasitəsi ilə koordinatları oxuya bilərik, ancaq WKT istifadə etmədən başqa 2D obyektini 3D (və ya tərsinə) yüksəltmək kimi bir şeyi asanlıqla edə bilmərik. Diqqət yetirin ki, bəzi obyektlərin işlənməsi çoxbucaqlı xarici və ya daxili halqanın və çox hissəli bir xətt çəkmənin bir hissəsinin işlənib hazırlanmadığını bilmək tələb etmir.

MapInfo-dakı dostum Anand Kannan, WKT simli emalına əsaslanan XY, Lat/Long çevirmək üçün mənə bir az T-SQL göndərdi. Bənzər bir funksiya yazmağa baxdım və eyni nəticəyə gəldim: bu, simlərin kəsilməsini tələb edəcək (Anandın ssenarisi bu yola getməyəcəyimə qərar verdiyim gün gəldi). Bu çirkin, yavaş və digər çətinliklər var (məsələn, beynəlmiləlləşmə və vergülün Avropada ondalık nöqtəsi kimi istifadə edilməsi və s.).

Saxlama formatının hər tərəfinə daxil ola bildiyim üçün Oracle -ın PL/SQL -də özüm üçün çoxlu əlavə funksiyalar yazdım. C# yazmaq (WKB və ya WKT oxumaq/yazmaq) və kömək edə bilsəm kodu bazaya yerləşdirmək istəmirəm.

Beləliklə, uzun/uzun sifariş verməkdə çətinlik çəksək, əsas tələbim, hazırda hər hansı bir OGC və ya SQL/MM standartı ilə əhatə olunan daha zəngin bir API vasitəsilə T-SQL emalı üçün verilənlər bazasına daha çox gücün qoyulmasını görməkdir. Məlumatların işlənməsi üçün bir yağ-müştəri GIS paketini (yağ-müştəri aşağılama məqsədi daşımır) və bir verilənlər bazası prosesini əlaqələndirmək istəmirəm.

Sizi burada görmək çox xoşdur! :-) Amma yuxarıdakılarla razılaşmamalıyam: Google tərəfindən təyin olunan KML-də & quotLatitude / Boylam & quot (həmçinin & quotlat / lon & quot kimi tanınır) proyeksiyası üçün koordinatların sırası lon / latdır.

İcazə verin, Microsoft -un müdafiəsinə keçim, bu mövzuda haqsız olaraq diqqətimi yayındırdığımı düşünürəm, OGC mushunu təhlil etməklə bağlı müzakirə. Məsələ bunda deyil. Məsələ, bəzi istifadəçilərin həyatını asanlaşdıra bilən yeni bir coğrafiya mövzusundadır. Təcrübəli CİS adamları tərəfindən mövcud GIS məlumatları ilə istifadə üçün verilən GEOMETRY kimi bir şeydən fərqli bir missiya.

Bu mövzunu oxuyan bəzi insanların coğrafi məlumatlar üçün yeni olduğunu hiss edirəm və ümumi İngilis ifadəsi & quot; Boylam / Boylam & quot; məlumatlarının GIS məlumatları dünyasında sifariş vermə tərzinin tam əksinə olduğunu anlamıram. Gözlədiyiniz budursa, tək deyilsiniz.

Bu, tənqid kimi nəzərdə tutulmayıb, çünki bunun əvəzinə, GIS olmayan insanlar üçün nəzərdə tutulubsa, Coğrafiya tipində olduğu kimi koordinat sifariş etmək üçün çox möhkəm bir arqumentdir. Coğrafiya olmağın mənası, GIS olmayan növlər üçün bir şeyə sahib olmaqdırsa, (lat, lon) sifarişi mükəmməl məna kəsb edir.

Coğrafi məkan məlumatlarını öyrənmək üçün yeni bir insan üçün dünyanın ən təbii yolu, kimsə "Latitude / Boylam" məlumatlarına sahib olduqlarını söylədikdə, bu məlumatların sifariş verilməsi koordinatlarının həqiqətən (lat, lon) qaydasında olduğunu * gözləmək * olduğunu düşünməkdir. Təsvir etmək üçün çox istifadə olunan İngilis ifadəsi kimi olduğunu söyləyir. Coğrafi məkan məlumatları ilə tanış olan insanlar başa düşürlər ki, İngilis dili ifadəsi koordinat oxlarının sıralanmasının riyazi təsviri deyil, sadəcə bir ifadədir, lakin yeni başlayanlar ümumiyyətlə bunu bilmirlər. Manifold, bütün digər CİS satıcılarının bir araya gətirdiklərindən daha çox yeni GIS istifadəçilərinə daha ağır GIS satdı, buna görə oxucuları əmin edirəm ki, bu çox real bir fenomendir.

SQL Serverin məkan uzantıları əlavə edərək edə biləcəyinin bir hissəsi, coğrafi texnologiyanın faydasını daha geniş bir auditoriyaya genişləndirməkdir. Microsoft, digər satıcıların edə bilmədiyi kimi bunu edə bilər. Coğrafi məkan yeni başlayanlar (hətta DBMS üzrə mütəxəssis olsa da proqramlaşdırmada yeni başlayanlar da ola bilər) CBS məlumatlarının terabaytları içərisində yığılmış təcrübə ilə uyğunlaşmaq asan deyil, lakin iki növə sahib olmaq, bunu reallaşdıra biləcək faydalı bir yenilikdir.

Əgər Microsoft, coğrafi məlumatları öyrənməkdə yeni insanların coğrafi məlumatların koordinatlı sifarişi ilə köhnə GIS məlumatlarından fərqli olaraq həyatını asanlaşdıra bilərsə, bu, mənim üçün yaxşı bir işdir və kifayət qədər yaxşı bir səbəbdir. Nə olursa olsun, biz onu dəstəkləyəcəyik. Microsoft, GIS məlumatlarını istifadə edənlər üçün GEOMETRY tətbiq etdi, buna görə GIS məlumatları ilə işləyənlərin heç bir mənfi tərəfi yoxdur.

Daha əvvəl dediyim kimi, GIS məlumatlarından istifadə edirsinizsə, GEOMETRY -də saxlamağınız daha yaxşı olardı, beləliklə dəqiqlik üçün lazım olan datum kimi əsas məlumatları itirməyəcəksiniz. & Quot; Enlem / Boylam & quot; proyeksiyası olsun və olmasın, GIS məlumatları ilə GEOMETRY -dən istifadə edin və koordinat sifarişi ilə heç bir problem yoxdur. Buna görə də Simona verəcəyim məsləhət, GEOMETRİYANI istifadə etməyiniz və buna sahib olduğunuz üçün xoşbəxt olmaqdır.

Texniki dəqiqələri müzakirə etməyi sevənlər üçün bir yazı:

Məhz buna görə hamı bilir ki, coğrafiyadakı sifarişin düzgün olduğunu iddia etmirəm, çünki (lon, lat) sifarişin universal olduğunu başa düşmürəm, icazə verin bəzi nümunələr gətirim və bu mövzuya girmiş ola biləcək bəzi yanlış fikirləri düzəldim, hər kəsin OGC -nin nə etməsi və ya GML və ya EPSG -nin göstərdiyi şeylə əlaqədar yanlış fikirlərə əhəmiyyət verməsi anlayışından başlayaraq.

Birincisi, OGC və standartlar & quot; real həyatda demək olar ki, yararsızdır. İshaq yazarkən başının dırnağına vurdu & quot; Bundan əlavə, spesifikasiyanın coğrafi koordinatları əhatə etdiyini düşünsək, spesifikasiyanın çox acınacaqlı olduğunu görürük.

Məşhur olaraq & quot; coğrafi məlumatların ən pis formatı olaraq brayl yazmaqdan sonra ikinci dəfə ən pis format kimi təsvir edilən GML-ni ortaya çıxaran demək olar ki, yararsız OGC & quot standartlarından & quot; danışanda GML-nin oradakı coğrafi məlumatların milyondan birindən azını təmsil etdiyini nəzərə alsaq GML sifarişinin hansı koordinatlardan istifadə etdiyini praktik mənada heç bir əhəmiyyət kəsb etmədiyini düşünürəm. Ancaq saçları parçalayırıq və GML -in vacib olduğunu iddia ediriksə, GML -in (lat, lon) sifarişini təyin etdiyi təkliflə hörmətlə razılaşmalıyam.

GML standartı koordinatların sırasının proyeksiyaya uyğun gəlməsini bildirir. Praktik baxımdan çox faydalı deyil. Beləliklə, GML koordinat baltalarının sırasını açıq şəkildə ifadə etmək vasitələrini özündə ehtiva etsə də, (lon, lon) əmrini (lon, lat) sifarişi üzərində açıq şəkildə seçmir. Hər halda, GML-nin gec/uzun məlumatlar üçün istifadəsi o qədər nadirdir ki, hələ koordinat sırasından asılı olmayaraq lat/lon məlumatları olan real dünya GML faylını görməmişik.

EPSG ilə əlaqədar olaraq, hörmətlə razı deyiləm ki, bu adətən (lat, lon) sifariş kimi qəbul edilir: EPSG adamları sistemlərini elə qurmuşlar ki, koordinat sistemi tərəfindən istifadə olunan baltalar nömrələnsin. Bu baltaların sırasını faktiki koordinat dəyərlərində əks etdirən heç kimin (Oracle və s.) Eşitməmişəm. SQL Serverin Coğrafiya mövzusunda olduğu kimi etdiyini görürəm və buna 100%hörmət edirəm, amma düşünürəm ki, ehtiyac duyduğum bütün əsaslar SQL Server -də necə edildiyidir, necə edildiyinə görə fakto standartlara əməl edəcəyik.

Keçmişdə (lon, lat) sifariş etmənin GIS məlumatlarında & quot; universal & quot; praktikası olduğunu bildirdiyimə görə etiraz etdim, buna görə də bunun niyə belə olduğunu bildirdiyimi açıqlayım: Belə ki, & quotLatitude / Boylam & quot proqnozları adlanır:

1. ABŞ Siyahıyaalma Bürosu tərəfindən hazırlanan TIGER/Line məlumat dəstlərindəki koordinatlar lat/londa. Koordinatların sırası lon/latdır.

2. ABŞ Nəqliyyat Statistikaları Bürosu tərəfindən hazırlanan NTAD məlumat dəstlərindəki koordinatlar lat/londa. Koordinatların sırası lon/latdır.

3. Avropanın böyük bir Xəritəçəkmə şirkəti olan TeleAtlas tərəfindən istehsal olunan GDF və digər məlumat dəstlərindəki koordinatlar lat/londa. Koordinatların sırası lon/latdır.

4. ABŞ Müdafiə Nazirliyi tərəfindən istehsal edilən VMap məlumat dəstlərindəki koordinatlar bir neçə fərqli koordinat sistemində ola bilər. Lat/lon koordinat sistemləri üçün koordinatların sırası lon/latdır.

5. SHP (ESRI & quotshapefiles & quot), MIF (MapInfo) və mövcud GIS paketləri tərəfindən hazırlanan digər fayllardakı koordinatlar bir çox fərqli koordinat sistemində ola bilər. Lat/lon koordinat sistemləri üçün koordinatların sırası bu sistemlərdə lon/latdır.

6. DGN (Intergraph, Bentley), DWG (Autodesk və bir çoxları), DXF və cari CAD paketləri tərəfindən hazırlanan oxşar fayllardakı koordinatlar bir çox fərqli koordinat sistemində ola bilər. Lat/lon koordinat sistemləri üçün koordinatların sırası lon/latdır.

7. Oracle, DB / 2, PostgreSQL və MySQL kimi ənənəvi verilənlər bazalarında saxlanılan WKB / WKT dəyərlərindəki koordinatlar (GEOGRAPHY tipinə ekvivalenti olmayan, lakin buna baxmayaraq cari dövriyyədə çoxlu məlumatları saxlamaq üçün istifadə olunur) çox ola bilər. fərqli koordinat sistemləri. Lat/lon koordinat sistemləri üçün koordinatların sırası lon/latdır.

8. Rasterdə koordinatları təsvir etmək (Virtual Earth ekranı nümunə olaraq göstərilir) demək olar ki, həmişə XY işarəsini izləyir, bu da lat/lon rasters üçün demək olar ki, həmişə lon/lat deməkdir.

9. İnsanlar məkan məlumatlarını saxlamaq üçün SQL Server 2008 -dən istifadə etməyə başlayanda, bir çoxları müxtəlif səbəblərdən məlumatları lat/londa olmasına baxmayaraq GEOMETRY tipini istifadə edəcəklər. Bu insanlar üçün koordinat sırası yenə uzun/lat olacaq və bu məlumatlar GIS məhsullarında istifadə edildikdə qorunacaq.

Vay! . yuxarıdakı formatlardan ibarət olduğu üçün & quotuniversal & quot istifadəsi ilə nəzərdə tutduğum budur, nə? 99,99%? oradakı məlumatlardan. Hər kəs (lon, lat) sifariş vermək yerinə (lat, lon) sifariş verən bir & quotLatitude / Boylam & quot məlumatlarının tək bir anbarına işarə edə bilərsə, o anbarın URL -ni görməkdən çox minnətdar olaram.

Yuxarıda göstərilənlərin hamısı üçün, Microsoftun Coğrafiya üçün sifariş vermə seçimi, həqiqətən də, bu, coğrafi məlumatları öyrənməkdə yeni olan insanlara, adətən etdikləri kimi & quot; Boylam / Boylam & quot; sözün əsl mənasında kömək edə bilər. Bu günə qədər hər kəsin CİS istifadəsi ilə fəxr edə biləcəyi qədər qürur verici olsa da, oradakı bütün məlumatların 100% -i, coğrafi məkan texnologiyası əsas cərəyana keçdikcə gələnlərin 1% -ni təşkil etmir, buna görə də sənətə yeni gələnlərin gözlədiyi şeylər endirim olunası bir şey deyil .

Mən olsaydım, yəqin ki, adi olardım və (lon, lat) sifariş verməyə ilişərdim. Ancaq sonra heç şübhə yoxdur ki, gələcəkdə yüz milyonlarla insana (heç biri heç bir sənəd oxumayacaq) "Latitude / Boylam" sözləri ilə həqiqətən başa düşmək istədiklərimi dəfələrlə izah etməyi öz üzərimə götürmüş olardım. koordinatlarını & Boylam / Enlem & quot sırasına qoymalı olduqlarını. Bu seçimdə Microsoftu tənqid edən hər kəs bunu necə idarə edəcəyi barədə iki dəfə düşünməlidir.


Sütunun indeksləndiyini nəzərə alsaq, aşağıdakılar olduqca səmərəli olmalıdır.

10 satırdan sonra iki dəfə 20 -dən bir növ geri döndü.

(yəni potensial olaraq aşağıdakı kimi bir şey)

Və ya başqa bir imkan (sıralanan satır sayını maksimum 10 -a endirir)

Qeyd: Yuxarıdakı icra planı sadə masa tərifi üçün idi

Texniki olaraq, alt filialdakı Sıralamaya ehtiyac da olmamalıdır, çünki bu da Diff tərəfindən sifariş verilmişdir və iki sifariş edilmiş nəticəni birləşdirmək mümkün olardı. Amma bu planı əldə edə bilmədim.

The query has ORDER BY Diff ASC, YourCol ASC and not just ORDER BY YourCol ASC , because that was what ended up working to get rid of the Sort in the top branch of the plan. I needed to add the secondary column in (even though it won't ever change the result as YourCol will be the same for all values with the same Diff) so it would go through the merge join (concatenation) without adding a Sort.

SQL Server seems able to infer that an index on X seeked in ascending order will deliver rows ordered by X + Y and no sort is necessary. But it is not able to infer that travelling the index in descending order will deliver rows in the same order as Y-X (or even just unary minus X). Both branches of the plan use an index to avoid a sort but the TOP 10 in the bottom branch are then sorted by Diff (even though they are already in that order) to get them in the desired order for the merge.

For other queries/table definitions it may be trickier or not possible to get the merge plan with just a sort of one branch - as it relies on finding an ordering expression that SQL Server:


How to Best Implement nearest neighbour search in mysql?

I have 100k biz record each with lattitude and longitude. I see that MySQL actually support a data type called point. Should I use that instead?

Is it best to use point data type rather than regular float data type to store latitutude and longitude?

Eventually I want to find things like the first 100 restaurants closest to points 105,6 for example and my databases contains a lot of biz and points. Obviously computing the distance one by one for every records and for every points would be O(n) and hence sucks.

Notice that I am aware of a simpler solution described in How do Application Like Yelp Retrieve distance information from data base efficiently and will implement that my self too for a start. That's a good answer.

However, I think there is one creme of the crop answer that should outperform that right? In fact, storing location based on latitude and longitude and finding stuffs nearest to it is a very common problem I expect mysql to have a special design pattern for that. Does it have that?