public ActionResult<FeatureCollection> GetStationGeoJson() { List<Station> stations = new List<Station>(){ new Station { Name = "Test1" , Lon = 121.2314 , Lat = 21.6841 }, new Station { Name = "Test2" , Lon = 122.2s4 , Lat = 21.3321 }, new Station { Name = "Test3" , Lon = 120.1314 , Lat = 21.7341 }, new Station { Name = "Test4" , Lon = 121.2324 , Lat = 22.9341 }, }; FeatureCollection fc = new FeatureCollection(); foreach (var station in stations) { Position position = new Position( longitude: station.Lon, latitude: station.Lat);
Point point = new Point(position); GeoJSON.Net.Geometry.Point p = new GeoJSON.Net.Geometry.Point(position);
Feature feature = new Feature(p, station); fc.Features.Add(feature); }
//建議寫成service抽離 private FeatureCollection getBufferGeoJson(double lon, double lat, int meter = 100) { NetTopologySuite.Geometries.Point center = new NetTopologySuite.Geometries.Point(lon, lat); //設定正規化單位(meter) //注意這段我沒有詳細驗證單位最後是否正確不過結果看起來應該是對的 double normalize = 0.00001; var buffer = center.Buffer(meter * normalize);
//轉換低階的 geojson 讓其符合 geojson.net 的規格 //主要就是要有 geojson 內的 properties NetTopologySuite.Features.Feature feature = new NetTopologySuite.Features.Feature(); feature.Geometry = buffer; feature.Attributes = new NetTopologySuite.Features.AttributesTable(); NetTopologySuite.Features.FeatureCollection fc = new NetTopologySuite.Features.FeatureCollection(); fc.Add(feature);
GeoJsonWriter writer = new GeoJsonWriter(); var geojson = writer.Write(fc);
//轉換為 geojson.net 的 geojson 格式 var result = JsonConvert.DeserializeObject<FeatureCollection>(geojson); return result; }
//包裝為 api 吐出 buffer geojson [HttpGet("BufferGeoJson/{lon}/{lat}/{meter}")] public ActionResult<FeatureCollection> GetBufferGeoJson(double lon, double lat, int meter = 100) { try { var result = getBufferGeoJson(lon, lat, meter); return Ok(result); } catch (Exception ex) { logger.LogError(ex.Message); return Problem(ex.Message); } }
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); builder.Services.AddSwaggerGenNewtonsoftSupport();
var app = builder.Build();
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); }
app.UseAuthorization();
app.MapControllers();
app.Run();
另外如果要讓你的 ip 在測試可以被打到的話可以加入下面設定 , 修改 launchSetting.json 加入後面 0.0.0.0 的部分