Geolocation WIP
This commit is contained in:
137
PBMap.pb
137
PBMap.pb
@@ -39,6 +39,11 @@ DeclareModule PBMap
|
|||||||
|
|
||||||
#MARKER_EDIT_EVENT = #PB_Event_FirstCustomValue
|
#MARKER_EDIT_EVENT = #PB_Event_FirstCustomValue
|
||||||
|
|
||||||
|
Structure GeographicCoordinates
|
||||||
|
Longitude.d
|
||||||
|
Latitude.d
|
||||||
|
EndStructure
|
||||||
|
|
||||||
;-Declarations
|
;-Declarations
|
||||||
Declare InitPBMap(window)
|
Declare InitPBMap(window)
|
||||||
Declare SetOption(Option.s, Value.s)
|
Declare SetOption(Option.s, Value.s)
|
||||||
@@ -73,17 +78,13 @@ DeclareModule PBMap
|
|||||||
Declare.i GetZoom()
|
Declare.i GetZoom()
|
||||||
Declare.i GetMode()
|
Declare.i GetMode()
|
||||||
Declare SetMode(Mode.i = #MODE_DEFAULT)
|
Declare SetMode(Mode.i = #MODE_DEFAULT)
|
||||||
|
Declare NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0) ;Send back the position *ptr.GeographicCoordinates
|
||||||
EndDeclareModule
|
EndDeclareModule
|
||||||
|
|
||||||
Module PBMap
|
Module PBMap
|
||||||
|
|
||||||
EnableExplicit
|
EnableExplicit
|
||||||
|
|
||||||
Structure GeographicCoordinates
|
|
||||||
Longitude.d
|
|
||||||
Latitude.d
|
|
||||||
EndStructure
|
|
||||||
|
|
||||||
Structure PixelCoordinates
|
Structure PixelCoordinates
|
||||||
x.i
|
x.i
|
||||||
y.i
|
y.i
|
||||||
@@ -108,7 +109,7 @@ Module PBMap
|
|||||||
ServerURL.s
|
ServerURL.s
|
||||||
EndStructure
|
EndStructure
|
||||||
|
|
||||||
Structure TileBounds
|
Structure BoundingBox
|
||||||
NorthWest.GeographicCoordinates
|
NorthWest.GeographicCoordinates
|
||||||
SouthEast.GeographicCoordinates
|
SouthEast.GeographicCoordinates
|
||||||
EndStructure
|
EndStructure
|
||||||
@@ -119,7 +120,7 @@ Module PBMap
|
|||||||
CenterY.i
|
CenterY.i
|
||||||
GeographicCoordinates.GeographicCoordinates ; Real center
|
GeographicCoordinates.GeographicCoordinates ; Real center
|
||||||
TileCoordinates.Coordinates ; Center coordinates in tile.decimal
|
TileCoordinates.Coordinates ; Center coordinates in tile.decimal
|
||||||
Bounds.TileBounds ; Drawing boundaries in lat/lon
|
Bounds.BoundingBox ; Drawing boundaries in lat/lon
|
||||||
Height.d ; Drawing height in degrees
|
Height.d ; Drawing height in degrees
|
||||||
Width.d ; Drawing width in degrees
|
Width.d ; Drawing width in degrees
|
||||||
PBMapZoom.i
|
PBMapZoom.i
|
||||||
@@ -619,7 +620,7 @@ Module PBMap
|
|||||||
ClosePreferences()
|
ClosePreferences()
|
||||||
EndWith
|
EndWith
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
Procedure.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18)
|
Procedure.i AddMapServerLayer(LayerName.s, Order.i, ServerURL.s = "http://tile.openstreetmap.org/", TileSize = 256, ZoomMin = 0, ZoomMax = 18)
|
||||||
Protected *Ptr = AddElement(PBMap\Layers())
|
Protected *Ptr = AddElement(PBMap\Layers())
|
||||||
Protected DirName.s = PBMap\Options\HDDCachePath + LayerName + "\"
|
Protected DirName.s = PBMap\Options\HDDCachePath + LayerName + "\"
|
||||||
@@ -1757,6 +1758,44 @@ Module PBMap
|
|||||||
ProcedureReturn Value
|
ProcedureReturn Value
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
|
Procedure NominatimGeoLocationQuery(Address.s, *ReturnPosition.GeographicCoordinates = 0)
|
||||||
|
Protected Query.s = "http://nominatim.openstreetmap.org/search/" +
|
||||||
|
URLEncoder(Address) +
|
||||||
|
;"Unter%20den%20Linden%201%20Berlin" +
|
||||||
|
"?format=json&addressdetails=0&polygon=0&limit=1"
|
||||||
|
Protected JSONFileName.s = PBMap\Options\HDDCachePath + "nominatimresponse.json"
|
||||||
|
; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword)
|
||||||
|
; Debug *Buffer
|
||||||
|
; Debug MemorySize(*Buffer)
|
||||||
|
; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
|
||||||
|
Protected Size.i = CurlReceiveHTTPToFile(Query, JSONFileName, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword)
|
||||||
|
If LoadJSON(0, JSONFileName) = 0
|
||||||
|
;Demivec's code
|
||||||
|
MyDebug( JSONErrorMessage() + " at position " +
|
||||||
|
JSONErrorPosition() + " in line " +
|
||||||
|
JSONErrorLine() + " of JSON web Data", 1)
|
||||||
|
EndIf
|
||||||
|
If JSONArraySize(JSONValue(0)) > 0
|
||||||
|
Protected object_val = GetJSONElement(JSONValue(0), 0)
|
||||||
|
Protected object_box = GetJSONMember(object_val, "boundingbox")
|
||||||
|
Protected bbox.BoundingBox
|
||||||
|
bbox\SouthEast\Latitude = ValD(GetJSONString(GetJSONElement(object_box, 0)))
|
||||||
|
bbox\NorthWest\Latitude = ValD(GetJSONString(GetJSONElement(object_box, 1)))
|
||||||
|
bbox\NorthWest\Longitude = ValD(GetJSONString(GetJSONElement(object_box, 2)))
|
||||||
|
bbox\SouthEast\Longitude = ValD(GetJSONString(GetJSONElement(object_box, 3)))
|
||||||
|
Protected lat.s = GetJSONString(GetJSONMember(object_val, "lat"))
|
||||||
|
Protected lon.s = GetJSONString(GetJSONMember(object_val, "lon"))
|
||||||
|
If *ReturnPosition <> 0
|
||||||
|
*ReturnPosition\Latitude = ValD(lat)
|
||||||
|
*ReturnPosition\Longitude = ValD(lon)
|
||||||
|
EndIf
|
||||||
|
If lat<> "" And lon <> ""
|
||||||
|
ZoomToArea(bbox\SouthEast\Latitude, bbox\NorthWest\Latitude, bbox\NorthWest\Longitude, bbox\SouthEast\Longitude)
|
||||||
|
;SetLocation(Position\Latitude, Position\Longitude)
|
||||||
|
EndIf
|
||||||
|
EndIf
|
||||||
|
EndProcedure
|
||||||
|
|
||||||
Procedure CanvasEvents()
|
Procedure CanvasEvents()
|
||||||
Protected MouseX.i, MouseY.i
|
Protected MouseX.i, MouseY.i
|
||||||
Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize
|
Protected MarkerCoords.PixelCoordinates, *Tile.Tile, MapWidth = Pow(2, PBMap\Zoom) * PBMap\TileSize
|
||||||
@@ -2018,37 +2057,6 @@ Module PBMap
|
|||||||
curl_global_init(#CURL_GLOBAL_WIN32)
|
curl_global_init(#CURL_GLOBAL_WIN32)
|
||||||
TechnicalImagesCreation()
|
TechnicalImagesCreation()
|
||||||
SetLocation(0, 0)
|
SetLocation(0, 0)
|
||||||
|
|
||||||
Protected Name.s = PBMap\Options\HDDCachePath + "JSon.json"
|
|
||||||
|
|
||||||
; Protected *Buffer = CurlReceiveHTTPToMemory("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword)
|
|
||||||
; Debug *Buffer
|
|
||||||
; Debug MemorySize(*Buffer)
|
|
||||||
; Protected JSon.s = PeekS(*Buffer, MemorySize(*Buffer), #PB_UTF8)
|
|
||||||
; If *Buffer <> 0
|
|
||||||
; Debug JSon
|
|
||||||
; EndIf
|
|
||||||
Protected i
|
|
||||||
;Protected Size.i = CurlReceiveHTTPToFile("http://nominatim.openstreetmap.org/search/Unter%20den%20Linden%201%20Berlin?format=json&addressdetails=1&limit=1&polygon_svg=1", Name, PBMap\Options\ProxyURL, PBMap\Options\ProxyPort, PBMap\Options\ProxyUser, PBMap\Options\ProxyPassword)
|
|
||||||
If LoadJSON(0, Name) = 0
|
|
||||||
;Demivec's code
|
|
||||||
MessageRequester("Error", JSONErrorMessage() + " at position " +
|
|
||||||
JSONErrorPosition() + " in line " +
|
|
||||||
JSONErrorLine() + " of JSON web Data")
|
|
||||||
EndIf
|
|
||||||
|
|
||||||
Protected object_val = JSONValue(0)
|
|
||||||
Protected lat = GetJSONMember(object_val, "lat")
|
|
||||||
Protected lon = GetJSONMember(object_val, "lon")
|
|
||||||
CallDebugger
|
|
||||||
; forecast_mem = GetJSONMember(item_mem, "forecast")
|
|
||||||
|
|
||||||
; ExtractJSONArray(forecast_mem, forecast())
|
|
||||||
; For i = 0 To JSONArraySize(JSONValue(0)) - 1
|
|
||||||
; Debug GetJSONElement(JSONValue(0), i)
|
|
||||||
; Next i
|
|
||||||
|
|
||||||
|
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
EndModule
|
EndModule
|
||||||
@@ -2079,6 +2087,8 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
#Gdt_AddOpenseaMap
|
#Gdt_AddOpenseaMap
|
||||||
#Gdt_Degrees
|
#Gdt_Degrees
|
||||||
#Gdt_EditMode
|
#Gdt_EditMode
|
||||||
|
#TextGeoLocationQuery
|
||||||
|
#StringGeoLocationQuery
|
||||||
EndEnumeration
|
EndEnumeration
|
||||||
|
|
||||||
Structure Location
|
Structure Location
|
||||||
@@ -2129,14 +2139,16 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
ResizeGadget(#Button_4,WindowWidth(#Window_0)-150,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Button_4,WindowWidth(#Window_0)-150,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Button_5,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Button_5,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Text_3,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Text_3,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#StringLatitude,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#StringLatitude,WindowWidth(#Window_0)-120,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#StringLongitude,WindowWidth(#Window_0)-100,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#StringLongitude,WindowWidth(#Window_0)-120,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Text_4,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Text_4,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Gdt_AddMarker,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Gdt_AddMarker,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Gdt_LoadGpx,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Gdt_LoadGpx,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Gdt_AddOpenseaMap,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Gdt_AddOpenseaMap,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Gdt_Degrees,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Gdt_Degrees,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
ResizeGadget(#Gdt_EditMode,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
ResizeGadget(#Gdt_EditMode,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
|
ResizeGadget(#TextGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
|
ResizeGadget(#StringGeoLocationQuery,WindowWidth(#Window_0)-170,#PB_Ignore,#PB_Ignore,#PB_Ignore)
|
||||||
PBMap::Refresh()
|
PBMap::Refresh()
|
||||||
EndProcedure
|
EndProcedure
|
||||||
|
|
||||||
@@ -2154,15 +2166,19 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
TextGadget(#Text_2, 530, 160, 60, 15, "Zoom")
|
TextGadget(#Text_2, 530, 160, 60, 15, "Zoom")
|
||||||
ButtonGadget(#Button_4, 550, 180, 50, 30, " + ") : SetGadgetFont(#Button_4, FontID(1))
|
ButtonGadget(#Button_4, 550, 180, 50, 30, " + ") : SetGadgetFont(#Button_4, FontID(1))
|
||||||
ButtonGadget(#Button_5, 600, 180, 50, 30, " - ") : SetGadgetFont(#Button_5, FontID(1))
|
ButtonGadget(#Button_5, 600, 180, 50, 30, " - ") : SetGadgetFont(#Button_5, FontID(1))
|
||||||
TextGadget(#Text_3, 530, 230, 60, 15, "Latitude : ")
|
TextGadget(#Text_3, 530, 230, 50, 15, "Latitude ")
|
||||||
StringGadget(#StringLatitude, 600, 230, 90, 20, "")
|
StringGadget(#StringLatitude, 580, 230, 90, 20, "")
|
||||||
TextGadget(#Text_4, 530, 250, 60, 15, "Longitude : ")
|
TextGadget(#Text_4, 530, 250, 50, 15, "Longitude ")
|
||||||
StringGadget(#StringLongitude, 600, 250, 90, 20, "")
|
StringGadget(#StringLongitude, 580, 250, 90, 20, "")
|
||||||
ButtonGadget(#Gdt_AddMarker, 530, 280, 150, 30, "Add Marker")
|
ButtonGadget(#Gdt_AddMarker, 530, 280, 150, 30, "Add Marker")
|
||||||
ButtonGadget(#Gdt_LoadGpx, 530, 310, 150, 30, "Load GPX")
|
ButtonGadget(#Gdt_LoadGpx, 530, 310, 150, 30, "Load GPX")
|
||||||
ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "Show/Hide OpenSeaMap", #PB_Button_Toggle)
|
ButtonGadget(#Gdt_AddOpenseaMap, 530, 340, 150, 30, "Show/Hide OpenSeaMap", #PB_Button_Toggle)
|
||||||
ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle)
|
ButtonGadget(#Gdt_Degrees, 530, 370, 150, 30, "Show/Hide Degrees", #PB_Button_Toggle)
|
||||||
ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit mode ON/OFF", #PB_Button_Toggle)
|
ButtonGadget(#Gdt_EditMode, 530, 400, 150, 30, "Edit mode ON/OFF", #PB_Button_Toggle)
|
||||||
|
TextGadget(#TextGeoLocationQuery, 530, 435, 150, 15, "Enter an address")
|
||||||
|
StringGadget(#StringGeoLocationQuery, 530, 450, 150, 20, "")
|
||||||
|
SetActiveGadget(#StringGeoLocationQuery)
|
||||||
|
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1)
|
||||||
|
|
||||||
Define Event.i, Gadget.i, Quit.b = #False
|
Define Event.i, Gadget.i, Quit.b = #False
|
||||||
Define pfValue.d
|
Define pfValue.d
|
||||||
@@ -2206,7 +2222,10 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0))
|
PBMap::LoadGpxFile(OpenFileRequester("Choose a file to load", "", "Gpx|*.gpx", 0))
|
||||||
Case #StringLatitude, #StringLongitude
|
Case #StringLatitude, #StringLongitude
|
||||||
Select EventType()
|
Select EventType()
|
||||||
|
Case #PB_EventType_Focus
|
||||||
|
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1)
|
||||||
Case #PB_EventType_LostFocus
|
Case #PB_EventType_LostFocus
|
||||||
|
RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return)
|
||||||
PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates
|
PBMap::SetLocation(ValD(GetGadgetText(#StringLatitude)), ValD(GetGadgetText(#StringLongitude))) ; Change the PBMap coordinates
|
||||||
PBMap::Refresh()
|
PBMap::Refresh()
|
||||||
EndSelect
|
EndSelect
|
||||||
@@ -2235,10 +2254,24 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
PBMap::SetMode(PBMap::#MODE_DEFAULT)
|
PBMap::SetMode(PBMap::#MODE_DEFAULT)
|
||||||
SetGadgetState(#Gdt_EditMode, 0)
|
SetGadgetState(#Gdt_EditMode, 0)
|
||||||
EndIf
|
EndIf
|
||||||
EndSelect
|
Case #StringGeoLocationQuery
|
||||||
Case #PB_Event_SizeWindow
|
Select EventType()
|
||||||
ResizeAll()
|
Case #PB_EventType_Focus
|
||||||
EndSelect
|
AddKeyboardShortcut(#Window_0, #PB_Shortcut_Return, 1)
|
||||||
|
Case #PB_EventType_LostFocus
|
||||||
|
RemoveKeyboardShortcut(#Window_0, #PB_Shortcut_Return)
|
||||||
|
PBMap::NominatimGeoLocationQuery(GetGadgetText(#StringGeoLocationQuery))
|
||||||
|
PBMap::Refresh()
|
||||||
|
EndSelect
|
||||||
|
EndSelect
|
||||||
|
Case #PB_Event_SizeWindow
|
||||||
|
ResizeAll()
|
||||||
|
Case #PB_Event_Menu
|
||||||
|
Select EventMenu()
|
||||||
|
Case 1
|
||||||
|
SetActiveGadget(-1)
|
||||||
|
EndSelect
|
||||||
|
EndSelect
|
||||||
Until Quit = #True
|
Until Quit = #True
|
||||||
|
|
||||||
PBMap::Quit()
|
PBMap::Quit()
|
||||||
@@ -2247,8 +2280,8 @@ CompilerIf #PB_Compiler_IsMainFile
|
|||||||
CompilerEndIf
|
CompilerEndIf
|
||||||
|
|
||||||
; IDE Options = PureBasic 5.50 (Windows - x64)
|
; IDE Options = PureBasic 5.50 (Windows - x64)
|
||||||
; CursorPosition = 2039
|
; CursorPosition = 2183
|
||||||
; FirstLine = 2023
|
; FirstLine = 2166
|
||||||
; Folding = ---------------
|
; Folding = ---------------
|
||||||
; EnableThread
|
; EnableThread
|
||||||
; EnableXP
|
; EnableXP
|
Reference in New Issue
Block a user