{"id":21530798,"url":"https://github.com/r0mb0/permanent-satellite","last_synced_at":"2026-03-04T13:30:51.983Z","repository":{"id":47316515,"uuid":"306351933","full_name":"R0mb0/Permanent-satellite","owner":"R0mb0","description":"Relative system of orientation using the permanent satellite technique. ","archived":false,"fork":false,"pushed_at":"2025-04-30T14:36:03.000Z","size":4646,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-05T09:51:56.968Z","etag":null,"topics":["csharp","distance-calculation","gps-coordinates","gps-coordinates-conversion","italian-developers","italian-language","location-estimation","r0mb0","university-project"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/R0mb0.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":"SECURITY.md","support":"SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":"PayPal.Me/R0mb0"}},"created_at":"2020-10-22T13:47:54.000Z","updated_at":"2025-04-30T14:36:07.000Z","dependencies_parsed_at":"2025-06-02T23:04:17.278Z","dependency_job_id":null,"html_url":"https://github.com/R0mb0/Permanent-satellite","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/R0mb0/Permanent-satellite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/R0mb0%2FPermanent-satellite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/R0mb0%2FPermanent-satellite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/R0mb0%2FPermanent-satellite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/R0mb0%2FPermanent-satellite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/R0mb0","download_url":"https://codeload.github.com/R0mb0/Permanent-satellite/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/R0mb0%2FPermanent-satellite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30081402,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T13:22:36.021Z","status":"ssl_error","status_checked_at":"2026-03-04T13:20:45.750Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","distance-calculation","gps-coordinates","gps-coordinates-conversion","italian-developers","italian-language","location-estimation","r0mb0","university-project"],"created_at":"2024-11-24T02:10:18.208Z","updated_at":"2026-03-04T13:30:51.950Z","avatar_url":"https://github.com/R0mb0.png","language":"C#","funding_links":["PayPal.Me/R0mb0","http://paypal.me/R0mb0"],"categories":[],"sub_categories":[],"readme":"Urbino`s University - Applied computer science - P.M.O\n\n# P.M.O-Project\n\nProject Title:    Relative system of orientation to permanent satellite.\u003cbr\u003e\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/e8176b3130eb4b2f857331d7491aa595)](https://app.codacy.com/gh/R0mb0/Permanent-satellite/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/R0mb0/Permanent-satellite)\n[![Open Source Love svg3](https://badges.frapsoft.com/os/v3/open-source.svg?v=103)](https://github.com/R0mb0/Permanent-satellite)\n[![Donate](https://img.shields.io/badge/PayPal-Donate%20to%20Author-blue.svg)](http://paypal.me/R0mb0)\n\n## Project Specifications\n\nThe project objective is to realize a program that semplify the normal procedures of the tecnique of relative orientation to permanent satellite.\u003cbr\u003e\nThis programm will be able to register the surveys into a database, auomatically create the nodes from each survey, calculate the properties of each nodes, \nrepresent graphically into a gray map all properties calculated and save into a file the current status of the program.\n\n____\n\n## Project Problems \n\n### The problems of this project are:\u003cbr\u003e\n\n- #### How to generalize a detection\n\nA detection is a group of dates that enable to uniquely establish a posiction into the world, in this case the most important dates are the Latitude and the Longitude; \nbut in this case there are other important dates, because the goal of this program is keep a track of a route; for this reason is important to insert into a detection: \nthe time of the current detection, the angle of the compass and the altitude of the place.\u003cbr\u003e\nIn this way from two detection is possible calculate the travelled distance, the speed and the direction. Particulary the altitude and the compass angle are usefull \nto increase the precision of the dates.\u003cbr\u003e\nFor this reason has been implemented a Point class that permit to track these important dates; in this case for to salve the latitude and the longitude has been introduced \nthe Latitude type and the Longitude type, either generating an exception when the information inserted into are wrong.\n\n- #### How to create the nodes that respecting the permanent satellite tecnique\n\nTo solve this problem has been created a specific algoritm that create the nodes in way to every \"normal\" detection have a node with the  previous detection \nand with the \"special\" detection.\u003cbr\u003e\nThe \"special\" detection rappresent the meeting point, the meeting point rappresent the only known point (in sense that this point rappresent the place user knowed); \nin this way is alwais possible have the information to come back towards the meeting point.\n\n- #### How to calculate the node properties\n\nThe Node properties are implemented into the node type, this class contain the detection of the node and the respective properties that are calculate using a GPS standard formulas\n.\u003cbr\u003e\nThe Properties of each nodes are: the distance, the speed, the direction, the time/altitude difference. \n\n- #### How to salve the program status\n\nThe programm status is salved into a doc database, that will be seriallizated using the JSON strategy.\n\n- #### How to create a Graphical User Interface\u003cbr\u003e\n\nThe \"Gui\" is builted using Windows Form, the gui permitt to do a detection, to delete a detecion, to salve the current database status, to load the last database status\nand obtain the advanced properties.\u003cbr\u003e\nAlso is possible obtain the status of the program through the gray map (always builted using windows form).\n\n- #### How to rappresent the detections and the nodes into a dinamic grey map\n\nThe gray map goal is to rappresent the nodes and the detections into a scale space where is possible have a idea of the area.\u003cbr\u003e\nFor this reason the gray map must calculate the max/min Latitudes and Longitudes (in indipendent way), in way to determinate the area idea; later this it must rappresent all the detections\nand the nodes (in scale compareted to the extremes of the latitudes and longitudes) with the corrispettive properties.\u003cbr\u003e\nThe gray map has been created using Windows Form.\n\n____\n\n## Architectural choices\n\n### Logic And Math classes\n\nThe mission durig the \"LogicAndMath\" class production is to create classes that are riutilizabilies in other ccontest, in way to do this the Latitude and Longitude class extending the \norigin class.\u003cbr\u003e\nThe Origin class has the task to register the fondamental part of a satellite coordinate, this fondamental part is specialized into the Latitude and Longitude class,\nin way to no register not compatibilies coordinates.\u003cbr\u003e\nThe Point use the Latitude and Longitude types in way to register a correct posiction, the point is like a detection, for this reason also register the time, the directon,\nand the altitude.\u003cbr\u003e\nThe Node use two Point to calculate the properties about the two detection; the properties are calcolated using a external class, the class task is to implement \nthe GPS standard formulas.\u003cbr\u003e\nIn this way every class solve only one problem, this permitt the reusability.\u003cbr\u003e\n\n![LogicAndMath UML:](https://github.com/RomboUrbex/SatellitePermanente/blob/Report/SatellitePermanente/SatellitePermanente/Report/UML/LogicAndMath_UML.jpg)\n\n### Database Classes\n\nThe Database implement the Singleton Pattern (because must exist only one database for contain the dates), the Decorator Pattern (because in the program existing more database version that depending to the functiones) and the Observer (in way to notify the status of the current database into the other part of the program).\u003cbr\u003e\nThe database has been generated in a modular mode, in way to use only the request function, for example: use only the origin database structures in way to serialize the most important dates.\u003cbr\u003e\nThe origin of the database extend the MaxCoordinate class (that contain the Latitude/Longitude extremes) and contain the Point list and the Node list, in way to get the most important dates to serialize.\u003cbr\u003e\nThe second part of the database is named \"Normal Database\" because this is the official database that make the operation for adding point (and create the corresponding nodes), it work tracking four states of insertion points: 1: when the first added point is a normal point, 2: when the first added point is a meeting point, 3: when the meeting point is added after a list of normal point, 4: when is added a normal point after a meeting point.\u003cbr\u003e\nThe \"Normal Database\" is used into the \"Database With Rescue\" to adding the loading and the saving of the current database; the current state of the database is copied into the \"Rescue\" class, this class has been used for serialize and deserialize the database status using the Json strategy.\u003cbr\u003e\n\n![Database UML:](https://github.com/RomboUrbex/SatellitePermanente/blob/Report/SatellitePermanente/SatellitePermanente/Report/UML/Database_UML.jpg)\u003cbr\u003e\n\nThe Observer Pattern has been implemented using other classes, The \"DatabseObserver\" class implementing  the subject (in this case the subject observing the current database istance) of the pattern with the possibility to register, remove and updet the observer that are defined through the observer interface; the last class implement the observer interface.\u003cbr\u003e\n\n![Observer UML:](https://github.com/RomboUrbex/SatellitePermanente/blob/Report/SatellitePermanente/SatellitePermanente/Report/UML/Observer_UML.jpg)\u003cbr\u003e\n\n\n### Gui Classes\n\nThe Gui is formated by a main screen (Named Monitor) that launch the other screen in way to permitt the program action.\u003cbr\u003e\nThe \"Monitor\" recieve the information by other class in way to complete the action, in fact only the \"Monitor\" can interact with the database; the other classes passing the information into the monitor unsing a \"bridge class\" that permit the over comication.\u003cbr\u003e\n\n![GUIL:](https://github.com/RomboUrbex/SatellitePermanente/blob/Report/SatellitePermanente/SatellitePermanente/Report/UML/GUI_UML.jpg)\u003cbr\u003e\n\n____\n## Usage documentation\n\nWhen the programm is launched the first screen that appear is the main screen where is present the gray map and the buttons for the acctions.\u003cbr\u003e\n- The Button \"Add Point\" permitt to do a detection, into the \"Add Point\" screeen the balck fields are obligatory, the yellow fileds are optional, in case of wrong \nentry going to appear a screen error (with the description of the error).\u003cbr\u003e\n- The Button \"Delete Point\" show a table that contain all the inserted detection, choosing the name or the number of the detection and clicking on the delete button is possible to delete a detection.\u003cbr\u003e\nIf into the database there aren`t detection the user is unbale to open the delete point screen.\u003cbr\u003e\n- The Save Button permitt to salve the current status of the programm. (In case of none detection programm will save a blank file)\u003cbr\u003e\n- The Load Button loading the last database istance. (afther the loading of the istance is possible to add or delette the detections, then salving other istance of the database).\u003cbr\u003e\n- The Table button show the tables with the advance dates that not appear into the gray map. (even in this case if there arent detections into the database the user can`t acess into the \"Table screen\")\u003cbr\u003e\n____\n## Use Cases\n\nSince the program is implemented for a specific problem the use diagram could be too simple, for this reason will be used a discursive version to illustrate the use case.\u003cbr\u003e\n\n___\n\nThis program was created to solve the problem of orientation into the not mapped placed, in fact the program not permitt other type of uses.\u003cbr\u003e\nThe user should does a detection every twenty minutes (max every half of a hour), in way to have more precision dates (in every time is possible to delete a error detection), the programm going to calculate all the properties that are usefull for the orientation, in case of user perplexity he can whatch the calculated dates.\n\n#### USE CASE\n\nNormal program use\n\n#### ID\n\nUC1\n\n#### ACTOR\n\nUser\n\n#### PRECONDITION\n\n- User launch the programm.\n\n#### BASIC COURSE OF EVENTS\n\n1. User do a detection or load the last database.\n2. User add a detection or remove a wrong/useless detection.\n3. User save the Program status.\n\n#### POSTCONDITION\n\n- User gets all trip properties for every detection.\n  \n#### ALTERNATIVE PATHS\n\n1. User use the calculate propterties to sing into a paper map the detections.\n2. User use the registered dates to make a map of the place.\n\n____\n\n## Feedback\n\nThe program has been survey by some professionist of cartography, they have contributed to the programm checking the correct implementation of the formulas used and the correct rappresentation of the detection into a scales grey map.\u003cbr\u003e\nIn conclusion this programm respect the GPS standard and it could be used how a orientation strument together a professional strument support.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr0mb0%2Fpermanent-satellite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fr0mb0%2Fpermanent-satellite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fr0mb0%2Fpermanent-satellite/lists"}