如何在C#地理编码方法中返回独立的纬度与经度字符串?
修改方案
要让方法返回独立的纬度和经度字符串,而非合并后的单个字符串,你可以通过以下几种方式实现:
方法1:使用out参数带出纬度和经度
修改方法签名,用out参数传递纬度和经度,方法返回状态信息:
static string GeoCoding(string address, out string latitude, out string longitude) { // 初始化out参数 latitude = string.Empty; longitude = string.Empty; var json = new WebClient().DownloadString(baseUrlGC + address.Replace(" ", "+") + plusUrl); GoogleGeoCodeResponse jsonResult = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(json); string status = jsonResult.status; if (status == "OK") { // 取第一个结果(原代码循环会覆盖变量,最终仅保留最后一个结果,可按需调整逻辑) var location = jsonResult.results[0].geometry.location; latitude = location.lat.ToString(); longitude = location.lng.ToString(); } return status; }
调用示例:
string lat, lng; string status = GeoCoding("目标地址", out lat, out lng); if(status == "OK") { // 使用lat和lng进行后续操作 }
方法2:返回ValueTuple(C# 7.0及以上版本支持)
直接返回包含状态、纬度、经度的元组,写法更简洁:
static (string status, string latitude, string longitude) GeoCoding(string address) { string latitude = string.Empty; string longitude = string.Empty; var json = new WebClient().DownloadString(baseUrlGC + address.Replace(" ", "+") + plusUrl); GoogleGeoCodeResponse jsonResult = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(json); string status = jsonResult.status; if (status == "OK") { var location = jsonResult.results[0].geometry.location; latitude = location.lat.ToString(); longitude = location.lng.ToString(); } return (status, latitude, longitude); }
调用示例:
var result = GeoCoding("目标地址"); if(result.status == "OK") { string lat = result.latitude; string lng = result.longitude; // 处理逻辑 }
方法3:自定义返回类(适合复杂扩展场景)
如果后续需要增加返回字段,自定义类的扩展性更强:
public class GeoCodeResult { public string Status { get; set; } public string Latitude { get; set; } public string Longitude { get; set; } } static GeoCodeResult GeoCoding(string address) { var result = new GeoCodeResult(); var json = new WebClient().DownloadString(baseUrlGC + address.Replace(" ", "+") + plusUrl); GoogleGeoCodeResponse jsonResult = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(json); result.Status = jsonResult.status; if (result.Status == "OK") { var location = jsonResult.results[0].geometry.location; result.Latitude = location.lat.ToString(); result.Longitude = location.lng.ToString(); } return result; }
调用示例:
GeoCodeResult geoResult = GeoCoding("目标地址"); if(geoResult.Status == "OK") { // 使用geoResult.Latitude和geoResult.Longitude }
额外提示
- 原代码的循环会持续覆盖
geoLocation变量,最终仅返回最后一个结果的坐标,上述示例默认取第一个结果,若需处理多组坐标,可返回List<(string lat, string lng)>类型的集合。 WebClient已被标记为过时,建议改用HttpClient发送请求,避免资源占用和性能问题。
内容的提问来源于stack exchange,提问作者user20129051
相关产品推荐
相关产品推荐

