How to add BTS in database


I have some data set MCC-MNC-LAC-CID. But coordinates BTS with some these parameters absent in DB.
But they present at .
How can these BTS bee added in DB? If I walk near BTS, with included opencellID mobile application, will whey bee added in DB updates?


Yes, you can contribute the data to OpenCelliD project by installing apps like tower collector


But it was my understanding that OCID calculated the coordinates of each cell’s antenna rather than of the BTS itself (which may service more than one cell). In that case you’d never get BTS coordinates into OCID. Is that how it works or am I wrong?


OpenCelliD calculates positions of cells. A cell tower can have multiple cells.


I use a technique whereby I take all lat/long data for each of the sectors associated with a given BTS, then calculate the centroid of those sectors. I find this frequently provides the result I desire. For instance if a building is lined at the top with antennas from the same BTS, the location data for each of the sectors is often scattered all around the area (not really a surprise). However, if you take all the lat/long data for all the sectors associated with the BTS that’s serving that building, then calculate the centroid of that sector data, I get a nice, consolidated result. I’m not saying the method I’ve explained is perfect or without flaws, but I find it has served me well.


BTW, is there a way to programmatically find out which cells belong to the same tower (other than using some geographical proximity cutoff)?


Here’s a simple excel vba function I wrote that extracts the eNB or BTS from the CellID

Public Function Get_eNB_or_BTS(ByRef CellID, ByRef Radio) As String

Select Case Radio

    Case "LTE"
        'If LTE, shift the CellID right by 8 bits to extract eNB
        Get_eNB_or_BTS = CStr(Application.WorksheetFunction.Bitrshift(CellID, 8))

    Case "UMTS"
        'If CellID is at least 2 digits, then grab left digits
        'Otherwise, the BTS = CellID
        If ((CellID - 9) > 0) Then
            Get_eNB_or_BTS = Left(CStr(CellID), (Len(CStr(CellID)) - 1))
            Get_eNB_or_BTS = CStr(CellID)
        End If
    Case "GSM"
        'If GSM, the CellID is the BTS
        Get_eNB_or_BTS = CStr(CellID)
    Case "CDMA"
        'If CDMA, the CellID is the BTS
        Get_eNB_or_BTS = CStr(CellID)
End Select

End Function


I was under the impression that a single BTS could serve more than one antenna (thus in most cases there was more than a single CellID associated with the same BTS, then your function would be wrong). Can you comment a bit?

And thanks for your help!


The function I provided just extracts the BTS, eNB, etc. for a particular the cellID. Once the BTS is extracted, then I sort through all the OpenCellID records, finding other records having the same BTS. Once I find all the records with the same BTS, I calculate the centroid (using the lat/long data) using each of the individual BTS records.


I suspect I am starting from a false premise (or I am not doing a good job of explaining myself).

The concrete situation I’m facing is three-sector sites providing GSM service. Each sector has a different cell ID, and, I’m assuming, all three are hooked to the same BTS. Now, if I drive around the tower using, say, Tower Collector, I’ll get measurements for three different Cell IDs (or, using your function, three different BTS IDs) so there will be no data to calculate a centroid. Is that correct?