{"id":2730,"date":"2025-12-24T10:00:05","date_gmt":"2025-12-24T15:00:05","guid":{"rendered":"https:\/\/www.mymiller.name\/wordpress\/?p=2730"},"modified":"2025-12-24T10:00:05","modified_gmt":"2025-12-24T15:00:05","slug":"geo-line","status":"publish","type":"post","link":"https:\/\/www.mymiller.name\/wordpress\/geo\/geo-line\/","title":{"rendered":"Geo &#8211; Line"},"content":{"rendered":"\n<p>One of the simplest shapes we can make is GeoLine. It consists of two GeoLocations the start, and end of the line.  The line is the simplest of shapes but is used by other shapes to make their structure.  <\/p>\n\n\n\n<div class=\"wp-block-coblocks-gist\"><script src=\"https:\/\/gist.github.com\/Ghost-Programmer\/82b56767e6f2b0cf67587acfee2bf09d.js\"><\/script><noscript><a href=\"https:\/\/gist.github.com\/Ghost-Programmer\/82b56767e6f2b0cf67587acfee2bf09d\">View this gist on GitHub<\/a><\/noscript><\/div>\n","protected":false},"excerpt":{"rendered":"<p>One of the simplest shapes we can make is GeoLine. It consists of two GeoLocations the start, and end of the line. The line is the simplest of shapes but is used by other shapes to make their structure.<\/p>\n","protected":false},"author":1,"featured_media":2722,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[454],"tags":[291],"series":[288],"class_list":["post-2730","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-geo","tag-geo","series-geo"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/chart-1110428_640.jpg?fit=640%2C257&ssl=1","jetpack-related-posts":[{"id":2732,"url":"https:\/\/www.mymiller.name\/wordpress\/geo\/geo-path\/","url_meta":{"origin":2730,"position":0},"title":"Geo &#8211; Path","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Once you have GeoLocations, you can then make shapes for them. So we create a GeoShape Interface that allows us to define our shape. View this gist on GitHub We implement a forEach() method to be able to act on each location in the shape, and a getGeoPath() to return\u2026","rel":"","context":"In &quot;Geo&quot;","block_context":{"text":"Geo","link":"https:\/\/www.mymiller.name\/wordpress\/category\/geo\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/treasure-map-1850653_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/treasure-map-1850653_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/treasure-map-1850653_640.jpg?fit=640%2C426&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":2734,"url":"https:\/\/www.mymiller.name\/wordpress\/geo\/geo-fence\/","url_meta":{"origin":2730,"position":1},"title":"Geo &#8211; Fence","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Every need to define an area and determine if a location is within that range? This is called a GeoFence. Very handy and useful for any kind of GPS tracking. Define the GeoFence area, then you can use checkInside() to see if a GeoLocation is inside or outside of the\u2026","rel":"","context":"In &quot;Geo&quot;","block_context":{"text":"Geo","link":"https:\/\/www.mymiller.name\/wordpress\/category\/geo\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/map-2789052_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/map-2789052_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/map-2789052_640.jpg?fit=640%2C426&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":2726,"url":"https:\/\/www.mymiller.name\/wordpress\/geo\/geo-latitude-longitude\/","url_meta":{"origin":2730,"position":2},"title":"Geo &#8211; Latitude &#038; Longitude","author":"Jeffery Miller","date":"December 23, 2025","format":false,"excerpt":"Latitude and Longitude implementation for Geo API.","rel":"","context":"In &quot;Geo&quot;","block_context":{"text":"Geo","link":"https:\/\/www.mymiller.name\/wordpress\/category\/geo\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/globe-71443_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/globe-71443_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/globe-71443_640.jpg?fit=640%2C426&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":2728,"url":"https:\/\/www.mymiller.name\/wordpress\/geo\/geo-location\/","url_meta":{"origin":2730,"position":3},"title":"Geo &#8211; Location","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"So we have Latitude and Longitude, putting those together we have a location now. That is simple enough, but once we have a location, we can use that to derive other locations. Deriving new locations We create the addDistanceEast(), addDistanceWest(), addDistanceNorth(), and addDistanceSouth() methods to generate a new location-based on\u2026","rel":"","context":"In &quot;Geo&quot;","block_context":{"text":"Geo","link":"https:\/\/www.mymiller.name\/wordpress\/category\/geo\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/street-map-2679271_640.jpg?fit=640%2C332&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/street-map-2679271_640.jpg?fit=640%2C332&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2020\/04\/street-map-2679271_640.jpg?fit=640%2C332&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3922,"url":"https:\/\/www.mymiller.name\/wordpress\/spng_security\/beyond-rbac-spring-security-6-oauth-2-1-and-the-zero-trust-evolution\/","url_meta":{"origin":2730,"position":4},"title":"Beyond RBAC: Spring Security 6, OAuth 2.1, and the Zero-Trust Evolution","author":"Jeffery Miller","date":"November 19, 2025","format":false,"excerpt":"The journey to Zero Trust (ZT) is an ongoing architectural evolution, not a single deployment. While the foundational principles\u2014never trust, always verify\u2014are clear, implementing them in a distributed microservice environment requires rigorous adherence to modern standards. For Spring architects and developers, Spring Security 6 and the Spring Authorization Server provide\u2026","rel":"","context":"In &quot;Spring Security&quot;","block_context":{"text":"Spring Security","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spng_security\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/coding-1841550_1280.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/coding-1841550_1280.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/coding-1841550_1280.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/coding-1841550_1280.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/11\/coding-1841550_1280.avif 3x"},"classes":[]},{"id":2768,"url":"https:\/\/www.mymiller.name\/wordpress\/misc\/shell-script-command-line-arguments\/","url_meta":{"origin":2730,"position":5},"title":"Shell Script Command Line Arguments","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Obviously you do not want to add your Username\/Password to scripts so how can you enter those and make use of execute_cmd and sftp_file without them?\u00a0 Simple provide them as command line arguments in your master script that organizes all the steps. #!\/bin\/bash usage() { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 echo \"Usage: $0 [-u\u2026","rel":"","context":"In &quot;Miscellaneous&quot;","block_context":{"text":"Miscellaneous","link":"https:\/\/www.mymiller.name\/wordpress\/category\/misc\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2022\/01\/bash-g44a7c159f_640.png?fit=640%2C506&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2022\/01\/bash-g44a7c159f_640.png?fit=640%2C506&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2022\/01\/bash-g44a7c159f_640.png?fit=640%2C506&ssl=1&resize=525%2C300 1.5x"},"classes":[]}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/2730","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/comments?post=2730"}],"version-history":[{"count":4,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/2730\/revisions"}],"predecessor-version":[{"id":2758,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/2730\/revisions\/2758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media\/2722"}],"wp:attachment":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media?parent=2730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/categories?post=2730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/tags?post=2730"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/series?post=2730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}