2012-09-07 6 views
1

Я заметил, что $ near и $ nearSphere возвращает совершенно разные данные, и я получил подозрение. В конце концов, когда широта близка к экватору, ее сферическое расстояние не должно сильно отличаться от евклидова расстояния.

db.tablebusiness.find({ "LongitudeLatitude" : { "$nearSphere" : [106.772835, -6.186753], "$maxDistance" : 0.053980478460939611 }, "Prominent" : { "$gte" : 15 }, "indexContents" : { "$all" : [/^soto/, /^nasi/] } }).limit(200); 

Он возвращает 48 данных.

Я прикрепил его в любом случае

/* 0 */ 
{ 
    "_id" : "nasi-uduk-soto-ayam__-6.18_106.77", 
    "BuildingID" : null, 
    "Title" : "Nasi Uduk Soto Ayam", 
    "InBuildingAddress" : null, 
    "Building" : null, 
    "Street" : "Jl. Panjang", 
    "Districts" : [], 
    "City" : "Jakarta", 
    "Country" : "Indonesia", 
    "LongitudeLatitudeFromGoogle" : null, 
    "DistanceFromGoogleAddress" : 0.0, 
    "Checkin" : 0, 
    "Note" : null, 
    "PeopleCount" : 0, 
    "Prominent" : 45.5, 
    "CountViews" : 0, 
    "StreetAdditional" : null, 
    "LongitudeLatitude" : { 
    "Longitude" : 106.765673160553, 
    "Latitude" : -6.17522230915668 
    }, 
    "Rating" : { 
    "Stars" : 0.0, 
    "Weight" : 0.0 
    }, 
    "CurrentlyWorkedURL" : null, 
    "Reviews" : [], 
    "ZIP" : null, 
    "Tags" : ["Restaurant"], 
    "Phones" : [], 
    "Website" : null, 
    "Email" : null, 
    "Price" : null, 
    "openingHour" : null, 
    "Promotions" : [], 
    "SomethingWrong" : false, 
    "BizMenus" : [], 
    "Brochures" : [], 
    "Aliases" : [], 
    "indexContents" : ["restaura", "estauran", "staurant", "taurant", "aurant", "urant", "rant", "ant", "nt", "t", "nasi", "asi", "si", "i", "uduk", "duk", "uk", "k", "soto", "oto", "to", "o", "ayam", "yam", "am", "m"] 
} 

/* 1 */ 
{ 
    "_id" : "nasi-soto-padang_pasar-slipi-jaya_-6.19_106.80", 
    "BuildingID" : null, 
    "Title" : "Nasi Soto Padang", 
    "InBuildingAddress" : "Lt.1 Los Alas", 
    "Building" : null, 
    "Street" : "Jl.Kemanggisan Utama Raya", 
    "Districts" : [], 
    "City" : "Jakarta", 
    "Country" : "Indonesia", 
    "LongitudeLatitudeFromGoogle" : null, 
    "DistanceFromGoogleAddress" : 0.0, 
    "Checkin" : 0, 
    "Note" : null, 
    "PeopleCount" : 0, 
    "Prominent" : 45.5, 
    "CountViews" : 0, 
    "StreetAdditional" : null, 
    "LongitudeLatitude" : { 
    "Longitude" : 106.79647564888, 
    "Latitude" : -6.18998465381734 
    }, 
    "Rating" : { 
    "Stars" : 0.0, 
    "Weight" : 0.0 
    }, 
    "CurrentlyWorkedURL" : null, 
    "Reviews" : [], 
    "ZIP" : null, 
    "Tags" : ["Restaurant"], 
    "Phones" : [], 
    "Website" : null, 
    "Email" : null, 
    "Price" : null, 
    "openingHour" : null, 
    "Promotions" : [], 
    "SomethingWrong" : false, 
    "BizMenus" : [], 
    "Brochures" : [], 
    "Aliases" : [], 
    "indexContents" : ["restaura", "estauran", "staurant", "taurant", "aurant", "urant", "rant", "ant", "nt", "t", "nasi", "asi", "si", "i", "soto", "oto", "to", "o", "padang", "adang", "dang", "ang", "ng", "g"] 
} 

...

/* 47 */ 
{ 
    "_id" : "nasi-gandul__-7.43_109.24", 
    "BuildingID" : null, 
    "Title" : "Nasi Gandul", 
    "InBuildingAddress" : null, 
    "Building" : null, 
    "Street" : "Jl. Brobahan Pr - 40 rt 004 Rw 004", 
    "Districts" : [], 
    "City" : "Purwokerto", 
    "Country" : "Indonesia", 
    "LongitudeLatitudeFromGoogle" : null, 
    "DistanceFromGoogleAddress" : 0.0, 
    "Checkin" : 0, 
    "Note" : null, 
    "PeopleCount" : 0, 
    "Prominent" : 30.5, 
    "CountViews" : 0, 
    "StreetAdditional" : null, 
    "LongitudeLatitude" : { 
    "Longitude" : 109.239182174206, 
    "Latitude" : -7.42585664273589 
    }, 
    "Rating" : { 
    "Stars" : 3.0, 
    "Weight" : 1.0 
    }, 
    "CurrentlyWorkedURL" : null, 
    "Reviews" : [], 
    "ZIP" : "53116", 
    "Tags" : ["Angkringan", "Restaurant Indonesian", "Soto & Sop"], 
    "Phones" : ["+62(281)7918181"], 
    "Website" : null, 
    "Email" : null, 
    "Price" : null, 
    "openingHour" : null, 
    "Promotions" : [], 
    "SomethingWrong" : false, 
    "BizMenus" : [], 
    "Brochures" : [], 
    "Aliases" : [], 
    "indexContents" : ["angkring", "ngkringa", "gkringan", "kringan", "ringan", "ingan", "ngan", "gan", "an", "n", "restaura", "estauran", "staurant", "taurant", "aurant", "urant", "rant", "ant", "nt", "t", "indonesi", "ndonesia", "donesian", "onesian", "nesian", "esian", "sian", "ian", "soto", "oto", "to", "o", "&", "sop", "op", "p", "nasi", "asi", "si", "i", "gandul", "andul", "ndul", "dul", "ul", "l"] 
} 

Я положил данные в Excel и вычислить расстояние по этой формуле

= SQRT (POWER (E2 - $ G $ 1,2) + POWER ((F2- ​​$ H $ 1) * COS ($ H $ 1 * PI()/180), 2))

Это очень важно приблизить сфера . Также обратите внимание, что широта -6, которая находится недалеко от экватора.

Вот результат

0.013516826 
0.023857967 
0.037658667 
0.038737146 
0.042414787 
0.046725248 
0.051006427 
0.053567221 
0.057448344 
0.061592999 
0.062329244 
0.065276161 
0.066035611 
0.076251787 
0.109671831 
0.112097201 
0.13417281 
0.136471939 
0.172293693 
1.058802838 
1.078123028 
1.079160684 
1.080954023 
1.081148114 
1.081099449 
1.092061283 
1.094281476 
1.094431917 
1.096845722 
1.097063729 
1.096953691 
1.097201996 
1.105389179 
1.105442127 
1.10839237 
1.108717834 
1.108840349 
1.111636423 
1.113187903 
1.118767984 
1.118767984 
1.133952371 
1.135077548 
1.154967917 
1.161142923 
1.185994885 
1.199509086 
2.756884824 

Вот скриншот моего первенствовать листа enter image description here

Вот фактический первенствует

  106.772835 -6.186753 
    "_id"  "nasi-uduk-soto-ayam__-6.18_106.77", 106.7656732 -6.175222309 0.013516826 
    "_id"  "nasi-soto-padang_pasar-slipi-jaya_-6.19_106.80", 106.7964756 -6.189984654 0.023857967 
    "_id"  "nasi-uduk-soto-ayam__-6.22_106.77", 106.7718959 -6.224620499 0.037658667 
    "_id"  "nasi-campur-%26-soto-babat-kenanga_komp.-ruko-permata-senayan%2C_-6.22_106.79", 106.79199 -6.22062 0.038737146 
    "_id"  "soto-mie-nasi_indomaret-(univ.-mercu-buana)_-6.21_106.74", 106.7379928 -6.211082144 0.042414787 
    "_id"  "soto-kudus%2C-soto-ayam-%26amp%3B-nasi-pindang_plaza-senayan_-6.23_106.80", 106.7989969 -6.225694167 0.046725248 
    "_id"  "soto-kudus%2C-soto-ayam-%26amp%3B-nasi-pindang_plaza-bri-ii_-6.22_106.81", 106.8136847 -6.217476287 0.051006427 
    "_id"  "soto-kudus%2C-soto-ayam-%26amp%3B-nasi-pindang_automall-indonesia_-6.23_106.81", 106.8096431 -6.225898946 0.053567221 
    "_id"  "soto-kudus%2C-soto-ayam-%26amp%3B-nasi-pindang_menara-mulia_-6.22_106.82", 106.81656 -6.224232983 0.057448344 
    "_id"  "nasi-gule-gandaria__-6.24_106.80", 106.795285 -6.244444863 0.061592999 
    "_id"  "nasi-soto-monggo-mampir__-6.24_106.80", 106.7971516 -6.244479441 0.062329244 
    "_id"  "nasi-soto-ayam-\"pak-min\"__-6.24_106.82", 106.8151546 -6.236743573 0.065276161 
    "_id"  "nasi-soto-ayam-pak-min---santa__-6.24_106.81", 106.812959 -6.239508 0.066035611 
    "_id"  "soto-mie-nasi-bogor__-6.23_106.83", 106.8322349 -6.234845139 0.076251787 
    "_id"  "nasi-uduk-soto-ayam__-6.24_106.87", 106.8693781 -6.239089942 0.109671831 
    "_id"  "soto-ayam-%2F-nasi-uduk-betawi__-6.28_106.71", 106.714092 -6.282785 0.112097201 
    "_id"  "soto-minang-roda-jaya_ruko-tongkol-indah_-6.12_106.89", 106.889044 -6.119294471 0.13417281 
    "_id"  "nasi-bebek-dan-soto-mas-muchlis_summarecon-kelapa-gading_-6.16_106.91", 106.9059021 -6.156281135 0.136471939 
    "_id"  "nasi-liwet-%26-soto-kwali-kalimalang__-6.25_106.93", 106.9338112 -6.248527508 0.172293693 
    "_id"  "soto-ayam-nasi-rames__-6.88_107.58", 107.5751638 -6.881692483 1.058802838 
    "_id"  "nasi-liwet-soto-solo_rumah-mode_-6.88_107.60", 107.5998616 -6.882452292 1.078123028 
    "_id"  "nasi-soto-ayam-madura__-6.91_107.57", 107.5749707 -6.912900474 1.079160684 
    "_id"  "nasi-soto-mie__-6.89_107.60", 107.5969434 -6.890355658 1.080954023 
    "_id"  "nasi-rames-soto-bandung-enjoi__-6.89_107.60", 107.5970721 -6.890504777 1.081148114 
    "_id"  "nasi-soto-ayam__-6.91_107.58", 107.5769877 -6.913560825 1.081099449 
    "_id"  "nasi-soto-ayam__-6.91_107.60", 107.5977552 -6.90656 1.092061283 
    "_id"  "nasi-soto-ayam-madura__-6.89_107.62", 107.6157832 -6.888615935 1.094281476 
    "_id"  "nasi-goreng-soto-ayam__-6.90_107.61", 107.6093245 -6.89662571 1.094431917 
    "_id"  "nasi-soto-gulai-kambing__-6.90_107.61", 107.6090455 -6.900715755 1.096845722 
    "_id"  "putra-bengawan-nasi-goreng-%26-soto__-6.89_107.62", 107.617187 -6.891298 1.097063729 
    "_id"  "nasi-soto-ayam__-6.90_107.61", 107.6088095 -6.901163102 1.096953691 
    "_id"  "nasi-uduk-%26amp%3B-soto-kikil-cak-khohar__-6.89_107.61", 107.6144958 -6.894765295 1.097201996 
    "_id"  "nasi-soto-ayam__-6.90_107.62", 107.6204395 -6.900453028 1.105389179 
    "_id"  "nasi-goreng-soto-ayam__-6.90_107.62", 107.6206326 -6.900303912 1.105442127 
    "_id"  "nasi-soto-ayam-madura__-6.91_107.62", 107.6169634 -6.909279174 1.10839237 
    "_id"  "nasi-soto_pasar-baru_-6.92_107.61", 107.605226 -6.923423387 1.108717834 
    "_id"  "nasi-soto-ayam-madura_pasar-baru_-6.92_107.61", 107.6053333 -6.92348729 1.108840349 
    "_id"  "nasi-soto-sarinah__-6.90_107.63", 107.631175 -6.897282 1.111636423 
    "_id"  "nasi-uduk-soto__-6.89_107.64", 107.6361465 -6.893636262 1.113187903 
    "_id"  "nasi-soto-ayam-madura__-6.91_107.63", 107.629376 -6.910677 1.118767984 
    "_id"  "nasi-soto-ayam__-6.91_107.63", 107.629376 -6.910677 1.118767984 
    "_id"  "nasi-uduk-soto__-6.94_107.62", 107.6248813 -6.93937772 1.133952371 
    "_id"  "nasi-soto-ayam-khas-madura__-6.94_107.63", 107.625749 -6.940099 1.135077548 
    "_id"  "nasi-uduk-%26amp%3B-soto__-6.96_107.64", 107.638936 -6.955310213 1.154967917 
    "_id"  "nasi-soto-ayam_ruko-metro-trade-center_-6.94_107.66", 107.6600504 -6.940208438 1.161142923 
    "_id"  "nasi-soto-ayam-khas-madura__-6.94_107.69", 107.6948118 -6.937141164 1.185994885 
    "_id"  "nasi-soto-ayam-khas-madura-cak-nonk__-6.93_107.72", 107.7156472 -6.932668019 1.199509086 
    "_id"  "nasi-gandul__-7.43_109.24", 109.2391822 -7.425856643 2.756884824 

Посмотрите еще раз термин в запросе

"$maxDistance" : 0.053980478460939611 

Перейти фигуры.

Кстати, $ maxDistance DEFINETLY правильно используется. Уменьшение этого приводит к меньшим результатам. Проблема, похоже, исходит из того, что любая формула mongodb, используемая для вычисления расстояния, является неточной.

ответ

1

Я ответил тот же пост вы сделали на stackexchange: https://dba.stackexchange.com/questions/23869/nearsphere-returns-too-many-data-what-am-i-missing-am-i-wrong-is-it-a-bug-d

ли это поможет?

Спасибо, андрей

+0

частично. Я был очень удивлен тем, что $ maxDistance находится в радиусе для $ nearSphere. –

+0

Итак, длинный лат в градусах. Если мы используем $ near, мы также указываем $ maxDistance в том же измерении, который мы указываем longlat. Но из ниоткуда, $ maxDistance находится в радине. –

Смежные вопросы